diff --git a/.gitignore b/.gitignore index b9baac178..bebfdacf5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /openwrt -/keys -/cloud/app/log/ +/openwrt-20.x diff --git a/config-20.x.yml b/config-20.x.yml new file mode 100644 index 000000000..504188bcb --- /dev/null +++ b/config-20.x.yml @@ -0,0 +1,7 @@ +repo: https://github.com/openwrt/openwrt.git +branch: master +revision: 36db12b883e581c9cdbb79395c2d9316d820cbbd +output_dir: ./output + +patch_folders: + - patches-20.x/ diff --git a/feeds/bluetooth/bluetooth-6lowpand/Makefile b/feeds/bluetooth/bluetooth-6lowpand/Makefile new file mode 100644 index 000000000..646fc3e8e --- /dev/null +++ b/feeds/bluetooth/bluetooth-6lowpand/Makefile @@ -0,0 +1,53 @@ +# +# Copyright (C) 2016 Nordic Semiconductor ASA. +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=bluetooth-6lowpand +PKG_VERSION:=0.0.1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_URL:=https://github.com/NordicSemiconductor/Linux-ble-6lowpan-joiner.git +PKG_SOURCE_VERSION:=5ce5b248846a6d4ac4a609eb0e8d023cf920b247 +PKG_SOURCE_PROTO:=git + +BLUEZ_DIR:=$(wildcard $(BUILD_DIR)/bluez-*) + +TARGET_CFLAGS += -I$(BLUEZ_DIR) +TARGET_LDFLAGS += -L$(BLUEZ_DIR)/lib/.libs/ -L$(BLUEZ_DIR)/src/.libs/ -lshared-mainloop -lbluetooth-internal + +include $(INCLUDE_DIR)/package.mk + +define Package/bluetooth-6lowpand + SECTION:=base + CATEGORY:=Network + TITLE:=Bluetooth LE 6lowpan joiner daemon + URL:=http://www.nordicsemi.com/ + DEPENDS:=+libusb-1.0 +bluez-libs +endef + +define Package/bluetooth-6lowpand/description + Bluetooth Low Energy IPSP device scanner and connection daemon. + The Daemon can be used to whitelist certain IPSP Bluetooth LE MAC + addresses, or autoconnect using SSID and Key derived from Wifi AP + setup to authenticate the devices in order to connect. Also, manual + configuration of software SSID and Key can be used. +endef + +define Package/bluetooth-6lowpand/install + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/bluetooth_6lowpand.init $(1)/etc/init.d/bluetooth_6lowpand + + $(INSTALL_DIR) $(1)/etc/bluetooth + $(INSTALL_DATA) ./files/bluetooth_6lowpand.conf $(1)/etc/bluetooth + + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/bluetooth_6lowpand $(1)/usr/sbin +endef + +$(eval $(call BuildPackage,bluetooth-6lowpand)) diff --git a/feeds/bluetooth/bluetooth-6lowpand/files/bluetooth_6lowpand.conf b/feeds/bluetooth/bluetooth-6lowpand/files/bluetooth_6lowpand.conf new file mode 100644 index 000000000..e69de29bb diff --git a/feeds/bluetooth/bluetooth-6lowpand/files/bluetooth_6lowpand.init b/feeds/bluetooth/bluetooth-6lowpand/files/bluetooth_6lowpand.init new file mode 100644 index 000000000..7bfd0d428 --- /dev/null +++ b/feeds/bluetooth/bluetooth-6lowpand/files/bluetooth_6lowpand.init @@ -0,0 +1,24 @@ +#!/bin/sh /etc/rc.common + +START=63 +PROG=/usr/sbin/bluetooth_6lowpand +HCICONFIG=/usr/bin/hciconfig + +start() { + config_load btle + config_get enable bluetooth_6lowpand enable 0 + [ "$enable" -eq 1 ] || return + echo "start bluetooth_6lowpand" + sleep 1 + echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable + sleep 1 + killall bluetoothd + sleep 1 + $HCICONFIG hci0 reset + $PROG -w 3 -t 5 -a -d +} + +stop() { + echo "stop bluetooth_6lowpand" + killall -9 bluetooth_6lowpand +} diff --git a/feeds/bluetooth/bluez-ibeacon/Makefile b/feeds/bluetooth/bluez-ibeacon/Makefile new file mode 100644 index 000000000..bb66bb9c3 --- /dev/null +++ b/feeds/bluetooth/bluez-ibeacon/Makefile @@ -0,0 +1,33 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=bluez-ibeacon +PKG_RELEASE:=1 + +PKG_SOURCE_URL=https://github.com/blogic/bluez-ibeacon +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2022-10-31 +PKG_SOURCE_VERSION:=07c082bf3e139ce061ff62a42b7876860256f4ea + +PKG_MAINTAINER:=John Crispin +PKG_LICENSE:=MIT + +include $(INCLUDE_DIR)/package.mk + +define Package/bluez-ibeacon + SECTION:=utils + CATEGORY:=Utilities + TITLE:=bluez-ibeacon + DEPENDS:=+bluez-libs +endef + +define Build/Compile + $(MAKE_VARS) $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/bluez-beacon $(MAKE_FLAGS) +endef + +define Package/bluez-ibeacon/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bluez-beacon/ibeacon $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/ibeacon $(1)/etc/init.d/ibeacon +endef + +$(eval $(call BuildPackage,bluez-ibeacon)) diff --git a/feeds/bluetooth/bluez-ibeacon/files/ibeacon b/feeds/bluetooth/bluez-ibeacon/files/ibeacon new file mode 100644 index 000000000..7d309ce43 --- /dev/null +++ b/feeds/bluetooth/bluez-ibeacon/files/ibeacon @@ -0,0 +1,25 @@ +#!/bin/sh /etc/rc.common + +START=80 + +USE_PROCD=1 +PROG=/usr/sbin/ibeacon + +service_triggers() { + procd_add_reload_trigger btle +} + +start_service() { + config_load btle + config_get enable ibeacon enable 0 + config_get uuid ibeacon uuid 0 + config_get major ibeacon major 0 + config_get minor ibeacon minor 0 + + [ "$enable" -eq 1 ] || return + + procd_open_instance + procd_set_param command "$PROG" 200 "${uuid}" "${major}" "${minor}" -29 + procd_set_param respawn + procd_close_instance +} diff --git a/feeds/bluetooth/ubtled/Makefile b/feeds/bluetooth/ubtled/Makefile new file mode 100644 index 000000000..8864aaabe --- /dev/null +++ b/feeds/bluetooth/ubtled/Makefile @@ -0,0 +1,32 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ubtled +PKG_RELEASE:=1 + +PKG_SOURCE_URL=https://github.com/blogic/ubtled.git +PKG_SOURCE_PROTO:=git +PKG_SOURCE_DATE:=2022-10-31 +PKG_SOURCE_VERSION:=7e01ab86c562fc8ab3777d04e60b8dce596a4c5f + +PKG_MAINTAINER:=John Crispin +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/ubtled + SECTION:=utils + CATEGORY:=Utilities + TITLE:=OpenWrt BTLE daemon + DEPENDS:=+libubox +libubus +bluez-libs +endef + +define Package/ubtled/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/{config,init.d,uci-defaults} + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ubtled $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/ubtled.init $(1)/etc/init.d/ubtled + $(INSTALL_DATA) ./files/btle.config $(1)/etc/config/btle + $(INSTALL_DATA) ./files/99-btle $(1)/etc/uci-defaults/ +endef + +$(eval $(call BuildPackage,ubtled)) diff --git a/feeds/bluetooth/ubtled/files/99-btle b/feeds/bluetooth/ubtled/files/99-btle new file mode 100644 index 000000000..565020d5c --- /dev/null +++ b/feeds/bluetooth/ubtled/files/99-btle @@ -0,0 +1,8 @@ +#!/bin/sh + +cat >> /etc/bluetooth/main.conf < +PKG_LICENSE:=BSD-2c + +PKG_BUILD_DEPENDS:=protobuf-c/host +HOST_BUILD_DEPENDS:=protobuf/host + +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk + +define Package/libprotobuf-c + TITLE:=Protocol Buffers library + SECTION:=libs + CATEGORY:=Libraries + URL:=https://github.com/protobuf-c/protobuf-c +endef + +define Package/libprotobuf-c/description + Runtime library to use Google Protocol Buffers from C applications. + Protocol Buffers are a way of encoding structured data in an efficient yet + extensible format. Google uses Protocol Buffers for almost all of its + internal RPC protocols and file formats. +endef + +CONFIGURE_ARGS += \ + --enable-shared \ + --enable-static \ + --disable-protoc + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include/ + $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libprotobuf-c.{a,la,so*} $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* $(1)/usr/lib/pkgconfig/ +endef + +define Package/libprotobuf-c/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libprotobuf-c.so.* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,libprotobuf-c)) +$(eval $(call HostBuild)) + diff --git a/feeds/ipq807x/protobuf-c/patches/001-t-generated-code2-cxx-generate-packed-data-fix.patch b/feeds/ipq807x/protobuf-c/patches/001-t-generated-code2-cxx-generate-packed-data-fix.patch new file mode 100644 index 000000000..2d83cec59 --- /dev/null +++ b/feeds/ipq807x/protobuf-c/patches/001-t-generated-code2-cxx-generate-packed-data-fix.patch @@ -0,0 +1,13 @@ +Index: protobuf-c-1.3.1/t/generated-code2/cxx-generate-packed-data.cc +=================================================================== +--- protobuf-c-1.3.1.orig/t/generated-code2/cxx-generate-packed-data.cc ++++ protobuf-c-1.3.1/t/generated-code2/cxx-generate-packed-data.cc +@@ -998,7 +998,7 @@ static void dump_test_packed_repeated_en + static void dump_test_unknown_fields (void) + { + EmptyMess mess; +- const google::protobuf::Message::Reflection *reflection = mess.GetReflection(); ++ const google::protobuf::Reflection *reflection = mess.GetReflection(); + google::protobuf::UnknownFieldSet *fs = reflection->MutableUnknownFields(&mess); + + #if GOOGLE_PROTOBUF_VERSION >= 2001000 diff --git a/feeds/python-20.x/python3-jinja2/Makefile b/feeds/python-20.x/python3-jinja2/Makefile new file mode 100644 index 000000000..da35c5d90 --- /dev/null +++ b/feeds/python-20.x/python3-jinja2/Makefile @@ -0,0 +1,39 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=python3-jinja2 +PKG_RELEASE:=1 +PKG_VERSION:=2.11.2 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/pallets/jinja.git +PKG_SOURCE_VERSION:=737a4cd41d09878e7e6c584a2062f5853dc30150 +PKG_BUILD_DIR:=$(BUILD_DIR)/python3-jinja2-$(PKG_VERSION) +HOST_BUILD_DEPENDS:=python3/host + +include $(TOPDIR)/feeds/packages/lang/python/pypi.mk +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk + +define Package/python3-jinja2 + SECTION:=language-python + CATEGORY:=Languages + SUBMENU:=Python + TITLE:=jinja2 + URL:=https://github.com/ulfalizer/Kconfiglib +endef + +define Package/python3-jinja2/description +Jinja is a modern and designer-friendly templating language for Python, modelled after Django’s templates. It is fast, widely used and secure with the optional sandboxed template execution environment: +endef + +define Host/Compile + $(call HostPython3/ModSetup,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)") +endef + +Host/Install:= + + +$(eval $(call HostBuild)) + +$(eval $(call Py3Package,python3-jinja2)) +$(eval $(call BuildPackage,python3-jinja2)) diff --git a/feeds/python-20.x/python3-kconfiglib/Makefile b/feeds/python-20.x/python3-kconfiglib/Makefile new file mode 100644 index 000000000..fafff158d --- /dev/null +++ b/feeds/python-20.x/python3-kconfiglib/Makefile @@ -0,0 +1,38 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=python3-kconfiglib +PKG_RELEASE:=1 +PKG_VERSION:=13.1.1 +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/ulfalizer/Kconfiglib.git +PKG_SOURCE_VERSION:=bf01114a0ce09b891ed04609ea7e9cc6f3ef3df2 +PKG_BUILD_DIR:=$(BUILD_DIR)/python3-kconfiglib-$(PKG_VERSION) +HOST_BUILD_DEPENDS:=python3/host + +include $(TOPDIR)/feeds/packages/lang/python/pypi.mk +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk + +define Package/python3-kconfiglib + SECTION:=language-python + CATEGORY:=Languages + SUBMENU:=Python + TITLE:=kconfiglib + URL:=https://github.com/ulfalizer/Kconfiglib +endef + +define Package/python3-kconfiglib/description + Kconfiglib is a Kconfig implementation in Python 2/3. +endef + +define Host/Compile + $(call HostPython3/ModSetup,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)") +endef + +Host/Install:= + +$(eval $(call HostBuild)) + +$(eval $(call Py3Package,python3-kconfiglib)) +$(eval $(call BuildPackage,python3-kconfiglib)) diff --git a/feeds/python-20.x/python3-markupsafe/Makefile b/feeds/python-20.x/python3-markupsafe/Makefile new file mode 100644 index 000000000..b041da85f --- /dev/null +++ b/feeds/python-20.x/python3-markupsafe/Makefile @@ -0,0 +1,49 @@ +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=MarkupSafe +PKG_VERSION:=1.1.1 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://files.pythonhosted.org/packages/source/M/MarkupSafe +PKG_HASH:=29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b +PKG_BUILD_DEPENDS:=python python3 +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENSE +PKG_MAINTAINER:=Daniel Golle + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-$(PKG_NAME)-$(PKG_VERSION) +PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE) +HOST_BUILD_DEPENDS:=python3/host + +include $(TOPDIR)/feeds/packages/lang/python/pypi.mk +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk +include $(TOPDIR)/feeds/packages/lang/python/python3-package.mk + +define Package/python3-markupsafe + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Python + URL:=https://github.com/pallets/markupsafe/ + TITLE:=python3-markupsafe +endef + +define Package/python3-markupsafe/description +MarkupSafe implements a XML/HTML/XHTML Markup safe string for Python +endef + +define Host/Compile + $(call HostPython3/ModSetup,,install --prefix="" --root="$(STAGING_DIR_HOSTPKG)") +endef + +Host/Install:= + +$(eval $(call HostBuild)) + +$(eval $(call Py3Package,python3-markupsafe)) +$(eval $(call BuildPackage,python3-markupsafe)) diff --git a/patches-20.x/0001-.gitignore-add-the-profiles-folder.patch b/patches-20.x/0001-.gitignore-add-the-profiles-folder.patch new file mode 100644 index 000000000..d77936d14 --- /dev/null +++ b/patches-20.x/0001-.gitignore-add-the-profiles-folder.patch @@ -0,0 +1,25 @@ +From b0975ab27207c7bb7eaca62412a625e9e9cb9538 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 22 Sep 2020 18:02:55 +0200 +Subject: [PATCH 01/25] .gitignore: add the /profiles folder + +Signed-off-by: John Crispin +--- + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/.gitignore b/.gitignore +index b6bfe1a525..a2a910ef13 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -16,6 +16,7 @@ + /overlay + /package/feeds + /package/openwrt-packages ++/profiles + /*.patch + key-build* + *.orig +-- +2.25.1 + diff --git a/patches-20.x/0002-pending-scripts-add-gen_config.py.patch b/patches-20.x/0002-pending-scripts-add-gen_config.py.patch new file mode 100644 index 000000000..784705f02 --- /dev/null +++ b/patches-20.x/0002-pending-scripts-add-gen_config.py.patch @@ -0,0 +1,210 @@ +From 3496a3b2b77a86caa5a689555192627922917836 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Fri, 19 Jun 2020 10:45:22 +0200 +Subject: [PATCH 02/25] pending: scripts: add gen_config.py + +This script is used to setup the tree based on the profiles/. + +Signed-off-by: John Crispin +--- + scripts/gen_config.py | 188 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 188 insertions(+) + create mode 100755 scripts/gen_config.py + +diff --git a/scripts/gen_config.py b/scripts/gen_config.py +new file mode 100755 +index 0000000000..5bc7068ae7 +--- /dev/null ++++ b/scripts/gen_config.py +@@ -0,0 +1,188 @@ ++#!/usr/bin/env python3 ++ ++from os import getenv ++from pathlib import Path ++from shutil import rmtree ++from subprocess import run ++import sys ++import yaml ++ ++profile_folder = Path(getenv("PROFILES", "./profiles")).absolute() ++ ++ ++def die(msg: str): ++ """Quit script with error message ++ ++ msg (str): Error message to print ++ """ ++ print(msg) ++ sys.exit(1) ++ ++ ++def usage(code: int = 0): ++ """Print script usage ++ ++ Args: ++ code (int): exit code ++ """ ++ print( ++ f"""Usage: {sys.argv[0]} [options...] ++ ++ clean Remove feeds before setup ++ list List available profiles ++ help Print this message ++ """ ++ ) ++ sys.exit(code) ++ ++ ++def load_yaml(fname: str, profile: dict, include = True): ++ profile_file = (profile_folder / fname).with_suffix(".yml") ++ ++ if not profile_file.is_file(): ++ die(f"Profile {fname} not found") ++ ++ new = yaml.safe_load(profile_file.read_text()) ++ for n in new: ++ if n in {"profile", "target", "subtarget", "external_target"}: ++ if profile.get(n): ++ die(f"Duplicate tag found {n}") ++ profile.update({n: new.get(n)}) ++ elif n in {"description"}: ++ profile["description"].append(new.get(n)) ++ elif n in {"packages"}: ++ profile["packages"].extend(new.get(n)) ++ elif n in {"diffconfig"}: ++ profile["diffconfig"] += new.get(n) ++ elif n in {"feeds"}: ++ for f in new.get(n): ++ if f.get("name", "") == "" or (f.get("uri", "") == "" and f.get("path", "") == ""): ++ die(f"Found bad feed {f}") ++ profile["feeds"][f.get("name")] = f ++ ++ if "include" in new and include: ++ for i in range(len(new["include"])): ++ profile = load_yaml(new["include"][i], profile, False) ++ return profile ++ ++ ++def clean_tree(): ++ print("Cleaning tree") ++ rmtree("./tmp", ignore_errors=True) ++ rmtree("./packages/feeds/", ignore_errors=True) ++ rmtree("./tmp/", ignore_errors=True) ++ rmtree(".git/rebase-apply/", ignore_errors=True) ++ if Path("./feeds.conf").is_file(): ++ Path("./feeds.conf").unlink() ++ if Path("./.config").is_file(): ++ Path("./.config").unlink() ++ ++ ++def merge_profiles(profiles): ++ profile = {"packages": [], "description": [], "diffconfig": "", "feeds": {}} ++ ++ for p in profiles: ++ profile = load_yaml(p, profile) ++ ++ return profile ++ ++ ++def setup_feeds(profile): ++ feeds_conf = Path("feeds.conf") ++ if feeds_conf.is_file(): ++ feeds_conf.unlink() ++ ++ feeds = [] ++ for p in profile.get("feeds", []): ++ try: ++ f = profile["feeds"].get(p) ++ if all(k in f for k in ("branch", "revision", "path")): ++ die(f"Please specify either a branch, a revision or a path: {f}") ++ if "path" in f: ++ feeds.append( ++ f'{f.get("method", "src-link")},{f["name"]},{f["path"]}' ++ ) ++ elif "revision" in f: ++ feeds.append( ++ f'{f.get("method", "src-git")},{f["name"]},{f["uri"]}^{f.get("revision")}' ++ ) ++ else: ++ feeds.append( ++ f'{f.get("method", "src-git")},{f["name"]},{f["uri"]};{f.get("branch", "master")}' ++ ) ++ ++ except: ++ print(f"Badly configured feed: {f}") ++ ++ if run(["./scripts/feeds", "setup", "-b", *feeds]).returncode: ++ die(f"Error setting up feeds") ++ ++ if run(["./scripts/feeds", "update"]).returncode: ++ die(f"Error updating feeds") ++ ++ for p in profile.get("feeds", []): ++ f = profile["feeds"].get(p) ++ if run( ++ ["./scripts/feeds", "install", "-a", "-f", "-p", f.get("name")] ++ ).returncode: ++ die(f"Error installing {feed}") ++ ++ packages = ["./scripts/feeds", "install" ] ++ for package in profile.get("packages", []): ++ packages.append(package) ++ if len(packages) > 2: ++ if run(packages).returncode: ++ die(f"Error installing packages") ++ ++ if profile.get("external_target", False): ++ if run(["./scripts/feeds", "install", profile["target"]]).returncode: ++ die(f"Error installing external target {profile['target']}") ++ ++ ++def generate_config(profile): ++ config_output = f"""CONFIG_TARGET_{profile["target"]}=y ++CONFIG_TARGET_{profile["target"]}_{profile["subtarget"]}=y ++CONFIG_TARGET_{profile["target"]}_{profile["subtarget"]}_DEVICE_{profile["profile"]}=y ++""" ++ ++ config_output += f"{profile.get('diffconfig', '')}" ++ ++ for package in profile.get("packages", []): ++ print(f"Add package to .config: {package}") ++ config_output += f"CONFIG_PACKAGE_{package}=y\n" ++ ++ Path(".config").write_text(config_output) ++ print("Configuration written to .config") ++ ++ ++if __name__ == "__main__": ++ if "list" in sys.argv: ++ print(f"Profiles in {profile_folder}") ++ ++ print("\n".join(map(lambda p: str(p.stem), profile_folder.glob("*.yml")))) ++ quit(0) ++ ++ if "help" in sys.argv: ++ usage() ++ ++ if len(sys.argv) < 2: ++ usage(1) ++ ++ if "clean" in sys.argv: ++ clean_tree() ++ print("Tree is now clean") ++ quit(0) ++ ++ profile = merge_profiles(sys.argv[1:]) ++ ++ print("Using the following profiles:") ++ for d in profile.get("description"): ++ print(f" - {d}") ++ ++ clean_tree() ++ setup_feeds(profile) ++ generate_config(profile) ++ ++ print("Running make defconfig") ++ if run(["make", "defconfig"]).returncode: ++ die(f"Error running make defconfig") +-- +2.25.1 + diff --git a/patches-20.x/0003-scripts-update-feed-script.patch b/patches-20.x/0003-scripts-update-feed-script.patch new file mode 100644 index 000000000..ddec10949 --- /dev/null +++ b/patches-20.x/0003-scripts-update-feed-script.patch @@ -0,0 +1,131 @@ +From 7789c276f05f514f2cb447d615d913a45301b189 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Fri, 19 Jun 2020 13:25:27 +0200 +Subject: [PATCH 03/25] scripts: update feed script + +gen_config.py requires the latest version of the feeds script. + +Signed-off-by: John Crispin +--- + scripts/feeds | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 77 insertions(+) + +diff --git a/scripts/feeds b/scripts/feeds +index 22d4f8e8f4..7afdda98e8 100755 +--- a/scripts/feeds ++++ b/scripts/feeds +@@ -644,6 +644,35 @@ sub refresh_config { + } + } + ++sub install_profiles { ++ my $feed = shift; ++ my $dir = sprintf('feeds/%s/', $feed->[1]); ++ ++ -d "./feeds/profiles" or mkdir "./feeds/profiles" or return 1; ++ ++ opendir (DIR, $dir) or return 0; ++ while (my $file = readdir(DIR)) { ++ next unless (-f "$dir/$file"); ++ next unless ($file =~ m/\.profile$/); ++ -e "./feeds/profiles/$file" or system("ln -s ../$feed->[1]/$file ./feeds/profiles/"); ++ } ++ closedir(DIR); ++} ++ ++sub install_dl { ++ my $feed = shift; ++ my $dir = sprintf('feeds/%s/dl/', $feed->[1]); ++ ++ -d "./dl" or mkdir "./dl" or return 1; ++ ++ opendir (DIR, $dir) or return 0; ++ while (my $file = readdir(DIR)) { ++ next unless (-f "$dir/$file"); ++ -e "./dl/$file" or system("ln -s ../feeds/$feed->[1]/dl/$file ./dl/"); ++ } ++ closedir(DIR); ++} ++ + sub install { + my $name; + my %opts; +@@ -676,6 +705,8 @@ sub install { + install_src($feed, $name, exists($opts{f})) == 0 or $ret = 1; + get_feed($f->[1]); + } ++ install_profiles($f); ++ install_dl($f); + } + } + } else { +@@ -846,6 +877,47 @@ sub update { + return $failed; + } + ++sub setup { ++ my %opts; ++ ++ getopts('bh', \%opts); ++ ++ if ($opts{h}) { ++ usage(); ++ return 0; ++ } ++ ++ if (-e "feeds.conf") { ++ warn "The file feeds.conf already exists.\n"; ++ return 1; ++ } ++ ++ open(my $fd, ">>feeds.conf"); ++ ++ if ($opts{b}) { ++ printf $fd "src-include defaults feeds.conf.default\n"; ++ } ++ ++ while (my $entry = shift @ARGV) { ++ my ($type, $name, $src) = split /,/, $entry; ++ ++ $update_method{$type} or do { ++ warn "Unknown type '$type' in parameter $entry\n"; ++ unlink "feeds.conf"; ++ return 1; ++ }; ++ ++ if ($name =~ /[\s-]/) { ++ warn "Feed names or sources may not contain whitespace or - characters in parameter $entry\n"; ++ unlink "feeds.conf"; ++ return 1; ++ } ++ printf $fd "%s %s %s\n", $type, $name, $src; ++ } ++ ++ return 0; ++} ++ + sub feed_config() { + foreach my $feed (@feeds) { + my $installed = (-f "feeds/$feed->[1].index"); +@@ -897,6 +969,10 @@ Commands: + -i : Recreate the index only. No feed update from repository is performed. + -f : Force updating feeds even if there are changed, uncommitted files. + ++ setup [options] ...: generate feeds.conf ++ Options: ++ -b : Use feeds.conf.default as base for new feeds.conf. ++ + clean: Remove downloaded/generated files. + + EOF +@@ -910,6 +986,7 @@ my %commands = ( + 'search' => \&search, + 'uninstall' => \&uninstall, + 'feed_config' => \&feed_config, ++ 'setup' => \&setup, + 'clean' => sub { + system("rm -rf ./feeds ./package/feeds"); + } +-- +2.25.1 + diff --git a/patches-20.x/0004-scripts-ubinize-image.sh-allow-setting-the-rootfs-na.patch b/patches-20.x/0004-scripts-ubinize-image.sh-allow-setting-the-rootfs-na.patch new file mode 100644 index 000000000..9bc3e1ad2 --- /dev/null +++ b/patches-20.x/0004-scripts-ubinize-image.sh-allow-setting-the-rootfs-na.patch @@ -0,0 +1,63 @@ +From 2b4912c779e24a5b90eb56333bacc9589b8cd7ec Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sun, 9 Aug 2020 20:58:52 +0200 +Subject: [PATCH 04/25] scripts/ubinize-image.sh: allow setting the rootfs name + +This patch allows us to use a different rootfs name. Some QCA boards will +require the in ubi rfs to be called ubi_rootfs. + +Signed-off-by: John Crispin +--- + include/image-commands.mk | 1 + + scripts/ubinize-image.sh | 9 ++++++++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/include/image-commands.mk b/include/image-commands.mk +index 979eafb157..1a2a67c07d 100644 +--- a/include/image-commands.mk ++++ b/include/image-commands.mk +@@ -82,6 +82,7 @@ define Build/append-ubi + sh $(TOPDIR)/scripts/ubinize-image.sh \ + $(if $(UBOOTENV_IN_UBI),--uboot-env) \ + $(if $(KERNEL_IN_UBI),--kernel $(IMAGE_KERNEL)) \ ++ $(if $(ROOTFSNAME_IN_UBI),--rootfs_name $(ROOTFSNAME_IN_UBI)) \ + $(foreach part,$(UBINIZE_PARTS),--part $(part)) \ + $(IMAGE_ROOTFS) \ + $@.tmp \ +diff --git a/scripts/ubinize-image.sh b/scripts/ubinize-image.sh +index c6f8bcefe5..707cd38d47 100755 +--- a/scripts/ubinize-image.sh ++++ b/scripts/ubinize-image.sh +@@ -7,6 +7,7 @@ ubootenv="" + ubinize_param="" + kernel="" + rootfs="" ++rootfs_name="rootfs" + outfile="" + err="" + ubinize_seq="" +@@ -76,7 +77,7 @@ ubilayout() { + rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )" + ;; + esac +- ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize" ++ ubivol $vol_id $rootfs_name "$2" "$autoresize" "$rootsize" + + vol_id=$(( $vol_id + 1 )) + [ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1 +@@ -101,6 +102,12 @@ while [ "$1" ]; do + shift + continue + ;; ++ "--rootfs_name") ++ rootfs_name="$2" ++ shift ++ shift ++ continue ++ ;; + "--part") + parts="$parts $2" + shift +-- +2.25.1 + diff --git a/patches-20.x/0005-include-prereq-build.mk-add-ovsdb-tool-dependency.patch b/patches-20.x/0005-include-prereq-build.mk-add-ovsdb-tool-dependency.patch new file mode 100644 index 000000000..a60094f11 --- /dev/null +++ b/patches-20.x/0005-include-prereq-build.mk-add-ovsdb-tool-dependency.patch @@ -0,0 +1,34 @@ +From f57f34015e7e7bd50974fc6c93a4ea5f6c658d50 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Thu, 25 Jun 2020 09:03:16 +0200 +Subject: [PATCH 05/25] include/prereq-build.mk: add ovsdb-tool dependency + +OpenSync requires a host installation of ovsdb-tool. Add this to the +required commands. + +If the tool is missing, users will be presented witht he following line. + +-> Build dependency: Please install the 'ovsdb-tool' package + +Signed-off-by: John Crispin +--- + include/prereq-build.mk | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/prereq-build.mk b/include/prereq-build.mk +index e7314b253b..047a23074b 100644 +--- a/include/prereq-build.mk ++++ b/include/prereq-build.mk +@@ -170,6 +170,9 @@ $(eval $(call SetupHostCommand,git,Please install Git (git-core) >= 1.7.12.2, \ + $(eval $(call SetupHostCommand,file,Please install the 'file' package, \ + file --version 2>&1 | grep file)) + ++$(eval $(call SetupHostCommand,ovsdb-tool,Please install the 'ovsdb-tool' package, \ ++ ovsdb-tool -V 2>&1 | grep vSwitch)) ++ + $(STAGING_DIR_HOST)/bin/mkhash: $(SCRIPT_DIR)/mkhash.c + mkdir -p $(dir $@) + $(CC) -O2 -I$(TOPDIR)/tools/include -o $@ $< +-- +2.25.1 + diff --git a/patches-20.x/0006-base-files-set-default-password-to-openwifi.patch b/patches-20.x/0006-base-files-set-default-password-to-openwifi.patch new file mode 100644 index 000000000..75f6341a7 --- /dev/null +++ b/patches-20.x/0006-base-files-set-default-password-to-openwifi.patch @@ -0,0 +1,49 @@ +From 27a302d59b8b0e29b82ca8b46a883f10705225ac Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Thu, 30 Jul 2020 16:51:04 +0200 +Subject: [PATCH 06/25] base-files: set default password to "openwifi" + +Signed-off-by: John Crispin +--- + package/base-files/files/bin/config_generate | 2 +- + package/base-files/files/etc/shadow | 2 +- + package/base-files/files/usr/libexec/login.sh | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate +index ee3958e733..66b11c8a2e 100755 +--- a/package/base-files/files/bin/config_generate ++++ b/package/base-files/files/bin/config_generate +@@ -282,7 +282,7 @@ generate_static_system() { + add system system + set system.@system[-1].hostname='OpenWrt' + set system.@system[-1].timezone='UTC' +- set system.@system[-1].ttylogin='0' ++ set system.@system[-1].ttylogin='1' + set system.@system[-1].log_size='64' + set system.@system[-1].urandom_seed='0' + +diff --git a/package/base-files/files/etc/shadow b/package/base-files/files/etc/shadow +index 4b4154f21f..5b3f32ce64 100644 +--- a/package/base-files/files/etc/shadow ++++ b/package/base-files/files/etc/shadow +@@ -1,4 +1,4 @@ +-root::0:0:99999:7::: ++root:$1$Ev771IIe$RHpqhCLW3U6c5tg9MrkQD/:18473:0:99999:7::: + daemon:*:0:0:99999:7::: + ftp:*:0:0:99999:7::: + network:*:0:0:99999:7::: +diff --git a/package/base-files/files/usr/libexec/login.sh b/package/base-files/files/usr/libexec/login.sh +index 1fff39c6a0..2e8dbc0d90 100755 +--- a/package/base-files/files/usr/libexec/login.sh ++++ b/package/base-files/files/usr/libexec/login.sh +@@ -1,5 +1,5 @@ + #!/bin/sh + +-[ "$(uci -q get system.@system[0].ttylogin)" = 1 ] || exec /bin/ash --login ++[ "$(uci -q get system.@system[0].ttylogin)" = 0 ] && exec /bin/ash --login + + exec /bin/login +-- +2.25.1 + diff --git a/patches-20.x/0007-base-files-update-banner.patch b/patches-20.x/0007-base-files-update-banner.patch new file mode 100644 index 000000000..0f4c37619 --- /dev/null +++ b/patches-20.x/0007-base-files-update-banner.patch @@ -0,0 +1,34 @@ +From c51c30ff7318a5c219c820ff182398865a0b7585 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Fri, 31 Jul 2020 17:15:13 +0200 +Subject: [PATCH 07/25] base-files: update banner + +Use OpenWiFi for the banner. + +Signed-off-by: John Crispin +--- + package/base-files/files/etc/banner | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/package/base-files/files/etc/banner b/package/base-files/files/etc/banner +index f3af3c014f..f73423bad4 100644 +--- a/package/base-files/files/etc/banner ++++ b/package/base-files/files/etc/banner +@@ -1,8 +1,8 @@ +- _______ ________ __ +- | |.-----.-----.-----.| | | |.----.| |_ +- | - || _ | -__| || | | || _|| _| +- |_______|| __|_____|__|__||________||__| |____| ++ _______ ________ __ ______ __ ++ | |.-----.-----.-----.| | | |__| ___|__| ++ | - || _ | -__| || | | | | ___| | ++ |_______|| __|_____|__|__||________|__|__| |__| + |__| W I R E L E S S F R E E D O M +- ----------------------------------------------------- ++ --------------------------------------------------- + %D %V, %C +- ----------------------------------------------------- ++ --------------------------------------------------- +-- +2.25.1 + diff --git a/patches-20.x/0008-base-files-add-the-wlan-ap-repo-hash.patch b/patches-20.x/0008-base-files-add-the-wlan-ap-repo-hash.patch new file mode 100644 index 000000000..770891cbc --- /dev/null +++ b/patches-20.x/0008-base-files-add-the-wlan-ap-repo-hash.patch @@ -0,0 +1,84 @@ +From 3861a33c489fa66f22d54bb97c705d02bfffd3aa Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sat, 29 Aug 2020 08:25:41 +0200 +Subject: [PATCH 08/25] base-files: add the wlan-ap repo hash + +currently the banner will show the revision of the build tree. +This patch adds the hash of the wlan-ap tree. + +Signed-off-by: John Crispin +--- + include/version.mk | 3 +++ + package/base-files/files/etc/banner | 1 + + package/base-files/files/etc/openwrt_release | 1 + + package/base-files/files/etc/openwrt_version | 1 + + scripts/getver.sh | 6 ++++++ + 5 files changed, 12 insertions(+) + +diff --git a/include/version.mk b/include/version.mk +index b7f42e13bb..87d884e3fa 100644 +--- a/include/version.mk ++++ b/include/version.mk +@@ -59,6 +59,8 @@ VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic) + VERSION_HWREV:=$(call qstrip,$(CONFIG_VERSION_HWREV)) + VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0) + ++VERSION_TIP:=$(shell $(TOPDIR)/scripts/getver.sh wlan-ap) ++ + define taint2sym + $(CONFIG_$(firstword $(subst :, ,$(subst +,,$(subst -,,$(1)))))) + endef +@@ -107,5 +109,6 @@ VERSION_SED_SCRIPT:=$(SED) 's,%U,$(call sed_escape,$(VERSION_REPO)),g' \ + -e 's,%u,$(call sed_escape,$(VERSION_HOME_URL)),g' \ + -e 's,%s,$(call sed_escape,$(VERSION_SUPPORT_URL)),g' \ + -e 's,%P,$(call sed_escape,$(VERSION_PRODUCT)),g' \ ++ -e 's,%a,$(call sed_escape,$(VERSION_TIP)),g' \ + -e 's,%h,$(call sed_escape,$(VERSION_HWREV)),g' + +diff --git a/package/base-files/files/etc/banner b/package/base-files/files/etc/banner +index f73423bad4..53e3cfcf4a 100644 +--- a/package/base-files/files/etc/banner ++++ b/package/base-files/files/etc/banner +@@ -4,5 +4,6 @@ + |_______|| __|_____|__|__||________|__|__| |__| + |__| W I R E L E S S F R E E D O M + --------------------------------------------------- ++ ApNos-%a + %D %V, %C + --------------------------------------------------- +diff --git a/package/base-files/files/etc/openwrt_release b/package/base-files/files/etc/openwrt_release +index d03400ca05..11eb7f0361 100644 +--- a/package/base-files/files/etc/openwrt_release ++++ b/package/base-files/files/etc/openwrt_release +@@ -5,3 +5,4 @@ DISTRIB_TARGET='%S' + DISTRIB_ARCH='%A' + DISTRIB_DESCRIPTION='%D %V %C' + DISTRIB_TAINTS='%t' ++DISTRIB_TIP='%a' +diff --git a/package/base-files/files/etc/openwrt_version b/package/base-files/files/etc/openwrt_version +index 48157ed97f..bb0ef233ac 100644 +--- a/package/base-files/files/etc/openwrt_version ++++ b/package/base-files/files/etc/openwrt_version +@@ -1 +1,2 @@ ++ApNos-%a + %C +diff --git a/scripts/getver.sh b/scripts/getver.sh +index 49260a2260..10b4db7a84 100755 +--- a/scripts/getver.sh ++++ b/scripts/getver.sh +@@ -3,6 +3,12 @@ export LANG=C + export LC_ALL=C + [ -n "$TOPDIR" ] && cd $TOPDIR + ++[ "$1" = "wlan-ap" ] && { ++ cd .. ++ git log -n 1 --format="%h" ++ exit 0 ++} ++ + GET_REV=$1 + + try_version() { +-- +2.25.1 + diff --git a/patches-20.x/0009-base-files-make-sysupgrade-work-on-qcom-AX.patch b/patches-20.x/0009-base-files-make-sysupgrade-work-on-qcom-AX.patch new file mode 100644 index 000000000..b8a829b98 --- /dev/null +++ b/patches-20.x/0009-base-files-make-sysupgrade-work-on-qcom-AX.patch @@ -0,0 +1,255 @@ +From 6087d66d437693b8ab9575ec730e65b0b77b0acd Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Mon, 22 Jun 2020 14:32:45 +0200 +Subject: [PATCH 09/25] base-files: make sysupgrade work on qcom AX + +The qsdk v4.4 ubi layer does not detach the rootfs properly during +sysupgrade. Pull in the ubu force detach patch from owrt-15.05. + +Signed-off-by: John Crispin +--- + package/base-files/files/lib/upgrade/nand.sh | 12 +- + .../patches/131-add_ubi_force_detach.patch | 185 ++++++++++++++++++ + 2 files changed, 194 insertions(+), 3 deletions(-) + create mode 100644 package/utils/mtd-utils/patches/131-add_ubi_force_detach.patch + +diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh +index ad04bbc753..370ab1d7ce 100644 +--- a/package/base-files/files/lib/upgrade/nand.sh ++++ b/package/base-files/files/lib/upgrade/nand.sh +@@ -13,6 +13,9 @@ CI_UBIPART="${CI_UBIPART:-ubi}" + # 'rootfs' partition on NAND contains the rootfs + CI_ROOTPART="${CI_ROOTPART:-rootfs}" + ++# ipq807x qsdk kernel misbehaves ++CI_IPQ807X=0 ++ + ubi_mknod() { + local dir="$1" + local dev="/dev/$(basename $dir)" +@@ -127,6 +130,8 @@ nand_upgrade_prepare_ubi() { + return 1 + fi + ++ [ "$CI_IPQ807X" = 1 ] && ubidetach -f -m $mtdnum ++ + local ubidev="$( nand_find_ubi "$CI_UBIPART" )" + if [ ! "$ubidev" ]; then + ubiattach -m "$mtdnum" +@@ -197,7 +202,6 @@ nand_upgrade_prepare_ubi() { + + nand_do_upgrade_success() { + local conf_tar="/tmp/sysupgrade.tgz" +- + sync + [ -f "$conf_tar" ] && nand_restore_config "$conf_tar" + echo "sysupgrade successful" +@@ -257,10 +261,12 @@ nand_upgrade_tar() { + local has_kernel=1 + local has_env=0 + +- [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { ++ [ "$CI_IPQ807X" = 0 -a "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { + tar xf $tar_file ${board_dir}/kernel -O | mtd write - $CI_KERNPART + } +- [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0 ++ [ "$CI_IPQ807X" = 0 ] && { ++ [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0 ++ } + + nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env" + +diff --git a/package/utils/mtd-utils/patches/131-add_ubi_force_detach.patch b/package/utils/mtd-utils/patches/131-add_ubi_force_detach.patch +new file mode 100644 +index 0000000000..f3cd6a6b28 +--- /dev/null ++++ b/package/utils/mtd-utils/patches/131-add_ubi_force_detach.patch +@@ -0,0 +1,185 @@ ++--- a/include/mtd/ubi-user.h +++++ b/include/mtd/ubi-user.h ++@@ -176,6 +176,7 @@ ++ #define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req) ++ /* Detach an MTD device */ ++ #define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t) +++#define UBI_IOCFDET _IOW(UBI_CTRL_IOC_MAGIC, 99, int32_t) ++ ++ /* ioctl commands of UBI volume character devices */ ++ ++--- a/include/libubi.h +++++ b/include/libubi.h ++@@ -48,6 +48,7 @@ typedef void * libubi_t; ++ * number) ++ * @mtd_num: MTD device number to attach (used if @mtd_dev_node is %NULL) ++ * @mtd_dev_node: path to MTD device node to attach +++ * @force: set if the device should be removed even if it's busy ++ * @vid_hdr_offset: VID header offset (%0 means default offset and this is what ++ * most of the users want) ++ * @max_beb_per1024: Maximum expected bad eraseblocks per 1024 eraseblocks ++@@ -240,29 +241,33 @@ int ubi_attach(libubi_t desc, const char ++ * corresponding UBI device is removed. Returns zero in case of success and %-1 ++ * in case of failure. ++ */ ++-int ubi_detach_mtd(libubi_t desc, const char *node, int mtd_num); +++int ubi_detach_mtd(libubi_t desc, const char *node, int mtd_num, int force); ++ ++ /** ++ * ubi_detach - detach an MTD device by its node path. ++ * @desc: UBI library descriptor ++ * @node: name of the UBI control character device node ++ * @mtd_dev_node: path to an MTD device node +++ * @force: set if the device should be removed even if it's busy ++ * ++ * This function detaches an MTD device @mtd_dev_node from UBI. Returns zero in ++ * case of success and %-1 in case of failure. ++ */ ++-int ubi_detach(libubi_t desc, const char *node, const char *mtd_dev_node); +++int ubi_detach(libubi_t desc, const char *node, const char *mtd_dev_node, +++ int force); ++ ++ /** ++ * ubi_remove_dev - remove an UBI device. ++ * @desc: UBI library descriptor ++ * @node: name of the UBI control character device node ++ * @ubi_dev: UBI device number to remove +++ * @force: set if the device should be removed even if it's busy ++ * ++ * This function removes UBI device number @ubi_dev and returns zero in case of ++ * success and %-1 in case of failure. ++ */ ++-int ubi_remove_dev(libubi_t desc, const char *node, int ubi_dev); +++int ubi_remove_dev(libubi_t desc, const char *node, int ubi_dev, +++ int force); ++ ++ /** ++ * ubi_mkvol - create an UBI volume. ++--- a/lib/libubi.c +++++ b/lib/libubi.c ++@@ -808,7 +808,7 @@ int ubi_attach(libubi_t desc, const char ++ return ret; ++ } ++ ++-int ubi_detach_mtd(libubi_t desc, const char *node, int mtd_num) +++int ubi_detach_mtd(libubi_t desc, const char *node, int mtd_num, int force) ++ { ++ int ret, ubi_dev; ++ ++@@ -818,10 +818,11 @@ int ubi_detach_mtd(libubi_t desc, const ++ return ret; ++ } ++ ++- return ubi_remove_dev(desc, node, ubi_dev); +++ return ubi_remove_dev(desc, node, ubi_dev, force); ++ } ++ ++-int ubi_detach(libubi_t desc, const char *node, const char *mtd_dev_node) +++int ubi_detach(libubi_t desc, const char *node, const char *mtd_dev_node, +++ int force) ++ { ++ int mtd_num; ++ ++@@ -834,10 +835,10 @@ int ubi_detach(libubi_t desc, const char ++ if (mtd_num == -1) ++ return -1; ++ ++- return ubi_detach_mtd(desc, node, mtd_num); +++ return ubi_detach_mtd(desc, node, mtd_num, force); ++ } ++ ++-int ubi_remove_dev(libubi_t desc, const char *node, int ubi_dev) +++int ubi_remove_dev(libubi_t desc, const char *node, int ubi_dev, int force) ++ { ++ int fd, ret; ++ ++@@ -847,6 +848,10 @@ int ubi_remove_dev(libubi_t desc, const ++ if (fd == -1) ++ return sys_errmsg("cannot open \"%s\"", node); ++ ret = ioctl(fd, UBI_IOCDET, &ubi_dev); +++ if (force) +++ ret = ioctl(fd, UBI_IOCFDET, &ubi_dev); +++ else +++ ret = ioctl(fd, UBI_IOCDET, &ubi_dev); ++ if (ret == -1) ++ goto out_close; ++ ++--- a/ubi-utils/ubidetach.c +++++ b/ubi-utils/ubidetach.c ++@@ -40,6 +40,7 @@ struct args { ++ int mtdn; ++ const char *node; ++ const char *dev; +++ int force; ++ }; ++ ++ static struct args args = { ++@@ -47,6 +48,7 @@ static struct args args = { ++ .mtdn = -1, ++ .node = NULL, ++ .dev = NULL, +++ .force = 0, ++ }; ++ ++ static const char doc[] = PROGRAM_NAME " version " VERSION ++@@ -56,13 +58,14 @@ static const char optionsstr[] = ++ "-d, --devn= UBI device number to delete\n" ++ "-p, --dev-path= or alternatively, MTD device node path to detach\n" ++ "-m, --mtdn= or alternatively, MTD device number to detach\n" +++"-f, --force Force UBI detach even if it is still busy\n" ++ "-h, --help print help message\n" ++ "-V, --version print program version"; ++ ++ static const char usage[] = ++ "Usage: " PROGRAM_NAME " []\n" ++ "\t[-d ] [-m ] [-p ]\n" ++-"\t[--devn=] [--mtdn=]\n" +++"\t[--devn=] [--mtdn=] [-f]\n" ++ "\t[--dev-path=]\n" ++ "UBI control device defaults to " DEFAULT_CTRL_DEV " if not supplied.\n" ++ "Example 1: " PROGRAM_NAME " -p /dev/mtd0 - detach MTD device /dev/mtd0\n" ++@@ -83,7 +86,7 @@ static int parse_opt(int argc, char * co ++ while (1) { ++ int key, error = 0; ++ ++- key = getopt_long(argc, argv, "p:m:d:hV", long_options, NULL); +++ key = getopt_long(argc, argv, "p:m:d:fhV", long_options, NULL); ++ if (key == -1) ++ break; ++ ++@@ -104,6 +107,9 @@ static int parse_opt(int argc, char * co ++ return errmsg("bad MTD device number: \"%s\"", optarg); ++ ++ break; +++ case 'f': +++ args.force = 1; +++ break; ++ ++ case 'h': ++ printf("%s\n\n", doc); ++@@ -176,20 +182,22 @@ int main(int argc, char * const argv[]) ++ } ++ ++ if (args.devn != -1) { ++- err = ubi_remove_dev(libubi, args.node, args.devn); +++ err = ubi_remove_dev(libubi, args.node, args.devn, args.force); ++ if (err) { ++ sys_errmsg("cannot remove ubi%d", args.devn); ++ goto out_libubi; ++ } ++ } else { ++ if (args.dev != NULL) { ++- err = ubi_detach(libubi, args.node, args.dev); +++ err = ubi_detach(libubi, args.node, args.dev, +++ args.force); ++ if (err) { ++ sys_errmsg("cannot detach \"%s\"", args.dev); ++ goto out_libubi; ++ } ++ } else { ++- err = ubi_detach_mtd(libubi, args.node, args.mtdn); +++ err = ubi_detach_mtd(libubi, args.node, args.mtdn, +++ args.force); ++ if (err) { ++ sys_errmsg("cannot detach mtd%d", args.mtdn); ++ goto out_libubi; +-- +2.25.1 + diff --git a/patches-20.x/0010-base-files-add-support-for-v4.4-style-netdev-led-tri.patch b/patches-20.x/0010-base-files-add-support-for-v4.4-style-netdev-led-tri.patch new file mode 100644 index 000000000..0d9b0f1a1 --- /dev/null +++ b/patches-20.x/0010-base-files-add-support-for-v4.4-style-netdev-led-tri.patch @@ -0,0 +1,30 @@ +From 4ed88f32c55b1fe591d765818b7e28241a6ac0db Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 23 Sep 2020 17:34:44 +0200 +Subject: [PATCH 10/25] base-files: add support for v4.4 style netdev led + triggers + +Current owrt scripting cant handle the old v4.4 style sysfs API of led +netdev triggers. + +Signed-off-by: John Crispin +--- + package/base-files/files/etc/init.d/led | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/package/base-files/files/etc/init.d/led b/package/base-files/files/etc/init.d/led +index 277fb4e76f..8d97515d52 100755 +--- a/package/base-files/files/etc/init.d/led ++++ b/package/base-files/files/etc/init.d/led +@@ -71,6 +71,8 @@ load_led() { + "netdev") + [ -n "$dev" ] && { + echo $dev > /sys/class/leds/${sysfs}/device_name ++ [ -e "/sys/class/leds/${sysfs}/mode" ] && \ ++ echo $mode > /sys/class/leds/${sysfs}/mode + for m in $mode; do + [ -e "/sys/class/leds/${sysfs}/$m" ] && \ + echo 1 > /sys/class/leds/${sysfs}/$m +-- +2.25.1 + diff --git a/patches-20.x/0011-busybox-enable-the-watchdog-tool.patch b/patches-20.x/0011-busybox-enable-the-watchdog-tool.patch new file mode 100644 index 000000000..729d9fe05 --- /dev/null +++ b/patches-20.x/0011-busybox-enable-the-watchdog-tool.patch @@ -0,0 +1,29 @@ +From 386d5ac9b6c5fde2e04a94f78fccfb94216a0a73 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 28 Jul 2020 09:21:04 +0200 +Subject: [PATCH 11/25] busybox: enable the watchdog tool + +procd can currently only handle the main wdt. Enable the busybox +applet until procd can handle multiple devices. + +Signed-off-by: John Crispin +--- + package/utils/busybox/Config-defaults.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/utils/busybox/Config-defaults.in b/package/utils/busybox/Config-defaults.in +index 8d237ad181..4408c5d3d0 100644 +--- a/package/utils/busybox/Config-defaults.in ++++ b/package/utils/busybox/Config-defaults.in +@@ -2167,7 +2167,7 @@ config BUSYBOX_DEFAULT_VOLNAME + default n + config BUSYBOX_DEFAULT_WATCHDOG + bool +- default n ++ default y + config BUSYBOX_DEFAULT_FEATURE_IPV6 + bool + default y if IPV6 +-- +2.25.1 + diff --git a/patches-20.x/0012-dnsmasq-turn-the-base-uci-section-into-a-named-one.patch b/patches-20.x/0012-dnsmasq-turn-the-base-uci-section-into-a-named-one.patch new file mode 100644 index 000000000..6ab478e76 --- /dev/null +++ b/patches-20.x/0012-dnsmasq-turn-the-base-uci-section-into-a-named-one.patch @@ -0,0 +1,25 @@ +From b2a4d864c87ad86a3119716f4a563341f261a1eb Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 6 Oct 2020 16:39:16 +0200 +Subject: [PATCH 12/25] dnsmasq: turn the base uci section into a named one + +Handling this section from opensync is complicated if it is unnamed. + +Signed-off-by: John Crispin +--- + package/network/services/dnsmasq/files/dhcp.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/package/network/services/dnsmasq/files/dhcp.conf b/package/network/services/dnsmasq/files/dhcp.conf +index 8c42ef782e..ef8901aad2 100644 +--- a/package/network/services/dnsmasq/files/dhcp.conf ++++ b/package/network/services/dnsmasq/files/dhcp.conf +@@ -1,4 +1,4 @@ +-config dnsmasq ++config dnsmasq dnsmasq + option domainneeded 1 + option boguspriv 1 + option filterwin2k 0 # enable for dial on demand +-- +2.25.1 + diff --git a/patches-20.x/0013-ubox-add-log-priority-filtering.patch b/patches-20.x/0013-ubox-add-log-priority-filtering.patch new file mode 100644 index 000000000..87c26e486 --- /dev/null +++ b/patches-20.x/0013-ubox-add-log-priority-filtering.patch @@ -0,0 +1,94 @@ +From b9719669293e99b3bc6b3ad0fd715b2f5ba5af5d Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Thu, 23 Jul 2020 16:09:28 +0200 +Subject: [PATCH 13/25] ubox: add log priority filtering + +Allow logread to filer based on priority. + +Signed-off-by: John Crispin +--- + package/system/ubox/files/log.init | 4 +- + .../system/ubox/patches/100-log-prio.patch | 49 +++++++++++++++++++ + 2 files changed, 52 insertions(+), 1 deletion(-) + create mode 100644 package/system/ubox/patches/100-log-prio.patch + +diff --git a/package/system/ubox/files/log.init b/package/system/ubox/files/log.init +index 250f805b44..34471bd64a 100644 +--- a/package/system/ubox/files/log.init ++++ b/package/system/ubox/files/log.init +@@ -20,7 +20,8 @@ validate_log_section() + 'log_port:port:514' \ + 'log_proto:or("tcp", "udp"):udp' \ + 'log_trailer_null:bool:0' \ +- 'log_prefix:string' ++ 'log_prefix:string' \ ++ 'log_max_prio:uinteger' + } + + validate_log_daemon() +@@ -80,6 +81,7 @@ start_service_remote() + "tcp") [ "${log_trailer_null}" -eq 1 ] && procd_append_param command -0;; + esac + [ -z "${log_prefix}" ] || procd_append_param command -P "${log_prefix}" ++ [ -z "${log_max_prio}" ] || procd_append_param command -m "${log_max_prio}" + procd_close_instance + } + +diff --git a/package/system/ubox/patches/100-log-prio.patch b/package/system/ubox/patches/100-log-prio.patch +new file mode 100644 +index 0000000000..f1abfbd0e6 +--- /dev/null ++++ b/package/system/ubox/patches/100-log-prio.patch +@@ -0,0 +1,49 @@ ++Index: ubox-2019-12-31-0e34af14/log/logread.c ++=================================================================== ++--- ubox-2019-12-31-0e34af14.orig/log/logread.c +++++ ubox-2019-12-31-0e34af14/log/logread.c ++@@ -68,6 +68,7 @@ static int log_timestamp; ++ static int logd_conn_tries = LOGD_CONNECT_RETRY; ++ static int facility_include; ++ static int facility_exclude; +++static int log_max_prio; ++ ++ /* check for facility filter; return 0 if message shall be dropped */ ++ static int check_facility_filter(int f) ++@@ -147,6 +148,9 @@ static int log_notify(struct blob_attr * ++ } ++ p = blobmsg_get_u32(tb[LOG_PRIO]); ++ +++ if (log_max_prio && LOG_PRI(p) > log_max_prio) +++ return 0; +++ ++ if (!check_facility_filter(LOG_FAC(p))) ++ return 0; ++ ++@@ -233,6 +237,7 @@ static int usage(const char *prog) ++ " -u Use UDP as the protocol\n" ++ " -t Add an extra timestamp\n" ++ " -0 Use \\0 instead of \\n as trailer when using TCP\n" +++ " -m Only show messages with priority less or equal than \n" ++ "\n", prog); ++ return 1; ++ } ++@@ -307,7 +312,7 @@ int main(int argc, char **argv) ++ ++ signal(SIGPIPE, SIG_IGN); ++ ++- while ((ch = getopt(argc, argv, "u0fcs:l:z:Z:r:F:p:S:P:h:e:t")) != -1) { +++ while ((ch = getopt(argc, argv, "u0fcs:l:z:Z:r:F:p:S:P:h:e:tm:")) != -1) { ++ switch (ch) { ++ case 'u': ++ log_udp = 1; ++@@ -362,6 +367,9 @@ int main(int argc, char **argv) ++ case 't': ++ log_timestamp = 1; ++ break; +++ case 'm': +++ log_max_prio = atoi(optarg); +++ break; ++ default: ++ return usage(*argv); ++ } +-- +2.25.1 + diff --git a/patches-20.x/0014-netifd-add-interface-to-status-messages.patch b/patches-20.x/0014-netifd-add-interface-to-status-messages.patch new file mode 100644 index 000000000..5f601a414 --- /dev/null +++ b/patches-20.x/0014-netifd-add-interface-to-status-messages.patch @@ -0,0 +1,55 @@ +From 326717d5219cc6e6d7b98298380b70a7b19b73e5 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 29 Jul 2020 12:30:42 +0200 +Subject: [PATCH 14/25] netifd: add interface to status messages + +Add the interface name to the status messages. Otherwise we cannot identify the content. + +Signed-off-by: John Crispin +--- + .../netifd/patches/0103-ubus-iface.patch | 33 +++++++++++++++++++ + 1 file changed, 33 insertions(+) + create mode 100644 package/network/config/netifd/patches/0103-ubus-iface.patch + +diff --git a/package/network/config/netifd/patches/0103-ubus-iface.patch b/package/network/config/netifd/patches/0103-ubus-iface.patch +new file mode 100644 +index 0000000000..2c489fe96a +--- /dev/null ++++ b/package/network/config/netifd/patches/0103-ubus-iface.patch +@@ -0,0 +1,33 @@ ++Index: netifd-2019-08-05-5e02f944/ubus.c ++=================================================================== ++--- netifd-2019-08-05-5e02f944.orig/ubus.c +++++ netifd-2019-08-05-5e02f944/ubus.c ++@@ -1276,6 +1276,20 @@ netifd_ubus_interface_notify(struct inte ++ ubus_notify(ubus_ctx, &iface->ubus, event, b.head, -1); ++ } ++ +++static void +++iface_subscribe_handler(struct ubus_context *ctx, struct ubus_object *obj) +++{ +++ struct interface *iface; +++ +++ iface = container_of(obj, struct interface, ubus); +++ if (!iface->ubus.has_subscribers) +++ return; +++ blob_buf_init(&b, 0); +++ blobmsg_add_string(&b, "interface", iface->name); +++ netifd_dump_status(iface); +++ ubus_notify(ubus_ctx, &iface->ubus, "interface.update", b.head, -1); +++} +++ ++ void ++ netifd_ubus_add_interface(struct interface *iface) ++ { ++@@ -1289,6 +1303,7 @@ netifd_ubus_add_interface(struct interfa ++ obj->type = &iface_object_type; ++ obj->methods = iface_object_methods; ++ obj->n_methods = ARRAY_SIZE(iface_object_methods); +++ obj->subscribe_cb = iface_subscribe_handler; ++ if (ubus_add_object(ubus_ctx, &iface->ubus)) { ++ DPRINTF("failed to publish ubus object for interface '%s'\n", iface->name); ++ free(name); +-- +2.25.1 + diff --git a/patches-20.x/0015-firewall-tune-lan-wan-into-named-sections.patch b/patches-20.x/0015-firewall-tune-lan-wan-into-named-sections.patch new file mode 100644 index 000000000..fd81d6709 --- /dev/null +++ b/patches-20.x/0015-firewall-tune-lan-wan-into-named-sections.patch @@ -0,0 +1,45 @@ +From e3b3d38529c25170b9da126a37d98657dea0a5ef Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sun, 26 Jul 2020 19:16:21 +0200 +Subject: [PATCH 15/25] firewall: tune lan/wan into named sections + +We want to reference these from within OpenSync. They need to be named for this to work. + +Signed-off-by: John Crispin +--- + package/network/config/firewall/files/firewall.config | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/package/network/config/firewall/files/firewall.config b/package/network/config/firewall/files/firewall.config +index 5e22f984ce..de6e8a6c73 100644 +--- a/package/network/config/firewall/files/firewall.config ++++ b/package/network/config/firewall/files/firewall.config +@@ -6,14 +6,14 @@ config defaults + # Uncomment this line to disable ipv6 rules + # option disable_ipv6 1 + +-config zone ++config zone lan + option name lan + list network 'lan' + option input ACCEPT + option output ACCEPT + option forward ACCEPT + +-config zone ++config zone wan + option name wan + list network 'wan' + list network 'wan6' +@@ -23,7 +23,7 @@ config zone + option masq 1 + option mtu_fix 1 + +-config forwarding ++config forwarding lan_fw + option src lan + option dest wan + +-- +2.25.1 + diff --git a/patches-20.x/0016-uhttp-adds-the-deployed-option.patch b/patches-20.x/0016-uhttp-adds-the-deployed-option.patch new file mode 100644 index 000000000..8c955486b --- /dev/null +++ b/patches-20.x/0016-uhttp-adds-the-deployed-option.patch @@ -0,0 +1,31 @@ +From c77970b0f266ab7213e568b704080e90023c0f44 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 29 Jul 2020 14:11:39 +0200 +Subject: [PATCH 16/25] uhttp: adds the deployed option + +This allows us to make sure the webui is not automatically started if the +unit is already deployed. + +Signed-off-by: John Crispin +--- + package/network/services/uhttpd/files/uhttpd.init | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/package/network/services/uhttpd/files/uhttpd.init b/package/network/services/uhttpd/files/uhttpd.init +index 869f79bea2..001ca5ee0f 100755 +--- a/package/network/services/uhttpd/files/uhttpd.init ++++ b/package/network/services/uhttpd/files/uhttpd.init +@@ -211,3 +211,10 @@ start_service() { + config_load uhttpd + config_foreach start_instance uhttpd + } ++ ++boot() { ++ local deployed=$(uci get uhttpd.main.deployed) ++ ++ [ "$deployed" -eq 1 ] && return 0 ++ start $@ ++} +-- +2.25.1 + diff --git a/patches-20.x/0017-ipq807x-buildsystem-patches-required-by-the-target.patch b/patches-20.x/0017-ipq807x-buildsystem-patches-required-by-the-target.patch new file mode 100644 index 000000000..7ee537ce5 --- /dev/null +++ b/patches-20.x/0017-ipq807x-buildsystem-patches-required-by-the-target.patch @@ -0,0 +1,5013 @@ +From 6da2b307388476add8b78c8e54c80ca5952a06d2 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sat, 20 Jun 2020 16:28:50 +0200 +Subject: [PATCH 17/25] ipq807x: buildsystem patches required by the target + +The target uses the v4.4 kernel and requires these patches to build +properly. + +Signed-off-by: John Crispin +--- + config/Config-images.in | 1 + + include/kernel-version.mk | 2 + + include/kernel.mk | 4 +- + include/netfilter.mk | 1 + + include/quilt.mk | 4 + + include/target.mk | 8 +- + package/kernel/linux/modules/usb.mk | 19 + + target/linux/generic/config-4.4 | 4794 +++++++++++++++++++++++++++ + toolchain/gcc/Config.in | 2 + + toolchain/gcc/Config.version | 1 + + toolchain/kernel-headers/Makefile | 2 +- + 11 files changed, 4834 insertions(+), 4 deletions(-) + create mode 100644 target/linux/generic/config-4.4 + +diff --git a/config/Config-images.in b/config/Config-images.in +index 7d56d70908..cebefc9771 100644 +--- a/config/Config-images.in ++++ b/config/Config-images.in +@@ -19,6 +19,7 @@ menu "Target Images" + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_lantiq + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips ++ default TARGET_INITRAMFS_COMPRESSION_GZIP if TARGET_ipq807x + default TARGET_INITRAMFS_COMPRESSION_NONE + depends on TARGET_ROOTFS_INITRAMFS + help +diff --git a/include/kernel-version.mk b/include/kernel-version.mk +index f28543e2e5..98a00f23b1 100644 +--- a/include/kernel-version.mk ++++ b/include/kernel-version.mk +@@ -6,8 +6,10 @@ ifdef CONFIG_TESTING_KERNEL + KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER) + endif + ++LINUX_VERSION-4.4 = .60 + LINUX_VERSION-5.4 = .80 + ++LINUX_KERNEL_HASH-4.4.60 = 2cd8df6f1ac6a5329c5a286ec9b5956215977221a1b731597ed169fff74a9659 + LINUX_KERNEL_HASH-5.4.80 = 49da425c1f3c530fd3ff31d85a0461f6b6dc6e459f7faf3eee23e49a98ce64c7 + + remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) +diff --git a/include/kernel.mk b/include/kernel.mk +index 1466048b0c..efbca0f3a5 100644 +--- a/include/kernel.mk ++++ b/include/kernel.mk +@@ -47,7 +47,7 @@ else + FILES_DIR ?= $(foreach dir,$(wildcard $(CURDIR)/files $(CURDIR)/files-$(KERNEL_PATCHVER)),"$(dir)") + endif + KERNEL_BUILD_DIR ?= $(BUILD_DIR)/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET)) +- LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) ++ LINUX_DIR ?= $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)$(KERNEL_NAME_SUFFIX) + LINUX_UAPI_DIR=uapi/ + LINUX_VERMAGIC:=$(strip $(shell cat $(LINUX_DIR)/.vermagic 2>/dev/null)) + LINUX_VERMAGIC:=$(if $(LINUX_VERMAGIC),$(LINUX_VERMAGIC),unknown) +@@ -62,7 +62,7 @@ else + ifneq (,$(findstring -rc,$(LINUX_VERSION))) + LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.gz + else +- LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz ++ LINUX_SOURCE:=linux-$(LINUX_VERSION)$(KERNEL_NAME_SUFFIX).tar.xz + endif + + ifneq (,$(findstring -rc,$(LINUX_VERSION))) +diff --git a/include/netfilter.mk b/include/netfilter.mk +index 889beb7a98..3a855716fd 100644 +--- a/include/netfilter.mk ++++ b/include/netfilter.mk +@@ -46,6 +46,7 @@ $(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_LIMIT, $(P_XT)xt_limit)) + $(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MAC, $(P_XT)xt_mac)) + $(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_MULTIPORT, $(P_XT)xt_multiport)) + $(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_COMMENT, $(P_XT)xt_comment)) ++$(eval $(call nf_add,IPT_CORE,CONFIG_NETFILTER_XT_MATCH_ID, $(P_XT)xt_id)) + + #cluster + $(eval $(call nf_add,IPT_CLUSTER,CONFIG_NETFILTER_XT_MATCH_CLUSTER, $(P_XT)xt_cluster)) +diff --git a/include/quilt.mk b/include/quilt.mk +index 56f674a2f3..2e9ed7154f 100644 +--- a/include/quilt.mk ++++ b/include/quilt.mk +@@ -101,9 +101,11 @@ define Kernel/Patch/Default + echo "generic patches directory is present. please move your patches to the pending directory" ; \ + exit 1; \ + fi ++ifneq ($(CONFIG_TARGET_ipq807x),y) + $(call PatchDir,$(LINUX_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) + $(call PatchDir,$(LINUX_DIR),$(GENERIC_PATCH_DIR),generic/) + $(call PatchDir,$(LINUX_DIR),$(GENERIC_HACK_DIR),generic-hack/) ++endif + $(call PatchDir,$(LINUX_DIR),$(PATCH_DIR),platform/) + endef + +@@ -130,9 +132,11 @@ define Quilt/Refresh/Kernel + echo "All kernel patches must start with either generic/ or platform/"; \ + false; \ + } ++ifneq ($(CONFIG_TARGET_ipq807x),y) + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_BACKPORT_DIR),generic-backport/) + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/) + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(GENERIC_HACK_DIR),generic-hack/) ++endif + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/) + endef + +diff --git a/include/target.mk b/include/target.mk +index edc6a146de..4e7c97730c 100644 +--- a/include/target.mk ++++ b/include/target.mk +@@ -141,11 +141,17 @@ ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),) + endif + + GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic ++ifeq ($(CONFIG_TARGET_ipq807x),y) ++GENERIC_BACKPORT_DIR := ++GENERIC_PATCH_DIR := ++GENERIC_HACK_DIR := ++GENERIC_FILES_DIR := ++else + GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) + GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) + GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER)) + GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)") +- ++endif + __config_name_list = $(1)/config-$(KERNEL_PATCHVER) $(1)/config-default + __config_list = $(firstword $(wildcard $(call __config_name_list,$(1)))) + find_kernel_config=$(if $(__config_list),$(__config_list),$(lastword $(__config_name_list))) +diff --git a/package/kernel/linux/modules/usb.mk b/package/kernel/linux/modules/usb.mk +index eaf9eadb28..9155e319a9 100644 +--- a/package/kernel/linux/modules/usb.mk ++++ b/package/kernel/linux/modules/usb.mk +@@ -458,6 +458,25 @@ endef + $(eval $(call KernelPackage,usb-dwc3)) + + ++define KernelPackage/usb-dwc3-of-simple ++ TITLE:=DWC3 USB simple OF driver ++ DEPENDS:=@!LINUX_4_19 @(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x) +kmod-usb-dwc3 ++ KCONFIG:= CONFIG_USB_DWC3_OF_SIMPLE ++ FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-of-simple.ko \ ++ $(LINUX_DIR)/drivers/usb/dwc3/dbm.ko@le4.4 ++ AUTOLOAD:=$(call AutoLoad,53,dwc3-of-simple,1) ++ $(call AddDepends/usb) ++endef ++ ++define KernelPackage/usb-dwc3-of-simple/description ++ This driver provides generic platform glue for the integrated DesignWare ++ USB3 IP Core. ++endef ++ ++ ++$(eval $(call KernelPackage,usb-dwc3-of-simple)) ++ ++ + define KernelPackage/usb-dwc3-qcom + TITLE:=DWC3 Qualcomm USB driver + DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x) +kmod-usb-dwc3 +diff --git a/target/linux/generic/config-4.4 b/target/linux/generic/config-4.4 +new file mode 100644 +index 0000000000..4e7602f236 +--- /dev/null ++++ b/target/linux/generic/config-4.4 +@@ -0,0 +1,4794 @@ ++CONFIG_32BIT=y ++# CONFIG_6LOWPAN is not set ++# CONFIG_6PACK is not set ++# CONFIG_8139CP is not set ++# CONFIG_8139TOO is not set ++# CONFIG_9P_FS is not set ++# CONFIG_AB3100_CORE is not set ++# CONFIG_AB8500_CORE is not set ++# CONFIG_ABX500_CORE is not set ++# CONFIG_ACCESSIBILITY is not set ++# CONFIG_ACENIC is not set ++# CONFIG_ACERHDF is not set ++# CONFIG_ACORN_PARTITION is not set ++# CONFIG_ACPI_ALS is not set ++# CONFIG_ACPI_APEI is not set ++# CONFIG_ACPI_BUTTON is not set ++# CONFIG_ACPI_CUSTOM_METHOD is not set ++# CONFIG_ACPI_EXTLOG is not set ++# CONFIG_ACPI_HED is not set ++# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set ++# CONFIG_AD2S1200 is not set ++# CONFIG_AD2S1210 is not set ++# CONFIG_AD2S90 is not set ++# CONFIG_AD5064 is not set ++# CONFIG_AD525X_DPOT is not set ++# CONFIG_AD5360 is not set ++# CONFIG_AD5380 is not set ++# CONFIG_AD5421 is not set ++# CONFIG_AD5446 is not set ++# CONFIG_AD5449 is not set ++# CONFIG_AD5504 is not set ++# CONFIG_AD5624R_SPI is not set ++# CONFIG_AD5686 is not set ++# CONFIG_AD5755 is not set ++# CONFIG_AD5764 is not set ++# CONFIG_AD5791 is not set ++# CONFIG_AD5933 is not set ++# CONFIG_AD7150 is not set ++# CONFIG_AD7152 is not set ++# CONFIG_AD7192 is not set ++# CONFIG_AD7266 is not set ++# CONFIG_AD7280 is not set ++# CONFIG_AD7291 is not set ++# CONFIG_AD7298 is not set ++# CONFIG_AD7303 is not set ++# CONFIG_AD7476 is not set ++# CONFIG_AD7606 is not set ++# CONFIG_AD7746 is not set ++# CONFIG_AD7780 is not set ++# CONFIG_AD7791 is not set ++# CONFIG_AD7793 is not set ++# CONFIG_AD7816 is not set ++# CONFIG_AD7887 is not set ++# CONFIG_AD7923 is not set ++# CONFIG_AD799X is not set ++# CONFIG_AD8366 is not set ++# CONFIG_AD9523 is not set ++# CONFIG_AD9832 is not set ++# CONFIG_AD9834 is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_ADE7753 is not set ++# CONFIG_ADE7754 is not set ++# CONFIG_ADE7758 is not set ++# CONFIG_ADE7759 is not set ++# CONFIG_ADE7854 is not set ++# CONFIG_ADF4350 is not set ++# CONFIG_ADFS_FS is not set ++# CONFIG_ADIS16060 is not set ++# CONFIG_ADIS16080 is not set ++# CONFIG_ADIS16130 is not set ++# CONFIG_ADIS16136 is not set ++# CONFIG_ADIS16201 is not set ++# CONFIG_ADIS16203 is not set ++# CONFIG_ADIS16204 is not set ++# CONFIG_ADIS16209 is not set ++# CONFIG_ADIS16220 is not set ++# CONFIG_ADIS16240 is not set ++# CONFIG_ADIS16260 is not set ++# CONFIG_ADIS16400 is not set ++# CONFIG_ADIS16480 is not set ++# CONFIG_ADJD_S311 is not set ++# CONFIG_ADM6996_PHY is not set ++# CONFIG_ADM8211 is not set ++# CONFIG_ADT7316 is not set ++# CONFIG_ADVISE_SYSCALLS is not set ++# CONFIG_ADXRS450 is not set ++CONFIG_AEABI=y ++# CONFIG_AFFS_FS is not set ++# CONFIG_AFS_FS is not set ++# CONFIG_AF_RXRPC is not set ++# CONFIG_AGP is not set ++# CONFIG_AHCI_CEVA is not set ++# CONFIG_AHCI_MVEBU is not set ++# CONFIG_AHCI_QORIQ is not set ++CONFIG_AIO=y ++# CONFIG_AIRO is not set ++# CONFIG_AIRO_CS is not set ++# CONFIG_AIX_PARTITION is not set ++# CONFIG_AK09911 is not set ++# CONFIG_AK8975 is not set ++# CONFIG_AL3320A is not set ++# CONFIG_ALIM7101_WDT is not set ++CONFIG_ALLOW_DEV_COREDUMP=y ++# CONFIG_ALTERA_MBOX is not set ++# CONFIG_ALTERA_STAPL is not set ++# CONFIG_ALTERA_TSE is not set ++# CONFIG_ALX is not set ++# CONFIG_AM335X_PHY_USB is not set ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_AMD_PHY is not set ++# CONFIG_AMD_XGBE is not set ++# CONFIG_AMIGA_PARTITION is not set ++# CONFIG_AMILO_RFKILL is not set ++# CONFIG_ANDROID is not set ++CONFIG_ANON_INODES=y ++# CONFIG_APDS9300 is not set ++# CONFIG_APDS9802ALS is not set ++# CONFIG_APDS9960 is not set ++# CONFIG_APM8018X is not set ++# CONFIG_APPLE_GMUX is not set ++# CONFIG_APPLICOM is not set ++# CONFIG_AQUANTIA_PHY is not set ++# CONFIG_AR5523 is not set ++# CONFIG_AR7 is not set ++# CONFIG_AR8216_PHY is not set ++# CONFIG_AR8216_PHY_LEDS is not set ++# CONFIG_ARCH_ALPINE is not set ++# CONFIG_ARCH_AT91 is not set ++# CONFIG_ARCH_BCM is not set ++# CONFIG_ARCH_BCM2835 is not set ++# CONFIG_ARCH_BERLIN is not set ++# CONFIG_ARCH_CLPS711X is not set ++# CONFIG_ARCH_CNS3XXX is not set ++# CONFIG_ARCH_DAVINCI is not set ++# CONFIG_ARCH_DIGICOLOR is not set ++# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set ++# CONFIG_ARCH_DOVE is not set ++# CONFIG_ARCH_EBSA110 is not set ++# CONFIG_ARCH_EP93XX is not set ++# CONFIG_ARCH_EXYNOS is not set ++CONFIG_ARCH_FLATMEM_ENABLE=y ++# CONFIG_ARCH_FOOTBRIDGE is not set ++# CONFIG_ARCH_GEMINI is not set ++# CONFIG_ARCH_HAS_ILOG2_U32 is not set ++# CONFIG_ARCH_HAS_ILOG2_U64 is not set ++# CONFIG_ARCH_HI3xxx is not set ++# CONFIG_ARCH_HIGHBANK is not set ++# CONFIG_ARCH_HISI is not set ++# CONFIG_ARCH_INTEGRATOR is not set ++# CONFIG_ARCH_IOP13XX is not set ++# CONFIG_ARCH_IOP32X is not set ++# CONFIG_ARCH_IOP33X is not set ++# CONFIG_ARCH_IXP4XX is not set ++# CONFIG_ARCH_KEYSTONE is not set ++# CONFIG_ARCH_KS8695 is not set ++# CONFIG_ARCH_LPC32XX is not set ++# CONFIG_ARCH_MEDIATEK is not set ++# CONFIG_ARCH_MESON is not set ++# CONFIG_ARCH_MMP is not set ++# CONFIG_ARCH_MULTIPLATFORM is not set ++# CONFIG_ARCH_MULTI_V6 is not set ++# CONFIG_ARCH_MULTI_V7 is not set ++# CONFIG_ARCH_MV78XX0 is not set ++# CONFIG_ARCH_MVEBU is not set ++# CONFIG_ARCH_MXC is not set ++# CONFIG_ARCH_MXS is not set ++# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set ++# CONFIG_ARCH_NETX is not set ++# CONFIG_ARCH_NOMADIK is not set ++# CONFIG_ARCH_NSPIRE is not set ++# CONFIG_ARCH_OMAP is not set ++# CONFIG_ARCH_OMAP1 is not set ++# CONFIG_ARCH_OMAP2PLUS is not set ++# CONFIG_ARCH_OMAP3 is not set ++# CONFIG_ARCH_OMAP4 is not set ++# CONFIG_ARCH_ORION5X is not set ++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set ++# CONFIG_ARCH_PICOXCELL is not set ++# CONFIG_ARCH_PRIMA2 is not set ++# CONFIG_ARCH_PXA is not set ++# CONFIG_ARCH_QCOM is not set ++# CONFIG_ARCH_REALVIEW is not set ++# CONFIG_ARCH_ROCKCHIP is not set ++# CONFIG_ARCH_RPC is not set ++# CONFIG_ARCH_S3C24XX is not set ++# CONFIG_ARCH_S3C64XX is not set ++# CONFIG_ARCH_S5PV210 is not set ++# CONFIG_ARCH_SA1100 is not set ++# CONFIG_ARCH_SHMOBILE is not set ++# CONFIG_ARCH_SHMOBILE_MULTI is not set ++# CONFIG_ARCH_SIRF is not set ++# CONFIG_ARCH_SOCFPGA is not set ++# CONFIG_ARCH_STI is not set ++# CONFIG_ARCH_SUNXI is not set ++# CONFIG_ARCH_TEGRA is not set ++# CONFIG_ARCH_U300 is not set ++# CONFIG_ARCH_U8500 is not set ++# CONFIG_ARCH_UNIPHIER is not set ++# CONFIG_ARCH_VERSATILE is not set ++# CONFIG_ARCH_VEXPRESS is not set ++# CONFIG_ARCH_VIRT is not set ++# CONFIG_ARCH_VT8500 is not set ++# CONFIG_ARCH_W90X900 is not set ++# CONFIG_ARCH_WM8505 is not set ++# CONFIG_ARCH_WM8850 is not set ++# CONFIG_ARCH_ZX is not set ++# CONFIG_ARCH_ZYNQ is not set ++# CONFIG_ARCNET is not set ++# CONFIG_ARC_EMAC is not set ++# CONFIG_ARM_APPENDED_DTB is not set ++# CONFIG_ARM_ARCH_TIMER is not set ++# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set ++# CONFIG_ARM_CCI is not set ++# CONFIG_ARM_CCI400_PMU is not set ++# CONFIG_ARM_CCI500_PMU is not set ++# CONFIG_ARM_CCN is not set ++CONFIG_ARM_CPU_TOPOLOGY=y ++# CONFIG_ARM_CPUIDLE is not set ++# CONFIG_ARM_CRYPTO is not set ++CONFIG_ARM_DMA_MEM_BUFFERABLE=y ++# CONFIG_ARM_ERRATA_326103 is not set ++# CONFIG_ARM_ERRATA_364296 is not set ++# CONFIG_ARM_ERRATA_411920 is not set ++# CONFIG_ARM_ERRATA_430973 is not set ++# CONFIG_ARM_ERRATA_458693 is not set ++# CONFIG_ARM_ERRATA_460075 is not set ++# CONFIG_ARM_ERRATA_643719 is not set ++# CONFIG_ARM_ERRATA_720789 is not set ++# CONFIG_ARM_ERRATA_742230 is not set ++# CONFIG_ARM_ERRATA_742231 is not set ++# CONFIG_ARM_ERRATA_743622 is not set ++# CONFIG_ARM_ERRATA_751472 is not set ++# CONFIG_ARM_ERRATA_754322 is not set ++# CONFIG_ARM_ERRATA_754327 is not set ++# CONFIG_ARM_ERRATA_764369 is not set ++# CONFIG_ARM_ERRATA_773022 is not set ++# CONFIG_ARM_ERRATA_775420 is not set ++# CONFIG_ARM_ERRATA_798181 is not set ++# CONFIG_ARM_KERNMEM_PERMS is not set ++# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set ++# CONFIG_ARM_KPROBES_TEST is not set ++# CONFIG_ARM_MHU is not set ++# CONFIG_ARM_MODULE_PLTS is not set ++# CONFIG_ARM_PATCH_PHYS_VIRT is not set ++# CONFIG_ARM_PSCI is not set ++# CONFIG_ARM_PTDUMP is not set ++# CONFIG_ARM_TIMER_SP804 is not set ++# CONFIG_ARM_UNWIND is not set ++# CONFIG_ARM_VIRT_EXT is not set ++# CONFIG_AS3935 is not set ++# CONFIG_ASM9260_TIMER is not set ++# CONFIG_ASUS_LAPTOP is not set ++# CONFIG_ASYMMETRIC_KEY_TYPE is not set ++# CONFIG_ASYNC_RAID6_TEST is not set ++# CONFIG_ASYNC_TX_DMA is not set ++# CONFIG_AT76C50X_USB is not set ++# CONFIG_AT803X_PHY is not set ++# CONFIG_ATA is not set ++# CONFIG_ATAGS is not set ++CONFIG_ATAGS_PROC=y ++# CONFIG_ATALK is not set ++# CONFIG_ATARI_PARTITION is not set ++# CONFIG_ATA_ACPI is not set ++CONFIG_ATA_BMDMA=y ++# CONFIG_ATA_GENERIC is not set ++# CONFIG_ATA_NONSTANDARD is not set ++# CONFIG_ATA_OVER_ETH is not set ++# CONFIG_ATA_PIIX is not set ++CONFIG_ATA_SFF=y ++# CONFIG_ATA_VERBOSE_ERROR is not set ++# CONFIG_ATH10K is not set ++# CONFIG_ATH25 is not set ++# CONFIG_ATH5K is not set ++# CONFIG_ATH6KL is not set ++# CONFIG_ATH79 is not set ++# CONFIG_ATH9K is not set ++# CONFIG_ATH9K_HTC is not set ++# CONFIG_ATH_DEBUG is not set ++# CONFIG_ATL1 is not set ++# CONFIG_ATL1C is not set ++# CONFIG_ATL1E is not set ++# CONFIG_ATL2 is not set ++# CONFIG_ATM is not set ++# CONFIG_ATMEL is not set ++# CONFIG_ATMEL_PIT is not set ++# CONFIG_ATMEL_SSC is not set ++# CONFIG_ATM_AMBASSADOR is not set ++# CONFIG_ATM_BR2684 is not set ++CONFIG_ATM_BR2684_IPFILTER=y ++# CONFIG_ATM_CLIP is not set ++CONFIG_ATM_CLIP_NO_ICMP=y ++# CONFIG_ATM_DRIVERS is not set ++# CONFIG_ATM_DUMMY is not set ++# CONFIG_ATM_ENI is not set ++# CONFIG_ATM_FIRESTREAM is not set ++# CONFIG_ATM_FORE200E is not set ++# CONFIG_ATM_HE is not set ++# CONFIG_ATM_HORIZON is not set ++# CONFIG_ATM_IA is not set ++# CONFIG_ATM_IDT77252 is not set ++# CONFIG_ATM_LANAI is not set ++# CONFIG_ATM_LANE is not set ++# CONFIG_ATM_MPOA is not set ++# CONFIG_ATM_NICSTAR is not set ++# CONFIG_ATM_SOLOS is not set ++# CONFIG_ATM_TCP is not set ++# CONFIG_ATM_ZATM is not set ++# CONFIG_ATOMIC64_SELFTEST is not set ++# CONFIG_ATP is not set ++# CONFIG_AUDIT is not set ++# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set ++# CONFIG_AURORA_NB8800 is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_AUTO_ZRELADDR is not set ++# CONFIG_AUXDISPLAY is not set ++# CONFIG_AX25 is not set ++# CONFIG_AX25_DAMA_SLAVE is not set ++# CONFIG_AX88796 is not set ++# CONFIG_AXP288_ADC is not set ++# CONFIG_AXP288_FUEL_GAUGE is not set ++# CONFIG_B43 is not set ++# CONFIG_B43LEGACY is not set ++# CONFIG_B44 is not set ++# CONFIG_B53 is not set ++# CONFIG_B53_SPI_DRIVER is not set ++# CONFIG_BACKLIGHT_ADP8860 is not set ++# CONFIG_BACKLIGHT_ADP8870 is not set ++# CONFIG_BACKLIGHT_BD6107 is not set ++# CONFIG_BACKLIGHT_GENERIC is not set ++# CONFIG_BACKLIGHT_GPIO is not set ++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set ++# CONFIG_BACKLIGHT_LM3630A is not set ++# CONFIG_BACKLIGHT_LM3639 is not set ++# CONFIG_BACKLIGHT_LP855X is not set ++# CONFIG_BACKLIGHT_LV5207LP is not set ++# CONFIG_BACKLIGHT_PANDORA is not set ++# CONFIG_BACKLIGHT_PM8941_WLED is not set ++# CONFIG_BACKLIGHT_RPI is not set ++# CONFIG_BACKLIGHT_SAHARA is not set ++# CONFIG_BACKTRACE_SELF_TEST is not set ++CONFIG_BASE_FULL=y ++CONFIG_BASE_SMALL=0 ++# CONFIG_BATMAN_ADV is not set ++# CONFIG_BATTERY_BQ27XXX is not set ++# CONFIG_BATTERY_DS2760 is not set ++# CONFIG_BATTERY_DS2780 is not set ++# CONFIG_BATTERY_DS2781 is not set ++# CONFIG_BATTERY_DS2782 is not set ++# CONFIG_BATTERY_GAUGE_LTC2941 is not set ++# CONFIG_BATTERY_GOLDFISH is not set ++# CONFIG_BATTERY_MAX17040 is not set ++# CONFIG_BATTERY_MAX17042 is not set ++# CONFIG_BATTERY_SBS is not set ++# CONFIG_BAYCOM_EPP is not set ++# CONFIG_BAYCOM_PAR is not set ++# CONFIG_BAYCOM_SER_FDX is not set ++# CONFIG_BAYCOM_SER_HDX is not set ++# CONFIG_BCACHE is not set ++# CONFIG_BCM47XX is not set ++# CONFIG_BCM63XX is not set ++# CONFIG_BCM63XX_PHY is not set ++# CONFIG_BCM7038_WDT is not set ++# CONFIG_BCM7XXX_PHY is not set ++# CONFIG_BCM87XX_PHY is not set ++# CONFIG_BCMA is not set ++# CONFIG_BCMA_DRIVER_GPIO is not set ++CONFIG_BCMA_POSSIBLE=y ++# CONFIG_BCMGENET is not set ++# CONFIG_BCM_KONA_USB2_PHY is not set ++# CONFIG_BDI_SWITCH is not set ++# CONFIG_BE2ISCSI is not set ++# CONFIG_BE2NET is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_BGMAC is not set ++# CONFIG_BH1750 is not set ++# CONFIG_BIG_KEYS is not set ++# CONFIG_BIG_LITTLE is not set ++# CONFIG_BINARY_PRINTF is not set ++# CONFIG_BINFMT_AOUT is not set ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_MISC is not set ++CONFIG_BINFMT_SCRIPT=y ++CONFIG_BITREVERSE=y ++# CONFIG_BLK_CMDLINE_PARSER is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_CPQ_DA is not set ++CONFIG_BLK_DEV=y ++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set ++# CONFIG_BLK_DEV_4DRIVES is not set ++# CONFIG_BLK_DEV_AEC62XX is not set ++# CONFIG_BLK_DEV_ALI14XX is not set ++# CONFIG_BLK_DEV_ALI15X3 is not set ++# CONFIG_BLK_DEV_AMD74XX is not set ++# CONFIG_BLK_DEV_ATIIXP is not set ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_BLK_DEV_BSGLIB is not set ++# CONFIG_BLK_DEV_CMD640 is not set ++# CONFIG_BLK_DEV_CMD64X is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++# CONFIG_BLK_DEV_CRYPTOLOOP is not set ++# CONFIG_BLK_DEV_CS5520 is not set ++# CONFIG_BLK_DEV_CS5530 is not set ++# CONFIG_BLK_DEV_CS5535 is not set ++# CONFIG_BLK_DEV_CS5536 is not set ++# CONFIG_BLK_DEV_CY82C693 is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++# CONFIG_BLK_DEV_DELKIN is not set ++# CONFIG_BLK_DEV_DRBD is not set ++# CONFIG_BLK_DEV_DTC2278 is not set ++# CONFIG_BLK_DEV_FD is not set ++# CONFIG_BLK_DEV_GENERIC is not set ++# CONFIG_BLK_DEV_HD is not set ++# CONFIG_BLK_DEV_HPT366 is not set ++# CONFIG_BLK_DEV_HT6560B is not set ++# CONFIG_BLK_DEV_IDEACPI is not set ++# CONFIG_BLK_DEV_IDECD is not set ++# CONFIG_BLK_DEV_IDECS is not set ++# CONFIG_BLK_DEV_IDEPCI is not set ++# CONFIG_BLK_DEV_IDEPNP is not set ++# CONFIG_BLK_DEV_IDETAPE is not set ++# CONFIG_BLK_DEV_IDE_AU1XXX is not set ++# CONFIG_BLK_DEV_IDE_SATA is not set ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_BLK_DEV_INTEGRITY is not set ++# CONFIG_BLK_DEV_IO_TRACE is not set ++# CONFIG_BLK_DEV_IT8172 is not set ++# CONFIG_BLK_DEV_IT8213 is not set ++# CONFIG_BLK_DEV_IT821X is not set ++# CONFIG_BLK_DEV_JMICRON is not set ++# CONFIG_BLK_DEV_LOOP is not set ++CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_NS87415 is not set ++# CONFIG_BLK_DEV_NULL_BLK is not set ++# CONFIG_BLK_DEV_NVME is not set ++# CONFIG_BLK_DEV_OFFBOARD is not set ++# CONFIG_BLK_DEV_OPTI621 is not set ++# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set ++# CONFIG_BLK_DEV_PDC202XX_NEW is not set ++# CONFIG_BLK_DEV_PDC202XX_OLD is not set ++# CONFIG_BLK_DEV_PIIX is not set ++# CONFIG_BLK_DEV_PLATFORM is not set ++# CONFIG_BLK_DEV_PMEM is not set ++# CONFIG_BLK_DEV_QD65XX is not set ++# CONFIG_BLK_DEV_RAM is not set ++# CONFIG_BLK_DEV_RBD is not set ++# CONFIG_BLK_DEV_RSXX is not set ++# CONFIG_BLK_DEV_RZ1000 is not set ++# CONFIG_BLK_DEV_SC1200 is not set ++# CONFIG_BLK_DEV_SD is not set ++# CONFIG_BLK_DEV_SIIMAGE is not set ++# CONFIG_BLK_DEV_SIS5513 is not set ++# CONFIG_BLK_DEV_SKD is not set ++# CONFIG_BLK_DEV_SL82C105 is not set ++# CONFIG_BLK_DEV_SLC90E66 is not set ++# CONFIG_BLK_DEV_SR is not set ++# CONFIG_BLK_DEV_SVWKS is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_TC86C001 is not set ++# CONFIG_BLK_DEV_THROTTLING is not set ++# CONFIG_BLK_DEV_TRIFLEX is not set ++# CONFIG_BLK_DEV_TRM290 is not set ++# CONFIG_BLK_DEV_UMC8672 is not set ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_VIA82CXXX is not set ++CONFIG_BLOCK=y ++# CONFIG_BMA180 is not set ++# CONFIG_BMC150_ACCEL is not set ++# CONFIG_BMC150_MAGN is not set ++# CONFIG_BMG160 is not set ++# CONFIG_BMIPS_GENERIC is not set ++# CONFIG_BMP085 is not set ++# CONFIG_BMP085_I2C is not set ++# CONFIG_BMP085_SPI is not set ++# CONFIG_BMP280 is not set ++# CONFIG_BNA is not set ++# CONFIG_BNX2 is not set ++# CONFIG_BNX2X is not set ++# CONFIG_BNXT is not set ++# CONFIG_BONDING is not set ++# CONFIG_BOOKE_WDT is not set ++CONFIG_BOOKE_WDT_DEFAULT_TIMEOUT=3 ++# CONFIG_BOOT_PRINTK_DELAY is not set ++CONFIG_BOOT_RAW=y ++CONFIG_BPF=y ++# CONFIG_BPF_JIT is not set ++CONFIG_BPF_SYSCALL=y ++# CONFIG_BPQETHER is not set ++CONFIG_BQL=y ++CONFIG_BRANCH_PROFILE_NONE=y ++# CONFIG_BRCMFMAC is not set ++# CONFIG_BRCMSMAC is not set ++# CONFIG_BRCMSTB_GISB_ARB is not set ++CONFIG_BRIDGE=y ++# CONFIG_BRIDGE_EBT_802_3 is not set ++# CONFIG_BRIDGE_EBT_AMONG is not set ++# CONFIG_BRIDGE_EBT_ARP is not set ++# CONFIG_BRIDGE_EBT_ARPREPLY is not set ++# CONFIG_BRIDGE_EBT_BROUTE is not set ++# CONFIG_BRIDGE_EBT_DNAT is not set ++# CONFIG_BRIDGE_EBT_IP is not set ++# CONFIG_BRIDGE_EBT_IP6 is not set ++# CONFIG_BRIDGE_EBT_LIMIT is not set ++# CONFIG_BRIDGE_EBT_LOG is not set ++# CONFIG_BRIDGE_EBT_MARK is not set ++# CONFIG_BRIDGE_EBT_MARK_T is not set ++# CONFIG_BRIDGE_EBT_NFLOG is not set ++# CONFIG_BRIDGE_EBT_PKTTYPE is not set ++# CONFIG_BRIDGE_EBT_REDIRECT is not set ++# CONFIG_BRIDGE_EBT_SNAT is not set ++# CONFIG_BRIDGE_EBT_STP is not set ++# CONFIG_BRIDGE_EBT_T_FILTER is not set ++# CONFIG_BRIDGE_EBT_T_NAT is not set ++# CONFIG_BRIDGE_EBT_VLAN is not set ++CONFIG_BRIDGE_IGMP_SNOOPING=y ++# CONFIG_BRIDGE_NETFILTER is not set ++# CONFIG_BRIDGE_NF_EBTABLES is not set ++# CONFIG_BRIDGE_VLAN_FILTERING is not set ++# CONFIG_BROADCOM_PHY is not set ++CONFIG_BROKEN_ON_SMP=y ++# CONFIG_BSD_DISKLABEL is not set ++# CONFIG_BSD_PROCESS_ACCT is not set ++# CONFIG_BSD_PROCESS_ACCT_V3 is not set ++# CONFIG_BT is not set ++# CONFIG_BTRFS_ASSERT is not set ++# CONFIG_BTRFS_DEBUG is not set ++# CONFIG_BTRFS_FS is not set ++# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set ++# CONFIG_BT_ATH3K is not set ++# CONFIG_BT_BNEP is not set ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++# CONFIG_BT_BREDR is not set ++# CONFIG_BT_CMTP is not set ++# CONFIG_BT_HCIBCM203X is not set ++# CONFIG_BT_HCIBFUSB is not set ++# CONFIG_BT_HCIBLUECARD is not set ++# CONFIG_BT_HCIBPA10X is not set ++# CONFIG_BT_HCIBT3C is not set ++# CONFIG_BT_HCIBTSDIO is not set ++# CONFIG_BT_HCIBTUART is not set ++# CONFIG_BT_HCIBTUSB is not set ++# CONFIG_BT_HCIBTUSB_RTL is not set ++# CONFIG_BT_HCIDTL1 is not set ++# CONFIG_BT_HCIUART is not set ++# CONFIG_BT_HCIUART_3WIRE is not set ++# CONFIG_BT_HCIUART_ATH3K is not set ++CONFIG_BT_HCIUART_BCSP=y ++CONFIG_BT_HCIUART_H4=y ++# CONFIG_BT_HCIUART_LL is not set ++# CONFIG_BT_HCIUART_QCA is not set ++# CONFIG_BT_HCIVHCI is not set ++# CONFIG_BT_HIDP is not set ++# CONFIG_BT_HS is not set ++# CONFIG_BT_LE is not set ++# CONFIG_BT_MRVL is not set ++# CONFIG_BT_RFCOMM is not set ++CONFIG_BT_RFCOMM_TTY=y ++# CONFIG_BT_SELFTEST is not set ++CONFIG_BUG=y ++CONFIG_BUILDTIME_EXTABLE_SORT=y ++# CONFIG_BUILD_BIN2C is not set ++# CONFIG_C2PORT is not set ++# CONFIG_CADENCE_WATCHDOG is not set ++# CONFIG_CAIF is not set ++# CONFIG_CAN is not set ++# CONFIG_CAN_BCM is not set ++# CONFIG_CAN_DEBUG_DEVICES is not set ++# CONFIG_CAN_DEV is not set ++# CONFIG_CAN_GS_USB is not set ++# CONFIG_CAN_GW is not set ++# CONFIG_CAN_M_CAN is not set ++# CONFIG_CAN_RAW is not set ++# CONFIG_CAN_RCAR is not set ++# CONFIG_CAN_SLCAN is not set ++# CONFIG_CAN_SUN4I is not set ++# CONFIG_CAN_VCAN is not set ++# CONFIG_CAPI_AVM is not set ++# CONFIG_CAPI_EICON is not set ++# CONFIG_CAPI_TRACE is not set ++CONFIG_CARDBUS=y ++# CONFIG_CARDMAN_4000 is not set ++# CONFIG_CARDMAN_4040 is not set ++# CONFIG_CARL9170 is not set ++# CONFIG_CASSINI is not set ++# CONFIG_CAVIUM_OCTEON_SOC is not set ++# CONFIG_CB710_CORE is not set ++# CONFIG_CC10001_ADC is not set ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++# CONFIG_CC_STACKPROTECTOR is not set ++CONFIG_CC_STACKPROTECTOR_NONE=y ++# CONFIG_CC_STACKPROTECTOR_REGULAR is not set ++# CONFIG_CC_STACKPROTECTOR_STRONG is not set ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_CEPH_FS is not set ++# CONFIG_CEPH_LIB is not set ++# CONFIG_CFG80211 is not set ++# CONFIG_CFG80211_CERTIFICATION_ONUS is not set ++# CONFIG_CGROUPS is not set ++# CONFIG_CGROUP_DEBUG is not set ++# CONFIG_CGROUP_NET_PRIO is not set ++# CONFIG_CHARGER_BQ2415X is not set ++# CONFIG_CHARGER_BQ24190 is not set ++# CONFIG_CHARGER_BQ24257 is not set ++# CONFIG_CHARGER_BQ24735 is not set ++# CONFIG_CHARGER_BQ25890 is not set ++# CONFIG_CHARGER_GPIO is not set ++# CONFIG_CHARGER_ISP1704 is not set ++# CONFIG_CHARGER_LP8727 is not set ++# CONFIG_CHARGER_MANAGER is not set ++# CONFIG_CHARGER_MAX8903 is not set ++# CONFIG_CHARGER_RT9455 is not set ++# CONFIG_CHARGER_SMB347 is not set ++# CONFIG_CHARGER_TWL4030 is not set ++# CONFIG_CHECKPOINT_RESTORE is not set ++# CONFIG_CHELSIO_T1 is not set ++# CONFIG_CHELSIO_T3 is not set ++# CONFIG_CHELSIO_T4 is not set ++# CONFIG_CHELSIO_T4VF is not set ++# CONFIG_CHROME_PLATFORMS is not set ++# CONFIG_CHR_DEV_OSST is not set ++# CONFIG_CHR_DEV_SCH is not set ++# CONFIG_CHR_DEV_SG is not set ++# CONFIG_CHR_DEV_ST is not set ++# CONFIG_CICADA_PHY is not set ++# CONFIG_CIFS is not set ++# CONFIG_CIFS_ACL is not set ++# CONFIG_CIFS_DEBUG is not set ++# CONFIG_CIFS_DEBUG2 is not set ++# CONFIG_CIFS_FSCACHE is not set ++# CONFIG_CIFS_NFSD_EXPORT is not set ++CONFIG_CIFS_POSIX=y ++# CONFIG_CIFS_SMB2 is not set ++CONFIG_CIFS_STATS=y ++# CONFIG_CIFS_STATS2 is not set ++# CONFIG_CIFS_WEAK_PW_HASH is not set ++# CONFIG_CIFS_XATTR is not set ++# CONFIG_CLEANCACHE is not set ++# CONFIG_CLKSRC_VERSATILE is not set ++# CONFIG_CLK_QORIQ is not set ++# CONFIG_CLOCK_THERMAL is not set ++CONFIG_CLS_U32_MARK=y ++# CONFIG_CLS_U32_PERF is not set ++# CONFIG_CM32181 is not set ++# CONFIG_CM3232 is not set ++# CONFIG_CM3323 is not set ++# CONFIG_CM36651 is not set ++# CONFIG_CMA is not set ++CONFIG_CMDLINE="" ++# CONFIG_CMDLINE_BOOL is not set ++# CONFIG_CMDLINE_EXTEND is not set ++# CONFIG_CMDLINE_FORCE is not set ++# CONFIG_CMDLINE_FROM_BOOTLOADER is not set ++# CONFIG_CMDLINE_PARTITION is not set ++# CONFIG_CNIC is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_CODE_PATCHING_SELFTEST is not set ++# CONFIG_COMEDI is not set ++# CONFIG_COMMON_CLK_CDCE706 is not set ++# CONFIG_COMMON_CLK_CDCE925 is not set ++# CONFIG_COMMON_CLK_IPROC is not set ++# CONFIG_COMMON_CLK_PWM is not set ++# CONFIG_COMMON_CLK_PXA is not set ++# CONFIG_COMMON_CLK_QCOM is not set ++# CONFIG_COMMON_CLK_SI514 is not set ++# CONFIG_COMMON_CLK_SI5351 is not set ++# CONFIG_COMMON_CLK_SI570 is not set ++# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set ++# CONFIG_COMPACTION is not set ++# CONFIG_COMPAL_LAPTOP is not set ++# CONFIG_COMPAT_BRK is not set ++# CONFIG_COMPILE_TEST is not set ++# CONFIG_CONFIGFS_FS is not set ++# CONFIG_CONNECTOR is not set ++CONFIG_CONSTRUCTORS=y ++# CONFIG_CONTEXT_SWITCH_TRACER is not set ++# CONFIG_COPS is not set ++# CONFIG_CORDIC is not set ++# CONFIG_COREDUMP is not set ++# CONFIG_CORESIGHT is not set ++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set ++# CONFIG_CPA_DEBUG is not set ++# CONFIG_CPU_DCACHE_DISABLE is not set ++# CONFIG_CPU_FREQ is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set ++# CONFIG_CPU_FREQ_STAT_DETAILS is not set ++# CONFIG_CPU_IDLE is not set ++# CONFIG_CPU_IDLE_GOV_MENU is not set ++# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set ++CONFIG_CPU_SW_DOMAIN_PAN=y ++# CONFIG_CRAMFS is not set ++# CONFIG_CRASHLOG is not set ++# CONFIG_CRASH_DUMP is not set ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=y ++# CONFIG_CRC32_BIT is not set ++CONFIG_CRC32_SARWATE=y ++# CONFIG_CRC32_SELFTEST is not set ++# CONFIG_CRC32_SLICEBY4 is not set ++# CONFIG_CRC32_SLICEBY8 is not set ++# CONFIG_CRC7 is not set ++# CONFIG_CRC8 is not set ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC_ITU_T is not set ++# CONFIG_CRC_T10DIF is not set ++CONFIG_CROSS_COMPILE="" ++# CONFIG_CROSS_MEMORY_ATTACH is not set ++CONFIG_CRYPTO=y ++# CONFIG_CRYPTO_842 is not set ++# CONFIG_CRYPTO_AEAD is not set ++CONFIG_CRYPTO_AES=y ++# CONFIG_CRYPTO_AES_586 is not set ++# CONFIG_CRYPTO_AES_ARM is not set ++# CONFIG_CRYPTO_AES_ARM_BS is not set ++# CONFIG_CRYPTO_AES_NI_INTEL is not set ++CONFIG_CRYPTO_ALGAPI=y ++CONFIG_CRYPTO_ALGAPI2=y ++# CONFIG_CRYPTO_ANSI_CPRNG is not set ++# CONFIG_CRYPTO_ANUBIS is not set ++CONFIG_CRYPTO_ARC4=y ++# CONFIG_CRYPTO_AUTHENC is not set ++CONFIG_CRYPTO_BLKCIPHER=y ++CONFIG_CRYPTO_BLKCIPHER2=y ++# CONFIG_CRYPTO_BLOWFISH is not set ++# CONFIG_CRYPTO_CAMELLIA is not set ++# CONFIG_CRYPTO_CAST5 is not set ++# CONFIG_CRYPTO_CAST6 is not set ++# CONFIG_CRYPTO_CBC is not set ++# CONFIG_CRYPTO_CCM is not set ++# CONFIG_CRYPTO_CHACHA20 is not set ++# CONFIG_CRYPTO_CHACHA20POLY1305 is not set ++# CONFIG_CRYPTO_CMAC is not set ++# CONFIG_CRYPTO_CRC32 is not set ++# CONFIG_CRYPTO_CRC32C is not set ++# CONFIG_CRYPTO_CRC32C_INTEL is not set ++# CONFIG_CRYPTO_CRCT10DIF is not set ++# CONFIG_CRYPTO_CRYPTD is not set ++# CONFIG_CRYPTO_CTR is not set ++# CONFIG_CRYPTO_CTS is not set ++# CONFIG_CRYPTO_DEFLATE is not set ++# CONFIG_CRYPTO_DES is not set ++# CONFIG_CRYPTO_DEV_ATMEL_AES is not set ++# CONFIG_CRYPTO_DEV_ATMEL_SHA is not set ++# CONFIG_CRYPTO_DEV_ATMEL_TDES is not set ++# CONFIG_CRYPTO_DEV_CCP is not set ++# CONFIG_CRYPTO_DEV_FSL_CAAM is not set ++# CONFIG_CRYPTO_DEV_HIFN_795X is not set ++# CONFIG_CRYPTO_DEV_IMGTEC_HASH is not set ++# CONFIG_CRYPTO_DEV_MARVELL_CESA is not set ++# CONFIG_CRYPTO_DEV_MV_CESA is not set ++# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set ++# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set ++# CONFIG_CRYPTO_DEV_QCE is not set ++# CONFIG_CRYPTO_DEV_SAHARA is not set ++# CONFIG_CRYPTO_DEV_TALITOS is not set ++# CONFIG_CRYPTO_DRBG_CTR is not set ++# CONFIG_CRYPTO_DRBG_HASH is not set ++# CONFIG_CRYPTO_DRBG_MENU is not set ++# CONFIG_CRYPTO_ECB is not set ++# CONFIG_CRYPTO_ECHAINIV is not set ++# CONFIG_CRYPTO_FCRYPT is not set ++# CONFIG_CRYPTO_FIPS is not set ++# CONFIG_CRYPTO_GCM is not set ++# CONFIG_CRYPTO_GF128MUL is not set ++# CONFIG_CRYPTO_GHASH is not set ++# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set ++# CONFIG_CRYPTO_HASH is not set ++# CONFIG_CRYPTO_HMAC is not set ++# CONFIG_CRYPTO_HW is not set ++# CONFIG_CRYPTO_JITTERENTROPY is not set ++# CONFIG_CRYPTO_KEYWRAP is not set ++# CONFIG_CRYPTO_KHAZAD is not set ++# CONFIG_CRYPTO_LRW is not set ++# CONFIG_CRYPTO_LZ4 is not set ++# CONFIG_CRYPTO_LZ4HC is not set ++# CONFIG_CRYPTO_LZO is not set ++# CONFIG_CRYPTO_MANAGER is not set ++# CONFIG_CRYPTO_MANAGER2 is not set ++CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y ++# CONFIG_CRYPTO_MCRYPTD is not set ++# CONFIG_CRYPTO_MD4 is not set ++# CONFIG_CRYPTO_MD5 is not set ++# CONFIG_CRYPTO_MICHAEL_MIC is not set ++# CONFIG_CRYPTO_NULL is not set ++# CONFIG_CRYPTO_PCBC is not set ++# CONFIG_CRYPTO_PCOMP is not set ++# CONFIG_CRYPTO_PCOMP2 is not set ++# CONFIG_CRYPTO_PCRYPT is not set ++# CONFIG_CRYPTO_POLY1305 is not set ++# CONFIG_CRYPTO_RMD128 is not set ++# CONFIG_CRYPTO_RMD160 is not set ++# CONFIG_CRYPTO_RMD256 is not set ++# CONFIG_CRYPTO_RMD320 is not set ++# CONFIG_CRYPTO_RNG is not set ++# CONFIG_CRYPTO_RSA is not set ++# CONFIG_CRYPTO_SALSA20 is not set ++# CONFIG_CRYPTO_SALSA20_586 is not set ++# CONFIG_CRYPTO_SEED is not set ++# CONFIG_CRYPTO_SEQIV is not set ++# CONFIG_CRYPTO_SERPENT is not set ++# CONFIG_CRYPTO_SHA1 is not set ++# CONFIG_CRYPTO_SHA1_ARM is not set ++# CONFIG_CRYPTO_SHA256 is not set ++# CONFIG_CRYPTO_SHA512 is not set ++# CONFIG_CRYPTO_TEA is not set ++# CONFIG_CRYPTO_TEST is not set ++# CONFIG_CRYPTO_TGR192 is not set ++# CONFIG_CRYPTO_TWOFISH is not set ++# CONFIG_CRYPTO_TWOFISH_586 is not set ++# CONFIG_CRYPTO_TWOFISH_COMMON is not set ++# CONFIG_CRYPTO_USER is not set ++# CONFIG_CRYPTO_USER_API_AEAD is not set ++# CONFIG_CRYPTO_USER_API_HASH is not set ++# CONFIG_CRYPTO_USER_API_RNG is not set ++# CONFIG_CRYPTO_USER_API_SKCIPHER is not set ++# CONFIG_CRYPTO_VMAC is not set ++# CONFIG_CRYPTO_WP512 is not set ++# CONFIG_CRYPTO_XCBC is not set ++# CONFIG_CRYPTO_XTS is not set ++# CONFIG_CRYPTO_XZ is not set ++# CONFIG_CRYPTO_ZLIB is not set ++# CONFIG_CS5535_MFGPT is not set ++# CONFIG_CS89x0 is not set ++# CONFIG_CUSE is not set ++# CONFIG_CW1200 is not set ++# CONFIG_CXL_BASE is not set ++# CONFIG_CXL_EEH is not set ++# CONFIG_CXL_KERNEL_API is not set ++# CONFIG_CYPRESS_FIRMWARE is not set ++# CONFIG_DAVICOM_PHY is not set ++# CONFIG_DCB is not set ++# CONFIG_DDR is not set ++# CONFIG_DEBUG_ATOMIC_SLEEP is not set ++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set ++# CONFIG_DEBUG_BUGVERBOSE is not set ++# CONFIG_DEBUG_CREDENTIALS is not set ++# CONFIG_DEBUG_DEVRES is not set ++# CONFIG_DEBUG_DRIVER is not set ++# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set ++CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_GPIO is not set ++# CONFIG_DEBUG_HIGHMEM is not set ++# CONFIG_DEBUG_ICEDCC is not set ++# CONFIG_DEBUG_INFO is not set ++# CONFIG_DEBUG_INFO_DWARF4 is not set ++CONFIG_DEBUG_INFO_REDUCED=y ++# CONFIG_DEBUG_INFO_SPLIT is not set ++CONFIG_DEBUG_KERNEL=y ++# CONFIG_DEBUG_KMEMLEAK is not set ++# CONFIG_DEBUG_KOBJECT is not set ++# CONFIG_DEBUG_KOBJECT_RELEASE is not set ++# CONFIG_DEBUG_LIST is not set ++# CONFIG_DEBUG_LL is not set ++# CONFIG_DEBUG_LL_UART_8250 is not set ++# CONFIG_DEBUG_LL_UART_PL01X is not set ++# CONFIG_DEBUG_LOCKDEP is not set ++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set ++# CONFIG_DEBUG_LOCK_ALLOC is not set ++# CONFIG_DEBUG_MEMORY_INIT is not set ++# CONFIG_DEBUG_MUTEXES is not set ++# CONFIG_DEBUG_NOTIFIERS is not set ++# CONFIG_DEBUG_NX_TEST is not set ++# CONFIG_DEBUG_OBJECTS is not set ++# CONFIG_DEBUG_PAGEALLOC is not set ++# CONFIG_DEBUG_PERF_USE_VMALLOC is not set ++# CONFIG_DEBUG_PER_CPU_MAPS is not set ++# CONFIG_DEBUG_PINCTRL is not set ++# CONFIG_DEBUG_PI_LIST is not set ++# CONFIG_DEBUG_PREEMPT is not set ++# CONFIG_DEBUG_RODATA is not set ++# CONFIG_DEBUG_RT_MUTEXES is not set ++# CONFIG_DEBUG_SECTION_MISMATCH is not set ++# CONFIG_DEBUG_SEMIHOSTING is not set ++# CONFIG_DEBUG_SET_MODULE_RONX is not set ++# CONFIG_DEBUG_SG is not set ++# CONFIG_DEBUG_SHIRQ is not set ++# CONFIG_DEBUG_SLAB is not set ++# CONFIG_DEBUG_SPINLOCK is not set ++# CONFIG_DEBUG_STACKOVERFLOW is not set ++# CONFIG_DEBUG_STACK_USAGE is not set ++# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set ++# CONFIG_DEBUG_TIMEKEEPING is not set ++# CONFIG_DEBUG_UART_BCM63XX is not set ++# CONFIG_DEBUG_VM is not set ++# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set ++# CONFIG_DEBUG_ZBOOT is not set ++# CONFIG_DECNET is not set ++CONFIG_DEFAULT_CUBIC=y ++CONFIG_DEFAULT_DEADLINE=y ++CONFIG_DEFAULT_HOSTNAME="(none)" ++CONFIG_DEFAULT_IOSCHED="deadline" ++CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 ++# CONFIG_DEFAULT_NOOP is not set ++# CONFIG_DEFAULT_RENO is not set ++CONFIG_DEFAULT_SECURITY="" ++CONFIG_DEFAULT_SECURITY_DAC=y ++CONFIG_DEFAULT_TCP_CONG="cubic" ++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ++# CONFIG_DELL_SMO8800 is not set ++# CONFIG_DEPRECATED_PARAM_STRUCT is not set ++# CONFIG_DETECT_HUNG_TASK is not set ++# CONFIG_DEVKMEM is not set ++# CONFIG_DEVMEM is not set ++CONFIG_DEVPORT=y ++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set ++# CONFIG_DEVTMPFS is not set ++# CONFIG_DEVTMPFS_MOUNT is not set ++# CONFIG_DGAP is not set ++# CONFIG_DGNC is not set ++# CONFIG_DHT11 is not set ++# CONFIG_DIRECT_IO is not set ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_DISPLAY_CONNECTOR_ANALOG_TV is not set ++# CONFIG_DISPLAY_CONNECTOR_DVI is not set ++# CONFIG_DISPLAY_CONNECTOR_HDMI is not set ++# CONFIG_DISPLAY_ENCODER_TFP410 is not set ++# CONFIG_DISPLAY_ENCODER_TPD12S015 is not set ++# CONFIG_DISPLAY_PANEL_DPI is not set ++# CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02 is not set ++# CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1 is not set ++# CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1 is not set ++# CONFIG_DL2K is not set ++# CONFIG_DLM is not set ++# CONFIG_DM9000 is not set ++# CONFIG_DMADEVICES is not set ++# CONFIG_DMADEVICES_DEBUG is not set ++# CONFIG_DMASCC is not set ++# CONFIG_DMATEST is not set ++# CONFIG_DMA_API_DEBUG is not set ++# CONFIG_DMA_ENGINE is not set ++# CONFIG_DMA_SHARED_BUFFER is not set ++# CONFIG_DM_CACHE is not set ++# CONFIG_DM_DEBUG is not set ++# CONFIG_DM_DELAY is not set ++# CONFIG_DM_ERA is not set ++# CONFIG_DM_FLAKEY is not set ++# CONFIG_DM_LOG_USERSPACE is not set ++# CONFIG_DM_MULTIPATH is not set ++# CONFIG_DM_RAID is not set ++# CONFIG_DM_SWITCH is not set ++# CONFIG_DM_THIN_PROVISIONING is not set ++# CONFIG_DM_UEVENT is not set ++# CONFIG_DM_VERITY is not set ++# CONFIG_DM_ZERO is not set ++# CONFIG_DNET is not set ++# CONFIG_DNOTIFY is not set ++# CONFIG_DNS_RESOLVER is not set ++CONFIG_DOUBLEFAULT=y ++# CONFIG_DP83848_PHY is not set ++# CONFIG_DP83867_PHY is not set ++CONFIG_DQL=y ++# CONFIG_DRAGONRISE_FF is not set ++# CONFIG_DRM is not set ++# CONFIG_DS1682 is not set ++# CONFIG_DTLK is not set ++# CONFIG_DUMMY is not set ++CONFIG_DUMMY_CONSOLE_COLUMNS=80 ++CONFIG_DUMMY_CONSOLE_ROWS=25 ++# CONFIG_DUMMY_IRQ is not set ++# CONFIG_DVB_AU8522_V4L is not set ++# CONFIG_DVB_CORE is not set ++# CONFIG_DVB_DUMMY_FE is not set ++# CONFIG_DVB_TUNER_DIB0070 is not set ++# CONFIG_DVB_TUNER_DIB0090 is not set ++# CONFIG_DWMAC_IPQ806X is not set ++# CONFIG_DWMAC_LPC18XX is not set ++# CONFIG_DWMAC_MESON is not set ++# CONFIG_DWMAC_ROCKCHIP is not set ++# CONFIG_DWMAC_SOCFPGA is not set ++# CONFIG_DWMAC_STI is not set ++# CONFIG_DW_DMAC is not set ++# CONFIG_DW_WATCHDOG is not set ++# CONFIG_DYNAMIC_DEBUG is not set ++# CONFIG_E100 is not set ++# CONFIG_E1000 is not set ++# CONFIG_E1000E is not set ++# CONFIG_EARLY_PRINTK_8250 is not set ++# CONFIG_ECHO is not set ++# CONFIG_ECRYPT_FS is not set ++# CONFIG_EDAC is not set ++# CONFIG_EEEPC_LAPTOP is not set ++# CONFIG_EEPROM_93CX6 is not set ++# CONFIG_EEPROM_93XX46 is not set ++# CONFIG_EEPROM_AT24 is not set ++# CONFIG_EEPROM_AT25 is not set ++# CONFIG_EEPROM_DIGSY_MTC_CFG is not set ++# CONFIG_EEPROM_LEGACY is not set ++# CONFIG_EEPROM_MAX6875 is not set ++CONFIG_EFI_PARTITION=y ++# CONFIG_EFS_FS is not set ++# CONFIG_ELF_CORE is not set ++# CONFIG_EMAC_ROCKCHIP is not set ++CONFIG_EMBEDDED=y ++# CONFIG_EM_TIMER_STI is not set ++# CONFIG_ENABLE_MUST_CHECK is not set ++CONFIG_ENABLE_WARN_DEPRECATED=y ++# CONFIG_ENC28J60 is not set ++# CONFIG_ENCLOSURE_SERVICES is not set ++# CONFIG_ENCRYPTED_KEYS is not set ++# CONFIG_ENCX24J600 is not set ++# CONFIG_ENIC is not set ++# CONFIG_EPAPR_PARAVIRT is not set ++# CONFIG_EPIC100 is not set ++CONFIG_EPOLL=y ++# CONFIG_EQUALIZER is not set ++# CONFIG_ET131X is not set ++CONFIG_ETHERNET=y ++# CONFIG_ETHOC is not set ++CONFIG_EVENTFD=y ++CONFIG_EXPERT=y ++# CONFIG_EXPORTFS is not set ++# CONFIG_EXT2_FS is not set ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT3_FS is not set ++# CONFIG_EXT4_DEBUG is not set ++# CONFIG_EXT4_ENCRYPTION is not set ++# CONFIG_EXT4_FS is not set ++# CONFIG_EXT4_FS_POSIX_ACL is not set ++# CONFIG_EXT4_FS_SECURITY is not set ++CONFIG_EXT4_USE_FOR_EXT2=y ++# CONFIG_EXTCON is not set ++# CONFIG_EXTCON_ADC_JACK is not set ++# CONFIG_EXTCON_GPIO is not set ++# CONFIG_EXTCON_RT8973A is not set ++# CONFIG_EXTCON_SM5502 is not set ++# CONFIG_EXTCON_USB_GPIO is not set ++CONFIG_EXTRA_FIRMWARE="" ++CONFIG_EXTRA_TARGETS="" ++# CONFIG_EXYNOS_ADC is not set ++# CONFIG_EXYNOS_VIDEO is not set ++# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set ++# CONFIG_EZX_PCAP is not set ++# CONFIG_F2FS_FS is not set ++# CONFIG_F2FS_FS_ENCRYPTION is not set ++# CONFIG_F2FS_IO_TRACE is not set ++# CONFIG_FAIR_GROUP_SCHED is not set ++# CONFIG_FANOTIFY is not set ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++# CONFIG_FAT_FS is not set ++# CONFIG_FAULT_INJECTION is not set ++# CONFIG_FB is not set ++# CONFIG_FB_3DFX is not set ++# CONFIG_FB_ARC is not set ++# CONFIG_FB_ARK is not set ++# CONFIG_FB_ARMCLCD is not set ++# CONFIG_FB_ASILIANT is not set ++# CONFIG_FB_ATY is not set ++# CONFIG_FB_ATY128 is not set ++# CONFIG_FB_AUO_K190X is not set ++# CONFIG_FB_BACKLIGHT is not set ++# CONFIG_FB_BIG_ENDIAN is not set ++# CONFIG_FB_BOOT_VESA_SUPPORT is not set ++# CONFIG_FB_BOTH_ENDIAN is not set ++# CONFIG_FB_BROADSHEET is not set ++# CONFIG_FB_CARMINE is not set ++# CONFIG_FB_CFB_COPYAREA is not set ++# CONFIG_FB_CFB_FILLRECT is not set ++# CONFIG_FB_CFB_IMAGEBLIT is not set ++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set ++# CONFIG_FB_CIRRUS is not set ++# CONFIG_FB_CYBER2000 is not set ++# CONFIG_FB_DA8XX is not set ++# CONFIG_FB_DDC is not set ++# CONFIG_FB_FOREIGN_ENDIAN is not set ++# CONFIG_FB_GEODE is not set ++# CONFIG_FB_GOLDFISH is not set ++# CONFIG_FB_HGA is not set ++# CONFIG_FB_I740 is not set ++# CONFIG_FB_IBM_GXT4500 is not set ++# CONFIG_FB_IMSTT is not set ++# CONFIG_FB_IMX is not set ++# CONFIG_FB_KYRO is not set ++# CONFIG_FB_LE80578 is not set ++# CONFIG_FB_LITTLE_ENDIAN is not set ++# CONFIG_FB_MACMODES is not set ++# CONFIG_FB_MATROX is not set ++# CONFIG_FB_MB862XX is not set ++# CONFIG_FB_METRONOME is not set ++# CONFIG_FB_MODE_HELPERS is not set ++# CONFIG_FB_MXS is not set ++# CONFIG_FB_N411 is not set ++# CONFIG_FB_NEOMAGIC is not set ++# CONFIG_FB_NVIDIA is not set ++# CONFIG_FB_OF is not set ++# CONFIG_FB_OPENCORES is not set ++# CONFIG_FB_PM2 is not set ++# CONFIG_FB_PM3 is not set ++# CONFIG_FB_PS3 is not set ++# CONFIG_FB_PXA is not set ++# CONFIG_FB_RADEON is not set ++# CONFIG_FB_RIVA is not set ++# CONFIG_FB_S1D13XXX is not set ++# CONFIG_FB_S3 is not set ++# CONFIG_FB_SAVAGE is not set ++# CONFIG_FB_SIMPLE is not set ++# CONFIG_FB_SIS is not set ++# CONFIG_FB_SM712 is not set ++# CONFIG_FB_SM750 is not set ++# CONFIG_FB_SMSCUFX is not set ++# CONFIG_FB_SSD1307 is not set ++# CONFIG_FB_SVGALIB is not set ++# CONFIG_FB_SYS_COPYAREA is not set ++# CONFIG_FB_SYS_FILLRECT is not set ++# CONFIG_FB_SYS_FOPS is not set ++# CONFIG_FB_SYS_IMAGEBLIT is not set ++# CONFIG_FB_TFT is not set ++# CONFIG_FB_TILEBLITTING is not set ++# CONFIG_FB_TMIO is not set ++# CONFIG_FB_TRIDENT is not set ++# CONFIG_FB_UDL is not set ++# CONFIG_FB_UVESA is not set ++# CONFIG_FB_VGA16 is not set ++# CONFIG_FB_VIA is not set ++# CONFIG_FB_VIRTUAL is not set ++# CONFIG_FB_VOODOO1 is not set ++# CONFIG_FB_VT8623 is not set ++# CONFIG_FB_XGI is not set ++# CONFIG_FCOE is not set ++# CONFIG_FCOE_FNIC is not set ++# CONFIG_FDDI is not set ++# CONFIG_FEALNX is not set ++# CONFIG_FENCE_TRACE is not set ++# CONFIG_FHANDLE is not set ++CONFIG_FIB_RULES=y ++CONFIG_FILE_LOCKING=y ++# CONFIG_FIREWIRE is not set ++# CONFIG_FIREWIRE_NOSY is not set ++# CONFIG_FIREWIRE_SERIAL is not set ++# CONFIG_FIRMWARE_EDID is not set ++# CONFIG_FIRMWARE_IN_KERNEL is not set ++# CONFIG_FIRMWARE_MEMMAP is not set ++# CONFIG_FIXED_PHY is not set ++CONFIG_FLATMEM=y ++CONFIG_FLATMEM_MANUAL=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_FM10K is not set ++# CONFIG_FMC is not set ++# CONFIG_FORCEDETH is not set ++CONFIG_FORCE_MAX_ZONEORDER=11 ++# CONFIG_FPGA is not set ++# CONFIG_FRAMEBUFFER_CONSOLE is not set ++# CONFIG_FRAME_POINTER is not set ++CONFIG_FRAME_WARN=1024 ++# CONFIG_FREEZER is not set ++# CONFIG_FRONTSWAP is not set ++# CONFIG_FSCACHE is not set ++# CONFIG_FSL_EDMA is not set ++# CONFIG_FSL_PQ_MDIO is not set ++# CONFIG_FSL_XGMAC_MDIO is not set ++CONFIG_FSNOTIFY=y ++# CONFIG_FS_DAX is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_FTGMAC100 is not set ++# CONFIG_FTL is not set ++# CONFIG_FTMAC100 is not set ++# CONFIG_FTRACE is not set ++# CONFIG_FTRACE_STARTUP_TEST is not set ++# CONFIG_FTR_FIXUP_SELFTEST is not set ++# CONFIG_FUJITSU_ES is not set ++# CONFIG_FUJITSU_LAPTOP is not set ++# CONFIG_FUJITSU_TABLET is not set ++# CONFIG_FUNCTION_TRACER is not set ++# CONFIG_FUSE_FS is not set ++# CONFIG_FUSION is not set ++# CONFIG_FUSION_FC is not set ++# CONFIG_FUSION_SAS is not set ++# CONFIG_FUSION_SPI is not set ++CONFIG_FUTEX=y ++CONFIG_FW_LOADER=y ++CONFIG_FW_LOADER_USER_HELPER=y ++CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y ++CONFIG_GACT_PROB=y ++# CONFIG_GADGET_UAC1 is not set ++# CONFIG_GAMEPORT is not set ++# CONFIG_GATEWORKS_GW16083 is not set ++# CONFIG_GCOV is not set ++# CONFIG_GCOV_KERNEL is not set ++# CONFIG_GDB_SCRIPTS is not set ++# CONFIG_GENERIC_ADC_BATTERY is not set ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++# CONFIG_GENERIC_CPU_DEVICES is not set ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_NET_UTILS=y ++# CONFIG_GENERIC_PHY is not set ++# CONFIG_GENEVE is not set ++# CONFIG_GENWQE is not set ++# CONFIG_GFS2_FS is not set ++# CONFIG_GIGASET_CAPI is not set ++# CONFIG_GIGASET_DEBUG is not set ++# CONFIG_GLOB_SELFTEST is not set ++# CONFIG_GP2AP020A00F is not set ++# CONFIG_GPIOLIB is not set ++# CONFIG_GPIO_74X164 is not set ++# CONFIG_GPIO_74XX_MMIO is not set ++# CONFIG_GPIO_ADNP is not set ++# CONFIG_GPIO_ADP5588 is not set ++# CONFIG_GPIO_ALTERA is not set ++# CONFIG_GPIO_AMD8111 is not set ++# CONFIG_GPIO_BCM_KONA is not set ++# CONFIG_GPIO_BT8XX is not set ++# CONFIG_GPIO_CS5535 is not set ++# CONFIG_GPIO_DWAPB is not set ++# CONFIG_GPIO_EM is not set ++# CONFIG_GPIO_GENERIC_PLATFORM is not set ++# CONFIG_GPIO_GRGPIO is not set ++# CONFIG_GPIO_ICH is not set ++# CONFIG_GPIO_MAX7300 is not set ++# CONFIG_GPIO_MAX7301 is not set ++# CONFIG_GPIO_MAX732X is not set ++# CONFIG_GPIO_MC33880 is not set ++# CONFIG_GPIO_MCP23S08 is not set ++# CONFIG_GPIO_ML_IOH is not set ++# CONFIG_GPIO_PCA953X is not set ++# CONFIG_GPIO_PCF857X is not set ++# CONFIG_GPIO_PCH is not set ++# CONFIG_GPIO_PL061 is not set ++# CONFIG_GPIO_RCAR is not set ++# CONFIG_GPIO_RDC321X is not set ++# CONFIG_GPIO_SCH is not set ++# CONFIG_GPIO_SCH311X is not set ++# CONFIG_GPIO_SX150X is not set ++# CONFIG_GPIO_SYSCON is not set ++# CONFIG_GPIO_SYSFS is not set ++# CONFIG_GPIO_TS5500 is not set ++# CONFIG_GPIO_VX855 is not set ++# CONFIG_GPIO_WATCHDOG is not set ++# CONFIG_GPIO_WDT is not set ++# CONFIG_GPIO_XILINX is not set ++# CONFIG_GPIO_ZEVIO is not set ++# CONFIG_GPIO_ZX is not set ++# CONFIG_GREENASIA_FF is not set ++# CONFIG_GS_FPGABOOT is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_HARDLOCKUP_DETECTOR is not set ++# CONFIG_HAVE_AOUT is not set ++# CONFIG_HAVE_ARM_ARCH_TIMER is not set ++CONFIG_HAVE_KPROBES=y ++CONFIG_HAVE_KRETPROBES=y ++# CONFIG_HCALL_STATS is not set ++# CONFIG_HDC100X is not set ++# CONFIG_HDLC is not set ++# CONFIG_HDLC_CISCO is not set ++# CONFIG_HDLC_FR is not set ++# CONFIG_HDLC_PPP is not set ++# CONFIG_HDLC_RAW is not set ++# CONFIG_HDLC_RAW_ETH is not set ++# CONFIG_HDQ_MASTER_OMAP is not set ++# CONFIG_HEADERS_CHECK is not set ++# CONFIG_HERMES is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_HFSPLUS_FS_POSIX_ACL is not set ++# CONFIG_HFS_FS is not set ++# CONFIG_HI8435 is not set ++# CONFIG_HIBERNATION is not set ++# CONFIG_HID is not set ++# CONFIG_HIDRAW is not set ++# CONFIG_HID_A4TECH is not set ++# CONFIG_HID_ACRUX is not set ++# CONFIG_HID_ACRUX_FF is not set ++# CONFIG_HID_APPLE is not set ++# CONFIG_HID_APPLEIR is not set ++# CONFIG_HID_AUREAL is not set ++# CONFIG_HID_BATTERY_STRENGTH is not set ++# CONFIG_HID_BELKIN is not set ++# CONFIG_HID_BETOP_FF is not set ++# CONFIG_HID_CHERRY is not set ++# CONFIG_HID_CHICONY is not set ++# CONFIG_HID_CORSAIR is not set ++# CONFIG_HID_CP2112 is not set ++# CONFIG_HID_CYPRESS is not set ++# CONFIG_HID_DRAGONRISE is not set ++# CONFIG_HID_ELECOM is not set ++# CONFIG_HID_ELO is not set ++# CONFIG_HID_EMS_FF is not set ++# CONFIG_HID_EZKEY is not set ++# CONFIG_HID_GEMBIRD is not set ++# CONFIG_HID_GENERIC is not set ++# CONFIG_HID_GFRM is not set ++# CONFIG_HID_GREENASIA is not set ++# CONFIG_HID_GT683R is not set ++# CONFIG_HID_GYRATION is not set ++# CONFIG_HID_HOLTEK is not set ++# CONFIG_HID_ICADE is not set ++# CONFIG_HID_KENSINGTON is not set ++# CONFIG_HID_KEYTOUCH is not set ++# CONFIG_HID_KYE is not set ++# CONFIG_HID_LCPOWER is not set ++# CONFIG_HID_LENOVO is not set ++# CONFIG_HID_LOGITECH is not set ++# CONFIG_HID_LOGITECH_DJ is not set ++# CONFIG_HID_LOGITECH_HIDPP is not set ++# CONFIG_HID_MAGICMOUSE is not set ++# CONFIG_HID_MICROSOFT is not set ++# CONFIG_HID_MONTEREY is not set ++# CONFIG_HID_MULTITOUCH is not set ++# CONFIG_HID_NTRIG is not set ++# CONFIG_HID_ORTEK is not set ++# CONFIG_HID_PANTHERLORD is not set ++# CONFIG_HID_PENMOUNT is not set ++# CONFIG_HID_PETALYNX is not set ++# CONFIG_HID_PICOLCD is not set ++# CONFIG_HID_PID is not set ++# CONFIG_HID_PLANTRONICS is not set ++# CONFIG_HID_PRIMAX is not set ++# CONFIG_HID_PRODIKEYS is not set ++# CONFIG_HID_RMI is not set ++# CONFIG_HID_ROCCAT is not set ++# CONFIG_HID_SAITEK is not set ++# CONFIG_HID_SAMSUNG is not set ++# CONFIG_HID_SENSOR_HUB is not set ++# CONFIG_HID_SMARTJOYPLUS is not set ++# CONFIG_HID_SONY is not set ++# CONFIG_HID_SPEEDLINK is not set ++# CONFIG_HID_STEELSERIES is not set ++# CONFIG_HID_SUNPLUS is not set ++# CONFIG_HID_THINGM is not set ++# CONFIG_HID_THRUSTMASTER is not set ++# CONFIG_HID_TIVO is not set ++# CONFIG_HID_TOPSEED is not set ++# CONFIG_HID_TWINHAN is not set ++# CONFIG_HID_UCLOGIC is not set ++# CONFIG_HID_WACOM is not set ++# CONFIG_HID_WALTOP is not set ++# CONFIG_HID_WIIMOTE is not set ++# CONFIG_HID_XINMO is not set ++# CONFIG_HID_ZEROPLUS is not set ++# CONFIG_HID_ZYDACRON is not set ++# CONFIG_HIGHMEM is not set ++CONFIG_HIGH_RES_TIMERS=y ++# CONFIG_HIP04_ETH is not set ++# CONFIG_HIPPI is not set ++# CONFIG_HIX5HD2_GMAC is not set ++# CONFIG_HMC6352 is not set ++# CONFIG_HNS is not set ++# CONFIG_HNS_DSAF is not set ++# CONFIG_HNS_ENET is not set ++# CONFIG_HOSTAP is not set ++# CONFIG_HOSTAP_CS is not set ++# CONFIG_HOSTAP_PCI is not set ++# CONFIG_HOSTAP_PLX is not set ++# CONFIG_HOTPLUG_CPU is not set ++# CONFIG_HOTPLUG_PCI is not set ++# CONFIG_HP100 is not set ++CONFIG_HPET_MMAP_DEFAULT=y ++# CONFIG_HPFS_FS is not set ++# CONFIG_HP_ILO is not set ++# CONFIG_HP_WIRELESS is not set ++# CONFIG_HSI is not set ++# CONFIG_HSR is not set ++# CONFIG_HTC_EGPIO is not set ++# CONFIG_HTC_I2CPLD is not set ++# CONFIG_HTC_PASIC3 is not set ++# CONFIG_HTU21 is not set ++# CONFIG_HUGETLB_PAGE is not set ++# CONFIG_HVC_DCC is not set ++# CONFIG_HVC_UDBG is not set ++# CONFIG_HWMON is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWSPINLOCK_OMAP is not set ++CONFIG_HW_PERF_EVENTS=y ++# CONFIG_HW_RANDOM is not set ++# CONFIG_HW_RANDOM_AMD is not set ++# CONFIG_HW_RANDOM_ATMEL is not set ++# CONFIG_HW_RANDOM_EXYNOS is not set ++# CONFIG_HW_RANDOM_GEODE is not set ++# CONFIG_HW_RANDOM_INTEL is not set ++# CONFIG_HW_RANDOM_IPROC_RNG200 is not set ++# CONFIG_HW_RANDOM_OMAP3_ROM is not set ++# CONFIG_HW_RANDOM_PPC4XX is not set ++# CONFIG_HW_RANDOM_TIMERIOMEM is not set ++# CONFIG_HW_RANDOM_VIA is not set ++# CONFIG_HYPERV is not set ++# CONFIG_HYSDN is not set ++CONFIG_HZ=100 ++CONFIG_HZ_100=y ++# CONFIG_HZ_1000 is not set ++# CONFIG_HZ_1024 is not set ++# CONFIG_HZ_128 is not set ++# CONFIG_HZ_200 is not set ++# CONFIG_HZ_24 is not set ++# CONFIG_HZ_250 is not set ++# CONFIG_HZ_256 is not set ++# CONFIG_HZ_300 is not set ++# CONFIG_HZ_48 is not set ++# CONFIG_HZ_500 is not set ++# CONFIG_HZ_PERIODIC is not set ++# CONFIG_I2C is not set ++# CONFIG_I2C_ALGOBIT is not set ++# CONFIG_I2C_ALGOPCA is not set ++# CONFIG_I2C_ALGOPCF is not set ++# CONFIG_I2C_ALI1535 is not set ++# CONFIG_I2C_ALI1563 is not set ++# CONFIG_I2C_ALI15X3 is not set ++# CONFIG_I2C_AMD756 is not set ++# CONFIG_I2C_AMD8111 is not set ++# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set ++# CONFIG_I2C_AU1550 is not set ++# CONFIG_I2C_BCM2835 is not set ++# CONFIG_I2C_BCM_IPROC is not set ++# CONFIG_I2C_CBUS_GPIO is not set ++# CONFIG_I2C_CHARDEV is not set ++# CONFIG_I2C_COMPAT is not set ++# CONFIG_I2C_DEBUG_ALGO is not set ++# CONFIG_I2C_DEBUG_BUS is not set ++# CONFIG_I2C_DEBUG_CORE is not set ++# CONFIG_I2C_DESIGNWARE_PCI is not set ++# CONFIG_I2C_DESIGNWARE_PLATFORM is not set ++# CONFIG_I2C_DIOLAN_U2C is not set ++# CONFIG_I2C_EG20T is not set ++# CONFIG_I2C_ELEKTOR is not set ++# CONFIG_I2C_EMEV2 is not set ++# CONFIG_I2C_GPIO is not set ++# CONFIG_I2C_HELPER_AUTO is not set ++# CONFIG_I2C_HID is not set ++# CONFIG_I2C_I801 is not set ++# CONFIG_I2C_IBM_IIC is not set ++# CONFIG_I2C_IMG is not set ++# CONFIG_I2C_ISCH is not set ++# CONFIG_I2C_ISMT is not set ++# CONFIG_I2C_MPC is not set ++# CONFIG_I2C_MUX is not set ++# CONFIG_I2C_MUX_GPIO is not set ++# CONFIG_I2C_MUX_PINCTRL is not set ++# CONFIG_I2C_MUX_PCA9541 is not set ++# CONFIG_I2C_MUX_PCA954x is not set ++# CONFIG_I2C_MUX_REG is not set ++# CONFIG_I2C_MV64XXX is not set ++# CONFIG_I2C_NFORCE2 is not set ++# CONFIG_I2C_NOMADIK is not set ++# CONFIG_I2C_OCORES is not set ++# CONFIG_I2C_OCTEON is not set ++# CONFIG_I2C_PARPORT is not set ++# CONFIG_I2C_PARPORT_LIGHT is not set ++# CONFIG_I2C_PCA_ISA is not set ++# CONFIG_I2C_PCA_PLATFORM is not set ++# CONFIG_I2C_PIIX4 is not set ++# CONFIG_I2C_PXA_PCI is not set ++# CONFIG_I2C_RCAR is not set ++# CONFIG_I2C_RK3X is not set ++# CONFIG_I2C_ROBOTFUZZ_OSIF is not set ++# CONFIG_I2C_SCMI is not set ++# CONFIG_I2C_SH_MOBILE is not set ++# CONFIG_I2C_SIMTEC is not set ++# CONFIG_I2C_SIS5595 is not set ++# CONFIG_I2C_SIS630 is not set ++# CONFIG_I2C_SIS96X is not set ++# CONFIG_I2C_SLAVE is not set ++# CONFIG_I2C_SMBUS is not set ++# CONFIG_I2C_STUB is not set ++# CONFIG_I2C_TAOS_EVM is not set ++# CONFIG_I2C_TINY_USB is not set ++# CONFIG_I2C_VERSATILE is not set ++# CONFIG_I2C_VIA is not set ++# CONFIG_I2C_VIAPRO is not set ++# CONFIG_I2C_XILINX is not set ++# CONFIG_I40E is not set ++# CONFIG_I40EVF is not set ++# CONFIG_I6300ESB_WDT is not set ++# CONFIG_I82092 is not set ++# CONFIG_I82365 is not set ++# CONFIG_IBM_ASM is not set ++# CONFIG_IBM_EMAC_DEBUG is not set ++# CONFIG_IBM_EMAC_EMAC4 is not set ++# CONFIG_IBM_EMAC_MAL_CLR_ICINTSTAT is not set ++# CONFIG_IBM_EMAC_MAL_COMMON_ERR is not set ++# CONFIG_IBM_EMAC_NO_FLOW_CTRL is not set ++# CONFIG_IBM_EMAC_RGMII is not set ++# CONFIG_IBM_EMAC_TAH is not set ++# CONFIG_IBM_EMAC_ZMII is not set ++# CONFIG_ICPLUS_PHY is not set ++# CONFIG_ICS932S401 is not set ++# CONFIG_IDE is not set ++# CONFIG_IDEAPAD_LAPTOP is not set ++# CONFIG_IDE_GD is not set ++# CONFIG_IDE_PROC_FS is not set ++# CONFIG_IDE_TASK_IOCTL is not set ++# CONFIG_IDLE_PAGE_TRACKING is not set ++# CONFIG_IEEE802154 is not set ++# CONFIG_IEEE802154_ATUSB is not set ++# CONFIG_IFB is not set ++# CONFIG_IGB is not set ++# CONFIG_IGBVF is not set ++# CONFIG_IIO is not set ++# CONFIG_IIO_BUFFER_CB is not set ++CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 ++# CONFIG_IIO_INTERRUPT_TRIGGER is not set ++# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set ++# CONFIG_IIO_SIMPLE_DUMMY is not set ++# CONFIG_IIO_SSP_SENSORHUB is not set ++# CONFIG_IIO_ST_ACCEL_3AXIS is not set ++# CONFIG_IIO_ST_GYRO_3AXIS is not set ++# CONFIG_IIO_ST_MAGN_3AXIS is not set ++# CONFIG_IIO_ST_PRESS is not set ++# CONFIG_IIO_SYSFS_TRIGGER is not set ++# CONFIG_IKCONFIG is not set ++# CONFIG_IKCONFIG_PROC is not set ++# CONFIG_IMAGE_CMDLINE_HACK is not set ++# CONFIG_IMGPDC_WDT is not set ++# CONFIG_IMX_IPUV3_CORE is not set ++# CONFIG_IMX_THERMAL is not set ++CONFIG_INET=y ++# CONFIG_INET6_AH is not set ++# CONFIG_INET6_ESP is not set ++# CONFIG_INET6_IPCOMP is not set ++# CONFIG_INET6_TUNNEL is not set ++# CONFIG_INET6_XFRM_MODE_BEET is not set ++# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set ++# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET6_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET6_XFRM_TUNNEL is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_TCP_DIAG is not set ++# CONFIG_INET_TUNNEL is not set ++# CONFIG_INET_UDP_DIAG is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_TUNNEL is not set ++# CONFIG_INFINIBAND is not set ++# CONFIG_INFTL is not set ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++# CONFIG_INLINE_READ_LOCK is not set ++# CONFIG_INLINE_READ_LOCK_BH is not set ++# CONFIG_INLINE_READ_LOCK_IRQ is not set ++# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_READ_TRYLOCK is not set ++CONFIG_INLINE_READ_UNLOCK=y ++# CONFIG_INLINE_READ_UNLOCK_BH is not set ++CONFIG_INLINE_READ_UNLOCK_IRQ=y ++# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set ++# CONFIG_INLINE_SPIN_LOCK is not set ++# CONFIG_INLINE_SPIN_LOCK_BH is not set ++# CONFIG_INLINE_SPIN_LOCK_IRQ is not set ++# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_SPIN_TRYLOCK is not set ++# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set ++# CONFIG_INLINE_SPIN_UNLOCK_BH is not set ++CONFIG_INLINE_SPIN_UNLOCK_IRQ=y ++# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set ++# CONFIG_INLINE_WRITE_LOCK is not set ++# CONFIG_INLINE_WRITE_LOCK_BH is not set ++# CONFIG_INLINE_WRITE_LOCK_IRQ is not set ++# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_WRITE_TRYLOCK is not set ++CONFIG_INLINE_WRITE_UNLOCK=y ++# CONFIG_INLINE_WRITE_UNLOCK_BH is not set ++CONFIG_INLINE_WRITE_UNLOCK_IRQ=y ++# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set ++CONFIG_INOTIFY_USER=y ++# CONFIG_INPUT is not set ++# CONFIG_INPUT_AD714X is not set ++# CONFIG_INPUT_ADXL34X is not set ++# CONFIG_INPUT_APANEL is not set ++# CONFIG_INPUT_ATI_REMOTE2 is not set ++# CONFIG_INPUT_ATLAS_BTNS is not set ++# CONFIG_INPUT_BMA150 is not set ++# CONFIG_INPUT_CM109 is not set ++# CONFIG_INPUT_CMA3000 is not set ++# CONFIG_INPUT_DRV260X_HAPTICS is not set ++# CONFIG_INPUT_DRV2665_HAPTICS is not set ++# CONFIG_INPUT_DRV2667_HAPTICS is not set ++# CONFIG_INPUT_E3X0_BUTTON is not set ++# CONFIG_INPUT_EVBUG is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_FF_MEMLESS is not set ++# CONFIG_INPUT_GP2A is not set ++# CONFIG_INPUT_GPIO_BEEPER is not set ++# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set ++# CONFIG_INPUT_GPIO_TILT_POLLED is not set ++# CONFIG_INPUT_IDEAPAD_SLIDEBAR is not set ++# CONFIG_INPUT_IMS_PCU is not set ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_KEYSPAN_REMOTE is not set ++# CONFIG_INPUT_KXTJ9 is not set ++# CONFIG_INPUT_LEDS is not set ++# CONFIG_INPUT_MATRIXKMAP is not set ++CONFIG_INPUT_MISC=y ++# CONFIG_INPUT_MMA8450 is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_MOUSEDEV is not set ++# CONFIG_INPUT_MPU3050 is not set ++# CONFIG_INPUT_PCF8574 is not set ++# CONFIG_INPUT_PCSPKR is not set ++# CONFIG_INPUT_POLLDEV is not set ++# CONFIG_INPUT_POWERMATE is not set ++# CONFIG_INPUT_PWM_BEEPER is not set ++# CONFIG_INPUT_REGULATOR_HAPTIC is not set ++# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set ++# CONFIG_INPUT_SPARSEKMAP is not set ++# CONFIG_INPUT_TABLET is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_UINPUT is not set ++# CONFIG_INPUT_WISTRON_BTNS is not set ++# CONFIG_INPUT_YEALINK is not set ++# CONFIG_INT340X_THERMAL is not set ++# CONFIG_INTEL_IDLE is not set ++# CONFIG_INTEL_IDMA64 is not set ++# CONFIG_INTEL_MEI is not set ++# CONFIG_INTEL_MEI_ME is not set ++# CONFIG_INTEL_MEI_TXE is not set ++# CONFIG_INTEL_MIC_CARD is not set ++# CONFIG_INTEL_MIC_HOST is not set ++# CONFIG_INTEL_MID_PTI is not set ++# CONFIG_INTEL_OAKTRAIL is not set ++# CONFIG_INTEL_RST is not set ++# CONFIG_INTEL_SMARTCONNECT is not set ++# CONFIG_INTEL_SOC_PMIC is not set ++# CONFIG_INTEL_TH is not set ++# CONFIG_INTERVAL_TREE_TEST is not set ++# CONFIG_INV_MPU6050_IIO is not set ++# CONFIG_IOMMU_SUPPORT is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IP17XX_PHY is not set ++# CONFIG_IP6_NF_FILTER is not set ++# CONFIG_IP6_NF_IPTABLES is not set ++# CONFIG_IP6_NF_MANGLE is not set ++# CONFIG_IP6_NF_MATCH_AH is not set ++# CONFIG_IP6_NF_MATCH_EUI64 is not set ++# CONFIG_IP6_NF_MATCH_FRAG is not set ++# CONFIG_IP6_NF_MATCH_HL is not set ++# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set ++# CONFIG_IP6_NF_MATCH_MH is not set ++# CONFIG_IP6_NF_MATCH_OPTS is not set ++# CONFIG_IP6_NF_MATCH_RPFILTER is not set ++# CONFIG_IP6_NF_MATCH_RT is not set ++# CONFIG_IP6_NF_NAT is not set ++# CONFIG_IP6_NF_RAW is not set ++# CONFIG_IP6_NF_TARGET_HL is not set ++# CONFIG_IP6_NF_TARGET_REJECT is not set ++# CONFIG_IP6_NF_TARGET_SYNPROXY is not set ++# CONFIG_IPACK_BUS is not set ++# CONFIG_IPC_NS is not set ++# CONFIG_IPMI_HANDLER is not set ++# CONFIG_IPV6 is not set ++# CONFIG_IPV6_ILA is not set ++# CONFIG_IPV6_MIP6 is not set ++# CONFIG_IPV6_MROUTE is not set ++# CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set ++# CONFIG_IPV6_MULTIPLE_TABLES is not set ++CONFIG_IPV6_NDISC_NODETYPE=y ++# CONFIG_IPV6_OPTIMISTIC_DAD is not set ++# CONFIG_IPV6_ROUTER_PREF is not set ++# CONFIG_IPV6_ROUTE_INFO is not set ++# CONFIG_IPV6_SIT is not set ++# CONFIG_IPV6_SIT_6RD is not set ++# CONFIG_IPV6_TUNNEL is not set ++# CONFIG_IPV6_VTI is not set ++# CONFIG_IPVLAN is not set ++# CONFIG_IPW2100 is not set ++# CONFIG_IPW2100_DEBUG is not set ++CONFIG_IPW2100_MONITOR=y ++# CONFIG_IPW2200 is not set ++# CONFIG_IPW2200_DEBUG is not set ++CONFIG_IPW2200_MONITOR=y ++# CONFIG_IPW2200_PROMISCUOUS is not set ++# CONFIG_IPW2200_QOS is not set ++# CONFIG_IPW2200_RADIOTAP is not set ++# CONFIG_IPWIRELESS is not set ++# CONFIG_IPX is not set ++CONFIG_IP_ADVANCED_ROUTER=y ++# CONFIG_IP_DCCP is not set ++# CONFIG_IP_FIB_TRIE_STATS is not set ++CONFIG_IP_MROUTE=y ++CONFIG_IP_MROUTE_MULTIPLE_TABLES=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_MULTIPLE_TABLES=y ++# CONFIG_IP_NF_ARPFILTER is not set ++# CONFIG_IP_NF_ARPTABLES is not set ++# CONFIG_IP_NF_ARP_MANGLE is not set ++# CONFIG_IP_NF_FILTER is not set ++# CONFIG_IP_NF_IPTABLES is not set ++# CONFIG_IP_NF_MANGLE is not set ++# CONFIG_IP_NF_MATCH_AH is not set ++# CONFIG_IP_NF_MATCH_ECN is not set ++# CONFIG_IP_NF_MATCH_RPFILTER is not set ++# CONFIG_IP_NF_MATCH_TTL is not set ++# CONFIG_IP_NF_RAW is not set ++# CONFIG_IP_NF_SECURITY is not set ++# CONFIG_IP_NF_TARGET_CLUSTERIP is not set ++# CONFIG_IP_NF_TARGET_ECN is not set ++# CONFIG_IP_NF_TARGET_MASQUERADE is not set ++# CONFIG_IP_NF_TARGET_NETMAP is not set ++# CONFIG_IP_NF_TARGET_REDIRECT is not set ++# CONFIG_IP_NF_TARGET_REJECT is not set ++# CONFIG_IP_NF_TARGET_SYNPROXY is not set ++# CONFIG_IP_NF_TARGET_TTL is not set ++# CONFIG_IP_PIMSM_V1 is not set ++# CONFIG_IP_PIMSM_V2 is not set ++# CONFIG_IP_PNP is not set ++CONFIG_IP_ROUTE_MULTIPATH=y ++CONFIG_IP_ROUTE_VERBOSE=y ++# CONFIG_IP_SCTP is not set ++# CONFIG_IP_SET is not set ++# CONFIG_IP_VS is not set ++# CONFIG_IRDA is not set ++# CONFIG_IRQSOFF_TRACER is not set ++# CONFIG_IRQ_ALL_CPUS is not set ++# CONFIG_IRQ_DOMAIN_DEBUG is not set ++# CONFIG_IRQ_TIME_ACCOUNTING is not set ++# CONFIG_IR_GPIO_CIR is not set ++# CONFIG_IR_HIX5HD2 is not set ++# CONFIG_IR_IGORPLUGUSB is not set ++# CONFIG_IR_IGUANA is not set ++# CONFIG_IR_IMG is not set ++# CONFIG_IR_IMON is not set ++# CONFIG_IR_JVC_DECODER is not set ++# CONFIG_IR_LIRC_CODEC is not set ++# CONFIG_IR_MCEUSB is not set ++# CONFIG_IR_NEC_DECODER is not set ++# CONFIG_IR_RC5_DECODER is not set ++# CONFIG_IR_RC6_DECODER is not set ++# CONFIG_IR_REDRAT3 is not set ++# CONFIG_IR_SONY_DECODER is not set ++# CONFIG_IR_STREAMZAP is not set ++# CONFIG_IR_TTUSBIR is not set ++# CONFIG_ISCSI_BOOT_SYSFS is not set ++# CONFIG_ISCSI_TCP is not set ++CONFIG_ISDN=y ++# CONFIG_ISDN_AUDIO is not set ++# CONFIG_ISDN_CAPI is not set ++# CONFIG_ISDN_CAPI_CAPIDRV is not set ++# CONFIG_ISDN_DIVERSION is not set ++# CONFIG_ISDN_DRV_ACT2000 is not set ++# CONFIG_ISDN_DRV_GIGASET is not set ++# CONFIG_ISDN_DRV_HISAX is not set ++# CONFIG_ISDN_DRV_ICN is not set ++# CONFIG_ISDN_DRV_LOOP is not set ++# CONFIG_ISDN_DRV_PCBIT is not set ++# CONFIG_ISDN_DRV_SC is not set ++# CONFIG_ISDN_I4L is not set ++# CONFIG_ISL29003 is not set ++# CONFIG_ISL29020 is not set ++# CONFIG_ISL29125 is not set ++# CONFIG_ISO9660_FS is not set ++# CONFIG_ISS4xx is not set ++# CONFIG_ITG3200 is not set ++# CONFIG_IWL3945 is not set ++# CONFIG_IWLWIFI is not set ++# CONFIG_IXGB is not set ++# CONFIG_IXGBE is not set ++# CONFIG_IXGBEVF is not set ++# CONFIG_JBD2_DEBUG is not set ++# CONFIG_JFFS2_CMODE_FAVOURLZO is not set ++# CONFIG_JFFS2_CMODE_NONE is not set ++CONFIG_JFFS2_CMODE_PRIORITY=y ++# CONFIG_JFFS2_CMODE_SIZE is not set ++CONFIG_JFFS2_COMPRESSION_OPTIONS=y ++CONFIG_JFFS2_FS=y ++CONFIG_JFFS2_FS_DEBUG=0 ++# CONFIG_JFFS2_FS_POSIX_ACL is not set ++# CONFIG_JFFS2_FS_SECURITY is not set ++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++CONFIG_JFFS2_FS_XATTR=y ++CONFIG_JFFS2_LZMA=y ++# CONFIG_JFFS2_LZO is not set ++CONFIG_JFFS2_RTIME=y ++# CONFIG_JFFS2_RUBIN is not set ++CONFIG_JFFS2_SUMMARY=y ++# CONFIG_JFFS2_ZLIB is not set ++# CONFIG_JFS_DEBUG is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_JFS_POSIX_ACL is not set ++# CONFIG_JFS_SECURITY is not set ++# CONFIG_JFS_STATISTICS is not set ++# CONFIG_JME is not set ++CONFIG_JOLIET=y ++# CONFIG_JSA1212 is not set ++# CONFIG_JUMP_LABEL is not set ++# CONFIG_KALLSYMS is not set ++# CONFIG_KALLSYMS_ALL is not set ++# CONFIG_KALLSYMS_UNCOMPRESSED is not set ++# CONFIG_KARMA_PARTITION is not set ++# CONFIG_KERNEL_BZIP2 is not set ++# CONFIG_KERNEL_GZIP is not set ++# CONFIG_KERNEL_LZ4 is not set ++# CONFIG_KERNEL_LZMA is not set ++# CONFIG_KERNEL_LZO is not set ++CONFIG_KERNEL_MODE_NEON=y ++CONFIG_KERNEL_XZ=y ++CONFIG_KERNFS=y ++# CONFIG_KEXEC is not set ++# CONFIG_KEYBOARD_ADP5588 is not set ++# CONFIG_KEYBOARD_ADP5589 is not set ++# CONFIG_KEYBOARD_ATKBD is not set ++# CONFIG_KEYBOARD_BCM is not set ++# CONFIG_KEYBOARD_CAP11XX is not set ++# CONFIG_KEYBOARD_GPIO is not set ++# CONFIG_KEYBOARD_GPIO_POLLED is not set ++# CONFIG_KEYBOARD_LKKBD is not set ++# CONFIG_KEYBOARD_LM8323 is not set ++# CONFIG_KEYBOARD_LM8333 is not set ++# CONFIG_KEYBOARD_MATRIX is not set ++# CONFIG_KEYBOARD_MAX7359 is not set ++# CONFIG_KEYBOARD_MCS is not set ++# CONFIG_KEYBOARD_MPR121 is not set ++# CONFIG_KEYBOARD_NEWTON is not set ++# CONFIG_KEYBOARD_OMAP4 is not set ++# CONFIG_KEYBOARD_OPENCORES is not set ++# CONFIG_KEYBOARD_PXA27x is not set ++# CONFIG_KEYBOARD_QT1070 is not set ++# CONFIG_KEYBOARD_QT2160 is not set ++# CONFIG_KEYBOARD_SAMSUNG is not set ++# CONFIG_KEYBOARD_SH_KEYSC is not set ++# CONFIG_KEYBOARD_SNVS_PWRKEY is not set ++# CONFIG_KEYBOARD_STOWAWAY is not set ++# CONFIG_KEYBOARD_SUNKBD is not set ++# CONFIG_KEYBOARD_TCA6416 is not set ++# CONFIG_KEYBOARD_TCA8418 is not set ++# CONFIG_KEYBOARD_XTKBD is not set ++# CONFIG_KEYS is not set ++# CONFIG_KGDB is not set ++# CONFIG_KMEMCHECK is not set ++# CONFIG_KMX61 is not set ++# CONFIG_KPROBES is not set ++# CONFIG_KPROBES_SANITY_TEST is not set ++# CONFIG_KS8842 is not set ++# CONFIG_KS8851 is not set ++# CONFIG_KS8851_MLL is not set ++# CONFIG_KSM is not set ++# CONFIG_KSZ884X_PCI is not set ++CONFIG_KUSER_HELPERS=y ++# CONFIG_KVM_GUEST is not set ++# CONFIG_KXCJK1013 is not set ++# CONFIG_KXSD9 is not set ++# CONFIG_L2TP is not set ++# CONFIG_L2TP_ETH is not set ++# CONFIG_L2TP_IP is not set ++# CONFIG_L2TP_V3 is not set ++# CONFIG_LANMEDIA is not set ++# CONFIG_LANTIQ is not set ++# CONFIG_LAPB is not set ++# CONFIG_LASAT is not set ++# CONFIG_LATENCYTOP is not set ++# CONFIG_LATTICE_ECP3_CONFIG is not set ++CONFIG_LBDAF=y ++# CONFIG_LCD_AMS369FG06 is not set ++# CONFIG_LCD_HX8357 is not set ++# CONFIG_LCD_ILI922X is not set ++# CONFIG_LCD_ILI9320 is not set ++# CONFIG_LCD_L4F00242T03 is not set ++# CONFIG_LCD_LD9040 is not set ++# CONFIG_LCD_LMS283GF05 is not set ++# CONFIG_LCD_LMS501KF03 is not set ++# CONFIG_LCD_LTV350QV is not set ++# CONFIG_LCD_S6E63M0 is not set ++# CONFIG_LCD_TDO24M is not set ++# CONFIG_LCD_VGG2432A4 is not set ++# CONFIG_LDM_PARTITION is not set ++# CONFIG_LEDS_BCM6328 is not set ++# CONFIG_LEDS_BCM6358 is not set ++# CONFIG_LEDS_BD2802 is not set ++# CONFIG_LEDS_BLINKM is not set ++CONFIG_LEDS_CLASS=y ++# CONFIG_LEDS_CLASS_FLASH is not set ++# CONFIG_LEDS_DAC124S085 is not set ++# CONFIG_LEDS_GPIO is not set ++# CONFIG_LEDS_INTEL_SS4200 is not set ++# CONFIG_LEDS_LM3530 is not set ++# CONFIG_LEDS_LM355x is not set ++# CONFIG_LEDS_LM3642 is not set ++# CONFIG_LEDS_LP3944 is not set ++# CONFIG_LEDS_LP5521 is not set ++# CONFIG_LEDS_LP5523 is not set ++# CONFIG_LEDS_LP5562 is not set ++# CONFIG_LEDS_LP8501 is not set ++# CONFIG_LEDS_LP8860 is not set ++# CONFIG_LEDS_LT3593 is not set ++# CONFIG_LEDS_NS2 is not set ++# CONFIG_LEDS_OT200 is not set ++# CONFIG_LEDS_PCA9532 is not set ++# CONFIG_LEDS_PCA955X is not set ++# CONFIG_LEDS_PCA963X is not set ++# CONFIG_LEDS_PWM is not set ++# CONFIG_LEDS_REGULATOR is not set ++# CONFIG_LEDS_SYSCON is not set ++# CONFIG_LEDS_TCA6507 is not set ++# CONFIG_LEDS_TLC591XX is not set ++CONFIG_LEDS_TRIGGERS=y ++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set ++# CONFIG_LEDS_TRIGGER_CAMERA is not set ++# CONFIG_LEDS_TRIGGER_CPU is not set ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=y ++# CONFIG_LEDS_TRIGGER_GPIO is not set ++# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set ++# CONFIG_LEDS_TRIGGER_IDE_DISK is not set ++# CONFIG_LEDS_TRIGGER_MORSE is not set ++CONFIG_LEDS_TRIGGER_NETDEV=y ++# CONFIG_LEDS_TRIGGER_ONESHOT is not set ++CONFIG_LEDS_TRIGGER_TIMER=y ++# CONFIG_LEDS_TRIGGER_TRANSIENT is not set ++# CONFIG_LEDS_TRIGGER_USBDEV is not set ++# CONFIG_LEGACY_PTYS is not set ++# CONFIG_LIB80211 is not set ++# CONFIG_LIB80211_CRYPT_CCMP is not set ++# CONFIG_LIB80211_CRYPT_TKIP is not set ++# CONFIG_LIB80211_CRYPT_WEP is not set ++# CONFIG_LIB80211_DEBUG is not set ++# CONFIG_LIBCRC32C is not set ++# CONFIG_LIBERTAS is not set ++# CONFIG_LIBERTAS_THINFIRM is not set ++# CONFIG_LIBERTAS_USB is not set ++# CONFIG_LIBFC is not set ++# CONFIG_LIBFCOE is not set ++# CONFIG_LIBIPW_DEBUG is not set ++# CONFIG_LIBNVDIMM is not set ++# CONFIG_LIDAR_LITE_V2 is not set ++# CONFIG_LIRC_STAGING is not set ++# CONFIG_LIS3L02DQ is not set ++# CONFIG_LKDTM is not set ++CONFIG_LLC=y ++# CONFIG_LLC2 is not set ++CONFIG_LOCALVERSION="" ++# CONFIG_LOCALVERSION_AUTO is not set ++# CONFIG_LOCKD is not set ++CONFIG_LOCKDEP_SUPPORT=y ++CONFIG_LOCKD_V4=y ++# CONFIG_LOCKUP_DETECTOR is not set ++# CONFIG_LOCK_STAT is not set ++# CONFIG_LOCK_TORTURE_TEST is not set ++# CONFIG_LOGFS is not set ++# CONFIG_LOGIG940_FF is not set ++# CONFIG_LOGIRUMBLEPAD2_FF is not set ++# CONFIG_LOGITECH_FF is not set ++# CONFIG_LOGIWHEELS_FF is not set ++# CONFIG_LOGO is not set ++CONFIG_LOG_BUF_SHIFT=17 ++CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 ++# CONFIG_LOONGSON_MC146818 is not set ++# CONFIG_LPC_ICH is not set ++# CONFIG_LPC_SCH is not set ++# CONFIG_LP_CONSOLE is not set ++# CONFIG_LSI_ET1011C_PHY is not set ++# CONFIG_LTE_GDM724X is not set ++# CONFIG_LTPC is not set ++# CONFIG_LTR501 is not set ++# CONFIG_LUSTRE_FS is not set ++# CONFIG_LWTUNNEL is not set ++# CONFIG_LXT_PHY is not set ++# CONFIG_LZ4HC_COMPRESS is not set ++# CONFIG_LZ4_COMPRESS is not set ++# CONFIG_LZ4_DECOMPRESS is not set ++CONFIG_LZMA_COMPRESS=y ++CONFIG_LZMA_DECOMPRESS=y ++# CONFIG_LZO_COMPRESS is not set ++# CONFIG_LZO_DECOMPRESS is not set ++# CONFIG_M62332 is not set ++# CONFIG_MAC80211 is not set ++# CONFIG_MAC80211_MESSAGE_TRACING is not set ++CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 ++# CONFIG_MACB is not set ++# CONFIG_MACH_ASM9260 is not set ++# CONFIG_MACH_DECSTATION is not set ++# CONFIG_MACH_INGENIC is not set ++# CONFIG_MACH_JAZZ is not set ++# CONFIG_MACH_JZ4740 is not set ++# CONFIG_MACH_LOONGSON32 is not set ++# CONFIG_MACH_LOONGSON64 is not set ++# CONFIG_MACH_PISTACHIO is not set ++# CONFIG_MACH_TX39XX is not set ++# CONFIG_MACH_TX49XX is not set ++# CONFIG_MACH_VR41XX is not set ++# CONFIG_MACH_XILFPGA is not set ++# CONFIG_MACINTOSH_DRIVERS is not set ++# CONFIG_MACVLAN is not set ++# CONFIG_MACVTAP is not set ++# CONFIG_MAC_EMUMOUSEBTN is not set ++# CONFIG_MAC_PARTITION is not set ++# CONFIG_MAG3110 is not set ++# CONFIG_MAGIC_SYSRQ is not set ++CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 ++# CONFIG_MAILBOX is not set ++# CONFIG_MANGLE_BOOTARGS is not set ++# CONFIG_MARVELL_PHY is not set ++# CONFIG_MAX1027 is not set ++# CONFIG_MAX1363 is not set ++# CONFIG_MAX517 is not set ++# CONFIG_MAX5821 is not set ++# CONFIG_MAX63XX_WATCHDOG is not set ++# CONFIG_MCB is not set ++# CONFIG_MCP320X is not set ++# CONFIG_MCP3422 is not set ++# CONFIG_MCP4531 is not set ++# CONFIG_MCP4725 is not set ++# CONFIG_MCP4922 is not set ++# CONFIG_MCPM is not set ++# CONFIG_MD is not set ++# CONFIG_MDIO_BCM_UNIMAC is not set ++# CONFIG_MDIO_BITBANG is not set ++# CONFIG_MDIO_BUS_MUX_GPIO is not set ++# CONFIG_MDIO_BUS_MUX_MMIOREG is not set ++# CONFIG_MDIO_OCTEON is not set ++# CONFIG_MD_FAULTY is not set ++# CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set ++# CONFIG_MEDIA_ATTACH is not set ++# CONFIG_MEDIA_CAMERA_SUPPORT is not set ++# CONFIG_MEDIA_CONTROLLER is not set ++# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set ++# CONFIG_MEDIA_PCI_SUPPORT is not set ++# CONFIG_MEDIA_RADIO_SUPPORT is not set ++# CONFIG_MEDIA_RC_SUPPORT is not set ++# CONFIG_MEDIA_SDR_SUPPORT is not set ++# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set ++# CONFIG_MEDIA_SUPPORT is not set ++# CONFIG_MEDIA_USB_SUPPORT is not set ++# CONFIG_MEGARAID_LEGACY is not set ++# CONFIG_MEGARAID_NEWGEN is not set ++# CONFIG_MEGARAID_SAS is not set ++CONFIG_MEMBARRIER=y ++# CONFIG_MEMORY is not set ++# CONFIG_MEMORY_FAILURE is not set ++# CONFIG_MEMSTICK is not set ++# CONFIG_MEMTEST is not set ++# CONFIG_MEN_A21_WDT is not set ++CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 ++# CONFIG_MFD_88PM800 is not set ++# CONFIG_MFD_88PM805 is not set ++# CONFIG_MFD_88PM860X is not set ++# CONFIG_MFD_AAT2870_CORE is not set ++# CONFIG_MFD_ARIZONA_I2C is not set ++# CONFIG_MFD_ARIZONA_SPI is not set ++# CONFIG_MFD_AS3711 is not set ++# CONFIG_MFD_AS3722 is not set ++# CONFIG_MFD_ASIC3 is not set ++# CONFIG_MFD_ATMEL_FLEXCOM is not set ++# CONFIG_MFD_ATMEL_HLCDC is not set ++# CONFIG_MFD_AXP20X is not set ++# CONFIG_MFD_BCM590XX is not set ++# CONFIG_MFD_CORE is not set ++# CONFIG_MFD_CROS_EC is not set ++# CONFIG_MFD_CS5535 is not set ++# CONFIG_MFD_DA9052_I2C is not set ++# CONFIG_MFD_DA9052_SPI is not set ++# CONFIG_MFD_DA9055 is not set ++# CONFIG_MFD_DA9062 is not set ++# CONFIG_MFD_DA9063 is not set ++# CONFIG_MFD_DA9150 is not set ++# CONFIG_MFD_DLN2 is not set ++# CONFIG_MFD_HI6421_PMIC is not set ++# CONFIG_MFD_JANZ_CMODIO is not set ++# CONFIG_MFD_KEMPLD is not set ++# CONFIG_MFD_LM3533 is not set ++# CONFIG_MFD_LP3943 is not set ++# CONFIG_MFD_LP8788 is not set ++# CONFIG_MFD_MAX14577 is not set ++# CONFIG_MFD_MAX77686 is not set ++# CONFIG_MFD_MAX77693 is not set ++# CONFIG_MFD_MAX77843 is not set ++# CONFIG_MFD_MAX8907 is not set ++# CONFIG_MFD_MAX8925 is not set ++# CONFIG_MFD_MAX8997 is not set ++# CONFIG_MFD_MAX8998 is not set ++# CONFIG_MFD_MC13XXX is not set ++# CONFIG_MFD_MC13XXX_I2C is not set ++# CONFIG_MFD_MC13XXX_SPI is not set ++# CONFIG_MFD_MENF21BMC is not set ++# CONFIG_MFD_MT6397 is not set ++# CONFIG_MFD_OMAP_USB_HOST is not set ++# CONFIG_MFD_PALMAS is not set ++# CONFIG_MFD_PCF50633 is not set ++# CONFIG_MFD_PM8921_CORE is not set ++# CONFIG_MFD_RC5T583 is not set ++# CONFIG_MFD_RDC321X is not set ++# CONFIG_MFD_RETU is not set ++# CONFIG_MFD_RK808 is not set ++# CONFIG_MFD_RN5T618 is not set ++# CONFIG_MFD_RT5033 is not set ++# CONFIG_MFD_RTSX_PCI is not set ++# CONFIG_MFD_RTSX_USB is not set ++# CONFIG_MFD_SEC_CORE is not set ++# CONFIG_MFD_SI476X_CORE is not set ++# CONFIG_MFD_SKY81452 is not set ++# CONFIG_MFD_SM501 is not set ++# CONFIG_MFD_SMSC is not set ++# CONFIG_MFD_STMPE is not set ++# CONFIG_MFD_SYSCON is not set ++# CONFIG_MFD_T7L66XB is not set ++# CONFIG_MFD_TC3589X is not set ++# CONFIG_MFD_TC6387XB is not set ++# CONFIG_MFD_TC6393XB is not set ++# CONFIG_MFD_TIMBERDALE is not set ++# CONFIG_MFD_TI_AM335X_TSCADC is not set ++# CONFIG_MFD_TMIO is not set ++# CONFIG_MFD_TPS65090 is not set ++# CONFIG_MFD_TPS65217 is not set ++# CONFIG_MFD_TPS65218 is not set ++# CONFIG_MFD_TPS6586X is not set ++# CONFIG_MFD_TPS65910 is not set ++# CONFIG_MFD_TPS65912 is not set ++# CONFIG_MFD_TPS65912_I2C is not set ++# CONFIG_MFD_TPS65912_SPI is not set ++# CONFIG_MFD_TPS80031 is not set ++# CONFIG_MFD_VIPERBOARD is not set ++# CONFIG_MFD_VX855 is not set ++# CONFIG_MFD_WL1273_CORE is not set ++# CONFIG_MFD_WM831X is not set ++# CONFIG_MFD_WM831X_I2C is not set ++# CONFIG_MFD_WM831X_SPI is not set ++# CONFIG_MFD_WM8350_I2C is not set ++# CONFIG_MFD_WM8400 is not set ++# CONFIG_MFD_WM8994 is not set ++# CONFIG_MG_DISK is not set ++# CONFIG_MICREL_KS8995MA is not set ++# CONFIG_MICREL_PHY is not set ++# CONFIG_MICROCHIP_PHY is not set ++# CONFIG_MIGRATION is not set ++CONFIG_MII=y ++# CONFIG_MIKROTIK_RB532 is not set ++# CONFIG_MINIX_FS is not set ++# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set ++# CONFIG_MINIX_SUBPARTITION is not set ++# CONFIG_MIPS_ALCHEMY is not set ++# CONFIG_MIPS_CDMM is not set ++# CONFIG_MIPS_COBALT is not set ++# CONFIG_MIPS_FPU_EMULATOR is not set ++# CONFIG_MIPS_MALTA is not set ++# CONFIG_MIPS_O32_FP64_SUPPORT is not set ++# CONFIG_MIPS_PARAVIRT is not set ++# CONFIG_MIPS_PLATFORM_DEVICES is not set ++# CONFIG_MIPS_SEAD3 is not set ++CONFIG_MISC_FILESYSTEMS=y ++# CONFIG_MISDN is not set ++# CONFIG_MISDN_AVMFRITZ is not set ++# CONFIG_MISDN_HFCPCI is not set ++# CONFIG_MISDN_HFCUSB is not set ++# CONFIG_MISDN_INFINEON is not set ++# CONFIG_MISDN_NETJET is not set ++# CONFIG_MISDN_SPEEDFAX is not set ++# CONFIG_MISDN_W6692 is not set ++# CONFIG_MKISS is not set ++# CONFIG_MLX4_CORE is not set ++# CONFIG_MLX4_EN is not set ++# CONFIG_MLX5_CORE is not set ++# CONFIG_MLX90614 is not set ++# CONFIG_MLXSW_CORE is not set ++# CONFIG_MMA8452 is not set ++# CONFIG_MMA9551 is not set ++# CONFIG_MMA9553 is not set ++# CONFIG_MMC is not set ++# CONFIG_MMC35240 is not set ++# CONFIG_MMC_ARMMMCI is not set ++# CONFIG_MMC_AU1X is not set ++# CONFIG_MMC_BLOCK is not set ++CONFIG_MMC_BLOCK_BOUNCE=y ++CONFIG_MMC_BLOCK_MINORS=8 ++# CONFIG_MMC_CB710 is not set ++# CONFIG_MMC_DEBUG is not set ++# CONFIG_MMC_DW is not set ++# CONFIG_MMC_MTK is not set ++# CONFIG_MMC_MVSDIO is not set ++# CONFIG_MMC_S3C is not set ++# CONFIG_MMC_SDHCI is not set ++# CONFIG_MMC_SDHCI_ACPI is not set ++# CONFIG_MMC_SDHCI_BCM_KONA is not set ++# CONFIG_MMC_SDHCI_F_SDH30 is not set ++# CONFIG_MMC_SDHCI_IPROC is not set ++# CONFIG_MMC_SDHCI_MSM is not set ++# CONFIG_MMC_SDHCI_OF_ARASAN is not set ++# CONFIG_MMC_SDHCI_OF_AT91 is not set ++# CONFIG_MMC_SDHCI_OF_ESDHC is not set ++# CONFIG_MMC_SDHCI_OF_HLWD is not set ++# CONFIG_MMC_SDHCI_PXAV2 is not set ++# CONFIG_MMC_SDHCI_PXAV3 is not set ++# CONFIG_MMC_SDRICOH_CS is not set ++# CONFIG_MMC_SPI is not set ++# CONFIG_MMC_TEST is not set ++# CONFIG_MMC_TOSHIBA_PCI is not set ++# CONFIG_MMC_USDHI6ROL0 is not set ++# CONFIG_MMC_USHC is not set ++# CONFIG_MMC_VIA_SDMMC is not set ++# CONFIG_MMC_VUB300 is not set ++# CONFIG_MMIOTRACE is not set ++CONFIG_MMU=y ++CONFIG_MODULES=y ++# CONFIG_MODULE_COMPRESS is not set ++# CONFIG_MODULE_FORCE_LOAD is not set ++# CONFIG_MODULE_FORCE_UNLOAD is not set ++# CONFIG_MODULE_SIG is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_MODULE_STRIPPED=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MOST is not set ++# CONFIG_MOUSE_APPLETOUCH is not set ++# CONFIG_MOUSE_ELAN_I2C is not set ++# CONFIG_MOUSE_GPIO is not set ++# CONFIG_MOUSE_INPORT is not set ++# CONFIG_MOUSE_LOGIBM is not set ++# CONFIG_MOUSE_PC110PAD is not set ++# CONFIG_MOUSE_PS2_FOCALTECH is not set ++# CONFIG_MOUSE_PS2_SENTELIC is not set ++# CONFIG_MOUSE_SYNAPTICS_I2C is not set ++# CONFIG_MOUSE_SYNAPTICS_USB is not set ++# CONFIG_MPL115 is not set ++# CONFIG_MPL3115 is not set ++# CONFIG_MPLS is not set ++# CONFIG_MS5611 is not set ++# CONFIG_MS5637 is not set ++# CONFIG_MSDOS_FS is not set ++CONFIG_MSDOS_PARTITION=y ++# CONFIG_MSI_BITMAP_SELFTEST is not set ++# CONFIG_MSI_LAPTOP is not set ++CONFIG_MTD=y ++# CONFIG_MTD_ABSENT is not set ++# CONFIG_MTD_AFS_PARTS is not set ++# CONFIG_MTD_AR7_PARTS is not set ++CONFIG_MTD_BLKDEVS=y ++CONFIG_MTD_BLOCK=y ++# CONFIG_MTD_BLOCK2MTD is not set ++CONFIG_MTD_CFI=y ++# CONFIG_MTD_CFI_ADV_OPTIONS is not set ++CONFIG_MTD_CFI_AMDSTD=y ++# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set ++CONFIG_MTD_CFI_I1=y ++CONFIG_MTD_CFI_I2=y ++# CONFIG_MTD_CFI_I4 is not set ++# CONFIG_MTD_CFI_I8 is not set ++CONFIG_MTD_CFI_INTELEXT=y ++# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set ++CONFIG_MTD_CFI_NOSWAP=y ++# CONFIG_MTD_CFI_STAA is not set ++CONFIG_MTD_CFI_UTIL=y ++# CONFIG_MTD_CMDLINE_PARTS is not set ++CONFIG_MTD_COMPLEX_MAPPINGS=y ++# CONFIG_MTD_DATAFLASH is not set ++# CONFIG_MTD_DOCG3 is not set ++CONFIG_MTD_GEN_PROBE=y ++# CONFIG_MTD_GPIO_ADDR is not set ++# CONFIG_MTD_INTEL_VR_NOR is not set ++# CONFIG_MTD_JEDECPROBE is not set ++# CONFIG_MTD_LATCH_ADDR is not set ++# CONFIG_MTD_LPDDR is not set ++# CONFIG_MTD_LPDDR2_NVM is not set ++# CONFIG_MTD_M25P80 is not set ++CONFIG_MTD_MAP_BANK_WIDTH_1=y ++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set ++CONFIG_MTD_MAP_BANK_WIDTH_2=y ++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set ++CONFIG_MTD_MAP_BANK_WIDTH_4=y ++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set ++# CONFIG_MTD_MTDRAM is not set ++# CONFIG_MTD_MYLOADER_PARTS is not set ++# CONFIG_MTD_NAND is not set ++# CONFIG_MTD_NAND_AMS_DELTA is not set ++# CONFIG_MTD_NAND_AR934X is not set ++# CONFIG_MTD_NAND_AR934X_HW_ECC is not set ++# CONFIG_MTD_NAND_ATMEL is not set ++# CONFIG_MTD_NAND_AU1550 is not set ++# CONFIG_MTD_NAND_BCH is not set ++# CONFIG_MTD_NAND_BF5XX is not set ++# CONFIG_MTD_NAND_BRCMNAND is not set ++# CONFIG_MTD_NAND_CAFE is not set ++# CONFIG_MTD_NAND_CM_X270 is not set ++# CONFIG_MTD_NAND_CS553X is not set ++# CONFIG_MTD_NAND_DAVINCI is not set ++# CONFIG_MTD_NAND_DENALI is not set ++# CONFIG_MTD_NAND_DENALI_DT is not set ++# CONFIG_MTD_NAND_DENALI_PCI is not set ++CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xff108018 ++# CONFIG_MTD_NAND_DISKONCHIP is not set ++# CONFIG_MTD_NAND_DOCG4 is not set ++# CONFIG_MTD_NAND_ECC is not set ++# CONFIG_MTD_NAND_ECC_BCH is not set ++# CONFIG_MTD_NAND_ECC_SMC is not set ++# CONFIG_MTD_NAND_FSL_ELBC is not set ++# CONFIG_MTD_NAND_FSL_IFC is not set ++# CONFIG_MTD_NAND_FSL_UPM is not set ++# CONFIG_MTD_NAND_FSMC is not set ++# CONFIG_MTD_NAND_GPIO is not set ++# CONFIG_MTD_NAND_GPMI_NAND is not set ++# CONFIG_MTD_NAND_HISI504 is not set ++CONFIG_MTD_NAND_IDS=y ++# CONFIG_MTD_NAND_JZ4740 is not set ++# CONFIG_MTD_NAND_MPC5121_NFC is not set ++# CONFIG_MTD_NAND_MXC is not set ++# CONFIG_MTD_NAND_NANDSIM is not set ++# CONFIG_MTD_NAND_NDFC is not set ++# CONFIG_MTD_NAND_NUC900 is not set ++# CONFIG_MTD_NAND_OMAP2 is not set ++# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set ++# CONFIG_MTD_NAND_ORION is not set ++# CONFIG_MTD_NAND_PASEMI is not set ++# CONFIG_MTD_NAND_PLATFORM is not set ++# CONFIG_MTD_NAND_PXA3xx is not set ++# CONFIG_MTD_NAND_RB4XX is not set ++# CONFIG_MTD_NAND_RB750 is not set ++# CONFIG_MTD_NAND_RICOH is not set ++# CONFIG_MTD_NAND_S3C2410 is not set ++# CONFIG_MTD_NAND_SHARPSL is not set ++# CONFIG_MTD_NAND_SH_FLCTL is not set ++# CONFIG_MTD_NAND_SOCRATES is not set ++# CONFIG_MTD_NAND_TMIO is not set ++# CONFIG_MTD_NAND_TXX9NDFMC is not set ++CONFIG_MTD_OF_PARTS=y ++# CONFIG_MTD_ONENAND is not set ++# CONFIG_MTD_OOPS is not set ++# CONFIG_MTD_OTP is not set ++# CONFIG_MTD_PARTITIONED_MASTER is not set ++# CONFIG_MTD_PCI is not set ++# CONFIG_MTD_PCMCIA is not set ++# CONFIG_MTD_PHRAM is not set ++# CONFIG_MTD_PHYSMAP is not set ++# CONFIG_MTD_PHYSMAP_COMPAT is not set ++CONFIG_MTD_PHYSMAP_OF=y ++# CONFIG_MTD_PLATRAM is not set ++# CONFIG_MTD_PMC551 is not set ++# CONFIG_MTD_RAM is not set ++CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 ++# CONFIG_MTD_REDBOOT_PARTS is not set ++# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set ++# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set ++# CONFIG_MTD_ROM is not set ++CONFIG_MTD_ROOTFS_ROOT_DEV=y ++# CONFIG_MTD_SLRAM is not set ++# CONFIG_MTD_SM_COMMON is not set ++# CONFIG_MTD_SPINAND_MT29F is not set ++# CONFIG_MTD_SPI_NOR is not set ++# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set ++CONFIG_MTD_SPLIT=y ++# CONFIG_MTD_SPLIT_BRNIMAGE_FW is not set ++# CONFIG_MTD_SPLIT_EVA_FW is not set ++# CONFIG_MTD_SPLIT_FIRMWARE is not set ++CONFIG_MTD_SPLIT_FIRMWARE_NAME="firmware" ++# CONFIG_MTD_SPLIT_FIT_FW is not set ++# CONFIG_MTD_SPLIT_LZMA_FW is not set ++# CONFIG_MTD_SPLIT_SEAMA_FW is not set ++CONFIG_MTD_SPLIT_SQUASHFS_ROOT=y ++CONFIG_MTD_SPLIT_SUPPORT=y ++# CONFIG_MTD_SPLIT_TPLINK_FW is not set ++# CONFIG_MTD_SPLIT_TRX_FW is not set ++# CONFIG_MTD_SPLIT_UIMAGE_FW is not set ++# CONFIG_MTD_SST25L is not set ++# CONFIG_MTD_SWAP is not set ++# CONFIG_MTD_TESTS is not set ++# CONFIG_MTD_UBI is not set ++# CONFIG_MTD_UIMAGE_SPLIT is not set ++CONFIG_MULTIUSER=y ++# CONFIG_MUTEX_SPIN_ON_OWNER is not set ++# CONFIG_MV643XX_ETH is not set ++# CONFIG_MVMDIO is not set ++# CONFIG_MVSW61XX_PHY is not set ++# CONFIG_MVSWITCH_PHY is not set ++# CONFIG_MWAVE is not set ++# CONFIG_MWL8K is not set ++# CONFIG_MXC4005 is not set ++# CONFIG_MYRI10GE is not set ++# CONFIG_NAMESPACES is not set ++# CONFIG_NATIONAL_PHY is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NAU7802 is not set ++# CONFIG_NBPFAXI_DMA is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_NE2000 is not set ++# CONFIG_NE2K_PCI is not set ++# CONFIG_NEC_MARKEINS is not set ++CONFIG_NET=y ++# CONFIG_NETCONSOLE is not set ++CONFIG_NETDEVICES=y ++# CONFIG_NETFILTER is not set ++# CONFIG_NETFILTER_ADVANCED is not set ++# CONFIG_NETFILTER_DEBUG is not set ++# CONFIG_NETFILTER_INGRESS is not set ++# CONFIG_NETFILTER_NETLINK is not set ++# CONFIG_NETFILTER_NETLINK_ACCT is not set ++# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set ++# CONFIG_NETFILTER_NETLINK_LOG is not set ++# CONFIG_NETFILTER_NETLINK_QUEUE is not set ++# CONFIG_NETFILTER_XTABLES is not set ++# CONFIG_NETFILTER_XT_CONNMARK is not set ++# CONFIG_NETFILTER_XT_MARK is not set ++# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set ++# CONFIG_NETFILTER_XT_MATCH_BPF is not set ++# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set ++# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set ++# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set ++# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set ++# CONFIG_NETFILTER_XT_MATCH_CPU is not set ++# CONFIG_NETFILTER_XT_MATCH_DCCP is not set ++# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set ++# CONFIG_NETFILTER_XT_MATCH_DSCP is not set ++# CONFIG_NETFILTER_XT_MATCH_ECN is not set ++# CONFIG_NETFILTER_XT_MATCH_ESP is not set ++# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set ++# CONFIG_NETFILTER_XT_MATCH_HELPER is not set ++# CONFIG_NETFILTER_XT_MATCH_HL is not set ++# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set ++# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set ++# CONFIG_NETFILTER_XT_MATCH_L2TP is not set ++# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set ++# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set ++# CONFIG_NETFILTER_XT_MATCH_MAC is not set ++# CONFIG_NETFILTER_XT_MATCH_MARK is not set ++# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set ++# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set ++# CONFIG_NETFILTER_XT_MATCH_OSF is not set ++# CONFIG_NETFILTER_XT_MATCH_OWNER is not set ++# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set ++# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set ++# CONFIG_NETFILTER_XT_MATCH_POLICY is not set ++# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set ++# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set ++# CONFIG_NETFILTER_XT_MATCH_REALM is not set ++# CONFIG_NETFILTER_XT_MATCH_RECENT is not set ++# CONFIG_NETFILTER_XT_MATCH_SCTP is not set ++# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set ++# CONFIG_NETFILTER_XT_MATCH_STATE is not set ++# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set ++# CONFIG_NETFILTER_XT_MATCH_STRING is not set ++# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set ++# CONFIG_NETFILTER_XT_MATCH_TIME is not set ++# CONFIG_NETFILTER_XT_MATCH_U32 is not set ++# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set ++# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set ++# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set ++# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set ++# CONFIG_NETFILTER_XT_TARGET_CT is not set ++# CONFIG_NETFILTER_XT_TARGET_DSCP is not set ++# CONFIG_NETFILTER_XT_TARGET_HL is not set ++# CONFIG_NETFILTER_XT_TARGET_HMARK is not set ++# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set ++# CONFIG_NETFILTER_XT_TARGET_LED is not set ++# CONFIG_NETFILTER_XT_TARGET_LOG is not set ++# CONFIG_NETFILTER_XT_TARGET_MARK is not set ++# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set ++# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set ++# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set ++# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set ++# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set ++# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set ++# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set ++# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set ++# CONFIG_NETFILTER_XT_TARGET_TEE is not set ++# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set ++# CONFIG_NETFILTER_XT_TARGET_TRACE is not set ++# CONFIG_NETLINK_DIAG is not set ++# CONFIG_NETLINK_MMAP is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NETROM is not set ++CONFIG_NETWORK_FILESYSTEMS=y ++# CONFIG_NETWORK_PHY_TIMESTAMPING is not set ++# CONFIG_NETWORK_SECMARK is not set ++# CONFIG_NETXEN_NIC is not set ++# CONFIG_NET_9P is not set ++# CONFIG_NET_ACT_BPF is not set ++# CONFIG_NET_ACT_CSUM is not set ++# CONFIG_NET_ACT_GACT is not set ++# CONFIG_NET_ACT_IPT is not set ++# CONFIG_NET_ACT_MIRRED is not set ++# CONFIG_NET_ACT_NAT is not set ++# CONFIG_NET_ACT_PEDIT is not set ++# CONFIG_NET_ACT_POLICE is not set ++# CONFIG_NET_ACT_SIMP is not set ++# CONFIG_NET_ACT_SKBEDIT is not set ++# CONFIG_NET_ACT_VLAN is not set ++CONFIG_NET_CADENCE=y ++# CONFIG_NET_CALXEDA_XGMAC is not set ++CONFIG_NET_CLS=y ++# CONFIG_NET_CLS_ACT is not set ++# CONFIG_NET_CLS_BASIC is not set ++# CONFIG_NET_CLS_BPF is not set ++# CONFIG_NET_CLS_FLOW is not set ++# CONFIG_NET_CLS_FLOWER is not set ++# CONFIG_NET_CLS_FW is not set ++CONFIG_NET_CLS_IND=y ++# CONFIG_NET_CLS_ROUTE4 is not set ++# CONFIG_NET_CLS_RSVP is not set ++# CONFIG_NET_CLS_RSVP6 is not set ++# CONFIG_NET_CLS_TCINDEX is not set ++# CONFIG_NET_CLS_U32 is not set ++CONFIG_NET_CORE=y ++# CONFIG_NET_DROP_MONITOR is not set ++# CONFIG_NET_DSA is not set ++# CONFIG_NET_DSA_BCM_SF2 is not set ++# CONFIG_NET_DSA_MV88E6060 is not set ++# CONFIG_NET_DSA_MV88E6123_61_65 is not set ++# CONFIG_NET_DSA_MV88E6131 is not set ++# CONFIG_NET_DSA_MV88E6171 is not set ++# CONFIG_NET_DSA_MV88E6352 is not set ++# CONFIG_NET_DSA_MV88E6XXX is not set ++# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set ++# CONFIG_NET_DSA_TAG_DSA is not set ++# CONFIG_NET_DSA_TAG_EDSA is not set ++# CONFIG_NET_EMATCH is not set ++# CONFIG_NET_EMATCH_CANID is not set ++# CONFIG_NET_EMATCH_CMP is not set ++# CONFIG_NET_EMATCH_META is not set ++# CONFIG_NET_EMATCH_NBYTE is not set ++CONFIG_NET_EMATCH_STACK=32 ++# CONFIG_NET_EMATCH_TEXT is not set ++# CONFIG_NET_EMATCH_U32 is not set ++# CONFIG_NET_FC is not set ++# CONFIG_NET_FOU is not set ++# CONFIG_NET_FOU_IP_TUNNELS is not set ++# CONFIG_NET_IPGRE is not set ++CONFIG_NET_IPGRE_BROADCAST=y ++# CONFIG_NET_IPGRE_DEMUX is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPVTI is not set ++# CONFIG_NET_IP_TUNNEL is not set ++# CONFIG_NET_KEY is not set ++# CONFIG_NET_KEY_MIGRATE is not set ++# CONFIG_NET_L3_MASTER_DEV is not set ++# CONFIG_NET_MPLS_GSO is not set ++# CONFIG_NET_PACKET_ENGINE is not set ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++# CONFIG_NET_PTP_CLASSIFY is not set ++CONFIG_NET_RX_BUSY_POLL=y ++# CONFIG_NET_SB1000 is not set ++CONFIG_NET_SCHED=y ++# CONFIG_NET_SCH_ATM is not set ++# CONFIG_NET_SCH_CBQ is not set ++# CONFIG_NET_SCH_CHOKE is not set ++# CONFIG_NET_SCH_CODEL is not set ++# CONFIG_NET_SCH_DRR is not set ++# CONFIG_NET_SCH_DSMARK is not set ++# CONFIG_NET_SCH_ESFQ is not set ++CONFIG_NET_SCH_ESFQ_NFCT=y ++CONFIG_NET_SCH_FIFO=y ++# CONFIG_NET_SCH_FQ is not set ++CONFIG_NET_SCH_FQ_CODEL=y ++# CONFIG_NET_SCH_GRED is not set ++# CONFIG_NET_SCH_HFSC is not set ++# CONFIG_NET_SCH_HHF is not set ++# CONFIG_NET_SCH_HTB is not set ++# CONFIG_NET_SCH_INGRESS is not set ++# CONFIG_NET_SCH_MQPRIO is not set ++# CONFIG_NET_SCH_MULTIQ is not set ++# CONFIG_NET_SCH_NETEM is not set ++# CONFIG_NET_SCH_PIE is not set ++# CONFIG_NET_SCH_PLUG is not set ++# CONFIG_NET_SCH_PRIO is not set ++# CONFIG_NET_SCH_QFQ is not set ++# CONFIG_NET_SCH_RED is not set ++# CONFIG_NET_SCH_SFB is not set ++# CONFIG_NET_SCH_SFQ is not set ++# CONFIG_NET_SCH_TBF is not set ++# CONFIG_NET_SCH_TEQL is not set ++# CONFIG_NET_SCTPPROBE is not set ++# CONFIG_NET_SWITCHDEV is not set ++# CONFIG_NET_TCPPROBE is not set ++# CONFIG_NET_TEAM is not set ++# CONFIG_NET_TULIP is not set ++# CONFIG_NET_UDP_TUNNEL is not set ++CONFIG_NET_VENDOR_3COM=y ++CONFIG_NET_VENDOR_8390=y ++CONFIG_NET_VENDOR_ADAPTEC=y ++CONFIG_NET_VENDOR_AGERE=y ++CONFIG_NET_VENDOR_ALTEON=y ++CONFIG_NET_VENDOR_AMD=y ++CONFIG_NET_VENDOR_ARC=y ++CONFIG_NET_VENDOR_AURORA=y ++CONFIG_NET_VENDOR_ATHEROS=y ++CONFIG_NET_VENDOR_BROADCOM=y ++CONFIG_NET_VENDOR_BROCADE=y ++CONFIG_NET_VENDOR_CAVIUM=y ++CONFIG_NET_VENDOR_CHELSIO=y ++CONFIG_NET_VENDOR_CIRRUS=y ++CONFIG_NET_VENDOR_CISCO=y ++CONFIG_NET_VENDOR_DEC=y ++CONFIG_NET_VENDOR_DLINK=y ++CONFIG_NET_VENDOR_EMULEX=y ++CONFIG_NET_VENDOR_EXAR=y ++CONFIG_NET_VENDOR_EZCHIP=y ++CONFIG_NET_VENDOR_FARADAY=y ++CONFIG_NET_VENDOR_FREESCALE=y ++CONFIG_NET_VENDOR_FUJITSU=y ++CONFIG_NET_VENDOR_HISILICON=y ++CONFIG_NET_VENDOR_HP=y ++CONFIG_NET_VENDOR_I825XX=y ++CONFIG_NET_VENDOR_IBM=y ++CONFIG_NET_VENDOR_INTEL=y ++CONFIG_NET_VENDOR_MARVELL=y ++CONFIG_NET_VENDOR_MELLANOX=y ++CONFIG_NET_VENDOR_MICREL=y ++CONFIG_NET_VENDOR_MICROCHIP=y ++CONFIG_NET_VENDOR_MYRI=y ++CONFIG_NET_VENDOR_NATSEMI=y ++CONFIG_NET_VENDOR_NVIDIA=y ++CONFIG_NET_VENDOR_OKI=y ++CONFIG_NET_VENDOR_QLOGIC=y ++CONFIG_NET_VENDOR_QUALCOMM=y ++CONFIG_NET_VENDOR_RDC=y ++CONFIG_NET_VENDOR_REALTEK=y ++CONFIG_NET_VENDOR_RENESAS=y ++CONFIG_NET_VENDOR_ROCKER=y ++CONFIG_NET_VENDOR_SAMSUNG=y ++CONFIG_NET_VENDOR_SEEQ=y ++CONFIG_NET_VENDOR_SILAN=y ++CONFIG_NET_VENDOR_SIS=y ++CONFIG_NET_VENDOR_SMSC=y ++CONFIG_NET_VENDOR_STMICRO=y ++CONFIG_NET_VENDOR_SUN=y ++CONFIG_NET_VENDOR_SYNOPSYS=y ++CONFIG_NET_VENDOR_TEHUTI=y ++CONFIG_NET_VENDOR_TI=y ++CONFIG_NET_VENDOR_TOSHIBA=y ++CONFIG_NET_VENDOR_VIA=y ++CONFIG_NET_VENDOR_WIZNET=y ++CONFIG_NET_VENDOR_XILINX=y ++CONFIG_NET_VENDOR_XIRCOM=y ++# CONFIG_NET_VRF is not set ++# CONFIG_NET_XGENE is not set ++CONFIG_NEW_LEDS=y ++# CONFIG_NFC is not set ++# CONFIG_NFSD is not set ++# CONFIG_NFSD_V2_ACL is not set ++CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set ++# CONFIG_NFSD_V4 is not set ++# CONFIG_NFS_ACL_SUPPORT is not set ++CONFIG_NFS_COMMON=y ++# CONFIG_NFS_FS is not set ++# CONFIG_NFS_FSCACHE is not set ++# CONFIG_NFS_SWAP is not set ++# CONFIG_NFS_V2 is not set ++CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set ++# CONFIG_NFS_V4 is not set ++# CONFIG_NFS_V4_1 is not set ++# CONFIG_NFTL is not set ++# CONFIG_NFT_DUP_IPV4 is not set ++# CONFIG_NFT_DUP_IPV6 is not set ++# CONFIG_NF_CONNTRACK is not set ++# CONFIG_NF_CONNTRACK_AMANDA is not set ++CONFIG_NF_CONNTRACK_DSCPREMARK_EXT=y ++# CONFIG_NF_CONNTRACK_EVENTS is not set ++# CONFIG_NF_CONNTRACK_CHAIN_EVENTS is not set ++# CONFIG_NF_CONNTRACK_FTP is not set ++# CONFIG_NF_CONNTRACK_H323 is not set ++# CONFIG_NF_CONNTRACK_IPV4 is not set ++# CONFIG_NF_CONNTRACK_IPV6 is not set ++# CONFIG_NF_CONNTRACK_IRC is not set ++# CONFIG_NF_CONNTRACK_MARK is not set ++# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set ++# CONFIG_NF_CONNTRACK_PPTP is not set ++CONFIG_NF_CONNTRACK_PROCFS=y ++# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set ++# CONFIG_NF_CONNTRACK_SANE is not set ++# CONFIG_NF_CONNTRACK_SIP is not set ++# CONFIG_NF_CONNTRACK_SNMP is not set ++# CONFIG_NF_CONNTRACK_TFTP is not set ++# CONFIG_NF_CONNTRACK_TIMEOUT is not set ++# CONFIG_NF_CONNTRACK_TIMESTAMP is not set ++# CONFIG_NF_CONNTRACK_ZONES is not set ++# CONFIG_NF_CT_NETLINK is not set ++# CONFIG_NF_CT_NETLINK_TIMEOUT is not set ++# CONFIG_NF_CT_PROTO_DCCP is not set ++# CONFIG_NF_CT_PROTO_GRE is not set ++# CONFIG_NF_CT_PROTO_SCTP is not set ++# CONFIG_NF_CT_PROTO_UDPLITE is not set ++# CONFIG_NF_DEFRAG_IPV4 is not set ++# CONFIG_NF_DUP_IPV4 is not set ++# CONFIG_NF_DUP_IPV6 is not set ++# CONFIG_NF_LOG_ARP is not set ++# CONFIG_NF_LOG_IPV4 is not set ++# CONFIG_NF_NAT is not set ++# CONFIG_NF_NAT_AMANDA is not set ++# CONFIG_NF_NAT_FTP is not set ++# CONFIG_NF_NAT_H323 is not set ++# CONFIG_NF_NAT_IPV6 is not set ++# CONFIG_NF_NAT_IRC is not set ++# CONFIG_NF_NAT_MASQUERADE_IPV4 is not set ++# CONFIG_NF_NAT_MASQUERADE_IPV6 is not set ++# CONFIG_NF_NAT_NEEDED is not set ++# CONFIG_NF_NAT_PPTP is not set ++# CONFIG_NF_NAT_PROTO_GRE is not set ++# CONFIG_NF_NAT_SIP is not set ++# CONFIG_NF_NAT_SNMP_BASIC is not set ++# CONFIG_NF_NAT_TFTP is not set ++# CONFIG_NF_REJECT_IPV4 is not set ++# CONFIG_NF_TABLES is not set ++# CONFIG_NF_TABLES_NETDEV is not set ++# CONFIG_NI65 is not set ++# CONFIG_NILFS2_FS is not set ++# CONFIG_NIU is not set ++CONFIG_NLATTR=y ++# CONFIG_NLMON is not set ++# CONFIG_NLM_XLP_BOARD is not set ++# CONFIG_NLM_XLR_BOARD is not set ++# CONFIG_NLS is not set ++# CONFIG_NLS_ASCII is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++# CONFIG_NLS_CODEPAGE_437 is not set ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++# CONFIG_NLS_CODEPAGE_850 is not set ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_CODEPAGE_932 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++CONFIG_NLS_DEFAULT="iso8859-1" ++# CONFIG_NLS_ISO8859_1 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++# CONFIG_NLS_MAC_CELTIC is not set ++# CONFIG_NLS_MAC_CENTEURO is not set ++# CONFIG_NLS_MAC_CROATIAN is not set ++# CONFIG_NLS_MAC_CYRILLIC is not set ++# CONFIG_NLS_MAC_GAELIC is not set ++# CONFIG_NLS_MAC_GREEK is not set ++# CONFIG_NLS_MAC_ICELAND is not set ++# CONFIG_NLS_MAC_INUIT is not set ++# CONFIG_NLS_MAC_ROMAN is not set ++# CONFIG_NLS_MAC_ROMANIAN is not set ++# CONFIG_NLS_MAC_TURKISH is not set ++# CONFIG_NLS_UTF8 is not set ++# CONFIG_NOP_USB_XCEIV is not set ++# CONFIG_NORTEL_HERMES is not set ++# CONFIG_NOTIFIER_ERROR_INJECTION is not set ++# CONFIG_NOZOMI is not set ++# CONFIG_NO_BOOTMEM is not set ++# CONFIG_NO_HZ is not set ++# CONFIG_NO_HZ_FULL is not set ++# CONFIG_NO_HZ_IDLE is not set ++# CONFIG_NS83820 is not set ++# CONFIG_NTB is not set ++# CONFIG_NTFS_DEBUG is not set ++# CONFIG_NTFS_FS is not set ++# CONFIG_NTFS_RW is not set ++# CONFIG_NTP_PPS is not set ++# CONFIG_NVM is not set ++# CONFIG_NVMEM is not set ++# CONFIG_NVRAM is not set ++# CONFIG_NV_TCO is not set ++# CONFIG_NXP_STB220 is not set ++# CONFIG_NXP_STB225 is not set ++# CONFIG_N_GSM is not set ++# CONFIG_OABI_COMPAT is not set ++# CONFIG_OBS600 is not set ++# CONFIG_OCFS2_FS is not set ++# CONFIG_OCF_BENCH is not set ++# CONFIG_OCF_C7108 is not set ++# CONFIG_OCF_CRYPTOCTEON is not set ++# CONFIG_OCF_EP80579 is not set ++# CONFIG_OCF_HIFN is not set ++# CONFIG_OCF_HIFNHIPP is not set ++# CONFIG_OCF_IXP4XX is not set ++# CONFIG_OCF_KIRKWOOD is not set ++# CONFIG_OCF_OCF is not set ++# CONFIG_OCF_OCFNULL is not set ++# CONFIG_OCF_SAFE is not set ++# CONFIG_OCF_TALITOS is not set ++# CONFIG_OCF_UBSEC_SSB is not set ++# CONFIG_OF_OVERLAY is not set ++# CONFIG_OF_UNITTEST is not set ++# CONFIG_OMAP2_DSS_DEBUG is not set ++# CONFIG_OMAP2_DSS_DEBUGFS is not set ++# CONFIG_OMAP2_DSS_SDI is not set ++# CONFIG_OMAP_OCP2SCP is not set ++# CONFIG_OMAP_USB2 is not set ++# CONFIG_OMFS_FS is not set ++# CONFIG_OPENVSWITCH is not set ++# CONFIG_OPROFILE is not set ++# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set ++# CONFIG_OPT3001 is not set ++# CONFIG_ORION_WATCHDOG is not set ++# CONFIG_OSF_PARTITION is not set ++CONFIG_OVERLAY_FS=y ++# CONFIG_P54_COMMON is not set ++# CONFIG_PA12203001 is not set ++CONFIG_PACKET=y ++# CONFIG_PACKET_DIAG is not set ++# CONFIG_PAGE_EXTENSION is not set ++# CONFIG_PAGE_OWNER is not set ++# CONFIG_PAGE_POISONING is not set ++# CONFIG_PAGE_SIZE_16KB is not set ++# CONFIG_PAGE_SIZE_32KB is not set ++CONFIG_PAGE_SIZE_4KB=y ++# CONFIG_PAGE_SIZE_64KB is not set ++# CONFIG_PAGE_SIZE_8KB is not set ++# CONFIG_PANASONIC_LAPTOP is not set ++# CONFIG_PANEL is not set ++# CONFIG_PANIC_ON_OOPS is not set ++CONFIG_PANIC_ON_OOPS_VALUE=0 ++CONFIG_PANIC_TIMEOUT=0 ++# CONFIG_PANTHERLORD_FF is not set ++# CONFIG_PARPORT is not set ++# CONFIG_PARPORT_1284 is not set ++# CONFIG_PARPORT_AX88796 is not set ++# CONFIG_PARPORT_PC is not set ++CONFIG_PARTITION_ADVANCED=y ++# CONFIG_PATA_ALI is not set ++# CONFIG_PATA_AMD is not set ++# CONFIG_PATA_ARASAN_CF is not set ++# CONFIG_PATA_ARTOP is not set ++# CONFIG_PATA_ATIIXP is not set ++# CONFIG_PATA_ATP867X is not set ++# CONFIG_PATA_CMD640_PCI is not set ++# CONFIG_PATA_CMD64X is not set ++# CONFIG_PATA_CS5520 is not set ++# CONFIG_PATA_CS5530 is not set ++# CONFIG_PATA_CS5535 is not set ++# CONFIG_PATA_CS5536 is not set ++# CONFIG_PATA_CYPRESS is not set ++# CONFIG_PATA_EFAR is not set ++# CONFIG_PATA_HPT366 is not set ++# CONFIG_PATA_HPT37X is not set ++# CONFIG_PATA_HPT3X2N is not set ++# CONFIG_PATA_HPT3X3 is not set ++# CONFIG_PATA_ISAPNP is not set ++# CONFIG_PATA_IT8213 is not set ++# CONFIG_PATA_IT821X is not set ++# CONFIG_PATA_JMICRON is not set ++# CONFIG_PATA_LEGACY is not set ++# CONFIG_PATA_MARVELL is not set ++# CONFIG_PATA_MPIIX is not set ++# CONFIG_PATA_NETCELL is not set ++# CONFIG_PATA_NINJA32 is not set ++# CONFIG_PATA_NS87410 is not set ++# CONFIG_PATA_NS87415 is not set ++# CONFIG_PATA_OCTEON_CF is not set ++# CONFIG_PATA_OF_PLATFORM is not set ++# CONFIG_PATA_OLDPIIX is not set ++# CONFIG_PATA_OPTI is not set ++# CONFIG_PATA_OPTIDMA is not set ++# CONFIG_PATA_PCMCIA is not set ++# CONFIG_PATA_PDC2027X is not set ++# CONFIG_PATA_PDC_OLD is not set ++# CONFIG_PATA_PLATFORM is not set ++# CONFIG_PATA_QDI is not set ++# CONFIG_PATA_RADISYS is not set ++# CONFIG_PATA_RDC is not set ++# CONFIG_PATA_RZ1000 is not set ++# CONFIG_PATA_SC1200 is not set ++# CONFIG_PATA_SCH is not set ++# CONFIG_PATA_SERVERWORKS is not set ++# CONFIG_PATA_SIL680 is not set ++# CONFIG_PATA_SIS is not set ++# CONFIG_PATA_TOSHIBA is not set ++# CONFIG_PATA_TRIFLEX is not set ++# CONFIG_PATA_VIA is not set ++# CONFIG_PATA_WINBOND is not set ++# CONFIG_PATA_WINBOND_VLB is not set ++# CONFIG_PC300TOO is not set ++# CONFIG_PCCARD is not set ++# CONFIG_PCH_GBE is not set ++# CONFIG_PCH_PHUB is not set ++# CONFIG_PCI200SYN is not set ++# CONFIG_PCIEAER_INJECT is not set ++# CONFIG_PCIEASPM is not set ++# CONFIG_PCIEPORTBUS is not set ++# CONFIG_PCIE_ALTERA is not set ++# CONFIG_PCIE_ECRC is not set ++# CONFIG_PCIE_IPROC is not set ++# CONFIG_PCIPCWATCHDOG is not set ++# CONFIG_PCI_ATMEL is not set ++# CONFIG_PCI_CNB20LE_QUIRK is not set ++# CONFIG_PCI_DEBUG is not set ++# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set ++# CONFIG_PCI_HERMES is not set ++# CONFIG_PCI_HOST_GENERIC is not set ++# CONFIG_PCI_IOV is not set ++# CONFIG_PCI_LAYERSCAPE is not set ++# CONFIG_PCI_MSI is not set ++# CONFIG_PCI_PASID is not set ++# CONFIG_PCI_PRI is not set ++CONFIG_PCI_QUIRKS=y ++# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set ++# CONFIG_PCI_STUB is not set ++CONFIG_PCI_SYSCALL=y ++# CONFIG_PCMCIA is not set ++# CONFIG_PCMCIA_3C574 is not set ++# CONFIG_PCMCIA_3C589 is not set ++# CONFIG_PCMCIA_AHA152X is not set ++# CONFIG_PCMCIA_ATMEL is not set ++# CONFIG_PCMCIA_AXNET is not set ++# CONFIG_PCMCIA_DEBUG is not set ++# CONFIG_PCMCIA_FDOMAIN is not set ++# CONFIG_PCMCIA_FMVJ18X is not set ++# CONFIG_PCMCIA_HERMES is not set ++# CONFIG_PCMCIA_LOAD_CIS is not set ++# CONFIG_PCMCIA_NINJA_SCSI is not set ++# CONFIG_PCMCIA_NMCLAN is not set ++# CONFIG_PCMCIA_PCNET is not set ++# CONFIG_PCMCIA_QLOGIC is not set ++# CONFIG_PCMCIA_RAYCS is not set ++# CONFIG_PCMCIA_SMC91C92 is not set ++# CONFIG_PCMCIA_SPECTRUM is not set ++# CONFIG_PCMCIA_SYM53C500 is not set ++# CONFIG_PCMCIA_WL3501 is not set ++# CONFIG_PCMCIA_XIRC2PS is not set ++# CONFIG_PCMCIA_XIRCOM is not set ++# CONFIG_PCNET32 is not set ++# CONFIG_PCSPKR_PLATFORM is not set ++# CONFIG_PD6729 is not set ++# CONFIG_PDA_POWER is not set ++# CONFIG_PDC_ADMA is not set ++# CONFIG_PERCPU_TEST is not set ++# CONFIG_PERF_EVENTS is not set ++# CONFIG_PERSISTENT_KEYRINGS is not set ++# CONFIG_PHANTOM is not set ++# CONFIG_PHONET is not set ++# CONFIG_PHYLIB is not set ++# CONFIG_PHYS_ADDR_T_64BIT is not set ++# CONFIG_PHY_EXYNOS_DP_VIDEO is not set ++# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set ++# CONFIG_PHY_PXA_28NM_HSIC is not set ++# CONFIG_PHY_PXA_28NM_USB2 is not set ++# CONFIG_PHY_QCOM_DWC3 is not set ++# CONFIG_PHY_SAMSUNG_USB2 is not set ++# CONFIG_PID_IN_CONTEXTIDR is not set ++# CONFIG_PID_NS is not set ++CONFIG_PINCONF=y ++# CONFIG_PINCTRL is not set ++# CONFIG_PINCTRL_AMD is not set ++# CONFIG_PINCTRL_EXYNOS is not set ++# CONFIG_PINCTRL_EXYNOS5440 is not set ++# CONFIG_PINCTRL_MSM8X74 is not set ++CONFIG_PINCTRL_SINGLE=y ++CONFIG_PINMUX=y ++# CONFIG_PL320_MBOX is not set ++# CONFIG_PLAT_SPEAR is not set ++# CONFIG_PLIP is not set ++# CONFIG_PLX_HERMES is not set ++# CONFIG_PM is not set ++# CONFIG_PMBUS is not set ++# CONFIG_PMC_MSP is not set ++# CONFIG_PMIC_ADP5520 is not set ++# CONFIG_PMIC_DA903X is not set ++# CONFIG_PM_AUTOSLEEP is not set ++# CONFIG_PM_DEVFREQ is not set ++# CONFIG_PM_WAKELOCKS is not set ++# CONFIG_POSIX_MQUEUE is not set ++# CONFIG_POWERCAP is not set ++# CONFIG_POWER_AVS is not set ++# CONFIG_POWER_RESET is not set ++# CONFIG_POWER_RESET_BRCMSTB is not set ++# CONFIG_POWER_RESET_GPIO is not set ++# CONFIG_POWER_RESET_GPIO_RESTART is not set ++# CONFIG_POWER_RESET_LTC2952 is not set ++# CONFIG_POWER_RESET_RESTART is not set ++# CONFIG_POWER_RESET_SYSCON is not set ++# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set ++# CONFIG_POWER_RESET_VERSATILE is not set ++# CONFIG_POWER_SUPPLY is not set ++# CONFIG_POWER_SUPPLY_DEBUG is not set ++# CONFIG_PPC4xx_GPIO is not set ++# CONFIG_PPC_16K_PAGES is not set ++# CONFIG_PPC_256K_PAGES is not set ++CONFIG_PPC_4K_PAGES=y ++# CONFIG_PPC_64K_PAGES is not set ++# CONFIG_PPC_DISABLE_WERROR is not set ++# CONFIG_PPC_EMULATED_STATS is not set ++# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set ++# CONFIG_PPP is not set ++# CONFIG_PPPOATM is not set ++# CONFIG_PPPOE is not set ++# CONFIG_PPPOL2TP is not set ++# CONFIG_PPP_ASYNC is not set ++# CONFIG_PPP_BSDCOMP is not set ++# CONFIG_PPP_DEFLATE is not set ++CONFIG_PPP_FILTER=y ++# CONFIG_PPP_MPPE is not set ++CONFIG_PPP_MULTILINK=y ++# CONFIG_PPP_SYNC_TTY is not set ++# CONFIG_PPS is not set ++# CONFIG_PPS_CLIENT_GPIO is not set ++# CONFIG_PPS_CLIENT_KTIMER is not set ++# CONFIG_PPS_CLIENT_LDISC is not set ++# CONFIG_PPS_CLIENT_PARPORT is not set ++# CONFIG_PPS_DEBUG is not set ++# CONFIG_PPTP is not set ++# CONFIG_PREEMPT is not set ++CONFIG_PREEMPT_NONE=y ++# CONFIG_PREEMPT_TRACER is not set ++# CONFIG_PREEMPT_VOLUNTARY is not set ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_PRINTK=y ++# CONFIG_PRINTK_TIME is not set ++CONFIG_PRINT_STACK_DEPTH=64 ++# CONFIG_PRISM2_USB is not set ++# CONFIG_PRISM54 is not set ++# CONFIG_PROC_CHILDREN is not set ++CONFIG_PROC_FS=y ++# CONFIG_PROC_KCORE is not set ++# CONFIG_PROC_PAGE_MONITOR is not set ++CONFIG_PROC_STRIPPED=y ++CONFIG_PROC_SYSCTL=y ++# CONFIG_PROFILE_ALL_BRANCHES is not set ++# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set ++# CONFIG_PROFILING is not set ++# CONFIG_PROVE_LOCKING is not set ++# CONFIG_PROVE_RCU is not set ++# CONFIG_PROVE_RCU_REPEATEDLY is not set ++# CONFIG_PSB6970_PHY is not set ++# CONFIG_PSTORE is not set ++# CONFIG_PTP_1588_CLOCK is not set ++# CONFIG_PTP_1588_CLOCK_IXP46X is not set ++# CONFIG_PTP_1588_CLOCK_PCH is not set ++# CONFIG_PWM is not set ++# CONFIG_PWM_FSL_FTM is not set ++# CONFIG_PWM_PCA9685 is not set ++# CONFIG_QCA7000 is not set ++# CONFIG_QCOM_SPMI_IADC is not set ++# CONFIG_QCOM_SPMI_VADC is not set ++# CONFIG_QED is not set ++# CONFIG_QLA3XXX is not set ++# CONFIG_QLCNIC is not set ++# CONFIG_QLGE is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_QNX6FS_FS is not set ++# CONFIG_QORIQ_CPUFREQ is not set ++# CONFIG_QSEMI_PHY is not set ++# CONFIG_QUOTA is not set ++# CONFIG_QUOTACTL is not set ++# CONFIG_QUOTA_DEBUG is not set ++# CONFIG_R3964 is not set ++# CONFIG_R6040 is not set ++# CONFIG_R8169 is not set ++# CONFIG_R8188EU is not set ++# CONFIG_R8712U is not set ++# CONFIG_R8723AU is not set ++# CONFIG_RADIO_ADAPTERS is not set ++# CONFIG_RADIO_AZTECH is not set ++# CONFIG_RADIO_CADET is not set ++# CONFIG_RADIO_GEMTEK is not set ++# CONFIG_RADIO_MAXIRADIO is not set ++# CONFIG_RADIO_RTRACK is not set ++# CONFIG_RADIO_RTRACK2 is not set ++# CONFIG_RADIO_SF16FMI is not set ++# CONFIG_RADIO_SF16FMR2 is not set ++# CONFIG_RADIO_TERRATEC is not set ++# CONFIG_RADIO_TRUST is not set ++# CONFIG_RADIO_TYPHOON is not set ++# CONFIG_RADIO_ZOLTRIX is not set ++# CONFIG_RAID_ATTRS is not set ++# CONFIG_RALINK is not set ++# CONFIG_RANDOM32_SELFTEST is not set ++# CONFIG_RAPIDIO is not set ++# CONFIG_RAS is not set ++# CONFIG_RAW_DRIVER is not set ++# CONFIG_RBTREE_TEST is not set ++CONFIG_RCU_CPU_STALL_TIMEOUT=60 ++# CONFIG_RCU_EQS_DEBUG is not set ++# CONFIG_RCU_EXPEDITE_BOOT is not set ++CONFIG_RCU_EXPERT=y ++CONFIG_RCU_FANOUT=32 ++CONFIG_RCU_FANOUT_LEAF=16 ++# CONFIG_RCU_FAST_NO_HZ is not set ++CONFIG_RCU_KTHREAD_PRIO=0 ++# CONFIG_RCU_NOCB_CPU is not set ++# CONFIG_RCU_TORTURE_TEST is not set ++CONFIG_RCU_TORTURE_TEST_SLOW_INIT_DELAY=3 ++# CONFIG_RCU_TRACE is not set ++# CONFIG_RC_ATI_REMOTE is not set ++# CONFIG_RC_CORE is not set ++# CONFIG_RC_DECODERS is not set ++# CONFIG_RC_LOOPBACK is not set ++# CONFIG_RC_MAP is not set ++# CONFIG_RDS is not set ++# CONFIG_RD_BZIP2 is not set ++# CONFIG_RD_GZIP is not set ++# CONFIG_RD_LZ4 is not set ++# CONFIG_RD_LZMA is not set ++# CONFIG_RD_LZO is not set ++# CONFIG_RD_XZ is not set ++# CONFIG_READABLE_ASM is not set ++# CONFIG_REALTEK_PHY is not set ++# CONFIG_REDWOOD is not set ++# CONFIG_REGMAP is not set ++# CONFIG_REGMAP_I2C is not set ++# CONFIG_REGMAP_MMIO is not set ++# CONFIG_REGMAP_SPI is not set ++# CONFIG_REGULATOR is not set ++# CONFIG_REGULATOR_ACT8865 is not set ++# CONFIG_REGULATOR_AD5398 is not set ++# CONFIG_REGULATOR_ANATOP is not set ++# CONFIG_REGULATOR_DA9210 is not set ++# CONFIG_REGULATOR_DA9211 is not set ++# CONFIG_REGULATOR_DEBUG is not set ++# CONFIG_REGULATOR_FAN53555 is not set ++# CONFIG_REGULATOR_FIXED_VOLTAGE is not set ++# CONFIG_REGULATOR_GPIO is not set ++# CONFIG_REGULATOR_ISL6271A is not set ++# CONFIG_REGULATOR_ISL9305 is not set ++# CONFIG_REGULATOR_LP3971 is not set ++# CONFIG_REGULATOR_LP3972 is not set ++# CONFIG_REGULATOR_LP872X is not set ++# CONFIG_REGULATOR_LP8755 is not set ++# CONFIG_REGULATOR_LTC3589 is not set ++# CONFIG_REGULATOR_MAX1586 is not set ++# CONFIG_REGULATOR_MAX8649 is not set ++# CONFIG_REGULATOR_MAX8660 is not set ++# CONFIG_REGULATOR_MAX8952 is not set ++# CONFIG_REGULATOR_MAX8973 is not set ++# CONFIG_REGULATOR_MT6311 is not set ++# CONFIG_REGULATOR_PFUZE100 is not set ++# CONFIG_REGULATOR_PWM is not set ++# CONFIG_REGULATOR_TI_ABB is not set ++# CONFIG_REGULATOR_TPS51632 is not set ++# CONFIG_REGULATOR_TPS62360 is not set ++# CONFIG_REGULATOR_TPS65023 is not set ++# CONFIG_REGULATOR_TPS6507X is not set ++# CONFIG_REGULATOR_TPS6524X is not set ++# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set ++# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set ++# CONFIG_REISERFS_CHECK is not set ++# CONFIG_REISERFS_FS is not set ++# CONFIG_REISERFS_FS_POSIX_ACL is not set ++# CONFIG_REISERFS_FS_SECURITY is not set ++# CONFIG_REISERFS_FS_XATTR is not set ++# CONFIG_REISERFS_PROC_INFO is not set ++# CONFIG_RELAY is not set ++# CONFIG_RESET_CONTROLLER is not set ++# CONFIG_RFD_FTL is not set ++# CONFIG_RFKILL is not set ++# CONFIG_RFKILL_INPUT is not set ++# CONFIG_RFKILL_REGULATOR is not set ++# CONFIG_RING_BUFFER_BENCHMARK is not set ++# CONFIG_RING_BUFFER_STARTUP_TEST is not set ++# CONFIG_ROCKER is not set ++# CONFIG_ROMFS_FS is not set ++# CONFIG_ROSE is not set ++# CONFIG_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPR0521 is not set ++# CONFIG_RT2X00 is not set ++# CONFIG_RTC_CLASS is not set ++# CONFIG_RTC_DEBUG is not set ++# CONFIG_RTC_DRV_ABB5ZES3 is not set ++# CONFIG_RTC_DRV_ABX80X is not set ++# CONFIG_RTC_DRV_ARMADA38X is not set ++# CONFIG_RTC_DRV_AU1XXX is not set ++# CONFIG_RTC_DRV_BQ32K is not set ++# CONFIG_RTC_DRV_BQ4802 is not set ++CONFIG_RTC_DRV_CMOS=y ++# CONFIG_RTC_DRV_DS1286 is not set ++# CONFIG_RTC_DRV_DS1305 is not set ++# CONFIG_RTC_DRV_DS1307 is not set ++# CONFIG_RTC_DRV_DS1343 is not set ++# CONFIG_RTC_DRV_DS1347 is not set ++# CONFIG_RTC_DRV_DS1374 is not set ++# CONFIG_RTC_DRV_DS1390 is not set ++# CONFIG_RTC_DRV_DS1511 is not set ++# CONFIG_RTC_DRV_DS1553 is not set ++# CONFIG_RTC_DRV_DS1672 is not set ++# CONFIG_RTC_DRV_DS1685_FAMILY is not set ++# CONFIG_RTC_DRV_DS1742 is not set ++# CONFIG_RTC_DRV_DS2404 is not set ++# CONFIG_RTC_DRV_DS3232 is not set ++# CONFIG_RTC_DRV_DS3234 is not set ++# CONFIG_RTC_DRV_EM3027 is not set ++# CONFIG_RTC_DRV_EP93XX is not set ++# CONFIG_RTC_DRV_FM3130 is not set ++# CONFIG_RTC_DRV_GENERIC is not set ++# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set ++# CONFIG_RTC_DRV_HYM8563 is not set ++# CONFIG_RTC_DRV_ISL12022 is not set ++# CONFIG_RTC_DRV_ISL12057 is not set ++# CONFIG_RTC_DRV_ISL1208 is not set ++# CONFIG_RTC_DRV_M41T80 is not set ++# CONFIG_RTC_DRV_M41T93 is not set ++# CONFIG_RTC_DRV_M41T94 is not set ++# CONFIG_RTC_DRV_M48T35 is not set ++# CONFIG_RTC_DRV_M48T59 is not set ++# CONFIG_RTC_DRV_M48T86 is not set ++# CONFIG_RTC_DRV_MAX6900 is not set ++# CONFIG_RTC_DRV_MAX6902 is not set ++# CONFIG_RTC_DRV_MCP795 is not set ++# CONFIG_RTC_DRV_MOXART is not set ++# CONFIG_RTC_DRV_MPC5121 is not set ++# CONFIG_RTC_DRV_MSM6242 is not set ++# CONFIG_RTC_DRV_OMAP is not set ++# CONFIG_RTC_DRV_PCF2123 is not set ++# CONFIG_RTC_DRV_PCF2127 is not set ++# CONFIG_RTC_DRV_PCF85063 is not set ++# CONFIG_RTC_DRV_PCF8523 is not set ++# CONFIG_RTC_DRV_PCF8563 is not set ++# CONFIG_RTC_DRV_PCF8583 is not set ++# CONFIG_RTC_DRV_PL030 is not set ++# CONFIG_RTC_DRV_PL031 is not set ++# CONFIG_RTC_DRV_PS3 is not set ++# CONFIG_RTC_DRV_PT7C4338 is not set ++# CONFIG_RTC_DRV_R9701 is not set ++# CONFIG_RTC_DRV_RP5C01 is not set ++# CONFIG_RTC_DRV_RS5C348 is not set ++# CONFIG_RTC_DRV_RS5C372 is not set ++# CONFIG_RTC_DRV_RTC7301 is not set ++# CONFIG_RTC_DRV_RV3029C2 is not set ++# CONFIG_RTC_DRV_RV8803 is not set ++# CONFIG_RTC_DRV_RX4581 is not set ++# CONFIG_RTC_DRV_RX8025 is not set ++# CONFIG_RTC_DRV_RX8581 is not set ++# CONFIG_RTC_DRV_S35390A is not set ++# CONFIG_RTC_DRV_SNVS is not set ++# CONFIG_RTC_DRV_STK17TA8 is not set ++# CONFIG_RTC_DRV_SUN6I is not set ++# CONFIG_RTC_DRV_TEST is not set ++# CONFIG_RTC_DRV_V3020 is not set ++# CONFIG_RTC_DRV_X1205 is not set ++# CONFIG_RTC_DRV_XGENE is not set ++# CONFIG_RTC_DRV_ZYNQMP is not set ++CONFIG_RTC_HCTOSYS=y ++CONFIG_RTC_HCTOSYS_DEVICE="rtc0" ++CONFIG_RTC_INTF_DEV=y ++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set ++CONFIG_RTC_INTF_PROC=y ++CONFIG_RTC_INTF_SYSFS=y ++CONFIG_RTC_LIB=y ++CONFIG_RTC_SYSTOHC=y ++CONFIG_RTC_SYSTOHC_DEVICE="rtc0" ++# CONFIG_RTL8180 is not set ++# CONFIG_RTL8187 is not set ++# CONFIG_RTL8192E is not set ++# CONFIG_RTL8192U is not set ++# CONFIG_RTL8306_PHY is not set ++# CONFIG_RTL8366RB_PHY is not set ++# CONFIG_RTL8366S_PHY is not set ++# CONFIG_RTL8366_SMI is not set ++# CONFIG_RTL8366_SMI_DEBUG_FS is not set ++# CONFIG_RTL8367B_PHY is not set ++# CONFIG_RTL8367_PHY is not set ++# CONFIG_RTLLIB is not set ++# CONFIG_RTL_CARDS is not set ++# CONFIG_RTS5208 is not set ++CONFIG_RT_MUTEXES=y ++# CONFIG_RUNTIME_DEBUG is not set ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++# CONFIG_S2IO is not set ++# CONFIG_SAMPLES is not set ++# CONFIG_SAMSUNG_LAPTOP is not set ++# CONFIG_SATA_ACARD_AHCI is not set ++# CONFIG_SATA_AHCI is not set ++# CONFIG_SATA_AHCI_PLATFORM is not set ++# CONFIG_SATA_DWC is not set ++# CONFIG_SATA_FSL is not set ++# CONFIG_SATA_HIGHBANK is not set ++# CONFIG_SATA_INIC162X is not set ++# CONFIG_SATA_MV is not set ++# CONFIG_SATA_NV is not set ++# CONFIG_SATA_PMP is not set ++# CONFIG_SATA_PROMISE is not set ++# CONFIG_SATA_QSTOR is not set ++# CONFIG_SATA_RCAR is not set ++# CONFIG_SATA_SIL is not set ++# CONFIG_SATA_SIL24 is not set ++# CONFIG_SATA_SIS is not set ++# CONFIG_SATA_SVW is not set ++# CONFIG_SATA_SX4 is not set ++# CONFIG_SATA_ULI is not set ++# CONFIG_SATA_VIA is not set ++# CONFIG_SATA_VITESSE is not set ++# CONFIG_SBC_FITPC2_WATCHDOG is not set ++# CONFIG_SC92031 is not set ++# CONFIG_SCA3000 is not set ++# CONFIG_SCACHE_DEBUGFS is not set ++# CONFIG_SCC is not set ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_SCHED_AUTOGROUP is not set ++# CONFIG_SCHED_DEBUG is not set ++# CONFIG_SCHED_MC is not set ++CONFIG_SCHED_OMIT_FRAME_POINTER=y ++# CONFIG_SCHED_SMT is not set ++# CONFIG_SCHED_STACK_END_CHECK is not set ++# CONFIG_SCHED_TRACER is not set ++# CONFIG_SCSI is not set ++# CONFIG_SCSI_3W_9XXX is not set ++# CONFIG_SCSI_3W_SAS is not set ++# CONFIG_SCSI_7000FASST is not set ++# CONFIG_SCSI_AACRAID is not set ++# CONFIG_SCSI_ACARD is not set ++# CONFIG_SCSI_ADVANSYS is not set ++# CONFIG_SCSI_AHA152X is not set ++# CONFIG_SCSI_AHA1542 is not set ++# CONFIG_SCSI_AIC79XX is not set ++# CONFIG_SCSI_AIC7XXX is not set ++# CONFIG_SCSI_AIC94XX is not set ++# CONFIG_SCSI_AM53C974 is not set ++# CONFIG_SCSI_ARCMSR is not set ++# CONFIG_SCSI_BFA_FC is not set ++# CONFIG_SCSI_BNX2X_FCOE is not set ++# CONFIG_SCSI_BNX2_ISCSI is not set ++# CONFIG_SCSI_BUSLOGIC is not set ++# CONFIG_SCSI_CHELSIO_FCOE is not set ++# CONFIG_SCSI_CONSTANTS is not set ++# CONFIG_SCSI_CXGB3_ISCSI is not set ++# CONFIG_SCSI_CXGB4_ISCSI is not set ++# CONFIG_SCSI_DC395x is not set ++# CONFIG_SCSI_DEBUG is not set ++# CONFIG_SCSI_DH is not set ++CONFIG_SCSI_DMA=y ++# CONFIG_SCSI_DMX3191D is not set ++# CONFIG_SCSI_DPT_I2O is not set ++# CONFIG_SCSI_DTC3280 is not set ++# CONFIG_SCSI_EATA is not set ++# CONFIG_SCSI_ESAS2R is not set ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_FUTURE_DOMAIN is not set ++# CONFIG_SCSI_GDTH is not set ++# CONFIG_SCSI_GENERIC_NCR5380 is not set ++# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set ++# CONFIG_SCSI_HPSA is not set ++# CONFIG_SCSI_HPTIOP is not set ++# CONFIG_SCSI_IN2000 is not set ++# CONFIG_SCSI_INIA100 is not set ++# CONFIG_SCSI_INITIO is not set ++# CONFIG_SCSI_IPR is not set ++# CONFIG_SCSI_IPS is not set ++# CONFIG_SCSI_ISCI is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_LOGGING is not set ++CONFIG_SCSI_LOWLEVEL=y ++# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set ++# CONFIG_SCSI_LPFC is not set ++CONFIG_SCSI_MOD=y ++# CONFIG_SCSI_MPT2SAS is not set ++# CONFIG_SCSI_MPT3SAS is not set ++# CONFIG_SCSI_MQ_DEFAULT is not set ++# CONFIG_SCSI_MVSAS is not set ++# CONFIG_SCSI_MVSAS_DEBUG is not set ++# CONFIG_SCSI_MVUMI is not set ++# CONFIG_SCSI_NCR53C406A is not set ++# CONFIG_SCSI_NETLINK is not set ++# CONFIG_SCSI_NSP32 is not set ++# CONFIG_SCSI_OSD_INITIATOR is not set ++# CONFIG_SCSI_PAS16 is not set ++# CONFIG_SCSI_PM8001 is not set ++# CONFIG_SCSI_PMCRAID is not set ++CONFIG_SCSI_PROC_FS=y ++# CONFIG_SCSI_QLA_FC is not set ++# CONFIG_SCSI_QLA_ISCSI is not set ++# CONFIG_SCSI_QLOGIC_1280 is not set ++# CONFIG_SCSI_QLOGIC_FAS is not set ++# CONFIG_SCSI_SAS_ATTRS is not set ++# CONFIG_SCSI_SAS_LIBSAS is not set ++# CONFIG_SCSI_SCAN_ASYNC is not set ++# CONFIG_SCSI_SNIC is not set ++# CONFIG_SCSI_SPI_ATTRS is not set ++# CONFIG_SCSI_SRP_ATTRS is not set ++# CONFIG_SCSI_STEX is not set ++# CONFIG_SCSI_SYM53C416 is not set ++# CONFIG_SCSI_SYM53C8XX_2 is not set ++# CONFIG_SCSI_T128 is not set ++# CONFIG_SCSI_U14_34F is not set ++# CONFIG_SCSI_UFSHCD is not set ++# CONFIG_SCSI_ULTRASTOR is not set ++# CONFIG_SCSI_VIRTIO is not set ++# CONFIG_SCSI_WD719X is not set ++# CONFIG_SCx200_ACB is not set ++# CONFIG_SDIO_UART is not set ++# CONFIG_SECCOMP is not set ++CONFIG_SECTION_MISMATCH_WARN_ONLY=y ++# CONFIG_SECURITY is not set ++# CONFIG_SECURITYFS is not set ++# CONFIG_SECURITY_DMESG_RESTRICT is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++# CONFIG_SENSORS_ABITUGURU is not set ++# CONFIG_SENSORS_ABITUGURU3 is not set ++# CONFIG_SENSORS_ACPI_POWER is not set ++# CONFIG_SENSORS_AD7314 is not set ++# CONFIG_SENSORS_AD7414 is not set ++# CONFIG_SENSORS_AD7418 is not set ++# CONFIG_SENSORS_ADC128D818 is not set ++# CONFIG_SENSORS_ADCXX is not set ++# CONFIG_SENSORS_ADM1021 is not set ++# CONFIG_SENSORS_ADM1025 is not set ++# CONFIG_SENSORS_ADM1026 is not set ++# CONFIG_SENSORS_ADM1029 is not set ++# CONFIG_SENSORS_ADM1031 is not set ++# CONFIG_SENSORS_ADM9240 is not set ++# CONFIG_SENSORS_ADS1015 is not set ++# CONFIG_SENSORS_ADS7828 is not set ++# CONFIG_SENSORS_ADS7871 is not set ++# CONFIG_SENSORS_ADT7310 is not set ++# CONFIG_SENSORS_ADT7410 is not set ++# CONFIG_SENSORS_ADT7411 is not set ++# CONFIG_SENSORS_ADT7462 is not set ++# CONFIG_SENSORS_ADT7470 is not set ++# CONFIG_SENSORS_ADT7475 is not set ++# CONFIG_SENSORS_AMC6821 is not set ++# CONFIG_SENSORS_APDS990X is not set ++# CONFIG_SENSORS_APPLESMC is not set ++# CONFIG_SENSORS_ASB100 is not set ++# CONFIG_SENSORS_ASC7621 is not set ++# CONFIG_SENSORS_ATK0110 is not set ++# CONFIG_SENSORS_ATXP1 is not set ++# CONFIG_SENSORS_BH1770 is not set ++# CONFIG_SENSORS_BH1780 is not set ++# CONFIG_SENSORS_CORETEMP is not set ++# CONFIG_SENSORS_DELL_SMM is not set ++# CONFIG_SENSORS_DME1737 is not set ++# CONFIG_SENSORS_DS1621 is not set ++# CONFIG_SENSORS_DS620 is not set ++# CONFIG_SENSORS_EMC1403 is not set ++# CONFIG_SENSORS_EMC2103 is not set ++# CONFIG_SENSORS_EMC6W201 is not set ++# CONFIG_SENSORS_F71805F is not set ++# CONFIG_SENSORS_F71882FG is not set ++# CONFIG_SENSORS_F75375S is not set ++# CONFIG_SENSORS_FAM15H_POWER is not set ++# CONFIG_SENSORS_FSCHMD is not set ++# CONFIG_SENSORS_G760A is not set ++# CONFIG_SENSORS_G762 is not set ++# CONFIG_SENSORS_GL518SM is not set ++# CONFIG_SENSORS_GL520SM is not set ++# CONFIG_SENSORS_GPIO_FAN is not set ++# CONFIG_SENSORS_GSC is not set ++# CONFIG_SENSORS_HDAPS is not set ++# CONFIG_SENSORS_HIH6130 is not set ++# CONFIG_SENSORS_HMC5843 is not set ++# CONFIG_SENSORS_HMC5843_I2C is not set ++# CONFIG_SENSORS_HMC5843_SPI is not set ++# CONFIG_SENSORS_HTU21 is not set ++# CONFIG_SENSORS_I5500 is not set ++# CONFIG_SENSORS_I5K_AMB is not set ++# CONFIG_SENSORS_IIO_HWMON is not set ++# CONFIG_SENSORS_INA209 is not set ++# CONFIG_SENSORS_INA2XX is not set ++# CONFIG_SENSORS_ISL29018 is not set ++# CONFIG_SENSORS_ISL29028 is not set ++# CONFIG_SENSORS_IT87 is not set ++# CONFIG_SENSORS_JC42 is not set ++# CONFIG_SENSORS_K10TEMP is not set ++# CONFIG_SENSORS_K8TEMP is not set ++# CONFIG_SENSORS_LINEAGE is not set ++# CONFIG_SENSORS_LIS3LV02D is not set ++# CONFIG_SENSORS_LIS3_I2C is not set ++# CONFIG_SENSORS_LIS3_SPI is not set ++# CONFIG_SENSORS_LM63 is not set ++# CONFIG_SENSORS_LM70 is not set ++# CONFIG_SENSORS_LM73 is not set ++# CONFIG_SENSORS_LM75 is not set ++# CONFIG_SENSORS_LM77 is not set ++# CONFIG_SENSORS_LM78 is not set ++# CONFIG_SENSORS_LM80 is not set ++# CONFIG_SENSORS_LM83 is not set ++# CONFIG_SENSORS_LM85 is not set ++# CONFIG_SENSORS_LM87 is not set ++# CONFIG_SENSORS_LM90 is not set ++# CONFIG_SENSORS_LM92 is not set ++# CONFIG_SENSORS_LM93 is not set ++# CONFIG_SENSORS_LM95234 is not set ++# CONFIG_SENSORS_LM95241 is not set ++# CONFIG_SENSORS_LM95245 is not set ++# CONFIG_SENSORS_LTC2945 is not set ++# CONFIG_SENSORS_LTC4151 is not set ++# CONFIG_SENSORS_LTC4215 is not set ++# CONFIG_SENSORS_LTC4222 is not set ++# CONFIG_SENSORS_LTC4245 is not set ++# CONFIG_SENSORS_LTC4260 is not set ++# CONFIG_SENSORS_LTC4261 is not set ++# CONFIG_SENSORS_MAX1111 is not set ++# CONFIG_SENSORS_MAX16065 is not set ++# CONFIG_SENSORS_MAX1619 is not set ++# CONFIG_SENSORS_MAX1668 is not set ++# CONFIG_SENSORS_MAX197 is not set ++# CONFIG_SENSORS_MAX31790 is not set ++# CONFIG_SENSORS_MAX6639 is not set ++# CONFIG_SENSORS_MAX6642 is not set ++# CONFIG_SENSORS_MAX6650 is not set ++# CONFIG_SENSORS_MAX6697 is not set ++# CONFIG_SENSORS_MCP3021 is not set ++# CONFIG_SENSORS_NCT6683 is not set ++# CONFIG_SENSORS_NCT6775 is not set ++# CONFIG_SENSORS_NCT7802 is not set ++# CONFIG_SENSORS_NCT7904 is not set ++# CONFIG_SENSORS_NTC_THERMISTOR is not set ++# CONFIG_SENSORS_PC87360 is not set ++# CONFIG_SENSORS_PC87427 is not set ++# CONFIG_SENSORS_PCF8591 is not set ++# CONFIG_SENSORS_POWR1220 is not set ++# CONFIG_SENSORS_PWM_FAN is not set ++# CONFIG_SENSORS_SCH5627 is not set ++# CONFIG_SENSORS_SCH5636 is not set ++# CONFIG_SENSORS_SCH56XX_COMMON is not set ++# CONFIG_SENSORS_SHT15 is not set ++# CONFIG_SENSORS_SHT21 is not set ++# CONFIG_SENSORS_SHTC1 is not set ++# CONFIG_SENSORS_SIS5595 is not set ++# CONFIG_SENSORS_SMM665 is not set ++# CONFIG_SENSORS_SMSC47B397 is not set ++# CONFIG_SENSORS_SMSC47M1 is not set ++# CONFIG_SENSORS_SMSC47M192 is not set ++# CONFIG_SENSORS_TC74 is not set ++# CONFIG_SENSORS_THMC50 is not set ++# CONFIG_SENSORS_TMP102 is not set ++# CONFIG_SENSORS_TMP103 is not set ++# CONFIG_SENSORS_TMP401 is not set ++# CONFIG_SENSORS_TMP421 is not set ++# CONFIG_SENSORS_TSL2550 is not set ++# CONFIG_SENSORS_TSL2563 is not set ++# CONFIG_SENSORS_VEXPRESS is not set ++# CONFIG_SENSORS_VIA686A is not set ++# CONFIG_SENSORS_VIA_CPUTEMP is not set ++# CONFIG_SENSORS_VT1211 is not set ++# CONFIG_SENSORS_VT8231 is not set ++# CONFIG_SENSORS_W83627EHF is not set ++# CONFIG_SENSORS_W83627HF is not set ++# CONFIG_SENSORS_W83781D is not set ++# CONFIG_SENSORS_W83791D is not set ++# CONFIG_SENSORS_W83792D is not set ++# CONFIG_SENSORS_W83793 is not set ++# CONFIG_SENSORS_W83795 is not set ++# CONFIG_SENSORS_W83L785TS is not set ++# CONFIG_SENSORS_W83L786NG is not set ++CONFIG_SERIAL_8250=y ++# CONFIG_SERIAL_8250_ACCENT is not set ++# CONFIG_SERIAL_8250_BOCA is not set ++CONFIG_SERIAL_8250_CONSOLE=y ++# CONFIG_SERIAL_8250_CS is not set ++# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set ++# CONFIG_SERIAL_8250_DETECT_IRQ is not set ++CONFIG_SERIAL_8250_DMA=y ++# CONFIG_SERIAL_8250_DW is not set ++# CONFIG_SERIAL_8250_EM is not set ++# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set ++# CONFIG_SERIAL_8250_EXTENDED is not set ++# CONFIG_SERIAL_8250_FINTEK is not set ++# CONFIG_SERIAL_8250_FOURPORT is not set ++# CONFIG_SERIAL_8250_HUB6 is not set ++# CONFIG_SERIAL_8250_INGENIC is not set ++# CONFIG_SERIAL_8250_MANY_PORTS is not set ++# CONFIG_SERIAL_8250_MID is not set ++CONFIG_SERIAL_8250_NR_UARTS=2 ++# CONFIG_SERIAL_8250_PCI is not set ++# CONFIG_SERIAL_8250_RSA is not set ++# CONFIG_SERIAL_8250_RT288X is not set ++CONFIG_SERIAL_8250_RUNTIME_UARTS=2 ++# CONFIG_SERIAL_8250_SYSRQ is not set ++# CONFIG_SERIAL_ALTERA_JTAGUART is not set ++# CONFIG_SERIAL_ALTERA_UART is not set ++# CONFIG_SERIAL_ARC is not set ++# CONFIG_SERIAL_BCM63XX is not set ++# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++CONFIG_SERIAL_EARLYCON=y ++# CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set ++# CONFIG_SERIAL_FSL_LPUART is not set ++# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set ++# CONFIG_SERIAL_IFX6X60 is not set ++# CONFIG_SERIAL_JSM is not set ++# CONFIG_SERIAL_MAX3100 is not set ++# CONFIG_SERIAL_MAX310X is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++# CONFIG_SERIAL_OF_PLATFORM is not set ++# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set ++# CONFIG_SERIAL_PCH_UART is not set ++# CONFIG_SERIAL_RP2 is not set ++# CONFIG_SERIAL_SC16IS7XX is not set ++# CONFIG_SERIAL_SCCNXP is not set ++# CONFIG_SERIAL_SH_SCI is not set ++# CONFIG_SERIAL_STM32 is not set ++# CONFIG_SERIAL_ST_ASC is not set ++# CONFIG_SERIAL_TIMBERDALE is not set ++# CONFIG_SERIAL_UARTLITE is not set ++# CONFIG_SERIAL_XILINX_PS_UART is not set ++# CONFIG_SERIO is not set ++# CONFIG_SERIO_ALTERA_PS2 is not set ++# CONFIG_SERIO_AMBAKMI is not set ++# CONFIG_SERIO_APBPS2 is not set ++# CONFIG_SERIO_ARC_PS2 is not set ++# CONFIG_SERIO_I8042 is not set ++# CONFIG_SERIO_LIBPS2 is not set ++# CONFIG_SERIO_PARKBD is not set ++# CONFIG_SERIO_PCIPS2 is not set ++# CONFIG_SERIO_PS2MULT is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_SUN4I_PS2 is not set ++# CONFIG_SFC is not set ++# CONFIG_SFI is not set ++# CONFIG_SGETMASK_SYSCALL is not set ++# CONFIG_SG_SPLIT is not set ++# CONFIG_SGI_IOC4 is not set ++# CONFIG_SGI_IP22 is not set ++# CONFIG_SGI_IP27 is not set ++# CONFIG_SGI_IP28 is not set ++# CONFIG_SGI_IP32 is not set ++# CONFIG_SGI_PARTITION is not set ++CONFIG_SHMEM=y ++# CONFIG_SH_ETH is not set ++# CONFIG_SH_TIMER_CMT is not set ++# CONFIG_SH_TIMER_MTU2 is not set ++# CONFIG_SH_TIMER_TMU is not set ++# CONFIG_SI7005 is not set ++# CONFIG_SI7020 is not set ++# CONFIG_SIBYTE_BIGSUR is not set ++# CONFIG_SIBYTE_CARMEL is not set ++# CONFIG_SIBYTE_CRHINE is not set ++# CONFIG_SIBYTE_CRHONE is not set ++# CONFIG_SIBYTE_LITTLESUR is not set ++# CONFIG_SIBYTE_RHONE is not set ++# CONFIG_SIBYTE_SENTOSA is not set ++# CONFIG_SIBYTE_SWARM is not set ++CONFIG_SIGNALFD=y ++# CONFIG_SIMPLE_GPIO is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SIS900 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SKY2 is not set ++# CONFIG_SKY2_DEBUG is not set ++# CONFIG_SLAB is not set ++CONFIG_SLABINFO=y ++# CONFIG_SLHC is not set ++# CONFIG_SLICOSS is not set ++# CONFIG_SLIP is not set ++# CONFIG_SLOB is not set ++CONFIG_SLUB=y ++CONFIG_SLUB_CPU_PARTIAL=y ++# CONFIG_SLUB_DEBUG is not set ++# CONFIG_SLUB_DEBUG_ON is not set ++# CONFIG_SLUB_STATS is not set ++# CONFIG_SMARTJOYPLUS_FF is not set ++# CONFIG_SMC911X is not set ++# CONFIG_SMC9194 is not set ++# CONFIG_SMC91X is not set ++# CONFIG_SMP is not set ++# CONFIG_SMSC911X is not set ++# CONFIG_SMSC9420 is not set ++# CONFIG_SMSC_PHY is not set ++# CONFIG_SM_FTL is not set ++# CONFIG_SND is not set ++# CONFIG_SND_AC97_POWER_SAVE is not set ++# CONFIG_SND_AD1816A is not set ++# CONFIG_SND_AD1848 is not set ++# CONFIG_SND_AD1889 is not set ++# CONFIG_SND_ADLIB is not set ++# CONFIG_SND_ALI5451 is not set ++# CONFIG_SND_ALOOP is not set ++# CONFIG_SND_ALS100 is not set ++# CONFIG_SND_ALS300 is not set ++# CONFIG_SND_ALS4000 is not set ++# CONFIG_SND_ARM is not set ++# CONFIG_SND_ASIHPI is not set ++# CONFIG_SND_ATIIXP is not set ++# CONFIG_SND_ATIIXP_MODEM is not set ++# CONFIG_SND_ATMEL_AC97C is not set ++# CONFIG_SND_ATMEL_SOC is not set ++# CONFIG_SND_AU8810 is not set ++# CONFIG_SND_AU8820 is not set ++# CONFIG_SND_AU8830 is not set ++# CONFIG_SND_AW2 is not set ++# CONFIG_SND_AZT2320 is not set ++# CONFIG_SND_AZT3328 is not set ++# CONFIG_SND_BCD2000 is not set ++# CONFIG_SND_BT87X is not set ++# CONFIG_SND_CA0106 is not set ++# CONFIG_SND_CMI8330 is not set ++# CONFIG_SND_CMIPCI is not set ++# CONFIG_SND_CS4231 is not set ++# CONFIG_SND_CS4236 is not set ++# CONFIG_SND_CS4281 is not set ++# CONFIG_SND_CS46XX is not set ++# CONFIG_SND_CS5530 is not set ++# CONFIG_SND_CS5535AUDIO is not set ++# CONFIG_SND_CTXFI is not set ++# CONFIG_SND_DARLA20 is not set ++# CONFIG_SND_DARLA24 is not set ++# CONFIG_SND_DEBUG is not set ++# CONFIG_SND_DESIGNWARE_I2S is not set ++CONFIG_SND_DRIVERS=y ++# CONFIG_SND_DUMMY is not set ++# CONFIG_SND_DYNAMIC_MINORS is not set ++# CONFIG_SND_ECHO3G is not set ++# CONFIG_SND_EMU10K1 is not set ++# CONFIG_SND_EMU10K1_SEQ is not set ++# CONFIG_SND_EMU10K1X is not set ++# CONFIG_SND_ENS1370 is not set ++# CONFIG_SND_ENS1371 is not set ++# CONFIG_SND_ES1688 is not set ++# CONFIG_SND_ES18XX is not set ++# CONFIG_SND_ES1938 is not set ++# CONFIG_SND_ES1968 is not set ++# CONFIG_SND_FIREWIRE is not set ++# CONFIG_SND_FM801 is not set ++# CONFIG_SND_GINA20 is not set ++# CONFIG_SND_GINA24 is not set ++# CONFIG_SND_GUSCLASSIC is not set ++# CONFIG_SND_GUSEXTREME is not set ++# CONFIG_SND_GUSMAX is not set ++# CONFIG_SND_HDA_INTEL is not set ++CONFIG_SND_HDA_PREALLOC_SIZE=64 ++# CONFIG_SND_HDSP is not set ++# CONFIG_SND_HDSPM is not set ++# CONFIG_SND_HRTIMER is not set ++# CONFIG_SND_HWDEP is not set ++# CONFIG_SND_ICE1712 is not set ++# CONFIG_SND_ICE1724 is not set ++# CONFIG_SND_INDIGO is not set ++# CONFIG_SND_INDIGODJ is not set ++# CONFIG_SND_INDIGODJX is not set ++# CONFIG_SND_INDIGOIO is not set ++# CONFIG_SND_INDIGOIOX is not set ++# CONFIG_SND_INTEL8X0 is not set ++# CONFIG_SND_INTEL8X0M is not set ++# CONFIG_SND_INTERWAVE is not set ++# CONFIG_SND_INTERWAVE_STB is not set ++# CONFIG_SND_ISA is not set ++# CONFIG_SND_KIRKWOOD_SOC is not set ++# CONFIG_SND_KORG1212 is not set ++# CONFIG_SND_LAYLA20 is not set ++# CONFIG_SND_LAYLA24 is not set ++# CONFIG_SND_LOLA is not set ++# CONFIG_SND_LX6464ES is not set ++# CONFIG_SND_MAESTRO3 is not set ++# CONFIG_SND_MIA is not set ++# CONFIG_SND_MIPS is not set ++# CONFIG_SND_MIRO is not set ++# CONFIG_SND_MIXART is not set ++# CONFIG_SND_MIXER_OSS is not set ++# CONFIG_SND_MONA is not set ++# CONFIG_SND_MPC52xx_SOC_EFIKA is not set ++# CONFIG_SND_MPU401 is not set ++# CONFIG_SND_MTPAV is not set ++# CONFIG_SND_MTS64 is not set ++# CONFIG_SND_MXS_SOC is not set ++# CONFIG_SND_NM256 is not set ++# CONFIG_SND_OPL3SA2 is not set ++# CONFIG_SND_OPL3_LIB_SEQ is not set ++# CONFIG_SND_OPL4_LIB_SEQ is not set ++# CONFIG_SND_OPTI92X_AD1848 is not set ++# CONFIG_SND_OPTI92X_CS4231 is not set ++# CONFIG_SND_OPTI93X is not set ++CONFIG_SND_OSSEMUL=y ++# CONFIG_SND_OXYGEN is not set ++CONFIG_SND_PCI=y ++# CONFIG_SND_PCM is not set ++# CONFIG_SND_PCMCIA is not set ++# CONFIG_SND_PCM_OSS is not set ++CONFIG_SND_PCM_OSS_PLUGINS=y ++# CONFIG_SND_PCM_TIMER is not set ++# CONFIG_SND_PCXHR is not set ++# CONFIG_SND_PDAUDIOCF is not set ++# CONFIG_SND_PORTMAN2X4 is not set ++# CONFIG_SND_POWERPC_SOC is not set ++# CONFIG_SND_PPC is not set ++# CONFIG_SND_PROC_FS is not set ++# CONFIG_SND_RAWMIDI is not set ++# CONFIG_SND_RAWMIDI_SEQ is not set ++# CONFIG_SND_RIPTIDE is not set ++# CONFIG_SND_RME32 is not set ++# CONFIG_SND_RME96 is not set ++# CONFIG_SND_RME9652 is not set ++# CONFIG_SND_RTCTIMER is not set ++# CONFIG_SND_SB16 is not set ++# CONFIG_SND_SB8 is not set ++# CONFIG_SND_SBAWE is not set ++# CONFIG_SND_SBAWE_SEQ is not set ++# CONFIG_SND_SE6X is not set ++# CONFIG_SND_SEQUENCER is not set ++# CONFIG_SND_SERIAL_U16550 is not set ++# CONFIG_SND_SIMPLE_CARD is not set ++# CONFIG_SND_SIS7019 is not set ++# CONFIG_SND_SOC is not set ++# CONFIG_SND_SOC_AC97_CODEC is not set ++# CONFIG_SND_SOC_ADAU1701 is not set ++# CONFIG_SND_SOC_AK4104 is not set ++# CONFIG_SND_SOC_AK4554 is not set ++# CONFIG_SND_SOC_AK4613 is not set ++# CONFIG_SND_SOC_AK4642 is not set ++# CONFIG_SND_SOC_AK5386 is not set ++# CONFIG_SND_SOC_ALC5623 is not set ++# CONFIG_SND_SOC_AU1XAUDIO is not set ++# CONFIG_SND_SOC_AU1XPSC is not set ++# CONFIG_SND_SOC_CS35L32 is not set ++# CONFIG_SND_SOC_CS4265 is not set ++# CONFIG_SND_SOC_CS4270 is not set ++# CONFIG_SND_SOC_CS4271 is not set ++# CONFIG_SND_SOC_CS4271_I2C is not set ++# CONFIG_SND_SOC_CS4271_SPI is not set ++# CONFIG_SND_SOC_CS42L51_I2C is not set ++# CONFIG_SND_SOC_CS42L52 is not set ++# CONFIG_SND_SOC_CS42L56 is not set ++# CONFIG_SND_SOC_CS42L73 is not set ++# CONFIG_SND_SOC_CS42XX8_I2C is not set ++# CONFIG_SND_SOC_CS4349 is not set ++# CONFIG_SND_SOC_ES8328 is not set ++# CONFIG_SND_SOC_EUKREA_TLV320 is not set ++# CONFIG_SND_SOC_FSL_ASOC_CARD is not set ++# CONFIG_SND_SOC_FSL_ASRC is not set ++# CONFIG_SND_SOC_FSL_ESAI is not set ++# CONFIG_SND_SOC_FSL_SAI is not set ++# CONFIG_SND_SOC_FSL_SPDIF is not set ++# CONFIG_SND_SOC_FSL_SSI is not set ++# CONFIG_SND_SOC_GTM601 is not set ++# CONFIG_SND_SOC_IMX_AUDMUX is not set ++# CONFIG_SND_SOC_IMX_ES8328 is not set ++# CONFIG_SND_SOC_IMX_SPDIF is not set ++# CONFIG_SND_SOC_IMX_WM8962 is not set ++# CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH is not set ++# CONFIG_SND_SOC_INTEL_SKL_RT286_MACH is not set ++# CONFIG_SND_SOC_INTEL_SST is not set ++# CONFIG_SND_SOC_MEDIATEK is not set ++# CONFIG_SND_SOC_MPC5200_AC97 is not set ++# CONFIG_SND_SOC_MPC5200_I2S is not set ++# CONFIG_SND_SOC_PCM1681 is not set ++# CONFIG_SND_SOC_PCM1792A is not set ++# CONFIG_SND_SOC_PCM512x_I2C is not set ++# CONFIG_SND_SOC_PCM512x_SPI is not set ++# CONFIG_SND_SOC_QCOM is not set ++# CONFIG_SND_SOC_RT5631 is not set ++# CONFIG_SND_SOC_RT5677_SPI is not set ++# CONFIG_SND_SOC_SGTL5000 is not set ++# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set ++# CONFIG_SND_SOC_SPDIF is not set ++# CONFIG_SND_SOC_SSM2602_I2C is not set ++# CONFIG_SND_SOC_SSM2602_SPI is not set ++# CONFIG_SND_SOC_SSM4567 is not set ++# CONFIG_SND_SOC_STA32X is not set ++# CONFIG_SND_SOC_STA350 is not set ++# CONFIG_SND_SOC_STI_SAS is not set ++# CONFIG_SND_SOC_TAS2552 is not set ++# CONFIG_SND_SOC_TAS5086 is not set ++# CONFIG_SND_SOC_TAS571X is not set ++# CONFIG_SND_SOC_TFA9879 is not set ++# CONFIG_SND_SOC_TLV320AIC23_I2C is not set ++# CONFIG_SND_SOC_TLV320AIC23_SPI is not set ++# CONFIG_SND_SOC_TLV320AIC31XX is not set ++# CONFIG_SND_SOC_TLV320AIC3X is not set ++# CONFIG_SND_SOC_TPA6130A2 is not set ++# CONFIG_SND_SOC_TS3A227E is not set ++# CONFIG_SND_SOC_WM8510 is not set ++# CONFIG_SND_SOC_WM8523 is not set ++# CONFIG_SND_SOC_WM8580 is not set ++# CONFIG_SND_SOC_WM8711 is not set ++# CONFIG_SND_SOC_WM8728 is not set ++# CONFIG_SND_SOC_WM8731 is not set ++# CONFIG_SND_SOC_WM8737 is not set ++# CONFIG_SND_SOC_WM8741 is not set ++# CONFIG_SND_SOC_WM8750 is not set ++# CONFIG_SND_SOC_WM8753 is not set ++# CONFIG_SND_SOC_WM8770 is not set ++# CONFIG_SND_SOC_WM8776 is not set ++# CONFIG_SND_SOC_WM8804_I2C is not set ++# CONFIG_SND_SOC_WM8804_SPI is not set ++# CONFIG_SND_SOC_WM8903 is not set ++# CONFIG_SND_SOC_WM8962 is not set ++# CONFIG_SND_SOC_WM8978 is not set ++# CONFIG_SND_SOC_XTFPGA_I2S is not set ++# CONFIG_SND_SONICVIBES is not set ++# CONFIG_SND_SPI is not set ++# CONFIG_SND_SSCAPE is not set ++# CONFIG_SND_SUN4I_CODEC is not set ++# CONFIG_SND_SUPPORT_OLD_API is not set ++# CONFIG_SND_TIMER is not set ++# CONFIG_SND_TRIDENT is not set ++CONFIG_SND_USB=y ++# CONFIG_SND_USB_6FIRE is not set ++# CONFIG_SND_USB_AUDIO is not set ++# CONFIG_SND_USB_CAIAQ is not set ++# CONFIG_SND_USB_HIFACE is not set ++# CONFIG_SND_USB_POD is not set ++# CONFIG_SND_USB_PODHD is not set ++# CONFIG_SND_USB_TONEPORT is not set ++# CONFIG_SND_USB_UA101 is not set ++# CONFIG_SND_USB_US122L is not set ++# CONFIG_SND_USB_USX2Y is not set ++# CONFIG_SND_USB_VARIAX is not set ++# CONFIG_SND_VERBOSE_PRINTK is not set ++CONFIG_SND_VERBOSE_PROCFS=y ++# CONFIG_SND_VIA82XX is not set ++# CONFIG_SND_VIA82XX_MODEM is not set ++# CONFIG_SND_VIRTUOSO is not set ++# CONFIG_SND_VX222 is not set ++# CONFIG_SND_VXPOCKET is not set ++# CONFIG_SND_WAVEFRONT is not set ++# CONFIG_SND_YMFPCI is not set ++# CONFIG_SNI_RM is not set ++# CONFIG_SOC_AM33XX is not set ++# CONFIG_SOC_AM43XX is not set ++# CONFIG_SOC_BRCMSTB is not set ++# CONFIG_SOC_CAMERA is not set ++# CONFIG_SOC_DRA7XX is not set ++# CONFIG_SOC_HAS_OMAP2_SDRC is not set ++# CONFIG_SOC_OMAP5 is not set ++# CONFIG_SOC_TI is not set ++# CONFIG_SOFT_WATCHDOG is not set ++# CONFIG_SOLARIS_X86_PARTITION is not set ++# CONFIG_SONYPI is not set ++# CONFIG_SONY_LAPTOP is not set ++# CONFIG_SOUND is not set ++# CONFIG_SOUND_OSS_CORE is not set ++# CONFIG_SOUND_PRIME is not set ++# CONFIG_SP5100_TCO is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_STATIC is not set ++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set ++# CONFIG_SPARSE_IRQ is not set ++# CONFIG_SPARSE_RCU_POINTER is not set ++# CONFIG_SPEAKUP is not set ++# CONFIG_SPI is not set ++# CONFIG_SPINLOCK_TEST is not set ++# CONFIG_SPI_ALTERA is not set ++# CONFIG_SPI_AU1550 is not set ++# CONFIG_SPI_BCM2835 is not set ++# CONFIG_SPI_BITBANG is not set ++# CONFIG_SPI_BUTTERFLY is not set ++# CONFIG_SPI_CADENCE is not set ++# CONFIG_SPI_DEBUG is not set ++# CONFIG_SPI_DESIGNWARE is not set ++# CONFIG_SPI_FSL_DSPI is not set ++# CONFIG_SPI_FSL_ESPI is not set ++# CONFIG_SPI_FSL_SPI is not set ++# CONFIG_SPI_GPIO is not set ++# CONFIG_SPI_GPIO_OLD is not set ++# CONFIG_SPI_IMG_SPFI is not set ++# CONFIG_SPI_LM70_LLP is not set ++# CONFIG_SPI_MASTER is not set ++# CONFIG_SPI_MPC52xx is not set ++# CONFIG_SPI_MPC52xx_PSC is not set ++# CONFIG_SPI_OCTEON is not set ++# CONFIG_SPI_OC_TINY is not set ++# CONFIG_SPI_ORION is not set ++# CONFIG_SPI_PL022 is not set ++# CONFIG_SPI_PPC4xx is not set ++# CONFIG_SPI_PXA2XX is not set ++# CONFIG_SPI_PXA2XX_PCI is not set ++# CONFIG_SPI_ROCKCHIP is not set ++# CONFIG_SPI_SC18IS602 is not set ++# CONFIG_SPI_SPIDEV is not set ++# CONFIG_SPI_TI_QSPI is not set ++# CONFIG_SPI_TLE62X0 is not set ++# CONFIG_SPI_TOPCLIFF_PCH is not set ++# CONFIG_SPI_XCOMM is not set ++# CONFIG_SPI_XILINX is not set ++# CONFIG_SPI_XWAY is not set ++# CONFIG_SPI_ZYNQMP_GQSPI is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++# CONFIG_SPMI is not set ++CONFIG_SQUASHFS=y ++# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set ++# CONFIG_SQUASHFS_DECOMP_MULTI is not set ++CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y ++# CONFIG_SQUASHFS_DECOMP_SINGLE is not set ++# CONFIG_SQUASHFS_EMBEDDED is not set ++# CONFIG_SQUASHFS_FILE_CACHE is not set ++CONFIG_SQUASHFS_FILE_DIRECT=y ++CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 ++# CONFIG_SQUASHFS_LZ4 is not set ++# CONFIG_SQUASHFS_LZO is not set ++# CONFIG_SQUASHFS_XATTR is not set ++CONFIG_SQUASHFS_XZ=y ++# CONFIG_SQUASHFS_ZLIB is not set ++# CONFIG_SRAM is not set ++# CONFIG_SSB is not set ++# CONFIG_SSB_DEBUG is not set ++# CONFIG_SSB_DRIVER_GPIO is not set ++# CONFIG_SSB_HOST_SOC is not set ++# CONFIG_SSB_PCMCIAHOST is not set ++CONFIG_SSB_POSSIBLE=y ++# CONFIG_SSB_SDIOHOST is not set ++# CONFIG_SSB_SILENT is not set ++# CONFIG_SSFDC is not set ++# CONFIG_STACKTRACE is not set ++CONFIG_STACKTRACE_SUPPORT=y ++# CONFIG_STACK_TRACER is not set ++CONFIG_STAGING=y ++# CONFIG_STAGING_BOARD is not set ++# CONFIG_STAGING_MEDIA is not set ++CONFIG_STANDALONE=y ++# CONFIG_STATIC_KEYS_SELFTEST is not set ++CONFIG_STDBINUTILS=y ++# CONFIG_STE10XP is not set ++# CONFIG_STE_MODEM_RPROC is not set ++# CONFIG_STK3310 is not set ++# CONFIG_STK8312 is not set ++# CONFIG_STK8BA50 is not set ++# CONFIG_STM is not set ++# CONFIG_STMMAC_ETH is not set ++# CONFIG_STMMAC_PCI is not set ++# CONFIG_STMMAC_PLATFORM is not set ++# CONFIG_STM_DUMMY is not set ++# CONFIG_STM_SOURCE_CONSOLE is not set ++CONFIG_STP=y ++# CONFIG_STRICT_DEVMEM is not set ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_SUNDANCE is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_SUNRPC is not set ++# CONFIG_SUNRPC_DEBUG is not set ++# CONFIG_SUNRPC_GSS is not set ++# CONFIG_SUNXI_SRAM is not set ++# CONFIG_SUN_PARTITION is not set ++# CONFIG_SUSPEND is not set ++# CONFIG_SUSPEND_SKIP_SYNC is not set ++CONFIG_SWAP=y ++# CONFIG_SWCONFIG is not set ++# CONFIG_SWCONFIG_LEDS is not set ++# CONFIG_SX9500 is not set ++# CONFIG_SXGBE_ETH is not set ++# CONFIG_SYNCLINK_CS is not set ++# CONFIG_SYNOPSYS_DWC_ETH_QOS is not set ++CONFIG_SYN_COOKIES=y ++CONFIG_SYSCTL=y ++# CONFIG_SYSCTL_SYSCALL is not set ++CONFIG_SYSFS=y ++# CONFIG_SYSFS_DEPRECATED is not set ++# CONFIG_SYSFS_DEPRECATED_V2 is not set ++# CONFIG_SYSFS_SYSCALL is not set ++# CONFIG_SYSTEMPORT is not set ++# CONFIG_SYSTEM_DATA_VERIFICATION is not set ++# CONFIG_SYSTEM_TRUSTED_KEYRING is not set ++# CONFIG_SYSV68_PARTITION is not set ++CONFIG_SYSVIPC=y ++CONFIG_SYSVIPC_SYSCTL=y ++# CONFIG_SYSV_FS is not set ++# CONFIG_SYS_HYPERVISOR is not set ++# CONFIG_T5403 is not set ++# CONFIG_TARGET_CORE is not set ++# CONFIG_TASKSTATS is not set ++# CONFIG_TASKS_RCU is not set ++# CONFIG_TC35815 is not set ++# CONFIG_TCG_TPM is not set ++# CONFIG_TCIC is not set ++CONFIG_TCP_CONG_ADVANCED=y ++# CONFIG_TCP_CONG_BIC is not set ++# CONFIG_TCP_CONG_CDG is not set ++CONFIG_TCP_CONG_CUBIC=y ++# CONFIG_TCP_CONG_DCTCP is not set ++# CONFIG_TCP_CONG_HSTCP is not set ++# CONFIG_TCP_CONG_HTCP is not set ++# CONFIG_TCP_CONG_HYBLA is not set ++# CONFIG_TCP_CONG_ILLINOIS is not set ++# CONFIG_TCP_CONG_LP is not set ++# CONFIG_TCP_CONG_SCALABLE is not set ++# CONFIG_TCP_CONG_VEGAS is not set ++# CONFIG_TCP_CONG_VENO is not set ++# CONFIG_TCP_CONG_WESTWOOD is not set ++# CONFIG_TCP_CONG_YEAH is not set ++# CONFIG_TCP_MD5SIG is not set ++# CONFIG_TCS3414 is not set ++# CONFIG_TCS3472 is not set ++# CONFIG_TEGRA_AHB is not set ++# CONFIG_TEGRA_HOST1X is not set ++# CONFIG_TEHUTI is not set ++# CONFIG_TERANETICS_PHY is not set ++# CONFIG_TEST_BPF is not set ++# CONFIG_TEST_FIRMWARE is not set ++# CONFIG_TEST_HEXDUMP is not set ++# CONFIG_TEST_KSTRTOX is not set ++# CONFIG_TEST_LIST_SORT is not set ++# CONFIG_TEST_LKM is not set ++# CONFIG_TEST_POWER is not set ++# CONFIG_TEST_PRINTF is not set ++# CONFIG_TEST_RHASHTABLE is not set ++# CONFIG_TEST_STATIC_KEYS is not set ++# CONFIG_TEST_STRING_HELPERS is not set ++# CONFIG_TEST_UDELAY is not set ++# CONFIG_TEST_USER_COPY is not set ++CONFIG_TEXTSEARCH=y ++# CONFIG_TEXTSEARCH_BM is not set ++# CONFIG_TEXTSEARCH_FSM is not set ++# CONFIG_TEXTSEARCH_KMP is not set ++# CONFIG_THERMAL is not set ++# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set ++# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set ++# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set ++# CONFIG_THERMAL_EMULATION is not set ++# CONFIG_THERMAL_GOV_BANG_BANG is not set ++# CONFIG_THERMAL_GOV_FAIR_SHARE is not set ++# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set ++# CONFIG_THERMAL_GOV_USER_SPACE is not set ++# CONFIG_THERMAL_HWMON is not set ++# CONFIG_THERMAL_WRITABLE_TRIPS is not set ++# CONFIG_THINKPAD_ACPI is not set ++# CONFIG_THRUSTMASTER_FF is not set ++# CONFIG_THUNDERBOLT is not set ++# CONFIG_TICK_CPU_ACCOUNTING is not set ++CONFIG_TICK_ONESHOT=y ++# CONFIG_TIFM_CORE is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_TIMB_DMA is not set ++CONFIG_TIMERFD=y ++# CONFIG_TIMER_STATS is not set ++CONFIG_TINY_RCU=y ++# CONFIG_TIPC is not set ++# CONFIG_TI_ADC081C is not set ++# CONFIG_TI_ADC128S052 is not set ++# CONFIG_TI_AM335X_ADC is not set ++# CONFIG_TI_CPSW is not set ++# CONFIG_TI_CPSW_ALE is not set ++# CONFIG_TI_CPTS is not set ++# CONFIG_TI_DAC7512 is not set ++# CONFIG_TI_DAVINCI_CPDMA is not set ++# CONFIG_TI_DAVINCI_MDIO is not set ++# CONFIG_TI_ST is not set ++# CONFIG_TLAN is not set ++# CONFIG_TMD_HERMES is not set ++# CONFIG_TMP006 is not set ++CONFIG_TMPFS=y ++# CONFIG_TMPFS_POSIX_ACL is not set ++CONFIG_TMPFS_XATTR=y ++# CONFIG_TOPSTAR_LAPTOP is not set ++# CONFIG_TORTURE_TEST is not set ++# CONFIG_TOSHIBA_HAPS is not set ++# CONFIG_TOUCHSCREEN_AD7877 is not set ++# CONFIG_TOUCHSCREEN_AD7879 is not set ++# CONFIG_TOUCHSCREEN_AD7879_I2C is not set ++# CONFIG_TOUCHSCREEN_AD7879_SPI is not set ++# CONFIG_TOUCHSCREEN_ADS7846 is not set ++# CONFIG_TOUCHSCREEN_AR1021_I2C is not set ++# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set ++# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set ++# CONFIG_TOUCHSCREEN_BU21013 is not set ++# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set ++# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set ++# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set ++# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set ++# CONFIG_TOUCHSCREEN_DYNAPRO is not set ++# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set ++# CONFIG_TOUCHSCREEN_EETI is not set ++# CONFIG_TOUCHSCREEN_EGALAX is not set ++# CONFIG_TOUCHSCREEN_ELAN is not set ++# CONFIG_TOUCHSCREEN_ELO is not set ++# CONFIG_TOUCHSCREEN_FT6236 is not set ++# CONFIG_TOUCHSCREEN_FUJITSU is not set ++# CONFIG_TOUCHSCREEN_GOODIX is not set ++# CONFIG_TOUCHSCREEN_GUNZE is not set ++# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set ++# CONFIG_TOUCHSCREEN_ILI210X is not set ++# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set ++# CONFIG_TOUCHSCREEN_INEXIO is not set ++# CONFIG_TOUCHSCREEN_MAX11801 is not set ++# CONFIG_TOUCHSCREEN_MCS5000 is not set ++# CONFIG_TOUCHSCREEN_MK712 is not set ++# CONFIG_TOUCHSCREEN_MMS114 is not set ++# CONFIG_TOUCHSCREEN_MTOUCH is not set ++# CONFIG_TOUCHSCREEN_PENMOUNT is not set ++# CONFIG_TOUCHSCREEN_PIXCIR is not set ++# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set ++# CONFIG_TOUCHSCREEN_S3C2410 is not set ++# CONFIG_TOUCHSCREEN_ST1232 is not set ++# CONFIG_TOUCHSCREEN_SUR40 is not set ++# CONFIG_TOUCHSCREEN_SX8654 is not set ++# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set ++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set ++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set ++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set ++# CONFIG_TOUCHSCREEN_TPS6507X is not set ++# CONFIG_TOUCHSCREEN_TSC2004 is not set ++# CONFIG_TOUCHSCREEN_TSC2005 is not set ++# CONFIG_TOUCHSCREEN_TSC2007 is not set ++# CONFIG_TOUCHSCREEN_TSC_SERIO is not set ++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set ++# CONFIG_TOUCHSCREEN_W90X900 is not set ++# CONFIG_TOUCHSCREEN_WACOM_I2C is not set ++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set ++# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set ++# CONFIG_TOUCHSCREEN_WM97XX is not set ++# CONFIG_TOUCHSCREEN_ZFORCE is not set ++# CONFIG_TPS6105X is not set ++# CONFIG_TPS65010 is not set ++# CONFIG_TPS6507X is not set ++# CONFIG_TRACEPOINT_BENCHMARK is not set ++# CONFIG_TRACER_SNAPSHOT is not set ++# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set ++# CONFIG_TRACE_BRANCH_PROFILING is not set ++# CONFIG_TRACE_ENUM_MAP_FILE is not set ++CONFIG_TRACE_IRQFLAGS_SUPPORT=y ++# CONFIG_TRACE_SINK is not set ++CONFIG_TRACING_SUPPORT=y ++CONFIG_TRAD_SIGNALS=y ++# CONFIG_TRANSPARENT_HUGEPAGE is not set ++# CONFIG_TREE_RCU is not set ++# CONFIG_TREE_RCU_TRACE is not set ++# CONFIG_TSL2583 is not set ++# CONFIG_TSL2x7x is not set ++# CONFIG_TSL4531 is not set ++# CONFIG_TSYS01 is not set ++# CONFIG_TSYS02D is not set ++# CONFIG_TTPCI_EEPROM is not set ++CONFIG_TTY=y ++# CONFIG_TTY_PRINTK is not set ++# CONFIG_TUN is not set ++# CONFIG_TUN_VNET_CROSS_LE is not set ++# CONFIG_TWL4030_CORE is not set ++# CONFIG_TWL6030_GPADC is not set ++# CONFIG_TWL6040_CORE is not set ++# CONFIG_TYPHOON is not set ++# CONFIG_UACCESS_WITH_MEMCPY is not set ++# CONFIG_UBIFS_ATIME_SUPPORT is not set ++# CONFIG_UCB1400_CORE is not set ++# CONFIG_UDF_FS is not set ++CONFIG_UDF_NLS=y ++CONFIG_UEVENT_HELPER=y ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++# CONFIG_UFS_FS is not set ++# CONFIG_UHID is not set ++CONFIG_UID16=y ++# CONFIG_UIO is not set ++# CONFIG_ULTRA is not set ++# CONFIG_ULTRIX_PARTITION is not set ++CONFIG_UNIX=y ++CONFIG_UNIX98_PTYS=y ++# CONFIG_UNIXWARE_DISKLABEL is not set ++# CONFIG_UNIX_DIAG is not set ++# CONFIG_UNUSED_SYMBOLS is not set ++# CONFIG_UPROBES is not set ++# CONFIG_UPROBE_EVENT is not set ++# CONFIG_US5182D is not set ++# CONFIG_USB is not set ++# CONFIG_USBIP_CORE is not set ++# CONFIG_USBPCWATCHDOG is not set ++# CONFIG_USB_ACM is not set ++# CONFIG_USB_ADUTUX is not set ++CONFIG_USB_ALI_M5632=y ++# CONFIG_USB_AMD5536UDC is not set ++CONFIG_USB_AN2720=y ++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set ++# CONFIG_USB_APPLEDISPLAY is not set ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARMLINUX=y ++# CONFIG_USB_ATM is not set ++# CONFIG_USB_BDC_UDC is not set ++CONFIG_USB_BELKIN=y ++# CONFIG_USB_C67X00_HCD is not set ++# CONFIG_USB_CATC is not set ++# CONFIG_USB_CDC_COMPOSITE is not set ++# CONFIG_USB_CHAOSKEY is not set ++# CONFIG_USB_CHIPIDEA is not set ++# CONFIG_USB_CONFIGFS is not set ++# CONFIG_USB_CXACRU is not set ++# CONFIG_USB_CYPRESS_CY7C63 is not set ++# CONFIG_USB_CYTHERM is not set ++CONFIG_USB_DEFAULT_PERSIST=y ++# CONFIG_USB_DSBR is not set ++# CONFIG_USB_DUMMY_HCD is not set ++# CONFIG_USB_DWC2 is not set ++# CONFIG_USB_DWC2_DEBUG is not set ++# CONFIG_USB_DWC2_DUAL_ROLE is not set ++# CONFIG_USB_DWC2_HOST is not set ++# CONFIG_USB_DWC2_PERIPHERAL is not set ++# CONFIG_USB_DWC3 is not set ++# CONFIG_USB_DWC3_EXYNOS is not set ++# CONFIG_USB_DWC3_KEYSTONE is not set ++# CONFIG_USB_DWC3_PCI is not set ++# CONFIG_USB_DWC3_QCOM is not set ++# CONFIG_USB_DYNAMIC_MINORS is not set ++# CONFIG_USB_EG20T is not set ++# CONFIG_USB_EHCI_HCD_AT91 is not set ++# CONFIG_USB_EHCI_HCD_PPC_OF is not set ++# CONFIG_USB_EHCI_MSM is not set ++# CONFIG_USB_EHCI_MV is not set ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++CONFIG_USB_EHCI_TT_NEWSCHED=y ++# CONFIG_USB_EHSET_TEST_FIXTURE is not set ++# CONFIG_USB_EMI26 is not set ++# CONFIG_USB_EMI62 is not set ++# CONFIG_USB_EPSON2888 is not set ++# CONFIG_USB_EZUSB_FX2 is not set ++# CONFIG_USB_FOTG210_HCD is not set ++# CONFIG_USB_FOTG210_UDC is not set ++# CONFIG_USB_FSL_USB2 is not set ++# CONFIG_USB_FTDI_ELAN is not set ++# CONFIG_USB_FUNCTIONFS is not set ++# CONFIG_USB_FUSB300 is not set ++# CONFIG_USB_GADGET is not set ++# CONFIG_USB_GADGETFS is not set ++# CONFIG_USB_GADGET_DEBUG is not set ++# CONFIG_USB_GADGET_DEBUG_FILES is not set ++# CONFIG_USB_GADGET_DEBUG_FS is not set ++CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 ++CONFIG_USB_GADGET_VBUS_DRAW=2 ++# CONFIG_USB_GADGET_XILINX is not set ++# CONFIG_USB_GL860 is not set ++# CONFIG_USB_GOKU is not set ++# CONFIG_USB_GPIO_VBUS is not set ++# CONFIG_USB_GR_UDC is not set ++# CONFIG_USB_GSPCA is not set ++# CONFIG_USB_GSPCA_BENQ is not set ++# CONFIG_USB_GSPCA_CONEX is not set ++# CONFIG_USB_GSPCA_CPIA1 is not set ++# CONFIG_USB_GSPCA_DTCS033 is not set ++# CONFIG_USB_GSPCA_ETOMS is not set ++# CONFIG_USB_GSPCA_FINEPIX is not set ++# CONFIG_USB_GSPCA_JEILINJ is not set ++# CONFIG_USB_GSPCA_JL2005BCD is not set ++# CONFIG_USB_GSPCA_KINECT is not set ++# CONFIG_USB_GSPCA_KONICA is not set ++# CONFIG_USB_GSPCA_MARS is not set ++# CONFIG_USB_GSPCA_MR97310A is not set ++# CONFIG_USB_GSPCA_NW80X is not set ++# CONFIG_USB_GSPCA_OV519 is not set ++# CONFIG_USB_GSPCA_OV534 is not set ++# CONFIG_USB_GSPCA_OV534_9 is not set ++# CONFIG_USB_GSPCA_PAC207 is not set ++# CONFIG_USB_GSPCA_PAC7302 is not set ++# CONFIG_USB_GSPCA_PAC7311 is not set ++# CONFIG_USB_GSPCA_SE401 is not set ++# CONFIG_USB_GSPCA_SN9C2028 is not set ++# CONFIG_USB_GSPCA_SN9C20X is not set ++# CONFIG_USB_GSPCA_SONIXB is not set ++# CONFIG_USB_GSPCA_SONIXJ is not set ++# CONFIG_USB_GSPCA_SPCA1528 is not set ++# CONFIG_USB_GSPCA_SPCA500 is not set ++# CONFIG_USB_GSPCA_SPCA501 is not set ++# CONFIG_USB_GSPCA_SPCA505 is not set ++# CONFIG_USB_GSPCA_SPCA506 is not set ++# CONFIG_USB_GSPCA_SPCA508 is not set ++# CONFIG_USB_GSPCA_SPCA561 is not set ++# CONFIG_USB_GSPCA_SQ905 is not set ++# CONFIG_USB_GSPCA_SQ905C is not set ++# CONFIG_USB_GSPCA_SQ930X is not set ++# CONFIG_USB_GSPCA_STK014 is not set ++# CONFIG_USB_GSPCA_STK1135 is not set ++# CONFIG_USB_GSPCA_STV0680 is not set ++# CONFIG_USB_GSPCA_SUNPLUS is not set ++# CONFIG_USB_GSPCA_T613 is not set ++# CONFIG_USB_GSPCA_TOPRO is not set ++# CONFIG_USB_GSPCA_TOUPTEK is not set ++# CONFIG_USB_GSPCA_TV8532 is not set ++# CONFIG_USB_GSPCA_VC032X is not set ++# CONFIG_USB_GSPCA_VICAM is not set ++# CONFIG_USB_GSPCA_XIRLINK_CIT is not set ++# CONFIG_USB_GSPCA_ZC3XX is not set ++# CONFIG_USB_G_ACM_MS is not set ++# CONFIG_USB_G_DBGP is not set ++# CONFIG_USB_G_HID is not set ++# CONFIG_USB_G_MULTI is not set ++# CONFIG_USB_G_NCM is not set ++# CONFIG_USB_G_NOKIA is not set ++# CONFIG_USB_G_PRINTER is not set ++# CONFIG_USB_G_SERIAL is not set ++# CONFIG_USB_G_WEBCAM is not set ++# CONFIG_USB_HCD_TEST_MODE is not set ++# CONFIG_USB_HID is not set ++# CONFIG_USB_HIDDEV is not set ++# CONFIG_USB_HSIC_USB3503 is not set ++# CONFIG_USB_HSO is not set ++# CONFIG_USB_HWA_HCD is not set ++# CONFIG_USB_IDMOUSE is not set ++# CONFIG_USB_IOWARRIOR is not set ++# CONFIG_USB_IPHETH is not set ++# CONFIG_USB_ISIGHTFW is not set ++# CONFIG_USB_ISP116X_HCD is not set ++# CONFIG_USB_ISP1301 is not set ++# CONFIG_USB_ISP1362_HCD is not set ++# CONFIG_USB_ISP1760 is not set ++# CONFIG_USB_ISP1760_HCD is not set ++# CONFIG_USB_KAWETH is not set ++# CONFIG_USB_KBD is not set ++# CONFIG_USB_KC2190 is not set ++# CONFIG_USB_LAN78XX is not set ++# CONFIG_USB_LCD is not set ++# CONFIG_USB_LD is not set ++# CONFIG_USB_LED is not set ++# CONFIG_USB_LED_TRIG is not set ++# CONFIG_USB_LEGOTOWER is not set ++# CONFIG_USB_LINK_LAYER_TEST is not set ++# CONFIG_USB_M5602 is not set ++# CONFIG_USB_M66592 is not set ++# CONFIG_USB_MASS_STORAGE is not set ++# CONFIG_USB_MAX3421_HCD is not set ++# CONFIG_USB_MDC800 is not set ++# CONFIG_USB_MICROTEK is not set ++# CONFIG_USB_MIDI_GADGET is not set ++# CONFIG_USB_MON is not set ++# CONFIG_USB_MOUSE is not set ++# CONFIG_USB_MSM_OTG is not set ++# CONFIG_USB_MUSB_HDRC is not set ++# CONFIG_USB_MV_U3D is not set ++# CONFIG_USB_MV_UDC is not set ++# CONFIG_USB_NET2272 is not set ++# CONFIG_USB_NET2280 is not set ++# CONFIG_USB_NET_AX88179_178A is not set ++# CONFIG_USB_NET_AX8817X is not set ++# CONFIG_USB_NET_CDCETHER is not set ++# CONFIG_USB_NET_CDC_EEM is not set ++# CONFIG_USB_NET_CDC_MBIM is not set ++# CONFIG_USB_NET_CDC_NCM is not set ++# CONFIG_USB_NET_CDC_SUBSET is not set ++# CONFIG_USB_NET_CH9200 is not set ++# CONFIG_USB_NET_CX82310_ETH is not set ++# CONFIG_USB_NET_DM9601 is not set ++# CONFIG_USB_NET_DRIVERS is not set ++# CONFIG_USB_NET_GL620A is not set ++# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set ++# CONFIG_USB_NET_INT51X1 is not set ++# CONFIG_USB_NET_KALMIA is not set ++# CONFIG_USB_NET_MCS7830 is not set ++# CONFIG_USB_NET_NET1080 is not set ++# CONFIG_USB_NET_PLUSB is not set ++# CONFIG_USB_NET_QMI_WWAN is not set ++# CONFIG_USB_NET_RNDIS_HOST is not set ++# CONFIG_USB_NET_RNDIS_WLAN is not set ++# CONFIG_USB_NET_SMSC75XX is not set ++# CONFIG_USB_NET_SMSC95XX is not set ++# CONFIG_USB_NET_SR9700 is not set ++# CONFIG_USB_NET_SR9800 is not set ++# CONFIG_USB_NET_ZAURUS is not set ++# CONFIG_USB_OHCI_HCD is not set ++# CONFIG_USB_OHCI_HCD_PCI is not set ++# CONFIG_USB_OHCI_HCD_PPC_OF is not set ++# CONFIG_USB_OHCI_HCD_PPC_OF_BE is not set ++# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set ++# CONFIG_USB_OHCI_HCD_SSB is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++# CONFIG_USB_OTG is not set ++# CONFIG_USB_OTG_BLACKLIST_HUB is not set ++# CONFIG_USB_OTG_FSM is not set ++# CONFIG_USB_OTG_WHITELIST is not set ++# CONFIG_USB_OXU210HP_HCD is not set ++# CONFIG_USB_PEGASUS is not set ++# CONFIG_USB_PHY is not set ++# CONFIG_USB_PRINTER is not set ++# CONFIG_USB_PWC_INPUT_EVDEV is not set ++# CONFIG_USB_PXA27X is not set ++# CONFIG_USB_R8A66597 is not set ++# CONFIG_USB_R8A66597_HCD is not set ++# CONFIG_USB_RCAR_PHY is not set ++# CONFIG_USB_RENESAS_USBHS is not set ++# CONFIG_USB_RIO500 is not set ++# CONFIG_USB_RTL8150 is not set ++# CONFIG_USB_RTL8152 is not set ++# CONFIG_USB_S2255 is not set ++# CONFIG_USB_SERIAL is not set ++# CONFIG_USB_SERIAL_AIRCABLE is not set ++# CONFIG_USB_SERIAL_ARK3116 is not set ++# CONFIG_USB_SERIAL_BELKIN is not set ++# CONFIG_USB_SERIAL_CH341 is not set ++# CONFIG_USB_SERIAL_CP210X is not set ++# CONFIG_USB_SERIAL_CYBERJACK is not set ++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set ++# CONFIG_USB_SERIAL_DEBUG is not set ++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set ++# CONFIG_USB_SERIAL_EDGEPORT is not set ++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set ++# CONFIG_USB_SERIAL_EMPEG is not set ++# CONFIG_USB_SERIAL_F81232 is not set ++# CONFIG_USB_SERIAL_FTDI_SIO is not set ++# CONFIG_USB_SERIAL_GARMIN is not set ++CONFIG_USB_SERIAL_GENERIC=y ++# CONFIG_USB_SERIAL_IPAQ is not set ++# CONFIG_USB_SERIAL_IPW is not set ++# CONFIG_USB_SERIAL_IR is not set ++# CONFIG_USB_SERIAL_IUU is not set ++# CONFIG_USB_SERIAL_KEYSPAN is not set ++CONFIG_USB_SERIAL_KEYSPAN_MPR=y ++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set ++CONFIG_USB_SERIAL_KEYSPAN_USA18X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y ++# CONFIG_USB_SERIAL_KLSI is not set ++# CONFIG_USB_SERIAL_KOBIL_SCT is not set ++# CONFIG_USB_SERIAL_MCT_U232 is not set ++# CONFIG_USB_SERIAL_METRO is not set ++# CONFIG_USB_SERIAL_MOS7715_PARPORT is not set ++# CONFIG_USB_SERIAL_MOS7720 is not set ++# CONFIG_USB_SERIAL_MOS7840 is not set ++# CONFIG_USB_SERIAL_MXUPORT is not set ++# CONFIG_USB_SERIAL_NAVMAN is not set ++# CONFIG_USB_SERIAL_OMNINET is not set ++# CONFIG_USB_SERIAL_OPTICON is not set ++# CONFIG_USB_SERIAL_OPTION is not set ++# CONFIG_USB_SERIAL_OTI6858 is not set ++# CONFIG_USB_SERIAL_PL2303 is not set ++# CONFIG_USB_SERIAL_QCAUX is not set ++# CONFIG_USB_SERIAL_QT2 is not set ++# CONFIG_USB_SERIAL_QUALCOMM is not set ++# CONFIG_USB_SERIAL_SAFE is not set ++CONFIG_USB_SERIAL_SAFE_PADDED=y ++# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set ++# CONFIG_USB_SERIAL_SIMPLE is not set ++# CONFIG_USB_SERIAL_SPCP8X5 is not set ++# CONFIG_USB_SERIAL_SSU100 is not set ++# CONFIG_USB_SERIAL_SYMBOL is not set ++# CONFIG_USB_SERIAL_TI is not set ++# CONFIG_USB_SERIAL_VISOR is not set ++# CONFIG_USB_SERIAL_WHITEHEAT is not set ++# CONFIG_USB_SERIAL_WISHBONE is not set ++# CONFIG_USB_SERIAL_XIRCOM is not set ++# CONFIG_USB_SERIAL_XSENS_MT is not set ++# CONFIG_USB_SEVSEG is not set ++# CONFIG_USB_SIERRA_NET is not set ++# CONFIG_USB_SISUSBVGA is not set ++# CONFIG_USB_SL811_HCD is not set ++# CONFIG_USB_SPEEDTOUCH is not set ++# CONFIG_USB_STKWEBCAM is not set ++# CONFIG_USB_STORAGE is not set ++# CONFIG_USB_STORAGE_ALAUDA is not set ++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set ++# CONFIG_USB_STORAGE_DATAFAB is not set ++# CONFIG_USB_STORAGE_DEBUG is not set ++# CONFIG_USB_STORAGE_ENE_UB6250 is not set ++# CONFIG_USB_STORAGE_FREECOM is not set ++# CONFIG_USB_STORAGE_ISD200 is not set ++# CONFIG_USB_STORAGE_JUMPSHOT is not set ++# CONFIG_USB_STORAGE_KARMA is not set ++# CONFIG_USB_STORAGE_ONETOUCH is not set ++# CONFIG_USB_STORAGE_REALTEK is not set ++# CONFIG_USB_STORAGE_SDDR09 is not set ++# CONFIG_USB_STORAGE_SDDR55 is not set ++# CONFIG_USB_STORAGE_USBAT is not set ++# CONFIG_USB_STV06XX is not set ++# CONFIG_USB_SUPPORT is not set ++# CONFIG_USB_SWITCH_FSA9480 is not set ++# CONFIG_USB_TEST is not set ++# CONFIG_USB_TMC is not set ++# CONFIG_USB_TRANCEVIBRATOR is not set ++# CONFIG_USB_UAS is not set ++# CONFIG_USB_UEAGLEATM is not set ++# CONFIG_USB_ULPI is not set ++# CONFIG_USB_ULPI_BUS is not set ++# CONFIG_USB_USBNET is not set ++# CONFIG_USB_USS720 is not set ++# CONFIG_USB_VIDEO_CLASS is not set ++CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y ++# CONFIG_USB_VL600 is not set ++# CONFIG_USB_WDM is not set ++# CONFIG_USB_WHCI_HCD is not set ++# CONFIG_USB_WUSB is not set ++# CONFIG_USB_WUSB_CBAF is not set ++# CONFIG_USB_XHCI_HCD is not set ++# CONFIG_USB_XUSBATM is not set ++# CONFIG_USB_YUREX is not set ++# CONFIG_USB_ZD1201 is not set ++# CONFIG_USB_ZERO is not set ++# CONFIG_USB_ZR364XX is not set ++# CONFIG_USELIB is not set ++# CONFIG_USERFAULTFD is not set ++# CONFIG_USE_OF is not set ++# CONFIG_UTS_NS is not set ++# CONFIG_UWB is not set ++# CONFIG_V4L_MEM2MEM_DRIVERS is not set ++# CONFIG_V4L_TEST_DRIVERS is not set ++# CONFIG_VCNL4000 is not set ++# CONFIG_VDSO is not set ++# CONFIG_VETH is not set ++# CONFIG_VEXPRESS_CONFIG is not set ++# CONFIG_VF610_ADC is not set ++# CONFIG_VFAT_FS is not set ++# CONFIG_VGASTATE is not set ++# CONFIG_VGA_ARB is not set ++# CONFIG_VGA_SWITCHEROO is not set ++# CONFIG_VIA_RHINE is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_VIDEO_ADV7170 is not set ++# CONFIG_VIDEO_ADV7175 is not set ++# CONFIG_VIDEO_ADV7180 is not set ++# CONFIG_VIDEO_ADV7183 is not set ++# CONFIG_VIDEO_ADV7343 is not set ++# CONFIG_VIDEO_ADV7393 is not set ++# CONFIG_VIDEO_ADV_DEBUG is not set ++# CONFIG_VIDEO_AK881X is not set ++# CONFIG_VIDEO_BT819 is not set ++# CONFIG_VIDEO_BT848 is not set ++# CONFIG_VIDEO_BT856 is not set ++# CONFIG_VIDEO_BT866 is not set ++# CONFIG_VIDEO_CAFE_CCIC is not set ++# CONFIG_VIDEO_CS5345 is not set ++# CONFIG_VIDEO_CS53L32A is not set ++# CONFIG_VIDEO_CX231XX is not set ++# CONFIG_VIDEO_CX2341X is not set ++# CONFIG_VIDEO_CX25840 is not set ++# CONFIG_VIDEO_CX88 is not set ++# CONFIG_VIDEO_DEV is not set ++# CONFIG_VIDEO_DM6446_CCDC is not set ++# CONFIG_VIDEO_DT3155 is not set ++# CONFIG_VIDEO_EM28XX is not set ++# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set ++# CONFIG_VIDEO_GO7007 is not set ++# CONFIG_VIDEO_HDPVR is not set ++# CONFIG_VIDEO_HEXIUM_GEMINI is not set ++# CONFIG_VIDEO_HEXIUM_ORION is not set ++# CONFIG_VIDEO_IR_I2C is not set ++# CONFIG_VIDEO_IVTV is not set ++# CONFIG_VIDEO_KS0127 is not set ++# CONFIG_VIDEO_M52790 is not set ++# CONFIG_VIDEO_ML86V7667 is not set ++# CONFIG_VIDEO_MSP3400 is not set ++# CONFIG_VIDEO_MT9V011 is not set ++# CONFIG_VIDEO_MXB is not set ++# CONFIG_VIDEO_NOON010PC30 is not set ++# CONFIG_VIDEO_OMAP2_VOUT is not set ++# CONFIG_VIDEO_OV2659 is not set ++# CONFIG_VIDEO_OV7640 is not set ++# CONFIG_VIDEO_OV7670 is not set ++# CONFIG_VIDEO_PVRUSB2 is not set ++# CONFIG_VIDEO_SAA6588 is not set ++# CONFIG_VIDEO_SAA6752HS is not set ++# CONFIG_VIDEO_SAA7110 is not set ++# CONFIG_VIDEO_SAA711X is not set ++# CONFIG_VIDEO_SAA7127 is not set ++# CONFIG_VIDEO_SAA7134 is not set ++# CONFIG_VIDEO_SAA717X is not set ++# CONFIG_VIDEO_SAA7185 is not set ++# CONFIG_VIDEO_SH_MOBILE_CEU is not set ++# CONFIG_VIDEO_SONY_BTF_MPX is not set ++# CONFIG_VIDEO_SR030PC30 is not set ++# CONFIG_VIDEO_TDA7432 is not set ++# CONFIG_VIDEO_TDA9840 is not set ++# CONFIG_VIDEO_TEA6415C is not set ++# CONFIG_VIDEO_TEA6420 is not set ++# CONFIG_VIDEO_THS7303 is not set ++# CONFIG_VIDEO_THS8200 is not set ++# CONFIG_VIDEO_TIMBERDALE is not set ++# CONFIG_VIDEO_TLV320AIC23B is not set ++# CONFIG_VIDEO_TM6000 is not set ++# CONFIG_VIDEO_TVAUDIO is not set ++# CONFIG_VIDEO_TVP514X is not set ++# CONFIG_VIDEO_TVP5150 is not set ++# CONFIG_VIDEO_TVP7002 is not set ++# CONFIG_VIDEO_TW2804 is not set ++# CONFIG_VIDEO_TW9903 is not set ++# CONFIG_VIDEO_TW9906 is not set ++# CONFIG_VIDEO_UDA1342 is not set ++# CONFIG_VIDEO_UPD64031A is not set ++# CONFIG_VIDEO_UPD64083 is not set ++# CONFIG_VIDEO_USBTV is not set ++# CONFIG_VIDEO_USBVISION is not set ++# CONFIG_VIDEO_V4L2 is not set ++# CONFIG_VIDEO_VP27SMPX is not set ++# CONFIG_VIDEO_VPX3220 is not set ++# CONFIG_VIDEO_VS6624 is not set ++# CONFIG_VIDEO_WM8739 is not set ++# CONFIG_VIDEO_WM8775 is not set ++# CONFIG_VIDEO_ZORAN is not set ++# CONFIG_VIRTIO_BALLOON is not set ++# CONFIG_VIRTIO_INPUT is not set ++# CONFIG_VIRTIO_MMIO is not set ++# CONFIG_VIRTIO_PCI is not set ++# CONFIG_VIRTUALIZATION is not set ++# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set ++# CONFIG_VIRT_DRIVERS is not set ++CONFIG_VIRT_TO_BUS=y ++# CONFIG_VITESSE_PHY is not set ++CONFIG_VLAN_8021Q=y ++# CONFIG_VLAN_8021Q_GVRP is not set ++# CONFIG_VLAN_8021Q_MVRP is not set ++# CONFIG_VME_BUS is not set ++# CONFIG_VMSPLIT_1G is not set ++# CONFIG_VMSPLIT_2G is not set ++# CONFIG_VMSPLIT_2G_OPT is not set ++CONFIG_VMSPLIT_3G=y ++# CONFIG_VMSPLIT_3G_OPT is not set ++# CONFIG_VMWARE_PVSCSI is not set ++# CONFIG_VMXNET3 is not set ++# CONFIG_VM_EVENT_COUNTERS is not set ++# CONFIG_VORTEX is not set ++# CONFIG_VSOCKETS is not set ++# CONFIG_VT is not set ++# CONFIG_VT6655 is not set ++# CONFIG_VT6656 is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_VXGE is not set ++# CONFIG_VXLAN is not set ++# CONFIG_VZ89X is not set ++# CONFIG_W1 is not set ++# CONFIG_W1_CON is not set ++# CONFIG_W1_MASTER_DS1WM is not set ++# CONFIG_W1_MASTER_DS2482 is not set ++# CONFIG_W1_MASTER_DS2490 is not set ++# CONFIG_W1_MASTER_GPIO is not set ++# CONFIG_W1_MASTER_MATROX is not set ++# CONFIG_W1_SLAVE_BQ27000 is not set ++# CONFIG_W1_SLAVE_DS2406 is not set ++# CONFIG_W1_SLAVE_DS2408 is not set ++# CONFIG_W1_SLAVE_DS2413 is not set ++# CONFIG_W1_SLAVE_DS2423 is not set ++# CONFIG_W1_SLAVE_DS2431 is not set ++# CONFIG_W1_SLAVE_DS2433 is not set ++# CONFIG_W1_SLAVE_DS2760 is not set ++# CONFIG_W1_SLAVE_DS2780 is not set ++# CONFIG_W1_SLAVE_DS2781 is not set ++# CONFIG_W1_SLAVE_DS28E04 is not set ++# CONFIG_W1_SLAVE_SMEM is not set ++# CONFIG_W1_SLAVE_THERM is not set ++# CONFIG_W83627HF_WDT is not set ++# CONFIG_W83877F_WDT is not set ++# CONFIG_W83977F_WDT is not set ++# CONFIG_WAN is not set ++# CONFIG_WANXL is not set ++CONFIG_WATCHDOG=y ++# CONFIG_WATCHDOG_CORE is not set ++# CONFIG_WATCHDOG_NOWAYOUT is not set ++# CONFIG_WD80x3 is not set ++# CONFIG_WDTPCI is not set ++CONFIG_WEXT_CORE=y ++CONFIG_WEXT_PRIV=y ++CONFIG_WEXT_PROC=y ++CONFIG_WEXT_SPY=y ++CONFIG_WILINK_PLATFORM_DATA=y ++# CONFIG_WIMAX is not set ++# CONFIG_WIMAX_GDM72XX is not set ++CONFIG_WIRELESS=y ++CONFIG_WIRELESS_EXT=y ++# CONFIG_WIZNET_W5100 is not set ++# CONFIG_WIZNET_W5300 is not set ++# CONFIG_WL1251 is not set ++# CONFIG_WL12XX is not set ++# CONFIG_WL18XX is not set ++CONFIG_WLAN=y ++# CONFIG_WLCORE is not set ++# CONFIG_WL_MEDIATEK is not set ++CONFIG_WL_TI=y ++CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y ++# CONFIG_X25 is not set ++# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set ++# CONFIG_X86_PKG_TEMP_THERMAL is not set ++CONFIG_X86_SYSFB=y ++# CONFIG_XEN is not set ++CONFIG_XFRM=y ++# CONFIG_XFRM_IPCOMP is not set ++# CONFIG_XFRM_MIGRATE is not set ++# CONFIG_XFRM_STATISTICS is not set ++# CONFIG_XFRM_SUB_POLICY is not set ++# CONFIG_XFRM_USER is not set ++# CONFIG_XFS_DEBUG is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_XFS_POSIX_ACL is not set ++# CONFIG_XFS_QUOTA is not set ++# CONFIG_XFS_RT is not set ++# CONFIG_XFS_WARN is not set ++# CONFIG_XILINX_AXI_EMAC is not set ++# CONFIG_XILINX_EMACLITE is not set ++# CONFIG_XILINX_LL_TEMAC is not set ++# CONFIG_XILINX_WATCHDOG is not set ++# CONFIG_XILLYBUS is not set ++# CONFIG_XIP_KERNEL is not set ++# CONFIG_XMON is not set ++CONFIG_XZ_DEC=y ++# CONFIG_XZ_DEC_ARM is not set ++# CONFIG_XZ_DEC_ARMTHUMB is not set ++# CONFIG_XZ_DEC_BCJ is not set ++# CONFIG_XZ_DEC_IA64 is not set ++# CONFIG_XZ_DEC_POWERPC is not set ++# CONFIG_XZ_DEC_SPARC is not set ++# CONFIG_XZ_DEC_TEST is not set ++# CONFIG_XZ_DEC_X86 is not set ++# CONFIG_YAFFS_DISABLE_BAD_BLOCK_MARKING is not set ++# CONFIG_YAFFS_FS is not set ++# CONFIG_YAM is not set ++# CONFIG_YELLOWFIN is not set ++# CONFIG_YENTA is not set ++# CONFIG_YENTA_O2 is not set ++# CONFIG_YENTA_RICOH is not set ++# CONFIG_YENTA_TI is not set ++# CONFIG_YENTA_TOSHIBA is not set ++# CONFIG_ZBUD is not set ++# CONFIG_ZD1211RW is not set ++# CONFIG_ZD1211RW_DEBUG is not set ++# CONFIG_ZEROPLUS_FF is not set ++# CONFIG_ZISOFS is not set ++# CONFIG_ZLIB_DEFLATE is not set ++# CONFIG_ZLIB_INFLATE is not set ++CONFIG_ZONE_DMA=y ++CONFIG_ZONE_DMA_FLAG=1 ++# CONFIG_ZPOOL is not set ++# CONFIG_ZRAM is not set ++# CONFIG_ZSMALLOC is not set +diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in +index 1aadae6839..3aeb6a4853 100644 +--- a/toolchain/gcc/Config.in ++++ b/toolchain/gcc/Config.in +@@ -3,6 +3,7 @@ + choice + prompt "GCC compiler Version" if TOOLCHAINOPTS + default GCC_USE_VERSION_8 ++ default GCC_USE_VERSION_5 if TARGET_ipq807x + help + Select the version of gcc you wish to use. + +@@ -13,6 +14,7 @@ choice + config GCC_USE_VERSION_7 + bool "gcc 7.x" + depends on !arc ++ depends on !TARGET_ipq807x + + config GCC_USE_VERSION_8 + bool "gcc 8.x" +diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version +index 09deae3bf1..fdfcf1a897 100644 +--- a/toolchain/gcc/Config.version ++++ b/toolchain/gcc/Config.version +@@ -1,5 +1,6 @@ + config GCC_VERSION_5 + default y if GCC_USE_VERSION_5 ++ default y if TARGET_ipq807x + bool + + config GCC_VERSION_7 +diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile +index eea0ffbde0..c33f26d46d 100644 +--- a/toolchain/kernel-headers/Makefile ++++ b/toolchain/kernel-headers/Makefile +@@ -32,7 +32,7 @@ else + PKG_SOURCE:=$(LINUX_SOURCE) + PKG_SOURCE_URL:=$(LINUX_SITE) + endif +-HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) ++HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)$(KERNEL_NAME_SUFFIX) + PKG_HASH:=$(LINUX_KERNEL_HASH) + LINUX_DIR := $(HOST_BUILD_DIR) + FILES_DIR := +-- +2.25.1 + diff --git a/patches-20.x/0018-ipq807x-drop-upstream-support.patch b/patches-20.x/0018-ipq807x-drop-upstream-support.patch new file mode 100644 index 000000000..5e0eb4da9 --- /dev/null +++ b/patches-20.x/0018-ipq807x-drop-upstream-support.patch @@ -0,0 +1,761 @@ +From 2426e5036fb6699f6b30e75dcf47e00524755777 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Thu, 15 Oct 2020 16:00:25 +0200 +Subject: [PATCH 18/25] ipq807x: drop upstream support + +Signed-off-by: John Crispin +--- + target/linux/ipq807x/Makefile | 14 - + target/linux/ipq807x/config-default | 655 ----------------------- + target/linux/ipq807x/image/Makefile | 40 -- + target/linux/ipq807x/profiles/default.mk | 8 - + 4 files changed, 717 deletions(-) + delete mode 100644 target/linux/ipq807x/Makefile + delete mode 100644 target/linux/ipq807x/config-default + delete mode 100644 target/linux/ipq807x/image/Makefile + delete mode 100644 target/linux/ipq807x/profiles/default.mk + +diff --git a/target/linux/ipq807x/Makefile b/target/linux/ipq807x/Makefile +deleted file mode 100644 +index dab05ca204..0000000000 +--- a/target/linux/ipq807x/Makefile ++++ /dev/null +@@ -1,14 +0,0 @@ +-include $(TOPDIR)/rules.mk +- +-ARCH:=aarch64 +-BOARD:=ipq807x +-BOARDNAME:=Qualcomm Atheros IPQ807x +-FEATURES:=squashfs ramdisk source-only +-KERNELNAME:=Image dtbs +-CPU_TYPE:=cortex-a53 +- +-KERNEL_PATCHVER:=5.4 +- +-include $(INCLUDE_DIR)/target.mk +- +-$(eval $(call BuildTarget)) +diff --git a/target/linux/ipq807x/config-default b/target/linux/ipq807x/config-default +deleted file mode 100644 +index 1f60ccfecb..0000000000 +--- a/target/linux/ipq807x/config-default ++++ /dev/null +@@ -1,655 +0,0 @@ +-CONFIG_64BIT=y +-# CONFIG_ACPI is not set +-# CONFIG_ALLOW_DEV_COREDUMP is not set +-# CONFIG_APQ_GCC_8084 is not set +-# CONFIG_APQ_MMCC_8084 is not set +-CONFIG_AQUANTIA_PHY=y +-CONFIG_ARCH_CLOCKSOURCE_DATA=y +-CONFIG_ARCH_DMA_ADDR_T_64BIT=y +-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +-CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +-CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +-CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +-CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +-CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +-CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +-CONFIG_ARCH_HAS_KCOV=y +-CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +-CONFIG_ARCH_HAS_PTE_SPECIAL=y +-CONFIG_ARCH_HAS_SET_MEMORY=y +-CONFIG_ARCH_HAS_SG_CHAIN=y +-CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +-CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +-CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +-CONFIG_ARCH_HAS_TICK_BROADCAST=y +-CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +-CONFIG_ARCH_HIBERNATION_POSSIBLE=y +-CONFIG_ARCH_MMAP_RND_BITS=18 +-CONFIG_ARCH_MMAP_RND_BITS_MAX=24 +-CONFIG_ARCH_MMAP_RND_BITS_MIN=18 +-CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +-CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +-CONFIG_ARCH_PROC_KCORE_TEXT=y +-CONFIG_ARCH_QCOM=y +-CONFIG_ARCH_SELECT_MEMORY_MODEL=y +-CONFIG_ARCH_SPARSEMEM_DEFAULT=y +-CONFIG_ARCH_SPARSEMEM_ENABLE=y +-CONFIG_ARCH_SUPPORTS_ACPI=y +-CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +-CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +-CONFIG_ARCH_SUPPORTS_INT128=y +-CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +-CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +-CONFIG_ARCH_SUPPORTS_UPROBES=y +-CONFIG_ARCH_SUSPEND_POSSIBLE=y +-CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +-CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +-CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +-CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +-CONFIG_ARCH_WANT_FRAME_POINTERS=y +-CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +-CONFIG_ARM64=y +-# CONFIG_ARM64_16K_PAGES is not set +-CONFIG_ARM64_4K_PAGES=y +-# CONFIG_ARM64_64K_PAGES is not set +-CONFIG_ARM64_CONT_SHIFT=4 +-# CONFIG_ARM64_CRYPTO is not set +-CONFIG_ARM64_ERRATUM_819472=y +-CONFIG_ARM64_ERRATUM_824069=y +-CONFIG_ARM64_ERRATUM_826319=y +-CONFIG_ARM64_ERRATUM_827319=y +-CONFIG_ARM64_ERRATUM_832075=y +-CONFIG_ARM64_ERRATUM_843419=y +-CONFIG_ARM64_ERRATUM_845719=y +-CONFIG_ARM64_HW_AFDBM=y +-# CONFIG_ARM64_LSE_ATOMICS is not set +-CONFIG_ARM64_MODULE_PLTS=y +-CONFIG_ARM64_PAGE_SHIFT=12 +-CONFIG_ARM64_PAN=y +-CONFIG_ARM64_PA_BITS=48 +-CONFIG_ARM64_PA_BITS_48=y +-# CONFIG_ARM64_PMEM is not set +-# CONFIG_ARM64_PTDUMP_DEBUGFS is not set +-# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set +-CONFIG_ARM64_SSBD=y +-CONFIG_ARM64_SVE=y +-CONFIG_ARM64_UAO=y +-CONFIG_ARM64_VA_BITS=39 +-CONFIG_ARM64_VA_BITS_39=y +-# CONFIG_ARM64_VA_BITS_48 is not set +-CONFIG_ARM64_VHE=y +-# CONFIG_ARMV8_DEPRECATED is not set +-CONFIG_ARM_AMBA=y +-CONFIG_ARM_ARCH_TIMER=y +-CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +-CONFIG_ARM_CCI=y +-CONFIG_ARM_CCI400_COMMON=y +-CONFIG_ARM_CCI400_PMU=y +-CONFIG_ARM_CCI_PMU=y +-CONFIG_ARM_CPUIDLE=y +-CONFIG_ARM_GIC=y +-CONFIG_ARM_GIC_V2M=y +-CONFIG_ARM_GIC_V3=y +-CONFIG_ARM_GIC_V3_ITS=y +-CONFIG_ARM_GIC_V3_ITS_PCI=y +-CONFIG_ARM_PMU=y +-CONFIG_ARM_PSCI_FW=y +-# CONFIG_ARM_QCOM_CPUFREQ_KRYO is not set +-# CONFIG_ARM_SCMI_PROTOCOL is not set +-# CONFIG_ARM_SP805_WATCHDOG is not set +-CONFIG_ASN1=y +-CONFIG_ASSOCIATIVE_ARRAY=y +-CONFIG_ASYMMETRIC_KEY_TYPE=y +-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +-CONFIG_AT803X_PHY=y +-CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y +-CONFIG_BLK_DEV_NVME=y +-CONFIG_BLK_DEV_RAM=y +-CONFIG_BLK_DEV_RAM_COUNT=16 +-CONFIG_BLK_DEV_RAM_SIZE=4096 +-CONFIG_BLK_MQ_PCI=y +-CONFIG_BLK_MQ_VIRTIO=y +-CONFIG_BLOCK_COMPAT=y +-CONFIG_BUILD_BIN2C=y +-# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set +-CONFIG_CC_OPTIMIZE_FOR_SIZE=y +-CONFIG_CLEANCACHE=y +-CONFIG_CLKDEV_LOOKUP=y +-CONFIG_CLONE_BACKWARDS=y +-CONFIG_CLZ_TAB=y +-CONFIG_COMMON_CLK=y +-CONFIG_COMMON_CLK_QCOM=y +-CONFIG_COMMON_CLK_XGENE=y +-CONFIG_COMPAT=y +-CONFIG_COMPAT_32BIT_TIME=y +-CONFIG_COMPAT_BINFMT_ELF=y +-CONFIG_COMPAT_NETLINK_MESSAGES=y +-CONFIG_COMPAT_OLD_SIGACTION=y +-CONFIG_CONFIGFS_FS=y +-CONFIG_COREDUMP=y +-CONFIG_CORESIGHT=y +-# CONFIG_CORESIGHT_CATU is not set +-# CONFIG_CORESIGHT_CPU_DEBUG is not set +-# CONFIG_CORESIGHT_DYNAMIC_REPLICATOR is not set +-CONFIG_CORESIGHT_LINKS_AND_SINKS=y +-CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y +-# CONFIG_CORESIGHT_SINK_ETBV10 is not set +-CONFIG_CORESIGHT_SINK_TPIU=y +-CONFIG_CORESIGHT_SOURCE_ETM4X=y +-CONFIG_CORESIGHT_STM=y +-CONFIG_CPUFREQ_DT=y +-CONFIG_CPUFREQ_DT_PLATDEV=y +-# CONFIG_CPU_BIG_ENDIAN is not set +-CONFIG_CPU_FREQ=y +-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +-CONFIG_CPU_FREQ_GOV_ATTR_SET=y +-CONFIG_CPU_FREQ_GOV_COMMON=y +-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +-CONFIG_CPU_FREQ_GOV_ONDEMAND=y +-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +-CONFIG_CPU_FREQ_GOV_POWERSAVE=y +-CONFIG_CPU_FREQ_GOV_USERSPACE=y +-CONFIG_CPU_FREQ_STAT=y +-# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +-CONFIG_CPU_IDLE=y +-CONFIG_CPU_IDLE_GOV_LADDER=y +-CONFIG_CPU_IDLE_GOV_MENU=y +-CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +-CONFIG_CPU_PM=y +-CONFIG_CPU_RMAP=y +-# CONFIG_CPU_THERMAL is not set +-CONFIG_CRC16=y +-# CONFIG_CRC32_SARWATE is not set +-CONFIG_CRC32_SLICEBY8=y +-CONFIG_CROSS_MEMORY_ATTACH=y +-CONFIG_CRYPTO_ACOMP2=y +-CONFIG_CRYPTO_AEAD=y +-CONFIG_CRYPTO_AEAD2=y +-CONFIG_CRYPTO_AKCIPHER=y +-CONFIG_CRYPTO_AKCIPHER2=y +-CONFIG_CRYPTO_ARC4=y +-CONFIG_CRYPTO_CCM=y +-CONFIG_CRYPTO_CMAC=y +-CONFIG_CRYPTO_CRC32C=y +-CONFIG_CRYPTO_CTR=y +-CONFIG_CRYPTO_DEFLATE=y +-# CONFIG_CRYPTO_DEV_QCOM_RNG is not set +-CONFIG_CRYPTO_DRBG=y +-CONFIG_CRYPTO_DRBG_HMAC=y +-CONFIG_CRYPTO_DRBG_MENU=y +-CONFIG_CRYPTO_ECHAINIV=y +-CONFIG_CRYPTO_GCM=y +-CONFIG_CRYPTO_GF128MUL=y +-CONFIG_CRYPTO_GHASH=y +-CONFIG_CRYPTO_HASH=y +-CONFIG_CRYPTO_HASH2=y +-CONFIG_CRYPTO_HASH_INFO=y +-CONFIG_CRYPTO_HMAC=y +-CONFIG_CRYPTO_HW=y +-CONFIG_CRYPTO_JITTERENTROPY=y +-CONFIG_CRYPTO_KPP2=y +-CONFIG_CRYPTO_LZO=y +-CONFIG_CRYPTO_MANAGER=y +-CONFIG_CRYPTO_MANAGER2=y +-# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +-CONFIG_CRYPTO_NULL=y +-CONFIG_CRYPTO_NULL2=y +-CONFIG_CRYPTO_RNG=y +-CONFIG_CRYPTO_RNG2=y +-CONFIG_CRYPTO_RNG_DEFAULT=y +-CONFIG_CRYPTO_SEQIV=y +-CONFIG_CRYPTO_SHA256=y +-CONFIG_CRYPTO_SHA512=y +-CONFIG_CRYPTO_WORKQUEUE=y +-CONFIG_DCACHE_WORD_ACCESS=y +-CONFIG_DEBUG_BUGVERBOSE=y +-CONFIG_DEBUG_GPIO=y +-CONFIG_DECOMPRESS_GZIP=y +-CONFIG_DEVMEM=y +-CONFIG_DMADEVICES=y +-CONFIG_DMA_DIRECT_OPS=y +-CONFIG_DMA_ENGINE=y +-CONFIG_DMA_OF=y +-CONFIG_DMA_VIRTUAL_CHANNELS=y +-CONFIG_DMI=y +-CONFIG_DMIID=y +-# CONFIG_DMI_SYSFS is not set +-CONFIG_DTC=y +-CONFIG_DT_IDLE_STATES=y +-CONFIG_DYNAMIC_DEBUG=y +-CONFIG_EDAC_SUPPORT=y +-CONFIG_EFI=y +-CONFIG_EFIVAR_FS=m +-CONFIG_EFI_ARMSTUB=y +-CONFIG_EFI_ARMSTUB_DTB_LOADER=y +-# CONFIG_EFI_CAPSULE_LOADER is not set +-CONFIG_EFI_ESRT=y +-CONFIG_EFI_PARAMS_FROM_FDT=y +-CONFIG_EFI_RUNTIME_WRAPPERS=y +-CONFIG_EFI_STUB=y +-# CONFIG_EFI_TEST is not set +-# CONFIG_EFI_VARS is not set +-CONFIG_EXT4_FS=y +-# CONFIG_EXT4_USE_FOR_EXT2 is not set +-CONFIG_FB=y +-CONFIG_FB_CMDLINE=y +-# CONFIG_FB_EFI is not set +-CONFIG_FIXED_PHY=y +-CONFIG_FIX_EARLYCON_MEM=y +-# CONFIG_FLATMEM_MANUAL is not set +-CONFIG_FRAME_POINTER=y +-CONFIG_FRAME_WARN=2048 +-CONFIG_FREEZER=y +-CONFIG_FS_IOMAP=y +-CONFIG_FS_MBCACHE=y +-CONFIG_GENERIC_ALLOCATOR=y +-CONFIG_GENERIC_ARCH_TOPOLOGY=y +-CONFIG_GENERIC_BUG=y +-CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +-CONFIG_GENERIC_CLOCKEVENTS=y +-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +-CONFIG_GENERIC_CPU_AUTOPROBE=y +-CONFIG_GENERIC_CPU_VULNERABILITIES=y +-CONFIG_GENERIC_CSUM=y +-CONFIG_GENERIC_EARLY_IOREMAP=y +-CONFIG_GENERIC_IDLE_POLL_SETUP=y +-CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +-CONFIG_GENERIC_IRQ_MIGRATION=y +-CONFIG_GENERIC_IRQ_MULTI_HANDLER=y +-CONFIG_GENERIC_IRQ_SHOW=y +-CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +-CONFIG_GENERIC_MSI_IRQ=y +-CONFIG_GENERIC_MSI_IRQ_DOMAIN=y +-CONFIG_GENERIC_PCI_IOMAP=y +-CONFIG_GENERIC_PHY=y +-CONFIG_GENERIC_PINCONF=y +-CONFIG_GENERIC_PINCTRL_GROUPS=y +-CONFIG_GENERIC_PINMUX_FUNCTIONS=y +-CONFIG_GENERIC_SCHED_CLOCK=y +-CONFIG_GENERIC_SMP_IDLE_THREAD=y +-CONFIG_GENERIC_STRNCPY_FROM_USER=y +-CONFIG_GENERIC_STRNLEN_USER=y +-CONFIG_GENERIC_TIME_VSYSCALL=y +-CONFIG_GPIOLIB=y +-CONFIG_GPIOLIB_IRQCHIP=y +-CONFIG_HANDLE_DOMAIN_IRQ=y +-CONFIG_HARDEN_BRANCH_PREDICTOR=y +-CONFIG_HARDIRQS_SW_RESEND=y +-CONFIG_HAS_DMA=y +-CONFIG_HAS_IOMEM=y +-CONFIG_HAS_IOPORT_MAP=y +-CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +-CONFIG_HAVE_ARCH_AUDITSYSCALL=y +-CONFIG_HAVE_ARCH_BITREVERSE=y +-CONFIG_HAVE_ARCH_HUGE_VMAP=y +-CONFIG_HAVE_ARCH_JUMP_LABEL=y +-CONFIG_HAVE_ARCH_KASAN=y +-CONFIG_HAVE_ARCH_KGDB=y +-CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +-CONFIG_HAVE_ARCH_PFN_VALID=y +-CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +-CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +-CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +-CONFIG_HAVE_ARCH_TRACEHOOK=y +-CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +-CONFIG_HAVE_ARCH_VMAP_STACK=y +-CONFIG_HAVE_ARM_SMCCC=y +-CONFIG_HAVE_CLK=y +-CONFIG_HAVE_CLK_PREPARE=y +-CONFIG_HAVE_CMPXCHG_DOUBLE=y +-CONFIG_HAVE_CMPXCHG_LOCAL=y +-CONFIG_HAVE_CONTEXT_TRACKING=y +-CONFIG_HAVE_C_RECORDMCOUNT=y +-CONFIG_HAVE_DEBUG_BUGVERBOSE=y +-CONFIG_HAVE_DEBUG_KMEMLEAK=y +-CONFIG_HAVE_DMA_CONTIGUOUS=y +-CONFIG_HAVE_DYNAMIC_FTRACE=y +-CONFIG_HAVE_EBPF_JIT=y +-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +-CONFIG_HAVE_FUNCTION_TRACER=y +-CONFIG_HAVE_GENERIC_DMA_COHERENT=y +-CONFIG_HAVE_GENERIC_GUP=y +-CONFIG_HAVE_HW_BREAKPOINT=y +-CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +-CONFIG_HAVE_MEMBLOCK=y +-CONFIG_HAVE_MEMORY_PRESENT=y +-CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +-CONFIG_HAVE_NET_DSA=y +-CONFIG_HAVE_PATA_PLATFORM=y +-CONFIG_HAVE_PERF_EVENTS=y +-CONFIG_HAVE_PERF_REGS=y +-CONFIG_HAVE_PERF_USER_STACK_DUMP=y +-CONFIG_HAVE_RCU_TABLE_FREE=y +-CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +-CONFIG_HAVE_RSEQ=y +-CONFIG_HAVE_SCHED_AVG_IRQ=y +-CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +-CONFIG_HAVE_UID16=y +-CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +-CONFIG_HOLES_IN_ZONE=y +-CONFIG_HOTPLUG_CPU=y +-# CONFIG_HUGETLBFS is not set +-CONFIG_HWSPINLOCK=y +-CONFIG_HWSPINLOCK_QCOM=y +-CONFIG_HW_RANDOM=y +-CONFIG_I2C=y +-CONFIG_I2C_BOARDINFO=y +-CONFIG_I2C_CHARDEV=y +-CONFIG_I2C_COMPAT=y +-CONFIG_I2C_HELPER_AUTO=y +-CONFIG_I2C_QUP=y +-CONFIG_IIO=y +-# CONFIG_IIO_BUFFER is not set +-# CONFIG_IIO_TRIGGER is not set +-CONFIG_IKCONFIG=y +-CONFIG_IKCONFIG_PROC=y +-CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_IPQ_GCC_4019 is not set +-# CONFIG_IPQ_GCC_806X is not set +-CONFIG_IPQ_GCC_8074=y +-# CONFIG_IPQ_LCC_806X is not set +-CONFIG_IRQCHIP=y +-CONFIG_IRQ_DOMAIN=y +-CONFIG_IRQ_DOMAIN_HIERARCHY=y +-CONFIG_IRQ_FORCED_THREADING=y +-CONFIG_IRQ_TIME_ACCOUNTING=y +-CONFIG_IRQ_WORK=y +-CONFIG_JBD2=y +-CONFIG_KEYS=y +-CONFIG_KEYS_COMPAT=y +-# CONFIG_KVM is not set +-CONFIG_LEDS_TLC591XX=y +-CONFIG_LIBFDT=y +-CONFIG_LOCK_DEBUGGING_SUPPORT=y +-CONFIG_LOCK_SPIN_ON_OWNER=y +-CONFIG_LZO_COMPRESS=y +-CONFIG_LZO_DECOMPRESS=y +-CONFIG_MAILBOX=y +-# CONFIG_MAILBOX_TEST is not set +-CONFIG_MDIO_BITBANG=y +-CONFIG_MDIO_BUS=y +-CONFIG_MDIO_DEVICE=y +-CONFIG_MDIO_GPIO=y +-# CONFIG_MDM_GCC_9615 is not set +-# CONFIG_MDM_LCC_9615 is not set +-CONFIG_MEMFD_CREATE=y +-CONFIG_MFD_QCOM_RPM=y +-CONFIG_MFD_SPMI_PMIC=y +-CONFIG_MFD_SYSCON=y +-CONFIG_MIGRATION=y +-CONFIG_MMC=y +-CONFIG_MMC_ARMMMCI=y +-CONFIG_MMC_BLOCK=y +-CONFIG_MMC_BLOCK_MINORS=32 +-CONFIG_MMC_QCOM_DML=y +-CONFIG_MMC_SDHCI=y +-CONFIG_MMC_SDHCI_IO_ACCESSORS=y +-CONFIG_MMC_SDHCI_MSM=y +-# CONFIG_MMC_SDHCI_PCI is not set +-CONFIG_MMC_SDHCI_PLTFM=y +-# CONFIG_MMC_TIFM_SD is not set +-CONFIG_MODULES_TREE_LOOKUP=y +-CONFIG_MODULES_USE_ELF_RELA=y +-CONFIG_MPILIB=y +-# CONFIG_MSM_GCC_8660 is not set +-# CONFIG_MSM_GCC_8916 is not set +-# CONFIG_MSM_GCC_8960 is not set +-# CONFIG_MSM_GCC_8974 is not set +-# CONFIG_MSM_GCC_8994 is not set +-# CONFIG_MSM_GCC_8996 is not set +-# CONFIG_MSM_GCC_8998 is not set +-# CONFIG_MSM_LCC_8960 is not set +-# CONFIG_MSM_MMCC_8960 is not set +-# CONFIG_MSM_MMCC_8974 is not set +-# CONFIG_MSM_MMCC_8996 is not set +-CONFIG_MTD_CMDLINE_PARTS=y +-CONFIG_MTD_M25P80=y +-CONFIG_MTD_NAND=y +-CONFIG_MTD_NAND_ECC=y +-CONFIG_MTD_NAND_QCOM=y +-CONFIG_MTD_SPI_NOR=y +-CONFIG_MTD_SPLIT_FIRMWARE=y +-CONFIG_MTD_SPLIT_FIT_FW=y +-CONFIG_MTD_UBI=y +-CONFIG_MTD_UBI_BEB_LIMIT=20 +-CONFIG_MTD_UBI_BLOCK=y +-# CONFIG_MTD_UBI_FASTMAP is not set +-CONFIG_MTD_UBI_GLUEBI=y +-CONFIG_MTD_UBI_WL_THRESHOLD=4096 +-CONFIG_MUTEX_SPIN_ON_OWNER=y +-CONFIG_NEED_DMA_MAP_STATE=y +-CONFIG_NEED_SG_DMA_LENGTH=y +-CONFIG_NET_FLOW_LIMIT=y +-CONFIG_NET_PTP_CLASSIFY=y +-CONFIG_NET_SWITCHDEV=y +-# CONFIG_NET_VENDOR_CAVIUM is not set +-CONFIG_NLS=y +-CONFIG_NO_BOOTMEM=y +-CONFIG_NO_HZ=y +-CONFIG_NO_HZ_COMMON=y +-CONFIG_NO_HZ_IDLE=y +-CONFIG_NR_CPUS=4 +-# CONFIG_NUMA is not set +-CONFIG_NVMEM=y +-CONFIG_NVME_CORE=y +-# CONFIG_NVME_MULTIPATH is not set +-CONFIG_OF=y +-CONFIG_OF_ADDRESS=y +-CONFIG_OF_EARLY_FLATTREE=y +-CONFIG_OF_FLATTREE=y +-CONFIG_OF_GPIO=y +-CONFIG_OF_IRQ=y +-CONFIG_OF_KOBJ=y +-CONFIG_OF_MDIO=y +-CONFIG_OF_NET=y +-CONFIG_OF_RESERVED_MEM=y +-CONFIG_OID_REGISTRY=y +-CONFIG_OLD_SIGSUSPEND3=y +-CONFIG_PADATA=y +-CONFIG_PANIC_TIMEOUT=5 +-CONFIG_PARTITION_PERCPU=y +-CONFIG_PCI=y +-CONFIG_PCIE_DW=y +-CONFIG_PCIE_DW_HOST=y +-CONFIG_PCIE_QCOM=y +-CONFIG_PCI_DOMAINS=y +-CONFIG_PCI_DOMAINS_GENERIC=y +-CONFIG_PCI_LABEL=y +-CONFIG_PCI_MSI=y +-CONFIG_PCI_MSI_IRQ_DOMAIN=y +-CONFIG_PERF_EVENTS=y +-CONFIG_PGTABLE_LEVELS=3 +-CONFIG_PHYLIB=y +-CONFIG_PHYS_ADDR_T_64BIT=y +-# CONFIG_PHY_QCOM_APQ8064_SATA is not set +-# CONFIG_PHY_QCOM_IPQ806X_SATA is not set +-# CONFIG_PHY_QCOM_QMP is not set +-# CONFIG_PHY_QCOM_QUSB2 is not set +-# CONFIG_PHY_QCOM_UFS is not set +-CONFIG_PINCTRL=y +-# CONFIG_PINCTRL_APQ8064 is not set +-# CONFIG_PINCTRL_APQ8084 is not set +-# CONFIG_PINCTRL_IPQ4019 is not set +-# CONFIG_PINCTRL_IPQ8064 is not set +-CONFIG_PINCTRL_IPQ8074=y +-# CONFIG_PINCTRL_MDM9615 is not set +-CONFIG_PINCTRL_MSM=y +-# CONFIG_PINCTRL_MSM8660 is not set +-# CONFIG_PINCTRL_MSM8916 is not set +-# CONFIG_PINCTRL_MSM8960 is not set +-# CONFIG_PINCTRL_MSM8994 is not set +-# CONFIG_PINCTRL_MSM8996 is not set +-# CONFIG_PINCTRL_MSM8998 is not set +-CONFIG_PINCTRL_QCOM_SPMI_PMIC=y +-# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set +-# CONFIG_PINCTRL_SDM845 is not set +-CONFIG_PM=y +-CONFIG_PM_CLK=y +-# CONFIG_PM_DEBUG is not set +-CONFIG_PM_OPP=y +-CONFIG_PM_SLEEP=y +-CONFIG_PM_SLEEP_SMP=y +-CONFIG_POWER_RESET=y +-CONFIG_POWER_RESET_MSM=y +-# CONFIG_POWER_RESET_QCOM_PON is not set +-CONFIG_POWER_SUPPLY=y +-CONFIG_PPS=y +-CONFIG_PREEMPT=y +-CONFIG_PREEMPT_COUNT=y +-# CONFIG_PREEMPT_NONE is not set +-CONFIG_PREEMPT_RCU=y +-CONFIG_PRINTK_TIME=y +-CONFIG_PROC_PAGE_MONITOR=y +-# CONFIG_PROC_STRIPPED is not set +-CONFIG_PTP_1588_CLOCK=y +-CONFIG_PWM=y +-CONFIG_PWM_SYSFS=y +-CONFIG_QCOM_A53PLL=y +-# CONFIG_QCOM_APCS_IPC is not set +-CONFIG_QCOM_BAM_DMA=y +-# CONFIG_QCOM_CLK_RPM is not set +-# CONFIG_QCOM_COINCELL is not set +-# CONFIG_QCOM_COMMAND_DB is not set +-CONFIG_QCOM_EBI2=y +-# CONFIG_QCOM_GENI_SE is not set +-CONFIG_QCOM_GSBI=y +-# CONFIG_QCOM_LLCC is not set +-# CONFIG_QCOM_PDC is not set +-CONFIG_QCOM_QFPROM=y +-# CONFIG_QCOM_RMTFS_MEM is not set +-# CONFIG_QCOM_RPMH is not set +-CONFIG_QCOM_SMEM=y +-CONFIG_QCOM_SMEM_STATE=y +-CONFIG_QCOM_SMP2P=y +-# CONFIG_QCOM_SMSM is not set +-CONFIG_QCOM_SPMI_VADC=y +-CONFIG_QCOM_TSENS=y +-CONFIG_QCOM_VADC_COMMON=y +-CONFIG_QCOM_WDT=y +-# CONFIG_QRTR is not set +-CONFIG_QUEUED_RWLOCKS=y +-CONFIG_QUEUED_SPINLOCKS=y +-# CONFIG_RANDOMIZE_BASE is not set +-CONFIG_RATIONAL=y +-CONFIG_RCU_CPU_STALL_TIMEOUT=21 +-# CONFIG_RCU_EXPERT is not set +-CONFIG_RCU_NEED_SEGCBLIST=y +-CONFIG_RCU_STALL_COMMON=y +-CONFIG_RD_GZIP=y +-CONFIG_REFCOUNT_FULL=y +-CONFIG_REGMAP=y +-CONFIG_REGMAP_I2C=y +-CONFIG_REGMAP_MMIO=y +-CONFIG_REGMAP_SPI=y +-CONFIG_REGMAP_SPMI=y +-CONFIG_REGULATOR=y +-CONFIG_REGULATOR_FIXED_VOLTAGE=y +-CONFIG_REGULATOR_GPIO=y +-CONFIG_REGULATOR_QCOM_RPM=y +-CONFIG_REGULATOR_QCOM_SPMI=y +-CONFIG_RELAY=y +-CONFIG_REMOTEPROC=y +-# CONFIG_RESET_ATTACK_MITIGATION is not set +-CONFIG_RESET_CONTROLLER=y +-# CONFIG_RESET_QCOM_AOSS is not set +-CONFIG_RFS_ACCEL=y +-# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set +-# CONFIG_RPMSG_QCOM_SMD is not set +-CONFIG_RPS=y +-CONFIG_RTC_CLASS=y +-# CONFIG_RTC_DRV_EFI is not set +-# CONFIG_RTC_DRV_PM8XXX is not set +-CONFIG_RTC_I2C_AND_SPI=y +-CONFIG_RWSEM_SPIN_ON_OWNER=y +-CONFIG_RWSEM_XCHGADD_ALGORITHM=y +-# CONFIG_SDM_DISPCC_845 is not set +-# CONFIG_SDM_GCC_845 is not set +-# CONFIG_SDM_VIDEOCC_845 is not set +-# CONFIG_SERIAL_8250 is not set +-# CONFIG_SERIAL_AMBA_PL011 is not set +-CONFIG_SERIAL_MSM=y +-CONFIG_SERIAL_MSM_CONSOLE=y +-CONFIG_SGL_ALLOC=y +-CONFIG_SMP=y +-CONFIG_SND=y +-# CONFIG_SND_COMPRESS_OFFLOAD is not set +-CONFIG_SND_JACK=y +-CONFIG_SND_PCM=y +-CONFIG_SND_SOC=y +-# CONFIG_SND_SOC_APQ8016_SBC is not set +-CONFIG_SND_SOC_I2C_AND_SPI=y +-CONFIG_SND_SOC_QCOM=y +-# CONFIG_SND_SOC_STORM is not set +-CONFIG_SOUND=y +-CONFIG_SOUND_OSS_CORE=y +-CONFIG_SOUND_OSS_CORE_PRECLAIM=y +-CONFIG_SPARSEMEM=y +-CONFIG_SPARSEMEM_EXTREME=y +-CONFIG_SPARSEMEM_MANUAL=y +-CONFIG_SPARSEMEM_VMEMMAP=y +-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +-CONFIG_SPARSE_IRQ=y +-CONFIG_SPI=y +-CONFIG_SPI_MASTER=y +-CONFIG_SPI_MEM=y +-CONFIG_SPI_QUP=y +-CONFIG_SPI_SPIDEV=y +-CONFIG_SPMI=y +-CONFIG_SPMI_MSM_PMIC_ARB=y +-# CONFIG_SPMI_PMIC_CLKDIV is not set +-CONFIG_SRCU=y +-# CONFIG_STAGING is not set +-CONFIG_STM=y +-# CONFIG_STM_SOURCE_HEARTBEAT is not set +-# CONFIG_STRIP_ASM_SYMS is not set +-CONFIG_SUSPEND=y +-CONFIG_SUSPEND_FREEZER=y +-# CONFIG_SWAP is not set +-CONFIG_SWCONFIG=y +-CONFIG_SWIOTLB=y +-CONFIG_SWPHY=y +-CONFIG_SYSCTL_EXCEPTION_TRACE=y +-CONFIG_SYSVIPC_COMPAT=y +-CONFIG_SYS_SUPPORTS_HUGETLBFS=y +-CONFIG_TASKS_RCU=y +-CONFIG_THERMAL=y +-CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +-CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +-CONFIG_THERMAL_GOV_STEP_WISE=y +-CONFIG_THERMAL_GOV_USER_SPACE=y +-CONFIG_THERMAL_OF=y +-CONFIG_THERMAL_WRITABLE_TRIPS=y +-CONFIG_THREAD_INFO_IN_TASK=y +-CONFIG_TICK_CPU_ACCOUNTING=y +-CONFIG_TIMER_OF=y +-CONFIG_TIMER_PROBE=y +-CONFIG_TREE_SRCU=y +-CONFIG_UBIFS_FS=y +-CONFIG_UBIFS_FS_ADVANCED_COMPR=y +-CONFIG_UBIFS_FS_LZO=y +-CONFIG_UBIFS_FS_ZLIB=y +-CONFIG_UCS2_STRING=y +-CONFIG_UEVENT_HELPER_PATH="" +-CONFIG_UNINLINE_SPIN_UNLOCK=y +-CONFIG_UNMAP_KERNEL_AT_EL0=y +-CONFIG_USB_SUPPORT=y +-CONFIG_VIRTIO=y +-# CONFIG_VIRTIO_BLK is not set +-# CONFIG_VIRTIO_CONSOLE is not set +-# CONFIG_VIRTIO_NET is not set +-CONFIG_VIRTUALIZATION=y +-CONFIG_VMAP_STACK=y +-CONFIG_VM_EVENT_COUNTERS=y +-CONFIG_WANT_DEV_COREDUMP=y +-CONFIG_WATCHDOG_CORE=y +-# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +-CONFIG_X509_CERTIFICATE_PARSER=y +-CONFIG_XPS=y +-CONFIG_XZ_DEC_ARM=y +-CONFIG_XZ_DEC_BCJ=y +-CONFIG_ZLIB_DEFLATE=y +-CONFIG_ZLIB_INFLATE=y +-CONFIG_ZONE_DMA32=y +diff --git a/target/linux/ipq807x/image/Makefile b/target/linux/ipq807x/image/Makefile +deleted file mode 100644 +index 2a0c74554f..0000000000 +--- a/target/linux/ipq807x/image/Makefile ++++ /dev/null +@@ -1,40 +0,0 @@ +-include $(TOPDIR)/rules.mk +-include $(INCLUDE_DIR)/image.mk +- +-IPQ807X_KERNEL_LOADADDR = 0x41080000 +-DEVICE_DTS_CONFIG = "config@hk01" +- +-define Image/BuildKernel/FIT +- gzip -9 -c $(KDIR)/Image > $(KDIR)/Image.gz +- $(call CompressLzma,$(KDIR)/Image,$(KDIR)/Image.gz) +- $(call Image/BuildKernel/MkFIT,$(1), $(KDIR)/Image.gz, $(DTS_DIR)/qcom/$(1).dtb,gzip,$(2),$(2)) +- $(CP) $(KDIR)/fit-$(1).itb $(BIN_DIR)/$(IMG_PREFIX)-$(1)-fit-uImage.itb +- mkdir -p $(BIN_DIR)/dtbs/ +- $(CP) $(DTS_DIR)/qcom/ipq*.dtb $(BIN_DIR)/dtbs/ +- $(CP) $(KDIR)/Image $(BIN_DIR)/dtbs/ +-endef +- +-define Image/BuildKernel/FITInitramfs +- $(CP) $(KDIR)/Image-initramfs $(BIN_DIR)/dtbs/ +- $(CP) $(KDIR)/Image-initramfs $(BIN_DIR)/$(IMG_PREFIX)-vmlinux-initramfs.bin +- $(call Image/BuildKernel/MkFIT,$(1), $(KDIR)/Image-initramfs, $(DTS_DIR)/qcom/$(1).dtb, none,$(2),$(2),-initramfs) +- $(CP) $(KDIR)/fit-$(1)-initramfs.itb $(BIN_DIR)/$(IMG_PREFIX)-$(1)-fit-uImage-initramfs.itb +-endef +- +-define Image/Build/squashfs +- $(call prepare_generic_squashfs,$(KDIR)/root.squashfs) +-endef +- +-define Image/BuildKernel +- $(call Image/BuildKernel/FIT,ipq8074-hk01,$(IPQ807X_KERNEL_LOADADDR)) +-endef +- +-define Image/BuildKernel/Initramfs +- $(call Image/BuildKernel/FITInitramfs,ipq8074-hk01,$(IPQ807X_KERNEL_LOADADDR)) +-endef +- +-define Image/Build +- $(call Image/Build/$(1),$(1)) +-endef +- +-$(eval $(call BuildImage)) +diff --git a/target/linux/ipq807x/profiles/default.mk b/target/linux/ipq807x/profiles/default.mk +deleted file mode 100644 +index 44935d6905..0000000000 +--- a/target/linux/ipq807x/profiles/default.mk ++++ /dev/null +@@ -1,8 +0,0 @@ +-define Profile/Default +- NAME:=Default Profile (minimum package set) +-endef +- +-define Profile/Default/Description +- Default package set compatible with most boards. +-endef +-$(eval $(call Profile,Default)) +-- +2.25.1 + diff --git a/patches-20.x/0019-linux-modules-fix-some-v4.4-dependencies.patch b/patches-20.x/0019-linux-modules-fix-some-v4.4-dependencies.patch new file mode 100644 index 000000000..ee3c4394e --- /dev/null +++ b/patches-20.x/0019-linux-modules-fix-some-v4.4-dependencies.patch @@ -0,0 +1,492 @@ +From b65db44a14f0e3f165ef849563a6f5bce04d05d4 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Tue, 3 Nov 2020 18:22:02 +0100 +Subject: [PATCH 19/25] linux/modules: fix some v4.4 dependencies + +NFT has different deps on v4.4. + +Signed-off-by: John Crispin +--- + include/image.mk | 2 ++ + include/kernel.mk | 3 +- + include/netfilter.mk | 27 +++++++++++++--- + include/package.mk | 8 ++--- + package/kernel/linux/modules/can.mk | 3 +- + package/kernel/linux/modules/crypto.mk | 9 ++++-- + package/kernel/linux/modules/fs.mk | 3 +- + package/kernel/linux/modules/iio.mk | 4 +-- + package/kernel/linux/modules/netdevices.mk | 2 +- + package/kernel/linux/modules/netfilter.mk | 15 ++++----- + package/kernel/linux/modules/netsupport.mk | 6 ++-- + package/kernel/linux/modules/other.mk | 36 ++++++++++++++++++++-- + package/kernel/linux/modules/usb.mk | 4 +-- + package/kernel/linux/modules/video.mk | 16 ++++++---- + toolchain/gcc/Config.in | 3 ++ + 15 files changed, 104 insertions(+), 37 deletions(-) + +diff --git a/include/image.mk b/include/image.mk +index 4e7c31e8dc..8373a1cd0c 100644 +--- a/include/image.mk ++++ b/include/image.mk +@@ -156,6 +156,7 @@ endif + + + # Disable noisy checks by default as in upstream ++ifeq ($(strip $(call kernel_patchver_ge,4.5.0)),1) + DTC_FLAGS += \ + -Wno-unit_address_vs_reg \ + -Wno-simple_bus_reg \ +@@ -168,6 +169,7 @@ DTC_FLAGS += \ + -Wno-graph_child_address \ + -Wno-graph_port \ + -Wno-unique_unit_address ++endif + + define Image/pad-to + dd if=$(1) of=$(1).new bs=$(2) conv=sync +diff --git a/include/kernel.mk b/include/kernel.mk +index efbca0f3a5..c29ad3d4d9 100644 +--- a/include/kernel.mk ++++ b/include/kernel.mk +@@ -103,8 +103,9 @@ endif + + KERNEL_MAKE = $(MAKE) $(KERNEL_MAKEOPTS) + ++ #KCFLAGS="$(call iremap,$(BUILD_DIR),$(notdir $(BUILD_DIR)))" \ ++ + KERNEL_MAKE_FLAGS = \ +- KCFLAGS="$(call iremap,$(BUILD_DIR),$(notdir $(BUILD_DIR)))" \ + HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \ + CROSS_COMPILE="$(KERNEL_CROSS)" \ + ARCH="$(LINUX_KARCH)" \ +diff --git a/include/netfilter.mk b/include/netfilter.mk +index 3a855716fd..0f4da3a5b8 100644 +--- a/include/netfilter.mk ++++ b/include/netfilter.mk +@@ -158,7 +158,8 @@ $(eval $(if $(NF_KMOD),$(call nf_add,NF_REJECT6,CONFIG_NF_REJECT_IPV6, $(P_V6)nf + + $(eval $(if $(NF_KMOD),$(call nf_add,NF_IPT6,CONFIG_IP6_NF_IPTABLES, $(P_V6)ip6_tables),)) + +-$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6, ge 4.19),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_DEFRAG_IPV6, $(P_V6)nf_defrag_ipv6, lt 4.19),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NF_CONNTRACK6,CONFIG_NF_CONNTRACK_IPV6, $(P_V6)nf_conntrack_ipv6),)) + + $(eval $(if $(NF_KMOD),$(call nf_add,IPT_IPV6,CONFIG_IP6_NF_FILTER, $(P_V6)ip6table_filter),)) +@@ -185,11 +186,15 @@ $(eval $(call nf_add,IPT_IPV6_EXTRA,CONFIG_IP6_NF_MATCH_RT, $(P_V6)ip6t_rt)) + + # kernel only + $(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT, $(P_XT)nf_nat),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_REDIRECT, $(P_XT)nf_nat_redirect, lt 4.18),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_IPV4, $(P_V4)nf_nat_ipv4, lt 4.18),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT,CONFIG_NF_NAT_MASQUERADE_IPV4, $(P_V4)nf_nat_masquerade_ipv4, lt 4.18),)) + + $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_NAT, $(P_XT)xt_nat),)) + $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_IP_NF_NAT, $(P_V4)iptable_nat),)) + $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_NAT, $(P_V6)ip6table_nat),)) + $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_IP6_NF_TARGET_NPT, $(P_V6)ip6t_NPT),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT6,CONFIG_NF_NAT_MASQUERADE_IPV6, $(P_V6)nf_nat_masquerade_ipv6, lt 4.18),)) + + # userland only + $(eval $(if $(NF_KMOD),,$(call nf_add,IPT_NAT,CONFIG_NF_NAT, ipt_SNAT ipt_DNAT))) +@@ -254,8 +259,8 @@ $(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_MATCH_SOCKET, $(P_XT)xt_sock + $(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_SOCKET_IPV4, $(P_V4)nf_socket_ipv4)) + $(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_SOCKET_IPV6, $(P_V6)nf_socket_ipv6)) + $(eval $(call nf_add,IPT_TPROXY,CONFIG_NETFILTER_XT_TARGET_TPROXY, $(P_XT)xt_TPROXY)) +-$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV4, $(P_V4)nf_tproxy_ipv4)) +-$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV6, $(P_V6)nf_tproxy_ipv6)) ++$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV4, $(P_V4)nf_tproxy_ipv4, ge 4.18)) ++$(eval $(call nf_add,IPT_TPROXY,CONFIG_NF_TPROXY_IPV6, $(P_V6)nf_tproxy_ipv6, ge 4.18)) + + # led + $(eval $(call nf_add,IPT_LED,CONFIG_NETFILTER_XT_TARGET_LED, $(P_XT)xt_LED)) +@@ -325,7 +330,10 @@ $(eval $(call nf_add,EBTABLES_WATCHERS,CONFIG_BRIDGE_EBT_NFQUEUE, $(P_EBT)ebt_nf + + # nftables + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES, $(P_XT)nf_tables),)) +-$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_SET, $(P_XT)nf_tables_set),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_INET, $(P_XT)nf_tables_inet, lt 4.17),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_IPV4, $(P_V4)nf_tables_ipv4, lt 4.17),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_IPV6, $(P_V6)nf_tables_ipv6, lt 4.17),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NF_TABLES_SET, $(P_XT)nf_tables_set, ge 4.18),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_COUNTER, $(P_XT)nft_counter),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CT, $(P_XT)nft_ct),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_HASH, $(P_XT)nft_hash),)) +@@ -338,7 +346,12 @@ $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_QUOTA, $(P_XT)nft_quota + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REDIR, $(P_XT)nft_redir),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT, $(P_XT)nft_reject $(P_V4)nft_reject_ipv4 $(P_V6)nft_reject_ipv6),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_REJECT_INET, $(P_XT)nft_reject_inet),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_SET_HASH, $(P_XT)nft_set_hash, lt 4.18),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_SET_RBTREE, $(P_XT)nft_set_rbtree, lt 4.18),)) + ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_ARP,CONFIG_NF_TABLES_ARP, $(P_V4)nf_tables_arp, lt 4.17),)) ++ ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NF_TABLES_BRIDGE, $(P_EBT)nf_tables_bridge, lt 4.17),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_META, $(P_EBT)nft_meta_bridge),)) + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_BRIDGE,CONFIG_NFT_BRIDGE_REJECT, $(P_EBT)nft_reject_bridge),)) + +@@ -358,6 +371,12 @@ $(eval $(if $(NF_KMOD),$(call nf_add,NFT_FIB,CONFIG_NFT_FIB_IPV6, $(P_V6)nft_fib + + $(eval $(if $(NF_KMOD),$(call nf_add,NFT_QUEUE,CONFIG_NFT_QUEUE, $(P_XT)nft_queue),)) + ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_EXTHDR, $(P_XT)nft_exthdr, lt 4.9.0),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_RBTREE, $(P_XT)nft_rbtree, lt 4.9.0),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CHAIN_ROUTE_IPV4, $(P_V4)nft_chain_route_ipv4, lt 4.9.0),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_NAT,CONFIG_NFT_CHAIN_NAT_IPV4, $(P_V4)nft_chain_nat_ipv4, lt 4.9.0),)) ++$(eval $(if $(NF_KMOD),$(call nf_add,NFT_CORE,CONFIG_NFT_CHAIN_ROUTE_IPV6, $(P_V6)nft_chain_route_ipv6, lt 4.9.0),)) ++ + # userland only + IPT_BUILTIN += $(NF_IPT-y) $(NF_IPT-m) + IPT_BUILTIN += $(IPT_CORE-y) $(IPT_CORE-m) +diff --git a/include/package.mk b/include/package.mk +index 5eb4460db8..f5a69072e3 100644 +--- a/include/package.mk ++++ b/include/package.mk +@@ -32,10 +32,10 @@ ifdef CONFIG_USE_MIPS16 + TARGET_CFLAGS += -mips16 -minterlink-mips16 + endif + endif +-ifeq ($(strip $(PKG_IREMAP)),1) +- IREMAP_CFLAGS = $(call iremap,$(PKG_BUILD_DIR),$(notdir $(PKG_BUILD_DIR))) +- TARGET_CFLAGS += $(IREMAP_CFLAGS) +-endif ++#ifeq ($(strip $(PKG_IREMAP)),1) ++# IREMAP_CFLAGS = $(call iremap,$(PKG_BUILD_DIR),$(notdir $(PKG_BUILD_DIR))) ++# TARGET_CFLAGS += $(IREMAP_CFLAGS) ++#endif + + include $(INCLUDE_DIR)/hardening.mk + include $(INCLUDE_DIR)/prereq.mk +diff --git a/package/kernel/linux/modules/can.mk b/package/kernel/linux/modules/can.mk +index 58c257db5b..3bf0359c11 100644 +--- a/package/kernel/linux/modules/can.mk ++++ b/package/kernel/linux/modules/can.mk +@@ -248,7 +248,8 @@ define KernelPackage/can-usb-kvaser + TITLE:=Kvaser CAN/USB interface + KCONFIG:=CONFIG_CAN_KVASER_USB + FILES:= \ +- $(LINUX_DIR)/drivers/net/can/usb/kvaser_usb/kvaser_usb.ko ++ $(LINUX_DIR)/drivers/net/can/usb/kvaser_usb.ko@lt4.19 \ ++ $(LINUX_DIR)/drivers/net/can/usb/kvaser_usb/kvaser_usb.ko@ge4.19 + AUTOLOAD:=$(call AutoProbe,kvaser_usb) + $(call AddDepends/can,+kmod-usb-core) + endef +diff --git a/package/kernel/linux/modules/crypto.mk b/package/kernel/linux/modules/crypto.mk +index e9e78e7967..e7776c096c 100644 +--- a/package/kernel/linux/modules/crypto.mk ++++ b/package/kernel/linux/modules/crypto.mk +@@ -377,7 +377,7 @@ $(eval $(call KernelPackage,crypto-hw-padlock)) + + define KernelPackage/crypto-hw-safexcel + TITLE:= MVEBU SafeXcel Crypto Engine module +- DEPENDS:=@(TARGET_mvebu_cortexa53||TARGET_mvebu_cortexa72) +eip197-mini-firmware \ ++ DEPENDS:=@!LINUX_4_14 @(TARGET_mvebu_cortexa53||TARGET_mvebu_cortexa72) +eip197-mini-firmware \ + +kmod-crypto-authenc +kmod-crypto-md5 +kmod-crypto-hmac +kmod-crypto-sha256 +kmod-crypto-sha512 + KCONFIG:= \ + CONFIG_CRYPTO_HW=y \ +@@ -549,8 +549,10 @@ ifndef CONFIG_TARGET_x86_64 + $(LINUX_DIR)/arch/x86/crypto/twofish-i586.ko \ + $(LINUX_DIR)/arch/x86/crypto/serpent-sse2-i586.ko \ + $(LINUX_DIR)/arch/x86/crypto/glue_helper.ko \ ++ $(LINUX_DIR)/crypto/ablk_helper.ko@lt4.17 \ + $(LINUX_DIR)/crypto/cryptd.ko \ +- $(LINUX_DIR)/crypto/crypto_simd.ko ++ $(LINUX_DIR)/crypto/lrw.ko@lt4.17 \ ++ $(LINUX_DIR)/crypto/crypto_simd.ko@ge4.17 + AUTOLOAD+= $(call AutoLoad,10,cryptd glue_helper \ + serpent-sse2-i586 twofish-i586 blowfish_generic) + endef +@@ -569,7 +571,8 @@ define KernelPackage/crypto-misc/x86/64 + $(LINUX_DIR)/arch/x86/crypto/twofish-avx-x86_64.ko \ + $(LINUX_DIR)/arch/x86/crypto/serpent-avx-x86_64.ko \ + $(LINUX_DIR)/arch/x86/crypto/camellia-aesni-avx2.ko \ +- $(LINUX_DIR)/arch/x86/crypto/serpent-avx2.ko ++ $(LINUX_DIR)/arch/x86/crypto/serpent-avx2.ko \ ++ $(LINUX_DIR)/crypto/ablk_helper.ko@lt4.17 + AUTOLOAD+= $(call AutoLoad,10,camellia-x86_64 \ + camellia-aesni-avx-x86_64 camellia-aesni-avx2 cast5-avx-x86_64 \ + cast6-avx-x86_64 twofish-x86_64 twofish-x86_64-3way \ +diff --git a/package/kernel/linux/modules/fs.mk b/package/kernel/linux/modules/fs.mk +index 18976a7941..21671a1822 100644 +--- a/package/kernel/linux/modules/fs.mk ++++ b/package/kernel/linux/modules/fs.mk +@@ -53,7 +53,8 @@ define KernelPackage/fs-autofs4 + CONFIG_AUTOFS4_FS \ + CONFIG_AUTOFS_FS + FILES:= \ +- $(LINUX_DIR)/fs/autofs/autofs4.ko ++ $(LINUX_DIR)/fs/autofs4/autofs4.ko@lt4.18 \ ++ $(LINUX_DIR)/fs/autofs/autofs4.ko@ge4.18 + AUTOLOAD:=$(call AutoLoad,30,autofs4) + endef + +diff --git a/package/kernel/linux/modules/iio.mk b/package/kernel/linux/modules/iio.mk +index 7bfbd38079..0ea7ba8bdd 100644 +--- a/package/kernel/linux/modules/iio.mk ++++ b/package/kernel/linux/modules/iio.mk +@@ -159,7 +159,7 @@ $(eval $(call KernelPackage,iio-dht11)) + define KernelPackage/iio-bme680 + SUBMENU:=$(IIO_MENU) + TITLE:=BME680 gas/humidity/pressure/temperature sensor +- DEPENDS:=+kmod-iio-core +kmod-regmap-core ++ DEPENDS:=@!LINUX_4_14 +kmod-iio-core +kmod-regmap-core + KCONFIG:=CONFIG_BME680 + FILES:=$(LINUX_DIR)/drivers/iio/chemical/bme680_core.ko + endef +@@ -414,7 +414,7 @@ $(eval $(call KernelPackage,iio-lsm6dsx-spi)) + + define KernelPackage/iio-sps30 + SUBMENU:=$(IIO_MENU) +- DEPENDS:=+kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer +kmod-lib-crc8 ++ DEPENDS:=@!LINUX_4_14 +kmod-i2c-core +kmod-iio-core +kmod-industrialio-triggered-buffer +kmod-lib-crc8 + TITLE:=Sensirion SPS30 particulate matter sensor + KCONFIG:=CONFIG_SPS30 + FILES:=$(LINUX_DIR)/drivers/iio/chemical/sps30.ko +diff --git a/package/kernel/linux/modules/netdevices.mk b/package/kernel/linux/modules/netdevices.mk +index 901bddddea..de909f956f 100644 +--- a/package/kernel/linux/modules/netdevices.mk ++++ b/package/kernel/linux/modules/netdevices.mk +@@ -543,7 +543,7 @@ $(eval $(call KernelPackage,8139cp)) + define KernelPackage/r8169 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=RealTek RTL-8169 PCI Gigabit Ethernet Adapter kernel support +- DEPENDS:=@PCI_SUPPORT +kmod-mii +r8169-firmware +kmod-phy-realtek ++ DEPENDS:=@PCI_SUPPORT +kmod-mii +r8169-firmware +!LINUX_4_14:kmod-phy-realtek + KCONFIG:=CONFIG_R8169 \ + CONFIG_R8169_NAPI=y \ + CONFIG_R8169_VLAN=n +diff --git a/package/kernel/linux/modules/netfilter.mk b/package/kernel/linux/modules/netfilter.mk +index aacf5948b1..e49f836782 100644 +--- a/package/kernel/linux/modules/netfilter.mk ++++ b/package/kernel/linux/modules/netfilter.mk +@@ -259,7 +259,7 @@ define KernelPackage/ipt-ipopt + KCONFIG:=$(KCONFIG_IPT_IPOPT) + FILES:=$(foreach mod,$(IPT_IPOPT-m),$(LINUX_DIR)/net/$(mod).ko) + AUTOLOAD:=$(call AutoProbe,$(notdir $(IPT_IPOPT-m))) +- $(call AddDepends/ipt) ++ $(call AddDepends/ipt,+kmod-nf-conntrack) + endef + + define KernelPackage/ipt-ipopt/description +@@ -368,7 +368,7 @@ IPVS_MODULES:= \ + define KernelPackage/nf-ipvs + SUBMENU:=Netfilter Extensions + TITLE:=IP Virtual Server modules +- DEPENDS:=@IPV6 +kmod-lib-crc32c +kmod-ipt-conntrack +kmod-nf-conntrack ++ DEPENDS:=@IPV6 +kmod-lib-crc32c +kmod-ipt-conntrack +kmod-nf-conntrack +LINUX_4_14:kmod-nf-conntrack6 + KCONFIG:= \ + CONFIG_IP_VS \ + CONFIG_IP_VS_IPV6=y \ +@@ -542,7 +542,7 @@ define KernelPackage/nf-nathelper-extra + KCONFIG:=$(KCONFIG_NF_NATHELPER_EXTRA) + FILES:=$(foreach mod,$(NF_NATHELPER_EXTRA-m),$(LINUX_DIR)/net/$(mod).ko) + AUTOLOAD:=$(call AutoProbe,$(notdir $(NF_NATHELPER_EXTRA-m))) +- DEPENDS:=+kmod-nf-nat +kmod-lib-textsearch +kmod-ipt-raw +kmod-asn1-decoder ++ DEPENDS:=+kmod-nf-nat +kmod-lib-textsearch +kmod-ipt-raw +!LINUX_4_14:kmod-asn1-decoder + endef + + define KernelPackage/nf-nathelper-extra/description +@@ -1052,7 +1052,7 @@ $(eval $(call KernelPackage,ipt-rpfilter)) + define KernelPackage/nft-core + SUBMENU:=$(NF_MENU) + TITLE:=Netfilter nf_tables support +- DEPENDS:=+kmod-nfnetlink +kmod-nf-reject +IPV6:kmod-nf-reject6 +IPV6:kmod-nf-conntrack6 +kmod-nf-nat ++ DEPENDS:=+kmod-nfnetlink +kmod-nf-reject +IPV6:kmod-nf-reject6 +IPV6:kmod-nf-conntrack6 +LINUX_5_4:kmod-nf-nat + FILES:=$(foreach mod,$(NFT_CORE-m),$(LINUX_DIR)/net/$(mod).ko) + AUTOLOAD:=$(call AutoProbe,$(notdir $(NFT_CORE-m))) + KCONFIG:= \ +@@ -1148,9 +1148,10 @@ define KernelPackage/nft-netdev + CONFIG_NFT_DUP_NETDEV \ + CONFIG_NFT_FWD_NETDEV + FILES:= \ +- $(LINUX_DIR)/net/netfilter/nf_dup_netdev.ko \ +- $(LINUX_DIR)/net/netfilter/nft_dup_netdev.ko \ +- $(LINUX_DIR)/net/netfilter/nft_fwd_netdev.ko ++ $(LINUX_DIR)/net/netfilter/nf_tables_netdev.ko@lt4.17 \ ++ $(LINUX_DIR)/net/netfilter/nf_dup_netdev.ko@gt4.5 \ ++ $(LINUX_DIR)/net/netfilter/nft_dup_netdev.ko@gt4.5 \ ++ $(LINUX_DIR)/net/netfilter/nft_fwd_netdev.ko@gt4.5 + AUTOLOAD:=$(call AutoProbe,nf_tables_netdev nf_dup_netdev nft_dup_netdev nft_fwd_netdev) + endef + +diff --git a/package/kernel/linux/modules/netsupport.mk b/package/kernel/linux/modules/netsupport.mk +index 0c68b394d1..218caaa8d5 100644 +--- a/package/kernel/linux/modules/netsupport.mk ++++ b/package/kernel/linux/modules/netsupport.mk +@@ -379,7 +379,7 @@ $(eval $(call KernelPackage,ip6-vti)) + define KernelPackage/xfrm-interface + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=IPsec XFRM Interface +- DEPENDS:=+kmod-ipsec4 +IPV6:kmod-ipsec6 ++ DEPENDS:=+kmod-ipsec4 +IPV6:kmod-ipsec6 @!LINUX_4_14 + KCONFIG:=CONFIG_XFRM_INTERFACE + FILES:=$(LINUX_DIR)/net/xfrm/xfrm_interface.ko + AUTOLOAD:=$(call AutoProbe,xfrm_interface) +@@ -768,7 +768,7 @@ $(eval $(call KernelPackage,sched-core)) + define KernelPackage/sched-cake + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=Cake fq_codel/blue derived shaper +- DEPENDS:=+kmod-sched-core ++ DEPENDS:=@!LINUX_4_14 +kmod-sched-core + KCONFIG:=CONFIG_NET_SCH_CAKE + FILES:=$(LINUX_DIR)/net/sched/sch_cake.ko + AUTOLOAD:=$(call AutoProbe,sch_cake) +@@ -1135,7 +1135,7 @@ $(eval $(call KernelPackage,rxrpc)) + define KernelPackage/mpls + SUBMENU:=$(NETWORK_SUPPORT_MENU) + TITLE:=MPLS support +- DEPENDS:=+kmod-iptunnel ++ DEPENDS:=+!LINUX_4_14:kmod-iptunnel + KCONFIG:= \ + CONFIG_MPLS=y \ + CONFIG_LWTUNNEL=y \ +diff --git a/package/kernel/linux/modules/other.mk b/package/kernel/linux/modules/other.mk +index 41de6ac2ba..c6952c812f 100644 +--- a/package/kernel/linux/modules/other.mk ++++ b/package/kernel/linux/modules/other.mk +@@ -1006,10 +1006,26 @@ endef + $(eval $(call KernelPackage,ptp)) + + ++define KernelPackage/ptp-gianfar ++ SUBMENU:=$(OTHER_MENU) ++ TITLE:=Freescale Gianfar PTP support ++ DEPENDS:=@TARGET_mpc85xx +kmod-ptp @LINUX_4_14 ++ KCONFIG:=CONFIG_PTP_1588_CLOCK_GIANFAR ++ FILES:=$(LINUX_DIR)/drivers/net/ethernet/freescale/gianfar_ptp.ko ++ AUTOLOAD:=$(call AutoProbe,gianfar_ptp) ++endef ++ ++define KernelPackage/ptp-gianfar/description ++ Kernel module for IEEE 1588 support for Freescale ++ Gianfar Ethernet drivers ++endef ++ ++$(eval $(call KernelPackage,ptp-gianfar)) ++ + define KernelPackage/ptp-qoriq + SUBMENU:=$(OTHER_MENU) + TITLE:=Freescale QorIQ PTP support +- DEPENDS:=@TARGET_mpc85xx +kmod-ptp ++ DEPENDS:=@TARGET_mpc85xx +kmod-ptp @!LINUX_4_14 + KCONFIG:=CONFIG_PTP_1588_CLOCK_QORIQ + FILES:=$(LINUX_DIR)/drivers/ptp/ptp-qoriq.ko + AUTOLOAD:=$(call AutoProbe,ptp-qoriq) +@@ -1037,6 +1053,22 @@ endef + $(eval $(call KernelPackage,random-core)) + + ++define KernelPackage/random-tpm ++ SUBMENU:=$(OTHER_MENU) ++ TITLE:=Hardware Random Number Generator TPM support ++ KCONFIG:=CONFIG_HW_RANDOM_TPM ++ FILES:=$(LINUX_DIR)/drivers/char/hw_random/tpm-rng.ko ++ DEPENDS:= +kmod-random-core +kmod-tpm @LINUX_4_14 ++ AUTOLOAD:=$(call AutoProbe,tpm-rng) ++endef ++ ++define KernelPackage/random-tpm/description ++ Kernel module for the Random Number Generator ++ in the Trusted Platform Module. ++endef ++ ++$(eval $(call KernelPackage,random-tpm)) ++ + define KernelPackage/thermal + SUBMENU:=$(OTHER_MENU) + TITLE:=Generic Thermal sysfs driver +@@ -1106,7 +1138,7 @@ $(eval $(call KernelPackage,echo)) + define KernelPackage/tpm + SUBMENU:=$(OTHER_MENU) + TITLE:=TPM Hardware Support +- DEPENDS:= +kmod-random-core ++ DEPENDS:= +!LINUX_4_14:kmod-random-core + KCONFIG:= CONFIG_TCG_TPM + FILES:= $(LINUX_DIR)/drivers/char/tpm/tpm.ko + AUTOLOAD:=$(call AutoLoad,10,tpm,1) +diff --git a/package/kernel/linux/modules/usb.mk b/package/kernel/linux/modules/usb.mk +index 9155e319a9..2b46466540 100644 +--- a/package/kernel/linux/modules/usb.mk ++++ b/package/kernel/linux/modules/usb.mk +@@ -463,7 +463,7 @@ define KernelPackage/usb-dwc3-of-simple + DEPENDS:=@!LINUX_4_19 @(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x) +kmod-usb-dwc3 + KCONFIG:= CONFIG_USB_DWC3_OF_SIMPLE + FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-of-simple.ko \ +- $(LINUX_DIR)/drivers/usb/dwc3/dbm.ko@le4.4 ++ $(LINUX_DIR)/drivers/usb/dwc3/dbm.ko + AUTOLOAD:=$(call AutoLoad,53,dwc3-of-simple,1) + $(call AddDepends/usb) + endef +@@ -479,7 +479,7 @@ $(eval $(call KernelPackage,usb-dwc3-of-simple)) + + define KernelPackage/usb-dwc3-qcom + TITLE:=DWC3 Qualcomm USB driver +- DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x) +kmod-usb-dwc3 ++ DEPENDS:=@(!LINUX_4_14) @(TARGET_ipq40xx||TARGET_ipq806x) +kmod-usb-dwc3 + KCONFIG:= CONFIG_USB_DWC3_QCOM + FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko + AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1) +diff --git a/package/kernel/linux/modules/video.mk b/package/kernel/linux/modules/video.mk +index c71f0760a6..a50fdad57e 100644 +--- a/package/kernel/linux/modules/video.mk ++++ b/package/kernel/linux/modules/video.mk +@@ -229,7 +229,7 @@ define KernelPackage/drm + KCONFIG:=CONFIG_DRM + FILES:= \ + $(LINUX_DIR)/drivers/gpu/drm/drm.ko \ +- $(LINUX_DIR)/drivers/gpu/drm/drm_panel_orientation_quirks.ko ++ $(LINUX_DIR)/drivers/gpu/drm/drm_panel_orientation_quirks.ko@ge4.15 + AUTOLOAD:=$(call AutoLoad,05,drm) + endef + +@@ -437,10 +437,14 @@ define KernelPackage/video-videobuf2 + CONFIG_VIDEOBUF2_MEMOPS \ + CONFIG_VIDEOBUF2_VMALLOC + FILES:= \ +- $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-common.ko \ +- $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-v4l2.ko \ +- $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-memops.ko \ +- $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-vmalloc.ko ++ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/videobuf2-core.ko@lt4.16 \ ++ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/videobuf2-v4l2.ko@lt4.16 \ ++ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/videobuf2-memops.ko@lt4.16 \ ++ $(LINUX_DIR)/drivers/media/$(V4L2_DIR)/videobuf2-vmalloc.ko@lt4.16 \ ++ $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-common.ko@ge4.16 \ ++ $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-v4l2.ko@ge4.16 \ ++ $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-memops.ko@ge4.16 \ ++ $(LINUX_DIR)/drivers/media/common/videobuf2/videobuf2-vmalloc.ko@ge4.16 + AUTOLOAD:=$(call AutoLoad,65,videobuf2-core videobuf-v4l2 videobuf2-memops videobuf2-vmalloc) + $(call AddDepends/video) + endef +@@ -505,7 +509,7 @@ $(eval $(call KernelPackage,video-uvc)) + define KernelPackage/video-gspca-core + MENU:=1 + TITLE:=GSPCA webcam core support framework +- DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-input-core +kmod-video-videobuf2 ++ DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-input-core +!LINUX_4_14:kmod-video-videobuf2 + KCONFIG:=CONFIG_USB_GSPCA + FILES:=$(LINUX_DIR)/drivers/media/$(V4L2_USB_DIR)/gspca/gspca_main.ko + AUTOLOAD:=$(call AutoProbe,gspca_main) +diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in +index 3aeb6a4853..6625e02114 100644 +--- a/toolchain/gcc/Config.in ++++ b/toolchain/gcc/Config.in +@@ -18,12 +18,15 @@ choice + + config GCC_USE_VERSION_8 + bool "gcc 8.x" ++ depends on !TARGET_ipq807x + + config GCC_USE_VERSION_9 + bool "gcc 9.x" ++ depends on !TARGET_ipq807x + + config GCC_USE_VERSION_10 + bool "gcc 10.x" ++ depends on !TARGET_ipq807x + endchoice + + config GCC_USE_GRAPHITE +-- +2.25.1 + diff --git a/patches-20.x/0020-ipq807x-add-the-Qualcomm-AX-target-support.patch b/patches-20.x/0020-ipq807x-add-the-Qualcomm-AX-target-support.patch new file mode 100644 index 000000000..c4cc0383c --- /dev/null +++ b/patches-20.x/0020-ipq807x-add-the-Qualcomm-AX-target-support.patch @@ -0,0 +1,11596 @@ +From 6930c5059c2bea4b91b4aec254240220ecaa4072 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sat, 18 Jul 2020 08:53:44 +0200 +Subject: [PATCH 20/25] ipq807x: add the Qualcomm AX target support + +Signed-off-by: John Crispin +--- + package/boot/uboot-envtools/files/ipq807x | 37 + + .../etc/hotplug.d/firmware/11-ath10k-caldata | 5 + + target/linux/ipq807x/Makefile | 22 + + .../ipq807x/base-files/etc/board.d/01_leds | 29 + + .../ipq807x/base-files/etc/board.d/02_network | 65 ++ + .../etc/hotplug.d/firmware/10-ath11k-caldata | 67 ++ + .../ipq807x/base-files/etc/init.d/aq_phy | 15 + + .../ipq807x/base-files/etc/init.d/bootcount | 11 + + .../linux/ipq807x/base-files/etc/init.d/wdt | 14 + + ...G4_v5.4.B-AQR_CIG_WIFI_ID44715_VER1673.cld | Bin 0 -> 391170 bytes + .../base-files/lib/upgrade/platform.sh | 60 ++ + target/linux/ipq807x/config-4.4 | 747 ++++++++++++++ + .../boot/dts/qcom/qcom-ipq807x-eap102.dts | 922 +++++++++++++++++ + target/linux/ipq807x/image/Makefile | 26 + + target/linux/ipq807x/image/ipq60xx.mk | 42 + + target/linux/ipq807x/image/ipq807x.mk | 51 + + target/linux/ipq807x/ipq60xx/config-default | 242 +++++ + .../linux/ipq807x/ipq60xx/profiles/default.mk | 9 + + target/linux/ipq807x/ipq60xx/target.mk | 8 + + target/linux/ipq807x/ipq807x/config-default | 222 ++++ + .../linux/ipq807x/ipq807x/profiles/default.mk | 9 + + target/linux/ipq807x/ipq807x/target.mk | 7 + + target/linux/ipq807x/modules.mk | 58 ++ + .../linux/ipq807x/patches/100-qrtr-ns.patch | 976 ++++++++++++++++++ + .../linux/ipq807x/patches/101-squashfs.patch | 16 + + .../linux/ipq807x/patches/102-cig-wf188.patch | 869 ++++++++++++++++ + .../ipq807x/patches/103-sercomm-wallaby.patch | 816 +++++++++++++++ + target/linux/ipq807x/patches/104-wf194c.patch | 816 +++++++++++++++ + .../patches/105-fix-dtc-gcc10-build.patch | 11 + + target/linux/ipq807x/patches/106-eap101.patch | 975 +++++++++++++++++ + .../ipq807x/patches/107-ed2-compile.patch | 12 + + 31 files changed, 7159 insertions(+) + create mode 100644 package/boot/uboot-envtools/files/ipq807x + create mode 100644 target/linux/ipq807x/Makefile + create mode 100755 target/linux/ipq807x/base-files/etc/board.d/01_leds + create mode 100755 target/linux/ipq807x/base-files/etc/board.d/02_network + create mode 100755 target/linux/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata + create mode 100755 target/linux/ipq807x/base-files/etc/init.d/aq_phy + create mode 100755 target/linux/ipq807x/base-files/etc/init.d/bootcount + create mode 100755 target/linux/ipq807x/base-files/etc/init.d/wdt + create mode 100644 target/linux/ipq807x/base-files/lib/firmware/AQR-G4_v5.4.B-AQR_CIG_WIFI_ID44715_VER1673.cld + create mode 100755 target/linux/ipq807x/base-files/lib/upgrade/platform.sh + create mode 100644 target/linux/ipq807x/config-4.4 + create mode 100755 target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq807x-eap102.dts + create mode 100644 target/linux/ipq807x/image/Makefile + create mode 100644 target/linux/ipq807x/image/ipq60xx.mk + create mode 100644 target/linux/ipq807x/image/ipq807x.mk + create mode 100644 target/linux/ipq807x/ipq60xx/config-default + create mode 100644 target/linux/ipq807x/ipq60xx/profiles/default.mk + create mode 100644 target/linux/ipq807x/ipq60xx/target.mk + create mode 100644 target/linux/ipq807x/ipq807x/config-default + create mode 100644 target/linux/ipq807x/ipq807x/profiles/default.mk + create mode 100644 target/linux/ipq807x/ipq807x/target.mk + create mode 100644 target/linux/ipq807x/modules.mk + create mode 100644 target/linux/ipq807x/patches/100-qrtr-ns.patch + create mode 100644 target/linux/ipq807x/patches/101-squashfs.patch + create mode 100644 target/linux/ipq807x/patches/102-cig-wf188.patch + create mode 100644 target/linux/ipq807x/patches/103-sercomm-wallaby.patch + create mode 100644 target/linux/ipq807x/patches/104-wf194c.patch + create mode 100644 target/linux/ipq807x/patches/105-fix-dtc-gcc10-build.patch + create mode 100644 target/linux/ipq807x/patches/106-eap101.patch + create mode 100644 target/linux/ipq807x/patches/107-ed2-compile.patch + +diff --git a/package/boot/uboot-envtools/files/ipq807x b/package/boot/uboot-envtools/files/ipq807x +new file mode 100644 +index 0000000000..6c429f1852 +--- /dev/null ++++ b/package/boot/uboot-envtools/files/ipq807x +@@ -0,0 +1,37 @@ ++[ -e /etc/config/ubootenv ] && exit 0 ++ ++touch /etc/config/ubootenv ++ ++. /lib/uboot-envtools.sh ++. /lib/functions.sh ++ ++board=$(board_name) ++ ++ubootenv_mtdinfo () { ++ UBOOTENV_PART=$(cat /proc/mtd | grep APPSBLENV) ++ mtd_dev=$(echo $UBOOTENV_PART | awk '{print $1}' | sed 's/:$//') ++ mtd_size=$(echo $UBOOTENV_PART | awk '{print "0x"$2}') ++ mtd_erase=$(echo $UBOOTENV_PART | awk '{print "0x"$3}') ++ nor_flash=$(find /sys/bus/spi/devices/*/mtd -name ${mtd_dev}) ++ ++ if [ -n "$nor_flash" ]; then ++ ubootenv_size=$mtd_size ++ else ++ # size is fixed to 0x40000 in u-boot ++ ubootenv_size=0x40000 ++ fi ++ ++ sectors=$(( $ubootenv_size / $mtd_erase )) ++ echo /dev/$mtd_dev 0x0 $ubootenv_size $mtd_erase $sectors ++} ++ ++case "$board" in ++*) ++ ubootenv_add_uci_config $(ubootenv_mtdinfo) ++ ;; ++esac ++ ++config_load ubootenv ++config_foreach ubootenv_add_app_config ubootenv ++ ++exit 0 +diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +index f33d3f331c..dc8fbb8461 100644 +--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata ++++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +@@ -239,6 +239,11 @@ case "$FIRMWARE" in + caldata_extract "ART" 0x5000 0x2f20 + ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -1) + ;; ++ tp-link,ap2220 |\ ++ tp-link,ec420-g1) ++ ath10kcal_extract "0:ART" 4096 12064 ++ ath10kcal_patch_mac_crc $(macaddr_add "$(get_tip mac_address)" 9) #2.4G, wlan1 ++ ;; + esac + ;; + *) +diff --git a/target/linux/ipq807x/Makefile b/target/linux/ipq807x/Makefile +new file mode 100644 +index 0000000000..0895fec121 +--- /dev/null ++++ b/target/linux/ipq807x/Makefile +@@ -0,0 +1,22 @@ ++include $(TOPDIR)/rules.mk ++ ++ARCH:=aarch64 ++BOARD:=ipq807x ++BOARDNAME:=Qualcomm Atheros AX ++SUBTARGETS:=ipq807x ipq60xx ++FEATURES:=squashfs ramdisk nand pcie usb ++KERNELNAME:=Image dtbs ++CPU_TYPE:=cortex-a53 ++ ++KERNEL_PATCHVER:=4.4 ++KERNEL_NAME_SUFFIX=-qsdk-10fd7d14853b7020b804acae690c8acec5d954ce ++ ++include $(INCLUDE_DIR)/target.mk ++DEFAULT_PACKAGES += kmod-qca-nss-dp kmod-qca-ssdk swconfig \ ++ kmod-qca-nss-drv \ ++ kmod-usb-phy-ipq807x kmod-usb-dwc3-of-simple \ ++ kmod-ath11k-ahb kmod-qrtr_mproc wpad \ ++ kmod-gpio-button-hotplug \ ++ qca-thermald-10.4 qca-ssdk-shell ++ ++$(eval $(call BuildTarget)) +diff --git a/target/linux/ipq807x/base-files/etc/board.d/01_leds b/target/linux/ipq807x/base-files/etc/board.d/01_leds +new file mode 100755 +index 0000000000..9e03f179c0 +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/board.d/01_leds +@@ -0,0 +1,29 @@ ++#!/bin/sh ++ ++. /lib/functions/uci-defaults.sh ++ ++board_config_update ++ ++board=$(board_name) ++ ++case "$board" in ++sercomm,wallaby|\ ++cig,wf188n|\ ++cig,wf194c) ++ ucidef_set_led_netdev "wan" "WAN" "green:wan" "br-wan" "tx rx link" ++ ucidef_set_led_netdev "lan" "LAN" "green:lan" "br-lan" "tx rx link" ++ ;; ++esac ++ ++case "$board" in ++cig,wf188n|\ ++edgecore,eap101\ ++edgecore,eap102) ++ ucidef_set_led_wlan "wlan5g" "WLAN5G" "green:wifi5" "phy0tx" ++ ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:wifi2" "phy1tx" ++ ;; ++esac ++ ++board_config_flush ++ ++exit 0 +diff --git a/target/linux/ipq807x/base-files/etc/board.d/02_network b/target/linux/ipq807x/base-files/etc/board.d/02_network +new file mode 100755 +index 0000000000..eab58d47e9 +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/board.d/02_network +@@ -0,0 +1,65 @@ ++#!/bin/sh ++ ++. /lib/functions.sh ++. /lib/functions/uci-defaults.sh ++. /lib/functions/system.sh ++ ++qcom_setup_interfaces() ++{ ++ local board="$1" ++ ucidef_add_switch "switch0" ++ ucidef_add_switch_attr "switch0" "enable" "false" ++ ucidef_add_switch_attr "switch0" "reset" "false" ++ ++ case $board in ++ cig,wf188) ++ ucidef_set_interface_lan "eth0" ++ ;; ++ qcom,ipq6018-cp01|\ ++ qcom,ipq807x-hk01) ++ ucidef_set_interface_lan "eth0 eth1 eth2 eth3 eth4" ++ ucidef_set_interface_wan "eth5" ++ ;; ++ cig,wf194c|\ ++ sercomm,wallaby) ++ ucidef_set_interface_lan "eth0" ++ ucidef_set_interface_wan "eth1" ++ ;; ++ edgecore,eap101) ++ ucidef_set_interface_lan "eth1 eth2" ++ ucidef_set_interface_wan "eth0" ++ ;; ++ cig,wf188n|\ ++ edgecore,eap102) ++ ucidef_set_interface_lan "eth1" ++ ucidef_set_interface_wan "eth0" ++ ;; ++ esac ++} ++ ++qcom_setup_macs() ++{ ++ local board="$1" ++ ++ case $board in ++ cig,wf194c) ++ mac=$(grep BaseMacAddress= /dev/mtd14 | cut -dx -f2) ++ wan_mac=$(macaddr_canonicalize $mac) ++ lan_mac=$(macaddr_add "$wan_mac" 1) ++ ;; ++ *) ++ wan_mac=$(cat /sys/class/net/eth0/address) ++ lan_mac=$(macaddr_add "$wan_mac" 1) ++ ;; ++ esac ++ [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac ++ [ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" $wan_mac ++} ++ ++board_config_update ++board=$(board_name) ++qcom_setup_interfaces $board ++qcom_setup_macs $board ++board_config_flush ++ ++exit 0 +diff --git a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata +new file mode 100755 +index 0000000000..80f00c1cb4 +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/10-ath11k-caldata +@@ -0,0 +1,67 @@ ++#!/bin/sh ++ ++[ -e /lib/firmware/$FIRMWARE ] && exit 0 ++ ++. /lib/functions.sh ++. /lib/functions/system.sh ++ ++caldata_die() { ++ echo "caldata: " "$*" ++ exit 1 ++} ++ ++caldata_extract() { ++ local part=$1 ++ local offset=$(($2)) ++ local count=$(($3)) ++ local mtd ++ ++ mtd=$(find_mtd_chardev $part) ++ [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" ++ ++ dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ ++ caldata_die "failed to extract calibration data from $mtd" ++} ++ ++board=$(board_name) ++ ++case "$FIRMWARE" in ++"ath11k/IPQ8074/hw2.0/caldata.bin") ++ case "$board" in ++ cig,wf194c|\ ++ edgecore,eap102 |\ ++ qcom,ipq807x-hk01|\ ++ qcom,ipq807x-hk14|\ ++ sercomm,wallaby) ++ caldata_extract "0:ART" 0x1000 0x20000 ++ ;; ++ esac ++ ;; ++"ath11k/IPQ6018/hw1.0/caldata.bin") ++ case "$board" in ++ cig,wf188|\ ++ cig,wf188n|\ ++ edgecore,eap101|\ ++ qcom,ipq6018-cp01) ++ caldata_extract "0:ART" 0x1000 0x20000 ++ ;; ++ esac ++ ;; ++ath11k/qcn9000/hw1.0/caldata_1.bin) ++ case "$board" in ++ qcom,ipq807x-hk14) ++ caldata_extract "0:ART" 0x26800 0x20000 ++ ;; ++ esac ++ ;; ++ath11k/qcn9000/hw1.0/caldata_2.bin) ++ case "$board" in ++ qcom,ipq807x-hk14) ++ caldata_extract "0:ART" 0x4C000 0x20000 ++ ;; ++ esac ++ ;; ++*) ++ exit 1 ++ ;; ++esac +diff --git a/target/linux/ipq807x/base-files/etc/init.d/aq_phy b/target/linux/ipq807x/base-files/etc/init.d/aq_phy +new file mode 100755 +index 0000000000..41a52ccc2d +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/init.d/aq_phy +@@ -0,0 +1,15 @@ ++#!/bin/sh /etc/rc.common ++ ++START=30 ++ ++boot() { ++ . /lib/functions.sh ++ ++ case "$(board_name)" in ++ cig,wf194c) ++ aq-fw-download /lib/firmware/AQR-G4_v5.4.B-AQR_CIG_WIFI_ID44715_VER1673.cld miireg 0 > /dev/null ++ sleep 1 ++ ssdk_sh debug phy set 0 0x4004c441 0x8 ++ ;; ++ esac ++} +diff --git a/target/linux/ipq807x/base-files/etc/init.d/bootcount b/target/linux/ipq807x/base-files/etc/init.d/bootcount +new file mode 100755 +index 0000000000..ac345d6d4a +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/init.d/bootcount +@@ -0,0 +1,11 @@ ++#!/bin/sh /etc/rc.common ++ ++START=99 ++ ++boot() { ++ case "$(board_name)" in ++ edgecore,eap101) ++ fw_setenv bootcount 0 ++ ;; ++ esac ++} +diff --git a/target/linux/ipq807x/base-files/etc/init.d/wdt b/target/linux/ipq807x/base-files/etc/init.d/wdt +new file mode 100755 +index 0000000000..75de36a347 +--- /dev/null ++++ b/target/linux/ipq807x/base-files/etc/init.d/wdt +@@ -0,0 +1,14 @@ ++#!/bin/sh /etc/rc.common ++ ++START=10 ++ ++boot() { ++ . /lib/functions.sh ++ ++ case "$(board_name)" in ++ cig,wf188|\ ++ cig,wf188n) ++ watchdog -t 5 /dev/watchdog1 ++ ;; ++ esac ++} +diff --git a/target/linux/ipq807x/base-files/lib/firmware/AQR-G4_v5.4.B-AQR_CIG_WIFI_ID44715_VER1673.cld b/target/linux/ipq807x/base-files/lib/firmware/AQR-G4_v5.4.B-AQR_CIG_WIFI_ID44715_VER1673.cld +new file mode 100644 +index 0000000000000000000000000000000000000000..4a5a76cd34f390a2f6de2911cf91a74c42774602 +GIT binary patch +literal 391170 +zcmeFZdstJ~);GGcvPeiW#RM>N)kPqv2pB*SyfsitMYJ2Kq}6U)hz1pHYpuI#H*J$> +zDJtDNL|Z{^caoZNsnjI4-q1Egi#Kc`y?B9O2t+`U##HOw^^Fy@d%xc~@Atgt-RC>s +z`2!!Hm3bX=%- +zU>Jd61cnh9Mqn6$VFZQ|7)D?ifnfxO5g0~b7=d8~h7lM>U>Jd61cnh9Mqn6$VFZQ| +z7)D?ifnfxO5g0~b7=d8~h7lM>U>Jd61cnh9Mqn6$VFZQ|7)D?ifnfxO5g0~b7=d8~ +zh7lM>U>Jd61pdzcOlBQT7>FapB}3?nd% +zz%T;C2>kCuz@NnU7=evH#>8yQxo*agA8hF}|NC0}{~6`)a`->zknSAGtsHFfe}lL0 +zIQ*YEq?;qT#lfchH|n3x!P+?di#cR}j^u8RRGE{f$tl$3tTz1@**OiBIb=U)bsI-= +zmm~dvledFYSi@O;@W05;IbZvZ9P)aOR1_Y?EC14eJTQ +zt_ETHAWRn|A+f0YgJf?IS%gL18=QY{u;~6EV!ngt74ysd|7TXEOY$%ho9Xe8SYC?t +z!2aOXYcp0$CocQVnzjH9hFT*h?{W)m9V=z;JJ@elK9buR!2)hx4d4sUQ +zAi>$eq_cyPD|D+-XMjiPZ+Urd=1H?MtXYD*1sT=?!NjbI1vJx3^5Rnd-_52dmFs=o~VMtVSyQZulmHG^sVIn5Hgyrt4#+_X35MIlZg;DxdgNS!9 +z%wNB9P_<$ZD4+=2(^#a3CIIzS#e-TMwj+e6UovQ3I;fJ(ib3IVik_FA6oDiu +zgZzvX&hg*8OiHGxFp(aG=*q2SlQEr_PF_XFAn)Uy7?!L@cy=Q2NJ=W9 +zVA({>Qy|EjpCL7pN000-(A|1WM_Qo5vh*laS8dIX#&kD*bm-V)It%oOU_}BQX|+^H +z$y8OD48vsVN1lxW+4x6qBo3~gLN?DI!mucQFz-#tvZwbgd!|FO$(Xm@C|vImUc9-p +zTpv4Fm_q7O_=N?eu7JNmKw57}TW?96xAHulzv1^{sCHbSD8l^t`_eH +z;g&uvAhSqe43@0J^0EcI1(Ij>ClHYyghzT{J|!11L`7JB5i=*M0Y65FcVKCP@+4`B +znk-i*aJQsPn+`Nmo3LYk=a>z|Cqz!v!ld$~dHBcMMj%!^{*btie(`5$bcLn&O~n$^ +z*An|#hUVBt2UoZY9XvV;;fN_rjVgWEnj#55PR`g!l7*3;y!%q&C^AoL#W+%{vJx95 +zmBy=d*Hli=O{e4*2#{pG?HqgcWwoT-MV70M`IF?$^M^+APHy?8ce?-iMnBUxO54dt +zty`^<3$|k;S}C<8&4s}P6_GRX+m-;{vA9{iDeT+(iD|Pe=N@@dtXQc4T3P*95<8+# +zU^lRh<=DX#foY>vcHtIeVB7UI>3H@}6mJ~sM+zgQg{8k29+!l7kmoiwe@9_8N8ixg +zlUCGWp;GLUUOJ${Zt7cgH-Xbu(=F3;F4HVq0@IVFlAKXrCr*Afk{5lc=lm@Hli&C` +zuPa5zA6W;jrtfX0K^HbC@R)8o8%gU`bpz^cM7+J18qZJn>jiOdd4!mlNI=GsWft17 +zKtZ~VHeD@XX}TvBP7E-qtynnSKC}!nWCcYKE`7|4iAK%zjBO?%jZ>QnT+Ra3IlpmV +z2k<6e`tJM;_PC?OnRCe}9y#-Fl5?%5O)jilV9K&35Xu5ldR2YSuNR8O_=@(@MMY3_ +zz)B;UOwxp3cA1`o($X_(Pl4*X-^s59q7ziBTlvpEp7^i!aj1u~1DzmOC#T~zll@R2 +z>n#dHc-dM?H(=G7Zs~M4o4aTPKt7KVuj27Y_&)cA{eHACMS7&Sq{8iEr4?4dK(e}$ +zo}Kf661+z +z?lA1x{qJaQK9-d%{m}XVj7dSKgRJ~!yFSu$Mr}%QL5_oYa(@8t*Ev5vJCl9#7;)(* +z*AI`Z4y);$&E#-l4gqPp*$Sd^2}I?5qmZ|EPUExFN1ks)ASa0ekQd+wCNdrIg|Hz8 +zP^5I8&GgmAc|0e~v(5k~Ks82+Pml9fT&Vw-g +zI_JA*XRyzMFq{CUBzZSmcUw)HeR7j-b1*?}B= +zPi~&KJ@m_a(%b9MTR!iWv|IV?(A4NrdcXS*VgvpC=hP4l^*6k?F$8-`AZmF;&+ZYC +zo~cvtgUNgpNOyMT2yD`mzWam&!%Qhw=%>kai*=cjn3)UTm>x}Bx%Yb`X)gmJ^YvWmDvcmaNEt79w&aUlLsLG*~MVfmQTfVWzGy +zFUk7sexbC$nk5ZK6 +z&!iR1R=oHZOyaXmezzwgPSKo!jLZR5&Vc@z0dw|%GhcAzYss{YTMEYWbZ=T$XKzdA +z<@o6gR^5b+L&}|=KN;A^fy{`4apHK@jDam`wLkX8^nu^kk7-p4lMEy${vOw~GR}6~^8wkbI19L0lYoV3NY%Rpvdam73osMe#L3au{&CH4j55oGQtV=K_Gl+5R +zTHDoYtF| +ze=uD@u6PFj1_}LmT)p~nb=fNq`l1*+uC-NO1FWC$J^mSb%J5TwAKISRTvLyKFY52t +zV*ODqy$ulA9@OH++?%wD2Dt>yedPpuNIOFkZKnHV8Y6t^v}ICLC#aHK_ +zd6je?*lNByN0Sjdo8CnNUEvy>e9w=JDwKMq^y-kW&zqiM5;OAmM1m5q7BCj2Jh2pq +zv^CTrrMDz`xANpolCK_{$+-431GI5rwMqhZbg|FQrA^z(O$n@>DMS2ZV2ha&xm}X% +z{aB8Dd>l()MS4CDy2Fc|HYL&%9-Eh9^_9aaewy>9oQZ{}$ib>DSeN3B^c+~*?@P%% +zK|x~vcZ|`BaR-+E3~6hajEO0kCmuoanr9dj3(9<(W17c&lI?09?K&@An?Y`5$i}mF +zpR|4;m{z`=xjtxx-}2}Uqt>Ua5GNn!Z?%e&+cIWbB~#U@x>}O%~2%NFfN;N +z8!8;wbln%@WsO#hKd{M}Om_j$D+A{UU?!2QRlX^JT><9%F2>oemeH_Yl +zB7*e7@8dZ^x`LqX3@qx{)dt+Si%dESzwQNz#y3NbF;z#dp5xZ}Bd%g?VgoK-4{LSU8r=z(8HYqyr`wiC0WUbHww;M0%jv +zvQ%+C$B;SOUC5cqb*lsCar1TW*w1W~HHdiKvX@2TFC@Hsvdd9oS+M%dL)q*oEZjEkXGaa@=IpWQJ>@wKGoo_^C+6poNPD5+&y1Jme@Xkd!ZOJc*`FAid% +z62wzbxW4qNWe+AEo78|uyd*YFjo>1lcmb;cSA>rdZkdQ6>i&2va2f{1J0ek>B6E!X +zH6K|;08JJbcZIoM3Wr9;^TPq+za;n)6H)=ewF$B#{))E(EuWF5BUa%TY$*Mgu;xfi +z|H@T!;nlXns|dBW-ZTnc0Bobyp_aU(eK2L83A1_Nf4GqieC&Daw8#G9sLfkTsE5nLEDeG +zA^Kfg%L52o5L4MGfPfw0VA(ziGyVwM5N7`ow}R0N6-O|YEp%bm2;A91J_$4a2-`r-Kw(L +z<|r7saPgFI7%EQ13d9wUNo6rG6lRP}ePKHX_QyWD8A(thrNWt++nGP&qy>8Ary(mh*wV*t0!mN>qqxsdu^UV{}{iTg1E-0DJ^nd +zxA3_jVNj6br?BEM4lN*VPHMIvCd?FgZFhvf^3}HAgyno%gcSa%75PviT)bv1>fe!! +zXG^IjcRy(vnmc79G1d$!dpcD%jcQJ(Sm{)D8dWxxYEGqCFtesmWs@m-PNh)B*kJpa +z2f~>xt}}OqooCS;G+i+b_@_IsSOs$Gj^en}IX-y}SFD5tLlfW96fAym@=Pv_^mD04 +z-&ASz?rP!;HrxQD`$0^Ua26Sey_i +z8_XWHxhlbCK^$k17D_06BL +zGl${+h9V8zA_(fvg(GOV_`tALSpC!7_tU_)t;+E|K +zg#|jV94{VED4w0XcaGbW)bzLh%D?p=LUqVgZ>>oWY^vxleYLe-ZPD#M13oF6_|3o} +z{agf71%$;JF^|jJBCO(6yd4|orv-I$+P^q@QSsy#6kjD3hs|%m(M03-Q&AjDu!mD% +z`peF+6w?C%i>pcVxQK~H7p?7A^e0KrSWg~c%w)@cB#!xk4bDI#E;8JIjnqxuD0`Zv +zU)67187O@IVHpqWh$#-@ix*3Z!?@zi;Nma>v>FZi(Hwdh6wlFGs2+rD-dIp$7yLlg +zM|03LNSHge`5pzbO9sl0KSW1BljM%g{vA?4-g2SVP`@%Ttw>rs0d1UG!gdz~`yx%5 +z{U=KT%G1rc{nm1csh(dqVRJgW#NQUmwVul;E)970DzELC{?fZOA2Jg_s`~KKe#s!& +zk2l}dF_*h%n?Sc<~kTuxGY|NQj+j<=22h*!C^uC7WIO9Ey0 +z<|8E6QQ6rH#Xd>P5q)xh1P{%1AC}M^<)V1Rc_Xo37&b$jffXh6gFcYQZiFuiH$-dd +zqLy7HUbxCYJQUh89T8~ +zVI%|pmC|dAZiZ*M{zSKKzTIb;Sb11)5Crq;A+8-)$zI{Fshs?ID6XluKO4v3?LmYt +z>-jm)WD;0xmLPUPfT1aPtN9$^z}*%sn~$jlT*OiSJ)tbtJc1DnS!3&s!| +z5r(ELOH-Z$FF65f-BuLg{sIG6ab{G+Ioi|sDP4LuX3=>-)aU9?_BjY~mBitvKhcNo +zBc#|NsW_;&^_fk5r~-{Jek=i=45HN1%dT3w=cvOT6`mZe^W5V*ukrQ!`^=mBB<~WE +zLZY>GkG&`qoU_1PAw_!Ssla2Gxli&c;dJmNzY?yZu)IM!x9cB$kOhg-USG8Caa3}J +zjzX4Vy9BkAHhM*=;2n@u5)w6GEf=&_3!L==6UEn2qDxMruc1i2wr|y44aHYd +zqdq^`wWqBKiXSm||}C`osV@9_{$ +zO3(^hqDInlUQpU$ZREq!SbDVd9qS<9Ge|<*D@u0B)11wMuJ`(&7z~k3GzHqQb`sVf +zh*k#-8fk42ta>;!c=o8!rnmZF4TP%DQM)|ZB2P*n0Kn34ZM0IVi}65Ls`<3jISf9u +z3@uTDURX3jd`BR=6ppws*_vO)isy`Q-xA0cg(D7~uo9Gt_sk}ak`xjJeJ>MWtWxY@7pYAhDVD!bM5<}5wh3wwMbHx}tTiB0dDX8Lbb$--nWr6idFrFPp$rNYw%swzLB2c7Q +zA<^IMg(-yQ8dpeQX*?%rj-nukhd8i??WFZL1e6=x+~SkSi?h0{*RvwAF&_N0R3 +zia!Y!e=SgaVN3HlU6kz=8>+NUp@YAn(=Um{%r3t0wMcPj9iDfF+_j*Nz{Ih +zFFq2YZ-#j31IXU$5JTzXPoifXibElKYwt0pFV}u9L~$_05R)zL#q~#@6tbTSc7GkB +zKm5;lg!`)yw8i{&?>Ryp^Q<=JnQG?dAot05v!&Otbj~>fy)A~wK8WN(WT&Dz-mo;s +z5cOxpfe@5i947@_4133_{@$yN5s1cDYBX7;6*EOkk%7w0Y{Pcteb|HcofkPZ-Zbfd)NhY{$jN=LZO`R^p)^b4ipqydO{;tDQ7^exeYR%ayV*II^#&n)J^qE#Kx8QUky>_@ +z)F}yJ-=qW{tCgw^)_p|?zeq^nG`CPqOM7b&&T?W%lzp1A$3)wU777;!pt1U*-maH> +zThC^w3VT~G0VAV9QGsZA90FHN42YJi=*6}ddaafWP#T~dov)0bxfOAh`!*W??hl-*qZZzHrdRpZ0>dPoq3C7H{90|)0!Y`su2(82tLN9d +zq6#4Ddffn0WIuP*Ui1?5$z9^#l-6sBdRZ7psH0vqv@w)FPgZKOv~ymx&spe-lF?OG +zeFopk)Lw7ANx3;@b-7?j??a+@l_}z#-eYWU)JtfL>rd}Ol4X?+zG|^jU9<=S_E17x!gw(iQsVLm}1#xhYI5|igDPvndCbUH_EW1v;aGilhf^jk( +zg?n~w6W)y$o)LMYUJ$-6LNArQ4~EaUT^V#!F;lehI@8|>;e`mz4}`EZ0+hi-)>;f9 +zpl>O9W!$a_P|Oxf&tpsMHpE%BideQ1)_q}r6f_tCMasY^LTH4&=oN3&qS9a~#m|g- +z#p)!a${0_%09LosK3H$))d+x4D8>8yORpKg%(m;cTQ%dhK`M0hk4Chybc$W9K>IU6)k4b2C#9df9V=w32}#b_Vo;izD#>I3_fXs +zMshUeBw0=`J?bS&IC>vVjVqZ4F+;RcQ%{pKK(f6|Ks{SB9p#seg#C)*75}|+4iUfb +zaG1jjX=_Kci#^1aD9f%GgmN4Hn9 +zdsl!yEZYhjnxU~I?^|X2+)y0`QX7+K`Z@y^@~JCwVaUU?H&IXsMUr1wbq(8^*HI^5 +z8+_r_YbZAxdYR1Xe?(V{NdsXSy^?(p2)_i*6!uDX4Fq$Cq!DphC6vZR2*-3lvsWp^ +zd0`dt0xc`Diw=amI?7x0N;Vwb(fg#|*Km^Fydn|l#)AV7){`gupb3lvPe+K?2tYOI +z=UnkEt72->a>jC20=IBkMl&pMIAR@mK0^G4Kv?gu&$wdFxPp$lA540Y@uJ^5+`JbF +zx(pln9au6_yjmc<#HwOcaWuP$Y)Iyi9ztUx3^A#t1NNA-)lR}QD6l&C)_Ojy>mW@{ +zu~$kj7n%rZqrl@!rtP|=X^`2Ja3#+~7&xXmdSv`!VkJ&R;TBKX^iFnyOB +zg=j_Th{>zgq-}IZCg^XvQRE?S(@nRK=Z844;fndAub|2C?AVEGTskGnZu7chr@tPX +z``4}x_l+BF_1XKvG+yyaQWz9s5C#4|ZM0S%m`wn1@N3=0Z|%3rz8sGxRC`OoEiBte +zc||ileN{I_Jp*&h-TX3w)L*GYDIzJ)n$W}a3ibQTjrsJ-H|@( +zhk8gOE;Nz8FOU8`xzga=MmG0S7roHW +zo^@UlR7=W#OSf%&3|(21!ZmD)t{YSFBdRd22lC1^!Y +zt*b6kpLi%+e+B3a@il~<0hoHd1A!41 +ztj;tW)qpYtTqQf{9>8Ff?6Lr35vHTtEb_oIC3Oc!A=25~fFI8tLU!37`UgB1M6(R? +zc&$8vwf=v}I?ZTbdm8SfTL$vlxNSQ=B3d_+n`z7yvqD(QsTD(jRNH-=*h_ZWe4N-y +zcER|faLul5Fb1rbDY|;eHW#Fgb^f}|1!)WasH^qW)t2m3`|7Gob~VqZs_-2vf;6>+ +z?97kAH42yJ(%mS_{iBxGSIb+n)8(t>D%oWN>XFuS+iXxSdkrWFZdH{ivaCo0_hinra|$p-mca8N6_leMC`YSBCmIECQy +znS5T&SN{2O0WENeAs;LmaR?v%*Cz=HA+Q2GV(;c6?y2NsxYbH1#$pw5rLIU%rftUj +zSa*?_Zrm=u)%qqe_0?b(@t}B2fMU-mRg_yfEn1nPX=Y$z!e96K#+lrzV8iKqpjm~R +zxy7M)a}*XkVWH*pL*ZXX#OBN_UUu_p9}ch0MLLJaj`h03SZWb +z*YuC@ibUW6k;C3JsM$%Obgi5Zr+PM#$RY|tVJE*}phX5bpLL1qVz@8hXe1bCU6}iB +zR_`YQJ=HVgEQ%K!CaFcD`f{~ggwm^nvwwh5L2t|{klhE=l3*kk^z=M+->8V`jP!l?24=ZEF=Df%>uKA +zYy6pA1yVWf;0FIDdyloAG{~o&+~D6<+0*I^SAO3E=o?n3b`xIFbO?G^s9mBN5OA&V +zd6D8R6JXO!fb~&209$HUNPOj$<+$=gKcW9k7D+ +zezkW$-h6`6rC6Jf56M|^;3(K&$o8rRY?ssgJ4`ei47R&) +zmIEg+a0TrKm8!>*lypUXPLDczqw!FDEw0lA%SsB17WW|b{IZ@5c~7!!M%&Xp7mJ{n +zAx3in_S;##k(oA;psq4Df(M^cR$V2cZtqSsUP`H(FTRvw7YV>wduTq|Vlv%yFNuJ% +z#SuvV*B<1CmlPu!vDszJ)U}g +zHUm>-_bBN!5V5adZo4g9)_F{y*<-%njas1lC6hKpm)SA%te#pNZJ>t{ua0j19*c-S +z9bMLf)dr%OH6P;HF&MPnfV*P#{Q|{kMwI|$BQ|V)Y+PjVw3QM5cLLGGCU+vx}m_9d>zC@jGEqX1uqH-%CtX+VrtE0;*u_mhf5RR_G +z>^Y3rMZk1oCYX{$c&MAB~t?Re$%A4IM0|IW` +z=sr2pzX72Oo1@F##dgePqx%-<(_gW+>)l<~yP-yJOpoYF^5hXi_Nlg}Qa +zA;?p2AqZ%S3Ha9zv?!>>l<=K?xadnH~OL$KODV-i#I=y +zu}t6xsKw8*b#B6WZrkbT=I7vWN%0B0;t~pbyc!t4p=5K!r!p^SYw^-X+MAA_{P2y4 +zd3}acmhi!T!};Bu4VF80uUt^}6sE`?RhI+;qgvCg9|j5LQ+x;~Q3)3; +z5uEdNqu}Pp8G>xlo$9dBFoa+4w=_#I^i)-Txd_dL9kcR>jb(SJQ%M&rPYO2Qq{kmL +zi#-PP2>R4Hz;|BV1_m_f7+5|a&%RV++{i~^hm!B$Ln;PND(Ptzu1I9Sq~f6sTDicO +zz<|?+l@~-d91VGilr7O>QG|F$%9&)ONXODZCQhbN55u0k5$Pp;nv7s7i%TcF +z?_nL&zzmJZoiW$JMFA1h+|Pw{#AR=Xv34Jt1PbCA01i%wb7?M_Y~g$Jj{aAAjzc<%5GCO{mshI?s7b0tZ&J_ +z8(roF8&bUo^UVTtP&ZJr$Etj`1_W*UF58P$wRl@VH*B`*@TL*n2hX6YjjO}iE;e1)607Px!&iOe^6HcxI40f#V8iHZ_r2HTc4@%nbA~)kTbdS{sy#aK +z;H&$dB5iND$F0w)oaXu9FDR`We~`2eT# +z*ZuwY#ptrrR8=wxgM-P~bOwyj)kL7~lgv0ZjLK~A4K~6JC`M1MLXG{{Z%Uc +zDwnQ~4g+!^c7<$X*+j7+c`>&<83kh@Qn;&sj8Me!Ym>!uxbgL3GmWxd=Q6};AW+AE +zPZgtBj2mZhBj)C4H)Nt$4_PiopWHS2#u-;14qldi+(?YlwPwxub8Cw=yNa4Izyf#f +zV1IP>ZpvMhlD!S?gsZSOUUQ+ppkg!`Gzr{xM+(EkcTp>9@xjJoW}@V +z1Dqo~-Z4XRJkPL9h5oEx;Bqr2wN<%J;qP$I&&A6YVCZGta~m_|qfszRh_x+s-FVKG +zk>~2lrkT->tFE4}`4C)G2<(LkCexlPD{)pX_W57&vPGCd9&B|G!Uh^A*SMXgL552n +z4Po!NT^`S#LP`LTKuY#B3=xXiY~fFS!g{|u__+59>XKw^Kldg+xn1YnB-kvdj;c74 +zykfLLn_nFjUT?_Hce5qJIa%%sw(#oHD7-4_l%Qf46tHOX!y7I6`L#*mS-As{VAtmN +zXTWlrpU+}o&YOa}8EF~2x9@&iwG4Xr0m9i2Mzqwp+b2~lirXe%F*-LT?z8-o(UBgD +zC|Jk~<82jQ7#BP78N=BJ!nc!SUz!m+J>4J@7OzZwFiroWi+0@4M^%JeUOz +zo$`a@@#dx2=ezLi_b}hligw&it(;a#@^QQ5^2rdejnk{)D655ExQPHir?Q1qf8mR& +zh(ceqP)SHz_<2KF`@W@1ZY6Y&qnGJu1z{=|6fPm4Zs`R$m!s2$%+zIiXu*88OPipR +zi&6}t$%TI>bOu85jlDSPwWfKgSix#y_W(=tq;Lzebpiox4f;{9IT|z +zIK`FTuF`JJF01S=Usm4-jTpw!J_}0%T(Ds1ZcNs>C%f{W_vSCK$zvsrd^ivU%|#b` +z)dCZLJX@`OUKT=VwF^Ez%=FdXsngw5)(Z^sScoQ%+a)org&Gi*)DrG1!IC<{{o6=M +zJz-20O1>bB&S1&j$qF$W*eg?0pKpB^#pv~2=8`V-zR|hvB@Q{H5Z;iyh}m{a-Df3{B(pDZU9XBL1WsZ6~%ZO +z;mnfM%41k*lraQOK*hQit8AbJsK~Ci0A0Ph3w(_*AMEq7*$lK-T1Yrp3QMBCw97o9 +z3muitCmenXbE1BImpQNtwMa7w2ca<0^A0AwOEk6g5FA{Bs*w!xOD{XG&;sbWHKco{ +zHiuD&m;LJ_AET3?HA8|AhzW +zrtssJH^-lNBM3`Gr(^}mZB(&gW3E$x=z6gGm>vpr?{>(ADIuu3vW~aC+QKwrg1!u2y +zGB|4ss|C^)!D_(2o&?V@?E!|Jj7~p{##96XLvfmrZrxtK?BURqOnQa +zo#bJiYvO3hh(FIpSr6V1p8y7D}QYjZocT;u>nHc2P0p^3 +zPDB1$XaaG=s{s~ZOy|2U0d?&A-h&LQozTD)!sD<~(bp*GblBL^M~rkB<`0ZL>mX%( +zG?KnrI!SnyCH7|vx3ExXanLAUzwEVOtv26#`l0MkLbxhcYT=+ksJS}y}N8r}T0WzSRM#s4A!K&UI#sk82}*J4^2`)g`Z +z(v2ji7v?w|d3+1&JE@i@mA2EdZwS!NnokH&NJGgMQF2~62!rozM4nV>hcN>@lbe3H +z4BH2&2i^9KSu#jE-Rt8N@3?I4fGl(X04knHUn|~6W5xQ4l6^KH+b{s&9i^K0QFefI +z-Zh9dQn0RrC&5Bx*HgS}vUlNvvf>EE^7`~k6+U`Jp#ITi^B0%l_Qwl}6>$je=~dzE +z6(jU_F2g#3_PPraWm_Kk?mK5-O}j2bhqdu~`nyVR{)&!TCW01EP1ZTtC4QQALN+tt +zAOx-uvM)!RgupFAHg*K!45VvCQ+ikUnf^}5W(#ja;8Q|&cogEa)J-!eZd3ofr80qT +zY??v*J5?1Ztmm>>|eKu9@Q@{aWZp&KA>f4UYWgH9JE +zSwxczB7jQ*m*!w0H@OI@mM|p|QWbqa$&^B`2Cahv6C8X=2@R+jc)Xh>&@>99jijUz +zG&NZhPn@hL93w%@E3KDJF&QT1WH{Z`&-LW)<1ew##BU-Zr +z$}CdnGY4U3VckXOs(~rE222j|#UA9|z6ytC1R4)%&@t%V$vAdRJkI)s^6?6)N%sk1 +zJx1&Z7k8k2_mF~yxs +zB#QK$jJrmQ0jxiI)n$twLlwp;i58s_?t+%;OD`KICnCHe1zvWKr=LX8>l9qqc{(I|qm^Dc?VNE% +zt6XyW>_{7}*2bbAFeJ<}zhO?&szh|e2m#*aKWDGiMu +z;zS*-0-~mWSY6R-yL^^i{uIWM!Xw%$+*wX`1z%PwE0xNdYWYkjjZE2j>XQ+6`AjGY +zeiV6nw%s@X!8|_)5-fg)1>UxHe?9xMxwcarlc@K*Y;Nl`Mknft%Vy#-LZ{z8z2$U? +z;mr7hJAXqv&Ddq5<^g)!Om&Ji4-5v(4PTv7p?Tnwhayb%dndU@r(9<$9}NNyd~Rl} +zAD8z!2BF#Xa-12A!877zlGQO}VHRH!vk}s&=nT<9EYJ5w3JAft6!mnH`MSaaQ~FNzTssot>pO6a31xwd%ch4z0P6*%x>!A9iyS|67_Pz`jY>M_sgY^B-URy +zR^;}Mz@0pJ?=*g@*5(zz4mS#+hFZMZI~JUmoga)0QTkXkpY5y)1G@(@tHYE}*rEB+ +zTRYWpuMc%e8@E~=f?49;*x@e)0}l#Y!ZBOiUo0hSEB4ys)|}`08RFh@B20C#)9IsI +zd7$%72waDOqIW}_KDvOKu^muTc>lN;Fn@bzQA6h&qRuqYT%v&~3wy4Ck!v~F)ISkKXF!pq(1h$p$)e3aA8HSb0 +z>`{z1ZD*IZv*y^dHM1rh63iHRa3rs?ptD>=dp|^n1nX8F)H6Hb9yB9Szqu1Mgcwh3 +z?xV~fbk;QTn&3O58s1pIL;be*JJ0X@kfp}DHg(o~lYL`jXU$V0{ld;FL3uJ*_mXM` +zToBk%g_m8Vnx5}GB(lP;O_co$)%JGh`7pffC#p~2bP~e9-Bjgw-VxEhG*R>SROOqU +znw?fz&TqBJhXhhEuNy(Tg7In<-n(%~1d0=Ad`C5{>}*>Jtl+GPSk25aXk=eQD@De7b`sV82r}d0gcC_n|;Py)H1yQ{3XcM^8 +z?!oRPo0PPF!gnppDtzT~mB_FM^GOKnZOS~MvuT1)yz)W3VlO232?}AS^D7}8WH=pG +z;j10xq8k;CLVEoBz*^$>%ga_#m64t1$j+L>@6}8nt$3d&0&f!Cbfz*lBtF1Uy}Wu&TjfS$^am8MrX~pc`B^4CJpK9 +zpAcbXQF#E(*;b#NoZ*|=Y4i4cgnyq%3Z4(Z<;IH+xEUq|`wzyHvI?nlmCpmfK6v4E +zi21sM#g1wT%^@0eFU;&D08Qysnb!@xS(dnhzqo;=<0CT +zU;aLO40Yp@qvl(j6+x*kI+RHho&i`E5M;M +z5v}(H*jTBlZ(D1N&dwk#@$X>{y>nc#Aqr}O5;#I8k^97lP+rT`G;Z_bCDh1o-E +z1pW3}{E*UX9f-a@X0CK-<5Y0n3&PqG6(~G)KF57&qR*b$YH-(4wV6qq9ToQw(Nyj@ +z#5}mgKRjz|%E@iNf#I83o?m)T_k~2cRYG64&D@+X9vioqYaAQrAkJ}*`JqMb55mfW +z8gTd%IL3+uAI&s4(N~;HM)! +zrLBo55SShpL3h=+&(A-mrG3O~oaPRzZecsC4X!V9Il;H^g!6;Tl=&V7k54vI_Q8iV41 +zd3^3wacLNB*bTL*pF7mtjs)}Uq2^{g#5)oe)6Myb`JqqT1W!A_|D#EuTNg(_>&Bn? +z`k6ivMI+pQOAwC$PK+bs;P0LI(YzdE&b?>+i;tI~c8uW>ySKmrQe(2=@!PKvC_uqa +zqEDU0qa*b34*Hdf;_nF^CHe`DxjeMW__u_XdVQ=To`?SI{xG3pC*8KO6{ihVx^u>$ +zh{yJ+d6WaO(r7zH{98sLYMrRZsN0bp*@$>A6ImVA7ni*K}(?rBH@kbHHlAsHj +zc@F-?%(BZ=@rLbi#I}qx)Lkpx-NSrV4<*l>4W|2aV{~X=CTx29GhwNv{W&njKM2e# +z7L7#dD9)nO9cI+Qp+Omwe!RtS?@O+jqyM%;95zzn;-6x`N!n?KyO)1Kpu4o~qQKb4 +zuYDi +z=F~fQWo<{{GHiVMi=i#aa65yE%_+#sTc9a0l^1Mgzo=NqEc{oy4A^15@ +z=2ljBl!w-)hnMr}>(Z6V1)D>k5Fe7s`IQ}2Q)c@WUkolERV5BD53jBk)5S))zw(Fq +z8D3X6CGUhOebt0NAMy)tG?^A0h6iC_|H0F{2Ao`mx$jeYWk>BCg=-Y~uY3T@WZo@O +zdJ}AFi@)N%M9fcGxvoRCuA`2lRGQh#C$!uYzneIdyGHks@ts5oT#GvRJ8Z~F?C2Kr +z{&sN6z1HD=IbkLj2GVS3pGla&!-Yeu#+y`2&+Tq@#K6gq*u6^#p#MGg1OjKWAdQ)Q +z>#=V%>E({h^V7y3 +z?xQ)1*8BPlTKkoDfC?r}w7Ub&6NfBm(8WL*&f}84YKJ2E(T^5J<&B?QVN*@%P!{kP +zM$w5&9>oUEiWN;inu+Mk*xDr&y&OQu5c}ydyl#GjpH09uYC-u5bOzFRixQq-!wu5V +zp|UWa=&dXq(J=fi(GLzY8d&aR(4V{O*9frKz=e=wi+t8s%^&+*psOJjH>i_} +z!@{Nai-Kv!ZLy!6&VXM_>^}|{3yXh>kz*YNB27eJI6eR>mRfm_rRm$Cm8GRw2R>e +zI&eKCmr1wURkzxw29DXHK5!@$!7#Tht@O6<)c$^$K!Lv7O=KKwx=}FPOQ7lZwHs6Z +zgCSoO!auB@*hMsOZhiqGy6$BRm9`0&4EcmItb6r(&=72Zu8Vo +zn*m~3oW8kTobPK8@+#!?pFg4d8#R)ymMPLmbFzxF1|TdFDU*)2lTk4h>exV5tZ2wD +zL6cUZ5Xn43l1dD@Oe%hh4GPUa{s_e+>!`fR8);aW60H@SFyp}qgMwHOeAwvQ&F3$< +z^PaSA9-t2b^?TaEhcIMi|C6sKw=YlE-u7vG*Qf2ac-u8<3jb>5>OsXU;g1jLHo{cjvqT$k)wzrkGt4};YV-Y%(D|N<5 +z2I(?zPvtRTYfPc<=t_|lXEynGS=rupdyQnD +zD?!hure)ec(|q5!6roWe^d_3t4tf$y%B72V;T0BG7X?#9Ze=NT%6zqq%*@;VzjMw) +zyzlSr_xpU5Ju~ynGtWHp%*->-%sivWOI}-(kk+2agl$hAoo4KRPR-3&tV +z%tS~VMprvod=Fy$tY7D}sr&$E`>~VxO8C_b9~9(Vr%gmi>^9%kWPfps3D5kv2%7|5 +z$t0$BUwOk +ztRWLYYMBkF{#msKMxIktq}=iWg8R|xlUbeiXkrsP8Uk_Q{j%9+=q!WpBQm8^{Ly^z +zj}B+xnX4Vu$LKcXX&{os3Nl5Jo>$>mKy@Rw>gmqLk|P1QXbDC*qb4A+S~W)!8EZ8} +zFn|EQr5;xQgRGuVAD09UA1 +z{W0eiYRs0CHocfRDPT^H>NFOflk`HFi}BiY1ms@8U7$|`NG=3I&qU&na3_|xYG-Q8 +zhBK?k?GC=(Y|H5=OJcqvH#>wjbJ<*Hc0;;w)>WJ_H8p=)W8C}<#&`R3`IGRK%BVJ+^YVbWq;@@i9H-`6B_&B-Gq0@uy~22aTAEhy*FZnNFD@F^2N? +zIht@JK<2HT@;hKcwMyo#ykX_c0>~OEuRM}iowV7>L$p5jk0&4p|8wm8WO>d(^V8EK +z>`8N(Qnymecrm)Xprkb&y5(N;gTVd7AqC{Q4%^NS=8EVv+ZJ||RWNtR>JHXvE-PWe +z9{bjJ{kLjo1*5HgH;0LM>RZig-+FKRRs~6~!VTX1(YS^6QBIkG(clX0-~%5Ql_jny +zWNTdWQ_C`_C=bb^BIw_FW^M-@JYbisVQoV;58@GuFCAKk)5S$3yK1)qjM7WtID#Ef2&+GBH&@Pw2fZ0 +z_O?<~_E(#;6N4Igz^!#$`C%!Q^L^eHXw%;G+dHzpo6qg@fm +zsIA9xgi=?Pce$E>-&Gk1s>`+FTaeKF1sFzO#z(>mRet!krT(;-?>d-8z~(Qu#O8BM +z=;lJ3PY2~$O$WxpH4bb#OI@WSHvNbcKd%E~Rl#Li&r!*$@$Ep@#79CMolAt)SYe$u +z;U^Ui5r&`cEc#(!>JLl9eo#TI_#LQl;^e;W~i-J;)@2GR<> +zDL307@p!Cwe?Vz=W4O4%m2g;pDaR`=oMl9r +zq+f?Ezny91-!@k&Ia4?{b^!No2vhl5M8EwzxR(aQSqHOF>>36^Ji4GT$iHA$l4S!c +z#R?aP!DR~4Ul%V7lh&eqTR)uA^zwmOp~go}o56kqD7QYmtRogwNpovddI!BhCw*r< +z*>RvSa7SLY&mc>2AbQstZ^LevKCYSxm-S-`NNG)@tL;c(vzZBHlvb)9O8E&oDm_HO +z=9x2hMDL$pQlx1vQrU~t6-7ST9UccN=T$rBoo=7kJWpkxr>>aiW6hhFJx>EYBVFF> +zvQ`V9LPF3lm@^M`L_Q-Nik*eC8f(dQ=5wY$H&Mea_2zO^T#*OkwUaORtny%=?N{zu +z8OTKPN=5$UwU3Nk`^a?DB&L7Fh^LB9QA}(lMHnGeO5;G1f(!8ys`^=`k2$&)v~tNK +zxr~Wi_FPM0?1AW|x;=-E&_WE5CD#42D +zZp=XUDtN!>tL-}tS!ZcK>t&-+G3A75ieq*NF4H^D|04tnQUQDa;`GO%k+nL+!Q)cpRyY1a}-XeXpw28c#Y;TXmSxd%GoP*5#7A<)j +ztmT)PNm08EpF5fH{KIBa*v`DpE;W;_?K8DPhM5$gQfru*%wm3)nHj@oQDRo%j}Yj? +zuZt62h#MCt1XJR_WyDQ!{NH<|NlA|2Z)lh?LMB7jx7!Z1@e9r5rFQJE +z@Qci3LwlrFTx=#UqG%q!>p_=@_;nzGrazB(5gFD|dKa2427j`)9ha;aCZ3&SR;v`` +z896wfooI#$#m118K*>I8X6I|!1zPcIjm0pSETZTiHIs!vD?VZ-3wmlMK4f+TDl9>R +z$vj&5d1jJIE1zm6b9+F9@n*HJg3LfVSU6A^XC~7C!>qz2JJw95xZ%dLW6c=0o&kT@ +z7OABehPU;Od(@uAm&S4WKrKWhHsFI@5B#V +zPjhZ(h}KO5A7>_a+HCi=QD!MSrdV4JP74gJlJ4>hYJ734FNDVogWQ@Kn(QD-I +zqD(QyOv>D4@*z~*vl;S{yG%CNOx|y^Mb)Njc^s^Jz1On91XA#DdF2(s~e!_e^9K5DQ@7?4IVm3%7>C(+rvC +zMl9Shkx6YfBdzK{;kJn+wb?ed^8HXg`dOKVJlJM?kd``2{KJ%6;v(ZvB=2V?W8Fpa +zH%(-8Pm#j!CNdmF@?cY;^`Y!VCU4q23bU9? +z`)@Wjk)W13T%t=OC~)9Y8rMcCu{&r9*IJ@|$hB5mY^(5xi6~?O`d5M-#b*Z6J +zDGsCeiAvGi`M+y~jjH@D!1*#pDt3nkeLR98zqUd=e=})|bRA4d?JeC7EyY-Ujs+uC +z_QH=ZHKT4f<-zci7mR$Emo6=J^A#P`RD(TeW%vxzk0m;c!$ +zzMv8RALTEUOx(M(L_^W#pNys65H)-%gFo{abjq4m+tzd9B@=AIr(NWqt+qGMv6oC( +zFJL?_R%SQc(NzYOU~g)Hc}V +z^;?;kizZUiYCC>T=rWP_TWxF32^UO4p$6ZW +zr@t|gUG(>YiOtjSXxMOe9L^dE6MV@I#A7HND4sBpZSuDtd%`5Vsu6QE#mX+wJje&9 +zMRmuhlxc-7Eu0OGf;C(?qY-$Bx`wQF^HFe^$kVO1rzJj$^`>H_Wko3ArBt8KH0Q_)_cmoPKG=PObWabXJNy +z(@NJ8Vjb?%TTfqyUbn1O{HKYmXtgao#~kHrd*dywe3gmPK*4KzqvyAZM@*o@Hiv>& +z_r@=7x_Mc5t+-Q*2yQHy)%t-OLDaVrd$>;QlX17hV}-bGv3 +zZK1e6Tp~@TbnYM8YEz!W06mcZ%p_9nM5bkwa;kw}Fbo}fu0s4oyYmrlSupo}0DL3p +zruuM`9w$+)!lR&~INK5yDF(zY*6@L`cvM4k-g8m7SP%-u-;@2^1(&yMKO_qMdJ^N< +zw?HR9G?s2Um#c(TuF^z{v{3LAe@5}#L@gKX!v%YBOO=)palAGbUNp6_aL7kdPv>7p +zZlQ?+M#JZ85Vy1+xpz*S2~xU}x25FTk4#iTC3D5o26?qFjMNsDOj&oR*bOnEozlp)0UYMb} +zut;@bv+BY-LoNua3kN1$xTX5Teh7yvw|8$YnV&cb8hALr!Dj_c< +zVVf%9169IjszWeeZC|@Ndw$`xiVIg&T^RuhQdurBCVwrL +z;Y$vm6UX>T`!|*6u!-{@e-6?(`iJJ9`_Z|QkH1;oT-^1dAuoB&nvqMEOu|{O%uMMZ +z?sly4^m*OZ^#PfgLty@t9mEu;k~dob1P5Wbud&J(XFW14l3jFtKwd^+xvRhecopDr +zsJQ`SIm1M%t%FBV&zv(T-QUHAog26n{kaW6 +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 +zBlot#@w+1Tx+3?QLMSYSz(JUl03{E18Pb(r# +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 +zBu#r@jr!EZcTdg8zFb)5Tb0I +zb4lh5py-a--4B`vo~;yqaWTOT4NN}>*h@AgG*abnD6FYqMDMlIV85=CEsbODOc?vrjxH*7J!TT`|LA9T6 +z5WKDD!7efiumGl07?@^-ee|@mv=$$}km8As9pPS^llgQk^TXX$AANfcTN+Cq +zJw@%Hu;=cLC8?*Vf6((v;RBpUAhSNcLGUPI1ox}AWk~;V +zKCcx8RMg#Ld?WT8D9f3p5r=y-p40k|MnxzMHF%jT*0#%Y{@fL$((_P~E~DS@k*A(( +zYD{|I)b@*6?>3!Wfcp^5f!eMg(>tDP7|tj&AMK*fSzfOZW*cvk%Hca7Ha@5JP*mEY +zsv9GYdtGLL1oY~tlE?{{U +zj0wxP=6WcW*8pt!nTW;3d|2+iLK*dHBRngqZ2xL1S64>xV~lQ=j5j)?$ln{eaX!pI*kl-- +z;Hc8rJ>Wm_rb_Wf;OQTS{5YJta#6tzX_xi&;}7Cpr-q~s<=%+>c+1nXNeN+OAHWtx +zlV|(zt2h@_npE(8ks#uR_n$gsmSXhqop8vY|KtFpa)!UYZ~DxGJ8sartC~v`Q_7XO +z_bD#cHC=izf3^_nt=oZ9KM=?SBgXFlItzt)-yA+IN%y3;?MPE>;It&hdxHn#Jt}aP +z_wwLTo=@$aspaxK9ydkgZH}6L*6yc>*~66h0Rk=-_w7$nD=rOhk75S=P=$N$rEw)1 +zg&eO?lrvRce5jXcl1*rez}5BV=bN4yaNMsXj<8C;r84N6Q7 +z<3eJ&A(6>Je)b>+ryuN3zeCSJJiVl +z5x{Ryl?3`!*awxQVwF@F2qFXUm}hosAdLKEYLg|{+#J-88Pu&D#Hg-ao1}H&G9<7x +zuPm|$Q4bRKm2X!B1>&P(hiSrs}Ki`oobP +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 +zE(#a+0$_ax~K6fe7n(qZgN +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 +zFa>r+absC?LBe0 +z`cE}ohD-G2lGV)3*Mi^!VCOA)20C2Je#up7ny{D4KJP-@d8%7}TFbZemcxW`seW9B +zhFj~+WvjRf+??C_hn)MvTDGkx_nO|^AJht`X>QQ--^(6D_xn-TRW9Z>%40}zE&D@n +zd8pUhwRFmp8b+@Bf1_cvj73=9gC(z4>~fb29Ir??go}OgX1e+1kRoM%ZF2Lgz9;T~ +zrCCVtDQ$JF_+?+*E9CMzd*l8Wn)$^&SQgg`Z8V2W%X|q3-`a}<^?0<_Hok_r!yl0% +z0k<=Q3mVQD23r!t$?RI&XnFEFgk&HXG=c{a#3(Ycb{wWb@pFXa +z@*b+SalkEnh8S7z8Nme)wnT@M(eAuT@e_*bJ{hr+r6CYCT*Aaw^yEWSJbDDwI`KeH +zT>h_?;4osWWll0UbI*S)=Nuwo5m+NEB@?vclgO_dlisxe}mvtz{IclGe?KY1c`anflQ +zK9GrSs>YJE)h-B9P?{1+vt8ID1<7f`vJ3D18He_M*KT_kjU{gFq1(2Nw%t2+_MLx&E3`{e$iLMC +zCk4qHcA@Cs;EH58F~0}yzxKoZaa^)q8qH)8NvBMn`7b}F(<$3bIrJ;j?6r_)Q&n +zP8M@ZLPri+Y!^2I1m#L)7`ViNmgI2qxZU>%BAnr4f`|Y-)$S%CZ*$z`QiIia4y>y4wWSB&kxPhbO5pz!ox-DvAbd&g^JOPs- +zc7DB_Z-JUb*`>uM{{kodl7V*N|4E4?!fvyo7RUUih(OWfw#Vt;P>t4@1dc8(`l5$+i +z4>|dzhR$o?V^7?Fkx{%i0~qo{jga0WpSSM0=gEsT;)3412)a+b|7`acB)!5!T +z#@rDf?i07C#`gL#$j0nGaqrhigAPCI{}cD_0aa9MAMge?s4ylVp$WpUVaEFj(8^mK +zAhS~I2x+BVjuJzfbyB;XJe068HMIilqGrX~Fd#Q!LCRf$O0B5WZkBm6Ys$*X%)FL- +zzh}+944w17=e&P>-}leVtlxT`XFcm#_ciO{!PJaFYUb_g(#x}*Nvyn+KMoFbu&2YH +zm2`^C2%+L_DLpTBqVy=&6VWDQXMLwJl}HLr5(q^R9Fudfu0@ou +zgZXSN`RG$f88aR$J4F?%T}=>SW{sQIsbA~M8?Zr6r|7?>2r^+)n&*0?Q@O@X=9ae< +zsfIjom6uM$H_1K5y|v`^&P7uPNn`r-3 +zb!oEdG}|jGX18=2lZ6iaLuw6g>NF+^r&+H5(rHW-PIiMSUNM~_u2jyo5B$`O5o%_t +zP%%1kZXmn5lfMR0+LbErB$0pa)Xfm6&5iud&L#=HwMk|=!9TVVB_4$I8kM>Ua{okw)MrG{J;)eHa5&- +zAEZ-gC;x5-bXR>?uX(Nhom}3DqaG7f5C?biLp#s_#1pZ|54~vpJNd_urNAursdd(8y2u-k?eh +z&7`U9pe7fsS%^tfF5FtMnrL5 +zu_laurQ#>*oPX}ZP2z8b)pe7zYtCn$JhaXun|>s)H62=CAx*eeb!dJ5C_BGHS}SDl +z?Jaxn|0)|lLf8Wxy1yx#T#Gw&zdy>pw?mpPWFPJ=`|!V!eaK%_`|~>VKq1D=H|C)2 +zwhqnik$uSD#BS+O0(_X@&FC;p6--{f3)L{Yu|v0c=-6c)eB=&H`u?u4VTS&z!Xibb@SlamlS1NYk$+Hr63oo8lw*vqtaOnko&KeTF5E1SN4#`wfJue_=wB$TKZ>FDi(-tqkUeo63x>An +zcj2`D&lT3UgA6O(p#M{0K^-*hF1=(NQkcDi+dHtH>m}uof-Mm2_njuwW6Ea=JHJyf +zJ*6E~*x8-L6g@`&RAHxg^3yw|b{;ODjP +zpf2Lce%Og(X&m#!M~q;;-D!NPh#c>+&sRG|fA#}!9AU@9JE@==`@LBDp`Ebwl8ha4 +z%D9|$|1|A6ciI|1t2YG4?b(r3*dF9>Gmfh%YdThq +z4R+z`mX`y|oj>6BTc!5*K0)T5VVo<+Y?EKqR|YoTGc@nDorSOMTopd)h468#YiD^; +z2zj;|E3i>}=<&q+Z8+Bj2v)%KC|FuRp68W(czSMdCNe^+^gO|0yPT1H<%K}GZpykA +zwsmK5m8_o;yM*@@x5riO+)WaJph+Q?4~ofsZlNZGUZUp4yJJtLe6*ekZDz +zi*?MQbif&InQN2l>P{*rpoI2=pvQhNve$~hr-J3WtiR~ +zQI-aLk=}kH9lN!$74S&)ax8zwu;oZ?ZuBzxJSex@Kk>sc|IyRxaegHo_m6l$uKsx7 +zy6^Z+JLTfix=L9&EQ0j>2POZUz;$o&8E$`=C!KPkS#GbT9F66V6(VDr*wv!YC|d+X +zblAQXZ$smE6^QX$TrX20rp^;i%4aBl#Seb5VMkYON5>)Ddx=|;XQ7zx{Y*y5!uEn4 +z?cQ$r%`ih%T*VL7hxsciSs(nJHih+UzQg5H8!L1Em(RWedbduEMf+a9bND +zQI;ymV-cnmMZDAJla!2$BQnzMX?}fE#-(D7rhIk2SV<2%OBc`Y*9MBzTX$rt1^7ry +zD4e&z-sh`+QlIWqkNVFEK*e;0q;!`(>L2u5&m8|d`e2a|y|8E%{Ak-Qv{BoyXl`4H +zwQ<+%P=ZIYYj)(`Z-Y$7T$fxR3hdm{T;H93?5Z7ne=EA(*$VQ&7@EtTxWmwt=(WYg +z587}NflJ19zamEu6 +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 +zy}2%g> +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 +zD+{_X<-&m^>JT4(q44dIOaZC=V2RAhMzOt +zl?WHwvz}^x3W#1I0;ag0u1-H){V#E)9)5sU?hRJNRe*+W301`PD0)|dyi~;XYmc+U +z9oHiQ&|KcQ_Q@Q={wcb)Fc6cw8>Au8w@IVX1-(e$FAsw6$8H(QE95)U>$_JT2H*Fp +zY0LrrULxOV9$({K`3m^%sitfN-xtYujn}tZz81b6=)lv-xcWx;MhAO*mAB-R@c)OQ+ThJyI*q^=XzvoZ^*0Q +z@1ntrxFD*K{F%+`{~GKT%{Eo@cehB#!2b;V+1p#Z{+%#nG%Kp+t3+ZNPm%u$pZ`v> +zEYk82Hiz;R)hVv9mdeAGVHm@#_1YYMllfy_Kb*Vwq{WZlw*}3|vg#B^SfvZB`YM@B +z%$8J3Lrq|%EKStL_>1x(!dd8*g`wLDi!6kb>Geb3!D;d1H&HnAz2PW%W;i!{!clS& +zj-gUGc{X-yb%-7EkcTDiYbar{Q_LwYE>9ODusqC_9Ek~wQ0O?R9m{uiAA)WDC#so|K$yq5krSC~S +z)aQqw3cug|UBw%;+xs&`WH70}_JGVBA}eD2wp6bEB_+OqsnvWS!rvcZ)0fCBzM2n! +z>rkM+SVrYU7RT~|`(+#&F=g1Z`&f82w~^}o^}oS}#hJyK>T)ThCP@3DrzQw3^pT$G +z2Ou>sygKFbur*^3j}5B{;OEOt`HSS5p!PuJNRKJ)tD(o`tkmLcj|}}wA;b8pCvxls +z65?+a@|`I}xmyU)zVZoSKUPrzLi{wDeJ^@Zh+mc*`Tkjo;Llb3pvkM1%sl9prq7ev0k<^cuX5xsCrR4jD!$ttojYZAsEWTXq#1X}>>al> +zPl^srcU+^449qdM<)BCl+~eNTrYC-kdFUOCve3wb4{?|$T!$3l)E +zul#91_KC%;(XEPci_Bg%Rq3zXB4ZnMQx(?{uy(VI8gzRVcfq00mRY4IMzdsW(<*ip +zI~kJSCDpTdri_uv#22v!`dK`%pwVA=SsKyd_w*w@ucU +ze5_BDYc~p3_)R_D!`6A!ogt&YPgNfN$IT#h3##}sQg=G3`*an5nADvnv*jLjua|=k +z_prx20Kv-pXQ*9&QTNYKk6iDBjkkmp!Nzk2s3#WttQ3X0q*p~$mF+#kAdQ#;=GngZUSFQPAoT4z)Dt1H6uAxpD44d+>taUP`sv8@kGQ+nINb;&5Ii0NU?mps +z7N8}|Om+*b6&Cw9qPu6B)8 +z_a~}H#*l#*1d@Tz2C65nLMK})b``ruF6V=*QYy`MfS)QeE`>1ilwVCPt`h!XKK~!f +zj4{HWA1gzh7*b`77ETsi#lHcfxSf5f_?P4yC49}kdg|;7^amYTzq;3*d(TV!wi1U@ +z?vk;4(SK^JO-);-Iv=5;I6Q=k;+w%#6c+_kQIvwIDE{7`isIwpCs1v_*O$FtDXN*F +zO03NGijJZ*REv=#2lknXis8db-U&?(;RHIF?Wr^?793l_KCa}g@GxZAHOnSyzUTIN +ztInvJApI$`+It#RCj{laS?R4hskVFuH)!)p5)kbZ(5vc%36LB&I$n05noD_VQRPvQ1ZJ4cv +zNRwo?#v@Ils*|J@Rr0@^(t>5?^hm>ZVI^M*596X<(#*9vqsl2QV1q+s4N&gv?-vuQ4KKTD@j?#?t +z7P{Lic>;L#a~AC8O7U+~JL|#NO_e;cOuxvZ+vuP>{0onkIg1w~Zqe~M-@8UUEk(<> +zucr&+XUkXAr+jg3rM$o3yFJ`X}4U +zF}7W!Z9yY!Q%BiWUTWJlg1&e4^qi=D=J@Q;dk5uRPQ$5;g-_FS_yf`L5MG#EDW?@| +zno?|c3!gg3wldO&O-3uj1QKkUD#D!#XQ(ZxuPq1{&Ze4k(oyM1Zx=io+KrS~Pp6X)5HSLDU^H06OhoboY+wyl5%huIfD +z9ER_L?69S^%PnWyLm`pZkk$=bs5&(cThnk{x#)iBpL^0qt)C(tSQY+fHF>h?m>@Od +zJbSeWcfb5eb&irYm80Ep#nUc^80=yQzgKBsKJ_yFK&)>r2IqSW8*Q*If? +z44=ia$IFlk`oUN!Sn-o_IL=^AtxFQP40x(6$_mD90o +zA>`;}US-#X$jUQPurb`mu6GA&G{>^36sXc2%dUo4{q0!emsoZ?n6!7nq`!{HU>Ufs +z*w`dDlfFHcjVC5!Pi&AK<}l)IY@F#i#&|WBC6Ru+V<|gbPZ@@6Yjg@hLzFlh8{rnD +z)W>^O$BF!2vHb0o^ +z+*_yKdj_R9JKsJgaF^YdvkJSS66J)BDPbws(CrdtH9lf0Bq5K^|6M1Z%l|8$%S|5S +zoS$^cy1MQQ`+FfL^1qT3=??p!f=B(YcvLsfKEZSIf5mgN$&>y%@xTl@M-%5IELAS< +z!2V{jvuoi@czJ*#U6}J*~0q*!MSb5-(uyxfh=_ksvk^$-{+Oj +zuH3?VN(7C5ub>$Z<3fc+Ac4(rj>@U=A^XN{*}K1Z|Cr@8>DiwR+CsTbUr16+yT+OJ +zTHuw7H0ds*i7@4ED;94G*Sr|bhOyW!$~~5LP6|kk+L9i<1qCB&tRrIdh`{WzIPy-E +zFZ|ohF=nDB8Y`zp5Jhs9_uo7V+rqyr!Cz4=mVbdaPEZ@lq%F!{V-E%7g%I(*-xm$< +zz>x?jWOW-ui#N)^iWbnW8s@)+e*hlm@DAm6cf8^*P}$6DDM@y8IiKVl#c`uEWqaxu<;OF^4wr_3VtjD!*wDl)L^bdqQr6cFN=a>3@ofaYIM$DTMiaGn-DKd4#r-bhEvyJXc*c4p$Ldv_e4m^t# +zC~vk2aj%gO#O9XF06IoS9v*>sb^0Z>mpjtcw77xrO}p!TJd@+!cc%qwF6WDpceER0 +z(Qq9%4>v%5Fb3Fo1BRbc-{Rrxkr8;gF*TOemGi9twdvlpPb#A@b9Ui)g|zq%{Dy>v +z_$MzyBK4Bv$+n`NW99s23Mnm?y;9C^!Y4#}bVm@I%J~ZK5T4MDhK+1_xpI{y +z|5CPR|0p*md$IYpmjXT-i+#vYd0>hZY0GA1krQz`Lg2=*yd~vJmX;q*4x8Y&?18`c +zSu=J#=61Bjv59L!rOMnFLXU66p|l-qrs$v8qGsRn{E-b|EB$Pe{je*n!jEN@ulBR` +zOQ~GFx^IfiZG%&64km1-WA-ON>gIR&)b3ZJ{mC0A{Y~K9^~E_@zckoF +z*QZ>xAA`Jf%wEoQNYkTGRQk_y-dIHZMQ#EWsGMyG#jpXI3+wyUTbhJhYHl_C^_R!l&Vr +z1^FMA@rPVkZ`9AC^FHd5V!d)-3)WpG{>>Xf7Hk)~-8f%A(5oBdb&9q^v%9hRw)vNp +zWU6f5dYG=)xXt>bTV?6Z;D;3BAf8%@%bD7`a3cicY +zZ-;g+=0GxgNx1a0UOvdeR1NZlcE*iSd!XNO4voSOm}M>F5iTVpHu^j5CCZT}kp+(! +zoAIgLc1{|p-G5G+sN8?9#;@J)9lt|<7=P$1&Uti#?0hqQPk6&)xn-iZI^eJU976-G +za!g(x2-lCtuz$E64&x_M^-<(aWM6(? +zS&e^PLqYwEk1NldBAYXuHCx8B%ZgnEu1$~ERpMz=a^oxF5??EB4%=Vozdt?baCMmR +zczknuMe16E9G}0DmXqD_C=3S7CU4=kTs{Ozt*C +z>5rK?Qnc}W55qd68_SHNF*gKb5aaa6Om99O%JNt#;EIfX*pVAzoIZu~YqBGP$f2A* +z6*V^d>Mu!8%ys^`j5k7r@l{Orkf}KO45y%97Ly%5sU|?ljKw2822AJCO~C6m{qa-u +z($d9CKZ{p=@j_$ysqFCJoO8t`iN(d^j5)EGgVaNjERau0&FV{xf5!O6=CEr`33(_7 +zytWo?!_YGAGYcI}SFlUUl!F$GT`Y3HH29Fed|0|LcK$#3QU^}Dp +z$00@Q_JqTJ)g=l0JL>k|rM&Hy1-kEbo=}1g-VdoS@V9xakc4bKNcM8!=?i +zyJJ?`Y)V7S<~3UX(_>I6pUXL88P-Dr!W41s@EQV6DjK8X__ +zlJ;R7Wd{Qp`=L1eMu{@6R`HsI2tE)-432k@C!~=5#g9oBDP#TI>=h>aX00J^s-5=P +zhoF>faf1dIGP^=AwvpM$ZrS1Z-^utACLP27tELz>x`h7?4!Qt<(qecCAH`5XHM;Gx +z82eHjF3NE>9dsy&c@C1u*Sy?oO}Z!s{5{M1w2WqFnLJ6Hg~S7mDwN&b*O~ +zoC|Vwarq#0*>^pYg7ae7&l82u{l(;ezxhq+@4BDD{^E7kHRe~GG=}f4`+g;Sfhmb@ +zxN$AmDW08pq7z$RdnY={^t~WY;OoV6qj=J8eAj{(^<8!}w4!;93_^wW9yPQbz?8t# +zEKBDnn6w%DEz3l95&3b5ab=9^2vw8&;udr^PuFJR_*o1qqNgcWf=XI5^>^{VLTCK5 +zV!AU+DM4k-L^Fa3Ay*8WrBeqBe>7Q))VJ^g#nid5PCPjdIZ(vP*Csl9pEkn7Hmt+N +z--IkI0DL)Svx{A$^EZmMx)|j=Hiqfv9N5l{BY7sb7%M_d`m1!_Qj9`W93u)79fq$P +zuf$mIl49M(d{42|2K_e1us4gvP!sxXh+%IOyOq^nh+$pDqEUpl&wFiIDQ5#@E8h +z2I$7K?n(xjxz{j6*Vp?nWYHkqtY6l7c*PnRKV2!b)K8%Mt<)U<3o;4=vye$=N)J22 +zCOU?r^opLX2>X5*nq5_*Jmm|A&niZJKB2@|Yr#s3(eD^nqOb8`!iMb9675MJ#v!kb +zjVw`CTd-S-u_i|;F;@C8VPz(l=ucQMmkn#Rqe`?DK8%eo5iwTsV@^%%7q_R>b5^p$ +zv?og};omd#V)9~6&FvT0`7iz`)L$^HDq9{Stu7zmFRrB*g|L6#_R_-brK`eYUI-t- +zww3a2rRCvrV|ZletEKy1E!`d7|KsprGMMgfqXtB`ir))hV +zo9pvpq)D!fAc%O1>3@xZ-CP-gSVCRzGVY9VWejk)U2R3FDW${4srtAdTyK4c%1E5y +zRXDkHykCLC=`1;#>*z9)e@JZU7&Zyrsg&fqY6A4%dJ-KSH;1E^68VM|zd~0RZl$b9 +z=}Y&(8^4_Go{NSkc&eX`8;p%8EsN?iskN>?Re#j%_s+NJcSo>dD*9joJ`8F0& +z+7!Hbtz(G&9Y1#D742M4_uSQfQt+_BVeFz(n)(S|H%$pR7t{ldaYiED&)M$R)tSQj +zmQwXQ#5TRsc^fW7*!|*9%wEbDz5@Hrh&eWw`Iqu+a!il;Yz^xv;djAdOp8G;;r9~$ +zS2&bu=pfYi%?N=soV3zCu_!Kd-J|SuiT2xB5uC{H`NPJBB>hs-tJa}%An+gm1+Vcx +zbyG0^wxq71xG99x57F{*L$$E&sf>O}UzQ{~iaoU#>;2(^t1_Xt +z^&`@a>hFF@6}{q`XRGn!dP(#QJu~VCzl_d^cQ6mpWH%aPr%$=%*`M8ZOM1B^?KQdG +ze@g&vcAP%;+V#J{gXE13&f8FuJGOYd&=ahfqK!I3FC`K$MZv>}p|6p6vx!N2h(9+Fv6yUyT8 +zJC4k`DQYSXuB0@f`JASgl{j~`Lm1k>hL_1h8{(~xqvMB-?UyvKWTM02j}D=?{fl%3 +zs^QtHW2u@($Iz*nvbuDr>Kra@ScL=aie&ox7!^IFJbYgCsK)SE;uB5ojU~ntl)=JN{B&klmnegTlNY{>dMTwui4;zDCE7NuTh=Z%ofAs=RFQXD)IF=0=Nyk?RYQ>*>C>5kYVtFUf +z@B@cyiv1n9mA*FDl)+K6qo&;Q{9)4sWG^9cw%i_Ey-Xc4RULUFB0prfx=BIghsf&O +z;p#n#y3En_){m_D6`ajC5;M3EZdZ&jY7cAt-?1Bqe4ih=KS8ixeBv4`fBk*&Dax`4 +z4-1=uqld2=GD#Y;`E507h&pPJdRv6LC`|pwML4f6s-OB|kkqz23ia9Md%9nw@bn|T +zK)w;5anHdtUYW*qGD*BcimD!|Lh+G9)oDZ2xr5YuBGhGJ>Kc+eq@TKp(C$cdtl4+tGsC6^*!Y8pVBM<}LH(!DM=lON)W_si#)a=m-|Z24AYB<7zV6|7 +zg2+=_IPgH~#~1gd4EGKOCUSNHsp*H+^>3P!yP_Qx`BA}oapzkuxiuO6b_G)TQGLVX}i%_rjw?5D0L;|wI@eAfqO$fC^6R^ADgCZUA&iK9FMWR_Cg +zQhdBMtj1426|>|TSK(AwiZd)d%|+3o3FVnL6=Ym&+cX@lPn&vjtoM&z>Ja5b~&40!U(VC0v` +zi9za+Yt@lc)QPF;w5!y)lhk|0tIIA^*CbQM9HVX;Nf}d7D=)#BxtIVswmYhi^!vwA +z{@JY(%4uzA5UOE+ttFI1cSd@%m9{h#sUBi12^BSmJ8|@7G7erg>ngIN9ts`WT2uru +z(xFa_Ri{O(b1zZviBy*jR53#i6++ZaeMtq86FV=U=po;}V@JX&p9|UTc2Cml$zi+B +zp`M>Fa+(p0JWOeHv>(zaL5+~rg#VO#C-$kaYm<~ag3%Da(o?+6S>spNO6j5;idk}) +z6@I}eRSq$4s?74G$~ciK8QxS0D43YveG?M&)0oXSQK}^Vuc_j#m;N8d-aRg=;{PAt +zU0{LTL0FI#c9+YdXH`TKwDS5+)G$#iOfh|DZ!yoBrg^D%7sKLWh+GsF01MHufG%FrLhG2C6{4^T$bO%57OcMC&*$;`{jsxi=K7k~%)I6`uh(m4SbNZP +zk=E&JVT|FmKqS}vbRQf=(AKki$2!-2UWfMp%=Gy!ecWD=*PytBRg)v%qvU+P=23E^ +z)F%RVFFs=pABJKWJK-UsvEFpy1&NyJLl2E!jzMYdztpvlO*V(o(iWgJF+SOg1QBQR +zQ^_fKd=TRWq##FpvOpaCT|vih7&HNf(7(tfrIo}`N_>4~Kw_mOo-n4(1xa#G3|*t@$IURxw9|Kz6wg4b&S@=pY?s +zeh*4a;<6LCw6vlkle?tQImu131B}DK*oMJPVmz0<<$sO89+dcBj<^>(r=<<#6zBGO +ztUW-_uR+TlvwH|;*Du6&=sSb&7y~oP@GxUo9AaRD4FA=k#lFJ~yN9C1zMkYFNXi^v +z*VlcW4Ik5)9;y`C`-kr}7tQf?dEHlLMDTYPA7@pnt%||%YAy|CJXMV@7_I{6Wu3!q +zRaAXUNmiw7r2%lJ#Es%G8yqM +zO)B9l?n7D$NXnzbd$yt#oBwsjdk@u55wVSZL|>XZDEeBS!Q~!o_>RY`>R?3ntsk +z>dY-rR2_EUV#cvxcBhxo#l6y1@WQ&HzA%IWJ(**(yrwIRBgIulSO=hC@xE4U(3)() +zXK+bz#b!i_C8dVL9okq>e1NMO?u--jcrYynd|#ic+*;~GX9m6?k7=a~xGR~qG!d)t +za>ZcOv`bEGix|}uc`or4RmYhT|U#ZnB;nEbg3@Iip%K +z@P)OCX;x*tMvFfqXJtOdk+kEm!muw$npcDN{Nd&35@+TeuhdPW;u1oF|IR~1G~Di< +zr3gQ19^A0#A_n#$;CJ5fDtDn%hdpL*aw+#csiCWy6aNTprn4aPDQ5%`*=!yUZJ2 +z;yliGZ($&t`gw6Ge7_-bFT +z=2ew0?02*?=pu{+e;j~ghBdq%dYP! +z8L5$(^($!e2k92iIcRi|v%Zt&_#X+iu*G}MGAFuh8ixBCCeW_Jq-FiR_0i@~N>7o| +z+d(DS^CRdD29Afx2kK^vK{+Y!=Bz)DIt-yh4O3LKCW0jai+A5ix_FD_LryLe{6(5e +zVT_Y#EY^wU`U&RNa5H)TN~BX;q^u!QS{*5|C?w2;yPf;(HqE~&JVGuii5X@lLk*g7 +zhGk<6YeyNjFm$~RHWUTW_1e!6>RS@33oX@#E=vZDrP}KeoHB%xem2TG{_e6I5blJu +z@e+SW#9z7s#~wr28ASPWcfD$`)p{Q7d4NkHLyY$}getP#&3bpUnZCfIcQZSBLQF?N +zg;~>bg+UW;ST@eEc8p;Q-K=Sb8;a;=O`|o0`jsrBybH8Qdi#vi!6H!|FFs4ojV-1M +z9p+yF>Yn>F92$mk-e991l+ADZ|5-Mp8!Vfh+2 +z7Y9bx?-TDfPZ}{fA;N3q6V8=VW^v$1ADKF>KX`u~agXm5xdBHX8fL3#X71!ZI^_9# +z-eX~A&3#V4bi!SXCZ-P#e-Fz_Y}$R|vSgu8rAw`pw|l>+`aV{|y|Rz_u78cwyb0RH +z#>X#5{Z8fe>t&lh+DCHd_-G9|e&pjNK0bzLTnsPBjIa2t7;fH3r6;(-deHm2NRtLv +zx#m}Dv7Kb=aF^;O7wgV_XPl|x5$xL+2tnEZOvitUp^bFg9;9PWAOz_Q!$ba=ROoXg +zee*$5rXL}6uE8J}9M1K8A6L>->LW9L_!1ond>~ytJ`&e>(6&BL8VJvI&t`~L;MMUe +zFUV8;z&H|cx1gFQJP-9y4=(-nV7lxS0G;Fzck%ODB7E!_i{ZA14=UF1?4Ey`)G +zdlG-*HgC3hNAeEz&5~U4sxwDAznG`@tvun?_#?g#z*FgXEsJ>bxcrgT%6VMmI`Te +zB@MeJ!c)POu2U9Ina!5^Ul5i<1!F@W+Y`vlWI_u7+*S +zhFmI`o2`nTmGN%s2(aQwev%zhJhqB=m!&3u$%Wm3PD-v9>FEzk)Q)qm4gCP!hLmq|={L*Owj +zgHns#+mG(08`*CAfsk=zXp@-cIZ3scrusRm_$uj#G(|ek%HOeHlb&B`I=A;}D75LlT7p2=0+CZSz~;)w-66MjkfZN_gUehcxN +ziC+YMA^3UYC!?T({&>*jcN=Rs=r!@tL>$dnPwZT=*YGiv#0`e +zChQDV62vFPew8gIOj_fE(&#*W33m@4*vnjdP!{xg`}dMDf=&02`u6P=1ff(0n6^+HAZ$Gc&whw*?=Wv@5x6Sd%oI`Tt7ZY+@_p%oUfJYb? +z57_C|NBnm*#~Y6FzkN_X!d~5L{qJ7fC;N>K`o2vl@*VJ}Z8{vP+ql>IGGZ8fxNz$o +zF-+^<^S-!O6cGwvi-D*Qb|`o4+zSrCpr8B-M(ON*yCK34miUI5k%o}DxHrKWkBc3e +z2|i2KD3y@u)0|0iSQ58*FE#UIzC_gyq9k;IRl_9M*%Nk_t`ofS&r)LDDX;N2L2$?Cfodc=o|h0p%#$NK2PY_Gil +zHPLIYX>I~`=5>$2dsjZSF4 +zL_gcsBp9M)Q1-%a8J*Z(K?9-YXFBiH%2;=>_K>&Xz)X_a9`_T)jLDEjGzl~7W<=*K +zci!&(jq4i)|*hF5XJ3$0#-FxmJ}SAVp~+%j>- +zB~{%CFT5~@_||cSL|GjpYgk`ZK+|(W3r%aYvG(`g4Oh~FB8Dfj{ddCLHh$;@3s|%G +ziesfL+ZoxC0Hseq(kwKlaV>l3Y`f&lmg%^!2K;;}9kb1QsN`HYpo=UnM&jy*eq{p| +zDn-NyYts96*tXV{Clj}-9mxq5Dxx$`2nMz+m3H$4uY?J~mWKNF>#WtoZ#Te$!!gNSUi=mpWp8ld_1}C7#=ta-dN#9lr6`TtHiH1ymCmt +z8t@d+F;!iK7g7Kg%PK4T9VQCVXg`!_XFxP4f1mO)qJ7VvJ%agfG)G^&r$AOhA4yAf +zx4kICA(aBGII-vZ2WSP?QINDhICxYtU*R$x8%4Ilr4}+G<^z{O8W<^I<^7m?i3bYO +zD)>V#!4*m73Ufz=ikU_WLA?u{jNYz7>)qvwC=6g1_Gw$jvU!Wi#PPH1V2hOa)}HZ? +zo6}~`gt{2~8q$MSyuQa_?vq7n#jAU)Q;MLP&Z3ha@z!;P(7P`yWOM%-x7@lt*3S!Z +ziY`Y--wIx{XF&fQVs^|A&bY@qrU*19TX#rffYd%T)G#H?5DgZ7ykTvGVar5A+9Q-d +zcIQSH@)P?h)eqT^aT;RYN*(alA?7CPz*Z`R3!}~q>SR&p&H!D6NfS4JkC65^xSrTU +z^&tEX9q9}X9q*W{Q?ZVWE@V^x)(_T4X`4nAGTZ;kYh73Xn}f-Fgm?c618yGPWA!h@ +z%joY6(n6~*KDqIG*yMkt8?(pydm-%g;~%8Ej!(|8M@aZbI{h9|Da~vdOy|&1>-Mm3 +z|CNs0S|X~97$}u3%0*%fRd8oYV6ye5u2G7c0^w!f)U~SUBOnc98{+@$=%Y4Co$DJ& +zV7o}f8rC;B>N0w}b9FT9W?+Q-6u!T32)rIGp(BiWUPPCu?{+DH$%(K5%L5)v`>14x +zl)XG03q<7*Y9lsRGyv1FPf#mCtTsZ7=n-Baj&C-?5iyMq8Sn_329mPtMb8;2y^e%A +z(@%}jDjhK5nisAJkkQqPU##N_2K>Sz9W&LLt15tjfnd~e?-x+(11#9j=tvI?9Pyl$ +zf_1c1Jvptg+eDc^8h@fGUIwr)>1i +zI3-_Xhk?{KL@`JEkSOa8PQGcJ`Oy3L_^ppY*$U=iIBcj7w-G?H%SAxg{@bYGEb0=z +zBP3M#n%25F0O^2R1>X+`&#fYMhXGXH&dwIRltw4`Sc +ziMt_44=(^9HnNZJ>t@I4xV^>Jjrsf%9amC}K4Rc0D#m={V|849F>u7d^Jo#K8Ve*o +zTr^(^1acFK!jvrj!;5gJ@fjWW5Oy#?AUC#%%o7&sNGQL}8`bRq-k2=34R}2Uj(`aV +z8ierxm}NXLWVna(h3#0P_&RFM=0hX>@1pxCO=bSA$8;Csz;u-G?f3azPC`CR0L-B| +z{LuTrXcz5(njm3BFS3s8Wpp-XoQ!`&#@#+DhiJke@~8A%!pY(X=Muc~ +z+3^lq5Qpdetj;Aw$9yuJ^i*@b@qJ*Ht`DK(g%IXvco0Z%1BKUsk9`h442zlKpYS*o +zCv;XYuHKHGa`f98)j+>7FRB2avp1@_S&R}Fd%}3&MzM|v&-*W|N9O6$O4$?GIzwre +zE^cre%!!Q26Z_H}ffmdvAz~m?8F%`pWr$eKDgA}w@E?kCw845IPk2-p(&qK3sRL^P +z+N0pF*hoN<`Q%8L_IYq^#nx~0V1Ta2WQde~N*{&|c)D +zhh(VPG)cze%uY!P3{pQ1YJLQR?&Bb?p%?>lRWDah#~1UEj{B63FCJs?crlsBj6-3< +z^B%mqFQbAxf;tj}Fr8c`;Xa{$eyooBuz0?bAEV=}#bHWjjE?RjWd +zGw)|_0)t(ky2G3Pv8O%hMOQc3@9f;FVkQ*Iq)jgr>mKQJl`MB%9W=Dkx!OenNy@R| +zI9Ji&BE`O}o`94(58aWw3)QtdJo^<*?RbC}Ll?>VMhvW?v{yqTndd9WV30(IPa>k`r2L0Yv +zr%E~NGemHb2s7?7!-oi=Qf@jrMIbr^7&R^ya}j^pEucf06MN)$2ReieK~cvj*>Dbs +zDjz%(9S%tzGI8#O82I?#USwtR1f`C9x5&COkA)|>$hsm=Q0TbCBI}p=3_R}?S><`W +zyN=shWYy#`@C2h2-i=OhN{3e37eLS9k#zc=`V9|urQOMUI&bsvWHwZ)JX$q8nSV%X)X136bjC%b(uMv% +z{8+pNt2pYfbP*bLwHOcpYyn>(H4ODJj0iHU(itZD8)gqTF7jcPLiU6uz#EGk6H4i{ +z9#Vz2FM4$uEn&&Hh^4`7Z^P0x#QIYa@vJ&*wiHXMi>1QwV9eu79s~5bOjhGf+fD+7 +zRX706``$&79(0k>d1DlgK)H;P)^O8<`>IGB%vZEV4e-NEbkKNF4`JC)Z*&sNVON0q +zvJrRLa2+3OH%`GqhR0m#(!5vN2y>)>PeMVE5I7Y>eh4-@?aeJ-CiM +zVJikBtMS0)Po=vfPC|&tDE$o~GMuxwRu)w{HT)n;Du(G?`vU`a`Z!_(7P{G3O({jF +z@-Rk>s(-J@YC&?7n6^+==rD#ye=8ceMQo&)c9Br&0WgLEF-$W>48{wHz)l-BcB`OX +zppz3e>W@k}6BbG`-*loMysAgmxn#Cki}5DXQ8JeQQi~Dtr;Xb}NfUcX%e_HKlW5`96- +z*Y|=VvUC9#&T1(+T}l1?IW4yWi#h+jmQLWc_qmcn>&v^Dvs!Li0geA&%S|bmuVnB) +zsUS?rf2ZXhDZt@F{7)>v^!QfGMHGN)f2)PGehA5U0TgH+kxS8jA)4|g|FJW(0S|xO +zLzt;WMM0P$i@>x}TutG}-$(FG8W$6^K*7@&f7$Q*Dj^3E&i6HZ-j9K! +zs5_X9-5a0cWQ=g(W)w9#ON=vJxW|exIj%JHbN?zL9_^Jm&0DzALT2TCy6C9ypyqpE +zdqDsGxXnERG*NU-1UC7TT6Eb=%E~F37jL8Ily}7ic{6Oputd(|BOz}_&rO4z_&BCD +zc}W-wLpn%@Sbve5I**}NsDlLqhSqO=5K>RThnL=CH|eRB3IB!79-8}Ru&zQl1H&7c +zuvj!cbBqn4gK)p(Qv}zcVFVAP1&V)(fpl6?UU{-!$khTJeIVn+NB8h1u8>64=;!<( +ziyAGdbY?#RO3J0=_$e5uu(rU~j>0w%iT=;RB>@XS%0YDrNI8tA|MsyVut6r(hAb($ +z)GCOne@5ycq(#atKOlRhvm{`K4;-++X_4!_-G` +z7(3A6VOGJ@`a)r?>xHv`4vQ0@YX)?uRP4X|Yh5d$Rp(dq&ohq9tD%~a{SMsWKAX=# +z_rV1SwA++S+Th+xe^d--cEETM3**lsvN8VjAB*Aq_I}8Zr_e?GW6%-)FeN6(u|)Gn +zD1(2*#>ZiRVkouKa<%N`K(d8Rf#_T8Q>U0+g}RAJE|Re>bNq(lOw&Lg@cSKTpM&KT +z+mcJfsZC51@V7L~A_vm`N`ozrR#+?^vbxRf1bD*M{{Jbb5dF`b(2*Vr{J#^@Rh=#V +z{{}-i_Rlns_KEW|azmkdvpcuD!1`h?zgx@Y6jXzm%GGk&1(Z<1^CXxcAqPX5xkw5A +z3CaUWgSatth_fawH##31hHNc2G9T0k|4cqM3|U$(5=<3~e||=c*_uKpeqoUM86@;;V^FNyflGvCttkW;cVt +z4TSTXwAj@yDzF-Iaf9(j+$e$a@sf7pn8E~V*Gz>-vgVoG_5wz8e{d{f3g5TaDhxhg +zUbeEDAmUdk3ogrHjw^`wnveNj8W-|SptE|#5jTHw32r2v;Bob#ag +z9?R9`(k+&-L`#MlyrmaSRIel4>?%;*l~O(Sc5a7W5;Q~dD|bEIFm#wP#6>u$O>vTx +zNo!QiGnqmy)(Lj6mh0SYEy-bw+J=UHlowieFo*ZHHLp^(scV<3la`a7447^)=e1an +zNyf^!04{U4u$bOQ>5B7?ByjxO$wu!X8LLSVbD)bZe_MFIi+hhs7f1#Py5zd?r<}I9 +zAa;S4+XqbGx<`EwKVQr3Eud#&$pT@XR%rrLpvWpq7R+5-VL^QQ#)HY0IB+$r&}Gr% +zic9A+@=LPcomdY2M93jhH2zQy!*`)E%`4Fb?}_zJ5%zZp$7!#P*76f{mN>oosGG(7 +zDSs8YV!3Sv)>S#Uo-#m~t>uymtk31(rOp~h8lfy=WD=Dx(MZXs0uru)RCiGg|h63x8v{(=JF>oUV)_LLw|1WL)AMuw~{FuY7 +zE3kIv;}JC~9I5 +zi#SBQ-evSx!f7|^x-y(!c9gW*Vd4nmh-{qH<6-h)ev@lSJ)KYOU!vqSTs4tpVNdb +zt1fL}@V~a&Y~jyp!nRafA{hLq;aC*^y(SE7*r&|*nnqvA#g)2HVO3XskI53_RgY4+ULe+7vx-Xr*n(@*sMHI_+O`EbgW@rtL +z!6i6?P=!vz{--O9SYp&QR-MKXEUfIJxbg6rrUCJ2(_GQ(Gx{y&^&sqQtHxq}8APH* +zL(=#&n)nP$j9*PXNdub5`~jH0)`0qcsj2tMwZv#@TFF4MNIq?u^>#jk|Fzc6e7;#T +zZHx6*K7;=>Yezo+rG`vt{WE`ajIQQ#{U7-v@+suZX^m2deR=q_zQ&y(((Jx2a>M#- +zKHr31wO-9qnexHM_|bLy +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 +zXY=AaPr5vm|>0QmIE1lWR +zy@pT%4ZnVM&S)gWo$q=!N4y6HYro4*+#U3SiT~Z-94zYC#C^;2run!mNVxi-@8~DD +z)WrPe|Ce1XRc&yKOv3entaQDnLVxZl6MyY*Vb}*nn`ne^`9XOIi!xEWKEC~LVTmvA +z#3bTonnX=S$g|%IKhju~8~!4V33aK#$}9rvd_w?(Lu8`an{Fb6P_fopC}CR5VQtdc7d|7*igX13V6LlxHVOyGFSM7@iKDeh*Up$XQA30@WxeD${kd@lt9*wZkNP>VR! +z*S*p`ywNnC>b}4(Q2r-TBJ|tn;T+-103_UE6SsfQcd0|My%n}o)F;D1ep*2nvpb>mav(Y@Oc1V +zXFH&|*YSc%z1f*^!)KhBQeHp(Gs*mEcgZAV?-*{U1v +zsed493u!=}`MB>a6By@t?v+6dL +z37v3Hhvz;jM$vcp(jRL;Cty7gO>8T86~%=+%(WOoM}h*5fH9$9GakSx&t}Bqn{^e5}Ju_xU~hy*u(bkmr1ys3|`;My_YRcKMyc8$VMw?Jz#l;`p~GOtXRZ7+Ht*zVtT00 +z6rN}v{465te}Hs86De@k7F1f +zrD)kAe1>QN!y5Jx)InG%OZ!atmgb`)PCyA7Rvh58|5@bFP&9+O(V9NAMb$zwz}irx +zX!wk?kjM$}LPbO~eY6GrHgq3+3LfUA3gI%~rk$n`?!sYD+rS_;qBI^wuI2F=&Eqqg +zKZ#gzT=5v+5T#>09_0bg78Wxsln!mjtfOI}0`i5jm|USe?I28BG=q+BI%E~XhZGJm +z0uy8kMtamPJCg3UMcsk^fc*_960XyPXtV}{7jYOuVoMZECxxG)oW}^Fh{o`{Kz%pi +z(8-a;QsnSJ(^?*%(R8jv18USRQiKmg_^T-VXjv#*Mjdg=(fLlpGy?L4vY2h5ltO4& +znpqHM)_&^4)YLGDP_T63^2N5O|3K=)@32L|5^XKBlLlh^X@oTDY@sv^s|7N?0S7CH +z?gkT2i+z>09zKPzfjS%EurI^m*HPa~G;9s^y-351^z#MktO8uZTXc3I?-q6|jeQdi +zgS^X_X8O6DI?q$*KQscX=`vw2r3dd(8piCW^k6q_MYc`e3!F0;V->XP6tv4V0t(Tv +zm};Sv7Apkcw}?FtA6rk8d`h#^K`Qnx19YrKk%;9eJot=e@fpp&hcHx&hyvi;i7iAW +zl;CYawdhV0jmf1B!Za8L2s;3Wt)`IC%s?qhNT2ON)7hIxhg{ZwM5Pd>kC$O?QLhZ3+X-Xjqm;JWHLWaF``<*u~Vhh=whsz8D(z +z6#bk}odtl4M*&-C-YpF640a_PA(o={Bl;OdojKHbf<~a{mhszdVWF_dvG7l$6%bUT +zuP7HG-wT{ml73ViS}Z0+H2*PjF(@gN2a+|Es1?x(r(h~*nWdDzV1R1q5LXDh=o|rJ +zrZ9AjF~H7RCWAVev?I6EfsiQDmn2le6aZ#ai|*V)3#224hDEc;hf^VlV2Y^^B{`-Mm1JIpLrGbpzADe)8 +zcT$}n8w@s|c*}7C1M(sGn{@F;JRwlr9Dqln<~Zr~U$!zs1Gt%4)f^sXKc^CO{*X-5 +z*Wk|S8ThAXS*K@_b?3ratv@$8iz<`PNqLQ<4DhuR9T`#TwB7{@=pMqem_UE)_$=7g +zuH(jLF#-PMt+6y>bQY@vcu;{j^Fs#tAnw(j4i1d9W8dTOd+_}*FSgx03WPjoI$Y#E`VHVIbJj(sur++g%Q9UCu}1=Mq~17-1db?6SU +zEdDJU7c-EUvFU*L|EH|}UDlD{?RYPLD +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 +z*VfqK6(F&U^sSW(72JGg} +z$bx?gCrYj~9rtdGRZOR1(MA4eWS5-GpM^7tBITpB8J+psZR1K1SpIdK5`<#tDL2Z( +zsl9RU{31ih62r`8hKS{+hTg=_GpLp!`A}OK=+W&mZ+^q=vJn2I+hq~Ln%iYEb~99+ +zd~;h+x$dyR +z)mt-CWhHL)RT*Wvny^&TGz}~h@i^~TKX89tc?R)$0*v*H;Ue28flh|FE)CyWH%PQ~c1Hc|3_)^3*m7?HfB;Q+ +zwYNNya&f{dz2z~`TxwW&;vkLD2%CGc)?*|?he))`6_XP&YB%+gF=G`=H(?-e?A?k> +z&N0w8_O4eDcknU%dac>VyJqg9t--M;;l2f4{R +z`ITo2lRBCyyeP?l=hU-ng+?Re`Ri;4csgbnkw!spUmP$})YE05nX=+^3Qd#2d +zbg_oB_uUFq=O_@%B_YeDo0rR0E_bplcdlOUa%H)E=5p8keLwR5>Zre#Zk+On^;)|A +zT6*@i^i9{(-BW?UY|A3jV_scv2&g8=5_vU>jIAGs@LgF>r|$7 +zOy}ud^;0D2bf5Z~vP@47lFG|x()lmIE8$*w?-`OP?&(~wd?ycBnrWFxhr!t#8%#o~ +z+nJ|uHZrm;J-jVl0^_nOtLtx1Qd^N*I6p>Y^?4 +z8@2|I=w|N_+5I)3pRQ|$v0fb)HQcUusRWV#epvG|$ZtP(3cxKXB0Y*sP7lva8AY)< +z$!RhedeDLJx6_G?nz+E9#NAP*8r+nKU+FDb@d92F{^P1&Jkce-MmKW}FK&gq@Wr>Q +z&&jI4?1MjKo+P*|5+2Jusd>O78}v9?&QW`Xh-k_90-DAYEzKJ6$Ob)5N#|r>DcouF +z6SQYdPe?^qMqKf~`3V5#pnuG>65P=r{ySl{AqaoZB7U2aYC7b_0$Q6PzE1-n};c^ +z$K{7<_VYvPN72$y3hKH7aAz1?rLJC;3W(Y@B6 +z)6RL|yS_cGEkM#l%e1zqHRvQYv{>$98ZP54Q^0G{&?SVfEfn{of#?#LKcfSRuVcy5 +z3Psnswls=%rcWzevBO02Iz9OD07s8rW9XX37SQBMrr9s+cXvFs1i +zHWw-mY!}})c++KNp`y%vMQm2q;wr6ir@%O8hfE#s +zihl4P?Q~5Vf4}A1@z;H7jCDoy2YH|=F(cJ +zw)vFLc_%aiHh2*y@On@wFH1RNryDJ|9WlJ0VEN9{E+8UN0h+^iAQl5633 +zNRs!JTr-?|gpjjST@UY({fdK*x{P(?A)5Q1svsuz|M2zZaZOz7A8>Xg8IZ7qC7?`j +zP(fQjTbF7JxS$}tq7_@KEuo#LwYK6?KtV%L1f?yDRdKmDNjtJAwuR$k{9@Dj364g;8ZkTKjvzU{QGC{OeT`qUS3_L^y2pzfcIVmn +zOAEjpu!z>je<-L`l>2Wg@ZVIc4lk)JkuqC?8l|?y8z#z)6Fvu4jo|HtA8tCdpPznph8z*75%YrX +zD;eucxIYM|{Z<(BpHqa6Dah&9@Ei6_8R}J5vVt2p+NgX2_?zMB+S3*Dsqvfoh^a(0}1}0_STE^ +z3kBt;p;koFz7b3kcyHZ+h@@jG!-rPJXu`jCBBmw)mrf}z+ev~(3FWbEyvMd3q604rsld{Oh`S&I +zB)CSJ6QJHvja4EWQMn{nl{7`SdCum^8@K$U>1p-&PBZih&+}AW!LAa^u9D#c_;Wn_ +z+*PY_SHph8AqWeZ=dL0Ndyf1*^8X4dN{Rb|AsW@9*p@6uBd*mu#TXNjxDtn%O +z_C8fKUh~tx1V0rDw$2hj-;2&D+~cp<<2T@{uM}2?X*-G~Z9=*V{qTtXq`lXPDQtS$ +zhQE?REsU-wN&C|lBy6DB5-1Gm;|gQ8H1%ghp~%SGana*RMpTJ9*d7=CkEeC)78S%7 +z(yu?uH@s=oWuc;={`bQ2Jpb{E?ZwD5QJCkCv71ASXNm6VEx7l`L;?A +zIDerR;p@UbrNhI23y(OfFEoTdPjAvZ8xM~R<+q-ug=Pr7;Qy6Y#Npq>#{3e?PUn687H^C$AVrh3S;^}u*;e=^@f!+%EvnKN>8Z$& +zH5su9?S`LL2y|l6&@p(EG32SNk?8So73w4M{x3$C{Oo!^ns0a6ZWM<%&RGi8>#{hv +zS+DS#yD^8Ghn2fpP%4o>&Ijm&cTsRGWq6TzYY_)fDzq<5w5td8E{0}bp +zv(wCZMx*FQp_94I_^a`U# +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 +zcV{_dyCsPATDTRi8#{Ei+RUun1j_UojMyu +zYmzE{BpV0Tu+Xs^t&>bQHiTD{)m0fi1x4P1sd0kiBcHlAk_{6SMF?briF+eihyaq8 +zBBk49t9j3z7kwid;;4EVi6i_!!=Qr?L6(L~yU2OlbfzRlFBo4JrXE!kY +zk3@CJ)VhIr+x?O{4QJt}Hn4B?KLLPjI=+Ej;C`~qD}XTs+Xi<2({hN_p@zc0p;a{J*mOWcl{ABBI3&5*CC?Sg*CIZ8S={t7;)Yq;l>BHjHiML +zjpkYU5T#+=aTxXexuN7NqIOaf&aPQ^Wev%Fl0@u9ME1HXACZV=5^)$2E7o0EP9jc_ +zh&QRn)W_I+2Q$aX;}YsIigZ7JOP<%@3s4++f9xsWg@bcWF*AhND}K()w0Z*!Wv8n^ +zhr|H|&W^%`8%{zadnv_)QnLf=#TG8xuYWJAm%(ahX9!ML3M`+UA^9XAPW9lfg}@5a +zL^+)HOj*ZHR_Q{bQaz{vo3mr4eV#5R=J$s57Qxd*gkQY}AJL2Fp#;+&O)evFq11au +z0r7Pe9+?%@iq~g0C&afUWPGK}dl>$?5wq2KYJ0}c{rz0~#8<(-CtQ2St76BgFYKwp +zS*e1i<^+2xn%dwFh%1r>5Qg;2Mk~V^7>0$TlJ(xkgvdb>eB8nsmx_S$S|3#(B$VRH-y*<7`>RjYK^#%{JWdpXNB&NLZ$+o4Iof7niq5sNUcVm$y3^k}xXgDV_G=H&tfVg6S2&d7q?C^>KLIi+fLl^;lcDOOy +zfUaXlljFGuKgva|;in9;pA*?z8vg%lV!sKQH;pz=CTi(8+mKqgs%0K})J8njzeg0I1KItzYF9js!n7$0Fd*q7 +z%$+2hMy$qM&U$N>HfWYMc$PM#ylAbdYAqx$GhkA}->wa?YgJY)taFCJ4jZ=mzj-Y6 +zFxzHYZ5ejkGHRmp3&9f)#t-%0$sC^THL8>74- +zR&9h?%RtAUAUN)M5L)#P^!nY-*O|{%lsJBWlM1#7U=R`Bv_Tv7ctFvZ+lz^g6H+Ku +z&+JFRAjl^Xb1d)};9;g|{#B0|pp#ln*ptdL9kJKb9JEINdxX9wnd34@X|ai87le{lIN9ezf +z=;(+=!*qhc7XdhPvYDFWmCX<{*V90LAScoSOw{mA +z)Oz;T(_|zs(s`_R>*rr}CnI!FTCyJe?(k)j7~^YD&oLPPva<*$V+o`d`nN^Vzll_BH7OIXhdL +zD(7C4w#sq%lk&B|=inFzsGPI*3}z{SaXKPoZTe +z(w#M}<<13|zAkjX3F93Brh|pB&`K;JGmZcp>*mW$4TYAfe5!PU7k?(eY+S|xqBoC+ +zOS>-%-Fi(UQrYhVO#2Eg`wFRD6Gn311(@a+T0ehGjc^!`@vSI?N$kZ!#J$u@MKP~n +z*wbiUA@i?pTrJExXn{{;PNA|7m=CT)Ep6F#w?h5m+aM*P +zSfb3vE(NNL{g6P*vS8?*Ux5qr5gwTw@?tf40so&wX#b0gTihKfhit4!C}exVylRlQhhT2lyhJ2Gaqf`Z(_p~K)Nn_JjR +zj=J?iA|A0CsC`X`9sI8>85_1IcGUC{&z+(EB@Lwzibo$K(}uOoJH4uVj{$bWnmW#xd-+edg+7ca;=shBEo5%oCd(3M$5{??tK>Aam(Cr*_w5Ro%JAMZYs*1kG7Fr_geuLU@%L;prm +zw!(GR_wVptAcI&h5JlJne!C5(2^3mygBF4ZmfIuc(5n0O_7m|fNxO8oa9P9MT4hGl +zJ+tu)^O<}86P^yG=5B>dgqA_VIpRMGAcrhgikngH0yOb(%Zt0T~`XZ5v2knkQ~@Pk4X +zt-|QDeD0ri!p}AaOJ^i4m?kpEp7Dh)_ +z4x|2a%@0m9iU7F(-9T*)uWMq2Zt4YVCLf|XwGL9BtA^w7p?TE+ERcI`!J77Ep5_$z_rfr%2N=!iFh<7TjizRRzX0}0EI?zPha;H{rH +zERqcopnQ;HsSd3_awzynm=OjSO$>#1Y{yg{5HFpIl*1iYGOpE&+r6IvG?%pNCZ&k^ +z-q=ia%9?B$O~24h-_aLax?7YE)1N0s%CElUfw1~;(IeNPuIsX0mvDqUB7UF{xJ(aG +z)X<$ElSmZ~XhnDfo2i~-p#4*HieiJ-KfSouN(WTXN_?}TDy1&vuvHsi*7`v@kUs7Y +z(igV)HkqCFP0?MTQd;a<-)aKKd@+F@cUz-Xq0<-JGPMEI&n9a9pGc``gd_ZY=&EUFCF%qDq7t-9kpvyt +z(ThAs#5Gdp=ipkf=!brG+ertarz!EZ-61`+A71bI8)@|usrl5CnRUi-V7OQR;{oCy +zNEbdY=^Y{*=g!v++6j^MQtlmeH6BuIOlL4MHY*{;Fz#!b*)JzbE#- +z$^2blrvp2$)Y5I*s4}49Ss<(Iru08+K< +z2Hv^jVVs)!8`2bM`D~8o +zJ&Gxl5UJbDjFn|Mg$36NDvYi(*>3Q%&ICqDOqOKX^0H0Y9ofoakA|uk@J#f&@WmcC +z{iwAaaZ1~kHPrVtRE(>McmVjpB>zq7Qw6nhIhYCwOjg5CUr3rZxPcpb8O0 +zU~_{O$#Zu(NOpApr9gLq6ypvchUcHg +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 +zND_g=2t1PwPMOyPxvqu +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 +z;LyJK!iS7)THxh0P?Bg(NFlTjU?IK-71`a`w +z?6wK)LM(awCw}%*_tIyK#!~xs;@ +zW-n^*iM^t!j|5IKZm#XVRYAYiL+hvk#B!5%kxJ^P3wRkn)Iq;}bDouc+ctkq!{jDi +zL|D?-q9V1>baSO!2vqNv9x@fRmAZ-qf-{qwuFPK3LoZ5tS=cg=VgO=z5kfzf+s79t +zn(24bbH*AMR#trbXZqr6x`=^|x9{(igU3ltY-%mEYZp1`MY=%>n8p$_PoTKL7K_+# +z{i!gk#vh4b5bR7#*@%$8R$sORSkA-|QO)HAW7afYd0^_awONc^%Ii8HV7Pzb^>FF$!53vY3N0uPU(z9ZPLCx{E}6e +z%nR^PeFTC#<|98RJr7UU4gukYJ9qaMHLypU0sLIBfzAX<4r0U#?K|5Bz}pw&*JY*W +zHyi?g(oDb8(C{w%;_p;28C2&KM^*0+QjHqaqw#mrNoOCe?gkSU-o!YUfnKC2PHzku +z5!HC5xg0OsOiu0Fowf!Tvuh!J@T_al6IX7oMrU*YGPz1%GOxCnS5v##azEgV05%~; +zOyAAr%KV%f|M{+@=RFeXY4OR1IwW7%jkJuALSxubYf_E+zT +zrfRV8ks)r2PhagzeMr3~n~vqks(p*!P1e>2skRqa!_aRpOy$M79NNWZ?POB>6f-@A +zndi6tii2M4q^CUaQg=DEQ>tqRh9;}OIp}quP8mAmq!-p##iu1+KaB;{nsgfS>s~#E +zPOG3NS0zs!|4Piffy70O +z3-iN4Co5Xgzi!^;MZITPwc1Y4H>8>MjrC?0+j~ +zpna-wAG1_>UJiQtj>L?1XZnIKm_-kb9TMle`l+A%Nv)^;;k3;J$|t2NLvLATw7^xf +zUO&3TyVfhEE2Uj`@K<0=?6eY!2I)J$>~3jFpYWxFe$7e0TI`inGjzK*$d07pgQ*Dy +z`ZX#_|8bLkU!mItOm7G{eN!u<)~Ty1-dmT_Wv2g@(q6s0`S`v+t#rC7`jFY^Vt&45 +zHr-_h+@qrS7&1B(?DKx?G;FCexF@%aO?R#I4C9%5Si`A{OcMAHc5S-s;-6+)4!76^ +z_N7ej+L3sCK8au#xsJmVQkY}$j-uCLDV^&H1hCYqg@npkp6E=Q%H0m6#NZ=ZwMlEJqAd)F>2pXLsUBt3#@fp>?P;&-ChbC^otOS64SNA;Mq9O`sAPM& +z&Yt!j+ZkxpjxlRrbQkvqNt)JQ95eB;JLx#n{ak9Vy?ptz)GwK}L^`aA2^HlA*`YrPU1$@SI&xvL)EP+d=M$p( +z!RP$Xfwfr&wVTgk{~~lM@#t$J86&-)*_6hh+uH~CtBB=p{ +z>%e%SVz1@vT-%XcSg?U6@(uyl76>h8rM+BaPm_&}1+7hN*mx}RF-=@Swl5~p59quQ +zKHSX@EfAQ#%(dKF(JF#1WlMc-E!`?I?aO7p53=mbt&PRQ-dtEcu1$anBQ;ed0Dc#^ +z5UQ-X(6lGl61{?J39>}3s1+jN=ehjppjzeAgjOUB!9+h*XzE&J*`3Rr3bG7FHTiPW +z&Rq6n&{Fx+gia(3qo|J7Lep=nET83aCxR?na$7|Uwk+3{m0K@m7WhCFADg#Q(JD$*=n-LaD${sR4|riAJtbSgKO{_>LsE!bhNNyKh++=8TrPLXQy<(WZHoE1&-!F9&OTOIor+oi3Py8yj +zAt*td8|N=Hj+(T`@5OqlMU>kr<_`oJBm|sL14G_wqUR?9fNt8zHHUUO>rS#DpbA>m5OJKv4$+*-) +z-EN$aJqooR9q2^FQ5+YxO}2~=#H0}U*%tK!g_Q< +zPWvoB4wIV6{8XaCJlqE*zRE-O+Bb($LG77I#RIGIS4FvayS&=(M{HlmNPFEF+v9R# +z{DRvSjP)Xl{2*re{e9yj$J3F?gCggtVT-+4QE}>_YO%t4>VXO#mrwPnMkpvLx|%r+ +z8j!mPUOpvCN|%%d7>8DZp1mknX^8eAUSP{*z6(egmQDSHg(38Xx#}SRuU(7W8?aFA +zo2?#Lt)?OmdkXeOK%RRVQqZTktDmVr=A!&-`IV@Z5K1loK=0s&BjEU;z!bTH-Fz1S +zA_cphm;qJryMlX6f`VBjVb7uhQ|oeqg`&dvE56_@5MyMF9jz?-(Zzg2?&sXLo;06d +zi%ride=P^BPtT`z@6hsWprJTiqS)-9@>g>VpI@`g$iX>LQ3A6nWDFD}=M)F&g5cT^ +zOx-rmS`i>w8fab+Od=!d*L$WDattDI%c9L@;Fpif$iIG!pL}*g&Jp4EsAhm$x9t<2 +zj7q6HzvB<92>Sl&!`4JGzbwd(2hCUWg_tMLc(mL&)kwK&ytH1(Ja7T;Y_csw7?qO<1$Y| +zZz9(HvG-k5ANBLRW2I<}hP>;SH|&O`W1X*JKEQ~~dtG3~?-rRJXGaE05|fc8E?JbA +zEKE!mPlpS81BoHncgO=H6MZ6my>xN%@;|bRJzIvs{+Xv~UKULMxaX@$Fs^)}h|bI+ +zf<|U@AY=i3+$Vv|sJrZTtpAJ-itM4M!HQ00Ha_4EJm6gcwFU58FFqpV&B4oUp*TM! +z7ME`?NNN)mJuldGkU;XOP;Q^wXEL>q`KmuKfx5-|kl<-5l->F?05IM_5(H|3tL+b5 +zX7;-Swy{~r;ng300by=Le>g6So$d~ep!k;p2$%0jHVm+K4a_7c@7HBi=n*LoL^~1w +zwXpx}4?ISGa;`%hg8a~@L4I-o_87?siX9V>qRZa;A83?m(tC)zcrw^0vLne{fJhd) +zjyTvaal5!C9qd5jdIV*!PYi{=g +z0z+hu2bn6f`Pc5cVF_CUO`m4-v)vDz=rMaEU|$_2Nt%Tzj)EpI>jTJnv&+=Iic7ou +z-xm~T=zmc!%6r5o1)0`mbAP)FUW9_53It$iG~6nnd<9b$Xo|??lJ5vAo=7V +z)1WMF#$8ZCZ}JymEIVnIFRF{?>OIM?VfNt0@Af1W|3-;snaUF0&8DIc`r9RfQou<$ +zhs&g1&P}_k*37NAfmP^D_9qwTbC+9%p@K$J%uUqI^tw%NaBr#HYxnE3veemQGjRa( +ztrBgXls??IM${aap6t8zvakB`%&*JLI|UcwmenBBoT^$75M&I-0$A}zwa)(P`&#_%Kv$B{G7`j`_li3o%)^YLY$RU;cgt{ +zUr$3s{)I8c*l1X)iI4{K;Aa*_kG9Oid`#CNJZB +z0{~uq#NhTG^@vjj0KEE$RRYb8boVFu5~EFA=RKgMUs={J;lD!(trFyXX&G~Ylt%d8 +z0)Dq27;u0CY%@3pScfTNvL`Lm&4wt>(A-jzb?R{VM@I8`Q3FxwonlR%?AGm_>b@pn +zRp5#SRGb$ZgsP^g%H%}DbjtjLNMD>_nC@jh^}ajc?Y<6Vc7<4f5SbMp+7%z@AyBCc +z$JMS_YE``7ABNpQV>QhVc~o0q|3PG>Rye5T|Dyn#Wv7{tN9puhKqZIW$z3}}`#!Tw?Fs*kWjnS9lnn2SE~H+;Igz#nS5I7er__8^NA^$c8Jab8sV +z54e!u%x1hx!<=Nr$-C}gMsY&sbb(>I(A{(W-6;mESI+GAJt9YWbw1$U!tp$yb{Ta9 +z=2wSOf7$%4)X3duKpta^kVOaYyg6_XntU1STHqj62#X1J`}Lv_BqZTqnljE7$Ii8(`z?F-%50U-l=hU~rpBhKQs8ZEr&PnyQ!hNkfs +z{M~4B+(Inxei)j^G?CW?f&L9ifB=KQA$Q^bA*CXQKjIH-=8sU_5q~H+^5M`VMBj%} +zUd*i?wkCkTdY$mTC%n&svs%X!?2#Qb?B#2b$)1rRUL)Qa;Sb*op?=h{sXJXWMosvw +zsLI8(4RD;goxY$m@mOEn(Y~oBH@)cIHK2*W&43CT+4TTuoJxW)u;7BiV~RU$d-+4k +zi%kwNd>#(dd*m(Jl1j(`1Z~fK2&y!Zgx^H|iF{Ijum!Dk2bYjo)?Mln3bFhYl3)#q +zWu68R%TDgkhO<9Ekpy8u0ZN$eAdDwaVcY}~8;xvUT*9+p81oVd!d?Tah<_Fgmj2VO2r>YaA3U@G!d%>;xLe_fNt3vOCP$ENs5nznb +zQ7c1V%v!&SO0HGfiKfZI(DDD(G~omRZjF+KP(O0N3=5m();yULaYV}A@`q+Dz=wR7 +zzkw)YEZlx2ZN;j3@if3H!5r8RkP7Ai#r?+}$a{?b`iDPMX>o?*zwn27w9g#n=T}sC +z3KD)?u`u{AtrPwi&6mjWh^H66#OZ-ba6H{jRo +z<2%HX;2oUijQ46y{I$T+Qv{UBg%b{llnV|9lPzD)bp|da$&Ps35h0lqRZ +zKm{u-spNS9=kMENG^tJY +z|DZbJ0q|{`3UD|DCKe~U1JU?a&;T%#h-oER?hr3OaXB&5!TuAxResYwr1=yVw(=fO +zCwY&ox(@(7sV(3GLuv|G)c_n-;rbiizy~BQg#8XC1p2rRnGdFjA~DIBm}GJ~1|+^U +zIq|J2knK6YTYtTrX?n!{GYEvc2k3fuG6}DP>Vc#pImwzl#hyHMdGcff@(=sRBE +zJ5kPk5fsyy5DrHImnGI2bK+*a*3g(>ossUo&K+CMclA0=0>>8u$2$|9@4O6pC{cIM +zeZB9#_VGjeaC*Eg;6?|OzDHoZKK%J0b}L_cihVNxh9De(f|s(1AhJyRS6V{JA5?$9 +z-%*+@D=op~Y5z(FPh(eF0^ILDWO|gQ`jr-6JUPrd_O`NUqYIsZuMho4=xKwg3`0l% +zO(ERml3p0kdkc?$>#F$nQF>K(XcXfuoN6anR`lCMIeRD&mL(1a9+9-l+r=0FKLDD{ +zdXN*>SAi`dx_4xR56BF}jKORQfs}YU?{`O4C*h?JRDhlb?^?{fafd93I|i6Gt>iwv +zgALGBypsRqj?QloD?=5G^xoxBlsM5WV5Rq3c9`K%{^L8?Pb>dGcaOoD8eCjra?MTu +ztyyWgyp*EY>(IO`xVWOiF+jh`K*}e^(rq +z91z?(Y&RV4mtlj!m2m62v3s!IJbU1(pQZbStaIEhf3i*flR5=?PbSOJkKOd4?j4xM +zX5YLAMhJ%XynEP?+j>kP%Ppp*{7vA +zX33qF@yz>oc3otalF$ctc8zDBC-9R#eq@&^aV4JzV}8uYE;j3qaY`kOf&p#KEDAaf +z9kmc<6xLX#2QYYu=c!O;FwRrV?!eOV;CRf(*$*jV1K6d?r7+q|PFz&RYn511-wm32 +z?`c0`(c4LW-=qLG9_t$ydLuG))%pGY|Mz`AA075u>$$AwzMl20XFXnQJN#sd4+h$WgnxTrQvF=~ +z0_KP2=^gM%+kzFaZsx{1lgRHU3a8`b{Iz%hYwH=@$xPqR1t1Onyw2gLR%lw$aCimh +z`xMLw+fRJWR!W!2aC!vJyi6_1Qq5Da3s`>qeA&W;GIOb^X*>%Bg=<2KGU~|8gd-^- +z+an>*mNnml&%)*o>l~M`ISRZkVA&XHoujOpg9*QGrc2mNg^*liovEyv>B>E`f<3CU +zoQ;IgYJGxgdBQt3T5`YRBmMf$d+q%&Gajp_MoV(csk+ZEh0QJwoBg-2*)KNEexYS{ +z$s!0eFzcoxu47s2r)uB4{_n?e8js +zoyJD$G741ZRmE=Z5x44O^O(kl0j)S(?~)dZxx|DL&{%|Fg$rooVh@fc@Ue{`!&XEv +zP0PxQiG!$A6ef_39$~Kg-t-d#40kLAwyy7$U0>d7_jN7vRl<_2IH +z4uz9H)$rG@i?as^rwd``z0R_9Vlb14+$(9)JmZ`J(Cc!v4^EF6>Vv6szS0c6ASb>F0wQEcDkT +zd6&igcvqI~ub-^r#}0U}RKLzA0RweVTv~N!k`7hl3KOK%N?wf?I9911ub^{@2$2gB +zf**P%QzJ50y4_Byi4oaB_xD`FH?uGFP#Ep()B&*NQwGJdlVI6SzuR-*1ex;K2NmUH +z4x$3Z2NaZlnW|*NS!jX0ub>AXCqF$`m(NYW!u%~pFa3_5uk(YA)+3FQL10>cJ?wEY +z(GFntd4fD~K+vo=He*(2D+f3^qqq|U4}anSMa)mO43wFFZy9N0I2q$zZ2CLjBO;cU +zflV*KMj9V#gxFi!s=ngJFYBRiceSE4S2UQcwwKaByVFnm9jM{5m!Z3C)^S<*D{g{Y +zUpArthRdWB{O(_H(9W;Ct#(sz>J>sxA^WC|b6p`=3dPMj{wa82;TNKY#mD|8Le=JrrS)CXi8W#p5~F+3xtm(7y*_SD`ryF<|-LaJr| +zaB%iku2z&YiYB8%9jH(TD4MhiJmZN=@@h5l2`BFPS-%-Z)3e$KcZ!obk|*297x6Mg +zFV!Wd^$>`?+_mlDb5e+(ySDW^E#dYAB(J(hzTzy`vS2K9w4+g{U0Qq1(yTo?Wmg}8 +zZt7?Oq3xQbRf}z|e#~t`+vz5nb^3x^IUPbUIZ7g^fr+yS(HfY7}Nt*gR#!kJ(NhLf`F*i7m79v*JNt1VSCl~FTY +z*(JIcG_?N!LxIKgZ>6azMf$y$pmr@&E8&;9B*}o^GPR3I4L8l?J1faRpXq=pn+vWB +zzjt-k1^QeEjwM{g+%BOFd0L`_7dCL^%Ue}!E*7VQDmHTf?LFWmoRnO;0CsLQgyR$o +z+)R?WG0EP%%(@D*0mhqf=taDFN#D3`Z_3u9-Dbj2Ks)1MYU73G=eA$nF!@-6euHM^ +z6pzz~7o9p&pM27Dxph+DB3?Zp>sF-UvSrn;?f)UqvUEM+VtPW+c`LH(38nPw%Bpa% +zi@lz&R4))l?yDAM*G$*CnF{Mn7h%^TE_ykisT1B`1S3}pfS7@r!fokQ-yAz_*oW)1 +z%2Ulbb)To;qkelNp4X9|)M<>x+dAY)9c!#B9M~z@Tm50)=qff`>uT|cxD?sG#9-HL +zDQD`B!7=-_OifseN9E+@Q7x_+UUkv0mKiUukA|}WOU2NLO)eGiXlc4wIexjdIy&so +z27!+_5mNk52aRq`v}B?A|WQoyec->h-rYRopdP +z7|}1(&}C%y99g@qx`|O>9}`!TXi1(PH!l(0|J1dUZY?byS3Q7w91uu< +zhJx|x{#&q^veziS{@R8Da}pf-@-JhX#N(|jS9-BK_uaC}xJ77%uohL=p|zyO*J>-j +zS+>&^pQN5=4rBso%99zYGmjr66fCkDFOs*-OcycvoUUHfXuJqDS)=JeDP<|e9bymZ4Htmq6L%l^uLoXo-CO$8`|h{g +zKXFa7-B!k~j5Xqp8#mnUDh(;M)v`jdH0Ccbn +zeqA6@S%U;(kCLru!RGf~W9E1~2%NMC0z=)vj=FePYovRbj=W@6mfC^eu7Ov&;#Jm2 +zPiv${yNv##*qJ_**J#Sx0>?5n{0yJE4@&LO2{A?@g|)ba9lDH3<1rt|^9aj6<}=3; +zWgQz0!BXC1kw^R3E00kun)ji73aT9C?eHM +zK(fBgr|{08@3IEpWguy1xtBkqYk1ch{C +z(TnheE)hHjf>72q{6%V3h0V~F|Dq)CXTxzlrC#>iQW)-BSsMJy(v6zE?&oKfb}U`9 +zB{gEV_7f!&n8b`qC~_nTmid#lTpu*!+3(PH|vyjT66i~2WP#6BdrXLl{7!JDm8>Jtxcg(It< +zY|y4tgCTZ;N?A)WiRFh#A)#Hn#_Q1&8%8jRTIvcJN8{z(Fq&qPO +z7_8R_O1z41E@Y9o9_$jEv=IWk=9dj8h{2L|>redU?lCYJ6ILySzn5p0o?f{Whk&|G +z+$Qf$)O%j+JjHvG^SGjEmZE8rLOnyFeoUdBu24rR)Q>9EQx)nd3iTrjHC(_ytWb|r +zs6!Q9u8JyGm(I@IijwG8T$o2axbp?#GhM)q8ixyg?r<3}y5ghA$MpVaqY{NlJP>-cP +z*Bq{fBMYvn)@JF7yy>H+hQGp<@3e7s1#Dqg%nsY=J9z#v{7%zqTlnSjGF$j}F{QTf +z6Y3IM_`asU*}`keU$BL5jw!Z$8T@$m|HhQzV$ToUi(<0mGRpkY?(FHLJZKKoF`L@xs +zo6NS+lgnA#=#eqGw$X#sIkwT7rfeIo!GsTLT42K?eBmRTGHrDyy2BqCeYqB+IgRXF +zTwF@eFR47gWR2gdH>#B7Mg{lsqGk09g>RQo6ZZK1t>NsF(}xz;H`eR#dEqXS{z~A5 +zua{i?ddW|I**E>>mwvUR@+(A5dc!Y)dv&33dI|0u>AxF-OG*0mfel|SIlWVgdtk_! +zs!$9-jJD!iUH!i(fd_6I4%^7kY@hc9hT)d+8*cM8H-sGpmQ&;5g}Px0y#r&e?#K`N +z_5B);+|d{JYdO-TAKb6~$X)#xL0w0F*Dne3dRf0cFlfXZ{fdGHZR?jG6uYNiPEh#K +ze)AbRo#9iMhm)Ac5`qq%>6buxs^PNWiy1!eBgd|hm7RYd+PQgX=boXRhle)8wJ34$ +zsVs|h?L@1p{ifpN7X4smtSd1aI +zRiU@NbWK{J4!XEfHLoz+PpOmVOtiJM3gPyK(cE(9^oO +zO$%{cMDcHE$7nuY<;JBh5yQLaaX-AJfx{4MCHX4 +zq;9JX6YgtT%ihR{LlxFJ$Li)BNA{^ZJ=MExqUKsV9_b$Qmb&e&)#Z0=yy;i{$To4= +zO{f!caF>vs{fni>f(w2(W-DV>;Wh{yJ%d+C28}H));S?{ +zb3&0pAb-T08!J=U4O*hF1N8}2%M%W?Bc^ZxZf5_PUgi`TB=64vbf>OVsTMBjzI%Ob31Yy +zdQtr5mZb2p^>AbJVIauP?&f2E*>XahqOe*lbrvgIf0NoLv@LFETTJJ- +z`5#Y-R3&2NwN@)%AE{}qcKI<#8Ngzk)e$1G+KEX=&7%c^c(Wggadu2TlC2sK+_ACZ=4&YHW +z;+x)ebWd6JxRLwI(nGtd$9JWNwO2pfo<6RndO}P3_{M5wW4fYb$B>&H?iu&C?Qn~- +zWJTdtgeOc{if@;42!zfe5 +zPVa&!cEt9UYpc@QsO_SQPpa0sl_k2Q9q39_Qr5>kJ3B+W5?!x&dKt@Fl_rnqzp!nf0gf>+7UTVArsQ07~Nk1pRreB+}N +zo6h-aJik;m-#zx%ZEt>IJ)v!E)|R!pc6s<#dH5hv2%uFS-uNi<_+IMn~92T}dXm)SBN8>7m=ML6+y-}*9LV6-64*IOZ*!_lEk;a)tT{9PV=0}=l +zF4^{GJK6~8pqXM@>yBSD#=1nsD!O8ordZds15vYrOtT&|&Kle`>j7kgjFDfF2f`jC#pJ*MedD18`=_;R~NOYF=}D$-r)LU!Kcm!w?ySP +zMitaW6y(Pp14a9)!e*(~RE2UM6~U*6W$~FeRmW%J@x24FOkfx@YCJO~l!+b3q=ztz +z!kFjBc70ybZdrMA8g)Evtuka*W(2-cWlQs>f5&CgPLyIj*l$A +zVLLvVoQzEgtBU0zC|y>OM;eO$_|)Tc^8Ojs-VPSDp3S +zGN#T|ZFO~*!|({>hcF@u<1U3!pEZ&&9#&URIgE%fMueeL5XMsq<8d~Ogwa@Cz2q=- +zn)|FUgkeb-FDZ-$IO}wFj(hg1A`AQvMzv4R-7>XHJt1!i@vk4zf!T{3S9Q#ag5tm9 +z@=pbB36>I~v~dH{vQCGqQ%MH?^5r!Js?nYmNrp28svwO8O4m6ZRBY`>21|N1pZGh2 +z1KZK{Nrr@&2?^>+Wgk3RlBDGm-K#7m75_9?Qmg5??n{pt>OOeXl2L6{hbP2Ls!h`Z +z* +zH{!-rOJoTQ$?Dwig#{a0+`B{K0_w3X%pQ`E9o*>N1LHKJE6X0*>c+NS=09pLo>F|g +zqFP&(&1|Wm*3}-@S_s)N%T!LduyMc1p|AUrYXoGRIq}B*SSZZO +zCw_0)Uy&Vmu~3MSK>i8=FBA$z62 +z{IpOAlEHSFw|#}e03gH*4&K~NTJGaQ^5i--!0W41XRGNp-~PbW$+&^QeOoR5$9I@X +zi$H_CzM|%w`mUOLzmRYBorrKXg;bz~JXam$#h#avCH04Tc(+jaghhj%^M&flS}1%3 +zfc=hy038CNyW+>Xw94xXv7rzao6AO&7;yU$>Sm(-HBjsDQ@js);1G)ny$BG(l`SkO +zUIiRJxqlQ298v@di3)GC7Q;218mud1zxB0LT(iq$6%p4JpXh4gzt~@ObD>KyY^GU- +zVk-0*;34uc@}BVWT{c6ODr{)^(q!VwV(B<-);NP{r!8xoHf|irG%UAV=DF3?P#<8h +z1`Eq!RBFL3v>FRI6Aqch=H7DKLoB>6#C|h<$`^*&%OL{W`)hAnS0iy2{+K7mVk4kaDjy+?e#=coI$T##N%4Q$nn_1$EGn_L +z$+8AB;GpYK!`2qMhK$!jPi2@+Udf2cTkEK&>{%pw0#oj8(iE>Pd0870Hx#Q!f0Iwu +z2mc5u8Ct(qSCOOzW*9KrZNT8dw2YZ(@&Q;m$_$?=GKQpNM&|YT2cIhFoRKFYbTnNanYojf?IRLEG1Ek%G<6PEKgR4j5l08oLe!y+A!2m5><_7 +zIjbI3HYP{Amy}Ev=wj!!J>zcOY$?B``FNzzlT?(WW0KdkuHTdlsTjQu#(y;{V +zq6({SUkwHo1k*Qq`w>M6TY4$sciA_c`afu|_tFq+lQS(y_(vaYl=y}-jS^nzrD2m# +zziua@Envz;31!Yy@m0rIl4!+!G|P+h-<@d1!qZN)5_Y{4ZG*75kH#tZSDa|YLVh33 +zQX;N#qGbrCUfO6cx?Cd3b1YRTr1#QboAgpIjhZ7Q^-^$;WUW)#QHD9f6HZjIq&FUD +z8N!TS8uEM5nN}!7^wN;u3%xYzfH1k2A|&L}rT5k60byJpb#|`!oD>mtO}s;St8u}< +z3KxLAE6%RwMlK?H8gV5;fG)Ym;`|rV#eM0KH(j{kMdB)_GGT~wL5m25e#((HH&8;f +zD#hh+0Ls3Kn=H~?hZ)9y5t+-_Wxf1wNnrfOGR6nYVFNjDIhrfK1Z2+30WBtwhaD1& +z0AZ1HlVGt>N(lUZY;-IBooLQO6^lZQwUhjamWJSm+VLlqh;^rc^0K@O$GG&`)~R07 +zqJS{PtB0+oZj^b3{$3Dbw2+8IT#)DIUfPwvpdBLdqC7)?`X6W){!Bw#2MOm3A{=9G +z6q_X#!``J%?S +z*w;%N?ZwY?jyFfx-AluxbxF>&aOhrp%dnoF>r5Lh@O`vcHo=(|B)r{68^y;t(yAxYJfW%V<|dihnZDdavoIx>+5v%XhA;Pg0rmXpRRt7v3U`9N`50gHooDUI +zJ=V(;@`yCg@uCXZXlLBK0>P7oj!sfG%~o767aaXm +z+4KZ?Y1$vh6y-rG?7@9+yKI?U*4U#z+t1o~Prs_)reK_K6Q|1ffFnvS6*q#2)X7fu +z<>CscDUt*l?#s=!BhiJ*vyX9}#u4<4`N~veT(Mf}F-s(tiU`(a0(ha$}3HaUr+DTX@SuJm| +zUa-hL?SkYAF5q|CPhDW|Ne?Q9dI|PirQHkHZ24L$O@9gXqOJ1w!Z)@w*mFbyp(}dc +zCR|^*XUh&d_Yx9}yEHv*Gxt+V@vxm{sAxGr`C{AY%L`APuTOsKrnz4Tp~J-$?%*fC +zeWQy0^S66SXm& +zHtZB5vH~nCwe=EPV6k?kHcR>r$qFFIwFY&Yt$0G#T5T2>%L-_dh-CK%(4<=G2utt? +z`;Dz?rwut3j|-WoZIiNFirl}Ebq0;QY*7ESqwY?2VMO;cRj!cgZUm|BvJv}tJchda +z*pt+q+ROa#*i(+WtCun>kut+Q3ouF8mOwBMKH{YB9bb8E)fafyp`xDmGLMTswM~0! +zuNFN%t|Xv#EuP^tAR&WQg-tZRQTIqFt{x<)baeG=4cOq35AtBA*3hVmlfDUS3-^n!OzMye%=*d`(VP(?9kZHO9Y2|#n#OS^RgR6r6RNCrG*$vj=O +z6;C0d9NTpB8{X9qlWI?(9ZY`VT>b~umD_MQDP~IU;-jy +zRc$Z9#lHckYKDM_nJPS(6)`j*Vzw&gwk^UK5HU*yFA-$^h}6pI?EC+i4)(p>#Wv~z +zJnpx9yAmhwM+XgIMjDtwgC`CeL=B8J2JTn9%5|;{Dfzn=uAC~)R-0r0t%d^9GX`&< +zRpv_)>Ion2@A>jF#2)wIR_DuJ8Tezwemz@}{dRu*+xbzA+F34t`GP5Y=IZyK@ +zZ)z$$slt@SpBhZ2OmE5+Z^V;DRy^!Omb_Niwx@Mi<_`PpbSFt-eLh4!vEV_TX!HU7 +zT^%8a4L(s{YZJcFn*Oa_>k?~RQ?=1P{vk_b$P9dNo_VHR-grw$w! +zkuN-!O*OYF>4QE9up(cG1jrsB0T5@Zk_(5hgSRQ_ee|2vT%lB6q^UpQM)~d7%{>e% +z-R#4eLEu04;aI6^TA%>g>x1h!fozDL{NY0(wR7_&BF-y6_TkbHfkq9|NPs_1!g}#z +zNLVlNA%ulPqo3?+hS_gP=yKBRrO|oDA+;rCWESD(>dnjMHnT1N^MiIn8dtL3o8(YzgF`fyV&qOU^5>}Qq-q8>6 +zFfR{;xJTy;Z8>m_@Gl=sa)6Eb()Nh=;RfalViy0257$3mXwPEzAT`hjfq|ve9C51; +z^qPS6`H~w-(dyIGMPR>tp_!z|`854XU~f4+i;wyj0(#n`zvH9+iNJ35=x_U|FOu;X +z|9~`(=u>3FG*a3y`3LvpQRRkcZB{ffT`IksS7KiXPYv$O=Cgut<>4ry@?=)&&Af_e +z1Bd`gA8Bsne$SI-L~$dyhhGfj_*-5$x{de-5D2rw$oNfVjI)@qBql1GNhoAY51N+` +z;(p8%o;0ERxzhhcK<;9mT^@anK;P#HvrUr1wwi$F^CTe~qoIm`XY+*V5|ytc;5T`~ +zR4FCCf`F&&De?aR1a_L`$l|L23C~sB0dkteTL7E=Jh)Ht>fl-b9YBy%vK8*85!|Oz +zp~MOw>iIDmY*jzXqbq#SDp_ed_ynxWWB=ikwMwU^6#Y%ZxZP55=~sQwObES!tI1>k +z?jz*nkkHNCzw+1(K2SMsE&Upk8%$#%$n(97-{H?*3Hu494C0)ONdgIL<}g6=33ld +z8`jDFGf$Y4g+27kKGsCV#?Z~LfmqcSgrz&VzoYsPL@e_e6&<_Mn&`4!7dvj-#9bR* +z#@PM9;Qn#ov!#t&6;)P6+?Lf#ONdsCEKu7GS?j7RQVi}UhAYk!LXk|X8~vOQw<=F~ +zhyW_~Ss!j?o-m34xJu*G-^8@KaZlw53^4pNKF}mD&l83a;Au=}+>$)O06=`or`4VE +zo!0Mh`71Yo^8 +zxygvbKMR1TI!V!tT*x_+Pm75wK9AQ-3C_eh=5tqSv@kZWcYhp9o20Hv#vdrdohTyf +zBdezgZ9^U7$1uiFCQL_^5M&AA9?0W!q#(l41?ZZC@_3U3l4+jnpC@KZ5Eqaq?cc;K +z2}D}@1UDvZ9%D>p60#T*CcFMjlsW-#m%^0g#?W!`o_TR|Eh%nrnZvw1OaGCINqU@N +zpJbknXC6yr`Xw>+Jm%rlplzljohv7tKs@zT8-B}w!*!aNUv1RG>MJ&CICVWFr5a~V +z)Hg9d+bB_e$wu{S!i&C1<)V#ZVaZ87jTwx3x#@z9`e%8YjpAdzw^1L#`#p7}>AW-_ +zg%8`2%M2aLj1Oj_AE-KfRsUW;>*3$^m;2Qn?$VFaw;cWgn|l4J!qqrCEP@St+sC@v +z-3B@cCXKMD9H^k~9eoWK53o16WHS#XUxDIJw(Rl+Er;Rz#B1pf_4;XEOn`FbYX<&h +zzm=~IGLP(!3%>3_u}H>Hyn3fQ+h2j@I-Lzra0LsPfbf>XclAY7`{6tK`Bc~8+xjP| +zvctFZYpJTkH}%J0RsH*`>&9%*Uvy*q3)&%#{>S}l+=7swbq#3?A~x%?-q%*FGt@)w +zUu)=;hg{KymbMeL#m0Nxmn>@Sx$1~^t`Esdzh{dKCAs%*Z9Hr^_z8tcP#H~W6-qYaXS~%_EHdb+DbO- +zth;QW;Ji}aH*Qgy{RVL>%+jKW6(9_~AM?gyGg(F1(B84Iq08(ykSj2gL&H{AajYCH +zPl9OzkuiZKPZ|v*5SL{Z!{qKypmehsD);wn1^eywh}qMd%P4iiyReljcU5G2FNkki +zP<#toPG!aL>f|bSZiJbvSdb{_5kA}#5+LHKKHy;B?9I(G^TT}f<00u%?hx7{A2Yv4 +z8qhRXxz`nc>*lI3{+oZpXTn_NF@MrL1jT;-+bH9xr1j%Qna}FhuRJsH1nCG$NLwW3 +zvo5TWlo(|>U)OS|hYK|er(iiQ8X%&Wg_HQiYGObTR2rd=G7HBD{Q)2FD;$yO50E5C +z8W8)2nuU52AV|hFxW?N|;DwshR;{zrcNGI86w5jIy~c-0_i^!USg2M&Ha2UQ;-XRf +z$5FxQ2pz@VmFhRr!e;A8Pm5oWWn##|O9K5(hn0jF`f^;zc!e?|>!tA}1|cK_|5OHp +zs&kw!#At{JQME}Q(uynvFOT`%W;S|A-)pcFls?vyOSj;=_(uFqcKHXsD5^uhAiEotv?)z +z>9)3Ze7$4_0g{znT})Mu&FY^s7*P9&Z|eV}g_r-f9}MKTRhp$2eiP$PlCh5XChMh; +z`a8H?G#)DxHVZJ30={eEH?Ue5_G3ttYFLhve$21g%Ee?!GQ5ga`#?zIraM44AG6Vm +zi?D;d%Euh$g(Y&Tgy3E6ZOx^T!u2C!`toc^6cSw=ZMb7O_b(O#bw9G6Z2OJd%Hq5& +zfB^scjkACv>HvuRZxD^P0Ob7$`0j7qCIqCl0O)r?bMyx*D+zCR$xDpvD2-^d1J#!vWs#o@gRMqDn%r*L(AEH@S27 +z7QhFV1~P*?cL$%Mr_V5a-o_{G=`#_ZH}T1O^yZ8DSjh_h^Qn7cr<4%s8*Y*1S!e~E +z2gi*g^C3=u4O!!HBrJdTBJE{P_`o-E)n7y)Tj>85Cv-81U>s6H&6M{fWjQ6qA4V8S +zcE%i>MuHEr{th!6)wqc5C-3!?+~cfpI+Hq2|L6_QXS0Hsi4B(s&MEIE$K7>IMbWHq +zE;GWY3ptllW5w2*zUa+GpvGl@R2kC830FAVD-{GH&Azpto5%_$GI2BbTn_uaH#eR% +z`&CjwBwiqL2xXCGU-;06*vN-ioZq+^QdYORwQa@m9R##<-eF&9XH;L2^5cfF!p%&o +zgPigh&aM`}wWlW-S>logoP?ZTO%+Oqe{;OVGlWd?i^RKkfo!2i(9O2-WCBcaEul$0 +zjc{F>M4BX(%!VUev760%?Yun>YR8u)^Bwz@lnhA+I4_g~qHT*a&RxQZr|h^3iej%) +zSE5bCX|8E_$ubwVLYk|9G3A%wclq!#>j%E>CXd=Tv>{8!Lpg}<3bh5^#2_=pN^UD(IMHO8{a&u#;exIxy%*Rqqo_mIEW%52z{?nQ;ybNzE+J7t*;~R&L*j=C}6d +zE1mPD_0dL&Tpvxz&CQh!I4ly9jB!e!dqd;A{avTAe#5E>ot2A|O`{S%HuEDCSd9UVODJCw>i<^66N^O%pEH`B7 +zOO)%x1dp~D(v6nSRY1W-JahEgn1@8Xlsz~%B0*P>)RsiTL?tO4Wmq;Kmr~~;@(e-< +zo2yuUMoaEdN|C`^yf!x?N|zQ5#ji{!5rNOvNmh439L=sxglb4GKe(4=l$^fSzioBvh6?meVJ5rhI;Cza?eLsb)*u+@WW^ +zCJt^0jE>!Z^v&PlmPPNgJtJm-yAk4v%W +z=e$4P-SDrRvJ>5uch%u;xbE<&_-%E`_i){z>)fTop2yM>Y2hNthec(nslfaIqo-q< +z*qY;bIB`$)HG6(R{=>#;LSN4bF;*CfXKJa(qskUr6+KA +z<92K3xrU;MxDBloTWt+%a)h-xlxACku5F9d>rxeM>!ptrMcp}V<9Tghjd}L>@He_O +zByOK}o(2zyiY8U(X6Fd05;^^n90)IeBVsC9O5`Y{d}OX? +zj}wnwO0n6d{YKXipCiPBy9*8Jy`^h+l&F?Y0yWcH27n-hKL*?5(%8HO{aXe +zB@C7;sKqG>FwmZ&!0&y@eI?BoxX=BuZQF-%zIo({>m@J>1f9Wu`2<;IeDc08ad +ziZ)?Hj$@J>mV>tv#T-m~5P(_yL0D?gfs2g4ks0zJGaYw%2QoQ&W`#eqT1#zQn@%-c?e2=YKn3rPy%xM+x*b%>XdF`FDk>>6`od?ZYrfvb +zJ(Dg-n~0g}bKvDD-2!b9r`F +z`pq2p4TC!>H}MwU2}P#6q-v(?q^A1OBy^aZdZEdwlAU^?qn)HR<$}pkUC@b7>&**{ +zeCI@=qny?VDc;vkRB^I%ypv88e%c@79d)9z6P@GLJ5lH!~?jWg$<~T(WgTN!{c(fOpBS{C&a3&A37gU(%gyjdyWu=5fCoDZc +zDlQod%+?_!?};SuXp(oJdADA8%qcKGO3Ih@K(4~0P6V3Nwh-=w5lPJolbkV9#gZ|P +z+QyzT#Duj;7Ds)hmgB~lT3uy?kBk`Bi}3bFFAwB`O?IhKq>#Ln7WY7JI()D<7i6;U +zyhMXH*WUrq0Q?*P`=A^*+s_p5XIkcG;{5;5`lB1-{h>eNbpcWumE0d)?U39bm3Bz( +zk1lGpZ~gINw$q%UaP+b7oUpWwk|tK~$n>x&U=&QZup@ff}DdIJI#)ucBnmFDwxHj7`#K|xZ_%iNp$!_f$*YQ}Y +z(`*fYC-H@z)DtJO;%9Cq4WfJ{O(k3wC?;x#|q6pZflsBjYJbNE(zh}BP!iP?WGV>=I>P6 +zSJ~;d3*)jQ8g-XD+I}SroqjSqVZP$KX1U6vP`&bAqI7n4{CBAnJ*4IOW)57EvNLRg +zK}tRSlHoNSH6*mr4dmcN6F#ZN+$Y5smAd*KvrrM9>;mu5U&PG4T9akyz`|#@bL09@~ +z+YC+i`HPSRCfatY_(`_#d#At8Lb)3=F9{dPM?!i8a#Zx@$c~cbyN7HI-)0GSvM3GI +z)V;E2i=!$~=YJ3yq_+M)ervagSRuo7QDex2FdA&fG=wC(E7Ec6Q~H}2eP!z-)k8Yi;a7xZ?Ggbb-F +z?S1kP<3ETQ@?RTEU*L9rD@OHDm}uG>sz}y#8JD;>$VXHfyqyWVdpV#7*c$$kCG3={ +z>cu}-Rn(uV%090BgURAH6DLRh51Dt5z`FTPmSgS|I#Sqe7(y^fR0*5=&_AY#JkUVC +z-iN%9!oMpase3|YANpJhy_Jl@Uislq`K{>-d@6;tIPxp&L!U?y-Bjc!!vGkD|7K>w@0kI7eqUksJxy?2H!QaGHV?p%5cGOT~py3f#$>TEmvnhgtbRQ!5uhvznvUaKfm8DXms&|Y}3SFEM +z*|UJU5r2IFAtwDWOsz!@cY6SZC6T>Z*jxiPiq?>AYAt)mj+XRgb#o1lwuVkhpG9<_ +z^y*$d3CQWP*fmb;=}A>k0kr1+0dTC?ZIjt053-2Ydazr$-V=12`-<>Um3FE0>;j43 +zgp|?ZZL-}ZeVD%^N5Xys)9Y14V!L{Rr=`T7T#$W)L^LK7mW@fHrM)fR*(0R^tjuxJ +zXxjdU3GN{MvcS-2sokopZ`Pftp(sfij0--+)TrKjO33788+nr_6Sf^l9nhdcS_GJSe~RmAAW19S1t!RAWLk<#nNFmY~k=pA`wpDH~rmwxu%k71wyqeVegg@3hKZlC(RhT7W$RCN~ +zYzpU*)c!pZdBmT{GvzjWQ*JXPA1noN>QiEjQ=h_9OOzM=73v*p-jg;ecB(95^K;}T +z_3tepbyu89k(#4p?fg@MmlKtZbZSq?+oOf)^BvuRilry_&PU?MwoGY${0MUgzmrTj +zyU2vIXFf&*nQ#uw-$|UjMWuv@b@sj^X +z&LPypf1-|&sVfNe(?3$_(Gt~3-b9}vAwT?MNOpvrjzrz{M=C!|P6xe)#NPHNI{k-y +zgm>ou)tpQZk-|ClWMU;6Ppl%1H`CF0kCTt6l!q_~P-nucf0+(k()FDq3Jdz$^<}B; +z__aM(ADIu4E~uwhqI+TfpCme@k8RE~JttM9Tb_P;eoznPE3WJzNrNVh@{*ngWpD&tUTAchB^SRW&U+8HVD8+g8zBu#emzMuk9CYG9^k}S29~szzQXdqb?GZdk +z=i{D9cAov8n19f%Z}yK$QLuV>EWt0PvOc?eLq{aDN_(=BOp9#^)T9&0w#1P(>d=10OcsHv9g#WJt*Qvh#c7)E6L);IYY(FJ{I+>zqIcpLu`WzI^#KIWC({;u?}8 +zmuAKoJJ?WlA>5!KT$B2!=yLq0p%Acad&wB02i*vS5Q|0>ND +zQyh8n(=Y>M3Rxu2WB*5a@>6;ms7xX8|0YlLzp14EP3xih1=}(rZ)SkIgtMqNrK~%JSs{fsNn|2M9-W}Nt&INwW=OxIvQla98fT@Fmp+|Z);zcPS~8qN4X%Rs&D6lq#TnV=3^+`L +zFGKTeWz#T4JKiOI;DIi@RQjc%46i)R46cWB>Epr7W@U^)anOzETy}EoK3h|eq6KL@ +zuFp=-5S~wECKocZvq|hPG$i)-J|y-e-({*KlE6Y=^XBP}cA+&r5g&!1$lj!KDOJHF +zdE1p;k%668LB4EXvOF2{Eu75~<(R7G4@_#@q6 +zBYv%=Z(6Xyds=Vuce>kJ>CbXb-(F(zZg+2qrR3F(wumFBuYf0*_DJHbZUne3L*|FEgw?uFPYTlwZb=$|(A8+LnI^vW0`c~0R?N3Y!T +zSG`iBpRF#welMr$aF71@80+C~eN7+}J*3hrqY=i;)B`OrW-c;to*C`1XMWpQd#zq? +z8(Ic?=3~QxUrK`Gy`dwS@iUm{K}_zVDujK{(~5wbsoKN!`VGD<2zbRWcohN$KZhSu +zhYcPXrw3yU@#nhjTgR7r;_UiuC?&q`Mi52D>43S|wECcve%p<4OZgSwDp?nzFmhf- +zxJ*S#uKellBF&E3xMPNSLON6aJ^jM9MCyC7g~Y%x-^{^B)Qs2L$d=fR*svq{Fa8+m +z$Mg&L5-A)1r9Dy&XZd3!`tv_VI+}jrH$-Ba?UD9zFuS@xC-EqWw9kpX=JX4}bE)6N +zW8KtXQY0!c+H!KWqM55Falduql0N*$xbLT5@Izes2rMK>Tpz^!ZMEW8uI>J~$j-HN +zSGvJysh7+*tU6-uB$~+FXKb|3edEa77dIrtV1NP)w^dYzFfvtcCR3%bHIX_mF7Q(H +zljcfD6&&8DHq#f0YvDhJ-IYk)qci`vur-c!@3CqBTUeQgGl^6OKhF!3H8l{7P#%Fv +zmRDB8Bw1qR{Qa!R$)7+JcJBWe1*^&1wyBz?dg+`W``rz~D`~y+{Qe|5mMn{8P6wr| +zkMdEH_=H_}CA2|Xsu}OUMZ +z?AUxGY8ds56FUN7r>?ut$z~%uY@Bg~t2X8T1$INcHwV*Uf>n8&TuV +z9}>LM$xiiMyY_I7tUdH%CrOoTAIq-kK|a)z^y}RY^N|0G^nXutPG8neQqQwt&guV> +zM*WTQr7P}BpZh7z?C*E~!Kyd{y@Ht@!z50p+{oiBIkI;-^0`7qJ$@?5u!E(3p@PVn +zv}`XWj`AXi;#+aw8A@IbDOsn5oA0x$X&Na}{p_~w=tuwCxkim!e7{7@;9e2?RvTh< +z=XaBpriSDH*?l@yYO%~q4VmO4Dq{cyyH&jnM{nr9kaS;*)urJO$m!sXbUaxn@NtwX +z*l#Y1=>G_l_ym)a!>o9=3|B?AdsH35-4##kp&RR^ +zu)YufO#y +z=5r5b2-D#&EKba7gqdp14xDGJNo!NWg0w6vP_U)UN}%0V6Vz**VXJ2U4Rf=<`Uc3tS(*62cm++m_qt!R++A5yJ&;z1h0IL23!TB +zOR)zqzUy#di89R*sXl^pf5X%` +z_|-&Y8cG-^x_u!uf$!0faR|PJhZ9NZ_-+Y74l2NW%})NF1WT+-jPrLTgwT>mZIBq} +z@5nL0y2LntTZX~9#5jLTf_oX~Z_03^4i$zhH?TJ(gj|+~IgL|$c>K5a&^Wcn6;e?Y +zj{F_%aW9_k0Peo_xJ&{$wa3pSfOC6X0z!BTg>tmVPb7v@d;CaXr}hv5JGaLVfF12| +zK9xy)oXJUNRupjGrRsCs$-o;f4ZNSxuWsny^n{gw{{YE~O(nDt)}8A)O^l||pQJ{iTQzFjHC72lj#d%RX<#J^%x4Kyv)rM+ +z)8LvOVr|7TD7VbFn(|A)kfxz(-lwMUXUT&LQr^_($a^$@Mg#8*@_a)2*}qV(*-Xwn +zW(CW=o2qw}%C*;>OehPba(PMR>QBlgywzK(H{$8Djz*UYMW2!2-fl+!TY{ZR^o@iN +z9&r?i{#r(?ca(?zN{-T79PzY-=q-(SN`@PCa$&?TC784k_WRSixu@fW?i9?j_QODz +zRD9bHln_SJKR(>ua65(QEDPeDb(VRle|-iOG<;39Wb4p;2va&0sCb{FZ`+z&k)hy` +zOa;j*9~y6C$o3I9BTP!I0k78mzJ4a!gT3%Uz4UW$7(RotiHrlm^8_n>~F +z;lcsnN7?ehf({G?m@2QLNLg +zD|Xse!STS@#Q +z)Zslrp`XMkE8ykMpu61QRCL0B5p%m*jdbgm8EO}l8H%@yKo~8x8y$12-o6@P>!8$^aoNg +z%H?9Tf>|#bS5~DXBU0Cq&yc=hocpdJBorTEbN?le?^1LK7&^Ty9~*|HD6(&)ghYhi +zZ_SSQ)B(I_JZQ^m#$V42@!tahuG;&kv)(|nT2 +z;r}U7aF73>>T$Q%zrkZbpXm4pyI;`c)hNp+D*j!rWX1&(ySE@>*U+EXHTW^ReS-q` +z_@l!gbmfoQB*{`usb(k7+omiZsn{_7m`)$ANghYW%P|}GT8e$VyrSVMQ-l?9(s)@* +z#*4-=UN)qNYc$;Y6vuce*Kn@@AmhcI2Cyat<7K0Udl`Q*KGtde1u;sAv2flNXw0j+ +zK1Mz7U*0oy+g0p2TWoZoao9h9ALF(XX9F7cJA_zSg_nrM&un3d6>nf?-3*VzGVLsAv$5K$m(c7I&-VmIG& +zX{)cLHN;j?Xd8l6Kx=c;UJ59c#I}lvCTXjvp+dU2RQe!o1Z<@k+p4(acjgArzVGLK +zzn|Y9;>|2)&YU@O=FFKhXQahX1IFBWJZzfFhNcbu2H+3DOwc57cX;LTD=V(ehaQYt +z1pfVpgls$NL;S4wuFi)(zyoh^_Iw6Pt*?OBjNz>K(_wj581Fmg{b1QW@kOr#@dfjt +zFdm)KR^6B5euW!rd^DGjhwsad3WxCi8Txu^C;WR_)zH_ufJF2=cW%w!JylFZA{ZEb~aL^^~IVFjCi#Y+~0# +zfgyjK|9zW|XoTm*c=ji*)$v#p(^wyb^NrI$QHJJTx?|H1HHVKk?hD#{V`$xkymPl< +zkk8*{&SjXXWkU-N+y$V~x9)MJPp*J{^ZK&?uy2|j84&Vig%mdVe=%_WG_+QrHHvM$ +zjrNwL<2JerkiN{^vkdM69L@N6_@=}E;x2&ghh-g~WZ;3M^){M3+&Y9{yFbEVN%OH~ +z`7=4y)$m}sDm5|ef+#9HA}V@()DvM*&xb_48U((N;j*Y|f6!{exob$~%$&pZCMi6> +zFwEB7OLM?ReBr`n5VbzTu%{O54NzG>f;Xh#X)B<`$pDha86sgK3(35}@JGu! +zrsvdu2pHLo-V@c6F8t&Q#7^uPdv#h)@${U*Yw$YjwoNI26Tv%-TRwt|KS%c3h@1-t +zz_yH#Za&rQ^Bb{+Ybqgbq!n%qtH7a@dzTLose(DdA}<!@%VYBAOQqb70PF+XM)d^KJ{%({4>sy)^o;s2jKer5Tf~OpG#uERnJo0a_5_7q+ +z-UdH*&b3w2n(*Ku`G4qJ3bp1blrc+MIMMYuyaGi%WwnK`kU%YxcO?yMoZs~h|Q +zp-7vEUg&kKbL4PSA9I(z*T&iD@CoG4x68KsPJkgY&rcBa4y~h9ZVpgLl_`XqbWGAR +zh5pmEQSZQ&D7dmY0N3c&D~itRxma#Rz1sCbtGQc_S%vTTWI~u`A*!7~z6}>Xi$gOY +zbWMJe0*@LCza|a;N}dA0f`)%>o^@YIRF{4mU=?GUy6kTX71yJlIIT^Hur1Z<1>{!e6weWH$jIR +zwT#m}CXeW8oDL_uU(_i_@?gYwB6(1G8=uWQod+P1qeTJwNO&yDM>9_MEam1k`_66K +zV|nJAd2oa_e`HRNT+RWvrT;iW8`2?vHDAda7Q*Hm8Se1mc@4NtH}{O>fj`Lj5!@he +zp1JE@UMW3xB#&5?qrQN!jGL^LDYq;a=Z*Fvk;rLGK;JdrI3PhF^Dmq2{Fby +zwD6kiy}05Xs2vI%tLlQ4YGFyRfx!UZ@)}fyG3NQAg6W>?aEnLi5UUDRpor7K5S&`G +z8x>5T+lSlQo=0uZOEHMn8qbP(*h)hV4#F5N2!ht&h8QVe@^RntlD~LwUmi}TfA!)5 +zO;`>@&w*S}C4TXeecp?g*?w<|LA?HXc-v&cz)FM6@A*IE@yjaC7C9#j6uID^XQ)lk +zY2Z5GV$fdy^hQX@YhKdrExW*t%wl}5`*&___Q7@>qm{936BCC9SXV?$i7X&GIxNdnB +zI}KynmX;@?B9_SNqB00|0qF@|s3_zi00-Y@EgItZ`;v2c}p?j_v{(2(cG5UgCEC*5RVjqSy*Ye_ytEh;RD`JNt +zzH98Lh=qL=axBY>i~If?l +zxI)^|T-fP=L+&X_`H>6&3@;u`mo*NBr_!4C{~M$fN`8(LOg{dK%|v&|-N#2@tN)Fv +zuHF9u_hvz{J}=lf@@B#QjrYlxd-xf0r_1oCSo=K~yAg~RH^faYZs2RY1tnfV^3mKZDzi+kRv0Iv04rQDBGZa$ +z4jt5>k2cR_a5N@A8>TTwUgo)6y6N8BQ&Xsoq8(Y2cPV0p`ME&@%h7w!gIDC?a%PNY#|L+w5hc!hU?69mU6$%vxd&NE2Nob-ZtgI+A;3e8O(GT59c*zIh +zzUCiXy@yBYb@}RXt^F@RAQ&@a5DaDH<Ioov920l_@D!r4kMcn4P}1ka%LqT(WkE +zBtx_#aw8zz3e8BENg%=410%cv<1fxdJjZ@8ltw|EKF&8(6AYV1?hbS~JsREvgG;j^ +z7~@SJ3bwpk!rV^hmaG8xE(vop9W{*yknru7YiO46&A*xjQrl`%i_ +zqfKlOhCjguV~i&UaDudwG236vz&c6YLf)(FfzW +zFOA-OUz$CKGfRDMI;JCvhjizJLG$DD+6 +z;@H~!eh^TXwswDz+u-JYdJe$!sUkyTo9g37Y6KqCP0HcqLH#AVM6 +zB_iIOoMV1+DUkW;dudMtlrRxQk|?^4hp!TQrfR%k26`B||IS!)u6}g}c6P&{ZOwE!Y2ZwO%GPAlrwktO%PXs$eMv`ORnhw!W +zGbNj^dl@mzDCixTDG~qfW%z*IYJ3TqA=y0OJKN_oceA+z4EIt_F$R3$wd=uba9|j( +zO09q=-WBLwcye_OJTkcv8Mjs6SHyPeof9zkVoA{;7N!EvgFeOx7$~{WBBzUfQ~bRG +zIg$8a_53HSDF_yWagezF;bmB7qXnKnp0TD8@Qht=bdJSXmBcxgXFi!-%j3?1-dVyf7-{4rV|2t?eJGoYt|*@7Q2wuN +zH2s%0=s8>)mf<#DUP90Qf3^WM7Ev|XYkp0KO^aNWR)L9pWRC5Ws=njM`#!dE#`LpO +zrkM*f7&t`3jjYiP=2mIZZRF-5$9`a}ow4nJK15`(LL_DkD{3n0SL~_aB9?NxNYrRN +zN-2T3lu8 +z;UTHbA9xvT8_x=!C@k24eH=A?Wz00@)$Dly2VQ`WmM|NDe?W?Mirv#B%q!Wj^e&M2 +zsv@LJ@}!vD_3s@!4oB87Z-(a%;F6z>WH=o)GCzy_x9BD?E3?h-EWsfNvwO0HS)Oe! +zg&(lwPUcV^*`q=I$Fe!jrj^5UluP6KM~uK^dEgcXLc<>qFix#tG}($DHqnzH8~TpK +z0~40PM&2h&n8n#<>td)9;Es?mi?Yov+z%3dEX?*9xoJ6q4)vJ@+2+q68}`SY0{3_c +z+_#^bZ8k#+Ii8d6aMU&zdN^*l{KMJiI>==sBoHC>s4pS`zyZ8tfoza5W(04r8!R!` +zYlhcTcw!@DB#&}v?hE!)ba0Ujd_YPf{R6Jx`tl%0e_sxL)BoOjhw#MBwfDf@B0XG1=mTUh_hq>MxUW5sxlHv)-$;?f +zEMCm)%!1Pn)K~JF|9q)=JN!J1eww|h02PZ2hVaTmeK8NF;&?1<-^)gTu$TQ~+y5~C +zp30OA!=d|zaRI*Gl*O&BWbbg=Ol=m>Or4rGHN>aYPlGE9fH#!=R~FK=Y4->XAnoNW +zi}5ZVLH;~kAJW$NV7guRrM>7Y$9CVB_G}g~1-_f^x-Tt%2%mosr@`hJd~d?tx4k>! +z;IN6TgcA+=hIhvophUw#GaQ88^ol`-NXZ*e49>O6d#!5Y0I~ +z3&|b!yg$^s23BikF_(b9&7Sjz*GGM0$|Pr@Sq{SNtUr?k)nPfEH-rA(zdRue_uo1) +z510j6=AV!hx!_MrAb|D=PsqWFv48&-6Ij!0JaG5^pmYrLP?q_jETc(xxSm}TK*VP$ +zqV?cG`px2@G2_U`{4Iqxo9sN8i8`{iHC +zc{JuE1g~YJoC=le*O2zVl;ik`O+|Bo;%}&LSFis77_+A?Rr0Yu)*np|aF8w{?$x>&_}>uLz&2v7EDQ8Yd+9005j*6kmq%|(X+u@51s6}O@a +zOa}0gwW7-R6OC&(PklfGKOwRkSTDHrA=^ZIL2%dF;JocZ^*#-;PqR1~4vwPNgX@9v +zi$`X~jnVNj17E1L-_ZI@(#Vm)(x?35vA8c(CO&5I<#8cp>-^HzL*9e|^)3yu%Li%m +zuP6>bK1Lml`WiQRXOYftxkwQobexA3Rf0KZ*sOsp06y8tXWrJJIY*ng;Xpiz-#Ta* +z4NAnO0A>rgSU|9Kqd(F&knV%>|4az+IXx6>;Kg>6(Y?o)J#6=7ieR719^evDd1iwK +zqLN!ieiyZF(T!qW(x62h)Dt+HL%^Xnl>Iz`I{*RpT%|#a2wCN;#^EJKnoaW4{IEEo +zWxsU|t+}Wy@+6C~q8fDE8qRrN$L^yc59$6Mt< +zS@*$RGna!37mj_%%CTMGDjvJ<kF&zNlo&rcgM^xs?eW>=YcXpI7RB)i?gYT+lWe;qgUVcS0%L>=`bF +zzs7DDDRm!hQ-B5u!Zm%Fmi^fO$O|t+#t04W;{|S;>|=(t_s|^adnUkj3h`fyo>}uv +z=EZ~}&t}98_^*h~CSdP#Bllg=GsBSQm=JNL7|H19#V&)wH;R5xn0IBH~y +ze3Hp+Ukit($S~|tjCTo|((wKY?W^vaTg-=<<{wkYSBK>;4hxKA$Ez6e{!&G>bHV_( +zLP8sCiGOibCQ+3Mn!Zm?Fksq(Cs_vZI-)6<>0KHj)0Oje8nOEZ?zD}oqnb3Xa%ri# +zR_4+Kwgw!MpPNAU;B`z>xxIX}#WvNh39FSIl9PYHWl*{muQ?2dKCTXuB@cz>w=iMf~bX-$!IK%eSTNRR>>mRV8CFgUFqJw7TSJZh~x +z$`BEylQ85GmUo%k8D+ulXf*s&!oN89m*A^MVUL(_>1^I37Iw?s+R^kaZ{_Hv(x_>n +zQK@0NlQ+X|1ei|#8MYW=Z!K}(?!#s1a)jKm9Q@Yj-W2n|rb#E?+`v<;H*Q!4L6ZE~ +z!@nr%jkVG6c-<=LV+D{TVw;AN{(yVBjxQR-Eq)M%K}0XPxfyyk^o#ua%|pC4abeoS +zkF8w<5tzW8;PYQzm%`060sGl6tE7sL0VtfCr3ODfvyM=FZmf-Q4*;nj6P|0TBgdZF30uknJc6jla4;m{L}1iscMbKM`w@LNlzu@5x|0iy3ZbralE$b!Es6w6=!~j%>M5d+Mzz4j1Qo +z5|_i}BUcZ6%%7GpC=6n&AoK?I7Nadxz|Vr58=NzN#XevN9mM1+jAh^rJjgNl97F&f +zGTbvCWVol?*C)xZFPp(m<*eVvG=9Dm|@-pX>{0qY0qYucR(6B=DxHQ8Rl|GbB7G4aeePx><+uH +zpU}pW8Qe-j2M?Ds$0PhS8Fc79{LIs#3(S%XGUQ$wXERC3a0lN9Pt`BbaHNZ)-%{v* +z2bvgY&{YxLbhJ*Dk5UTgO)3>iNuZG@!mtiEC&Nr5eEmo8px`I-aE4oUuT2wQsN;)p +zi6H?qB=8Ig0#Is=;8P%66k`HCSeF1=u3DEMqQ}5(H=wIKy=$q|UEUQIEiB9lXCgBY +zQ;;Hmbfo#TlnG0rg|O8XOR>VFa3&%Hoea?ee{`S-xua58KIDSr14ED&kDsB1Bua*AFzV!pR}@s=mTGsm$tRb4oIPgud&C;lyopI~gL +zh@D@N`E-R99&4u1Xwa4yfj#7IXb!3 +zUGt^xH@m`K6%{6q!bMJiC~PkjwtpuCy$lx@X3G-zm?}@GS|~&a!!z_yMT}q(A`RW|SD1+70tA=eepa0J~qk+%wmg8u&HoCtL&WA +z+MVCtk>4{zbW+;O?}IH#T60?c_b*~M_?h0=oBTB8%IdS38sgFzBUhzCa7ajBzmEJe +z3lpzeh#)%=>?B6Jh>#n_wdHj@lW}(?Qx#ld-b&D4_+lwj7#0nsnjT-_9Owhn1h_ +z{&Q4|^inwg_=DJ`Fn)482ADL64$Msxe9(-%GFP{z1GPx1D5hcQ+a~r^Z+{( +zH)#^shx_awDo%vYaWcQRU$BPVk+>Lr*JW$iM5%{S4Gdbt{^qY^rfauZ!z%p@#=)K8 +z>nz6BgW;=)ndvxeHPVmsFd{Y`p7xGS2e|YcScus=*VBNHFya*bVqc3$6`yUlZQSM1 +z#z%sC*k-^W$#VJ@JsDprH5y-H^{xiK#STtt_G&Dqe%3yrTzRnCGw)OjA2bpcMi`mG +ziSYD@GV}QK8Kr9 +zU#U#Qdl+A3G@2olcUU-b5T4t{BgbEkBMh~?;=K#YUtMS{vFgFyuf(a1Pu%g7zlGRt +zCn^paq>dsJQEnmhtO=iY0s10fD}V3g+5WN6`jf6TpsRPCyN}UV|zF*NMT~H=*#d_xp$PoklGl=vG|T5!($!#TG-5 +z<2)l-$Y%C&O>cKs<0fK&9_sdEmSa2rLi&JLWQihn*Dx7?)^UeX}`-2 +zJllf{%?~c@mEH(1t?&A`^@3xt|8n!k2d*^mTtu*r2=Nf3okUQhH@mSj(OQyi?N7A! +ze%Sc$58HpRmUgy(OLQHvmNqwjO0=K0UT7`}uaq{HSWi{y-%HfKm8g9)TfaTKO1c$b +ze|(_(9@Xfe%d$eb5)cEF@^<`*=CiOtjK{R`lvJ_%PT!@U(__EYueIIAN699;I{2=y +zZ!0NnkkVKiSQ8ony##$*pxccZVm4Y%-`4BR`Vw7?V_W^%-F=*6)l}dgF=7_8b9R=OcRbVmk+T#3e{bwsYcmQDE)n%6V +zU*9{XW;8rIpu)B=TOL>>lX) +zG&lmsWU3ZkCYosvy5E<CflX(~xuEKJe3m2T!?C;yI;2S)|taf8Q9_XTG +zqpS}Y{f$HqHA~#+wGa=(Q0(`OlUI@)pSw0$=(rujsTa1{=atnK;vtFjA!aEagc +zCYO01F6PbW;liQ-knv8T!6`6M<8+cD&=5@2c!T71@V_+K@=X*0?%FzPB32ctZMJGV +ztxhW3LdgfJf(_Iptu|jrDIiK@&f4z;@Fu0-8{~7nc+4tk)^`Gv=neYWUU`z8APjzQ +z=tOULh>6BaRwpsZLMWO9U7gl}yRbIIraT*v@|?&($Twq{fe5b>oR2&oe>3D}V%!(w +zPE?p)M>sZkOj_y%c&OsB9fOzC-jcs(pdxhC1Xtjh)>(E+IX_VD0A{aw5ihBkRqH2< +zw>t)p-}0WAA*=lS1;@@0h4OguZEx&RtA&b;dMm_4kx>gFj5xTpL%@D|$EeNz7^K;W +z2s<^|mux2{ySKxDOm-0y~7M=-0xiW=6Q7$;9M +z5hNh_LjB<7s3iXJb1)j?@g+K996rkAgbDJ7XHk)7(d+aEA-A{Y@e-)uEQmW!g(#`8 +z0wQdNpg~M-8U?S7%D`#Y-$0DU?}BQVK!nJzo$r`0mM6&_0}pJHSGj^!`fZ!=QP#to +znz~hko3>u{P(dDoz=fDMco6t3G~$6QA{2ZsP^gF8pqdo^@m*NhS5fPo{Np>}l|u;F +zxmn`*MyNYubomPm{(NnJu)bem@aMq?Ttk3w_|Wz%bY~i!z5<=W`cAGuCs&|Tq3sOT +zc0vKG-B-X7taoq)99#j1LhA_DI-o$i#aEy?Sl_IGmk*&8)CBjfZB~R0hRC*sjSDfH +zx)lZolMwCZZQKRXZXQ4vIl`AmRp-NviSQ?*q63*XQ|R-(l^yVAm0X;Jm8YiQlkI1^ +zEU+N}Y1JIu&Vh8|JUfmJeV-Wsr&)V|z!ks;bl|E9{B;HJz_jf9hR2#V&&0YvOIiJ` +zv8&VQoUuM1{&ouOZC%c`0f6k{Aa^w@TsRM!0LbtSAOBCV<;oN>IKb^mS-st8tTGy= +zZOMnf=Y_hHM#ITQkH5eKRQCphCocRoaU>b~mO#2fClOfB=zRM}_-m5z;QkHlCE*)3 +zUX6!z@Ir87i_ZGB?)cB%mVh?&LU2{bjjJvqsHEG3_5&f>y%k;OD=eT%P-6y;R5aNx +zE^QNPFGOm8iA1(Ccl#(jJmP`lAsD+~R;O;#)Y{1XGO#u_t*N6dwxC*>&(KH;2kMHO +z%1y)=h&{Pq)+Th>6b9Q=Fg}_Qm>ZJH@m0Y$dFKLqCz56!0x4gg7N1-IuWhDu|dTl;7PKB*ww$8-Yt&UH`{lu_sl;YR*>l5o{qJ}{I +z{6oTh_<=`wTyp8!`BwtFuNTlzyZ?lR_=Q55 +zGLQcUx2MNNhHq8##_2yG3@69wOA^Z$q-k@r+usVVUQ}9V%xyFYv9il80_;?zQ^;$8 +z5c-ksWusz}mTh+$V{ZIl1_It@W`1$*ngTQr9~{sq7-B- +zim(HlZ)AZ9Y!HFh#=PsW5Po)f$@9hxj#gU=HK~UHte%(Er +zD-B!Pe7jSScBItdl)Z6YDu-<=JUx_P%U^5D#3gtlEJLtPPXga89Wl{B5uBQnh{x0l +z;f+{0d5xL(JT2}uW?6T96?|z7fAbQI$x6Wa=06wHego*{z^9uxVEjxMWHQ!D +zl^^yhVw{S49g7V_KT$I#%*Y03)?4X?g7T|s*u1Y^J+pczvPwvBzXW39%sw^lzsg@< +zk`22SXho$r`#mRy+c{!-+)wCXD%jyfn24ZQ0C?-SLsw1IgxI}0_uy}>-7}=I`*if+ +zZ|6EzNn;yy?9JbLZA+!GpXkV&zkz6v@DLO5rOWp7@Tc)dmzj810`M8jYIvQ2%Rb_@ +z1^~2L*|1oeKrO6**j46wEF`3Pv-8vgYw+?Df&{N&bUGgBd`t_cB8zW +zz7|+OOkGRN!1*nHfF}f=Lg;eUW%Q4}dc$O}*c5hKke!OLAOdiGZ^h})01Z3zJEj$9 +zk4g{~Z~%b_aL$iy=Wv8i5&NAaEjMjFFv2haoJ5QZ2*Bxi)14dv48#{0CLT+ +z?~*I^?PkAKqF$NY@%%s1nhO)aj2~wlOfa^Zj7AR;UGP1x;JDW4wdOxdSPPwDzXj@u +zXjO?d?6E)t5gl6vVdDZ!M6`v`9}Euwd&JprKP5H!eZE+L89r&5x5q`11}X|4ANDUv +zO;{vW6HJd4m}jf)1Zg0mjQe!9H`K;@P+K`i)&~tLsN?5AgDm8w4H$ +zA1!!EFdp7h%WIHT@_OocGo)=|=XY9@@mLF=tp-+B5|hE$Hrhl?Gv7@GWQ?r!;}|eF +zxh`nI0B88*lz4hD`eT>^SMSUQ3ssHOSGR1+11zsSsA$TonfuS)yjMZpD@+=|1N*vfbeDNyC7BEH +zt$32+$q8FKVB>4}u(zs%lt^Ef!eVUsP;oFk1V06Ds4scZdP>*ZJ#aC&tF7W>M{9@b +zn_yf9R)Y2mgp(R=b?8rCg|)k^rS>YF+>2EF5P(+O!7l985uoD*Z`m(}ISVKi1s(^R +z9r}c4%K`H^_)G@XNQl(Feay#xPw9{mA#|$X!nbfx@9Y$$by@=62#fQp8U0vP^XOjD +z_wVq!2J)xu_meflEilW{H;QgsPsPH!naN^oUSQ8Iyt3Ovgy7@!H!3_-$Z#QdT@M~H +zO_Ua&mJ8N|BwuTJmu}>({QdYSY~Jk?asaIu$gi0==K3do^8Wx04~NeS98T=nW$x{^ +zLlYB#7|k +zwjxCw>J@*7YU#!)bsCI)tQ*$cuOv#R*lyGscs#I-##VtQW<;+NAJSW^*5OO^C3<7& +zCc{UViNTC}m+MQG!v?D016{!$W^aawjFMy#qnuCPC-bNK)Abk}ffnLHT +zuvQKdB#`p}5;@)n=>>8rg7g}hiy*xQxltS>_@cL>imwe-gakH)OCXPMkWh(P0ErFt +zL3)i{bPLRPxp|^1Xe^5Zl$4#hyohsITiYR6dm@uuEjCe=Fg_puofOLI)-+Kj=D`S= +zp&U18f*?2(jyExNW~g8)4>f7VF{6{oRbq3MdOkd6$c##+Ulg0KsBnjgDvP7a8EG>4 +zg4i61a(`v~lIiEg=H3N(*-~j7)y%XlqMsAbmnKl3vETNv4YE1)?wiuOj;3ytaRq%- +z>a@+XP(gK9Ew%@Tm1{cvHxm_Np+?)wCtGYw?3$_Q93KKLaj9WXJ>e{$?$k`B|A2(C +z7HXW+wxl({VteY`1g_lT-z=~bFMkl(s;yFsZS_*A-S(2n_9A)4i_1(Wf)Xgb)3yP} +zPX?TvU^gk)cLfo1?Z%RVv;2bNu?=GO9YN78_?>W8knp9oLCC%>aJNX{H43Z5LzJ1Q +zy*fgUj}Chl#{sQ{8r^6 +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 +zDU4bF@q6w9A_c*=gL~w +znI(C}v=cK?Nf5Kfq}c#YUX~qLoAgw(iAX}qE|rK~U@WJvS}2vaAri{5`I03QJr}eC +zSM#rbk_Dx}dP4tQ(!FIaE_-oz@mq797qlNweZIXtzv!lcdQ?0fD;y8{>;mJ53KO-U +zO<*F_79xRt-VYW@C87cz0+@owhMW%%F&!t-F=0Rz|GdafB)W(s*D?$UmREJlSI_mk#H!otV6bAJsx9EyiTya~Zt_mzju>4=@v +z{bhnq`4e|a2@jzKwZjFA5{0hdC-)eB1CRZ6kn9~a8J+A~mlCL1_!19KY~cxA#=B0Q +z2p6pd9un(pnFgo06!y{c4AflkvMit$tfl5;QS-nBy|ufe)AQ7X0n< +z23bMdREw=`3Vc*-+a|kOz5!tnDLf@ +zC-(3pI^(-qZ%|`ZkU=dT7+B#^OWbE}1G?RVWanTD^o_e{P{K-Jacs5cUA%QJA@6Nq +zmwEKL?_mg@vaEscA?9}fP38J$IT>-yt;NG$g%eJY<{I|LK|Akz;0UW- +z2>wd~;%lbpQo@X#r%0wdmWQI8~piX(^+iuZYOVFa+lBXDUz0DE#f?>ik&XyART +z)rIOm4Yk@JfSDQ@F^*L1tQ>u?dX$TpUa0%6izjmOgk9aj +zcBpF)ZU0^k{y(6>tBzLW&BGf9t$F{Jagl6rNf`K(@^l2q8f2zl!2TStR0`vh7cOkH +zgo3Z{1HEPIEVdwbr@t5$Mq3cw>2D!s8;Cg&cN7%Uox85tdGMOUwZ#b$?)YZ+#iP8W4t@i8KiIBWOWIqFr%8Gll* +zpKRQ<2`FH_84Lt;*;Z?{IfMOHOQ?s}0jL>&2nP1FI)a_XGnhB><^$~|K^{b`b}O)~ +zT4?8eqvJWjr|JBo;D>!O5d25CPP7~E=y=~*A>N}_2!5n!o1+$8ynsv5iE=0%(Ob41 +zPOc)#*mi$F0)67{GyeE^J2Br$Jc6vo^UqG_;bF-id2xyO!yz5rv3BNlHE~0o%)`*f +zbv0~FUXr394(_$m-O>2?vXh`s^XPVPUuofyUkAWOO(KQ}7cf6HSJaC{gmFPl=veED +z;OFTQa?wL&Q_Fsio}Ben5JV*1jA2CO0;qsAJ1Ea|t8v-9CGH=1zTZ@*`Z2NfvkV +z;2|C^ayR0uq-%N~ZQyV4BOk(ktvB(py5hp{sX9InqG3F^bqzh>ty~lKxGXGMX0|-q +zSfw*ot*b4r3Po~RYDxeealGXyjEaU$7Zt{n%=>Eg8EIHJ +zTyHxr!|;hNwG`sjUj5+FfkC@RE!)em(HI^w8+5`3|K +zPQ~%-UUI;jSAAzMgU49ZQg#Z4$3rk>qD);9HA1*NXOjSU>N +zQ)8;+))IKC68iD8*UrOax5NHDR_C}IwqYzT+1*#!tzM$88J|=;xizWm)v~7$lXl@) +z!k0m_wqF*@u<|5zN20n?(h^WJKGfP5e7W<6yd>tt2mHKN(D;JR?)nYKM{1d1^SsY; +z7VLYsSqtykhwR3?E?a~%*ng48nU1xeQ#;dn++RNTS76~qsEi;|QFKq3orlIi`25C3 +z;eapfh0Uans9a;v_ybt>%|TK-$V^nbAC=;=mD`2*MB~wlBXgg%G2_+XK!r~lNQzAr +zxvK&IAcSx+@Dv91gvQSiWQ$R2G_HUTfLF3cx9kmgw>qpI1g(-R9`x9zyMlvV8CX}Z +z+LgiM{_?rMfZcQ_Z-!H?Xtcqjnt<2Ihg!)dvJqrsTSeLKrZLPd6*TSE2f%3;JeCkn +z9`jxuRNa{5co)X|LtbqMx%T_wKUF1Db*;Da&h@}LBV)tS6HDX8jJGu{*^Jg`m>%wv +zUiBr_d~ok)|0bO^C#39)=y1r$0QirV<~)2SP#lp^=# +z9_RLrus`xES~3S~j)Yx2GPWgMojnt-aiyyBK&6Ds|5W8H&5}pK`ERFCo|JhZDF1TM +zKz}g!+h2$;{Jn<^axYSQzTtV!Xa{Z(G2Q_WF<9@$-QXoS%KgYplW~x}>%O?Wfkzh( +z8hHNtE$Xt$qEh`wlhNsK%Il?ZF&ejVaNnucgkQ^`zfYnS{ZDD0G=Tm4paX64b_yaS) +z%(Cs9Wl;WPenSOe_Cd#hyVHh(pDa@%9UD4yDhOON14wbu}yu{FlDm! +zbdaiXG6bFJas)x>VWw!73b?sS0afiQBTf6?g)Gzljqum7ax$lzY;!+_jAeO)WY!>H +zQ4I@(N%^z!$Yh{9*ue+tgOfi50Rrw-zaR^Y0j`+C-U1_wFNV#DC);|$F2s?EmyM68 +zxeJaGrm1M9sGRS=_Hzzq^S
lLR2~1-E8{P^@{;qv(B&Vyl#`|{P1DdF +z;4~fo)yr8%4BLD2MlLW9oi@HgTQjBrGno|D@|5Sa723J$2z`mrTC-oNv0mseY}{L}Gp*O)lym*dn#i-R +zqeJUk{Ojvpu5Z!RPBYXTO|G40xc4CSm}xGj7|QPA4j13^8GEP{$|+a!I+i$ +z2lyQRUdPA%iWYYI_sRE%^fYKQSDVlG@0H^(sBW+ox0WmUn))wvc?&!1uGZJx$mXOa +z$4g_p)aB^%+G!dNf|md4_%DbKfs=pYPR6(9$}e=amXLZ&FfI$=fehSNZjePJSr>?wiZi%NRdB;9u%0V5Vz)#gn>TLDz{OskTp*AmU#g-WjC`Y;ewVvQdZBP=LxdH}2a8Wdq>ZG1*qK-EIr$J`sMI~=X~ +z$8rC6(sk>jG}52_%4aD5{<_XwzV02Xt=cREkaA%tPCTDD`JUfpgRRJsc4^ +zI~8p0EbP$$G+=VC?a@&ZGk%;gwvzo+^GOco+>rx)&@uDnw?I{d`LGS{;#)*o6PD>J +zjH8F9Ma>OT7W)k`D=U<>=m;!uOV6*=vfEutl3iny*XrM~+d<=@URZ6C7N3`Ib-4~E +zKfU^ykq7kSEYnOj$D;gmhcViQCCQ7E*}uN7HqRM~a|6k5ocZ|?y7hLA6k&XC=-9%j +zoWt=sF+YJ31P{5T>Y02~YQ||}RZyw8X7~HU_wJbakL!kSCQL2U7Gg#QZr(ino&G_V +z(rJ3z#PR8YxU;x{don;a4cv1hpQ2a;IpF?xSEFAN?ByCc|syCI#dFe$z1siDER +z%74Oy8w4A+4Eyr3+i&?TjI +zDH(q6&3qUuLrKM0PTK>qETGC*5O56cM(RC|MVGni+p)9(q +z@6tvky6ec&&sSvD;aayY6>s^*BVJ1Eg`4UosU16FdGzCcw6BG0IRX=WA)9c9+=wU8t|ejejcdHi<9cYYcidn +zwCXKqGS*t;JBIkxuJLp?4EDTslqj|zq2O$r>SP`h9Jrkzb(^g3o5WBs6XHOYmR$MC +z-HccKpy0fEYO{RDglPl^gCmZI+%~PZ(nXr5rZy{G6bpw0M-q>{Wis`l*!feN(~^~& +zl!@ZuNFs;)lgZ>qGgFQKk>cT$;7B5e{DW!gj;ds~_bRxfFD<36(kkuIpr)t`LzNE@ +zB-JBmn=eRyAC_U2@6gMpH*v`bJe%@sW&D1kC?ox*ndJe^3((EVQ)cHy=cgE!r{rbi +z55>ZcsicJwln%=ir-I-D_6iSZ%;U$CVwzBBf&6VtwL#Ne(&e6Vz_!DY-Z41>uVV>= +zStd##l*2r!j$NBOg21{kv?&TqEx2y1GP|piuO7&{>dv~_l6Cd_ +zEV-PMKH@DQ{>fe+=I9rvOgN9l+cwTz3(J}2nw_}`Z{%V%EQSWG^nyp8cpf{PSs*!5 +zKqrvoAuT9?i2g}>?9_^L9ls@kCCf)(lBrx5wtIe>zDq16 +zMcy#%p+_#c@Udn@rTv`HpH_~{bIv6dCZ+N=5EBS|#8P2oAK#KbyComIB}ALfc&w{D +zmUL5-2c-+)eZTed`_?e>TXeJa%ncO=Yx)gKx)3r6TC4hG%ZN#J7(YO;`5$49{-pi; +zhBDI(3nGqK^6X?Y&69K*$7oDi;ea%Q=FZJ)w2Tlfk^f_;tv4Kv|NK@`&2ik@s;xOx +z^G*bkRtqfMOK(!@4ePEYr4G!F&XG?T#&4<_GzypD)%@$eAGg5&=|5?f;hgL0qAC+K +z-5>kiKW+~3f7)vz3w0!?jfB2E^QAux+V()?gs8~;sK`Z8%Re6% +zIRX!?FCDhko^DUFBTZz?tjP3RK6nwfifLi51~9m?sMgZxBFDYHH#$Mtp*O~t~7z@T)$rPHjOcnT|TwxV%Dn0k5u!*>iFNLk}J^Q7% +z%$Q&}kVg5+&lO1qTHt2n#uY+xqbiHi^rigf1=TP0J>Me}65^Cy{;**?c+mxe5PTTt +zs->_AE6hWVPntl#SD<73(Q#A`$l;Z*m4j!MH_(sDA3CMBuU{zzu&2I6{|=UoowU0J +z-@&$BEMG4D^CH%g$sKFWEV*Nxd5#Vi!Iqg}->b#1+H_%gnzqh-S6}MNg0`r1=&bOe +z^+{{aCwHu=0b*!Bn35f0mals*8(Q>r=4xH3YmqYls%e0xQ0FMpi6MilbdE7PF*^FF +z&Jk~Pr0c{9{hDybV|2{ZiL-iL&~+ZV<9M)-BS~<;ba)a#tZG`{OJn^*uN*vvc~i(g +zbk|xWIHGmynZ^;KGY!-@vWSzBzeBz3($DLaW?v!Yk#4L!bjP|=Ah7%$^NcW9Y^}3g&^aFTcO)4*QR@|Rp3V{D +z?}#&!{eu8AggK~D`FV|O+STN +zlVF_G=z$=ZmHG>DY_oq^aurN~3Il`(WW~hOU!wG~ntpo|ZJen?wl@{(o+z)enma3D +zMQ`V|+GBUEQ?Jz@>$YCT@`Zb{7p@6m>uY#o>Fp-dM_f({9Eejk`WHWoZTk17QamDI +zk>B|SFK+zv8{kTgi6)7%wH4f1FqVn0iHZVm@@5WtVJs_Y1sm62O!5=w8N_rgb`NuD +zuB|W}JcC)f$WQrI2c}U(2i9y0d$WlSV1x*Ttnd=A&mQOi!ynFLr8f{u#zD^tXp0Hl@J0jP>p?6jTMxicq}ht!{Py8 +zw}Max>&;Usf1^~yVE*7OL+*nzn4rcw)mQ=ZfEvlm*o!ijO1)5q62Mc*nm@`>St$}(E)~%^B9?#)j@e6pX2wt3P>lZ+*8lzJ_ +z)Z|480glv%(Pi`aES2Z@TVLyyUyC{2$5LwD-`kqgyA&Hgn>rU2D5)5WDa$EvaD@7Z|qy4$+iY&m3&H`jy8)CH7oi}c|sD>pgcM)oB=P^sAYuWLg8 +zjD5xnQI22taYW-CV%#ba^;h#jS3&t)hL)tQ9>rLIibaFs?xdJ?Ol+Ktk7RC)L_vJRdO4R8T0kpHA6 +zl4`*%rTLo<<2+=Yc9|{)L^@U+HZcd!d8dZuC(zLoddc7Nf$(`1dRPvz1}JXG|AZ>4)%sLW>4`3@IjHu;E$gm8At2+{9R!PG +zbdD+E;y|Mqs&hOUg#1RSi5g}R;-ooE=#GtD^-)&GG|@4Uj1?I1w(bzK^8;bOa<;v~ +zz`kk+0|-Pu3tVF@?Ueo}Ws_%|S$f3-Dm2aut9+ecHB@Wme`q>BxodsU-1*6E>t_M9 +zZY>S~FtIm$F!V2r5|ea}bPkKm`yQ~!za?0XUGt^-RSy<~5mZE$ltwSy%2Y}la7D@i +z97+zsQSF6;eFr$|j8Nz@3B9BSwUd1LPx>X8A<>TC-H!4vhE|*B7N#p7LaQm8U9sw6?`~*$*o>hHjzUabDTnpa+)tQiGMN8&I+EC>*)HiQ_&Xz=^a&SSStdWrZ?h9HFTKsaLQdFK!Xeu-={P +zb(+3QbyCoI;UeqRi3sl;AeiQ)G1PJ%X +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 +z1NRp9ilbWhSUk`9X6_KKPNQ=s$| +zOC1FNs1pYS83bs_PYJu^D@I5!fgU_qn&fl%LKJ^wBfL;-2Bisd +z9C9<8f%Vg?tRne^uvGh~6z6bpIL!wGC{f-_M?c7#rl%FC_l{_O;td?2kIqG}*LZQQ +zufd&!h)N7UFLzH{kE~be)y}sb6prrf-Hx9=URZ!jp8=PYll1dBVO2eqpyKZ>OnIrc +z6-#JME30mmKT-K+&ipG!5H7!mA7u~yyx+>lQ##lx^ut?%zBvn_&d@gLgA0(to7vDd +z<$c(%Wba&)8+#8<-XC};s0~x=d2hQ==ktJ) +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 +zzD3w0@**r_V5N^O6gP +z7Cn=b)fY2u1PM}ylW|}1aEq7Ufb=w?ETm9h6oL+P?J6jqYdLML7R1puaqbky62paI +zZExfjf!VUoGwqwO?+_>qY>eETP#Iaf8Eb1yh{iu|XF-|CFE +zmPUuUuhbGLf;cWOI{S@WTt_x(H9W|=sjKXiHL2_9EbFCP`)2JsRf&WF>%aCiMVAe8 +z4CpV+6~=T#hj&H?=WW~g%&qGkS$(N~Q!CopUszHfZR>~*xw)rWpwL^-e0#kKp1g{qhXjK&GY4l3VcCxs6dMX>2?qC)v}Z5{ +zXAQWTHY+Vl#bKo{*3g7aHIs2+9MqZTb%a1CU(vLpJE6jY4{%ey`&IcNx$CRatU&oT +ze)(n?;nK~odSo%u$X3{3F@UV>x;MXZ96ef>7R=r-l+&~!JO|J5n{MyE40NU2Q)nMz +z#tDV;*H%Z$1CDUmm&SootROuJzZs{#-sO%q8 +z`p{yphQ7yH>YjE9e$USozz%a5EBvq`(n|&xdHX0k<&P+Z3tu9h@&J6;O)dtZFxIze +z&26p}{#P^9!d>N&yNeR=h-*SwE(;~)8l+J|nh3Zu2B-k<1+Hd +znSD@USkv_VfxF+2gepP^uN!v((Kn<$FAZ(R17AP5m*%^&g;j?!-(!XF>2nis?*_(j +z5=IA3MhONfh?lS@vckXsJ)U1c3A{~fx?H6RawKn}I-b(tCMmkdFAZ(_t9i|>$Q_ZJ +z^SxuJJV>#qA8XDx*kW;5uvjUL)39y>6TWV|Cl5e)Ihb9xoqo!ig-y!BCQO=4UIEri +zcMhPlz^?USgT@hzM}!pekQ~bZMHrY0M1d_@wy-HiJI{{iY6)zrn;%-0XdndAD}Qfl +zq0K*uZB%txZ@I8pcCTE?-+bpg3 +zxg%*qN3euMCL08udLcvgr~KScQyr}@ZK{UIN^)_;=NHI|!AY>UntJxLhRHL{KzM^N +zB_cxF#>dHbmx53MZADDHuvRYNSm2AJPOmNPh3<VyJ)kyqOXo!Myi7y#BGMj>D|_ +z$3712bF~eqo1W+~ux`A*hvzxG_@So5eBA2I2R;(55#*w#79-M=rcEJr2}zt*llSm;+Ff8^h)=@fw(R_7? +z&Nlp4xDb+3d-vyKpa)_MI6Y`9ZOtrl|I?VV!@g7Dqz8(nXkQ%r)qQdO{W|>mb{GbA +zkQQfu>BZ9{Gj)pRG=W9+$9F;P#5K5wZjb*HEcTv(6{r$CqaxpKg??j+M)|8|y!XnJ +z+Ao0M%`@uYpbWxkgp{1|wiP~`{Kma__*ctY@A-N9)$&`u^xSVliTCmkmbd&O{a}=M +zFMf>t`n~w#S}}N>XrCY^rin9uE2e~DhvHZPLIVzl_Q2$jHX?VzD-%_%L5b={!-(2R +zm$B0EB(&!u2eyN%1DnGES4rnfar){$SSki5i}uN4;xsX3mN;{+m}wGM1kr$^^kP!J +z{|AQ*LvoelFRzAmw^DZ@aE&jP?yFFUa>?uPrbmc+AD}|da@0nmkH>DRbUh7Sv$0z% +zT`T18J!5xNx}IhD?yq$H89F^j;e91HRVx?;h!?&x_^&;-Z_{Mvj +zj{SJXxk?x<*b`z4u(X1=PM{+f)ZvKk*ZdlY;9bv}o1nM+Zd0~BAu@8fcL~N4L3;ww +zyFZ;Noq?~!zhdx+gLY=uI_H7-*nvu5|64qzGjzfZY1tXPSU1D4{X*|T?Vu$A%CaWs +z#j>a)7jZ^{%OBq4SmudmRc^LnS7|+mW0eRzZ5~;bOZ49YS*`_4^bB3f3{%PsI5d^X +z+S25J(&S#1$;S9_h>c5U_{Yad^flvvqY+;rK3$@3Z}%yCa*#baEG4;rN-{nCU{4OT +zCx@ma_e)8RD0Mwi8Kj{Mu7#CBI!2Dn${>T>07q73kO|V|`0&agfB8#Kd|YLancb+fX>P^Y6?JQ(YUB(~s;Fm262bXS!&A_=xB +z@El>}!Q6e?-B51*14k?B)6&}Mk{j@9&?m9zZ#68Ho$!Xy7|`59I@l_4MZOHL>YoE) +zv5Tqxg&Jt4ed>v{^B_&S{3#V%s7-JUbOeX2d1d#$z}@>J +z_h}>2397?LcyfPG>AOc<<$<(GLA}}eK?$1PYi?%eBxL6WMMei^$M&Y;C=U4Gf0o`k +zz~e?tI7^FuCj><%AH9@P&$?btc0~@)wnz5lF|$R!criFeOk`q;U0m@iF+U>W)X3nz +z5noRZ4vx6FA-ETwd<^!F*uOpaXZst}3G|`5*^4LzUpYtp(or;pOCC=oj)i@aVGbu2 +zt8U1pWxYl;hY*5uZY^5n)~G=Gr?TET3z_bAH0kkv8wyO$aL0Zvv7%J2{N7n<4~~|5 +z+TjfssuD`S+^{tuq4b6n=tpV{5&O1m^@mrs`av!NB{zr~(U~aYXKAZ-N*_NpEoH6N +zu@HEX*gi{@ZB%Fx*5xVFLcbbsG960Ld{DA`Pas+8*%4W-E7yWW@WFy?D}ptcyD%Im +zL5(&c`}x2pvI3uWL?R}0rkB@H^(K@Xo)|6ky%X$#k&&;eZKG;~H3-D;@<6_>q5e+N +z46oAi`gd;&bh%!I!64MKLk3>~rFbtWP@wRxg=p6Io;A12w7d5t?A{SrP0GIaSI1=w +zXq$A&+qT=9PfKcs1@>gP{EG};Sa4bfwGTZg+W%4Bd6ZYJOMvAKEz;hDN4XCkM5=0( +zJ~*JzTMhl?H8;jjNEp8(5b?^rf^gH13gzKQsP;Fl@qoV#`Op;@phru_PY7IdJz;o4 +z0xzK5n+cFW#-&1qf^n8c1pp7${4jlX!gLHkG^Pdo&Qh!o+s=XlmjIc8ttGfJz)JZv +zq4e%fQr1w?&Ox+w8(SRgM%UbE4sjSr@y;TpA{<=iUClVNs1F>O&qZ%nbAvYI`w4bc +zWwNaxXbZwqFu(T%37d9T)~xB=9S7>K&SU6oopBBH@&cgqX43Cga+=BRr*Z;oE%OeGV&k<8dPduftS)VJ@iW?qgVGD{=3cadng6X +z2{U{2D=^oY-m?MlTW*{cNdJL4uHshD2+%R)l|Q3Hgp+DmPx&O(+R$39Uvr1`$#~J;dTke`(bi$B)N0jblD6pUHn1dq?6o%R5d4(a+p6(CpR}co +z_OvIxbxC^wlk`3>>z>|>{EP-#E&aj&!{$h1BR&=u*oghXnl7yMDJ8DA6Y!om4$>sD*0iJCS*J=gkU6MA#p&kUn3yy<-=q4KR7bw79#{!s#6{EPVT_X7~;O$ +z<%iBW!h7*lHsxp|g|2aKE?F(86$}> +z?pR@n7%T;Irv5tKNyEF|6$WXIx5zl`y{LK0G|Dia9ixv$);97Dyyl$}bUE5cRA%>Z +zDFJ9H4bk|h`q-qm8_|c!aI>N0 +zNiQ(y3Bu^(r^K@*q +zn#972ybigLN60_|GvkF#k$D#AXs9va-jvGgNTTp+$H>%6=!t&xS&huRVvAhR6ATk6 +zJWjFkAQ^o_8N!f~&wB||bDlysBUIi-8c%-Zp8pXprcgv&4|DH8-oeu828_)024Nnq +zYan1gaM?K<4jT)h!gng@N$oTb +z$SV1PK7hU#W71(TBJq)f@q@mj0CYUuzWW$F$siS{fPLLGUu_sNUwfSSzG4+CM|{+Y +zNpKVCuv11V_}Nf3zj6WBkH8?H_~ve8+m_&ZJJ3}csnkNVke%&Dx1XW2OZt({koR;q +z6ycd1HuwIXYaCD2oL-M9?oihnGWoOSl2ssvW7b-gf_AE;n +z?tR!p;QyXF6^{U-mz7VuA#J6CmELEeCP|ay4%8Zz6FuWop}V>#NXcxJ$D+y9HXS?M +z4Mi=wPIm}!B5QV|S8oMi-u1}I5c8lB|7idz($U+#o2MJZxFH~mpiF+>!h%n=Ng2~v +z>Ut7dW|U%9Lb5Smc8aAEyxq*WfJnX2)bVn(QshxKF>@aQwpx+KrQ;ig4V@Kg; +z+&xDA7;eeX?);KSq4IvWNec>&O(ap-A}?N}g&%b9+KSJ+4dcwa(y0^Wt~0o$a8_7B +z+bjrQcW=v)p1Oc0x+34h!~qXW|LQ#8>3=!{G@hv{c%pC75|t6={fr}|?gnQrb+I&{ +zaXnz5(T!;2C?DvXUwyOit|~+`SS4(%p__|l24#_o=r;|1SvKSutSlqEo`Rb&_^f8l +z^cl=r8b)T3l^2WjBdNU*o^lNP{>;I2Ac94Dj0jc-umsfSGJS4KOKAStB+N}DkQ@02 +zMu*{hMLDbL{ZSe0;+bY#@RRlet>rCLokf02Ohv0aF5Ei)<{+X|AC*K(AWg4z3 +z_0vM1`SNejaq{0iva9W`)($JiWGg;Wm>_1@TrUX|XRJ$z#? +zyyVd`=%4Kiv?=O)w*aZi$Vp;|ZYliY3W33*+2g?{Q&EEgZxgw5+F +z;-)wf`*HOAuxePrJ;(?VUKJcqK_X4DJcYUNq-{ax+b6Vl6kkgjtYMg=MV +zCaDd&3h8KG@&QPxbg3q20&(NkD^N}rTgznMb!Q(Qi +zF)}yM(N8BL9nlfurd1mF1n8mimo_dse(4@<#13YRys5DnR#Sj68ylgwoP>VfNcxk= +ztP&zlXK;mJ9A=;bnx%s>eLt_lFppDm+T_1q@$uM5w60CwaHU5%iKk)DT^VOC-hrO8 +zK%kC~4azqaI`&cfjmrlwrv`%6SRO;7%T;pU~^TjyzUBd-_k1nkyis2 +zkh0rIg3mKN5Ur;`$kwUl3a$Gf{ZoZyIP2vhH$d3b_WVy9)=e9G`U)*LfU|Vl1?9~) +zN+cmIg`q5bq-VUaI!}oqI!82F+1A4@3g5!s=5!K!+Z;zQBzbZ&M|Vaajt|Yl4%)@w +z1kpZ3Oq?U8JTA_Bn8q5mFGPEinDT3J=C8OvIzY5Xiz#?{Mnwif3h96Nc1n7Re-w#- +zWYs4xQsWk@A2m+OP(& +zp~v-WaMEnc>tJ}@_Xcy59!07U&lSVZ*5 +z;J}F4lY=c0i#G(DB8s*I<9YxYY@%^c^M0LE+w#BU<>g+=slD*O#D$UgFoeX1y~SEf +zd_NQ&AA7Ipdu3nAsa5`${JiX|Ikn&XFL7ZJStElVj(B!*@X(074Z-mQ^Pq_1+k@>9 +zXZHpVh`4klxL?HG#^4aKHZcBy^TC$*hkio!!$$VBjQ5w?_V9?|lY_%ROVA5*x1bkx +zY)3B~*!zpLK6tMDH#{I(*F7+@tYhDL+^a}f`ZHoneHb!L=Q~28c7xhLx3EW3lfwdP +zbsJ%L;!C}@qo#u%Cg~`Fx?q0XN52txp2wliU(OxGedlo>$ETeq!G7po5?((`()^dc +zt}+T?ztGKdb)c8Rd}GWi*{ln+yhiyr_e8I9J=C{aj+~;niG`_7I^l)|@&9<~othW)U^ch`7#8=<&(cG81^?PZcR-8-YGCQ{m0ainI-A5{ +zu#W~CvVie>u+Yu|F(kl&yYPb{`{SV(h_Oan#9$E20IvqOZ^S5krXXeph$~ED&OPKn +zcuZnuJ( +zx;9t})rDCZjPkG^Mm0IP_MP%`{R3|rX^5I;pfAlmodm!#xvg+1bXo(-`n#*#TdQK- +z^P5Hs!pV3pn)TxEL63C@=>**ISmTU%PhlUxlz&ay2V`*il#JUn7rpwM(y!ZM%ssYn0N*(B +zb0!XB1Q?Ql`v`8rWyK0o{J8*z8#gzc^T5m)*d=xE?L8MZ(6Cb*=n08IV)PJknAI_X +z8%?b?G#rO&ln!TTlur2sypsGbwfTKY +zj4~a;p}o`g< +zwJ{W>;xA+1Yvl!Aeh?GSCQkr5qQ!*604#+*HXtr#p*-l5-!*{;?NWZ%v<%bTtuLO3 +z>vaLO(2Rh6keagG-GyWmcXMh%@srZ?5S=K`(=ZLVtcRH^+@Y#u!@m=Z$mW1#Rp_0M +zd;^3&oA2gkU(SUw^|l327gnCZT)-6#P@A57d*p=gKqXc;R+!lOMj_ZeTrf{pk4XqF +z_E(LZ>k)1WFS}B6D-6+r>n~VN?#rzy&&2_mD-A%hWu!Q}jDQ@{ +z1Edn`1rjFcgg&Ln_W&*#{VjKMcP=d1U;RCRl$X$iT}nXqxc+ +zxJJ@Zcem|WuBGKR4fzM2!#Q-MrbT`9grUQPVk$aFc9y<1PH%6 +z3j0i@?rzuLb8FpqYyL^ASN2N<2OHV%p@=R0{%5x74l3c_fwYDS0|=^?l9OKsHtO&` +zIfi~N9XeR#IS}Rx0|=~U^!>v^@24O1(m~#?+1_>~-q$YnIx;J-{r_win~iqKv#DKl +zKbYF31oC!;{=c_No=(?6ru*78q||j#>P79E{on19f6Lp&e*1s63%HKwr;wWq1s9c! +zbkI$?)r|@Nh;)rEusud%vafMPZkDAU&wv9%!Udu2c<#ylxpcOlUQj$yo=oUJnWH}% +z0_&{xk^y)n{QYWH;7|I#mB6k4o;Y&~ieFbI&;*#sCjfF{+MJR#-vRRv-sPCzYx)rC +zee7H01saTHmS-&;Gd@XD%>M3?{65^SmDWWez(P#c{zVIEu?@jBiiNcNfuLA6Ct9uXfJ@MG+#4ad{ld$JWczGU~Y@rxzZsB>e#SA?Vh^Z1K>qu;rHD +zX|2%72|js_a)4wk)exM3!0#g}f1nYmq_l +z97exz!y-xw)RhgbN +z0#qth($e*QqZCOKAd=s#7rIr0!24LsMFA{;gkD<;AqGCHK=XTRU@1(`dTU66P}B<4 +z`d4FxQQF;T%`qsEbgy!gZ2wBKp)$qB@$g=OO&4+Mte0UKJ`P3TlLT%9s*ifS+hn2w +z<=0w)W)JxK2SBHA*yRbB+0K`Rc>tInl|x!I3k&|U_he4!*9Se$i&(`U@i_ORRXPpr +zq4|bqo@C%2>JJjoD1SuXfu9%(3;9La`KaeEY} +zvf7HJB3h&Pg2!DIo(q=Tu5i>p42R19t61vURo6@;j^l0AQB;V +z6B2>XALl8129q6q(Fw1T2$wufZ8KX156f?j3CCVS$6oMMVUr?1Pn?Gjzd!2cWA_nP +zNB4~#__BQnAY*^%KH6bn?|_!~iyVc07tGKod)4T0$kf#600@x7BexciF976n802u? +zHJFdn#@3iP0z%r_Nz>TidD-dyMq3H`pUT!Yx5|m-mcXHtY6C_xW*ZcAx)_hiNc*@4M$ws=x9vPR=)Aoo_L-ZR$h6}b`+r*FIgR}oKPY_#$4WuH6Ac$loWRU75ZYuHPY +z3ommWR=EBb9^w@GwixPQt^v#Zb&tdBPf9BrO0pf1w#OWgo*ROTk80m@+5>ZPW^0mB +z44+SJ8zF8@q_zza=Zz4TCW@;b662)N^P6FC;OFrc +zm?;1iQFG|!=UbPVckNg2u+yzrWdY$$O=m99}!RN*n7^H?H}gVb8j09O`^>3r`XV9)gWkV;QHu!eIwi{+F&o!|SfF=HwR%C(i@|w?E~n +z)h?j2z@`}mE1y{gK(s->rYI_)HJo!K~D`52z>h|T=)|%DSAc#r<4-_J# +zj?M~$^o0SJTBzICYpM+}sf5avw$A5y*@iklW%IS0Q9tz**@u-~%M04zt=V7cr*Zz7 +zs;D!`EuB!*yaj^;T!Gy?1JtnxT_v@O-)Q__pXL6iBLIa+=<}qpb&@CM#y`xp&|V(;W*R)U{)VLP<_=1`_@{6Z_yb3pNzlI&p|>&~m@JAR3u(u=;7|BavGuppsnLx>=JyCnn)S=({2wkL>s +zj|`2k>6YGaU0}vbX6O+;tes>05G8MF#f>G12&HLPmzlSRs)J@?xHd$Af9_mhZjPfI +z(i-G;(?IK$GswIs)SvG3APqQRy6>;fJ?SrAI)#FyR8DU>t3>VK#pEI{;h{g_fssu@ +ztza@<@{CUkoNR{78e)zJ<)cncu;3QhN1bbKZ7xXIJSlLC=?|j33`!63Qf*XDCF +zp^eBDiGWyu8mgE7$oY76DI|cH1xq18BSl@sicaJGGnxS%X7A|z_n07?o{`yeYV+a% +z2w#?a@cvo;r#Gy}{7XN*Ze8kM`Dv%s;$QpeHR~?F`cJP~r{NlV@uy-~xXAhnZ=DYd +z7GLip{2N#`x_U6n#K6NgbP2;p_TpkmFkuC3Qnmm8Hu +z*PL&2@FQ47=On$x8Ri&4<4nD~tJAj}U{{UVHU2~{a(sIQR9ls&{j8lhIr=}_$+ZhC +zwXS^ViUQ#V#}~`}$ni#eG2@P%2DcUiF- +zn5(qP^BRrc_@*FN8zpLMGqgRLd-CLaCr=tqKANkdK6|f|GZesw2===IPT8abe1Y|X +zNfQL}qU!&Ly*H1G>dN-TPmMs;L77CQN>db`QbE&*Ce8_yqM~WVS=(+Qo-%5u+i21z +zN^TGngG%3vW#XKEWyOPlk~U~}RHPd!wxU9!6%zqP4e=OR{t8%8PK_D6qa^3k8SDH4y=5j60y2t +z`IJH#1%gsWK3y6P=fn|7{73w|+>t2ScZ75HT^NvK+H4WwwmG4;#X+`}l;X??KihWg +ziU?KJc2u$<^HH&0=+>02QJDsFhoVxpp7QM}c-nW6V0t34(g`He;Y~-Mw}mF!ruMWw +zA8uP7YKxkQ5`{i%+cXL#3LVNYCnO$^(P80-Wg=T73ZXcaMttvTQ0{qWEF^&VY~Alb +z-T_sf=i~d{6=d%_XjZ}`p~oHN?FEdz;q!1xjTIa5aYKw|SiC8j7HruT97$uvM)_Nf +z5d~Ob2Ay`Ep&or7yRF|`R>pd%e{(f%Zq}>Vj?<$^vqC??UEJr3wbHFdW$4sO*BXme +z@durF+FEXWRP{W3Cb5gTYUyj3s@^PCiEs}KkABSana%M7I_<5|-eG8O!f$M+g%2(f +zUelcVW&1MDi&H{~w=FR!3%8jst0JYJ2+PjV0d!{>hfiI?`q3Z{1XB~Q#^4l74-KN@ +z;h3*#C5@UlDZau$g*50r#`k|qOM`{9G{~T(!93f6IhZ%2Y@rrgR4-dngl%ef+w)`qnJSfx($>p3{F;A>Rj3Ab2QE?||3@z|^hGGF +z;XYuDN||4lc%; +z(#_vAc!i^xkjcwqg<0xA5RM}lQoN_oA_~;}!ITIi8vMQU1tEA%U^|c$uoU+&G{&FK +z+e1OxT_8`pqy)H$)Y#Z4rnE}`@TTo^ljha0JRq((%@3hz7KG=UBo}H3T!ER6T +z->1e(?q}6TP!dwS~>xncf2Q(~4pwmAu1Rlw8n3UAsZ^ktj~ +ztEINfLnE|=zgSeG?R@<_Wop-ANN>{>E8l7^CP%bnf&FuFrZ-Iq40I<-G+v@2%Uzg;CjyiTKwP9eg*XM$h_PTQYMb3Z!yRv5C6S%FkE&iJ +zt*)0sYd{U}Rs(9Dx+-U@#@}~{2 +zG#^sLB=Qrk5YhA?h5wEi<&dAM3?RWHk}v`yAf%*4fY@iAAosZ>248`NvDvY49Cxzh +z32?&IG-%PVjlY5o&j@k+6<-|-gU{dgNyAV}Gp=MiE8h<3<#4ua3F+=~I`@S9res&% +zMk +z@lqagvuzOax{!4ZVHVS5#pdnLf2hfg5ZSE}FAmC!F+_>WYcQ;eZN##$h*czD!LjPc +zVTBhER$5A7rB;yh<=^|l<|Yc#mxM2_FU4O2mBmFh=4jFGZ4;6e0A$44L^=v&0Bkha +z?|gAtrBHfpzzIbC`b+tnFVPXMe<|Po(mP*NrJ++!M~q^P$b@bnJh_P}%uOaQcBfN~ +zzFw`0IV&IHTpPL6ijs}0C1*=c2W6E;l}u4d(Q?T~jccR2?Z~R +z-0G|u(FbCL!AeDIBw?4YKcbtAj4dsfkFvZ2zD9D_(5)FJ>p?7K!ZEzG38ej(n#^W? +zm@}uGvFsr~LMe6*;^E7=4L~H^(1>H>BHi)~Uk_QBe~tcLK{vt+WTVG-7;9>AmsGmg +zjH@;ukK*}Jfs*07NroAVby#n5MNy*PcP@AMeS90}K_wse!v^{XX6gY` +zGfX27@Mh^77&gEle%*dTk5 +z6LP^S$LlYA0)P1v#b2m~Ke;IWHn4SCyC&k`c(9kXkp@^A%N4x#>B9OpaS5csOABgI +zW%JwRU7-AN7wf^%1KuYM1Y1jgyqvpO{=+#e1vw5gIsf@ghic!;_7c^;KD+^Dh*B-_ +zubPJLcozIA5Cf_apKFzV-GJ6*LhlUHz*-1_y6dF{W7N)_AXL@@np{;Y?xQB9dY3! +zzj?0_Hs|div`_Mz|aef$-?!l-q5u&=i^BS*T_WpG*@hGAdJ7brtQ7WxB*;j0Czt>e0 +z68~kwmHOv%iwnRmUa6M4d^MI9HTe<2Th$Lj_fk`Pnf{A)?tylvJS;I(JJfhI(+i+!D%xp8DVT8es-&$JhuVU3=Q|>Mt3bDaDauf +z`ym**nn`{hjVDb$1HKz2jJTn$P%XbzSEvIyY-c3mOu;#s>Pd>AaOza|-k`B>@8zu|nsSxF}S +zGU>*3;L}Ee%wPx_pS%&I-){CT{+I*8dF{g5&y;vVRV_b`Z%}p@@E1BFoQcBSwWS)v+th=|Mi}R)?>!t>yNy@N$m{5wfvgr|FSb)SI_V=ok@R)uKQ~{uoyFWrejCfjERVV(nmH@TC?YtBGp)$}mLXN8gW7pPt +z=?Ft_iTZ#vs7^Xr8@}D!c2eb6D57__MCFZ;|6GR(-U}QMKByBctxCCVapAVK9=5~? +zo7HR!>CHosoh4}v4LOhq2dVPYK>6U4_26^va~$jCu(c1o^sorw3gAfrxMnXIE})f- +z^bXY}U)`f)T&DDl@D~H&k6VYpxpseX;N#pm;uY4wQbk8Q(|FGF@=>~-GqPGEjK5U! +zalHG_Sp^zboxgKmWd2R;UEaV*;M_O0P?I|NqfJ-Y*e6f<3NnJyzRK-%<%N4%rK(n$ +zU&{~c8g$TEtja<7b%xZUkG9`U>EETKVt)B3%nm-7l8=Y+ +zW@$WyZNVL~&qo(;|#|sHDRd%vT?R6WyP;BBNLr9KS7A-tI^j3&@6t#%N%9 +zi>2Qt?0in##*Nq06awke9^Ac~6JPww3ok-e-=^ggX0Bgouqg*yDMW38zEA!Ymhq9Z +z2k`?Nc5|E~xXh1R6U-eCEx7WP<9 +z$On*RRM~;ssLKaFIbKAfqdk)7Ir&F}t4?by!t;QpQa%ucl0G{*&@kG_@E-d`JRnPs +zpPoGOagoPZ+_y|+sxlrue?(QrSF7tG?E#^cuxj~@+pim(mN0b8iMMg!0Je|YY_Y{R +zRx{c8OI?w|l-vC^g}yZh<)K>RalR&A{EF(7=RJ^-bb)G>jmwtbV|qbT?5GAB83ky> +zj=H^?aYaF!fNjpUYJLuQq@XQ^ZELl~cLN4>Rjkf})U02h7Yvuj;t@>-lhTp4eK){> +zLD!d#H2Nw-Z>nGUsSdMiHz(LmDQz5Ut*~^+QdaWR&0(tiu)d(&8RThK +zO@oKN^SvGy5KWn_@m1v@$KiNZoO(6>%zQ2|-s${MNruwFdzJg=%kz}Pe0GrjeEqCg +zof&5K@03O~r6EjF(m4K;G_ZIUfBEBN+F^PhVun2{F3R#%yw%;5WsUNc-O>=R*x0^# +zyh?sdY=jz2mN>HV1DZ{}`XY%q)(BItI`(aLM4WkbkK|tv +zBF}*PB5kVGWM8=HYu{OLwgX&=vk^9g@9uD@Vys&VG=B_uO>0`QVpHQle};E_wDFj8 +zpC><}H?HEL$4m1 +zQu9(ZxHtZ-o4N}^a!WXNDPnrFaF#c+xs$^pq*G4Rcui}zytS=pD +zAxo!ZqrRj)opf&Ypy9zK8`VhtqkSR8#xhi+L$VDc@%(Uy6&J +z6ZPHQE=?MJY&8~vl9nrsJRF?8QJp&vgydlY(lzNyFlTiHzygDs8a +zO^u!_rR94}`eLK0%D$5=oY5Dmo*#`FQv2Zolf6(xRGHresUyUiNkWZ~L746w^FF)qDhgCI$ +zDie5v@z#wgh3TnPsr9wNCnF2ex2j%^bZ#rp@Bi$$gkixsgN*%O^v|+7EA@xM?cMN< +z*@+ljC0(n+g7BjOplRoxLPyb)3=2OnGu_AAsHrP(@!Q^aa}{7sF%=c2@7YF&kI37r +z>K8P_LKhAVS@E=AzmTDEhQ0^dk&2yhAj}uba0F+u%%|S0vt-@<;s6&LJD(4GQOE1% +zPg@fkf7dd9kY#yAY~G-(b=gZT-^Y*5&a!>_J4&>gVjWi+B`>_?)~a%U3xHa! +zw8RVW0s$=Z)}J4*o0%5HYey_3y0P%L7E`kG;1FkCpQdfWILav*t9Fc4#n|o1mp7~+ +z-np~9*`0(5g6iClL{0SOb%={4hFh=l=+#nrON^ZY-U31Kmi)ICL<4UKky%-Lf$Y)) +zLWUp)k~l5oGNflurhCpt;b;pH`M_z6v0#$M1*(WHM{CN-TAi>?i}!eQva%D_Pv7&- +zO+I{*<_gJ#tX3V;#+=!%+dG9`f=vxhJMh)^YJ$gAK&77$D5Prq3yuBQ5<88}AOR-*f4 +zy)f$*AD)^_t@uY)ZctKZtVa>VCN-~r9Z#5X`gjYWM!zd#6~uVLG#8~0>PGskjaK*?`Q}gHM*86P@WB%e+1@3?b)f5$r6r&2Z~i26$_PEIa4xwK@_Ypz9qaC>x~s@R54ni>|Za#v0EEPC0!=oQDwbB@}!?D4Z% +zz0%x;B}7X7>xRsG^B2URBn|$0NS3epE;e|@sA1p8hH;OD5y +z4?jn*AI*gBJ-v$)Cw@_^l9RrWCzD{CZ!S2Hd;jc3kxF^sKLMhE5F+6V={fM!VvRcX +zzAa)|u}V6Rj#Z_}oepaF5_uKQ+oi9+hP)*MhKT2H#P5!jzrG+W`hwr>OinT$%nu88 +zSF{H0b>SAGt{LDp?LXUBq;js#Ad?=-lMu=`}#72bq^EQZ{NOL;v +z)n +zP`##I6gIpMP!4{xgBPjv_uEG6t?ygba$tqe>mLlkA>SQWal?aoH$891+H-~vuxw}7ogB{1WASR&t}f__j$Is>VI0mTFkU;Hp0W4wJ$U?kd|w?) +z1a-g$x_|W;6qyD(*+Tn)`WyB|=3TILY0Tk%&x0&2J)s8m1$b}4;aC}nW%Vkt;DT#+ +zgD~|XIiyy=Vb6tv;GNN%`*0~mnn{Lv8q?r~IGd;Dny2AIacyJ0U{X6getu$j_O>H@ +zj7i#G?Ae|i#C4)W8rc$p@@(}4Sgivs +zgLIZiEySm>e#(a$6FbXd$PW$W{VZ$pUQ{P;=3?wCUw(V@_hW%fez99T`JvX#Q@|%9 +z^N%C{yr}X$R{ga!&C2Db(ziF?M8X&a)@89CdqE|?e?rmMY7E5d+Kf+Q}KHs%Q +zOaSu?)geg>f@Gp^6l#q@pvr_h^#vjITDC{;=(ok%Z@X!m$!dLJyW@o|9rOcCi&s9U +zfa17oqYapsvit9F_1|jB$zHU>RODK;RUUJVb{AA`1nPec+u@!za3ZbL(o=H*NBd*& +z0ENu=Tr_L}9QYP7vdk5q#;q36<9pqJ>n`sABb(9l?Mpn!@)8J#zd+2#i}~#FBhuTOM#zNjR2hrH51DB{G%q(;~%?jQ+D#?#A9bf*A>@- +z$ennI2Xv2}7@utTJ3I!|v+IYrW`rjmjXcY{u=URbZ86W!;u|@>f*WZF1qm +zl0GZlecp2P$t=fnEZd4oOBSqjEXd5=D}BL +zquo=UjEn59;3p*5q=j%pb&>Y4-tq|?xr-+r$L_yt@w{SbxQmy{9_a=g5vF|24itTB +zUJ#^~f9=H$(iA+$JV-C8p)Q#OEd3YzPGLED8dEU(*^#q2tTIBlEp9>_IV*qmxm-gN +z_Q}tE!;|!DMNX{!c|9!&ge{Z+@PT$KQCNqYaAq+45e##y@#r5JmQ-uxp=4N9tr3Sl +zqAkg1N*qejJW+PsPfXL%YuCdQ6?dxx)K9>Sb7-v&9d`VbdDwySkK585I)_91N5h1| +zltV!!4qTYXNaP_Fv?NW7p_JFV(zH2=1?u(Fozu%xo&wu>wO0P)eNa{sClnQ`L3o6V +zPRhMM=RiT?y@hJGLwDrj`4QUko8>pu1NFWH=;CwA +z*V{AF!1|Yw7`PUMWrvp6$8RflP`Zag)=%Hh(k({1;@bO%LJATmlpYR2x^U46Z{45s +z{vjn@@y+}2J90P#=@wl)KT=zMtNccYFWnqX-(ji=*7a}k-QJD^2W`qQHBug^Th~5b +z@y1`}3UAy8VhpE+1nLLIoDfTnlbl|_XBKEB+_3BHPE)IP1~StQ{$6E +zfM=mu-xdh)VREZXGgd)6nMQjtz88$Oi5+L&u#Tfh!_rdT9|FBVZ7hOTNHMpjDUj1( +z&QX8iuYz7lfe)!qv9f>$0g!Qo9^O0-qpPi +zd>Bq%ZOgQ_Y?bnKD%{fC4{^m`V;O?80vy*c5!Vz}%zNA}D@yt=n7waL;xr>ddhb!T +zHM7j{_FuF@LyN+AD;A)0AfDWIZqJYaI`a^AJQA?y|$6S^^? +zJL1K`t{EmKHPal1Cxm_R*xqxSl7BG`!zB7L=qO{VmQOqh!g26ev|rC{!REu;u=<6l +zin2R}k^Ec?=w)|aH1JC>)g8UVuX^3EXb`}b-r-Gf1y{0sfW)iK<#~}AmSBfnLN2R# +zULeDvU}--9LR!MyNxT?E`^P2KTFFX=Rn=O78PM(J!HSngWCnD5Dee(%xG-HlL0%@f +z3}S}L$Z>0d*tHdUO;Q +zN3eN#>(S^=+@}!W#v3zR`9QH(8+xbLHd-<>J}z)BATIYxaQytcE5}xS9B1_?d&t2- +zs5IE(2U{Rqh^0a6Z9ZbOZXQHbJi^*0>+XvN?pb5;+U2sh>*FBz_zH4US1YQH` +zzGXrooQ0B+;^6y(g3WG7TwO%Wxx4PhG=;8I#T`cpffmHf4=gRAFo-Mx7 +zO7xk(LcG>9rWIdrar)ZYmj`LZBTz%s=BK&0f@3G&T|d3=^az&jQX+L3>WS*3&TN%e +zGC0>v)`bqXm7=;L(j_+c3tGK(M;yzj7?YIKN~@}Gf0~xO^qO5aMNVg95U-|6(P1f{tTZuIc^TgcNY7I$*k>(%-^2rCF2bB0Hnpc9n +zHllQYQIZo+%8ul>SF5e#MhUO9@YXx&`N!8Vtze{ +z?m~I|k^gY=m!muTqd&dr;};-26DHSV`O_hfd2#KDjKWK!?)@tSI##z<~i0A7Y@|gbve8sk(dRPa(rgP&}J_u5R0$~U` +zc;*B2ukF(zEJL67!lu5{y{PZ}&~LFnh9#iBkl{o96o&e=E-ljx)Q`uOV0N%P>d_?J +zy*EF_Z2>IH(!1MNcwr5lIe-z(;|Z3TR@4|`Mc^ftB>I|QdA!#sEoAL{&NO)DCOTTB +zx=TbGCnqZH%FIcf%n6;$$%+|m`#V~GE4a!wL2DUQFK)p9AfZ0_-%APxPnkxDttZN0 +zy;cfG4OeS%u56Nhd@A>n@Rk{fYXj>C8u%T!HmMcDSdSv37)r)cGRh%{%X+0&=%w^Z +ztz>QmH1tZ@#F~!fN$KlJtglb-_I2yH(f5+TI1Zw2-+GMdpkg97fvs4glTj@XP%?%t +zDt4z{0)sTT9i}&rQWWKJF5imW1W?A7kWpa9Rb-U>DUZ}qDZ8wrYQ+%BBYK?_+zu~W +zJuWfh>)b=wM}Bz=sCfAn$L`PRN;wy?c15BgY*?rFzYM9xk8X(qjo=kk8%PdC(R%$ku1P +zZO9Y$DXR +zoDoN7;ERx6Y8|VkJ;Ih&$QgwbtpbGiAW?Xs;|tS@lr5i9HmI+@hYmMTJ6d-ywJYFr +z^_kyKGR#()=B(9o_SCM~0pqH+x@t8pgQHM|WHTQg#?p`aWRk2rD +z*2)YzX%)4JzFJeSy{(gU9G#}HHo-oAB)2E{J@x#oy8|`bRJ^9>)uA(Ec|D!blz-^= +zTb$|;B+OC@Bw
9**%s5>$vzu+EskGj^QK_YT)Z!p=9J<+rQ|8)18AD1YefusBjhlw&gi$H5ub4rj1{K$I9N%vlQjI>NFV>CZ$af;cy_& +zQku8DG$VCcTIzb(KhCpMT%RDWOrLN-7QlK +z9}!d6DRfC;H+A{#=%Y&hWKV1Ugg(NI7CsbmP@^_obcp&NNDmR!KjhvN-?*5&o$r|! +zwF%vlHcJ8EC!{nmwtX{8{JhTbzGX{9m)s4G?Jg5y;=Xu_QxA(iLz} +z(i+zgn_O;89?u*AgMWuFm^+o%WKH)>PEMLU=b{EW;$USwn~&g4Pp}@n5|Zrpo_=r=xR+w +zuwz%=mWWWgR1*SJatJp7$+F +zPX)U#B29PI6KAU2<)u?GyoC`n!H?q3N|t_gN0{Y}tI#xscnpppxr}0(@DPMVRMBu| +z6BC+fWll`ZfRpK)JN=jkIk#<_9@=C*+QU_D!J}dTQQchCsJaQN{=0IDd`+Uc3(flb~Ap{e%> +z(Uc3FY-^$}Bt|uDNLHX8M#c18`w8m@gdSAK_R#4{B}*POM447P&)P$(W14({G?P$I +z+7jU$a}+K?E7M6|Fq=#^oW)!r%_N**RbK3C0^w67P!)5go{ltqY5z}k-stxDy9aaw +ze^*uc-c5MSOxUOFk9TqXSC8K~dl%znh-FLHVn6WU3=l3cj)&{iXo@F|-2U*4!5nbW +z>j|L^Wq!hIw+dEcKv#hkN&5EdNBZl#DmT`vTxbR(XN)(MvfG~FvjTJDw(?t~K)(NM +z{3nTdu~t5Lrf_;0SbBxZGk6C9+l`ydzdIgun@?pLPz=6=&v9lj +z3W!sNa7!LyZ(`&Jh`Ls0$dtP%23~sqp#s8PtVc?pd*?V$MQlUGd^|mwSP{!+)cN~A +z^jl)47Od2Yr*FX!QyC_ox^<`zU3=NH3rruU8MlIG5)hYD$Iqww>qRY(@&3j`GRU7o +zgLJSBAgLajCLBGZ@Hd<-NRSVlNvxQ!#G^}QVJ_$LGIgc4Mk9WYp_VsRYURLIdiR04 +z2#6I5Zi3f5+Q*+Hu4Loa_O4>Tvu+|d?b)ZDxKjL +zJ<2jYFYR+}+?Z2|V;J+ze;1}Gam?Ny!_lO@d$1E6P1-*)(>_p&rYjpyz3KgP +zxZlQ&d7LcfWeo-&mY2s8WAxCo +zR*%+d?dhZgD5VZ)T*oB&jgOv9_RLnyDBk>n!m%W?RXqC;hE<@0oOy`j8FFC;xJaKq +z#CBmW;xGfeq)#4Vi$gBVK!K|tD(R(jmdXTc0_RRpl~*RX6V&Xh!Lfv8-;n+L4+?u9 +zu(Ql`&{ixp6w;HRI#ZM2Nl>$IM@V_s16EHM)>N3-vCHCrXy0U`Uf6uqj4cPun7O`h +z<<-vU1IUG9|M+@t^l+S-LU4<+bynP^itAuJAHi>z->J({o3`fVy_}Wx@;3E)t5vP_ +z!U7@&-ss>{rs0wAuvatwX1K-T$O>tB?MC?*irrW5K0Wh#N{%-7Wm{P9Oq>ftkQlW` +zAiq!KPT*L|`MTWygpwA9MBKvW_euRu_}BrJJTvE9@zL@2JZ0vjE#>MhHDWz +z1+Wtg4S+58@kU49GH>pA>#03!<7Te?#nHFW=a=7@g!?y1l#0hM*nf5=1xs!K?s5~L+h7b*&?CqQ@)Z4wJiC9wn0Ko^7Xi4!9 +zja6^tyYR-%3%IJVub;w2*nJO~{Y9>-*Vm(9-}w*+hB};EH;3pOdKj~N_^ne3?YU-c +z?=5sY{O^45zyBY?|4GJu@QEgqjQrmQ1Mz6e|D6u_&vR9wUk{=Dulh;;R{>SD4I#Sb +z5RG{8M-|cmm#_&>FDtbL9A)m8ZwRo3jIdb+Y`()c +zX>Fm=wy3_g!MJpYr+NHuV&r`&K{E)!OaMgqa)0BR@COE4l-fSHjz$kgZqnYwfE**- +zy@649iTvG-wRf<|0cV#Q05DEM1J91wd;{Q860|v3jzL=t +zLeQNXpx>+#?%Wt#&j1OJZx95bkwK7d-xzydNuU)DNB|mnf1@ODOGyA4C2;eGzKR8w +ze_(+{Xq1~9O5p1hI7WhotP9s~94{ySABEos_2V5!P;K*X;Vo#2o)CPu(^oW$*h^EW>?d#&MYM!u&-UF0|-xDZxtaH +z`V$6om8ic}tU6u68*^|aY-kUE6ES0v$jluvtZsw{xBh6z{J~OW$#cZ!3upVLCamd={&nuut>a^F#YulAOlDmch;fwLH0zHxI=THUxt4CXX{)9N#FU +zG*%TsHj3l2G`5kdT0t9vCH$r__mqH#P=QFY0mnDJn)1WGp9oHBoaR|QsyQ>}Czt1k +zeTB-H*cdB0mo7*u(@PK9!XqBzlI+@VsUPNt+IX`s2fn0@{Af9$QF^u!N%Cg!k0E)m +zX!_bonu&D5bW7=q(0)E$VN83v!Vi=#F54;TV!#{I$OfkI5P?8D0)DhK0um6ACuvS& +z?h$dpO_wW6{JxgJca*uk4~p)_j=qULp%T7>+#l&%e1s-^#6~7gfz}11arSMU!tIQb +zv`Kfu0QX!^$)eJ3(9P+a)7jj8W)4uV_smr;nn&Uw%=9cCyCG8p|Qa`5BuuC +zr^~;)BhUHL`sb`{=Nnn;ld`N+m3H3wzAaRf+0d(L^EvL?G@KM+i~kRnLZ<6Sj>p>_ +zm40T(^zZAh&8%A+$Q_L{->-_xyf;?G&2NsMzp$Lw#g283(}HBEbH78E_+r4AZx)0%R!DNdknUsDO+yIo5-5;5{B+WgznHLZ;i+?967w9 +z=v3uN_1j0m$$L2D{Pr6gtoG+V8=1_aRBOSwq82|tUZ~k%O&vVb(VidBBf))+`zowG +zFh-Hx0NGc}o(_7lX*n@CzNT8{25ATX6{h$8G<>eOb0$jqkZg^ +zN|o^Gaqyn%s6Vb?4-KKOpl|>3ddZ%)5q0hYSa9}QUYaCKWLsc1Zi7(BYp#q5w(PbD +zldg|omp~w7A!cxFTqJJ0lxg6BtF5$&hBL3BQQtccN(b+-?N@cHG~i3A#oM1S?mTJ~ +z`+fWSWQ( +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 +zrpH4y +zo5(HT-au&#_-b_hRD(DR4vW>uL0j8S&T^e%k!#j!a#h1sW6V>9Tt!a1hF<*#*QN@- +z3TL&(|6jWL{YzI>fqFTo=lnFw@RVBHv&%Sc05=NXA?!Pf8>LbAQ*i_qx#LE0Z5j>P +z$p!Y_uy-%udU4f#kQ=lj>Y3w$9;jlWx3vvo-#GR~2`E~SS;cgvUHlbW7RPE|yHnA# +z9&oP`oGeX(3cm-cKbBJszk6%~_m~SVXJt%KjA-}K;@9ExTqhrY{5pIlck&6s +zufr#;lMh6bS~`5Db@GYFufu0XCm)hM7gy;Z3KMl*az+rP;LprC|J+*N96 +zRs%pXR$IVcW(P8nJqv$khhZn;W~s86KjAXDQ%`wS^MnT8s^09|i+#=PYhvFZ_ATK4 +z$lX;b_!D|{2QUX%q;Bi##UJD{LZhQxs-Mur1DkuZZ!h*Wv#*JLg9zg|&OZoWH5a5x +zI!3lceAQe>`8!(eO_llB-VY%8hJAY9=>?w{=~mfJlwiK5lo-I9%kBNklhFs2u1NJ4Cy{a +z?!F(T|F4wKKd3LqT}MQpI)*`=%sHVPXL;_&W%0%NxiXPI<)O1bnd$d)I{8r?DueIW +zIV`#R;E{i4JDI6YJOBQbKe_pof9JqnvkyMy!`DVs*M3kx7v2}gmtJSP7cA3!?gabi +zeguQkqp*ZKKmGY&kh{s4En$VyRyd +zJYPLid{Vx0l9}?*IUk+v;KfB;?mETKdQUVzs}=KXLp~O>iz%bN985e`S(+M +zir16MPvs=MAhXYoVXVFUGD33n-&*_vd^-$6YuCI-K +zI=OdNzVtim2-5!Zm6ys$KVN46rLe!sao@cT?<|h{>Mcc4;NJnregN1FK>vjfvy%|8)6ap1*$s6B3arg-pF?%> +zW=3DV`|5$p?)%ZMl74E9Mx)jFDHaOo{jJrGS=(8S!H;&8KAp_;BRl<&e4Ed%m??ON +zqA)&x(tSU2r{7QGk0HpN6p&=y#!0Ygn2{58}o#UCYgC +zCOfC@@f~zj&aX&EL?`qtcw8krDskyu=;%aONhd%L)bUi8FZ_~=hcmYmc4(?^CUMZS +zxKTf-;|ULvp+gJGVY-Fm5gv9+>~lv9b<&+OZ_y*xD2+*emc4R03>P@K4P}tCd +z{-fg5P~250V0Sdba4i>)eQyF(@Kr6RexT)&VIBj;FwyPDWx0ESiqwl!K@q`X>9OA2 +ze?YB-+636an%-OpRM0U$E(|c}7fa+0b*w5+)mbqw_MuR|afERFQg`4klniwP>K4>( +zs5?;2PUozBlMAi!u041|kH0~@RXMrKo~yw(7(6=;E95B!LZf(r46n0uX0r3wfL +z3r^ElJ +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 +zqW5hmZo;sRF6s*?@&y$2 +zMSGEN4+UR>9_@iq$O_uG7x=S+0>5Y{)*q3!hoZiKqJM%v0XdhpxkdG;jPTpvgNb}< +zV_#;kZ$y_O_v4(#z)_y2subwdWMNga!#F|UI&^>7@ +zCDJwJQJEMQB;{aFU*vxRancSqydHYyqIYFZcqzc3cVf`wI$Y}!4N9I5pf6$oq8U@k +zOq|eR3Vh7SvHu7>1l_T9X~D@|i=&g?;_TvTpbgm!0Xv=GJPP9QV8JX^G7$|4$3H2X +zGBX4me}uDyFPsO4_z^M`GYiNN9sK!;TPDQ}8{gPimn3SIS$UAByTyW&krte#l*{e# +zgR6|~?aHxH>)_}F2C})idw6V7}xQLhuZ +z<8zKH9BHgmngthY%)&3WiL|!K@95~Z+Pj-yub>}tpUoRk*5XTUE@8j&J4I3Yq2CI(NLkso<=@UkkEaOG~hjgy_hy +z@JjJ{8dhQ9V`|2Sr`Md7Z}yi*^G~f8Szt>;R%lSG_@YE7k8>T5<~ipD@5Ez;0&d?bs;qLbuh +zhORMd@hyRj45?gafpr0-Z)G_`3Ta6v<9C#_l2Q&^1Z#wvPM{7f66^>*I<(Xv&q;#n +z%V`IEI}$#Wp;Uso$4m1%D(3+_0Xy*H1N_7TL2Bg$%xDiI;{^Opl#6^Smy~)E()20= +z^_w8I=a7~r1c}M@@#qKnOsR*IT#q201`!p|(cub|6i9d|Eg*V_G>(@k_!R86NxwIo +zu|1e=4I>$wTAH!BCY&{_&RC=Rj8$sMunT}W)*a{M&5SLW#Mqbf@h>`?u~&K&dViab +zHLZmtn9SDdIng<;pIg?Z^WCc9jZbzr7n)Y2nV)mZ!7ZP)7(MXt6aDXHq->G7}5!DwoaNjy8wBqQ1s_}cjbAC7C=9|!22P-@}St{?H+AVH%9X)OAnAg=cO@CmI +ze|p$_`0VQQ`VD+w*wf>c7qcP>(R +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 +zH0vJh%(i4|tq%99N9{Y4dZ5VnjSps9652* +zrg@)=mExU4K6PrtkiV?ghT6o_;HQXs+kqbh|lk +zLKv&k@kQr0k!QQViHbJ5e!n>Aa**-umBgPn7@wV5a^UxGp5*np)_UftUMbyb^zK)# +zVXhffue8Z?J9#ym+a%AaKIKLiYE@)*iE%BG1B$wpD8FI*hNHpP7Uf#q;H55iz0~Rv +zja%oRUg@VtT@DZZrey1{ibre>a<98Ew)6DBv@7Xpo%$rj&-BgiUo8KK631_^T|6K$ +zSGU2fTdnO{%iq~Au4A(Yo63g0FXK};-=J!Rrrz)SIBDRD9|A5e$=^Bn_`{f=E3Mk{ +z`fHEmHjz1+#N8{L<6%%xvaZhW_f6MazBw{v%U4$l>J#_hSdDaKHu +z@`t<*y_*MZ2%Ir`)bg3%bnYD*?9%Ix-TN9ZTr#-iySrn1<||aI;II0Fr7u)2f3s4- +zEoTNqzBnCL`sX^~`~6C9_^w^uJ%KMHFLw$lR%e7y&giK#w=}N%;~mE_%U9?-e0#9w +zg!xmdmr5@k{#5Vdr<*jO`tmc=Z+*Y+ePrYG|$x^dk)N| +zpVK@csLJRenx#&yD^fuT%zl;z +z?GrXOy85_lk(p^#Qh)kpO>FtvrI-Ei)(4)AI%nvebJX#o*&J40yyke;ZU4rL-3QjnbN;u2 +zkw=YNntAtHc7LZsUH3CzHQkoI(x~y929DeCOY?jCZ=VePedV-L$sIQzKY722d%Jb= +z*#p{-9oCqcBBtZ)!c2yp3hc@t5Tr9o9@+UBC7j +zMzoQo3X2eWW@o1VKSv=BlH~x%B0Dk&`Y4e0@hI)3K-&MKH0|*bq5d~a5u{kqlbIH}+0r6kz!RvWjw1j6 +zt1yuU*FL<`^2a=nIV3r$1Eu9W)FYWP)FYT#J(9I_Rx1yobc{o4q7KxKbc*W9cu+4Z +ze3b8rdc>e7>JiM0E_Ey66@I&f;A0Lmt4BH>tJI7AOg)+tnzK$aKK!Aa3^T(=y2f7d +za`rgudNk)WNd_q4oW(IVFseDmVPUn@LwGRfQF{A@DG)5kPGzQNANycw;r&p*K +zmR?~LV#F8e6|Uhun!~uJ7>9RA7+^ERNr)!9@&PEX-(*M7fJF6gJ)l@t98{kJP8`oW;n +z5s~=!2v4tIR`oAg!7unXpVL9bImwS}E3JIA8U!Hnqn95n +z7d0-rG7jH3&T=}Uf9o9X+RQK#3*`q(khYqxo5OVcwc{`vz +zqW%OaOsa!Vm^2|X^CPPLW0)1c5x}U9nem&N3BPaTH>n(8-aJ_jymypCenai4<*MZb +z-Y7a{xodI7?*a5;YuHWZDh1=?D&0h?7jj+MUDWsmHLqHpLLk``44x<<+nA0wn>6x* +z@TnejGV8#_x$t +z`2EB3-a@i+hCcY=&`Ti8iR(9(n;7XMmZO&6A@AbsTegzjV(wBNeB7m5NPUZ34f`E6 +zj-cjEjJz{i1_Fa0FwrlveFWw|EE-zSWq$aK<0%Hs%NR4`*Bt+;eCcVjGfqC;k@~}? +zaBarF+p|gF^gSNG>tMOG?5w3Co(602F3NkPoLEKV&~M}GaQz-NC!xh#3?XT(0l(^T +zM|uqY3ActE6$E?x@MrvzuMpAUQ+{8`Ub&1?{=%P}lImE4KXc@Ys^mCI8Q-S)<&*ZW +zGPM7v@}=2yEfap7aT@%U6ldk{1>`fvLbBq)gWa%1Gy3OB9$p}IL&f7;%NVq*TfI){6__dp<60ffjDPSeeb#}&3MYTWI1#L%eAEgG +zp?x-xIi+X@O?6C0S{>z6AvE6*1j5hpAjqb$`toIY%{G~>-?TI{;jd`ZWSu11azSUv +zKox^=t&aax27lInye`fA4|--*Ovbf3(r*dT=dX@|=s#nJwe>Ma4d}5E8oP?M(`sSI +zZfOciA2AOEebxp2S4A~#y8h?%S8B^JAIuh_@59Ei>RKPbTbif%_JJ;A>=EVrU_g;3 +zNSkOhHqXr94PhrLQ9X5<#!sClcS4=^KstFWZ+{exgYD8LyR_LZ%}~KSfVVG7#8Dw( +z1W!*vTGkz8+luaqkM41nzV;g_g-<5#Eppw3`?2H{tzvcm)O!`tCz7n6(G+3aX?FgutW +zP0o$*D_3!B8fwy+Ruf*aipATd5msm=mMJ|6zj2j0y&RxO^gvCf2Wm3CW;oPG^hg>+ +zFBX)Do`9dHr}+#$KTwqEIfJ63+&c%8Gxe^KOfMLyiC#TWBzhcvo}Tuz^u7Q^E=^FB +zduMXs(rlzilgV^!(o9g3%XIt_<+1C5H-!7)_r+-ZX!HjBYvY#{y?<-`vZnX%jNj+z +z{ddO?lN2T)nw4c`umYE4L{G|+-hY4mh@R#%^#0r9NA$FxrT1@) +zUz9v{k*qLAF;X5s8olU$ZTzyL_iv3~*7W|J@%tRT|7`p)*;s5>z8>R9Fw-EOP^D=d +zHg&U=(^|Y%m8KQwT7s=S80mW7+0rJYQ&nj*(h=Ql}6)TEC6LgSQ-B!<|H{ChP0Ut$v=dZ_W!8l +zdB}Cj`s2A-NF4~V4)8=H4}TeEEW>oUb!dM?!FN>0Dlxr-aR_q=y$U)$xs!}o>Sf&b +zPzE2@2*10MI{yT5Ww# +zSe0kdo+0=hToWLE{@W9{oIO19I)`+VSVhs7%4j=;@xJ6j-CUB+m_YRPrHvA3>R3{s +zpc{pJ4e|;rbi=8h!e1P7F-9<_koln97C#36HDo2^&E$H~9unjH)`P65?j4C$_E7Rj +zeqA)IQa$9qM*eY*$K=R714$ORGYiyc^hR@1l5rYj3t9X7DDW)c@0Jny>oHwOV_e5; +zSQV+tN2OKvPx?HVv#2K6~s6Y9He2DJr%wdg7-5L@x^(chIAt8)mPHP +zkk*68AHkcNhQW@;NA!(wQ~$04zn9XUl3KIS<6gfzTj5~ +zpd&iyyDs#5;3==-^)1TOa=(W((eVPVi@-(KC%~H<{$POS)(zmL`FaiYLX^a-TZ_8=DcE2Erf4gx-+ +z*#&vQO8sQiCt7X}oEEOdd*KSIE~@&v3BuIj4+?IV=-v1rfOaAUC9Hb##yp7kI* +z;KUfYcmh_TIV9%gN|e*QbYjv +ze=z8nK}W~T{&*5m47=6-G}r9sBc*9B0+;^`r93B~152{2Pd^Ui;Lr3rjGZp@sw1ny +zbo{!7BV=p#2q}rD>_MPQ<*=6_g^{1ibl${+JwHQO1^>(7wG7}HK+F|?(H4Av(q=8{ +z5RKKKQDl-w$YS9B2>2tQ$0xk%{K?kX`lj5{EMOd9X+V-yP(6>3?dXe+RR|;= +z)H1NgTM+f}f0ACr$9wRhW8N6^3V7t?jXsmyH4yVXrVG;rkbeAub(YGJhD@^MzXKf9M&QIgamC6eH=~QhVk$E?;L483B6foY +zMa(xVPA&Wh31hBjv>6nV7%Q$N)8b1-L&pVEJcRnaqN?}MNLn;x=HmB!Nnj4{z+ +zks9Cv{QxiK7~sfqcbYYJ0kB0jvKqh&t +z^5DD+`J9vc>J6VK8Gaqf+)Of(@$Lp*tWPo2o@}aGZX{=Q+Jtf;NBnmc=AzE%hPEU} +z7p*M~-vaeWX0HC~_Ilvc1Ba_3<8<^P3~6d#6YcSKw|5=j^8ys(&=YNFtnuQWv74QK +za^3Ql$DDLihyKBaAtqbO0L7(i_6zfwuTpTEvVv +z{s4~aPi#2equmW9ZI45bwtC?dag#rG=t$Qyg#USabD0%0#%Uvs$-3f3y+aA(8C^;A@KY)CZ0c3!N6eIrV!IFh{XVDo`z +zh|$E{jfo1+_LfP^xXi4^BUrc0tOmR`tJR=uVKwNQtcFh(Rzt6{8mJ>%4XkoTAK79# +z1cxI}LOMXP3b+oz9YGa!zx7JL=`Mt<1IY|CmNX3(5Hbu-GQI?Tk_jv|4A>TzBY6kHV;$7Nw_ +z(RQuBy%nbUX~ujo$g5g5e@B)rbR6*UIc&44Bm=U5hfyXhaU3ij?#!*0m}H~2#G=hd +zv=Nq<+UP)2Sl+DKM8I1YmX_K?p^dP#)TaAqEUhcs42!!3aVz3B#2tt`5qJ6Hb#Ijw +z{-3wMA6apuhqi<<7It^3t~_A$e`J53K^DTxyJzR+T~@rjdZth9b1);1aX0McYQPDA +z6Xdx^*TQxaZnL!5XqHA`gI08(qF(TF^&wsN#O~*yb5i{gCFh%#wxsr!-EtygS?ZD7=K}-xlN`! +zFqxSI?{x(eFK +z^wBOxViRRv<53rPwb1{Gkdw|xX{~H4$+OES2a;7*G7@Fv$=SC9PVlV@!QDIVtQX1U +z!oKqQpN)jO1g^8A(vdl>yYB^YtPo6w% +zr))oKXJS7+AXg8_lpxJ957=B`ALpQcamAbUfD9Ibmaws5xK`U#J=*Kho}fLRTg1Bx +z&m*+0siX-H*-RGgDz7aWZRGY0Hqw>tMtYB(tt7|wf8Jh_zd8W^>Ld88!SGif{fGW) +zBdjBt`>V98%PnRXAz77ATtEJU`IBv;aizlk9|^W~HNKcP|4s*=!wbgRt2QJENq# +zZ&5}z`y+6Y&89lSW)m%HPqvcmb_B|(O+lo|Zc|#=ZPIh9TODO)?IBf{4w*^_OT#{x1}+w@eji<#JTn&h51b`Ke1>>eOEx}Zm}bzJBxLza(aNyV +zSS_YIV`nDwbgYt&UZJE%a+qw9~RtK?i^l-vm3Z%$VM}nfJ$_&|?a`H=4Jnc0_0A +zPn`c@N`9gOw}Kw^f95z2-=d$CHY;*isKA#Btd4rbS2MJydchAhCII%*f%6fi;C(xc +z*L#UHmA}>Va@}yAKL_%s{BfX1@Wc+D-xG8wE&98EJI@zsAJikd*n}_vu;Shv9#;6+ +zd7aZavxVoc{7osp$6?R=95&j?@dh)VF1TDHkHgwEJiW67=gSxT61_QVlyRNJ`K!F1 +z)7h%%O`K95yo=`(ztk>Pk!SIh9RG>C9LBEVbi!6}J|YykM5F%_+ErKJ2}M4)6gvCe +zdAnrr4fYeTm%e?`%H0fIe${hfA?%{gZEQ#aOujP;_c=QS$4+RF#;N?D#H70tmE_H*( +z1i+#pADSnrNZJQmhO|}^nPXDMJVGI21xj#l>EvH{~I9(YFBxt +z(jUwdlJ7M@8qc+fy!;z5-Peb)3yAIUlJ8GB7<&RQrezR#(W4A6@FoQ_Ry73WzR(vx +z#!6z}zadtQX6%HM1Y90C?fvwL6DxrK@6_Rq11*cVMZf&k0%fSKgl25Nb3W#UQXl5P +zfR1iZSaGIjp-f`A5#{9?X;++3rFUWQb}gQII56Vd8{ZPzW|MzW@Q#~C{>j3|C~3t^ +z_^(hii%@X;;9rWpm>X(40*?=%3(geLn}gVALmr(z=T~l@TxAFLX=s7{d+?tPSe)=i +z1AXwLo%mz}bO59@z1>2P-mk>7Z*Y4Ij+dpvN%?i%Lw&J +zMkEp;tBjn*fJ!m6AZ?Ho{VIuHosGd8GiBH)lVlWRfj*~yDi&nw-X4dZ(7_aIYvfLEvf|?0@m&QK}N6X`Bud}?D +z)FYcV5suDQ9QOUQNi7;U$+8X8s4d$_nxt~jvVu}UiTaUQe=_!kY>NaN7lYHQ<)LF5 +zoLh|n{*0PI+}q}f7$cIin=DfyWrC#Ng4aoCC87UXHc7$+67jP^Xnzk!Ra1_f<3QVb{L-+ +z{1Y_w%bRnenyXYo`o!lu*CS6m&4@#9i9&n8@9_2*ym~1f9CVQ7*AaMopp3Q`8$;(} +z@Nd&HH!6vZL2e7wrnQ@|Xe0^SYBor#9&4ShEzE2P!Uz$cW*m+4P)aDxA5n-l +z97AE`B5G&_as&6aHHT&)@vBiF|6K^7rPNm!=mt(Zf-cPvs>vb$We8fAI5x8SahSuR +zS1}mJV6>tm8#FtKwglRqN}3?irq-Metz4Ay1O-lm-bEwrDh7*b!|MpV+CQm9wTWu5 +z+@5rbe2Pd}Kgq*#{ls&kHQomt;zR{Jra$wQXl!V;p;agbgoM9Fx>$-_RymN)1v_y2 +zLmEvZn@!d?oP$*Y&n1hLxlct}+}>K7FgA7&TFl$JDQ(FwBg;pS{4q|+*7naR*{>Gl +zmGHIf26*5)D?CAw5+0ryA*yL_H8c7buu32olCX#LT@9 +zlJ^y>bgIIp7?{lh)UaDoNS39V9=4J6 +zi+Clij6_m%>MlEwciCU5lk-pjZ<`^m8z6a#FQ(gP9`kaqLUN9do!l(sbl)J#${~{u>;n;xt=9 +zDyeCC7Lcbf6|Fl&B$dHdeALehE^4W$%QUDd`iYayvaO`iCY2SIPgu|fR?k1H +z{i8@k6?%n9kO8dFtS&zxP6EeDe5y$ljnmuZ-@_1`07U^D5Sg!mRR +zqx&3^$}p7J_z=0nt@TI>v@^tam9pv!?Y~XJc>92};lP?5(z4%;BmbD{Vbv!UgmdD6lL +zg`-#0$_uT$tgXDDSF~$IyB#suQ=l=fh+n4Tp)TxJ#$DR_$l*H>l8lXP3Ac};XMFUi +zXGD$mhj=d|;uVP+<0d4;udN7~Uon_4?|smidzW)o{k46CfM +zX(I7VPaU|X+mDJEEq)IX!>VXRKjI)Ic)&8Ij5;Fb4B!8(CfDG*=rl&uXI@fWlhsJ8 +zcadqt%VGe8?G(GpLZ8LnvhZPI@T|!Gj)6aI<2z6GT1R(JG1#l7e$m}@F5D}{;NFCf +zg-Dy^v^Ox@_J7Gsbd#tLgqa|XIzgJt>bnH$LsjJ2?=8!1Rc-#B7fu{zT}OL23LQ!2TWAfS*c{@b8iBN +zJP4ngGPsQ=AA>9atzLYDGutzc0ne4>XM$u0uDS7Eali7W6}!z3mD~kInk8@D)U!lg +z2Kl%Pn?inQPrFq#Bai=l-DuUj5(LJ0@>W>?+XyFnMC)UYp+& +z5r<@p5@Gi!^hKKcG<}hZ!I)JBq}^cdJMx|2jJv?(+u7_4rzfZozC_F`!cI1j>@Yp8 +zCJB+>NK^z51Zl?6{;#kOVjs8>>NQ3rjeO}Y^j>Hr>HB-DP6#a|@7}iC>xdsoKs7n2 +z@A-o4at-oY6yzbStGFY{YM+t3j;>Z5|7>5{2|fOMJGj*25mu_7w)X)>;Z>2%Q{OXI +zMVe$yR*m-8i8fya_$oqUNo6#Kq#I&vGmd3h)>R%o@~jC1jj8$`O01Y_Oc^mmL+j`X +zIjwtc^1}uYLrTxCd#Go$x=e$bVr0nU7oI-#f%^lSMCOA +zb>KO8{~mUVp34{oy@`27pya_ho(EJ;_m_n(zN +zuI^h_elf@ODIbZLwGN0xh3f=q+vmObMb=)EHLLEewr1)w4O`@Gvu1zCi|3X(yT?D^9f +z5t=jPcZ<36pZoDy^^@+PxYspCo;Qi0DRTG;0yE2O-(B|q@iOt}{eR-0&W2E}7{nrS +zk0?j@Me#EnOR=PEf(^}X{Y=exZ>9exqYT{22_(ywm4=u|3Ym#!^e!l`orr2nfwB0VL*Bo_5d#>*iLCa +zqAfT%h_TMtOFHR6Ek*zTyS)qsW;*3T_bO4@#rzdda>~$Vn;gWG9B`uf?@A^&#)Zxg +z(6}AOs20U+Bqqa=k(cAInLjOW25(G^(-GP7a<86d(P%aY +zPn+ppjwtfdZ1U=bUx32c(dsrDIz=^jou3sSfO36QxnzmO={n-*vX$e}(2inCP2&7@ +z2F{;ZInTP@Xi%yu)93dOTnB%_UI6}-9b+YCbqqTyKda>B$3B@0>U)j+Im8@O-)op~ +z>X-+z?`3k}x1Z!dXM2hFXluFpUWE5Ok1T;O`8!b%g~;8sl@4jlb6&2}VOu%rFg-iv +z-U2;;jI+w-h-_bpJKH_*=k=PevHwi3tLGHGu-DhNIb|{6i+aDj`Z_By@TTCUbgO!?(7{6~4Yx_5{-Ql*e6Kp4G +z=}KQ(eVt)jOJinhkjK~>E1xRsihMC%o#m6lok6FYl2;VJif`|CsBP^v-^}##j+KsD +z?}+oP?A#sMzEKZ2FJw0d#uFF6Ry8e?4*X;e%4eO_BC +zSlef=EyM+l;t-hz@lqI9h#K-(_^6UcV;fmBYSYN_5sSwaAKCaU?VSCXb1TN@Dedf$ +zMI>zGGi0s<#6b)^HJYC`Jy2|oT*k-tua4_czs$z;|N$wjCMAmTZP? +z)YNwv)K186AjVtIa`}ILJoEaayK?w+Jo)U5lh+!t4`CZyn@?85KNst@A4v4g*n3&a +zYFV*1W6lyE>w=Q~%m|hBmp_dvBxOF2=?Oi}UU7Cgh831;3J;6>8p5C8JHED2Eh3R; +z#3Y-Cfm3)Ao#LXiwRo@L6Q0zwbqju6lz68%n)q29nnA~`eIxlEvdUL@Mn|mW_M`45 +zdo6CV*WxC7E&R#b4PdqRj5vp)C!hL9#Uwt@sdsAsC{mVAR(8WmNzoJh${=K`z7LFH +z#U=8OO5n^Eei^{{dF`o+n*<&{)gF6)j5MdDEKXPhl|>*+)d{~bmr;YdSTUrXu$X;+=Bi?CWO_q*a*S5!I!$O{{z(Uu& +z#V*0 +zoK|O~OY*yJ#Vb6ba{=}q(FH4RwMTT{nwyzN#Ai)2^ojaKdlUtrIn-C$&yHa)CGnJ# +z$!~5#40sBd+50RR-(=LV{J6Jv0)}+h5PGUy3D#S~iqPi09LU}kv!>|jq?_tw_}_mg +zg?2h+Ta9TTbX?2=@iqt7`Om$hg8djxX3rWm@EB+ok^c~YcVNVOC*nPoNs@R^WfJ=9 +zfe)4NKm#D^a}1S{;|O1d_~U!*{JoSMNb!?p_MF?E$Ixj3dOE`Q#QE8DvJ`|9=a}$x +zhJ01qlSclgB!AyT%zQenV6#;=>!L^B&ujV9Ai|RI1U%OX8z=M*p)2svGb}nkJ_Muf +zg;NZ+6YP1x2d%Nh4e>-gb1YOsZxK>CKQ~4>bYg|_IX1zeKhk_9575x*9XfTAOa6Aj +zcYWkgscp>pn>$?VGPjAOj{I7RFpp*dDqj3Ymvpk>v8cNo#UW_yPthLzHY=fNyUSa0=-;A?0=Jm~OdI1jBM +zYkDS3Z);Oue61zo*)G)&Q04M>rRi)MJ)NO8C9S2@&tTM7_qV*N6u*Kfmx}(8uJL!Q +z>59hg8p;Xs9+%N5{fuSTxYu1-(-bw-r>nVjBkPs%J@jg@JyEPCYI7?TgDZPaKz;5) +zgV7=y^p+*P-9zss(OwKe>a&~moh#aBUT>AJ@bv6YUGK2=Tdah(_X%z9%8*5j0d`@T +zHS)!24uHAH*ppe!|EJ?fH4Gm(ol5oDS6$k|fMz+xdCkAsA!Z{-y0) +zC)Z~U&a?SrJe^sNV4*uS_P)XRk^||9uoJ`;pZDBe&~syY)*SIX&^Fv4}ywgxCyw_eJFKX^&P($a8>x44{@M*5O}==#3=0>W?cv_i2== +zExi{e;f|8#G3^D#;Cmo?z{_Y~g6=1@avmxv*yvfN8XNcONe0xG*CYHq&2b5D&sKxZ +z^)(0f;!3Y!8IZz1ctTd{-(?^lBu9ww;WGDafObbP!ZAIgA?sz^xh3Tj +zqh{+non9l~z8vd}|37ub72&Y$f|6$N5usn8pi$DwBOykm2rM~&A4Eu2!hXPC9iPF< +z=zKa(Y7WUK{7*)RBw@q%xe=lf7P~U!m64{D!aUTmCn4hbj_?j|hj2-e=fU5RxoaIA +zk_pXM$54F9LG2lmm!=D~Z*8kft+UdQyrG}hkO(Wqf2tweGq%YqD-97n`(OCK68K*U +z{I3N5R|5aHBoL1OMx_t^|F?l1x2$E|(?&TL)a+(C@ZZpjEmzY^rhiONw(L*8kiI#+ +zfu*u#m}P)vG5%M#81A&`zIBcKT$=XNuHnCTPg<_wKd<*$Qt>amr!Bu(Zop6C@7NP1 +zqVi8E>Hh{L5BALBgMTsiWp^wAxDK@>dmR4IBs~~s1Nx;mvlO!wOuv_QC%w95MEcL^ +zJ1u$GM%;zb>DXtM^6;-hrIP4Rc6cq1@sIDnTGm*WS+-g>;=j+gS^~GAw +zqzQQARnHz;UI6nZ%RN9h

~7O7r~+TX{+3i4dr_Sk^?Yj@)%}`N_4$pp+FS +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 +z4k+hWEui*j6`OUk~pOy8+V +z*5v$B^=s;{=fAJt#eMlF_S6pBe4Fm?sQGtWj=Trz>8Z=NmGb=7xX^Oas{fPvp0BCD +zHG11q>i!l@-%+~(_Pd}hu$-O>yY+;TN1twK#c;d!=G<#vY4P3?^p;nq496a*H5^OM +z%!$m*84VNHM^zn66zXze^b(UKH^L>+x>si+B5gc${5JCmE$xf9JUXRMALp@s`ZPUWSzo*jeen+R +zej2HMtkilRZ+LNiqz#qWVAt`vz0O_c?Pz#^{fRwU +zxBhW`*1Z0?^4IHMYqwN2bhOYu&FxJc4ek3oWLq7eojJd#vd9w+*7d_3itaPvGwD9Q +zSm}t+eR25Ay6+-`G!xYLsVaX-QW#%5$`z={Bjjmt2fBnFQ-g0p=RTOkQ)L62i+VKd#_x~ndT|IbH<+=?Ud(Uv0tM7lO +z_x$UA`_qjVp6))?`1FR})7>BW6SRx95^b)xuJM_Q#tu$kd<%Gr-xs5Py~<=4a?cT( +zj^xG0&JF1qyBZH}kf(zK&(01u9@rqCP0adc`!5@5^8~^E6t_*fJ2I>pziSLSe%IJR +zxu0pu)U5IZ$Rx(?$T&UWZyOk8mWwzW3WaLi(|sT9{dhyV7Rw$_hI1BGcCRLWLwvIc +zpKZT0FmKWH^?vM +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 +zv=8~BU@jK9qweNog7-Rxlqs3-huW@)sl2 +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 +zbFgkox%3Z5#vbJG4y +zp(2iYB!B~)kVBeM()dC6nOhw6&B|n9W}Onut3~v`LyTun6*5pk0~^Fa0yw}4DKHkq +zv1Bomv|aR)v+y;T>1eM>J;)CSlf~2c|NfltxS}YRHcVuK8C1}~1vW^7I7k2oq`+91 +z2u=txR)dV)CJFvp3I2NAdfZmrR@|Ks9Erc0IbtGtxNuvEi|i1xlf>(SGth?Ytn~jV +zR(y?n6897wBVHDH=E5x41^Yk@#wE>B!cTx00Z%iZkj6v$EU{877OSv5^Ot{>n8o~) +z12aKjt_0-Ae`FE)#PJVZDO8V~w;vVCCLu1bVk!fHUqsQ5y|_V;vRv2<`9fq}#{32e +zAixGG>T+@I?JQ@^c}_X+nV9pD=cZUhHfvCvUxsmz_o +zXF>wH9FWOcc1T|fipAMj)4Cw&_>JOqc~2(;DU +zheL3b=VNdjPQX!Q$KW`aS>rvhi~8wu3nbtlg+Ng4fPA~I(ZV;V{mEW!^O +zs9**mp}pjqCq}GfgoRO}K}EKX5Qx#v0xBan9y#fv>lS^Eoc%W>my +z6F`V;%EOw+K0JkTn&}g>nCG+Te=^7>%TD}dv|%wk3_ijZV!KS-eEAFoun@eE3lqq< +zO0HA44iht(_i~uOMG?y^HnBxo#1do)^f@7Mk%s5RFiXaTi82mp9E3Z;1v7chhgnbr +z9#}|R8}pP8w}5AXyR(ckNq+)%0~OY>XA3|XIOX1lHZ>Q-3axIlYcq1?-8N`_t&_aa5uwD+FB&grxIhu7S{PQ +z_?O{2c@EeyNi*9?;eli*2Mk2EPNr +z7|Jc7t{~PtB*vCLBoe>_IUvd&5;kx^3eRR-7fh6{44*)H_GO1XON4XU65#+Z&-sLV +zAs1#s6>-ZUO{Re=@~VJxI7Qwk;REP|6ChSUB#z-8ft}C_^-v2z*aDlN3M#-4v%mv3 +z&_KXZ^c;pZ*a=M#gw3!Cs-ObOp%nb^Ff4;2SOSY7lq|$T+yd}HK6oJ)X2DFz0S}~r +z6C98LaiD<;<$m%3KlmUQX2DFz0S`FA0SOQXHqbyo8uP+L`bX|o)-E|OvY*ajZ|%8` +zwIG`HBZhSWSKuCM#XZa1A?Hcvn3?QDYgq$r%wwgjeNO4J4yNJST&%me4p7m#n7yu< +zbUDmH0(~Bt&n(uibr=FXgV61xZ?QJEfeG1AC}7`{b1h{cd?qN!hJcy4DwGnp914&X +zfrq#r{^2Fbm=!4O}o0G9e3`LH1JQy9tiTwYrKqlQPvq1LOoPq6N2&y`BfZ +z2iG>5xuAu%<^9+!_k^xw@jK!ihfMm;L^#g;*a=-=vk_n2ak;qTSHtBYkpKC=#)yM| +zA1oHH8#IwM=LGrgcbmna|DXy5(qf{(Zz9bfS(4Eegj%SFCV2Bp$&vSCNKzF7QAubW(;c_%vVfY%wEepJ=XUo#c#U +zG90(96rJz^oP-mw35doy<4Umwg7Wz)Ec7wuyPh+sU+~_>x+rKH;ZGL9`Q$@hN3iKk +z);lqj_j267k>6PAs>!&#EADV9;;?LQ<_Hzn%${x{?-3r^hub)RV4sltIQ@lZXEpu! +z6^>?BvtFSuzC2mPA0~fiu{i!AVZUGrBA&`za}-;<(1O19da|7j!K~ml#i-ZS*-@ +zr;E0jKzYbtx?PY!d?p1^gzJYY2tq3y1rMlB&NjdXF3RG8(#w{MZVv7|>}zviCitNg +z%E1Yt52@1x_EZmI%RNGz=w@l9o?c<(QtkH2(IIndr7rU5K{80Nt@~18n6^n?% +zwoz@=`LB%MQfvZgP>Wr+K??8q$AavoDdPvQkp5TzrH~7)lv6CA9<< +zw54od5fVjm9uZw0=S1oSHW1?dP{-E^!ZY`N%fu!0C&+?K5bu5-nS$$tG#D#oVz@ZM +zxza?=m;C4}l{(*iYO4PZ#tHcs-A)-6k_HlZ?pjP<;97*e@1*bGil5L{-7Cal%6t?$ +zVeAh-7KbmcHzztNs%eQBJGVP~i&Dtk!d?;DXt2>ZQz77>`*ij8SATgB6BWOY*Rd*>8wSKipO>f@AgfK=OkyU +znazr)fafK+nYc5Nm*aNQZXO7=36Y7dTd~FS^eO+3=tGiaP)MA6h+9NEE~Q;~Zsj=_ +zzw18w6lr!s8|;ILlw+ccGd0{4T<5)%k+ebL`tPT$c`oAFhQAB8G$@`{$|4>>28Yn` +z^L;whp3l!71f@`T7?y?g13 +zwW5mW$DtGUV5bxyD +zw6(K4TW%?ivS0i#*5tVioi7oO{>MqKygB*?r#tiqWG7(fA+wmZC&IJv#RyLd<#EDT +zFiAtTtqpy>O7L%O$j|;{XOf93MT-qE?2saczy!Y{GGHQ1g8K-|fX(P$NZwrAh_=5o +zKcLfN>dyY;K=Yqe=Dzy36i+el_`aVho**uk%(gR@F2Ri?O)l|gfp=(#z63vw@FYOd +z7?UR#Sp^(}g&SF`As=SJV#om>=; +zU7IXi$i||pNUndh{bBqO;xL2dFz2+KQ?O@nc#1^=WSUp8p05&}#K|WtLIjBy6pCQ( +zhr!|z?k*nTuE(Q912>a|NnMYKDBuJk!USgVC9T9dqNhKjWUt~*MCMDGCcz>6o=%JS +z8a%^!*Kly22&dpAIFKbk=t(-2N>gd}7$MA2) +z4MN&`*bKJ=UsApR!gRWb~^;0&CFui+$!ThT9F#)ekE +zN?6&qXdu=ni!|D5EVQxLRgfuiKjT~_T;yZn*}`*{LcMth5OVKmTE&Gn_XyO*)249t +zOCJIaA}EgnW{8A1`HUX3d6noQe%m*zL%Gwj!6969e;)*U#iQ>r7vT33)(T$yMKbIo +z`jF{SF$^6KeyND%a369L{bVSNf(eiTqhT0CfEz}F0z<$BPOyQ1IP^uLrxhD6z#Yo- +zBHW8`7vlcMqwJG#ClfacE`fNs0xWPTTnsAZJBsZzSWDR+B+Z?$4gR|%S*%?{x>D*- +z+&D;qiSXaZt|?0vKY?xd6Un!jH1!gm&yu#Bvze3V4|Kn>nl90-K-}c0v=>LOleb06k{xGX%F3*AJUv3v7aNr~o(NE|?5g +zz$D0k2`~yq!{$#|ZvvbVKoR(%3S8iUT*yI}2lBxOUKmMQCtL!T!WdXh`Iq84v4Lj> +z>vay}iG7BP_%X=uhrtjH!c;6~%J-raA%?kF0$SMbi&e}ct9Zx4mFKmff(AB-gTu_- +zCnX8MyFiFLwUepxRcn>Vlxd%atH85L_;}9oGq#xD{8oz?#Qmv1Tkd?A%@{jHa{NFL +za-jf@5$`yNdJAVd%oF%Kp&Uw~0;*sWY=$imgj%SFCTNA7unUgD5!eT9a0m`d|6uB? +zkxx2f9aQ`dD2B0+2KnFvrIY;-t`lq!2O5|`fX76euwPqQ`@D5|2i~IK%BgOlF`NJr6W+)WHI;{cLk2rWq +zg!mI}@%j&+2{{^tu;b55+Yu^d4^|EpPz8SWcWrWy7qv<#2kCc^3q`P*@~bJ_v4aLS +zNP~P3+_`vhb72-%WbHf!F+AH~D8#{8 +zWbwEOpkL^UuS2=l5C?+vSwD1L&HfO&@V7w`ejA9dvAOvyJxGL}j_25(G;NSOlm0{g +zRWL4A5v{ntr5m<|gt#t}cMxbIP8HbbXZ7=CKgc1 +z@Kjx%J1DzLh_}t8mn$MWK{kfHIw|_L} +b4F2C~4_;jUw%c04m4Mu7{r~pwLDT;MxmF=) + +literal 0 +HcmV?d00001 + +diff --git a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh +new file mode 100755 +index 0000000000..5be62f59a9 +--- /dev/null ++++ b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh +@@ -0,0 +1,60 @@ ++. /lib/functions/system.sh ++ ++qca_do_upgrade() { ++ local tar_file="$1" ++ ++ local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$') ++ board_dir=${board_dir%/} ++ local dev=$(find_mtd_chardev "0:HLOS") ++ ++ tar Oxf $tar_file ${board_dir}/kernel | mtd write - ${dev} ++ ++ if [ -n "$UPGRADE_BACKUP" ]; then ++ tar Oxf $tar_file ${board_dir}/root | mtd -j "$UPGRADE_BACKUP" write - rootfs ++ else ++ tar Oxf $tar_file ${board_dir}/root | mtd write - rootfs ++ fi ++} ++ ++platform_check_image() { ++ local magic_long="$(get_magic_long "$1")" ++ board=$(board_name) ++ case $board in ++ cig,wf188|\ ++ cig,wf188n|\ ++ cig,wf194c|\ ++ edgecore,eap101|\ ++ edgecore,eap102|\ ++ qcom,ipq6018-cp01|\ ++ qcom,ipq807x-hk01|\ ++ sercomm,wallaby) ++ [ "$magic_long" = "73797375" ] && return 0 ++ ;; ++ esac ++ return 1 ++} ++ ++platform_do_upgrade() { ++ CI_UBIPART="rootfs" ++ CI_ROOTPART="ubi_rootfs" ++ CI_IPQ807X=1 ++ ++ board=$(board_name) ++ case $board in ++ cig,wf188) ++ qca_do_upgrade $1 ++ ;; ++ cig,wf188n|\ ++ cig,wf194c|\ ++ edgecore,eap102|\ ++ qcom,ipq6018-cp01|\ ++ qcom,ipq807x-hk01|\ ++ sercomm,wallaby) ++ nand_upgrade_tar "$1" ++ ;; ++ edgecore,eap101) ++ CI_UBIPART="rootfs1" ++ nand_upgrade_tar "$1" ++ ;; ++ esac ++} +diff --git a/target/linux/ipq807x/config-4.4 b/target/linux/ipq807x/config-4.4 +new file mode 100644 +index 0000000000..b7e0491f45 +--- /dev/null ++++ b/target/linux/ipq807x/config-4.4 +@@ -0,0 +1,747 @@ ++# CONFIG_AHCI_IPQ is not set ++CONFIG_ALIGNMENT_TRAP=y ++# CONFIG_ALLOW_DEV_COREDUMP is not set ++# CONFIG_AMBA_PL08X is not set ++# CONFIG_APM_EMULATION is not set ++# CONFIG_APQ_GCC_8084 is not set ++# CONFIG_APQ_MMCC_8084 is not set ++# CONFIG_AR8216_PHY is not set ++CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y ++CONFIG_ARCH_HAS_ELF_RANDOMIZE=y ++CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y ++CONFIG_ARCH_HAS_SG_CHAIN=y ++CONFIG_ARCH_HAS_TICK_BROADCAST=y ++CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y ++# CONFIG_ARCH_IPQ807x is not set ++# CONFIG_ARCH_IPQ6018 is not set ++CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y ++# CONFIG_ARCH_MSM8960 is not set ++# CONFIG_ARCH_MSM8974 is not set ++CONFIG_ARCH_MSM8X60=y ++CONFIG_ARCH_MULTIPLATFORM=y ++# CONFIG_ARCH_MULTI_CPU_AUTO is not set ++CONFIG_ARCH_MULTI_V6_V7=y ++CONFIG_ARCH_MULTI_V7=y ++CONFIG_ARCH_NR_GPIO=0 ++CONFIG_ARCH_QCOM=y ++CONFIG_QSEECOM=m ++# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set ++# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set ++CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y ++CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y ++CONFIG_ARCH_SUPPORTS_UPROBES=y ++CONFIG_ARCH_SUSPEND_POSSIBLE=y ++CONFIG_ARCH_USE_BUILTIN_BSWAP=y ++CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y ++CONFIG_ARCH_WANT_GENERAL_HUGETLB=y ++CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y ++CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y ++CONFIG_ARM=y ++CONFIG_ARM_AMBA=y ++CONFIG_ARM_ARCH_TIMER=y ++CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y ++# CONFIG_ARM_ATAG_DTB_COMPAT is not set ++CONFIG_ARM_CCI=y ++CONFIG_ARM_CCI400_COMMON=y ++CONFIG_ARM_CCI400_PMU=y ++CONFIG_ARM_CCI_PMU=y ++CONFIG_ARM_CPU_SUSPEND=y ++CONFIG_ARM_GIC=y ++CONFIG_ARM_HAS_SG_CHAIN=y ++# CONFIG_ARM_HIGHBANK_CPUIDLE is not set ++CONFIG_ARM_CPUIDLE=y ++CONFIG_ARM_L1_CACHE_SHIFT=6 ++CONFIG_ARM_L1_CACHE_SHIFT_6=y ++# CONFIG_ARM_LPAE is not set ++CONFIG_ARM_MODULE_PLTS=y ++CONFIG_ARM_PATCH_PHYS_VIRT=y ++CONFIG_ARM_PMU=y ++CONFIG_ARM_PSCI=y ++CONFIG_ARM_PSCI_FW=y ++CONFIG_ARM_QCOM_CPUFREQ=y ++# CONFIG_ARM_SMMU is not set ++# CONFIG_ARM_SP805_WATCHDOG is not set ++CONFIG_ARM_THUMB=y ++# CONFIG_ARM_THUMBEE is not set ++CONFIG_ARM_UNWIND=y ++CONFIG_ARM_VIRT_EXT=y ++CONFIG_AT803X_PHY=y ++# CONFIG_ATA is not set ++CONFIG_BLK_DEV_NVME=y ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=4096 ++# CONFIG_VIRTIO_BLK is not set ++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set ++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 ++CONFIG_BOUNCE=y ++CONFIG_BUILD_BIN2C=y ++CONFIG_CNSS_QCA6290=y ++# CONFIG_CNSS2 is not set ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++CONFIG_CC_STACKPROTECTOR=y ++# CONFIG_CC_STACKPROTECTOR_NONE is not set ++CONFIG_CC_STACKPROTECTOR_REGULAR=y ++# CONFIG_CHARGER_QCOM_SMBB is not set ++CONFIG_CLEANCACHE=y ++CONFIG_CLKDEV_LOOKUP=y ++CONFIG_CLKSRC_OF=y ++CONFIG_CLKSRC_PROBE=y ++CONFIG_CLKSRC_QCOM=y ++CONFIG_CLONE_BACKWARDS=y ++CONFIG_COMMON_CLK=y ++CONFIG_COMMON_CLK_QCOM=y ++CONFIG_CONFIGFS_FS=y ++CONFIG_COREDUMP=y ++# CONFIG_CORESIGHT is not set ++# CONFIG_CORESIGHT_CSR is not set ++# CONFIG_CORESIGHT_CTI is not set ++# NFIG_CORESIGHT_EVENT is not set ++# CONFIG_CORESIGHT_HWEVENT is not set ++# CONFIG_CORESIGHT_LINKS_AND_SINKS is not set ++# CONFIG_CORESIGHT_LINK_AND_SINK_TMC is not set ++# CONFIG_CORESIGHT_QCOM_REPLICATOR is not set ++# CONFIG_CORESIGHT_QPDI is not set ++# CONFIG_CORESIGHT_SINK_ETBV10 is not set ++# CONFIG_CORESIGHT_SINK_TPIU is not set ++# CONFIG_CORESIGHT_SOURCE_DUMMY is not set ++# CONFIG_CORESIGHT_SOURCE_ETM3X is not set ++# CONFIG_CORESIGHT_SOURCE_ETM4X is not set ++# CONFIG_CORESIGHT_REMOTE_ETM is not set ++# CONFIG_CORESIGHT_STM is not set ++# CONFIG_CORESIGHT_TPDA is not set ++# CONFIG_CORESIGHT_TPDM is not set ++# CONFIG_CORESIGHT_TPDM_DEFAULT_ENABLE is not set ++CONFIG_CPUFREQ_DT=y ++CONFIG_CPUFREQ_DT_PLATDEV=y ++CONFIG_CPU_32v6K=y ++CONFIG_CPU_32v7=y ++CONFIG_CPU_ABRT_EV7=y ++# CONFIG_CPU_BIG_ENDIAN is not set ++# CONFIG_CPU_BPREDICT_DISABLE is not set ++CONFIG_CPU_CACHE_V7=y ++CONFIG_CPU_CACHE_VIPT=y ++CONFIG_CPU_COPY_V6=y ++CONFIG_CPU_CP15=y ++CONFIG_CPU_CP15_MMU=y ++# CONFIG_CPU_SW_DOMAIN_PAN is not set ++CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y ++CONFIG_CPU_FREQ_GOV_COMMON=y ++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y ++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_STAT=y ++CONFIG_CPU_HAS_ASID=y ++# CONFIG_CPU_ICACHE_DISABLE is not set ++CONFIG_CPU_IDLE=y ++CONFIG_CPU_IDLE_GOV_LADDER=y ++CONFIG_CPU_IDLE_GOV_MENU=y ++CONFIG_CPU_PABRT_V7=y ++CONFIG_CPU_PM=y ++CONFIG_CPU_RMAP=y ++# CONFIG_CPU_THERMAL is not set ++CONFIG_CPU_TLB_V7=y ++CONFIG_CPU_V7=y ++CONFIG_CRC16=y ++# CONFIG_CRC32_SARWATE is not set ++CONFIG_CRC32_SLICEBY8=y ++CONFIG_CROSS_MEMORY_ATTACH=y ++# CONFIG_CRYPTO_DEV_QCOM_MSM_QCE is not set ++# CONFIG_CRYPTO_DEV_OTA_CRYPTO is not set ++# CONFIG_FIPS_ENABLE is not set ++CONFIG_CRYPTO_AEAD=y ++CONFIG_CRYPTO_AEAD2=y ++CONFIG_CRYPTO_BLKCIPHER=y ++CONFIG_CRYPTO_BLKCIPHER2=y ++CONFIG_CRYPTO_CCM=y ++CONFIG_CRYPTO_CRC32C=y ++CONFIG_CRYPTO_CTR=y ++CONFIG_CRYPTO_DEFLATE=y ++CONFIG_CRYPTO_CMAC=y ++# CONFIG_CRYPTO_DEV_QCOM_ICE is not set ++CONFIG_CRYPTO_ECHAINIV=y ++CONFIG_CRYPTO_HASH2=y ++CONFIG_CRYPTO_HASH_INFO=y ++CONFIG_CRYPTO_HW=y ++CONFIG_CRYPTO_LZO=y ++CONFIG_CRYPTO_MANAGER=y ++CONFIG_CRYPTO_MANAGER2=y ++CONFIG_CRYPTO_NULL=y ++CONFIG_CRYPTO_RNG=y ++CONFIG_CRYPTO_RNG2=y ++CONFIG_CRYPTO_SEQIV=y ++CONFIG_CRYPTO_SHA256=y ++CONFIG_CRYPTO_WORKQUEUE=y ++CONFIG_CRYPTO_XZ=y ++CONFIG_CRYPTO_ARC4=y ++CONFIG_CRYPTO_GCM=y ++CONFIG_DCACHE_WORD_ACCESS=y ++CONFIG_DEBUG_BUGVERBOSE=y ++CONFIG_DEBUG_GPIO=y ++# CONFIG_DEBUG_INFO_REDUCED is not set ++CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" ++# CONFIG_DEBUG_UART_8250 is not set ++# CONFIG_DEBUG_USER is not set ++CONFIG_DECOMPRESS_GZIP=y ++CONFIG_DEVMEM=y ++# CONFIG_DIAG_OVER_USB is not set ++CONFIG_DMADEVICES=y ++CONFIG_DMA_ENGINE=y ++CONFIG_DMA_OF=y ++CONFIG_DMA_VIRTUAL_CHANNELS=y ++CONFIG_DTC=y ++# CONFIG_DWMAC_GENERIC is not set ++# CONFIG_DWMAC_IPQ806X is not set ++# CONFIG_DWMAC_SUNXI is not set ++# CONFIG_DW_DMAC_PCI is not set ++# CONFIG_VHOST_NET is not set ++# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set ++CONFIG_DYNAMIC_DEBUG=y ++CONFIG_ETHERNET_PACKET_MANGLE=y ++CONFIG_EXT4_FS=y ++# CONFIG_EXT4_USE_FOR_EXT2 is not set ++CONFIG_FB=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_IMAGEBLIT=y ++CONFIG_FB_CMDLINE=y ++CONFIG_FB_QCOM_QPIC=y ++CONFIG_FB_QCOM_QPIC_ER_SSD1963_PANEL=y ++CONFIG_FB_SYS_FOPS=y ++CONFIG_FIXED_PHY=y ++CONFIG_FIX_EARLYCON_MEM=y ++CONFIG_FS_MBCACHE=y ++# CONFIG_GCC_PLUGINS is not set ++CONFIG_GENERIC_ALLOCATOR=y ++CONFIG_GENERIC_BUG=y ++CONFIG_GENERIC_CLOCKEVENTS=y ++CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y ++# CONFIG_GENERIC_CPUFREQ_KRAIT is not set ++CONFIG_GENERIC_IDLE_POLL_SETUP=y ++CONFIG_GENERIC_IO=y ++CONFIG_GENERIC_IRQ_SHOW=y ++CONFIG_GENERIC_IRQ_SHOW_LEVEL=y ++CONFIG_GENERIC_MSI_IRQ=y ++CONFIG_GENERIC_PCI_IOMAP=y ++CONFIG_GENERIC_PHY=y ++CONFIG_GENERIC_PINCONF=y ++CONFIG_GENERIC_SCHED_CLOCK=y ++CONFIG_GENERIC_SMP_IDLE_THREAD=y ++CONFIG_GENERIC_STRNCPY_FROM_USER=y ++CONFIG_GENERIC_STRNLEN_USER=y ++CONFIG_GENERIC_TIME_VSYSCALL=y ++CONFIG_GPIOLIB=y ++CONFIG_GPIOLIB_IRQCHIP=y ++CONFIG_GPIO_DEVRES=y ++# CONFIG_GPIO_LATCH is not set ++# CONFIG_GPIO_NXP_74HC153 is not set ++CONFIG_GPIO_SYSFS=y ++CONFIG_HANDLE_DOMAIN_IRQ=y ++CONFIG_HARDIRQS_SW_RESEND=y ++CONFIG_HAS_DMA=y ++CONFIG_HAS_IOMEM=y ++CONFIG_HAS_IOPORT_MAP=y ++# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set ++CONFIG_HAVE_ARCH_AUDITSYSCALL=y ++CONFIG_HAVE_ARCH_BITREVERSE=y ++CONFIG_HAVE_ARCH_JUMP_LABEL=y ++CONFIG_HAVE_ARCH_KGDB=y ++CONFIG_HAVE_ARCH_PFN_VALID=y ++CONFIG_HAVE_ARCH_SECCOMP_FILTER=y ++CONFIG_HAVE_ARCH_TRACEHOOK=y ++CONFIG_HAVE_ARM_ARCH_TIMER=y ++# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set ++CONFIG_HAVE_BPF_JIT=y ++CONFIG_HAVE_CC_STACKPROTECTOR=y ++CONFIG_HAVE_CLK=y ++CONFIG_HAVE_CLK_PREPARE=y ++CONFIG_HAVE_CONTEXT_TRACKING=y ++CONFIG_HAVE_C_RECORDMCOUNT=y ++CONFIG_HAVE_DEBUG_KMEMLEAK=y ++CONFIG_HAVE_DMA_API_DEBUG=y ++CONFIG_HAVE_DMA_ATTRS=y ++CONFIG_HAVE_DMA_CONTIGUOUS=y ++CONFIG_HAVE_DYNAMIC_FTRACE=y ++CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y ++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y ++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y ++CONFIG_HAVE_FUNCTION_TRACER=y ++# CONFIG_SRD_TRACE is not set ++CONFIG_HAVE_GENERIC_DMA_COHERENT=y ++CONFIG_HAVE_HW_BREAKPOINT=y ++CONFIG_HAVE_IDE=y ++CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y ++CONFIG_HAVE_KERNEL_GZIP=y ++CONFIG_HAVE_KERNEL_LZ4=y ++CONFIG_HAVE_KERNEL_LZMA=y ++CONFIG_HAVE_KERNEL_LZO=y ++CONFIG_HAVE_KERNEL_XZ=y ++# CONFIG_HAVE_KPROBES is not set ++# CONFIG_HAVE_KRETPROBES is not set ++CONFIG_HAVE_MEMBLOCK=y ++CONFIG_HAVE_MOD_ARCH_SPECIFIC=y ++CONFIG_HAVE_NET_DSA=y ++CONFIG_HAVE_OPROFILE=y ++# CONFIG_HAVE_OPTPROBES is not set ++CONFIG_HAVE_PERF_EVENTS=y ++CONFIG_HAVE_PERF_REGS=y ++CONFIG_HAVE_PERF_USER_STACK_DUMP=y ++CONFIG_HAVE_PROC_CPU=y ++CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y ++CONFIG_HAVE_SMP=y ++CONFIG_HAVE_SYSCALL_TRACEPOINTS=y ++CONFIG_HAVE_UID16=y ++CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y ++CONFIG_HIGHMEM=y ++CONFIG_HIGHPTE=y ++CONFIG_HOTPLUG_CPU=y ++CONFIG_HWSPINLOCK=y ++CONFIG_HWSPINLOCK_QCOM=y ++CONFIG_HW_RANDOM=y ++CONFIG_HW_RANDOM_MSM=y ++CONFIG_HZ_FIXED=0 ++CONFIG_I2C=y ++CONFIG_I2C_BOARDINFO=y ++CONFIG_I2C_CHARDEV=y ++CONFIG_I2C_COMPAT=y ++CONFIG_I2C_HELPER_AUTO=y ++CONFIG_I2C_QUP=y ++# CONFIG_IIO is not set ++# CONFIG_IIO_BUFFER is not set ++# CONFIG_IIO_TRIGGER is not set ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_INPUT_PM8941_PWRKEY is not set ++CONFIG_IOMMU_HELPER=y ++# CONFIG_IOMMU_IO_PGTABLE_LPAE is not set ++# CONFIG_IPQ_GCC_4019 is not set ++# CONFIG_IPQ_GCC_6018 is not set ++# CONFIG_IPQ_APSS_6018 is not set ++# CONFIG_IPQ_GCC_806X is not set ++# CONFIG_IPQ_ADSS_807x is not set ++# CONFIG_IPQ_APSS_807x is not set ++# CONFIG_IPQ_GCC_807x is not set ++# CONFIG_IPQ_ADCC_4019 is not set ++# CONFIG_IPQ_LCC_806X is not set ++# CONFIG_IPQ_REMOTEPROC_ADSP is not set ++# CONFIG_IPQ_SUBSYSTEM_RESTART is not set ++# CONFIG_IPQ_SUBSYSTEM_RESTART_TEST is not set ++CONFIG_IRQCHIP=y ++CONFIG_IRQ_DOMAIN=y ++CONFIG_IRQ_DOMAIN_HIERARCHY=y ++CONFIG_IRQ_FORCED_THREADING=y ++CONFIG_IRQ_WORK=y ++CONFIG_JBD2=y ++# CONFIG_IPC_ROUTER is not set ++# CONFIG_IPC_ROUTER_SECURITY is not set ++# CONFIG_IPC_LOGGING is not set ++CONFIG_KPSS_XCC=y ++# CONFIG_KRAITCC is not set ++# CONFIG_KRAIT_CLOCKS is not set ++# CONFIG_KRAIT_L2_ACCESSORS is not set ++CONFIG_LEDS_IPQ=y ++CONFIG_LEDS_GPIO=y ++CONFIG_LEDS_TLC591XX=y ++# CONFIG_LEDS_PCA9956B is not set ++CONFIG_LIBFDT=y ++CONFIG_LOCKUP_DETECTOR=y ++CONFIG_LOCK_SPIN_ON_OWNER=y ++CONFIG_LZO_COMPRESS=y ++CONFIG_LZO_DECOMPRESS=y ++CONFIG_MDIO=y ++CONFIG_MDIO_BITBANG=y ++CONFIG_MDIO_BOARDINFO=y ++CONFIG_MDIO_GPIO=y ++# CONFIG_MDIO_QCA is not set ++CONFIG_MFD_QCOM_RPM=y ++CONFIG_MFD_SPMI_PMIC=y ++# CONFIG_SLIMBUS is not set ++# CONFIG_SLIMBUS_MSM_CTRL is not set ++# CONFIG_SLIMBUS_MSM_NGD is not set ++# CONFIG_OF_SLIMBUS is not set ++CONFIG_MFD_SYSCON=y ++CONFIG_MIGHT_HAVE_CACHE_L2X0=y ++CONFIG_MIGHT_HAVE_PCI=y ++CONFIG_MMC=y ++CONFIG_MMC_ARMMMCI=y ++CONFIG_MMC_BLOCK=y ++CONFIG_MMC_BLOCK_MINORS=32 ++CONFIG_MMC_QCOM_DML=y ++CONFIG_MMC_QCOM_TUNING=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_MSM=y ++# CONFIG_MMC_SDHCI_OF_ARASAN is not set ++# CONFIG_MMC_SDHCI_PCI is not set ++CONFIG_MMC_SDHCI_PLTFM=y ++# CONFIG_MMC_TIFM_SD is not set ++CONFIG_MODULES_TREE_LOOKUP=y ++CONFIG_MODULES_USE_ELF_REL=y ++# CONFIG_MSM_GCC_8660 is not set ++# CONFIG_MSM_GCC_8916 is not set ++# CONFIG_MSM_GCC_8960 is not set ++# CONFIG_MSM_GCC_8974 is not set ++# CONFIG_MSM_LCC_8960 is not set ++# CONFIG_MSM_MMCC_8960 is not set ++# CONFIG_MSM_MMCC_8974 is not set ++# CONFIG_MSM_MHI is not set ++# CONFIG_MSM_IPC_ROUTER_MHI_XPRT is not set ++# CONFIG_MSM_MHI_DEBUG is not set ++# CONFIG_MSM_MHI_DEV is not set ++# CONFIG_MSM_MHI_UCI is not set ++# CONFIG_DIAGFWD_BRIDGE_CODE is not set ++# CONFIG_MSM_BUS_SCALING is not set ++# CONFIG_BUS_TOPOLOGY_ADHOC is not set ++# CONFIG_QPNP_REVID is not set ++# CONFIG_SPS is not set ++# CONFIG_SPS_SUPPORT_NDP_BAM is not set ++# CONFIG_USB_BAM is not set ++# CONFIG_SPS_SUPPORT_BAMDMA is not set ++# CONFIG_IPA is not set ++# CONFIG_IPA3 is not set ++# CONFIG_EP_PCIE is not set ++# CONFIG_GSI is not set ++# CONFIG_PFT is not set ++# CONFIG_SEEMP_CORE is not set ++# CONFIG_GPIO_USB_DETECT is not set ++# CONFIG_MSM_GLINK is not set ++# CONFIG_MSM_GLINK_LOOPBACK_SERVER is not set ++# CONFIG_MSM_GLINK_SMEM_NATIVE_XPRT is not set ++# CONFIG_MSM_GLINK_PKT is not set ++# CONFIG_MSM_IPC_ROUTER_GLINK_XPRT is not set ++# CONFIG_MSM_QMI_INTERFACE is not set ++# CONFIG_MSM_TEST_QMI_CLIENT is not set ++# CONFIG_GLINK_DEBUG_FS is not set ++# CONFIG_MSM_RPM_SMD is not set ++# CONFIG_MSM_RPM_GLINK is not set ++CONFIG_MSM_RPM_LOG=y ++# CONFIG_MSM_SMEM is not set ++CONFIG_MTD_CMDLINE_PARTS=y ++CONFIG_MTD_M25P80=y ++CONFIG_MTD_NAND=y ++CONFIG_MTD_NAND_ECC=y ++CONFIG_MTD_NAND_QCOM=y ++CONFIG_MTD_QCOM_SMEM_PARTS=y ++CONFIG_MTD_SPINAND_GIGADEVICE=y ++CONFIG_MTD_SPINAND_MT29F=y ++CONFIG_MTD_SPINAND_ONDIEECC=y ++CONFIG_MTD_SPI_NOR=y ++CONFIG_MTD_SPLIT_FIRMWARE=y ++CONFIG_MTD_SPLIT_FIT_FW=y ++CONFIG_MTD_UBI=y ++CONFIG_MTD_UBI_BEB_LIMIT=20 ++CONFIG_MTD_UBI_BLOCK=y ++# CONFIG_MTD_UBI_FASTMAP is not set ++CONFIG_MTD_UBI_GLUEBI=y ++CONFIG_MTD_UBI_WL_THRESHOLD=4096 ++CONFIG_MULTI_IRQ_HANDLER=y ++CONFIG_MUTEX_SPIN_ON_OWNER=y ++CONFIG_NEED_DMA_MAP_STATE=y ++CONFIG_NEON=y ++CONFIG_NET=y ++# CONFIG_NET_DSA_MV88E6063 is not set ++CONFIG_NET_FLOW_LIMIT=y ++CONFIG_NET_PTP_CLASSIFY=y ++CONFIG_NO_BOOTMEM=y ++CONFIG_NO_HZ=y ++CONFIG_NO_HZ_COMMON=y ++CONFIG_NO_HZ_IDLE=y ++CONFIG_NR_CPUS=4 ++CONFIG_NUM_ALT_PARTITION=8 ++CONFIG_NVMEM=y ++CONFIG_OF=y ++CONFIG_OF_ADDRESS=y ++CONFIG_OF_ADDRESS_PCI=y ++CONFIG_OF_EARLY_FLATTREE=y ++CONFIG_OF_FLATTREE=y ++CONFIG_OF_GPIO=y ++CONFIG_OF_IRQ=y ++CONFIG_OF_MDIO=y ++CONFIG_OF_MTD=y ++CONFIG_OF_NET=y ++CONFIG_OF_PCI=y ++CONFIG_OF_PCI_IRQ=y ++CONFIG_OF_RESERVED_MEM=y ++CONFIG_OLD_SIGACTION=y ++CONFIG_OLD_SIGSUSPEND3=y ++CONFIG_PAGE_OFFSET=0xC0000000 ++CONFIG_PANIC_ON_OOPS=y ++CONFIG_PANIC_ON_OOPS_VALUE=1 ++CONFIG_PANIC_TIMEOUT=5 ++CONFIG_PCI=y ++# CONFIG_PCIEAER is not set ++CONFIG_PCIE_DW=y ++# CONFIG_PCIE_DW_PLAT is not set ++CONFIG_PCIE_PME=y ++CONFIG_PCIE_QCOM=y ++CONFIG_PCI_DOMAINS=y ++CONFIG_PCI_DOMAINS_GENERIC=y ++CONFIG_PCI_MSI=y ++CONFIG_PERF_EVENTS=y ++CONFIG_PERF_USE_VMALLOC=y ++CONFIG_PGTABLE_LEVELS=2 ++CONFIG_PHYLIB=y ++# CONFIG_PHY_IPQ_BALDUR_USB is not set ++# CONFIG_PHY_IPQ_UNIPHY_USB is not set ++# CONFIG_PHY_QCOM_APQ8064_SATA is not set ++# CONFIG_PHY_QCOM_IPQ806X_SATA is not set ++CONFIG_PHY_QCA_PCIE_QMP=y ++# CONFIG_PHY_QCOM_UFS is not set ++CONFIG_PINCTRL=y ++# CONFIG_PINCTRL_APQ8064 is not set ++# CONFIG_PINCTRL_APQ8084 is not set ++# CONFIG_PINCTRL_IPQ4019 is not set ++# CONFIG_PINCTRL_IPQ6018 is not set ++# CONFIG_PINCTRL_IPQ8064 is not set ++# CONFIG_PINCTRL_IPQ807x is not set ++CONFIG_PINCTRL_MSM=y ++# CONFIG_PINCTRL_MSM8660 is not set ++# CONFIG_PINCTRL_MSM8916 is not set ++# CONFIG_PINCTRL_MSM8960 is not set ++CONFIG_PINCTRL_QCOM_SPMI_PMIC=y ++# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set ++# CONFIG_PL330_DMA is not set ++CONFIG_PM=y ++CONFIG_PM_CLK=y ++# CONFIG_PM_DEBUG is not set ++CONFIG_PM_GENERIC_DOMAINS=y ++CONFIG_PM_GENERIC_DOMAINS_OF=y ++CONFIG_PM_GENERIC_DOMAINS_SLEEP=y ++CONFIG_PM_OPP=y ++CONFIG_PM_SLEEP=y ++CONFIG_PM_SLEEP_SMP=y ++CONFIG_POWER_RESET=y ++CONFIG_POWER_RESET_MSM=y ++CONFIG_POWER_SUPPLY=y ++CONFIG_PREEMPT=y ++CONFIG_PREEMPT_COUNT=y ++# CONFIG_PREEMPT_NONE is not set ++CONFIG_PREEMPT_RCU=y ++CONFIG_PRINTK_TIME=y ++CONFIG_PROC_PAGE_MONITOR=y ++# CONFIG_PROC_STRIPPED is not set ++CONFIG_PWM=y ++# CONFIG_PWM_IPQ4019 is not set ++# CONFIG_PWM_PCA9685 is not set ++CONFIG_PWM_SYSFS=y ++CONFIG_QCOM_ADM=y ++# CONFIG_QCOM_APM is not set ++CONFIG_QCOM_BAM_DMA=y ++# CONFIG_QCOM_COINCELL is not set ++# CONFIG_QCOM_DCC is not set ++CONFIG_QCOM_GDSC=y ++CONFIG_QCOM_GSBI=y ++# CONFIG_QCOM_HFPLL is not set ++CONFIG_QCOM_MEMORY_DUMP_V2=y ++CONFIG_QCOM_QFPROM=y ++# CONFIG_QCOM_SPMI_TEMP_ALARM is not set ++CONFIG_QCOM_RPM_CLK=y ++# CONFIG_QCOM_RTB is not set ++# CONFIG_QCOM_PM is not set ++CONFIG_QCOM_SCM=y ++CONFIG_QCOM_SCM_32=y ++# CONFIG_HAVE_ARM_SMCCC is not set ++CONFIG_QCA_SCM_RESTART_REASON=y ++CONFIG_IPQ_TCSR=y ++CONFIG_QCOM_QFPROM=y ++# CONFIG_QCOM_SMD is not set ++CONFIG_QCOM_SMEM=y ++CONFIG_QCOM_SMEM_STATE=y ++# CONFIG_QCOM_SMD is not set ++CONFIG_QCOM_SMP2P=y ++# CONFIG_QCOM_SPMI_VADC is not set ++CONFIG_QCOM_TSENS=y ++CONFIG_QCOM_TZ_LOG=y ++CONFIG_QCOM_WDT=y ++CONFIG_QMI_ENCDEC=y ++CONFIG_RATIONAL=y ++# CONFIG_RCU_BOOST is not set ++CONFIG_RCU_CPU_STALL_TIMEOUT=21 ++# CONFIG_RCU_EXPERT is not set ++CONFIG_RCU_STALL_COMMON=y ++CONFIG_RD_GZIP=y ++CONFIG_REGMAP=y ++# CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS is not set ++CONFIG_REGMAP_MMIO=y ++CONFIG_REGULATOR=y ++# CONFIG_REGULATOR_CPR3 is not set ++CONFIG_REGULATOR_GPIO=y ++CONFIG_REGULATOR_FIXED_VOLTAGE=y ++CONFIG_REGULATOR_QCOM_RPM=y ++CONFIG_REGULATOR_QCOM_SPMI=y ++# CONFIG_REGULATOR_IPQ40XX is not set ++# CONFIG_REGULATOR_RPM_SMD is not set ++# CONFIG_REGULATOR_RPM_GLINK is not set ++CONFIG_RELAY=y ++CONFIG_REMOTEPROC=y ++# CONFIG_IPQ807X_REMOTEPROC is not set ++CONFIG_RESET_CONTROLLER=y ++CONFIG_RFS_ACCEL=y ++CONFIG_RPS=y ++CONFIG_RTC_CLASS=y ++# CONFIG_RTC_DRV_CMOS is not set ++# CONFIG_RTC_DRV_PM8XXX is not set ++CONFIG_RWSEM_SPIN_ON_OWNER=y ++CONFIG_RWSEM_XCHGADD_ALGORITHM=y ++# CONFIG_SATA_AHCI is not set ++CONFIG_SCHED_HRTICK=y ++# CONFIG_SCSI is not set ++# CONFIG_SCHED_INFO is not set ++# CONFIG_SCSI_DMA is not set ++# CONFIG_SERIAL_8250 is not set ++# CONFIG_SERIAL_8250_CONSOLE is not set ++# CONFIG_SERIAL_8250_DMA is not set ++# CONFIG_SERIAL_AMBA_PL010 is not set ++# CONFIG_SERIAL_AMBA_PL011 is not set ++CONFIG_SERIAL_MSM=y ++CONFIG_SERIAL_MSM_CONSOLE=y ++# CONFIG_VIRTIO_CONSOLE is not set ++CONFIG_SMP=y ++CONFIG_SMP_ON_UP=y ++CONFIG_SPARSE_IRQ=y ++CONFIG_SPI=y ++CONFIG_SPI_MASTER=y ++CONFIG_SPI_QUP=y ++CONFIG_SPI_SPIDEV=y ++# CONFIG_SPI_VSC7385 is not set ++CONFIG_SPMI=y ++CONFIG_SPMI_MSM_PMIC_ARB=y ++CONFIG_SRCU=y ++# CONFIG_STRIP_ASM_SYMS is not set ++# CONFIG_STOPWATCH is not set ++CONFIG_SUSPEND=y ++CONFIG_SWCONFIG=y ++CONFIG_SWIOTLB=y ++# CONFIG_SWAP is not set ++CONFIG_SWP_EMULATE=y ++CONFIG_SYS_SUPPORTS_APM_EMULATION=y ++CONFIG_THERMAL=y ++CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y ++CONFIG_THERMAL_GOV_STEP_WISE=y ++CONFIG_THERMAL_GOV_USER_SPACE=y ++CONFIG_THERMAL_HWMON=y ++CONFIG_THERMAL_OF=y ++CONFIG_THERMAL_WRITABLE_TRIPS=y ++# CONFIG_THUMB2_KERNEL is not set ++# CONFIG_TICK_CPU_ACCOUNTING is not set ++CONFIG_IRQ_TIME_ACCOUNTING=y ++CONFIG_TRACING_EVENTS_GPIO=y ++CONFIG_UBIFS_FS=y ++CONFIG_UBIFS_FS_ADVANCED_COMPR=y ++CONFIG_UBIFS_FS_LZO=y ++CONFIG_UBIFS_FS_XZ=y ++CONFIG_UBIFS_FS_ZLIB=y ++CONFIG_UEVENT_HELPER_PATH="" ++CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" ++CONFIG_UNINLINE_SPIN_UNLOCK=y ++CONFIG_USB_GADGET=n ++CONFIG_USB_SUPPORT=y ++# CONFIG_USB_DWC3_OF_SIMPLE is not set ++# CONFIG_USB_QCOM_KS_BRIDGE is not set ++# CONFIG_USB_QCOM_8X16_PHY is not set ++# CONFIG_USB_QCOM_QUSB_PHY is not set ++# CONFIG_USB_QCOM_QMP_PHY is not set ++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++# CONFIG_USB_OHCI_LITTLE_ENDIAN is not set ++CONFIG_USE_OF=y ++CONFIG_VDSO=y ++CONFIG_VECTORS_BASE=0xffff0000 ++CONFIG_VFP=y ++CONFIG_VFPv3=y ++CONFIG_VM_EVENT_COUNTERS=y ++CONFIG_WATCHDOG_CORE=y ++# CONFIG_WL_TI is not set ++# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set ++CONFIG_XPS=y ++CONFIG_XZ_DEC_ARM=y ++CONFIG_XZ_DEC_BCJ=y ++CONFIG_ZBOOT_ROM_BSS=0 ++CONFIG_ZBOOT_ROM_TEXT=0 ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_ZLIB_INFLATE=y ++CONFIG_ZONE_DMA_FLAG=0 ++CONFIG_QCOM_CACHE_DUMP=y ++CONFIG_QCOM_CACHE_DUMP_ON_PANIC=y ++CONFIG_QCOM_RESTART_REASON=y ++CONFIG_QCOM_DLOAD_MODE=y ++CONFIG_QCOM_DLOAD_MODE_APPSBL=y ++CONFIG_FW_AUTH=y ++CONFIG_FW_AUTH_TEST=m ++CONFIG_ASYMMETRIC_KEY_TYPE=y ++CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y ++CONFIG_PUBLIC_KEY_ALGO_RSA=y ++CONFIG_X509_CERTIFICATE_PARSER=y ++CONFIG_PKCS7_MESSAGE_PARSER=n ++CONFIG_KEYS=y ++CONFIG_SKB_RECYCLER=y ++CONFIG_SKB_RECYCLER_MULTI_CPU=y ++# CONFIG_SKB_RECYCLER_PREALLOC is not set ++# CONFIG_U_SERIAL_CONSOLE is not set ++CONFIG_SCSI_SCAN_ASYNC=y ++# CONFIG_NF_IPV6_DUMMY_HEADER is not set ++# CONFIG_RMNET is not set ++# CONFIG_RMNET_DATA is not set ++# CONFIG_MSM_SECURE_BUFFER is not set ++# CONFIG_STAGING is not set ++# CONFIG_ANDROID is not set ++# CONFIG_ION is not set ++# CONFIG_ION_DUMMY is not set ++# CONFIG_ION_MSM is not set ++# CONFIG_ION_TEST is not set ++# CONFIG_CMA is not set ++# CONFIG_CMA_DEBUG is not set ++# CONFIG_CMA_DEBUGFS is not set ++# CONFIG_DMA_CMA is not set ++# CONFIG_CMA_AREAS is not set ++# CONFIG_CMA_SIZE_MBYTES is not set ++# CONFIG_CMA_SIZE_SEL_MBYTES is not set ++# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set ++# CONFIG_CMA_SIZE_SEL_MIN is not set ++# CONFIG_CMA_SIZE_SEL_MAX is not set ++# CONFIG_CMA_ALIGNMENT is not set ++# CONFIG_ASHMEM is not set ++# CONFIG_ANDROID_TIMED_OUTPUT is not set ++# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set ++# CONFIG_SYNC is not set ++# CONFIG_SW_SYNC is not set ++# CONFIG_FSL_MC_BUS is not set ++# CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS is not set ++# CONFIG_ALLOC_SKB_PAGE_FRAG_DISABLE is not set ++# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set ++# CONFIG_MAILBOX is not set ++# CONFIG_MAILBOX_TEST is not set ++# CONFIG_QCOM_APCS_IPC is not set ++# CONFIG_QCOM_GLINK_SSR is not set ++# CONFIG_QCOM_Q6V5_WCSS is not set ++# CONFIG_QCOM_SYSMON is not set ++# CONFIG_QRTR is not set ++# CONFIG_QRTR_SMD is not set ++# CONFIG_QRTR_TUN is not set ++# CONFIG_RPMSG is not set ++# CONFIG_RPMSG_QCOM_GLINK_RPM is not set ++# CONFIG_RPMSG_VIRTIO is not set ++# CONFIG_RPMSG_CHAR is not set ++# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set ++# CONFIG_RPMSG_QCOM_SMD is not set ++CONFIG_QCA_MINIDUMP=y ++# CONFIG_QCA_MINIDUMP_DEBUG is not set ++# CONFIG_QRTR_USB is not set ++# CONFIG_QRTR_FIFO is not set ++# CONFIG_QRTR_MHI is not set ++# CONFIG_MHI_BUS is not set ++# CONFIG_MHI_QTI is not set ++# CONFIG_MHI_NETDEV is not set ++# CONFIG_MHI_DEBUG is not set ++# CONFIG_MHI_UCI is not set ++# CONFIG_MHI_SATELLITE is not set ++# CONFIG_DIAG_OVER_QRTR is not set ++# CONFIG_MSM_ADSPRPC is not set ++CONFIG_CRYPTO_MICHAEL_MIC=y ++# CONFIG_MAP_E_SUPPORT is not set ++# CONFIG_USB_QCA_M31_PHY is not set ++CONFIG_QTI_Q6V5_ADSP=y ++# CONFIG_QGIC2_MSI is not set +diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq807x-eap102.dts b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq807x-eap102.dts +new file mode 100755 +index 0000000000..f81cf2d4af +--- /dev/null ++++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/qcom-ipq807x-eap102.dts +@@ -0,0 +1,922 @@ ++/dts-v1/; ++/* ++ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++#include "qcom-ipq807x-soc.dtsi" ++#include "qcom-ipq807x-ac-cpu.dtsi" ++ ++/ { ++ #address-cells = <0x2>; ++ #size-cells = <0x2>; ++ model = "Edgecore EAP102"; ++ compatible = "edgecore,eap102", "qcom,ipq807x-ac02", "qcom,ipq807x"; ++ qcom,msm-id = <0x178 0x0>; ++ interrupt-parent = <&intc>; ++ qcom,board-id = <0x8 0x0>; ++ qcom,pmic-id = <0x0 0x0 0x0 0x0>; ++ ++ aliases { ++ /* ++ * Aliases as required by u-boot ++ * to patch MAC addresses ++ */ ++ ethernet0 = "/soc/dp1"; ++ ethernet1 = "/soc/dp2"; ++ ethernet2 = "/soc/dp3"; ++ ethernet3 = "/soc/dp4"; ++ ethernet4 = "/soc/dp5"; ++ ethernet5 = "/soc/dp6"; ++ ++ led-boot = &led_power; ++ led-failsafe = &led_power; ++ led-running = &led_power; ++ led-upgrade = &led_power; ++ }; ++ ++ chosen { ++ bootargs = "console=ttyMSM0,115200,n8 root=/dev/ram0 rw \ ++ init=/init"; ++ #ifdef __IPQ_MEM_PROFILE_256_MB__ ++ bootargs-append = " swiotlb=1"; ++ #else ++ bootargs-append = " swiotlb=1 coherent_pool=2M"; ++ #endif ++ }; ++}; ++ ++&tlmm { ++ pinctrl-0 = <&btcoex_pins>; ++ pinctrl-names = "default"; ++ ++ btcoex_pins: btcoex_pins { ++ mux_0 { ++ pins = "gpio64"; ++ function = "pta1_1"; ++ drive-strength = <6>; ++ bias-pull-down; ++ }; ++ mux_1 { ++ pins = "gpio65"; ++ function = "pta1_2"; ++ drive-strength = <6>; ++ bias-pull-down; ++ }; ++ }; ++ ++ mdio_pins: mdio_pinmux { ++ mux_0 { ++ pins = "gpio68"; ++ function = "mdc"; ++ drive-strength = <8>; ++ bias-pull-up; ++ }; ++ mux_1 { ++ pins = "gpio69"; ++ function = "mdio"; ++ drive-strength = <8>; ++ bias-pull-up; ++ }; ++ mux_2 { ++ pins = "gpio33"; ++ function = "gpio"; ++ bias-pull-up; ++ }; ++ mux_3 { ++ pins = "gpio44"; ++ function = "gpio"; ++ bias-pull-up; ++ }; ++ }; ++ ++ uart_pins: uart_pins { ++ mux { ++ pins = "gpio23", "gpio24"; ++ function = "blsp4_uart1"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ }; ++ ++ spi_0_pins: spi_0_pins { ++ mux { ++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; ++ function = "blsp0_spi"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ }; ++ ++ qpic_pins: qpic_pins { ++ data_0 { ++ pins = "gpio15"; ++ function = "qpic_pad0"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_1 { ++ pins = "gpio12"; ++ function = "qpic_pad1"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_2 { ++ pins = "gpio13"; ++ function = "qpic_pad2"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_3 { ++ pins = "gpio14"; ++ function = "qpic_pad3"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_4 { ++ pins = "gpio5"; ++ function = "qpic_pad4"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_5 { ++ pins = "gpio6"; ++ function = "qpic_pad5"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_6 { ++ pins = "gpio7"; ++ function = "qpic_pad6"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ data_7 { ++ pins = "gpio8"; ++ function = "qpic_pad7"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ qpic_pad { ++ pins = "gpio1", "gpio3", "gpio4", ++ "gpio10", "gpio11", "gpio17"; ++ function = "qpic_pad"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ }; ++ ++ hsuart_pins: hsuart_pins { ++ mux { ++ pins = "gpio49"; ++ function = "blsp2_uart"; ++ drive-strength = <8>; ++ bias-disable; ++ }; ++ }; ++ ++ button_pins: button_pins { ++ ++ reset_button { ++ pins = "gpio66"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-up; ++ }; ++ }; ++ ++ led_pins: led_pins { ++ led_pwr { ++ pins = "gpio46"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ ++ led_2g { ++ pins = "gpio47"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ ++ led_5g { ++ pins = "gpio48"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ ++ led_bt { ++ pins = "gpio50"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ }; ++ ++ usb_mux_sel_pins: usb_mux_pins { ++ mux { ++ pins = "gpio27"; ++ function = "gpio"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ }; ++ ++ pcie0_pins: pcie_pins { ++ pcie0_rst { ++ pins = "gpio58"; ++ function = "pcie0_rst"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ pcie0_wake { ++ pins = "gpio59"; ++ function = "pcie0_wake"; ++ drive-strength = <8>; ++ bias-pull-down; ++ }; ++ }; ++ ++}; ++ ++&soc { ++ gpio_keys { ++ compatible = "gpio-keys"; ++ pinctrl-0 = <&button_pins>; ++ pinctrl-names = "default"; ++ ++ button@1 { ++ label = "reset_button"; ++ linux,code = ; ++ gpios = <&tlmm 66 GPIO_ACTIVE_LOW>; ++ linux,input-type = <1>; ++ debounce-interval = <60>; ++ }; ++ }; ++ ++ mdio: mdio@90000 { ++ pinctrl-0 = <&mdio_pins>; ++ pinctrl-names = "default"; ++ phy-reset-gpio = <&tlmm 37 0 &tlmm 25 1 &tlmm 44 1>; ++ compatible = "qcom,ipq40xx-mdio", "qcom,qca-mdio"; ++ phy0: ethernet-phy@0 { ++ reg = <0>; ++ }; ++ phy1: ethernet-phy@1 { ++ reg = <1>; ++ }; ++ phy2: ethernet-phy@2 { ++ reg = <2>; ++ }; ++ phy3: ethernet-phy@3 { ++ reg = <3>; ++ }; ++ phy4: ethernet-phy@4 { ++ reg = <24>; ++ }; ++ phy5: ethernet-phy@5 { ++ reg = <28>; ++ }; ++ }; ++ ++ ess-switch@3a000000 { ++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ ++ switch_lan_bmp = <0x3e>; /* lan port bitmap */ ++ switch_wan_bmp = <0x40>; /* wan port bitmap */ ++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ ++ switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ ++ switch_mac_mode2 = <0xf>; /* mac mode for uniphy instance2*/ ++ bm_tick_mode = <0>; /* bm tick mode */ ++ tm_tick_mode = <0>; /* tm tick mode */ ++ qcom,port_phyinfo { ++ port@0 { ++ port_id = <1>; ++ phy_address = <0>; ++ }; ++ port@1 { ++ port_id = <2>; ++ phy_address = <1>; ++ }; ++ port@2 { ++ port_id = <3>; ++ phy_address = <2>; ++ }; ++ port@3 { ++ port_id = <4>; ++ phy_address = <3>; ++ }; ++ port@4 { ++ port_id = <5>; ++ phy_address = <24>; ++ port_mac_sel = "QGMAC_PORT"; ++ }; ++ port@5 { ++ port_id = <6>; ++ phy_address = <28>; ++ port_mac_sel = "QGMAC_PORT"; ++ }; ++ }; ++ port_scheduler_resource { ++ port@0 { ++ port_id = <0>; ++ ucast_queue = <0 143>; ++ mcast_queue = <256 271>; ++ l0sp = <0 35>; ++ l0cdrr = <0 47>; ++ l0edrr = <0 47>; ++ l1cdrr = <0 7>; ++ l1edrr = <0 7>; ++ }; ++ port@1 { ++ port_id = <1>; ++ ucast_queue = <144 159>; ++ mcast_queue = <272 275>; ++ l0sp = <36 39>; ++ l0cdrr = <48 63>; ++ l0edrr = <48 63>; ++ l1cdrr = <8 11>; ++ l1edrr = <8 11>; ++ }; ++ port@2 { ++ port_id = <2>; ++ ucast_queue = <160 175>; ++ mcast_queue = <276 279>; ++ l0sp = <40 43>; ++ l0cdrr = <64 79>; ++ l0edrr = <64 79>; ++ l1cdrr = <12 15>; ++ l1edrr = <12 15>; ++ }; ++ port@3 { ++ port_id = <3>; ++ ucast_queue = <176 191>; ++ mcast_queue = <280 283>; ++ l0sp = <44 47>; ++ l0cdrr = <80 95>; ++ l0edrr = <80 95>; ++ l1cdrr = <16 19>; ++ l1edrr = <16 19>; ++ }; ++ port@4 { ++ port_id = <4>; ++ ucast_queue = <192 207>; ++ mcast_queue = <284 287>; ++ l0sp = <48 51>; ++ l0cdrr = <96 111>; ++ l0edrr = <96 111>; ++ l1cdrr = <20 23>; ++ l1edrr = <20 23>; ++ }; ++ port@5 { ++ port_id = <5>; ++ ucast_queue = <208 223>; ++ mcast_queue = <288 291>; ++ l0sp = <52 55>; ++ l0cdrr = <112 127>; ++ l0edrr = <112 127>; ++ l1cdrr = <24 27>; ++ l1edrr = <24 27>; ++ }; ++ port@6 { ++ port_id = <6>; ++ ucast_queue = <224 239>; ++ mcast_queue = <292 295>; ++ l0sp = <56 59>; ++ l0cdrr = <128 143>; ++ l0edrr = <128 143>; ++ l1cdrr = <28 31>; ++ l1edrr = <28 31>; ++ }; ++ port@7 { ++ port_id = <7>; ++ ucast_queue = <240 255>; ++ mcast_queue = <296 299>; ++ l0sp = <60 63>; ++ l0cdrr = <144 159>; ++ l0edrr = <144 159>; ++ l1cdrr = <32 35>; ++ l1edrr = <32 35>; ++ }; ++ }; ++ port_scheduler_config { ++ port@0 { ++ port_id = <0>; ++ l1scheduler { ++ group@0 { ++ sp = <0 1>; /*L0 SPs*/ ++ /*cpri cdrr epri edrr*/ ++ cfg = <0 0 0 0>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ /*unicast queues*/ ++ ucast_queue = <0 4 8>; ++ /*multicast queues*/ ++ mcast_queue = <256 260>; ++ /*sp cpri cdrr epri edrr*/ ++ cfg = <0 0 0 0 0>; ++ }; ++ group@1 { ++ ucast_queue = <1 5 9>; ++ mcast_queue = <257 261>; ++ cfg = <0 1 1 1 1>; ++ }; ++ group@2 { ++ ucast_queue = <2 6 10>; ++ mcast_queue = <258 262>; ++ cfg = <0 2 2 2 2>; ++ }; ++ group@3 { ++ ucast_queue = <3 7 11>; ++ mcast_queue = <259 263>; ++ cfg = <0 3 3 3 3>; ++ }; ++ }; ++ }; ++ port@1 { ++ port_id = <1>; ++ l1scheduler { ++ group@0 { ++ sp = <36>; ++ cfg = <0 8 0 8>; ++ }; ++ group@1 { ++ sp = <37>; ++ cfg = <1 9 1 9>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <144>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <272>; ++ mcast_loop_pri = <4>; ++ cfg = <36 0 48 0 48>; ++ }; ++ }; ++ }; ++ port@2 { ++ port_id = <2>; ++ l1scheduler { ++ group@0 { ++ sp = <40>; ++ cfg = <0 12 0 12>; ++ }; ++ group@1 { ++ sp = <41>; ++ cfg = <1 13 1 13>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <160>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <276>; ++ mcast_loop_pri = <4>; ++ cfg = <40 0 64 0 64>; ++ }; ++ }; ++ }; ++ port@3 { ++ port_id = <3>; ++ l1scheduler { ++ group@0 { ++ sp = <44>; ++ cfg = <0 16 0 16>; ++ }; ++ group@1 { ++ sp = <45>; ++ cfg = <1 17 1 17>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <176>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <280>; ++ mcast_loop_pri = <4>; ++ cfg = <44 0 80 0 80>; ++ }; ++ }; ++ }; ++ port@4 { ++ port_id = <4>; ++ l1scheduler { ++ group@0 { ++ sp = <48>; ++ cfg = <0 20 0 20>; ++ }; ++ group@1 { ++ sp = <49>; ++ cfg = <1 21 1 21>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <192>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <284>; ++ mcast_loop_pri = <4>; ++ cfg = <48 0 96 0 96>; ++ }; ++ }; ++ }; ++ port@5 { ++ port_id = <5>; ++ l1scheduler { ++ group@0 { ++ sp = <52>; ++ cfg = <0 24 0 24>; ++ }; ++ group@1 { ++ sp = <53>; ++ cfg = <1 25 1 25>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <208>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <288>; ++ mcast_loop_pri = <4>; ++ cfg = <52 0 112 0 112>; ++ }; ++ }; ++ }; ++ port@6 { ++ port_id = <6>; ++ l1scheduler { ++ group@0 { ++ sp = <56>; ++ cfg = <0 28 0 28>; ++ }; ++ group@1 { ++ sp = <57>; ++ cfg = <1 29 1 29>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <224>; ++ ucast_loop_pri = <16>; ++ mcast_queue = <292>; ++ mcast_loop_pri = <4>; ++ cfg = <56 0 128 0 128>; ++ }; ++ }; ++ }; ++ port@7 { ++ port_id = <7>; ++ l1scheduler { ++ group@0 { ++ sp = <60>; ++ cfg = <0 32 0 32>; ++ }; ++ }; ++ l0scheduler { ++ group@0 { ++ ucast_queue = <240>; ++ mcast_queue = <296>; ++ cfg = <60 0 144 0 144>; ++ }; ++ }; ++ }; ++ }; ++ }; ++ ++ dp1 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <1>; ++ reg = <0x3a001000 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <0>; ++ phy-mode = "sgmii"; ++ }; ++ ++ dp2 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <2>; ++ reg = <0x3a001200 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <1>; ++ phy-mode = "sgmii"; ++ }; ++ ++ dp3 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <3>; ++ reg = <0x3a001400 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <2>; ++ phy-mode = "sgmii"; ++ }; ++ ++ dp4 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <4>; ++ reg = <0x3a001600 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <3>; ++ phy-mode = "sgmii"; ++ }; ++ ++ dp5 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <5>; ++ reg = <0x3a001800 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <24>; ++ phy-mode = "sgmii"; ++ }; ++ ++ dp6 { ++ device_type = "network"; ++ compatible = "qcom,nss-dp"; ++ qcom,id = <6>; ++ reg = <0x3a001a00 0x200>; ++ qcom,mactype = <0>; ++ local-mac-address = [000000000000]; ++ qcom,link-poll = <1>; ++ qcom,phy-mdio-addr = <28>; ++ phy-mode = "sgmii"; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ pinctrl-0 = <&led_pins>; ++ pinctrl-names = "default"; ++ ++ led_power: led_pwr { ++ label = "green:power"; ++ gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>; ++ default-state = "on"; ++ linux,default-trigger = "led_pwr"; ++ }; ++ ++ led_2g { ++ label = "green:wifi2"; ++ gpio = <&tlmm 47 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ }; ++ ++ led_5g { ++ label = "green:wifi5"; ++ gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; ++ default-state = "off"; ++ }; ++ ++ led_bt { ++ gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; ++ label = "green:bt"; ++ default-state = "off"; ++ linux,default-trigger = "led_bt"; ++ }; ++ }; ++ nss-macsec0 { ++ compatible = "qcom,nss-macsec"; ++ phy_addr = <0x18>; ++ phy_access_mode = <0>; ++ mdiobus = <&mdio>; ++ }; ++ nss-macsec1 { ++ compatible = "qcom,nss-macsec"; ++ phy_addr = <0x1c>; ++ phy_access_mode = <0>; ++ mdiobus = <&mdio>; ++ }; ++}; ++ ++&serial_blsp4 { ++ pinctrl-0 = <&uart_pins>; ++ pinctrl-names = "default"; ++ status = "ok"; ++}; ++ ++&spi_0 { /* BLSP1 QUP1 */ ++ pinctrl-0 = <&spi_0_pins>; ++ pinctrl-names = "default"; ++ cs-select = <0>; ++ status = "ok"; ++ ++ m25p80@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ reg = <0>; ++ compatible = "n25q128a11"; ++ linux,modalias = "m25p80", "n25q128a11"; ++ spi-max-frequency = <50000000>; ++ use-default-sizes; ++ }; ++}; ++ ++&serial_blsp2 { ++ pinctrl-0 = <&hsuart_pins>; ++ pinctrl-names = "default"; ++ status = "ok"; ++}; ++ ++&nss0 { ++ qcom,low-frequency = <187200000>; ++ qcom,mid-frequency = <748800000>; ++ qcom,max-frequency = <1497600000>; ++}; ++ ++&msm_imem { ++ status = "disabled"; ++}; ++ ++&ssphy_0 { ++ status = "ok"; ++}; ++ ++&qusb_phy_0 { ++ status = "ok"; ++}; ++ ++&ssphy_1 { ++ status = "ok"; ++}; ++ ++&qusb_phy_1 { ++ status = "ok"; ++}; ++ ++&usb3_0 { ++ status = "ok"; ++}; ++ ++&usb3_1 { ++ status = "ok"; ++}; ++ ++&cryptobam { ++ status = "ok"; ++}; ++ ++&crypto { ++ status = "ok"; ++}; ++ ++&i2c_0 { ++ status = "disabled"; ++}; ++ ++&i2c_1 { ++ status = "disabled"; ++}; ++ ++&qpic_bam { ++ status = "ok"; ++}; ++ ++&nand { ++ pinctrl-0 = <&qpic_pins>; ++ pinctrl-names = "default"; ++ status = "ok"; ++}; ++ ++&qpic_lcd { ++ status = "disabled"; ++}; ++ ++&qpic_lcd_panel { ++ status = "disabled"; ++}; ++ ++&ledc { ++ status = "disabled"; ++}; ++ ++&pcie0 { ++ status = "ok"; ++}; ++ ++&pcie1 { ++ status = "disabled"; ++}; ++ ++&glink_rpm { ++ status = "disabled"; ++}; ++ ++&apc_cpr { ++ /* Same CPR configuration as OAK */ ++ compatible = "qcom,cpr4-ipq817x-apss-regulator"; ++ ++ thread@0 { ++ apc_vreg: regulator { ++ regulator-min-microvolt = <1>; ++ regulator-max-microvolt = <2>; ++ qcom,cpr-fuse-corners = <2>; ++ qcom,cpr-corners = <3>; ++ qcom,cpr-speed-bin-corners = <3>; ++ qcom,cpr-corner-fmax-map = <1 3>; ++ ++ qcom,cpr-voltage-ceiling = ++ <840000 904000 944000>; ++ qcom,cpr-voltage-floor = ++ <592000 648000 712000>; ++ qcom,corner-frequencies = ++ <1017600000 1382400000 1382400000>; ++ ++ qcom,cpr-open-loop-voltage-fuse-adjustment-0 = ++ /* Speed bin 0; CPR rev 0..7 */ ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>; ++ ++ qcom,cpr-open-loop-voltage-fuse-adjustment-1 = ++ /* Speed bin 0; CPR rev 0..7 */ ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 20000 26000>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>; ++ ++ qcom,cpr-open-loop-voltage-fuse-adjustment-v2-0 = ++ /* Speed bin 0; CPR rev 0..7 */ ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>; ++ ++ qcom,cpr-open-loop-voltage-fuse-adjustment-v2-1 = ++ /* Speed bin 0; CPR rev 0..7 */ ++ < 0 0>, ++ < 0 7000>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>, ++ < 0 0>; ++ ++ qcom,cpr-floor-to-ceiling-max-range = ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>, ++ < 40000 40000 40000>; ++ }; ++ }; ++}; ++ ++&npu_cpr { ++ status = "disabled"; ++}; ++ ++&nss0 { ++ npu-supply = <&dummy_reg>; ++ mx-supply = <&dummy_reg>; ++}; ++ ++&wifi0 { ++ qcom,board_id = <0x92>; ++}; ++ ++&wifi1 { ++ qcom,board_id = <0x292>; ++}; +diff --git a/target/linux/ipq807x/image/Makefile b/target/linux/ipq807x/image/Makefile +new file mode 100644 +index 0000000000..3a219e6d6c +--- /dev/null ++++ b/target/linux/ipq807x/image/Makefile +@@ -0,0 +1,26 @@ ++include $(TOPDIR)/rules.mk ++include $(INCLUDE_DIR)/image.mk ++ ++IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$(IMG_PREFIX_EXTRA)$(BOARD) ++ ++# default all platform image(fit) build ++define Device/Default ++ PROFILES = Default $$(DEVICE_NAME) ++ KERNEL_NAME := zImage ++ FILESYSTEMS := squashfs ++ DEVICE_DTS_DIR := $(DTS_DIR) ++ KERNEL_IN_UBI := 1 ++ ROOTFSNAME_IN_UBI := ubi_rootfs ++ BLOCKSIZE := 128k ++ PAGESIZE := 2048 ++ IMAGES := sysupgrade.tar nand-factory.bin ++ IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata ++ IMAGE/nand-factory.bin := append-ubi | qsdk-ipq-factory-nand ++ KERNEL_NAME := Image ++ KERNEL = kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb ++ KERNEL_INITRAMFS = kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb ++endef ++ ++include $(SUBTARGET).mk ++ ++$(eval $(call BuildImage)) +diff --git a/target/linux/ipq807x/image/ipq60xx.mk b/target/linux/ipq807x/image/ipq60xx.mk +new file mode 100644 +index 0000000000..fd66acab58 +--- /dev/null ++++ b/target/linux/ipq807x/image/ipq60xx.mk +@@ -0,0 +1,42 @@ ++KERNEL_LOADADDR := 0x41080000 ++ ++define Device/cig_wf188 ++ DEVICE_TITLE := Cigtech WF-188 ++ DEVICE_DTS := qcom-ipq6018-cig-wf188 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG := config@cp03-c1 ++ SUPPORTED_DEVICES := cig,wf188 ++ IMAGES := sysupgrade.tar ++ IMAGE/sysupgrade.tar/squashfs := append-rootfs | pad-rootfs | sysupgrade-tar rootfs=$$$$@ | append-metadata ++ DEVICE_PACKAGES := ath11k-wifi-cig-wf188 uboot-env ++endef ++TARGET_DEVICES += cig_wf188 ++ ++define Device/cig_wf188n ++ DEVICE_TITLE := Cigtech WF-188n ++ DEVICE_DTS := qcom-ipq6018-cig-wf188n ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG := config@cp03-c1 ++ SUPPORTED_DEVICES := cig,wf188n ++ DEVICE_PACKAGES := ath11k-wifi-cig-wf188n uboot-env ++endef ++TARGET_DEVICES += cig_wf188n ++ ++define Device/edgecore_eap101 ++ DEVICE_TITLE := EdgeCore EAP101 ++ DEVICE_DTS := qcom-ipq6018-edgecore-eap101 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG := config@cp01-c1 ++ SUPPORTED_DEVICES := edgecore,eap101 ++ DEVICE_PACKAGES := ath11k-wifi-edgecore-eap101 uboot-env ++endef ++TARGET_DEVICES += edgecore_eap101 ++ ++define Device/qcom_cp01_c1 ++ DEVICE_TITLE := Qualcomm Cypress C1 ++ DEVICE_DTS := qcom-ipq6018-cp01-c1 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ SUPPORTED_DEVICES := qcom,ipq6018-cp01 ++ DEVICE_PACKAGES := ath11k-wifi-qcom-ipq6018 ++endef ++TARGET_DEVICES += qcom_cp01_c1 +diff --git a/target/linux/ipq807x/image/ipq807x.mk b/target/linux/ipq807x/image/ipq807x.mk +new file mode 100644 +index 0000000000..aee1996759 +--- /dev/null ++++ b/target/linux/ipq807x/image/ipq807x.mk +@@ -0,0 +1,51 @@ ++KERNEL_LOADADDR := 0x41080000 ++ ++define Device/qcom_hk01 ++ DEVICE_TITLE := Qualcomm Hawkeye HK01 ++ DEVICE_DTS := qcom-ipq807x-hk01 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG=config@hk01 ++ SUPPORTED_DEVICES := qcom,ipq807x-hk01 ++ DEVICE_PACKAGES := ath11k-wifi-qcom-ipq8074 ++endef ++TARGET_DEVICES += qcom_hk01 ++ ++define Device/qcom_hk14 ++ DEVICE_TITLE := Qualcomm Hawkeye HK14 ++ DEVICE_DTS := qcom-ipq807x-hk14 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG=config@hk14 ++ SUPPORTED_DEVICES := qcom,ipq807x-hk14 ++ DEVICE_PACKAGES := ath11k-wifi-qcom-ipq8074 kmod-ath11k-pci ath11k-firmware-qcn9000 ++endef ++TARGET_DEVICES += qcom_hk14 ++ ++define Device/sercomm_wallaby ++ DEVICE_TITLE := Sercomm Kiwi ++ DEVICE_DTS := qcom-ipq807x-sercomm-wallaby ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG=config@hk09 ++ SUPPORTED_DEVICES := sercomm,wallaby ++ DEVICE_PACKAGES := ath11k-wifi-sercomm-wallaby ++endef ++TARGET_DEVICES += sercomm_wallaby ++ ++define Device/cig_wf194 ++ DEVICE_TITLE := CIG WF194C ++ DEVICE_DTS := qcom-ipq807x-wf194c ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG=config@hk01 ++ SUPPORTED_DEVICES := cig,wf194c ++ DEVICE_PACKAGES := ath11k-wifi-cig-wf194c aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 ++endef ++TARGET_DEVICES += cig_wf194 ++ ++define Device/edgecore_eap102 ++ DEVICE_TITLE := Edgecore EAP102 ++ DEVICE_DTS := qcom-ipq807x-eap102 ++ DEVICE_DTS_DIR := $(DTS_DIR)/qcom ++ DEVICE_DTS_CONFIG=config@ac02 ++ SUPPORTED_DEVICES := edgecore,eap102 ++ DEVICE_PACKAGES := ath11k-wifi-edgecore-eap102 kmod-usb3 kmod-usb2 ++endef ++TARGET_DEVICES += edgecore_eap102 +diff --git a/target/linux/ipq807x/ipq60xx/config-default b/target/linux/ipq807x/ipq60xx/config-default +new file mode 100644 +index 0000000000..e1816687c0 +--- /dev/null ++++ b/target/linux/ipq807x/ipq60xx/config-default +@@ -0,0 +1,242 @@ ++CONFIG_64BIT=y ++# CONFIG_ACPI is not set ++CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS=y ++CONFIG_ANDROID=y ++# CONFIG_ANDROID_BINDER_IPC is not set ++CONFIG_AQUANTIA_PHY=y ++# CONFIG_AQ_PHY is not set ++# CONFIG_ARCH_BCM_IPROC is not set ++CONFIG_ARCH_DMA_ADDR_T_64BIT=y ++# CONFIG_ARCH_EXYNOS7 is not set ++CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y ++CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y ++# CONFIG_ARCH_LAYERSCAPE is not set ++CONFIG_ARCH_PHYS_ADDR_T_64BIT=y ++# CONFIG_ARCH_SEATTLE is not set ++CONFIG_ARCH_SELECT_MEMORY_MODEL=y ++CONFIG_ARCH_SPARSEMEM_DEFAULT=y ++CONFIG_ARCH_SPARSEMEM_ENABLE=y ++# CONFIG_ARCH_SPRD is not set ++# CONFIG_ARCH_STRATIX10 is not set ++# CONFIG_ARCH_THUNDER is not set ++CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y ++CONFIG_ARCH_WANT_FRAME_POINTERS=y ++CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y ++# CONFIG_ARCH_XGENE is not set ++# CONFIG_ARCH_ZYNQMP is not set ++CONFIG_ARM64=y ++# CONFIG_ARM64_16K_PAGES is not set ++CONFIG_ARM64_4K_PAGES=y ++# CONFIG_ARM64_64K_PAGES is not set ++# CONFIG_ARM64_CRYPTO is not set ++CONFIG_ARM64_ERRATUM_819472=y ++CONFIG_ARM64_ERRATUM_824069=y ++CONFIG_ARM64_ERRATUM_826319=y ++CONFIG_ARM64_ERRATUM_827319=y ++CONFIG_ARM64_ERRATUM_832075=y ++CONFIG_ARM64_ERRATUM_843419=y ++CONFIG_ARM64_ERRATUM_845719=y ++CONFIG_ARM64_HW_AFDBM=y ++# CONFIG_ARM64_LSE_ATOMICS is not set ++CONFIG_ARM64_PAN=y ++# CONFIG_ARM64_PTDUMP is not set ++# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set ++CONFIG_ARM64_VA_BITS=39 ++CONFIG_ARM64_VA_BITS_39=y ++# CONFIG_ARM64_VA_BITS_48 is not set ++# CONFIG_ARMV8_DEPRECATED is not set ++CONFIG_ARM_GIC_V2M=y ++CONFIG_ARM_GIC_V3=y ++CONFIG_ARM_GIC_V3_ITS=y ++CONFIG_ARM_QTI_IPQ60XX_CPUFREQ=y ++CONFIG_ARM_SMMU=y ++# CONFIG_ARM_SMMU_V3 is not set ++CONFIG_ASN1=y ++CONFIG_ASSOCIATIVE_ARRAY=y ++CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y ++CONFIG_BLOCK_COMPAT=y ++# CONFIG_BOOTCONFIG_PARTITION is not set ++# CONFIG_CAVIUM_ERRATUM_22375 is not set ++# CONFIG_CAVIUM_ERRATUM_23154 is not set ++# CONFIG_CAVIUM_ERRATUM_27456 is not set ++CONFIG_CLZ_TAB=y ++CONFIG_CMA=y ++CONFIG_CMA_ALIGNMENT=8 ++CONFIG_CMA_AREAS=7 ++CONFIG_CMA_DEBUG=y ++CONFIG_CMA_DEBUGFS=y ++CONFIG_CMA_SIZE_MBYTES=0 ++CONFIG_CMA_SIZE_SEL_MBYTES=y ++# CONFIG_COMMON_CLK_VERSATILE is not set ++CONFIG_COMMON_CLK_XGENE=y ++CONFIG_COMPAT=y ++CONFIG_COMPAT_BINFMT_ELF=y ++CONFIG_COMPAT_NETLINK_MESSAGES=y ++CONFIG_COMPAT_OLD_SIGACTION=y ++# CONFIG_CNSS_QCN9000 is not set ++CONFIG_CORESIGHT=y ++CONFIG_CORESIGHT_CSR=y ++CONFIG_CORESIGHT_CTI=y ++CONFIG_CORESIGHT_HWEVENT=y ++CONFIG_CORESIGHT_LINKS_AND_SINKS=y ++CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y ++CONFIG_CORESIGHT_QCOM_REPLICATOR=y ++CONFIG_CORESIGHT_SINK_TPIU=y ++CONFIG_CORESIGHT_SOURCE_ETM4X=y ++CONFIG_CORESIGHT_STM=y ++CONFIG_CORESIGHT_TPDA=y ++CONFIG_CORESIGHT_TPDM=y ++CONFIG_CRC_CCITT=m ++CONFIG_CRYPTO_AKCIPHER=y ++CONFIG_CRYPTO_AKCIPHER2=y ++# CONFIG_CRYPTO_DEV_QCEDEV is not set ++# CONFIG_CRYPTO_DEV_QCRYPTO is not set ++CONFIG_CRYPTO_DRBG=y ++CONFIG_CRYPTO_DRBG_HMAC=y ++CONFIG_CRYPTO_DRBG_MENU=y ++CONFIG_CRYPTO_GF128MUL=y ++CONFIG_CRYPTO_GHASH=y ++CONFIG_CRYPTO_HASH=y ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_JITTERENTROPY=y ++# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set ++CONFIG_CRYPTO_NULL2=y ++CONFIG_CRYPTO_PCOMP2=y ++CONFIG_CRYPTO_RNG_DEFAULT=y ++CONFIG_CRYPTO_SHA512=y ++CONFIG_DIAG_CHAR=m ++CONFIG_DMA_CMA=y ++CONFIG_DMA_SHARED_BUFFER=y ++CONFIG_DMI=y ++CONFIG_DMIID=y ++# CONFIG_DMI_SYSFS is not set ++CONFIG_DT_IDLE_STATES=y ++CONFIG_EDAC_SUPPORT=y ++CONFIG_EFI=y ++CONFIG_EFIVAR_FS=m ++CONFIG_EFI_ARMSTUB=y ++CONFIG_EFI_ESRT=y ++CONFIG_EFI_PARAMS_FROM_FDT=y ++CONFIG_EFI_RUNTIME_WRAPPERS=y ++CONFIG_EFI_STUB=y ++# CONFIG_EFI_VARS is not set ++CONFIG_EXTCON=y ++CONFIG_EXTCON_USB_GPIO=y ++CONFIG_FB_DEFERRED_IO=y ++CONFIG_FRAME_POINTER=y ++CONFIG_FRAME_WARN=2048 ++CONFIG_FREEZER=y ++CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y ++CONFIG_GENERIC_CPU_AUTOPROBE=y ++CONFIG_GENERIC_CSUM=y ++CONFIG_GENERIC_EARLY_IOREMAP=y ++CONFIG_GENERIC_IRQ_MIGRATION=y ++CONFIG_GENERIC_MSI_IRQ_DOMAIN=y ++CONFIG_GPIO_WATCHDOG=y ++# CONFIG_GPIO_WATCHDOG_ARCH_INITCALL is not set ++# CONFIG_GPIO_XGENE is not set ++CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y ++CONFIG_HAVE_ARCH_KASAN=y ++CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y ++CONFIG_HAVE_ARM_SMCCC=y ++CONFIG_HAVE_CMPXCHG_DOUBLE=y ++CONFIG_HAVE_CMPXCHG_LOCAL=y ++CONFIG_HAVE_DEBUG_BUGVERBOSE=y ++CONFIG_HAVE_GENERIC_RCU_GUP=y ++CONFIG_HAVE_MEMORY_PRESENT=y ++CONFIG_HAVE_PATA_PLATFORM=y ++CONFIG_HAVE_RCU_TABLE_FREE=y ++# CONFIG_HUGETLBFS is not set ++# CONFIG_HW_RANDOM_VIRTIO is not set ++# CONFIG_I2C_CADENCE is not set ++CONFIG_IIO=y ++CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 ++CONFIG_IOMMU_API=y ++CONFIG_IOMMU_DMA=y ++CONFIG_IOMMU_IOVA=y ++CONFIG_IOMMU_IO_PGTABLE=y ++# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set ++CONFIG_IOMMU_IO_PGTABLE_LPAE=y ++# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set ++CONFIG_IOMMU_SUPPORT=y ++CONFIG_ION=y ++CONFIG_ION_MSM=y ++# CONFIG_IPQ_APSS_5018 is not set ++# CONFIG_IPQ_GCC_5018 is not set ++CONFIG_IPQ_APSS_6018=y ++CONFIG_IPQ_GCC_6018=y ++CONFIG_IPQ_MEM_PROFILE=0 ++# CONFIG_KCOV is not set ++# CONFIG_KVM is not set ++CONFIG_LEDS_PCA9956B=y ++CONFIG_MDIO_QCA=y ++CONFIG_MEMORY_ISOLATION=y ++CONFIG_MIGRATION=y ++CONFIG_MODULES_USE_ELF_RELA=y ++CONFIG_MPILIB=y ++# CONFIG_MTD_NAND_SERIAL is not set ++# CONFIG_PAGE_SCOPE_MULTI_PAGE_READ is not set ++CONFIG_MSM_SECURE_BUFFER=y ++CONFIG_NEED_SG_DMA_LENGTH=y ++CONFIG_NET_SWITCHDEV=y ++# CONFIG_NET_VENDOR_CAVIUM is not set ++CONFIG_NLS=y ++CONFIG_NUM_ALT_PARTITION=16 ++CONFIG_OF_IOMMU=y ++CONFIG_OID_REGISTRY=y ++CONFIG_PCI_BUS_ADDR_T_64BIT=y ++# CONFIG_PCI_HISI is not set ++CONFIG_PCI_LABEL=y ++CONFIG_PCI_MSI_IRQ_DOMAIN=y ++CONFIG_PGTABLE_LEVELS=3 ++CONFIG_PHYS_ADDR_T_64BIT=y ++# CONFIG_PHY_XGENE is not set ++# CONFIG_PINCTRL_IPQ5018 is not set ++CONFIG_PINCTRL_IPQ6018=y ++# CONFIG_PKCS7_MESSAGE_PARSER is not set ++# CONFIG_POWER_RESET_XGENE is not set ++CONFIG_PPS=y ++CONFIG_PTP_1588_CLOCK=y ++CONFIG_PWM_IPQ4019=y ++# CONFIG_QCA_85XX_SWITCH is not set ++CONFIG_QCOM_APM=y ++CONFIG_QCOM_DCC=y ++CONFIG_QCOM_QMI_HELPERS=y ++CONFIG_QCOM_SCM_64=y ++CONFIG_QCOM_SPMI_VADC=y ++# CONFIG_QTI_Q6V5_ADSP is not set ++CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y ++CONFIG_REGMAP_I2C=y ++CONFIG_REGMAP_SPI=y ++CONFIG_REGMAP_SPMI=y ++CONFIG_REGULATOR_CPR3=y ++CONFIG_REGULATOR_CPR3_NPU=y ++CONFIG_REGULATOR_CPR4_APSS=y ++# CONFIG_RTC_DRV_EFI is not set ++# CONFIG_SKB_FIXED_SIZE_2K is not set ++CONFIG_SPARSEMEM=y ++CONFIG_SPARSEMEM_EXTREME=y ++CONFIG_SPARSEMEM_MANUAL=y ++CONFIG_SPARSEMEM_VMEMMAP=y ++CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y ++CONFIG_SPS=y ++CONFIG_SPS_SUPPORT_NDP_BAM=y ++CONFIG_STAGING=y ++CONFIG_SUSPEND_FREEZER=y ++CONFIG_SYSCTL_EXCEPTION_TRACE=y ++CONFIG_SYSVIPC_COMPAT=y ++CONFIG_SYS_SUPPORTS_HUGETLBFS=y ++CONFIG_THREAD_INFO_IN_TASK=y ++CONFIG_UCS2_STRING=y ++# CONFIG_USB_GADGET is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++# CONFIG_VFIO is not set ++CONFIG_VIRTIO=y ++# CONFIG_VIRTIO_NET is not set ++CONFIG_VIRTUALIZATION=y ++CONFIG_WANT_DEV_COREDUMP=y ++CONFIG_ZONE_DMA_FLAG=1 ++# CONFIG_IPQ_FLASH_16M_PROFILE is not set ++# CONFIG_QTI_EUD is not set ++# CONFIG_QTI_BT_TTY is not set ++# CONFIG_PHY_IPQ_UNIPHY_PCIE is not set +diff --git a/target/linux/ipq807x/ipq60xx/profiles/default.mk b/target/linux/ipq807x/ipq60xx/profiles/default.mk +new file mode 100644 +index 0000000000..f47e73acfc +--- /dev/null ++++ b/target/linux/ipq807x/ipq60xx/profiles/default.mk +@@ -0,0 +1,9 @@ ++define Profile/Default ++ NAME:=Default Profile (minimum package set) ++endef ++ ++define Profile/Default/Description ++Default package set compatible with most boards. ++endef ++$(eval $(call Profile,Default)) ++ +diff --git a/target/linux/ipq807x/ipq60xx/target.mk b/target/linux/ipq807x/ipq60xx/target.mk +new file mode 100644 +index 0000000000..cf2bf7b9cd +--- /dev/null ++++ b/target/linux/ipq807x/ipq60xx/target.mk +@@ -0,0 +1,8 @@ ++SUBTARGET:=ipq60xx ++BOARDNAME:=IPQ60xx based boards ++ ++DEFAULT_PACKAGES += ath11k-firmware-ipq60xx qca-nss-fw-ipq60xx ++ ++define Target/Description ++ Build images for IPQ60xx systems. ++endef +diff --git a/target/linux/ipq807x/ipq807x/config-default b/target/linux/ipq807x/ipq807x/config-default +new file mode 100644 +index 0000000000..dba076dfe0 +--- /dev/null ++++ b/target/linux/ipq807x/ipq807x/config-default +@@ -0,0 +1,222 @@ ++CONFIG_64BIT=y ++# CONFIG_ACPI is not set ++CONFIG_AQUANTIA_PHY=y ++# CONFIG_AQ_PHY is not set ++# CONFIG_ARCH_BCM_IPROC is not set ++CONFIG_ARCH_DMA_ADDR_T_64BIT=y ++# CONFIG_ARCH_EXYNOS7 is not set ++CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y ++CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y ++CONFIG_ARCH_HAS_KCOV=y ++# CONFIG_ARCH_LAYERSCAPE is not set ++CONFIG_ARCH_PHYS_ADDR_T_64BIT=y ++# CONFIG_ARCH_SEATTLE is not set ++CONFIG_ARCH_SELECT_MEMORY_MODEL=y ++CONFIG_ARCH_SPARSEMEM_DEFAULT=y ++CONFIG_ARCH_SPARSEMEM_ENABLE=y ++# CONFIG_ARCH_SPRD is not set ++# CONFIG_ARCH_STRATIX10 is not set ++# CONFIG_ARCH_THUNDER is not set ++CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y ++CONFIG_ARCH_WANT_FRAME_POINTERS=y ++CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y ++# CONFIG_ARCH_XGENE is not set ++# CONFIG_ARCH_ZYNQMP is not set ++CONFIG_ARM64=y ++# CONFIG_ARM64_16K_PAGES is not set ++CONFIG_ARM64_4K_PAGES=y ++# CONFIG_ARM64_64K_PAGES is not set ++# CONFIG_ARM64_CRYPTO is not set ++CONFIG_ARM64_ERRATUM_819472=y ++CONFIG_ARM64_ERRATUM_824069=y ++CONFIG_ARM64_ERRATUM_826319=y ++CONFIG_ARM64_ERRATUM_827319=y ++CONFIG_ARM64_ERRATUM_832075=y ++CONFIG_ARM64_ERRATUM_843419=y ++CONFIG_ARM64_ERRATUM_845719=y ++CONFIG_ARM64_HW_AFDBM=y ++# CONFIG_ARM64_LSE_ATOMICS is not set ++CONFIG_ARM64_PAN=y ++# CONFIG_ARM64_PTDUMP is not set ++# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set ++CONFIG_ARM64_VA_BITS=39 ++CONFIG_ARM64_VA_BITS_39=y ++# CONFIG_ARM64_VA_BITS_48 is not set ++# CONFIG_ARMV8_DEPRECATED is not set ++CONFIG_ARM_GIC_V2M=y ++CONFIG_ARM_GIC_V3=y ++CONFIG_ARM_GIC_V3_ITS=y ++# CONFIG_ARM_QTI_IPQ60XX_CPUFREQ is not set ++CONFIG_ASN1=y ++CONFIG_ASSOCIATIVE_ARRAY=y ++CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y ++CONFIG_BLOCK_COMPAT=y ++# CONFIG_BOOTCONFIG_PARTITION is not set ++# CONFIG_CAVIUM_ERRATUM_22375 is not set ++# CONFIG_CAVIUM_ERRATUM_23154 is not set ++# CONFIG_CAVIUM_ERRATUM_27456 is not set ++CONFIG_CLZ_TAB=y ++CONFIG_CNSS_QCN9000=y ++# CONFIG_COMMON_CLK_VERSATILE is not set ++CONFIG_COMMON_CLK_XGENE=y ++CONFIG_COMPAT=y ++CONFIG_COMPAT_BINFMT_ELF=y ++CONFIG_COMPAT_NETLINK_MESSAGES=y ++CONFIG_COMPAT_OLD_SIGACTION=y ++CONFIG_CORESIGHT=y ++CONFIG_CORESIGHT_CSR=y ++CONFIG_CORESIGHT_CTI=y ++CONFIG_CORESIGHT_HWEVENT=y ++CONFIG_CORESIGHT_LINKS_AND_SINKS=y ++CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y ++CONFIG_CORESIGHT_QCOM_REPLICATOR=y ++CONFIG_CORESIGHT_SINK_TPIU=y ++CONFIG_CORESIGHT_SOURCE_ETM4X=y ++CONFIG_CORESIGHT_STM=y ++CONFIG_CORESIGHT_TPDA=y ++CONFIG_CORESIGHT_TPDM=y ++CONFIG_CRC_CCITT=m ++CONFIG_CRYPTO_AKCIPHER=y ++CONFIG_CRYPTO_AKCIPHER2=y ++# CONFIG_CRYPTO_DEV_QCEDEV is not set ++# CONFIG_CRYPTO_DEV_QCRYPTO is not set ++CONFIG_CRYPTO_DRBG=y ++CONFIG_CRYPTO_DRBG_HMAC=y ++CONFIG_CRYPTO_DRBG_MENU=y ++CONFIG_CRYPTO_GF128MUL=y ++CONFIG_CRYPTO_GHASH=y ++CONFIG_CRYPTO_HASH=y ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_JITTERENTROPY=y ++# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set ++CONFIG_CRYPTO_NULL2=y ++CONFIG_CRYPTO_PCOMP2=y ++CONFIG_CRYPTO_RNG_DEFAULT=y ++CONFIG_CRYPTO_SHA512=y ++CONFIG_DIAG_CHAR=m ++CONFIG_DMI=y ++CONFIG_DMIID=y ++# CONFIG_DMI_SYSFS is not set ++CONFIG_DT_IDLE_STATES=y ++CONFIG_EDAC_SUPPORT=y ++CONFIG_EFI=y ++CONFIG_EFIVAR_FS=m ++CONFIG_EFI_ARMSTUB=y ++CONFIG_EFI_ESRT=y ++CONFIG_EFI_PARAMS_FROM_FDT=y ++CONFIG_EFI_RUNTIME_WRAPPERS=y ++CONFIG_EFI_STUB=y ++# CONFIG_EFI_VARS is not set ++CONFIG_FB_DEFERRED_IO=y ++CONFIG_FRAME_POINTER=y ++CONFIG_FRAME_WARN=2048 ++CONFIG_FREEZER=y ++CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y ++CONFIG_GENERIC_CPU_AUTOPROBE=y ++CONFIG_GENERIC_CSUM=y ++CONFIG_GENERIC_EARLY_IOREMAP=y ++CONFIG_GENERIC_IRQ_MIGRATION=y ++CONFIG_GENERIC_MSI_IRQ_DOMAIN=y ++# CONFIG_GPIO_XGENE is not set ++CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y ++CONFIG_HAVE_ARCH_KASAN=y ++CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y ++CONFIG_HAVE_ARM_SMCCC=y ++CONFIG_HAVE_CMPXCHG_DOUBLE=y ++CONFIG_HAVE_CMPXCHG_LOCAL=y ++CONFIG_HAVE_DEBUG_BUGVERBOSE=y ++CONFIG_HAVE_GCC_PLUGINS=y ++CONFIG_HAVE_GENERIC_RCU_GUP=y ++CONFIG_HAVE_MEMORY_PRESENT=y ++CONFIG_HAVE_PATA_PLATFORM=y ++CONFIG_HAVE_RCU_TABLE_FREE=y ++# CONFIG_HUGETLBFS is not set ++# CONFIG_HW_RANDOM_VIRTIO is not set ++# CONFIG_I2C_CADENCE is not set ++CONFIG_IIO=y ++CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 ++CONFIG_IPQ_ADSS_807x=y ++# CONFIG_IPQ_APSS_5018 is not set ++CONFIG_IPQ_APSS_807x=y ++# CONFIG_IPQ_FLASH_16M_PROFILE is not set ++# CONFIG_IPQ_GCC_5018 is not set ++CONFIG_IPQ_GCC_807x=y ++CONFIG_IPQ_MEM_PROFILE=0 ++# CONFIG_KCOV is not set ++# CONFIG_KVM is not set ++CONFIG_MAILBOX=y ++CONFIG_MDIO_QCA=y ++CONFIG_MHI_BUS=y ++# CONFIG_MHI_BUS_TEST is not set ++CONFIG_MHI_NETDEV=y ++CONFIG_MHI_QTI=y ++CONFIG_MHI_UCI=y ++CONFIG_MODULES_USE_ELF_RELA=y ++CONFIG_MPILIB=y ++# CONFIG_MTD_NAND_SERIAL is not set ++CONFIG_NEED_SG_DMA_LENGTH=y ++# CONFIG_NET_VENDOR_CAVIUM is not set ++CONFIG_NLS=y ++CONFIG_NUM_ALT_PARTITION=16 ++CONFIG_OID_REGISTRY=y ++# CONFIG_PAGE_SCOPE_MULTI_PAGE_READ is not set ++CONFIG_PCI_BUS_ADDR_T_64BIT=y ++# CONFIG_PCI_HISI is not set ++CONFIG_PCI_LABEL=y ++CONFIG_PCI_MSI_IRQ_DOMAIN=y ++CONFIG_PGTABLE_LEVELS=3 ++CONFIG_PHYS_ADDR_T_64BIT=y ++CONFIG_PHY_IPQ_UNIPHY_PCIE=y ++# CONFIG_PHY_XGENE is not set ++# CONFIG_PINCTRL_IPQ5018 is not set ++CONFIG_PINCTRL_IPQ807x=y ++# CONFIG_PKCS7_MESSAGE_PARSER is not set ++# CONFIG_POWER_RESET_XGENE is not set ++CONFIG_PPS=y ++CONFIG_PTP_1588_CLOCK=y ++CONFIG_PWM_IPQ4019=y ++# CONFIG_QCA_85XX_SWITCH is not set ++CONFIG_QCOM_APM=y ++CONFIG_QCOM_DCC=y ++# CONFIG_QCOM_MDT_LOADER is not set ++CONFIG_QCOM_QMI_HELPERS=y ++# CONFIG_QCOM_QMI_RMNET is not set ++CONFIG_QCOM_SCM_64=y ++CONFIG_QCOM_SPMI_VADC=y ++CONFIG_QRTR=y ++CONFIG_QRTR_MHI=y ++# CONFIG_QTI_BT_TTY is not set ++# CONFIG_QTI_EUD is not set ++CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y ++CONFIG_REGMAP_I2C=y ++CONFIG_REGMAP_SPI=y ++CONFIG_REGMAP_SPMI=y ++CONFIG_REGULATOR_CPR3=y ++CONFIG_REGULATOR_CPR3_NPU=y ++CONFIG_REGULATOR_CPR4_APSS=y ++CONFIG_RMNET=y ++# CONFIG_RMNET_CTL is not set ++CONFIG_RMNET_DATA=y ++CONFIG_RMNET_DATA_DEBUG_PKT=y ++# CONFIG_RTC_DRV_EFI is not set ++# CONFIG_SKB_FIXED_SIZE_2K is not set ++CONFIG_SPARSEMEM=y ++CONFIG_SPARSEMEM_EXTREME=y ++CONFIG_SPARSEMEM_MANUAL=y ++CONFIG_SPARSEMEM_VMEMMAP=y ++CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y ++CONFIG_SPS=y ++CONFIG_SPS_SUPPORT_NDP_BAM=y ++CONFIG_SUSPEND_FREEZER=y ++CONFIG_SYSCTL_EXCEPTION_TRACE=y ++CONFIG_SYSVIPC_COMPAT=y ++CONFIG_SYS_SUPPORTS_HUGETLBFS=y ++CONFIG_THREAD_INFO_IN_TASK=y ++CONFIG_UCS2_STRING=y ++# CONFIG_USB_GADGET is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++CONFIG_VIRTIO=y ++# CONFIG_VIRTIO_NET is not set ++CONFIG_VIRTUALIZATION=y ++CONFIG_WANT_DEV_COREDUMP=y ++CONFIG_ZONE_DMA_FLAG=1 +diff --git a/target/linux/ipq807x/ipq807x/profiles/default.mk b/target/linux/ipq807x/ipq807x/profiles/default.mk +new file mode 100644 +index 0000000000..f47e73acfc +--- /dev/null ++++ b/target/linux/ipq807x/ipq807x/profiles/default.mk +@@ -0,0 +1,9 @@ ++define Profile/Default ++ NAME:=Default Profile (minimum package set) ++endef ++ ++define Profile/Default/Description ++Default package set compatible with most boards. ++endef ++$(eval $(call Profile,Default)) ++ +diff --git a/target/linux/ipq807x/ipq807x/target.mk b/target/linux/ipq807x/ipq807x/target.mk +new file mode 100644 +index 0000000000..7c24b66e60 +--- /dev/null ++++ b/target/linux/ipq807x/ipq807x/target.mk +@@ -0,0 +1,7 @@ ++SUBTARGET:=ipq807x ++BOARDNAME:=IPQ807x based boards ++ ++DEFAULT_PACKAGES += ath11k-firmware-ipq807x qca-nss-fw-ipq807x ++define Target/Description ++ Build images for IPQ807x systems. ++endef +diff --git a/target/linux/ipq807x/modules.mk b/target/linux/ipq807x/modules.mk +new file mode 100644 +index 0000000000..3b772a5726 +--- /dev/null ++++ b/target/linux/ipq807x/modules.mk +@@ -0,0 +1,58 @@ ++define KernelPackage/usb-phy-ipq807x ++ TITLE:=DWC3 USB QCOM PHY driver for IPQ807x ++ DEPENDS:=@TARGET_ipq807x ++ KCONFIG:= \ ++ CONFIG_USB_QCOM_QUSB_PHY \ ++ CONFIG_USB_QCOM_QMP_PHY ++ FILES:= \ ++ $(LINUX_DIR)/drivers/usb/phy/phy-msm-qusb.ko \ ++ $(LINUX_DIR)/drivers/usb/phy/phy-msm-ssusb-qmp.ko ++ AUTOLOAD:=$(call AutoLoad,45,phy-msm-qusb phy-msm-ssusb-qmp,1) ++ $(call AddDepends/usb) ++endef ++ ++define KernelPackage/usb-phy-ipq807x/description ++ This driver provides support for the USB PHY drivers ++ within the IPQ807x SoCs. ++endef ++ ++$(eval $(call KernelPackage,usb-phy-ipq807x)) ++ ++ ++define KernelPackage/qrtr_mproc ++ TITLE:= Ath11k Specific kernel configs for IPQ807x and IPQ60xx ++ DEPENDS+= @TARGET_ipq807x ++ KCONFIG:= \ ++ CONFIG_QRTR=y \ ++ CONFIG_QCOM_APCS_IPC=y \ ++ CONFIG_QCOM_GLINK_SSR=y \ ++ CONFIG_QCOM_Q6V5_WCSS=y \ ++ CONFIG_MSM_RPM_RPMSG=y \ ++ CONFIG_RPMSG_QCOM_GLINK_RPM=y \ ++ CONFIG_REGULATOR_RPM_GLINK=y \ ++ CONFIG_QCOM_SYSMON=y \ ++ CONFIG_RPMSG=y \ ++ CONFIG_RPMSG_CHAR=y \ ++ CONFIG_RPMSG_QCOM_GLINK_SMEM=y \ ++ CONFIG_RPMSG_QCOM_SMD=y \ ++ CONFIG_QRTR_SMD=y \ ++ CONFIG_QCOM_QMI_HELPERS=y \ ++ CONFIG_SAMPLES=y \ ++ CONFIG_SAMPLE_QMI_CLIENT=m \ ++ CONFIG_SAMPLE_TRACE_EVENTS=n \ ++ CONFIG_SAMPLE_KOBJECT=n \ ++ CONFIG_SAMPLE_KPROBES=n \ ++ CONFIG_SAMPLE_KRETPROBES=n \ ++ CONFIG_SAMPLE_HW_BREAKPOINT=n \ ++ CONFIG_SAMPLE_KFIFO=n \ ++ CONFIG_SAMPLE_CONFIGFS=n \ ++ CONFIG_SAMPLE_RPMSG_CLIENT=n \ ++ CONFIG_MAILBOX=y \ ++ CONFIG_DIAG_OVER_QRTR=y ++endef ++ ++define KernelPackage/qrtr_mproc/description ++Kernel configs for ath11k support specific to ipq807x and IPQ60xx ++endef ++ ++$(eval $(call KernelPackage,qrtr_mproc)) +diff --git a/target/linux/ipq807x/patches/100-qrtr-ns.patch b/target/linux/ipq807x/patches/100-qrtr-ns.patch +new file mode 100644 +index 0000000000..850e644778 +--- /dev/null ++++ b/target/linux/ipq807x/patches/100-qrtr-ns.patch +@@ -0,0 +1,976 @@ ++Index: linux-4.4.60/net/qrtr/ns.c ++=================================================================== ++--- /dev/null +++++ linux-4.4.60/net/qrtr/ns.c ++@@ -0,0 +1,760 @@ +++// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +++/* +++ * Copyright (c) 2015, Sony Mobile Communications Inc. +++ * Copyright (c) 2013, The Linux Foundation. All rights reserved. +++ * Copyright (c) 2020, Linaro Ltd. +++ */ +++ +++#include +++#include +++#include +++#include +++ +++#include "qrtr.h" +++ +++#define CREATE_TRACE_POINTS +++#include +++ +++static RADIX_TREE(nodes, GFP_KERNEL); +++ +++static struct { +++ struct socket *sock; +++ struct sockaddr_qrtr bcast_sq; +++ struct list_head lookups; +++ struct workqueue_struct *workqueue; +++ struct work_struct work; +++ int local_node; +++} qrtr_ns; +++ +++static const char * const qrtr_ctrl_pkt_strings[] = { +++ [QRTR_TYPE_HELLO] = "hello", +++ [QRTR_TYPE_BYE] = "bye", +++ [QRTR_TYPE_NEW_SERVER] = "new-server", +++ [QRTR_TYPE_DEL_SERVER] = "del-server", +++ [QRTR_TYPE_DEL_CLIENT] = "del-client", +++ [QRTR_TYPE_RESUME_TX] = "resume-tx", +++ [QRTR_TYPE_EXIT] = "exit", +++ [QRTR_TYPE_PING] = "ping", +++ [QRTR_TYPE_NEW_LOOKUP] = "new-lookup", +++ [QRTR_TYPE_DEL_LOOKUP] = "del-lookup", +++}; +++ +++struct qrtr_server_filter { +++ unsigned int service; +++ unsigned int instance; +++ unsigned int ifilter; +++}; +++ +++struct qrtr_lookup { +++ unsigned int service; +++ unsigned int instance; +++ +++ struct sockaddr_qrtr sq; +++ struct list_head li; +++}; +++ +++struct qrtr_server { +++ unsigned int service; +++ unsigned int instance; +++ +++ unsigned int node; +++ unsigned int port; +++ +++ struct list_head qli; +++}; +++ +++struct qrtr_node { +++ unsigned int id; +++ struct radix_tree_root servers; +++}; +++ +++static struct qrtr_node *node_get(unsigned int node_id) +++{ +++ struct qrtr_node *node; +++ +++ node = radix_tree_lookup(&nodes, node_id); +++ if (node) +++ return node; +++ +++ /* If node didn't exist, allocate and insert it to the tree */ +++ node = kzalloc(sizeof(*node), GFP_KERNEL); +++ if (!node) +++ return NULL; +++ +++ node->id = node_id; +++ +++ radix_tree_insert(&nodes, node_id, node); +++ +++ return node; +++} +++ +++static int server_match(const struct qrtr_server *srv, +++ const struct qrtr_server_filter *f) +++{ +++ unsigned int ifilter = f->ifilter; +++ +++ if (f->service != 0 && srv->service != f->service) +++ return 0; +++ if (!ifilter && f->instance) +++ ifilter = ~0; +++ +++ return (srv->instance & ifilter) == f->instance; +++} +++ +++static int service_announce_new(struct sockaddr_qrtr *dest, +++ struct qrtr_server *srv) +++{ +++ struct qrtr_ctrl_pkt pkt; +++ struct msghdr msg = { }; +++ struct kvec iv; +++ +++ trace_qrtr_ns_service_announce_new(srv->service, srv->instance, +++ srv->node, srv->port); +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = cpu_to_le32(QRTR_TYPE_NEW_SERVER); +++ pkt.server.service = cpu_to_le32(srv->service); +++ pkt.server.instance = cpu_to_le32(srv->instance); +++ pkt.server.node = cpu_to_le32(srv->node); +++ pkt.server.port = cpu_to_le32(srv->port); +++ +++ msg.msg_name = (struct sockaddr *)dest; +++ msg.msg_namelen = sizeof(*dest); +++ +++ return kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++} +++ +++static int service_announce_del(struct sockaddr_qrtr *dest, +++ struct qrtr_server *srv) +++{ +++ struct qrtr_ctrl_pkt pkt; +++ struct msghdr msg = { }; +++ struct kvec iv; +++ int ret; +++ +++ trace_qrtr_ns_service_announce_del(srv->service, srv->instance, +++ srv->node, srv->port); +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = cpu_to_le32(QRTR_TYPE_DEL_SERVER); +++ pkt.server.service = cpu_to_le32(srv->service); +++ pkt.server.instance = cpu_to_le32(srv->instance); +++ pkt.server.node = cpu_to_le32(srv->node); +++ pkt.server.port = cpu_to_le32(srv->port); +++ +++ msg.msg_name = (struct sockaddr *)dest; +++ msg.msg_namelen = sizeof(*dest); +++ +++ ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++ if (ret < 0) +++ pr_err("failed to announce del service\n"); +++ +++ return ret; +++} +++ +++static void lookup_notify(struct sockaddr_qrtr *to, struct qrtr_server *srv, +++ bool new) +++{ +++ struct qrtr_ctrl_pkt pkt; +++ struct msghdr msg = { }; +++ struct kvec iv; +++ int ret; +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = new ? cpu_to_le32(QRTR_TYPE_NEW_SERVER) : +++ cpu_to_le32(QRTR_TYPE_DEL_SERVER); +++ if (srv) { +++ pkt.server.service = cpu_to_le32(srv->service); +++ pkt.server.instance = cpu_to_le32(srv->instance); +++ pkt.server.node = cpu_to_le32(srv->node); +++ pkt.server.port = cpu_to_le32(srv->port); +++ } +++ +++ msg.msg_name = (struct sockaddr *)to; +++ msg.msg_namelen = sizeof(*to); +++ +++ ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++ if (ret < 0) +++ pr_err("failed to send lookup notification\n"); +++} +++ +++static int announce_servers(struct sockaddr_qrtr *sq) +++{ +++ struct radix_tree_iter iter; +++ struct qrtr_server *srv; +++ struct qrtr_node *node; +++ void __rcu **slot; +++ int ret; +++ +++ node = node_get(qrtr_ns.local_node); +++ if (!node) +++ return 0; +++ +++ /* Announce the list of servers registered in this node */ +++ radix_tree_for_each_slot(slot, &node->servers, &iter, 0) { +++ srv = radix_tree_deref_slot(slot); +++ +++ ret = service_announce_new(sq, srv); +++ if (ret < 0) { +++ pr_err("failed to announce new service\n"); +++ return ret; +++ } +++ } +++ +++ return 0; +++} +++ +++static struct qrtr_server *server_add(unsigned int service, +++ unsigned int instance, +++ unsigned int node_id, +++ unsigned int port) +++{ +++ struct qrtr_server *srv; +++ struct qrtr_server *old; +++ struct qrtr_node *node; +++ +++ if (!service || !port) +++ return NULL; +++ +++ srv = kzalloc(sizeof(*srv), GFP_KERNEL); +++ if (!srv) +++ return NULL; +++ +++ srv->service = service; +++ srv->instance = instance; +++ srv->node = node_id; +++ srv->port = port; +++ +++ node = node_get(node_id); +++ if (!node) +++ goto err; +++ +++ /* Delete the old server on the same port */ +++ old = radix_tree_lookup(&node->servers, port); +++ if (old) { +++ radix_tree_delete(&node->servers, port); +++ kfree(old); +++ } +++ +++ radix_tree_insert(&node->servers, port, srv); +++ +++ trace_qrtr_ns_server_add(srv->service, srv->instance, +++ srv->node, srv->port); +++ +++ return srv; +++ +++err: +++ kfree(srv); +++ return NULL; +++} +++ +++static int server_del(struct qrtr_node *node, unsigned int port) +++{ +++ struct qrtr_lookup *lookup; +++ struct qrtr_server *srv; +++ struct list_head *li; +++ +++ srv = radix_tree_lookup(&node->servers, port); +++ if (!srv) +++ return -ENOENT; +++ +++ radix_tree_delete(&node->servers, port); +++ +++ /* Broadcast the removal of local servers */ +++ if (srv->node == qrtr_ns.local_node) +++ service_announce_del(&qrtr_ns.bcast_sq, srv); +++ +++ /* Announce the service's disappearance to observers */ +++ list_for_each(li, &qrtr_ns.lookups) { +++ lookup = container_of(li, struct qrtr_lookup, li); +++ if (lookup->service && lookup->service != srv->service) +++ continue; +++ if (lookup->instance && lookup->instance != srv->instance) +++ continue; +++ +++ lookup_notify(&lookup->sq, srv, false); +++ } +++ +++ kfree(srv); +++ +++ return 0; +++} +++ +++static int say_hello(struct sockaddr_qrtr *dest) +++{ +++ struct qrtr_ctrl_pkt pkt; +++ struct msghdr msg = { }; +++ struct kvec iv; +++ int ret; +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = cpu_to_le32(QRTR_TYPE_HELLO); +++ +++ msg.msg_name = (struct sockaddr *)dest; +++ msg.msg_namelen = sizeof(*dest); +++ +++ ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++ if (ret < 0) +++ pr_err("failed to send hello msg\n"); +++ +++ return ret; +++} +++ +++/* Announce the list of servers registered on the local node */ +++static int ctrl_cmd_hello(struct sockaddr_qrtr *sq) +++{ +++ int ret; +++ +++ ret = say_hello(sq); +++ if (ret < 0) +++ return ret; +++ +++ return announce_servers(sq); +++} +++ +++static int ctrl_cmd_bye(struct sockaddr_qrtr *from) +++{ +++ struct qrtr_node *local_node; +++ struct radix_tree_iter iter; +++ struct qrtr_ctrl_pkt pkt; +++ struct qrtr_server *srv; +++ struct sockaddr_qrtr sq; +++ struct msghdr msg = { }; +++ struct qrtr_node *node; +++ void __rcu **slot; +++ struct kvec iv; +++ int ret; +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ node = node_get(from->sq_node); +++ if (!node) +++ return 0; +++ +++ /* Advertise removal of this client to all servers of remote node */ +++ radix_tree_for_each_slot(slot, &node->servers, &iter, 0) { +++ srv = radix_tree_deref_slot(slot); +++ server_del(node, srv->port); +++ } +++ +++ /* Advertise the removal of this client to all local servers */ +++ local_node = node_get(qrtr_ns.local_node); +++ if (!local_node) +++ return 0; +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = cpu_to_le32(QRTR_TYPE_BYE); +++ pkt.client.node = cpu_to_le32(from->sq_node); +++ +++ radix_tree_for_each_slot(slot, &local_node->servers, &iter, 0) { +++ srv = radix_tree_deref_slot(slot); +++ +++ sq.sq_family = AF_QIPCRTR; +++ sq.sq_node = srv->node; +++ sq.sq_port = srv->port; +++ +++ msg.msg_name = (struct sockaddr *)&sq; +++ msg.msg_namelen = sizeof(sq); +++ +++ ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++ if (ret < 0) { +++ pr_err("failed to send bye cmd\n"); +++ return ret; +++ } +++ } +++ +++ return 0; +++} +++ +++static int ctrl_cmd_del_client(struct sockaddr_qrtr *from, +++ unsigned int node_id, unsigned int port) +++{ +++ struct qrtr_node *local_node; +++ struct radix_tree_iter iter; +++ struct qrtr_lookup *lookup; +++ struct qrtr_ctrl_pkt pkt; +++ struct msghdr msg = { }; +++ struct qrtr_server *srv; +++ struct sockaddr_qrtr sq; +++ struct qrtr_node *node; +++ struct list_head *tmp; +++ struct list_head *li; +++ void __rcu **slot; +++ struct kvec iv; +++ int ret; +++ +++ iv.iov_base = &pkt; +++ iv.iov_len = sizeof(pkt); +++ +++ /* Don't accept spoofed messages */ +++ if (from->sq_node != node_id) +++ return -EINVAL; +++ +++ /* Local DEL_CLIENT messages comes from the port being closed */ +++ if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) +++ return -EINVAL; +++ +++ /* Remove any lookups by this client */ +++ list_for_each_safe(li, tmp, &qrtr_ns.lookups) { +++ lookup = container_of(li, struct qrtr_lookup, li); +++ if (lookup->sq.sq_node != node_id) +++ continue; +++ if (lookup->sq.sq_port != port) +++ continue; +++ +++ list_del(&lookup->li); +++ kfree(lookup); +++ } +++ +++ /* Remove the server belonging to this port */ +++ node = node_get(node_id); +++ if (node) +++ server_del(node, port); +++ +++ /* Advertise the removal of this client to all local servers */ +++ local_node = node_get(qrtr_ns.local_node); +++ if (!local_node) +++ return 0; +++ +++ memset(&pkt, 0, sizeof(pkt)); +++ pkt.cmd = cpu_to_le32(QRTR_TYPE_DEL_CLIENT); +++ pkt.client.node = cpu_to_le32(node_id); +++ pkt.client.port = cpu_to_le32(port); +++ +++ radix_tree_for_each_slot(slot, &local_node->servers, &iter, 0) { +++ srv = radix_tree_deref_slot(slot); +++ +++ sq.sq_family = AF_QIPCRTR; +++ sq.sq_node = srv->node; +++ sq.sq_port = srv->port; +++ +++ msg.msg_name = (struct sockaddr *)&sq; +++ msg.msg_namelen = sizeof(sq); +++ +++ ret = kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); +++ if (ret < 0) { +++ pr_err("failed to send del client cmd\n"); +++ return ret; +++ } +++ } +++ +++ return 0; +++} +++ +++static int ctrl_cmd_new_server(struct sockaddr_qrtr *from, +++ unsigned int service, unsigned int instance, +++ unsigned int node_id, unsigned int port) +++{ +++ struct qrtr_lookup *lookup; +++ struct qrtr_server *srv; +++ struct list_head *li; +++ int ret = 0; +++ +++ /* Ignore specified node and port for local servers */ +++ if (from->sq_node == qrtr_ns.local_node) { +++ node_id = from->sq_node; +++ port = from->sq_port; +++ } +++ +++ /* Don't accept spoofed messages */ +++ if (from->sq_node != node_id) +++ return -EINVAL; +++ +++ srv = server_add(service, instance, node_id, port); +++ if (!srv) +++ return -EINVAL; +++ +++ if (srv->node == qrtr_ns.local_node) { +++ ret = service_announce_new(&qrtr_ns.bcast_sq, srv); +++ if (ret < 0) { +++ pr_err("failed to announce new service\n"); +++ return ret; +++ } +++ } +++ +++ /* Notify any potential lookups about the new server */ +++ list_for_each(li, &qrtr_ns.lookups) { +++ lookup = container_of(li, struct qrtr_lookup, li); +++ if (lookup->service && lookup->service != service) +++ continue; +++ if (lookup->instance && lookup->instance != instance) +++ continue; +++ +++ lookup_notify(&lookup->sq, srv, true); +++ } +++ +++ return ret; +++} +++ +++static int ctrl_cmd_del_server(struct sockaddr_qrtr *from, +++ unsigned int service, unsigned int instance, +++ unsigned int node_id, unsigned int port) +++{ +++ struct qrtr_node *node; +++ +++ /* Ignore specified node and port for local servers*/ +++ if (from->sq_node == qrtr_ns.local_node) { +++ node_id = from->sq_node; +++ port = from->sq_port; +++ } +++ +++ /* Don't accept spoofed messages */ +++ if (from->sq_node != node_id) +++ return -EINVAL; +++ +++ /* Local servers may only unregister themselves */ +++ if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) +++ return -EINVAL; +++ +++ node = node_get(node_id); +++ if (!node) +++ return -ENOENT; +++ +++ return server_del(node, port); +++} +++ +++static int ctrl_cmd_new_lookup(struct sockaddr_qrtr *from, +++ unsigned int service, unsigned int instance) +++{ +++ struct radix_tree_iter node_iter; +++ struct qrtr_server_filter filter; +++ struct radix_tree_iter srv_iter; +++ struct qrtr_lookup *lookup; +++ struct qrtr_node *node; +++ void __rcu **node_slot; +++ void __rcu **srv_slot; +++ +++ /* Accept only local observers */ +++ if (from->sq_node != qrtr_ns.local_node) +++ return -EINVAL; +++ +++ lookup = kzalloc(sizeof(*lookup), GFP_KERNEL); +++ if (!lookup) +++ return -ENOMEM; +++ +++ lookup->sq = *from; +++ lookup->service = service; +++ lookup->instance = instance; +++ list_add_tail(&lookup->li, &qrtr_ns.lookups); +++ +++ memset(&filter, 0, sizeof(filter)); +++ filter.service = service; +++ filter.instance = instance; +++ +++ radix_tree_for_each_slot(node_slot, &nodes, &node_iter, 0) { +++ node = radix_tree_deref_slot(node_slot); +++ +++ radix_tree_for_each_slot(srv_slot, &node->servers, +++ &srv_iter, 0) { +++ struct qrtr_server *srv; +++ +++ srv = radix_tree_deref_slot(srv_slot); +++ if (!server_match(srv, &filter)) +++ continue; +++ +++ lookup_notify(from, srv, true); +++ } +++ } +++ +++ /* Empty notification, to indicate end of listing */ +++ lookup_notify(from, NULL, true); +++ +++ return 0; +++} +++ +++static void ctrl_cmd_del_lookup(struct sockaddr_qrtr *from, +++ unsigned int service, unsigned int instance) +++{ +++ struct qrtr_lookup *lookup; +++ struct list_head *tmp; +++ struct list_head *li; +++ +++ list_for_each_safe(li, tmp, &qrtr_ns.lookups) { +++ lookup = container_of(li, struct qrtr_lookup, li); +++ if (lookup->sq.sq_node != from->sq_node) +++ continue; +++ if (lookup->sq.sq_port != from->sq_port) +++ continue; +++ if (lookup->service != service) +++ continue; +++ if (lookup->instance && lookup->instance != instance) +++ continue; +++ +++ list_del(&lookup->li); +++ kfree(lookup); +++ } +++} +++ +++static void qrtr_ns_worker(struct work_struct *work) +++{ +++ const struct qrtr_ctrl_pkt *pkt; +++ size_t recv_buf_size = 4096; +++ struct sockaddr_qrtr sq; +++ struct msghdr msg = { }; +++ unsigned int cmd; +++ ssize_t msglen; +++ void *recv_buf; +++ struct kvec iv; +++ int ret; +++ +++ msg.msg_name = (struct sockaddr *)&sq; +++ msg.msg_namelen = sizeof(sq); +++ +++ recv_buf = kzalloc(recv_buf_size, GFP_KERNEL); +++ if (!recv_buf) +++ return; +++ +++ for (;;) { +++ iv.iov_base = recv_buf; +++ iv.iov_len = recv_buf_size; +++ +++ msglen = kernel_recvmsg(qrtr_ns.sock, &msg, &iv, 1, +++ iv.iov_len, MSG_DONTWAIT); +++ +++ if (msglen == -EAGAIN) +++ break; +++ +++ if (msglen < 0) { +++ pr_err("error receiving packet: %zd\n", msglen); +++ break; +++ } +++ +++ pkt = recv_buf; +++ cmd = le32_to_cpu(pkt->cmd); +++ if (cmd < ARRAY_SIZE(qrtr_ctrl_pkt_strings) && +++ qrtr_ctrl_pkt_strings[cmd]) +++ trace_qrtr_ns_message(qrtr_ctrl_pkt_strings[cmd], +++ sq.sq_node, sq.sq_port); +++ +++ ret = 0; +++ switch (cmd) { +++ case QRTR_TYPE_HELLO: +++ ret = ctrl_cmd_hello(&sq); +++ break; +++ case QRTR_TYPE_BYE: +++ ret = ctrl_cmd_bye(&sq); +++ break; +++ case QRTR_TYPE_DEL_CLIENT: +++ ret = ctrl_cmd_del_client(&sq, +++ le32_to_cpu(pkt->client.node), +++ le32_to_cpu(pkt->client.port)); +++ break; +++ case QRTR_TYPE_NEW_SERVER: +++ ret = ctrl_cmd_new_server(&sq, +++ le32_to_cpu(pkt->server.service), +++ le32_to_cpu(pkt->server.instance), +++ le32_to_cpu(pkt->server.node), +++ le32_to_cpu(pkt->server.port)); +++ break; +++ case QRTR_TYPE_DEL_SERVER: +++ ret = ctrl_cmd_del_server(&sq, +++ le32_to_cpu(pkt->server.service), +++ le32_to_cpu(pkt->server.instance), +++ le32_to_cpu(pkt->server.node), +++ le32_to_cpu(pkt->server.port)); +++ break; +++ case QRTR_TYPE_EXIT: +++ case QRTR_TYPE_PING: +++ case QRTR_TYPE_RESUME_TX: +++ break; +++ case QRTR_TYPE_NEW_LOOKUP: +++ ret = ctrl_cmd_new_lookup(&sq, +++ le32_to_cpu(pkt->server.service), +++ le32_to_cpu(pkt->server.instance)); +++ break; +++ case QRTR_TYPE_DEL_LOOKUP: +++ ctrl_cmd_del_lookup(&sq, +++ le32_to_cpu(pkt->server.service), +++ le32_to_cpu(pkt->server.instance)); +++ break; +++ } +++ +++ if (ret < 0) +++ pr_err("failed while handling packet from %d:%d", +++ sq.sq_node, sq.sq_port); +++ } +++ +++ kfree(recv_buf); +++} +++ +++static void qrtr_ns_data_ready(struct sock *sk) +++{ +++ queue_work(qrtr_ns.workqueue, &qrtr_ns.work); +++} +++ +++void qrtr_ns_init(void) +++{ +++ struct sockaddr_qrtr sq; +++ int sl = sizeof(sq); +++ int ret; +++ +++ INIT_LIST_HEAD(&qrtr_ns.lookups); +++ INIT_WORK(&qrtr_ns.work, qrtr_ns_worker); +++ +++ ret = sock_create_kern(&init_net, AF_QIPCRTR, SOCK_DGRAM, +++ PF_QIPCRTR, &qrtr_ns.sock); +++ if (ret < 0) +++ return; +++ +++ ret = kernel_getsockname(qrtr_ns.sock, (struct sockaddr *)&sq, &sl); +++ if (ret < 0) { +++ pr_err("failed to get socket name\n"); +++ goto err_sock; +++ } +++ +++ qrtr_ns.workqueue = alloc_workqueue("qrtr_ns_handler", WQ_UNBOUND, 1); +++ if (!qrtr_ns.workqueue) +++ goto err_sock; +++ +++ qrtr_ns.sock->sk->sk_data_ready = qrtr_ns_data_ready; +++ +++ sq.sq_port = QRTR_PORT_CTRL; +++ qrtr_ns.local_node = sq.sq_node; +++ +++ ret = kernel_bind(qrtr_ns.sock, (struct sockaddr *)&sq, sizeof(sq)); +++ if (ret < 0) { +++ pr_err("failed to bind to socket\n"); +++ goto err_wq; +++ } +++ +++ qrtr_ns.bcast_sq.sq_family = AF_QIPCRTR; +++ qrtr_ns.bcast_sq.sq_node = QRTR_NODE_BCAST; +++ qrtr_ns.bcast_sq.sq_port = QRTR_PORT_CTRL; +++ +++ ret = say_hello(&qrtr_ns.bcast_sq); +++ if (ret < 0) +++ goto err_wq; +++ +++ return; +++ +++err_wq: +++ destroy_workqueue(qrtr_ns.workqueue); +++err_sock: +++ sock_release(qrtr_ns.sock); +++} +++EXPORT_SYMBOL_GPL(qrtr_ns_init); +++ +++void qrtr_ns_remove(void) +++{ +++ cancel_work_sync(&qrtr_ns.work); +++ destroy_workqueue(qrtr_ns.workqueue); +++ sock_release(qrtr_ns.sock); +++} +++EXPORT_SYMBOL_GPL(qrtr_ns_remove); +++ +++MODULE_AUTHOR("Manivannan Sadhasivam "); +++MODULE_DESCRIPTION("Qualcomm IPC Router Nameservice"); +++MODULE_LICENSE("Dual BSD/GPL"); ++Index: linux-4.4.60/net/qrtr/qrtr.c ++=================================================================== ++--- linux-4.4.60.orig/net/qrtr/qrtr.c +++++ linux-4.4.60/net/qrtr/qrtr.c ++@@ -135,6 +135,8 @@ static DEFINE_IDR(qrtr_ports); ++ static DEFINE_MUTEX(qrtr_port_lock); ++ static DEFINE_MUTEX(qrtr_node_locking); ++ +++static struct delayed_work qrtr_ns_work; +++ ++ /** ++ * struct qrtr_node - endpoint node ++ * @ep_lock: lock for endpoint management and callbacks ++@@ -1765,33 +1767,6 @@ static int qrtr_create(struct net *net, ++ return 0; ++ } ++ ++-static const struct nla_policy qrtr_policy[IFA_MAX + 1] = { ++- [IFA_LOCAL] = { .type = NLA_U32 }, ++-}; ++- ++-static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) ++-{ ++- struct nlattr *tb[IFA_MAX + 1]; ++- struct ifaddrmsg *ifm; ++- int rc; ++- ++- if (!netlink_capable(skb, CAP_NET_ADMIN)) ++- return -EPERM; ++- ++- ASSERT_RTNL(); ++- ++- rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy); ++- if (rc < 0) ++- return rc; ++- ++- ifm = nlmsg_data(nlh); ++- if (!tb[IFA_LOCAL]) ++- return -EINVAL; ++- ++- qrtr_local_nid = nla_get_u32(tb[IFA_LOCAL]); ++- return 0; ++-} ++- ++ static const struct net_proto_family qrtr_family = { ++ .owner = THIS_MODULE, ++ .family = AF_QIPCRTR, ++@@ -1811,7 +1786,8 @@ static int __init qrtr_proto_init(void) ++ proto_unregister(&qrtr_proto); ++ return rc; ++ } ++- rtnl_register(PF_QIPCRTR, RTM_NEWADDR, qrtr_addr_doit, NULL, NULL); +++ +++ qrtr_ns_init(); ++ ++ return 0; ++ } ++@@ -1819,7 +1795,8 @@ postcore_initcall(qrtr_proto_init); ++ ++ static void __exit qrtr_proto_fini(void) ++ { ++- rtnl_unregister(PF_QIPCRTR, RTM_NEWADDR); +++ cancel_delayed_work_sync(&qrtr_ns_work); +++ qrtr_ns_remove(); ++ sock_unregister(qrtr_family.family); ++ proto_unregister(&qrtr_proto); ++ } ++Index: linux-4.4.60/net/qrtr/qrtr.h ++=================================================================== ++--- linux-4.4.60.orig/net/qrtr/qrtr.h +++++ linux-4.4.60/net/qrtr/qrtr.h ++@@ -33,4 +33,9 @@ void qrtr_endpoint_unregister(struct qrt ++ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len); ++ ++ int qrtr_peek_pkt_size(const void *data); +++ +++void qrtr_ns_init(void); +++ +++void qrtr_ns_remove(void); +++ ++ #endif ++Index: linux-4.4.60/net/qrtr/Makefile ++=================================================================== ++--- linux-4.4.60.orig/net/qrtr/Makefile +++++ linux-4.4.60/net/qrtr/Makefile ++@@ -1,4 +1,4 @@ ++-obj-$(CONFIG_QRTR) := qrtr.o +++obj-$(CONFIG_QRTR) := qrtr.o ns.o ++ ++ obj-$(CONFIG_QRTR_SMD) += qrtr-smd.o ++ qrtr-smd-y := smd.o ++Index: linux-4.4.60/include/trace/events/qrtr.h ++=================================================================== ++--- /dev/null +++++ linux-4.4.60/include/trace/events/qrtr.h ++@@ -0,0 +1,115 @@ +++/* SPDX-License-Identifier: GPL-2.0 */ +++#undef TRACE_SYSTEM +++#define TRACE_SYSTEM qrtr +++ +++#if !defined(_TRACE_QRTR_H) || defined(TRACE_HEADER_MULTI_READ) +++#define _TRACE_QRTR_H +++ +++#include +++#include +++ +++TRACE_EVENT(qrtr_ns_service_announce_new, +++ +++ TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port), +++ +++ TP_ARGS(service, instance, node, port), +++ +++ TP_STRUCT__entry( +++ __field(__le32, service) +++ __field(__le32, instance) +++ __field(__le32, node) +++ __field(__le32, port) +++ ), +++ +++ TP_fast_assign( +++ __entry->service = service; +++ __entry->instance = instance; +++ __entry->node = node; +++ __entry->port = port; +++ ), +++ +++ TP_printk("advertising new server [%d:%x]@[%d:%d]", +++ __entry->service, __entry->instance, __entry->node, +++ __entry->port +++ ) +++); +++ +++TRACE_EVENT(qrtr_ns_service_announce_del, +++ +++ TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port), +++ +++ TP_ARGS(service, instance, node, port), +++ +++ TP_STRUCT__entry( +++ __field(__le32, service) +++ __field(__le32, instance) +++ __field(__le32, node) +++ __field(__le32, port) +++ ), +++ +++ TP_fast_assign( +++ __entry->service = service; +++ __entry->instance = instance; +++ __entry->node = node; +++ __entry->port = port; +++ ), +++ +++ TP_printk("advertising removal of server [%d:%x]@[%d:%d]", +++ __entry->service, __entry->instance, __entry->node, +++ __entry->port +++ ) +++); +++ +++TRACE_EVENT(qrtr_ns_server_add, +++ +++ TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port), +++ +++ TP_ARGS(service, instance, node, port), +++ +++ TP_STRUCT__entry( +++ __field(__le32, service) +++ __field(__le32, instance) +++ __field(__le32, node) +++ __field(__le32, port) +++ ), +++ +++ TP_fast_assign( +++ __entry->service = service; +++ __entry->instance = instance; +++ __entry->node = node; +++ __entry->port = port; +++ ), +++ +++ TP_printk("add server [%d:%x]@[%d:%d]", +++ __entry->service, __entry->instance, __entry->node, +++ __entry->port +++ ) +++); +++ +++TRACE_EVENT(qrtr_ns_message, +++ +++ TP_PROTO(const char * const ctrl_pkt_str, __u32 sq_node, __u32 sq_port), +++ +++ TP_ARGS(ctrl_pkt_str, sq_node, sq_port), +++ +++ TP_STRUCT__entry( +++ __string(ctrl_pkt_str, ctrl_pkt_str) +++ __field(__u32, sq_node) +++ __field(__u32, sq_port) +++ ), +++ +++ TP_fast_assign( +++ __assign_str(ctrl_pkt_str, ctrl_pkt_str); +++ __entry->sq_node = sq_node; +++ __entry->sq_port = sq_port; +++ ), +++ +++ TP_printk("%s from %d:%d", +++ __get_str(ctrl_pkt_str), __entry->sq_node, __entry->sq_port +++ ) +++); +++ +++#endif /* _TRACE_QRTR_H */ +++ +++/* This part must be outside protection */ +++#include +diff --git a/target/linux/ipq807x/patches/101-squashfs.patch b/target/linux/ipq807x/patches/101-squashfs.patch +new file mode 100644 +index 0000000000..5744a2a5bf +--- /dev/null ++++ b/target/linux/ipq807x/patches/101-squashfs.patch +@@ -0,0 +1,16 @@ ++Index: linux-4.4.60/fs/squashfs/xz_wrapper.c ++=================================================================== ++--- linux-4.4.60.orig/fs/squashfs/xz_wrapper.c +++++ linux-4.4.60/fs/squashfs/xz_wrapper.c ++@@ -40,10 +40,8 @@ struct squashfs_xz { ++ }; ++ ++ struct disk_comp_opts { ++- __le32 flags; ++- __le16 bit_opts; ++- __le16 fb; ++ __le32 dictionary_size; +++ __le32 flags; ++ }; ++ ++ struct comp_opts { +diff --git a/target/linux/ipq807x/patches/102-cig-wf188.patch b/target/linux/ipq807x/patches/102-cig-wf188.patch +new file mode 100644 +index 0000000000..225ea45d08 +--- /dev/null ++++ b/target/linux/ipq807x/patches/102-cig-wf188.patch +@@ -0,0 +1,869 @@ ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/Makefile ++=================================================================== ++--- linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1.orig/arch/arm64/boot/dts/qcom/Makefile +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/Makefile ++@@ -30,6 +30,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \ ++ qcom-ipq6018-cp01-c4.dtb \ ++ qcom-ipq6018-cp02-c1.dtb \ ++ qcom-ipq6018-cp03-c1.dtb \ +++ qcom-ipq6018-cig-wf188.dts \ +++ qcom-ipq6018-cig-wf188n.dts \ ++ qcom-ipq807x-hk01.dtb \ ++ qcom-ipq807x-hk01.c2.dtb \ ++ qcom-ipq807x-hk01.c3.dtb \ ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf188.dts ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf188.dts ++@@ -0,0 +1,423 @@ +++/dts-v1/; +++/* +++ * Copyright (c) 2019, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++ +++#include "qcom-ipq6018.dtsi" +++#include "qcom-ipq6018-rpm-regulator.dtsi" +++#include "qcom-ipq6018-cpr-regulator.dtsi" +++#include "qcom-ipq6018-cp-cpu.dtsi" +++#include +++#include +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ model = "Cigtech WF-188"; +++ compatible = "cig,wf188", "qcom,ipq6018-cp03", "qcom,ipq6018"; +++ interrupt-parent = <&intc>; +++ +++ aliases { +++ serial0 = &blsp1_uart3; +++ serial1 = &blsp1_uart2; +++ +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet0 = "/soc/dp1"; +++ ethernet1 = "/soc/dp2"; +++ +++ led-boot = &led_power; +++ led-failsafe = &led_power; +++ led-running = &led_power; +++ led-upgrade = &led_power; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; +++ bootargs-append = " swiotlb=1 coherent_pool=2M"; +++ }; +++ +++ /* +++ * +=========+==============+========================+ +++ * | | | | +++ * | Region | Start Offset | Size | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | | | | +++ * | | | | +++ * | | | | +++ * | | | | +++ * | Linux | 0x41000000 | 139MB | +++ * | | | | +++ * | | | | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | TZ App | 0x49B00000 | 6MB | +++ * +--------+--------------+-------------------------+ +++ * +++ * From the available 145 MB for Linux in the first 256 MB, +++ * we are reserving 6 MB for TZAPP. +++ * +++ * Refer arch/arm64/boot/dts/qcom/qcom-ipq6018-memory.dtsi +++ * for memory layout. +++ */ +++ +++/* TZAPP is enabled only in default memory profile */ +++#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +++ reserved-memory { +++ tzapp:tzapp@49B00000 { /* TZAPPS */ +++ no-map; +++ reg = <0x0 0x49B00000 0x0 0x00600000>; +++ }; +++ }; +++#endif +++}; +++ +++&tlmm { +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio44", "gpio45"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ qpic_pad { +++ pins = "gpio1", "gpio3", "gpio4", +++ "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ button_pins: button_pins { +++ wps_button { +++ pins = "gpio22"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio64"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio65"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_2 { +++ pins = "gpio75"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ }; +++ +++ leds_pins: leds_pins { +++ led_5g { +++ pins = "gpio25"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_2g { +++ pins = "gpio24"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_eth { +++ pins = "gpio18"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_pwr { +++ pins = "gpio16"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ uart2_pins: uart2_pins { +++ mux { +++ pins = "gpio57", "gpio58"; +++ function = "blsp4_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++}; +++ +++&soc { +++ mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 75 0>; +++ status = "ok"; +++ phy0: ethernet-phy@0 { +++ reg = <3>; +++ }; +++ phy1: ethernet-phy@1 { +++ reg = <4>; +++ }; +++ }; +++ +++ +++ ess-switch@3a000000 { +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x08>; /* lan port bitmap */ +++ switch_wan_bmp = <0x10>; /* wan port bitmap */ +++ switch_inner_bmp = <0xc0>; /*inner port bitmap*/ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ +++ qcom,port_phyinfo { +++ port@3 { +++ port_id = <3>; +++ phy_address = <4>; +++ }; +++ port@4 { +++ port_id = <4>; +++ phy_address = <3>; +++ }; +++ }; +++ }; +++ +++ dp1 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <3>; +++ reg = <0x3a001400 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <4>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp2 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001600 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ +++ }; +++ +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ wps { +++ label = "wps"; +++ linux,code = ; +++ gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&leds_pins>; +++ pinctrl-names = "default"; +++ +++ led@25 { +++ label = "led_5g"; +++ gpios = <&tlmm 25 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:5g"; +++ default-state = "off"; +++ }; +++ led@24 { +++ label = "led_2g"; +++ gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:2g"; +++ default-state = "off"; +++ }; +++ led@18 { +++ label = "led_eth"; +++ gpios = <&tlmm 18 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:eth"; +++ default-state = "off"; +++ }; +++ led_power: led@16 { +++ label = "led_pwr"; +++ gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:power"; +++ default-state = "off"; +++ }; +++ }; +++ +++ gpio-watchdog { +++ compatible = "linux,wdt-gpio"; +++ gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; +++ hw_algo = "toggle"; +++ hw_margin_ms = <5000>; +++ always-running; +++ }; +++}; +++ +++&blsp1_uart3 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&blsp1_uart2 { +++ pinctrl-0 = <&uart2_pins>; +++ pinctrl-names = "default"; +++ dmas = <&blsp_dma 2>, +++ <&blsp_dma 3>; +++ dma-names = "tx", "rx"; +++ status = "ok"; +++}; +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "disabled"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&usb3 { +++ status = "ok"; +++}; +++ +++&nss_crypto { +++ status = "ok"; +++}; +++ +++&cpu0_opp_table { +++ compatible = "operating-points-v2"; +++ opp-shared; +++ opp03 { +++ opp-hz = /bits/ 64 <1200000000>; +++ opp-microvolt = <3>; +++ clock-latency-ns = <200000>; +++ }; +++ /delete-node/ opp04; +++ /delete-node/ opp05; +++ /delete-node/ opp06; +++}; +++ +++/* TZAPP is enabled in default memory profile only */ +++#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +++&qseecom { +++ mem-start = <0x49B00000>; +++ mem-size = <0x600000>; +++ status = "ok"; +++}; +++#endif ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf188n.dts ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cig-wf188n.dts ++@@ -0,0 +1,423 @@ +++/dts-v1/; +++/* +++ * Copyright (c) 2019, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++ +++#include "qcom-ipq6018.dtsi" +++#include "qcom-ipq6018-rpm-regulator.dtsi" +++#include "qcom-ipq6018-cpr-regulator.dtsi" +++#include "qcom-ipq6018-cp-cpu.dtsi" +++#include +++#include +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ model = "Cigtech WF-188n"; +++ compatible = "cig,wf188n", "qcom,ipq6018-cp03", "qcom,ipq6018"; +++ interrupt-parent = <&intc>; +++ +++ aliases { +++ serial0 = &blsp1_uart3; +++ serial1 = &blsp1_uart2; +++ +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet0 = "/soc/dp1"; +++ ethernet1 = "/soc/dp2"; +++ +++ led-boot = &led_power; +++ led-failsafe = &led_power; +++ led-running = &led_power; +++ led-upgrade = &led_power; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; +++ bootargs-append = " swiotlb=1 coherent_pool=2M"; +++ }; +++ +++ /* +++ * +=========+==============+========================+ +++ * | | | | +++ * | Region | Start Offset | Size | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | | | | +++ * | | | | +++ * | | | | +++ * | | | | +++ * | Linux | 0x41000000 | 139MB | +++ * | | | | +++ * | | | | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | TZ App | 0x49B00000 | 6MB | +++ * +--------+--------------+-------------------------+ +++ * +++ * From the available 145 MB for Linux in the first 256 MB, +++ * we are reserving 6 MB for TZAPP. +++ * +++ * Refer arch/arm64/boot/dts/qcom/qcom-ipq6018-memory.dtsi +++ * for memory layout. +++ */ +++ +++/* TZAPP is enabled only in default memory profile */ +++#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +++ reserved-memory { +++ tzapp:tzapp@49B00000 { /* TZAPPS */ +++ no-map; +++ reg = <0x0 0x49B00000 0x0 0x00600000>; +++ }; +++ }; +++#endif +++}; +++ +++&tlmm { +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio44", "gpio45"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ qpic_pad { +++ pins = "gpio1", "gpio3", "gpio4", +++ "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ button_pins: button_pins { +++ wps_button { +++ pins = "gpio22"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio64"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio65"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_2 { +++ pins = "gpio75"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ }; +++ +++ leds_pins: leds_pins { +++ led_5g { +++ pins = "gpio25"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_2g { +++ pins = "gpio24"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_eth { +++ pins = "gpio18"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_pwr { +++ pins = "gpio16"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ uart2_pins: uart2_pins { +++ mux { +++ pins = "gpio57", "gpio58"; +++ function = "blsp4_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++}; +++ +++&soc { +++ mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 75 0>; +++ status = "ok"; +++ phy0: ethernet-phy@0 { +++ reg = <3>; +++ }; +++ phy1: ethernet-phy@1 { +++ reg = <4>; +++ }; +++ }; +++ +++ +++ ess-switch@3a000000 { +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x08>; /* lan port bitmap */ +++ switch_wan_bmp = <0x10>; /* wan port bitmap */ +++ switch_inner_bmp = <0xc0>; /*inner port bitmap*/ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ +++ qcom,port_phyinfo { +++ port@3 { +++ port_id = <3>; +++ phy_address = <4>; +++ }; +++ port@4 { +++ port_id = <4>; +++ phy_address = <3>; +++ }; +++ }; +++ }; +++ +++ dp1 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <3>; +++ reg = <0x3a001400 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <4>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp2 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001600 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ +++ }; +++ +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ wps { +++ label = "wps"; +++ linux,code = ; +++ gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&leds_pins>; +++ pinctrl-names = "default"; +++ +++ led@25 { +++ label = "led_5g"; +++ gpios = <&tlmm 25 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:5g"; +++ default-state = "off"; +++ }; +++ led@24 { +++ label = "led_2g"; +++ gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:2g"; +++ default-state = "off"; +++ }; +++ led@18 { +++ label = "led_eth"; +++ gpios = <&tlmm 18 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:eth"; +++ default-state = "off"; +++ }; +++ led_power: led@16 { +++ label = "led_pwr"; +++ gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:power"; +++ default-state = "off"; +++ }; +++ }; +++ +++ gpio-watchdog { +++ compatible = "linux,wdt-gpio"; +++ gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; +++ hw_algo = "toggle"; +++ hw_margin_ms = <5000>; +++ always-running; +++ }; +++}; +++ +++&blsp1_uart3 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&blsp1_uart2 { +++ pinctrl-0 = <&uart2_pins>; +++ pinctrl-names = "default"; +++ dmas = <&blsp_dma 2>, +++ <&blsp_dma 3>; +++ dma-names = "tx", "rx"; +++ status = "ok"; +++}; +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&usb3 { +++ status = "ok"; +++}; +++ +++&nss_crypto { +++ status = "ok"; +++}; +++ +++&cpu0_opp_table { +++ compatible = "operating-points-v2"; +++ opp-shared; +++ opp03 { +++ opp-hz = /bits/ 64 <1200000000>; +++ opp-microvolt = <3>; +++ clock-latency-ns = <200000>; +++ }; +++ /delete-node/ opp04; +++ /delete-node/ opp05; +++ /delete-node/ opp06; +++}; +++ +++/* TZAPP is enabled in default memory profile only */ +++#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +++&qseecom { +++ mem-start = <0x49B00000>; +++ mem-size = <0x600000>; +++ status = "ok"; +++}; +++#endif +diff --git a/target/linux/ipq807x/patches/103-sercomm-wallaby.patch b/target/linux/ipq807x/patches/103-sercomm-wallaby.patch +new file mode 100644 +index 0000000000..c6d12fe963 +--- /dev/null ++++ b/target/linux/ipq807x/patches/103-sercomm-wallaby.patch +@@ -0,0 +1,816 @@ ++Index: linux-4.4.60-qsdk/arch/arm64/boot/dts/qcom/Makefile ++=================================================================== ++--- linux-4.4.60-qsdk.orig/arch/arm64/boot/dts/qcom/Makefile +++++ linux-4.4.60-qsdk/arch/arm64/boot/dts/qcom/Makefile ++@@ -30,6 +30,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \ ++ qcom-ipq807x-ac04.dtb \ ++ qcom-ipq807x-oak02.dtb \ ++ qcom-ipq807x-oak03.dtb \ +++ qcom-ipq807x-sercomm-wallaby.dtb \ ++ qcom-ipq807x-db.hk01.dtb \ ++ qcom-ipq807x-db.hk02.dtb ++ ++Index: linux-4.4.60-qsdk/arch/arm64/boot/dts/qcom/qcom-ipq807x-sercomm-wallaby.dts ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk/arch/arm64/boot/dts/qcom/qcom-ipq807x-sercomm-wallaby.dts ++@@ -0,0 +1,799 @@ +++/dts-v1/; +++/* +++ * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++#include "qcom-ipq807x-soc.dtsi" +++#include "qcom-ipq807x-hk-cpu.dtsi" +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ model = "Sercomm Wallaby"; +++ compatible = "sercomm,wallaby", "qcom,ipq807x-hk09", "qcom,ipq807x"; +++ qcom,msm-id = <0x156 0x0>; +++ interrupt-parent = <&intc>; +++ qcom,board-id = <0x8 0x0>; +++ qcom,pmic-id = <0x0 0x0 0x0 0x0>; +++ +++ aliases { +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet3 = "/soc/dp4"; +++ ethernet4 = "/soc/dp5"; +++ +++ led-boot = &led_green; +++ led-failsafe = &led_green; +++ led-running = &led_green; +++ led-upgrade = &led_blue; +++ }; +++}; +++ +++&tlmm { +++ pinctrl-0 = <&btcoex_pins>; +++ pinctrl-names = "default"; +++ +++ btcoex_pins: btcoex_pins { +++ mux_0 { +++ pins = "gpio64"; +++ function = "pta1_1"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ mux_1 { +++ pins = "gpio65"; +++ function = "pta1_2"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ mux_2 { +++ pins = "gpio66"; +++ function = "pta1_0"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio68"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio69"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_2 { +++ pins = "gpio25"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ mux_3 { +++ pins = "gpio44"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ }; +++ +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio23", "gpio24"; +++ function = "blsp4_uart1"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ spi_3_pins: spi_3_pins { +++ mux { +++ pins = "gpio50", "gpio52", "gpio53"; +++ function = "blsp3_spi"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ spi_cs { +++ pins = "gpio22"; +++ function = "blsp3_spi2"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ quartz_interrupt { +++ pins = "gpio47"; +++ function = "gpio"; +++ input; +++ bias-disable; +++ }; +++ quartz_reset { +++ pins = "gpio21"; +++ function = "gpio"; +++ output-low; +++ bias-disable; +++ }; +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ qpic_pad { +++ pins = "gpio1", "gpio3", "gpio4", +++ "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ hsuart_pins: hsuart_pins { +++ mux { +++ pins = "gpio46", "gpio47", "gpio48", "gpio49"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ button_pins: button_pins { +++ reset_button { +++ pins = "gpio33"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ led_pins: led_pins { +++ led_wan { +++ pins = "gpio31"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ +++ led_lan { +++ pins = "gpio32"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ +++ led_blue { +++ pins = "gpio60"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ +++ led_green { +++ pins = "gpio61"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ +++ led_red { +++ pins = "gpio62"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ usb_mux_sel_pins: usb_mux_pins { +++ mux { +++ pins = "gpio27"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ pcie0_pins: pcie_pins { +++ pcie0_rst { +++ pins = "gpio58"; +++ function = "pcie0_rst"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ pcie0_wake { +++ pins = "gpio59"; +++ function = "pcie0_wake"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++}; +++ +++&soc { +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ button@1 { +++ label = "reset"; +++ linux,code = ; +++ gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ mdio: mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 37 0 &tlmm 25 1 &tlmm 44 1>; +++ compatible = "qcom,ipq40xx-mdio", "qcom,qca-mdio"; +++ phy3: ethernet-phy@3 { +++ reg = <3>; +++ }; +++ phy4: ethernet-phy@4 { +++ reg = <4>; +++ }; +++ }; +++ +++ ess-switch@3a000000 { +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x10>; /* lan port bitmap */ +++ switch_wan_bmp = <0x20>; /* wan port bitmap */ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ +++ bm_tick_mode = <0>; /* bm tick mode */ +++ tm_tick_mode = <0>; /* tm tick mode */ +++ qcom,port_phyinfo { +++ port@0 { +++ port_id = <1>; +++ phy_address = <0>; +++ }; +++ port@1 { +++ port_id = <2>; +++ phy_address = <1>; +++ }; +++ port@2 { +++ port_id = <3>; +++ phy_address = <2>; +++ }; +++ port@3 { +++ port_id = <4>; +++ phy_address = <3>; +++ }; +++ port@4 { +++ port_id = <5>; +++ phy_address = <4>; +++/* port_mac_sel = "QGMAC_PORT"; */ +++ }; +++/* port@5 { +++ port_id = <6>; +++ phy_address = <28>; +++ port_mac_sel = "QGMAC_PORT"; +++ };*/ +++ }; +++ port_scheduler_resource { +++ port@0 { +++ port_id = <0>; +++ ucast_queue = <0 143>; +++ mcast_queue = <256 271>; +++ l0sp = <0 35>; +++ l0cdrr = <0 47>; +++ l0edrr = <0 47>; +++ l1cdrr = <0 7>; +++ l1edrr = <0 7>; +++ }; +++ port@1 { +++ port_id = <1>; +++ ucast_queue = <144 159>; +++ mcast_queue = <272 275>; +++ l0sp = <36 39>; +++ l0cdrr = <48 63>; +++ l0edrr = <48 63>; +++ l1cdrr = <8 11>; +++ l1edrr = <8 11>; +++ }; +++ port@2 { +++ port_id = <2>; +++ ucast_queue = <160 175>; +++ mcast_queue = <276 279>; +++ l0sp = <40 43>; +++ l0cdrr = <64 79>; +++ l0edrr = <64 79>; +++ l1cdrr = <12 15>; +++ l1edrr = <12 15>; +++ }; +++ port@3 { +++ port_id = <3>; +++ ucast_queue = <176 191>; +++ mcast_queue = <280 283>; +++ l0sp = <44 47>; +++ l0cdrr = <80 95>; +++ l0edrr = <80 95>; +++ l1cdrr = <16 19>; +++ l1edrr = <16 19>; +++ }; +++ port@4 { +++ port_id = <4>; +++ ucast_queue = <192 207>; +++ mcast_queue = <284 287>; +++ l0sp = <48 51>; +++ l0cdrr = <96 111>; +++ l0edrr = <96 111>; +++ l1cdrr = <20 23>; +++ l1edrr = <20 23>; +++ }; +++ port@5 { +++ port_id = <5>; +++ ucast_queue = <208 223>; +++ mcast_queue = <288 291>; +++ l0sp = <52 55>; +++ l0cdrr = <112 127>; +++ l0edrr = <112 127>; +++ l1cdrr = <24 27>; +++ l1edrr = <24 27>; +++ }; +++ port@6 { +++ port_id = <6>; +++ ucast_queue = <224 239>; +++ mcast_queue = <292 295>; +++ l0sp = <56 59>; +++ l0cdrr = <128 143>; +++ l0edrr = <128 143>; +++ l1cdrr = <28 31>; +++ l1edrr = <28 31>; +++ }; +++ port@7 { +++ port_id = <7>; +++ ucast_queue = <240 255>; +++ mcast_queue = <296 299>; +++ l0sp = <60 63>; +++ l0cdrr = <144 159>; +++ l0edrr = <144 159>; +++ l1cdrr = <32 35>; +++ l1edrr = <32 35>; +++ }; +++ }; +++ port_scheduler_config { +++ port@0 { +++ port_id = <0>; +++ l1scheduler { +++ group@0 { +++ sp = <0 1>; /*L0 SPs*/ +++ /*cpri cdrr epri edrr*/ +++ cfg = <0 0 0 0>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ /*unicast queues*/ +++ ucast_queue = <0 4 8>; +++ /*multicast queues*/ +++ mcast_queue = <256 260>; +++ /*sp cpri cdrr epri edrr*/ +++ cfg = <0 0 0 0 0>; +++ }; +++ group@1 { +++ ucast_queue = <1 5 9>; +++ mcast_queue = <257 261>; +++ cfg = <0 1 1 1 1>; +++ }; +++ group@2 { +++ ucast_queue = <2 6 10>; +++ mcast_queue = <258 262>; +++ cfg = <0 2 2 2 2>; +++ }; +++ group@3 { +++ ucast_queue = <3 7 11>; +++ mcast_queue = <259 263>; +++ cfg = <0 3 3 3 3>; +++ }; +++ }; +++ }; +++ port@1 { +++ port_id = <1>; +++ l1scheduler { +++ group@0 { +++ sp = <36>; +++ cfg = <0 8 0 8>; +++ }; +++ group@1 { +++ sp = <37>; +++ cfg = <1 9 1 9>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <144>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <272>; +++ mcast_loop_pri = <4>; +++ cfg = <36 0 48 0 48>; +++ }; +++ }; +++ }; +++ port@2 { +++ port_id = <2>; +++ l1scheduler { +++ group@0 { +++ sp = <40>; +++ cfg = <0 12 0 12>; +++ }; +++ group@1 { +++ sp = <41>; +++ cfg = <1 13 1 13>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <160>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <276>; +++ mcast_loop_pri = <4>; +++ cfg = <40 0 64 0 64>; +++ }; +++ }; +++ }; +++ port@3 { +++ port_id = <3>; +++ l1scheduler { +++ group@0 { +++ sp = <44>; +++ cfg = <0 16 0 16>; +++ }; +++ group@1 { +++ sp = <45>; +++ cfg = <1 17 1 17>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <176>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <280>; +++ mcast_loop_pri = <4>; +++ cfg = <44 0 80 0 80>; +++ }; +++ }; +++ }; +++ port@4 { +++ port_id = <4>; +++ l1scheduler { +++ group@0 { +++ sp = <48>; +++ cfg = <0 20 0 20>; +++ }; +++ group@1 { +++ sp = <49>; +++ cfg = <1 21 1 21>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <192>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <284>; +++ mcast_loop_pri = <4>; +++ cfg = <48 0 96 0 96>; +++ }; +++ }; +++ }; +++ port@5 { +++ port_id = <5>; +++ l1scheduler { +++ group@0 { +++ sp = <52>; +++ cfg = <0 24 0 24>; +++ }; +++ group@1 { +++ sp = <53>; +++ cfg = <1 25 1 25>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <208>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <288>; +++ mcast_loop_pri = <4>; +++ cfg = <52 0 112 0 112>; +++ }; +++ }; +++ }; +++ port@6 { +++ port_id = <6>; +++ l1scheduler { +++ group@0 { +++ sp = <56>; +++ cfg = <0 28 0 28>; +++ }; +++ group@1 { +++ sp = <57>; +++ cfg = <1 29 1 29>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <224>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <292>; +++ mcast_loop_pri = <4>; +++ cfg = <56 0 128 0 128>; +++ }; +++ }; +++ }; +++ port@7 { +++ port_id = <7>; +++ l1scheduler { +++ group@0 { +++ sp = <60>; +++ cfg = <0 32 0 32>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <240>; +++ mcast_queue = <296>; +++ cfg = <60 0 144 0 144>; +++ }; +++ }; +++ }; +++ }; +++ }; +++ +++ dp4 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001600 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp5 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <5>; +++ reg = <0x3a003000 0x3fff>; +++ qcom,mactype = <1>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <4>; +++ phy-mode = "sgmii"; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&led_pins>; +++ pinctrl-names = "default"; +++ +++ led_wan { +++ label = "wallaby:green:wan"; +++ gpio = <&tlmm 31 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ +++ led_lan { +++ label = "wallaby:green:lan"; +++ gpio = <&tlmm 32 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ +++ led_blue: led_blue { +++ label = "wallaby:blue:status"; +++ gpio = <&tlmm 60 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ +++ led_green: led_green { +++ label = "wallaby:green:status"; +++ gpio = <&tlmm 61 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ +++ led_red { +++ label = "wallaby:red:status"; +++ gpio = <&tlmm 62 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ +++ }; +++ nss-macsec0 { +++ compatible = "qcom,nss-macsec"; +++ phy_addr = <0x18>; +++ phy_access_mode = <0>; +++ mdiobus = <&mdio>; +++ }; +++ nss-macsec1 { +++ compatible = "qcom,nss-macsec"; +++ phy_addr = <0x1c>; +++ phy_access_mode = <0>; +++ mdiobus = <&mdio>; +++ }; +++}; +++ +++&serial_blsp4 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { /* BLSP1 QUP1 */ +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&spi_4 { /* BLSP1 QUP3 */ +++ pinctrl-0 = <&spi_3_pins>; +++ pinctrl-names = "default"; +++ cs-select = <2>; +++ quartz-reset-gpio = <&tlmm 21 1>; +++ status = "ok"; +++ spidev3: spi@3 { +++ compatible = "qca,spidev"; +++ reg = <0>; +++ spi-max-frequency = <24000000>; +++ }; +++}; +++ +++&serial_blsp2 { +++ status = "disabled"; +++}; +++ +++&msm_imem { +++ status = "disabled"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&ssphy_1 { +++ status = "ok"; +++}; +++ +++&qusb_phy_1 { +++ status = "ok"; +++}; +++ +++&usb3_0 { +++ status = "ok"; +++}; +++ +++&usb3_1 { +++ status = "ok"; +++}; +++ +++&cryptobam { +++ status = "ok"; +++}; +++ +++&crypto { +++ status = "ok"; +++}; +++ +++&i2c_0 { +++ status = "disabled"; +++}; +++ +++&i2c_1 { +++ status = "disabled"; +++}; +++ +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&qpic_lcd { +++ status = "disabled"; +++}; +++ +++&qpic_lcd_panel { +++ status = "disabled"; +++}; +++ +++&ledc { +++ status = "disabled"; +++}; +++ +++&pcie0 { +++ status = "disabled"; +++}; +++ +++&pcie1 { +++ status = "disabled"; +++}; +++ +diff --git a/target/linux/ipq807x/patches/104-wf194c.patch b/target/linux/ipq807x/patches/104-wf194c.patch +new file mode 100644 +index 0000000000..7e7f172688 +--- /dev/null ++++ b/target/linux/ipq807x/patches/104-wf194c.patch +@@ -0,0 +1,816 @@ ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/Makefile ++=================================================================== ++--- linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1.orig/arch/arm64/boot/dts/qcom/Makefile +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/Makefile ++@@ -55,7 +55,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \ ++ qcom-ipq807x-oak03.dtb \ ++ qcom-ipq807x-sercomm-wallaby.dtb \ ++ qcom-ipq807x-db.hk01.dtb \ ++- qcom-ipq807x-db.hk02.dtb +++ qcom-ipq807x-db.hk02.dtb \ +++ qcom-ipq807x-wf194c.dtb ++ endif ++ ++ always := $(dtb-y) ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq807x-wf194c.dts ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq807x-wf194c.dts ++@@ -0,0 +1,751 @@ +++/dts-v1/; +++/* +++ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++#include "qcom-ipq807x-soc.dtsi" +++#include "qcom-ipq807x-audio.dtsi" +++#include "qcom-ipq807x-hk-cpu.dtsi" +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ model = "CIG WF194C"; +++ compatible = "cig,wf194c", "qcom,ipq807x"; +++ qcom,msm-id = <0x143 0x0>, <0x158 0x0>, <0x186 0x0>, <0x188 0x0>; +++ interrupt-parent = <&intc>; +++ qcom,board-id = <0x8 0x0>; +++ qcom,pmic-id = <0x0 0x0 0x0 0x0>; +++ +++ aliases { +++ sdhc1 = &sdhc_1; /* SDC1 eMMC slot */ +++ sdhc2 = &sdhc_2; /* SDC2 SD slot */ +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet0 = "/soc/dp1"; +++ ethernet1 = "/soc/dp2"; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyMSM0,115200,n8 root=/dev/ram0 rw init=/init"; +++ #ifdef __IPQ_MEM_PROFILE_256_MB__ +++ bootargs-append = " swiotlb=1"; +++ #else +++ bootargs-append = " swiotlb=1 coherent_pool=2M"; +++ #endif +++ }; +++}; +++ +++&tlmm { +++ pinctrl-0 = <&btcoex_pins>; +++ pinctrl-names = "default"; +++ +++ btcoex_pins: btcoex_pins { +++ mux_0 { +++ pins = "gpio34"; +++ function = "gpio"; +++ drive-strength = <6>; +++ bias-pull-up; +++ output-high; +++ }; +++ mux_1 { +++ pins = "gpio62"; +++ function = "gpio"; +++ drive-strength = <6>; +++ bias-pull-up; +++ output-high; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio68"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio69"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio23", "gpio24"; +++ function = "blsp4_uart1"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ i2c_0_pins: i2c_0_pinmux { +++ mux { +++ pins = "gpio42", "gpio43"; +++ function = "blsp1_i2c"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ data_8 { +++ pins = "gpio16"; +++ function = "qpic_pad8"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ qpic_pad { +++ pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", +++ "gpio9", "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ sd_pins: sd_pins { +++ mux { +++ pins = "gpio63"; +++ function = "sd_card"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ hsuart_pins: hsuart_pins { +++ mux { +++ pins = "gpio48", "gpio49"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ leds_pins: leds_pinmux { +++ led1_r { +++ pins = "gpio54"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led1_g { +++ pins = "gpio55"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led2_r { +++ pins = "gpio56"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led2_g { +++ pins = "gpio64"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ +++ }; +++ +++ button_pins: button_pins { +++ wps_button { +++ pins = "gpio67"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ uniphy_pins: uniphy_pinmux { +++ mux_2 { +++ pins = "gpio37"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_3 { +++ pins = "gpio44"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ pwm_pins: pwm_pinmux { +++ mux_1 { +++ pins = "gpio25"; +++ function = "pwm02"; +++ drive-strength = <8>; +++ }; +++ }; +++}; +++ +++&soc { +++ pwm { +++ pinctrl-0 = <&pwm_pins>; +++ pinctrl-names = "default"; +++ used-pwm-indices = <1>, <0>, <0>, <0>; +++ status = "disabled"; +++ }; +++ +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ button@1 { +++ label = "wps"; +++ linux,code = ; +++ gpios = <&tlmm 67 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&leds_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++ +++ led@54 { +++ label = "wf194c:red:lan"; +++ gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ led@55 { +++ label = "wf194c:green:lan"; +++ gpios = <&tlmm 55 GPIO_ACTIVE_HIGH>; +++ default-state = "on"; +++ }; +++ led@56 { +++ label = "wf194c:red:wan"; +++ gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>; +++ default-state = "off"; +++ }; +++ led@64 { +++ label = "wf194c:green:wan"; +++ gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>; +++ default-state = "on"; +++ }; +++ }; +++ mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 37 0 &tlmm 44 0>; +++ phy0: ethernet-phy@0 { +++ reg = <0xf>; /*<0>*/ +++ }; +++ phy1: ethernet-phy@1 { +++ reg = <0xf>; +++ }; +++ phy2: ethernet-phy@2 { +++ reg = <0xf>; +++ }; +++ phy3: ethernet-phy@3 { +++ reg = <3>; +++ }; +++ phy4: ethernet-phy@4 { +++ reg = <4>; +++ }; +++ phy5: ethernet-phy@5 { +++ compatible ="ethernet-phy-ieee802.3-c45"; +++ reg = <0>; +++ }; +++ }; +++ +++ ess-switch@3a000000 { +++ pinctrl-0 = <&uniphy_pins>; +++ pinctrl-names = "default"; +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x30>; /*..0x3e lan port bitmap */ +++ switch_wan_bmp = <0x40>; /* wan port bitmap */ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xff>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xd>; /* mac mode for uniphy instance2*/ +++ bm_tick_mode = <0>; /* bm tick mode */ +++ tm_tick_mode = <0>; /* tm tick mode */ +++ port_scheduler_resource { +++ port@0 { +++ port_id = <0>; +++ ucast_queue = <0 143>; +++ mcast_queue = <256 271>; +++ l0sp = <0 35>; +++ l0cdrr = <0 47>; +++ l0edrr = <0 47>; +++ l1cdrr = <0 7>; +++ l1edrr = <0 7>; +++ }; +++ port@1 { +++ port_id = <1>; +++ ucast_queue = <144 159>; +++ mcast_queue = <272 275>; +++ l0sp = <36 39>; +++ l0cdrr = <48 63>; +++ l0edrr = <48 63>; +++ l1cdrr = <8 11>; +++ l1edrr = <8 11>; +++ }; +++ port@2 { +++ port_id = <2>; +++ ucast_queue = <160 175>; +++ mcast_queue = <276 279>; +++ l0sp = <40 43>; +++ l0cdrr = <64 79>; +++ l0edrr = <64 79>; +++ l1cdrr = <12 15>; +++ l1edrr = <12 15>; +++ }; +++ port@3 { +++ port_id = <3>; +++ ucast_queue = <176 191>; +++ mcast_queue = <280 283>; +++ l0sp = <44 47>; +++ l0cdrr = <80 95>; +++ l0edrr = <80 95>; +++ l1cdrr = <16 19>; +++ l1edrr = <16 19>; +++ }; +++ port@4 { +++ port_id = <4>; +++ ucast_queue = <192 207>; +++ mcast_queue = <284 287>; +++ l0sp = <48 51>; +++ l0cdrr = <96 111>; +++ l0edrr = <96 111>; +++ l1cdrr = <20 23>; +++ l1edrr = <20 23>; +++ }; +++ port@5 { +++ port_id = <5>; +++ ucast_queue = <208 223>; +++ mcast_queue = <288 291>; +++ l0sp = <52 55>; +++ l0cdrr = <112 127>; +++ l0edrr = <112 127>; +++ l1cdrr = <24 27>; +++ l1edrr = <24 27>; +++ }; +++ port@6 { +++ port_id = <6>; +++ ucast_queue = <224 239>; +++ mcast_queue = <292 295>; +++ l0sp = <56 59>; +++ l0cdrr = <128 143>; +++ l0edrr = <128 143>; +++ l1cdrr = <28 31>; +++ l1edrr = <28 31>; +++ }; +++ port@7 { +++ port_id = <7>; +++ ucast_queue = <240 255>; +++ mcast_queue = <296 299>; +++ l0sp = <60 63>; +++ l0cdrr = <144 159>; +++ l0edrr = <144 159>; +++ l1cdrr = <32 35>; +++ l1edrr = <32 35>; +++ }; +++ }; +++ port_scheduler_config { +++ port@0 { +++ port_id = <0>; +++ l1scheduler { +++ group@0 { +++ sp = <0 1>; /*L0 SPs*/ +++ /*cpri cdrr epri edrr*/ +++ cfg = <0 0 0 0>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ /*unicast queues*/ +++ ucast_queue = <0 4 8>; +++ /*multicast queues*/ +++ mcast_queue = <256 260>; +++ /*sp cpri cdrr epri edrr*/ +++ cfg = <0 0 0 0 0>; +++ }; +++ group@1 { +++ ucast_queue = <1 5 9>; +++ mcast_queue = <257 261>; +++ cfg = <0 1 1 1 1>; +++ }; +++ group@2 { +++ ucast_queue = <2 6 10>; +++ mcast_queue = <258 262>; +++ cfg = <0 2 2 2 2>; +++ }; +++ group@3 { +++ ucast_queue = <3 7 11>; +++ mcast_queue = <259 263>; +++ cfg = <0 3 3 3 3>; +++ }; +++ }; +++ }; +++ port@1 { +++ port_id = <1>; +++ l1scheduler { +++ group@0 { +++ sp = <36>; +++ cfg = <0 8 0 8>; +++ }; +++ group@1 { +++ sp = <37>; +++ cfg = <1 9 1 9>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <144>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <272>; +++ mcast_loop_pri = <4>; +++ cfg = <36 0 48 0 48>; +++ }; +++ }; +++ }; +++ port@2 { +++ port_id = <2>; +++ l1scheduler { +++ group@0 { +++ sp = <40>; +++ cfg = <0 12 0 12>; +++ }; +++ group@1 { +++ sp = <41>; +++ cfg = <1 13 1 13>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <160>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <276>; +++ mcast_loop_pri = <4>; +++ cfg = <40 0 64 0 64>; +++ }; +++ }; +++ }; +++ port@3 { +++ port_id = <3>; +++ l1scheduler { +++ group@0 { +++ sp = <44>; +++ cfg = <0 16 0 16>; +++ }; +++ group@1 { +++ sp = <45>; +++ cfg = <1 17 1 17>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <176>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <280>; +++ mcast_loop_pri = <4>; +++ cfg = <44 0 80 0 80>; +++ }; +++ }; +++ }; +++ port@4 { +++ port_id = <4>; +++ l1scheduler { +++ group@0 { +++ sp = <48>; +++ cfg = <0 20 0 20>; +++ }; +++ group@1 { +++ sp = <49>; +++ cfg = <1 21 1 21>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <192>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <284>; +++ mcast_loop_pri = <4>; +++ cfg = <48 0 96 0 96>; +++ }; +++ }; +++ }; +++ port@5 { +++ port_id = <5>; +++ l1scheduler { +++ group@0 { +++ sp = <52>; +++ cfg = <0 24 0 24>; +++ }; +++ group@1 { +++ sp = <53>; +++ cfg = <1 25 1 25>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <208>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <288>; +++ mcast_loop_pri = <4>; +++ cfg = <52 0 112 0 112>; +++ }; +++ }; +++ }; +++ port@6 { +++ port_id = <6>; +++ l1scheduler { +++ group@0 { +++ sp = <56>; +++ cfg = <0 28 0 28>; +++ }; +++ group@1 { +++ sp = <57>; +++ cfg = <1 29 1 29>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <224>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <292>; +++ mcast_loop_pri = <4>; +++ cfg = <56 0 128 0 128>; +++ }; +++ }; +++ }; +++ port@7 { +++ port_id = <7>; +++ l1scheduler { +++ group@0 { +++ sp = <60>; +++ cfg = <0 32 0 32>; +++ }; +++ group@1 { +++ sp = <61>; +++ cfg = <1 33 1 33>; +++ }; +++ }; +++ l0scheduler { +++ group@0 { +++ ucast_queue = <240>; +++ ucast_loop_pri = <16>; +++ mcast_queue = <296>; +++ cfg = <60 0 144 0 144>; +++ }; +++ }; +++ }; +++ }; +++ }; +++ dp1 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001600 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ }; +++ dp2 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <6>; +++ reg = <0x3a007000 0x3fff>; +++ qcom,mactype = <1>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <0>; +++ phy-mode = "sgmii"; +++ }; +++}; +++ +++&serial_blsp4 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { /* BLSP1 QUP1 */ +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&serial_blsp2 { +++ pinctrl-0 = <&hsuart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&msm_imem { +++ status = "enabled"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&ssphy_1 { +++ status = "ok"; +++}; +++ +++&qusb_phy_1 { +++ status = "ok"; +++}; +++ +++&usb3_0 { +++ status = "ok"; +++}; +++ +++&usb3_1 { +++ status = "ok"; +++}; +++ +++&cryptobam { +++ status = "ok"; +++}; +++ +++&crypto { +++ status = "ok"; +++}; +++ +++&i2c_0 { +++ pinctrl-0 = <&i2c_0_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&i2c_1 { +++ status = "disabled"; +++}; +++ +++&sdhc_1 { +++ qcom,clk-rates = <400000 25000000 50000000 100000000 \ +++ 192000000 384000000>; +++ qcom,bus-speed-mode = "HS400_1p8v", "HS200_1p8v", "DDR_1p8v"; +++ qcom,nonremovable; +++ status = "ok"; +++}; +++ +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&sdhc_2 { +++ qcom,clk-rates = <400000 25000000 50000000 100000000 \ +++ 192000000>; +++ qcom,bus-speed-mode = "HS200_1p8v", "DDR_1p8v"; +++ pinctrl-0 = <&sd_pins>; +++ pinctrl-names = "default"; +++ cd-gpios = <&tlmm 63 1>; +++ sd-ldo-gpios = <&tlmm 21 0>; +++ vqmmc-supply = <&ldo11>; +++ status = "ok"; +++}; +++ +++&qpic_lcd { +++ status = "ok"; +++}; +++ +++&qpic_lcd_panel { +++ status = "ok"; +++}; ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/drivers/net/phy/aquantia.c ++=================================================================== ++--- linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1.orig/drivers/net/phy/aquantia.c +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/drivers/net/phy/aquantia.c ++@@ -32,6 +32,7 @@ ++ #define PHY_ID_AQR112 0x03a1b660 ++ #define PHY_ID_AQR113C 0x31c31C10 ++ #define PHY_ID_AQR112C 0x03a1b792 +++#define PHY_ID_AQR114C 0x31c31C22 ++ ++ #define AQ_PHY_MAX_VALID_MMD_REG 0xff01 ++ #define AQ_PHY_MAX_INVALID_MMD_REG 0xffff ++@@ -756,6 +757,25 @@ static struct phy_driver aquantia_driver ++ .update_link = aquantia_update_link, ++ .driver = { .owner = THIS_MODULE,}, ++ }, +++{ +++ .phy_id = PHY_ID_AQR114C, +++ .phy_id_mask = 0xfffffff0, +++ .name = "Aquantia AQR114C", +++ .features = PHY_AQUANTIA_FEATURES, +++ .flags = PHY_HAS_INTERRUPT, +++ .probe = aquantia_phy_probe, +++ .soft_reset = aquantia_soft_reset, +++ .config_init = aquantia_config_init, +++ .aneg_done = aquantia_aneg_done, +++ .config_aneg = aquantia_config_aneg, +++ .config_intr = aquantia_config_intr, +++ .ack_interrupt = aquantia_ack_interrupt, +++ .read_status = aquantia_read_status, +++ .suspend = aquantia_suspend, +++ .resume = aquantia_resume, +++ .update_link = aquantia_update_link, +++ .driver = { .owner = THIS_MODULE,}, +++}, ++ }; ++ ++ module_phy_driver(aquantia_driver); ++@@ -773,6 +793,7 @@ static struct mdio_device_id __maybe_unu ++ { PHY_ID_AQR112, 0xfffffff0 }, ++ { PHY_ID_AQR113C, 0xfffffff0 }, ++ { PHY_ID_AQR112C, 0xfffffff0 }, +++ { PHY_ID_AQR114C, 0xfffffff0 }, ++ { } ++ }; ++ +diff --git a/target/linux/ipq807x/patches/105-fix-dtc-gcc10-build.patch b/target/linux/ipq807x/patches/105-fix-dtc-gcc10-build.patch +new file mode 100644 +index 0000000000..f91601ec59 +--- /dev/null ++++ b/target/linux/ipq807x/patches/105-fix-dtc-gcc10-build.patch +@@ -0,0 +1,11 @@ ++--- a/scripts/dtc/dtc-lexer.lex.c_shipped +++++ b/scripts/dtc/dtc-lexer.lex.c_shipped ++@@ -637,7 +637,7 @@ char *yytext; ++ #include "srcpos.h" ++ #include "dtc-parser.tab.h" ++ ++-YYLTYPE yylloc; +++extern YYLTYPE yylloc; ++ extern bool treesource_error; ++ ++ /* CAUTION: this will stop working if we ever use yyless() or yyunput() */ +diff --git a/target/linux/ipq807x/patches/106-eap101.patch b/target/linux/ipq807x/patches/106-eap101.patch +new file mode 100644 +index 0000000000..6b0eb2f831 +--- /dev/null ++++ b/target/linux/ipq807x/patches/106-eap101.patch +@@ -0,0 +1,975 @@ ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cp01-edgecore.dtsi ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-cp01-edgecore.dtsi ++@@ -0,0 +1,542 @@ +++/* +++ * Copyright (c) 2019, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++ +++#include "qcom-ipq6018.dtsi" +++#include +++#include +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ compatible = "qcom,ipq6018-cp01", "qcom,ipq6018"; +++ interrupt-parent = <&intc>; +++ qcom,msm-id = <0x192 0x0>, <0x193 0x0>; +++ +++ aliases { +++ serial0 = &blsp1_uart3; +++ serial1 = &blsp1_uart2; +++ sdhc2 = &sdhc_2; +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet0 = "/soc/dp1"; +++ ethernet1 = "/soc/dp2"; +++ ethernet2 = "/soc/dp3"; +++ +++ led-boot = &led_power; +++ led-failsafe = &led_power; +++ led-running = &led_power; +++ led-upgrade = &led_power; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; +++#ifdef __IPQ_MEM_PROFILE_256_MB__ +++ bootargs-append = " swiotlb=1"; +++#else +++ bootargs-append = " swiotlb=1 coherent_pool=2M"; +++#endif +++ }; +++ +++}; +++ +++&tlmm { +++ pinctrl-0 = <&sd_ldo_pins>; +++ pinctrl-names = "default"; +++ +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio44", "gpio45"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ sd_ldo_pins: sd_ldo_pins { +++ mux { +++ pins = "gpio66"; +++ function = "gpio"; +++ drive-strength = <2>; +++ bias-disable; +++ output-low; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ spi_1_pins: spi_1_pins { +++ mux { +++ pins = "gpio69", "gpio71", "gpio72"; +++ function = "blsp1_spi"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ spi_cs { +++ pins = "gpio70"; +++ function = "blsp1_spi"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ quartz_interrupt { +++ pins = "gpio78"; +++ function = "gpio"; +++ input; +++ bias-disable; +++ }; +++ quartz_reset { +++ pins = "gpio79"; +++ function = "gpio"; +++ output-low; +++ bias-disable; +++ }; +++ +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ qpic_pad { +++ pins = "gpio1", "gpio3", "gpio4", +++ "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ sd_pins: sd_pins { +++ mux { +++ pins = "gpio62"; +++ function = "sd_card"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ extcon_usb_pins: extcon_usb_pins { +++ mux { +++ pins = "gpio26"; +++ function = "gpio"; +++ drive-strength = <2>; +++ bias-pull-down; +++ }; +++ }; +++ +++ button_pins: button_pins { +++ wps_button { +++ pins = "gpio9"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ reset_button { +++ pins = "gpio19"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio64"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio65"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_2 { +++ pins = "gpio75"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ mux_3 { +++ pins = "gpio77"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ }; +++ +++ leds_pins: leds_pins { +++ led_pwr { +++ pins = "gpio74"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_5g { +++ pins = "gpio35"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_2g { +++ pins = "gpio37"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_wan { +++ pins = "gpio62"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_lan1 { +++ pins = "gpio61"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_lan2 { +++ pins = "gpio63"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_bt { +++ pins = "gpio73"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ hsuart_pins: hsuart_pins { +++ mux { +++ pins = "gpio71", "gpio72", "gpio69", "gpio70"; +++ function = "blsp1_uart"; +++ drive-strength = <8>; +++ bias-disable; +++ }; +++ }; +++ +++ btcoex_pins: btcoex_pins { +++ mux_0 { +++ pins = "gpio51"; +++ function = "pta1_1"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ mux_1 { +++ pins = "gpio53"; +++ function = "pta1_0"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ mux_2 { +++ pins = "gpio52"; +++ function = "pta1_2"; +++ drive-strength = <6>; +++ bias-pull-down; +++ }; +++ }; +++}; +++ +++&soc { +++ extcon_usb: extcon_usb { +++ pinctrl-0 = <&extcon_usb_pins>; +++ pinctrl-names = "default"; +++ id-gpio = <&tlmm 26 GPIO_ACTIVE_LOW>; +++ status = "ok"; +++ }; +++ +++ mdio: mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 75 0 &tlmm 77 1>; +++ status = "ok"; +++ phy0: ethernet-phy@0 { +++ reg = <0x1c>; +++ }; +++ phy1: ethernet-phy@1 { +++ reg = <3>; +++ }; +++ phy2: ethernet-phy@2 { +++ reg = <4>; +++ }; +++ }; +++ +++ dp1 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <5>; +++ reg = <0x3a001000 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <28>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp2 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001200 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp3 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <3>; +++ reg = <0x3a001400 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <4>; +++ phy-mode = "sgmii"; +++ }; +++ +++ +++ nss-macsec0 { +++ compatible = "qcom,nss-macsec"; +++ phy_addr = <0x1c>; +++ phy_access_mode = <0>; +++ mdiobus = <&mdio>; +++ }; +++ +++ ess-switch@3a000000 { +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x1e>; /* lan port bitmap */ +++ switch_wan_bmp = <0x20>; /* wan port bitmap */ +++ switch_inner_bmp = <0xc0>; /*inner port bitmap*/ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ +++ qcom,port_phyinfo { +++ port@2 { +++ port_id = <3>; +++ phy_address = <4>; +++ }; +++ port@1 { +++ port_id = <4>; +++ phy_address = <3>; +++ }; +++ port@0 { +++ port_id = <5>; +++ phy_address = <0x1c>; +++ port_mac_sel = "QGMAC_PORT"; +++ }; +++ }; +++ }; +++ +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ /*wps { +++ label = "wps"; +++ linux,code = ; +++ gpios = <&tlmm 9 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ };*/ +++ reset { +++ label = "reset"; +++ linux,code = ; +++ gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&leds_pins>; +++ pinctrl-names = "default"; +++ +++ led_power: led@74 { +++ label = "green:power"; +++ gpios = <&tlmm 74 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "led_pwr"; +++ default-state = "on"; +++ }; +++ led@35 { +++ label = "green:wifi5"; +++ gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "led_5g"; +++ default-state = "off"; +++ }; +++ led@37 { +++ label = "green:wifi2"; +++ gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "led_2g"; +++ default-state = "off"; +++ }; +++ }; +++}; +++ +++&blsp1_uart3 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&blsp1_uart2 { +++ pinctrl-0 = <&hsuart_pins &btcoex_pins>; +++ pinctrl-names = "default"; +++ dmas = <&blsp_dma 2>, +++ <&blsp_dma 3>; +++ dma-names = "tx", "rx"; +++ status = "ok"; +++}; +++ +++&spi_1 { /* BLSP1 QUP1 */ +++ pinctrl-0 = <&spi_1_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ quartz-reset-gpio = <&tlmm 79 1>; +++ status = "disabled"; +++ spidev1: spi@1 { +++ compatible = "qca,spidev"; +++ reg = <0>; +++ spi-max-frequency = <24000000>; +++ }; +++}; +++ +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_1 { +++ status = "ok"; +++}; +++ +++&usb2 { +++ status = "ok"; +++}; +++ +++&usb3 { +++ status = "ok"; +++}; +++ +++&nss_crypto { +++ status = "ok"; +++}; +++ +++&pcie_phy { +++ status = "ok"; +++}; +++ +++&pcie0 { +++ status = "ok"; +++}; +++ +++&qpic_lcd { +++ status = "ok"; +++}; +++ +++&qpic_lcd_panel { +++ status = "ok"; +++}; ++Index: linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-edgecore-eap101.dts ++=================================================================== ++--- /dev/null +++++ linux-4.4.60-qsdk-ad8f8efb2edcd35cdb130466cfc1923c37ef7ec1/arch/arm64/boot/dts/qcom/qcom-ipq6018-edgecore-eap101.dts ++@@ -0,0 +1,423 @@ +++/dts-v1/; +++/* +++ * Copyright (c) 2019, The Linux Foundation. All rights reserved. +++ * +++ * Permission to use, copy, modify, and/or distribute this software for any +++ * purpose with or without fee is hereby granted, provided that the above +++ * copyright notice and this permission notice appear in all copies. +++ * +++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +++ */ +++ +++#include "qcom-ipq6018.dtsi" +++#include "qcom-ipq6018-rpm-regulator.dtsi" +++#include "qcom-ipq6018-cpr-regulator.dtsi" +++#include "qcom-ipq6018-cp-cpu.dtsi" +++#include +++#include +++ +++/ { +++ #address-cells = <0x2>; +++ #size-cells = <0x2>; +++ model = "EdgeCore EAP101"; +++ compatible = "edgecore,eap101", "qcom,ipq6018-cp01", "qcom,ipq6018"; +++ interrupt-parent = <&intc>; +++ +++ aliases { +++ serial0 = &blsp1_uart3; +++ serial1 = &blsp1_uart2; +++ +++ /* +++ * Aliases as required by u-boot +++ * to patch MAC addresses +++ */ +++ ethernet0 = "/soc/dp1"; +++ ethernet1 = "/soc/dp2"; +++ +++ led-boot = &led_power; +++ led-failsafe = &led_power; +++ led-running = &led_power; +++ led-upgrade = &led_power; +++ }; +++ +++ chosen { +++ bootargs = "console=ttyMSM0,115200,n8 rw init=/init"; +++ bootargs-append = " console=ttyMSM0,115200,n8 swiotlb=1 coherent_pool=2M"; +++ }; +++ +++ /* +++ * +=========+==============+========================+ +++ * | | | | +++ * | Region | Start Offset | Size | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | | | | +++ * | | | | +++ * | | | | +++ * | | | | +++ * | Linux | 0x41000000 | 139MB | +++ * | | | | +++ * | | | | +++ * | | | | +++ * +--------+--------------+-------------------------+ +++ * | TZ App | 0x49B00000 | 6MB | +++ * +--------+--------------+-------------------------+ +++ * +++ * From the available 145 MB for Linux in the first 256 MB, +++ * we are reserving 6 MB for TZAPP. +++ * +++ * Refer arch/arm64/boot/dts/qcom/qcom-ipq6018-memory.dtsi +++ * for memory layout. +++ */ +++ +++/* TZAPP is enabled only in default memory profile */ +++#if !defined(__IPQ_MEM_PROFILE_256_MB__) && !defined(__IPQ_MEM_PROFILE_512_MB__) +++ reserved-memory { +++ tzapp:tzapp@49B00000 { /* TZAPPS */ +++ no-map; +++ reg = <0x0 0x49B00000 0x0 0x00600000>; +++ }; +++ }; +++#endif +++}; +++ +++&tlmm { +++ uart_pins: uart_pins { +++ mux { +++ pins = "gpio44", "gpio45"; +++ function = "blsp2_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ spi_0_pins: spi_0_pins { +++ mux { +++ pins = "gpio38", "gpio39", "gpio40", "gpio41"; +++ function = "blsp0_spi"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ qpic_pins: qpic_pins { +++ data_0 { +++ pins = "gpio15"; +++ function = "qpic_pad0"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_1 { +++ pins = "gpio12"; +++ function = "qpic_pad1"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_2 { +++ pins = "gpio13"; +++ function = "qpic_pad2"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_3 { +++ pins = "gpio14"; +++ function = "qpic_pad3"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_4 { +++ pins = "gpio5"; +++ function = "qpic_pad4"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_5 { +++ pins = "gpio6"; +++ function = "qpic_pad5"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_6 { +++ pins = "gpio7"; +++ function = "qpic_pad6"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ data_7 { +++ pins = "gpio8"; +++ function = "qpic_pad7"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ qpic_pad { +++ pins = "gpio1", "gpio3", "gpio4", +++ "gpio10", "gpio11", "gpio17"; +++ function = "qpic_pad"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ +++ extcon_usb_pins: extcon_usb_pins { +++ mux { +++ pins = "gpio26"; +++ function = "gpio"; +++ drive-strength = <2>; +++ bias-pull-down; +++ }; +++ }; +++ +++ button_pins: button_pins { +++ wps_button { +++ pins = "gpio19"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ }; +++ +++ mdio_pins: mdio_pinmux { +++ mux_0 { +++ pins = "gpio64"; +++ function = "mdc"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_1 { +++ pins = "gpio65"; +++ function = "mdio"; +++ drive-strength = <8>; +++ bias-pull-up; +++ }; +++ mux_2 { +++ pins = "gpio75"; +++ function = "gpio"; +++ bias-pull-up; +++ }; +++ }; +++ +++ leds_pins: leds_pins { +++ led_pwr { +++ pins = "gpio74"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_5g { +++ pins = "gpio35"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ led_2g { +++ pins = "gpio37"; +++ function = "gpio"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++ uart2_pins: uart2_pins { +++ mux { +++ pins = "gpio57", "gpio58"; +++ function = "blsp4_uart"; +++ drive-strength = <8>; +++ bias-pull-down; +++ }; +++ }; +++}; +++ +++&soc { +++ extcon_usb: extcon_usb { +++ pinctrl-0 = <&extcon_usb_pins>; +++ pinctrl-names = "default"; +++ id-gpio = <&tlmm 26 GPIO_ACTIVE_LOW>; +++ status = "ok"; +++ }; +++ +++ mdio: mdio@90000 { +++ pinctrl-0 = <&mdio_pins>; +++ pinctrl-names = "default"; +++ phy-reset-gpio = <&tlmm 75 0 &tlmm 77 1>; +++ status = "ok"; +++ phy0: ethernet-phy@0 { +++ reg = <0x1c>; +++ }; +++ phy1: ethernet-phy@1 { +++ reg = <3>; +++ }; +++ phy2: ethernet-phy@2 { +++ reg = <4>; +++ }; +++ }; +++ +++ dp1 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <5>; +++ reg = <0x3a001000 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <28>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp2 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <4>; +++ reg = <0x3a001200 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <3>; +++ phy-mode = "sgmii"; +++ }; +++ +++ dp3 { +++ device_type = "network"; +++ compatible = "qcom,nss-dp"; +++ qcom,id = <3>; +++ reg = <0x3a001400 0x200>; +++ qcom,mactype = <0>; +++ local-mac-address = [000000000000]; +++ qcom,link-poll = <1>; +++ qcom,phy-mdio-addr = <4>; +++ phy-mode = "sgmii"; +++ }; +++ +++ ess-switch@3a000000 { +++ switch_cpu_bmp = <0x1>; /* cpu port bitmap */ +++ switch_lan_bmp = <0x1e>; /* lan port bitmap */ +++ switch_wan_bmp = <0x20>; /* wan port bitmap */ +++ switch_inner_bmp = <0xc0>; /*inner port bitmap*/ +++ switch_mac_mode = <0x0>; /* mac mode for uniphy instance0*/ +++ switch_mac_mode1 = <0xf>; /* mac mode for uniphy instance1*/ +++ switch_mac_mode2 = <0xff>; /* mac mode for uniphy instance2*/ +++ qcom,port_phyinfo { +++ port@2 { +++ port_id = <3>; +++ phy_address = <4>; +++ }; +++ port@1 { +++ port_id = <4>; +++ phy_address = <3>; +++ }; +++ port@0 { +++ port_id = <5>; +++ phy_address = <0x1c>; +++ port_mac_sel = "QGMAC_PORT"; +++ }; +++ }; +++ }; +++ +++ gpio_keys { +++ compatible = "gpio-keys"; +++ pinctrl-0 = <&button_pins>; +++ pinctrl-names = "default"; +++ +++ wps { +++ label = "reset"; +++ linux,code = ; +++ gpios = <&tlmm 19 GPIO_ACTIVE_LOW>; +++ linux,input-type = <1>; +++ debounce-interval = <60>; +++ }; +++ }; +++ +++ leds { +++ compatible = "gpio-leds"; +++ pinctrl-0 = <&leds_pins>; +++ pinctrl-names = "default"; +++ +++ led@25 { +++ label = "wifi5g"; +++ gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:5g"; +++ default-state = "off"; +++ }; +++ led@24 { +++ label = "wifi2g"; +++ gpios = <&tlmm 37 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "wf188:green:2g"; +++ default-state = "off"; +++ }; +++ led_power: led@16 { +++ label = "led_pwr"; +++ gpios = <&tlmm 74 GPIO_ACTIVE_HIGH>; +++ linux,default-trigger = "green:power"; +++ default-state = "off"; +++ }; +++ }; +++}; +++ +++&blsp1_uart3 { +++ pinctrl-0 = <&uart_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&spi_0 { +++ pinctrl-0 = <&spi_0_pins>; +++ pinctrl-names = "default"; +++ cs-select = <0>; +++ status = "ok"; +++ +++ m25p80@0 { +++ #address-cells = <1>; +++ #size-cells = <1>; +++ reg = <0>; +++ compatible = "n25q128a11"; +++ linux,modalias = "m25p80", "n25q128a11"; +++ spi-max-frequency = <50000000>; +++ use-default-sizes; +++ }; +++}; +++ +++&blsp1_uart2 { +++ pinctrl-0 = <&uart2_pins>; +++ pinctrl-names = "default"; +++ dmas = <&blsp_dma 2>, +++ <&blsp_dma 3>; +++ dma-names = "tx", "rx"; +++ status = "ok"; +++}; +++&qpic_bam { +++ status = "ok"; +++}; +++ +++&nand { +++ pinctrl-0 = <&qpic_pins>; +++ pinctrl-names = "default"; +++ status = "ok"; +++}; +++ +++&ssphy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_0 { +++ status = "ok"; +++}; +++ +++&qusb_phy_1 { +++ status = "ok"; +++}; +++ +++&usb2 { +++ status = "ok"; +++}; +++ +++&usb3 { +++ status = "ok"; +++}; +++ +++&nss_crypto { +++ status = "ok"; +++}; +diff --git a/target/linux/ipq807x/patches/107-ed2-compile.patch b/target/linux/ipq807x/patches/107-ed2-compile.patch +new file mode 100644 +index 0000000000..8122f9ee7d +--- /dev/null ++++ b/target/linux/ipq807x/patches/107-ed2-compile.patch +@@ -0,0 +1,12 @@ ++Index: linux-4.4.60-qsdk-10fd7d14853b7020b804acae690c8acec5d954ce/include/linux/qcom_scm.h ++=================================================================== ++--- linux-4.4.60-qsdk-10fd7d14853b7020b804acae690c8acec5d954ce.orig/include/linux/qcom_scm.h +++++ linux-4.4.60-qsdk-10fd7d14853b7020b804acae690c8acec5d954ce/include/linux/qcom_scm.h ++@@ -14,6 +14,7 @@ ++ #define __QCOM_SCM_H ++ ++ #include +++#include ++ ++ #define QCOM_KERNEL_AUTH_CMD 0x15 ++ #define QCOM_SCM_PAS_AUTH_DEBUG_RESET_CMD 0x14 +-- +2.25.1 + diff --git a/patches-20.x/0021-ath10k-ct-firmware-update-to-latest-version.patch b/patches-20.x/0021-ath10k-ct-firmware-update-to-latest-version.patch new file mode 100644 index 000000000..03dc85d0a --- /dev/null +++ b/patches-20.x/0021-ath10k-ct-firmware-update-to-latest-version.patch @@ -0,0 +1,661 @@ +From 84c598f08f15e322c688b23a34d989ea02f97149 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 2 Dec 2020 08:46:24 +0100 +Subject: [PATCH 21/25] ath10k-ct-firmware: update to latest version + +Signed-off-by: John Crispin +--- + package/firmware/ath10k-ct-firmware/Makefile | 342 +++++++++++-------- + 1 file changed, 202 insertions(+), 140 deletions(-) + +diff --git a/package/firmware/ath10k-ct-firmware/Makefile b/package/firmware/ath10k-ct-firmware/Makefile +index 83e5563e64..ce92567b51 100644 +--- a/package/firmware/ath10k-ct-firmware/Makefile ++++ b/package/firmware/ath10k-ct-firmware/Makefile +@@ -1,11 +1,102 @@ + include $(TOPDIR)/rules.mk + + PKG_NAME:=ath10k-ct-firmware +-PKG_VERSION:=2020-07-02 +-PKG_RELEASE:=3 ++PKG_VERSION:=2020-10-07 ++PKG_RELEASE:=2 ++CTVER1=021 ++CTVER2=021 ++ ++# From fw_lede.bash, or can do it manually as well. ++H988XFC=a4c3d1e2fb80f6b8b9738c7189795ab9505e6c09efc12ba5f08ee7f49e934239 ++H988XFCH=93108bd0870652860cdb57749f5a12205ecb15bb1f129d916ad73b6f06406c82 ++H9887FC=459692deb186a63ab8eeddb7ad5d54779266e68ca686e7c46062554db6dca12b ++H9887FCH=fd126a457d0927d0c8ea10d66ef5b67d5e1e0741f8692bb3016bb602d0af3098 ++H9980FC=52300e9d128c3d506e0b133d7a7964df3115f9511f1b574ef2a0767972c063bd ++H9980FCH=9c20c3a44b701f8fef0fe02f156e382b36b717fb56c76d540f6eac2077ec189b ++H9980CH=55f27045e7cf87a6a5656a050771d6d7a6197153a0737288a702c0836d5c6572 ++H9980FHQ=add509b2a15ba90869f403c2e4440dbb91bd7037188d8468249cf1263adfd44e ++H9984FC=e6354a1547a308b4b0fe4cbc29693848c234acedd9e7a483a1b4fb5f9bbf0dc0 ++H9984FCH=6e19ecd0b001ffb594a8b033deb2007595b8c0402402789b7de55b208639ebec ++H9984CH=7b6fdf3d970f3eff7c34df476c934a9bebb4f289b7968067950d31b82c71bb07 ++H9984FHQ=f6a5d5a3a7b2c9267dc31673a19ee3b5312a2f84f26123cb5e8c000428ed76d2 ++H4019FC=cde992cb328680e81cf85e195554699bcceef065c0c696ce4ef90c3311ab11fb ++H4019FCH=818afeb1226389357dfde754d641f936fb82ebe78607f10e15efd5c952a54f48 ++H4019CH=30ba10f0d82116c6617cb58c3df5cc81e5ed8f29dbc8f95c0ca9c5013ce4f702 ++H4019FHQ=8e4161f7bed5bd56513ca5caab582a6eee64e9e14a69f4de67587563b7b4d735 ++H9888FC=d24e66bdb2f1098a2e06ff20fe037e31937e1a483e87c68827830513b4233b5d ++H9888FCH=5891e1c184da433ecc12ca0176ca89a77f7bc2b675576698b69bc93d46b77042 ++H9888CH=b94f46cdda6171e5f566b1cdd6aafd68ff1a4f7e8a27762b90eb5d4f03839d99 ++H9888FHQ=3cc81f8707bf5ba63bc9ffc14578c77637cae0e15766ae146af02eefb9ab7bfd + + include $(INCLUDE_DIR)/package.mk + ++ATH10K_FIRMWARE_REV:=d622d160e9f552ead68d9ae81b715422892dc2ef ++ATH10K_FIRMWARE_URL:=@GITHUB/kvalo/ath10k-firmware/$(ATH10K_FIRMWARE_REV) ++ ++QCA9887_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9887-board.bin ++define Download/qca9887-board ++ FILE:=$(QCA9887_BOARD_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA9887/hw1.0 ++ URL_FILE:=board.bin ++ HASH:=cf4df099f6ee05c181f55ce17297a1d32c61d725eb96246fd315ad5587c42426 ++endef ++$(eval $(call Download,qca9887-board)) ++ ++QCA988X_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca988x-board.bin ++define Download/qca988x-board ++ FILE:=$(QCA988X_BOARD_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA988X/hw2.0 ++ URL_FILE:=board.bin ++ HASH:=5b5b380333c2dd3b6ce67f30e2f7008f4020bf594970d3b464fd8d4a80fcd880 ++endef ++$(eval $(call Download,qca988x-board)) ++ ++QCA99X0_BOARD_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca99x0-board.bin ++define Download/qca99x0-board ++ FILE:=$(QCA99X0_BOARD_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA99X0/hw2.0 ++ URL_FILE:=boardData_AR900B_CUS239_5G_v2_001.bin ++ HASH:=3bf7561ee373b369025dcd366d276d038a97d3397ccae41ce841d98a58b30aff ++endef ++$(eval $(call Download,qca99x0-board)) ++ ++QCA99X0_BOARD2_REV:=ddcec9efd245da9365c474f513a855a55f3ac7fe ++QCA99X0_BOARD2_FILE:=ath10k-firmware-$(QCA99X0_BOARD2_REV)-qca99x0-board-2.bin ++define Download/qca99x0-board2 ++ FILE:=$(QCA99X0_BOARD2_FILE) ++ URL:=https://source.codeaurora.org/quic/qsdk/oss/firmware/ath10k-firmware/plain/ath10k/QCA99X0/hw2.0 ++ URL_FILE:=board-2.bin?id=$(QCA99X0_BOARD2_REV) ++ HASH:=03711ac21e60ef59d3815e235eb721c0c22851b5410299411085aa6f2af45401 ++endef ++$(eval $(call Download,qca99x0-board2)) ++ ++QCA9984_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9984-board-2.bin ++define Download/qca9984-board2 ++ FILE:=$(QCA9984_BOARD2_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA9984/hw1.0 ++ URL_FILE:=board-2.bin ++ HASH:=0d6d46cf0467185e3959ce3cb69e2415be6e48ab8a4bee3eb400edbe48cb9c25 ++endef ++$(eval $(call Download,qca9984-board2)) ++ ++QCA4019_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca4019-board-2.bin ++define Download/qca4019-board2 ++ FILE:=$(QCA4019_BOARD2_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA4019/hw1.0 ++ URL_FILE:=board-2.bin ++ HASH:=94b66aa4ddbed5110a96364d3c7b4ebcb320e3ac4e8697660b277e76077bc338 ++endef ++$(eval $(call Download,qca4019-board2)) ++ ++QCA9888_BOARD2_FILE:=ath10k-firmware-$(ATH10K_FIRMWARE_REV)-qca9888-board-2.bin ++define Download/qca9888-board2 ++ FILE:=$(QCA9888_BOARD2_FILE) ++ URL:=$(ATH10K_FIRMWARE_URL)/QCA9888/hw2.0 ++ URL_FILE:=board-2.bin ++ HASH:=5b871bb567f64525ca45adb88063211de472015d09e0f9aa3fa61ab71c8fdfd3 ++endef ++$(eval $(call Download,qca9888-board2)) ++ + CT_FIRMWARE_FILE = $(1)-$($(1)_FIRMWARE_FILE_CT) + CT_FIRMWARE_FILE_FULL_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_FULL_HTT) + CT_FIRMWARE_FILE_HTT = $(1)-$($(1)_FIRMWARE_FILE_CT_HTT) +@@ -28,120 +119,120 @@ define Download/ct-firmware-htt + URL_FILE:=$($(1)_FIRMWARE_FILE_CT_HTT) + endef + +-QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.019 ++QCA988X_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.$(CTVER1) + define Download/ath10k-firmware-qca988x-ct + $(call Download/ct-firmware,QCA988X,) +- HASH:=8b4c99253aa309d35f2e060c190091b8db1b84dbda06a6a15c83ac0f9a938126 ++ HASH:=$(H988XFC) + endef + $(eval $(call Download,ath10k-firmware-qca988x-ct)) + +-QCA988X_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.019 ++QCA988X_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.$(CTVER1) + define Download/ath10k-firmware-qca988x-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA988X,) +- HASH:=a7168916d6aa5e4d7858f8b620c0c980c76d03f390929db6f4077685ce2051e7 ++ HASH:=$(H988XFCH) + endef + $(eval $(call Download,ath10k-firmware-qca988x-ct-full-htt)) + + +-QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.019 ++QCA9887_FIRMWARE_FILE_CT:=firmware-2-ct-full-community-22.bin.lede.$(CTVER1) + define Download/ath10k-firmware-qca9887-ct + $(call Download/ct-firmware,QCA9887,ath10k-9887) +- HASH:=459692deb186a63ab8eeddb7ad5d54779266e68ca686e7c46062554db6dca12b ++ HASH:=$(H9887FC) + endef + $(eval $(call Download,ath10k-firmware-qca9887-ct)) + +-QCA9887_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.019 ++QCA9887_FIRMWARE_FILE_CT_FULL_HTT:=firmware-2-ct-full-htt-mgt-community-22.bin.lede.$(CTVER1) + define Download/ath10k-firmware-qca9887-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA9887,ath10k-9887) +- HASH:=fd126a457d0927d0c8ea10d66ef5b67d5e1e0741f8692bb3016bb602d0af3098 ++ HASH:=$(H9887FCH) + endef + $(eval $(call Download,ath10k-firmware-qca9887-ct-full-htt)) + + +-QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.019 ++QCA99X0_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca99x0-ct + $(call Download/ct-firmware,QCA99X0,ath10k-10-4b) +- HASH:=7dc934f934bc4973c9273a4f22cfead8e26ec6f579647af31b718a860eca0a4b ++ HASH:=$(H9980FC) + endef + $(eval $(call Download,ath10k-firmware-qca99x0-ct)) + +-QCA99X0_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.019 ++QCA99X0_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca99x0-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA99X0,ath10k-10-4b) +- HASH:=71a27b245a382fe009938d2826d5c97a90dceb10ddf638325268df91837ea302 ++ HASH:=$(H9980FCH) + endef + $(eval $(call Download,ath10k-firmware-qca99x0-ct-full-htt)) + +-QCA99X0_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.019 ++QCA99X0_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca99x0-ct-htt + $(call Download/ct-firmware-htt,QCA99X0,ath10k-10-4b) +- HASH:=9ed4fe41e5b0f30172f71ae0fe382dc0aab8aa4f8a898417af4f7ee936575ef6 ++ HASH:=$(H9980CH) + endef + $(eval $(call Download,ath10k-firmware-qca99x0-ct-htt)) + + +-QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.019 ++QCA9984_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9984-ct + $(call Download/ct-firmware,QCA9984,ath10k-9984-10-4b) +- HASH:=32d13f432691fe759ded7d027052e925233adb436cd8f729f85ec3d19ccd1dfd ++ HASH:=$(H9984FC) + endef + $(eval $(call Download,ath10k-firmware-qca9984-ct)) + +-QCA9984_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.019 ++QCA9984_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9984-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA9984,ath10k-9984-10-4b) +- HASH:=e8ab69777bd00b5fc6b1b7acccb55b903553a99932a5b0351602b5f690106588 ++ HASH:=$(H9984FCH) + endef + $(eval $(call Download,ath10k-firmware-qca9984-ct-full-htt)) + +-QCA9984_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.019 ++QCA9984_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9984-ct-htt + $(call Download/ct-firmware-htt,QCA9984,ath10k-9984-10-4b) +- HASH:=74449b303b626e0713b3fd4f2d6103d65859403b2dd7bdd8882aa772b69b59c7 ++ HASH:=$(H9984CH) + endef + $(eval $(call Download,ath10k-firmware-qca9984-ct-htt)) + + +-QCA4019_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.019 ++QCA4019_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca4019-ct + $(call Download/ct-firmware,QCA4019,ath10k-4019-10-4b) +- HASH:=4b89763087c7ed9b56046c4e621b7f045e452436d8d9b430a5d171179e313592 ++ HASH:=$(H4019FC) + endef + $(eval $(call Download,ath10k-firmware-qca4019-ct)) + +-QCA4019_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.019 ++QCA4019_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca4019-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA4019,ath10k-4019-10-4b) +- HASH:=fba591e5777c53b82542ba16cae69d9bb4684837f2fa4cee1b9b26f648096748 ++ HASH:=$(H4019FCH) + endef + $(eval $(call Download,ath10k-firmware-qca4019-ct-full-htt)) + +-QCA4019_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.019 ++QCA4019_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca4019-ct-htt + $(call Download/ct-firmware-htt,QCA4019,ath10k-4019-10-4b) +- HASH:=0d534c3c424184b8ec2773f15c8933bdab0d39b6f664d2578c6602b0eb7035d1 ++ HASH:=$(H4019CH) + endef + $(eval $(call Download,ath10k-firmware-qca4019-ct-htt)) + + +-QCA9888_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.019 ++QCA9888_FIRMWARE_FILE_CT:=firmware-5-ct-full-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9888-ct + $(call Download/ct-firmware,QCA9888,ath10k-9888-10-4b) +- HASH:=048f4300725e6ebbf94a6bf4f3f4e4592c446fcdbe1d801aaac024b15e89e0c9 ++ HASH:=$(H9888FC) + endef + $(eval $(call Download,ath10k-firmware-qca9888-ct)) + +-QCA9888_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.019 ++QCA9888_FIRMWARE_FILE_CT_FULL_HTT:=firmware-5-ct-full-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9888-ct-full-htt + $(call Download/ct-firmware-full-htt,QCA9888,ath10k-9888-10-4b) +- HASH:=d2a7e9fea6bd854721b3fc03a3a00d379d303b2bce339377ee87a1c14a60312d ++ HASH:=$(H9888FCH) + endef + $(eval $(call Download,ath10k-firmware-qca9888-ct-full-htt)) + +-QCA9888_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.019 ++QCA9888_FIRMWARE_FILE_CT_HTT:=firmware-5-ct-htt-mgt-community-12.bin-lede.$(CTVER2) + define Download/ath10k-firmware-qca9888-ct-htt + $(call Download/ct-firmware-htt,QCA9888,ath10k-9888-10-4b) +- HASH:=e52a6db33347c641ee791fd9a3a57a2503cdda1adc6b8d943e336431528b9d2a ++ HASH:=$(H9888CH) + endef + $(eval $(call Download,ath10k-firmware-qca9888-ct-htt)) + +@@ -159,23 +250,14 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca988x +- CONFLICTS:=ath10k-firmware-qca988x +- DEPENDS:=+ath10k-board-qca988x + endef + define Package/ath10k-firmware-qca988x-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.1 full-htt-mgt fw for QCA988x + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca988x \ +- ath10k-firmware-qca988x-ct +- CONFLICTS:=\ +- ath10k-firmware-qca988x \ +- ath10k-firmware-qca988x-ct +- DEPENDS:=\ +- +ath10k-board-qca988x \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca988x ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + define Package/ath10k-firmware-qca9887-ct +@@ -184,23 +266,14 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9887 +- CONFLICTS:=ath10k-firmware-qca9887 +- DEPENDS:=+ath10k-board-qca9887 + endef + define Package/ath10k-firmware-qca9887-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.1 full-htt-mgt fw for QCA9887 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca9887 \ +- ath10k-firmware-qca9887-ct +- CONFLICTS:=\ +- ath10k-firmware-qca9887 \ +- ath10k-firmware-qca9887-ct +- DEPENDS:=\ +- +ath10k-board-qca9887 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca9887 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + define Package/ath10k-firmware-qca99x0-ct +@@ -209,39 +282,22 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca99x0 +- CONFLICTS:=ath10k-firmware-qca99x0 +- DEPENDS:=+ath10k-board-qca99x0 + endef + define Package/ath10k-firmware-qca99x0-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA99x0 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca99x0 \ +- ath10k-firmware-qca99x0-ct +- CONFLICTS:=\ +- ath10k-firmware-qca99x0 \ +- ath10k-firmware-qca99x0-ct \ +- ath10k-firmware-qca99x0-ct-htt +- DEPENDS:=\ +- +ath10k-board-qca99x0 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca99x0 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + define Package/ath10k-firmware-qca99x0-ct-htt + $(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 htt-mgt fw for QCA99x0 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca99x0 \ +- ath10k-firmware-qca99x0-ct +- CONFLICTS:=\ +- ath10k-firmware-qca99x0 \ +- ath10k-firmware-qca99x0-ct +- DEPENDS:=\ +- +ath10k-board-qca99x0 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca99x0 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + define Package/ath10k-firmware-qca9984-ct +@@ -250,39 +306,22 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9984 +- CONFLICTS:=ath10k-firmware-qca9984 +- DEPENDS:=+ath10k-board-qca9984 + endef + define Package/ath10k-firmware-qca9984-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA9984 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca9984 \ +- ath10k-firmware-qca9984-ct +- CONFLICTS:=\ +- ath10k-firmware-qca9984 \ +- ath10k-firmware-qca9984-ct \ +- ath10k-firmware-qca9984-ct-htt +- DEPENDS:=\ +- +ath10k-board-qca9984 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca9984 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + define Package/ath10k-firmware-qca9984-ct-htt + $(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 htt-mgt fw for QCA9984 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca9984 \ +- ath10k-firmware-qca9984-ct +- CONFLICTS:=\ +- ath10k-firmware-qca9984 \ +- ath10k-firmware-qca9984-ct +- DEPENDS:=\ +- +ath10k-board-qca9984 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca9984 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + define Package/ath10k-firmware-qca4019-ct +@@ -291,39 +330,22 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca4019 +- CONFLICTS:=ath10k-firmware-qca4019 +- DEPENDS:=+ath10k-board-qca4019 + endef + define Package/ath10k-firmware-qca4019-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.4 full-htt-mgt for QCA4018/9 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca4019 \ +- ath10k-firmware-qca4019-ct +- CONFLICTS:=\ +- ath10k-firmware-qca4019 \ +- ath10k-firmware-qca4019-ct \ +- ath10k-firmware-qca4019-ct-htt +- DEPENDS:=\ +- +ath10k-board-qca4019 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca4019 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + define Package/ath10k-firmware-qca4019-ct-htt + $(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 htt-mgt for QCA4018/9 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca4019 \ +- ath10k-firmware-qca4019-ct +- CONFLICTS:=\ +- ath10k-firmware-qca4019 \ +- ath10k-firmware-qca4019-ct +- DEPENDS:=\ +- +ath10k-board-qca4019 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca4019 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + define Package/ath10k-firmware-qca9888-ct +@@ -332,39 +354,22 @@ $(Package/ath10k-ct-firmware-default) + SECTION:=firmware + CATEGORY:=Firmware + PROVIDES:=ath10k-firmware-qca9888 +- CONFLICTS:=ath10k-firmware-qca9888 +- DEPENDS:=+ath10k-board-qca9888 + endef + define Package/ath10k-firmware-qca9888-ct-full-htt + $(Package/ath10k-ct-firmware-default) + TITLE:=ath10k CT 10.4 full-htt-mgt fw for QCA9886/8 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca9888 \ +- ath10k-firmware-qca9888-ct +- CONFLICTS:=\ +- ath10k-firmware-qca9888 \ +- ath10k-firmware-qca9888-ct \ +- ath10k-firmware-qca9888-ct-htt +- DEPENDS:=\ +- +ath10k-board-qca9888 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca9888 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + define Package/ath10k-firmware-qca9888-ct-htt + $(Package/ath10k-firmware-default) + TITLE:=ath10k CT 10.4 htt-mgt fw for QCA9886/8 + SECTION:=firmware + CATEGORY:=Firmware +- PROVIDES:=\ +- ath10k-firmware-qca9888 \ +- ath10k-firmware-qca9888-ct +- CONFLICTS:=\ +- ath10k-firmware-qca9888 \ +- ath10k-firmware-qca9888-ct +- DEPENDS:=\ +- +ath10k-board-qca9888 \ +- +!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct ++ PROVIDES:=ath10k-firmware-qca9888 ++ DEPENDS:=+!PACKAGE_kmod-ath10k-ct-smallbuffers:kmod-ath10k-ct + endef + + +@@ -514,22 +519,34 @@ define Package/ath10k-firmware-qca9887-ct/install + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9887) \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/firmware-2.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9887_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin + endef + define Package/ath10k-firmware-qca9887-ct-full-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9887/hw1.0 + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9887) \ + $(1)/lib/firmware/ath10k/QCA9887/hw1.0/ct-firmware-2.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9887_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9887/hw1.0/board.bin + endef + + define Package/ath10k-firmware-qca988x-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA988X_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA988X) \ + $(1)/lib/firmware/ath10k/QCA988X/hw2.0/firmware-2.bin + endef + define Package/ath10k-firmware-qca988x-ct-full-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA988X/hw2.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA988X_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA988X/hw2.0/board.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA988X) \ + $(1)/lib/firmware/ath10k/QCA988X/hw2.0/ct-firmware-2.bin +@@ -537,18 +554,36 @@ endef + + define Package/ath10k-firmware-qca99x0-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA99X0) \ + $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/firmware-5.bin + endef + define Package/ath10k-firmware-qca99x0-ct-full-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA99X0) \ + $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin + endef + define Package/ath10k-firmware-qca99x0-ct-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA99X0/hw2.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board-2.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA99X0_BOARD_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/board.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA99X0) \ + $(1)/lib/firmware/ath10k/QCA99X0/hw2.0/ct-firmware-5.bin +@@ -556,18 +591,27 @@ endef + + define Package/ath10k-firmware-qca9984-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9984) \ + $(1)/lib/firmware/ath10k/QCA9984/hw1.0/firmware-5.bin + endef + define Package/ath10k-firmware-qca9984-ct-full-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9984) \ + $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin + endef + define Package/ath10k-firmware-qca9984-ct-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA9984/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9984_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9984/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9984) \ + $(1)/lib/firmware/ath10k/QCA9984/hw1.0/ct-firmware-5.bin +@@ -575,18 +619,27 @@ endef + + define Package/ath10k-firmware-qca4019-ct/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA4019) \ + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/firmware-5.bin + endef + define Package/ath10k-firmware-qca4019-ct-full-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA4019) \ + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin + endef + define Package/ath10k-firmware-qca4019-ct-htt/install + $(INSTALL_DIR) $(1)/lib/firmware/ath10k/QCA4019/hw1.0 ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA4019_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA4019) \ + $(1)/lib/firmware/ath10k/QCA4019/hw1.0/ct-firmware-5.bin +@@ -597,6 +650,9 @@ define Package/ath10k-firmware-qca9888-ct/install + ln -s \ + ../../cal-pci-0000:01:00.0.bin \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE,QCA9888) \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/firmware-5.bin +@@ -606,6 +662,9 @@ define Package/ath10k-firmware-qca9888-ct-full-htt/install + ln -s \ + ../../cal-pci-0000:01:00.0.bin \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_FULL_HTT,QCA9888) \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin +@@ -615,6 +674,9 @@ define Package/ath10k-firmware-qca9888-ct-htt/install + ln -s \ + ../../cal-pci-0000:01:00.0.bin \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board.bin ++ $(INSTALL_DATA) \ ++ $(DL_DIR)/$(QCA9888_BOARD2_FILE) \ ++ $(1)/lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin + $(INSTALL_DATA) \ + $(DL_DIR)/$(call CT_FIRMWARE_FILE_HTT,QCA9888) \ + $(1)/lib/firmware/ath10k/QCA9888/hw2.0/ct-firmware-5.bin +-- +2.25.1 + diff --git a/patches-20.x/0022-mac80211-add-TIP-tweaks.patch b/patches-20.x/0022-mac80211-add-TIP-tweaks.patch new file mode 100644 index 000000000..a21a6fd5f --- /dev/null +++ b/patches-20.x/0022-mac80211-add-TIP-tweaks.patch @@ -0,0 +1,442 @@ +From fa286423687750affca29cb7f9233272105262e1 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sat, 24 Oct 2020 17:00:54 +0200 +Subject: [PATCH 22/25] mac80211: add TIP tweaks + +Signed-off-by: John Crispin +--- + .../files/lib/netifd/wireless/mac80211.sh | 194 +++++++++++++++++- + .../mac80211/files/lib/wifi/mac80211.sh | 6 - + .../patches/subsys/130-disable-fils.patch | 32 --- + .../mac80211/patches/subsys/800-oom.patch | 71 +++++++ + 4 files changed, 255 insertions(+), 48 deletions(-) + delete mode 100644 package/kernel/mac80211/patches/subsys/130-disable-fils.patch + create mode 100644 package/kernel/mac80211/patches/subsys/800-oom.patch + +diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +index 6ca12084cf..bdf9fcb395 100644 +--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh ++++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh +@@ -56,6 +56,13 @@ drv_mac80211_init_device_config() { + short_gi_40 \ + max_amsdu \ + dsss_cck_40 ++ config_add_int \ ++ he_su_beamformer \ ++ he_su_beamformee \ ++ he_mu_beamformer \ ++ he_bss_color \ ++ he_spr_sr_control \ ++ he_spr_non_srg_obss_pd_max_offset + } + + drv_mac80211_init_iface_config() { +@@ -69,6 +76,7 @@ drv_mac80211_init_iface_config() { + config_add_int max_listen_int + config_add_int dtim_period + config_add_int start_disabled ++ config_add_int he_twt_required he_spr_sr_control + + # mesh + config_add_string mesh_id +@@ -96,6 +104,77 @@ mac80211_add_capabilities() { + export -n -- "$__var=$__out" + } + ++mac80211_add_he_capabilities() { ++ local __out= oifs ++ ++ oifs="$IFS" ++ IFS=: ++ for capab in "$@"; do ++ set -- $capab ++ [ "$(($4))" -gt 0 ] || continue ++ [ "$(((0x$2) & $3))" -gt 0 ] || continue ++ append base_cfg "$1=1" "$N" ++ done ++ IFS="$oifs" ++} ++ ++mac80211_get_seg0() { ++ local ht_mode="$1" ++ local seg0=0 ++ ++ case "$ht_mode" in ++ 40) ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ case "$(( ($channel / 4) % 2 ))" in ++ 1) seg0=$(($channel - 2));; ++ 0) seg0=$(($channel + 2));; ++ esac ++ elif [ $freq != 5935 ]; then ++ case "$(( ($channel / 4) % 2 ))" in ++ 1) seg0=$(($channel + 2));; ++ 0) seg0=$(($channel - 2));; ++ esac ++ fi ++ ;; ++ 80) ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ case "$(( ($channel / 4) % 4 ))" in ++ 0) seg0=$(($channel + 6));; ++ 1) seg0=$(($channel + 2));; ++ 2) seg0=$(($channel - 2));; ++ 3) seg0=$(($channel - 6));; ++ esac ++ elif [ $freq != 5935 ]; then ++ case "$(( ($channel / 4) % 4 ))" in ++ 1) seg0=$(($channel + 6));; ++ 2) seg0=$(($channel + 2));; ++ 3) seg0=$(($channel - 2));; ++ 0) seg0=$(($channel - 6));; ++ esac ++ fi ++ ;; ++ 160) ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ case "$channel" in ++ 1|5|9|13|17|21|25|29) seg0=15;; ++ 33|37|41|45|49|53|57|61) seg0=47;; ++ 65|69|73|77|81|85|89|93) seg0=79;; ++ 97|101|105|109|113|117|121|125) seg0=111;; ++ 129|133|137|141|145|149|153|157) seg0=143;; ++ 161|165|169|173|177|181|185|189) seg0=175;; ++ 193|197|201|205|209|213|217|221) seg0=207;; ++ esac ++ elif [ $freq != 5935 ]; then ++ case "$channel" in ++ 36|40|44|48|52|56|60|64) seg0=50;; ++ 100|104|108|112|116|120|124|128) seg0=114;; ++ esac ++ fi ++ ;; ++ esac ++ printf "$seg0" ++} ++ + mac80211_hostapd_setup_base() { + local phy="$1" + +@@ -333,20 +412,106 @@ mac80211_hostapd_setup_base() { + # 802.11ax + enable_ax=0 + case "$htmode" in +- HE*) enable_ax=1 ;; ++ HE20) enable_ax=1 ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ append base_cfg "op_class=131" "$N" ++ fi ++ ;; ++ HE40) ++ enable_ax=1 ++ idx="$(mac80211_get_seg0 "40")" ++ if [ $freq -ge 5180 ] && [ $freq != 5935 ]; then ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ append base_cfg "op_class=132" "$N" ++ fi ++ append base_cfg "he_oper_chwidth=0" "$N" ++ append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" ++ fi ++ ;; ++ HE80) ++ enable_ax=1 ++ idx="$(mac80211_get_seg0 "80")" ++ if [ $freq != 5935 ]; then ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ append base_cfg "op_class=133" "$N" ++ fi ++ append base_cfg "he_oper_chwidth=1" "$N" ++ append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" ++ fi ++ ;; ++ HE160) ++ enable_ax=1 ++ idx="$(mac80211_get_seg0 "160")" ++ if [ $freq != 5935 ]; then ++ if [ $freq -gt 5950 ] && [ $freq -le 7115 ]; then ++ append base_cfg "op_class=134" "$N" ++ fi ++ append base_cfg "he_oper_chwidth=2" "$N" ++ append base_cfg "he_oper_centr_freq_seg0_idx=$idx" "$N" ++ fi ++ ;; + esac + + if [ "$enable_ax" != "0" ]; then ++ json_get_vars \ ++ he_su_beamformer:1 \ ++ he_su_beamformee:0 \ ++ he_mu_beamformer:1 \ ++ he_twt_required:0 \ ++ he_spr_sr_control:0 \ ++ he_spr_non_srg_obss_pd_max_offset:1 \ ++ he_bss_color:64 ++ ++ + append base_cfg "ieee80211ax=1" "$N" ++ append base_cfg "he_bss_color=$he_bss_color" "$N" + [ "$hwmode" = "a" ] && { + append base_cfg "he_oper_chwidth=$vht_oper_chwidth" "$N" + append base_cfg "he_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N" + } ++ he_phy_cap=$(iw phy "$phy" info | awk -F "[()]" '/HE PHY Capabilities/ { print $2 }' | head -1) ++ he_phy_cap=${he_phy_cap:2} ++ he_mac_cap=$(iw phy "$phy" info | awk -F "[()]" '/HE MAC Capabilities/ { print $2 }' | head -1) ++ he_mac_cap=${he_mac_cap:2} ++ ++ mac80211_add_he_capabilities \ ++ he_su_beamformer:${he_phy_cap:6:2}:0x80:$he_su_beamformer \ ++ he_su_beamformee:${he_phy_cap:8:2}:0x1:$he_su_beamformee \ ++ he_mu_beamformer:${he_phy_cap:8:2}:0x2:$he_mu_beamformer \ ++ he_spr_sr_control:${he_phy_cap:14:2}:0x1:$he_spr_sr_control \ ++ he_twt_required:${he_mac_cap:0:2}:0x6:$he_twt_required ++ ++ [ "$he_spr_sr_control" != "0" ] && { ++ append base_cfg "he_spr_sr_control=$he_spr_sr_control" "$N" ++ append base_cfg "he_spr_non_srg_obss_pd_max_offset=$he_spr_non_srg_obss_pd_max_offset" "$N" ++ } ++ + append base_cfg "he_default_pe_duration=4" "$N" + append base_cfg "he_rts_threshold=1023" "$N" +- append base_cfg "he_su_beamformer=1" "$N" +- append base_cfg "he_su_beamformee=1" "$N" +- append base_cfg "he_mu_beamformer=1023" "$N" ++ append base_cfg "he_mu_edca_qos_info_param_count=0" "$N" ++ append base_cfg "he_mu_edca_qos_info_q_ack=0" "$N" ++ append base_cfg "he_mu_edca_qos_info_queue_request=0" "$N" ++ append base_cfg "he_mu_edca_qos_info_txop_request=0" "$N" ++ append base_cfg "he_mu_edca_ac_be_aifsn=8" "$N" ++ append base_cfg "he_mu_edca_ac_be_aci=0" "$N" ++ append base_cfg "he_mu_edca_ac_be_ecwmin=9" "$N" ++ append base_cfg "he_mu_edca_ac_be_ecwmax=10" "$N" ++ append base_cfg "he_mu_edca_ac_be_timer=255" "$N" ++ append base_cfg "he_mu_edca_ac_bk_aifsn=15" "$N" ++ append base_cfg "he_mu_edca_ac_bk_aci=1" "$N" ++ append base_cfg "he_mu_edca_ac_bk_ecwmin=9" "$N" ++ append base_cfg "he_mu_edca_ac_bk_ecwmax=10" "$N" ++ append base_cfg "he_mu_edca_ac_bk_timer=255" "$N" ++ append base_cfg "he_mu_edca_ac_vi_ecwmin=5" "$N" ++ append base_cfg "he_mu_edca_ac_vi_ecwmax=7" "$N" ++ append base_cfg "he_mu_edca_ac_vi_aifsn=5" "$N" ++ append base_cfg "he_mu_edca_ac_vi_aci=2" "$N" ++ append base_cfg "he_mu_edca_ac_vi_timer=255" "$N" ++ append base_cfg "he_mu_edca_ac_vo_aifsn=5" "$N" ++ append base_cfg "he_mu_edca_ac_vo_aci=3" "$N" ++ append base_cfg "he_mu_edca_ac_vo_ecwmin=5" "$N" ++ append base_cfg "he_mu_edca_ac_vo_ecwmax=7" "$N" ++ append base_cfg "he_mu_edca_ac_vo_timer=255" "$N" + fi + + hostapd_prepare_device_config "$hostapd_conf_file" nl80211 +@@ -401,6 +566,7 @@ mac80211_get_addr() { + + mac80211_generate_mac() { + local phy="$1" ++ local multiple_bssid="$2" + local id="${macidx:-0}" + + local ref="$(cat /sys/class/ieee80211/${phy}/macaddress)" +@@ -425,6 +591,11 @@ mac80211_generate_mac() { + + local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS" + ++ [ "$multiple_bssid" -eq 1 ] && { ++ printf "02:%s:%s:%s:%s:%02x" $b1 $2 $3 $4 $5 $macidx ++ return ++ } ++ + macidx=$(($id + 1)) + [ "$((0x$mask1))" -gt 0 ] && { + b1="0x$1" +@@ -533,6 +704,7 @@ mac80211_iw_interface_add() { + } + + mac80211_prepare_vif() { ++ local multiple_bssid=$1 + json_select config + + json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file +@@ -546,7 +718,7 @@ mac80211_prepare_vif() { + json_select .. + + [ -n "$macaddr" ] || { +- macaddr="$(mac80211_generate_mac $phy)" ++ macaddr="$(mac80211_generate_mac $phy $multiple_bssid)" + macidx="$(($macidx + 1))" + } + +@@ -687,8 +859,9 @@ mac80211_setup_supplicant_noctl() { + + mac80211_prepare_iw_htmode() { + case "$htmode" in +- VHT20|HT20) iw_htmode=HT20;; +- HT40*|VHT40|VHT160) ++ VHT20|HT20|HE20) iw_htmode=HT20;; ++ HT40*|VHT40|VHT160|\ ++ HE40|HE40|HE160) + case "$hwmode" in + a) + case "$(( ($channel / 4) % 2 ))" in +@@ -712,7 +885,7 @@ mac80211_prepare_iw_htmode() { + esac + [ "$auto_channel" -gt 0 ] && iw_htmode="HT40+" + ;; +- VHT80) ++ VHT80|HE80) + iw_htmode="80MHZ" + ;; + NONE|NOHT) +@@ -896,7 +1069,8 @@ drv_mac80211_setup() { + country chanbw distance \ + txpower antenna_gain \ + rxantenna txantenna \ +- frag rts beacon_int:100 htmode ++ frag rts beacon_int:100 htmode \ ++ multiple_bssid:0 + json_get_values basic_rate_list basic_rate + json_get_values scan_list scan_list + json_select .. +@@ -991,7 +1165,7 @@ drv_mac80211_setup() { + mac80211_prepare_iw_htmode + for_each_interface "sta adhoc mesh monitor" mac80211_prepare_vif + NEWAPLIST= +- for_each_interface "ap" mac80211_prepare_vif ++ for_each_interface "ap" mac80211_prepare_vif ${multiple_bssid} + NEW_MD5=$(test -e "${hostapd_conf_file}" && md5sum ${hostapd_conf_file}) + OLD_MD5=$(uci -q -P /var/state get wireless._${phy}.md5) + if [ "${NEWAPLIST}" != "${OLDAPLIST}" ]; then +diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh +index c0fbfbe5a8..453ac7d847 100644 +--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh ++++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh +@@ -106,12 +106,6 @@ detect_mac80211() { + ${ht_capab} + set wireless.radio${devidx}.disabled=1 + +- set wireless.default_radio${devidx}=wifi-iface +- set wireless.default_radio${devidx}.device=radio${devidx} +- set wireless.default_radio${devidx}.network=lan +- set wireless.default_radio${devidx}.mode=ap +- set wireless.default_radio${devidx}.ssid=OpenWrt +- set wireless.default_radio${devidx}.encryption=none + EOF + uci -q commit wireless + +diff --git a/package/kernel/mac80211/patches/subsys/130-disable-fils.patch b/package/kernel/mac80211/patches/subsys/130-disable-fils.patch +deleted file mode 100644 +index 9c6e971f9d..0000000000 +--- a/package/kernel/mac80211/patches/subsys/130-disable-fils.patch ++++ /dev/null +@@ -1,32 +0,0 @@ +-Disable FILS support, since it pulls in crypto hash support +- +---- a/net/mac80211/fils_aead.h +-+++ b/net/mac80211/fils_aead.h +-@@ -7,7 +7,7 @@ +- #ifndef FILS_AEAD_H +- #define FILS_AEAD_H +- +--#if LINUX_VERSION_IS_GEQ(4,3,0) +-+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */ +- int fils_encrypt_assoc_req(struct sk_buff *skb, +- struct ieee80211_mgd_assoc_data *assoc_data); +- int fils_decrypt_assoc_resp(struct ieee80211_sub_if_data *sdata, +---- a/net/mac80211/fils_aead.c +-+++ b/net/mac80211/fils_aead.c +-@@ -1,4 +1,4 @@ +--#if LINUX_VERSION_IS_GEQ(4,3,0) +-+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */ +- // SPDX-License-Identifier: GPL-2.0-only +- /* +- * FILS AEAD for (Re)Association Request/Response frames +---- a/net/mac80211/main.c +-+++ b/net/mac80211/main.c +-@@ -591,7 +591,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ +- NL80211_FEATURE_MAC_ON_CREATE | +- NL80211_FEATURE_USERSPACE_MPM | +- NL80211_FEATURE_FULL_AP_CLIENT_STATE; +--#if LINUX_VERSION_IS_GEQ(4,3,0) +-+#if 0 /* LINUX_VERSION_IS_GEQ(4,3,0) */ +- wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_STA); +- #endif +- wiphy_ext_feature_set(wiphy, +diff --git a/package/kernel/mac80211/patches/subsys/800-oom.patch b/package/kernel/mac80211/patches/subsys/800-oom.patch +new file mode 100644 +index 0000000000..401a8bf324 +--- /dev/null ++++ b/package/kernel/mac80211/patches/subsys/800-oom.patch +@@ -0,0 +1,71 @@ ++From a8295e2c06e1aa313b4624df9dedf599df382eef Mon Sep 17 00:00:00 2001 ++From: Ben Greear ++Date: Thu, 9 May 2013 11:56:22 -0700 ++Subject: mac80211: Limit number of pending skbs. ++ ++Current code will allow any number of pending skbs, and ++this can OOM the system when used with something like ++the pktgen tool (which may not back off properly if ++queue is stopped). ++ ++Possibly this is just a bug in our version of pktgen, ++but either way, it seems reasonable to add a limit ++so that it is not possible to go OOM in this manner. ++ ++Signed-off-by: Ben Greear ++ ++diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c ++index 3529d1368068..5eb60a50641e 100644 ++--- a/net/mac80211/tx.c +++++ b/net/mac80211/tx.c ++@@ -35,6 +35,17 @@ ++ #include "wpa.h" ++ #include "wme.h" ++ #include "rate.h" +++#include +++ +++/* +++ * Maximum number of skbs that may be queued in a pending +++ * queue. After that, packets will just be dropped. +++ */ +++static int max_pending_qsize = 1000; +++module_param(max_pending_qsize, int, 0644); +++MODULE_PARM_DESC(max_pending_qsize, +++ "Maximum number of skbs that may be queued in a pending queue."); +++ ++ ++ /* misc utils */ ++ ++@@ -1671,15 +1682,28 @@ static bool ieee80211_tx_frags(struct ieee80211_local *local, ++ * later transmission from the tx-pending ++ * tasklet when the queue is woken again. ++ */ ++- if (txpending) +++ bool do_free = false; +++ if (txpending) { ++ skb_queue_splice_init(skbs, ++ &local->pending[q]); ++- else ++- skb_queue_splice_tail_init(skbs, ++- &local->pending[q]); +++ } else { +++ u32 len = skb_queue_len(&local->pending[q]); +++ if (len >= max_pending_qsize) { +++ __skb_unlink(skb, skbs); +++ do_free = true; +++ } else { +++ skb_queue_splice_tail_init(skbs, +++ &local->pending[q]); +++ } +++ } ++ ++ spin_unlock_irqrestore(&local->queue_stop_reason_lock, ++ flags); +++ if (do_free) { +++ dev_kfree_skb_any(skb); +++ /* TODO: Add counter for this */ +++ } +++ ++ return false; ++ } ++ } +-- +2.25.1 + diff --git a/patches-20.x/0023-hostapd-add-the-TIP-tweaks.patch b/patches-20.x/0023-hostapd-add-the-TIP-tweaks.patch new file mode 100644 index 000000000..73dbae43c --- /dev/null +++ b/patches-20.x/0023-hostapd-add-the-TIP-tweaks.patch @@ -0,0 +1,421 @@ +From cccf9b028416f41e401166cfa23ef5714ae9f606 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 2 Dec 2020 08:49:34 +0100 +Subject: [PATCH 23/25] hostapd: add the TIP tweaks + +Signed-off-by: John Crispin +--- + package/network/services/hostapd/Makefile | 2 +- + .../hostapd/files/hostapd-full.config | 4 +- + .../network/services/hostapd/files/hostapd.sh | 126 +++++++++++++++--- + .../network/services/hostapd/files/wpad.init | 4 +- + ..._request-ignore-when-rssi-is-too-low.patch | 68 ++++++++++ + 5 files changed, 177 insertions(+), 27 deletions(-) + create mode 100644 package/network/services/hostapd/patches/800-probe_request-ignore-when-rssi-is-too-low.patch + +diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile +index 1e20b56200..cec7e723b6 100644 +--- a/package/network/services/hostapd/Makefile ++++ b/package/network/services/hostapd/Makefile +@@ -109,7 +109,7 @@ ifeq ($(SSL_VARIANT),openssl) + DRIVER_MAKEOPTS += CONFIG_AP=y CONFIG_MESH=y + endif + ifeq ($(LOCAL_VARIANT),full) +- DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y ++ DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y CONFIG_HS20=y CONFIG_INTERWORKING=y + endif + endif + +diff --git a/package/network/services/hostapd/files/hostapd-full.config b/package/network/services/hostapd/files/hostapd-full.config +index df272e443a..b0a7e3f857 100644 +--- a/package/network/services/hostapd/files/hostapd-full.config ++++ b/package/network/services/hostapd/files/hostapd-full.config +@@ -371,9 +371,9 @@ CONFIG_INTERWORKING=y + CONFIG_TAXONOMY=y + + # Fast Initial Link Setup (FILS) (IEEE 802.11ai) +-#CONFIG_FILS=y ++CONFIG_FILS=y + # FILS shared key authentication with PFS +-#CONFIG_FILS_SK_PFS=y ++CONFIG_FILS_SK_PFS=y + + # Include internal line edit mode in hostapd_cli. This can be used to provide + # limited command line editing and history support. +diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh +index a41254d6db..b64dea549c 100644 +--- a/package/network/services/hostapd/files/hostapd.sh ++++ b/package/network/services/hostapd/files/hostapd.sh +@@ -45,6 +45,7 @@ hostapd_append_wpa_key_mgmt() { + append wpa_key_mgmt "WPA-$auth_type_l" + [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-${auth_type_l}" + [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-${auth_type_l}-SHA256" ++ [ "${ieee80211ai:-0}" -gt 0 ] && append wpa_key_mgmt "FILS-SHA256" + ;; + eap192) + append wpa_key_mgmt "WPA-EAP-SUITE-B-192" +@@ -104,6 +105,7 @@ hostapd_common_add_device_config() { + config_add_array hostapd_options + + config_add_int airtime_mode ++ config_add_boolean multiple_bssid rnr_beacon he_co_locate ema + + hostapd_add_log_config + } +@@ -116,7 +118,8 @@ hostapd_prepare_device_config() { + local base_cfg= + + json_get_vars country country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \ +- acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density ++ acs_chan_bias local_pwr_constraint spectrum_mgmt_required airtime_mode cell_density \ ++ multiple_bssid he_co_locate rnr_beacon ema + + hostapd_set_log_options base_cfg + +@@ -126,7 +129,11 @@ hostapd_prepare_device_config() { + set_default legacy_rates 1 + set_default airtime_mode 0 + set_default cell_density 0 +- ++ set_default multiple_bssid 0 ++ set_default rnr_beacon 0 ++ set_default he_co_locate 0 ++ set_default ema 0 ++ + [ -n "$country" ] && { + append base_cfg "country_code=$country" "$N" + +@@ -212,6 +219,10 @@ hostapd_prepare_device_config() { + append base_cfg "beacon_int=$beacon_int" "$N" + append base_cfg "dtim_period=$dtim_period" "$N" + [ "$airtime_mode" -gt 0 ] && append base_cfg "airtime_mode=$airtime_mode" "$N" ++ [ "$multiple_bssid" -gt 0 ] && append base_cfg "multiple_bssid=$multiple_bssid" "$N" ++ [ "$rnr_beacon" -gt 0 ] && append base_cfg "rnr_beacon=$rnr_beacon" "$N" ++ [ "$ema" -gt 0 ] && append base_cfg "ema=$ema" "$N" ++ [ "$he_co_locate" -gt 0 ] && append base_cfg "he_co_locate=$he_co_locate" "$N" + + json_get_values opts hostapd_options + for val in $opts; do +@@ -241,6 +252,7 @@ hostapd_common_add_bss_config() { + + config_add_boolean rsn_preauth auth_cache + config_add_int ieee80211w ++ config_add_int ieee80211ai + config_add_int eapol_version + + config_add_string 'auth_server:host' 'server:host' +@@ -318,6 +330,10 @@ hostapd_common_add_bss_config() { + config_add_string iw_hessid iw_network_auth_type iw_qos_map_set + config_add_array iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm + config_add_array iw_anqp_elem ++ ++ config_add_int beacon_rate ++ config_add_int rssi_reject_assoc_rssi ++ config_add_int rssi_ignore_probe_request + + config_add_boolean hs20 disable_dgaf osen + config_add_int anqp_domain_id +@@ -326,10 +342,21 @@ hostapd_common_add_bss_config() { + config_add_array osu_provider + config_add_array operator_icon + config_add_array hs20_conn_capab ++ config_add_array roaming_consortium ++ config_add_array venue_name ++ config_add_array venue_url ++ config_add_array nai_realm + config_add_string osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp + ++ config_add_boolean interworking internet ++ config_add_int access_network_type asra esr uesa venue_group venue_type ipaddr_type_availability \ ++ gas_address3 ++ config_add_string hessid network_auth_type \ ++ anqp_3gpp_cell_net anqp_elem domain_name qos_map_set hs20_t_c_server_url ++ + config_add_array airtime_sta_weight + config_add_int airtime_bss_weight airtime_bss_limit ++ config_add_int rts_threshold + } + + hostapd_set_vlan_file() { +@@ -393,12 +420,28 @@ append_iw_nai_realm() { + [ -n "$1" ] && append bss_conf "nai_realm=$1" "$N" + } + ++append_roaming_consortium() { ++ [ -n "$1" ] && append bss_conf "roaming_consortium=$1" "$N" ++} ++ ++append_venue_name() { ++ [ -n "$1" ] && append bss_conf "venue_name=$1" "$N" ++} ++ ++append_venue_url() { ++ [ -n "$1" ] && append bss_conf "venue_url=$1" "$N" ++} ++ ++append_nai_realm() { ++ [ -n "$1" ] && append bss_conf "nai_realm=$1" "$N" ++} ++ + append_hs20_oper_friendly_name() { +- append bss_conf "hs20_oper_friendly_name=$1" "$N" ++ [ -n "$1" ] && append bss_conf "hs20_oper_friendly_name=$1" "$N" + } + + append_osu_provider_service_desc() { +- append bss_conf "osu_service_desc=$1" "$N" ++ [ -n "$1" ] && append bss_conf "osu_service_desc=$1" "$N" + } + + append_hs20_icon() { +@@ -418,15 +461,15 @@ append_hs20_icons() { + } + + append_operator_icon() { +- append bss_conf "operator_icon=$1" "$N" ++ [ -n "$1" ] && append bss_conf "operator_icon=$1" "$N" + } + + append_osu_icon() { +- append bss_conf "osu_icon=$1" "$N" ++ [ -n "$1" ] && append bss_conf "osu_icon=$1" "$N" + } + + append_osu_provider() { +- local cfgtype osu_server_uri osu_friendly_name osu_nai osu_nai2 osu_method_list ++ local cfgtype osu_server_uri osu_nai osu_nai2 osu_method_list + + config_load wireless + config_get cfgtype "$1" TYPE +@@ -438,12 +481,13 @@ append_osu_provider() { + config_get osu_nai2 "$1" osu_nai2 + config_get osu_method_list "$1" osu_method + +- append bss_conf "osu_server_uri=$osu_server_uri" "$N" +- append bss_conf "osu_nai=$osu_nai" "$N" +- append bss_conf "osu_nai2=$osu_nai2" "$N" +- append bss_conf "osu_method_list=$osu_method_list" "$N" ++ [ -n "$osu_server_uri" ] append bss_conf "osu_server_uri=$osu_server_uri" "$N" ++ [ -n "$osu_nai" ] append bss_conf "osu_nai=$osu_nai" "$N" ++ [ -n "$osu_nai2" ] append bss_conf "osu_nai2=$osu_nai2" "$N" ++ [ -n "$osu_method_list" ] append bss_conf "osu_method_list=$osu_method_list" "$N" + + config_list_foreach "$1" osu_service_desc append_osu_provider_service_desc ++ config_list_foreach "$1" osu_friendly_name append_osu_friendly_name + config_list_foreach "$1" osu_icon append_osu_icon + + append bss_conf "$N" +@@ -474,11 +518,12 @@ hostapd_set_bss_options() { + wps_pushbutton wps_label ext_registrar wps_pbc_in_m1 wps_ap_setup_locked \ + wps_independent wps_device_type wps_device_name wps_manufacturer wps_pin \ + macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \ +- iapp_interface eapol_version dynamic_vlan ieee80211w nasid \ ++ iapp_interface eapol_version dynamic_vlan ieee80211w ieee80211ai nasid \ + acct_server acct_secret acct_port acct_interval \ + bss_load_update_period chan_util_avg_period sae_require_mfp \ + multi_ap multi_ap_backhaul_ssid multi_ap_backhaul_key \ +- airtime_bss_weight airtime_bss_limit airtime_sta_weight ++ airtime_bss_weight airtime_bss_limit airtime_sta_weight \ ++ rssi_reject_assoc_rssi rssi_ignore_probe_request rts_threshold + + set_default isolate 0 + set_default maxassoc 0 +@@ -498,6 +543,9 @@ hostapd_set_bss_options() { + set_default multi_ap 0 + set_default airtime_bss_weight 0 + set_default airtime_bss_limit 0 ++ set_default rssi_reject_assoc_rssi 0 ++ set_default rssi_ignore_probe_request 0 ++ set_default rts_threshold -1 + + append bss_conf "ctrl_interface=/var/run/hostapd" + if [ "$isolate" -gt 0 ]; then +@@ -523,6 +571,9 @@ hostapd_set_bss_options() { + append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N" + append bss_conf "utf8_ssid=$utf8_ssid" "$N" + append bss_conf "multi_ap=$multi_ap" "$N" ++ append bss_conf "rssi_reject_assoc_rssi=$rssi_reject_assoc_rssi" "$N" ++ append bss_conf "rssi_ignore_probe_request=$rssi_ignore_probe_request" "$N" ++ append bss_conf "rts_threshold=$rts_threshold" "$N" + + [ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N" + +@@ -911,9 +962,17 @@ hostapd_set_bss_options() { + + + local hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \ +- osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp ++ osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp \ ++ interworking internet access_network_type asra esr uesa venue_group venue_type \ ++ ipaddr_type_availability gas_address3 hessid \ ++ network_auth_type anqp_3gpp_cell_net domain_name anqp_elem qos_map_set \ ++ hs20_t_c_server_url + json_get_vars hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \ +- osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp ++ osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp \ ++ interworking internet access_network_type asra esr uesa venue_group venue_type \ ++ ipaddr_type_availability gas_address3 hessid \ ++ network_auth_type anqp_3gpp_cell_net domain_name anqp_elem qos_map_set \ ++ hs20_t_c_server_url + + set_default hs20 0 + set_default disable_dgaf $hs20 +@@ -923,19 +982,42 @@ hostapd_set_bss_options() { + if [ "$hs20" = "1" ]; then + append bss_conf "hs20=1" "$N" + append_hs20_icons +- append bss_conf "disable_dgaf=$disable_dgaf" "$N" +- append bss_conf "osen=$osen" "$N" +- append bss_conf "anqp_domain_id=$anqp_domain_id" "$N" +- append bss_conf "hs20_deauth_req_timeout=$hs20_deauth_req_timeout" "$N" ++ [ -n "$disable_dgaf"] && append bss_conf "disable_dgaf=$disable_dgaf" "$N" ++ [ -n "$osen"] && append bss_conf "osen=$osen" "$N" ++ [ -n "$anqp_domain_id"] && append bss_conf "anqp_domain_id=$anqp_domain_id" "$N" ++ [ -n "$hs20_deauth_req_timeout"] && append bss_conf "hs20_deauth_req_timeout=$hs20_deauth_req_timeout" "$N" + [ -n "$osu_ssid" ] && append bss_conf "osu_ssid=$osu_ssid" "$N" + [ -n "$hs20_wan_metrics" ] && append bss_conf "hs20_wan_metrics=$hs20_wan_metrics" "$N" + [ -n "$hs20_operating_class" ] && append bss_conf "hs20_operating_class=$hs20_operating_class" "$N" + [ -n "$hs20_t_c_filename" ] && append bss_conf "hs20_t_c_filename=$hs20_t_c_filename" "$N" + [ -n "$hs20_t_c_timestamp" ] && append bss_conf "hs20_t_c_timestamp=$hs20_t_c_timestamp" "$N" ++ json_for_each_item append_hs20_oper_friendly_name hs20_oper_friendly_name ++ json_for_each_item append_roaming_consortium roaming_consortium ++ json_for_each_item append_venue_name venue_name ++ json_for_each_item append_venue_url venue_url ++ json_for_each_item append_nai_realm nai_realm + json_for_each_item append_hs20_conn_capab hs20_conn_capab + json_for_each_item append_hs20_oper_friendly_name hs20_oper_friendly_name + json_for_each_item append_osu_provider osu_provider + json_for_each_item append_operator_icon operator_icon ++ [ -n "$interworking" ] && append bss_conf "interworking=$interworking" "$N" ++ [ -n "$internet" ] && append bss_conf "internet=$internet" "$N" ++ [ -n "$access_network_type" ] && append bss_conf "access_network_type=$access_network_type" "$N" ++ [ -n "$asra" ] && append bss_conf "asra=$asra" "$N" ++ [ -n "$esr" ] && append bss_conf "esr=$esr" "$N" ++ [ -n "$uesa" ] && append bss_conf "uesa=$uesa" "$N" ++ [ -n "$venue_group" ] && append bss_conf "venue_group=$venue_group" "$N" ++ [ -n "$venue_type" ] && append bss_conf "venue_type=$venue_type" "$N" ++ [ -n "$ipaddr_type_availability" ] && append bss_conf "ipaddr_type_availability=$ipaddr_type_availability" "$N" ++ [ -n "$gas_address3" ] && append bss_conf "gas_address3=$gas_address3" "$N" ++ [ -n "$hessid" ] && append bss_conf "hessid=$hessid" "$N" ++ [ -n "$network_auth_type" ] && append bss_conf "network_auth_type=$network_auth_type" "$N" ++ [ -n "$anqp_3gpp_cell_net" ] && append bss_conf "anqp_3gpp_cell_net=$anqp_3gpp_cell_net" "$N" ++ [ -n "$nai_realm" ] && append bss_conf "nai_realm=$nai_realm" "$N" ++ [ -n "$anqp_elem" ] && append bss_conf "anqp_elem=$anqp_elem" "$N" ++ [ -n "$qos_map_set" ] && append bss_conf "qos_map_set=$qos_map_set" "$N" ++ [ -n "$domain_name" ] && append bss_conf "domain_name=$domain_name" "$N" ++ [ -n "$hs20_t_c_server_url" ] && append bss_conf "hs20_t_c_server_url=$hs20_t_c_server_url" "$N" + fi + + bss_md5sum=$(echo $bss_conf | md5sum | cut -d" " -f1) +@@ -1058,9 +1140,9 @@ wpa_supplicant_set_fixed_freq() { + VHT*) append network_data "vht=1" "$N$T";; + esac + case "$htmode" in +- VHT80) append network_data "max_oper_chwidth=1" "$N$T";; +- VHT160) append network_data "max_oper_chwidth=2" "$N$T";; +- VHT20|VHT40) append network_data "max_oper_chwidth=0" "$N$T";; ++ VHT80|HE80) append network_data "max_oper_chwidth=1" "$N$T";; ++ VHT160|HE160) append network_data "max_oper_chwidth=2" "$N$T";; ++ VHT20|HE20|VHT40|HE40) append network_data "max_oper_chwidth=0" "$N$T";; + *) append network_data "disable_vht=1" "$N$T";; + esac + } +diff --git a/package/network/services/hostapd/files/wpad.init b/package/network/services/hostapd/files/wpad.init +index 3198e9801f..e2cd380cb5 100644 +--- a/package/network/services/hostapd/files/wpad.init ++++ b/package/network/services/hostapd/files/wpad.init +@@ -11,7 +11,7 @@ start_service() { + mkdir -p /var/run/hostapd + procd_open_instance hostapd + procd_set_param command /usr/sbin/hostapd -s -g /var/run/hostapd/global +- procd_set_param respawn ++ procd_set_param respawn 3600 5 0 + procd_close_instance + fi + +@@ -19,7 +19,7 @@ start_service() { + mkdir -p /var/run/wpa_supplicant + procd_open_instance supplicant + procd_set_param command /usr/sbin/wpa_supplicant -n -s -g /var/run/wpa_supplicant/global +- procd_set_param respawn ++ procd_set_param respawn 3600 5 0 + procd_close_instance + fi + } +diff --git a/package/network/services/hostapd/patches/800-probe_request-ignore-when-rssi-is-too-low.patch b/package/network/services/hostapd/patches/800-probe_request-ignore-when-rssi-is-too-low.patch +new file mode 100644 +index 0000000000..182a3bb866 +--- /dev/null ++++ b/package/network/services/hostapd/patches/800-probe_request-ignore-when-rssi-is-too-low.patch +@@ -0,0 +1,68 @@ ++From e15b04870a7d7517a9b129d8d5cbebe6b8a25cb8 Mon Sep 17 00:00:00 2001 ++From: John Crispin ++Date: Wed, 29 Jul 2020 17:38:15 +0200 ++Subject: [PATCH 1/2] probe_request: ignore when rssi is too low ++ ++Signed-off-by: John Crispin ++--- ++ hostapd/config_file.c | 2 ++ ++ src/ap/ap_config.c | 1 + ++ src/ap/ap_config.h | 1 + ++ src/ap/beacon.c | 4 ++++ ++ 4 files changed, 8 insertions(+) ++ ++diff --git a/hostapd/config_file.c b/hostapd/config_file.c ++index 13396aad2..e0b182c8e 100644 ++--- a/hostapd/config_file.c +++++ b/hostapd/config_file.c ++@@ -4454,6 +4454,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, ++ conf->rssi_reject_assoc_rssi = atoi(pos); ++ } else if (os_strcmp(buf, "rssi_reject_assoc_timeout") == 0) { ++ conf->rssi_reject_assoc_timeout = atoi(pos); +++ } else if (os_strcmp(buf, "rssi_ignore_probe_request") == 0) { +++ conf->rssi_ignore_probe_request = atoi(pos); ++ } else if (os_strcmp(buf, "pbss") == 0) { ++ bss->pbss = atoi(pos); ++ } else if (os_strcmp(buf, "transition_disable") == 0) { ++diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c ++index 56a4ac388..088bb831a 100644 ++--- a/src/ap/ap_config.c +++++ b/src/ap/ap_config.c ++@@ -277,6 +277,7 @@ struct hostapd_config * hostapd_config_defaults(void) ++ ++ conf->rssi_reject_assoc_rssi = 0; ++ conf->rssi_reject_assoc_timeout = 30; +++ conf->rssi_ignore_probe_request = 0; ++ ++ #ifdef CONFIG_AIRTIME_POLICY ++ conf->airtime_update_interval = AIRTIME_DEFAULT_UPDATE_INTERVAL; ++diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h ++index 7fe418363..a69a8d324 100644 ++--- a/src/ap/ap_config.h +++++ b/src/ap/ap_config.h ++@@ -1042,6 +1042,7 @@ struct hostapd_config { ++ ++ int rssi_reject_assoc_rssi; ++ int rssi_reject_assoc_timeout; +++ int rssi_ignore_probe_request; ++ ++ #ifdef CONFIG_AIRTIME_POLICY ++ enum { ++diff --git a/src/ap/beacon.c b/src/ap/beacon.c ++index ffb2e04d1..21fe04c2f 100644 ++--- a/src/ap/beacon.c +++++ b/src/ap/beacon.c ++@@ -829,6 +829,10 @@ void handle_probe_req(struct hostapd_data *hapd, ++ struct radius_sta rad_info; ++ struct hostapd_data *resp_bss = hapd; ++ +++ if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && +++ ssi_signal < hapd->iconf->rssi_ignore_probe_request) +++ return; +++ ++ if (len < IEEE80211_HDRLEN) ++ return; ++ ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN; ++-- ++2.25.1 ++ +-- +2.25.1 + diff --git a/patches-20.x/0024-ipq40xx-add-EC420-support.patch b/patches-20.x/0024-ipq40xx-add-EC420-support.patch new file mode 100644 index 000000000..6cd732cdf --- /dev/null +++ b/patches-20.x/0024-ipq40xx-add-EC420-support.patch @@ -0,0 +1,1477 @@ +From 35f45092d7d46f572c417f751f6e1539abb2ab73 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Mon, 26 Oct 2020 08:51:10 +0100 +Subject: [PATCH 24/25] ipq40xx: add EC420 support + +Signed-off-by: John Crispin +--- + package/base-files/files/bin/config_generate | 2 +- + package/firmware/ipq-wifi/Makefile | 4 +- + .../ipq-wifi/board-tp-link_ec420-g1.qca4019 | Bin 0 -> 607304 bytes + .../ipq-wifi/board-tp-link_ec420-g1.qca9984 | Bin 0 -> 171916 bytes + .../ipq40xx/base-files/etc/board.d/02_network | 4 + + .../etc/hotplug.d/firmware/11-ath10k-caldata | 5 +- + .../base-files/lib/upgrade/platform.sh | 1 + + .../dts/qcom-ipq4019-tp-link-ec420-g1.dts | 276 ++++++++++++++++++ + target/linux/ipq40xx/image/Makefile | 15 + + .../patches-5.4/998-tp-link-ec420-g1.patch | 12 + + 10 files changed, 316 insertions(+), 3 deletions(-) + create mode 100644 package/firmware/ipq-wifi/board-tp-link_ec420-g1.qca4019 + create mode 100644 package/firmware/ipq-wifi/board-tp-link_ec420-g1.qca9984 + create mode 100755 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-tp-link-ec420-g1.dts + create mode 100644 target/linux/ipq40xx/patches-5.4/998-tp-link-ec420-g1.patch + +diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate +index 66b11c8a2e..7bf73f4b2e 100755 +--- a/package/base-files/files/bin/config_generate ++++ b/package/base-files/files/bin/config_generate +@@ -100,7 +100,7 @@ generate_network() { + json_select .. + json_select .. + +- [ -n "$ifname" ] || return ++# [ -n "$ifname" ] || return + + # force bridge for multi-interface devices (and lan) + case "$1:$ifname" in +diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile +index 9aa6852046..a182d6b37a 100644 +--- a/package/firmware/ipq-wifi/Makefile ++++ b/package/firmware/ipq-wifi/Makefile +@@ -42,7 +42,8 @@ ALLWIFIBOARDS:= \ + linksys_mr8300-v0 \ + luma_wrtq-329acn \ + mobipromo_cm520-79f \ +- qxwlan_e2600ac ++ qxwlan_e2600ac \ ++ tp-link_ec420-g1 + + ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD)) + +@@ -120,6 +121,7 @@ $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300)) + $(eval $(call generate-ipq-wifi-package,linksys_mr8300-v0,Linksys MR8300)) + $(eval $(call generate-ipq-wifi-package,luma_wrtq-329acn,Luma WRTQ-329ACN)) + $(eval $(call generate-ipq-wifi-package,mobipromo_cm520-79f,MobiPromo CM520-79F)) ++$(eval $(call generate-ipq-wifi-package,tp-link_ec420-g1,tp-link EC420-G1)) + $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC)) + + $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE)))) +diff --git a/package/firmware/ipq-wifi/board-tp-link_ec420-g1.qca4019 b/package/firmware/ipq-wifi/board-tp-link_ec420-g1.qca4019 +new file mode 100644 +index 0000000000000000000000000000000000000000..58046713c3e25f2332d00550778b897b5524541c +GIT binary patch +literal 607304 +zcmeFa3se+Wx;9)Oh!>1>a}l9w+UD8>T0q5Ci69~YB+8(opfRYZ(261mf=xzaOhnQu +z5o5TuphLXdL)2wrqTp!EWM(D3GPBNFGwb~8b7q}6XTE=B{t0t3NhWK~nfSlEs;j%Y +zsiLcIQgrVPyXviX-=EqIRkfdf>L<&Wr7T;UpO(5ZC1>@rl3b#uriOs9VJ_MdL>$De +z4fQWygW(uOi7~>?t}uQ2bI;jTfF-k>#Wx3x0rb^Nu2c`1Z^tL*^zmQV!}l8CPdZnQLSC|_KV3`LJNZ!6D*Y!`dl +zpy*0f;?Rwr)6KQzC8|_ofdtF`**I#3U?YoVGA>|=2m6sHpu|41iRJyIf7h#p>eTgN +zS=Z0iw=S%VTNknN{?&b5dB+m#!YjJ2ZR}cfOjaMflq)Gn%{*#R%;BtFYMgC_;iW5U(V`JbqPCjQ&jC_tjNW8>PjMR_V>`t-?@sistlxEQ%S8V*7NzW?FJA49>Se8?FU7~t#Y_b)Q555ZQR +zs>OZV+UsyV0@c?ZI(Z#M)Ka1`#K)o_mqmre$I9h0sU#vCEXRFNGA1SlRRpyf>vP7( +zhKfik5-pQ16QxPhM70eE4;?*zvZHgfL1Y@kJ-ZCCRIC(#E*3>dBa{(ELDC>mxHLza +zqs;j{M^q>+R2CLxOS47!(sXIMGX3*((PHUh<>I1LX{tyiHFZLFf!#FqDKpd5D{PKB +zKYSnwmIi+vEQ*vyDkF=QOP7DWT(nZUQn|8do^;;V^F&LeOO#8BsFT3ll1)+2yM2r1 +zZtZd1b!LonGMN9fuv=`O7e{@ba7~KGz~}5^lrTyh2;ix~0gQ#)D^apQ03TokFaj6> +zi~vReBjCjd%u1gniWa|^{-S8LcwzcNQI>cL9f*>xr!U-m#N5)i{`T!hw=tCtE^EV! +zPaz(fc$0vtC +z_Ai_?(8KuYtE&LZ7Z@0z^die1g!5MLuB=+Ku}&#(m-x5s^t` +z`ehR$;@6K9hY2E$h!Fvg3Wzsy;PcQi6Z|>;iZ62l6u*Ip_GAq56A=N2{biRS{mGYK +z5x@K0SL7bqDB|F`2s|AO4Dt1?gcS&a@bUGV@-Bq)5aFIh +zxY+TG)XE*TR!6PQ6&0`Du&JW5O51*>v$ucX^7X;nAKw4P<6nJYe*$A2&%P_y36q;3 +z*FlTKt@KJLxdvL4(@L*`lIx#E>8Qw|C{voL%q*JkvioautM*u7 +z>0u(NI4?anh{2)^YwV;vMnAopXnh$l=yTT=fMbI1TX><6@iM1@=}UlFBS*QphjUQ +zzrKPhKVydPH&po@JLoziBH)_JFTmk8CID^>IZT&_nI}UodVjEKFN}JVuTicI%6DX>o?8~UBPV(kkfeTL)u-MV#}6#Ylqv+BD1Tva+0 +z=+Nw@3!LjpP!N#qguYf=qRtq3&(NW7(r!>^>W8&G>izjE62r+BcBwZ~UD9=hV&w3Lx_8JfMWZgA>rR9gIt{Puw`rEL{I!)~ud;Lh=umsg~vNM=uduXXpP +zh3Rvmo}04&Y~E4DzKE@Xc@GA*pLjtNvvXG2!;Yr%td#iBaQ|EHwCpO(NuL`TeyYFp +zWZFTQdgiK6uk1dZeK@XW_U6yJtBV&V#Lps#p}vE=^Oq}AqM|;$yzgxG5k;MN-J`43 +z9a)ECc872Nq_4grCnHW09(eD)-8=L1rShO)ZO^JV()Ne0pRwZZm93{2ACm0~-FRQO +zdsA_4a;(Vj_Jzi}75VbS(1^CK)o;#k3@;1Jzjf`EcT`8BYeF~Q?%cnvU}ei(VNjrmAUc9`wd&$w5x{%G6PStMBT@oXagmk}MxqU@pa(ZaQiIeMJov)T}6ldSO +zTHm|sMB;()?Or=^@W3$w9)N(eY8wH}z=B7AYi+)&sXQ}1F)l6^enDwN7Bgp#d`_vq +zVAM87bKhxt{S=q2&5v$_rq@q(SsN_yV;4riF$DOMJ6xU5vEF)2Da@}2?z3%xm*RzuA!LLvllPLXqAEaLo^nxrpI?At?5ro_I>ro%c!CGusTo&nk4{Y=6XOrJ( +zpzF&bCXoRobHN3Qxqj#y4Ie(G({1nJyAW_UV2)v6Go$SqEOShUVCk8-M`P*N8?N6t +z-qX~)uHg9_{XHj}tIJn|raXs!J&_3d^@f3=vpo&XKPk@u>3OO^5|@5GkqG+rP@toy +zvAMKB0R`R$t@<^pR4)B`LIIQ*dx9q{4C68IIpcPt#HUiB=ec-&S8w)lMN{~W$L}BP +zFFKjrEU9MGuRk}i<80QE#D-a0KfAFGtqWI&Y-H1~KRK|eWAW<=jp3Ca-Dv4u@M=tL +z*cPl`FZ5Z!zkl|vs3CftWq_8()UWS9T#+sN?A79Qsdwwwzjw+9fI`oq;Fr2+v3Zhe +z@0ha`gANE=NN00`&+zm#>$OmcNx%M|cI(&AgclB&%YSDo&(Q^!x!L&j@#cWU>OpHB +z9LSJLBu2|QpVU-egsDCUd~6_K{d(#S`kwhl+6zrS&q_RxUk`VYV+OX*i=#ffF92}? +zK2T$nFiIQ<;Hkj@jD;JcWB~`qf%{S7Xc)UO0vG{|07d{KfD!OI1V(e;F~8pHCV`g? +z`0t~FKmhP^zP>GfJv^C)hu%md-e^fB;R5rK&*o*uXYz7sL>Sp+)Mo+s(1HQNPa0vg +zq!I9*WfX+r6Ue8Kvl|TkdL&6H0sVS%5Bl}w9_iJ`BdvOfvBo{Jje7Mom;N`vsV5_6 +zLpZ_f5WxEN=*`nuzuvq^XqScg^>)F9GfxBr_^cT-dGuWNL>Q|heZ>6w@xM&4mtVig +zf?wbDU!(NvVMw7bBBnM$fOsd#uO|;!HZg0g`SpR;{Cd83loqwic<9$7(|5ktq5kc +zvu30~VP}z1+2x}=v;*tc(@0qE-MT{()l>X> +zF!(MHLF&LkR!x6GDzg{X5QH^A7Wu&@gUKF>gx{rbm4pkEIKTC~;b9Cgm{O(;-B7U0mY|8yAX*LUkH +zb%ojtZ3bx-XcuS~aOv0oav15?_v&}(R+0tI>R-|2YL!|gmwx>(A7K4@+aCu{xFN!0 +zuzj8h0;4oRQR35WoX49G&|g@0eDT3}b;Qe8&X*ip(h^%etBg&*e&GD-V+)()RkJoe +zx}xsLeLd}fq>@d){!*W&BmcFOy%8HfxU{)F^EJi(u$S5N>j(StURCUxRXQ`T_d@B3 +z`3EK2L~Ggf>p$v!@t~qAtYqf0W4iSxQVvLV&M0KluYc5A)S|4Oy=G=kYtM!gsZG+V +z8HH^6^#k2|PAsU4sT3C;>@Lw}9!ad9UCE|j|9)@N$wiHEJAzl%oXu}VDhsn-!TR;y +z^vS?u^#%k2rcR$RQxqIJYj$K*G|Ts(Ewwd9A2H?Yjj!~!fUR9!oJ^2v8(6Dl@s^!ZNd(IXvtX7rcQy!sdhr{0QJkNEURuO7wU2z{Kmf1?q=`t@;ZLWs=;)|^Jv8_LwaN_b#(Q1#m<;^J +zBjav>nUiVHBwmv(BbMd*8QJx4fou$@kF;&xXYnJ_n+tGQ(@gEk2pgEZZ!ce2pc=Z> +z)6ra0zP2ETOTYf{FG0T^MCjX^x0V+aWDE`Vw1eP%aluk9{rbnBfqwna`#mS1g_jBz +z4gDMnsL28sp^~cdm7tY>qvtee+Lx$O(eqs>fc5KbP9sbKunCceWEgmB%YjAP6G|m3 +zA9mCo%BxYn5}L!NUw^S}OT(hA@oS47u)B>Q6IkQ +z<%1kX38Tb;0G=8gz*x93N)~W%90(94j-FySMgSv#5x@vw1TX?#hXB^E_qtQ=^#dLy +zU;lT3Kw_jT*z678d^Rf*Rt8)AdSyy-axy&WmPv(aLFbZ^662wN0=1xf#{LP?64q=S +z-J5JeLYrkY)pQ=b!OACZGOGfQoo+$xd%+1yyNG?3F070pT8>sFfhrz#r&_a9`rmzxj~yP1wKrM<1do +z)|a??-IuubH(%n54<`{{XZjH{@B0y1FZdIp&`JJmxpAyq{Q9|bl}Z%R +zx&nGaE+;UqAE^^y>}x^yjpVQ161_LH*CPE$XteOfLQU;fK&A5Qgv3y{4^E +zuNZz`e?iv!6VSGhcTSi9n|j7 +ztTKEIooiATm(AtUum8nE(64`TYq(2SuidQ4HGHV=*4Aq_sSCOE>wobW>({gWS-13g +zmw4f(#HGB*ACD}y`x^G?Se4B63nb-l~* +zU7hb4Vj#q(Z1U?#DH(VGo=6(X1%7_gqS$?wb>gFmfB@F7$NKf=1w6r7m|rir +zQ-V9>ECPJijJY`VOuw`J5NdhMuOI&_2YdPTDhq!7wX;_G_2htP{dx&OOh^2BKaOE4 +z6viZmem!uRv*_rke!Yw!KDBO=onLRA%lg%&*CyC+F?yI<>lhn +z&$iUBCn!3<5BWt_5VH641JFOTgA0znCcuo&>eo+)U>d{(H^$PhH(bAQyr-#oUBUA= +z`g=}-9Q|t0l)u_@tgWv4Cm>OO4Xpa=l7ajfb=|7Ac;%A +zo=61!dMMD*)7V^Epnw8zgI4_-Rq7Cjem$YU`t`OaoBP+QJ)s5LI0`?<#p}CzvyUs9 +z!goA=|6qU7$>e59HJg6@xq%&LvyLP-%-Z_djddr}4$7)SHnQp0pB&iKvH10b#_-CI +zZnX5GH-m?5!TR;Wp9g$(_?_eE-AP +z`t|1W-yGO5%VAJi2OV)*b{TGE2ORN{<}4Ft@u +zr|!@1nQzm*(B$*1#Pj&|R{vf`9kP919QAp^H7OngpRk(~+r`y7A8Zy|mO@i%nj+b+)M`3PYBdaPe>ULdsF!u)!>A;SfPjsTxE +zVzbw~}$n~dw=z38fk$OOPA!{-!^f;rkU=fx%l;F +zp?OrF3-s%`yTzVjL*L%L`t>cL?V%4s{}}o=lY;#p?b5IxGzIp-S$g4IGlFHBJx5-- +zY>NlYXNm|AB|hE8c`yPP0gS-2K%l6iQrrIJzx^Jy_4}uTaIN&w(-4U0hi-rW)10S< +zrxj195x0qc_@TozV({r%h^3JCB7l&OhSHz^?z`{)_=i8B2H_3| +zd`Q1OA|m3ilzx2xNQ^<=3aUKhHI|3GrIZh4rhDMJJsZCs>(`U_p!divY|MsODpra= +z7mFgK5z2_7ASrrEmm|$l=6s$bDwGx~3yZR)*`j=Dx-?yx{&~7+v2?L=aZ#!?Riu(q +zeD0GSow^I`CYl$AA;KtT-O)W4_wsd`gcj{dIhqUNZ&p==|UemxYx`t`QX +zF(JTv1KcH>XALr7lrTyh2ncX$aP$eu@VM!%kASlERT@Mr{V^6O2j +z^EO~`bv_%-d3v%fe*N<(pqIABl2#(f*UPZab1)G8{B~ZyUWWDSg@2k^dWiMwv3@@M%=eBHi^6TfNTJYy(z!LMsRR2!HhJ2 +zp5EJ8@l*(Q78#XYKFUKovP1eqzO?*`0iDEaf9={eUiqj@FdrGgj)GQM1-Ph+yJU5a +zSP#7tB~~P`6C;2Tzz8^r0Mf4q-FiyD9t=L!xrJZf-bnN7gQghy@n-${|NZJejr@Ab +zhxqkV|MA~Uetml*&99%~OY`e@l$-eVa82d%z{amfDm}(P3eL#oaD*(W#HfpdbZMOM +zAw?jnz6hfQ>O1!P*ucR0_0%2uJ@bva7n*#Ym5e{Xo^Ad*<15;rX53kfHf`1Y0>?B}Wy{Kzja<-K&~Xb)Gs8+B(uwu3oEN%f+vMJcPP5 +zs5_`BQ7=<38@{7Gq25_mSXQY2Slgv;%+F7Z9R5)Ej;5w8M-`3OERTm0p@l(Ri?&*w +zqs|$=2?eUi0`Kek)HV6bRC5g<>n~`V)$3IesKBSgig;qATVJUw)MjWiNUK1*K)Yc0 +z1M>R_D^&`^9eua9PQ5xm78UsAup*Hd>DBMhtt1Pa)xV<4)he}0!(IJ(fI3?xeR6BK +zS9d_YJbyM>-~o)mp5T=?6L`>krU*s}qr`!L`=j)iuOB$S`q;uIdDX0qkFKaYa$iq7AgN^I*I(+>bmYI5vNvMm2bVUtXTGM` +zANDdEzkaYU?^VUFS*0`cdM}ion14{RO|+JcU;k0>iw6}|VI?z{9n-Bpk#az?b4FoX +z*XlRtH-?u5=HI&Z$~&qf(KVr)AN3ZsD640$nVHktv*AQ)leB6^;qAVT}-98@L+d|HuFeg{p`w1UDd5i80ohTcS5HTVZavbhN80tIe!bAg +ziTgJi0nD$*{Ce{Op5QFZuNT}Y!5wlI0X}QSOddU#?QB1UT3-14`mppckyMR;GWwKaKbO?Aq)s_NR5>dF^V +z$)l}%x71al!}QeT#w~T#TlVaK;ic_$TXt2ayi_u8o(1QA-;cnTnsi7!zZBJ+)DN2q +zf|wRSY1#uR`nfSR?GZ*TIkTG-(torJb +zf(7Vt?Bic55{RK2J#Ecf%L^cJu&2Gby1ckx>ChFF4SXsn@K)P_@}hzzWP#5Tl8B-A +zdrm+LFBL2r`Z*L(lLan9B~|4sRf$mD>E_z<5>=|PK!RoeY#h0NDHpe3;}np|0z`>V +zw}qZ(;H@nO7Hv-`m8^W&QFkb>M)^u;&i$+Vy7G=C)`eGeUEA2T=$NcNc+17MEe(sd +z#;=JgxYxd?Wkq%J#?YmoUTJ=J^)Y3A)V7bV9q4-LEm+gtar;D7)6(sVQqiK1Az!Xq +zxiNU@rHj>_`EAc1h^)GMqp@%9q3GJ+3ZdhI`^S!eT`E@S53W^!T1f&q(8+y$eb9E& +zB>1;H*%$&YAKs8ksaVCv#=vi!e9oL0`5d{t)DNpzv7ZvRdN*t+Sw-pB|KlIujQsc` +zx&mTw?nnOp&rBcU+(!il`1<+%3-Zl`B^7h|zyJN~zfgJI+F_`ijdP!93KTV7E=^2y +zsUTpyu`#^ +z;&U=FN*E;$1n|`00LH?NQL=yoA7BJ90vG{|07d{KfDsrI0nE7{6CRxCfe6^tv>&fA +z^Cg<_%{N}-aIjrloO@+Ta&mG~VysLmOba@fge3Q6Qh{2~J!Ag_X*oD;o>{SMLPP}r +zS#g-;*aJT&9tcpeMvgt&w~NyVxm+TFwN+g7~RcJu@J1LoP=Ear%AzDv8?Tu*3{nW$!{b4}osz +zLkQ0JiZ*Pj()Qo}71ur?-o2c9TlG_Kqo&?JO}%ltsCey$O%;_@+V(S@z5N51uMgh- +z@cu6z|LP0-6BzHNHZQ_?l!ZC>9(6kLU=RX)){MD$_DsL0qKP^8^nb_k+uO^zPqWFn +zpY}&9oqLjV9~wZ75g1HkbMDLB#<{;`jdHv3J`_;L_azx?ID001t|eP-tTREo#{OpJ?Oswh29>!-M*tXf*AwTsrr^cnCW8pk&{rtJiMU@V2pX%-C7O}eZ%I4nmH>C~Yt!z5?E!WnaOKFX0 +zd~VCt!2>_bKAG4utBOtM{*$|!tE+nwUJI+yzu$0SNt?V;{0f`S{Y8CsU+yVcgQ()l +zwR&CV8}fZYWo$b4R|a?X=ber{7_y`D>Yj61ZShSZTiA5&yRU5NTK3kQdhzBn7puE7 +z-;Ajb-h_4Tz4vp1NA8&jIIF;6OXq&DwL%rds&h{WMu7u!?mcsE<56)VV3TvtlRdzf +zWxzWhcbB~)#TMrto>ij|A1f8E1#gRm$MdLv!m~`eI&xuJ!k^@6M7)t}KLCo8v4Ieu +zBZzDwjhHr|I84S*%zKhI@9Sse%@aPkz}Zh)6uXaIFW*ll{PBBl4@sSS;KXm}y!_Z5 +zoOpL5%f+>){kAyq?oP*?d-L+30~Y4oI{+FkB5VZstQj-8^<1{FN9lO)Fz4Rg|21vb +zUptq|g9O@n=-j7em^k;#N?%IJD=Ao8p0l?pWq#`X)Eac#DTDfCb0h!Xv9#{t>z#9u +z*8LRtVG9byJn9aX(z+*HrFAbOd_J{q&x&_%oy>6z7thAP#k;4|sXaUY{f-@)^He?4 +zOx4N=>c`|T8X;C%_txp?*dDEWI9H(NZ;ruWqbM;(*x41PPk#>XIGhXIynE;BwYT(G +zTK7*b-)L)7R~M9LJ-N}-+FS{$_lvl+?r+`!t^2R9-gu*JSM^Kf*-x(Zya|H!MFp8$ +zTK6~afY$xj127g98`~H%7?<4vqu&qr}lLc4GuE0vG{|07d{K;B^RK-o4kI +zay($6BH(Jizfi}?(Jx!Pdw5a}�x6*NGV0+sSiz56D!8wHx^3!n}LC;KG?F0s?&2jJde>O#eg}t0R5Hy!-LL9-J?FDHl!8}Jwx6-k9O_h-4nsV +z!K_gtk-!VEBt&3fpgnQwRCn_3vqSnrz6|+WsAFpP1YwulJpt#M5iEeW>%jeMr?>?^ +zCj_I!2PK>bBY+XW2zW9A6&2;B6z^Uv4l=%<$4=gT1yz2=4Bu}kq;~9}>x_tiYbuuq +z%)2+MaMG4Qn6C}xmXk-jZj7uQK}g^(i~;Z=Q*N6X`!;PhrZn{-GZUNCiLna@KF?4*k9Y5^-u=jN!)|?%E=?;L +zX*KN9uhgY$qqy|$dpkjxeWb(CtS{GPYg0zvF=+G~bvfF(TzdDqF8C7fNVnk){Z3u6 +z_Jxr?!*Ts?-8xMQm)`xkF3`J&Y$x=!+7flf$a{tkeUo;Bnp5vy*NwWQGqmY!YA +zM=lsn>Fc!X)JwVa?$33D-u+0Y;dT8s&C>h`DB7y8*5u?za_Qaob%Wmh$XUZ-eT8Om +z{_K%1!%=;uCNqCFm)`xkZqU0QIb~?lZ_uRYhm5>!IH)fNOT?vj--pIvPr!E{e9*!u +zVU#!!z*B<*7z?-EC|Q)o2N(h3&heI)SEQv#W>0>vb@!%)>2so{<9fv&xKir1#hkCe0N-CsIYyES)7j6@RB{dVQ{6@|&^p%GZ` +z9)Dmk0-l9{vnm|6^zQpxYx7l2<(cV;adENm8zY}1i)lT!15vW|^o5&` +zm|N=Mg1uYMnwfYs6a`uJ9v1jYc_|L$xdvF=}^c4SH +zL~`g6zkb?L#o=7w$tNw6FQa1gzNAHDJWuJ``^ylQKH%^)-bn5No +z+mF)8=h?Kw*~a4A8{e-hm&sggMVsn#%3>Qd*14zdmG7BvnZ3~D^X$a)`1Xvi@v@q1 +zpBG1c0=&e;UE*^xF-jOE4g~Pj-~h(LjZw0I10P@nFaj6>i~vReBY+VY69KGqKPEgl +z5hL*I5a7$p=bP`@_1q;b+2Y&7GwK9*$ty_73)X_y&w`Y^1o|gTD={9v@Fk5xPy2;u +zxnvT#u@bCv??!OFylSj-k9F?N3xsxCm~U@4WVnFP5#Y0C%*C;1`h`ADNBf8Q_Tzui +zU@za^taH!Cx5xVSSl^yq_a5upkN&LVb>GpLjP_uZMq@JC<9?Jzw~0L%0gM1fz;h7r +zG<|#YoE$yL$9#L^J?cHIZ-38xyDngp&$AQHd#rD7^S`P4FZFQ?HctX%z$jsq +zI1uoJslhQc?Dkp&u)aOkxA)q~j|cAc2so?0f%Wapj~>RdMsxZpaeLTeeS5F}6bcXk +zzI=99=Mx|l&$3IHZ|`=lz5rSF)ShmnrD>3`u14geynTUaZba0 +z`*A)2xOvwjz-P^v$*bqGUEecd)QI`^<9}^YYt*-23SF^J-+tBh{X4gBsY_Y0AtNm{ +zwK1KkbH87v?mNah_hxK8VTBow!F)bF+rm2c +zo_&5@JvwJs+MqvU>fC?WUX`8r*^%PJkl5H5_>Gg#nFDW=mdi{11oI|oS7R#V`aDJF +z{&{0aPEJlrgh>?@;TntN@dJ%t8tEE~Z7%TBxxY>%>#1DX^R78u}O}BQKw4D8RcvezKFf +zjqd9k80Z^&OQJ>r#<`{X#N1L{V{Xyhtv#;0&Wv$R23B!uS3AdiI=}9S}k5EUnt5FPoV=R +zCtiYXxx>+hUzjDIC5jfm$Y{eh@BTSdwU}T1D3{lrI6Pp_L%_><{I+=aDJdxmMSNV0 +zEJ~ObdPuK`kByN<3)4!1K=v<6n3e>Eh=}m;FjgyK%+#^VN}w=z%{I!??ef*RCx|p6 +zMnn*@AcByK%`p@FIsS?-a|##yCMN*)#u(%$A_5Nk%PvFulP|v_e)qet$UU-A%m)9j +zA1Mz1dX3`nw4>(ed4B-CcSKm{-km!4DSExqwEAW=kV9#I0{=@=n>k|#*h4I5!kqK$ +zVa~Yn?(GLrm?dnUunCfZbNW1s1kNdHe*&L1V=k^e)1QDo>SRzVov~eY`WdHz`BAs9 +z8EDPnvK`~ylSBsP*jqj$B}YN^IhO1p)lcJ=N)1a76G_E+>3O16;*9hR(Nb}FH~JY} +zzx989zPCcw<(~DiYk2nyta$fZwqV{p^Gs%iFpp^a&QsdryPrm8#JqdHc)2$p=G~j| +z72tv~?vnZRa9ehx#9h_INx{7PiF2-m&{NF27s6S1c74FS`?2}?u3_7oYhgRHym|N6 +zjUkyf=)1FfCc{LxHyQ5b-6zmD?D~t&o9twJhL;|u8_D*JCd~Z!b2d!|fu7wo*Wgm# +zJybg|&_DK;9MZk9w^a9-TPEY4veDdSa_*7sB<((qL9u5w**-6h`s}^{#0B_3jZwlV +zaUg)F1_v+}Zj6!z92^JkM~S0h?8XRS1TX>^0gM1f!0QmeynC-Z<#@nCMSw5agl|5f +zj+3Kbws`l5Hcs*G1#3~f_GlBYU6>Z;-E(pK$7JAR-aW?$7rUKC0Q2tM$-7VD;@#Vy +zU|vCU+G6l;2bh6Lz-9UeD1Pht(P4af_x6K0t|b&)lfmf|Dv%27pI0s{!61oS%u^1CkJ{HR;l3>cZnS=f&8?&XMHkv#U6&q&EpVBWo*diM*H +z8@JR|Z`rf|g|YPR|C;OLBc5N{)DGX;B#6*{*i^ti0QL~zE1h#7Lh$n=cUGI2HS?%D +z#Ch}Pef!NfL}tij0_X=>bezP>Vz;V<{qTXcyWMy%is%j2Y23#%$t1*o4>JDHc~Kvc +zEu|gg-nG1YR3)e0J&$(p+c8pN)~s0;F(f2}V8+0}K*EkVb?S4^S#;5X1371z?2!JD +zFGKzoS{!ybY%q*78)w2bDsZM-CZIWE4wh;59Jzn(6t}?Vd|;ILpoH^a1TX>^0Z&Gt +zqN2QX?b@O|6(JS}&7elAQpCl`<ZhAO{f2VG}GL~tp9Z`9>z=jw0k`qk>PRjTCS4|JzBHDx&}87iRbN=P6^x(#pWcj}6@FO2jVj_Y^p +z)@f4oA8F63>+*9|=}@3Uvzsn(t}8)7K(-V5T5X9sW8^(UhrUU>L7k}|*7m6P=dVZ% +zCtKL1-bi&x*NwWQGqmY!YAM=lsn>Fc!X)JydrYrE8q`T2>F!yoG2A-fcfx^%8P +z5nAXpysqD-S(+aKMO*dNnw6# +zG>h|Rk8~N1>MJ#w`Lm%TU7Cinl`4hdj=o!4r(T^OOSPbYE}b$o={IQ7^Fv17HXPKK +zgC#QD)t?6}vsKb3w}yLl2h_{+XHzY}80-o7?t>3n7$uAn2LgC%Z~$ZBwi_jj()a)n +z_>n{bJw#=Bkm{k_CgzF1bG+r{6=^Aw*^}RE-MwjH`kbiertCkPcT}-2VryXDgMsZQ +zUeLtsoK^O)qp3VAB|bFV|JFM#y9#sC=SGH~>MuQ+c2K6Cx$4s^yH95yj;ooy`Lpio +z;)MzEvj}3S@8ItI<;s+(s1GmiJDYt(Q72ya=xTLG*5R1l;hR6{tFOq(h?9f|-g|HN +z&is6-JSbS(v+9ks{h{k;thjq+>*>XZWV=E)-q-EkRGga}EAqR2p|Ng7zC1BBqOEK7 +zoAVpP%L4OnU3=vn)sg6$(9O3y_irm$nj8~6`Kqq5zMv>w6&iWFukPgXmgJhSlFxo# +z_*QcB>>WYt2hScs{ +zwOezS#7HC|-EUWJUs0Hx9vX4t<3jt?U +zI0Be~W#|w3TPup2$}`gwdts{Fn|mcpm3woqOy35;ynBau_m_e3g!JbT^9kwLXTu)p&*y?3ebOTNGAc&z +zOIk$6^Fe-Tq>eq(vJW^s4IDF_${e_k2LV%*vmiuf*wBN#ryeH5*s=% +zKlbtUoANFML?5L){UHQrd~`kT+81ruRHf~|{VT40LVR58c*Y>9J9+mm)K}+2N#&V` +z!M`0~1||WQ=@%;R-i7FnYgIf?o8YtAKd)R^f)pTpiY?y#Jn}*T^X~1t +zUZV8wQ5np;XG0G2?%7Zw2)h?saRGK9Exlfek|hNA2qSZNrSU{J_4@h)AOy*^N}5MgtmD1f>pUUtMFsJdvucGV`F3v +zaQl(iyd)xmixVF)X6o2wB~X~VW*cScb}{dM%#W`}Ct}{cdwKcp<=wkbU!7iybitm% +zza3x(CIOe}7b@@Gh3Gzus<7U@#iW7*?grUpNF|T9 +z?%h&Xi4M~;OnUbvYg3jjU!Yo7Q-j7TgL-6hcX#>t5R(pp)IGu@sUJ2K1Tifj2n+(0 +z;fXnjZ$E|jU-H;`qfm_2x&Pr$r?TkisLs8N@cGobEoXG@QC-$L_o$E7Z4iX(bnbJ4 +za)=|XQwUDJJ^5wWw$r +zc2&Prp8e!n&zsFv$>}jh@rZwdEzMRAYez%l_Fo!b{OM03wsU5+y#s2tCgy{kvW*RHv>F +z%esE9zI9<`+`5RB_pk2j$~%@=7hchIZDZG>W3u|-Eq8mXTUPFhc_}RW?uET?E~!$K +zMHYQ}rTN{}$CUL^+djH>pzEc#QVvLVd~&X~C2zaDAb9bkfxSly_r|Xa%e{25x--A+ +z`2&$vcW*TI%{>%d8(blDTyX!`5pZ^e4Qho8BDC@K_4Ps9Nt68j{U;kkz=xf+`LfTB +z6eotn#>T*JoP5q4P`8rHOZ^0+Y{ia@XL>=WzLCfDbi?{1{nbnbyQ +z&j?9LiSg8-vlddmK_Nb#+B<8pVZ+9^zfjw7@X*oYCp*jrLEnSL+hw?uZ-0T1(Xb@R +zoHymBQz&CMoo|9s1A7w;FC(w>CZk?WY77v=wbipWLlsFK;Q-cE-3%4hrWHBIofDyn5U<5D%7y*oc +z7b9Tg+o!)MS}k6fzEG4UozM!%kv*Rv5~qlWOd`_{>D>SNk>W4`I`=Um;7b9)2I=3^k<_!NH0*zabnNLE +zDK-u-1LhjjCQ_q(siJ+dhseW4?P`{!x|5TD-{bo6VF6NEc-^ttryY5#a?+@rSL +z%eS}hdUXQkCdhTrB5|u&6d{dJMik{pbCfwnIjuROLTRD0uqa)cu1qgVZ%r31mM&H< +zE-ETsyJ1sBWtF!5OlNQZz~$?Mw?Dl9i^sqE!u|x)%IyTi4R=|<2=G}mURAnz$H}wj +zF6!?L|B}lV@DQEqnqz!>r<%00Fy`A^^X(Uo$+y2Y=neYzk3J71a($>D`Z@~e5hUMU +zN;}9sJMaAtC6r{5bL@k0(6$bfD!O41UyCGo>Y*BO+3(#V`JsAsId50^lTqJGIz!YmBqk{1ylsJ +z8tZe$$2NP|`1YMN-`;GPp4!}_@9B6M?&aIlU9nR-9v34KFr7evkI%CcYEm$_jB2RL +z+_*(^m&vt9wnHR)Mj@Z_oCpk@C6!QXjX#jlMYrqh!W{+rlVuV`EMc +zAWG)WVGARG5WxEOSl=Fh5-Q_2?KUa3^3q$Gpb +zOuUdScuH^Vp8zdD4=p1Aegd?FK9RA$z0l8)`}&9V?I*Iny-CB1Tu?G^519$ +z%*D(iY +zc(&j!oqK5O|FLdwqUqez{U0x#ds^R~-qZczyMGP>-@HQ4hjs4FXGnkx#<)x7)5C4q +zjS_cN6DI}h+)tcyC4`BKD#dfaREM1W0WvT90=g4!2yhg8>3_a2giZ? +zQQ~MAyDg-9){L3_dMgb(f9b!CdiNynJ~SK9s33^Y1PT>+r4q@zC#Hl?p*)t`@Zx#Y9pb!s^S=G&8zM7g +zGJ$mD={PCGGQS;1Zs*;jKBE43jNZLiEGC$d*14zmcIw@`f_E?HJmHky{ew_hSaI0l +zut9S6ab{*oxMmD2Nh~fn*NniDfv3y;Yp1vcKBoes#0Mpu2P1$HzzBFU0?z2&W8S^} +z&(+!H66W1g_oVmCx29fb@_B~hdAxh9caQb%+5RS4`0(wD1sog)7$pv1EZi6+3ph9q +zyb>i2EU?>a5x{!)Snu9zCqEvz*CXJp3I|i}-Y7+8f$3m-RW_x;kTOoDjfz_Y+y~ +z-n{hYp%&)dd+3Sv=3((!Gv?yjGyR^5A?DqW)5QRz+1*CH`z7GBPw#%&nssYZO4g<< +zTfRWGj-hqm5NOo8FGbBH^~0tDY28!W_OP9UwC<-6{|npE!ChMSGQ#Im>((Zk)_qP; +z4soP)3Nc<<_rU-lijHdCPoM6*);%}p-umpi_ZVy4oALF^KG|V52;&g18@rOs&k#$+O7Z7nQG_%?8Br7@ +zMT!|Y(i~;Z=Q*N6X`!;Ph|PzKTj7emM&H_F30V>yWX_v% +z(@B)Eo6a}EsDZr+hL@4od6Q8uyUFMI$-zU%Pj+-Nx6*;wSXh^OCR;RjvDQ7?Cz$qm +z^0gM1fz}pePoO^Gd +z0eJj^LBPv7{6(9pw70(?2-r7)=KUAe`@n1Mhs5M1+TdB^;j|0@=TC +z(jfaMB;OnevS`3>78tNc_zB4;n9m_cN6rL@i0t_Up%sgK!XUI8_h*dz#3>>olgRV~ +z4nFbgM~cG)kw(OTFsTfPQgYzv(=ikLz}^2cCqVHVh-gp7AU_ciaM)jV8PXA#|98Lp +zirga`MI1aA0aEMUw-Qz$2*StLZ_2w6&O@L_{2>Hqd_^1Jk8A(!Uvcdd;@!)sw^cv2 +za)-6<9pndN&b@=c;bOu?fX|vSlUvVa3wMOh^~{qw_k3@K=>L!7wYQgZZ`Qi!;@sc8 +zW7N5aD@M?_?}tqV?2V!ha5+hG?g_%r4^l>jm^E(Gxqo2Ym@}OFN1q20xjxhnT`x#Y +zc$Ut6aBwie79G^NpE}i@oO?>={%@g>tj`%A8yIYy`%V+x-DEiU4oLTM?wz|Q +z#-+^&@Ogeh%?0MxT;BZ_n!B#%++&@4taH!yH_^g}?{6&N;5fi2aR6iC#wc09!ExY~ +zC~;tc-Cm0T*15+z_g*{s@xZ+v0cRCBZ0X#S3LH)4ndym~I``v#4lw6_+)n}SfY1=& +zOZaegKB3|8jQeAYbFWk?Q&N&aa3&sGo`}ISo^EzG2fFq~?z@QO&m(UAw4;i{xxkT6 +zS|nda#pr!Wi^zCB$S;lL&?6pwz~N~S(cWK1a_$k&9yIew?mfl7|I+Rb;R4SL0aE84 +zIPn`gFF$q%C*Iuy;o{oUep{S)cc;6TbC3RESg#;~OPS~?3FFGSmn)UYZ0IKA1STwK +z!eL05h-8ip37<7%E}lKpA7PrEN~I^+j&bfI&>2X4HrufDFp*T8m!2nDCC*6C5G@s# +zccUMRNkAT0|NrBAYh_*TSs&ZWxz9*$+)`J)WzYT>%9}T=C`wtC^I}Fu+CqlT{eh!4 +zbnc%+I`>>bp^#J1&6_vx+i$+{$qboH{P3q!S#+Ef!d23y|ABQ5M>+Se$(9kza{Y)P +z;}2ag>LYEN_gRkj*jx!%(+Ij2te9zzCe-a}Q#Qmohm5zB33aQK(2FJ`eW?`1Z +znGjgq6Vf%7&i&B!p0}E}m#-{P4c+SLXs#(=TaYt!wdYt{UG+~2GKQ{!RbO3Fu;2#> +zkAJC1Ack)Av^8%nFM!0sp7!SI^5TM}Lsw8X@Ts7{TWtr*iwc&I1wKniB8J}YIRP!a +zRIq61=TJaR7PttNRF$t(B|>$ln`_HURH?=S33fs3m8;8m(00v{37mQ0tt|%@ZBHnb +ztbEu}cPOt$`ATTc{j2-B@{T3eg;#W4+t{_}n5;f{%f+@W4U4wMuZb$S*S@D^MRoGV +z(50VVX?}P0F=c(!wvVnI=z8g`lmn6-w@*|xE#0mt6)pN0^5v?P8-tf#x>((r-}d~0 +z$f~WYBkJ_e@5FF?5>@_j2xIV^gV+c-eU~G0`ZR +zAAgbEq=%WAX&SK`P582{G4#@gM8aW)n8F#86~Z*xYhdK%^ZexCp@WAyj9Zvd-f#Sz^o{U#M#IX+t$VlBRi;!|zK~|t +zx#!~C?@71Px%aWsxgVQzUuMC%CtS$6zh!+H5 +zzn_WyP7rsV+Dpaf!MQg#3YH7F{_rP{K#>mcK_*b7gPq4SAkak}-OD)(Qabk!LSp*}Dt+-2k&Y)MK#0MCh2P1$Hzz9rK1k9XyHqQP3eD$Ay +z{KFr94}+t4_=t1=^soQ-KmPKU{{kNu=RPxYek#S||MAD~{^oifKIYt`dpWo*yh`8s +z-7^^`s=dj;oO=^GcJlMtY4Yq|z&n2d+O{w7{eXq7by{2rT{v+*KbzOe0 +zDjf=RXm-;Dh8`v;2*W-7Ic+1mXw;<#j}jFG47E>xO4p#R +zfG+8DZ)o>v%JlE+`qVY~%T#j>AL}n@o7L-85mW(1JQ~Ak-9haR%_>Mdr)^Rfm(7Ka +zbZHvOR;m<+JNj;IoqBbCEGqDehYCRH)^L}uUb|V7Yxocn>ouFyh0x9OfMvEy3aP!i +z1M21Zv&jOFVGQ;Jue_PSgXS|uFiIFD4g}mkH8>i^Zm&h4^X8sQS!YsOBOA}_U+&30 +zmC!PK&;GM{M-}@bwg%=s7}$Q|1x?J(S!L&M?!T1NF}F3c;pX5DUE$l$|1@&%ss7TF +zX$NKMnX5j%vio%Q;kcUFo3(@M`c!X6w}{oPS2p*izbS1HZ~gG{zO&g!6m{ZtkFHjC +zWF3y#9lp8c+PZTotr3mSZMiyl;Ahz<6I*6gX?s?^k+wf{{frfNuWUWN_>gQ@=*Ca( +zYOb#CNq8-+M*n`pg(YqBM)50cU8~=m-xyvNn1AcqEAOa|MAw9FzNoM6%RMD)5LH~c +zR~>$>$>lA{HDM*6{k-t4|C{@XCvq_jWHi8dDdtx%e3@LC}>)aDlK+r)D0dwvJaT;(Zo*@FG +zDEEK2YMk$9)7AN`y5Vhym~#)`CwLYteayLc@S~MR&|LcgP@Ieng!mjmWP{HAv;oCo +zGJay-le~FfKO=9R@W}|saCzp$7&-8Qg?3sSdxqk-#_-!;n>)dBTzO4=QFKnsWO0w*?RaMs_l6|Tb +z=iaPyziRvbo!ht6rL14Jd_h_&x|Nj8Me)T!K05bPIQoTk?m2(~o%>0|Ba-VcBd8zi +zoFVW%T63Vd{?6#!!`E;@$=@7#VKgIl_4YS3+wDUQ!&b{*(dQ%M+t8CGh-?c(Vh-5cb0IbH;x&P$)nU+d&l@06M +z3t?W3&AFdAI``-uY;;J9kBgB>(UJ4k^AM8aK6U^ZexCp`*t;I?3$?Y8w+DfAQjZ8`~HJR?L`N&;)_OGPm$00T>cuYxo7(X +z(?0iKlj0U=tjF48l*U4bPQxhCNQ|||D2;^PAP6BFa8{t48AcjU&#BK)2g +zoJ9(^fCg-M7^@WlUhY&>WQ0V5s#&;j)k*;3j;?%DO`@7PT^oo1?)lXGv%feiL`@7vREaBwie7U6~hUVJ4X +z0s{l>iBqRK&$+jybN{zc$5ieK!l-j^fg$$+oNGql&Sxvd6IN#N7;K$oleIrEAv~<*5j39!k?b8io`S@cj>zPQ6*@J}NN4*U#@?2Yw26m!7!^_CaZt{74;(45VXLasJjvIFCi*#vP$w;eVmwu%# +zT^q%vbKlzug6tz5hGu=aE?b*2@{U2H->A#c&gIg%*L8u;{Ybar4gF4CvG#?LKErYS +zZrwUf3YX6Pxh~MThioVGwb~MO#>jhy4t(ooRbnee}gU&IwFulf-tzK_v=qtg$?vu9-n1}%PSkT#*mUk6b~Ke|rNoDZ``>z}WmjQN +z`rOEHHl6#=x~q#9CdAJoh@rlNyYrVTQ=+2SbnZXttFOq(h?9f|-g|HN&is6-JSdn= +z=l;HK_om|9XjqnDOJzxxWlL^-sS13g)+nkb@>B;^0p^syLhrI`>J7 +zTZm}?B|4T7BA?rnc2ASQzIU}| +zw!)Z2LdqsS_aYq8*Z-Tw+5bX$ +z^M(~gDeFsCWMrgf)S&TFI`=34&nTUHNShWwanr*IVk+X?vl8yXuTU71D9*i4X2@g$ +z$jw$$T%Lq09SUUHH>o<<~G&Qd)c>YFz&&lTM +z^3|%up{qT|+Ulx*Qjjrp4Xpa=l7a=%|9v67`kCBkTi4!Wh*Zz +zP(gvW+76T#6)d3&BqX5%9X*ZBr3DHo@OE=;`5IN~(8Zp%=Bo0Q(AJHf)8H#nrIG~{ +zK$Ed22ypEecZtslbU#XbdLi^Y7q9Q?%|5PZ3g7Yg{e%5QCzG2c)%UON>&iQpSQlQ= +zb!}tUqGPi9;4S9{cAU*RlGre7>t{FCp?9KJhiv@xO7pv`k16Y;wtaN%K-Wuer5up# +zI61JXWAW<=jp3Ca-Dv4u@M=tL*p^Edt2^`Co<9&-b@xVN-`qpdwZRoa#|8I~9Rd4R +z+0b8H%K){GsdL|dxFTDIb?%AxPWb>(KE8fa;Fr2+VLu^m_Lj6aHd37Ve@>q~nQF|; +zxwoxzZ!Z6xsl1!JOt5k86HEbKJ_|uEPe>rG=%^^8<&ZBv-dJC>(Ta|WbjHVq4IAga +zla{wP8w7p(b`zPkbLCQ0pJ%EX|$pv +zLxtoM=BzaL>P&!$$exdm(};Lr>&PL-8u!R1x%6fp{cnIvPsU9hA)q%pQCMW=@nY-Q +zA%J!6-Kld=t|NK!W?XgdJsDU$w(&!N&zdnGo%`_{fqPqaOy}OceX^|G@&BI_CYF-gunK{CKc;~TTansXm$;@l(NJ#g+Ff>uTl59rqD +z3amNz=qs~y9`5~2QxX^FekLNSn?e@hKY6mBzrXLKNj|=?L4hFdJhfM_pOtfOY6TgV +zHM)T7KXYa{)pl?podVci`hWl9FMs(j@CCrdDU>(r+<#}%xz9A|+!N1C=iWrQrR`Ofg`*~+q=H_W-G?nCdHZ%4h*hpgXQn +zmn|<_K5|XpqAgP|Rxjq#xqtXE2(m+gW16b6Wo64ouILYF*Q)2K=W*%WKe`8B;C*sS +z_nKy-x=39#a!J2m_p&BK9nYn6|H*yOxqot7_o}8;ou|%&wvM!vtJkX6>W8&G>izjE +z62n1W{3!e@no%?QmrLIt$q0Jzz0__6r0xq5V +zUk)Rk`(FJH-Ab~+S^X=zT&+^8y9rz7_W|a`O5i{V@q0Mt7nz5>D&*TUwv$0le}uy#z$Aw9l5Wk9gtMA>D*uH +z({$v&ma;cu;|G^Ew`abl*dO*Xo6h}UU*4;VU9(DO=Jj4EJu&~FWSeL$o6h}5y)PbA +zRE3qyTy{*i{sd?u?3_`^rgQ(Ox2Q!~J$uc}oYtNVCsLcFRWl0NbnXYb_ncTz7gH%N +zJlI{L%{-D=Kf97m=l=cPrjv^r<8}nEtT~(Cij)^-y@GY_z3G#I$Lb9T1WcViW2PuL +zbk^+1sA$Ft5N)CxjIn|(o%=KUi<1dfoqIwsI``gip79tl0!#$H|Ni@L$zUSiGgDn> +z2NF-7mJlnSR`~qe({056c^c@tsy(tM%(-_jUtdW4dbYj@e^OIi`xwNt2VM~3*+*M) +z?P;Dpsa?;mgC7fe__3gcAG=TZ#Efq*CwLU_gk0-{DuD)Et>&$o8npt){k=C +z?h8y>_wbf;A)$58WipwRf{&qfPiWlJVX9j9(BFN_J}r6omig@Gi_klg6qJ%CK$g6F +zVvG~(B$?CUCl=tDLhVQCHdPkQ@OP6AO9S*?m?Wsp=J;0+OHZJ +z)HZ@Res<=1F0K2=Ux3#A$j91q(8K1;H6tHE1r=F=L+c(YV6A(r%g80S)oq@%RT!Ux +z0^Mf|tJds`%njW1psDP5dP(dXzNu_l_dN}T6>IiHYzxX9Zah@Gp*VV{?|L?^`&;LV +zs@Lz61pd?FThA` +zC%*QNwDxY=>+fcyc3CreFc4cS%FJi4cG;TI=tFF+=w!XvILizOCAYy6-F;gg?Ieuzd%oNHe)-Kk%XL|+HX*R#b#1&}h +zCW|pjlc7WBVU%bjCW|pjlc7WBxg<*TjDV{nusC6{FxdMi2|p2T +z^E_*AdU3KLSR&z0u)c*RCZgwuJRA_?ENYl0%iS +z#=CdSXWn>J;u+eFaHz$|G8lqK@AF4l9jSE>{G4E51JPRdMBL~dkEGJTK&gdYhV+T4 +zQt7UyFr<*Xp&t$-1UmX|gpPjHJRxZ2D+C2|g~;94ef}zrsNh}4_5|f4a;VxaZYTMu~sKG?^rW9Ys@O|zN@#F9o-qsfIUpR_rVJJ +zbC}4vN@g&__9be2=X~~z`S9*LjVq_WpXv8-q%+Gf{h3+{%vU|rXTIo}>0JKQwC>x9 +zX>@fH$6m^xcqB5dSsPh^`a4DW6OVogenPQ#dP2Hzi}$L8Rl@b&`K`ncS=H=d`7iZ( +zxy7-ScfXn!?>_t26ZGy2fWPfoN5TXj`J9}0ue2NQ{-))1V&mPLN!43cAkQi4IKhAC +z;@ykQ8c8Dg@1Aq#cnFLX_^IjL(|msh@7`>L<^=y4;QNb2B18n*Xs!Dxp1%Y}SDk7s +zMRPf-CW|^nUy1JfO8m0@>ih<6{$Rj=Quc_Wc|&qr+t^rJ=Yj4J}*1I1Xy{xNL=PH*!xjU-W +z)v9+ZD}LZ03YHdi>cJP>fEtU^lh37 +z)i&j7F1`Da2cUO9Hmq;gR6@HeM+fyEXlhkTrGiWEe)Ith354Xex_2}sstuzb>$`Lf +zPw#(GL9uU4^CqhNRP-)ErSO^&EQl_aB1ZJf?wDr3dJBl*w`;0Z +z*~;ZydiS3_0KNMsH%D7^<(l2C +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 +zCZ)%YpJ_6DGz@Z`sd!!u2T_K3BMx%OkK +z-^Ah}(HCd37^5^9I&>aJiAG|w7^5^9I&_``qC^i3#~1;O07d{KfDyn5xHDu6{tcX=)C8C@?m%4@?GLO&l>SM0GCD(p6C)Yl1i<_HwVs3RKsj}|d32!J0Kp)+c +zdSfB9#t5D{qe^YcSQpv}hfm%!+%Q;nsZ6_Z7sqOU~veIrcrX%FwYn;n0YGKnVHn24WD1IY|jBVSn-f7FB03iOQOUE1Wv;UU<5D%&VsJn2`rm*5yWjm5CM%bPhk_Cb5b%HeumAYhZ@&2hq;cumD-?-wWKs0=>7V~J^IG?8 +zy7uJW0)24c-3GRG!@{+v3DqX9eN(ehdt#Wr8RX^ImupWC<=L>`ow+wY&rPTgU@(s) +zBGfvt`;l0?GtITn$}56R!+T$v-(i@}*j_Kpv?oKOmvxouT;=j7cSp6lTJ>(FeDt>N +ziu#B$T^>F?KRZ4jv@hvRF_ambaRA|ywsCOu1#|HHmHHTF>O1b`)u2ZE_Zjnci +z{!DjCU7}2tONa{h9>AAmk;PQ%Ty^f)C;B!`g=(8}wf+;$6;)YAnmhq2G^r2L6-FLJ +z%Fx)bzFkuZ?XDah)PJC +z$NDZ^161Ck|5VeWs?5lU3K+ekdygDaFfpY252IuVrrM#upsUanz>svhlbR!HrT$}G +zhpHqaMZSFOQ+=1FM)jI}DOEuhLCoQj?wDr3dJAN>YpPY*%H=SS7IlSklUz1-Ti>cF +zQ*F%%BPx9MKn5t?9Bt8+Yj&&C#_m97xq6psBMkE@V3{lzLvEX{O7&{S60*W$n1e0m +zk~b50(tMT(MhT2gecK;>2a>)Nynk+n+>9ler%LUv^7 +zo(1XmyZ4=YMIHLqV&&DLqt{ZKme&VV3=QtrZM^vMKLi}U(3yKa{+L9yXv^n)2QMYp +zg_kVZtr^_WA-@=0>#eHq+ufFMN?hT+=T7gDE6MN5%Di_x>@RLgstY~nzq@u|M|({D +z(#nN}{ex8>B%hC}U0kHmZaEo$)c3WQHr(yob7}2y$pPP;kM64bw`wEb@hj1PT+y|z +zL0akkMnlWiQ;C)S$^{uW2i|y3{%&xI@9rLbaYxz(NrkYWZ=hVKI4M2irM%TqcK+4c +z=n}u2FFx9MHo9iXey`X12H)yTzZ7;%w7L`if<5`E2UxJ>0tP +zL};04cWYl^OUl`ha_`-jdx~2Xr$WnpcAY!_+S`dL=}zzDq5kr=E$5=D{P(%+!od^A +z2si-((^cMpy+D((;4xTVAon7_eXy%wG$MDvrjtguW3MmC*gd_yWTTuJpczGcv-f+TKxH(t +z#;kJfyKmg+?*apKiRpl~we=GAEHc`!UF){IP{d%mY|ohX1$B@HTD4k^b@dD~IG3pH +z8GQDP`Ec#8_FcPr6;{O6tNs04zV-uHzVMalI$d`+mp@aNSKFp*{{X(Q{n|B!g3G^h +z<;wfSvhM6uD7gHo>DueAc64-nKpn3Tf8TV>BbCl)rrLIZR6!lDybmvW1@lOyJ3rU{ +z=yK{mb{a%`D#~9eEZP&jr=&RM&7$JcnBu*!Sa9tVRvNkXDOu?$FtvXzGASNX{ +zJ|XVan3PwETS^JEDOrBtlL_2=$n*V)FWKP|gkD%dcmjcdOt3hFZbMZ1iWMt<`0hJ5 +zg=hf+-a!%_=7^^D1WJO?eYz|9_Sceo9|%U5;f~=Aw81R7_rw^9tVQPBd*m^9uE4{? +zea;*=cQ_C>CGI`lEs_|1j0pzEM3N^G$e~ykvF&`(A|JHK#|QZs0?oCjW7}FoFM!!t +zWkPXl-1`X?cqah$o_AT`+nJdS6)lR|fBzKsU;#PnDMpDE7MzF?zzARjo&f?MUT{P6 +z+=ypX@C(i}=#sUI{Km@s?c1}`<>>!;&HIijLhb4+)&KKL?uPn` +z{rS068d?hPrDojNxc8ApiwGl3DvgXJz2KlAgEyr#Vh@9CFWBG(2L((gjSURUy{GPE +zhfO!MF6i=kj>2T!Q$7h9g_hlqY-@MAY18K3|4erV2;r|PUmYLN*J_liwW_sT-1`Tg +z65RWr=}xPQlqt%T@jiW(X1i*IY6Tbf{^2li@1NY%y`$c#%2H*GU(+Aey{=xRis0hj +zKe`9p`zN<_Z>w`v>8f<->)qOX)ppf(F7Ex~5n@P#x?}1bRf;NQ^tR@l>Mi9)< +z{o@gWdq1eF)fB5zRjH#xP@#ydz`?!$d=$9%AQBES$ix(weR{B?{zlr{a{D>+p+_Ta~Gwzb>*H*JQnz-a623K{*$(!9FrCK +zX}NaNz(&(Q1_ +zpeH}(piMs(xc&2wZ=(P6BT#j*O@e?m?max|hR4-X__}q!0%~PyqKn)kF4c2){CfuOR-4 +z(8ZsBLROas`ODTwQ>YLIao7w6W(ls5pO>U-u*oI +zVKbR*1qC0)yGIJqT=chpyO2Z&;N4HjB*^V^%Ziq~d&_+Gb8g-}F~*5?*tO?x{W!5C +zTZ*aNd}B5z@1FdY0lFA_zxR0dOSD21M$H?;LNd-FGCt{Lgqo^B{B{%Pi_kpb|^i*qtp +z63=IcZp$LkxBWLxHXJD4oS*z;KzpjDC_gJxG15mA%g@Y|Lxr;qRgkuhst~yhecOGb +zwk9usZDur7JyG*!ei{_((KbNUP4cLb8`?`XrTIDXI75X<^YK|Zvw3$GSFnO8ne7ZH +z@tLQimwD8A;O&j7xYzuWuD6%huihKJW9g=Q{YP5TPe+yc7qkrQY*}+!QtnfDx2?E# +z(}B>X|BLwRIXTO<)n#?jg^%Y +zNB+eZ=gy@jY2w|BJpb}HO0(Xic^|aE(_J9=J6Y5XvDLRXRBXKaD1#YT@{%Aw(ENe@ +zhrp%&;1LE7`=^iw6+=TqiH4~C45Gd1q_JUxdH2-4=&eV8CxNI1m%#bEGt@3uKlHT=o>AlL;PcSIz|;RK)f0I7o-!gPgO@-ETKFE4Ua0rvtFO^-e)BaM6Fw2J +zIWGbPuiqVb{iSCRvWKQVm)1R2UyC&ozhAvWuXo&Rp) +z)0-8ZaAGRQgLiLMo4sFKc=tw~ds^?Fj*0IDAi{zL3v3B5ykJk>eX^)i^wktUl|cZ9 +z_3jPJ$0c`|@ubcEc;FL^07d{K;DQJg6wuoA-rim>Q2^M;yEo|FzhuSH?TW&gc*7cBo^x^zPeRK<^%kozs_Ua#X9vKOAe)S8MWA3NF2ST`Msp +z-B^SEfI3YXHr_RML0_iXp<2(Sci-L$diUeaWB;gsQ@uW8DO9c37pqe<0`weu_Z_W- +z-u;!aI(>n9ZN`%Ema!B1y=q0q5-z>__Etjg{=!(bK2M#HAsW9pc1)iSo{&rLzJr*9 +zEr#zt_@ISR!YFYdfR_dbFlNa%qhwYapI`*g?K8EnZ-|cxTr&5=`h&YxCxiqooX4hj +z|DdTlKPe`{*Wcsjd$k8PrY0;8@MqJz|Dv@xdv#>QVuVIIjvdT+H8v(Fh)wVQQAc?} +z>Z7KN8p@D&-){A@h +zZP*x{;JXy--QyPwM!>lcn63(kHNE@J`qB(}b-p4YDm*+4enEjl5*iXB4axOz7!?l8 +zyLYZNjb}3h2=L{#&vdyN82aneMjQhvyH{k*KRNH=_&rZkmS&_>)8i` +zmOUA+dI{o59zDUO_pF-_frvdMB=4T!+EW_&q&7amy?6BayYl$3-hFr&Uk?3L%3_a!v%emx9=hu(esY9sIdVDX^?WR?U3IE4x86O)yT9)%@yqtB^BXjcl4n=IyC;ob +zarle{!}!%^0cSxVFE3|{R2mG^`RiZ5 +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 +z4Y=~l)<{#R5PW3W8Zum^wCz1W+nxx7zCGoW+M +z%}tzo^K{EIQ#l^od#rnJ37_50vF^PIS_j-T#zQh)9&XQOl(?IEesZwx{qu9J9ATu> +z-ED(8VBLF1xR5-@fOYR9!U!!MLLw+4j4-Jr2s}Cs65#vBhysvfC^wxnw#yDj{ +znQEHNZvb%xK2T$nFiIQ<;HAL{>7KJXBhVu>8(Yli!t}!=`Jar5a!-bz6LP& +ze)iuAlp1vJlVK=4bnoL=8M*fx4*g``q2h}2mZq8_UxhkOO +z?v2Wh<;R0deF_{M7d$?81k8B%EIdf!Z|r0StxnFnugi<`|KjcJ1Ther;Wu0w5)vv6 +zkxFv~4x@6#j*N4r=H=yVkxGMMa)15ncjHf=67PUan)m-R{x5%IrV#~$7I?Y~1b>He +zi;x>K)&KtcZ@;0++8Zf0&HGrUMK6nr2qP05&SS#{^X{p;=V8-LvfAVvN#c=+Jo>B^rszVvN#c=+Jo%h!Qhd|>#0{A%*B80-c5RyV5;zsXyB$WmRN-gX%q)$whN_RDdAw{$s`r$A_ +z!0C5OPDChbo)9UJLQpVQh}?bM=kJ2pi%>ts=F|v~yn6xW-6sn%@1ETCvh9F*_qO4M +zOFst)@YyrolDm8V`77-``rD&F=klL}sZME#n0G(>ZwYMW-LK}wyI=T!-Q2trbE_Lk +z7PxOG%(DRa+n&^Xg$PZ~yI0zccYl)_f$7+2cxOtG=}f8CyhTR-I~VU>43jijl8E5H +zd(NHXAuuxF5xV^&yaBh#c<}Dc+M5BszeprPM4-*j&kqrSHXF}h0;8)=HI{N#Ocr&D +zz7pN{mH1`*)%gvYM#)*jJY&FM=BZp~<^)WxQr6QQaI+N;$@*nO$R$zY0}L*M5x@vw +z1fEv}OuTtE-u-`n{qMj3-S2)2lcTu!1n>UG|N4)A{pOoLKpGeCUZF^gqqzJ}pZ@tz +zGtb4xynDk<=rDaVI+=s@?v3bRy?Y9ZDISTxaWl=k&&n&(bl$r6rTHC(>5S-eGJ7&K +zdRbSg&Q&gda(7g#t5xq-%13YOuBeYF)8*l#L;7xwTBVc+5}y?tz8@KdphAJnwDTtZa1_aHJ7k;PQ%Ty^f)C;B!`g=(8} +zwf+;$6;)YAnmhq2G^r2L6-FLJ%Fx)bzFkuZ?XDah)PJC$NDZ^161Ck|5VeWs?5lU3K+ekdygDaFfpY252IuV +zrrM#upsUanz>svhlbR!HrT$}GhpHqaMZSFOQ+=1FM)jI}DOEuhLCoQj?wDr3dJAN> +zYpPY*%H=SS7IlSklUz1-Ti>cFQ*F%%BPx9MKn5t?9Bt8+Yj&&C#_m97xq6psBMkE@ +zV3{lzLvEX{O7&{S60*W$n1e0mk~b50(tMT(MhT2gec +zK;>2a>)Nynk+n+>9ler%LUv^7o(1XmyZ4=YMIHLqV&&DLqt{ZKme&VV3=QtrZM^vM +zKLi}U(3yKa{+L9yXv^n)2QMYpg_kVZtr^_WA-@=0>#eHq+ufFMN?hT+=T7gDE6MN5 +z%Di_x>@RLgstY~nzq@u|M|({D(#nN}{ex8>B%hC}U0kHmZaEo$)c3WQHr(yob7}2y +z$pPP;kM64bw`wEb@hj1PT+y|zL0akkMnlWiQ;C)S$^{uW2i|y3{%&xI@9rLbaYxz( +zNrkYWZ=hVKI4M2irM%TqcK+4c=n}u2FFx9MHo9iXey`X12H)yTzZ7;%w7L`if<5`E2UxJ>0tPL};04cWYl^OUl`ha_`-jdx~2Xr$WnpcAY!_+S`dL +z=}zzDq5kr=E$5=D{P(%+!od^A2si-((^cVsy+D((;4xTVAon6wIKsoj;1?7)B%vW8 +z(vV!_Fe)6Fch7R+aFSCaFoAaey~T9-vRr4noW(F)?G*Fw9amB3S$w*{@z=YFZ{H27 +zlVJ-WEJP?7c=+?XWp!kDWQs}dyt}}_okwnIz}sK8ChUlpARc+v&6k)5fyD9W@46!- +zc<}<@#pgBmK6Y~#%zGc~Dj1E(9kA)7(e2nP&dS?GY(@NnD~^l^51Y;4CH4~fi<8Be +zcdwX=Vcz{zP{VZ`8Uf6^pZxM*-o3s4Tk>!Bs6p>O4XW_ayHAKW^6t0nJNnkX!m^mH +zWqXQavda#~Y|GiSDvr3Nq%`ln{*#@1Uq=oO6hs}Bd(ZQ(c;>kG=_(Quo(IgmCxDWo +zxg2;+mwW%8ls)2T-jLkZHa6DQxnO~b3qyF5*O@HW{`;r6hsp4#^Ds&@5{?lI>k--p +zAC9W!=%}bLNFcokDeX-qEe?!mFCxs~MTAMGlg73*_-Wo> +zM=Nd_%;+pJSc}nVpJ4Xo-oH$b>DItAa3x0TGxG$yx%ZfR&s-0b +zkMD0LVlpuWqcjndi76PRiI_}GaR!to&I+fvHUgM?kGc1*{R+UdcVz_3xc9+kH)iAs +z@zLAK%tX8gj|IptI;*qgn0v37$nSrFHk7mHQrFN!=5cbq0aq>y{5T0Cz={Co-m}6o +z>xtI5_wc0K@U+_CMMx!%lon4uI**Qs2%|lzg!UXKjo|lFqgoarl^Q&UNSpNqXmtQA +z+%H?^i646Qrr7cyJWm3*WwmF1ZY%dbjyL!I<~%nyH0L---xHHs)(M9K +zgyws~mn(sRi2CH*dzsyI@9&cXU>q!T@69h=H>04LYn^*`O#` +z(*T`9>Fs-X7{&I%LFk?hJaPD(1Y!n4N}d_$p7_R#!1$JR^m3)=uQMLJnvZtmy7p|% +zzWhy@@{ya`rkaxc?U|_~{o2zFWyL?uTs1NPUU_j&=1Srj?c<-zBGJeVZ9~nT{7lFk +z)Hc=>=VxcGAL%2CL7E&YoNcJe&&pg!R`?=v85;Rmdk%WooVjM?BdDMvEA&7kMfscL +zQPA9_n$r9nd7Pm_r1|))oH@g$F`k2!i%e$Qj1r$l`Ij-hfcV#$e#!2$g;i_zMdk)> +zdeBsMJiR3L4d2vz{YP5TPe+yc7qkrQY*}+!QtngO(@3Vnpv>XML$w=(ya#cXl +z-5Zr1%Z~?_`V>rmWbWL3kwT{ +z-*9P22&i32rMUu!QM#H9+-IxL$+`FcGyX4sq;%^|y7xf~JlzF?zr%pJbnopw7dG8{ +z*kPazbMMXg_n3P>RdPO)cW%vRkm#)yW#%)g@p+EoeB67}yCQaPCjXY${00zL-~&HK +z38Tb;0A3m#z?datl+57ZII%xU93A6ii~vReBY+XW2w((U4uOfh_<6L=7%zTeA2jv; +zg&FI^(K{YVrGbG`3%d;I6H}$qT}@#~A$LPR97gD}r_e1q5uvDg +zLZmfAdW+qr9I?po8;S!?Fbns)kk$bav1a*~r5Nq9&g +zdvDJ<-~P`2_TzU>CMxjf>+quSt3r_%vyu~?LD(KYWgNBHdm1q`t^S>E771AsDqpFp +z6#zSxQa7_Y?FQC6%m$Y)&j#+Q2v51A)2NN;$Y!EF72-S{9UblM?d|OB;GPTs+$KQq +zw0CfH8f{bMLuJje3uTb?^6kh-)j%CRb?T+`V?KI#cmVq5<>dwFn}r3>hQUG;tIdw? +z8BG{_GmBub$Qm1%0~bbVQcyCdP@D%NfDw502n-Na4uA}0hWY{PuJS9j3_uf227t<+ +zsmxOAJC*%v8Gz$78G!eR6i0b$_DT+>ug3eph*YTDs{ADVp^71@~hwc +z7UlV^vKyB6mC_S#C{lJumGR19WtwshxDA?Nq{1A~t!#i>3e4NCtX1ciND5MulM~nS +zfV=xFRc2mj(1L&ff0+8`AAbMS$jIwZB6Udl)1O{292^h~&hRl3+NY8BuC5L$`+fUT +zQ%K#*mw!{~;Ip+fkEnH#^7E0;NB&2J(GuknCHZuCMES$WW@WUhWt)|Jm832}E#!6P +z)pWvCUTIAy+R%wbv=A1?4Q8{E!ulk2Cujnb&19}&uVF4_FJC+vUz7^o%AheoFQ?0wz&EBz2}_f6%DReAr|(Nx +zt9T%76_p55cuR>I8ZJPC0a$L8FpD4CGazfOD1*|lL +z56D}@rNV9eB|VSjx5PD~T){73<2uBZ!ae+${y}*g1Y##YN@XAcj|UYuq~*nF>2WFKN0246qu>5!FG>=MTHKZfO=5~ZcD?H^Qh%W5kQ +z3;FQuC-CfUAz@J6AdwinHpY~AxMB<$x*nrMN5hzmQ8I=MU5`?uUOxr}&!^}Ie?V%UFPM+%7aeY}myMmc_XE5*9rq;0PH;OxYvv01Gg;aXyD~3+o +z-E_n66jRiC_fS{t#lX{EAC!Hztu3O)uf#q3?!ElZ%}om{eG3{M?f!g~++WN(et#(b +zT8P-|nA?6?Z+2I-lvBaXZM?I;BTC|5;=aG>sqk)08%M${9(uB_EllEF?0!)3a93B% +z75~#7`FUOOmxE5tJL-~B`DELjg-t$HbB})V5#JbG>6z!c=h5J*iwi0|4!Z8V^|YXO +z!wpU~tFW$rZEJ9~=TX;;ClBAgIKP}JoFi!cGW&W&wQr$Ydh^pGef(Py*F4KAdSb6| +zPQ50av#oP5yF0wrr(|wsU0+6bY?E)>Zq(?V$z3*$GXvIXk02YR=B~#NRg4dFDmVWBRk!MXqCRX2nFtFymOWr~r~OYFj>g +zK;KhCf6I>gb)eNlB1~8v6lN?h6yI`Y!Fa2d0jQ1blkA@C?&tE<@u?%yojFBrtNZ|P +za3631pwJ6 +z8yKm2(Xr4+;x2K2K9@0zF^gV4ncvgR4@SEFCHNj=5s +zgVUEk!aD=$P#>i)l}e=RfL*3^NdGetk)$az$KFBdpi`ckBb-0gDbLPs1fYpesvYQ< +zX|HJ?)s~fZ8|==g>ZS7DWi-Qh805nUKo{dbpj-(~qh^3XMmgLcBIFK2{t&ji4aOGG +z4kKKFXWVAgf(95-=w=|D7)ThGV0_Jv2_pb!7-twhb_^K*PcIN=njOq-R+#8~W>q?I +znIr_}<#s4eT&ZI(DRF1E`1W%E;IR-+n?2V(h7(~?7?-P(f&&7uZsuS>EOKyBP)YFm +zT9a<)=qsp1AW8!xBpKJ5&r^b#U +z!9jsjxsfY(^t)sL1_MLn8A3c3;`3c%Oo@Gz2(VhuDg{tUGWO00h-MxLQoKrIK+sKv}jciP+rGpnKItQo(TvU^`mLsPrr +zi~h&P!JC +zSELt{%~~6|miZnlIx?EMij{f=Mg1~}`4BV;p*9152m=Ebz<)sj^XJ2vlz{mmyP3NN#<<3tVfkFNO4aR9M(|aF+&|;q%}T2AI#)C`AaK +z*XP!|P87HP8PNdRZoJ%jT2X`uC)eV1bpXVT{cQlP!Zh4^4j>~uO>p|DY@Wp13{)!4 +z6Heoiw0?@x59ibFj0QessyZU7K7I3oY5Jy<-DJ`Q29uelNe0Meqs^>pH~Ph3Ut42Y +zQEF0j-vfC^d0Fc2HF3j_y4ve1KS*D{a`=8%Tixjo($>eKIoN7xeI0mlzpu6NWYMl9 +zUf;t;c~NQ7j)tA +zhwjVU%F9!C^LWFL9P$Kv<=NqK;+U+xu!pqJk03uG?BueH0V=50^oko8wrYzLA +zrPjujaSnK-mRws~6?)7!+jIA+_RX~mPx$1xrCw|kNFs{;vONUnTDM+^ImyZO+*K{# +za$#wy|6%XF=R0>aMpgPB^~~z*JkYr6qrjuyS$A(0eY{EHf5>Cc&}S)i(dB_heDRs9~?}`TsZkmt}aZ7ZjpiVEYlh4 +zBj(nVBgtOPfYJsAZR*kCR#-L>pEZ6b=1e#;UW)hgjTc +zb8Z)m5=O}g0{GT20*sb=CZMF%A)LSnU<5D%7y*m`M!<#<(C58V)cRQywl1$<2Su%) +zJz;fBw@X;|UnokS6~kEa5d%=0-*5i>&7Z#+{MEmI`R`vM9se}Bk@=th=kH;p@}i?P +z1^7A#idx+IkAD8f`5R|aM{(;Z{yxR4N5{$NM?d2(jI-@rU<5$qB668au>bX__5U{+ +zwU41pv*yWRx#s2@LldUb#1yw4@vI4dGTvBX&p-^O^4`OBV+5uW0mR*BK<<9tS@_@k +zByjhQaq21kRPyRk-I!ZXtaXibhq?7*MGo6pEdu7O85`r%)Ad%{!ErVWbL%0?N=>!b +zA;jw>wfR_<@$yG|F0hbWzYGoCNN)X#yQBH7hp)Ype(M>I$a8{T@Z|y0*{9lXy&kuI +ztfR!y{nk@0F-ht&?YG`X+kZSz`>ls{K$<(j8zViFQk5D%YVv8g^+x^HYZWsAoPHMc +zTTkEUKI@TeVL-EE7MfUXc5T|r*qb>MR$y@-%(?zE0VQ+#iSu9tFaj6>OA)X=zx9?P +zWIVqiZav|>MYXd&Z}sYx4z{6QVQxJ+gznXhq-{_%XP#v0x%Gzb-|^_i>$hI45Y`F` +zcw4-~id%%zglyhc??vJc;Tgd}-UjYc+0Ej!!s3J^9^qgegm6QE_)}pWGT_D(%Y_#O +zMbIEj+$F3Q9OiB0Mu=OA&kIi`B=h3YtH6MZ3|fShf}>Ht;hqHEuv~Fg +zEEH}OL=XmH+)#^dftfHizwfDmUfW;0q~OiH%q>@? +zzbIUk?X%T2w!C568SX)!U9WApa&_m~_~JLyUr)Mu?MPi@0XvhmrR(CxqVWBGTjwrs +zyLzBH{IK6{_l;k*96G=LBxkQ@^2aU0`i+%=hvw~)o=+%PvfnRx?uza!CE^uF0yAFc +zOPf-w;!6B7S?^a}71YF?^w0Jbv`deijX4ys+bi)w%dWGF5Bu$5ZhF#PBzv!B$qBdQ +ztIb*G-~KQpkCpuR(vdTXh4Xj3zOnv_;LOV7FyH0}UGG&dDSjiHmD<>nUbmt&_ycBg +zNzIlI7wqxcGceMXgItvyZxG$eQ*_Vo!t|V)4aicNKAW&fDO& +zyi&UTBVIl?$Af>j^O!8+1p6Rs$Nl!q^Q+22MXarD)rUWfNPqJ^=G(U~7o2^sIPxHC +z-FfMOvulor34H`M{L{f*#|TV&1n6$-{k0c?h!lGKA1%<`)vdq5Ws%xC)ck%=GJSL2ge{`Zv7ZQ!zR{^ +zfH`Z%bPl~S*}8i<_SRu;{j}rON1-7j$*uSP7o?{f^;-`K^)Bdza|Q!`AkILD;hW^v +z8?Z7wUES)*~K2Mde5Qeg_9QpN9R` +zj|qG|qtX1<4|jH*Z7eL>x_)6-b7M_WPU>bJx9>({WtAvr%lhcPn@~EEleGRVGzSZ~ +zp&?+nt*@amzi3NpbYGXsAgu2?%9gr*Jr5e3t2&mNxc+U@08&YyL0w}(QOf#IXmFt@ +zFZF$1L|=PjRZ({8Mp#!@V=dGr@kpXaD5R2D60C5I7dOeA3pn{GnbQhu&(q#{;OgqL +zp@rW29^E?LoLIA{$S>#KjSnubt>lWl(=OlKad~+q=ZHsoQ`^3VxN>g(yo@JZTWgjc +z=j3?q7`k3`adTz(kvB8Hx_RvKrgMvr`R%J|+gZ1wBBa1O>#MGkt8blHkmr^DNqf$v +zgsO$d-pKy4tKiy_QvW=UG;7BNx6d#FlkK;@xh!ophgeP1eou0y`mHyNG61&cx84{M +zmg^01>%&w*HF*zL7YK=1T^NrJ&a4w5fI~>cYQT7OhI)&+_2lTeS2KvVLD8Ifl9|V? +zH$d3XQW^Taj8!-JPmH(*bFK|W38Q2L0eov10Y*!WQPP6LNWx;2jFf}b7y*m`MgSv# +z5x@x890HhIZ*!O2<~yuItcOV}fyBnS`lh(`Y9B5$&}TdD8{6ATeucOh7=c%g0QOt& +z&h%!lX0K)@up`(JOddOtpS*o%T2{7LQh(`cb6ZDe_w76P?mv3^-0~AZv-CDYCCsg# +zp%>PcyJgOru`xb9T|ZMX#N7I6$E|-$!>zye&S-w?p=SirZ@rNx5q1h7M~iB|^-chB +z)~U_j(}U61i~QE>)N2|N6FEGf +z-+KCn{no1i)1teemqo@HEMD%!2Ie4*QJNH#%qbM-!3bakFank$fc@56ikK$9A#T0O +zWj%4ge(Pgnd#T}aFN@6zXFX#vec8U@zKNvwi+FZ?c>J??<_7kL@C}LNd|f0vGCcBG +zBy$COMfi$Da`ukoa@W*dlC>BXX>)Sw8fledQGFRG!6+o=%#%z#w?6NztdqV4jWa;M +z_1c3Aos{NRZ&-Tqu)ke)vUq3u>c<0$>*5Mw27lG?prTb=EKKFU_4Qy+oAg6bsvriv +zs4JFA&V#Q9dRnB#q7*^o;|Gc^@o8ZuG7=R4m#nh#P*a=#YLS+9Ozw49=k%dIn`}6{m#<`0w`IM^gH(gq4bi +z(82xb^nD3y6%VAXq7p$0Zz)kj!v$zC0L!fsX7OWt24u|@Wl&n#^GGJIs6>S*24o!- +zXN0-@wQ7U@0eOqKRJe`5r022xmbgZgEBFO$T!*+)xQ8FpKPYd5K{ +zw7fViJ+5a68dQr8q;KheD3^=NMd^a&2swB*J)Q9GFK)OX0bf7p>5!FG>=MTHKZfO= +z5~ZcD?H^Qh%W5kQ3;FQuC-CfUAz@J6AdwipI7YO1xMBntEj30-3l1X*jFJ&xwA2_S +zEjVz(OayG*Z++Fn%sa8|p%=YQp6c0geOW!bf|++`Fz?o;*0Aa~iaUCXK6VWZRvEO+Hm~kACvx(3jE8{^ywa^?e)VVYS{RZU;Uc +z*xnIU|KZuaW}TY^<9(7(gHYTrT13MVZz*D${Fqy> +z8q4-lW7^RK%&k|WW0coU;W(8U%$X;ddE9!jwE6bE=i1{7dP?)FH!NXpJ?7Ty-x+uW +zrH_fe2BV~piM|G-q>qWdW+tGd-z!_!U~WC;)?;qHt^Y58`){iVU~at~z}$LUz58vq +z-uvkJ0c+yX8)}Pn{%UZmUIhY}TaUT*nsqd*lQ6g5>MjXx(0CCrXU*6c +zpPsHCZ#%5j9&_ub9k)J4!>xa~z$|V(g8^OG>xZfKTkre|x%B{GZoU2;Fg-MMwu=(` +ztuM0Zs?CIDXPfMUMOPVT#t2{pFal;GfVuT%0%af@=GLpmvc1%pb~FKV>(%H?C3T*< +zR7Tri&OFJ?oK<;bL(yWe*xToTSZ{9x%JIuX{$NdZ+)yje}6U=KvG6+%V!Vhd(BjWC6cY) +z!?@p;BY?T}mSgrREKG6h(MKc~EC}GReF+H)e%{ukgD%$tV1UgcB`Ek>lWxI+1@mF> +zfAbAef`X4V=}_BXfUP1WD9p1aU0GTbuxkeTTQ}6ftt`vL`D_#C4~~BRRs05V9flFW +z+(z1V=U{HV;b+q6pvByJ%~i6=WoMi0wC0*)2_t|Jzz9qn +z0+?Grb}TWsUNutfrADly37A{2M#m_xox*V{Gng|^g1Pm&|7&1wJ?7Ty-V*@WoK<;bL(yWe*xToTSZ{9x%C6hg?z3NZao(*vW_d* +zG3*@~fMM_83rcKk +zQwU&gy>(u0Q{4J+A}k8ya#d1rKmgXw91IqrKsbz7N$~nwlg>JSHMmu;0s+je$J~0& +zI-1o9;P6_tXX +zU&6kFQ#fe=%$bK$@Lf#+T&1ZH;9`sY%g&59A%?WvRQ@#0@{{YOkyOAbtJH;rm@}b*Dc_TOa!q4As*5 +zI`HCtUu)yZqFqV6zK4zSqSB-t5m7^f^49Vbsi|vXhXx2qz*~w8&P(g-!Ha>ukDrrIp%goC6-ICD+zgg&yl89ozY!AV?)~y#} +zPI7WRcU8-`Tv%G_f7pBP`OY1UQI-BjJ+nGH4>Yd&DDbFv*4 +zba~(rpZ(`S{MFhbZasp>VHW%c1#@c8`$Ch84`MY5niNTs +z>Ef`m*5I>{L{dQMCCszF-lr+7)e+mN=90W)ffSc07d{KfDyn5*c<}-ymyLPKWoBx@A`FM +zZoSRjXjar=lid2LYO7iE=n}W@M4!-oYU~&iJh|L?Q{}s}-I?C()$G;G +z1a<^Fg2`hi@{_mkOv}m^OX@FOZEox6?7n^H-u*{UpId%Hy|$=XrkY_A=GM=!3yQlF +z8*9#*F`YwiOrEJ&Vs1T+Vl_V~C=mWz5HOzuzs?k(o7CoG&DTkeZcF_QHgwz$dGaU( +z!7U^I$jZFToJASAIg2y1bMhAFWUY)KQW=NSMOi4hG$J=Q7Y*M?etqY^AU8^jUk}nW +z{Cemz!Q~jt%V0Rdy?%({0|!F8Y}vAZ{Qd8Cv7W8~@z$x$e(Y@Z-|5ySQH?nfje$Bh +z$0V`K4Xk${dG3@Abwq8XWX;ilN^{ZzNta(wm}>FseYE-YfF#zFR5i%xb8vvjP87f1 +zf`+TJ+6upZxU=hQV`0(O^$WY28*7SkQaAIseK#5_t3)|l)<^feO)Spu)gakTk87tJZNyP>R4*x`nO4gkT7IW*H}=LvOW|VTqw#* +zeV-T6*WOrFl%2W}*45Qm3w24n2*MyVBt(4)%n__`ofkLBIxd_!t+4hy?VSg%u09)D +z=)LdJt>ev!HH(V;a_-&u;PTo^uE;y>^35HWmsfI*c%(PA?Q4iD=jPALc+$1CX6bQG +zj^~b{>qQqgSB4*XGxMvP$1ZO=xA>UfzM8h3bt@`D3cRzv>MFVV)`@T|tt}Q9`&+|yLc3g1#3?nev{CdroptT?15Wjw=&WamC8uRN7p<ZP+*IRo($J##3ub+1O`eoYu`iFY{>*@S@NNKlf|MjG= +z+0mYjEaumb{fz*vX6W+kIq0kwzaIOq*8*%(6WD*f2HweE=fyQ>&^9hjK1#;xHvbIv +zUvEBEIOo(OFxmY2(frqAe*NgzAN#K-@iD}&Cq9@;?t&p1p6%xg6ILi0y26-WPmZ5^ +zHN$8d6wR3{nR!$x&Kdf>j8!-JPmH(*bFK|W38Q2L0eov10Y*!W +zQPP6LNWx;2jFf}b7y*m`MgSv#5x@x890HhMZ*!O2<~xk}_11X{nBvz%Co|-vH`|&e +zG(S(a&)OukfB+rp!1iHjEErhluLiejCLnjuc;Vqs4z}(R&0_+qO +zr%dg?-s#o&uUGl9w}fBs4(aVE!a(dG`GIg&&t@VO72-Uh?|A4+9{Q0d9m>PKWq#zz +zk~I8!z8x8<8mObEPQ8?V%tsFo4?y3%yu1K?v#?S|Qpgi0&Vf-xQ05`}u2- +zsZ=c5D~KC@tmu$_B-$fbjttJB8hQq0Z55}52l(&y+(%OSu7s6}hqA8X)9L#X)+!!I +zTSX;;6y8#zhK38!U;vg|CCuW-_6*3HE6Sj>vgeUZUQvk(Q4GjBD$WRV`D@h%{R8qA +zaj9?{e@V|{`7LpcC|B?c*tiaHrEm{Frhic027%bgk5U;(z~e#14QY9CT6$d15HzS3 +z9Z28O|4=R$my6N`%Mo($Y!$Lkh +z`w2X|TSypGH%KJ(OJY*S!xfVd!3-EBjFJ%q@U3A47%jEMC}~;a1VjLO2hhX8ys?U& +z*|bztJ*T4P9oLuDvn!Z+cLwurZE6jxextafH~Z!~SxBXKzGCRa-Ay#qI|c4|jFNT=75c +zk)PKUe>v#XyrV8Dl~1%dmeSoc=GV=i}TBw!a0K0FSD;lRQndXr8hr4(#O9Qam}-=q9^tW=hSP$ +zIomo1v%AA?()UUb}Oi~vS}K!E0LLo+0!Noc$6e!XUa&|(Sm>n(;18(2F6=BybT +zC~x2@=&<7fp{*o?@ALizT`PVvYa$@$lp6goP-(IM +zdQEvM5JovLA-A5sL2A8L7{%1!shPyD$NuXzm)PQETWp{K&$wiTC>d|8`Dd{Idh@Zu +zIj0^0=h-fE-IyM)&+~cXP1-`5S{!XP4V{BMAf728bsXLLaBpu9-?(#91?T3%G(Pvq +z34SCSKKaoe{sK}QELu?;AfOrm8OjVbSNtxGXAVGtDY7n@R^jpfr!@|03n*BcG4_j|!tD$|XwjDeZ{zhmp<7Xcdl|m3)2c$=#y_5lvKGscJkIs|j +zZ*&fXkt!P<$@0Tph8>3ul>aU)|C(0$?|Gs4r0PY-LLZ5{#QphP#w^Axdii92 +zPd7gp>H3%8pD+Rt_AjN9+78<@lngk(h|;bjxWlD$i +zKNAs2nlf|j9h43_<+(Wm@K2rc?CeGWn)syJfsUE>n)Xp`S!uVy?u@ElD(_uJGmM8p +zK8yf#G5!O}mEbgL1{h?N!~G#b?jYn3VY}O4Yys^s0&tsgn^6lIU__ytfplUZVO)ao +zH9IDZ0Gwf*VfffFV6<9(J#3{}!Q6Z%3X>3+m)oIeBI_$TZHiwX2m?9iZJkm83dHQZ +zbxIr}pxJ&bjRk{O@*}{NSS13c`1QA8(B;=#qBG^c-jcEmwZj;%p3+Yxw;t7v`Sq4O +z?ds*l{CYh|uwuF+V9uH`okwp>p6)mpYd_}K(>)flG=Q%`8r9R%sR=@9!Pkz +z$g@H4kdc36WnN~^qKw>}#hKYTd5d$hRz?u1y%~qoMOi3K`L74aZq~M6LlW6&#cQA2 +z#y}Gkqyf!mJv|e}sfU@+1Pj0nEeajW8CnxHM>C#z5liPVtZhtBp^uLiATW>kjqCi* +zU9}3J{mxxr01Jt;FJDHg8JuKx#Kc5IRl?J;ng7}3eW9s}4`MY5niNTs>EbZWyD?o4 +zJrx&_UWr{?oSeur8YZS$o{shG>E&zWIj(;oW;k0$uEEL3XDZnC{jABME0z5hiqdDr +zFqVA80MzF9n?HZ^=Whmo_3vN)`v=Dq_D#-AV5 +zj}Os{3erV6>4%Q4d~fg3{d?0zi#Llhau)MNhZnz}v@tp&7yYNffn{=*{J(+e{B0a3 +zlg~vH^X}dq_MACu-L3{)-x8< +zm+c$wn@Fwz#EkN3tWsBcDYwSFl%vuSkqwM=*J8@?Ei- +zx=XSa!y;IyZqq^w#KoGthD9TV>2-Hf6^#~z3z{G`7_OKK=B&dUFFkd(<`Vr4zQ7wW +zaP{^L)OXJwuAjsDK;SY)w8+N?1CX&hpX$>1+w0ouJcIc2P!eOjmRw{h^dai;YR +zj2n*;7zYBhZ{rwrDIcvto-q)k+x$w77Hlw@S +zm>dH0Tp@0t&Q6Wo-A$L#)xLVQvGJlA2od2H|Q1rwup +zY7e`7GX#yYyU9JNr;q22$<58^mLm5J4QQNy<%%2za!=~LBE6Vw*4oIm%=cK)k ++#include ++#include ++ ++/ { ++ model = "tp-link EC420 G1"; ++ compatible = "tp-link,ec420-g1"; ++ ++ aliases { ++ led-boot = &led_green; ++ led-failsafe = &led_green; ++ led-running = &led_green; ++ led-upgrade = &led_green; ++ }; ++ ++ soc { ++ mdio@90000 { ++ status = "okay"; ++ }; ++ ++ ess-psgmii@98000 { ++ status = "okay"; ++ }; ++ ++ tcsr@1949000 { ++ compatible = "qcom,tcsr"; ++ reg = <0x1949000 0x100>; ++ qcom,wifi_glb_cfg = ; ++ }; ++ ++ ess_tcsr@1953000 { ++ compatible = "qcom,tcsr"; ++ reg = <0x1953000 0x1000>; ++ qcom,ess-interface-select = ; ++ }; ++ ++ tcsr@1957000 { ++ compatible = "qcom,tcsr"; ++ reg = <0x1957000 0x100>; ++ qcom,wifi_noc_memtype_m0_m2 = ; ++ }; ++ ++ crypto@8e3a000 { ++ status = "okay"; ++ }; ++ ++ watchdog@b017000 { ++ status = "okay"; ++ }; ++ ++ ess-switch@c000000 { ++ status = "okay"; ++ switch_mac_mode = <0x0>; /* mac mode for RGMII RMII */ ++ switch_initvlas = <0x0007c 0x54>; /* port0 status */ ++ switch_lan_bmp = <0x10>; ++ }; ++ ++ edma@c080000 { ++ status = "okay"; ++ }; ++ }; ++ ++ key { ++ compatible = "gpio-keys"; ++ ++ button@1 { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&tlmm 10 GPIO_ACTIVE_LOW>; ++ linux,input-type = <1>; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ led_red { ++ label = "ec420:red:status"; ++ gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ led_green: power { ++ label = "ec420:green:status"; ++ gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ led_blue { ++ label = "ec420:blue:status"; ++ gpios = <&tlmm 24 GPIO_ACTIVE_HIGH>; ++ }; ++ }; ++}; ++ ++&tlmm { ++ serial_0_pins: serial_pinmux { ++ mux { ++ pins = "gpio16", "gpio17"; ++ function = "blsp_uart0"; ++ bias-disable; ++ }; ++ }; ++ ++spi_0_pins: spi_0_pinmux { ++ pinmux { ++ function = "blsp_spi0"; ++ pins = "gpio13", "gpio14", "gpio15"; ++ drive-strength = <12>; ++ bias-disable; ++ }; ++ ++ pinmux_cs { ++ function = "gpio"; ++ pins = "gpio12"; ++ drive-strength = <2>; ++ bias-disable; ++ output-high; ++ }; ++}; ++ ++nand_pins: nand_pins { ++ pullups { ++ pins = "gpio53", "gpio58", "gpio59"; ++ function = "qpic"; ++ bias-pull-up; ++ }; ++ ++ pulldowns { ++ pins = "gpio54", "gpio55", "gpio56", ++ "gpio57", "gpio60", "gpio61", ++ "gpio62", "gpio63", "gpio64", ++ "gpio65", "gpio66", "gpio67", ++ "gpio68", "gpio69"; ++ function = "qpic"; ++ bias-pull-down; ++ }; ++ }; ++}; ++ ++&cryptobam { ++ status = "okay"; ++}; ++ ++&blsp1_spi1 { ++ pinctrl-0 = <&spi_0_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>; ++ ++ flash@0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ linux,modalias = "m25p80", "gd25q256"; ++ spi-max-frequency = <24000000>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition0@0 { ++ label = "0:SBL1"; ++ reg = <0x00000000 0x00040000>; ++ read-only; ++ }; ++ partition1@40000 { ++ label = "0:MIBIB"; ++ reg = <0x00040000 0x00020000>; ++ read-only; ++ }; ++ partition2@60000 { ++ label = "0:QSEE"; ++ reg = <0x00060000 0x00060000>; ++ read-only; ++ }; ++ partition3@c0000 { ++ label = "0:CDT"; ++ reg = <0x000c0000 0x00010000>; ++ read-only; ++ }; ++ partition4@d0000 { ++ label = "0:DDRPARAMS"; ++ reg = <0x000d0000 0x00010000>; ++ read-only; ++ }; ++ partition5@e0000 { ++ label = "0:APPSBLENV"; ++ reg = <0x000e0000 0x00010000>; ++ read-only; ++ }; ++ partition6@f0000 { ++ label = "0:APPSBL"; ++ reg = <0x000f0000 0x00080000>; ++ read-only; ++ }; ++ partition7@170000 { ++ label = "0:ART"; ++ reg = <0x00170000 0x00010000>; ++ read-only; ++ }; ++ partition8@180000 { ++ label = "product_info"; ++ reg = <0x00180000 0x00010000>; ++ }; ++ partition9@190000 { ++ label = "factory_fw"; ++ reg = <0x00190000 0x01e70000>; ++ }; ++ }; ++ }; ++}; ++ ++&nand { ++ pinctrl-0 = <&nand_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ ++ nand@0 { ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "ubi"; ++ reg = <0x00000000 0x10000000>; ++ }; ++ }; ++ }; ++}; ++ ++&blsp_dma { ++ status = "okay"; ++}; ++ ++&blsp1_uart1 { ++ pinctrl-0 = <&serial_0_pins>; ++ pinctrl-names = "default"; ++ status = "okay"; ++}; ++ ++&qpic_bam { ++ status = "okay"; ++}; ++ ++&wifi0 { ++ status = "okay"; ++}; ++ ++&wifi1 { ++ status = "disabled"; ++}; ++ ++&pcie0 { ++ status = "okay"; ++ perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>; ++ wake-gpio = <&tlmm 40 GPIO_ACTIVE_LOW>; ++ ++ bridge@0,0 { ++ reg = <0x00000000 0 0 0 0>; ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ranges; ++ ++ wifi2: wifi@1,0 { ++ compatible = "qcom,ath10k"; ++ status = "okay"; ++ reg = <0x00010000 0 0 0 0>; ++ }; ++ }; ++}; ++ +diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile +index d4188f5282..7ca8e08e47 100644 +--- a/target/linux/ipq40xx/image/Makefile ++++ b/target/linux/ipq40xx/image/Makefile +@@ -721,6 +721,21 @@ define Device/unielec_u4019-32m + endef + TARGET_DEVICES += unielec_u4019-32m + ++define Device/tp-link_ec420_g1 ++ $(call Device/FitImage) ++ $(call Device/UbiFit) ++ DEVICE_TITLE := tp-link EC420 G1 ++ BOARD_NAME := ec420_g1 ++ DEVICE_DTS := qcom-ipq4019-tp-link-ec420-g1 ++ KERNEL_SIZE := 4096k ++ IMAGE_SIZE := 26624k ++ BLOCKSIZE := 128k ++ PAGESIZE := 2048 ++ SUPPORTED_DEVICES := tp-link,ec420-g1 ++ DEVICE_PACKAGES := ath10k-firmware-qca9984-ct ipq-wifi-tp-link_ec420-g1 ++endef ++TARGET_DEVICES += tp-link_ec420_g1 ++ + define Device/zyxel_nbg6617 + $(call Device/FitImageLzma) + DEVICE_VENDOR := ZyXEL +diff --git a/target/linux/ipq40xx/patches-5.4/998-tp-link-ec420-g1.patch b/target/linux/ipq40xx/patches-5.4/998-tp-link-ec420-g1.patch +new file mode 100644 +index 0000000000..b328051e74 +--- /dev/null ++++ b/target/linux/ipq40xx/patches-5.4/998-tp-link-ec420-g1.patch +@@ -0,0 +1,12 @@ ++Index: linux-5.4.72/arch/arm/boot/dts/Makefile ++=================================================================== ++--- linux-5.4.72.orig/arch/arm/boot/dts/Makefile +++++ linux-5.4.72/arch/arm/boot/dts/Makefile ++@@ -885,6 +885,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \ ++ qcom-ipq4029-gl-b1300.dtb \ ++ qcom-ipq4029-gl-s1300.dtb \ ++ qcom-ipq4029-mr33.dtb \ +++ qcom-ipq4019-tp-link-ec420-g1.dtb \ ++ qcom-ipq8064-ap148.dtb \ ++ qcom-msm8660-surf.dtb \ ++ qcom-msm8960-cdp.dtb \ +-- +2.25.1 + diff --git a/patches-20.x/0025-bluetooth-add-tweak-required-for-TIP.patch b/patches-20.x/0025-bluetooth-add-tweak-required-for-TIP.patch new file mode 100644 index 000000000..4e0819374 --- /dev/null +++ b/patches-20.x/0025-bluetooth-add-tweak-required-for-TIP.patch @@ -0,0 +1,132 @@ +From 702b5980dbc17b4a097bd904ba615b7d34332808 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Mon, 9 Nov 2020 07:41:56 +0100 +Subject: [PATCH 25/25] bluetooth: add tweak required for TIP + +These are pending patches for OpenWrt HEAD to make bluetooth work. + +Signed-off-by: John Crispin +--- + package/kernel/linux/modules/other.mk | 14 +++- + .../generic/hack-5.4/280-rfkill-stubs.patch | 84 ------------------- + 2 files changed, 10 insertions(+), 88 deletions(-) + delete mode 100644 target/linux/generic/hack-5.4/280-rfkill-stubs.patch + +diff --git a/package/kernel/linux/modules/other.mk b/package/kernel/linux/modules/other.mk +index c6952c812f..226895194b 100644 +--- a/package/kernel/linux/modules/other.mk ++++ b/package/kernel/linux/modules/other.mk +@@ -14,10 +14,16 @@ define KernelPackage/6lowpan + SUBMENU:=$(OTHER_MENU) + TITLE:=6LoWPAN shared code + KCONFIG:= \ +- CONFIG_6LOWPAN \ +- CONFIG_6LOWPAN_NHC=n +- FILES:=$(LINUX_DIR)/net/6lowpan/6lowpan.ko +- AUTOLOAD:=$(call AutoProbe,6lowpan) ++ CONFIG_6LOWPAN ++ FILES:=$(LINUX_DIR)/net/6lowpan/6lowpan.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_dest.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_fragment.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_hop.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_ipv6.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_mobility.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_routing.ko \ ++ $(LINUX_DIR)/net/6lowpan/nhc_udp.ko ++AUTOLOAD:=$(call AutoProbe,6lowpan nhc_dest nhc_fragment nhc_hop nhc_ipv6 nhc_mobility nhc_routing nhc_udp) + endef + + define KernelPackage/6lowpan/description +diff --git a/target/linux/generic/hack-5.4/280-rfkill-stubs.patch b/target/linux/generic/hack-5.4/280-rfkill-stubs.patch +deleted file mode 100644 +index 2e48aea1cf..0000000000 +--- a/target/linux/generic/hack-5.4/280-rfkill-stubs.patch ++++ /dev/null +@@ -1,84 +0,0 @@ +-From 236c1acdfef5958010ac9814a9872e0a46fd78ee Mon Sep 17 00:00:00 2001 +-From: John Crispin +-Date: Fri, 7 Jul 2017 17:13:44 +0200 +-Subject: rfkill: add fake rfkill support +- +-allow building of modules depending on RFKILL even if RFKILL is not enabled. +- +-Signed-off-by: John Crispin +---- +- include/linux/rfkill.h | 2 +- +- net/Makefile | 2 +- +- net/rfkill/Kconfig | 14 +++++++++----- +- net/rfkill/Makefile | 2 +- +- 4 files changed, 12 insertions(+), 8 deletions(-) +- +---- a/include/linux/rfkill.h +-+++ b/include/linux/rfkill.h +-@@ -64,7 +64,7 @@ struct rfkill_ops { +- int (*set_block)(void *data, bool blocked); +- }; +- +--#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) +-+#if defined(CONFIG_RFKILL_FULL) || defined(CONFIG_RFKILL_FULL_MODULE) +- /** +- * rfkill_alloc - Allocate rfkill structure +- * @name: name of the struct -- the string is not copied internally +---- a/net/Makefile +-+++ b/net/Makefile +-@@ -53,7 +53,7 @@ obj-$(CONFIG_TIPC) += tipc/ +- obj-$(CONFIG_NETLABEL) += netlabel/ +- obj-$(CONFIG_IUCV) += iucv/ +- obj-$(CONFIG_SMC) += smc/ +--obj-$(CONFIG_RFKILL) += rfkill/ +-+obj-$(CONFIG_RFKILL_FULL) += rfkill/ +- obj-$(CONFIG_NET_9P) += 9p/ +- obj-$(CONFIG_CAIF) += caif/ +- ifneq ($(CONFIG_DCB),) +---- a/net/rfkill/Kconfig +-+++ b/net/rfkill/Kconfig +-@@ -2,7 +2,11 @@ +- # +- # RF switch subsystem configuration +- # +--menuconfig RFKILL +-+config RFKILL +-+ bool +-+ default y +-+ +-+menuconfig RFKILL_FULL +- tristate "RF switch subsystem support" +- help +- Say Y here if you want to have control over RF switches +-@@ -14,19 +18,19 @@ menuconfig RFKILL +- # LED trigger support +- config RFKILL_LEDS +- bool +-- depends on RFKILL +-+ depends on RFKILL_FULL +- depends on LEDS_TRIGGERS = y || RFKILL = LEDS_TRIGGERS +- default y +- +- config RFKILL_INPUT +- bool "RF switch input support" if EXPERT +-- depends on RFKILL +-+ depends on RFKILL_FULL +- depends on INPUT = y || RFKILL = INPUT +- default y if !EXPERT +- +- config RFKILL_GPIO +- tristate "GPIO RFKILL driver" +-- depends on RFKILL +-+ depends on RFKILL_FULL +- depends on GPIOLIB || COMPILE_TEST +- default n +- help +---- a/net/rfkill/Makefile +-+++ b/net/rfkill/Makefile +-@@ -5,5 +5,5 @@ +- +- rfkill-y += core.o +- rfkill-$(CONFIG_RFKILL_INPUT) += input.o +--obj-$(CONFIG_RFKILL) += rfkill.o +-+obj-$(CONFIG_RFKILL_FULL) += rfkill.o +- obj-$(CONFIG_RFKILL_GPIO) += rfkill-gpio.o +-- +2.25.1 + diff --git a/patches-20.x/0026-Revert-ipq40xx-enable-RX-hash-CTAG-TX-offloading-for.patch b/patches-20.x/0026-Revert-ipq40xx-enable-RX-hash-CTAG-TX-offloading-for.patch new file mode 100644 index 000000000..93fa79e93 --- /dev/null +++ b/patches-20.x/0026-Revert-ipq40xx-enable-RX-hash-CTAG-TX-offloading-for.patch @@ -0,0 +1,39 @@ +From da8f5d0260f1a4274ddad4266bddc3839e77401e Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Wed, 2 Dec 2020 12:11:33 +0100 +Subject: [PATCH] Revert "ipq40xx: enable RX hash / CTAG TX offloading for + single-phy" + +This reverts commit e73d866c6fc7dfad2fb7dd87345c90029bbda59d. +--- + .../drivers/net/ethernet/qualcomm/essedma/edma_axi.c | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c +index 49ee31a1bd..50335b0d14 100644 +--- a/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c ++++ b/target/linux/ipq40xx/files/drivers/net/ethernet/qualcomm/essedma/edma_axi.c +@@ -978,20 +978,11 @@ static int edma_axi_probe(struct platform_device *pdev) + edma_netdev[i]->wanted_features = NETIF_F_HW_CSUM | NETIF_F_SG | + NETIF_F_TSO | NETIF_F_GRO; + +- if (of_property_read_bool(np, "qcom,single-phy") && edma_cinfo->num_gmac == 1) +- edma_netdev[i]->features |= NETIF_F_HW_VLAN_CTAG_TX; +- + #ifdef CONFIG_RFS_ACCEL + edma_netdev[i]->features |= NETIF_F_NTUPLE; + edma_netdev[i]->hw_features |= NETIF_F_NTUPLE; + edma_netdev[i]->vlan_features |= NETIF_F_NTUPLE; + edma_netdev[i]->wanted_features |= NETIF_F_NTUPLE; +- if (of_property_read_bool(np, "qcom,single-phy") && edma_cinfo->num_gmac == 1) { +- edma_netdev[i]->features |= NETIF_F_RXHASH; +- edma_netdev[i]->hw_features |= NETIF_F_RXHASH; +- edma_netdev[i]->vlan_features |= NETIF_F_RXHASH; +- edma_netdev[i]->wanted_features |= NETIF_F_RXHASH; +- } + #endif + edma_set_ethtool_ops(edma_netdev[i]); + +-- +2.25.1 + diff --git a/profiles-20.x/ap2220.yml b/profiles-20.x/ap2220.yml new file mode 100644 index 000000000..980e93866 --- /dev/null +++ b/profiles-20.x/ap2220.yml @@ -0,0 +1,7 @@ +--- +profile: tp-link_ap2220 +target: ipq40xx +subtarget: generic +description: Build image for the TP-Link AP2220 +include: + - wifi diff --git a/profiles-20.x/bluetooth.yml b/profiles-20.x/bluetooth.yml new file mode 100644 index 000000000..83eab04f2 --- /dev/null +++ b/profiles-20.x/bluetooth.yml @@ -0,0 +1,17 @@ +--- +description: Add the bluetooth dependencies +feeds: + - name: bluetooth + path: ../../feeds/bluetooth + +packages: + - kmod-bluetooth=y + - kmod-bluetooth-6lowpan=y + - kmod-rfkill=y + - bluez-daemon=y + - bluez-ibeacon=y + - bluetooth-6lowpand=y + - ubtled=y + +diffconfig: | + CONFIG_USE_RFKILL=y diff --git a/profiles-20.x/container.yml b/profiles-20.x/container.yml new file mode 100644 index 000000000..2006d3b6c --- /dev/null +++ b/profiles-20.x/container.yml @@ -0,0 +1,5 @@ +--- +description: Add the container dependencies +feeds: + - name: container + path: ../../feeds/container diff --git a/profiles-20.x/cypress.yml b/profiles-20.x/cypress.yml new file mode 100644 index 000000000..a963d3f46 --- /dev/null +++ b/profiles-20.x/cypress.yml @@ -0,0 +1,12 @@ +--- +profile: qcom_cp01_c1 +target: ipq807x +subtarget: ipq60xx +description: Build image for the QualComm Cypress +_packages: + - opensync-tip +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/dgs1210-10p.yml b/profiles-20.x/dgs1210-10p.yml new file mode 100644 index 000000000..2a41c5097 --- /dev/null +++ b/profiles-20.x/dgs1210-10p.yml @@ -0,0 +1,7 @@ +--- +profile: d-link_dgs-1210-10p +target: realtek +subtarget: generic +description: Build image for the D-Link DGS1210-10P +include: + - realtek diff --git a/profiles-20.x/dgs1210-16.yml b/profiles-20.x/dgs1210-16.yml new file mode 100644 index 000000000..39a4dae3f --- /dev/null +++ b/profiles-20.x/dgs1210-16.yml @@ -0,0 +1,7 @@ +--- +profile: d-link_dgs-1210-16 +target: realtek +subtarget: generic +description: Build image for the D-Link DGS1210-16 +include: + - realtek diff --git a/profiles-20.x/ea8300.yml b/profiles-20.x/ea8300.yml new file mode 100644 index 000000000..2dc8c4ca4 --- /dev/null +++ b/profiles-20.x/ea8300.yml @@ -0,0 +1,7 @@ +--- +profile: linksys_ea8300 +target: ipq40xx +subtarget: generic +description: Build image for the Linksys EA8300 +include: + - wifi diff --git a/profiles-20.x/eap101.yml b/profiles-20.x/eap101.yml new file mode 100644 index 000000000..7aca0a6b0 --- /dev/null +++ b/profiles-20.x/eap101.yml @@ -0,0 +1,10 @@ +--- +profile: edgecore_eap101 +target: ipq807x +subtarget: ipq60xx +description: Build image for the EdgeCore EAP101 +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/eap102.yml b/profiles-20.x/eap102.yml new file mode 100644 index 000000000..bc090cc25 --- /dev/null +++ b/profiles-20.x/eap102.yml @@ -0,0 +1,10 @@ +--- +profile: edgecore_eap102 +target: ipq807x +subtarget: ipq807x +description: Build image for the Edgecore EAP102 +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/ec420.yml b/profiles-20.x/ec420.yml new file mode 100644 index 000000000..527936c05 --- /dev/null +++ b/profiles-20.x/ec420.yml @@ -0,0 +1,7 @@ +--- +profile: tp-link_ec420_g1 +target: ipq40xx +subtarget: generic +description: Build image for the TP-Link EC420 G1 +include: + - wifi diff --git a/profiles-20.x/ecw5211.yml b/profiles-20.x/ecw5211.yml new file mode 100644 index 000000000..64c3f2e5c --- /dev/null +++ b/profiles-20.x/ecw5211.yml @@ -0,0 +1,7 @@ +--- +profile: edgecore_ecw5211 +target: ipq40xx +subtarget: generic +description: Build image for the Edgecore ECW5211 +include: + - wifi diff --git a/profiles-20.x/ecw5410.yml b/profiles-20.x/ecw5410.yml new file mode 100644 index 000000000..699d064d0 --- /dev/null +++ b/profiles-20.x/ecw5410.yml @@ -0,0 +1,7 @@ +--- +profile: edgecore_ecw5410 +target: ipq806x +subtarget: generic +description: Build image for the Edgecore ECW5410 +include: + - wifi diff --git a/profiles-20.x/gs110tpp.yml b/profiles-20.x/gs110tpp.yml new file mode 100644 index 000000000..c5d47a299 --- /dev/null +++ b/profiles-20.x/gs110tpp.yml @@ -0,0 +1,7 @@ +--- +profile: netgear_gs110tpp-v1 +target: realtek +subtarget: generic +description: Build image for the D-Link DGS1210-10P +include: + - realtek diff --git a/profiles-20.x/hawkeye.yml b/profiles-20.x/hawkeye.yml new file mode 100644 index 000000000..439038e1d --- /dev/null +++ b/profiles-20.x/hawkeye.yml @@ -0,0 +1,10 @@ +--- +profile: qcom_hk01 +target: ipq807x +subtarget: ipq807x +description: Build image for the QualCom Hawkeye +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/mt7622-rfb1.yml b/profiles-20.x/mt7622-rfb1.yml new file mode 100644 index 000000000..f6412e43c --- /dev/null +++ b/profiles-20.x/mt7622-rfb1.yml @@ -0,0 +1,9 @@ +--- +profile: mediatek_mt7622-rfb1 +target: mediatek +subtarget: mt7622 +description: Build image for the MediaTek MT7622 revkit +packages: + - kmod-mt7915e + - kmod-btmtkuart + - mt7622bt-firmware diff --git a/profiles-20.x/pine.yml b/profiles-20.x/pine.yml new file mode 100644 index 000000000..325fcb1e9 --- /dev/null +++ b/profiles-20.x/pine.yml @@ -0,0 +1,10 @@ +--- +profile: qcom_hk14 +target: ipq807x +subtarget: ipq807x +description: Build image for the QualCom Pine +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/realtek.yml b/profiles-20.x/realtek.yml new file mode 100644 index 000000000..0f74f4fb2 --- /dev/null +++ b/profiles-20.x/realtek.yml @@ -0,0 +1,8 @@ +--- +description: Add the realtek dependencies +feeds: + - name: realtek + path: ../../feeds/realtek + +packages: + - rtl83xx-poe=y diff --git a/profiles-20.x/wallaby.yml b/profiles-20.x/wallaby.yml new file mode 100644 index 000000000..22e41ea55 --- /dev/null +++ b/profiles-20.x/wallaby.yml @@ -0,0 +1,10 @@ +--- +profile: sercomm_wallaby +target: ipq807x +subtarget: ipq807x +description: Build image for the Sercomm Wallaby +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/webui.yml b/profiles-20.x/webui.yml new file mode 100644 index 000000000..620861f74 --- /dev/null +++ b/profiles-20.x/webui.yml @@ -0,0 +1,16 @@ +--- +description: Add the webui dependencies +packages: + - cgi-io + - liblucihttp + - lua + - luci-base + - luci-mod-simple + - luci-theme-tip + - rpcd + - rpcd-mod-file + - rpcd-mod-iwinfo + - rpcd-mod-luci + - rpcd-mod-rrdns + - uhttpd + - uhttpd-mod-ubus diff --git a/profiles-20.x/wf188n.yml b/profiles-20.x/wf188n.yml new file mode 100644 index 000000000..ebf313573 --- /dev/null +++ b/profiles-20.x/wf188n.yml @@ -0,0 +1,10 @@ +--- +profile: cig_wf188n +target: ipq807x +subtarget: ipq60xx +description: Build image for the Cigtech WF188n +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/wf194c.yml b/profiles-20.x/wf194c.yml new file mode 100644 index 000000000..0524e628f --- /dev/null +++ b/profiles-20.x/wf194c.yml @@ -0,0 +1,10 @@ +--- +profile: cig_wf194 +target: ipq807x +subtarget: ipq807x +description: Build image for the CIG WF194C +feeds: + - name: ipq807x + path: ../../feeds/ipq807x +include: + - wifi-ax diff --git a/profiles-20.x/wifi-ax.yml b/profiles-20.x/wifi-ax.yml new file mode 100644 index 000000000..c20b05614 --- /dev/null +++ b/profiles-20.x/wifi-ax.yml @@ -0,0 +1,5 @@ +--- +description: Add the wifi support AX targets +feeds: + - name: wifi_ax + path: ../../feeds/wifi-ax diff --git a/profiles-20.x/wifi.yml b/profiles-20.x/wifi.yml new file mode 100644 index 000000000..c90976dea --- /dev/null +++ b/profiles-20.x/wifi.yml @@ -0,0 +1,14 @@ +--- +description: Add the ath10k wifi extensions +_feeds: + - name: wifi + path: ../../feeds/wifi-trunk +packages: + - ath10k-firmware-qca4019-ct-htt + - ath10k-firmware-qca9888-ct-htt + - ath10k-firmware-qca9984-ct-htt + - ct-bugcheck +diffconfig: | + # CONFIG_PACKAGE_ath10k-firmware-qca4019-ct is not set + # CONFIG_PACKAGE_ath10k-firmware-qca9888-ct is not set + # CONFIG_PACKAGE_ath10k-firmware-qca9984-ct is not set diff --git a/profiles-20.x/wlan-ap.yml b/profiles-20.x/wlan-ap.yml new file mode 100644 index 000000000..75a816b07 --- /dev/null +++ b/profiles-20.x/wlan-ap.yml @@ -0,0 +1,80 @@ +--- +description: Add the wlan-ap dependencies +feeds: + - name: wlan_ap + path: ../../feeds/wlan-ap + - name: python + path: ../../feeds/python-20.x + +packages: + - kmod-batman-adv + - batctl-default + - coreutils + - coreutils-sleep + - jansson + - kmod-crypto-crc32c + - kmod-crypto-hash + - kmod-lib-crc32c + - kmod-mpls + - kmod-nf-nat6 + - kmod-openvswitch + - libatomic + - libcares + - libev + - libmosquitto-ssl + - libopenssl + - libpcap + - libprotobuf-c + - librt + - libstdcpp + - libunbound-light + - libuuid + - lldpd + - nft-qos + - openvswitch + - openvswitch-common + - openvswitch-libofproto + - openvswitch-libopenvswitch + - openvswitch-libovsdb + - openvswitch-ovsdb + - openvswitch-vswitchd + - protobuf + - protobuf-lite + - uuidgen + - zlib + - wlan-ap-config + - wpad-openssl + - ip-bridge + - opennds + - opensync + - dnsmasq-full + - ipset + - libradiusclient + - nf_uccdetect + - kmod-nf_uccdetect + - gre + - grev4 + - grev6 + - kmod-gre + - kmod-gre6 + - kmod-ip6-tunnel + - kmod-iptunnel + - kmod-iptunnel6 + +diffconfig: | + CONFIG_OPENSSL_ENGINE=y + CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM=y + CONFIG_OPENSSL_WITH_ASM=y + CONFIG_OPENSSL_WITH_CHACHA_POLY1305=y + CONFIG_OPENSSL_WITH_CMS=y + CONFIG_OPENSSL_WITH_DEPRECATED=y + CONFIG_OPENSSL_WITH_ERROR_MESSAGES=y + CONFIG_OPENSSL_WITH_PSK=y + CONFIG_OPENSSL_WITH_SRP=y + CONFIG_OPENSSL_WITH_TLS13=y + # CONFIG_PACKAGE_wpad-basic-wolfssl is not set + # CONFIG_PACKAGE_dnsmasq is not set + CONFIG_IMAGEOPT=y + CONFIG_PREINITOPT=y + CONFIG_TARGET_PREINIT_SUPPRESS_STDERR=y + CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE=y diff --git a/profiles-20.x/wlan-switch.yml b/profiles-20.x/wlan-switch.yml new file mode 100644 index 000000000..c8bfbd0e1 --- /dev/null +++ b/profiles-20.x/wlan-switch.yml @@ -0,0 +1,49 @@ +--- +description: Add the wlan-switch dependencies +feeds: + - name: wlan_ap + path: ../../feeds/wlan-ap + - name: python + path: ../../feeds/python-20.x + - name: realtek + path: ../../feeds/realtek + +packages: + - coreutils + - coreutils-sleep + - kmod-crypto-crc32c + - kmod-crypto-hash + - kmod-lib-crc32c + - kmod-mpls + - kmod-nf-nat6 + - kmod-openvswitch + - libev + - libopenssl + - libpcap + - libprotobuf-c + - librt + - libstdcpp + - libuuid + - lldpd + - openvswitch + - openvswitch-common + - openvswitch-libofproto + - openvswitch-libopenvswitch + - openvswitch-libovsdb + - openvswitch-ovsdb + - openvswitch-vswitchd + - protobuf + - protobuf-lite + - uuidgen + - zlib + - wlan-ap-config + - ip-bridge + - opensync + - ipset + - rtl83xx-poe + - udevmand +diffconfig: | + CONFIG_IMAGEOPT=y + CONFIG_PREINITOPT=y + CONFIG_TARGET_PREINIT_SUPPRESS_STDERR=y + CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE=y diff --git a/profiles-20.x/zyxel_gs1900-10hp.yml b/profiles-20.x/zyxel_gs1900-10hp.yml new file mode 100644 index 000000000..bef892ec9 --- /dev/null +++ b/profiles-20.x/zyxel_gs1900-10hp.yml @@ -0,0 +1,7 @@ +--- +profile: zyxel_gs1900-10hp +target: realtek +subtarget: generic +description: Build image for the Zyxel GS1900-10HP +include: + - realtek diff --git a/profiles/container.yml b/profiles/container.yml new file mode 100644 index 000000000..2006d3b6c --- /dev/null +++ b/profiles/container.yml @@ -0,0 +1,5 @@ +--- +description: Add the container dependencies +feeds: + - name: container + path: ../../feeds/container diff --git a/profiles/wlan-switch.yml b/profiles/wlan-switch.yml new file mode 100644 index 000000000..c8bfbd0e1 --- /dev/null +++ b/profiles/wlan-switch.yml @@ -0,0 +1,49 @@ +--- +description: Add the wlan-switch dependencies +feeds: + - name: wlan_ap + path: ../../feeds/wlan-ap + - name: python + path: ../../feeds/python-20.x + - name: realtek + path: ../../feeds/realtek + +packages: + - coreutils + - coreutils-sleep + - kmod-crypto-crc32c + - kmod-crypto-hash + - kmod-lib-crc32c + - kmod-mpls + - kmod-nf-nat6 + - kmod-openvswitch + - libev + - libopenssl + - libpcap + - libprotobuf-c + - librt + - libstdcpp + - libuuid + - lldpd + - openvswitch + - openvswitch-common + - openvswitch-libofproto + - openvswitch-libopenvswitch + - openvswitch-libovsdb + - openvswitch-ovsdb + - openvswitch-vswitchd + - protobuf + - protobuf-lite + - uuidgen + - zlib + - wlan-ap-config + - ip-bridge + - opensync + - ipset + - rtl83xx-poe + - udevmand +diffconfig: | + CONFIG_IMAGEOPT=y + CONFIG_PREINITOPT=y + CONFIG_TARGET_PREINIT_SUPPRESS_STDERR=y + CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE=y diff --git a/setup.py b/setup.py index 1cbdf4b3c..313212bd7 100644 --- a/setup.py +++ b/setup.py @@ -87,7 +87,7 @@ def setup_tree(): for patch in patches: run(["git", git_am, "-3", str(base_dir / patch)], check=True) run( - ["ln", "-s", "../profiles"], check=True, + ["ln", "-s", profiles, "profiles"], check=True, ) print("### Patches done") except: @@ -120,11 +120,12 @@ setup = False update = False rebase = False config = "config.yml" +profiles = "../profiles" openwrt = "openwrt" git_ref = "" try: - opts, args = getopt.getopt(sys.argv[1:], "srdc:f:u", ["setup", "rebase", "docker", "config=", "folder=", "reference=", "update"]) + opts, args = getopt.getopt(sys.argv[1:], "srdc:f:u2", ["setup", "rebase", "docker", "config=", "folder=", "reference=", "update", "20x" ]) except getopt.GetoptError as err: print(err) sys.exit(2) @@ -143,6 +144,10 @@ for o, a in opts: git_ref = a elif o in ("-d", "--docker"): git_am = "apply" + elif o in ("-2", "--20x"): + config = "config-20.x.yml" + profiles = "../profiles-20.x" + openwrt = "openwrt-20.x" else: assert False, "unhandled option"