diff --git a/lib/functions/compilation/patch/drivers_network.sh b/lib/functions/compilation/patch/drivers_network.sh index 7a52d035dc..f0699925fe 100644 --- a/lib/functions/compilation/patch/drivers_network.sh +++ b/lib/functions/compilation/patch/drivers_network.sh @@ -667,6 +667,15 @@ driver_uwe5622_allwinner() { if [[ "$LINUXFAMILY" == sunxi* ]]; then process_patch_file "${SRC}/patch/misc/wireless-driver-for-uwe5622-fix-setting-mac-address-for-netdev.patch" "applying" fi + + # Apply patches that adjust the driver only for rockchip platforms + if [[ "$LINUXFAMILY" == rockchip* ]]; then + if linux-version compare "${version}" le 6.1; then + process_patch_file "${SRC}/patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-pre-6.1.patch" + else + process_patch_file "${SRC}/patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-post-6.1.patch" + fi + fi fi } diff --git a/patch/kernel/archive/rockchip64-6.1/wifi-4003-uwe5622-adjust-for-rockchip.patch b/patch/kernel/archive/rockchip64-6.1/wifi-4003-uwe5622-adjust-for-rockchip.patch deleted file mode 100644 index 751d92d732..0000000000 --- a/patch/kernel/archive/rockchip64-6.1/wifi-4003-uwe5622-adjust-for-rockchip.patch +++ /dev/null @@ -1,5753 +0,0 @@ -From 7827d00e29334f5801b92ad83924f07c673c2015 Mon Sep 17 00:00:00 2001 -From: Paolo Sabatino -Date: Sun, 22 Jan 2023 14:13:39 +0000 -Subject: [PATCH] adjust uwe5622 driver for rockchip - ---- - drivers/net/wireless/uwe5622/Kconfig | 3 +- - drivers/net/wireless/uwe5622/Makefile | 2 +- - drivers/net/wireless/uwe5622/tty-sdio/Kconfig | 0 - .../net/wireless/uwe5622/tty-sdio/Makefile | 9 +- - .../wireless/uwe5622/tty-sdio/Makefile.old | 31 + - .../uwe5622/tty-sdio/alignment/sitm.c | 0 - .../uwe5622/tty-sdio/alignment/sitm.h | 0 - drivers/net/wireless/uwe5622/tty-sdio/dump.c | 4 +- - drivers/net/wireless/uwe5622/tty-sdio/dump.h | 0 - drivers/net/wireless/uwe5622/tty-sdio/lpm.c | 4 - - drivers/net/wireless/uwe5622/tty-sdio/lpm.h | 0 - .../net/wireless/uwe5622/tty-sdio/rfkill.c | 0 - .../net/wireless/uwe5622/tty-sdio/rfkill.h | 0 - drivers/net/wireless/uwe5622/tty-sdio/tty.c | 0 - drivers/net/wireless/uwe5622/tty-sdio/tty.h | 0 - drivers/net/wireless/uwe5622/tty-sdio/woble.c | 0 - drivers/net/wireless/uwe5622/tty-sdio/woble.h | 0 - .../net/wireless/uwe5622/unisocwcn/Kconfig | 0 - .../net/wireless/uwe5622/unisocwcn/Makefile | 4 +- - .../wireless/uwe5622/unisocwcn/boot/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/boot/Makefile | 6 +- - .../unisocwcn/boot/gnss_firmware_bin.h | 0 - .../unisocwcn/boot/marlin_firmware_bin.h | 0 - .../uwe5622/unisocwcn/boot/wcn_integrate.c | 52 +- - .../uwe5622/unisocwcn/boot/wcn_integrate.h | 0 - .../unisocwcn/boot/wcn_integrate_boot.c | 35 +- - .../unisocwcn/boot/wcn_integrate_boot.h | 0 - .../unisocwcn/boot/wcn_integrate_dev.c | 22 +- - .../unisocwcn/boot/wcn_integrate_dev.h | 0 - .../wireless/uwe5622/unisocwcn/fw/bin2hex.c | 0 - .../uwe5622/unisocwcn/fw/firmware_hex.h | 0 - .../uwe5622/unisocwcn/fw/usb_fdl.bin.hex | 0 - .../wireless/uwe5622/unisocwcn/fw/version.txt | 0 - .../uwe5622/unisocwcn/fw/wcnmodem.bin.hex | 0 - .../wireless/uwe5622/unisocwcn/gnss/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/gnss/Makefile | 0 - .../uwe5622/unisocwcn/include/bus_common.h | 0 - .../unisocwcn/include/marlin_platform.h | 3 +- - .../wireless/uwe5622/unisocwcn/include/mchn.h | 0 - .../uwe5622/unisocwcn/include/uwe5621_glb.h | 0 - .../uwe5622/unisocwcn/include/uwe5622_glb.h | 0 - .../uwe5622/unisocwcn/include/uwe5623_glb.h | 0 - .../uwe5622/unisocwcn/include/uwe562x_glb.h | 5 + - .../include/vendor/hisilicon/hi_drv_gpio.h | 0 - .../include/vendor/hisilicon/hi_type.h | 0 - .../uwe5622/unisocwcn/include/wcn_bus.h | 0 - .../uwe5622/unisocwcn/include/wcn_glb.h | 0 - .../uwe5622/unisocwcn/include/wcn_glb_reg.h | 0 - .../uwe5622/unisocwcn/include/wcn_types.h | 0 - .../uwe5622/unisocwcn/include/wcn_wrapper.h | 20 + - .../wireless/uwe5622/unisocwcn/log/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/log/Makefile | 0 - .../wireless/uwe5622/unisocwcn/pcie/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/pcie/Makefile | 0 - .../uwe5622/unisocwcn/pcie/edma_engine.c | 0 - .../uwe5622/unisocwcn/pcie/edma_engine.h | 0 - .../uwe5622/unisocwcn/pcie/edma_test.c | 0 - .../wireless/uwe5622/unisocwcn/pcie/ioctl.c | 0 - .../wireless/uwe5622/unisocwcn/pcie/ioctl.h | 0 - .../wireless/uwe5622/unisocwcn/pcie/mchn.c | 0 - .../wireless/uwe5622/unisocwcn/pcie/mchn.h | 0 - .../wireless/uwe5622/unisocwcn/pcie/pcie.c | 0 - .../wireless/uwe5622/unisocwcn/pcie/pcie.h | 0 - .../uwe5622/unisocwcn/pcie/pcie_attach_bus.c | 0 - .../uwe5622/unisocwcn/pcie/pcie_dbg.c | 0 - .../uwe5622/unisocwcn/pcie/pcie_dbg.h | 0 - .../uwe5622/unisocwcn/platform/Kconfig | 0 - .../uwe5622/unisocwcn/platform/Makefile | 0 - .../uwe5622/unisocwcn/platform/bufring.c | 3 +- - .../uwe5622/unisocwcn/platform/bufring.h | 0 - .../unisocwcn/platform/gnss/gnss_common.h | 0 - .../unisocwcn/platform/gnss/gnss_common_ctl.c | 0 - .../unisocwcn/platform/gnss/gnss_dbg.c | 0 - .../unisocwcn/platform/gnss/gnss_dump.c | 0 - .../unisocwcn/platform/gnss/gnss_dump.h | 0 - .../platform/gnss/gnss_pmnotify_ctl.c | 0 - .../uwe5622/unisocwcn/platform/loopcheck.c | 10 +- - .../uwe5622/unisocwcn/platform/loopcheck.h | 0 - .../uwe5622/unisocwcn/platform/mdbg_type.h | 0 - .../uwe5622/unisocwcn/platform/mem_pd_mgr.c | 21 +- - .../uwe5622/unisocwcn/platform/mem_pd_mgr.h | 0 - .../uwe5622/unisocwcn/platform/pcie_boot.c | 2 - - .../uwe5622/unisocwcn/platform/pcie_boot.h | 0 - .../uwe5622/unisocwcn/platform/rdc_debug.c | 0 - .../uwe5622/unisocwcn/platform/rdc_debug.h | 0 - .../uwe5622/unisocwcn/platform/rf/rf.c | 22 +- - .../uwe5622/unisocwcn/platform/rf/rf.h | 0 - .../uwe5622/unisocwcn/platform/usb_boot.c | 0 - .../uwe5622/unisocwcn/platform/usb_boot.h | 0 - .../unisocwcn/platform/wcn_bind_helper.c | 1444 +++++++++++++++++ - .../uwe5622/unisocwcn/platform/wcn_boot.c | 62 +- - .../uwe5622/unisocwcn/platform/wcn_debugfs.c | 8 +- - .../uwe5622/unisocwcn/platform/wcn_dump.c | 112 +- - .../uwe5622/unisocwcn/platform/wcn_dump.h | 0 - .../unisocwcn/platform/wcn_dump_integrate.c | 2 +- - .../unisocwcn/platform/wcn_dump_integrate.h | 0 - .../uwe5622/unisocwcn/platform/wcn_gnss.h | 0 - .../uwe5622/unisocwcn/platform/wcn_log.c | 0 - .../uwe5622/unisocwcn/platform/wcn_log.h | 0 - .../uwe5622/unisocwcn/platform/wcn_misc.c | 13 +- - .../uwe5622/unisocwcn/platform/wcn_misc.h | 0 - .../uwe5622/unisocwcn/platform/wcn_op.c | 0 - .../uwe5622/unisocwcn/platform/wcn_op.h | 0 - .../unisocwcn/platform/wcn_parn_parser.c | 4 +- - .../unisocwcn/platform/wcn_parn_parser.h | 0 - .../uwe5622/unisocwcn/platform/wcn_procfs.c | 15 +- - .../uwe5622/unisocwcn/platform/wcn_procfs.h | 0 - .../uwe5622/unisocwcn/platform/wcn_swd_dp.c | 0 - .../uwe5622/unisocwcn/platform/wcn_swd_dp.h | 0 - .../uwe5622/unisocwcn/platform/wcn_txrx.c | 0 - .../uwe5622/unisocwcn/platform/wcn_txrx.h | 0 - .../wireless/uwe5622/unisocwcn/sdio/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/sdio/Makefile | 0 - .../wireless/uwe5622/unisocwcn/sdio/sdio_v3.c | 16 +- - .../wireless/uwe5622/unisocwcn/sdio/sdiohal.h | 2 +- - .../uwe5622/unisocwcn/sdio/sdiohal_common.c | 0 - .../uwe5622/unisocwcn/sdio/sdiohal_ctl.c | 0 - .../uwe5622/unisocwcn/sdio/sdiohal_main.c | 19 +- - .../uwe5622/unisocwcn/sdio/sdiohal_rx.c | 2 +- - .../uwe5622/unisocwcn/sdio/sdiohal_tx.c | 2 +- - .../wireless/uwe5622/unisocwcn/sipc/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/sipc/Makefile | 0 - .../uwe5622/unisocwcn/sipc/wcn_sipc.c | 0 - .../uwe5622/unisocwcn/sipc/wcn_sipc.h | 0 - .../wireless/uwe5622/unisocwcn/sleep/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/sleep/Makefile | 0 - .../uwe5622/unisocwcn/sleep/sdio_int.c | 0 - .../uwe5622/unisocwcn/sleep/sdio_int.h | 0 - .../uwe5622/unisocwcn/sleep/slp_mgr.c | 0 - .../uwe5622/unisocwcn/sleep/slp_mgr.h | 0 - .../uwe5622/unisocwcn/sleep/slp_pcie.c | 0 - .../uwe5622/unisocwcn/sleep/slp_pcie.h | 0 - .../uwe5622/unisocwcn/sleep/slp_sdio.c | 1 + - .../uwe5622/unisocwcn/sleep/slp_sdio.h | 1 + - .../uwe5622/unisocwcn/sleep/slp_test.c | 0 - .../wireless/uwe5622/unisocwcn/tool/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/tool/Makefile | 0 - .../unisocwcn/tool/cp2log_config/readme.txt | 0 - .../cp2log_config/unisoc_cp2log_config.txt | 0 - .../wireless/uwe5622/unisocwcn/usb/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/usb/Makefile | 0 - .../wireless/uwe5622/unisocwcn/usb/wcn_usb.c | 0 - .../wireless/uwe5622/unisocwcn/usb/wcn_usb.h | 0 - .../uwe5622/unisocwcn/usb/wcn_usb_download.c | 8 +- - .../uwe5622/unisocwcn/usb/wcn_usb_io.c | 0 - .../uwe5622/unisocwcn/usb/wcn_usb_rx_tx.c | 0 - .../uwe5622/unisocwcn/usb/wcn_usb_store.c | 0 - .../uwe5622/unisocwcn/usb/wcn_usb_test.c | 4 - - .../net/wireless/uwe5622/unisocwcn/vm/Kconfig | 0 - .../wireless/uwe5622/unisocwcn/vm/Makefile | 0 - .../net/wireless/uwe5622/unisocwcn/wcn_bus.c | 0 - drivers/net/wireless/uwe5622/unisocwifi/11h.c | 10 +- - drivers/net/wireless/uwe5622/unisocwifi/11h.h | 0 - .../wireless/uwe5622/unisocwifi/Android.mk | 0 - .../net/wireless/uwe5622/unisocwifi/Kconfig | 0 - .../net/wireless/uwe5622/unisocwifi/Makefile | 0 - .../wireless/uwe5622/unisocwifi/api_version.c | 4 - - .../wireless/uwe5622/unisocwifi/cfg80211.c | 63 +- - .../wireless/uwe5622/unisocwifi/cfg80211.h | 0 - .../net/wireless/uwe5622/unisocwifi/cmdevt.c | 251 +-- - .../net/wireless/uwe5622/unisocwifi/cmdevt.h | 0 - .../uwe5622/unisocwifi/dbg_ini_util.c | 0 - .../uwe5622/unisocwifi/dbg_ini_util.h | 0 - .../net/wireless/uwe5622/unisocwifi/debug.c | 0 - .../net/wireless/uwe5622/unisocwifi/debug.h | 0 - .../net/wireless/uwe5622/unisocwifi/defrag.c | 0 - .../net/wireless/uwe5622/unisocwifi/defrag.h | 0 - .../wireless/uwe5622/unisocwifi/edma_test.c | 0 - .../wireless/uwe5622/unisocwifi/edma_test.h | 0 - .../net/wireless/uwe5622/unisocwifi/ibss.c | 0 - .../net/wireless/uwe5622/unisocwifi/ibss.h | 0 - .../net/wireless/uwe5622/unisocwifi/intf.h | 20 +- - .../wireless/uwe5622/unisocwifi/intf_ops.h | 22 - - .../net/wireless/uwe5622/unisocwifi/main.c | 12 +- - drivers/net/wireless/uwe5622/unisocwifi/mm.c | 0 - drivers/net/wireless/uwe5622/unisocwifi/mm.h | 0 - drivers/net/wireless/uwe5622/unisocwifi/msg.c | 2 - - drivers/net/wireless/uwe5622/unisocwifi/msg.h | 2 - - drivers/net/wireless/uwe5622/unisocwifi/nan.c | 0 - drivers/net/wireless/uwe5622/unisocwifi/nan.h | 0 - drivers/net/wireless/uwe5622/unisocwifi/npi.c | 18 +- - drivers/net/wireless/uwe5622/unisocwifi/npi.h | 0 - drivers/net/wireless/uwe5622/unisocwifi/qos.c | 53 +- - drivers/net/wireless/uwe5622/unisocwifi/qos.h | 4 +- - .../wireless/uwe5622/unisocwifi/reg_domain.c | 0 - .../wireless/uwe5622/unisocwifi/reg_domain.h | 0 - .../net/wireless/uwe5622/unisocwifi/reorder.c | 0 - .../net/wireless/uwe5622/unisocwifi/reorder.h | 0 - .../wireless/uwe5622/unisocwifi/rf_marlin3.c | 4 +- - .../wireless/uwe5622/unisocwifi/rf_marlin3.h | 0 - .../wireless/uwe5622/unisocwifi/rfkill-bt.c | 825 ++++++++++ - .../wireless/uwe5622/unisocwifi/rfkill-wlan.c | 971 +++++++++++ - .../uwe5622/unisocwifi/rnd_mac_addr.c | 0 - .../uwe5622/unisocwifi/rnd_mac_addr.h | 0 - drivers/net/wireless/uwe5622/unisocwifi/rtt.c | 0 - drivers/net/wireless/uwe5622/unisocwifi/rtt.h | 0 - .../net/wireless/uwe5622/unisocwifi/rx_msg.c | 10 - - .../net/wireless/uwe5622/unisocwifi/rx_msg.h | 0 - .../wireless/uwe5622/unisocwifi/softap_hook.c | 0 - .../wireless/uwe5622/unisocwifi/softap_hook.h | 0 - .../net/wireless/uwe5622/unisocwifi/sprdwl.h | 2 - - .../net/wireless/uwe5622/unisocwifi/tcp_ack.c | 0 - .../net/wireless/uwe5622/unisocwifi/tcp_ack.h | 0 - .../net/wireless/uwe5622/unisocwifi/tracer.c | 0 - .../net/wireless/uwe5622/unisocwifi/tracer.h | 0 - .../net/wireless/uwe5622/unisocwifi/tx_msg.c | 10 +- - .../net/wireless/uwe5622/unisocwifi/tx_msg.h | 0 - .../net/wireless/uwe5622/unisocwifi/txrx.c | 39 +- - .../net/wireless/uwe5622/unisocwifi/txrx.h | 0 - .../net/wireless/uwe5622/unisocwifi/vendor.c | 14 +- - .../net/wireless/uwe5622/unisocwifi/vendor.h | 0 - .../net/wireless/uwe5622/unisocwifi/version.h | 0 - .../net/wireless/uwe5622/unisocwifi/wl_core.c | 156 +- - .../net/wireless/uwe5622/unisocwifi/wl_core.h | 0 - .../net/wireless/uwe5622/unisocwifi/wl_intf.c | 112 +- - .../net/wireless/uwe5622/unisocwifi/wl_intf.h | 2 - - .../net/wireless/uwe5622/unisocwifi/work.c | 0 - .../net/wireless/uwe5622/unisocwifi/work.h | 0 - 218 files changed, 3730 insertions(+), 849 deletions(-) - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/Makefile - create mode 100755 drivers/net/wireless/uwe5622/tty-sdio/Makefile.old - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/alignment/sitm.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/alignment/sitm.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/dump.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/dump.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/lpm.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/lpm.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/rfkill.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/rfkill.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/tty.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/tty.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/woble.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/tty-sdio/woble.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/gnss_firmware_bin.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/marlin_firmware_bin.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate_boot.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate_boot.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate_dev.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/boot/wcn_integrate_dev.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/fw/bin2hex.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/fw/firmware_hex.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/fw/usb_fdl.bin.hex - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/fw/version.txt - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/fw/wcnmodem.bin.hex - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/gnss/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/gnss/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/bus_common.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/mchn.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/uwe5621_glb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/uwe5622_glb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/uwe5623_glb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/uwe562x_glb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/vendor/hisilicon/hi_drv_gpio.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/vendor/hisilicon/hi_type.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/wcn_bus.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/wcn_glb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/wcn_glb_reg.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/include/wcn_types.h - create mode 100755 drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/log/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/log/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/edma_engine.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/edma_engine.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/edma_test.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/ioctl.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/ioctl.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/mchn.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/mchn.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/pcie.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/pcie.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/pcie_attach_bus.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/pcie_dbg.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/pcie/pcie_dbg.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_common.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_common_ctl.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_dbg.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_dump.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_dump.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/gnss/gnss_pmnotify_ctl.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/loopcheck.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/loopcheck.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/mdbg_type.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/mem_pd_mgr.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/mem_pd_mgr.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/rf/rf.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/rf/rf.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/usb_boot.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/usb_boot.h - create mode 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_debugfs.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_dump.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_dump.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_dump_integrate.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_dump_integrate.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_gnss.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_op.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_op.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_swd_dp.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_swd_dp.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_txrx.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_txrx.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_common.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_ctl.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sipc/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sipc/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sipc/wcn_sipc.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sipc/wcn_sipc.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/sdio_int.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/sdio_int.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_mgr.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_mgr.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_pcie.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_pcie.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_sdio.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_sdio.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/sleep/slp_test.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/tool/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/tool/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/tool/cp2log_config/readme.txt - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/tool/cp2log_config/unisoc_cp2log_config.txt - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_io.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_rx_tx.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_store.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_test.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/vm/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/vm/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwcn/wcn_bus.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/11h.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/11h.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/Android.mk - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/Kconfig - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/Makefile - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/api_version.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/cfg80211.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/cmdevt.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/dbg_ini_util.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/dbg_ini_util.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/debug.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/debug.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/defrag.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/defrag.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/edma_test.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/edma_test.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/ibss.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/ibss.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/intf.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/main.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/mm.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/mm.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/msg.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/msg.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/nan.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/nan.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/npi.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/npi.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/qos.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/qos.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/reg_domain.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/reg_domain.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/reorder.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/reorder.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.h - create mode 100644 drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c - create mode 100644 drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rnd_mac_addr.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rnd_mac_addr.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rtt.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rtt.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/rx_msg.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/softap_hook.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/softap_hook.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tcp_ack.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tcp_ack.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tracer.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tracer.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/tx_msg.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/txrx.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/txrx.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/vendor.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/vendor.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/version.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/wl_core.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/wl_core.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/work.c - mode change 100644 => 100755 drivers/net/wireless/uwe5622/unisocwifi/work.h - -diff --git a/drivers/net/wireless/uwe5622/Kconfig b/drivers/net/wireless/uwe5622/Kconfig -index a1e123b039b..fe6c8d115c9 100644 ---- a/drivers/net/wireless/uwe5622/Kconfig -+++ b/drivers/net/wireless/uwe5622/Kconfig -@@ -1,7 +1,6 @@ - config SPARD_WLAN_SUPPORT - bool "Unisoc wireless Support" -- select AW_WIFI_DEVICE_UWE5622 if SPARD_WLAN_SUPPORT -- select AW_BIND_VERIFY if SPARD_WLAN_SUPPORT -+ select RK_WIFI_DEVICE_UWE5622 if SPARD_WLAN_SUPPORT - default n - help - This is support for spreadtrum wireless chip. -diff --git a/drivers/net/wireless/uwe5622/Makefile b/drivers/net/wireless/uwe5622/Makefile -index a5767f50df8..d2210439f3c 100644 ---- a/drivers/net/wireless/uwe5622/Makefile -+++ b/drivers/net/wireless/uwe5622/Makefile -@@ -1,4 +1,4 @@ --obj-$(CONFIG_AW_WIFI_DEVICE_UWE5622) += unisocwcn/ -+obj-$(CONFIG_RK_WIFI_DEVICE_UWE5622) += unisocwcn/ - obj-$(CONFIG_WLAN_UWE5622) += unisocwifi/ - obj-$(CONFIG_TTY_OVERY_SDIO) += tty-sdio/ - -diff --git a/drivers/net/wireless/uwe5622/tty-sdio/Makefile b/drivers/net/wireless/uwe5622/tty-sdio/Makefile -old mode 100644 -new mode 100755 -index 9dcb75258df..2f6f89189e8 ---- a/drivers/net/wireless/uwe5622/tty-sdio/Makefile -+++ b/drivers/net/wireless/uwe5622/tty-sdio/Makefile -@@ -1,13 +1,16 @@ - # ccflags-y += -DDEBUG - # ccflags-y += -DKERNEL_VERSION_414 -+ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - ccflags-y += -I$(srctree)/drivers/net/wireless/uwe5622/sprdwcn/include --ccflags-y += -DOTT_UWE --ccflags-y += -DWOBLE_FUN -+endif -+#ccflags-y += -DOTT_UWE -+ccflags-y += -Wno-implicit-fallthrough - - ifneq ($(UNISOC_BSP_INCLUDE),) - ccflags-y += -I$(UNISOC_BSP_INCLUDE) - endif - -+ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - sprdbt_tty-objs := \ - tty.o \ - rfkill.o \ -@@ -17,4 +20,4 @@ sprdbt_tty-objs := \ - dump.o - - obj-$(CONFIG_TTY_OVERY_SDIO) += sprdbt_tty.o -- -+endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/Makefile b/drivers/net/wireless/uwe5622/unisocwcn/Makefile -old mode 100644 -new mode 100755 -index f9c59574754..939acb5c927 ---- a/drivers/net/wireless/uwe5622/unisocwcn/Makefile -+++ b/drivers/net/wireless/uwe5622/unisocwcn/Makefile -@@ -70,8 +70,8 @@ ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - export CONFIG_WCN_SDIO = y - #export CONFIG_WCN_USB = y - # export CONFIG_WCN_GNSS = y --#ccflags-y += -DCONFIG_CHECK_DRIVER_BY_CHIPID --ccflags-y += -DCONFIG_UWE5622 -+ccflags-y += -DCONFIG_CHECK_DRIVER_BY_CHIPID -+#ccflags-y += -DCONFIG_UWE5622 - BSP_CHIP_ID := uwe5622 - WCN_HW_TYPE := sdio - endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h b/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -old mode 100644 -new mode 100755 -index 7a78181a458..ae8daac4664 ---- a/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -+++ b/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -@@ -83,8 +83,7 @@ enum marlin_wake_host_en { - }; - - enum marlin_cp2_status { -- MARLIN_CP2_STS_READY = 0, -- MARLIN_CP2_STS_ASSERTED = 1, -+ MARLIN_CP2_STS_ASSERTED = 0, - }; - - enum wcn_hw_type wcn_get_hw_if_type(void); - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h b/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h -new file mode 100755 -index 00000000000..909a4c7ecce ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h -@@ -0,0 +1,20 @@ -+#ifndef __WCN_WRAPPER_H__ -+#define __WCN_WRAPPER_H__ -+#include -+#if KERNEL_VERSION(5, 6, 0) <= LINUX_VERSION_CODE -+#ifndef timespec -+#define timespec timespec64 -+#define timespec_to_ns timespec64_to_ns -+#define getnstimeofday ktime_get_real_ts64 -+#define do_gettimeofday ktime_get_real_ts64 -+#define timeval_to_ns timespec64_to_ns -+#define timeval timespec64 -+#endif -+ -+#elif KERNEL_VERSION(5, 0, 0) <= LINUX_VERSION_CODE -+#define timeval timespec -+#define do_gettimeofday getnstimeofday -+#define timeval_to_ns timespec_to_ns -+ -+#endif -+#endif//__WCN_WRAPPER_H__ -\ No newline at end of file -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -old mode 100644 -new mode 100755 -index 7cb79f2f2d0..0473748a2a5 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -@@ -117,6 +117,7 @@ void mdbg_ring_destroy(struct mdbg_ring_t *ring) - } - MDBG_LOG("to free ring."); - kfree(ring); -+ ring = NULL; - } - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -old mode 100644 -new mode 100755 -index 9ce23ada563..26824b505ba ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -@@ -24,8 +24,6 @@ - #define FIRMWARE_PATH "/bin/wcnmodem.bin" - #define FIRMWARE_SIZE_MAX 0xf0c00 - --MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); -- - static char *load_firmware_data(int size) - { - int read_len; - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c -new file mode 100755 -index 00000000000..6454d62766d ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c -@@ -0,0 +1,1444 @@ -+#include -+#include -+ -+static unsigned char wcn_bind_verify_bc[] = { -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0xbd, 0x7b, 0x5c, 0x54, 0xe5, -+ 0xf6, 0x30, 0xfe, 0xec, 0xb9, 0xcf, 0x30, 0x0c, 0xc3, 0x7d, 0x80, 0x01, 0xf7, 0x28, 0x37, 0x15, -+ 0x61, 0xb8, 0x88, 0xa0, 0xa0, 0x33, 0x0c, 0x1a, 0x21, 0xda, 0x64, 0x96, 0x68, 0xa6, 0x33, 0xdc, -+ 0x04, 0xe5, 0x32, 0xdc, 0x04, 0xed, 0x36, 0x37, 0x04, 0x15, 0x3b, 0x63, 0x91, 0x51, 0x59, 0x67, -+ 0x30, 0x2a, 0x3b, 0x59, 0x8d, 0x49, 0x45, 0x27, 0xea, 0xcc, 0x00, 0x12, 0x29, 0xd6, 0xe8, 0xa1, -+ 0x22, 0x8f, 0x75, 0x06, 0x6f, 0x51, 0xc7, 0x0c, 0xcd, 0xca, 0xce, 0xf1, 0xe4, 0x6f, 0x3d, 0x7b, -+ 0x2e, 0x80, 0x97, 0xce, 0xf9, 0xe3, 0x7d, 0xdf, 0xef, 0xef, 0xfd, 0xbc, 0xcd, 0x47, 0x66, 0xf6, -+ 0x7e, 0xf6, 0x7a, 0xd6, 0xed, 0x59, 0xcf, 0x7a, 0xd6, 0xb3, 0xf6, 0xda, 0xdb, 0x86, 0xc2, 0xca, -+ 0xf5, 0x05, 0x65, 0x95, 0x45, 0xeb, 0x37, 0x17, 0xd7, 0x94, 0x95, 0x6c, 0x89, 0xaf, 0x42, 0xff, -+ 0xeb, 0x3f, 0x52, 0xf8, 0xa4, 0xa6, 0xa6, 0xe0, 0xdf, 0xc4, 0x79, 0x73, 0x13, 0x5d, 0xbf, 0xc9, -+ 0x54, 0x3b, 0x5c, 0x49, 0x99, 0x37, 0x4f, 0x8a, 0x12, 0x93, 0xa1, 0x25, 0x31, 0x55, 0x9a, 0x9a, -+ 0x38, 0x17, 0x49, 0x13, 0xe7, 0x26, 0x27, 0x25, 0x21, 0x52, 0xfa, 0xbf, 0x81, 0x97, 0x9b, 0x3e, -+ 0xf5, 0xb5, 0x75, 0xea, 0x1a, 0x92, 0x44, 0x5b, 0x4b, 0xd5, 0x55, 0x5b, 0xaa, 0xea, 0xb7, 0x94, -+ 0xdd, 0x06, 0xee, 0x3f, 0x5d, 0xff, 0xbf, 0xf4, 0x93, 0xa5, 0xb0, 0x7e, 0x35, 0x37, 0x00, 0x21, -+ 0x26, 0x1c, 0x17, 0xf0, 0xa5, 0x91, 0xcb, 0x56, 0x7f, 0x50, 0xf2, 0xc0, 0xbf, 0xba, 0xaa, 0xc2, -+ 0x06, 0x23, 0xb3, 0x89, 0x24, 0x26, 0x92, 0xf0, 0x11, 0xfa, 0x63, 0x30, 0x42, 0x5e, 0x34, 0x09, -+ 0xa2, 0x01, 0x4c, 0x10, 0xfc, 0xb1, 0x75, 0x33, 0x76, 0xcb, 0x07, 0x19, 0x77, 0xb2, 0x84, 0x49, -+ 0xe9, 0x8f, 0x13, 0x46, 0x7e, 0x14, 0x93, 0x13, 0x12, 0xc1, 0xd8, 0x59, 0xa0, 0x15, 0x2d, 0xa6, -+ 0x65, 0x3d, 0xee, 0x95, 0xd5, 0x2f, 0x4c, 0x0a, 0x48, 0xe3, 0x88, 0x96, 0xf2, 0x92, 0x0a, 0x5a, -+ 0x72, 0x34, 0xfd, 0x92, 0x19, 0xd9, 0x7e, 0xcd, 0xad, 0x42, 0xf9, 0xe3, 0xb4, 0xa2, 0x41, 0xce, -+ 0xc1, 0x00, 0x52, 0xb1, 0xa4, 0x85, 0xfc, 0x88, 0x48, 0x2a, 0x30, 0x8a, 0x66, 0xc5, 0xce, 0x32, -+ 0x25, 0x3e, 0x64, 0x59, 0xbb, 0x9b, 0x1c, 0x18, 0x04, 0xbc, 0xdb, 0x49, 0x84, 0xa2, 0xe1, 0x37, -+ 0x69, 0x7a, 0x0b, 0x97, 0x2c, 0x6a, 0x62, 0xf8, 0xcf, 0xe8, 0x34, 0xc2, 0xd7, 0x19, 0x63, 0x87, -+ 0x29, 0xc0, 0x2f, 0xaf, 0xb5, 0xd5, 0xcb, 0xd8, 0x9f, 0x27, 0xec, 0xb2, 0x89, 0x09, 0x51, 0xa4, -+ 0x50, 0x06, 0x3f, 0x59, 0x0a, 0x96, 0x70, 0x65, 0x1b, 0x41, 0x72, 0xe6, 0x2f, 0x41, 0x2c, 0x1a, -+ 0x6f, 0x77, 0xec, 0x8e, 0xac, 0xa3, 0x62, 0x22, 0xb6, 0x4d, 0x52, 0xc6, 0xa9, 0x39, 0xcf, 0xd1, -+ 0xaf, 0x88, 0xec, 0xb7, 0xcb, 0x02, 0x02, 0x09, 0xb2, 0x74, 0x96, 0x22, 0x4b, 0xb8, 0x32, 0xca, -+ 0x6e, 0xe2, 0x58, 0x17, 0x9f, 0x08, 0xb8, 0xbb, 0xf7, 0xec, 0x52, 0xb6, 0xea, 0xeb, 0x7f, 0x26, -+ 0xe4, 0x05, 0x4f, 0x8f, 0x37, 0xdb, 0x62, 0x67, 0x2b, 0xf6, 0xf9, 0x76, 0x3d, 0x49, 0x76, 0xbc, -+ 0x2e, 0xbc, 0x53, 0x21, 0xbc, 0x12, 0x48, 0x23, 0x5b, 0xb6, 0xf5, 0x32, 0x42, 0x4a, 0xf3, 0x5a, -+ 0x74, 0xb9, 0xb4, 0x97, 0xd0, 0x79, 0x8e, 0x74, 0xe3, 0xe3, 0x45, 0xe6, 0x40, 0xac, 0xab, 0xbb, -+ 0x45, 0x08, 0x35, 0x10, 0x08, 0x85, 0x15, 0xc4, 0x5c, 0xbd, 0x0e, 0x1f, 0xc2, 0x84, 0x32, 0x51, -+ 0x5a, 0x81, 0xf8, 0x2b, 0x79, 0xc4, 0xd9, 0x0e, 0xf1, 0x80, 0x2e, 0x62, 0x44, 0x32, 0xed, 0xa4, -+ 0x2c, 0xe2, 0xab, 0x8e, 0x88, 0x53, 0x3a, 0xf1, 0x11, 0x9d, 0xf8, 0xa4, 0x56, 0x7c, 0xc2, 0x16, -+ 0x71, 0x02, 0x8e, 0x3b, 0xbc, 0xcf, 0x4b, 0x22, 0xce, 0xea, 0x22, 0x4e, 0x5a, 0xc5, 0x8e, 0x0e, -+ 0xef, 0x93, 0x12, 0xf1, 0x18, 0x11, 0x8e, 0x6a, 0x39, 0xec, 0xcd, 0xed, 0xcd, 0x35, 0x88, 0x53, -+ 0x93, 0xd3, 0xbc, 0x85, 0xc3, 0xae, 0x56, 0x35, 0xd7, 0x94, 0xd2, 0xb7, 0x72, 0x9a, 0xeb, 0x54, -+ 0xcd, 0xa9, 0xa2, 0x66, 0x8d, 0x0a, 0xae, 0xb2, 0xb5, 0x80, 0x39, 0xe2, 0x08, 0x41, 0x0e, 0xc9, -+ 0x23, 0x7a, 0x3b, 0xc2, 0x01, 0x8f, 0x63, 0x34, 0xfc, 0x84, 0x2d, 0x7c, 0xac, 0x43, 0x7c, 0x96, -+ 0xd0, 0x34, 0x37, 0x68, 0x9a, 0x53, 0xa1, 0x17, 0x87, 0x5d, 0x8b, 0x38, 0x9b, 0x63, 0x9b, 0xb7, -+ 0xb4, 0x37, 0xa7, 0x6a, 0xd9, 0x5b, 0x62, 0x9b, 0xab, 0x01, 0x61, 0x6c, 0x73, 0xaa, 0x94, 0xdd, -+ 0x58, 0xda, 0xac, 0x21, 0xd9, 0x56, 0x71, 0xaf, 0x2e, 0xfc, 0x7c, 0x87, 0x18, 0xed, 0xc3, 0x7d, -+ 0x4f, 0x6a, 0xc3, 0x8f, 0x8c, 0xe2, 0x96, 0x93, 0xd6, 0x88, 0x23, 0x6a, 0xf1, 0xd8, 0x68, 0xf8, -+ 0xd9, 0x0e, 0xef, 0x8b, 0x92, 0xf0, 0x41, 0x5d, 0x84, 0x9d, 0xd0, 0xd2, 0xb5, 0x80, 0xb6, 0xd4, -+ 0x50, 0xa7, 0x61, 0xd7, 0xb6, 0x3b, 0x31, 0x18, 0x36, 0x73, 0xd8, 0x5b, 0x65, 0x13, 0x48, 0x7a, -+ 0xc3, 0xbf, 0xea, 0xf0, 0x1e, 0xee, 0x88, 0x38, 0x49, 0x44, 0x9c, 0xd4, 0x46, 0xf4, 0xca, 0xc5, -+ 0x23, 0x1d, 0xe2, 0xf3, 0x84, 0x14, 0x18, 0x06, 0xa2, 0x6c, 0xaa, 0x3b, 0xbd, 0x81, 0xc3, 0x6e, -+ 0xf8, 0xad, 0xee, 0xe7, 0x25, 0xe1, 0x1f, 0xdb, 0xc2, 0xb1, 0x8a, 0x64, 0xd3, 0x8e, 0xc8, 0x23, -+ 0xbe, 0x52, 0xdf, 0x46, 0x33, 0x0d, 0x8d, 0xcd, 0xa9, 0x66, 0x36, 0x28, 0xa7, 0x51, 0xdb, 0x5c, -+ 0xa7, 0x69, 0xae, 0xbd, 0x05, 0xb6, 0x6f, 0x75, 0xe1, 0x23, 0x93, 0xd5, 0xd2, 0xe1, 0x7d, 0x02, -+ 0x63, 0x8b, 0x00, 0x00, 0xd0, 0x3c, 0xda, 0x6a, 0x6a, 0xde, 0x0a, 0x5c, 0xb5, 0xb3, 0x41, 0xb1, -+ 0xd5, 0xf9, 0x94, 0x7e, 0x1a, 0xd9, 0x5b, 0x41, 0x45, 0xe6, 0xe6, 0x06, 0x53, 0x73, 0xaa, 0xb0, -+ 0x79, 0xab, 0x94, 0x5d, 0x1b, 0xcb, 0xde, 0x52, 0x6a, 0xd8, 0x92, 0xc3, 0x7e, 0x38, 0x96, 0x8d, -+ 0x7c, 0x90, 0x1e, 0x84, 0x8a, 0xf8, 0xb8, 0x43, 0x3c, 0xd6, 0xe1, 0x3d, 0x40, 0x44, 0x7c, 0x4b, -+ 0xa4, 0x35, 0xd7, 0x68, 0x9a, 0x6b, 0x4c, 0xcd, 0x75, 0x22, 0xb6, 0xd6, 0xdc, 0xac, 0x31, 0x35, -+ 0x03, 0xfc, 0xd6, 0x52, 0x7a, 0x6d, 0x6c, 0xb3, 0xc6, 0xdc, 0x0c, 0xf8, 0x6b, 0xda, 0xd9, 0x2a, -+ 0x6f, 0x30, 0x00, 0xe0, 0xe7, 0xac, 0x2d, 0x02, 0xc6, 0x68, 0x5c, 0x22, 0x18, 0xd7, 0x7a, 0x9f, -+ 0x24, 0xc5, 0x47, 0xd4, 0x11, 0x23, 0x66, 0xef, 0x01, 0x79, 0xc4, 0x65, 0x22, 0x02, 0xf4, 0x0c, -+ 0xc7, 0x43, 0xa0, 0x34, 0x12, 0x98, 0x0c, 0xbf, 0x40, 0xf8, 0xc0, 0xe9, 0xa9, 0x0e, 0xf1, 0x57, -+ 0x36, 0xdc, 0x7e, 0x9e, 0x08, 0xef, 0x95, 0x0b, 0xd0, 0xbe, 0x88, 0x53, 0xea, 0x88, 0x5e, 0x1b, -+ 0x36, 0x18, 0x0c, 0x69, 0x0e, 0xef, 0xc5, 0x83, 0xe2, 0xd1, 0xed, 0x7e, 0x6a, 0x58, 0xdb, 0x9b, -+ 0x1b, 0xa4, 0x14, 0x03, 0xaa, 0x66, 0xd0, 0xf3, 0x56, 0x34, 0x24, 0x11, 0x8f, 0xa8, 0xc1, 0x48, -+ 0x46, 0x54, 0x1c, 0xc2, 0x82, 0x3e, 0x65, 0x15, 0x08, 0xb5, 0xc5, 0x86, 0xac, 0x6b, 0xd8, 0x42, -+ 0x51, 0x0e, 0x62, 0x0e, 0x13, 0x76, 0x76, 0x98, 0xe9, 0x34, 0x3e, 0x65, 0x9b, 0xbd, 0x11, 0x77, -+ 0xcc, 0xe0, 0x6d, 0xf4, 0x45, 0x0f, 0x59, 0xe4, 0xe9, 0xbf, 0x42, 0xd3, 0xa3, 0xe8, 0x24, 0x32, -+ 0x69, 0x17, 0xa2, 0x31, 0x95, 0x41, 0xc7, 0xb0, 0xd2, 0xec, 0x36, 0xd6, 0x74, 0x09, 0x5a, 0x38, -+ 0x62, 0x49, 0x3e, 0x82, 0x3b, 0xf8, 0xf4, 0xa7, 0xf5, 0x18, 0x32, 0x06, 0x15, 0xe9, 0xad, 0xf4, -+ 0x4c, 0x8b, 0x62, 0x61, 0x97, 0x2e, 0xa3, 0x47, 0x91, 0xd9, 0x4d, 0x4f, 0x6f, 0xa3, 0xa7, 0x77, -+ 0x11, 0xe9, 0x9d, 0x86, 0xcc, 0x4e, 0x38, 0x56, 0x84, 0x0d, 0x29, 0x32, 0x06, 0xe9, 0x99, 0x5d, -+ 0xba, 0x74, 0xab, 0x22, 0xac, 0x4b, 0x91, 0x66, 0xa7, 0xcf, 0x47, 0xe7, 0x85, 0x82, 0x0b, 0x52, -+ 0x9f, 0x73, 0x48, 0x78, 0xd6, 0x24, 0xf8, 0x41, 0x28, 0x38, 0x6d, 0x15, 0x9c, 0xb3, 0xb3, 0xae, -+ 0x08, 0x05, 0xdf, 0x58, 0x05, 0x15, 0x52, 0xc1, 0xa8, 0x15, 0x5f, 0x45, 0x99, 0x83, 0x8a, 0xcc, -+ 0x36, 0xba, 0xac, 0xdd, 0x90, 0x61, 0x54, 0x2c, 0x00, 0x3c, 0xd6, 0xbe, 0x05, 0x9d, 0x86, 0x05, -+ 0x76, 0x45, 0xfa, 0x20, 0xdd, 0x21, 0xf8, 0xde, 0x21, 0xa8, 0x80, 0x5e, 0x42, 0xc1, 0x79, 0x24, -+ 0xbc, 0xa0, 0x14, 0xfc, 0x20, 0xf5, 0xa9, 0x40, 0x3e, 0x97, 0x95, 0x82, 0x33, 0x80, 0x50, 0x29, -+ 0xa8, 0x50, 0x09, 0xc6, 0xed, 0x82, 0x51, 0x99, 0x40, 0x9b, 0x6e, 0xa4, 0x2f, 0x18, 0x52, 0xa4, -+ 0x23, 0xe3, 0x82, 0x1e, 0x45, 0x18, 0x74, 0x6f, 0xef, 0xcb, 0xb8, 0x35, 0x27, 0x17, 0xc7, 0x05, -+ 0x15, 0x0e, 0xc1, 0xa8, 0x43, 0xf0, 0x83, 0x9d, 0x75, 0x1e, 0xf9, 0x54, 0xe0, 0xee, 0x3e, 0x63, -+ 0xa8, 0x5d, 0x91, 0x66, 0xe9, 0xcb, 0x00, 0x36, 0xba, 0xfb, 0x16, 0x74, 0xd9, 0x32, 0x3a, 0xfb, -+ 0xd2, 0xbb, 0x15, 0xe9, 0x26, 0x45, 0xd8, 0x18, 0xb0, 0xd1, 0x07, 0x98, 0xc3, 0xda, 0xe9, 0x19, -+ 0x5d, 0xf2, 0x05, 0x46, 0x7a, 0xa6, 0x99, 0xae, 0xc2, 0x9c, 0x03, 0x75, 0x34, 0x2a, 0xf8, 0x1e, -+ 0xc4, 0x21, 0x7d, 0x46, 0x91, 0xcf, 0xb8, 0x49, 0x70, 0x51, 0x23, 0xb8, 0x19, 0x9b, 0x22, 0xd3, -+ 0x42, 0x5f, 0xd0, 0x45, 0x80, 0xc6, 0xe6, 0x77, 0xd3, 0x33, 0xdb, 0x0c, 0x80, 0x64, 0x3e, 0x60, -+ 0x1b, 0x01, 0x00, 0xc5, 0x7c, 0x13, 0x5d, 0x06, 0xb2, 0x60, 0xae, 0x7e, 0x90, 0xf9, 0x8c, 0x4a, -+ 0x05, 0xff, 0xb0, 0xb3, 0xc6, 0x49, 0x9f, 0xef, 0x65, 0x3e, 0xe7, 0xa4, 0x82, 0x2b, 0xe3, 0x82, -+ 0xcb, 0x76, 0xd6, 0x69, 0xa5, 0xcf, 0x79, 0x95, 0xe0, 0x1c, 0xe9, 0x53, 0x21, 0xf5, 0xf9, 0xc6, -+ 0x0c, 0x90, 0x0e, 0x42, 0x66, 0x57, 0xa4, 0x0d, 0xf6, 0x81, 0xf2, 0x33, 0xbb, 0x6c, 0x69, 0x56, -+ 0x45, 0x26, 0xfa, 0x5a, 0x29, 0xb8, 0xa8, 0x14, 0x5c, 0x36, 0x09, 0xce, 0x20, 0x21, 0xe8, 0xf6, -+ 0xb2, 0x46, 0x70, 0x4e, 0xe6, 0x03, 0x9a, 0x01, 0xa5, 0x5d, 0x51, 0x62, 0x5d, 0xfd, 0x80, 0x0e, -+ 0xe8, 0x32, 0xda, 0x80, 0x1f, 0x43, 0xc6, 0x88, 0x02, 0x86, 0x6c, 0x61, 0x3f, 0x11, 0x61, 0x91, -+ 0x87, 0x19, 0x15, 0xe9, 0x43, 0xf4, 0x30, 0x40, 0x32, 0xa8, 0x58, 0x68, 0xa5, 0x67, 0xf6, 0xc0, -+ 0x31, 0xa5, 0x31, 0x23, 0x30, 0x69, 0xc8, 0x74, 0x10, 0x70, 0xba, 0xa0, 0xad, 0x6f, 0x41, 0x37, -+ 0x86, 0xc9, 0x30, 0x03, 0x51, 0x42, 0x36, 0x6c, 0x00, 0x55, 0xa4, 0xb5, 0x03, 0x92, 0x5b, 0xea, -+ 0xf6, 0x47, 0xf8, 0xb6, 0xb3, 0x7e, 0x18, 0x17, 0x9c, 0xa7, 0x18, 0xb8, 0x30, 0x8e, 0xb5, 0xe1, -+ 0x19, 0x9a, 0xb0, 0x96, 0x28, 0xb4, 0xc7, 0x9b, 0x35, 0x03, 0x79, 0x29, 0x2b, 0x64, 0xcf, 0x60, -+ 0xc3, 0x9a, 0x86, 0x92, 0xd0, 0x74, 0xd9, 0x49, 0x6d, 0x1a, 0x3e, 0x59, 0x84, 0x1e, 0x41, 0x39, -+ 0xb2, 0xb7, 0x74, 0x8d, 0x4e, 0x83, 0xec, 0xf4, 0x66, 0x44, 0xa2, 0x0d, 0x16, 0xf9, 0x76, 0x9a, -+ 0x83, 0xaf, 0x27, 0x39, 0x27, 0xd0, 0x49, 0x6d, 0x8e, 0x5c, 0xc8, 0x90, 0x87, 0xca, 0xc2, 0x5a, -+ 0x66, 0xa2, 0x8f, 0x55, 0x0a, 0x39, 0x13, 0x1f, 0x3f, 0x96, 0x8b, 0x3e, 0x26, 0x73, 0xe8, 0xa5, -+ 0x86, 0x02, 0xa6, 0x35, 0x84, 0x41, 0xf8, 0x75, 0x12, 0xa2, 0x72, 0xe5, 0xeb, 0x28, 0xcd, 0x40, -+ 0xca, 0xf4, 0x29, 0xa4, 0xc1, 0x9b, 0x17, 0x84, 0x36, 0x08, 0x19, 0x39, 0x26, 0xd6, 0xb8, 0xa5, -+ 0x63, 0x10, 0xf0, 0xa4, 0xc6, 0xae, 0x41, 0x7b, 0xe5, 0x42, 0x52, 0x1e, 0xea, 0xb0, 0xb1, 0x8a, -+ 0xbd, 0xb4, 0xc9, 0x1c, 0xda, 0xf4, 0x1c, 0xba, 0xf0, 0x0b, 0x95, 0xc6, 0xc9, 0x83, 0x2f, 0x09, -+ 0xae, 0x1d, 0xdd, 0x09, 0x3e, 0x1e, 0x96, 0x3b, 0xe4, 0xbf, 0x4d, 0x26, 0x8a, 0x66, 0xf4, 0x1b, -+ 0x3b, 0xa4, 0xdb, 0xb8, 0x7d, 0xba, 0x48, 0x7f, 0x5a, 0xb1, 0x5e, 0xc8, 0xf1, 0xdf, 0xa6, 0x52, -+ 0x47, 0x33, 0x6c, 0x46, 0xf3, 0xd3, 0xd2, 0xb4, 0xa3, 0x52, 0x79, 0xa3, 0x99, 0x2b, 0x4f, 0x91, -+ 0x37, 0x76, 0x72, 0x7b, 0x93, 0x97, 0x71, 0x9e, 0xe7, 0xf6, 0xfa, 0x2f, 0x13, 0x3d, 0xcf, 0x7d, -+ 0x46, 0x9a, 0xb1, 0x72, 0xae, 0xbc, 0xf1, 0x00, 0xd7, 0x96, 0x22, 0xb1, 0x44, 0x33, 0x3e, 0x37, -+ 0xa2, 0x67, 0x84, 0x2a, 0x7f, 0x63, 0xcc, 0xb3, 0x64, 0xc6, 0x49, 0xa3, 0xea, 0x59, 0xa1, 0x06, -+ 0x70, 0xbf, 0xa9, 0xe1, 0xb0, 0xb7, 0x88, 0xd8, 0x75, 0x16, 0xfa, 0xfc, 0x52, 0xc3, 0x56, 0x4d, -+ 0x73, 0x3d, 0x38, 0xcd, 0x6e, 0x36, 0xf8, 0xcd, 0xcd, 0x39, 0xec, 0x86, 0xfd, 0xec, 0x87, 0x4a, -+ 0x0d, 0xb5, 0x9a, 0xe6, 0xad, 0x23, 0x52, 0x36, 0xe8, 0xf4, 0x3b, 0x33, 0xfe, 0xfe, 0x46, 0xcb, -+ 0xde, 0x0a, 0xff, 0xa4, 0xec, 0x1a, 0x38, 0x16, 0xb2, 0x37, 0x9b, 0x61, 0xb9, 0x70, 0x9f, 0xaa, -+ 0xd8, 0x75, 0x66, 0xf6, 0x66, 0x19, 0xbb, 0xc2, 0x24, 0xa8, 0x26, 0xd9, 0x8d, 0x70, 0x09, 0xbe, -+ 0xed, 0xac, 0x8b, 0x70, 0xd5, 0xd9, 0x2e, 0xf5, 0xc2, 0x2d, 0x96, 0x7d, 0x6a, 0xf6, 0x66, 0x4b, -+ 0xf3, 0x66, 0x8d, 0x61, 0x33, 0xf8, 0x2f, 0x0e, 0x1b, 0x96, 0x0d, 0xf8, 0x7e, 0x91, 0x6d, 0xe4, -+ 0x7c, 0x04, 0x4b, 0xf2, 0x0e, 0x0e, 0x37, 0x54, 0x92, 0xb7, 0xfc, 0x97, 0xd1, 0xa6, 0x47, 0xde, -+ 0x39, 0x9a, 0x90, 0x39, 0xff, 0xda, 0xc7, 0x7f, 0xf9, 0xc7, 0x2f, 0x57, 0xfe, 0xf1, 0xeb, 0x9e, -+ 0x37, 0xbe, 0x1e, 0x1f, 0xef, 0xbe, 0xc6, 0x7b, 0xef, 0xa3, 0xcb, 0x0d, 0xcf, 0xc4, 0x3d, 0x7a, -+ 0xf0, 0xef, 0x17, 0x6b, 0x47, 0xfe, 0xbd, 0xe6, 0xa9, 0x73, 0x17, 0x93, 0xfe, 0x75, 0x78, 0xf9, -+ 0x7b, 0xff, 0xb8, 0x7a, 0xdf, 0xb1, 0xc5, 0x0f, 0xee, 0x3e, 0x57, 0xf6, 0xe0, 0xea, 0x85, 0x8f, -+ 0xbe, 0x7b, 0xf4, 0xca, 0xe7, 0x99, 0x73, 0x12, 0x0e, 0x1d, 0xfd, 0xe1, 0x97, 0x57, 0x1f, 0x49, -+ 0xf8, 0xbc, 0x3c, 0xe9, 0x8b, 0x57, 0x2f, 0x2e, 0xff, 0xe4, 0xef, 0x67, 0xfe, 0x35, 0xf2, 0x6f, -+ 0xfd, 0xa1, 0xbe, 0xba, 0x1f, 0xee, 0xff, 0xea, 0x91, 0x2f, 0x3f, 0xbc, 0xf8, 0x46, 0xda, 0x77, -+ 0xd1, 0x8f, 0x7e, 0x57, 0xbc, 0xe5, 0xe4, 0xde, 0x86, 0x5d, 0x0d, 0x39, 0x32, 0x21, 0x5f, 0x23, -+ 0x85, 0x10, 0x83, 0x01, 0x2a, 0x97, 0x23, 0x29, 0xd9, 0xa1, 0x17, 0x73, 0x04, 0xaf, 0xb4, 0x25, -+ 0xa5, 0x21, 0xc4, 0x41, 0xce, 0x66, 0x12, 0xd1, 0x54, 0x39, 0x3f, 0xb2, 0xec, 0x34, 0x86, 0xd6, -+ 0x13, 0xb5, 0x08, 0x91, 0xe2, 0x4f, 0x8b, 0xac, 0x62, 0x12, 0xb1, 0xdc, 0x2d, 0x5a, 0x24, 0x5a, -+ 0xf1, 0x25, 0x2d, 0x90, 0x20, 0x64, 0x1e, 0x20, 0x86, 0xd5, 0xb4, 0x31, 0x7c, 0x3f, 0x97, 0xf3, -+ 0x18, 0xc4, 0x2d, 0x54, 0x2b, 0x8d, 0x44, 0xdb, 0x56, 0x5e, 0x77, 0xac, 0xe4, 0x48, 0x31, 0x5e, -+ 0x82, 0xc2, 0x43, 0x48, 0x3b, 0x37, 0x72, 0x8f, 0x12, 0x34, 0x95, 0xa7, 0x1b, 0x47, 0x2b, 0xf9, -+ 0x34, 0x3f, 0x2e, 0x90, 0xc6, 0x67, 0xb9, 0xba, 0x31, 0x64, 0x88, 0xff, 0xca, 0x29, 0xda, 0x49, -+ 0xa1, 0x2a, 0x0d, 0x23, 0x71, 0xb3, 0x74, 0x2e, 0x58, 0xc9, 0x44, 0xbe, 0x34, 0x0a, 0x0f, 0x60, -+ 0x03, 0x96, 0x66, 0x7d, 0x9e, 0x33, 0x9f, 0x44, 0x7e, 0x53, 0x58, 0x1a, 0xb8, 0x4c, 0x50, 0x52, -+ 0x60, 0x69, 0x64, 0x98, 0xa5, 0xdc, 0x8c, 0xbd, 0x4c, 0x8e, 0xab, 0x13, 0x85, 0x6a, 0xdb, 0xca, -+ 0x71, 0xb9, 0x11, 0xba, 0xf3, 0x70, 0x0f, 0x44, 0x81, 0xe5, 0x94, 0x0b, 0x63, 0xf7, 0x6e, 0x21, -+ 0x90, 0x89, 0x49, 0xc3, 0xf1, 0x78, 0x52, 0x44, 0xbb, 0x28, 0xc4, 0x37, 0xcf, 0xd4, 0xca, 0x8d, -+ 0xbe, 0x63, 0x80, 0xa1, 0xa0, 0x1d, 0xe9, 0x10, 0xee, 0x30, 0xf3, 0x73, 0x55, 0x0c, 0x15, 0x4b, -+ 0xbb, 0x2d, 0x44, 0xeb, 0x8b, 0x36, 0xf2, 0xa4, 0x66, 0x21, 0xaf, 0x88, 0x61, 0x3e, 0xbd, 0xa1, -+ 0x4a, 0xf2, 0xe9, 0x17, 0x6f, 0x79, 0x7f, 0x42, 0xe7, 0xed, 0x37, 0xf1, 0x5e, 0x60, 0x60, 0xb0, -+ 0x0e, 0xd1, 0x91, 0x0e, 0x32, 0x77, 0x5f, 0xec, 0x91, 0x7d, 0x07, 0xd2, 0xb7, 0xbc, 0x7c, 0x3d, -+ 0xdc, 0x3f, 0x26, 0x2a, 0xf7, 0xad, 0x2f, 0xa4, 0x96, 0xb7, 0xe6, 0xce, 0x5d, 0x9b, 0x69, 0xde, -+ 0x4b, 0x57, 0x7f, 0x78, 0xe9, 0xcc, 0xb3, 0x51, 0x77, 0xc5, 0x86, 0x13, 0x66, 0x55, 0x9c, 0xd2, -+ 0xfa, 0xcb, 0x93, 0x4b, 0xfa, 0xc8, 0xe8, 0xc2, 0x86, 0x01, 0xc3, 0xe7, 0x3f, 0x2b, 0xd6, 0x05, -+ 0x1f, 0xf9, 0x6a, 0x5d, 0xc3, 0xd6, 0x91, 0xe2, 0xee, 0xd7, 0xde, 0xbd, 0x1a, 0x75, 0xf8, 0x8f, -+ 0xde, 0x83, 0xa1, 0xd7, 0x3e, 0x5c, 0xb9, 0xff, 0xbb, 0xb0, 0x3f, 0x6c, 0x22, 0x5e, 0xfe, 0x34, -+ 0xb8, 0xa8, 0x59, 0xf8, 0xce, 0xb2, 0x94, 0x4b, 0x7f, 0xd3, 0x88, 0x5f, 0x3c, 0xfe, 0xef, 0xea, -+ 0x7c, 0xef, 0xb1, 0x1f, 0xcf, 0x7f, 0x9e, 0x31, 0xbe, 0xfe, 0xed, 0x2a, 0xf9, 0xe8, 0x01, 0x45, -+ 0x4f, 0x15, 0x73, 0xeb, 0xb9, 0xef, 0xc5, 0xe2, 0xac, 0x55, 0xef, 0xdc, 0xb3, 0x45, 0xfa, 0x4b, -+ 0xfb, 0xdf, 0xbf, 0xb7, 0xd5, 0x7d, 0xb2, 0x7b, 0x51, 0x7e, 0xf0, 0x31, 0xf9, 0x37, 0xe1, 0xab, -+ 0xbe, 0x78, 0x67, 0x38, 0x29, 0xef, 0x93, 0x24, 0xc7, 0x03, 0x73, 0xd7, 0x7e, 0x29, 0x9b, 0x77, -+ 0xf8, 0x97, 0x2f, 0xe9, 0xab, 0x5f, 0xfc, 0x65, 0x77, 0xe0, 0xc9, 0xf4, 0x88, 0x3b, 0xd6, 0xc8, -+ 0xfe, 0x3d, 0xcc, 0xa8, 0x1e, 0xbd, 0xf2, 0xe8, 0xbb, 0xbf, 0x36, 0xfd, 0x12, 0x2c, 0x6f, 0x10, -+ 0x2f, 0x7f, 0xf2, 0xa1, 0xfa, 0xfa, 0x96, 0xfa, 0xbd, 0x25, 0xcd, 0xb5, 0xf7, 0x16, 0xdf, 0x3d, -+ 0xb3, 0xec, 0xf8, 0x97, 0x31, 0x19, 0x8b, 0xbf, 0x1b, 0x3f, 0xfd, 0xf7, 0xf0, 0xa7, 0x8e, 0xa9, -+ 0x96, 0xdc, 0xd1, 0xb8, 0x9c, 0xbe, 0xe6, 0xeb, 0xb2, 0x7c, 0xc1, 0x4f, 0x6b, 0x3a, 0x8f, 0x65, -+ 0x6a, 0xee, 0x79, 0xf7, 0xac, 0xbc, 0x23, 0x72, 0xd5, 0xe5, 0xbc, 0x26, 0xcb, 0xf0, 0xf5, 0xb9, -+ 0x41, 0xf7, 0xa5, 0xbf, 0xac, 0x58, 0xa3, 0x6d, 0xb8, 0x14, 0xdd, 0xa7, 0x2e, 0x2f, 0x3b, 0x15, -+ 0xd1, 0x2c, 0x1e, 0x3e, 0x2a, 0x0e, 0x1f, 0x4c, 0x6b, 0xfb, 0x6b, 0x7d, 0xec, 0x17, 0x7b, 0xd8, -+ 0x3f, 0x12, 0x11, 0xc7, 0x4f, 0x66, 0x97, 0x07, 0x2c, 0xaf, 0x67, 0x31, 0x1b, 0x1a, 0x1e, 0xca, -+ 0x7f, 0xbf, 0xf9, 0x9b, 0x57, 0xe2, 0xff, 0xae, 0xf9, 0xf4, 0x7c, 0x4d, 0x7f, 0xe1, 0xf2, 0x27, -+ 0x3f, 0xed, 0xce, 0x34, 0xac, 0xda, 0xf3, 0x43, 0x8f, 0xf7, 0xf9, 0x47, 0xbf, 0x5e, 0x3c, 0x5f, -+ 0x53, 0x35, 0x7e, 0xc7, 0x8f, 0x8e, 0x2f, 0xab, 0xef, 0x3d, 0x47, 0x0f, 0xbd, 0xa2, 0xbe, 0x2f, -+ 0x40, 0x29, 0xaa, 0x5b, 0x7d, 0x8f, 0xfd, 0xfa, 0x5f, 0xd6, 0xdf, 0xad, 0xce, 0x6c, 0xb0, 0xb4, -+ 0x35, 0xfd, 0xeb, 0x8e, 0xaf, 0x7f, 0x0e, 0x3e, 0xfb, 0xd7, 0xe0, 0x4f, 0xaa, 0xc9, 0xde, 0xcf, -+ 0xd6, 0x98, 0x69, 0x74, 0x11, 0x1e, 0xcc, 0x83, 0xf0, 0xdd, 0x0e, 0xbf, 0xc9, 0x1c, 0xad, 0xb8, -+ 0x7f, 0x54, 0x5c, 0x12, 0x40, 0x64, 0xb6, 0x28, 0xd2, 0x8c, 0x7d, 0xad, 0x59, 0x54, 0x24, 0x52, -+ 0xdb, 0x5e, 0xcd, 0x87, 0xb5, 0xe8, 0x3b, 0x70, 0xd8, 0x5a, 0x41, 0x32, 0x3f, 0x0b, 0x16, 0xff, -+ 0x70, 0x08, 0x3d, 0x4a, 0xa4, 0x4c, 0x0a, 0xcc, 0x10, 0x36, 0x44, 0xc7, 0x8b, 0x24, 0x2c, 0xbf, -+ 0x43, 0x8d, 0xad, 0x10, 0x94, 0x3d, 0x08, 0x8e, 0x23, 0xa7, 0x59, 0xa3, 0x61, 0x6f, 0xd5, 0xd0, -+ 0x37, 0x37, 0x42, 0x70, 0xd7, 0x1c, 0x32, 0xe4, 0x2b, 0xb8, 0x60, 0x12, 0x8c, 0x4a, 0x7d, 0x2a, -+ 0xa5, 0x3e, 0x67, 0xc6, 0x05, 0xe3, 0x4a, 0x41, 0xb2, 0xb0, 0x3f, 0xfc, 0x2b, 0x08, 0x0a, 0x24, -+ 0xe1, 0xbd, 0xea, 0x88, 0x12, 0xe9, 0xf6, 0x05, 0x3d, 0xd4, 0xa2, 0xda, 0x45, 0xcf, 0x80, 0xc5, -+ 0x1c, 0xbb, 0xe4, 0xf1, 0x80, 0xcd, 0x2a, 0xf6, 0x83, 0xa5, 0xec, 0x79, 0xa5, 0x10, 0x72, 0xb2, -+ 0xe7, 0x69, 0x71, 0x50, 0x83, 0xe3, 0xcd, 0x58, 0xf6, 0xe6, 0xab, 0x4c, 0x40, 0xdb, 0xa0, 0x6d, -+ 0x5e, 0x0f, 0xe1, 0x92, 0x08, 0x42, 0x1b, 0x08, 0x2a, 0x75, 0x71, 0xb0, 0x72, 0x5e, 0x74, 0x08, -+ 0x7e, 0xc4, 0x8b, 0x36, 0xbd, 0x60, 0x10, 0x07, 0x59, 0xe2, 0x21, 0xea, 0xfb, 0x94, 0x5a, 0x7c, -+ 0x44, 0x22, 0xee, 0xd7, 0x85, 0x1f, 0x51, 0xb3, 0x3e, 0x33, 0xc1, 0x82, 0xa9, 0x48, 0x6f, 0xa7, -+ 0xbe, 0xbb, 0xfb, 0xd2, 0xda, 0x14, 0x69, 0x2d, 0x74, 0x58, 0x46, 0x12, 0x80, 0xe8, 0x35, 0xfd, -+ 0x82, 0x61, 0xfa, 0x02, 0x4b, 0x1f, 0xff, 0xc3, 0xb2, 0x66, 0x4d, 0x3e, 0xc4, 0x53, 0x86, 0xba, -+ 0x52, 0x76, 0xa3, 0x0a, 0x42, 0xaa, 0xe6, 0x3a, 0x73, 0x73, 0xc8, 0xc7, 0xf7, 0xf8, 0x5c, 0xa4, -+ 0xd6, 0x76, 0x08, 0x16, 0xce, 0xc0, 0x7a, 0x48, 0x0a, 0x60, 0xc1, 0x4f, 0x26, 0x63, 0xc3, 0x4f, -+ 0xd9, 0x70, 0x2c, 0x76, 0x42, 0x22, 0x3e, 0xa5, 0x8b, 0x38, 0xe5, 0x10, 0x9f, 0x1d, 0x0d, 0xff, -+ 0x96, 0x88, 0x28, 0x11, 0xdd, 0x8d, 0x97, 0xd0, 0xbd, 0xb0, 0x22, 0x29, 0x23, 0x5d, 0x82, 0x40, -+ 0x28, 0xd4, 0xc8, 0x6e, 0x6c, 0xbf, 0x3b, 0xef, 0x8a, 0xc9, 0x07, 0x6b, 0x20, 0x62, 0x23, 0x15, -+ 0xdb, 0x4a, 0xc2, 0x21, 0xbc, 0x7a, 0x84, 0xc0, 0xe1, 0xf9, 0x90, 0x24, 0x7c, 0x5c, 0xcd, 0x5a, -+ 0xd9, 0x64, 0x48, 0x1b, 0xea, 0x5b, 0x60, 0x51, 0x64, 0x82, 0x42, 0xae, 0xf5, 0x66, 0x9c, 0x55, -+ 0x2c, 0x68, 0x81, 0xd3, 0xbe, 0xd6, 0xc3, 0x3c, 0x1c, 0x3e, 0x37, 0x00, 0x3f, 0xe0, 0x16, 0x63, -+ 0xd9, 0x35, 0xed, 0xba, 0xb5, 0x67, 0x60, 0x71, 0x83, 0x00, 0x04, 0x87, 0x1e, 0x33, 0x6c, 0x27, -+ 0x20, 0xc6, 0x1f, 0x0d, 0x1e, 0x19, 0x0d, 0xff, 0x0a, 0x18, 0xc8, 0x09, 0x59, 0x60, 0x31, 0x64, -+ 0x76, 0x19, 0xc2, 0x8c, 0x7d, 0x69, 0xad, 0xb0, 0x96, 0xf6, 0x65, 0x74, 0xdb, 0x70, 0xb0, 0x30, -+ 0x4c, 0xcf, 0x18, 0xca, 0xe9, 0xaa, 0x86, 0xe8, 0x55, 0xc5, 0xae, 0xa6, 0xe2, 0xcd, 0x90, 0xbf, -+ 0x0d, 0x08, 0x2e, 0xa8, 0x7c, 0xbe, 0x73, 0xe0, 0xe5, 0xfd, 0x1c, 0x2c, 0x92, 0xa4, 0xcf, 0x4f, -+ 0x4a, 0x41, 0xa5, 0x50, 0x70, 0x46, 0x2a, 0x80, 0xd3, 0x1f, 0x1c, 0xac, 0x6f, 0x1c, 0x82, 0xb3, -+ 0x4a, 0xc1, 0x55, 0xa9, 0x62, 0xf4, 0xa4, 0x04, 0x87, 0xb4, 0xe3, 0x04, 0xc5, 0xb9, 0x7a, 0xc9, -+ 0xf0, 0x17, 0x7d, 0x69, 0x46, 0xac, 0xb4, 0x84, 0x11, 0x05, 0x04, 0x0e, 0xf3, 0x5b, 0x14, 0xf3, -+ 0x41, 0x6a, 0xbb, 0x62, 0xe1, 0x50, 0x7e, 0x06, 0xc4, 0xc5, 0x10, 0x14, 0x37, 0xe4, 0xb0, 0xb7, -+ 0x3a, 0x83, 0x56, 0x84, 0xb6, 0xc0, 0xde, 0xe9, 0xef, 0xe0, 0x55, 0x6a, 0x22, 0x72, 0x48, 0x45, -+ 0x0b, 0x3f, 0x84, 0x5b, 0x93, 0x94, 0x43, 0xce, 0xd0, 0xb5, 0xee, 0xde, 0x7d, 0x3c, 0xdb, 0x2c, -+ 0x8c, 0x2d, 0xca, 0x48, 0x4c, 0xca, 0x7a, 0xcc, 0x24, 0x79, 0x61, 0x84, 0x55, 0xaa, 0x6c, 0x00, -+ 0xf8, 0x6b, 0x66, 0xf6, 0x02, 0xdf, 0xc1, 0xac, 0xd0, 0x76, 0xe2, 0x32, 0x8b, 0x1e, 0x1e, 0x90, -+ 0x37, 0x63, 0xe6, 0xb2, 0x68, 0xef, 0x66, 0x59, 0x0a, 0x3d, 0x31, 0xee, 0x73, 0x29, 0x5f, 0xbe, -+ 0xc2, 0x9b, 0x57, 0x2d, 0x1a, 0x54, 0xe6, 0x33, 0x13, 0x4a, 0xab, 0x2a, 0x8a, 0x13, 0x3c, 0x9b, -+ 0xdf, 0x84, 0x86, 0xaa, 0x9a, 0x4d, 0xb5, 0x1a, 0x75, 0x61, 0x71, 0x82, 0xba, 0xb2, 0xa8, 0xa6, -+ 0xaa, 0xac, 0xa8, 0x26, 0xa1, 0xbc, 0xaa, 0x72, 0x83, 0xba, 0x32, 0x61, 0x53, 0x71, 0x4d, 0x65, -+ 0x71, 0x79, 0x42, 0x79, 0x59, 0x65, 0x7d, 0xe3, 0x9c, 0xb9, 0xf1, 0x29, 0x09, 0x45, 0x35, 0x65, -+ 0x9b, 0x8b, 0x6b, 0x6a, 0x13, 0x2a, 0x8b, 0xeb, 0x12, 0x1a, 0xca, 0x6a, 0x8a, 0xcb, 0x8b, 0x6b, -+ 0x6b, 0x13, 0xea, 0x1b, 0x8a, 0xe7, 0xa6, 0x26, 0x25, 0x25, 0xd4, 0x57, 0x96, 0xd5, 0x56, 0x15, -+ 0x36, 0x14, 0x56, 0x26, 0x68, 0xca, 0xd5, 0x75, 0x25, 0x55, 0x35, 0x15, 0x09, 0x0d, 0x37, 0xa4, -+ 0x22, 0x0a, 0xff, 0x7b, 0xda, 0x55, 0xf5, 0x75, 0x6e, 0xfa, 0x05, 0xf5, 0x65, 0xe5, 0x45, 0x72, -+ 0xe7, 0x75, 0x32, 0x36, 0x75, 0xee, 0xbc, 0xe4, 0xb9, 0x49, 0x29, 0x64, 0x81, 0xba, 0xb6, 0xb8, -+ 0x88, 0xac, 0xaa, 0x24, 0x6b, 0x92, 0xd3, 0x92, 0xd3, 0xa5, 0x49, 0x05, 0x33, 0xc9, 0xc2, 0x72, -+ 0x75, 0xe5, 0x06, 0x12, 0x73, 0x58, 0x06, 0xed, 0x89, 0x89, 0xf1, 0xd2, 0xf8, 0x24, 0x32, 0xb6, -+ 0xb4, 0xae, 0x4e, 0x53, 0x3b, 0x3f, 0xc1, 0x4d, 0x21, 0x7e, 0x43, 0x55, 0xd5, 0x06, 0x60, 0xbc, -+ 0xaa, 0xbe, 0xa6, 0xb0, 0x38, 0xbe, 0xb0, 0xaa, 0x22, 0xa1, 0xae, 0xaa, 0xaa, 0xbc, 0xb0, 0x54, -+ 0x5d, 0x56, 0x99, 0x50, 0x5e, 0xbe, 0xb9, 0x62, 0x8e, 0xa6, 0xa6, 0x6a, 0x63, 0x71, 0x61, 0x1d, -+ 0x59, 0x90, 0x9c, 0x3e, 0xaf, 0x24, 0x2d, 0x51, 0x9a, 0x2a, 0x2d, 0x2c, 0x4e, 0x2d, 0x9a, 0x27, -+ 0x4d, 0x94, 0xa6, 0x24, 0x15, 0xcc, 0x4b, 0x4b, 0x4a, 0x9c, 0x97, 0x54, 0x5c, 0x94, 0x98, 0x5c, -+ 0x50, 0x5c, 0x9c, 0x96, 0x9e, 0x56, 0x30, 0x2f, 0x7d, 0xe6, 0xa6, 0xff, 0x41, 0x3d, 0xdd, 0x44, -+ 0xba, 0xac, 0xb2, 0xb0, 0xbc, 0xbe, 0xa8, 0xd8, 0xd9, 0x92, 0x50, 0xb7, 0x45, 0x53, 0x5c, 0x1b, -+ 0x5f, 0x5a, 0x5f, 0x56, 0x59, 0x97, 0x9c, 0xb4, 0xbe, 0xee, 0xb6, 0xd0, 0xea, 0xda, 0x8a, 0x39, -+ 0x1b, 0x8a, 0x2b, 0x81, 0x7a, 0x21, 0xb4, 0xd5, 0xcd, 0x29, 0x2f, 0x4f, 0x4d, 0x81, 0x6e, 0xc9, -+ 0x49, 0xb7, 0xed, 0x51, 0xaf, 0xd6, 0x94, 0xdd, 0xa6, 0xdb, 0xfa, 0xf5, 0xd0, 0xb1, 0xbe, 0xb2, -+ 0xb6, 0x6c, 0x43, 0x25, 0x8c, 0x10, 0xb4, 0x67, 0x37, 0xa8, 0x6b, 0x4a, 0xc8, 0xfb, 0x9c, 0xe3, -+ 0x92, 0x5d, 0x5c, 0x50, 0xbf, 0x81, 0xbc, 0xb3, 0xb2, 0xa4, 0xca, 0xdd, 0xd2, 0x00, 0xca, 0xaf, -+ 0x59, 0x5f, 0x5b, 0xb6, 0xb5, 0x58, 0x51, 0x53, 0x55, 0x5b, 0x3b, 0x27, 0xfb, 0x9e, 0xbb, 0x20, -+ 0x7c, 0xb9, 0x13, 0xfe, 0x91, 0x0a, 0x75, 0x65, 0x55, 0x65, 0x59, 0xa1, 0xba, 0x9c, 0xcc, 0xad, -+ 0xaf, 0xd0, 0x90, 0x2b, 0xd5, 0x05, 0xa0, 0xca, 0xc5, 0x95, 0xf8, 0xe7, 0x1e, 0x4d, 0x79, 0x59, -+ 0x5d, 0xde, 0xca, 0xbb, 0xee, 0xad, 0x2c, 0xab, 0x03, 0x1a, 0x58, 0xc4, 0xb4, 0xf5, 0x75, 0xf5, -+ 0x69, 0x40, 0x3d, 0xcd, 0x43, 0x1c, 0x63, 0x2e, 0x02, 0xc5, 0x82, 0x35, 0xd5, 0x14, 0xd7, 0xad, -+ 0x5f, 0xb3, 0xf2, 0x9e, 0x25, 0x65, 0xca, 0xd2, 0x7b, 0xd6, 0x2f, 0x76, 0x1d, 0x6e, 0x86, 0xc3, -+ 0x78, 0x4a, 0x02, 0x58, 0x4b, 0xb6, 0x16, 0x17, 0xd5, 0x96, 0xaa, 0x0b, 0xea, 0x4b, 0xea, 0x2a, -+ 0x34, 0x65, 0x6e, 0x58, 0x0f, 0xe4, 0x14, 0xb8, 0xc2, 0xba, 0x46, 0x00, 0x4d, 0x9a, 0x9b, 0xba, -+ 0x1e, 0x8e, 0x8a, 0xd4, 0x75, 0x6a, 0xfc, 0x57, 0x5e, 0x5c, 0x59, 0x50, 0x56, 0x07, 0xdf, 0x98, -+ 0x97, 0xd4, 0x14, 0x60, 0x06, 0xbe, 0xd6, 0xc3, 0x17, 0x1e, 0x2a, 0x92, 0xfa, 0x9a, 0xac, 0x95, -+ 0xda, 0x3a, 0x75, 0x5d, 0x31, 0xcc, 0xdb, 0x25, 0xc5, 0xce, 0xd0, 0x41, 0xaa, 0xb7, 0x17, 0xcd, -+ 0xe0, 0xa0, 0x14, 0x3d, 0xca, 0x9e, 0xc1, 0xd1, 0xc2, 0x4f, 0x1e, 0x9c, 0xcd, 0xd5, 0xa3, 0x95, -+ 0x33, 0x38, 0xbb, 0x52, 0xf5, 0x76, 0xcd, 0x0c, 0xce, 0xb2, 0x79, 0x7a, 0x7b, 0xe3, 0x0c, 0xce, -+ 0xb1, 0x79, 0x7a, 0xe9, 0x5a, 0x38, 0x13, 0xb5, 0x92, 0x29, 0x05, 0xd0, 0xab, 0xd5, 0xc6, 0xe9, -+ 0xd5, 0xee, 0x22, 0x53, 0x8a, 0xe0, 0xb8, 0xcd, 0xc6, 0xc9, 0x2a, 0x64, 0x01, 0x4c, 0x08, 0x5c, -+ 0x2c, 0x85, 0x86, 0x4e, 0x68, 0x78, 0x01, 0x37, 0x84, 0x0e, 0x0d, 0x04, 0xec, 0x97, 0xa1, 0x37, -+ 0x1c, 0x63, 0x59, 0x42, 0x20, 0xb6, 0x32, 0x90, 0xf1, 0x27, 0x1c, 0x34, 0x31, 0x5e, 0x45, 0xe8, -+ 0x75, 0x2a, 0x48, 0x42, 0xd2, 0x15, 0x29, 0x79, 0xc5, 0xe3, 0x3c, 0x35, 0x84, 0x30, 0x6c, 0x64, -+ 0xbd, 0x13, 0x37, 0xd2, 0x03, 0x65, 0x24, 0xb2, 0xf2, 0xad, 0x75, 0xba, 0xc4, 0x62, 0x29, 0x7a, -+ 0xd9, 0xca, 0x4b, 0x66, 0xbc, 0x26, 0x55, 0x12, 0x01, 0x2c, 0xc4, 0x5f, 0x89, 0x9a, 0x09, 0x7c, -+ 0xbd, 0x00, 0x59, 0x65, 0x4c, 0x8b, 0x08, 0x49, 0x3f, 0x21, 0x4c, 0x72, 0x3a, 0xcb, 0x4a, 0xe4, -+ 0x0d, 0xa3, 0xa0, 0x19, 0x5e, 0x61, 0x52, 0x2f, 0x4a, 0xa8, 0xbb, 0xe9, 0xf9, 0xb9, 0x71, 0x2b, -+ 0xd1, 0x1c, 0x7c, 0x62, 0xcd, 0xf6, 0x56, 0x49, 0x2c, 0x76, 0x81, 0xcc, 0x73, 0x86, 0x83, 0xbd, -+ 0xb7, 0x29, 0xe9, 0xff, 0xca, 0xd7, 0x87, 0xa1, 0x64, 0x46, 0xb7, 0x74, 0x45, 0x24, 0x0e, 0xae, -+ 0xde, 0x41, 0x7a, 0x08, 0xcb, 0xde, 0xc5, 0x57, 0x86, 0xa4, 0x3d, 0x3a, 0x3a, 0x3b, 0x99, 0x5f, -+ 0x3d, 0x3e, 0x68, 0xe3, 0xf7, 0x89, 0x65, 0xd5, 0xd2, 0x3e, 0xc4, 0x3e, 0x2e, 0x1e, 0x92, 0x5a, -+ 0x75, 0xd9, 0xd0, 0x5c, 0x2b, 0x3d, 0x66, 0xe3, 0xdb, 0x30, 0x75, 0x82, 0xc9, 0x92, 0x11, 0x43, -+ 0xb5, 0xa8, 0x48, 0x2b, 0x41, 0x34, 0xe0, 0xe2, 0xb3, 0x28, 0xaf, 0x40, 0xa9, 0xc0, 0xcd, 0xc5, -+ 0x7d, 0x71, 0xd9, 0x28, 0xdd, 0x4d, 0xf7, 0x5e, 0x8b, 0x45, 0x20, 0x73, 0x9f, 0x8d, 0xc3, 0x4f, -+ 0x3b, 0x3d, 0x16, 0x9f, 0x25, 0xf3, 0x4f, 0x6b, 0x04, 0x5f, 0x4b, 0xfd, 0x25, 0x68, 0x0c, 0xe5, -+ 0x25, 0x73, 0xea, 0xd1, 0x90, 0x70, 0x7f, 0x5f, 0xce, 0x6e, 0x21, 0x05, 0x01, 0xeb, 0xbe, 0x05, -+ 0xa3, 0xb3, 0xf2, 0xf5, 0xe1, 0x9a, 0x64, 0xce, 0x66, 0xfb, 0x31, 0x72, 0xc4, 0x16, 0x0e, 0x60, -+ 0x8d, 0x00, 0x66, 0xf5, 0x80, 0xb5, 0x40, 0x10, 0xea, 0x83, 0xc1, 0x52, 0x0c, 0x26, 0xb6, 0x95, -+ 0x6f, 0xcb, 0x68, 0x0d, 0xe0, 0xc2, 0x08, 0x6b, 0xd3, 0xb5, 0x5c, 0x84, 0xae, 0x50, 0x12, 0x91, -+ 0x23, 0x3a, 0x11, 0x7c, 0xd9, 0xf0, 0x97, 0x6e, 0x26, 0xb0, 0x5a, 0x02, 0xad, 0x2a, 0x37, 0xab, -+ 0x19, 0xf0, 0xf3, 0x0b, 0x0e, 0x1e, 0x91, 0xd5, 0x8d, 0x93, 0x03, 0x91, 0xa3, 0x97, 0x93, 0x5b, -+ 0x7b, 0xbb, 0x6d, 0x76, 0x8b, 0x7c, 0xd6, 0x05, 0xdc, 0x06, 0x1b, 0x8f, 0xb9, 0xb2, 0x5a, 0xd6, -+ 0x1b, 0x52, 0xd6, 0x2b, 0x2a, 0x2f, 0x15, 0xd2, 0x02, 0xf0, 0x0f, 0x62, 0x14, 0x62, 0x21, 0x62, -+ 0x11, 0x1b, 0xcb, 0xbc, 0x89, 0xf4, 0x9a, 0xe6, 0xf0, 0x71, 0x6b, 0x60, 0xa3, 0xd0, 0x2b, 0x78, -+ 0xdc, 0x73, 0x56, 0x86, 0xbc, 0xc6, 0x91, 0x16, 0xeb, 0x1a, 0x01, 0x03, 0xde, 0xa1, 0x3d, 0xb4, -+ 0x90, 0xce, 0xac, 0x1c, 0x2d, 0x0d, 0xe5, 0x22, 0x2c, 0xfa, 0x3e, 0x90, 0xa9, 0xb5, 0xdf, 0x49, -+ 0x7f, 0x84, 0x06, 0x32, 0xc9, 0xfc, 0x5c, 0xf4, 0xbb, 0x6c, 0xb3, 0xdb, 0xe4, 0xb3, 0xda, 0x18, -+ 0x2d, 0x88, 0x64, 0x82, 0x2e, 0x18, 0x8b, 0xae, 0x18, 0x72, 0xda, 0xfb, 0x9d, 0x6a, 0xec, 0xa4, -+ 0x51, 0x6a, 0x7c, 0xc7, 0x0b, 0x7d, 0x58, 0x2d, 0x76, 0xfe, 0x8b, 0x61, 0x15, 0x90, 0xac, 0xbd, -+ 0xa2, 0x16, 0x9d, 0xe7, 0xdf, 0x7c, 0x2d, 0x73, 0x59, 0x37, 0x51, 0x74, 0x9c, 0xf8, 0x9a, 0x55, -+ 0xe9, 0x60, 0x55, 0xaa, 0x78, 0xdf, 0x9a, 0x05, 0xe3, 0x66, 0x41, 0xa9, 0xf5, 0x5d, 0x63, 0x58, -+ 0xb7, 0xce, 0xf9, 0xaf, 0x98, 0x67, 0x36, 0x0b, 0xbe, 0x45, 0x3e, 0xdf, 0xca, 0xd8, 0x95, 0x5a, -+ 0x96, 0x38, 0x17, 0x3a, 0x9a, 0x89, 0x50, 0x4d, 0xac, 0x0e, 0x8e, 0xe1, 0xc0, 0xac, 0x9b, 0xbf, -+ 0x9f, 0x9e, 0xdb, 0xc2, 0xc8, 0xb5, 0xd0, 0x32, 0xac, 0x86, 0x4c, 0x33, 0x03, 0x5f, 0xf2, 0x33, -+ 0xc3, 0xf2, 0xc8, 0x3d, 0xd2, 0xb4, 0xeb, 0xd8, 0xeb, 0xc7, 0x9a, 0xf2, 0x2e, 0x0c, 0x15, 0x1f, -+ 0xa8, 0x6c, 0x73, 0x04, 0x24, 0x15, 0x14, 0x1e, 0xda, 0x54, 0x5b, 0xf6, 0xe0, 0x8c, 0x57, 0x0b, -+ 0x67, 0xd7, 0x26, 0x16, 0x7a, 0x2d, 0x78, 0x36, 0xec, 0xb0, 0xbd, 0xe9, 0x01, 0x47, 0xd3, 0xba, -+ 0xf1, 0xa6, 0xf5, 0x39, 0x14, 0x70, 0xd4, 0xae, 0x03, 0x43, 0xbb, 0x2a, 0xdb, 0x90, 0x78, 0x1b, -+ 0x5f, 0x50, 0xf8, 0xa7, 0xe6, 0x8f, 0x22, 0x5e, 0x7a, 0x50, 0x94, 0x24, 0x42, 0xda, 0x40, 0xf4, -+ 0x0a, 0x8c, 0xb9, 0x2f, 0x08, 0xe4, 0xc5, 0xab, 0x89, 0x85, 0x18, 0x8a, 0xbd, 0x35, 0x5f, 0xd3, -+ 0xae, 0xc8, 0x84, 0x50, 0xc8, 0xa2, 0x48, 0xb7, 0xf7, 0xe9, 0xcf, 0x8b, 0x07, 0x3a, 0xbc, 0xc7, -+ 0xe4, 0x38, 0xc4, 0x3b, 0x2f, 0x09, 0x77, 0xc6, 0x26, 0x41, 0x29, 0x67, 0x54, 0x82, 0xaf, 0x95, -+ 0x10, 0xf2, 0xf8, 0x9c, 0xc5, 0x81, 0x8f, 0x0f, 0x6c, 0xe9, 0xa9, 0x51, 0x3f, 0x0e, 0xaa, 0xc4, -+ 0xf6, 0xce, 0x1e, 0xca, 0xe8, 0x34, 0x2c, 0xd8, 0x0b, 0x81, 0x14, 0x3d, 0xd3, 0x6c, 0xc8, 0x80, -+ 0xa0, 0xca, 0xd4, 0x87, 0x87, 0x52, 0x0d, 0xeb, 0x7d, 0x38, 0x00, 0xf8, 0x33, 0xb2, 0xe3, 0xb0, -+ 0xd6, 0x71, 0xfe, 0x36, 0x65, 0x18, 0xcd, 0x65, 0xde, 0xa3, 0x64, 0xde, 0xa7, 0x79, 0xf1, 0x6e, -+ 0xf1, 0x39, 0xb9, 0x1d, 0xef, 0x39, 0x2e, 0x49, 0x11, 0x9a, 0x07, 0x1d, 0xa6, 0xdf, 0x31, 0x68, -+ 0xba, 0x3b, 0x94, 0x13, 0x8f, 0x71, 0x17, 0xab, 0xc4, 0x34, 0x3a, 0xb4, 0xdd, 0xb0, 0x90, 0xac, -+ 0x07, 0xcf, 0x59, 0x58, 0x0f, 0xab, 0x4c, 0xb1, 0xbb, 0x01, 0xfb, 0xa9, 0x1a, 0x58, 0x43, 0x60, -+ 0x79, 0xa9, 0x2c, 0xac, 0xd9, 0xa2, 0xa9, 0x2b, 0x2b, 0xc2, 0x4d, 0xeb, 0x5d, 0x67, 0xd4, 0x71, -+ 0x51, 0x71, 0x61, 0x55, 0x65, 0x49, 0x7d, 0x21, 0xb8, 0x66, 0x7f, 0x63, 0xc9, 0xb3, 0x64, 0x8a, -+ 0x4a, 0x2a, 0xcf, 0xa1, 0xcf, 0xcb, 0x8f, 0x0a, 0x7f, 0xc3, 0xe4, 0x67, 0x9d, 0x6d, 0xbe, 0x63, -+ 0x7e, 0x27, 0x5b, 0x4b, 0x90, 0x3c, 0x3d, 0x69, 0xe4, 0x21, 0x4b, 0x10, 0xb2, 0xe4, 0xce, 0x5f, -+ 0xd7, 0x11, 0xa5, 0x5d, 0x95, 0xbf, 0xb3, 0x4e, 0xe5, 0xa5, 0xa5, 0xcb, 0x02, 0x18, 0x72, 0x4e, -+ 0x20, 0xb2, 0xc6, 0x23, 0xd9, 0xd7, 0x3a, 0x46, 0x92, 0x71, 0xd0, 0xb4, 0xdb, 0xfe, 0xa3, 0x4e, -+ 0xe8, 0xaf, 0xbd, 0xf7, 0xc4, 0x25, 0x5e, 0x3c, 0xd1, 0x93, 0x55, 0xd1, 0x69, 0xa8, 0x40, 0x62, -+ 0xb4, 0x8f, 0xe4, 0x64, 0xed, 0x47, 0xe8, 0x61, 0x02, 0x85, 0x4f, 0xe3, 0x24, 0x12, 0xed, 0xf7, -+ 0x32, 0x92, 0x2e, 0xf1, 0x2e, 0xaa, 0x87, 0x66, 0xe9, 0x9f, 0x69, 0x6c, 0x3a, 0x25, 0x2c, 0x09, -+ 0x24, 0x96, 0xf7, 0x64, 0x55, 0x72, 0x0e, 0xed, 0x20, 0x63, 0xd6, 0x49, 0xe6, 0x75, 0xad, 0x5e, -+ 0x2c, 0xf5, 0x7f, 0x83, 0x0c, 0xee, 0x3d, 0x30, 0x7d, 0x64, 0xfb, 0x2a, 0x93, 0x97, 0xfa, 0x3e, -+ 0xdf, 0xf1, 0xfe, 0xd9, 0x83, 0x4d, 0xa9, 0xaf, 0x72, 0x4a, 0x4e, 0x07, 0x5e, 0xcc, 0x82, 0xee, -+ 0x0b, 0x2f, 0xf1, 0x1a, 0x24, 0xd0, 0xfd, 0xe9, 0x46, 0xe6, 0xfb, 0xb8, 0x7b, 0x7e, 0x8f, 0x7e, -+ 0x1d, 0xe7, 0x8c, 0x9f, 0x3c, 0xfa, 0xcd, 0x55, 0xb2, 0x3f, 0xd4, 0x72, 0x90, 0x6a, 0xed, 0xf4, -+ 0x41, 0xe3, 0x4f, 0xbc, 0xb1, 0x6a, 0x01, 0x0d, 0xb5, 0x2e, 0x65, 0x3c, 0xad, 0xdc, 0xbe, 0x4a, -+ 0xe9, 0xb3, 0x19, 0x51, 0xed, 0xfd, 0xb9, 0x3d, 0xfa, 0xad, 0x16, 0x3a, 0x42, 0x9b, 0x58, 0xa3, -+ 0x51, 0x5a, 0x6f, 0xdd, 0xea, 0xbc, 0x1d, 0x46, 0x6c, 0xef, 0x62, 0x19, 0x0d, 0x69, 0x0f, 0x61, -+ 0x15, 0x0f, 0x44, 0xe9, 0xf3, 0x2c, 0xfd, 0xb3, 0xf7, 0xb3, 0xd7, 0xc0, 0xfc, 0x89, 0xf7, 0x2d, -+ 0x2a, 0x78, 0xb0, 0xe9, 0x47, 0x21, 0xc4, 0x69, 0xa9, 0xa2, 0x82, 0xc4, 0xa0, 0xa2, 0xbb, 0x83, -+ 0xca, 0x3a, 0x82, 0xce, 0xf8, 0xa9, 0xa3, 0x7b, 0x56, 0x95, 0x7a, 0x6d, 0xa1, 0x70, 0x0e, 0x65, -+ 0xff, 0xc4, 0xdb, 0x54, 0x2d, 0x20, 0x80, 0x96, 0xf1, 0x69, 0xfb, 0x3a, 0xf5, 0x9c, 0x8f, 0xe5, -+ 0x48, 0x5b, 0xbd, 0x5d, 0xea, 0xff, 0xf7, 0xd9, 0x5d, 0x8b, 0x33, 0xc1, 0x97, 0x94, 0x08, 0x55, -+ 0xb4, 0x11, 0xa1, 0xf5, 0x70, 0x67, 0x0e, 0x1e, 0xd6, 0x21, 0x42, 0x8c, 0x50, 0x0b, 0x9e, 0xe4, -+ 0xb8, 0x2f, 0x43, 0xd4, 0x93, 0x75, 0xff, 0x20, 0x98, 0x00, 0xc6, 0xd9, 0xeb, 0x08, 0x3c, 0xd9, -+ 0x0b, 0x57, 0x45, 0x4f, 0x71, 0x92, 0x0f, 0xbe, 0xaf, 0xbf, 0xbf, 0x05, 0xf8, 0x0c, 0x7b, 0xec, -+ 0x6d, 0x8d, 0xd7, 0xdb, 0x8d, 0x3b, 0xdf, 0x35, 0xef, 0xfc, 0x33, 0xb4, 0xcf, 0xbd, 0xf4, 0x7e, -+ 0x6f, 0x85, 0x99, 0x82, 0xef, 0x00, 0x79, 0xf7, 0xef, 0x72, 0xca, 0x3b, 0x0c, 0xf2, 0xbe, 0xe5, -+ 0x94, 0xd7, 0xf8, 0x0c, 0x32, 0xac, 0xea, 0xf6, 0x76, 0xca, 0x3b, 0x9c, 0x2d, 0xea, 0xe9, 0xad, -+ 0x68, 0xa7, 0x3b, 0xe1, 0xdf, 0x5e, 0x65, 0xf5, 0xae, 0x86, 0x76, 0x83, 0x2e, 0x78, 0x4b, 0x75, -+ 0xf0, 0xd6, 0x83, 0xc1, 0x0f, 0x1d, 0x5c, 0x2e, 0x6d, 0xad, 0x37, 0x12, 0x7a, 0x06, 0xe2, 0xfd, -+ 0x83, 0x43, 0x67, 0x70, 0x95, 0xb2, 0xcf, 0x7c, 0x59, 0x1c, 0xbf, 0xfd, 0xae, 0xd3, 0x36, 0xe7, -+ 0xa9, 0x54, 0xf7, 0xda, 0x0c, 0xbe, 0x30, 0xd2, 0x4e, 0x5b, 0x7d, 0x87, 0x88, 0xcc, 0xb1, 0x32, -+ 0xdf, 0x7c, 0x4c, 0x2a, 0x33, 0x59, 0xbd, 0x8a, 0xc2, 0xd5, 0x5a, 0x92, 0x08, 0x1d, 0x9c, 0xdf, -+ 0x8b, 0xe4, 0xb4, 0xb9, 0x26, 0x0a, 0x4f, 0x39, 0x49, 0x75, 0x3c, 0xe5, 0xec, 0xe8, 0xd0, 0x1d, -+ 0xa0, 0x3a, 0xd2, 0x9d, 0x1d, 0xd9, 0xce, 0x8e, 0x3e, 0xce, 0x8e, 0xd3, 0x9d, 0x1d, 0x17, 0x3b, -+ 0x3b, 0xb6, 0x3a, 0x3b, 0x8a, 0xe5, 0x54, 0x47, 0x44, 0x41, 0xca, 0x9c, 0x97, 0x8c, 0x14, 0x12, -+ 0xa9, 0xb3, 0x17, 0xcb, 0xd9, 0xcb, 0xdb, 0x79, 0x49, 0xec, 0xec, 0x95, 0xe1, 0x62, 0x5b, 0x4b, -+ 0x41, 0xaa, 0x08, 0x8a, 0x9c, 0x83, 0xf6, 0x66, 0x65, 0x62, 0x96, 0x09, 0x35, 0xcd, 0x60, 0x70, -+ 0x2f, 0x5c, 0xe5, 0x42, 0x3b, 0xed, 0xfe, 0x77, 0x44, 0x92, 0x1c, 0x6d, 0xaf, 0xaf, 0x9e, 0x51, -+ 0x73, 0x8d, 0xc1, 0xf1, 0x2b, 0xd5, 0x1d, 0xb8, 0xbf, 0x55, 0x18, 0x29, 0x1b, 0xe5, 0xc8, 0x69, -+ 0xe9, 0x8f, 0xd0, 0x18, 0xdc, 0x6e, 0xd9, 0x67, 0x73, 0x96, 0x70, 0xfc, 0xcc, 0x1a, 0x23, 0xa9, -+ 0x13, 0x2f, 0x02, 0xfc, 0xeb, 0xc8, 0x7f, 0x04, 0x41, 0x77, 0x65, 0x5a, 0x96, 0x49, 0xf6, 0xd8, -+ 0x1f, 0x81, 0xee, 0x3c, 0x53, 0xfd, 0x4e, 0xe8, 0x1e, 0x2b, 0x96, 0xe4, 0x90, 0x1f, 0xde, 0x05, -+ 0xfc, 0x44, 0x0c, 0xfe, 0xf9, 0x30, 0x74, 0x0f, 0x78, 0x4c, 0x18, 0x69, 0x3a, 0x13, 0x03, 0x3c, -+ 0xfb, 0x14, 0x7d, 0x59, 0x60, 0x24, 0x09, 0xde, 0x1d, 0x1c, 0xbf, 0xc1, 0x4b, 0xfe, 0x94, 0xd4, -+ 0x1e, 0x36, 0xce, 0x62, 0x36, 0xc6, 0xe9, 0xab, 0xa7, 0xb2, 0x41, 0xea, 0x6f, 0x60, 0x83, 0x71, -+ 0x03, 0x80, 0x4a, 0x7b, 0x03, 0x40, 0xc6, 0x8d, 0x7c, 0xc6, 0x91, 0xfe, 0x8c, 0xa4, 0x31, 0x03, -+ 0x57, 0x1f, 0x72, 0xd5, 0xc6, 0xd0, 0x99, 0x0c, 0x5c, 0x5a, 0x22, 0xdb, 0x9f, 0x91, 0xcc, 0x69, -+ 0xe2, 0xd2, 0x94, 0x3c, 0x7f, 0x46, 0x56, 0x40, 0x34, 0x67, 0xc3, 0x38, 0xb4, 0x8c, 0x4d, 0x8b, -+ 0xe6, 0xf4, 0xc7, 0xe6, 0x09, 0x43, 0x77, 0xb7, 0x93, 0xfc, 0x43, 0x52, 0x79, 0x69, 0x6e, 0x81, -+ 0x5e, 0xaa, 0xed, 0x63, 0x74, 0xc8, 0xb7, 0x73, 0xb3, 0x9e, 0xf0, 0xf3, 0x37, 0x2e, 0x89, 0x8a, -+ 0xe6, 0x1c, 0xcb, 0xcd, 0x13, 0x6e, 0xdb, 0x03, 0x00, 0x09, 0x89, 0x72, 0xd1, 0x29, 0xb5, 0xde, -+ 0x3e, 0xd8, 0xcf, 0xe8, 0x78, 0x1a, 0x00, 0x14, 0xfe, 0xfe, 0xc6, 0x97, 0xa2, 0xa3, 0x39, 0xbb, -+ 0x96, 0xe5, 0x09, 0x9f, 0x79, 0x16, 0x00, 0xd2, 0x01, 0x60, 0x33, 0x60, 0x18, 0xef, 0x63, 0xa8, -+ 0x85, 0x3b, 0x01, 0x43, 0x90, 0xbf, 0x51, 0x12, 0x1f, 0xcd, 0xa1, 0xaf, 0x03, 0x80, 0xbf, 0x00, -+ 0xc0, 0xcb, 0x00, 0xb0, 0xb6, 0x10, 0x30, 0x0c, 0x30, 0xd4, 0x96, 0x5d, 0xdc, 0x5e, 0x4b, 0x98, -+ 0xbf, 0xf1, 0xfc, 0xbc, 0x68, 0x4e, 0x5f, 0x63, 0x9e, 0xf0, 0x63, 0x14, 0x80, 0x92, 0x7d, 0x0b, -+ 0x91, 0xb2, 0x53, 0x5a, 0xa0, 0x41, 0x24, 0x87, 0x75, 0x34, 0x62, 0xe8, 0x9f, 0xd7, 0xaf, 0x5f, -+ 0x97, 0xfe, 0x00, 0x5f, 0x7d, 0x38, 0x09, 0xee, 0x93, 0xcc, 0x5a, 0x7c, 0x7f, 0x6c, 0xb2, 0xdc, -+ 0xdf, 0x9a, 0x97, 0x1d, 0x82, 0x56, 0xc6, 0xb6, 0x8a, 0xc4, 0x88, 0xa3, 0xb7, 0xf5, 0xb2, 0x0f, -+ 0xfd, 0x7a, 0xfd, 0xfa, 0xa2, 0x4e, 0x0c, 0x22, 0xc3, 0x19, 0xc0, 0xbe, 0x56, 0x79, 0x75, 0x58, -+ 0xee, 0xb2, 0x11, 0x86, 0xd4, 0x9f, 0x40, 0xc3, 0xb1, 0x43, 0xd9, 0x08, 0xcd, 0xe5, 0x25, 0xfb, -+ 0x16, 0x23, 0x65, 0x87, 0x0b, 0xb5, 0x57, 0xf8, 0x30, 0x46, 0x2d, 0xfc, 0x09, 0x43, 0xff, 0xdb, -+ 0x89, 0x9a, 0x89, 0x06, 0x19, 0xc8, 0x85, 0x32, 0x8b, 0xdd, 0x85, 0x51, 0x6a, 0xf1, 0x25, 0x2a, -+ 0xa9, 0xd8, 0x67, 0x24, 0x4c, 0xf4, 0x83, 0xc9, 0xac, 0xa6, 0xad, 0x9c, 0x24, 0x02, 0xcd, 0x60, -+ 0x0d, 0xd0, 0xf4, 0x2a, 0xc7, 0x35, 0x79, 0x28, 0xc3, 0x9f, 0x65, 0x6d, 0xb1, 0x11, 0x5a, 0x52, -+ 0x14, 0x57, 0x8f, 0x74, 0x18, 0x5c, 0xeb, 0xe2, 0x80, 0x40, 0x00, 0xd8, 0xc7, 0x62, 0x8c, 0xb2, -+ 0xe8, 0xd2, 0x42, 0xe5, 0xfe, 0xe6, 0xe9, 0xfe, 0xe8, 0x66, 0x0c, 0x5a, 0xfd, 0x64, 0x0c, 0x9b, -+ 0x85, 0x14, 0x06, 0xd3, 0x0d, 0x18, 0x2e, 0x39, 0x31, 0xdc, 0x11, 0xe5, 0x8f, 0xec, 0x47, 0xd5, -+ 0x32, 0x7a, 0x4a, 0x7b, 0x62, 0xec, 0xb0, 0xc2, 0xc4, 0x45, 0xa2, 0x44, 0x69, 0x90, 0x90, 0x41, -+ 0x8f, 0x09, 0x18, 0x26, 0xdb, 0xa5, 0x68, 0x09, 0x5f, 0x80, 0x18, 0x36, 0x95, 0x2f, 0xf3, 0x7e, -+ 0x9c, 0x95, 0xdd, 0x0a, 0xfc, 0x3f, 0x6a, 0xc7, 0x98, 0xd4, 0x03, 0x66, 0xe5, 0x1f, 0xa4, 0x14, -+ 0xb8, 0x4c, 0x24, 0x64, 0x18, 0x38, 0x01, 0xfa, 0x54, 0xa5, 0xa1, 0xa8, 0x17, 0xce, 0xd3, 0x10, -+ 0x9c, 0x9f, 0x13, 0x44, 0x3e, 0x8f, 0x7b, 0x5c, 0xc1, 0x29, 0x5b, 0x40, 0x8d, 0x64, 0xd1, 0x48, -+ 0xd5, 0x8f, 0xca, 0x64, 0x42, 0xfe, 0x74, 0xa5, 0xe9, 0xa4, 0xcc, 0xfb, 0xf1, 0x10, 0x83, 0x3e, -+ 0x93, 0xf1, 0x34, 0xd2, 0xfa, 0x1a, 0x7a, 0x09, 0xb9, 0xb4, 0xfd, 0x57, 0x12, 0xa0, 0x4e, 0xd2, -+ 0x77, 0x73, 0xdd, 0x18, 0x98, 0x3e, 0xe5, 0xc0, 0xf7, 0xa3, 0x63, 0xbf, 0x60, 0x6a, 0x98, 0x64, -+ 0x73, 0x88, 0x81, 0x86, 0x8a, 0x68, 0x68, 0x5b, 0x98, 0x3e, 0x0d, 0x19, 0x42, 0x0c, 0xbd, 0x99, -+ 0xad, 0xcf, 0x22, 0xed, 0xea, 0x6d, 0x2a, 0x4e, 0x09, 0x9f, 0xf7, 0xb3, 0x14, 0xae, 0x2c, 0xe1, -+ 0x3f, 0xc6, 0x06, 0x66, 0x3f, 0xa2, 0x3f, 0x80, 0x49, 0xab, 0x30, 0xb3, 0x0e, 0x17, 0xb3, 0x48, -+ 0xfb, 0x8c, 0x85, 0xab, 0xea, 0x77, 0x34, 0x02, 0x03, 0x7b, 0x32, 0x2c, 0x3f, 0x42, 0xeb, 0xe8, -+ 0x39, 0x7c, 0xcb, 0x03, 0xe7, 0x94, 0xa7, 0x45, 0xf3, 0xb5, 0xeb, 0x04, 0x1f, 0x85, 0x1e, 0xb0, -+ 0xe1, 0x31, 0xce, 0xc2, 0x63, 0x5c, 0xa0, 0x8a, 0x83, 0x11, 0x15, 0xcc, 0xec, 0x92, 0x4b, 0xd5, -+ 0x30, 0x7e, 0xa4, 0x90, 0xa3, 0x97, 0xa7, 0xf0, 0x08, 0x71, 0x17, 0x91, 0x5c, 0xa8, 0x3c, 0xb5, -+ 0x6d, 0x85, 0x7f, 0x2a, 0x01, 0xa3, 0xea, 0x03, 0xa3, 0xba, 0x8f, 0x7d, 0xef, 0x51, 0x3c, 0xd6, -+ 0x58, 0xc9, 0x8b, 0x86, 0x44, 0x01, 0x48, 0x39, 0xf9, 0xda, 0x13, 0x13, 0xd7, 0xf2, 0x44, 0xa8, -+ 0xc8, 0x1b, 0x58, 0xb1, 0x7b, 0x2f, 0x89, 0x29, 0xa7, 0x95, 0x1a, 0x34, 0x1d, 0x36, 0x23, 0x21, -+ 0xb3, 0x09, 0x81, 0x78, 0x2a, 0x67, 0x75, 0x28, 0x5c, 0x0e, 0xe0, 0xab, 0x7b, 0x51, 0xb7, 0xca, -+ 0xc1, 0xa5, 0x3b, 0x68, 0x8a, 0x18, 0xbe, 0x36, 0x8c, 0xf7, 0x9c, 0xd4, 0x2d, 0x94, 0x6f, 0xd3, -+ 0x3f, 0xce, 0x63, 0x25, 0x14, 0xb8, 0x64, 0x31, 0x7b, 0xeb, 0xd9, 0xec, 0x64, 0xd6, 0xe1, 0xca, -+ 0xfc, 0xf9, 0x6a, 0x7f, 0xc4, 0x54, 0xc0, 0x58, 0xc5, 0x8b, 0x1a, 0xdd, 0xd8, 0xbb, 0xcd, 0x8e, -+ 0x10, 0x43, 0xc1, 0xbc, 0xd8, 0xe7, 0x28, 0xa1, 0x11, 0x08, 0x1d, 0x74, 0xcf, 0xc8, 0x69, 0xac, -+ 0x90, 0x1c, 0x50, 0x16, 0xc2, 0xe3, 0x96, 0x4a, 0x76, 0xaa, 0x50, 0x09, 0x7f, 0xc7, 0x97, 0xf9, -+ 0x75, 0xbd, 0xd1, 0x30, 0x0a, 0x67, 0x60, 0x14, 0xf2, 0xf3, 0xe4, 0x7f, 0xc5, 0xfa, 0x96, 0x3c, -+ 0x0d, 0x23, 0x66, 0x8e, 0xc6, 0x5c, 0x92, 0xac, 0x6a, 0xb0, 0x93, 0x31, 0xd6, 0x0b, 0x20, 0x95, -+ 0x52, 0x6a, 0xe4, 0xd2, 0xcd, 0xde, 0xb4, 0x90, 0xf1, 0x49, 0x9c, 0x97, 0xc8, 0xd8, 0xfe, 0x2c, -+ 0x0f, 0x03, 0xc0, 0xbf, 0xd5, 0x0e, 0xfc, 0x6f, 0xcb, 0x8a, 0xc1, 0x17, 0x37, 0xc9, 0x58, 0xff, -+ 0x0d, 0x8f, 0x66, 0x9f, 0x5e, 0x36, 0x0f, 0x03, 0xf2, 0x01, 0xd0, 0x6a, 0x21, 0x7c, 0x39, 0x04, -+ 0x10, 0xbd, 0x30, 0xb0, 0x6f, 0x42, 0x95, 0x59, 0x5e, 0x1b, 0xb4, 0xd4, 0xc4, 0x9a, 0x5b, 0xa8, -+ 0x44, 0x32, 0x18, 0x22, 0x3b, 0x8b, 0x10, 0xfc, 0x53, 0xe5, 0x46, 0x66, 0x56, 0x71, 0xfc, 0x59, -+ 0xb2, 0x30, 0x46, 0xfa, 0xb8, 0x81, 0x4b, 0xd7, 0xea, 0x25, 0xa0, 0xcd, 0x0a, 0xe1, 0x98, 0xc3, -+ 0x27, 0x9a, 0x8f, 0x78, 0xdb, 0x60, 0x08, 0xd7, 0x4a, 0xc7, 0x8d, 0x84, 0x46, 0xd7, 0x01, 0xf3, -+ 0xc2, 0xbb, 0x69, 0x39, 0xbe, 0x78, 0x99, 0x14, 0x60, 0xe9, 0x2d, 0x20, 0xbd, 0x07, 0xa4, 0x55, -+ 0xde, 0x11, 0xd6, 0xba, 0x7c, 0x84, 0xa1, 0x91, 0xdb, 0x30, 0x37, 0x4a, 0xe0, 0x46, 0x36, 0xcd, -+ 0x98, 0x5a, 0xda, 0x84, 0x19, 0x65, 0x61, 0x65, 0x8e, 0x68, 0x39, 0x0c, 0x02, 0x2c, 0x75, 0x73, -+ 0xe1, 0x71, 0xee, 0xb3, 0x9e, 0xb1, 0x61, 0xcf, 0xb7, 0xfc, 0x0b, 0x78, 0xeb, 0xe0, 0x63, 0xe5, -+ 0xee, 0x87, 0x0b, 0x27, 0xc9, 0xab, 0xc4, 0x2c, 0x30, 0x86, 0x3f, 0xdb, 0xc6, 0x8c, 0xcb, 0x9c, -+ 0xe3, 0x5a, 0x6a, 0x40, 0xbc, 0x57, 0x80, 0x8c, 0x4b, 0x89, 0xfa, 0xd8, 0xfd, 0xbd, 0x6e, 0x25, -+ 0x7a, 0xb1, 0x9e, 0x07, 0xcd, 0x48, 0xeb, 0x40, 0x79, 0x1d, 0x76, 0x7c, 0xb1, 0x77, 0xe6, 0x55, -+ 0x30, 0xc5, 0x83, 0x61, 0x7b, 0x80, 0x17, 0x0f, 0x48, 0x62, 0x6c, 0x9d, 0x01, 0x13, 0x8d, 0x8f, -+ 0x05, 0x15, 0x8e, 0x78, 0xe7, 0x82, 0xd4, 0x63, 0x06, 0x0b, 0xfb, 0xcf, 0x94, 0xa6, 0xcc, 0xa0, -+ 0x29, 0x7e, 0x98, 0x50, 0x27, 0x44, 0x98, 0xf1, 0x38, 0xac, 0xc6, 0x16, 0xdb, 0x25, 0x3c, 0xff, -+ 0xc7, 0xcd, 0xbc, 0x4e, 0xca, 0x34, 0x6d, 0x78, 0xf2, 0xcf, 0xa5, 0x2e, 0x50, 0x8e, 0x61, 0xdc, -+ 0x7a, 0x19, 0xeb, 0xf3, 0x22, 0x36, 0xd0, 0x0e, 0xb7, 0xf1, 0x92, 0xfe, 0x08, 0x6c, 0x3f, 0x5b, -+ 0xca, 0x61, 0x7d, 0x9a, 0x39, 0x6e, 0x0b, 0x87, 0xa6, 0x0f, 0x74, 0xc3, 0x20, 0xc2, 0x0c, 0x56, -+ 0x33, 0x43, 0xaf, 0x12, 0xb2, 0xbe, 0xb7, 0xf2, 0x1a, 0xa4, 0x02, 0x70, 0x38, 0x8d, 0x91, 0x18, -+ 0x95, 0x46, 0x61, 0x16, 0xa8, 0x80, 0x81, 0x96, 0xe6, 0x55, 0xd4, 0x50, 0x89, 0xbc, 0x38, 0x7a, -+ 0x9d, 0xc1, 0xe7, 0x9c, 0x09, 0x9b, 0x66, 0x23, 0x63, 0x12, 0xb5, 0xcb, 0x76, 0x8a, 0xda, 0x77, -+ 0x98, 0x5a, 0x3d, 0xf4, 0x40, 0xda, 0x3c, 0x64, 0x8d, 0x33, 0x48, 0x19, 0x80, 0xeb, 0x21, 0x11, -+ 0xe5, 0xbc, 0x3e, 0xa4, 0xeb, 0x55, 0x96, 0xc1, 0x3e, 0x6a, 0xc6, 0x74, 0x61, 0x86, 0x86, 0x29, -+ 0x96, 0xb1, 0x6b, 0x76, 0xc9, 0x72, 0xd9, 0xc9, 0xf2, 0x05, 0x27, 0x12, 0x35, 0xba, 0x52, 0x2d, -+ 0x62, 0xd6, 0x90, 0xe0, 0x18, 0xf6, 0xcd, 0x31, 0x3e, 0x6d, 0x06, 0x53, 0xb7, 0xe6, 0x83, 0xa9, -+ 0xef, 0x7d, 0x44, 0xd4, 0xac, 0xc2, 0x9e, 0x48, 0x16, 0x0d, 0x7e, 0xa4, 0x65, 0x9a, 0xbe, 0x4e, -+ 0xd4, 0xbc, 0x02, 0x7b, 0x97, 0xac, 0xa7, 0xb9, 0xcf, 0xb8, 0x3d, 0xda, 0xd3, 0xec, 0xfb, 0xda, -+ 0xf1, 0xb4, 0x54, 0x5f, 0x71, 0xbb, 0x96, 0x12, 0x3d, 0x9e, 0x06, 0x74, 0x04, 0xd3, 0xe0, 0xbc, -+ 0x2e, 0xa0, 0x04, 0x3b, 0x2e, 0x21, 0x05, 0xe1, 0x71, 0x6a, 0xc5, 0x11, 0xf9, 0x6a, 0x6c, 0x83, -+ 0xcd, 0x76, 0x97, 0xd3, 0xb8, 0x01, 0x1c, 0xdd, 0x08, 0x7e, 0x9a, 0xf2, 0x7e, 0xb8, 0x75, 0xf4, -+ 0x7b, 0xdc, 0x8f, 0x4b, 0x77, 0xcd, 0xc6, 0x3d, 0x5b, 0xc8, 0xa6, 0x2f, 0x30, 0x92, 0x6b, 0x78, -+ 0x4e, 0x4e, 0xf8, 0xd9, 0xa7, 0xd9, 0x2b, 0x28, 0xf0, 0x8e, 0xdb, 0x80, 0x5f, 0xbd, 0x35, 0xb8, -+ 0xfa, 0x36, 0xe0, 0x57, 0x6e, 0x0d, 0x2e, 0xb9, 0x0d, 0xf8, 0xf8, 0xad, 0xc1, 0x47, 0x2f, 0xde, -+ 0x1a, 0xfc, 0xc2, 0x6d, 0x78, 0xbf, 0x0d, 0xf8, 0xd8, 0x6d, 0x78, 0xbf, 0x0d, 0xf8, 0xd9, 0xdb, -+ 0xf0, 0x7e, 0x1b, 0x70, 0xc7, 0x4d, 0xe0, 0x8d, 0x14, 0xef, 0xdf, 0xdd, 0x04, 0xfe, 0x39, 0x06, -+ 0x3f, 0x75, 0x6b, 0xf0, 0x8e, 0xdb, 0x80, 0x8f, 0xdc, 0x1a, 0x5c, 0x7d, 0x1b, 0xf0, 0xe1, 0x5b, -+ 0x83, 0x4b, 0x6e, 0x03, 0x6e, 0xbf, 0x35, 0xb8, 0xfc, 0xca, 0xad, 0xc1, 0x3f, 0xbe, 0x35, 0xb8, -+ 0xed, 0xc2, 0xad, 0xc1, 0x8f, 0x78, 0xc0, 0x29, 0x67, 0x05, 0xe0, 0x1a, 0x0a, 0x5c, 0x40, 0x19, -+ 0x30, 0xe5, 0xf6, 0xcf, 0xdb, 0x02, 0xd7, 0x60, 0x53, 0xb5, 0x18, 0x26, 0x75, 0x6f, 0xc4, 0x2b, -+ 0x81, 0xed, 0x67, 0xbc, 0x48, 0x9e, 0xc0, 0x78, 0xdc, 0x0b, 0x47, 0xa2, 0x74, 0xba, 0x88, 0x61, -+ 0xe0, 0x4d, 0xa3, 0x56, 0xec, 0x53, 0x7a, 0xe7, 0x9c, 0x72, 0xa1, 0xbe, 0xcf, 0x85, 0x1a, 0xc3, -+ 0xb6, 0xc3, 0x85, 0xc7, 0x03, 0x86, 0x9f, 0x4b, 0x8c, 0x3d, 0x5f, 0x30, 0x06, 0xc7, 0xb1, 0xa5, -+ 0x83, 0x46, 0xc2, 0x15, 0x2a, 0x2d, 0xcd, 0xec, 0xc6, 0x81, 0x95, 0x12, 0x7b, 0x4d, 0xc5, 0x37, -+ 0xee, 0x50, 0x69, 0x88, 0x81, 0x1d, 0x0d, 0x1b, 0x81, 0x1b, 0x18, 0x56, 0x50, 0x6e, 0xe0, 0x2d, -+ 0xec, 0x06, 0x4c, 0x78, 0x8d, 0xa6, 0x96, 0x61, 0x6a, 0x25, 0x58, 0xe1, 0xf3, 0x0a, 0xc2, 0xfd, -+ 0xe8, 0x11, 0xe0, 0xe4, 0x1f, 0x16, 0xe7, 0x8d, 0x8a, 0x1b, 0x61, 0x55, 0x6d, 0xf7, 0x7a, 0x35, -+ 0xa6, 0x94, 0x36, 0x28, 0xfb, 0x12, 0x5c, 0x75, 0xfc, 0xb6, 0xe7, 0xcd, 0x5c, 0xad, 0x7e, 0x1b, -+ 0x5c, 0x77, 0xa1, 0x73, 0x38, 0xbd, 0x4a, 0x37, 0x46, 0xd7, 0x4e, 0xa1, 0x03, 0x0f, 0x64, 0xcd, -+ 0xb3, 0x33, 0xdc, 0xa1, 0xdb, 0x42, 0x8a, 0x1f, 0xed, 0x04, 0x3f, 0x54, 0x00, 0x45, 0x39, 0x9d, -+ 0xab, 0x16, 0xde, 0x21, 0xdc, 0xef, 0x02, 0x2c, 0x7a, 0xf6, 0x0f, 0x25, 0x81, 0xc3, 0xea, 0x70, -+ 0x58, 0x38, 0xde, 0xb5, 0x6c, 0x05, 0x7f, 0xc1, 0xbf, 0xb5, 0x78, 0x47, 0x17, 0x5a, 0x31, 0x3a, -+ 0x6a, 0x51, 0xa0, 0xff, 0x6d, 0xb2, 0x78, 0xc1, 0x76, 0xda, 0xc7, 0xa2, 0x80, 0xda, 0xc4, 0x2b, -+ 0x13, 0xa2, 0x8e, 0xd3, 0x87, 0x30, 0x44, 0x0f, 0xa6, 0x61, 0xf9, 0xf7, 0x24, 0xde, 0x34, 0xb4, -+ 0x05, 0x8e, 0x56, 0x79, 0x62, 0xb0, 0xe2, 0x2e, 0x0f, 0x9f, 0x4b, 0x17, 0x51, 0x88, 0xed, 0x37, -+ 0x23, 0x9e, 0x37, 0x7c, 0x13, 0xe2, 0xab, 0x4e, 0xc4, 0x1f, 0xdc, 0x8c, 0x38, 0x7b, 0x8e, 0x07, -+ 0xb1, 0xc9, 0x86, 0x26, 0x62, 0x45, 0xd2, 0x17, 0x87, 0xc5, 0x74, 0x5c, 0xbd, 0xe4, 0xb3, 0xdf, -+ 0xbd, 0x24, 0x48, 0xfd, 0x53, 0x88, 0xbd, 0x6a, 0xaf, 0xb4, 0x42, 0xe5, 0xd0, 0x61, 0x3b, 0x1c, -+ 0x17, 0x49, 0xad, 0x1e, 0x41, 0x77, 0xe6, 0x0c, 0x62, 0x7e, 0x48, 0xac, 0x52, 0xc5, 0xb7, 0xb7, -+ 0x18, 0xc7, 0x96, 0x6c, 0x8a, 0x07, 0xec, 0x08, 0x17, 0x99, 0xa7, 0x8e, 0xe3, 0x74, 0xbf, 0x2e, -+ 0x4a, 0x0e, 0xc5, 0x4c, 0x6a, 0x1c, 0x4b, 0x74, 0x11, 0x9b, 0xff, 0xe3, 0x38, 0xb6, 0xf5, 0x53, -+ 0xe8, 0x70, 0xe4, 0xb6, 0x68, 0x70, 0x8a, 0x48, 0xc4, 0x4d, 0xba, 0xda, 0x79, 0xe7, 0x10, 0xe6, -+ 0x0d, 0x87, 0x81, 0xd7, 0x0d, 0xa7, 0x26, 0xf3, 0x16, 0x73, 0x96, 0x7e, 0xa3, 0xae, 0xf6, 0x3a, -+ 0x11, 0x7f, 0x7d, 0x33, 0x62, 0x7a, 0xda, 0x8d, 0x88, 0xbd, 0x72, 0x29, 0xc4, 0xda, 0x9b, 0x11, -+ 0xdf, 0xe1, 0xb8, 0x09, 0x71, 0xa7, 0x13, 0xf1, 0x37, 0x37, 0x23, 0x5e, 0x7c, 0x13, 0xe2, 0x9d, -+ 0x4e, 0xc4, 0xe6, 0x9b, 0x11, 0x6f, 0x30, 0x4e, 0x20, 0x0e, 0xe1, 0x3b, 0x75, 0x48, 0xed, 0x52, -+ 0xfc, 0x52, 0xa8, 0xd1, 0xbd, 0x8e, 0xad, 0x0d, 0x6f, 0x3e, 0xfa, 0xdc, 0x2b, 0xa6, 0xe4, 0xb4, -+ 0x16, 0x96, 0xe0, 0xb5, 0xfc, 0x4c, 0xb9, 0xbf, 0x8c, 0x45, 0x9f, 0xd0, 0x60, 0x77, 0xf6, 0x31, -+ 0x8c, 0xf8, 0x22, 0xd5, 0xed, 0x16, 0x33, 0x61, 0xe7, 0x52, 0x3b, 0xe6, 0x01, 0xbb, 0xd3, 0xeb, -+ 0x7d, 0xdf, 0x4e, 0x9d, 0x09, 0xf1, 0xd5, 0x02, 0x4a, 0x8e, 0x7e, 0x88, 0x5c, 0x34, 0x6b, 0x32, -+ 0x81, 0x7d, 0x5d, 0xf0, 0x10, 0xb0, 0xaf, 0x79, 0x36, 0xc7, 0x81, 0xa3, 0x2b, 0x2b, 0x80, 0x32, -+ 0x9f, 0x83, 0xe8, 0x6a, 0x9e, 0x70, 0xbe, 0x1a, 0xed, 0x15, 0x42, 0xc8, 0x35, 0xc5, 0xbc, 0xe6, -+ 0x76, 0x60, 0xf3, 0x52, 0x50, 0xbb, 0xae, 0x83, 0x93, 0xcd, 0xcb, 0x3d, 0xb3, 0xfd, 0xbf, 0x41, -+ 0x58, 0x12, 0x7a, 0x3c, 0xf0, 0x1b, 0xcc, 0xba, 0x08, 0x12, 0x30, 0xd7, 0x49, 0x17, 0x81, 0x34, -+ 0xdb, 0x75, 0x77, 0x62, 0x0a, 0x85, 0xe3, 0x82, 0x34, 0x08, 0xd4, 0x48, 0x1c, 0xcb, 0x11, 0x54, -+ 0x2c, 0x67, 0x04, 0x6a, 0x31, 0x8c, 0x8c, 0x09, 0x85, 0xf8, 0xab, 0x30, 0x62, 0x2a, 0xec, 0x97, -+ 0x4e, 0x51, 0x88, 0x4b, 0x86, 0x8c, 0x4b, 0x02, 0xec, 0xd2, 0x16, 0x5d, 0xc3, 0x32, 0x94, 0x4a, -+ 0x7d, 0xc0, 0xac, 0x1d, 0xcc, 0x1f, 0xdc, 0x66, 0xad, 0xd9, 0x28, 0xf3, 0x01, 0x0a, 0xce, 0xe3, -+ 0xf7, 0x84, 0x1e, 0x3a, 0x3f, 0xf6, 0x9a, 0xe1, 0x9b, 0x4b, 0xdc, 0xe5, 0xd1, 0xa3, 0xe9, 0x30, -+ 0x5e, 0x76, 0x7c, 0xb4, 0xdf, 0x4f, 0x35, 0x7a, 0x2a, 0x86, 0x31, 0x35, 0x65, 0x52, 0xe5, 0x55, -+ 0x1a, 0x01, 0x74, 0x7a, 0xcb, 0x96, 0x3b, 0xa1, 0xa8, 0x4a, 0xad, 0xff, 0x84, 0x00, 0xe2, 0x31, -+ 0xf8, 0xa6, 0x77, 0xb8, 0x11, 0x4f, 0x1e, 0xd7, 0x37, 0x83, 0x2a, 0x30, 0x93, 0xe2, 0xb3, 0xb7, -+ 0xd0, 0xd2, 0x9b, 0x41, 0x51, 0xea, 0x6e, 0xd8, 0x3a, 0x6a, 0xea, 0x64, 0x7e, 0x1e, 0xee, 0xd7, -+ 0x86, 0x8f, 0x33, 0x40, 0x15, 0x1b, 0xd8, 0x51, 0x3a, 0x3c, 0x08, 0x34, 0xc0, 0x17, 0x8c, 0x07, -+ 0xe1, 0x94, 0x0c, 0x13, 0xc9, 0xb2, 0x4e, 0x0c, 0x42, 0x4d, 0x22, 0x96, 0xdf, 0x60, 0xf8, 0xd7, -+ 0x2d, 0x94, 0x53, 0x23, 0xf1, 0x5b, 0x96, 0x09, 0xba, 0x7f, 0x87, 0x3d, 0x53, 0xe7, 0xd6, 0xbd, -+ 0xd3, 0x7a, 0x3e, 0x67, 0xcf, 0x02, 0xc4, 0xce, 0xe3, 0x3b, 0x04, 0x84, 0x1b, 0xfd, 0xde, 0x74, -+ 0xbe, 0x7b, 0xa4, 0xdd, 0xf6, 0xb3, 0x6e, 0x0c, 0x5b, 0xb9, 0xea, 0xf0, 0xf5, 0xa9, 0xb6, 0x95, -+ 0x41, 0x5d, 0xeb, 0xcc, 0xfe, 0x14, 0xdb, 0x93, 0x2e, 0x2b, 0x7f, 0x42, 0x27, 0x1d, 0x8e, 0x20, -+ 0x8f, 0x4e, 0x6c, 0xb1, 0xb7, 0xd7, 0x89, 0x5f, 0xa8, 0x19, 0x6b, 0xa3, 0xee, 0xe7, 0x5b, 0xe8, -+ 0xc4, 0x2f, 0x34, 0xc1, 0xb6, 0xbb, 0x1f, 0xba, 0x76, 0x2a, 0x79, 0x19, 0x1e, 0x9d, 0x68, 0x78, -+ 0x98, 0xb9, 0x99, 0x7b, 0xf5, 0x37, 0x18, 0xc9, 0x8a, 0xd0, 0x17, 0x30, 0x0e, 0xa3, 0xee, 0x9f, -+ 0xb7, 0x18, 0xbc, 0xb6, 0x6d, 0x79, 0x5a, 0x22, 0x17, 0xc4, 0x5c, 0x25, 0xe8, 0xb4, 0x7a, 0x0c, -+ 0x90, 0xf9, 0x32, 0x36, 0x80, 0xe7, 0x0c, 0x33, 0x6f, 0x54, 0xe7, 0x2b, 0x6a, 0x8c, 0x44, 0x11, -+ 0xa2, 0xba, 0x01, 0x4d, 0xe7, 0x92, 0x65, 0x26, 0x62, 0x29, 0xa0, 0x99, 0xc7, 0x9b, 0x8c, 0xe6, -+ 0x25, 0x8c, 0xe6, 0x49, 0xbd, 0x07, 0xcd, 0xd4, 0xb9, 0xb9, 0x8d, 0x9a, 0x70, 0x1b, 0xc9, 0x1b, -+ 0xa4, 0x3b, 0x1d, 0x9a, 0xbe, 0x9b, 0x95, 0x98, 0x08, 0x4a, 0x9a, 0xd9, 0x4e, 0xfb, 0x44, 0x14, -+ 0xd0, 0x68, 0xbb, 0x86, 0x97, 0x12, 0x33, 0x96, 0xab, 0x81, 0xb7, 0xff, 0x46, 0xd3, 0x1c, 0x5c, -+ 0xf2, 0x0f, 0x8c, 0xa6, 0x12, 0xcf, 0x84, 0x9b, 0x86, 0xf8, 0x4d, 0x9b, 0x7f, 0x85, 0xd2, 0x1f, -+ 0x7a, 0xec, 0x56, 0xcc, 0x1c, 0xf7, 0x8c, 0x01, 0x31, 0x0b, 0x33, 0x74, 0xde, 0xa9, 0xb0, 0xc9, -+ 0xa3, 0x59, 0x61, 0xc5, 0x8e, 0x80, 0x64, 0x0f, 0xde, 0x80, 0xe6, 0xed, 0x4b, 0x41, 0xd5, 0x26, -+ 0x8c, 0xe6, 0x3b, 0x18, 0x32, 0xd8, 0xaa, 0x04, 0x2f, 0xcb, 0x77, 0xaf, 0x25, 0xbb, 0xf5, 0x6b, -+ 0xf1, 0x50, 0x6e, 0x16, 0x62, 0x94, 0x36, 0xcb, 0x84, 0xaa, 0xde, 0x23, 0x82, 0x5f, 0x74, 0xf8, -+ 0xbb, 0x72, 0x22, 0xb0, 0x59, 0x29, 0xf1, 0xe5, 0x5b, 0x71, 0xd7, 0xa5, 0xf9, 0x1e, 0x0b, 0x39, -+ 0x5a, 0xd9, 0xd3, 0x14, 0x7e, 0xb5, 0xdf, 0x4d, 0xec, 0x23, 0x5d, 0xe8, 0x0d, 0xc8, 0x8f, 0xd9, -+ 0x1e, 0xc0, 0xc8, 0x8b, 0x3d, 0xc8, 0x61, 0x7f, 0xf6, 0x56, 0xe9, 0x2e, 0x58, 0x2c, 0x12, 0xb6, -+ 0x59, 0xcc, 0xd4, 0xfe, 0xcc, 0x88, 0x20, 0x2e, 0xf9, 0xa9, 0x80, 0xeb, 0xe5, 0x89, 0x4b, 0xb8, -+ 0x3e, 0x7f, 0x76, 0xd0, 0xdf, 0xc4, 0x59, 0x08, 0x55, 0x74, 0x29, 0xad, 0x7b, 0x39, 0xbf, 0x0e, -+ 0x36, 0x50, 0x3b, 0xa3, 0xe3, 0x60, 0x9d, 0x51, 0x69, 0x61, 0xb3, 0x3a, 0x60, 0x4e, 0x80, 0x8d, -+ 0x6b, 0x5a, 0x3c, 0xde, 0xb8, 0xea, 0xd5, 0xb0, 0x71, 0x5d, 0xc8, 0xa9, 0x96, 0x84, 0x81, 0xfb, -+ 0x5c, 0xc7, 0x57, 0xcb, 0x9d, 0xfb, 0x51, 0x1a, 0xde, 0x65, 0x1d, 0xf6, 0x0b, 0xf2, 0x8c, 0x49, -+ 0x4d, 0xc4, 0x16, 0x09, 0x6f, 0x63, 0xa2, 0xdb, 0x99, 0x7f, 0xf6, 0x12, 0x06, 0x4f, 0x51, 0xbb, -+ 0xe7, 0xcb, 0x87, 0xbb, 0x58, 0x30, 0x20, 0xab, 0x98, 0xf3, 0xf1, 0xbe, 0xf2, 0x02, 0x04, 0x0e, -+ 0xec, 0xd1, 0xf8, 0xca, 0x42, 0x4c, 0x56, 0x02, 0x64, 0x61, 0xf3, 0x4d, 0x93, 0xe0, 0xcd, 0xf7, -+ 0xfb, 0xf9, 0xbd, 0x7a, 0xcf, 0xe6, 0xfb, 0xe4, 0x99, 0x14, 0x25, 0x11, 0xef, 0x0e, 0x9d, 0x96, -+ 0xf0, 0x5b, 0x99, 0x0c, 0x9b, 0xf5, 0xe9, 0x3f, 0x7c, 0x35, 0x82, 0x37, 0x38, 0x09, 0x7a, 0x6a, -+ 0x83, 0xe3, 0x8c, 0xcd, 0x7e, 0x92, 0x79, 0xaf, 0xd6, 0xee, 0x74, 0xe5, 0x43, 0x5c, 0x61, 0x60, -+ 0x99, 0x0f, 0x76, 0xae, 0xd3, 0x2a, 0x6d, 0x3e, 0x38, 0xae, 0xa3, 0x1b, 0xf4, 0x72, 0xe9, 0xfe, -+ 0x31, 0x7a, 0x82, 0x12, 0x88, 0x0e, 0xfa, 0x64, 0x47, 0x23, 0xd5, 0x1e, 0x15, 0x68, 0xe0, 0x4a, -+ 0x21, 0x0e, 0xe1, 0xc6, 0x50, 0xfe, 0x1d, 0xaa, 0x60, 0x6b, 0xbd, 0xde, 0x83, 0x82, 0xa2, 0xd5, -+ 0xf1, 0x87, 0x71, 0x2b, 0x60, 0xdd, 0xb7, 0x88, 0x86, 0xf3, 0x32, 0xf4, 0x42, 0x60, 0x4a, 0x33, -+ 0xa6, 0xc8, 0xb8, 0x5c, 0xd0, 0xeb, 0xce, 0x0a, 0x35, 0x2f, 0xec, 0x57, 0x24, 0x00, 0x7e, 0x6f, -+ 0xf8, 0xd3, 0xe2, 0x02, 0x16, 0x3a, 0xfc, 0xdd, 0x2f, 0x24, 0xa3, 0xa3, 0x37, 0xb7, 0x9f, 0x54, -+ 0xd7, 0xb0, 0xa9, 0xbb, 0x6f, 0xf8, 0xde, 0xc3, 0x27, 0x34, 0x7c, 0xef, 0x41, 0x4e, 0xdd, 0x7b, -+ 0xf0, 0x9a, 0x72, 0xef, 0x21, 0x6a, 0x45, 0xe4, 0xe2, 0x7b, 0x52, 0x8b, 0x57, 0xc6, 0xbe, 0xb8, -+ 0x22, 0xee, 0xdc, 0x8a, 0xa4, 0xa6, 0x7b, 0xe6, 0x1f, 0xbe, 0x67, 0x61, 0xd4, 0xca, 0xec, 0xa9, -+ 0xf7, 0x24, 0xe6, 0x23, 0xd7, 0x3d, 0x09, 0x96, 0x91, 0x81, 0x6f, 0x65, 0x51, 0xf7, 0x12, 0x3c, -+ 0x77, 0x12, 0x10, 0x7a, 0xb5, 0xf3, 0x4c, 0xe0, 0x0a, 0x5a, 0x63, 0xd3, 0x5f, 0x72, 0xd8, 0x76, -+ 0x94, 0x86, 0xb2, 0xe5, 0x42, 0xa3, 0x92, 0x40, 0x75, 0xb0, 0x8b, 0x0b, 0xd4, 0xe5, 0xf6, 0xe8, -+ 0xcb, 0x38, 0x87, 0x76, 0xa8, 0xa2, 0xd6, 0xd9, 0x52, 0x8c, 0xab, 0x17, 0x5b, 0xfd, 0xde, 0x50, -+ 0x85, 0x9e, 0x3c, 0x30, 0x5d, 0xb9, 0x7d, 0x55, 0xbe, 0xb7, 0xfa, 0x3e, 0xdf, 0xee, 0xfe, 0xd9, -+ 0x07, 0xb6, 0x49, 0x5f, 0xe5, 0xac, 0x3c, 0x1d, 0xb8, 0x56, 0xd1, 0x7e, 0x2f, 0x43, 0x7a, 0x89, -+ 0xf7, 0x3a, 0xce, 0xf4, 0xb7, 0x37, 0x32, 0x3f, 0xb7, 0x0f, 0x44, 0xe9, 0x73, 0x8b, 0xde, 0x18, -+ 0x0f, 0xfe, 0x5a, 0x88, 0xac, 0xdd, 0xd9, 0x4a, 0xee, 0x77, 0x81, 0xbf, 0x9e, 0x16, 0x33, 0x70, -+ 0xb2, 0x7c, 0xd6, 0xe8, 0xfb, 0x59, 0xa5, 0x83, 0x54, 0x92, 0x5b, 0x1e, 0xf5, 0xc1, 0x2a, 0xce, -+ 0xae, 0xad, 0x54, 0xf2, 0x7b, 0x3f, 0x4e, 0xae, 0x97, 0x5a, 0x5c, 0xed, 0xbd, 0x8e, 0xc0, 0xac, -+ 0x3e, 0x67, 0x72, 0x7d, 0xd6, 0xc1, 0xf7, 0xf5, 0xa5, 0xce, 0xe4, 0xfa, 0xd3, 0xe6, 0xed, 0xcf, -+ 0x58, 0xb6, 0x3f, 0x6b, 0xdd, 0xbe, 0xb7, 0x9d, 0x14, 0xd6, 0x48, 0xe5, 0xe4, 0x79, 0x95, 0x5e, -+ 0xc6, 0x7a, 0x4d, 0x2a, 0x57, 0xd1, 0x57, 0xe1, 0xfb, 0x84, 0xce, 0xfc, 0xa4, 0xff, 0x41, 0x16, -+ 0x5a, 0xcc, 0x73, 0xcd, 0x61, 0x63, 0xd6, 0x97, 0x78, 0x0e, 0x3f, 0x8c, 0xfd, 0x94, 0x10, 0x4f, -+ 0x99, 0xfd, 0x9e, 0x34, 0xa2, 0x1f, 0xaf, 0x0e, 0xb7, 0x8e, 0x63, 0x37, 0x2b, 0xa3, 0x42, 0x27, -+ 0x63, 0x7a, 0xbb, 0x21, 0xc4, 0x30, 0x3d, 0x85, 0xf1, 0xa4, 0x67, 0xd8, 0xf2, 0xe5, 0x02, 0xfd, -+ 0x44, 0x2c, 0x7f, 0x9f, 0x19, 0x7b, 0x7b, 0x1d, 0xb5, 0xed, 0x2b, 0x18, 0x30, 0x73, 0xbc, 0x17, -+ 0x47, 0xe1, 0x6c, 0xdc, 0x2b, 0x70, 0x6d, 0xdf, 0xbd, 0x9c, 0x71, 0x99, 0xa0, 0x85, 0x4b, 0x37, -+ 0xbf, 0x61, 0x90, 0xb1, 0xeb, 0xc0, 0xcc, 0x8d, 0xdb, 0xcc, 0x7e, 0xc8, 0x95, 0x00, 0x5b, 0x3e, -+ 0x7b, 0x50, 0x3e, 0xe1, 0x81, 0x4f, 0x4f, 0xa2, 0xac, 0x02, 0x1f, 0xd5, 0x91, 0xf8, 0x0a, 0xe6, -+ 0x8a, 0x0c, 0xe2, 0xe8, 0xe5, 0xfd, 0x3c, 0x79, 0xc4, 0xa0, 0x3c, 0xd1, 0x03, 0x9b, 0xc4, 0x6b, -+ 0xfb, 0x0a, 0x4b, 0x30, 0x80, 0xe7, 0xf2, 0x2c, 0xc2, 0xed, 0x9b, 0x5a, 0xf5, 0x4f, 0x51, 0xcb, -+ 0x0f, 0x05, 0x28, 0x0a, 0xe6, 0xeb, 0xe5, 0x4d, 0xbc, 0x3f, 0xe2, 0x04, 0x02, 0xeb, 0x05, 0x4c, -+ 0xd4, 0x19, 0x3d, 0xc7, 0x6a, 0xb6, 0x62, 0x3a, 0x22, 0x97, 0xdc, 0x91, 0x1d, 0x17, 0x5b, 0xe5, -+ 0xd5, 0xa1, 0x8a, 0xa5, 0x48, 0xe6, 0xf7, 0x2d, 0xb8, 0xbc, 0xc8, 0x14, 0x9c, 0x67, 0x4c, 0x25, -+ 0x8d, 0x5a, 0x14, 0xcd, 0x47, 0x7e, 0x06, 0x09, 0xb0, 0xb2, 0x9f, 0x78, 0x8b, 0x81, 0xae, 0xd4, -+ 0xa7, 0x5d, 0xb6, 0x7a, 0xc3, 0x04, 0x1a, 0x16, 0xad, 0xa1, 0xa1, 0x6d, 0xde, 0x2d, 0x32, 0x52, -+ 0x0b, 0x16, 0x3e, 0x77, 0xef, 0x1e, 0xe4, 0xde, 0xaa, 0x2b, 0x75, 0xff, 0xc2, 0xaa, 0x50, 0xe3, -+ 0x04, 0x97, 0x2c, 0x0a, 0x99, 0xdf, 0xa0, 0xef, 0x63, 0x57, 0x02, 0xfd, 0xbd, 0x03, 0x27, 0xfc, -+ 0x90, 0xfd, 0x43, 0xf9, 0x17, 0xf4, 0x34, 0x98, 0x25, 0xcb, 0xfb, 0x36, 0x72, 0x11, 0x15, 0x83, -+ 0x9e, 0x4e, 0xd9, 0x06, 0x9d, 0xc5, 0xc3, 0xcf, 0x49, 0x51, 0x0e, 0x15, 0xe0, 0x97, 0xcb, 0x38, -+ 0x72, 0x44, 0x65, 0x97, 0x4e, 0xc8, 0x7c, 0x30, 0x29, 0x2d, 0x90, 0x8a, 0x15, 0x41, 0x34, 0x61, -+ 0xff, 0x7c, 0x94, 0xcb, 0x4c, 0x82, 0xde, 0xca, 0xc2, 0x52, 0x2a, 0xbf, 0x46, 0x4d, 0x71, 0xde, -+ 0xb0, 0x66, 0x8d, 0x67, 0x8e, 0xea, 0x9a, 0x12, 0xd3, 0xa8, 0x7d, 0xe3, 0x33, 0x1e, 0xf2, 0x91, -+ 0xbc, 0xa2, 0x49, 0xe4, 0x43, 0x99, 0x2b, 0xfe, 0x23, 0x79, 0x9d, 0x93, 0xfc, 0x69, 0x32, 0xe0, -+ 0x46, 0xf2, 0xb9, 0xcc, 0xb9, 0x93, 0xc9, 0xcb, 0x6f, 0x24, 0x6f, 0x63, 0xce, 0x75, 0x6e, 0x5b, -+ 0x9f, 0xf5, 0x90, 0x7f, 0x89, 0xb7, 0x71, 0x12, 0xf9, 0xfb, 0x99, 0xe9, 0xff, 0xad, 0xf4, 0x97, -+ 0x51, 0xe0, 0x8d, 0xe4, 0x77, 0x32, 0xd3, 0x7e, 0x53, 0x7a, 0xa2, 0x39, 0xa3, 0x9b, 0x22, 0x4f, -+ 0xa5, 0xc9, 0x94, 0x40, 0xa3, 0x02, 0x86, 0x47, 0x3f, 0xf7, 0x99, 0xa7, 0x90, 0xf6, 0x8c, 0x92, -+ 0x00, 0xbf, 0xeb, 0x35, 0x1f, 0x28, 0x25, 0x89, 0x54, 0xe0, 0x8c, 0x7b, 0x7d, 0xb0, 0x4b, 0x96, -+ 0x5a, 0x99, 0x7b, 0x5d, 0x2d, 0xdd, 0x2a, 0xca, 0x3d, 0x17, 0x00, 0x98, 0x9a, 0xae, 0x0f, 0xd0, -+ 0x63, 0x2f, 0x9f, 0x5f, 0xb8, 0xc5, 0x93, 0x2f, 0x8e, 0x0a, 0xff, 0x27, 0xc2, 0x51, 0x17, 0x3b, -+ 0xb5, 0xdd, 0x29, 0x9d, 0x63, 0x50, 0x16, 0xa0, 0x19, 0x30, 0xab, 0x76, 0x9d, 0x8f, 0x42, 0xa4, -+ 0x81, 0x00, 0x8f, 0x95, 0x6c, 0x78, 0xc0, 0x8a, 0x71, 0xc8, 0x01, 0x07, 0x9f, 0x05, 0x5b, 0xe2, -+ 0xc7, 0x64, 0xcc, 0xe7, 0xa5, 0x68, 0xb9, 0xf7, 0x72, 0xc2, 0xdd, 0x12, 0x2f, 0xc2, 0x59, 0x38, -+ 0xf3, 0x08, 0x95, 0xa2, 0x9b, 0xad, 0x85, 0xd5, 0xd3, 0x16, 0xda, 0xb7, 0x14, 0x79, 0x72, 0x92, -+ 0x96, 0x81, 0xcb, 0x1e, 0x3b, 0xf5, 0xca, 0xdc, 0xdb, 0x4b, 0x45, 0x10, 0x0d, 0x54, 0x3e, 0x2b, -+ 0x17, 0x59, 0xdf, 0xb7, 0xcd, 0x72, 0xe0, 0x1e, 0xc7, 0xc0, 0x54, 0xa9, 0x65, 0x20, 0x98, 0x7d, -+ 0x40, 0x8b, 0xe3, 0x31, 0xc3, 0x72, 0x57, 0x2c, 0x23, 0x4e, 0xf4, 0x82, 0x38, 0x44, 0x1c, 0xce, -+ 0xf0, 0x2c, 0x0c, 0xac, 0xd1, 0x20, 0xbb, 0x1a, 0xb3, 0x39, 0x0a, 0x73, 0xd2, 0xbd, 0x7c, 0x4d, -+ 0x16, 0xec, 0xc5, 0x69, 0xeb, 0x74, 0x78, 0x11, 0x66, 0x2b, 0x5d, 0x82, 0x91, 0x67, 0x54, 0x1e, -+ 0xbd, 0x3d, 0x61, 0xa8, 0xa1, 0x44, 0x4a, 0x07, 0xe5, 0x38, 0x85, 0x9c, 0xb1, 0x59, 0x07, 0xc2, -+ 0x1c, 0x32, 0x6c, 0xb5, 0xba, 0x5b, 0xbc, 0x58, 0xa0, 0xd5, 0xf8, 0xd8, 0xcd, 0x38, 0x07, 0x29, -+ 0x14, 0x5c, 0xa2, 0xa4, 0x18, 0x07, 0x29, 0xca, 0x65, 0x8c, 0x2c, 0x04, 0x73, 0xe7, 0xc0, 0xc1, -+ 0x1e, 0x8f, 0x73, 0xa9, 0xf1, 0x1b, 0xa5, 0x62, 0x67, 0x03, 0xce, 0x5e, 0x22, 0x70, 0x04, 0x9a, -+ 0x07, 0x91, 0x00, 0xa2, 0x4c, 0xcb, 0x92, 0x1f, 0xfc, 0x90, 0x73, 0x09, 0xfe, 0x51, 0xbe, 0x10, -+ 0xc7, 0xe2, 0x36, 0xb3, 0x27, 0x1e, 0x6c, 0xa7, 0xe3, 0x78, 0x90, 0x77, 0x4e, 0xeb, 0x6e, 0x09, -+ 0xc6, 0x51, 0xe1, 0x5a, 0x25, 0x25, 0x9e, 0x2e, 0x3c, 0xb7, 0xe0, 0xb7, 0xc4, 0x5b, 0x1c, 0xdd, -+ 0x2f, 0x79, 0xa5, 0x09, 0x2f, 0x44, 0x2b, 0x69, 0xe8, 0xe3, 0x80, 0x13, 0xc4, 0x06, 0x3e, 0xef, -+ 0xb3, 0xd2, 0x75, 0x34, 0x97, 0x1d, 0xac, 0x54, 0xb2, 0xf7, 0xba, 0x86, 0xc5, 0xb9, 0x58, 0xb7, -+ 0x34, 0xe2, 0xfc, 0xf8, 0x4a, 0x89, 0x67, 0xb1, 0x4e, 0xe5, 0xfc, 0x28, 0xf3, 0x03, 0x57, 0xb1, -+ 0x89, 0x9f, 0x80, 0xef, 0x6c, 0x64, 0x93, 0x0c, 0x2b, 0x1e, 0x83, 0xa3, 0x30, 0x6a, 0xae, 0xc0, -+ 0x63, 0x41, 0x87, 0xe0, 0xf1, 0x04, 0x97, 0x3c, 0xa6, 0x97, 0xa5, 0x56, 0xd7, 0x10, 0x59, 0x3b, -+ 0x7a, 0xa9, 0x7d, 0x8b, 0x1c, 0x07, 0x3f, 0x4e, 0xd9, 0x7c, 0x7f, 0xc1, 0x31, 0xd9, 0x7a, 0xb6, -+ 0xc6, 0xc4, 0x6d, 0x04, 0x6b, 0x88, 0x15, 0x0d, 0xb8, 0x24, 0xb5, 0x32, 0x0f, 0x53, 0x59, 0xe3, -+ 0x5f, 0x3b, 0xa2, 0xc0, 0x78, 0x3f, 0x13, 0xad, 0x73, 0xfa, 0x17, 0x0e, 0x35, 0x10, 0x7b, 0x9e, -+ 0xf2, 0xf8, 0x97, 0x23, 0x05, 0x11, 0x69, 0x75, 0xed, 0xee, 0xe9, 0xa5, 0x48, 0x3f, 0xc5, 0xc8, -+ 0xc4, 0x1a, 0x3e, 0x0e, 0x1a, 0x76, 0x26, 0x7e, 0xdf, 0xe8, 0x4b, 0x3f, 0x9b, 0x9d, 0x49, 0x25, -+ 0xfb, 0x0b, 0xdc, 0x46, 0xcd, 0x79, 0xdc, 0x41, 0x5d, 0x99, 0x7f, 0x85, 0xb1, 0x70, 0xe2, 0x36, -+ 0x80, 0xc7, 0xdc, 0x53, 0x39, 0xb3, 0xaa, 0xfd, 0x7f, 0x53, 0x40, 0xcd, 0x71, 0x9f, 0x0d, 0x52, -+ 0x1f, 0x97, 0xbb, 0xbc, 0x52, 0xaf, 0x65, 0x1f, 0xcc, 0xd9, 0xee, 0xb2, 0x10, 0xc4, 0x63, 0x25, -+ 0xa9, 0xa1, 0xcd, 0xc4, 0x7e, 0x73, 0xbc, 0xd9, 0x9d, 0x1a, 0xa7, 0xc6, 0x47, 0x7c, 0xc9, 0x0f, -+ 0x4c, 0xd1, 0x9e, 0x40, 0xf1, 0x21, 0xc3, 0xd4, 0x68, 0x4e, 0x6a, 0x29, 0x44, 0xd0, 0x6f, 0x52, -+ 0xdb, 0xaa, 0xf6, 0xab, 0xb6, 0xbb, 0xa9, 0x99, 0xd2, 0xf8, 0x6a, 0xd7, 0x24, 0x03, 0x09, 0x16, -+ 0x76, 0x35, 0xdd, 0x49, 0x49, 0x50, 0xe8, 0x91, 0x6d, 0xaf, 0x53, 0xb6, 0x45, 0xfd, 0x8b, 0x73, -+ 0x6f, 0x29, 0xdb, 0xc2, 0xdd, 0xbf, 0x4d, 0xad, 0xf3, 0x92, 0xdf, 0x83, 0x1a, 0x3f, 0x8f, 0x6c, -+ 0x24, 0xf7, 0xbd, 0xd2, 0x49, 0xb2, 0x25, 0x62, 0xd9, 0xa4, 0xdc, 0x1e, 0xcd, 0xf6, 0xa9, 0xb2, -+ 0x25, 0x06, 0x65, 0xe0, 0x2b, 0x4a, 0xee, 0x07, 0xf6, 0x9d, 0xf8, 0x8a, 0xee, 0x06, 0xab, 0x94, -+ 0xcc, 0x39, 0xff, 0x9b, 0x56, 0x79, 0x6e, 0x6e, 0x4d, 0x6f, 0x40, 0x11, 0xbe, 0xd9, 0x82, 0x60, -+ 0x51, 0xfd, 0x40, 0x90, 0xe0, 0x1b, 0x9a, 0x9a, 0xe8, 0x9a, 0x06, 0xce, 0x8c, 0xfc, 0x07, 0x82, -+ 0xc4, 0xc4, 0xd0, 0x79, 0x89, 0x38, 0xa1, 0xdf, 0xe2, 0x76, 0x2a, 0x33, 0x4e, 0xe9, 0x63, 0xf8, -+ 0xe8, 0xcd, 0x66, 0x8a, 0x0f, 0x0e, 0xa6, 0x26, 0xa3, 0xa8, 0xa9, 0xe3, 0xaf, 0xfe, 0x26, 0xb5, -+ 0xa8, 0x79, 0x67, 0x69, 0x41, 0x8d, 0x2e, 0x6a, 0x68, 0xdf, 0x4e, 0xbc, 0xa2, 0xbd, 0x71, 0x1c, -+ 0xa2, 0x64, 0x7b, 0x3a, 0xd6, 0x97, 0x79, 0x3d, 0xf6, 0xb0, 0xae, 0xfd, 0xb5, 0xd1, 0xbd, 0xbf, -+ 0x76, 0xcd, 0xd8, 0xcb, 0x61, 0x75, 0xd5, 0x5e, 0x05, 0x89, 0x4e, 0x0f, 0x84, 0xbe, 0x3b, 0x2c, -+ 0x04, 0xfb, 0x1c, 0x19, 0x84, 0xa0, 0x2e, 0x5e, 0xd8, 0x38, 0x60, 0x6e, 0xdc, 0xb5, 0x24, 0x1a, -+ 0x39, 0x68, 0x7a, 0x98, 0x54, 0x23, 0xdd, 0xd0, 0x78, 0x92, 0xbc, 0xc2, 0x2c, 0x07, 0xec, 0x96, -+ 0x44, 0x67, 0x0c, 0x4e, 0xdd, 0x30, 0x60, 0x96, 0xa7, 0x25, 0x4d, 0xac, 0xd0, 0x1f, 0x3e, 0x30, -+ 0xa6, 0x5f, 0xed, 0x9a, 0x2d, 0xb2, 0xf7, 0xa5, 0x46, 0x58, 0x06, 0xe6, 0x86, 0x42, 0x40, 0x78, -+ 0x3f, 0x73, 0x0d, 0x75, 0x67, 0x0a, 0x0b, 0xba, 0x89, 0x79, 0x3f, 0x0c, 0xa1, 0xb6, 0xae, 0x80, -+ 0x83, 0x7b, 0x17, 0x41, 0xef, 0x60, 0x0e, 0xec, 0xbb, 0x7a, 0x96, 0xcc, 0xf0, 0x47, 0x1a, 0xc2, -+ 0x86, 0x1b, 0xd7, 0x42, 0x63, 0x85, 0x30, 0xf7, 0xcc, 0x1c, 0xcc, 0x8f, 0xa8, 0x68, 0x62, 0xbe, -+ 0xd0, 0x52, 0xc5, 0x4f, 0x7b, 0xe6, 0xcb, 0x67, 0x7d, 0x09, 0xfd, 0xb6, 0x39, 0xae, 0xf5, 0xa0, -+ 0x3b, 0x7d, 0x8c, 0xfe, 0x7c, 0x62, 0xec, 0xba, 0x17, 0x76, 0xc3, 0x31, 0x19, 0x88, 0x3d, 0xf1, -+ 0xfc, 0xab, 0x74, 0x70, 0x5e, 0xb1, 0x31, 0xdb, 0xc0, 0x6b, 0x59, 0x97, 0x44, 0x03, 0x76, 0x1d, -+ 0xec, 0xa6, 0x0e, 0x6f, 0x4a, 0xc1, 0x24, 0x85, 0x40, 0xd2, 0x3a, 0x80, 0xef, 0x60, 0xb2, 0x74, -+ 0x73, 0xbf, 0x05, 0xf5, 0x69, 0x77, 0xc9, 0xa3, 0x27, 0x34, 0xac, 0xea, 0x9b, 0xb8, 0x9b, 0xb8, -+ 0x78, 0x61, 0xce, 0x8c, 0xf0, 0x6f, 0xdd, 0xe3, 0xf9, 0xb7, 0x23, 0xda, 0x0d, 0xfc, 0x1d, 0x9f, -+ 0x97, 0x62, 0x2d, 0xb5, 0x60, 0x02, 0xaf, 0x2f, 0xc0, 0xdf, 0x9c, 0xff, 0x48, 0x46, 0x9d, 0xfa, -+ 0xd3, 0x6f, 0x92, 0x89, 0x5a, 0x54, 0x42, 0x8f, 0xb8, 0xea, 0x26, 0xe3, 0x8a, 0xc5, 0x7e, 0xa5, -+ 0x67, 0x5e, 0x84, 0xa6, 0xf6, 0x5d, 0x32, 0x1c, 0x75, 0x39, 0x6f, 0x51, 0x5c, 0xcf, 0xf1, 0xe9, -+ 0x01, 0x07, 0x93, 0x42, 0xb2, 0x3c, 0x31, 0x74, 0xd4, 0x8d, 0x31, 0xb4, 0x90, 0x89, 0x63, 0xe8, -+ 0x5c, 0x2a, 0x86, 0x0e, 0x87, 0x3f, 0x46, 0x40, 0x9e, 0x2e, 0x20, 0x9b, 0x60, 0x05, 0xac, 0x4d, -+ 0xdf, 0xb0, 0xd0, 0x90, 0x3a, 0xfc, 0xf0, 0x41, 0x4d, 0x52, 0xd6, 0xee, 0x79, 0x7f, 0x0f, 0x9b, -+ 0xb6, 0xf2, 0xcc, 0x2c, 0xc7, 0xb7, 0x59, 0xbf, 0xc4, 0x1c, 0x55, 0xcc, 0x5a, 0xb9, 0x75, 0xde, -+ 0x8f, 0xc9, 0x8a, 0xd5, 0xcf, 0x3e, 0x78, 0xda, 0xa7, 0x2d, 0xee, 0xb5, 0x8e, 0xef, 0xb3, 0xbe, -+ 0x09, 0x0c, 0xf3, 0x0e, 0x8c, 0x95, 0x2d, 0xb3, 0x05, 0x36, 0xca, 0x6c, 0x01, 0xa5, 0x32, 0x62, -+ 0x7a, 0xdb, 0xfa, 0x4b, 0x4f, 0xae, 0x1b, 0x7d, 0xf2, 0x01, 0x79, 0xe0, 0x03, 0xba, 0x27, 0xd7, -+ 0x76, 0x04, 0x2c, 0x2f, 0x6b, 0xcb, 0x79, 0xa5, 0x2d, 0xef, 0x9b, 0x80, 0x3b, 0x76, 0x07, 0x2c, -+ 0x3d, 0x1e, 0x70, 0xd7, 0x96, 0xb6, 0x3b, 0xdf, 0x6d, 0x5b, 0xf6, 0x8b, 0x30, 0x85, 0xe6, 0x8c, -+ 0xc5, 0xbf, 0x74, 0xc7, 0xe2, 0x2b, 0xec, 0x8f, 0x61, 0xde, 0x8e, 0x56, 0xb3, 0xed, 0x86, 0xc8, -+ 0xa6, 0xe3, 0x45, 0x4b, 0x0b, 0x33, 0x94, 0x29, 0x52, 0x46, 0x69, 0x85, 0xba, 0x70, 0xbd, 0xb3, -+ 0x82, 0xb1, 0x16, 0x17, 0x5e, 0xfe, 0x46, 0x69, 0xe8, 0x4d, 0x85, 0x9e, 0x9a, 0xaa, 0xda, 0xb2, -+ 0xc6, 0xf5, 0xae, 0xca, 0xd2, 0xf5, 0xeb, 0x9d, 0x1d, 0xd7, 0xbb, 0xd0, 0x78, 0xce, 0x71, 0xb9, -+ 0xe3, 0xfa, 0x3a, 0xaa, 0xe8, 0xb1, 0xac, 0xb2, 0x4e, 0x53, 0xae, 0x86, 0xef, 0xe2, 0xc6, 0x3a, -+ 0x0d, 0x06, 0xab, 0xaa, 0xaf, 0xd3, 0xd4, 0xbb, 0xab, 0x31, 0x97, 0x96, 0x96, 0x4f, 0x54, 0x59, -+ 0x2e, 0xdd, 0x5c, 0x7e, 0x43, 0xa5, 0xa5, 0xab, 0xcc, 0xb2, 0xac, 0xb2, 0xac, 0xce, 0x75, 0x58, -+ 0xaf, 0x81, 0x9d, 0x45, 0xf1, 0x0d, 0xe4, 0x6e, 0x38, 0xad, 0x9f, 0x44, 0x7e, 0x72, 0xcd, 0x65, -+ 0x79, 0x71, 0xa5, 0x0b, 0x4b, 0x49, 0x59, 0xa5, 0xba, 0xbc, 0x54, 0x5d, 0x5b, 0x8a, 0xfc, 0x8d, -+ 0xdb, 0xbc, 0xa3, 0x39, 0xda, 0xb7, 0x72, 0xe7, 0xaf, 0x93, 0x44, 0x69, 0x57, 0x71, 0x76, 0xbe, -+ 0x27, 0x9c, 0xa8, 0x62, 0xd2, 0x26, 0x20, 0xd5, 0x93, 0x75, 0x3d, 0xb4, 0x65, 0xe8, 0x0d, 0x99, -+ 0xd7, 0xbe, 0xbb, 0xbd, 0x10, 0x5b, 0x1b, 0xcb, 0xd1, 0x0b, 0x67, 0x21, 0x6b, 0x29, 0xd2, 0x7e, -+ 0x4c, 0xe7, 0x16, 0x71, 0x76, 0x4b, 0x66, 0x74, 0x1c, 0xcd, 0xb2, 0xc6, 0x50, 0xfb, 0x9b, 0x8d, -+ 0xb4, 0x46, 0x66, 0xb5, 0x72, 0x57, 0xf5, 0xc4, 0xfe, 0x66, 0x2d, 0x1d, 0x9d, 0x8c, 0x63, 0x3c, -+ 0x44, 0x83, 0xdd, 0x4b, 0xff, 0xe9, 0xc0, 0x21, 0x39, 0xec, 0x5e, 0x8a, 0x2e, 0xf1, 0xce, 0x93, -+ 0xb0, 0x7b, 0x79, 0xb3, 0x91, 0x59, 0xeb, 0x80, 0xcd, 0xcf, 0xea, 0x9e, 0xac, 0xf9, 0xe2, 0x43, -+ 0x3b, 0x1c, 0x71, 0xeb, 0x24, 0xe1, 0x6f, 0xe3, 0x22, 0xa9, 0x05, 0x44, 0x4f, 0x56, 0x66, 0xff, -+ 0xb6, 0xcc, 0x89, 0x22, 0xa9, 0x2e, 0x02, 0x3d, 0x1c, 0x44, 0x5b, 0x88, 0x8b, 0xa4, 0xca, 0x2e, -+ 0xf1, 0xae, 0xa9, 0xa0, 0xf7, 0x5b, 0x8d, 0xcc, 0x47, 0x06, 0x4b, 0x02, 0x6d, 0x6b, 0x7a, 0x68, -+ 0x39, 0x91, 0x87, 0x76, 0x90, 0x73, 0xd6, 0x75, 0x44, 0xc3, 0xd6, 0xc9, 0x11, 0xf4, 0x86, 0xd2, -+ 0xbf, 0xf7, 0xc0, 0xf4, 0xc6, 0x9d, 0xab, 0xf6, 0x73, 0x2b, 0x94, 0xc4, 0x01, 0x23, 0x81, 0x1e, -+ 0x14, 0x68, 0xf9, 0x6b, 0x69, 0x01, 0x5a, 0x5a, 0xfe, 0x30, 0xba, 0x6f, 0x69, 0xff, 0x61, 0x3a, -+ 0x2e, 0x2c, 0x42, 0x28, 0x6e, 0x23, 0xda, 0x19, 0x75, 0x7a, 0x7a, 0xa0, 0x96, 0x2a, 0xb3, 0xd4, -+ 0x2e, 0xf6, 0x56, 0xbd, 0xc2, 0x88, 0x1b, 0x27, 0x64, 0xf8, 0x61, 0x29, 0x64, 0xd1, 0x09, 0xd9, -+ 0x0f, 0xef, 0xdf, 0x59, 0x3b, 0x92, 0xcd, 0xd1, 0x3e, 0x00, 0x1b, 0xa5, 0xd1, 0x98, 0x75, 0xa7, -+ 0x03, 0x7b, 0xb3, 0xa6, 0xd1, 0xf0, 0x46, 0x69, 0x11, 0xe1, 0xff, 0x86, 0x30, 0xa8, 0x5e, 0x82, -+ 0x37, 0x5c, 0x57, 0xb7, 0xb7, 0x37, 0x36, 0x59, 0xd2, 0x9a, 0x09, 0x34, 0x10, 0xd5, 0x7b, 0x97, -+ 0xc9, 0x36, 0xbb, 0x75, 0xf1, 0x2c, 0xdc, 0xdd, 0xba, 0xb3, 0xc7, 0xbe, 0xf3, 0xfd, 0x11, 0x72, -+ 0x44, 0x97, 0x57, 0x2e, 0xbc, 0xa0, 0x8a, 0x4e, 0xe5, 0x6c, 0xb6, 0xfb, 0x9f, 0xf1, 0x23, 0xe2, -+ 0x06, 0x1d, 0x81, 0xa5, 0x44, 0x14, 0x0d, 0x8d, 0x90, 0x28, 0xf6, 0xe0, 0x76, 0xa1, 0xd6, 0x8e, -+ 0x52, 0x19, 0xe6, 0xc4, 0x78, 0xdf, 0x7e, 0x3d, 0x7f, 0x9d, 0x5c, 0xac, 0x9c, 0x8e, 0xb4, 0x99, -+ 0x6c, 0x19, 0x2b, 0x9d, 0xe0, 0x59, 0x09, 0xe0, 0xd0, 0x2b, 0xe6, 0x34, 0x8d, 0x96, 0x8b, 0xe7, -+ 0x1b, 0x0a, 0x9a, 0xab, 0xad, 0xf7, 0xaf, 0xd6, 0xf1, 0xb4, 0xd4, 0x03, 0xdb, 0xd6, 0x7d, 0x2c, -+ 0x4b, 0x39, 0x2d, 0xe8, 0x22, 0x4a, 0xf3, 0xc6, 0xa7, 0x23, 0x32, 0x14, 0xdb, 0xe1, 0xb3, 0x1f, -+ 0x23, 0x1c, 0xc6, 0xb5, 0x5a, 0xf9, 0xb8, 0x4c, 0xd2, 0xb0, 0x90, 0x83, 0x6b, 0xb5, 0xfa, 0xb3, -+ 0x62, 0x30, 0xe6, 0x42, 0x5c, 0x7e, 0x45, 0x06, 0xa9, 0xc7, 0x79, 0x67, 0x55, 0xb0, 0xc1, 0x2d, -+ 0x27, 0x73, 0x0a, 0xe7, 0xe6, 0xbf, 0x30, 0x77, 0x20, 0x2a, 0x6b, 0x0d, 0xb0, 0x3d, 0x4c, 0xcf, -+ 0x65, 0x20, 0x0b, 0xac, 0x0d, 0xa7, 0xc5, 0xa9, 0xbe, 0x34, 0x14, 0x06, 0xa2, 0xe5, 0x78, 0x3d, -+ 0xdf, 0xd8, 0xb4, 0x35, 0x8d, 0x8d, 0x45, 0xcb, 0x5a, 0x63, 0xb4, 0xcd, 0x3e, 0x65, 0x98, 0x03, -+ 0xa2, 0xa9, 0x1b, 0xbd, 0xbf, 0x68, 0xdf, 0xc5, 0xa5, 0x49, 0xd8, 0xfe, 0x8c, 0x02, 0x41, 0x34, -+ 0x27, 0x34, 0x3d, 0x4f, 0x88, 0x1e, 0x69, 0x27, 0x91, 0x84, 0x48, 0xf6, 0x0d, 0x91, 0xed, 0xee, -+ 0x75, 0x2d, 0x83, 0xef, 0x08, 0xf1, 0xf6, 0xde, 0x40, 0xe5, 0xfc, 0x4f, 0xe2, 0x3d, 0xd5, 0x22, -+ 0x8f, 0xc7, 0x3e, 0x95, 0x25, 0xee, 0xc2, 0x71, 0xb5, 0x79, 0x99, 0x27, 0x05, 0x74, 0x8a, 0x46, -+ 0x65, 0x9d, 0xcb, 0xf1, 0x36, 0xaa, 0x14, 0x22, 0x9a, 0x4f, 0x5a, 0xc8, 0x40, 0x95, 0x04, 0x22, -+ 0xf6, 0x1d, 0x07, 0x85, 0x8f, 0x78, 0xf6, 0xfb, 0xbe, 0xcd, 0x52, 0xce, 0xc4, 0x5d, 0xcc, 0x01, -+ 0x02, 0x17, 0x18, 0xb0, 0xdf, 0xc6, 0x59, 0x84, 0xb7, 0x43, 0x0c, 0x05, 0x71, 0xfb, 0xff, 0xe8, -+ 0x71, 0xd3, 0x1a, 0xea, 0x5a, 0xf3, 0x21, 0xd7, 0x35, 0x1a, 0xb2, 0x4e, 0x8f, 0xd3, 0x3e, 0xef, -+ 0xad, 0x9f, 0x35, 0xd8, 0xdb, 0x2a, 0x57, 0x7b, 0xb1, 0xf3, 0x8d, 0x4c, 0xfb, 0x21, 0x75, 0x7e, -+ 0xd3, 0x1a, 0xf0, 0x87, 0x95, 0xa3, 0x68, 0xa7, 0x05, 0x6d, 0x5d, 0x22, 0x3c, 0xa0, 0xf4, 0x3a, -+ 0x00, 0xfe, 0xd4, 0xa1, 0x47, 0x41, 0x6a, 0xe2, 0x4a, 0x6b, 0xec, 0x1a, 0x5d, 0xd0, 0x1a, 0x88, -+ 0x15, 0xac, 0x4c, 0x4e, 0x5c, 0x2f, 0x4d, 0x94, 0x28, 0x93, 0x82, 0xc3, 0xdc, 0x2f, 0xa6, 0xad, -+ 0x16, 0x19, 0x0a, 0x07, 0xcc, 0x96, 0x26, 0x36, 0x6e, 0x85, 0x5d, 0x5d, 0x1a, 0xb5, 0x69, 0x0b, -+ 0x26, 0x2d, 0x1c, 0x2f, 0xf3, 0x06, 0xe3, 0x28, 0xef, 0x1d, 0x13, 0x2f, 0x99, 0xb5, 0x38, 0x9e, -+ 0xa3, 0xf2, 0x0d, 0xc2, 0x61, 0x78, 0xbf, 0x0d, 0xc7, 0xac, 0xef, 0x22, 0xdd, 0xe2, 0x7c, 0x94, -+ 0x39, 0xe3, 0xb1, 0x55, 0xd6, 0xa6, 0x95, 0x40, 0xb4, 0x4e, 0x8e, 0x89, 0xc2, 0x12, 0x43, 0x0a, -+ 0x38, 0xb8, 0x28, 0x80, 0xa2, 0x31, 0x16, 0xa2, 0xb3, 0x66, 0xc5, 0x77, 0x02, 0x8b, 0x07, 0xbd, -+ 0x68, 0xc0, 0x22, 0x8e, 0x78, 0xab, 0xa5, 0xf8, 0x0e, 0x79, 0xbc, 0x0c, 0xb0, 0x81, 0x56, 0x22, -+ 0x83, 0xea, 0xd4, 0x41, 0xb0, 0xfa, 0xac, 0x13, 0x62, 0x81, 0xd4, 0xf4, 0xe9, 0x2d, 0x74, 0x1a, -+ 0x60, 0x6b, 0x24, 0x68, 0x94, 0x08, 0xb1, 0x6f, 0x5a, 0xbc, 0xfe, 0x04, 0x22, 0x5c, 0xa1, 0x44, -+ 0x80, 0xe5, 0x52, 0x2e, 0xc6, 0x29, 0xab, 0xe3, 0x5e, 0x42, 0x2c, 0x70, 0x72, 0xc1, 0xd3, 0xcc, -+ 0x75, 0x4a, 0x08, 0x5d, 0x7b, 0x83, 0x19, 0xc0, 0x2c, 0x5e, 0x10, 0x4e, 0x6b, 0xf1, 0xa6, 0x67, -+ 0xbd, 0x96, 0x52, 0x8f, 0x2f, 0x7f, 0xce, 0x15, 0x3d, 0x8e, 0xa3, 0xff, 0x42, 0x6a, 0x81, 0x59, -+ 0x88, 0x6e, 0x84, 0x6c, 0x5c, 0x74, 0x73, 0x8d, 0xc6, 0x00, 0x6c, 0xae, 0x3c, 0x52, 0x92, 0x60, -+ 0x01, 0x1e, 0x24, 0x6a, 0x63, 0xa4, 0x62, 0xe1, 0x30, 0xa7, 0xe5, 0x70, 0xbe, 0x3b, 0x89, 0xd8, -+ 0xaa, 0xf8, 0x04, 0x0f, 0xe3, 0x06, 0xea, 0xb6, 0x95, 0x8d, 0xca, 0xca, 0x51, 0x59, 0xb2, 0xb4, -+ 0x2b, 0x3a, 0x2a, 0xfb, 0x5c, 0x32, 0x71, 0x37, 0x25, 0x49, 0xf0, 0x88, 0x12, 0xdf, 0x9b, 0x36, -+ 0x84, 0x50, 0xf9, 0x44, 0x67, 0x77, 0xfa, 0xb4, 0x36, 0x27, 0x5e, 0x7f, 0x16, 0xfa, 0xb7, 0x0d, -+ 0x22, 0x83, 0x1d, 0xb5, 0x63, 0x43, 0x05, 0x58, 0xd0, 0x7d, 0x5c, 0xac, 0xa6, 0xb4, 0xe6, 0x63, -+ 0x71, 0x03, 0x34, 0x5c, 0x99, 0x70, 0x90, 0xda, 0xc2, 0xac, 0x6e, 0x65, 0xca, 0x26, 0x81, 0xb9, -+ 0xf2, 0x52, 0x43, 0x72, 0x1f, 0xea, 0x0e, 0x65, 0x8e, 0x01, 0x8f, 0x7c, 0x7f, 0x01, 0x16, 0x4d, -+ 0x18, 0x7f, 0xad, 0x37, 0x0e, 0x44, 0xfb, 0x5a, 0xda, 0x7e, 0x38, 0xdf, 0x13, 0xb8, 0x55, 0x0b, -+ 0x9e, 0x05, 0x14, 0xa0, 0xe6, 0x8c, 0x33, 0x32, 0x1c, 0x57, 0xcc, 0xcf, 0x28, 0x49, 0x0c, 0x92, -+ 0x85, 0x19, 0xef, 0x6e, 0xa7, 0x02, 0x7c, 0xc0, 0x89, 0x4b, 0x2d, 0x60, 0xbf, 0xa9, 0xd8, 0x10, -+ 0x54, 0xe8, 0xd6, 0xc0, 0xe3, 0x82, 0x87, 0x2c, 0x98, 0x73, 0x7a, 0x18, 0x55, 0x80, 0x00, 0x17, -+ 0xae, 0xb4, 0xb6, 0x6f, 0x96, 0x8b, 0x37, 0xaa, 0x31, 0x83, 0x36, 0x60, 0xd0, 0xbd, 0x99, 0xdd, -+ 0x51, 0x3b, 0xe2, 0xe4, 0x3e, 0x6b, 0x16, 0x1b, 0x0f, 0x93, 0x7d, 0x34, 0x71, 0xe7, 0x41, 0x54, -+ 0xc2, 0xd5, 0x87, 0x18, 0xa6, 0x87, 0x0b, 0x0e, 0x89, 0xbc, 0x5c, 0x05, 0x3e, 0x41, 0xf5, 0x0e, -+ 0x3a, 0x65, 0xc6, 0x27, 0x55, 0x78, 0x25, 0x3e, 0x28, 0xf2, 0x82, 0xcd, 0xdc, 0xcc, 0xe1, 0x5e, -+ 0xcc, 0xe0, 0x73, 0x4e, 0x19, 0xc1, 0xec, 0xf7, 0xf8, 0xee, 0x49, 0x68, 0xeb, 0x9b, 0x73, 0x1b, -+ 0x21, 0x64, 0x81, 0x32, 0x18, 0xc9, 0xba, 0x46, 0x4c, 0xd0, 0xcb, 0x8e, 0xb7, 0x51, 0x6a, 0xfa, -+ 0x69, 0x1e, 0x07, 0xd7, 0x15, 0x54, 0x72, 0xf2, 0x08, 0xd8, 0xc2, 0xee, 0xa8, 0x33, 0x7f, 0x0c, -+ 0x17, 0x57, 0xb3, 0xd4, 0x1c, 0x7c, 0x92, 0x46, 0x69, 0x8c, 0x3e, 0x43, 0x2f, 0x97, 0x8e, 0x8c, -+ 0xc9, 0x8f, 0x42, 0xe7, 0x06, 0xd2, 0x0e, 0x02, 0xff, 0x39, 0x34, 0x09, 0x02, 0x23, 0xba, 0x11, -+ 0xe4, 0x5a, 0xab, 0x61, 0xc3, 0x80, 0x81, 0x19, 0xad, 0x96, 0xe1, 0xcd, 0x86, 0x85, 0xe8, 0x78, -+ 0x8d, 0x4e, 0x00, 0xfd, 0x71, 0x61, 0xc7, 0xc4, 0x98, 0x0f, 0xd2, 0x67, 0xdb, 0xf1, 0xa0, 0x29, -+ 0xd9, 0x37, 0x18, 0xc3, 0xa0, 0xe1, 0x24, 0x1e, 0xf3, 0x9a, 0xeb, 0x9e, 0xca, 0x88, 0xb2, 0x8e, -+ 0x20, 0x4f, 0x65, 0x04, 0xa5, 0xc2, 0x3e, 0xca, 0x3d, 0xd4, 0x4f, 0xba, 0xc7, 0xe6, 0xf3, 0x9a, -+ 0x03, 0x5f, 0x50, 0x84, 0x4f, 0x58, 0xc5, 0xa0, 0x82, 0xc2, 0x53, 0xe9, 0xc4, 0xe3, 0x31, 0xaa, -+ 0x9d, 0x19, 0x66, 0x4c, 0x76, 0x02, 0xbc, 0x8f, 0xd5, 0xff, 0x19, 0x9b, 0x41, 0xa5, 0xf0, 0xd7, -+ 0xec, 0x67, 0xde, 0x12, 0x0a, 0x0f, 0x98, 0x29, 0x68, 0x23, 0xe1, 0xa1, 0x56, 0xea, 0xb1, 0x65, -+ 0x25, 0x1b, 0x24, 0x8c, 0xb3, 0x41, 0x5c, 0x7a, 0xb5, 0xcf, 0x3a, 0x19, 0xe4, 0x80, 0xec, 0x67, -+ 0x4f, 0x5f, 0x72, 0xc2, 0x0a, 0xa6, 0xfb, 0x6c, 0xf4, 0xdc, 0x22, 0x73, 0x8a, 0xde, 0xd9, 0xb4, -+ 0x66, 0xa2, 0x28, 0x84, 0x62, 0xb9, 0xea, 0x26, 0x96, 0xbb, 0xf4, 0x37, 0x4b, 0x5c, 0x36, 0x95, -+ 0x07, 0x0d, 0x5d, 0x47, 0xa5, 0x58, 0xc6, 0xfb, 0xba, 0x80, 0x8d, 0xbd, 0x97, 0x04, 0x37, 0x48, -+ 0xe4, 0x95, 0xb9, 0x1f, 0xc3, 0x22, 0xcc, 0x55, 0x9f, 0x47, 0xa2, 0xce, 0xe3, 0x54, 0x12, 0x7a, -+ 0x53, 0x47, 0x90, 0xec, 0x68, 0xcb, 0xf7, 0xe2, 0x53, 0x12, 0x08, 0xd6, 0xb0, 0x77, 0x09, 0xa0, -+ 0x51, 0x95, 0x25, 0x69, 0x11, 0xe0, 0xbb, 0x0e, 0x47, 0x50, 0x65, 0x01, 0x26, 0x9c, 0x50, 0x92, -+ 0xe0, 0x5c, 0x10, 0xca, 0xf1, 0x7a, 0xcb, 0x9d, 0x73, 0x3e, 0xe8, 0x74, 0xa4, 0x54, 0x15, 0xc3, -+ 0x20, 0xbe, 0xad, 0xbe, 0xc7, 0x46, 0xb6, 0xc0, 0xbe, 0x65, 0x5a, 0x6b, 0x97, 0xd2, 0x4b, 0xd5, -+ 0xad, 0x2e, 0xa5, 0x52, 0x45, 0xd9, 0xfa, 0x32, 0xe8, 0x52, 0x12, 0xc2, 0x8b, 0xc4, 0x27, 0x05, -+ 0xa5, 0x70, 0xf2, 0x78, 0x29, 0xec, 0xc7, 0x4a, 0x43, 0x24, 0xac, 0x6f, 0x85, 0x3e, 0x20, 0xaa, -+ 0xf6, 0x25, 0xab, 0xd1, 0x0a, 0xdb, 0x53, 0xb9, 0x3f, 0xcc, 0x61, 0xd6, 0x18, 0xa2, 0xe3, 0x7c, -+ 0x3a, 0xf1, 0xb8, 0x8e, 0x14, 0x65, 0x47, 0xc9, 0x07, 0x15, 0x1a, 0x5c, 0x5f, 0x95, 0x93, 0x57, -+ 0x31, 0x61, 0x09, 0xd7, 0xf0, 0x5c, 0xbd, 0x4e, 0xa7, 0x92, 0x6f, 0x8f, 0x62, 0x59, 0x65, 0x58, -+ 0xd6, 0xa5, 0x5a, 0x90, 0x2c, 0x72, 0xf7, 0x5b, 0xa0, 0xd3, 0x3e, 0xef, 0xed, 0x71, 0x26, 0xb0, -+ 0x9f, 0x51, 0x1f, 0xfe, 0xfd, 0x70, 0xe5, 0xa8, 0x26, 0x92, 0x3a, 0xa1, 0xe3, 0x13, 0x25, 0x61, -+ 0x69, 0x76, 0x84, 0xd0, 0x03, 0xbd, 0x1b, 0x39, 0x6d, 0x3a, 0x62, 0x81, 0x15, 0x28, 0xdb, 0x93, -+ 0xb2, 0xbc, 0xcf, 0x4a, 0xa6, 0xe9, 0xb9, 0x74, 0x74, 0xbf, 0xae, 0x45, 0x87, 0x93, 0x0a, 0xd1, -+ 0xd1, 0x7c, 0xc4, 0x77, 0x10, 0x2c, 0x2a, 0xd1, 0x1c, 0x49, 0x97, 0x4b, 0x5b, 0xd6, 0xe8, 0xed, -+ 0xcd, 0x0e, 0x6f, 0x98, 0x06, 0x8f, 0xb6, 0x8f, 0x64, 0xcd, 0x71, 0x3b, 0x8e, 0x9c, 0x7d, 0x54, -+ 0xde, 0x82, 0xaa, 0x96, 0x59, 0x4e, 0x15, 0xe1, 0x61, 0xd9, 0xf7, 0x90, 0x4f, 0x27, 0xc6, 0xae, -+ 0xe8, 0xcd, 0xa5, 0x74, 0xd5, 0xca, 0x61, 0xd9, 0x54, 0x0a, 0xee, 0xbc, 0x52, 0xf0, 0x2d, 0xfa, -+ 0xc8, 0x6d, 0x6f, 0xc3, 0xf5, 0x7e, 0x74, 0x1c, 0xe7, 0x25, 0xf7, 0x94, 0xd2, 0x1f, 0xd6, 0x34, -+ 0xcd, 0x03, 0xbd, 0xe4, 0x52, 0x7a, 0x29, 0xe1, 0xfa, 0x15, 0xd0, 0xb1, 0x14, 0x33, 0xd5, 0x2f, -+ 0x82, 0x14, 0xc1, 0xda, 0xfe, 0x63, 0x70, 0x3c, 0x8a, 0x8f, 0x43, 0x52, 0xc0, 0xcc, 0x3a, 0xb3, -+ 0xdb, 0x60, 0xdc, 0x4c, 0x61, 0x29, 0x45, 0x03, 0xe6, 0x1c, 0x6e, 0xcc, 0x9c, 0x61, 0x5a, 0xb7, -+ 0x4c, 0x0b, 0x7a, 0x1f, 0xd1, 0x6a, 0x0d, 0x38, 0x51, 0x88, 0xf3, 0x3b, 0x89, 0xb1, 0x2b, 0xb3, -+ 0x30, 0xdd, 0xad, 0x4b, 0xec, 0xc4, 0xa2, 0xd6, 0xfe, 0xd9, 0x80, 0x6d, 0x96, 0x04, 0xdb, 0x99, -+ 0x7b, 0xee, 0x77, 0xf8, 0x29, 0x41, 0x5b, 0x1a, 0x43, 0x86, 0x03, 0xd6, 0x0c, 0xbf, 0x75, 0x70, -+ 0x6c, 0xb2, 0xe1, 0xf5, 0x22, 0x37, 0x07, 0xe6, 0x1a, 0xac, 0x17, 0x0b, 0xae, 0xb2, 0x9f, 0x68, -+ 0xc1, 0xd5, 0x60, 0x51, 0x46, 0x2c, 0x8a, 0xbb, 0x1a, 0xec, 0x3e, 0x1a, 0xc6, 0xfa, 0x31, 0x87, -+ 0xbb, 0x17, 0xf6, 0x75, 0xbd, 0x4b, 0xe1, 0x38, 0x49, 0x04, 0xae, 0x47, 0xc5, 0x9d, 0x09, 0x6c, -+ 0x8c, 0x85, 0x74, 0xb0, 0xa7, 0xef, 0xf6, 0x3b, 0x84, 0xf3, 0x2e, 0x46, 0x6c, 0x5b, 0x9e, 0x6d, -+ 0xd7, 0x52, 0x19, 0x9e, 0xc1, 0x51, 0xef, 0x6a, 0x61, 0x7d, 0x5b, 0xda, 0x88, 0x29, 0xb0, 0xe8, -+ 0xc0, 0xd2, 0x1c, 0x09, 0x16, 0x2a, 0x73, 0xc6, 0x3f, 0xcd, 0x91, 0xf9, 0xfb, 0x60, 0x75, 0xda, -+ 0xb1, 0x47, 0x78, 0x02, 0x94, 0x0a, 0xab, 0x93, 0x90, 0x05, 0x58, 0x4b, 0xb9, 0xb1, 0x80, 0x35, -+ 0x6d, 0x5b, 0xa4, 0x66, 0xc0, 0xac, 0xe1, 0x26, 0xc0, 0xf1, 0x20, 0xce, 0x07, 0xf5, 0x46, 0x75, -+ 0x02, 0x4b, 0xe6, 0x0d, 0x8c, 0x58, 0x73, 0xff, 0xd2, 0x53, 0xe0, 0xeb, 0x46, 0xfd, 0xb2, 0xf0, -+ 0xc8, 0xbb, 0xb3, 0x3c, 0xf1, 0x04, 0xc6, 0xfa, 0xf3, 0x29, 0x5c, 0x26, 0x90, 0xe0, 0x54, 0x1b, -+ 0x1f, 0x58, 0xea, 0x31, 0x62, 0xb5, 0x5d, 0x69, 0x15, 0x35, 0x3d, 0x69, 0xe2, 0xae, 0x05, 0x59, -+ 0xd6, 0x65, 0x61, 0x2b, 0xc6, 0x9b, 0x35, 0x21, 0x60, 0x3d, 0x1d, 0x65, 0x06, 0xac, 0x8e, 0xc8, -+ 0xb5, 0x56, 0x70, 0xe0, 0xd1, 0x3d, 0x70, 0x4c, 0x1a, 0x08, 0x30, 0xf5, 0x76, 0x13, 0x66, 0xe9, -+ 0x79, 0xdf, 0x97, 0x1c, 0x7e, 0x73, 0x77, 0x7b, 0x81, 0x2c, 0x79, 0x1c, 0x2c, 0x8b, 0x3b, 0x4d, -+ 0x66, 0x65, 0x60, 0xac, 0x6b, 0xeb, 0x71, 0xea, 0xa8, 0xdf, 0xf8, 0x14, 0x1c, 0x17, 0xe1, 0xb4, -+ 0x8b, 0xaf, 0xff, 0x0a, 0x60, 0xc9, 0x9e, 0x3c, 0x3d, 0xb0, 0x80, 0x16, 0x73, 0x02, 0x2c, 0xa2, -+ 0x85, 0x2b, 0x01, 0xfe, 0xb1, 0x7f, 0xd7, 0x61, 0xff, 0xde, 0xae, 0xc5, 0x58, 0x5d, 0x4e, 0x74, -+ 0x30, 0x2b, 0x70, 0x05, 0x80, 0x98, 0x9c, 0x20, 0xce, 0x29, 0xc7, 0x8c, 0xfb, 0x49, 0x87, 0x27, -+ 0x6a, 0x73, 0x35, 0xce, 0xb1, 0x90, 0x93, 0x2f, 0x5c, 0x76, 0x5f, 0x90, 0xa2, 0xc1, 0x00, 0x04, -+ 0x3e, 0x77, 0xa4, 0x9f, 0x11, 0x0c, 0x3c, 0x58, 0xf0, 0x2d, 0xde, 0x91, 0x6c, 0x91, 0xd5, 0x2d, -+ 0xf1, 0x88, 0x11, 0xb7, 0xc3, 0x20, 0xfc, 0x2a, 0xc4, 0x43, 0xae, 0xf6, 0x17, 0xae, 0xdd, 0xcf, -+ 0x94, 0xbd, 0x8c, 0x5a, 0x41, 0xda, 0xe8, 0xe8, 0x6e, 0x90, 0x96, 0xf6, 0xa8, 0x15, 0x1f, 0xf7, -+ 0xa2, 0x78, 0x97, 0x6e, 0x4f, 0x47, 0x47, 0x42, 0xbb, 0xd9, 0x3b, 0x2b, 0x67, 0x0c, 0xdc, 0x42, -+ 0xb5, 0x3f, 0x7d, 0xed, 0x24, 0xc5, 0xce, 0x23, 0x6c, 0x80, 0xba, 0x93, 0x87, 0xc0, 0xac, 0x35, -+ 0x05, 0x7a, 0x50, 0x5e, 0xbc, 0x10, 0x1b, 0x82, 0x66, 0x3a, 0xdf, 0x01, 0xd2, 0x50, 0x66, 0xa7, -+ 0xc9, 0xc2, 0xed, 0x27, 0xc9, 0xb6, 0xec, 0x3c, 0xe8, 0x91, 0x96, 0x68, 0x9d, 0x64, 0x73, 0x3a, -+ 0x27, 0x03, 0xaf, 0x61, 0x06, 0xa6, 0xc7, 0x38, 0x19, 0x78, 0xc2, 0x8a, 0x8f, 0x27, 0x18, 0x98, -+ 0x1e, 0xe3, 0x62, 0x20, 0x77, 0x1c, 0x18, 0xd8, 0x3d, 0x95, 0x81, 0x74, 0x8a, 0x01, 0x86, 0x17, -+ 0x66, 0xa0, 0xce, 0xc9, 0x80, 0x12, 0x33, 0x50, 0x37, 0x89, 0x81, 0x3a, 0x17, 0x03, 0x5d, 0xd9, -+ 0x78, 0x6b, 0x3f, 0x7f, 0x0a, 0x03, 0x1d, 0x4e, 0x06, 0x0e, 0x61, 0x06, 0x0a, 0x5c, 0x0c, 0x3c, -+ 0x65, 0xc5, 0xc7, 0x13, 0x0c, 0x14, 0xb8, 0x19, 0xc8, 0x1b, 0xec, 0x83, 0xa9, 0x31, 0x95, 0x81, -+ 0x05, 0x14, 0x03, 0x45, 0x14, 0x03, 0x8d, 0x4e, 0x06, 0x4c, 0x98, 0x81, 0xc6, 0x49, 0x0c, 0x34, -+ 0xba, 0x18, 0x18, 0x36, 0xe6, 0x40, 0x8f, 0x8c, 0x29, 0x0c, 0xd8, 0x9c, 0x0c, 0xbc, 0x8b, 0x19, -+ 0xd8, 0xe7, 0x62, 0xe0, 0x59, 0x2b, 0x3e, 0x9e, 0x60, 0x60, 0x9f, 0x9b, 0x81, 0xe5, 0x67, 0x81, -+ 0x81, 0xe3, 0x53, 0x19, 0xc8, 0xa4, 0x18, 0x70, 0x2d, 0x16, 0xd7, 0x0e, 0xe7, 0xe1, 0x4a, 0xa8, -+ 0xeb, 0xa4, 0x9f, 0x7b, 0x15, 0xf9, 0x79, 0x94, 0x01, 0x46, 0x9f, 0xea, 0xcb, 0xd2, 0xb8, 0xa7, -+ 0x58, 0xaa, 0x04, 0x77, 0xa8, 0x10, 0x36, 0xf6, 0xe2, 0xdc, 0xc3, 0xb3, 0x22, 0x87, 0x6b, 0x7e, -+ 0xd1, 0x60, 0x7e, 0x59, 0xb8, 0x1c, 0x20, 0xda, 0x5d, 0x15, 0x03, 0xf3, 0xab, 0x7b, 0xbb, 0x54, -+ 0xeb, 0x9e, 0xcd, 0xdd, 0x5c, 0x2e, 0xb4, 0x97, 0x1a, 0xc6, 0xfd, 0x2b, 0xc1, 0xdd, 0x9c, 0xea, -+ 0x47, 0xc1, 0x13, 0x53, 0xf9, 0xf0, 0x32, 0x19, 0xe0, 0xb6, 0x6e, 0x59, 0x88, 0x6f, 0x9b, 0x2f, -+ 0x37, 0x12, 0x6b, 0x5d, 0x8e, 0x83, 0xb9, 0x3c, 0x07, 0xd3, 0x0c, 0x63, 0x1c, 0x2c, 0xc5, 0xb7, -+ 0xeb, 0x62, 0x58, 0xdd, 0x4e, 0xaf, 0x41, 0x25, 0x0e, 0x34, 0x34, 0xac, 0x92, 0xd7, 0xbd, 0xbc, -+ 0x40, 0x55, 0x35, 0x93, 0x54, 0x55, 0xe3, 0x36, 0x16, 0xe6, 0x9d, 0x78, 0x74, 0xa7, 0xa8, 0x6a, -+ 0x37, 0xa5, 0x2a, 0x8d, 0x78, 0xb5, 0x03, 0x8f, 0x9b, 0x1a, 0xf3, 0x40, 0xcd, 0xac, 0x0e, 0x7f, -+ 0x3f, 0x68, 0xb7, 0xb3, 0x88, 0x39, 0x79, 0x05, 0x10, 0xfe, 0x6e, 0x27, 0xe2, 0x87, 0x3d, 0x77, -+ 0x19, 0x79, 0xcf, 0x69, 0x31, 0xee, 0xbf, 0x7d, 0x4c, 0xdb, 0xc0, 0xdf, 0xf1, 0x1c, 0x87, 0xde, -+ 0xed, 0x9a, 0xc4, 0x3b, 0x9e, 0x33, 0xe1, 0xf6, 0x54, 0xce, 0x26, 0x1d, 0xa8, 0xea, 0xf0, 0x72, -+ 0xbe, 0x66, 0xd2, 0x0c, 0xbe, 0xc0, 0xc0, 0xb3, 0x64, 0xef, 0x4b, 0x41, 0x30, 0x7b, 0xc6, 0x27, -+ 0xcd, 0x9e, 0x71, 0x6a, 0xf6, 0x74, 0xc9, 0x35, 0x5e, 0x4f, 0xe2, 0x51, 0x2d, 0xd0, 0xba, 0x9c, -+ 0x05, 0x95, 0x09, 0x8d, 0x21, 0xf1, 0xd8, 0xbd, 0xf9, 0xf6, 0xed, 0xc6, 0x6e, 0xad, 0xa5, 0xff, -+ 0xb7, 0xc7, 0xee, 0xd4, 0xb6, 0x35, 0x79, 0xf3, 0x13, 0x5d, 0x8b, 0x96, 0xa6, 0x61, 0x3c, 0xe8, -+ 0x96, 0x73, 0xb7, 0x4b, 0x6e, 0xde, 0x79, 0x02, 0xa8, 0x97, 0x4f, 0xa1, 0xde, 0x1b, 0x4d, 0x51, -+ 0xbf, 0x28, 0x8b, 0xbf, 0xcd, 0xc0, 0x69, 0x82, 0x5f, 0xbc, 0xdd, 0xc0, 0x7d, 0x21, 0x7f, 0x00, -+ 0x17, 0x24, 0x4c, 0x52, 0xa8, 0xce, 0xa5, 0x50, 0x79, 0x42, 0x0e, 0xec, 0x4e, 0xac, 0x53, 0x15, -+ 0xba, 0x97, 0x52, 0xe8, 0xab, 0xf4, 0x9e, 0xdb, 0x4d, 0xd3, 0xf5, 0xa7, 0x6e, 0x37, 0x4d, 0xef, -+ 0x60, 0x3f, 0x08, 0x36, 0xd2, 0x34, 0xc9, 0x46, 0x9a, 0xdc, 0x36, 0x62, 0x1f, 0xdc, 0x1e, 0x62, -+ 0xc8, 0x9a, 0x6a, 0x23, 0x75, 0x94, 0x8d, 0x54, 0x0a, 0xae, 0xdd, 0x6e, 0xec, 0x5e, 0x38, 0xe8, -+ 0x7f, 0xbb, 0xb1, 0x13, 0x1b, 0x59, 0x60, 0xf6, 0x19, 0x93, 0xcc, 0x3e, 0xc3, 0x65, 0xf6, 0x79, -+ 0x2f, 0xc4, 0x80, 0x14, 0xcf, 0x4f, 0x31, 0x7b, 0x87, 0xd3, 0xec, 0xd3, 0x48, 0x6f, 0x30, 0xc7, -+ 0xad, 0x93, 0xcc, 0x71, 0xab, 0xcb, 0x1c, 0x3b, 0x07, 0xee, 0xc2, 0xc3, 0x35, 0xc5, 0x1c, 0x8f, -+ 0x53, 0xe6, 0xe8, 0xde, 0x96, 0x3c, 0x68, 0x1c, 0x08, 0x1d, 0x3c, 0xec, 0x8a, 0x4c, 0x65, 0x1f, -+ 0xf4, 0x62, 0xe1, 0x96, 0x39, 0x85, 0x33, 0x7e, 0x3a, 0xb2, 0x0b, 0x0f, 0xd1, 0x14, 0xe1, 0xca, -+ 0x29, 0xe1, 0x4e, 0x04, 0x62, 0x2a, 0x95, 0x6e, 0x07, 0xb5, 0xad, 0x12, 0xfb, 0xd4, 0x29, 0x54, -+ 0xaa, 0x29, 0x2a, 0xa6, 0x03, 0x93, 0xc7, 0x65, 0x74, 0xae, 0xe6, 0x76, 0xe3, 0xb2, 0xb2, 0x09, -+ 0x2b, 0x68, 0xaf, 0x4b, 0x41, 0x07, 0xd5, 0x41, 0xb0, 0xbc, 0x4e, 0x55, 0xd0, 0x59, 0x4a, 0x41, -+ 0x91, 0xb3, 0xb0, 0x49, 0x8d, 0xb9, 0x4c, 0xaa, 0x7d, 0xd7, 0x21, 0xac, 0xef, 0x29, 0x26, 0x95, -+ 0x45, 0x19, 0x34, 0xb9, 0x4c, 0x3d, 0xd9, 0x03, 0x56, 0x98, 0x0f, 0xdf, 0xc6, 0x03, 0xde, 0xc9, -+ 0x9b, 0xac, 0xe4, 0xca, 0x19, 0x73, 0x6e, 0xa3, 0xe4, 0x9c, 0xbb, 0xb1, 0x59, 0x8e, 0xb9, 0xcc, -+ 0xd2, 0x14, 0x86, 0xcb, 0x08, 0xae, 0x4c, 0x31, 0xcb, 0xc5, 0x77, 0x51, 0x66, 0xe9, 0x0a, 0xe9, -+ 0xae, 0xef, 0x0e, 0x7b, 0x90, 0x0c, 0x9d, 0x88, 0x89, 0xa9, 0xa7, 0x3c, 0xda, 0x38, 0x1b, 0x31, -+ 0x23, 0xbb, 0x83, 0x6c, 0x77, 0x21, 0x2d, 0xab, 0xdf, 0x73, 0x2f, 0xde, 0x1a, 0x13, 0xfd, 0x41, -+ 0xfb, 0x3f, 0x0b, 0x2e, 0x7b, 0x79, 0xf2, 0x88, 0x47, 0xe9, 0x38, 0x8f, 0xb8, 0x84, 0xca, 0x23, -+ 0xe2, 0x3f, 0x46, 0xdb, 0x9d, 0x65, 0x01, 0x8b, 0x3f, 0xa2, 0xb2, 0x89, 0xdb, 0xdb, 0xee, 0xd8, -+ 0x1d, 0x70, 0x47, 0x62, 0xc0, 0xb2, 0xd5, 0x6d, 0xb9, 0xde, 0x01, 0x77, 0x1d, 0x54, 0xde, 0x43, -+ 0x3d, 0x10, 0xc1, 0xcc, 0x51, 0xe2, 0x7b, 0x69, 0xd3, 0xa2, 0xb0, 0x23, 0xbd, 0xfb, 0x34, 0xd5, -+ 0x84, 0x2f, 0x50, 0x37, 0xe8, 0x71, 0x4e, 0xf0, 0x79, 0x77, 0x4e, 0x70, 0x61, 0x1e, 0xf5, 0xcc, -+ 0xa0, 0x52, 0xc8, 0xc0, 0xef, 0xe0, 0x21, 0x39, 0xb6, 0x26, 0xc2, 0x95, 0x14, 0xab, 0xab, 0x51, -+ 0x57, 0xd6, 0xe2, 0x27, 0xd2, 0xd5, 0x05, 0x85, 0x45, 0xc5, 0x25, 0x1b, 0x4a, 0x37, 0xd6, 0x25, -+ 0xd6, 0x25, 0x55, 0x50, 0xc9, 0xb9, 0xcd, 0xca, 0x44, 0xe9, 0xc4, 0x33, 0xcf, 0xca, 0xa5, 0xae, -+ 0x9c, 0xdd, 0x66, 0xe5, 0x66, 0xe5, 0xd2, 0xa9, 0x29, 0x3b, 0xfc, 0x58, 0xaa, 0xf1, 0x25, 0xef, -+ 0xfb, 0xee, 0xfc, 0x70, 0x76, 0x27, 0x63, 0x9c, 0x57, 0xa6, 0x0c, 0xda, 0x88, 0x34, 0xa8, 0x45, -+ 0x4f, 0x72, 0x3a, 0x68, 0x68, 0x84, 0x89, 0x86, 0x66, 0xe9, 0xf7, 0x36, 0x32, 0xe7, 0x09, 0x4b, -+ 0x02, 0x75, 0xcb, 0x7b, 0xf4, 0x61, 0x9c, 0xd9, 0xac, 0xe7, 0xed, 0x3b, 0xdf, 0x6f, 0xbf, 0x97, -+ 0x91, 0x7e, 0x89, 0x57, 0x8d, 0x13, 0x63, 0xcf, 0x37, 0x36, 0xa5, 0x09, 0xef, 0xe3, 0x2f, 0xb2, -+ 0x05, 0x3f, 0x9c, 0xf8, 0x2a, 0xa7, 0xe6, 0x74, 0xe0, 0x3f, 0x65, 0x70, 0x55, 0x75, 0x89, 0xf7, -+ 0x30, 0xbe, 0x6a, 0x69, 0x6c, 0x5a, 0x38, 0x72, 0x1f, 0xbf, 0x70, 0x34, 0xf8, 0xd1, 0x83, 0x6a, -+ 0xa4, 0xcc, 0x9a, 0x96, 0xea, 0x4b, 0x93, 0x05, 0x59, 0xbb, 0xb3, 0x07, 0xb9, 0x49, 0x8d, 0x4d, -+ 0x29, 0xb2, 0xed, 0xf8, 0x59, 0xbd, 0xac, 0xe5, 0xed, 0xb6, 0xd9, 0x9d, 0x3a, 0x67, 0xfe, 0xa7, -+ 0x26, 0x2b, 0x6a, 0x9d, 0xda, 0xbb, 0x9c, 0xc0, 0xf9, 0x1f, 0x93, 0xff, 0xec, 0x4b, 0xbc, 0x4d, -+ 0x38, 0xff, 0xd3, 0xba, 0xd4, 0xb8, 0x57, 0xb5, 0x7d, 0x55, 0x3e, 0xfd, 0x7e, 0xaa, 0x2a, 0xe0, -+ 0x6c, 0xf6, 0xd2, 0x9e, 0xde, 0xd0, 0x11, 0x1a, 0xae, 0x0a, 0x90, 0xc4, 0xac, 0x3d, 0x1d, 0xf8, -+ 0x99, 0x35, 0x88, 0xaa, 0x0a, 0x48, 0xbf, 0xe4, 0xf7, 0x86, 0x85, 0xf5, 0x36, 0x42, 0x14, 0x89, -+ 0xf6, 0xc6, 0xa6, 0xb9, 0x16, 0xa6, 0x93, 0x44, 0x7f, 0xff, 0xec, 0x03, 0xba, 0x39, 0xd4, 0xe3, -+ 0x80, 0xb0, 0x18, 0x4c, 0x22, 0x91, 0x34, 0x89, 0x44, 0xfb, 0x24, 0x12, 0x8c, 0x65, 0x2e, 0x12, -+ 0x4f, 0x4c, 0x97, 0xe0, 0x1c, 0x1b, 0x53, 0x18, 0x80, 0x10, 0x95, 0x8c, 0xa3, 0x18, 0xc0, 0x57, -+ 0xed, 0x70, 0x16, 0x16, 0x71, 0x28, 0xcd, 0xab, 0x0b, 0x62, 0xba, 0x7c, 0xaf, 0xb7, 0x4b, 0xbd, -+ 0xde, 0x69, 0xf4, 0xea, 0x6e, 0xf1, 0x7a, 0xb7, 0x7d, 0xe7, 0x9f, 0x71, 0x32, 0x6d, 0x59, 0xb9, -+ 0xf0, 0x82, 0x03, 0x27, 0xd3, 0xb4, 0xfe, 0xf3, 0x7d, 0x22, 0x4d, 0x92, 0xec, 0x6d, 0xad, 0xc6, -+ 0x1a, 0xba, 0x6e, 0x2f, 0x0a, 0x10, 0xb7, 0x9d, 0x65, 0x98, 0x4f, 0xcb, 0xb4, 0x31, 0x28, 0x8a, -+ 0x2d, 0xcb, 0x20, 0xf6, 0x2f, 0x14, 0x5e, 0xe5, 0xca, 0x3a, 0xf4, 0xd6, 0xbb, 0x50, 0x34, 0xe7, -+ 0x19, 0x71, 0x9e, 0xb0, 0x25, 0xbd, 0x9d, 0xe4, 0xbc, 0x26, 0x95, 0x97, 0xaa, 0xd4, 0x7a, 0x7b, -+ 0x4f, 0x2f, 0xa3, 0x23, 0xbd, 0x99, 0x9b, 0x65, 0x10, 0xf8, 0x1b, 0x97, 0x84, 0x47, 0x73, 0x96, -+ 0xe5, 0xe5, 0x09, 0xd1, 0x33, 0xed, 0x24, 0x4a, 0x4d, 0x94, 0x23, 0x08, 0x89, 0xd0, 0x58, 0x3f, -+ 0x83, 0x70, 0x6c, 0xe7, 0xd2, 0x1c, 0xfe, 0xfe, 0x0c, 0x14, 0x17, 0xcd, 0xd1, 0xe6, 0xe7, 0x09, -+ 0x9f, 0x39, 0x08, 0x00, 0x45, 0x00, 0x70, 0x04, 0x00, 0xda, 0x0f, 0x33, 0x88, 0xb4, 0x9d, 0x5c, -+ 0x9a, 0x36, 0xc8, 0x9f, 0x41, 0xce, 0x01, 0x80, 0x35, 0x79, 0x42, 0xed, 0x5b, 0x00, 0xb0, 0x0f, -+ 0x00, 0x8a, 0x0a, 0xf5, 0x68, 0x68, 0x80, 0x41, 0x98, 0x77, 0x71, 0xb3, 0xee, 0x09, 0xc3, 0xf5, -+ 0x12, 0x84, 0x6c, 0x97, 0x3b, 0x2f, 0x66, 0x1e, 0xc7, 0x8f, 0x04, 0x38, 0xb7, 0xb4, 0x54, 0xad, -+ 0x53, 0xba, 0x27, 0x2f, 0xa6, 0xd5, 0x53, 0x45, 0xbf, 0xd4, 0x9e, 0x94, 0x3f, 0x51, 0x86, 0x64, -+ 0xb6, 0x3c, 0x47, 0xd5, 0x61, 0x4e, 0xd4, 0x5d, 0x69, 0x7b, 0x4b, 0xa8, 0xdd, 0xf3, 0x44, 0xa5, -+ 0x03, 0x8d, 0x77, 0x3f, 0x95, 0x60, 0xe9, 0xf3, 0x54, 0x42, 0x79, 0xc5, 0x96, 0x17, 0xdd, 0x84, -+ 0x68, 0xd7, 0x4d, 0x88, 0xa2, 0x6f, 0x46, 0x34, 0x72, 0x13, 0x22, 0xd5, 0x4d, 0x88, 0xfe, 0x7d, -+ 0xed, 0x46, 0x44, 0xe7, 0x7f, 0xb8, 0x09, 0xd1, 0x27, 0x37, 0x21, 0xca, 0x70, 0x21, 0x92, 0xb1, -+ 0xfa, 0xc1, 0xd3, 0x6f, 0x22, 0xcf, 0xe2, 0xfb, 0xb8, 0xd4, 0x33, 0x18, 0x87, 0x78, 0x39, 0x93, -+ 0xaa, 0x44, 0x79, 0xf1, 0x18, 0xf0, 0x02, 0xf5, 0x2c, 0x1b, 0x78, 0xa8, 0x4d, 0x42, 0x36, 0xa5, -+ 0xa5, 0x41, 0x96, 0x5e, 0x25, 0x7c, 0x25, 0x4b, 0xc3, 0x1e, 0x9c, 0x54, 0x65, 0xc7, 0x13, 0x53, -+ 0x0c, 0xf7, 0x4f, 0xd5, 0xa5, 0x91, 0xf6, 0x33, 0x55, 0x1a, 0x9c, 0xa8, 0x46, 0x43, 0x7e, 0xf8, -+ 0x99, 0x8d, 0x30, 0xce, 0x7c, 0xfc, 0xc4, 0xfe, 0xae, 0x74, 0x54, 0x2d, 0xe4, 0xaf, 0x4c, 0x19, -+ 0x43, 0xfd, 0x72, 0x4f, 0xf9, 0x46, 0x0f, 0x26, 0x44, 0x3d, 0x06, 0x67, 0xa0, 0xd6, 0xf2, 0xe5, -+ 0x9e, 0x9b, 0x79, 0x2f, 0x38, 0xf0, 0x68, 0x19, 0x28, 0x0a, 0x03, 0xf8, 0xce, 0x98, 0xcd, 0x0b, -+ 0x5c, 0xf5, 0xbc, 0xfc, 0xcd, 0xae, 0x2a, 0x02, 0x13, 0x21, 0xc4, 0xdb, 0xdc, 0x53, 0x4c, 0xe0, -+ 0xb2, 0x4a, 0xfa, 0x1d, 0x03, 0xad, 0x95, 0xb3, 0x17, 0xc0, 0x26, 0x85, 0x08, 0xb9, 0xc0, 0x40, -+ 0x5d, 0x72, 0x91, 0x01, 0xfc, 0x66, 0xa3, 0xa1, 0x32, 0x06, 0x39, 0xef, 0xf5, 0x85, 0x20, 0xe0, -+ 0x47, 0x85, 0x58, 0xf3, 0xf0, 0x46, 0x46, 0x1e, 0x0a, 0x30, 0x6b, 0x55, 0x17, 0x5a, 0xe5, 0x97, -+ 0x58, 0x27, 0x81, 0xe4, 0x9c, 0x2d, 0x16, 0x70, 0x99, 0x62, 0xe9, 0x02, 0x7c, 0x1f, 0xea, 0x04, -+ 0x2e, 0x56, 0x77, 0x98, 0x47, 0xb8, 0xc8, 0xf9, 0xa4, 0x10, 0x0b, 0x57, 0xce, 0x88, 0xda, 0x6c, -+ 0xde, 0x40, 0x48, 0x23, 0x04, 0x42, 0x7b, 0x7d, 0xa9, 0x8e, 0x1a, 0x8b, 0x3f, 0xd2, 0xec, 0x9e, -+ 0x06, 0xc7, 0x04, 0x5b, 0x6d, 0xc1, 0xb7, 0x7c, 0x46, 0xbd, 0x71, 0x95, 0x94, 0xa0, 0xeb, 0x39, -+ 0xe4, 0x7c, 0x4c, 0xa8, 0x08, 0x61, 0xd5, 0xb0, 0xbf, 0x00, 0x0a, 0x81, 0x36, 0xd0, 0xba, 0x46, -+ 0x03, 0xbd, 0xbb, 0x54, 0x83, 0x2b, 0x47, 0x9f, 0x49, 0x8c, 0xfd, 0x4a, 0x35, 0xe2, 0x2c, 0x7e, -+ 0x50, 0xe3, 0xed, 0xcc, 0x3c, 0x19, 0xc8, 0x25, 0x4c, 0x66, 0x8a, 0x70, 0xa1, 0xbc, 0xf9, 0x6f, -+ 0x13, 0x37, 0xa3, 0x82, 0x07, 0xa9, 0xb4, 0x00, 0xf5, 0xcc, 0x10, 0xae, 0xc5, 0x20, 0x63, 0x10, -+ 0x4a, 0x5c, 0xa5, 0xd5, 0xc1, 0x0a, 0xe9, 0x3d, 0xa8, 0x8a, 0x41, 0xee, 0xba, 0x9d, 0x07, 0x48, -+ 0x2a, 0xb7, 0x80, 0xeb, 0x76, 0xd8, 0x55, 0x78, 0xff, 0xbc, 0x17, 0x69, 0x47, 0x59, 0xb6, 0x40, -+ 0x2b, 0xa8, 0x41, 0x63, 0xd8, 0x04, 0x80, 0x7b, 0xe4, 0x1c, 0x3d, 0xee, 0xc5, 0x78, 0x0e, 0x69, -+ 0x75, 0x3b, 0xce, 0x07, 0x32, 0xfe, 0xc8, 0x71, 0x55, 0x5b, 0x7c, 0xd3, 0xf4, 0xe6, 0x75, 0xf7, -+ 0x13, 0x23, 0x88, 0xca, 0xdc, 0xd5, 0xd0, 0x90, 0x54, 0x44, 0xe7, 0x00, 0x33, 0x67, 0x65, 0x97, -+ 0xb8, 0xa8, 0xdb, 0xca, 0xaf, 0xeb, 0x45, 0xa5, 0x36, 0xc4, 0x3a, 0x28, 0xc4, 0x77, 0x66, 0x11, -+ 0xbe, 0x67, 0xab, 0x15, 0x68, 0x7a, 0x51, 0x9a, 0x4e, 0x50, 0x09, 0xdf, 0x92, 0x11, 0x7c, 0xff, -+ 0x76, 0x11, 0xae, 0x2f, 0xe0, 0x2d, 0xea, 0x86, 0x6f, 0xa3, 0x2a, 0x86, 0xaf, 0x5d, 0xf0, 0x2b, -+ 0x82, 0x6f, 0x7f, 0x1a, 0xf5, 0xc8, 0x52, 0x63, 0x2f, 0x92, 0x7d, 0xed, 0x4d, 0x02, 0x3b, 0x26, -+ 0xc3, 0xb1, 0x18, 0xe4, 0xac, 0x43, 0x30, 0x33, 0x15, 0x61, 0x57, 0xb3, 0xf0, 0xa3, 0x4e, 0xa8, -+ 0x95, 0x4b, 0x47, 0x51, 0xe9, 0x5a, 0xbc, 0x94, 0x0a, 0x86, 0xac, 0x18, 0x60, 0x81, 0x13, 0x40, -+ 0xdc, 0xa2, 0x70, 0x03, 0x38, 0x68, 0x8d, 0x98, 0x04, 0xe3, 0x5e, 0x0f, 0x89, 0x19, 0x79, 0xb8, -+ 0x1e, 0x63, 0x76, 0xde, 0x28, 0xec, 0xda, 0xfd, 0xf5, 0xcf, 0x49, 0xd1, 0xc5, 0x76, 0x5c, 0x04, -+ 0xb0, 0x9c, 0x43, 0x3d, 0x5e, 0xe6, 0x00, 0x9c, 0x8b, 0x16, 0x39, 0x71, 0x8e, 0x63, 0x9c, 0xb4, -+ 0x15, 0x14, 0x4e, 0xc3, 0xb4, 0x9e, 0x49, 0x38, 0xb9, 0xb0, 0xf6, 0xa6, 0x0f, 0x3e, 0x44, 0x43, -+ 0xf1, 0xdd, 0x98, 0x3b, 0x7a, 0xd2, 0x38, 0x48, 0xec, 0xa0, 0x3a, 0x5d, 0x80, 0x4e, 0x66, 0x66, -+ 0x5f, 0xac, 0xdd, 0x10, 0x02, 0xa3, 0x5f, 0x23, 0xbd, 0xea, 0xbc, 0x13, 0x8a, 0x13, 0xc3, 0x4d, -+ 0x62, 0x72, 0x21, 0x81, 0x1a, 0x59, 0xe3, 0x88, 0x0e, 0x8b, 0xb0, 0x38, 0x67, 0xa1, 0x67, 0x02, -+ 0x98, 0xfa, 0xa9, 0xda, 0xcc, 0x33, 0x78, 0x22, 0xed, 0xed, 0x75, 0x4d, 0x8e, 0x3e, 0x6f, 0xf9, -+ 0x42, 0xad, 0x0d, 0xf6, 0xb5, 0xec, 0xd6, 0xbb, 0x90, 0x35, 0xae, 0x8f, 0x64, 0xe0, 0x5e, 0x9c, -+ 0x4c, 0x02, 0x76, 0xef, 0xbd, 0xa3, 0x11, 0xb2, 0xd3, 0x11, 0xc0, 0xc5, 0x7c, 0x29, 0x28, 0x3e, -+ 0x16, 0x4d, 0x7a, 0x3a, 0xe0, 0x4e, 0xfc, 0x1c, 0xa8, 0xb3, 0xc4, 0xda, 0x59, 0x67, 0x61, 0x02, -+ 0x43, 0x4b, 0x2a, 0x10, 0x5f, 0x96, 0x47, 0x8e, 0xc1, 0x8e, 0x77, 0x3f, 0x7d, 0x06, 0x18, 0x38, -+ 0x4d, 0x35, 0xe1, 0x0e, 0x3a, 0x8d, 0x54, 0x45, 0x27, 0xb6, 0x83, 0x45, 0x16, 0x37, 0xf1, 0x39, -+ 0x33, 0x8e, 0xa8, 0xa7, 0xe5, 0xec, 0xc3, 0x24, 0x16, 0xdc, 0x44, 0x22, 0xb7, 0x07, 0x63, 0xa7, -+ 0xaa, 0xa9, 0x0d, 0xb3, 0x3d, 0x24, 0x4e, 0x8b, 0xff, 0x69, 0x8b, 0xbc, 0x00, 0x24, 0xba, 0x6f, -+ 0x22, 0xd1, 0xc5, 0xa0, 0x9e, 0xaa, 0xba, 0x84, 0x49, 0x58, 0x27, 0x48, 0x9c, 0x18, 0x9d, 0xa6, -+ 0x9c, 0x1e, 0x09, 0x24, 0x32, 0x6e, 0x22, 0xb1, 0xb4, 0x9f, 0x2a, 0x0d, 0xa5, 0x48, 0xc4, 0x4d, -+ 0x48, 0x11, 0x9e, 0x95, 0x15, 0x75, 0x19, 0x48, 0x0c, 0xde, 0x44, 0xa2, 0xdf, 0x48, 0x91, 0xc0, -+ 0x7e, 0x64, 0x91, 0x7d, 0x82, 0xc4, 0x49, 0x75, 0x64, 0x7e, 0x16, 0x7e, 0xba, 0x24, 0xf3, 0x26, -+ 0x12, 0x79, 0x43, 0x98, 0x04, 0xf5, 0xf8, 0xad, 0x61, 0xce, 0x84, 0x14, 0xe1, 0xb9, 0xbd, 0x51, -+ 0x3f, 0x01, 0x89, 0x91, 0x9b, 0x48, 0x0c, 0x33, 0xa8, 0x07, 0xcc, 0xf0, 0xe3, 0x9d, 0x8b, 0x1c, -+ 0xbd, 0x53, 0x5d, 0xd8, 0x30, 0x23, 0x83, 0x7a, 0x74, 0x55, 0xeb, 0x35, 0xa9, 0x22, 0xfd, 0x6e, -+ 0x3c, 0xc1, 0x0c, 0xd4, 0xc3, 0xba, 0xdd, 0x13, 0x4e, 0x70, 0x85, 0x3f, 0x4e, 0xde, 0x2d, 0x3a, -+ 0x75, 0x13, 0x78, 0x35, 0xf5, 0xe0, 0xc5, 0xaf, 0x37, 0x81, 0x53, 0x0f, 0x96, 0x9c, 0xbd, 0x09, -+ 0x7c, 0x37, 0x85, 0xfd, 0x66, 0xf0, 0x3f, 0x53, 0xee, 0xf8, 0x26, 0xf0, 0x83, 0x14, 0xf6, 0xeb, -+ 0x6e, 0xf0, 0x21, 0x3f, 0x21, 0x98, 0xd3, 0x34, 0x8e, 0x8a, 0x72, 0xb4, 0x3b, 0xf9, 0xe7, 0x64, -+ 0xfc, 0x95, 0xa8, 0x5f, 0x2a, 0xa4, 0x07, 0x6a, 0x93, 0xf8, 0xfd, 0x32, 0x26, 0xf2, 0xa6, 0x27, -+ 0x2a, 0x89, 0x7c, 0x45, 0x3c, 0xb4, 0xa0, 0x79, 0xb8, 0x85, 0x64, 0xf5, 0x61, 0x98, 0x52, 0x29, -+ 0x3e, 0x71, 0xb0, 0xfa, 0xe2, 0x84, 0xee, 0x47, 0x41, 0x18, 0x54, 0x9d, 0x3a, 0xf5, 0x1c, 0xaa, -+ 0xf1, 0x86, 0x65, 0xf2, 0x6a, 0x3f, 0xf5, 0x08, 0xe0, 0xaf, 0xce, 0x6b, 0x13, 0xa5, 0xbf, 0x77, -+ 0xe1, 0x07, 0xb6, 0xae, 0x8f, 0x63, 0x76, 0x14, 0x69, 0x13, 0x2a, 0xbe, 0x9a, 0x4d, 0x81, 0xcb, -+ 0x26, 0x37, 0x31, 0xa8, 0x26, 0xf9, 0xe4, 0xa6, 0x7e, 0x6a, 0x20, 0xb2, 0x26, 0x37, 0x19, 0xa9, -+ 0xa6, 0xa9, 0xb8, 0xa8, 0xa6, 0xec, 0x29, 0xb8, 0xa8, 0xa6, 0xc5, 0xb8, 0x69, 0x55, 0x17, 0x7e, -+ 0xea, 0xe1, 0x11, 0x6b, 0x0b, 0x13, 0xed, 0x3d, 0x2e, 0x98, 0x87, 0x4b, 0x93, 0x2f, 0x18, 0x09, -+ 0x4d, 0xcb, 0x02, 0x5c, 0xb5, 0xb3, 0x7d, 0xc1, 0x29, 0x5c, 0x43, 0x8d, 0xeb, 0x8b, 0x7d, 0x71, -+ 0xf1, 0xf3, 0x87, 0xe3, 0xf4, 0xe5, 0x22, 0xf4, 0xb9, 0xe9, 0xf0, 0x32, 0x5c, 0xec, 0xbd, 0x40, -+ 0x8d, 0xc4, 0xbe, 0x54, 0x45, 0x39, 0x5e, 0xac, 0xa6, 0xc5, 0x16, 0x10, 0x28, 0x66, 0xf1, 0xfc, -+ 0x42, 0xe5, 0x55, 0x79, 0x54, 0x10, 0xd2, 0x3c, 0x9e, 0x89, 0x2f, 0xdd, 0x4b, 0xd5, 0xf5, 0xf4, -+ 0x41, 0xaf, 0x55, 0x38, 0xcd, 0x7d, 0xd5, 0x16, 0x19, 0x84, 0xec, 0xfa, 0x8e, 0x84, 0xde, 0x2c, -+ 0xf0, 0xc9, 0xd7, 0x54, 0xfc, 0x7e, 0x6c, 0x8d, 0xb8, 0x00, 0x48, 0x81, 0x3d, 0xc3, 0x34, 0xa3, -+ 0x2e, 0x1f, 0xc9, 0xbc, 0xb6, 0x6d, 0x21, 0x77, 0x56, 0x0e, 0x98, 0xc7, 0xe9, 0x73, 0x85, 0x5e, -+ 0xc8, 0x8c, 0x44, 0xf8, 0x21, 0x04, 0x9c, 0xc3, 0x7f, 0x44, 0xcb, 0x2a, 0x98, 0x30, 0xb5, 0x26, -+ 0xaa, 0x2e, 0xcc, 0x6f, 0xa1, 0xcb, 0x66, 0x35, 0xf9, 0x6b, 0x61, 0x7b, 0x79, 0x89, 0xdd, 0x92, -+ 0x8f, 0xac, 0xc5, 0x64, 0x35, 0xae, 0xd7, 0xb6, 0x01, 0xd9, 0x77, 0x0e, 0xe3, 0x9a, 0xfd, 0x0f, -+ 0x8f, 0xf5, 0x4f, 0x65, 0x79, 0x3d, 0xf5, 0xac, 0x83, 0x4a, 0xe9, 0xef, 0x91, 0x38, 0x1b, 0x57, -+ 0x7e, 0x3c, 0x49, 0x84, 0x8c, 0x63, 0x24, 0xbb, 0x01, 0x09, 0xb3, 0x88, 0x2a, 0x47, 0xd7, 0x85, -+ 0x78, 0xca, 0xd1, 0x99, 0x78, 0xc9, 0x7c, 0x74, 0x1c, 0x54, 0xe5, 0x29, 0x72, 0xff, 0x85, 0x1a, -+ 0x51, 0x22, 0xd7, 0xc5, 0x84, 0xfb, 0x11, 0xa2, 0x32, 0x46, 0xb1, 0xd6, 0x6f, 0xc2, 0xea, 0x5e, -+ 0x24, 0xda, 0xa9, 0x72, 0x77, 0xf7, 0x13, 0x36, 0x03, 0x94, 0xfd, 0x6d, 0xa0, 0x40, 0x16, 0x6f, -+ 0xc2, 0x5b, 0xe4, 0xd8, 0xc8, 0x09, 0xc9, 0xda, 0x97, 0x50, 0xd6, 0x5c, 0x66, 0xa2, 0x92, 0x2b, -+ 0x67, 0x3d, 0x75, 0x63, 0x05, 0xa1, 0x94, 0xfd, 0xec, 0x97, 0x4f, 0x42, 0xd5, 0xbe, 0x84, 0x42, -+ 0xb5, 0xc9, 0x34, 0x89, 0xda, 0x4b, 0x36, 0xdc, 0x46, 0x0f, 0xeb, 0xc4, 0xc5, 0xfa, 0x7a, 0x18, -+ 0x9b, 0xc3, 0x33, 0x63, 0x27, 0xb0, 0xef, 0x75, 0x62, 0xaf, 0x34, 0xbb, 0xb1, 0x9b, 0xc5, 0x76, -+ 0x26, 0x1f, 0xf8, 0x7f, 0x58, 0xd5, 0xe4, 0x11, 0x4c, 0xef, 0x14, 0x6c, 0xaf, 0xcd, 0x23, 0xd8, -+ 0x29, 0xe1, 0x15, 0xa6, 0x08, 0x43, 0x21, 0x80, 0x1a, 0x4a, 0x0a, 0xc8, 0xc6, 0xb7, 0xec, 0x74, -+ 0x28, 0xc8, 0x23, 0xf2, 0xc6, 0x80, 0x8d, 0xd6, 0x1b, 0x18, 0x7e, 0x3c, 0xb4, 0x3f, 0x14, 0x3c, -+ 0x92, 0xe7, 0x81, 0xb4, 0x8d, 0xfc, 0x72, 0xeb, 0x24, 0x3e, 0x5f, 0xf1, 0xed, 0xa6, 0xaa, 0xf7, -+ 0xdd, 0x0e, 0x98, 0x35, 0xce, 0x8a, 0x9b, 0x28, 0x6e, 0x7d, 0x3c, 0xf4, 0x3a, 0xe5, 0x27, 0xa7, -+ 0x80, 0x2c, 0xe9, 0x98, 0x0a, 0xf2, 0xbf, 0x1a, 0xff, 0x00, 0xa5, 0x1b, 0xcd, 0x14, 0x2c, 0xd8, -+ 0x5d, 0x5f, 0xef, 0x0b, 0x9b, 0x42, 0x08, 0x55, 0x4e, 0x25, 0xd4, 0x35, 0x95, 0x10, 0x35, 0x26, -+ 0x53, 0x79, 0x49, 0x3c, 0x30, 0x15, 0xe4, 0x06, 0x41, 0x16, 0x53, 0x82, 0x68, 0xfa, 0x62, 0x71, -+ 0x9e, 0x89, 0xa7, 0x5c, 0x8e, 0xab, 0x21, 0xef, 0xe6, 0x11, 0x04, 0x7e, 0x2c, 0x84, 0xb5, 0x0f, -+ 0x5b, 0xc8, 0x2c, 0x59, 0x3a, 0xf5, 0x52, 0x81, 0x99, 0x0c, 0x3a, 0xf8, 0xad, 0x53, 0x61, 0x46, -+ 0x1a, 0x2e, 0x7a, 0x43, 0xe7, 0xa8, 0x85, 0xf5, 0x05, 0xa1, 0x10, 0x3f, 0x4d, 0x53, 0x8d, 0x78, -+ 0x30, 0x2c, 0x5d, 0xb4, 0x36, 0x7f, 0x5c, 0x79, 0xd8, 0x92, 0x25, 0xc5, 0xb7, 0xc0, 0x24, 0x8f, -+ 0xe2, 0xa9, 0x35, 0xdb, 0xd9, 0x3d, 0x3b, 0x96, 0xc1, 0xc0, 0xcf, 0x61, 0x87, 0x5f, 0xc5, 0x13, -+ 0xea, 0x0d, 0x57, 0x77, 0xb3, 0x90, 0x8f, 0xbb, 0x37, 0xd8, 0xd9, 0x38, 0xaf, 0xec, 0xea, 0x7e, -+ 0x4d, 0x4e, 0xdd, 0x41, 0x3b, 0x47, 0x4c, 0xc3, 0x59, 0x65, 0x2f, 0x27, 0x4f, 0xa3, 0x6c, 0x1b, -+ 0xa2, 0xc4, 0xa0, 0xf6, 0xc7, 0xa7, 0x58, 0xb0, 0xa5, 0x6a, 0x95, 0x4b, 0xbc, 0xe4, 0xcb, 0x91, -+ 0x16, 0xa6, 0x19, 0x91, 0xc8, 0xa1, 0xf6, 0xc7, 0x28, 0x26, 0xfa, 0xbd, 0xf6, 0x8b, 0x05, 0xbd, -+ 0x3b, 0xe7, 0x18, 0xc2, 0x73, 0x16, 0x1c, 0x2c, 0x16, 0xb1, 0x3f, 0x8a, 0x79, 0x9b, 0xff, 0x9a, -+ 0x64, 0x3b, 0x55, 0xc6, 0xe0, 0xde, 0x33, 0xa7, 0xa0, 0x89, 0x77, 0xe7, 0xe0, 0x57, 0x7a, 0xa6, -+ 0xb4, 0xd1, 0x7c, 0x67, 0xb8, 0x6a, 0xd3, 0x43, 0x3c, 0xb5, 0xe9, 0x0c, 0x26, 0xbe, 0xbe, 0x7e, -+ 0x7d, 0x61, 0x49, 0xd9, 0xfa, 0xc2, 0xd2, 0xe2, 0xc2, 0x4d, 0xeb, 0x4b, 0xd4, 0x65, 0xe5, 0xaf, -+ 0x76, 0x2a, 0x02, 0xb5, 0x6d, 0x4a, 0xa6, 0x2a, 0x0a, 0xf6, 0xe4, 0x32, 0x5f, 0xaa, 0xf4, 0xc3, -+ 0x11, 0x85, 0x54, 0xfe, 0x12, 0xf4, 0x2a, 0x8a, 0xdb, 0xa8, 0xa5, 0x2a, 0x7c, 0x5c, 0xfb, 0xb4, -+ 0xfd, 0x0c, 0x84, 0xe2, 0x7c, 0xb5, 0x34, 0xd8, 0xf5, 0xad, 0x04, 0x3a, 0x7b, 0x84, 0x32, 0x62, -+ 0x84, 0xec, 0x32, 0x2e, 0xc5, 0x20, 0x7d, 0xde, 0xd9, 0x88, 0x75, 0x88, 0xaf, 0x13, 0xb6, 0x8a, -+ 0x84, 0x62, 0x8e, 0x5e, 0xfe, 0x0e, 0x2b, 0xef, 0xb0, 0x74, 0x5b, 0x18, 0x4d, 0xcf, 0x2f, 0x09, -+ 0xd1, 0x4b, 0xec, 0x54, 0xfd, 0x3d, 0x17, 0xcb, 0xc4, 0x20, 0xa3, 0xde, 0xe6, 0x6b, 0x5f, 0xe6, -+ 0xdd, 0xbf, 0xcd, 0x7a, 0x4f, 0xd3, 0x1c, 0x83, 0xe3, 0x95, 0xde, 0x3d, 0xea, 0xf1, 0x95, 0xea, -+ 0xa3, 0xb2, 0xc6, 0x3f, 0x59, 0x8a, 0xd3, 0x32, 0xee, 0x9d, 0x24, 0x17, 0x83, 0x92, 0xcb, 0xd6, -+ 0x42, 0x10, 0x46, 0x52, 0x54, 0x57, 0x66, 0xc5, 0xed, 0x1d, 0xd0, 0x1e, 0x01, 0xbf, 0x2f, 0x30, -+ 0x06, 0x95, 0xc4, 0xf4, 0x3f, 0x21, 0x49, 0x92, 0xb1, 0x45, 0x28, 0xc9, 0xea, 0xe7, 0x6c, 0x0f, -+ 0x95, 0xb5, 0xf0, 0x25, 0xd3, 0xb3, 0x5b, 0x84, 0x89, 0x59, 0x2b, 0x04, 0xc2, 0xe9, 0x85, 0xc6, -+ 0xfe, 0x1e, 0x32, 0x7b, 0x5b, 0x8b, 0xaf, 0xdf, 0x65, 0xad, 0x30, 0x24, 0x6b, 0xc5, 0x1a, 0xe1, -+ 0xf4, 0x22, 0x63, 0x2e, 0x0a, 0xe8, 0xa1, 0x23, 0xc4, 0x31, 0x18, 0x9a, 0x8d, 0xf3, 0xd3, 0x98, -+ 0xdf, 0x21, 0xa4, 0x25, 0x3b, 0xfc, 0x96, 0x13, 0x8b, 0x10, 0x22, 0x95, 0xb1, 0x4d, 0xf7, 0xc4, -+ 0x7a, 0x6b, 0x11, 0x07, 0x6d, 0xec, 0x08, 0x00, 0x55, 0x69, 0x37, 0x92, 0x4c, 0x02, 0xf6, 0xbe, -+ 0x68, 0xb9, 0x24, 0xd6, 0x82, 0x92, 0x85, 0xd4, 0xeb, 0xe2, 0x51, 0x35, 0xd0, 0xc7, 0x3a, 0x49, -+ 0x02, 0x12, 0x46, 0xda, 0x45, 0x5e, 0xa3, 0xbd, 0x51, 0xc7, 0xfd, 0x4a, 0xbc, 0x1f, 0x55, 0xe9, -+ 0xbd, 0xde, 0x8f, 0x1f, 0x91, 0x7e, 0x0f, 0x8a, 0xd9, 0xb9, 0xe3, 0x89, 0xbf, 0xc8, 0x7f, 0x08, -+ 0xff, 0xaa, 0xe1, 0x61, 0x5b, 0x6a, 0xce, 0x03, 0xf7, 0xa7, 0x3e, 0xfb, 0xfc, 0xb4, 0x65, 0x8b, -+ 0xbc, 0x4f, 0x04, 0xb1, 0x8b, 0xef, 0x45, 0xff, 0xe9, 0xfd, 0xf4, 0xc7, 0x89, 0xff, 0xf2, 0xfd, -+ 0xf4, 0x7c, 0xe7, 0xfb, 0xe9, 0x8b, 0x3c, 0xef, 0xa7, 0x4f, 0xfa, 0x8d, 0xf7, 0xd3, 0x27, 0x4d, -+ 0x7e, 0x3f, 0x7d, 0x9f, 0xfb, 0xfd, 0xf4, 0x38, 0xeb, 0x92, 0x34, 0x7d, 0x90, 0x83, 0xdf, 0x4f, -+ 0xff, 0x84, 0xa4, 0xd3, 0x08, 0x5f, 0xae, 0xf7, 0xd3, 0x6f, 0x6b, 0xf5, 0x32, 0x16, 0xe5, 0x09, -+ 0x85, 0x74, 0xa2, 0x96, 0xa1, 0x92, 0xde, 0xa1, 0x1d, 0x82, 0x51, 0xff, 0x9f, 0x7a, 0xd7, 0xaf, -+ 0xd9, 0xb7, 0xf7, 0xac, 0x69, 0xda, 0xba, 0xb1, 0x86, 0xf7, 0xae, 0x9d, 0x78, 0xa1, 0xef, 0xfb, -+ 0x6b, 0xef, 0x3d, 0x7f, 0xd7, 0x5f, 0x2e, 0x56, 0xfd, 0xb2, 0x55, 0xe0, 0xf3, 0x87, 0xa3, 0x6f, -+ 0x58, 0x9e, 0x8d, 0x7b, 0xf4, 0xe5, 0x8f, 0x2e, 0x07, 0xff, 0xeb, 0xbb, 0x85, 0xcd, 0x5f, 0xbe, -+ 0x51, 0xbf, 0xfa, 0x62, 0xfc, 0xa1, 0xf5, 0x17, 0xba, 0xde, 0x7b, 0xac, 0xea, 0xd3, 0xb5, 0x5d, -+ 0xc1, 0xab, 0x9f, 0x7f, 0xfb, 0xa9, 0x73, 0x3f, 0x3c, 0xf5, 0x5e, 0xde, 0xa3, 0x5f, 0xfe, 0xf5, -+ 0x72, 0xd2, 0x7b, 0x19, 0x7f, 0xfc, 0xcb, 0xb7, 0x3f, 0xd7, 0x1c, 0x8b, 0x7e, 0xe2, 0xfd, 0x6f, -+ 0x2f, 0x5e, 0xb9, 0x96, 0xf9, 0xc1, 0x1f, 0xbe, 0x4c, 0x48, 0x5b, 0x90, 0x37, 0xef, 0x2f, 0xe7, -+ 0xbe, 0xfb, 0xfc, 0xe1, 0x0b, 0xbf, 0xee, 0xf8, 0x6b, 0xe5, 0xe5, 0xcf, 0xd7, 0xed, 0x79, 0xf9, -+ 0xd8, 0x96, 0xcf, 0xf3, 0x0b, 0x0c, 0xb2, 0xbb, 0xff, 0x01, 0x16, 0x00, 0x33, 0x0a, 0x3f, 0xcf, -+ 0x91, 0x14, 0xd1, 0x2e, 0x9c, 0xf4, 0xce, 0xda, 0xdc, 0xf4, 0x80, 0x2c, 0xdf, 0x36, 0x39, 0xb7, -+ 0x15, 0x99, 0x72, 0xcd, 0x9c, 0xd2, 0x19, 0x28, 0x70, 0xd1, 0x83, 0x5e, 0xaf, 0x7c, 0xfc, 0x7a, -+ 0x45, 0x63, 0x84, 0xf2, 0xb3, 0xbd, 0x3d, 0x7f, 0xbd, 0xfe, 0xd8, 0xf6, 0x27, 0xa8, 0x17, 0xe7, -+ 0xfe, 0xfe, 0xbe, 0xd4, 0xdf, 0xdf, 0x97, 0xfa, 0x7f, 0xea, 0x7d, 0xa9, 0x7f, 0x44, 0xff, 0xf9, -+ 0x7d, 0xa9, 0x63, 0xd2, 0x58, 0xfa, 0xae, 0xce, 0x94, 0xa7, 0xeb, 0x2e, 0x64, 0x87, 0xc4, 0x05, -+ 0x3f, 0xb9, 0xf2, 0x7f, 0xfb, 0xdb, 0x29, 0x57, 0x96, 0x96, 0x55, 0xc2, 0xe1, 0xff, 0x8f, 0xdf, -+ 0x60, 0xfa, 0x5f, 0xbd, 0x36, 0xee, 0xbf, 0x78, 0x7b, 0x66, 0x7d, 0x65, 0x63, 0xd9, 0xfa, 0x0d, -+ 0xc5, 0x75, 0xeb, 0x6b, 0xab, 0x0a, 0x61, 0x75, 0x2d, 0xd3, 0x94, 0x15, 0xfd, 0xf6, 0x7b, 0x34, -+ 0x59, 0xa9, 0xce, 0x75, 0x4e, 0xaa, 0x17, 0xa2, 0x19, 0x1c, 0x39, 0xfc, 0x70, 0x66, 0x70, 0x6c, -+ 0xf0, 0x23, 0x84, 0xb3, 0x44, 0x3d, 0x29, 0x9a, 0xc1, 0xa1, 0x27, 0xe9, 0xa5, 0x91, 0x33, 0x38, -+ 0xbd, 0x89, 0x7a, 0x69, 0x6c, 0x32, 0xff, 0x2e, 0x74, 0x4c, 0x9a, 0xad, 0x4f, 0xe9, 0x93, 0x7a, -+ 0x1f, 0xe7, 0xd3, 0xb3, 0xf3, 0x92, 0xf9, 0x4a, 0xf9, 0x31, 0x69, 0xde, 0x00, 0x34, 0x84, 0x0f, -+ 0xf3, 0x89, 0x24, 0x83, 0x6a, 0x66, 0x32, 0xe7, 0x33, 0xf8, 0x79, 0x20, 0x39, 0xe0, 0xce, 0x28, -+ 0x56, 0xa1, 0x8c, 0x95, 0xcc, 0xb9, 0x2f, 0xd9, 0xa0, 0x4a, 0x87, 0x9f, 0x54, 0x85, 0x4d, 0x55, -+ 0xa2, 0x61, 0x95, 0x6a, 0xc2, 0xac, 0xae, 0x77, 0x13, 0x4e, 0x7a, 0x2b, 0x61, 0xbe, 0xf8, 0x43, -+ 0x1d, 0xed, 0xc3, 0xea, 0x24, 0xbf, 0x76, 0x73, 0xeb, 0xc8, 0xc8, 0x85, 0x93, 0x6b, 0x4f, 0x7e, -+ 0x35, 0xf8, 0xed, 0xc8, 0x91, 0xb5, 0x43, 0x23, 0xbd, 0x1f, 0x9f, 0x5f, 0x92, 0x9e, 0x54, 0x71, -+ 0x66, 0xfe, 0xf7, 0x4b, 0xa7, 0xbc, 0x2c, 0x90, 0xff, 0x66, 0x48, 0xf2, 0xd2, 0xda, 0xc4, 0x57, -+ 0x6b, 0xc3, 0x5e, 0x58, 0xfa, 0x60, 0xed, 0xb3, 0x61, 0x8b, 0x49, 0x7a, 0xca, 0xff, 0xd1, 0xf7, -+ 0x05, 0xda, 0x48, 0x67, 0x9c, 0x43, 0xc5, 0x00, 0x34, 0xe7, 0x9a, 0x4c, 0x73, 0xad, 0xc9, 0x0c, -+ 0x57, 0xfc, 0x50, 0x0c, 0x6b, 0xa9, 0x1e, 0x7e, 0xfd, 0xe8, 0x6d, 0xd7, 0xe8, 0xae, 0xb8, 0x08, -+ 0x23, 0x4f, 0x82, 0xbf, 0x3c, 0xd7, 0x79, 0x91, 0x0b, 0xb6, 0xc8, 0x75, 0xaf, 0xe1, 0x2c, 0xe1, -+ 0x7c, 0x93, 0x7a, 0x34, 0xe1, 0x8c, 0x9b, 0x16, 0xc1, 0xef, 0x43, 0x08, 0x79, 0x5e, 0x70, 0x7e, -+ 0xcd, 0xf3, 0xa6, 0x73, 0x27, 0xbc, 0xfb, 0x57, 0xe8, 0x82, 0xc1, 0x2f, 0xae, 0x8c, 0x9a, 0xf4, -+ 0x8b, 0xa3, 0x57, 0x14, 0x89, 0x50, 0x82, 0x0b, 0xc6, 0xfd, 0x8b, 0xdb, 0x39, 0x71, 0x80, 0x1f, -+ 0x8e, 0x71, 0x5c, 0xe4, 0xfe, 0x75, 0xb7, 0xe3, 0xe7, 0xec, 0x20, 0x4c, 0xf0, 0xfc, 0xba, 0xdb, -+ 0x37, 0xb9, 0xce, 0x37, 0x4d, 0x6a, 0x17, 0x01, 0xfe, 0x47, 0xe1, 0x18, 0xaf, 0x53, 0xee, 0x5f, -+ 0x8a, 0x2e, 0xc4, 0x7e, 0xbb, 0x5c, 0x31, 0x84, 0xfb, 0xd7, 0x8d, 0xe7, 0x05, 0xe4, 0x5c, 0xfb, -+ 0xdd, 0xbf, 0x6e, 0xf8, 0xd7, 0x5d, 0xfc, 0xbd, 0x3e, 0x89, 0x4f, 0xdc, 0xfe, 0x81, 0xeb, 0xfc, -+ 0x83, 0x49, 0xed, 0xbb, 0x81, 0xee, 0xc7, 0xc8, 0x19, 0xd3, 0xb9, 0x7f, 0xdd, 0xf8, 0x3f, 0x77, -+ 0xe1, 0xfd, 0x7c, 0x12, 0x7e, 0x21, 0xc0, 0x9f, 0x76, 0xf1, 0x77, 0x7a, 0x12, 0x9f, 0x18, 0x1e, -+ 0xbf, 0x3f, 0x13, 0x8f, 0x9b, 0xfb, 0x97, 0x6a, 0x8f, 0x74, 0xea, 0xd7, 0xad, 0x72, 0xc2, 0xcd, -+ 0x8f, 0xd0, 0x79, 0xcc, 0x45, 0x13, 0xbf, 0xb8, 0x9d, 0xc1, 0x9f, 0x18, 0x1b, 0x77, 0x9f, 0xf7, -+ 0xe0, 0xc0, 0xdb, 0x75, 0xfc, 0x00, 0x5c, 0xaf, 0x77, 0xda, 0xc3, 0x7e, 0x6c, 0x0f, 0x9b, 0xb0, -+ 0xbf, 0x88, 0xaf, 0x07, 0x3f, 0xf4, 0x5f, 0xb9, 0x00, 0x0a, 0xba, 0xa8, 0x60, 0x43, 0x7c, 0x51, -+ 0x31, 0x78, 0xaa, 0x9a, 0x62, 0xea, 0xbc, 0xbc, 0xac, 0xa4, 0xb8, 0xae, 0xac, 0xa2, 0x38, 0x1e, -+ 0xff, 0xb7, 0x4b, 0x75, 0xf1, 0x1a, 0x69, 0x59, 0x1a, 0xd5, 0x5e, 0x51, 0x5c, 0x51, 0x5b, 0xec, -+ 0x3c, 0x8f, 0x2f, 0x4b, 0x4d, 0xb9, 0x95, 0x73, 0x98, 0xfa, 0x88, 0xe8, 0x54, 0x6c, 0xc5, 0x95, -+ 0x45, 0x54, 0xdf, 0xc9, 0xa5, 0xea, 0x37, 0xdc, 0xa5, 0xba, 0x31, 0x8a, 0xa7, 0x10, 0xc0, 0x55, -+ 0xcd, 0xa4, 0x0b, 0x1e, 0x96, 0x37, 0xab, 0xcb, 0xeb, 0x8b, 0x0b, 0x0a, 0x2b, 0x34, 0x4e, 0xaf, -+ 0xba, 0xa1, 0xec, 0xbf, 0xf7, 0x8f, 0x6a, 0x75, 0x4d, 0x61, 0x69, 0x6a, 0xca, 0x9c, 0xfa, 0xca, -+ 0x4d, 0x95, 0x55, 0x0d, 0x95, 0x73, 0x9c, 0x45, 0xf2, 0x1b, 0x2a, 0xeb, 0xff, 0x27, 0x5f, 0xa5, -+ 0xed, 0xd2, 0xb1, 0xf3, 0xd5, 0xc3, 0xe8, 0xf7, 0xcf, 0xef, 0x9f, 0xdf, 0x3f, 0xbf, 0x7f, 0x7e, -+ 0xff, 0xfc, 0xfe, 0xf9, 0xfd, 0xf3, 0xfb, 0xe7, 0xf7, 0xcf, 0xef, 0x9f, 0xdf, 0x3f, 0xff, 0x4f, -+ 0x7e, 0xfe, 0x3f, 0x58, 0xb7, 0xf7, 0x26, 0x00, 0x78, 0x00, 0x00 -+}; -+ -+static unsigned char wcn_bind_verify_lib[] = { -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0x5b, 0x7b, 0x78, 0x53, 0xc7, -+ 0x95, 0x9f, 0x7b, 0xaf, 0xfc, 0x40, 0xf2, 0xdb, 0xe6, 0x61, 0x6c, 0x2c, 0xc9, 0x36, 0x0f, 0x3b, -+ 0x48, 0xb6, 0xc1, 0x36, 0x76, 0x82, 0x83, 0x2c, 0xf3, 0x74, 0x28, 0xc1, 0x0e, 0xd9, 0x92, 0x92, -+ 0x56, 0xc8, 0xd2, 0xb5, 0x25, 0x90, 0x25, 0xa1, 0x07, 0x36, 0x21, 0x59, 0x1c, 0x02, 0xa4, 0xcd, -+ 0xa3, 0xc1, 0x0d, 0x49, 0x60, 0x79, 0x14, 0x1b, 0x08, 0xe0, 0x34, 0x2d, 0xdb, 0x84, 0x26, 0xb0, -+ 0x2d, 0xaf, 0x10, 0x42, 0xd2, 0x7c, 0x5b, 0x5a, 0x17, 0xc2, 0x36, 0xb4, 0x71, 0x1e, 0x6d, 0x09, -+ 0x6c, 0x5b, 0x58, 0x48, 0x82, 0x37, 0x80, 0xf7, 0xcc, 0xbd, 0x33, 0x57, 0xd2, 0x48, 0xda, 0xb4, -+ 0xfd, 0x76, 0xff, 0xd8, 0x6f, 0x3d, 0xdf, 0xc7, 0x9d, 0x33, 0xbf, 0x39, 0xe7, 0xcc, 0x39, 0x67, -+ 0xce, 0x9c, 0xfb, 0x90, 0xe9, 0xb0, 0xb9, 0x2d, 0x2d, 0x4e, 0xb7, 0xdd, 0xb2, 0x52, 0xf4, 0x39, -+ 0x5b, 0x57, 0x19, 0x3d, 0xe8, 0x7f, 0xbe, 0x95, 0x43, 0xab, 0xae, 0xae, 0xc4, 0x7d, 0xc5, 0xb4, -+ 0xaa, 0x0a, 0xd2, 0x4f, 0x95, 0xf0, 0xf2, 0xf2, 0xa9, 0x95, 0xd3, 0xa6, 0x96, 0xa3, 0x8a, 0xa9, -+ 0x80, 0x54, 0x4c, 0x83, 0x06, 0x7c, 0x15, 0x55, 0x53, 0xa7, 0x56, 0x20, 0x5d, 0xf9, 0xff, 0x82, -+ 0x2d, 0x51, 0x2d, 0xe8, 0x0f, 0x58, 0x7d, 0x3a, 0x1d, 0x7a, 0xc8, 0x61, 0xf5, 0xac, 0xf2, 0x04, -+ 0x57, 0x39, 0xe3, 0xf0, 0x7d, 0xd5, 0xfc, 0xff, 0xd1, 0xb6, 0x66, 0xd6, 0xfc, 0xd9, 0x3c, 0xc7, -+ 0x29, 0x63, 0x0e, 0xbd, 0x86, 0xb8, 0x18, 0x7c, 0x63, 0x2a, 0x43, 0xb4, 0x89, 0x5c, 0x47, 0xa3, -+ 0x1c, 0x74, 0x6b, 0x75, 0xdf, 0x7e, 0x01, 0x75, 0xfd, 0xea, 0x96, 0x80, 0xba, 0xaf, 0xdd, 0xc7, -+ 0xed, 0xff, 0x81, 0x8d, 0xeb, 0xfe, 0x6c, 0x09, 0xbf, 0xff, 0x0b, 0x9b, 0xb0, 0xff, 0x87, 0xa9, -+ 0x68, 0xf1, 0x60, 0x11, 0x1a, 0x3c, 0xc1, 0x99, 0x06, 0x7b, 0x7f, 0x84, 0x06, 0x79, 0xe0, 0x1b, -+ 0xaf, 0x32, 0xd5, 0xea, 0x33, 0x50, 0x77, 0xf1, 0x31, 0x4b, 0x4d, 0xe1, 0x80, 0xa5, 0x66, 0xc2, -+ 0x15, 0x4b, 0xcd, 0x9e, 0xe9, 0x19, 0xf7, 0x9d, 0xd0, 0xf1, 0xa5, 0xbb, 0x97, 0xaa, 0x4a, 0xd7, -+ 0x22, 0xbe, 0x74, 0xad, 0xb3, 0xe8, 0x75, 0x1b, 0xf0, 0xac, 0x41, 0xdc, 0xd5, 0x47, 0x6f, 0x0f, -+ 0x2d, 0xfa, 0x50, 0x48, 0xe9, 0x7b, 0x9c, 0x13, 0xba, 0x8b, 0x92, 0x4d, 0x25, 0x92, 0x6c, 0xa5, -+ 0xe9, 0xd0, 0x78, 0x9d, 0xe9, 0xd0, 0x10, 0xe2, 0x2e, 0xef, 0x42, 0x82, 0x66, 0xd6, 0xdc, 0xb5, -+ 0xd9, 0x1b, 0xe6, 0xaf, 0xcb, 0xde, 0x93, 0x7f, 0xa2, 0xf1, 0xd4, 0xcc, 0x93, 0x8d, 0xbd, 0x29, -+ 0xe6, 0xc6, 0x93, 0x93, 0x66, 0x36, 0x82, 0x2e, 0x8d, 0x19, 0xe6, 0x0b, 0xa7, 0xa3, 0x43, 0x7a, -+ 0xd0, 0x33, 0x72, 0x61, 0x63, 0x49, 0xc2, 0xb5, 0xf5, 0xcd, 0xd9, 0x9d, 0xf7, 0x94, 0x24, 0x82, -+ 0x2d, 0x59, 0x33, 0xe7, 0x97, 0xcc, 0x6a, 0xda, 0xe7, 0xcb, 0x98, 0xfe, 0xb5, 0x92, 0xcb, 0x42, -+ 0x41, 0x69, 0x7b, 0x32, 0x5a, 0x7c, 0x49, 0xc8, 0x2c, 0xfd, 0x58, 0xc8, 0x2a, 0xfd, 0xa3, 0x90, -+ 0x5d, 0xfa, 0xb9, 0x90, 0x5e, 0xfa, 0xa9, 0x90, 0x51, 0x7a, 0x51, 0xc8, 0x29, 0xfd, 0x44, 0x18, -+ 0x59, 0xaa, 0x46, 0x28, 0xe7, 0x4d, 0x47, 0xfb, 0xeb, 0x9f, 0x0b, 0x23, 0x4a, 0x2f, 0x0b, 0x49, -+ 0x30, 0xa7, 0x06, 0xbe, 0xe4, 0xd2, 0x4b, 0x82, 0x00, 0x3c, 0x2a, 0x90, 0xe3, 0x81, 0x8f, 0x2b, -+ 0x5d, 0x35, 0xf9, 0xb1, 0x6c, 0x3d, 0x57, 0xa4, 0xde, 0x5c, 0xb9, 0x2e, 0xbb, 0x05, 0xa9, 0xd5, -+ 0xb5, 0x79, 0x6f, 0x34, 0xbe, 0xe0, 0x6c, 0x7d, 0xbd, 0x10, 0xf1, 0x8d, 0x63, 0x34, 0x27, 0x1b, -+ 0x3f, 0x44, 0xc9, 0x8d, 0xb5, 0x6d, 0x6f, 0x34, 0x9e, 0x02, 0x5f, 0xde, 0xe4, 0x13, 0x34, 0x85, -+ 0x02, 0xaf, 0xa9, 0x46, 0x2a, 0xf5, 0x07, 0x48, 0x75, 0x95, 0xe3, 0x92, 0xd4, 0x66, 0x94, 0xa0, -+ 0x19, 0xb3, 0xe4, 0x64, 0xe3, 0x71, 0x9e, 0x6b, 0xfc, 0x3a, 0x1a, 0xad, 0xe1, 0x04, 0x4e, 0xf3, -+ 0x11, 0xaf, 0xd1, 0x7c, 0xc8, 0x73, 0x1a, 0xee, 0xe6, 0xd0, 0xa2, 0x1e, 0xe8, 0xd7, 0xf1, 0x2a, -+ 0x8d, 0x83, 0x4f, 0xd6, 0xbc, 0x25, 0x24, 0x69, 0xcc, 0x3c, 0xaf, 0x29, 0xe2, 0x05, 0x8d, 0x9a, -+ 0x57, 0x6b, 0x3e, 0xe5, 0x46, 0x68, 0xb8, 0x0c, 0x75, 0xc9, 0x9e, 0x1f, 0x99, 0x06, 0x8f, 0x43, -+ 0xdc, 0x7b, 0x10, 0xf7, 0x4e, 0x72, 0xbe, 0xa6, 0x84, 0x4f, 0x49, 0x29, 0x51, 0x17, 0xa7, 0x96, -+ 0x7c, 0x88, 0xd0, 0xc1, 0x6b, 0xf7, 0xd5, 0xef, 0xff, 0x6c, 0x89, 0x19, 0xf6, 0xa8, 0x61, 0xff, -+ 0x60, 0x91, 0x69, 0xf0, 0xd6, 0xea, 0x73, 0xfb, 0x8e, 0x09, 0x96, 0x73, 0xb0, 0xa9, 0x9b, 0xd8, -+ 0x7d, 0x07, 0x7f, 0xfa, 0xf0, 0xfe, 0xae, 0x87, 0x7d, 0x9b, 0x84, 0x84, 0x27, 0x1f, 0x4f, 0x36, -+ 0xd5, 0xae, 0x4b, 0x41, 0xdd, 0x6b, 0xcf, 0x58, 0x6a, 0x12, 0x1d, 0xb6, 0x9a, 0xfd, 0x28, 0x49, -+ 0xfd, 0x7b, 0x94, 0xd0, 0x68, 0x53, 0xa1, 0xee, 0x09, 0x5c, 0x62, 0x63, 0x2f, 0xe2, 0xd5, 0x27, -+ 0xc0, 0xcf, 0x35, 0x19, 0xe8, 0x2a, 0x5f, 0x81, 0x6a, 0xeb, 0x21, 0xee, 0x58, 0xf7, 0xad, 0xd5, -+ 0x07, 0xf7, 0x7f, 0xf2, 0xee, 0xb6, 0xe6, 0x5d, 0x67, 0x9e, 0x6b, 0x9e, 0xed, 0xde, 0xd1, 0x8c, -+ 0xf3, 0x05, 0xe7, 0xc9, 0xe7, 0x02, 0xea, 0xc3, 0x79, 0xf3, 0x99, 0x30, 0xaa, 0xef, 0x5a, 0x36, -+ 0x5a, 0x6c, 0xde, 0xbb, 0xa3, 0xb9, 0xb8, 0xfe, 0x65, 0xdf, 0xc7, 0xae, 0xd7, 0x7c, 0x1f, 0xed, -+ 0x7f, 0xd5, 0x77, 0xea, 0xe9, 0xbd, 0xbe, 0xeb, 0x60, 0x83, 0x95, 0x07, 0x5f, 0xbe, 0x8e, 0x06, -+ 0x39, 0xb0, 0xa5, 0x67, 0x94, 0xa9, 0xe6, 0xf7, 0xf7, 0x3e, 0xd1, 0xbc, 0x3b, 0x3d, 0xb3, 0x64, -+ 0x5d, 0xe6, 0xd3, 0xcd, 0x2f, 0x6a, 0xb2, 0x4a, 0x6c, 0x55, 0x5b, 0x9b, 0x0b, 0x77, 0x6d, 0x69, -+ 0xd6, 0xa1, 0xae, 0xe6, 0x37, 0xf5, 0x7d, 0xbe, 0x73, 0x59, 0xa8, 0x7b, 0xf7, 0xd2, 0x57, 0x7c, -+ 0xb6, 0x2b, 0xbb, 0x7c, 0xfc, 0xc3, 0x2f, 0xf9, 0x3e, 0xe0, 0x47, 0x5e, 0xee, 0xf9, 0x18, 0xd5, -+ 0xf6, 0x34, 0xd4, 0xfd, 0x72, 0xe7, 0x6a, 0x74, 0xe8, 0x68, 0x03, 0x1a, 0xdc, 0xb3, 0x15, 0x1d, -+ 0xda, 0xfd, 0x4c, 0x76, 0x49, 0xef, 0x5e, 0x74, 0xa8, 0x8b, 0x43, 0x8b, 0xf4, 0x26, 0xdd, 0x93, -+ 0xbd, 0xbc, 0xa9, 0x16, 0xa9, 0x50, 0xa6, 0x16, 0x71, 0x2b, 0x30, 0x5f, 0xa1, 0xee, 0xee, 0xda, -+ 0xa5, 0x1a, 0xb4, 0xe8, 0x60, 0x22, 0xea, 0x96, 0x74, 0x80, 0xfc, 0x71, 0xf0, 0x49, 0x7b, 0x01, -+ 0xad, 0xf8, 0x54, 0x23, 0xcb, 0x7c, 0x94, 0xde, 0x95, 0x25, 0xc9, 0xdc, 0x44, 0x2b, 0x30, 0xff, -+ 0x45, 0x84, 0x16, 0x61, 0x3e, 0x3c, 0x47, 0x75, 0xcd, 0x00, 0xdc, 0x3a, 0x04, 0x7b, 0xf7, 0x31, -+ 0xea, 0x1e, 0x00, 0x7f, 0xa6, 0x0c, 0x0d, 0xbd, 0xb0, 0x13, 0x68, 0xed, 0xc3, 0x68, 0xff, 0xce, -+ 0x22, 0x4e, 0xee, 0x6d, 0x72, 0x7f, 0x74, 0x1a, 0x1a, 0xdc, 0xb9, 0xda, 0x74, 0x68, 0x57, 0x83, -+ 0x69, 0x90, 0xf7, 0x3e, 0xd2, 0x8f, 0x65, 0x20, 0x8f, 0x9f, 0xc4, 0x72, 0xbd, 0x1f, 0x70, 0xb5, -+ 0xbd, 0x60, 0x7b, 0xc3, 0xcd, 0x85, 0xfd, 0x73, 0x6e, 0xce, 0xed, 0x9f, 0x7d, 0x73, 0x71, 0xff, -+ 0xac, 0x9b, 0x4b, 0xfb, 0x67, 0xde, 0x74, 0xf4, 0xef, 0x7a, 0x8f, 0xab, 0x6d, 0xb8, 0xe9, 0xed, -+ 0x37, 0xdf, 0xec, 0xec, 0xdf, 0xfb, 0x3e, 0x57, 0xfb, 0x62, 0x3f, 0x57, 0xbb, 0xe7, 0x17, 0x5c, -+ 0xed, 0xee, 0x9f, 0x73, 0xb5, 0xbb, 0xde, 0x02, 0xb9, 0x37, 0xb8, 0xda, 0x1c, 0x58, 0xf7, 0x43, -+ 0x21, 0xa7, 0x0f, 0x09, 0x5d, 0xcd, 0xbd, 0xe9, 0x4d, 0x25, 0x7a, 0xd8, 0x37, 0x73, 0xf1, 0xb1, -+ 0xb1, 0x36, 0xf8, 0x57, 0x78, 0x45, 0x5b, 0x53, 0x94, 0x82, 0x6a, 0x7b, 0x9f, 0x35, 0x1d, 0xc2, -+ 0x58, 0x61, 0x3e, 0xd0, 0x2f, 0x10, 0x7a, 0x32, 0xd0, 0x5b, 0x09, 0x3d, 0x1d, 0xe8, 0xef, 0x13, -+ 0x7a, 0x3e, 0xd0, 0xbb, 0x08, 0xfd, 0x20, 0xd0, 0x7b, 0x65, 0x1a, 0xe9, 0x50, 0x93, 0x56, 0x87, -+ 0x2a, 0x0a, 0x5d, 0xa8, 0xf6, 0x38, 0xe4, 0xec, 0xce, 0xaf, 0x9b, 0x06, 0xf1, 0x1e, 0x72, 0x90, -+ 0x8f, 0x08, 0xf6, 0xc8, 0xaa, 0x0a, 0xe5, 0xe1, 0xad, 0xd5, 0x3f, 0x97, 0xf2, 0x4f, 0xab, 0x13, -+ 0xce, 0x62, 0x5f, 0x71, 0xac, 0xb1, 0xaf, 0x9f, 0xde, 0x1e, 0x7a, 0xe1, 0x28, 0xec, 0x41, 0x0f, -+ 0xc4, 0x01, 0xcb, 0xe8, 0x51, 0x72, 0x77, 0x0f, 0xf8, 0xbe, 0x63, 0x68, 0x68, 0x74, 0x21, 0xc4, -+ 0xf6, 0x63, 0x88, 0x3b, 0x07, 0xf1, 0x9d, 0x31, 0x80, 0x56, 0x34, 0x40, 0x7c, 0xbb, 0x3e, 0x1f, -+ 0x5a, 0xd4, 0x0b, 0x71, 0x37, 0x9b, 0xf4, 0x4f, 0xea, 0x09, 0x6e, 0x01, 0xfc, 0xd8, 0x67, 0xb1, -+ 0xf1, 0x1e, 0xd8, 0xc7, 0xbd, 0xa0, 0x2b, 0x3c, 0xef, 0x6f, 0xad, 0x7e, 0x7d, 0x3f, 0xad, 0x65, -+ 0xaf, 0xbe, 0x41, 0x73, 0x94, 0xeb, 0xeb, 0x4f, 0x40, 0x8b, 0x71, 0xdc, 0x3e, 0x83, 0x7c, 0x6d, -+ 0x01, 0x3f, 0x7a, 0x67, 0xc8, 0xf5, 0xac, 0x11, 0xe2, 0x79, 0x49, 0x40, 0xa5, 0x4b, 0x05, 0x54, -+ 0xb5, 0xb3, 0x81, 0xeb, 0xc6, 0xf9, 0xf9, 0x11, 0xf0, 0x98, 0x8b, 0x51, 0xf7, 0xba, 0x87, 0xac, -+ 0x37, 0x76, 0x2d, 0xb3, 0xd6, 0xe0, 0x18, 0xcf, 0x80, 0xf3, 0xd0, 0x00, 0xf1, 0x9d, 0xe9, 0xd5, -+ 0xde, 0xd0, 0x43, 0x1e, 0x7c, 0x02, 0xf9, 0xbe, 0xa7, 0x9f, 0xeb, 0x16, 0x10, 0xe4, 0x1b, 0x9c, -+ 0x27, 0x1e, 0xea, 0x20, 0x07, 0xf5, 0xf0, 0x28, 0x42, 0x97, 0xcd, 0xa8, 0x48, 0x6d, 0x45, 0x9c, -+ 0xba, 0x1e, 0x71, 0x8d, 0x8f, 0xe6, 0xa0, 0x9a, 0x0f, 0xa5, 0x1a, 0x38, 0xaa, 0x6f, 0x40, 0x18, -+ 0xd9, 0x97, 0x8f, 0xf3, 0x66, 0x46, 0x28, 0x96, 0x03, 0x50, 0x83, 0x7a, 0x50, 0x78, 0x2c, 0x4f, -+ 0x2b, 0x67, 0x19, 0xc7, 0x33, 0xe4, 0xd7, 0x6b, 0x8a, 0x5f, 0xaf, 0x08, 0x72, 0x8d, 0xc6, 0xe7, -+ 0x6a, 0x64, 0x12, 0xf6, 0x2b, 0xbb, 0x0f, 0x9f, 0xc3, 0x5e, 0xec, 0xd7, 0x1c, 0xd9, 0x2f, 0x9c, -+ 0x27, 0x03, 0x2a, 0x54, 0xd5, 0xfb, 0x98, 0xec, 0x13, 0xd4, 0xb6, 0x3e, 0x1b, 0xf8, 0x24, 0x82, -+ 0x4f, 0x27, 0xc3, 0x7c, 0xb2, 0x83, 0x4f, 0x22, 0xf1, 0xe9, 0x45, 0x88, 0x17, 0xae, 0x15, 0xb3, -+ 0xa0, 0x56, 0x98, 0xc1, 0xa7, 0x7a, 0xf0, 0x69, 0x26, 0xd4, 0x89, 0x89, 0x50, 0x1f, 0xa0, 0x0e, -+ 0xa9, 0x3f, 0x81, 0x1a, 0xf7, 0x28, 0xf8, 0x74, 0xdc, 0x51, 0x54, 0x83, 0xeb, 0xc5, 0x9a, 0x72, -+ 0x74, 0xb5, 0x47, 0xf2, 0x2d, 0x51, 0xaa, 0x31, 0xe3, 0x21, 0x16, 0x7a, 0x90, 0x2b, 0xbe, 0x22, -+ 0xdf, 0x1b, 0xd6, 0xa1, 0xf1, 0x6a, 0x5c, 0x4f, 0xa0, 0x8e, 0x37, 0xae, 0x5d, 0x46, 0x64, 0x60, -+ 0x4d, 0x7c, 0xfe, 0x7a, 0xe7, 0x40, 0x3d, 0x00, 0x7b, 0x21, 0x46, 0xef, 0x44, 0xfa, 0xff, 0x76, -+ 0x1c, 0xff, 0x0f, 0x2b, 0xfe, 0x63, 0xbf, 0xb1, 0xff, 0x78, 0x2f, 0xb3, 0xc1, 0x7f, 0x7c, 0x0e, -+ 0xa5, 0xfa, 0x52, 0x26, 0xd7, 0x97, 0xef, 0xff, 0x23, 0xda, 0x8f, 0xe5, 0x75, 0x1c, 0xaa, 0xec, -+ 0x2d, 0x93, 0x63, 0x8d, 0xd7, 0xb1, 0x26, 0x84, 0xaf, 0x73, 0x4a, 0x5a, 0xe7, 0x23, 0xd8, 0x93, -+ 0x9f, 0x80, 0xdf, 0x58, 0x6e, 0x37, 0xcf, 0x3d, 0xd9, 0x00, 0xbe, 0xcf, 0x4a, 0x96, 0xfd, 0x37, -+ 0x81, 0xef, 0xeb, 0xca, 0x4d, 0xb5, 0xad, 0x28, 0x41, 0x0d, 0xf7, 0xa9, 0xc6, 0x93, 0x48, 0xd5, -+ 0xb8, 0x14, 0x21, 0x75, 0x17, 0x42, 0x8d, 0xc7, 0x96, 0xe9, 0x95, 0x18, 0xe2, 0x1a, 0x39, 0x00, -+ 0xfb, 0xdb, 0x03, 0x75, 0x60, 0x29, 0xc4, 0x7d, 0xe9, 0xcd, 0xa1, 0x2a, 0x4c, 0xe3, 0xfd, 0xe6, -+ 0xf9, 0xae, 0x5f, 0x61, 0x5b, 0x4c, 0x1c, 0x22, 0xd8, 0xa8, 0xbe, 0xa7, 0x81, 0xc7, 0xf4, 0xe5, -+ 0x50, 0x15, 0xce, 0x47, 0x5c, 0x3b, 0xee, 0x83, 0xf1, 0x39, 0xc8, 0x63, 0xec, 0x2f, 0xae, 0x7f, -+ 0xfd, 0x24, 0xa7, 0xc3, 0xfd, 0xdf, 0x5c, 0xf6, 0x84, 0xb9, 0x7b, 0xe6, 0xb4, 0x15, 0xbf, 0xf8, -+ 0xf2, 0xd8, 0xc1, 0x3d, 0xef, 0x1f, 0xfc, 0x74, 0xc9, 0x89, 0x7f, 0xa8, 0xbd, 0x9a, 0x79, 0xf5, -+ 0x81, 0xdd, 0x6b, 0x67, 0x7c, 0xef, 0xec, 0xb7, 0xf2, 0x5f, 0xda, 0xdc, 0x97, 0x74, 0x9e, 0x5b, -+ 0xf2, 0x58, 0xd6, 0x91, 0xf5, 0x15, 0xc5, 0x6f, 0x3c, 0x92, 0x72, 0x7f, 0xe0, 0x9b, 0x47, 0x7c, -+ 0xb7, 0xff, 0xf9, 0x77, 0x5d, 0x7b, 0x13, 0x2f, 0x6c, 0x0d, 0x5c, 0xdd, 0x7a, 0xfc, 0xb8, 0x73, -+ 0xeb, 0x27, 0x1b, 0xe6, 0x1c, 0xf9, 0xcb, 0xa9, 0xed, 0xc7, 0xd3, 0xdf, 0xed, 0x49, 0x29, 0xf6, -+ 0x4c, 0xfe, 0xd4, 0xd0, 0xb7, 0x2e, 0xd0, 0x78, 0x61, 0xff, 0x81, 0x07, 0x7f, 0xf3, 0xed, 0xc1, -+ 0x95, 0xcd, 0x4d, 0x77, 0x6f, 0x6e, 0x3f, 0x55, 0xb1, 0xef, 0xf4, 0x44, 0xe1, 0xc0, 0x5b, 0x6b, -+ 0x1e, 0x38, 0x7a, 0x4d, 0x33, 0x70, 0x6a, 0x4e, 0xf7, 0xde, 0xb3, 0x4d, 0xb6, 0x77, 0x12, 0xdb, -+ 0x4a, 0x4a, 0x72, 0xd6, 0xab, 0x5f, 0x9b, 0x58, 0xa3, 0xcf, 0x33, 0xde, 0x6c, 0x9f, 0xfc, 0xb5, -+ 0xec, 0xd4, 0x9a, 0xfb, 0x16, 0xf9, 0xd5, 0xe2, 0xbf, 0xa8, 0x97, 0xad, 0x34, 0xbe, 0x7d, 0xe2, -+ 0xd1, 0xf5, 0x93, 0x7d, 0xdf, 0xeb, 0xb9, 0x78, 0xb4, 0xf7, 0x9e, 0xd6, 0xb1, 0xfb, 0xbc, 0x4f, -+ 0xde, 0x73, 0x62, 0x57, 0x93, 0xeb, 0xad, 0xdc, 0x8b, 0xdf, 0xfb, 0x65, 0x71, 0xe2, 0x96, 0x73, -+ 0xeb, 0xab, 0xd2, 0xae, 0x7b, 0x77, 0x2e, 0xcb, 0x18, 0x75, 0x7c, 0x77, 0x6e, 0xb2, 0x6b, 0x5a, -+ 0xc1, 0xfc, 0x8e, 0xb9, 0x13, 0x0f, 0xfe, 0xf4, 0x40, 0xe5, 0x2b, 0x29, 0xf9, 0xb5, 0x8d, 0x7d, -+ 0xe7, 0x17, 0xdc, 0xfb, 0xce, 0xb6, 0x25, 0xd7, 0x3c, 0x46, 0xc7, 0x9f, 0xd7, 0x3e, 0x13, 0xf0, -+ 0xd8, 0xf6, 0x74, 0xe6, 0x74, 0x9e, 0x5e, 0x97, 0xcc, 0xbf, 0xf5, 0xd4, 0x7f, 0x0e, 0x1d, 0xd9, -+ 0x78, 0xd9, 0xb5, 0x70, 0xf7, 0x17, 0xbb, 0x06, 0x8f, 0xfc, 0x47, 0xe7, 0x8a, 0x53, 0xd7, 0x92, -+ 0x10, 0x94, 0x62, 0xdc, 0x92, 0x39, 0xf9, 0x39, 0x87, 0x69, 0xfb, 0x92, 0x42, 0x34, 0xaf, 0x4a, -+ 0x70, 0xba, 0x03, 0x48, 0x48, 0x96, 0x30, 0xda, 0x71, 0xc9, 0xb8, 0x53, 0x99, 0x31, 0xad, 0x22, -+ 0x50, 0x22, 0xee, 0x12, 0x24, 0x99, 0x9c, 0xb6, 0x10, 0x93, 0xc0, 0x27, 0xc8, 0x5d, 0x52, 0x68, -+ 0x7e, 0xec, 0x02, 0x49, 0x57, 0x42, 0x08, 0x29, 0xd8, 0x12, 0xd2, 0x2e, 0xf3, 0xa7, 0xbd, 0xc4, -+ 0xf0, 0x08, 0xe9, 0x95, 0x0a, 0x39, 0xe7, 0xc7, 0x0a, 0x39, 0x77, 0xa7, 0xb4, 0x16, 0xaf, 0xf0, -+ 0xa9, 0xaa, 0x7f, 0xa6, 0x90, 0x77, 0x9d, 0x56, 0xc8, 0x65, 0x0f, 0x2a, 0xa4, 0xeb, 0x61, 0x85, -+ 0xf4, 0x7c, 0x17, 0xae, 0x92, 0xe5, 0x5e, 0x4e, 0xbf, 0x00, 0x22, 0x21, 0x59, 0xc0, 0x15, 0x62, -+ 0x92, 0xd0, 0x45, 0x5f, 0xc2, 0xd5, 0x24, 0xd3, 0xc5, 0x89, 0x80, 0xcf, 0x95, 0xe9, 0xf1, 0xdf, -+ 0x02, 0x7a, 0x21, 0x4a, 0xbe, 0x02, 0x03, 0x4c, 0x8e, 0xb8, 0x0b, 0x88, 0x19, 0x28, 0x19, 0xb3, -+ 0xbb, 0xe9, 0x38, 0x09, 0xa9, 0x25, 0xe6, 0x45, 0xdc, 0x06, 0x80, 0x34, 0xb6, 0x40, 0x27, 0xd0, -+ 0x98, 0x44, 0x29, 0xc9, 0x99, 0xd0, 0xa5, 0x4a, 0xb3, 0x47, 0x0d, 0xf8, 0x7a, 0x11, 0x73, 0xd8, -+ 0x9d, 0x6e, 0x18, 0x63, 0x32, 0x4d, 0x9e, 0xc2, 0x64, 0xba, 0xdf, 0x01, 0x45, 0xf0, 0xf8, 0x9f, -+ 0x31, 0xd9, 0x12, 0x6c, 0x05, 0xf2, 0x36, 0x26, 0x03, 0xed, 0x5e, 0x20, 0xd3, 0xc0, 0xf5, 0x74, -+ 0x27, 0x10, 0xd8, 0x90, 0x74, 0x9f, 0x18, 0x40, 0xdc, 0x09, 0xac, 0x0f, 0x56, 0xc0, 0x88, 0x74, -+ 0xb9, 0x4d, 0xed, 0xd1, 0xca, 0x63, 0x2c, 0x23, 0x8d, 0x8b, 0xe4, 0x71, 0x01, 0x1d, 0x0b, 0xc4, -+ 0xde, 0x16, 0xee, 0x7e, 0x9e, 0xda, 0xdb, 0xb2, 0x41, 0xb1, 0xa6, 0x45, 0x42, 0x5d, 0x22, 0xd8, -+ 0xd8, 0xf2, 0x1b, 0x24, 0xaf, 0x6b, 0xff, 0x52, 0x5e, 0x6c, 0x09, 0x4c, 0xa9, 0xb0, 0x32, 0xd9, -+ 0xa7, 0x1e, 0xc9, 0xa7, 0xed, 0x3c, 0x15, 0xed, 0xb9, 0x3f, 0x44, 0xfe, 0x1e, 0x29, 0xa4, 0xe4, -+ 0x9e, 0xb4, 0xcc, 0x2e, 0x1c, 0x0f, 0x94, 0x21, 0xc1, 0x25, 0x34, 0xfd, 0xce, 0x90, 0xe4, 0xe4, -+ 0xb6, 0x39, 0x05, 0x84, 0x32, 0x25, 0xc6, 0x92, 0x0d, 0x04, 0xcc, 0x92, 0x79, 0xef, 0xe7, 0xe5, -+ 0x61, 0x3a, 0xc4, 0xe8, 0x0e, 0x6c, 0x4c, 0x7a, 0x0b, 0x25, 0x6c, 0x94, 0xb0, 0x53, 0x42, 0xa4, -+ 0x44, 0x2b, 0x25, 0xda, 0x28, 0xe1, 0xa0, 0x84, 0x93, 0x12, 0xcb, 0x08, 0x91, 0x1d, 0xa8, 0x20, -+ 0x14, 0x92, 0x46, 0x53, 0xc2, 0x46, 0x39, 0xed, 0x30, 0xc0, 0xc6, 0x09, 0xdd, 0x37, 0x1e, 0x19, -+ 0x49, 0xed, 0xfe, 0x08, 0xe7, 0x88, 0x94, 0x0a, 0xab, 0x04, 0x25, 0x35, 0x46, 0x3d, 0x15, 0x76, -+ 0xd4, 0xe6, 0x22, 0xea, 0xd9, 0x11, 0xe0, 0x18, 0xbd, 0x8d, 0x4c, 0x8d, 0xd9, 0x0b, 0x04, 0xd7, -+ 0x94, 0xfb, 0x63, 0xe8, 0x72, 0x7f, 0x86, 0x2f, 0xa7, 0xf1, 0xa5, 0x1f, 0x5f, 0x2e, 0x60, 0x1e, -+ 0x79, 0x7f, 0x82, 0x1c, 0xdc, 0x69, 0xc9, 0xfe, 0x04, 0x43, 0xfb, 0x13, 0x94, 0xc2, 0x09, 0xf6, -+ 0x77, 0x48, 0xe6, 0x8d, 0x5a, 0xca, 0x87, 0x16, 0xdc, 0xc9, 0xd3, 0x05, 0xcf, 0xc1, 0xe9, 0x1f, -+ 0xed, 0x25, 0xc3, 0xd1, 0x1b, 0x08, 0x31, 0xb6, 0x9b, 0xc7, 0x4e, 0x7c, 0x7b, 0x4d, 0xde, 0x6a, -+ 0x20, 0xf2, 0xdd, 0x4c, 0x59, 0xe0, 0xf6, 0x98, 0x41, 0x2c, 0xef, 0x21, 0x0c, 0xe7, 0x17, 0xf0, -+ 0xcc, 0xe4, 0x8b, 0x8f, 0xe2, 0x49, 0x13, 0xc0, 0x79, 0x55, 0xf8, 0x52, 0x0a, 0x97, 0x71, 0x78, -+ 0x26, 0xf7, 0x1e, 0xa0, 0x94, 0xb0, 0x6c, 0x97, 0xe4, 0xf2, 0xb1, 0xc7, 0x11, 0xe2, 0x7b, 0x4f, -+ 0x63, 0xf1, 0xb3, 0x00, 0xe7, 0xbd, 0x23, 0x50, 0xc9, 0x01, 0x81, 0x91, 0x64, 0xd4, 0x44, 0x06, -+ 0x3b, 0x22, 0xb8, 0xef, 0x2a, 0xc1, 0xbd, 0x37, 0x21, 0x2c, 0xb8, 0xa3, 0xf7, 0x12, 0x62, 0x2c, -+ 0x0e, 0xaf, 0xd0, 0x7d, 0x60, 0xcd, 0x58, 0x1c, 0x62, 0xbe, 0x7b, 0x61, 0x28, 0xca, 0x05, 0x17, -+ 0x08, 0x8f, 0xa2, 0xfe, 0x52, 0xb8, 0x1d, 0xab, 0x04, 0x76, 0x61, 0xad, 0xb4, 0xd0, 0x4b, 0x86, -+ 0x30, 0x7f, 0xae, 0x2b, 0xcb, 0xff, 0x09, 0x96, 0xcf, 0x94, 0xce, 0xf4, 0x4b, 0x17, 0x23, 0xb2, -+ 0x56, 0x19, 0xe6, 0x48, 0x67, 0xfb, 0xe5, 0x3f, 0x13, 0x83, 0x72, 0xa4, 0xf3, 0xfd, 0xf2, 0x6d, -+ 0xd9, 0xac, 0x1c, 0xe9, 0x88, 0xbf, 0x8c, 0xb5, 0x08, 0xdd, 0x3b, 0xd7, 0xe0, 0x9d, 0x7d, 0x19, -+ 0x1f, 0xb1, 0x6c, 0xe9, 0x98, 0xff, 0x90, 0xae, 0x19, 0xdb, 0x54, 0x39, 0x07, 0x31, 0xfb, 0xad, -+ 0x04, 0x92, 0x83, 0x1a, 0x72, 0x38, 0xcf, 0x4a, 0x87, 0x73, 0x41, 0x22, 0x2d, 0x38, 0x67, 0x43, -+ 0x05, 0x47, 0x22, 0xe5, 0x2a, 0xf3, 0x1e, 0x66, 0x90, 0xab, 0xcc, 0x7b, 0xb4, 0xca, 0xbc, 0x17, -+ 0xaa, 0x32, 0xe7, 0xa5, 0xe5, 0xe5, 0xfa, 0x97, 0x48, 0x16, 0x48, 0x87, 0x87, 0x5d, 0xac, 0xe5, -+ 0x62, 0xec, 0x70, 0x2c, 0x49, 0xa2, 0xe1, 0xb8, 0x18, 0x19, 0x0e, 0x65, 0xa8, 0x97, 0x86, 0x97, -+ 0xf0, 0x72, 0xe0, 0x7f, 0xc4, 0xc8, 0x91, 0xe3, 0x84, 0x63, 0x7c, 0x09, 0x1b, 0xc5, 0x77, 0x2f, -+ 0x96, 0x6d, 0xb8, 0x8c, 0xd7, 0xc9, 0xbf, 0x95, 0x80, 0x22, 0x1a, 0x77, 0xb5, 0x14, 0x16, 0xca, -+ 0x1b, 0x03, 0x9c, 0x79, 0xa9, 0x89, 0x24, 0x9f, 0xc6, 0x16, 0x49, 0x82, 0x8e, 0x5c, 0x23, 0xf4, -+ 0xb9, 0xb5, 0xf8, 0x62, 0x4e, 0x0c, 0x0b, 0x17, 0xce, 0x1f, 0x65, 0x70, 0x59, 0xaa, 0xf1, 0x85, -+ 0x74, 0xa8, 0xe0, 0x38, 0x9d, 0x62, 0x4b, 0xc8, 0xd1, 0x5e, 0x0e, 0x57, 0xfc, 0x8f, 0x9c, 0x78, -+ 0x15, 0x3e, 0x86, 0x39, 0xcb, 0x11, 0x97, 0xf6, 0x18, 0x06, 0x95, 0xb4, 0x57, 0xe1, 0x40, 0x14, -+ 0x61, 0x2a, 0xc1, 0x80, 0xef, 0x6a, 0xc9, 0xd8, 0x8d, 0x1d, 0x80, 0x15, 0xcb, 0x68, 0x62, 0xd9, -+ 0xb3, 0x30, 0x18, 0x8f, 0xc9, 0xa4, 0x23, 0x1c, 0x9e, 0x4c, 0x9e, 0x07, 0x97, 0x63, 0x12, 0x87, -+ 0x0c, 0x73, 0xfc, 0xbb, 0xf8, 0x3e, 0x7e, 0x50, 0xe1, 0x4b, 0xe1, 0x7f, 0x4b, 0x81, 0x09, 0x74, -+ 0x9d, 0x89, 0x94, 0x48, 0xae, 0x42, 0x5c, 0x26, 0x37, 0x3e, 0x2d, 0x5b, 0x23, 0xa4, 0xe5, 0xa5, -+ 0x65, 0x72, 0x59, 0x49, 0x19, 0xf0, 0x5c, 0xc4, 0x17, 0x23, 0x8d, 0xe6, 0x6e, 0x8d, 0x00, 0x37, -+ 0x6a, 0x81, 0x90, 0x90, 0x04, 0xaa, 0x09, 0x68, 0x5e, 0x36, 0x58, 0x36, 0x0a, 0x6e, 0xc2, 0x77, -+ 0x6a, 0xee, 0xd2, 0xe0, 0x41, 0x62, 0x36, 0x27, 0xa4, 0x69, 0x34, 0x78, 0xc8, 0xc1, 0x30, 0x29, -+ 0x55, 0x99, 0xab, 0xd1, 0xe0, 0xe7, 0x08, 0x6e, 0x5e, 0x36, 0xc6, 0x47, 0xe8, 0x41, 0xb4, 0x0c, -+ 0x10, 0xb5, 0x91, 0x93, 0x19, 0x26, 0xe6, 0xea, 0x24, 0x09, 0x4d, 0x02, 0xdc, 0xcc, 0xa9, 0xb6, -+ 0x94, 0x74, 0x58, 0x0c, 0x13, 0xa9, 0x21, 0xb6, 0x79, 0xd9, 0x32, 0x63, 0x5a, 0x42, 0xd8, 0xb2, -+ 0x70, 0xcb, 0x0f, 0x49, 0x65, 0x84, 0x98, 0xb1, 0x03, 0xa6, 0x31, 0x2f, 0x98, 0x73, 0xb1, 0x44, -+ 0x66, 0x48, 0x35, 0x0f, 0x4e, 0x65, 0x85, 0x14, 0xe0, 0x61, 0x76, 0x65, 0xc4, 0x6c, 0x4e, 0xd8, -+ 0x70, 0x0c, 0x6c, 0xdf, 0x77, 0xd6, 0x72, 0x28, 0x93, 0xab, 0x00, 0x35, 0xa3, 0x8c, 0xd0, 0x45, -+ 0x28, 0x1e, 0x9d, 0x80, 0x2a, 0x24, 0xa1, 0x31, 0x12, 0x01, 0xec, 0xb9, 0x95, 0x08, 0xb3, 0x8e, -+ 0xad, 0x24, 0xe3, 0xbc, 0x04, 0x69, 0x9c, 0x3f, 0x0e, 0x44, 0x9b, 0xb9, 0xfb, 0x47, 0x2f, 0xd6, -+ 0x3c, 0x20, 0x39, 0x31, 0x4e, 0x03, 0x03, 0xa8, 0x25, 0x95, 0x44, 0x81, 0x36, 0xdc, 0xcf, 0x88, -+ 0x35, 0x74, 0x46, 0x6e, 0x46, 0x6e, 0x9c, 0x39, 0x7d, 0x65, 0xc8, 0x13, 0x58, 0xac, 0x50, 0xb6, -+ 0x15, 0x12, 0x27, 0x84, 0xcf, 0xc8, 0x9d, 0x9e, 0x0b, 0x39, 0x81, 0xcf, 0xc9, 0x78, 0x82, 0x26, -+ 0x50, 0x74, 0x82, 0x11, 0x61, 0xc2, 0x9d, 0x86, 0x37, 0x75, 0x62, 0x68, 0x80, 0x25, 0xc3, 0x0e, -+ 0xcb, 0x2f, 0xe8, 0x2d, 0x16, 0x1e, 0x66, 0xe2, 0x34, 0xfa, 0xc1, 0x8b, 0x43, 0x4d, 0xec, 0xd4, -+ 0x15, 0xd2, 0x4f, 0x56, 0xb4, 0xb4, 0xd9, 0x09, 0x79, 0x2c, 0x04, 0xbd, 0x4b, 0xc8, 0x33, 0x21, -+ 0x88, 0x55, 0xe4, 0x20, 0x53, 0x5e, 0x85, 0x25, 0x6a, 0xad, 0x01, 0x32, 0x55, 0x4c, 0xef, 0x64, -+ 0xd1, 0x16, 0x4f, 0x22, 0x53, 0x9b, 0x42, 0x2c, 0x94, 0xdc, 0xa6, 0x40, 0xad, 0xf1, 0xa4, 0x02, -+ 0x0a, 0x4b, 0x13, 0x25, 0x4d, 0x2a, 0x0a, 0xd9, 0xe7, 0x13, 0xf2, 0x74, 0x08, 0x62, 0x15, 0x9d, -+ 0x21, 0x53, 0x42, 0x82, 0xb2, 0x3c, 0x25, 0x37, 0x2a, 0x90, 0xb8, 0x99, 0x90, 0xdb, 0x42, 0x50, -+ 0x3c, 0x45, 0x57, 0x94, 0xb5, 0x9a, 0x28, 0x19, 0x52, 0xd4, 0x1a, 0xad, 0x28, 0xca, 0xb5, 0x64, -+ 0x32, 0xe5, 0x57, 0x58, 0xbe, 0x11, 0x20, 0x64, 0x57, 0xc8, 0x48, 0x4a, 0x6e, 0x0d, 0x71, 0xb1, -+ 0x8a, 0xf6, 0x91, 0xa9, 0xf7, 0x43, 0x52, 0x94, 0xdc, 0x98, 0x18, 0xb2, 0x88, 0x90, 0xdb, 0x42, -+ 0x50, 0x3c, 0x45, 0xa7, 0x15, 0x45, 0x4d, 0x94, 0x7c, 0x4a, 0x91, 0xb2, 0x47, 0x2b, 0x8a, 0x0a, -+ 0xf6, 0x85, 0x28, 0xa9, 0x85, 0x54, 0x6a, 0x6b, 0x08, 0x8a, 0x5a, 0x9e, 0x4c, 0x9d, 0x0e, 0xb1, -+ 0x50, 0xf2, 0x86, 0x02, 0x89, 0x88, 0xbc, 0x02, 0x6d, 0x4b, 0x0a, 0x41, 0x71, 0x14, 0xfd, 0x5a, -+ 0x91, 0x6a, 0xa2, 0xe4, 0xf5, 0x30, 0xa3, 0xa3, 0x14, 0x45, 0xf9, 0x31, 0x19, 0xfe, 0xc9, 0xd9, -+ 0x96, 0x1c, 0xb9, 0x40, 0x12, 0xcb, 0x49, 0xf8, 0x49, 0x6a, 0xd6, 0x90, 0x7e, 0x21, 0xe9, 0xed, -+ 0xa4, 0xef, 0x24, 0xfd, 0x46, 0xe6, 0x2c, 0xec, 0x23, 0xfd, 0xeb, 0xa4, 0x3f, 0xcd, 0x3c, 0xc4, -+ 0xd1, 0x36, 0x97, 0xe0, 0xf3, 0x99, 0x53, 0xf1, 0xb7, 0xea, 0xbd, 0x41, 0xed, 0x23, 0x89, 0xdb, -+ 0xa9, 0x8a, 0xbd, 0x1e, 0xe5, 0x9b, 0xc4, 0xf0, 0x9d, 0x8c, 0xc3, 0x9f, 0x42, 0xe2, 0xe2, 0x20, -+ 0xfd, 0x46, 0xd2, 0x6f, 0x8e, 0x13, 0xaf, 0xeb, 0xf8, 0xe9, 0x01, 0x0d, 0x02, 0xa5, 0xe2, 0xbe, -+ 0x4c, 0x4b, 0x45, 0x1c, 0x27, 0x7d, 0xe4, 0xc7, 0xcf, 0xd9, 0x76, 0x9f, 0x73, 0xa5, 0xe8, 0xf3, -+ 0x97, 0xb9, 0xc5, 0x40, 0x59, 0x87, 0xd3, 0x27, 0xba, 0x44, 0xbf, 0xbf, 0x2c, 0xd8, 0x21, 0x56, -+ 0x55, 0x4f, 0x99, 0x52, 0x16, 0x74, 0x3b, 0xfd, 0x1e, 0x5b, 0x87, 0xcd, 0x5d, 0xe6, 0x75, 0x59, -+ 0x03, 0xad, 0x1e, 0x5f, 0x3b, 0x32, 0x96, 0x39, 0xdd, 0x36, 0x57, 0xd0, 0x2e, 0x96, 0x05, 0xad, -+ 0x5e, 0x67, 0x99, 0xd5, 0xdf, 0x6e, 0x68, 0x13, 0xdd, 0xa2, 0xcf, 0x69, 0x0b, 0x9b, 0x72, 0x39, -+ 0xdd, 0xc1, 0x4e, 0x18, 0x5b, 0x7d, 0x36, 0x07, 0x5c, 0xda, 0xab, 0x2b, 0x95, 0x29, 0x10, 0x40, -+ 0xa8, 0x83, 0xf9, 0x9d, 0xc9, 0x86, 0x4d, 0x81, 0x97, 0x6c, 0x83, 0xcb, 0x55, 0x5d, 0x69, 0x74, -+ 0xe0, 0x5c, 0xf0, 0x7a, 0xfc, 0xce, 0x4e, 0x4b, 0x60, 0x95, 0x57, 0xf4, 0xcb, 0x00, 0x25, 0xe1, -+ 0x09, 0xc2, 0x66, 0xb5, 0x39, 0x44, 0x3c, 0x86, 0x21, 0x44, 0xc8, 0xeb, 0x03, 0xd1, 0xe5, 0xf2, -+ 0xd4, 0x72, 0xd1, 0xe7, 0x16, 0x5d, 0x32, 0xed, 0x0f, 0xc0, 0x44, 0x9b, 0xcc, 0x03, 0x37, 0x66, -+ 0x65, 0xaf, 0x85, 0x12, 0x6e, 0x23, 0xbc, 0xd5, 0x0b, 0xf5, 0xf8, 0xf2, 0x12, 0x5c, 0xf8, 0x05, -+ 0xf8, 0x32, 0x0f, 0x5f, 0xf4, 0xf8, 0xb2, 0xbd, 0x78, 0x42, 0x7e, 0x71, 0x41, 0x61, 0x69, 0xb9, -+ 0xb6, 0x60, 0xbc, 0x36, 0x4f, 0x2b, 0xa4, 0x4f, 0xef, 0xc4, 0xac, 0x42, 0x87, 0x0e, 0x77, 0x65, -+ 0xf8, 0xa2, 0xc5, 0x97, 0x7b, 0xf0, 0xc5, 0xa0, 0x50, 0x05, 0xf8, 0x52, 0xa8, 0xcc, 0xea, 0x95, -+ 0x59, 0x89, 0x2a, 0x56, 0x2e, 0xc2, 0x4a, 0x9d, 0x90, 0xaa, 0xd3, 0xcb, 0x4d, 0x78, 0x48, 0x37, -+ 0x71, 0x5a, 0x61, 0xa1, 0x5e, 0xf8, 0x13, 0x3a, 0xac, 0x13, 0x32, 0x74, 0x7a, 0x6d, 0x9d, 0xaf, -+ 0xb0, 0x60, 0xbc, 0xb0, 0x40, 0x27, 0xbc, 0xb6, 0x06, 0x98, 0x84, 0xb7, 0x90, 0x4e, 0x98, 0xdd, -+ 0x28, 0xdc, 0xa9, 0x13, 0x0e, 0xaf, 0xd1, 0x8d, 0xd3, 0x17, 0x6a, 0x29, 0x12, 0xd4, 0x8d, 0x2b, -+ 0x2e, 0x28, 0xd2, 0x0b, 0x23, 0x74, 0x42, 0x40, 0x57, 0xa6, 0xd7, 0x4f, 0xd4, 0x97, 0x09, 0x1e, -+ 0xdd, 0xf8, 0x42, 0x4c, 0xe8, 0xb5, 0xda, 0xc2, 0x3b, 0xf4, 0x5a, 0x61, 0x94, 0x6e, 0x6a, 0x9d, -+ 0x56, 0xaf, 0xbf, 0x4b, 0xaf, 0x2d, 0xac, 0xdb, 0x20, 0x8c, 0x30, 0x82, 0x0b, 0x98, 0xbf, 0x53, -+ 0xa7, 0x2d, 0xd2, 0x16, 0xea, 0xf5, 0xe3, 0x8a, 0xf1, 0xfa, 0x85, 0x92, 0x21, 0xf5, 0x06, 0x3d, -+ 0x70, 0xd6, 0xe1, 0x26, 0x74, 0x4e, 0x9f, 0x04, 0x3c, 0x42, 0x8e, 0x4e, 0x98, 0xb5, 0x63, 0xbe, -+ 0x16, 0xf4, 0xa4, 0x4d, 0x27, 0x6a, 0xf0, 0x3f, 0xe1, 0x0e, 0xa3, 0x30, 0x7a, 0xfa, 0xdd, 0x05, -+ 0xba, 0xf2, 0x82, 0xf9, 0x52, 0x30, 0x1e, 0x54, 0x9c, 0x9c, 0x1c, 0x19, 0x02, 0xe9, 0x62, 0xc6, -+ 0x97, 0x79, 0x0a, 0xcb, 0xbc, 0x66, 0xe1, 0x81, 0xd3, 0xb2, 0xb0, 0xfe, 0xaf, 0x14, 0xde, 0x9e, -+ 0x38, 0x1d, 0x77, 0x89, 0x52, 0xf4, 0x9e, 0xa9, 0x10, 0x26, 0x1f, 0x5e, 0x3c, 0x25, 0x7f, 0x06, -+ 0xc4, 0x26, 0x5d, 0x27, 0xac, 0xd8, 0x21, 0xb4, 0xeb, 0xb4, 0xf7, 0x74, 0x4d, 0xad, 0x2b, 0x12, -+ 0x32, 0x1a, 0x8b, 0xea, 0x8a, 0xea, 0x04, 0x87, 0x51, 0xc8, 0x33, 0xf2, 0x2a, 0xc8, 0x72, 0x9f, -+ 0xd5, 0x6d, 0xf7, 0xb4, 0x23, 0xaf, 0xd5, 0xed, 0xb4, 0x59, 0x02, 0xce, 0x76, 0xd1, 0x13, 0x0c, -+ 0x20, 0x8b, 0x25, 0x58, 0x5d, 0x09, 0xc9, 0x61, 0x0d, 0x88, 0x28, 0x08, 0x99, 0x53, 0x5d, 0x69, -+ 0x09, 0x20, 0xbf, 0xf3, 0x21, 0x91, 0x74, 0x38, 0xb1, 0x10, 0xbc, 0x92, 0x4c, 0xa9, 0xaa, 0xb6, -+ 0x04, 0xbd, 0x76, 0xcc, 0x26, 0xba, 0x6d, 0xbe, 0x55, 0x5e, 0x98, 0xa6, 0x6c, 0x0e, 0x8f, 0x2f, -+ 0xa0, 0xc3, 0x5f, 0x85, 0x60, 0xda, 0x6a, 0xa1, 0xd3, 0x58, 0x5b, 0x0d, 0x4c, 0xdb, 0x3c, 0x6e, -+ 0xbf, 0xc7, 0x25, 0x5a, 0xe4, 0xc4, 0xc4, 0x0b, 0x4e, 0x9d, 0x02, 0x57, 0x39, 0x37, 0x2d, 0x54, -+ 0x89, 0x24, 0x6a, 0x17, 0x81, 0xb9, 0x35, 0x68, 0x73, 0x7a, 0xdc, 0xc8, 0xd1, 0x6e, 0xb5, 0x59, -+ 0xe4, 0x85, 0xa5, 0x49, 0xfc, 0x91, 0xc1, 0xe5, 0x71, 0xb7, 0xe9, 0xa4, 0x0b, 0x5e, 0x0d, 0x4e, -+ 0x21, 0x74, 0x62, 0x67, 0x80, 0xda, 0xd7, 0xea, 0x74, 0x5b, 0x5d, 0x48, 0x99, 0xb7, 0x63, 0xff, -+ 0x24, 0xbd, 0x21, 0xad, 0x41, 0xb7, 0xdf, 0xd9, 0xe6, 0x16, 0xed, 0x3a, 0x9b, 0xc3, 0xea, 0x43, -+ 0xed, 0x62, 0xbb, 0x0d, 0xde, 0x66, 0x1c, 0x56, 0xbf, 0x03, 0x85, 0xe3, 0x16, 0x8b, 0x53, 0x3a, -+ 0x55, 0x96, 0x56, 0x97, 0xb5, 0xcd, 0x1f, 0xb6, 0xac, 0x22, 0x8e, 0xf5, 0x63, 0x07, 0xa7, 0x4e, -+ 0x01, 0xdb, 0xe7, 0x2c, 0xb8, 0x5f, 0xd7, 0x50, 0x53, 0xab, 0xab, 0x32, 0x4e, 0x35, 0x56, 0xe8, -+ 0xa6, 0x94, 0x57, 0x54, 0x97, 0x57, 0x56, 0x4c, 0xd1, 0x19, 0xda, 0x5d, 0xce, 0x40, 0xc0, 0x25, -+ 0x1a, 0x44, 0xb7, 0xdd, 0x69, 0x75, 0xc3, 0x58, 0xaa, 0x0d, 0x56, 0x97, 0xc1, 0x27, 0xb6, 0xf9, -+ 0x0d, 0x1e, 0xb7, 0x6b, 0x15, 0x60, 0x5e, 0x1b, 0x0c, 0xa1, 0x9e, 0x40, 0xe1, 0x31, 0x00, 0xbf, -+ 0x34, 0xef, 0xf2, 0x58, 0xed, 0x7e, 0x98, 0xb3, 0xb5, 0x7b, 0xec, 0xa2, 0xab, 0xce, 0x65, 0xf5, -+ 0xb5, 0x89, 0x30, 0xc4, 0x05, 0xa4, 0x0e, 0x0a, 0xc8, 0xca, 0x1a, 0x83, 0x15, 0x0f, 0x5b, 0x9c, -+ 0x75, 0x2e, 0x6f, 0x75, 0xa5, 0xce, 0xd0, 0xa6, 0x33, 0xdc, 0x0b, 0xeb, 0xf9, 0x03, 0xf6, 0xba, -+ 0x36, 0x77, 0xb0, 0xb6, 0x5c, 0x67, 0x68, 0x75, 0x7b, 0x0c, 0xf8, 0xc4, 0xdb, 0x02, 0x06, 0xab, -+ 0xcb, 0x69, 0xf5, 0xc3, 0xd1, 0x97, 0x41, 0x9b, 0xa7, 0xbd, 0xdd, 0x03, 0xb6, 0xb4, 0x4a, 0xbb, -+ 0x66, 0xe8, 0xc0, 0xfe, 0xca, 0x33, 0x56, 0xff, 0x2a, 0xb7, 0xcd, 0xe1, 0xf3, 0xb8, 0x3d, 0x41, -+ 0xbf, 0x21, 0xe8, 0xee, 0x80, 0x8a, 0x64, 0x08, 0x58, 0x5b, 0xa0, 0x04, 0xca, 0xf3, 0x60, 0x89, -+ 0x18, 0x10, 0x0d, 0xee, 0xa0, 0xcb, 0x65, 0xf0, 0x7a, 0x70, 0xe4, 0x7d, 0x06, 0x88, 0x91, 0x6d, -+ 0x39, 0x9e, 0x87, 0x04, 0xb2, 0x2d, 0x37, 0x78, 0x7d, 0x9e, 0x80, 0x68, 0x0b, 0x78, 0x7c, 0x78, -+ 0x6d, 0x0f, 0x5d, 0xd2, 0xd3, 0xee, 0x0c, 0x18, 0x5a, 0x7d, 0xd6, 0x76, 0x91, 0xca, 0x11, 0xdc, -+ 0x0b, 0x49, 0x08, 0xbb, 0x6f, 0xf0, 0x3b, 0x5b, 0xa0, 0x46, 0xb6, 0x19, 0x6c, 0x56, 0x97, 0x8b, -+ 0x2c, 0xb6, 0xd2, 0xea, 0x33, 0x04, 0x7c, 0xa0, 0x13, 0xe3, 0x56, 0x3f, 0x8e, 0x7a, 0xbb, 0xe8, -+ 0x0e, 0xf8, 0x23, 0x3c, 0xf3, 0x40, 0xc1, 0x6c, 0x75, 0x79, 0x3a, 0x64, 0xb0, 0x5d, 0x84, 0x28, -+ 0x81, 0xb7, 0x2e, 0x03, 0xce, 0xb8, 0x80, 0x55, 0xe6, 0x96, 0xd1, 0x70, 0x44, 0x36, 0x55, 0xb2, -+ 0xbc, 0xce, 0xed, 0x01, 0x00, 0x4f, 0x8a, 0x3e, 0x08, 0xbf, 0x34, 0x23, 0x2b, 0xf3, 0x3a, 0x6d, -+ 0x3a, 0x83, 0xc1, 0x6b, 0x05, 0xab, 0x75, 0xa0, 0xd2, 0xd3, 0x01, 0x93, 0x1e, 0x9f, 0x68, 0xc0, -+ 0xe9, 0x64, 0x00, 0xbb, 0x44, 0x7f, 0x5d, 0x39, 0x8a, 0xc8, 0x86, 0x16, 0x67, 0x00, 0xa7, 0x28, -+ 0x49, 0x45, 0xfc, 0x21, 0x86, 0x90, 0xe0, 0x86, 0xdb, 0x2f, 0xdd, 0x2d, 0xe4, 0x83, 0x12, 0x21, -+ 0x25, 0xa5, 0x1b, 0x61, 0x74, 0xba, 0x9d, 0x81, 0xd0, 0xc1, 0x08, 0xe2, 0x84, 0x83, 0xe4, 0xb2, -+ 0x98, 0x3d, 0x1e, 0x97, 0x94, 0xc6, 0xa1, 0x39, 0x3a, 0x65, 0x09, 0xd6, 0xa0, 0xe8, 0xbc, 0x74, -+ 0x88, 0x9d, 0x16, 0xab, 0xdf, 0x86, 0xca, 0x1c, 0x9e, 0x76, 0xb1, 0xcc, 0x6e, 0x75, 0xba, 0x56, -+ 0xb5, 0x04, 0x9d, 0x2e, 0x7b, 0xd9, 0x32, 0xd1, 0x0d, 0xf1, 0xf4, 0x97, 0xd9, 0x20, 0xab, 0xc2, -+ 0x71, 0xa8, 0x0b, 0x3e, 0x8f, 0xd3, 0xbe, 0xa2, 0xcc, 0x51, 0x5d, 0x51, 0x8d, 0xa3, 0x00, 0x9b, -+ 0x0e, 0x77, 0x2d, 0x08, 0x91, 0x58, 0x26, 0xaf, 0x28, 0xdf, 0xc3, 0x0c, 0x95, 0xc6, 0x5a, 0xf6, -+ 0x6e, 0x65, 0x81, 0x4d, 0xb3, 0x05, 0x21, 0x7f, 0x45, 0x0a, 0x48, 0xa6, 0xc2, 0xd1, 0xf3, 0x06, -+ 0xc3, 0xbc, 0x21, 0xa7, 0xdc, 0x62, 0x91, 0x62, 0x6c, 0xb1, 0x39, 0x96, 0x5b, 0x5a, 0xc1, 0x00, -+ 0xe4, 0xc5, 0x13, 0xe8, 0x6f, 0xbc, 0xed, 0x96, 0x45, 0xdf, 0x31, 0x89, 0xcf, 0x50, 0xa2, 0xbc, -+ 0xa2, 0x0f, 0xa1, 0x39, 0x0d, 0x0d, 0x77, 0xea, 0x26, 0xcd, 0x87, 0x7a, 0xe0, 0xf3, 0xe8, 0x60, -+ 0x80, 0x8f, 0xa6, 0x01, 0x1f, 0x4c, 0x63, 0x79, 0x55, 0x09, 0x73, 0x4e, 0x51, 0x0a, 0xdc, 0x05, -+ 0x87, 0xa0, 0x71, 0x48, 0xd5, 0x59, 0x90, 0xa2, 0x45, 0x33, 0x99, 0xe7, 0x05, 0xfa, 0x92, 0x52, -+ 0x9f, 0x36, 0xc0, 0x6f, 0x9f, 0xbc, 0xe3, 0x0e, 0x73, 0xea, 0xb8, 0xd9, 0xcf, 0x96, 0x6e, 0x2a, -+ 0x79, 0x6e, 0xd2, 0xf3, 0x13, 0x5f, 0x98, 0xb0, 0x79, 0xfc, 0x96, 0x62, 0xde, 0xa9, 0xfe, 0xdd, -+ 0x6f, 0xff, 0xed, 0xbd, 0xf3, 0x67, 0xcf, 0xf5, 0xff, 0x1a, 0x14, 0xd4, 0xcb, 0xaf, 0x53, 0x39, -+ 0x8c, 0x1e, 0xfa, 0x85, 0x6f, 0x3a, 0x83, 0xd3, 0x0f, 0x71, 0xf5, 0x69, 0x07, 0xb8, 0xed, 0xa3, -+ 0x76, 0x8c, 0x9c, 0x99, 0x3a, 0xae, 0xfe, 0xb9, 0xac, 0xe7, 0x33, 0xcd, 0xcf, 0xe6, 0x6c, 0xca, -+ 0xe6, 0xbb, 0x40, 0x35, 0xd1, 0x6b, 0xd6, 0xc4, 0x94, 0xa7, 0x1f, 0xb7, 0xea, 0xd3, 0xba, 0xb8, -+ 0xed, 0x19, 0x3b, 0xd2, 0xeb, 0x41, 0xfe, 0xd9, 0xb4, 0x4d, 0xa9, 0xe6, 0xe7, 0x52, 0x9e, 0xd7, -+ 0xb8, 0x42, 0xe2, 0xc4, 0xac, 0x28, 0xf9, 0xeb, 0x8a, 0xfc, 0x46, 0x6e, 0x7b, 0xd6, 0x8e, 0x4c, -+ 0x49, 0x3e, 0x63, 0x53, 0xba, 0xf9, 0xb9, 0xb4, 0xe7, 0x53, 0x57, 0xfe, 0x2d, 0xf2, 0x4b, 0xb7, -+ 0xa7, 0xec, 0xd0, 0x48, 0xe2, 0xea, 0x4d, 0x23, 0xcc, 0xcf, 0x25, 0x3f, 0x9f, 0xb4, 0x30, 0x5a, -+ 0x1c, 0x21, 0xa3, 0x7f, 0x55, 0x3b, 0x24, 0x19, 0xf4, 0x01, 0x9f, 0xdc, 0x3b, 0x28, 0x85, 0x4b, -+ 0xa1, 0x51, 0xaa, 0xe9, 0x46, 0x29, 0x8f, 0x8c, 0x2d, 0x7e, 0x3f, 0xa0, 0x1e, 0x79, 0x20, 0xcd, -+ 0xda, 0xc5, 0x96, 0x60, 0x1b, 0x1c, 0x96, 0x56, 0x0f, 0x22, 0xb4, 0xb5, 0xa5, 0xc5, 0x27, 0xae, -+ 0xa4, 0x23, 0x97, 0xc7, 0x16, 0xc1, 0x09, 0x67, 0xd8, 0xdd, 0x26, 0xfa, 0xe9, 0x34, 0x1d, 0x85, -+ 0x71, 0x40, 0x72, 0x8b, 0x74, 0x1a, 0x0c, 0x41, 0x46, 0x5c, 0x24, 0xa1, 0xda, 0x20, 0xa3, 0x1b, -+ 0xea, 0x99, 0x11, 0xca, 0xbb, 0x5c, 0x1a, 0x22, 0x84, 0xa4, 0x82, 0x86, 0xfe, 0xbb, 0x86, 0xd3, -+ 0x46, 0x85, 0xae, 0x0e, 0xc5, 0x9a, 0x13, 0x62, 0xfe, 0x25, 0x09, 0xc6, 0x85, 0x38, 0x78, 0xf4, -+ 0xc3, 0x6f, 0xb6, 0xb2, 0x4a, 0x64, 0x1b, 0x85, 0xf0, 0xf3, 0x6d, 0x08, 0xa7, 0xf9, 0x3b, 0x91, -+ 0xf0, 0x9f, 0x61, 0x44, 0x28, 0x7e, 0x9e, 0xc1, 0xa9, 0xfe, 0x01, 0x06, 0x2f, 0x25, 0xfa, 0x29, -+ 0x4e, 0xf3, 0xda, 0x44, 0x70, 0xfa, 0xf6, 0x4c, 0xf3, 0x9a, 0xea, 0x3f, 0xcd, 0xb8, 0x40, 0xf5, -+ 0x9f, 0x61, 0xf0, 0xc5, 0x44, 0x0f, 0xc5, 0x69, 0x7e, 0x53, 0x3d, 0x3b, 0x99, 0xaf, 0x7b, 0x54, -+ 0xcf, 0x3e, 0x06, 0x6f, 0x23, 0x7a, 0x28, 0x4e, 0xf3, 0x54, 0xd1, 0x93, 0x18, 0x47, 0x0f, 0x83, -+ 0x2b, 0xfc, 0x31, 0xde, 0x27, 0x04, 0x94, 0x10, 0x85, 0xc9, 0xfc, 0xd1, 0x78, 0x40, 0xd2, 0x12, -+ 0x86, 0x87, 0xc5, 0x55, 0x40, 0x89, 0x51, 0xfc, 0x32, 0x9e, 0x1c, 0x07, 0x1f, 0x11, 0x07, 0x57, -+ 0xc7, 0xc1, 0x53, 0xe2, 0xe0, 0xa9, 0x71, 0xf0, 0xf4, 0x38, 0x78, 0x66, 0x14, 0x26, 0xfb, 0x9b, -+ 0x25, 0xff, 0x54, 0x13, 0xc5, 0x9f, 0x15, 0x47, 0x4f, 0x34, 0xf7, 0x4a, 0x84, 0x62, 0xea, 0x78, -+ 0x3c, 0x0e, 0xbe, 0x45, 0x5a, 0x35, 0xb4, 0x5f, 0x74, 0x7f, 0x8f, 0xc6, 0xe1, 0x3f, 0x05, 0xff, -+ 0x74, 0xb1, 0x8c, 0x89, 0xbe, 0x9d, 0x14, 0xc7, 0xb8, 0x7b, 0x17, 0xdb, 0x99, 0x87, 0x49, 0x23, -+ 0x3c, 0x1e, 0x04, 0x8c, 0xe5, 0xe1, 0x4f, 0xaa, 0x46, 0xe9, 0x41, 0x03, 0x1e, 0x83, 0xbc, 0xc6, -+ 0x0a, 0xf6, 0xd1, 0x33, 0xe2, 0xe1, 0x78, 0x79, 0xf4, 0xad, 0x30, 0x1c, 0x68, 0x0b, 0x5a, 0x7d, -+ 0xf6, 0xbf, 0xf2, 0x56, 0x4b, 0x1e, 0x62, 0xfd, 0x41, 0x77, 0xa7, 0xd3, 0xd2, 0x26, 0x06, 0x2c, -+ 0x70, 0xb7, 0x04, 0x25, 0x4e, 0xaf, 0x93, 0x7c, 0x59, 0xa0, 0x1f, 0xdb, 0xf2, 0x38, 0xf2, 0x8d, -+ 0x99, 0x34, 0xe5, 0xe3, 0x1b, 0x87, 0xbf, 0x22, 0x87, 0xda, 0xf9, 0x30, 0x7c, 0x64, 0x18, 0x4e, -+ 0xdf, 0xbf, 0x59, 0x3d, 0xca, 0xf7, 0x2f, 0x46, 0x0f, 0xfd, 0x1a, 0xc5, 0xf2, 0xd3, 0xf3, 0x1b, -+ 0xc5, 0x9f, 0x18, 0x87, 0x3f, 0x31, 0x36, 0xff, 0xf9, 0x30, 0xfe, 0x89, 0x61, 0xb8, 0x3d, 0x29, -+ 0x84, 0x4f, 0x08, 0xc3, 0x37, 0x87, 0xe1, 0x11, 0xfa, 0xe9, 0xa7, 0x18, 0x46, 0x3f, 0x3d, 0x91, -+ 0x3c, 0xfe, 0x29, 0x28, 0x0c, 0x4f, 0x09, 0xc3, 0x0b, 0xa0, 0x7f, 0x80, 0xc4, 0x2b, 0x93, 0xc1, -+ 0xff, 0x89, 0xc4, 0x65, 0x24, 0x83, 0x5f, 0x21, 0x25, 0x9e, 0xea, 0xc4, 0xeb, 0x86, 0x7f, 0x7a, -+ 0x29, 0x09, 0xe3, 0x1f, 0x17, 0x86, 0x4f, 0x63, 0xf4, 0x9c, 0x23, 0x7a, 0xee, 0x66, 0xf0, 0x0a, -+ 0x32, 0x9e, 0xc5, 0xe0, 0x9b, 0x08, 0x7f, 0x13, 0x83, 0x37, 0x11, 0x7c, 0x31, 0x83, 0x17, 0x10, -+ 0xbf, 0xbe, 0xc9, 0xe0, 0xbf, 0x24, 0xfc, 0xcb, 0x18, 0x5c, 0x45, 0xf8, 0x57, 0x30, 0x38, 0xd5, -+ 0xdb, 0xc9, 0xe0, 0x8f, 0x12, 0x3d, 0x8f, 0x30, 0xf8, 0x06, 0x32, 0x7e, 0x82, 0xc1, 0x4f, 0x90, -+ 0xf1, 0x33, 0x0c, 0x4e, 0xe3, 0xbb, 0x8d, 0xc1, 0x6b, 0x89, 0x3d, 0x3d, 0x0c, 0x7e, 0x9c, 0xac, -+ 0xfb, 0x43, 0x06, 0xff, 0x23, 0x19, 0xbf, 0xc2, 0xe0, 0x7b, 0x08, 0xff, 0x11, 0x06, 0xf7, 0x93, -+ 0xfd, 0x7d, 0x9b, 0xc1, 0x9f, 0x22, 0xe3, 0x73, 0x0c, 0xfe, 0x13, 0xa2, 0xe7, 0x7d, 0x06, 0x2f, -+ 0x25, 0xe3, 0x3f, 0x30, 0x38, 0xfd, 0x54, 0x79, 0x95, 0xc1, 0xe9, 0xdf, 0x21, 0xdf, 0x64, 0xf9, -+ 0x89, 0xbf, 0x49, 0x5c, 0x24, 0xae, 0x27, 0x7c, 0x59, 0x0c, 0x2e, 0x12, 0x7b, 0x0a, 0x18, 0xfc, -+ 0xa7, 0x04, 0x2f, 0x65, 0xf0, 0xc3, 0x44, 0x4f, 0x35, 0x83, 0x7f, 0x8b, 0xf0, 0x9b, 0x19, 0x3c, -+ 0x8f, 0xf0, 0x7b, 0x18, 0x7c, 0x0b, 0xe1, 0x7f, 0x9a, 0xc1, 0x3f, 0x23, 0xfc, 0xfb, 0x18, 0x9c, -+ 0xfe, 0xa4, 0xa0, 0xe5, 0x23, 0xf1, 0x3b, 0xa9, 0x3d, 0x0c, 0x4e, 0xed, 0xb7, 0x32, 0x38, 0xdd, -+ 0xef, 0x15, 0x0c, 0x7e, 0x86, 0xe0, 0x0f, 0x33, 0xf8, 0x26, 0xb2, 0xbf, 0x8f, 0x33, 0xb8, 0x8b, -+ 0xe0, 0x3b, 0x18, 0xdc, 0x4b, 0xd6, 0xdd, 0x4d, 0x7f, 0x35, 0x60, 0xce, 0xf5, 0x9b, 0x61, 0xfc, -+ 0x63, 0xc3, 0xf0, 0x77, 0xe2, 0xd8, 0xff, 0x6b, 0x86, 0x9f, 0xd6, 0xac, 0xe9, 0x42, 0x24, 0x3e, -+ 0x9b, 0xe0, 0x8d, 0x0c, 0x4e, 0xcf, 0xc9, 0x83, 0x42, 0xa4, 0x3d, 0xb4, 0xee, 0xff, 0x23, 0x83, -+ 0xd3, 0xe7, 0xb9, 0x2d, 0x8c, 0x9e, 0x1f, 0x13, 0x3d, 0x47, 0xc3, 0x70, 0x6c, 0xe7, 0x6f, 0x08, -+ 0x7e, 0x8e, 0xc1, 0x73, 0x89, 0x9e, 0xbf, 0x30, 0xfa, 0xe9, 0x73, 0xa1, 0x5a, 0x15, 0xa9, 0x9f, -+ 0xfe, 0x21, 0x56, 0x36, 0x83, 0x6b, 0x88, 0x9e, 0x52, 0x55, 0xa4, 0x1e, 0xfa, 0xbd, 0x7b, 0x4a, -+ 0x18, 0x7f, 0x3e, 0x0a, 0xb5, 0x39, 0x0c, 0x3f, 0xfd, 0x7e, 0x7d, 0x2f, 0xc3, 0xbf, 0x94, 0xf0, -+ 0x3b, 0xe3, 0xe0, 0x7e, 0x46, 0xcf, 0x52, 0x32, 0xde, 0xc0, 0xe0, 0xf4, 0x7b, 0xf5, 0x77, 0x19, -+ 0x3d, 0x34, 0xaf, 0x76, 0xc5, 0xc1, 0x5f, 0x66, 0xf4, 0xd0, 0x7d, 0x3d, 0xcc, 0xe0, 0xaf, 0x12, -+ 0xfc, 0x6d, 0x06, 0xa7, 0xf7, 0xdd, 0xf7, 0x19, 0x9c, 0x3e, 0x37, 0x7f, 0xce, 0xc4, 0x73, 0x11, -+ 0x89, 0xe7, 0x10, 0x83, 0x6f, 0x27, 0x78, 0x51, 0x42, 0x24, 0xfe, 0x07, 0x82, 0x4f, 0x0a, 0xbb, -+ 0x5f, 0x63, 0xfd, 0x2a, 0x32, 0xae, 0x62, 0x70, 0xfa, 0x3b, 0x92, 0x99, 0xc1, 0xe9, 0xaf, 0x51, -+ 0x0b, 0xc3, 0xf4, 0xe3, 0x3c, 0x69, 0x21, 0x71, 0xf8, 0x06, 0xc3, 0x4f, 0x9f, 0xd7, 0x57, 0x33, -+ 0xf6, 0x94, 0x91, 0x38, 0x77, 0x31, 0x7a, 0x68, 0x7d, 0x78, 0x82, 0xe1, 0xa7, 0xbf, 0x4f, 0xfc, -+ 0x2b, 0x83, 0x1f, 0x27, 0x78, 0x3f, 0xb3, 0x2e, 0xfd, 0xfd, 0x68, 0x80, 0xb5, 0x9f, 0x3c, 0x08, -+ 0xdc, 0x66, 0xd6, 0xdd, 0x4e, 0xd6, 0xcd, 0x4d, 0x8c, 0x6d, 0x8f, 0x85, 0xc1, 0x67, 0x93, 0xb8, -+ 0x3b, 0xc3, 0x9e, 0x67, 0x24, 0x7f, 0xc9, 0xf8, 0x89, 0x30, 0x7e, 0x6c, 0xe7, 0x17, 0xc4, 0xce, -+ 0x67, 0xe2, 0xe8, 0xdf, 0xc2, 0xf0, 0x9b, 0x48, 0x9e, 0xec, 0x60, 0xf8, 0x69, 0xfb, 0x01, 0x83, -+ 0xd3, 0xf7, 0xb6, 0x73, 0x8c, 0x3d, 0xf4, 0xf7, 0x94, 0xdf, 0x85, 0xf1, 0x4b, 0xe7, 0x8b, 0xe4, -+ 0xc3, 0xb5, 0x38, 0x78, 0x7a, 0x52, 0xa4, 0x9e, 0x45, 0x64, 0x9c, 0xcf, 0xe0, 0xf4, 0x77, 0x9a, -+ 0x3b, 0x18, 0xfc, 0x02, 0xd1, 0x5b, 0xc9, 0xe0, 0x9d, 0x64, 0x5c, 0xcf, 0xe0, 0xdf, 0x26, 0xe3, -+ 0x05, 0x0c, 0x4e, 0x7f, 0x5a, 0x5b, 0x1d, 0x86, 0x87, 0x3f, 0xc7, 0x7e, 0x27, 0x29, 0x32, 0x0e, -+ 0xf4, 0x3e, 0xf7, 0x7d, 0x06, 0xef, 0x20, 0xfc, 0x7d, 0x0c, 0x4e, 0x5f, 0x03, 0x8f, 0x33, 0xf8, -+ 0x45, 0x12, 0xff, 0x5f, 0x31, 0xf8, 0x05, 0xb2, 0xef, 0x1f, 0x33, 0xf8, 0x63, 0x04, 0xff, 0x63, -+ 0x1c, 0xfc, 0xdf, 0x19, 0x9c, 0xde, 0xbf, 0xaf, 0xc4, 0xc1, 0xc3, 0x9f, 0x57, 0xc7, 0x84, 0xf9, -+ 0x4b, 0xdf, 0x85, 0xd8, 0xfb, 0x51, 0x22, 0x17, 0x1b, 0xa7, 0xdf, 0xad, 0xb0, 0x1e, 0x7d, 0x18, -+ 0x4e, 0x75, 0xb2, 0xfc, 0x0f, 0xc6, 0xe1, 0x5f, 0xca, 0xf0, 0xd3, 0xfb, 0x4b, 0x20, 0x0e, 0x7f, -+ 0x27, 0xc3, 0x4f, 0xef, 0x17, 0xaf, 0xc6, 0xe1, 0x7f, 0x9d, 0xe1, 0xa7, 0x75, 0xef, 0x7a, 0x1c, -+ 0xfe, 0x1b, 0x0c, 0x3f, 0xad, 0x33, 0x95, 0x5c, 0x6c, 0xfe, 0x1a, 0x26, 0x3e, 0xec, 0x77, 0x81, -+ 0xbf, 0xb7, 0xe9, 0x90, 0x7c, 0x64, 0x58, 0x75, 0x26, 0xd2, 0xb3, 0xbf, 0xf3, 0xb2, 0x5f, 0x00, -+ 0xf0, 0x73, 0x95, 0x2a, 0x8c, 0x9f, 0xb6, 0xd3, 0xe4, 0x65, 0x87, 0xda, 0x3d, 0x92, 0xac, 0x43, -+ 0xe5, 0xe9, 0xfe, 0x4d, 0x20, 0x38, 0xfb, 0xa5, 0xe9, 0x62, 0x9c, 0xdf, 0x4b, 0x39, 0x66, 0x3c, -+ 0x99, 0xe8, 0xfc, 0x7b, 0xe5, 0x2b, 0x08, 0xc6, 0xfe, 0xdc, 0xac, 0xc8, 0x33, 0x02, 0xac, 0xff, -+ 0x77, 0xc7, 0xd0, 0x29, 0xc9, 0x13, 0xc6, 0x2f, 0x18, 0x3b, 0x58, 0xde, 0x5a, 0x14, 0x3b, 0x7e, -+ 0x68, 0x92, 0xdc, 0x1d, 0x20, 0x9f, 0x50, 0x70, 0xfc, 0x12, 0x51, 0x74, 0xfc, 0x1a, 0xe3, 0xac, -+ 0xff, 0x01, 0x39, 0x68, 0x19, 0xec, 0x1f, 0x43, 0x32, 0x7c, 0x8b, 0xe3, 0xc8, 0xff, 0x85, 0x7c, -+ 0x2a, 0xf9, 0x0e, 0xfb, 0xd7, 0x90, 0x0c, 0x9f, 0x23, 0x8e, 0x7c, 0xe7, 0x28, 0xb9, 0x67, 0xff, -+ 0x6f, 0x20, 0xcb, 0x6b, 0x43, 0xb1, 0xfd, 0x3f, 0x30, 0x25, 0x52, 0x1e, 0xfb, 0x8f, 0x43, 0xc1, -+ 0xfa, 0xdf, 0x11, 0x67, 0xfd, 0x7d, 0x74, 0x7d, 0x66, 0x92, 0xe5, 0x7d, 0x22, 0x8e, 0xfc, 0xf9, -+ 0xd1, 0x72, 0x7f, 0xe3, 0x2b, 0xe2, 0xb7, 0x1e, 0xc5, 0xb6, 0x7f, 0x60, 0x4a, 0xa4, 0x9d, 0xd8, -+ 0x7e, 0xfc, 0x75, 0x8b, 0xb5, 0xff, 0x79, 0xa2, 0x93, 0x8d, 0xd3, 0x19, 0xf2, 0x50, 0x7e, 0x89, -+ 0xf9, 0x1e, 0xc9, 0x31, 0x7d, 0x4f, 0x1c, 0xf9, 0xc3, 0x5a, 0xb9, 0x37, 0x32, 0x38, 0x2b, 0xdf, -+ 0x87, 0xe2, 0xe4, 0xaf, 0x36, 0x06, 0x18, 0x83, 0xf7, 0xe8, 0x57, 0xc8, 0x7b, 0xbf, 0xe2, 0xfc, -+ 0xe0, 0xf7, 0xb8, 0x58, 0xf1, 0xbb, 0x41, 0xe2, 0xa7, 0x0b, 0xab, 0x1f, 0x59, 0x28, 0x3a, 0x7e, -+ 0xf8, 0x3b, 0x47, 0xac, 0xaf, 0xd4, 0x8b, 0x49, 0xf1, 0x7c, 0x97, 0xc1, 0x59, 0x5b, 0x63, 0x9d, -+ 0x7d, 0xdc, 0x26, 0x91, 0x3f, 0xaf, 0x3c, 0x46, 0x94, 0xe3, 0x74, 0x2a, 0x8a, 0xb1, 0xfe, 0x88, -+ 0x38, 0xeb, 0x5f, 0x1c, 0x2f, 0xf7, 0xef, 0x33, 0x78, 0xac, 0x58, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, -+ 0x86, 0xdb, 0x70, 0x1b, 0x6e, 0xc3, 0x6d, 0xb8, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, 0x86, 0xdb, 0x70, -+ 0x1b, 0x6e, 0xc3, 0x6d, 0xb8, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, 0xfe, 0x7f, 0xb7, 0xff, 0x02, 0xab, -+ 0xd3, 0x36, 0xbe, 0x00, 0x50, 0x00, 0x00 -+}; -+ -+int main(int argc, const char *argv[]) -+{ -+ unsigned char *buf = wcn_bind_verify_lib; -+ ssize_t len = sizeof(wcn_bind_verify_lib); -+ -+ if (argv[1] != NULL && strcmp(argv[1], "clang") == 0) { -+ buf = wcn_bind_verify_bc; -+ len = sizeof(wcn_bind_verify_bc); -+ } -+ -+ while (len--) -+ printf("%c", *buf++); -+ -+ return 0; -+} -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -old mode 100644 -new mode 100755 -index 220bac67ddd..58b9d290f23 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -@@ -92,7 +92,7 @@ struct gpio_config { - }; - #endif - --#define WCN_FW_MAX_PATH_NUM 3 -+#define WCN_FW_MAX_PATH_NUM 4 - /* path of cp2 firmware. */ - #ifdef CONFIG_CUSTOMIZE_UNISOC_FW_PATH - #define UNISOC_FW_PATH_DEFAULT CONFIG_CUSTOMIZE_UNISOC_FW_PATH -@@ -2318,7 +2316,7 @@ static int marlin_start_run(void) - return ret; - } - --#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) -+//#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) - #include - - static void expand_seed(u8 *seed, u8 *out) -@@ -2424,7 +2422,7 @@ static int marlin_bind_verify(void) - - return ret; - } --#endif -+//#endif - - static int check_cp_ready(void) - { -@@ -2449,7 +2447,7 @@ static int check_cp_ready(void) - marlin_dev->sync_f.prj_type); - if (marlin_dev->sync_f.init_status == SYNC_ALL_FINISHED) - i = 0; --#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) -+//#ifdef CONFIG_AW_BIND_VERIFY - else if (marlin_dev->sync_f.init_status == - SYNC_VERIFY_WAITING) { - ret = marlin_bind_verify(); -@@ -2459,7 +2457,7 @@ static int check_cp_ready(void) - return ret; - } - } --#endif -+//#endif - else - msleep(20); - if (i > 10) -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -old mode 100644 -new mode 100755 -index 126746321ef..e7e48258c21 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -@@ -18,7 +18,8 @@ - #include - #include - #include --#if KERNEL_VERSION(4, 14, 0) <= LINUX_VERSION_CODE -+#include -+#if KERNEL_VERSION(4, 11, 0) <= LINUX_VERSION_CODE - #include - #endif - -@@ -130,13 +131,21 @@ static void wcn_gmtime(struct timespec64 *tv, struct wcn_tm *tm) - /* AP notify BTWF time by at+aptime=... cmd */ - long int wcn_ap_notify_btwf_time(void) - { -+#if KERNEL_VERSION(4, 20, 0) <= LINUX_VERSION_CODE - struct timespec64 now; -+#else -+ struct timespec now; -+#endif - struct wcn_tm tm; - char aptime[64]; - long int send_cnt = 0; - - /* get ap kernel time and transfer to China-BeiJing Time */ -- ktime_get_coarse_real_ts64(&now); -+#if KERNEL_VERSION(4, 20, 0) <= LINUX_VERSION_CODE -+ ktime_get_real_ts64(&now); -+#else -+ now = current_kernel_time(); -+#endif - wcn_gmtime(&now, &tm); - tm.tm_hour = (tm.tm_hour + WCN_BTWF_TIME_OFFSET) % 24; - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -old mode 100644 -new mode 100755 -index 77b4ec259e3..ce3f8d110ae ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -@@ -94,12 +94,12 @@ void mdbg_assert_interface(char *str) - stop_loopcheck(); - #endif - --#if (CONFIG_CP2_ASSERT) - memset(mdbg_proc->assert.buf, 0, MDBG_ASSERT_SIZE); - strncpy(mdbg_proc->assert.buf, str, len); - WCN_INFO("mdbg_assert_interface:%s\n", - (char *)(mdbg_proc->assert.buf)); - -+#if (CONFIG_CP2_ASSERT) - sprdwcn_bus_set_carddump_status(true); - #ifndef CONFIG_WCND - /* wcn_hold_cpu(); */ -@@ -113,8 +113,9 @@ void mdbg_assert_interface(char *str) - #else - WCN_ERR("%s,%s reset & notify...\n", __func__, str); - marlin_reset_notify_call(MARLIN_CP2_STS_ASSERTED); -+ marlin_cp2_reset(); - msleep(1000); -- marlin_reset_notify_call(MARLIN_CP2_STS_READY); -+ // marlin_reset_notify_call(MARLIN_CP2_STS_READY); - #endif - - } -@@ -764,12 +761,6 @@ static ssize_t mdbg_proc_write(struct file *filp, - return count; - } - -- if (strncmp(mdbg_proc->write_buf, "startgps", 7) == 0) { -- start_marlin(MARLIN_GNSS); -- return count; -- } -- -- - - /* unit of loglimitsize is MByte. */ - if (strncmp(mdbg_proc->write_buf, "loglimitsize=", -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -old mode 100644 -new mode 100755 -index 98f48335316..a37fe8c55d6 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -@@ -128,9 +128,9 @@ static void sdio_remove_card(void) - static void sdiohal_cp_allow_sleep(enum slp_subsys subsys) - { - #ifdef CONFIG_WCN_SLP --#ifdef CONFIG_CPLOG_DEBUG -- sdiohal_info("%s entry\n", __func__); --#endif -+//#ifdef CONFIG_CPLOG_DEBUG -+// sdiohal_info("%s entry\n", __func__); -+//#endif - slp_mgr_drv_sleep(subsys, true); - #endif - } -@@ -138,9 +138,9 @@ static void sdiohal_cp_allow_sleep(enum slp_subsys subsys) - static void sdiohal_cp_sleep_wakeup(enum slp_subsys subsys) - { - #ifdef CONFIG_WCN_SLP --#ifdef CONFIG_CPLOG_DEBUG -- sdiohal_info("%s entry\n", __func__); --#endif -+//#ifdef CONFIG_CPLOG_DEBUG -+// sdiohal_info("%s entry\n", __func__); -+//#endif - slp_mgr_drv_sleep(subsys, false); - slp_mgr_wakeup(subsys); - #endif -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -old mode 100644 -new mode 100755 -index c26bfb3251b..f87dfafe9c8 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -@@ -62,7 +62,7 @@ extern long int sdiohal_log_level; - } while (0) - #define sdiohal_pr_perf(fmt, args...) \ - do { if (sdiohal_log_level & SDIOHAL_PERF_LEVEL) \ -- trace_printk(fmt, ## args); \ -+ printk(fmt, ## args); \ - } while (0) - #else - #define sdiohal_normal(fmt, args...) -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -old mode 100644 -new mode 100755 -index 0f67a7f35c3..a10b7909e95 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -@@ -48,9 +48,9 @@ extern void sdio_clk_always_on(int on); - extern void sdio_set_max_reqsz(unsigned int size); - #endif - --//#ifdef CONFIG_RK_BOARD --//extern int rockchip_wifi_set_carddetect(int val); --//#endif -+#ifdef CONFIG_RK_BOARD -+extern int rockchip_wifi_set_carddetect(int val); -+#endif - - #ifdef CONFIG_AW_BOARD - extern int sunxi_wlan_get_bus_index(void); -@@ -2090,9 +2090,10 @@ void sdiohal_remove_card(void) - sdiohal_set_card_present(0); - #endif - --//#ifdef CONFIG_RK_BOARD --// rockchip_wifi_set_carddetect(0); --//#endif -+#ifdef CONFIG_RK_BOARD -+ //rockchip_wifi_set_carddetect(0); -+ return ; -+#endif - - #ifdef CONFIG_AW_BOARD - // sunxi_mmc_rescan_card(wlan_bus_index); -@@ -2192,9 +2193,9 @@ int sdiohal_scan_card(void) - sdiohal_set_card_present(1); - #endif - --//#ifdef CONFIG_RK_BOARD --// rockchip_wifi_set_carddetect(1); --//#endif -+#ifdef CONFIG_RK_BOARD -+ //rockchip_wifi_set_carddetect(1); -+#endif - - #if 0 - wlan_bus_index = sunxi_wlan_get_bus_index(); -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -old mode 100644 -new mode 100755 -index 2a64dac7af5..e968c09b233 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -@@ -205,7 +205,7 @@ int sdiohal_rx_thread(void *data) - static int times_count; - - param.sched_priority = SDIO_RX_TASK_PRIO; -- sched_set_fifo_low(current); -+ sched_setscheduler(current, SCHED_FIFO, ¶m); - sdiohal_rx_adapt_set_dtbs(0); - sdiohal_rx_adapt_set_pac_num(1); - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -old mode 100644 -new mode 100755 -index c0790f6cdd1..b3b000e951b ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -@@ -141,7 +141,7 @@ int sdiohal_tx_thread(void *data) - static int times_count; - - param.sched_priority = SDIO_TX_TASK_PRIO; -- sched_set_fifo_low(current); -+ sched_setscheduler(current, SCHED_FIFO, ¶m); - - while (1) { - /* Wait the semaphore */ -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c b/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -old mode 100644 -new mode 100755 -index 6e95b0f3ce8..0c2664d876f ---- a/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -@@ -344,3 +340,7 @@ int wcn_usb_dinit(void) - if (!this->download) - wcn_usb_dp("%s create file[download] failed\n", __func__); - -+ ddthis = this; -+ return 0; -+} -+ -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/api_version.c b/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -old mode 100644 -new mode 100755 -index 91bcfee46fb..b677980115e ---- a/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -@@ -449,11 +449,7 @@ int sprdwl_api_available_check(struct sprdwl_priv *priv, - u8 drv_ver = 0, fw_ver = 0; - u32 min_ver = 255; - --#if defined(UWE5621_FTR) - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - if (cmd_id == WIFI_CMD_SYNC_VERSION) - return 0; -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -old mode 100644 -new mode 100755 -index 53b5fd0ec29..f26113c08af ---- a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -@@ -1725,20 +1721,6 @@ static int sprdwl_cfg80211_sched_scan_stop(struct wiphy *wiphy, - #ifdef SYNC_DISCONNECT - void sprdwl_disconnect_handle(struct sprdwl_vif *vif) - { -- u16 reason_code = 0; -- if ((vif->sm_state == SPRDWL_CONNECTED) || -- (vif->sm_state == SPRDWL_DISCONNECTING)) { -- cfg80211_disconnected(vif->ndev, reason_code, --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 83) -- NULL, 0, true, GFP_KERNEL); --#else -- NULL, 0, GFP_KERNEL); --#endif -- wl_ndev_log(L_DBG, vif->ndev, -- "%s %s, reason_code %d\n", __func__, -- vif->ssid, reason_code); -- } -- - vif->sm_state = SPRDWL_DISCONNECTED; - - /* Clear bssid & ssid */ -@@ -1784,19 +1766,17 @@ static int sprdwl_cfg80211_disconnect(struct wiphy *wiphy, - goto out; - } - #ifdef SYNC_DISCONNECT -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 60) - if (!sprdwl_sync_disconnect_event(vif, msecs_to_jiffies(1000))) { - kt = ktime_get(); --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) -- msec = (u32)(div_u64(kt, NSEC_PER_MSEC)); --#else - msec = (u32)(div_u64(kt.tv64, NSEC_PER_MSEC)); --#endif - wl_err("Wait disconnect event timeout. [mstime = %d]\n", -- cpu_to_le32(msec)); -+ cpu_to_le32(msec)); - } else { - sprdwl_disconnect_handle(vif); - } - atomic_set(&vif->sync_disconnect_event, 0); -+#endif - #endif - trace_deauth_reason(vif->mode, reason_code, LOCAL_EVENT); - out: -@@ -2249,9 +2229,8 @@ void sprdwl_report_scan_result(struct sprdwl_vif *vif, u16 chan, s16 rssi, - ie, ielen, signal, GFP_KERNEL); - - if (unlikely(!bss)) -- ; -- //wl_ndev_log(L_ERR, vif->ndev, -- // "%s failed to inform bss frame!\n", __func__); -+ wl_ndev_log(L_ERR, vif->ndev, -+ "%s failed to inform bss frame!\n", __func__); - cfg80211_put_bss(wiphy, bss); - - /*check log mac flag and call report fake probe*/ -@@ -2382,11 +2361,10 @@ void sprdwl_report_connection(struct sprdwl_vif *vif, - mgmt->bssid, tsf, - capability, beacon_interval, - ie, ielen, conn_info->signal, GFP_KERNEL); -- if (unlikely(!bss)) -- ; -- //wl_ndev_log(L_ERR, vif->ndev, -- // "%s failed to inform bss frame!\n", -- // __func__); -+ //if (unlikely(!bss)) -+ // wl_ndev_log(L_ERR, vif->ndev, -+ // "%s failed to inform bss frame!\n", -+ // __func__); - } else { - wl_ndev_log(L_ERR, vif->ndev, "%s No Beason IE!\n", __func__); - } -@@ -2702,9 +2680,24 @@ static int sprdwl_cfg80211_mgmt_tx(struct wiphy *wiphy, - /* send tx mgmt */ - if (len > 0) { - ret = sprdwl_tx_mgmt(vif->priv, vif->ctx_id, -- ieee80211_frequency_to_channel -- (chan->center_freq), dont_wait_for_ack, -- wait, cookie, buf, len); -+ ieee80211_frequency_to_channel -+ (chan->center_freq), dont_wait_for_ack, -+ wait, cookie, buf, len); -+ -+ if (ret == 0 && len == 217 && (chan->center_freq == 2412 || chan->center_freq == 5200)) { -+ int type = ((*buf) & IEEE80211_FCTL_FTYPE) >> 2; -+ int subtype = ((*buf) & IEEE80211_FCTL_STYPE) >> 4; -+ int action = *(buf + MAC_LEN); -+ int action_subtype = *(buf + ACTION_SUBTYPE_OFFSET); -+ if (type == IEEE80211_FTYPE_MGMT && subtype == ACTION_TYPE && -+ action == PUB_ACTION && action_subtype == 1 && -+ buf[4] == 0x00 && buf[5] == 0x01 && buf[6] == 0x02 && -+ buf[7] == 0x03 && buf[8] == 0x04 && buf[9] == 0x05) { -+ printk("sprdwl: %s(%d), DPP Frame Received\n", __func__, __LINE__); -+ cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, 0, GFP_KERNEL); -+ } -+ } -+ - if (ret) - if (!dont_wait_for_ack) - cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, -@@ -3110,7 +3103,7 @@ static int sprdwl_cfg80211_set_mac_acl(struct wiphy *wiphy, - unsigned char *mac_addr = NULL; - - if (!acl || !acl->n_acl_entries) { -- //wl_ndev_log(L_ERR, ndev, "%s no ACL data\n", __func__); -+ wl_ndev_log(L_ERR, ndev, "%s no ACL data\n", __func__); - return 0; - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c b/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -old mode 100644 -new mode 100755 -index 809e24ca700..42c394d22b9 ---- a/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -@@ -400,7 +400,6 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - struct sprdwl_cmd_hdr *hdr; - u16 plen = sizeof(*hdr) + len; - enum sprdwl_mode mode = SPRDWL_MODE_NONE;/*default to open new device*/ --#if defined(UWE5621_FTR) - void *data = NULL; - struct sprdwl_vif *vif; - struct sprdwl_intf *intf = (struct sprdwl_intf *)(priv->hw_priv); -@@ -424,14 +423,13 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - if (cmd_id >= WIFI_CMD_OPEN) { - vif = ctx_id_to_vif(priv, ctx_id); - if (!vif) -- ; -- //wl_err("%s cant't get vif, ctx_id: %d\n", -- // __func__, ctx_id); -+ wl_err("%s cant't get vif, ctx_id: %d\n", -+ __func__, ctx_id); - else - mode = vif->mode; - sprdwl_put_vif(vif); - } --#endif -+ - msg = sprdwl_intf_get_msg_buf(priv, SPRDWL_TYPE_CMD, mode, ctx_id); - if (!msg) { - wl_err("%s, %d, getmsgbuf fail, mode=%d\n", -@@ -439,7 +437,6 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - return NULL; - } - --#if defined(UWE5621_FTR) - data = kzalloc((plen + priv->hw_offset), flags); - if (data) { - hdr = (struct sprdwl_cmd_hdr *)(data + priv->hw_offset); -@@ -456,25 +453,7 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - sprdwl_intf_free_msg_buf(priv, msg); - return NULL; - } --#else -- msg->skb = dev_alloc_skb(plen); -- if (msg->skb) { -- memset(msg->skb->data, 0, plen); -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; -- hdr->common.type = SPRDWL_TYPE_CMD; -- hdr->common.reserv = 0; -- hdr->common.rsp = rsp; -- hdr->common.ctx_id = ctx_id; -- hdr->plen = cpu_to_le16(plen); -- hdr->cmd_id = cmd_id; -- sprdwl_fill_msg(msg, msg->skb, msg->skb->data, plen); -- msg->data = hdr + 1; -- } else { -- wl_err("%s failed to allocate skb\n", __func__); -- sprdwl_intf_free_msg_buf(priv, msg); -- return NULL; -- } --#endif -+ - return msg; - } - -@@ -488,11 +467,7 @@ static int sprdwl_cmd_send_to_ic(struct sprdwl_priv *priv, - struct sprdwl_intf *intf = (struct sprdwl_intf *)(priv->hw_priv); - struct sprdwl_tx_msg *tx_msg = (struct sprdwl_tx_msg *)intf->sprdwl_tx; - --#if defined(UWE5621_FTR) - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - /*TODO:consider common this if condition since - * SPRDWL_HEAD_NORSP not used any more - */ -@@ -595,22 +570,15 @@ int sprdwl_cmd_send_recv(struct sprdwl_priv *priv, - ret = sprdwl_api_available_check(priv, msg); - if (ret || sprdwl_cmd_lock(cmd)) { - sprdwl_intf_free_msg_buf(priv, msg); --#if defined(UWE5621_FTR) - kfree(msg->tran_data); --#else -- dev_kfree_skb(msg->skb); --#endif - if (rlen) - *rlen = 0; - if (ret) - wl_err("API check fail, return!!\n"); - goto out; - } --#if defined(UWE5621_FTR) -+ - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - ctx_id = hdr->common.ctx_id; - -@@ -692,18 +660,11 @@ int sprdwl_cmd_send_recv_no_wait(struct sprdwl_priv *priv, - if (sprdwl_cmd_lock(cmd)) { - wl_err("%s, %d, error!\n", __func__, __LINE__); - sprdwl_intf_free_msg_buf(priv, msg); --#if defined(UWE5621_FTR) - kfree(msg->tran_data); --#else -- dev_kfree_skb(msg->skb); --#endif - goto out; - } --#if defined(UWE5621_FTR) -+ - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - ctx_id = hdr->common.ctx_id; - -@@ -724,7 +685,7 @@ int sprdwl_sync_version(struct sprdwl_priv *priv) - struct sprdwl_cmd_api_t *drv_api = NULL; - struct sprdwl_cmd_api_t *fw_api = NULL; - u16 r_len = sizeof(*fw_api); -- u8 r_buf[r_len]; -+ u8 r_buf[sizeof(*fw_api)]; - int ret = 0; - - msg = sprdwl_cmd_getbuf(priv, sizeof(struct sprdwl_cmd_api_t), -@@ -864,40 +825,28 @@ int sprdwl_get_fw_info(struct sprdwl_priv *priv) - struct sprdwl_tlv_data *tlv; - u16 r_len = sizeof(*p) + GET_INFO_TLV_RBUF_SIZE; - u16 r_len_ori = r_len; -- u8 r_buf[r_len]; --#ifdef COMPAT_SAMPILE_CODE -+ u8 r_buf[sizeof(*p) + GET_INFO_TLV_RBUF_SIZE]; - u8 compat_ver = 0; --#endif - unsigned int len_count = 0; - bool b_tlv_data_chk = true; -- u16 tlv_len; -+ u16 tlv_len = sizeof(struct ap_version_tlv_elmt); - #ifdef WL_CONFIG_DEBUG - u8 ap_version = NOTIFY_AP_VERSION_USER_DEBUG; - #else - u8 ap_version = NOTIFY_AP_VERSION_USER; - #endif -- u16 offset = 0; --#ifdef OTT_UWE -- u8 bytes_allign = 1; --#define OTT_UWE_OFFSET_ENABLE 1 --#endif -- u8 credit_via_data = 1; - -- tlv_len = sizeof(*tlv) + 1; - #ifdef OTT_UWE -- tlv_len += (sizeof(*tlv) + 1); -+#define OTT_UWE_OFFSET_ENABLE 1 -+ tlv_len += 1; - #endif - -- if (priv->hw_type == SPRDWL_HW_USB) -- tlv_len += (sizeof(*tlv) + 1); -- - memset(r_buf, 0, r_len); - msg = sprdwl_cmd_getbuf(priv, tlv_len, SPRDWL_MODE_NONE, - SPRDWL_HEAD_RSP, WIFI_CMD_GET_INFO); - if (!msg) - return -ENOMEM; - --#ifdef COMPAT_SAMPILE_CODE - compat_ver = need_compat_operation(priv, WIFI_CMD_GET_INFO); - if (compat_ver) { - switch (compat_ver) { -@@ -917,25 +866,16 @@ int sprdwl_get_fw_info(struct sprdwl_priv *priv) - break; - } - } --#endif - -- /*to notify CP2 use more CP2 buffer*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), NOTIFY_AP_VERSION, -+ sprdwl_set_tlv_elmt((u8 *)msg->data, NOTIFY_AP_VERSION, - sizeof(ap_version), &ap_version); -- offset += (sizeof(*tlv) + 1); -+ - #ifdef OTT_UWE -- /*to notify CP2 this is OTT version ,4bytes allign*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), OTT_UWE_OFFSET_ENABLE, -- sizeof(bytes_allign), &bytes_allign); -- offset += (sizeof(*tlv) + 1); -+ tlv = (struct sprdwl_tlv_data *)msg->data; -+ tlv->type = OTT_UWE_OFFSET_ENABLE; -+ tlv->len = 1; -+ *((char *)tlv->data) = 1; - #endif -- if (priv->hw_type == SPRDWL_HW_USB) { -- /*to notify CP2 data credit disable*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), NOTIFY_CREDIT_VIA_RX_DATA, -- sizeof(credit_via_data), &credit_via_data); -- offset += (sizeof(*tlv) + 1); -- } -- - ret = sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, &r_len); - if (!ret && r_len) { - #if defined COMPAT_SAMPILE_CODE -@@ -1598,16 +1538,12 @@ int sprdwl_set_qos_map(struct sprdwl_priv *priv, u8 vif_ctx_id, void *qos_map) - if (!qos_map) - return 0; - msg = -- sprdwl_cmd_getbuf(priv, sizeof(*p), vif_ctx_id, 1, -- WIFI_CMD_SET_QOS_MAP); -+ sprdwl_cmd_getbuf(priv, sizeof(*p), vif_ctx_id, 1, -+ WIFI_CMD_SET_QOS_MAP); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_qos_map *)msg->data; --#else -- p = (struct sprdwl_cmd_qos_map *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - memcpy((u8 *)p, qos_map, sizeof(*p)); - memcpy(&g_11u_qos_map.qos_exceptions[0], &p->dscp_exception[0], -@@ -1633,12 +1569,8 @@ int sprdwl_gscan_subcmd(struct sprdwl_priv *priv, u8 vif_ctx_id, - - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = subcmd; - - if (data != NULL) { -@@ -1661,12 +1593,8 @@ int sprdwl_set_gscan_config(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_CONFIG; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1683,12 +1611,8 @@ int sprdwl_set_gscan_scan_config(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *)(msg->skb->data + -- sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_SCAN_CONFIG; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1705,12 +1629,8 @@ int sprdwl_enable_gscan(struct sprdwl_priv *priv, u8 vif_ctx_id, void *data, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_ENABLE_GSCAN; - p->data_len = sizeof(int); - memcpy(p->data, data, p->data_len); -@@ -1727,12 +1647,8 @@ int sprdwl_get_gscan_capabilities(struct sprdwl_priv *priv, u8 vif_ctx_id, - SPRDWL_HEAD_RSP, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_GET_CAPABILITIES; - p->data_len = 0; - -@@ -1751,29 +1667,19 @@ int sprdwl_get_gscan_channel_list(struct sprdwl_priv *priv, u8 vif_ctx_id, - if (!msg) - return -ENOMEM; - --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_GET_CHANNEL_LIST; - p->data_len = sizeof(*band); - --#if defined(UWE5621_FTR) - band = (int *)(msg->data + sizeof(struct sprd_cmd_gscan_header)); --#else -- band = (int *)(msg->skb->data + sizeof(struct sprdwl_cmd_hdr) + -- sizeof(struct sprd_cmd_gscan_header)); --#endif -- - *band = *((int *)data); - - return sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, r_len); - } - - int sprdwl_set_gscan_bssid_hotlist(struct sprdwl_priv *priv, u8 vif_ctx_id, -- void *data, u16 len, u8 *r_buf, u16 *r_len) -+ void *data, u16 len, u8 *r_buf, u16 *r_len) - { - struct sprdwl_msg_buf *msg; - struct sprd_cmd_gscan_header *p; -@@ -1782,12 +1688,8 @@ int sprdwl_set_gscan_bssid_hotlist(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_HOTLIST; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1804,19 +1706,15 @@ int sprdwl_set_gscan_bssid_blacklist(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_WIFI_SUBCMD_SET_BSSID_BLACKLIST; - p->data_len = len; - memcpy(p->data, data, len); - return sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, r_len); - } - int sprdwl_add_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, -- const u8 *peer, u8 user_prio, u16 admitted_time) -+ const u8 *peer, u8 user_prio, u16 admitted_time) - { - struct sprdwl_msg_buf *msg; - struct sprdwl_cmd_tx_ts *p; -@@ -1828,12 +1726,8 @@ int sprdwl_add_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, - WIFI_CMD_ADD_TX_TS); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_tx_ts *)msg->data; --#else -- p = (struct sprdwl_cmd_tx_ts *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - - p->tsid = tsid; -@@ -1859,12 +1753,8 @@ int sprdwl_del_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, - WIFI_CMD_DEL_TX_TS); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_tx_ts *)msg->data; --#else -- p = (struct sprdwl_cmd_tx_ts *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - - p->tsid = tsid; -@@ -2023,37 +1913,19 @@ int sprdwl_set_roam_offload(struct sprdwl_priv *priv, u8 vif_ctx_id, - - int sprdwl_tdls_mgmt(struct sprdwl_vif *vif, struct sk_buff *skb) - { --#ifndef UWE5621_FTR -- struct sprdwl_msg_buf *msg; --#endif - int ret; - --#ifndef UWE5621_FTR -- msg = sprdwl_intf_get_msg_buf(vif->priv, SPRDWL_TYPE_DATA, -- SPRDWL_MODE_STATION, vif->ctx_id); -- if (!msg) { -- if (vif->priv->hw_type == SPRDWL_HW_SDIO_BA) -- sprdwl_stop_net(vif); -- vif->ndev->stats.tx_fifo_errors++; -- wl_err("%s, %d, get msg bug failed\n", __func__, __LINE__); -- return -NETDEV_TX_BUSY; -- } --#endif - /* temp debug use */ - if (skb_headroom(skb) < vif->ndev->needed_headroom) - wl_err("%s skb head len err:%d %d\n", -- __func__, skb_headroom(skb), -- vif->ndev->needed_headroom); --#ifdef UWE5621_FTR -+ __func__, skb_headroom(skb), -+ vif->ndev->needed_headroom); -+ - /*send TDLS mgmt through cmd port instead of data port,needed by CP2*/ - ret = sprdwl_send_tdlsdata_use_cmd(skb, vif, 1); --#else -- /* sprdwl_send_data: offset use 2 for cp bytes align */ -- ret = sprdwl_send_data(vif, msg, skb, 2, false); --#endif - if (ret) { -- //wl_err("%s drop msg due to TX Err\n", -- // __func__); -+ wl_err("%s drop msg due to TX Err\n", -+ __func__); - goto out; - } - -@@ -2735,12 +2607,12 @@ unsigned short sprdwl_rx_rsp_process(struct sprdwl_priv *priv, u8 *msg) - complete(&cmd->completed); - } else { - kfree(data); -- //wl_err("%s ctx_id %d recv mismatched rsp[%s] status[%s]\n", -- // __func__, hdr->common.ctx_id, -- // cmd2str(hdr->cmd_id), -- // err2str(hdr->status)); -- //wl_err("%s mstime:[%u %u]\n", __func__, -- // SPRDWL_GET_LE32(hdr->mstime), cmd->mstime); -+ wl_err("%s ctx_id %d recv mismatched rsp[%s] status[%s]\n", -+ __func__, hdr->common.ctx_id, -+ cmd2str(hdr->cmd_id), -+ err2str(hdr->status)); -+ wl_err("%s mstime:[%u %u]\n", __func__, -+ SPRDWL_GET_LE32(hdr->mstime), cmd->mstime); - } - spin_unlock_bh(&cmd->lock); - atomic_dec(&cmd->refcnt); -@@ -2789,11 +2661,11 @@ void sprdwl_event_scan_done(struct sprdwl_vif *vif, u8 *data, u16 len) - default: - sprdwl_scan_done(vif, true); - sprdwl_sched_scan_done(vif, false); -- //if (p->type == SPRDWL_SCAN_ERROR) -- // wl_ndev_log(L_ERR, vif->ndev, "%s error!\n", __func__); -- //else -- // wl_ndev_log(L_ERR, vif->ndev, "%s invalid scan done type: %d\n", -- // __func__, p->type); -+ if (p->type == SPRDWL_SCAN_ERROR) -+ wl_ndev_log(L_ERR, vif->ndev, "%s error!\n", __func__); -+ else -+ wl_ndev_log(L_ERR, vif->ndev, "%s invalid scan done type: %d\n", -+ __func__, p->type); - break; - } - bss_count = 0; -@@ -2897,16 +2769,19 @@ void sprdwl_event_disconnect(struct sprdwl_vif *vif, u8 *data, u16 len) - u16 reason_code; - - memcpy(&reason_code, data, sizeof(reason_code)); -- wl_info("%s reason code = %d\n", __func__, reason_code); - #ifdef SYNC_DISCONNECT -+ /*Report disconnection on version > 4.9.60, even though disconnect -+ is from wpas, otherwise it returns -EALREADY on next connect.*/ -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 60) - if (atomic_read(&vif->sync_disconnect_event)) { - vif->disconnect_event_code = reason_code; - atomic_set(&vif->sync_disconnect_event, 0); - wake_up(&vif->disconnect_wq); -+ wl_err("%s reason code = %d\n", __func__, reason_code); - } else - #endif -- sprdwl_report_disconnection(vif, reason_code); -- -+#endif -+ sprdwl_report_disconnection(vif, reason_code); - } - - void sprdwl_event_mic_failure(struct sprdwl_vif *vif, u8 *data, u16 len) -@@ -3600,11 +3471,9 @@ unsigned short sprdwl_rx_event_process(struct sprdwl_priv *priv, u8 *msg) - sprdwl_event_nan(vif, data, len); - break; - #endif /* NAN_SUPPORT */ --#ifdef UWE5621_FTR - case WIFI_EVENT_STA_LUT_INDEX: - sprdwl_event_sta_lut(vif, data, len); - break; --#endif - case WIFI_EVENT_BA: - sprdwl_event_ba_mgmt(vif, data, len); - break; -@@ -3724,14 +3593,14 @@ int sprdwl_sync_disconnect_event(struct sprdwl_vif *vif, unsigned int timeout) - #endif - - int sprdwl_set_packet_offload(struct sprdwl_priv *priv, u8 vif_ctx_id, -- u32 req, u8 enable, u32 interval, -- u32 len, u8 *data) -+ u32 req, u8 enable, u32 interval, -+ u32 len, u8 *data) - { - struct sprdwl_msg_buf *msg; - struct sprdwl_cmd_packet_offload *p; - struct sprdwl_cmd_packet_offload *packet = NULL; - u16 r_len = sizeof(*packet); -- u8 r_buf[r_len]; -+ u8 r_buf[sizeof(*packet)]; - - msg = sprdwl_cmd_getbuf(priv, sizeof(*p) + len, vif_ctx_id, - SPRDWL_HEAD_RSP, WIFI_CMD_PACKET_OFFLOAD); - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/intf.h b/drivers/net/wireless/uwe5622/unisocwifi/intf.h -old mode 100644 -new mode 100755 -index c17356251e0..41b9bd5a3fe ---- a/drivers/net/wireless/uwe5622/unisocwifi/intf.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/intf.h -@@ -24,35 +24,17 @@ struct sprdwl_priv; - struct sprdwl_if_ops { - struct sprdwl_msg_buf *(*get_msg_buf)(void *sdev, - enum sprdwl_head_type type, --#if defined(UWE5621_FTR) - enum sprdwl_mode mode, - u8 ctx_id); --#else -- enum sprdwl_mode mode); --#endif -+ - void (*free_msg_buf)(void *sdev, struct sprdwl_msg_buf *msg); - int (*tx)(void *spdev, struct sprdwl_msg_buf *msg); -- --#if defined(UWE5621_FTR) - void (*force_exit)(void *spdev); - int (*is_exit)(void *spdev); --#else -- void (*force_exit)(void); -- int (*is_exit)(void); --#endif /* UWE5621_FTR */ - int (*suspend)(struct sprdwl_priv *priv); - int (*resume)(struct sprdwl_priv *priv); --#if defined(UWE5621_FTR) - void (*debugfs)(void *spdev, struct dentry *dir); --#else -- void (*debugfs)(struct dentry *dir); --#endif /* UWE5621_FTR */ -- --#if defined(UWE5621_FTR) - void (*tcp_drop_msg)(void *spdev, struct sprdwl_msg_buf *msg); --#else -- void (*tcp_drop_msg)(struct sprdwl_msg_buf *msg); --#endif /* UWE5621_FTR*/ - int (*ini_download_status)(void); - }; - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h b/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -old mode 100644 -new mode 100755 -index 3844b0b0676..c580b304026 ---- a/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -@@ -28,11 +28,7 @@ inline struct sprdwl_msg_buf *sprdwl_intf_get_msg_buf(struct sprdwl_priv *priv, - enum sprdwl_mode mode, - u8 ctx_id) - { --#if defined(UWE5621_FTR) - return priv->if_ops->get_msg_buf(priv->hw_priv, type, mode, ctx_id); --#else -- return priv->if_ops->get_msg_buf(priv->hw_priv, type, mode); --#endif - } - - static inline void sprdwl_intf_free_msg_buf(struct sprdwl_priv *priv, -@@ -53,20 +49,12 @@ static inline int sprdwl_intf_tx(struct sprdwl_priv *priv, - - static inline void sprdwl_intf_force_exit(struct sprdwl_priv *priv) - { --#if defined(UWE5621_FTR) - priv->if_ops->force_exit(priv->hw_priv); --#else -- priv->if_ops->force_exit(); --#endif - } - - static inline int sprdwl_intf_is_exit(struct sprdwl_priv *priv) - { --#if defined(UWE5621_FTR) - return priv->if_ops->is_exit(priv->hw_priv); --#else -- return priv->if_ops->is_exit(); --#endif - } - - static inline int sprdwl_intf_suspend(struct sprdwl_priv *priv) -@@ -88,25 +76,15 @@ static inline int sprdwl_intf_resume(struct sprdwl_priv *priv) - static inline void sprdwl_intf_debugfs(struct sprdwl_priv *priv, - struct dentry *dir) - { --#if defined(UWE5621_FTR) - if (priv->if_ops->debugfs) - priv->if_ops->debugfs(priv->hw_priv, dir); --#else -- if (priv->if_ops->debugfs) -- priv->if_ops->debugfs(dir); --#endif /* UWE5621_FTR */ - } - - static inline void sprdwl_intf_tcp_drop_msg(struct sprdwl_priv *priv, - struct sprdwl_msg_buf *msg) - { --#if defined(UWE5621_FTR) - if (priv->if_ops->tcp_drop_msg) - priv->if_ops->tcp_drop_msg(priv->hw_priv, msg); --#else -- if (priv->if_ops->tcp_drop_msg) -- priv->if_ops->tcp_drop_msg(msg); --#endif - } - - static inline int sprdwl_get_ini_status(struct sprdwl_priv *priv) -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/main.c b/drivers/net/wireless/uwe5622/unisocwifi/main.c -old mode 100644 -new mode 100755 -index 46b9039519c..f1d6d7285d8 ---- a/drivers/net/wireless/uwe5622/unisocwifi/main.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/main.c -@@ -994,9 +994,8 @@ static int sprdwl_inetaddr_event(struct notifier_block *this, - if (entry->ctx_id == vif->ctx_id) - entry->ip_acquired = 1; - else -- ; -- //wl_err("ctx_id(%d) mismatch\n", -- // entry->ctx_id); -+ wl_err("ctx_id(%d) mismatch\n", -+ entry->ctx_id); - } else { - wl_err("failed to find entry\n"); - } -@@ -1089,7 +1088,12 @@ static void sprdwl_set_mac_addr(struct sprdwl_vif *vif, u8 *pending_addr, - if (is_valid_ether_addr(custom_mac)) { - ether_addr_copy(addr, custom_mac); - } else if (priv && is_valid_ether_addr(priv->mac_addr)) { -- ether_addr_copy(addr, priv->mac_addr); -+ if (type == NL80211_IFTYPE_P2P_DEVICE) { -+ ether_addr_copy(addr, priv->mac_addr); -+ } else { -+ vif->ndev->addr_len = ETH_ALEN; -+ dev_addr_set(vif->ndev, priv->mac_addr); -+ } - } else if (pending_addr && is_valid_ether_addr(pending_addr)) { - ether_addr_copy(addr, pending_addr); - } else if (priv && is_valid_ether_addr(priv->default_mac)) { -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/msg.c b/drivers/net/wireless/uwe5622/unisocwifi/msg.c -old mode 100644 -new mode 100755 -index f71a6879615..47f78c4343b ---- a/drivers/net/wireless/uwe5622/unisocwifi/msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/msg.c -@@ -169,7 +169,6 @@ struct sprdwl_msg_buf *sprdwl_get_msgbuf_by_data(void *data, - return find ? msg_buf : NULL; - } - --#if defined(UWE5621_FTR) - struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list) - { - struct sprdwl_msg_buf *msg_buf = NULL; -@@ -181,5 +180,4 @@ struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list) - spin_unlock_bh(&list->busylock); - return msg_buf; - } --#endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/msg.h b/drivers/net/wireless/uwe5622/unisocwifi/msg.h -old mode 100644 -new mode 100755 -index 67a4b474e74..dd57521ae70 ---- a/drivers/net/wireless/uwe5622/unisocwifi/msg.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/msg.h -@@ -215,7 +215,5 @@ void sprdwl_dequeue_msg_buf(struct sprdwl_msg_buf *msg_buf, - struct sprdwl_msg_list *list); - struct sprdwl_msg_buf *sprdwl_get_msgbuf_by_data(void *data, - struct sprdwl_msg_list *list); --#if defined(UWE5621_FTR) - struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list); - #endif --#endif -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/npi.c b/drivers/net/wireless/uwe5622/unisocwifi/npi.c -old mode 100644 -new mode 100755 -index 90b333b701b..e165d2aa71a ---- a/drivers/net/wireless/uwe5622/unisocwifi/npi.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/npi.c -@@ -33,9 +33,6 @@ static struct genl_family sprdwl_nl_genl_family; - static int sprdwl_get_flag(void) - { - struct file *fp = NULL; --#ifdef setfs -- mm_segment_t fs; --#endif - loff_t *pos; - int flag = 0; - char file_data[2]; -@@ -46,18 +43,11 @@ static int sprdwl_get_flag(void) - wl_err("open file:%s failed\n", SPRDWL_PSM_PATH); - return PTR_ERR(fp); - } --#ifdef setfs -- fs = get_fs(); -- set_fs(KERNEL_DS); --#endif - - pos = &fp->f_pos; - kernel_read(fp, file_data, 1, pos); - - filp_close(fp, NULL); --#ifdef setfs -- set_fs(fs); --#endif - - file_data[1] = 0; - if (kstrtoull(file_data, 10, &tmp)) { -@@ -268,6 +258,7 @@ static int sprdwl_nl_get_info_handler(struct sk_buff *skb_2, - } - - static struct nla_policy sprdwl_genl_policy[SPRDWL_NL_ATTR_MAX + 1] = { -+ [SPRDWL_NL_ATTR_IFINDEX] = { .type = NLA_U32, }, - [SPRDWL_NL_ATTR_AP2CP] = {.type = NLA_BINARY, .len = 1024}, - [SPRDWL_NL_ATTR_CP2AP] = {.type = NLA_BINARY, .len = 1024} - }; -@@ -275,16 +266,10 @@ static struct nla_policy sprdwl_genl_policy[SPRDWL_NL_ATTR_MAX + 1] = { - static struct genl_ops sprdwl_nl_ops[] = { - { - .cmd = SPRDWL_NL_CMD_NPI, --#if KERNEL_VERSION(5, 2, 0) > LINUX_VERSION_CODE -- .policy = sprdwl_genl_policy, --#endif - .doit = sprdwl_nl_npi_handler, - }, - { - .cmd = SPRDWL_NL_CMD_GET_INFO, --#if KERNEL_VERSION(5, 2, 0) > LINUX_VERSION_CODE -- .policy = sprdwl_genl_policy, --#endif - .doit = sprdwl_nl_get_info_handler, - } - }; -@@ -295,6 +280,7 @@ static struct genl_family sprdwl_nl_genl_family = { - .name = "SPRDWL_NL", - .version = 1, - .maxattr = SPRDWL_NL_ATTR_MAX, -+ .policy = sprdwl_genl_policy, - .pre_doit = sprdwl_npi_pre_doit, - .post_doit = sprdwl_npi_post_doit, - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/qos.c b/drivers/net/wireless/uwe5622/unisocwifi/qos.c -old mode 100644 -new mode 100755 -index d0e42a882cb..7abcc0a02ee ---- a/drivers/net/wireless/uwe5622/unisocwifi/qos.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/qos.c -@@ -552,15 +552,9 @@ void wmm_ac_init(struct sprdwl_priv *priv) - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) - timer_setup(&priv->wmmac.wmmac_edcaf_timer, update_wmmac_edcaftime_timeout, 0); -- timer_setup(&priv->wmmac.wmmac_vo_timer, update_wmmac_vo_timeout, 0); -- timer_setup(&priv->wmmac.wmmac_vi_timer, update_wmmac_vi_timeout, 0); - #else - setup_timer(&priv->wmmac.wmmac_edcaf_timer, update_wmmac_edcaftime_timeout, -- (unsigned long)priv); -- setup_timer(&priv->wmmac.wmmac_vo_timer, update_wmmac_vo_timeout, -- (unsigned long)priv); -- setup_timer(&priv->wmmac.wmmac_vi_timer, update_wmmac_vi_timeout, -- (unsigned long)priv); -+ (unsigned long)priv); - #endif - memset(&priv->wmmac.ac[0], 0, 4*sizeof(struct wmm_ac_params)); - } -@@ -576,12 +570,6 @@ void reset_wmmac_parameters(struct sprdwl_priv *priv) - if (timer_pending(&priv->wmmac.wmmac_edcaf_timer)) - del_timer_sync(&priv->wmmac.wmmac_edcaf_timer); - -- if (timer_pending(&priv->wmmac.wmmac_vo_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vo_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vi_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vi_timer); -- - memset(&priv->wmmac.ac[0], 0, 4*sizeof(struct wmm_ac_params)); - } - -@@ -697,14 +685,6 @@ void update_admitted_time(struct sprdwl_priv *priv, u8 tsid, u16 medium_time, bo - g_wmmac_admittedtime[ac] += (medium_time<<5); - mod_timer(&priv->wmmac.wmmac_edcaf_timer, - jiffies + WMMAC_EDCA_TIMEOUT_MS * HZ / 1000); -- -- /*replace the usedtime logic method with timer counter, just for simplify for the WFA certification*/ -- if (ac == AC_VO) -- mod_timer(&priv->wmmac.wmmac_vo_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[ac] * WMMAC_TIME_RATIO)); -- else if (ac == AC_VI) -- mod_timer(&priv->wmmac.wmmac_vi_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[ac] * WMMAC_TIME_RATIO)); - } else { - if (g_wmmac_admittedtime[ac] > (medium_time<<5)) - g_wmmac_admittedtime[ac] -= (medium_time<<5); -@@ -712,12 +692,6 @@ void update_admitted_time(struct sprdwl_priv *priv, u8 tsid, u16 medium_time, bo - g_wmmac_admittedtime[ac] = 0; - if (timer_pending(&priv->wmmac.wmmac_edcaf_timer)) - del_timer_sync(&priv->wmmac.wmmac_edcaf_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vo_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vo_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vi_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vi_timer); - } - } - -@@ -738,38 +712,13 @@ void update_wmmac_edcaftime_timeout(unsigned long data) - if (g_wmmac_admittedtime[AC_VO] > 0) { - g_wmmac_usedtime[AC_VO] = 0; - g_wmmac_available[AC_VO] = true; -- mod_timer(&priv->wmmac.wmmac_vo_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[AC_VO] * WMMAC_TIME_RATIO)); - } - if (g_wmmac_admittedtime[AC_VI] > 0) { - g_wmmac_usedtime[AC_VI] = 0; - g_wmmac_available[AC_VI] = true; -- mod_timer(&priv->wmmac.wmmac_vi_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[AC_VI] * WMMAC_TIME_RATIO)); - } - } - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) --void update_wmmac_vo_timeout(struct timer_list *t) --#else --void update_wmmac_vo_timeout(unsigned long data) --#endif --{ -- g_wmmac_usedtime[AC_VO] = g_wmmac_admittedtime[AC_VO]; -- g_wmmac_available[AC_VO] = false; --} -- --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) --void update_wmmac_vi_timeout(struct timer_list *t) --#else --void update_wmmac_vi_timeout(unsigned long data) --#endif --{ -- g_wmmac_usedtime[AC_VI] = g_wmmac_admittedtime[AC_VI]; -- g_wmmac_available[AC_VI] = false; -- --} -- - /*change priority according to the g_wmmac_available value */ - unsigned int change_priority_if(struct sprdwl_priv *priv, unsigned char *tid, unsigned char *tos, u16 len) - { -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/qos.h b/drivers/net/wireless/uwe5622/unisocwifi/qos.h -old mode 100644 -new mode 100755 -index 3d69d1c5730..06eeb5c8161 ---- a/drivers/net/wireless/uwe5622/unisocwifi/qos.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/qos.h -@@ -237,13 +237,11 @@ u16 get_wmmac_admitted_time(u8 tsid); - void reset_wmmac_parameters(struct sprdwl_priv *priv); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) - void update_wmmac_edcaftime_timeout(struct timer_list *t); --void update_wmmac_vo_timeout(struct timer_list *t); --void update_wmmac_vi_timeout(struct timer_list *t); - #else - void update_wmmac_edcaftime_timeout(unsigned long data); -+#endif - void update_wmmac_vo_timeout(unsigned long data); - void update_wmmac_vi_timeout(unsigned long data); --#endif - unsigned int change_priority_if(struct sprdwl_priv *priv, unsigned char *tid, unsigned char *tos, u16 len); - const u8 *get_wmm_ie(u8 *res, u16 ie_len, u8 ie, uint oui, uint oui_type); - #endif -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c b/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -old mode 100644 -new mode 100755 -index ca307f12ac9..a2f6cc394ce ---- a/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -@@ -181,9 +181,9 @@ static struct nvm_name_table g_config_table[] = { - CF_TAB("Chain0_149", tx_scale.chain0[34][0], 1), - CF_TAB("Chain1_149", tx_scale.chain1[34][0], 1), - CF_TAB("Chain0_153", tx_scale.chain0[35][0], 1), -- CF_TAB("Chain1_153", tx_scale.chain1[35][0], 1), -+ CF_TAB("Chain1_153", tx_scale.chain0[35][0], 1), - CF_TAB("Chain0_157", tx_scale.chain0[36][0], 1), -- CF_TAB("Chain1_157", tx_scale.chain1[36][0], 1), -+ CF_TAB("Chain1_157", tx_scale.chain0[36][0], 1), - CF_TAB("Chain0_161", tx_scale.chain0[37][0], 1), - CF_TAB("Chain1_161", tx_scale.chain1[37][0], 1), - CF_TAB("Chain0_165", tx_scale.chain0[38][0], 1), -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c -new file mode 100644 -index 00000000000..a3abdd850ff ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c -@@ -0,0 +1,825 @@ -+/* -+ * Copyright (C) 2012 ROCKCHIP, Inc. -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+/* Rock-chips rfkill driver for bluetooth -+ * -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#ifdef CONFIG_OF -+#include -+#include -+#include -+#endif -+ -+#if 0 -+#define DBG(x...) pr_info("[BT_RFKILL]: " x) -+#else -+#define DBG(x...) -+#endif -+ -+#define LOG(x...) pr_info("[BT_RFKILL]: " x) -+ -+#define BT_WAKEUP_TIMEOUT 10000 -+#define BT_IRQ_WAKELOCK_TIMEOUT (10 * 1000) -+ -+#define BT_BLOCKED true -+#define BT_UNBLOCK false -+#define BT_SLEEP true -+#define BT_WAKEUP false -+ -+enum { -+ IOMUX_FNORMAL = 0, -+ IOMUX_FGPIO, -+ IOMUX_FMUX, -+}; -+ -+struct rfkill_rk_data { -+ struct rfkill_rk_platform_data *pdata; -+ struct platform_device *pdev; -+ struct rfkill *rfkill_dev; -+ struct wake_lock bt_irq_wl; -+ struct delayed_work bt_sleep_delay_work; -+ int irq_req; -+}; -+ -+static struct rfkill_rk_data *g_rfkill = NULL; -+ -+static const char bt_name[] = -+#if defined(CONFIG_BCM4330) -+#if defined(CONFIG_BT_MODULE_NH660) -+ "nh660" -+#else -+ "bcm4330" -+#endif -+#elif defined(CONFIG_RK903) -+#if defined(CONFIG_RKWIFI_26M) -+ "rk903_26M" -+#else -+ "rk903" -+#endif -+#elif defined(CONFIG_BCM4329) -+ "bcm4329" -+#elif defined(CONFIG_MV8787) -+ "mv8787" -+#elif defined(CONFIG_AP6210) -+#if defined(CONFIG_RKWIFI_26M) -+ "ap6210" -+#else -+ "ap6210_24M" -+#endif -+#elif defined(CONFIG_AP6330) -+ "ap6330" -+#elif defined(CONFIG_AP6476) -+ "ap6476" -+#elif defined(CONFIG_AP6493) -+ "ap6493" -+#elif defined(CONFIG_AP6441) -+ "ap6441" -+#elif defined(CONFIG_AP6335) -+ "ap6335" -+#elif defined(CONFIG_GB86302I) -+ "gb86302i" -+#else -+ "bt_default" -+#endif -+ ; -+ -+static irqreturn_t rfkill_rk_wake_host_irq(int irq, void *dev) -+{ -+ struct rfkill_rk_data *rfkill = dev; -+ -+ LOG("BT_WAKE_HOST IRQ fired\n"); -+ -+ DBG("BT IRQ wakeup, request %dms wakelock\n", BT_IRQ_WAKELOCK_TIMEOUT); -+ -+ wake_lock_timeout(&rfkill->bt_irq_wl, -+ msecs_to_jiffies(BT_IRQ_WAKELOCK_TIMEOUT)); -+ -+ return IRQ_HANDLED; -+} -+ -+static int rfkill_rk_setup_gpio(struct platform_device *pdev, -+ struct rfkill_rk_gpio *gpio, const char *prefix, -+ const char *name) -+{ -+ if (gpio_is_valid(gpio->io)) { -+ int ret = 0; -+ -+ sprintf(gpio->name, "%s_%s", prefix, name); -+ ret = devm_gpio_request(&pdev->dev, gpio->io, gpio->name); -+ if (ret) { -+ LOG("Failed to get %s gpio.\n", gpio->name); -+ return -1; -+ } -+ } -+ -+ return 0; -+} -+ -+static int rfkill_rk_setup_wake_irq(struct rfkill_rk_data *rfkill, int flag) -+{ -+ int ret = 0; -+ struct rfkill_rk_irq *irq = &rfkill->pdata->wake_host_irq; -+ -+ if (!flag) { -+ rfkill->irq_req = 0; -+ ret = rfkill_rk_setup_gpio(rfkill->pdev, &irq->gpio, -+ rfkill->pdata->name, "wake_host"); -+ if (ret) -+ goto fail1; -+ } -+ if (gpio_is_valid(irq->gpio.io)) { -+ if (rfkill->irq_req) { -+ rfkill->irq_req = 0; -+ free_irq(irq->irq, rfkill); -+ } -+ LOG("Request irq for bt wakeup host\n"); -+ irq->irq = gpio_to_irq(irq->gpio.io); -+ sprintf(irq->name, "%s_irq", irq->gpio.name); -+ ret = request_irq(irq->irq, rfkill_rk_wake_host_irq, -+ (irq->gpio.enable == GPIO_ACTIVE_LOW) ? -+ IRQF_TRIGGER_FALLING : -+ IRQF_TRIGGER_RISING, -+ irq->name, rfkill); -+ if (ret) -+ goto fail2; -+ rfkill->irq_req = 1; -+ LOG("** disable irq\n"); -+ disable_irq(irq->irq); -+ ret = enable_irq_wake(irq->irq); -+ if (ret) -+ goto fail3; -+ } -+ -+ return ret; -+ -+fail3: -+ free_irq(irq->irq, rfkill); -+fail2: -+ gpio_free(irq->gpio.io); -+fail1: -+ return ret; -+} -+ -+static inline void rfkill_rk_sleep_bt_internal(struct rfkill_rk_data *rfkill, -+ bool sleep) -+{ -+ struct rfkill_rk_gpio *wake = &rfkill->pdata->wake_gpio; -+ -+ DBG("*** bt sleep: %d ***\n", sleep); -+#ifndef CONFIG_BK3515A_COMBO -+ gpio_direction_output(wake->io, sleep ? !wake->enable : wake->enable); -+#else -+ if (!sleep) { -+ DBG("HOST_UART0_TX pull down 10us\n"); -+ if (rfkill_rk_setup_gpio(rfkill->pdev, wake, -+ rfkill->pdata->name, "wake") != 0) { -+ return; -+ } -+ -+ gpio_direction_output(wake->io, wake->enable); -+ usleep_range(10, 20); -+ gpio_direction_output(wake->io, !wake->enable); -+ -+ gpio_free(wake->io); -+ } -+#endif -+} -+ -+static void rfkill_rk_delay_sleep_bt(struct work_struct *work) -+{ -+ struct rfkill_rk_data *rfkill = NULL; -+ -+ DBG("Enter %s\n", __func__); -+ -+ rfkill = container_of(work, struct rfkill_rk_data, -+ bt_sleep_delay_work.work); -+ -+ rfkill_rk_sleep_bt_internal(rfkill, BT_SLEEP); -+} -+ -+void rfkill_rk_sleep_bt(bool sleep) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_gpio *wake; -+ bool ret; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) { -+ LOG("*** RFKILL is empty???\n"); -+ return; -+ } -+ -+ wake = &rfkill->pdata->wake_gpio; -+ if (!gpio_is_valid(wake->io)) { -+ DBG("*** Not support bt wakeup and sleep\n"); -+ return; -+ } -+ -+ ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); -+ -+ rfkill_rk_sleep_bt_internal(rfkill, sleep); -+ -+#ifdef CONFIG_BT_AUTOSLEEP -+ if (sleep == BT_WAKEUP) { -+ schedule_delayed_work(&rfkill->bt_sleep_delay_work, -+ msecs_to_jiffies(BT_WAKEUP_TIMEOUT)); -+ } -+#endif -+} -+EXPORT_SYMBOL(rfkill_rk_sleep_bt); -+ -+static int bt_power_state = 0; -+int rfkill_get_bt_power_state(int *power, bool *toggle) -+{ -+ struct rfkill_rk_data *mrfkill = g_rfkill; -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-bt driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ *toggle = mrfkill->pdata->power_toggle; -+ *power = bt_power_state; -+ -+ return 0; -+} -+ -+static int rfkill_rk_set_power(void *data, bool blocked) -+{ -+ struct rfkill_rk_data *rfkill = data; -+ struct rfkill_rk_gpio *wake_host = &rfkill->pdata->wake_host_irq.gpio; -+ struct rfkill_rk_gpio *poweron = &rfkill->pdata->poweron_gpio; -+ struct rfkill_rk_gpio *reset = &rfkill->pdata->reset_gpio; -+ struct rfkill_rk_gpio *rts = &rfkill->pdata->rts_gpio; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ int wifi_power = 0; -+ bool toggle = false; -+ -+ DBG("Enter %s\n", __func__); -+ -+ DBG("Set blocked:%d\n", blocked); -+ -+ toggle = rfkill->pdata->power_toggle; -+ -+ if (toggle) { -+ if (rfkill_get_wifi_power_state(&wifi_power)) { -+ LOG("%s: cannot get wifi power state!\n", __func__); -+ return -1; -+ } -+ } -+ -+ DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); -+ -+ if (!blocked) { -+ if (toggle) { -+ rfkill_set_wifi_bt_power(1); -+ msleep(100); -+ } -+ -+ rfkill_rk_sleep_bt(BT_WAKEUP); // ensure bt is wakeup -+ -+ if (gpio_is_valid(wake_host->io)) { -+ LOG("%s: set bt wake_host high!\n", __func__); -+ gpio_direction_output(wake_host->io, 1); -+ msleep(20); -+ } -+ -+ if (gpio_is_valid(poweron->io)) { -+ if (gpio_get_value(poweron->io) == !poweron->enable) { -+ gpio_direction_output(poweron->io, -+ !poweron->enable); -+ msleep(20); -+ gpio_direction_output(poweron->io, -+ poweron->enable); -+ msleep(20); -+ if (gpio_is_valid(wake_host->io)) -+ gpio_direction_input(wake_host->io); -+ } -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ if (gpio_get_value(reset->io) == !reset->enable) { -+ gpio_direction_output(reset->io, -+ !reset->enable); -+ msleep(20); -+ gpio_direction_output(reset->io, reset->enable); -+ } -+ } -+ -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ pinctrl_select_state(pinctrl, rts->gpio_state); -+ LOG("ENABLE UART_RTS\n"); -+ gpio_direction_output(rts->io, rts->enable); -+ msleep(100); -+ LOG("DISABLE UART_RTS\n"); -+ gpio_direction_output(rts->io, !rts->enable); -+ pinctrl_select_state(pinctrl, rts->default_state); -+ } -+ -+ bt_power_state = 1; -+ LOG("bt turn on power\n"); -+ rfkill_rk_setup_wake_irq(rfkill, 1); -+ } else { -+ if (gpio_is_valid(poweron->io)) { -+ if (gpio_get_value(poweron->io) == poweron->enable) { -+ gpio_direction_output(poweron->io, -+ !poweron->enable); -+ msleep(20); -+ } -+ } -+ -+ bt_power_state = 0; -+ LOG("bt shut off power\n"); -+ if (gpio_is_valid(reset->io)) { -+ if (gpio_get_value(reset->io) == reset->enable) { -+ gpio_direction_output(reset->io, -+ !reset->enable); -+ msleep(20); -+ } -+ } -+ if (toggle) { -+ if (!wifi_power) { -+ LOG("%s: bt will set vbat to low\n", __func__); -+ rfkill_set_wifi_bt_power(0); -+ } else { -+ LOG("%s: bt shouldn't control the vbat\n", __func__); -+ } -+ } -+ } -+ -+ return 0; -+} -+ -+static int rfkill_rk_pm_prepare(struct device *dev) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_gpio *rts; -+ struct rfkill_rk_irq *wake_host_irq; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) -+ return 0; -+ -+ rts = &rfkill->pdata->rts_gpio; -+ wake_host_irq = &rfkill->pdata->wake_host_irq; -+ -+ //To prevent uart to receive bt data when suspended -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ DBG("Disable UART_RTS\n"); -+ pinctrl_select_state(pinctrl, rts->gpio_state); -+ gpio_direction_output(rts->io, !rts->enable); -+ } -+ -+#ifdef CONFIG_BT_AUTOSLEEP -+ rfkill_rk_sleep_bt(BT_SLEEP); -+#endif -+ -+ // enable bt wakeup host -+ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { -+ DBG("enable irq for bt wakeup host\n"); -+ enable_irq(wake_host_irq->irq); -+ } -+ -+#ifdef CONFIG_RFKILL_RESET -+ rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); -+ rfkill_rk_set_power(rfkill, BT_BLOCKED); -+#endif -+ -+ return 0; -+} -+ -+static void rfkill_rk_pm_complete(struct device *dev) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_irq *wake_host_irq; -+ struct rfkill_rk_gpio *rts; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) -+ return; -+ -+ wake_host_irq = &rfkill->pdata->wake_host_irq; -+ rts = &rfkill->pdata->rts_gpio; -+ -+ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { -+ LOG("** disable irq\n"); -+ disable_irq(wake_host_irq->irq); -+ } -+ -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ DBG("Enable UART_RTS\n"); -+ gpio_direction_output(rts->io, rts->enable); -+ pinctrl_select_state(pinctrl, rts->default_state); -+ } -+} -+ -+static const struct rfkill_ops rfkill_rk_ops = { -+ .set_block = rfkill_rk_set_power, -+}; -+ -+#define PROC_DIR "bluetooth/sleep" -+ -+static struct proc_dir_entry *bluetooth_dir, *sleep_dir; -+ -+static ssize_t bluesleep_read_proc_lpm(struct file *file, char __user *buffer, -+ size_t count, loff_t *data) -+{ -+ return sprintf(buffer, "unsupported to read\n"); -+} -+ -+static ssize_t bluesleep_write_proc_lpm(struct file *file, -+ const char __user *buffer, size_t count, -+ loff_t *data) -+{ -+ return count; -+} -+ -+static ssize_t bluesleep_read_proc_btwrite(struct file *file, -+ char __user *buffer, size_t count, -+ loff_t *data) -+{ -+ return sprintf(buffer, "unsupported to read\n"); -+} -+ -+static ssize_t bluesleep_write_proc_btwrite(struct file *file, -+ const char __user *buffer, -+ size_t count, loff_t *data) -+{ -+ char b; -+ -+ if (count < 1) -+ return -EINVAL; -+ -+ if (copy_from_user(&b, buffer, 1)) -+ return -EFAULT; -+ -+ DBG("btwrite %c\n", b); -+ /* HCI_DEV_WRITE */ -+ if (b != '0') -+ rfkill_rk_sleep_bt(BT_WAKEUP); -+ else -+ rfkill_rk_sleep_bt(BT_SLEEP); -+ -+ return count; -+} -+ -+#ifdef CONFIG_OF -+static int bluetooth_platdata_parse_dt(struct device *dev, -+ struct rfkill_rk_platform_data *data) -+{ -+ struct device_node *node = dev->of_node; -+ int gpio; -+ enum of_gpio_flags flags; -+ -+ if (!node) -+ return -ENODEV; -+ -+ memset(data, 0, sizeof(*data)); -+ -+ if (of_find_property(node, "wifi-bt-power-toggle", NULL)) { -+ data->power_toggle = true; -+ LOG("%s: get property wifi-bt-power-toggle.\n", __func__); -+ } else { -+ data->power_toggle = false; -+ } -+ -+ gpio = of_get_named_gpio_flags(node, "uart_rts_gpios", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->rts_gpio.io = gpio; -+ data->rts_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: uart_rts_gpios = %d.\n", __func__, gpio); -+ data->pinctrl = devm_pinctrl_get(dev); -+ if (!IS_ERR(data->pinctrl)) { -+ data->rts_gpio.default_state = -+ pinctrl_lookup_state(data->pinctrl, "default"); -+ data->rts_gpio.gpio_state = -+ pinctrl_lookup_state(data->pinctrl, "rts_gpio"); -+ } else { -+ data->pinctrl = NULL; -+ LOG("%s: dts does't define the uart rts iomux.\n", -+ __func__); -+ return -EINVAL; -+ } -+ } else { -+ data->pinctrl = NULL; -+ data->rts_gpio.io = -EINVAL; -+ LOG("%s: uart_rts_gpios is no-in-use.\n", __func__); -+ } -+ -+ gpio = of_get_named_gpio_flags(node, "BT,power_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->poweron_gpio.io = gpio; -+ data->poweron_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,power_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->poweron_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,reset_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->reset_gpio.io = gpio; -+ data->reset_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,reset_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->reset_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,wake_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wake_gpio.io = gpio; -+ data->wake_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,wake_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->wake_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,wake_host_irq", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wake_host_irq.gpio.io = gpio; -+ data->wake_host_irq.gpio.enable = flags; -+ LOG("%s: get property: BT,wake_host_irq = %d.\n", __func__, -+ gpio); -+ } else { -+ data->wake_host_irq.gpio.io = -1; -+ } -+ -+ data->ext_clk = devm_clk_get(dev, "ext_clock"); -+ if (IS_ERR(data->ext_clk)) { -+ LOG("%s: clk_get failed!!!.\n", __func__); -+ } else { -+ clk_prepare_enable(data->ext_clk); -+ } -+ return 0; -+} -+#endif //CONFIG_OF -+ -+static const struct proc_ops bluesleep_lpm = { -+ .proc_read = bluesleep_read_proc_lpm, -+ .proc_write = bluesleep_write_proc_lpm, -+}; -+ -+static const struct proc_ops bluesleep_btwrite = { -+ .proc_read = bluesleep_read_proc_btwrite, -+ .proc_write = bluesleep_write_proc_btwrite, -+}; -+ -+static int rfkill_rk_probe(struct platform_device *pdev) -+{ -+ struct rfkill_rk_data *rfkill; -+ struct rfkill_rk_platform_data *pdata = pdev->dev.platform_data; -+ int ret = 0; -+ struct proc_dir_entry *ent; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!pdata) { -+#ifdef CONFIG_OF -+ pdata = devm_kzalloc(&pdev->dev, -+ sizeof(struct rfkill_rk_platform_data), -+ GFP_KERNEL); -+ if (!pdata) -+ return -ENOMEM; -+ -+ ret = bluetooth_platdata_parse_dt(&pdev->dev, pdata); -+ if (ret < 0) { -+#endif -+ LOG("%s: No platform data specified\n", __func__); -+ return ret; -+#ifdef CONFIG_OF -+ } -+#endif -+ } -+ -+ pdata->name = (char *)bt_name; -+ pdata->type = RFKILL_TYPE_BLUETOOTH; -+ -+ rfkill = devm_kzalloc(&pdev->dev, sizeof(*rfkill), GFP_KERNEL); -+ if (!rfkill) -+ return -ENOMEM; -+ -+ rfkill->pdata = pdata; -+ rfkill->pdev = pdev; -+ g_rfkill = rfkill; -+ -+ bluetooth_dir = proc_mkdir("bluetooth", NULL); -+ if (!bluetooth_dir) { -+ LOG("Unable to create /proc/bluetooth directory"); -+ return -ENOMEM; -+ } -+ -+ sleep_dir = proc_mkdir("sleep", bluetooth_dir); -+ if (!sleep_dir) { -+ LOG("Unable to create /proc/%s directory", PROC_DIR); -+ return -ENOMEM; -+ } -+ -+ /* read/write proc entries */ -+ ent = proc_create("lpm", 0, sleep_dir, &bluesleep_lpm); -+ if (!ent) { -+ LOG("Unable to create /proc/%s/lpm entry", PROC_DIR); -+ ret = -ENOMEM; -+ goto fail_alloc; -+ } -+ -+ /* read/write proc entries */ -+ ent = proc_create("btwrite", 0, sleep_dir, &bluesleep_btwrite); -+ if (!ent) { -+ LOG("Unable to create /proc/%s/btwrite entry", PROC_DIR); -+ ret = -ENOMEM; -+ goto fail_alloc; -+ } -+ -+ DBG("init gpio\n"); -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->poweron_gpio, pdata->name, -+ "poweron"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->reset_gpio, pdata->name, -+ "reset"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->wake_gpio, pdata->name, -+ "wake"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->rts_gpio, rfkill->pdata->name, -+ "rts"); -+ if (ret) -+ goto fail_gpio; -+ -+ wake_lock_init(&rfkill->bt_irq_wl, WAKE_LOCK_SUSPEND, -+ "rfkill_rk_irq_wl"); -+ -+ ret = rfkill_rk_setup_wake_irq(rfkill, 0); -+ if (ret) -+ goto fail_setup_wake_irq; -+ -+ DBG("setup rfkill\n"); -+ rfkill->rfkill_dev = rfkill_alloc(pdata->name, &pdev->dev, pdata->type, -+ &rfkill_rk_ops, rfkill); -+ if (!rfkill->rfkill_dev) -+ goto fail_alloc; -+ -+ rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); -+ ret = rfkill_register(rfkill->rfkill_dev); -+ if (ret < 0) -+ goto fail_rfkill; -+ -+ INIT_DELAYED_WORK(&rfkill->bt_sleep_delay_work, -+ rfkill_rk_delay_sleep_bt); -+ -+ //rfkill_rk_set_power(rfkill, BT_BLOCKED); -+ // bt turn off power -+ if (gpio_is_valid(pdata->poweron_gpio.io)) { -+ gpio_direction_output(pdata->poweron_gpio.io, -+ !pdata->poweron_gpio.enable); -+ } -+ if (gpio_is_valid(pdata->reset_gpio.io)) { -+ gpio_direction_output(pdata->reset_gpio.io, -+ !pdata->reset_gpio.enable); -+ } -+ -+ platform_set_drvdata(pdev, rfkill); -+ -+ LOG("%s device registered.\n", pdata->name); -+ -+ return 0; -+ -+fail_rfkill: -+ rfkill_destroy(rfkill->rfkill_dev); -+fail_alloc: -+ -+ remove_proc_entry("btwrite", sleep_dir); -+ remove_proc_entry("lpm", sleep_dir); -+fail_setup_wake_irq: -+ wake_lock_destroy(&rfkill->bt_irq_wl); -+fail_gpio: -+ -+ g_rfkill = NULL; -+ return ret; -+} -+ -+static int rfkill_rk_remove(struct platform_device *pdev) -+{ -+ struct rfkill_rk_data *rfkill = platform_get_drvdata(pdev); -+ -+ LOG("Enter %s\n", __func__); -+ -+ rfkill_unregister(rfkill->rfkill_dev); -+ rfkill_destroy(rfkill->rfkill_dev); -+ -+ cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); -+ -+ // free gpio -+ if (gpio_is_valid(rfkill->pdata->rts_gpio.io)) -+ gpio_free(rfkill->pdata->rts_gpio.io); -+ -+ if (gpio_is_valid(rfkill->pdata->wake_host_irq.gpio.io)) { -+ free_irq(rfkill->pdata->wake_host_irq.irq, rfkill); -+#ifndef CONFIG_BK3515A_COMBO -+ gpio_free(rfkill->pdata->wake_host_irq.gpio.io); -+#endif -+ } -+ -+#ifndef CONFIG_BK3515A_COMBO -+ if (gpio_is_valid(rfkill->pdata->wake_gpio.io)) -+ gpio_free(rfkill->pdata->wake_gpio.io); -+#endif -+ -+ if (gpio_is_valid(rfkill->pdata->reset_gpio.io)) -+ gpio_free(rfkill->pdata->reset_gpio.io); -+ -+ if (gpio_is_valid(rfkill->pdata->poweron_gpio.io)) -+ gpio_free(rfkill->pdata->poweron_gpio.io); -+ clk_disable_unprepare(rfkill->pdata->ext_clk); -+ wake_lock_destroy(&rfkill->bt_irq_wl); -+ g_rfkill = NULL; -+ -+ return 0; -+} -+ -+static const struct dev_pm_ops rfkill_rk_pm_ops = { -+ .prepare = rfkill_rk_pm_prepare, -+ .complete = rfkill_rk_pm_complete, -+}; -+ -+#ifdef CONFIG_OF -+static struct of_device_id bt_platdata_of_match[] = { -+ { .compatible = "bluetooth-platdata" }, -+ {} -+}; -+MODULE_DEVICE_TABLE(of, bt_platdata_of_match); -+#endif //CONFIG_OF -+ -+static struct platform_driver rfkill_rk_driver = { -+ .probe = rfkill_rk_probe, -+ .remove = rfkill_rk_remove, -+ .driver = { -+ .name = "rfkill_bt", -+ .owner = THIS_MODULE, -+ .pm = &rfkill_rk_pm_ops, -+ .of_match_table = of_match_ptr(bt_platdata_of_match), -+ }, -+}; -+ -+static int __init rfkill_rk_init(void) -+{ -+ int err; -+ -+ LOG("Enter %s\n", __func__); -+ err = rfkill_wlan_init(); -+ if (err) -+ return err; -+ return platform_driver_register(&rfkill_rk_driver); -+} -+ -+static void __exit rfkill_rk_exit(void) -+{ -+ LOG("Enter %s\n", __func__); -+ platform_driver_unregister(&rfkill_rk_driver); -+ rfkill_wlan_exit(); -+} -+ -+module_init(rfkill_rk_init); -+module_exit(rfkill_rk_exit); -+ -+MODULE_DESCRIPTION("rock-chips rfkill for Bluetooth v0.3"); -+MODULE_AUTHOR("cmy@rock-chips.com, gwl@rock-chips.com"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c -new file mode 100644 -index 00000000000..a0933abb0bf ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c -@@ -0,0 +1,971 @@ -+/* -+ * Copyright (C) 2012 ROCKCHIP, Inc. -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+/* Rock-chips rfkill driver for wifi -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+//#include -+#include -+#include -+#include -+#ifdef CONFIG_OF -+#include -+#include -+#include -+#endif -+#include -+#include -+ -+#include "../../../../../drivers/mmc/core/pwrseq.h" -+ -+#if 0 -+#define DBG(x...) pr_info("[WLAN_RFKILL]: " x) -+#else -+#define DBG(x...) -+#endif -+ -+#define LOG(x...) pr_info("[WLAN_RFKILL]: " x) -+ -+struct rfkill_wlan_data { -+ struct rksdmmc_gpio_wifi_moudle *pdata; -+ struct wake_lock wlan_irq_wl; -+}; -+ -+static struct rfkill_wlan_data *g_rfkill = NULL; -+static int power_set_time = 0; -+static int wifi_bt_vbat_state; -+static int wifi_power_state; -+ -+static const char wlan_name[] = "rkwifi"; -+ -+static char wifi_chip_type_string[64]; -+/*********************************************************** -+ * -+ * Broadcom Wifi Static Memory -+ * -+ **********************************************************/ -+#ifdef CONFIG_RKWIFI -+#define BCM_STATIC_MEMORY_SUPPORT 0 -+#else -+#define BCM_STATIC_MEMORY_SUPPORT 0 -+#endif -+//=========================== -+#if BCM_STATIC_MEMORY_SUPPORT -+#define PREALLOC_WLAN_SEC_NUM 4 -+#define PREALLOC_WLAN_BUF_NUM 160 -+#define PREALLOC_WLAN_SECTION_HEADER 0 -+#define WLAN_SKB_BUF_NUM 16 -+ -+#define WLAN_SECTION_SIZE_0 (12 * 1024) -+#define WLAN_SECTION_SIZE_1 (12 * 1024) -+#define WLAN_SECTION_SIZE_2 (32 * 1024) -+#define WLAN_SECTION_SIZE_3 (136 * 1024) -+#define WLAN_SECTION_SIZE_4 (4 * 1024) -+#define WLAN_SECTION_SIZE_5 (64 * 1024) -+#define WLAN_SECTION_SIZE_6 (4 * 1024) -+#define WLAN_SECTION_SIZE_7 (4 * 1024) -+ -+static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM + 1]; -+ -+struct wifi_mem_prealloc { -+ void *mem_ptr; -+ unsigned long size; -+}; -+ -+static struct wifi_mem_prealloc wifi_mem_array[8] = { -+ { NULL, (WLAN_SECTION_SIZE_0) }, { NULL, (WLAN_SECTION_SIZE_1) }, -+ { NULL, (WLAN_SECTION_SIZE_2) }, { NULL, (WLAN_SECTION_SIZE_3) }, -+ { NULL, (WLAN_SECTION_SIZE_4) }, { NULL, (WLAN_SECTION_SIZE_5) }, -+ { NULL, (WLAN_SECTION_SIZE_6) }, { NULL, (WLAN_SECTION_SIZE_7) } -+}; -+ -+static int rockchip_init_wifi_mem(void) -+{ -+ int i; -+ int j; -+ -+ for (i = 0; i < WLAN_SKB_BUF_NUM; i++) { -+ wlan_static_skb[i] = -+ dev_alloc_skb(((i < (WLAN_SKB_BUF_NUM / 2)) ? -+ (PAGE_SIZE * 1) : -+ (PAGE_SIZE * 2))); -+ -+ if (!wlan_static_skb[i]) -+ goto err_skb_alloc; -+ } -+ -+ wlan_static_skb[i] = dev_alloc_skb((PAGE_SIZE * 4)); -+ if (!wlan_static_skb[i]) -+ goto err_skb_alloc; -+ -+ for (i = 0; i <= 7; i++) { -+ wifi_mem_array[i].mem_ptr = -+ kmalloc(wifi_mem_array[i].size, GFP_KERNEL); -+ -+ if (!wifi_mem_array[i].mem_ptr) -+ goto err_mem_alloc; -+ } -+ return 0; -+ -+err_mem_alloc: -+ pr_err("Failed to mem_alloc for WLAN\n"); -+ for (j = 0; j < i; j++) -+ kfree(wifi_mem_array[j].mem_ptr); -+ i = WLAN_SKB_BUF_NUM; -+err_skb_alloc: -+ pr_err("Failed to skb_alloc for WLAN\n"); -+ for (j = 0; j < i; j++) -+ dev_kfree_skb(wlan_static_skb[j]); -+ dev_kfree_skb(wlan_static_skb[j]); -+ -+ return -ENOMEM; -+} -+ -+void *rockchip_mem_prealloc(int section, unsigned long size) -+{ -+ if (section == PREALLOC_WLAN_SEC_NUM) -+ return wlan_static_skb; -+ -+ if (section < 0 || section > 7) -+ return NULL; -+ -+ if (wifi_mem_array[section].size < size) -+ return NULL; -+ -+ return wifi_mem_array[section].mem_ptr; -+} -+#else -+void *rockchip_mem_prealloc(int section, unsigned long size) -+{ -+ return NULL; -+} -+#endif -+EXPORT_SYMBOL(rockchip_mem_prealloc); -+ -+int rfkill_set_wifi_bt_power(int on) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *vbat; -+ -+ LOG("%s: %d\n", __func__, on); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ vbat = &mrfkill->pdata->vbat_n; -+ if (on) { -+ if (gpio_is_valid(vbat->io)) -+ gpio_direction_output(vbat->io, vbat->enable); -+ } else { -+ if (gpio_is_valid(vbat->io)) -+ gpio_direction_output(vbat->io, !(vbat->enable)); -+ } -+ wifi_bt_vbat_state = on; -+ return 0; -+} -+ -+/************************************************************************** -+ * -+ * get wifi power state Func -+ * -+ *************************************************************************/ -+int rfkill_get_wifi_power_state(int *power) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ *power = wifi_power_state; -+ -+ return 0; -+} -+ -+/************************************************************************** -+ * -+ * Wifi Power Control Func -+ * 0 -> power off -+ * 1 -> power on -+ * -+ *************************************************************************/ -+int rockchip_wifi_power(int on) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *poweron, *reset; -+ struct regulator *ldo = NULL; -+ int bt_power = 0; -+ bool toggle = false; -+ -+ LOG("%s: %d\n", __func__, on); -+ -+ if (!on && primary_sdio_host) -+ mmc_pwrseq_power_off(primary_sdio_host); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ if (mrfkill->pdata->wifi_power_remain && power_set_time) { -+ LOG("%s: wifi power is setted to be remain on.", __func__); -+ return 0; -+ } -+ power_set_time++; -+ -+ if (!rfkill_get_bt_power_state(&bt_power, &toggle)) { -+ LOG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); -+ } -+ -+ if (mrfkill->pdata->mregulator.power_ctrl_by_pmu) { -+ int ret = -1; -+ char *ldostr; -+ int level = mrfkill->pdata->mregulator.enable; -+ -+ ldostr = mrfkill->pdata->mregulator.pmu_regulator; -+ if (!ldostr) -+ return -1; -+ ldo = regulator_get(NULL, ldostr); -+ if (!ldo || IS_ERR(ldo)) { -+ LOG("\n\n\n%s get ldo error,please mod this\n\n\n", -+ __func__); -+ return -1; -+ } -+ if (on == level) { -+ regulator_set_voltage(ldo, 3000000, 3000000); -+ LOG("%s: %s enabled\n", __func__, ldostr); -+ ret = regulator_enable(ldo); -+ wifi_power_state = 1; -+ LOG("wifi turn on power.\n"); -+ } else { -+ LOG("%s: %s disabled\n", __func__, ldostr); -+ while (regulator_is_enabled(ldo) > 0) -+ ret = regulator_disable(ldo); -+ wifi_power_state = 0; -+ LOG("wifi shut off power.\n"); -+ } -+ regulator_put(ldo); -+ msleep(100); -+ } else { -+ poweron = &mrfkill->pdata->power_n; -+ reset = &mrfkill->pdata->reset_n; -+ -+ if (on) { -+ if (toggle) { -+ rfkill_set_wifi_bt_power(1); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(poweron->io)) { -+ gpio_direction_output(poweron->io, poweron->enable); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ gpio_direction_output(reset->io, reset->enable); -+ msleep(100); -+ } -+ -+ wifi_power_state = 1; -+ LOG("wifi turn on power [GPIO%d-%d]\n", poweron->io, poweron->enable); -+ } else { -+ if (gpio_is_valid(poweron->io)) { -+ printk("wifi power off\n"); -+ gpio_direction_output(poweron->io, !(poweron->enable)); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ gpio_direction_output(reset->io, !(reset->enable)); -+ } -+ -+ wifi_power_state = 0; -+ if (toggle) { -+ if (!bt_power) { -+ LOG("%s: wifi will set vbat to low\n", __func__); -+ rfkill_set_wifi_bt_power(0); -+ } else { -+ LOG("%s: wifi shouldn't control the vbat\n", __func__); -+ } -+ } -+ LOG("wifi shut off power [GPIO%d-%d]\n", poweron->io, !poweron->enable); -+ } -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_power); -+ -+/************************************************************************** -+ * -+ * Wifi Sdio Detect Func -+ * -+ *************************************************************************/ -+extern int mmc_host_rescan(struct mmc_host *host, int val, int irq_type); -+int rockchip_wifi_set_carddetect(int val) -+{ -+ return mmc_host_rescan(NULL, val, 1); -+} -+EXPORT_SYMBOL(rockchip_wifi_set_carddetect); -+ -+/************************************************************************** -+ * -+ * Wifi Get Interrupt irq Func -+ * -+ *************************************************************************/ -+int rockchip_wifi_get_oob_irq(void) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *wifi_int_irq; -+ -+ LOG("%s: Enter\n", __func__); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ wifi_int_irq = &mrfkill->pdata->wifi_int_b; -+ if (gpio_is_valid(wifi_int_irq->io)) { -+ return gpio_to_irq(wifi_int_irq->io); -+ //return wifi_int_irq->io; -+ } else { -+ LOG("%s: wifi OOB pin isn't defined.\n", __func__); -+ } -+ -+ return -1; -+} -+EXPORT_SYMBOL(rockchip_wifi_get_oob_irq); -+ -+int rockchip_wifi_get_oob_irq_flag(void) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *wifi_int_irq; -+ int gpio_flags = -1; -+ -+ if (mrfkill) { -+ wifi_int_irq = &mrfkill->pdata->wifi_int_b; -+ if (gpio_is_valid(wifi_int_irq->io)) -+ gpio_flags = wifi_int_irq->enable; -+ } -+ -+ return gpio_flags; -+} -+EXPORT_SYMBOL(rockchip_wifi_get_oob_irq_flag); -+ -+/************************************************************************** -+ * -+ * Wifi Reset Func -+ * -+ *************************************************************************/ -+int rockchip_wifi_reset(int on) -+{ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_reset); -+ -+/************************************************************************** -+ * -+ * Wifi MAC custom Func -+ * -+ *************************************************************************/ -+#include -+#include -+u8 wifi_custom_mac_addr[6] = { 0, 0, 0, 0, 0, 0 }; -+ -+//#define RANDOM_ADDRESS_SAVE -+static int get_wifi_addr_vendor(unsigned char *addr) -+{ -+ int ret; -+ int count = 5; -+ -+ while (count-- > 0) { -+ if (is_rk_vendor_ready()) -+ break; -+ /* sleep 500ms wait rk vendor driver ready */ -+ msleep(500); -+ } -+ ret = rk_vendor_read(WIFI_MAC_ID, addr, 6); -+ if (ret != 6 || is_zero_ether_addr(addr)) { -+ LOG("%s: rk_vendor_read wifi mac address failed (%d)\n", -+ __func__, ret); -+#ifdef CONFIG_WIFI_GENERATE_RANDOM_MAC_ADDR -+ random_ether_addr(addr); -+ LOG("%s: generate random wifi mac address: " -+ "%02x:%02x:%02x:%02x:%02x:%02x\n", -+ __func__, addr[0], addr[1], addr[2], addr[3], addr[4], -+ addr[5]); -+ ret = rk_vendor_write(WIFI_MAC_ID, addr, 6); -+ if (ret != 0) { -+ memset(addr, 0, 6); -+ return -1; -+ } -+#else -+ return -1; -+#endif -+ } -+ -+ return 0; -+} -+ -+int rockchip_wifi_mac_addr(unsigned char *buf) -+{ -+ char mac_buf[20] = { 0 }; -+ -+ // from vendor storage -+ if (is_zero_ether_addr(wifi_custom_mac_addr)) { -+ if (get_wifi_addr_vendor(wifi_custom_mac_addr) != 0) -+ return -1; -+ } -+ -+ sprintf(mac_buf, "%02x:%02x:%02x:%02x:%02x:%02x", -+ wifi_custom_mac_addr[0], wifi_custom_mac_addr[1], -+ wifi_custom_mac_addr[2], wifi_custom_mac_addr[3], -+ wifi_custom_mac_addr[4], wifi_custom_mac_addr[5]); -+ LOG("falsh wifi_custom_mac_addr=[%s]\n", mac_buf); -+ -+ if (is_valid_ether_addr(wifi_custom_mac_addr)) { -+ if (!strncmp(wifi_chip_type_string, "rtl", 3)) -+ wifi_custom_mac_addr[0] &= ~0x2; // for p2p -+ } else { -+ LOG("This mac address is not valid, ignored...\n"); -+ return -1; -+ } -+ -+ memcpy(buf, wifi_custom_mac_addr, 6); -+ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_mac_addr); -+ -+/************************************************************************** -+ * -+ * wifi get country code func -+ * -+ *************************************************************************/ -+struct cntry_locales_custom { -+ char iso_abbrev[4]; /* ISO 3166-1 country abbreviation */ -+ char custom_locale[4]; /* Custom firmware locale */ -+ int custom_locale_rev; /* Custom local revisin default -1 */ -+}; -+ -+static struct cntry_locales_custom country_cloc; -+ -+void *rockchip_wifi_country_code(char *ccode) -+{ -+ struct cntry_locales_custom *mcloc; -+ -+ LOG("%s: set country code [%s]\n", __func__, ccode); -+ mcloc = &country_cloc; -+ memcpy(mcloc->custom_locale, ccode, 4); -+ mcloc->custom_locale_rev = 0; -+ -+ return mcloc; -+} -+EXPORT_SYMBOL(rockchip_wifi_country_code); -+/**************************************************************************/ -+ -+static int rfkill_rk_setup_gpio(struct rksdmmc_gpio *gpio, const char *prefix, -+ const char *name) -+{ -+ if (gpio_is_valid(gpio->io)) { -+ int ret = 0; -+ -+ sprintf(gpio->name, "%s_%s", prefix, name); -+ ret = gpio_request(gpio->io, gpio->name); -+ if (ret) { -+ LOG("Failed to get %s gpio.\n", gpio->name); -+ return -1; -+ } -+ } -+ -+ return 0; -+} -+ -+#ifdef CONFIG_OF -+static int wlan_platdata_parse_dt(struct device *dev, -+ struct rksdmmc_gpio_wifi_moudle *data) -+{ -+ struct device_node *node = dev->of_node; -+ const char *strings; -+ u32 value; -+ int gpio, ret; -+ enum of_gpio_flags flags; -+ u32 ext_clk_value = 0; -+ -+ if (!node) -+ return -ENODEV; -+ -+ memset(data, 0, sizeof(*data)); -+ -+#ifdef CONFIG_MFD_SYSCON -+ data->grf = syscon_regmap_lookup_by_phandle(node, "rockchip,grf"); -+ if (IS_ERR(data->grf)) { -+ LOG("can't find rockchip,grf property\n"); -+ //return -1; -+ } -+#endif -+ -+ ret = of_property_read_string(node, "wifi_chip_type", &strings); -+ if (ret) { -+ LOG("%s: Can not read wifi_chip_type, set default to rkwifi.\n", -+ __func__); -+ strcpy(wifi_chip_type_string, "rkwifi"); -+ } else { -+ strcpy(wifi_chip_type_string, strings); -+ } -+ LOG("%s: wifi_chip_type = %s\n", __func__, wifi_chip_type_string); -+ -+ if (of_find_property(node, "keep_wifi_power_on", NULL)) { -+ data->wifi_power_remain = true; -+ LOG("%s: wifi power remain\n", __func__); -+ } else { -+ data->wifi_power_remain = false; -+ LOG("%s: enable wifi power control.\n", __func__); -+ } -+ -+ if (of_find_property(node, "power_ctrl_by_pmu", NULL)) { -+ data->mregulator.power_ctrl_by_pmu = true; -+ ret = of_property_read_string(node, "power_pmu_regulator", -+ &strings); -+ if (ret) { -+ LOG("%s: Can not read property: power_pmu_regulator.\n", -+ __func__); -+ data->mregulator.power_ctrl_by_pmu = false; -+ } else { -+ LOG("%s: wifi power controlled by pmu(%s).\n", __func__, -+ strings); -+ sprintf(data->mregulator.pmu_regulator, "%s", strings); -+ } -+ ret = of_property_read_u32(node, "power_pmu_enable_level", -+ &value); -+ if (ret) { -+ LOG("%s: Can not read: power_pmu_enable_level.\n", -+ __func__); -+ data->mregulator.power_ctrl_by_pmu = false; -+ } else { -+ LOG("%s: wifi power controlled by pmu(level = %s).\n", -+ __func__, (value == 1) ? "HIGH" : "LOW"); -+ data->mregulator.enable = value; -+ } -+ } else { -+ data->mregulator.power_ctrl_by_pmu = false; -+ LOG("%s: wifi power controled by gpio.\n", __func__); -+ gpio = of_get_named_gpio_flags(node, "WIFI,poweren_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->power_n.io = gpio; -+ data->power_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,poweren_gpio = %d flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->power_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,vbat_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->vbat_n.io = gpio; -+ data->vbat_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,vbat_gpio = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->vbat_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,reset_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->reset_n.io = gpio; -+ data->reset_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,reset_gpio = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->reset_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,host_wake_irq", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wifi_int_b.io = gpio; -+ data->wifi_int_b.enable = !flags; -+ LOG("%s: WIFI,host_wake_irq = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->wifi_int_b.io = -1; -+ } -+ } -+ -+ data->ext_clk = devm_clk_get(dev, "clk_wifi"); -+ if (IS_ERR(data->ext_clk)) { -+ LOG("%s: The ref_wifi_clk not found !\n", __func__); -+ } else { -+ of_property_read_u32(node, "ref-clock-frequency", -+ &ext_clk_value); -+ if (ext_clk_value > 0) { -+ ret = clk_set_rate(data->ext_clk, ext_clk_value); -+ if (ret) -+ LOG("%s: set ref clk error!\n", __func__); -+ } -+ -+ ret = clk_prepare_enable(data->ext_clk); -+ if (ret) -+ LOG("%s: enable ref clk error!\n", __func__); -+ -+ /* WIFI clock (REF_CLKOUT) output enable. -+ * 1'b0: drive disable -+ * 1'b1: output enable -+ */ -+ if (of_machine_is_compatible("rockchip,rk3308")) -+ regmap_write(data->grf, 0x0314, 0x00020002); -+ } -+ -+ return 0; -+} -+#endif //CONFIG_OF -+ -+#if defined(CONFIG_HAS_EARLYSUSPEND) -+#include -+ -+static void wlan_early_suspend(struct early_suspend *h) -+{ -+ LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static void wlan_late_resume(struct early_suspend *h) -+{ -+ LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+struct early_suspend wlan_early_suspend { -+ .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN - 20; -+ .suspend = wlan_early_suspend; -+ .resume = wlan_late_resume; -+} -+#endif -+ -+static void -+rfkill_wlan_early_suspend(void) -+{ -+ //LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static void rfkill_wlan_later_resume(void) -+{ -+ //LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static int rfkill_wlan_fb_event_notify(struct notifier_block *self, -+ unsigned long action, void *data) -+{ -+ struct fb_event *event = data; -+ int blank_mode = *((int *)event->data); -+ -+ switch (blank_mode) { -+ case FB_BLANK_UNBLANK: -+ rfkill_wlan_later_resume(); -+ break; -+ case FB_BLANK_NORMAL: -+ rfkill_wlan_early_suspend(); -+ break; -+ default: -+ rfkill_wlan_early_suspend(); -+ break; -+ } -+ -+ return 0; -+} -+ -+static struct notifier_block rfkill_wlan_fb_notifier = { -+ .notifier_call = rfkill_wlan_fb_event_notify, -+}; -+ -+static ssize_t wifi_power_show(struct class *cls, struct class_attribute *attr, char *_buf) -+{ -+ return sprintf(_buf, "%d\n", wifi_power_state); -+} -+ -+static ssize_t wifi_power_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long poweren = 0; -+ -+ if (kstrtol(_buf, 10, &poweren) < 0) -+ return -EINVAL; -+ -+ LOG("%s: poweren = %ld\n", __func__, poweren); -+ -+ if (poweren > 0) -+ rockchip_wifi_power(1); -+ else -+ rockchip_wifi_power(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_RW(wifi_power); -+ -+static ssize_t wifi_bt_vbat_show(struct class *cls, struct class_attribute *attr, char *_buf) -+{ -+ return sprintf(_buf, "%d\n", wifi_bt_vbat_state); -+} -+ -+static ssize_t wifi_bt_vbat_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long vbat = 0; -+ -+ if (kstrtol(_buf, 10, &vbat) < 0) -+ return -EINVAL; -+ -+ LOG("%s: vbat = %ld\n", __func__, vbat); -+ -+ if (vbat > 0) -+ rfkill_set_wifi_bt_power(1); -+ else -+ rfkill_set_wifi_bt_power(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_RW(wifi_bt_vbat); -+ -+static ssize_t wifi_set_carddetect_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long val = 0; -+ -+ if (kstrtol(_buf, 10, &val) < 0) -+ return -EINVAL; -+ -+ LOG("%s: val = %ld\n", __func__, val); -+ -+ if (val > 0) -+ rockchip_wifi_set_carddetect(1); -+ else -+ rockchip_wifi_set_carddetect(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_WO(wifi_set_carddetect); -+ -+static struct attribute *rkwifi_power_attrs[] = { -+ &class_attr_wifi_power.attr, -+ &class_attr_wifi_bt_vbat.attr, -+ &class_attr_wifi_set_carddetect.attr, -+ NULL, -+}; -+ATTRIBUTE_GROUPS(rkwifi_power); -+ -+/** Device model classes */ -+static struct class rkwifi_power = { -+ .name = "rkwifi", -+ .class_groups = rkwifi_power_groups, -+}; -+ -+static int rfkill_wlan_probe(struct platform_device *pdev) -+{ -+ struct rfkill_wlan_data *rfkill; -+ struct rksdmmc_gpio_wifi_moudle *pdata = pdev->dev.platform_data; -+ int ret = -1; -+ -+ LOG("Enter %s\n", __func__); -+ -+ class_register(&rkwifi_power); -+ -+ if (!pdata) { -+#ifdef CONFIG_OF -+ pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); -+ if (!pdata) -+ return -ENOMEM; -+ -+ ret = wlan_platdata_parse_dt(&pdev->dev, pdata); -+ if (ret < 0) { -+#endif -+ LOG("%s: No platform data specified\n", __func__); -+ return ret; -+#ifdef CONFIG_OF -+ } -+#endif -+ } -+ -+ rfkill = kzalloc(sizeof(*rfkill), GFP_KERNEL); -+ if (!rfkill) -+ goto rfkill_alloc_fail; -+ -+ rfkill->pdata = pdata; -+ g_rfkill = rfkill; -+ -+ LOG("%s: init gpio\n", __func__); -+ -+ if (!pdata->mregulator.power_ctrl_by_pmu) { -+ ret = rfkill_rk_setup_gpio(&pdata->vbat_n, wlan_name, -+ "wlan_vbat"); -+ if (ret) -+ goto fail_alloc; -+ -+ ret = rfkill_rk_setup_gpio(&pdata->power_n, wlan_name, -+ "wlan_poweren"); -+ if (ret) -+ goto fail_alloc; -+ -+ ret = rfkill_rk_setup_gpio(&pdata->reset_n, wlan_name, -+ "wlan_reset"); -+ if (ret) -+ goto fail_alloc; -+ } -+ -+ wake_lock_init(&rfkill->wlan_irq_wl, WAKE_LOCK_SUSPEND, -+ "rfkill_wlan_wake"); -+ -+ rfkill_set_wifi_bt_power(1); -+ -+#ifdef CONFIG_SDIO_KEEPALIVE -+ if (gpio_is_valid(pdata->power_n.io) && -+ primary_sdio_host && primary_sdio_host->support_chip_alive) -+ gpio_direction_output(pdata->power_n.io, pdata->power_n.enable); -+#else -+ if (gpio_is_valid(pdata->power_n.io)) -+ gpio_direction_output(pdata->power_n.io, !pdata->power_n.enable); -+#endif -+ -+ -+ if (pdata->wifi_power_remain) -+ rockchip_wifi_power(1); -+ -+#if BCM_STATIC_MEMORY_SUPPORT -+ rockchip_init_wifi_mem(); -+#endif -+ -+#if defined(CONFIG_HAS_EARLYSUSPEND) -+ register_early_suspend(wlan_early_suspend); -+#endif -+ -+ fb_register_client(&rfkill_wlan_fb_notifier); -+ -+ LOG("Exit %s\n", __func__); -+ -+ return 0; -+ -+fail_alloc: -+ kfree(rfkill); -+rfkill_alloc_fail: -+ kfree(pdata); -+ -+ g_rfkill = NULL; -+ -+ return ret; -+} -+ -+static int rfkill_wlan_remove(struct platform_device *pdev) -+{ -+ struct rfkill_wlan_data *rfkill = platform_get_drvdata(pdev); -+ -+ LOG("Enter %s\n", __func__); -+ -+ wake_lock_destroy(&rfkill->wlan_irq_wl); -+ -+ fb_unregister_client(&rfkill_wlan_fb_notifier); -+ -+ if (gpio_is_valid(rfkill->pdata->power_n.io)) -+ gpio_free(rfkill->pdata->power_n.io); -+ -+ if (gpio_is_valid(rfkill->pdata->reset_n.io)) -+ gpio_free(rfkill->pdata->reset_n.io); -+ -+ kfree(rfkill); -+ g_rfkill = NULL; -+ -+ return 0; -+} -+ -+static int rfkill_wlan_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ LOG("Enter %s\n", __func__); -+ return 0; -+} -+ -+static int rfkill_wlan_resume(struct platform_device *pdev) -+{ -+ LOG("Enter %s\n", __func__); -+ return 0; -+} -+ -+#ifdef CONFIG_OF -+static struct of_device_id wlan_platdata_of_match[] = { -+ { .compatible = "wlan-platdata" }, -+ {} -+}; -+MODULE_DEVICE_TABLE(of, wlan_platdata_of_match); -+#endif //CONFIG_OF -+ -+static struct platform_driver rfkill_wlan_driver = { -+ .probe = rfkill_wlan_probe, -+ .remove = rfkill_wlan_remove, -+ .suspend = rfkill_wlan_suspend, -+ .resume = rfkill_wlan_resume, -+ .driver = { -+ .name = "wlan-platdata", -+ .owner = THIS_MODULE, -+ .of_match_table = of_match_ptr(wlan_platdata_of_match), -+ }, -+}; -+ -+int __init rfkill_wlan_init(void) -+{ -+ LOG("Enter %s\n", __func__); -+ return platform_driver_register(&rfkill_wlan_driver); -+} -+ -+void __exit rfkill_wlan_exit(void) -+{ -+ LOG("Enter %s\n", __func__); -+ platform_driver_unregister(&rfkill_wlan_driver); -+} -+ -+MODULE_DESCRIPTION("rock-chips rfkill for wifi v0.1"); -+MODULE_AUTHOR("gwl@rock-chips.com"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c b/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -old mode 100644 -new mode 100755 -index b51207d19c8..d80267ad55e ---- a/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -@@ -384,9 +384,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - { - int i, j, temp, data_len, pkt_line_num, - temp_pkt_line_num, pkt_len, m = 0; --#ifdef setfs -- mm_segment_t fs; --#endif - /*for pkt log space key and enter key*/ - char temp_space, temp_enter; - /*for pkt log txt line number and write pkt log into file*/ -@@ -399,10 +396,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - wl_err("file create/open fail %s, %d\n", __func__, __LINE__); - return 1; - } --#ifdef setfs -- fs = get_fs(); -- set_fs(KERNEL_DS); --#endif - pkt_len = ((struct sprdwl_pktlog_hdr *)(data))->plen; - data += sizeof(struct sprdwl_pktlog_hdr); - while (m < pkt_len) { -@@ -449,9 +442,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - memset(temphdr, 0x00, 6); - } - filp_close(intf->pfile, NULL); --#ifdef setfs -- set_fs(fs); --#endif - return 0; - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h b/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -old mode 100644 -new mode 100755 -index a1b2f8544ec..f612a9e9967 ---- a/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -@@ -176,8 +176,6 @@ struct wmm_params_element { - struct sprdwl_wmmac_params { - struct wmm_ac_params ac[4]; - struct timer_list wmmac_edcaf_timer; -- struct timer_list wmmac_vo_timer; -- struct timer_list wmmac_vi_timer; - }; - #endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -old mode 100644 -new mode 100755 -index 40d51a7130d..d7375248dde ---- a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -@@ -530,9 +530,9 @@ void sprdwl_fc_add_share_credit(struct sprdwl_vif *vif) - tx_msg = (struct sprdwl_tx_msg *)intf->sprdwl_tx; - for (i = 0; i < MAX_COLOR_BIT; i++) { - if (tx_msg->flow_ctrl[i].mode == vif->mode) { -- wl_err("%s, %d, mode:%d closed, index:%d, share it\n", -- __func__, __LINE__, -- vif->mode, i); -+ //wl_err("%s, %d, mode:%d closed, index:%d, share it\n", -+ // __func__, __LINE__, -+ // vif->mode, i); - tx_msg->flow_ctrl[i].mode = SPRDWL_MODE_NONE; - break; - } -@@ -1081,10 +1081,6 @@ int sprdwl_sdio_process_credit(void *pdev, void *data) - if (common->type == SPRDWL_TYPE_DATA_SPECIAL) { - int offset = (size_t)&((struct rx_msdu_desc *)0)->rsvd5; - -- if (intf->priv->hw_type == SPRDWL_HW_USB) { -- return -2; -- } -- - flow = data + offset; - goto out; - } -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/txrx.c b/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -old mode 100644 -new mode 100755 -index 227339ada73..b0a24a3615b ---- a/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -@@ -23,9 +23,7 @@ - #include "cmdevt.h" - #include "intf_ops.h" - #include "work.h" --#if defined(UWE5621_FTR) - #include "wl_intf.h" --#endif - #include "rx_msg.h" - #include "tcp_ack.h" - #include "wl_core.h" -@@ -34,33 +32,20 @@ - * here just free the msg buf to the freelist - */ - int sprdwl_send_data(struct sprdwl_vif *vif, struct sprdwl_msg_buf *msg, -- struct sk_buff *skb, u8 offset) -+ struct sk_buff *skb, u8 offset) - { - int ret; - int delta; - unsigned long align_addr; - unsigned char *buf = NULL; --/*TODO temp for MARLIN2*/ --#ifndef UWE5621_FTR -- struct sprdwl_data_hdr *hdr; --#endif - struct sprdwl_intf *intf; - unsigned int plen = cpu_to_le16(skb->len); - - intf = (struct sprdwl_intf *)vif->priv->hw_priv; - buf = skb->data; --/*TODO temp for MARLIN2*/ --#ifndef UWE5621_FTR -- skb_push(skb, sizeof(*hdr) + offset); -- hdr = (struct sprdwl_data_hdr *)skb->data; -- memset(hdr, 0, sizeof(*hdr)); -- hdr->common.type = SPRDWL_TYPE_DATA; -- hdr->common.ctx_id = vif->ctx_id; -- hdr->plen = cpu_to_le16(skb->len); --#else -+ - if (sprdwl_intf_fill_msdu_dscr(vif, skb, SPRDWL_TYPE_DATA, offset)) - return -EPERM; --#endif /* UWE5621_FTR */ - #ifdef OTT_UWE - skb_push(skb, 3); - if ((unsigned long)skb->data & 0x3) { -@@ -120,10 +105,6 @@ int sprdwl_send_cmd(struct sprdwl_priv *priv, struct sprdwl_msg_buf *msg) - ret = sprdwl_intf_tx(priv, msg); - if (ret) { - wl_err("%s TX cmd Err: %d\n", __func__, ret); -- /* now cmd msg droped */ --#if !defined(UWE5621_FTR) -- dev_kfree_skb(skb); --#endif - } - - return ret; - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/vendor.c b/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -old mode 100644 -new mode 100755 -index 6fba95b60d6..1b4ec43ce59 ---- a/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -@@ -453,7 +453,7 @@ static int sprdwl_vendor_get_llstat_handler(struct wiphy *wiphy, - struct wifi_iface_stat *iface_st; - struct sprdwl_llstat_radio *dif_radio; - u16 r_len = sizeof(*llst); -- u8 r_buf[r_len], ret, i; -+ u8 r_buf[sizeof(*llst)], ret, i; - u32 reply_radio_length, reply_iface_length; - - struct sprdwl_priv *priv = wiphy_priv(wiphy); - -@@ -575,7 +575,7 @@ static int sprdwl_vendor_clr_llstat_handler(struct wiphy *wiphy, - struct nlattr *tb[SPRDWL_LL_STATS_CLR_MAX + 1]; - u32 *stats_clear_rsp_mask, stats_clear_req_mask = 0; - u16 r_len = sizeof(*stats_clear_rsp_mask); -- u8 r_buf[r_len]; -+ u8 r_buf[sizeof(*stats_clear_rsp_mask)]; - u32 reply_length, ret, err; - - struct sprdwl_priv *priv = wiphy_priv(wiphy); -@@ -2409,8 +2409,8 @@ static int sprdwl_vendor_memory_dump(struct wiphy *wiphy, - /*CMD ID:61*/ - static const struct nla_policy sprdwl_get_wifi_info_policy[ - SPRDWL_ATTR_WIFI_INFO_GET_MAX + 1] = { -- [SPRDWL_ATTR_WIFI_INFO_DRIVER_VERSION] = {.type = NLA_U8}, -- [SPRDWL_ATTR_WIFI_INFO_FIRMWARE_VERSION] = {.type = NLA_U8}, -+ [SPRDWL_ATTR_WIFI_INFO_DRIVER_VERSION] = {.type = NLA_U32}, -+ [SPRDWL_ATTR_WIFI_INFO_FIRMWARE_VERSION] = {.type = NLA_U32}, - }; - - static int sprdwl_vendor_get_driver_info(struct wiphy *wiphy, -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -old mode 100644 -new mode 100755 -index 042a4df0161..19a00d1f384 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -@@ -538,20 +538,12 @@ static struct notifier_block boost_notifier = { - extern struct sprdwl_priv *g_sprdwl_priv; - extern void sprdwl_cancel_scan(struct sprdwl_vif *vif); - extern void sprdwl_cancel_sched_scan(struct sprdwl_vif *vif); --extern void sprdwl_flush_all_txlist(struct sprdwl_tx_msg *sprdwl_tx_dev); --extern int sprdwl_cmd_init(void); --extern void sprdwl_cmd_deinit(void); --extern void sprdwl_net_flowcontrl(struct sprdwl_priv *priv, -- enum sprdwl_mode mode, bool state); --extern void sprdwl_reg_notify(struct wiphy *wiphy, struct regulatory_request *request); --struct work_struct wifi_rst_begin; --struct work_struct wifi_rst_down; - struct completion wifi_reset_ready; -+extern void sprdwl_net_flowcontrl(struct sprdwl_priv *priv, enum sprdwl_mode mode, bool state); - extern struct sprdwl_cmd g_sprdwl_cmd; - --static void wifi_reset_wq(struct work_struct *work) -+static void sprdwl_wifi_reset(void) - { -- struct sprdwl_vif *vif, *tmp_vif; - struct sprdwl_intf *intf = NULL; - struct sprdwl_tx_msg *tx_msg = NULL; - struct sprdwl_rx_if *rx_if = NULL; -@@ -560,103 +552,38 @@ static void wifi_reset_wq(struct work_struct *work) - tx_msg = (void *)intf->sprdwl_tx; - rx_if = (struct sprdwl_rx_if *)intf->sprdwl_rx; - -- reinit_completion(&wifi_reset_ready); -- - wl_err("cp2 reset begin..........\n"); - g_sprdwl_priv->sync.scan_not_allowed = true; - g_sprdwl_priv->sync.cmd_not_allowed = true; - intf->cp_asserted = 1; -- sprdwl_reorder_init(&rx_if->ba_entry); -- sprdwl_net_flowcontrl(g_sprdwl_priv, SPRDWL_MODE_NONE, false); -- if (tx_msg->tx_thread) -+ intf->exit = 1; -+ if (tx_msg->tx_thread) { - tx_up(tx_msg); -- -- sprdwl_flush_all_txlist(tx_msg); -- flush_workqueue(rx_if->rx_queue); -- list_for_each_entry_safe(vif, tmp_vif, &g_sprdwl_priv->vif_list, vif_node) { -- g_sprdwl_priv->sync.fw_stat[vif->mode] = g_sprdwl_priv->fw_stat[vif->mode]; -- g_sprdwl_priv->fw_stat[vif->mode] = SPRDWL_INTF_CLOSE; -- sprdwl_report_disconnection(vif, true); -- if (g_sprdwl_priv->scan_vif) -- sprdwl_cancel_scan(g_sprdwl_priv->scan_vif); -- if (g_sprdwl_priv->sched_scan_vif) { -- sprdwl_sched_scan_done(g_sprdwl_priv->sched_scan_vif, true); -- sprdwl_cancel_sched_scan(g_sprdwl_priv->sched_scan_vif); -- } -+ kthread_stop(tx_msg->tx_thread); -+ tx_msg->tx_thread = NULL; - } - -- sprdwl_vendor_deinit(g_sprdwl_priv->wiphy); -- sprdwl_cmd_wake_upall(); -- sprdwl_tcp_ack_deinit(g_sprdwl_priv); -- sprdwl_intf_deinit(intf); -- // sprdwl_cmd_deinit(); -- complete(&wifi_reset_ready); - wl_err("cp2 reset finish..........\n"); -- --} -- --static void wifi_resume_wq(struct work_struct *work) --{ -- struct sprdwl_vif *vif, *tmp_vif; -- struct sprdwl_intf *intf = NULL; -- struct sprdwl_rx_if *rx_if = NULL; -- wl_err("cp2 resume begin...............\n"); -- -- intf = (struct sprdwl_intf *)g_sprdwl_priv->hw_priv; -- rx_if = (struct sprdwl_rx_if *)intf->sprdwl_rx; -- -- wait_for_completion(&wifi_reset_ready); -- -- sprdwl_intf_init(g_sprdwl_priv, intf); -- // sprdwl_cmd_init(); -- wl_err("sprdwl cmd init finish.\n"); -- g_sprdwl_priv->sync.cmd_not_allowed = false; -- intf->cp_asserted = 0; -- sprdwl_net_flowcontrl(g_sprdwl_priv, SPRDWL_MODE_NONE, true); -- sprdwl_reorder_init(&rx_if->ba_entry); -- sprdwl_sync_version(g_sprdwl_priv); -- sprdwl_download_ini(g_sprdwl_priv); -- sprdwl_tcp_ack_init(g_sprdwl_priv); -- sprdwl_get_fw_info(g_sprdwl_priv); -- sprdwl_setup_wiphy(g_sprdwl_priv->wiphy, g_sprdwl_priv); -- sprdwl_vendor_init(g_sprdwl_priv->wiphy); -- -- sprdwl_reg_notify(g_sprdwl_priv->wiphy, &g_sprdwl_priv->sync.request); -- -- list_for_each_entry_safe(vif, tmp_vif, &g_sprdwl_priv->vif_list, vif_node) { -- if (SPRDWL_INTF_OPEN == g_sprdwl_priv->sync.fw_stat[vif->mode]) { -- vif->mode = SPRDWL_MODE_NONE; -- sprdwl_init_fw(vif); -- } -- } -- g_sprdwl_priv->sync.scan_not_allowed = false; -- wl_err("cp2 resume complete...............\n"); - } - --static void wifi_reset_init(void) -+static int wifi_exception_event(void) - { -- INIT_WORK(&wifi_rst_begin, wifi_reset_wq); -- INIT_WORK(&wifi_rst_down, wifi_resume_wq); -- init_completion(&wifi_reset_ready); -- return; -+ char *envp[2]; -+ envp[0] = "CP2-EXCEPTION-EVENT"; -+ envp[1] = NULL; -+ kobject_uevent_env(&sprdwl_dev->kobj, KOBJ_CHANGE, envp); -+ return 0; - } - - int wifi_reset_callback(struct notifier_block *nb, unsigned long event, void *v) - { -- wl_info("%s[%d]: %s %d\n", __func__, __LINE__, (char *)v, (int)event); -- switch (event) { -- case 1: -- schedule_work(&wifi_rst_begin); -- break; -- case 0: -- schedule_work(&wifi_rst_down); -- break; -- } -- -+ sprdwl_wifi_reset(); -+ wifi_exception_event(); - return NOTIFY_OK; - } -+ - static struct notifier_block wifi_reset_notifier = { -- .notifier_call = wifi_reset_callback, -+ .notifier_call = wifi_reset_callback, - }; - #endif - -@@ -668,7 +595,6 @@ static int sprdwl_probe(struct platform_device *pdev) - u8 i; - - #ifdef CP2_RESET_SUPPORT -- wifi_reset_init(); - marlin_reset_callback_register(MARLIN_WIFI, &wifi_reset_notifier); - #endif - -@@ -765,7 +691,6 @@ static int sprdwl_probe(struct platform_device *pdev) - return ret; - - err_core_init: -- sprdwl_bus_deinit(); - sprdwl_tx_deinit(intf); - err_tx_init: - sprdwl_rx_deinit(intf); -@@ -791,7 +716,6 @@ static int sprdwl_remove(struct platform_device *pdev) - cpufreq_unregister_notifier(&boost_notifier, CPUFREQ_POLICY_NOTIFIER); - sprdwl_debugfs_deinit(); - sprdwl_core_deinit(priv); -- sprdwl_bus_deinit(); - sprdwl_tx_deinit(intf); - sprdwl_rx_deinit(intf); - sprdwl_intf_deinit(intf); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -old mode 100644 -new mode 100755 -index a6def0e0682..bb8d3762579 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -@@ -32,6 +32,10 @@ - .rx_threshold = threshold, .timeout = time, .pop_link = pop,\ - .push_link = push, .tx_complete = complete, .power_notify = suspend } - -+#ifndef CPUFREQ_ADJUST -+#define CPUFREQ_ADJUST CPUFREQ_CREATE_POLICY -+#endif -+ - struct sprdwl_intf_ops g_intf_ops; - - static inline struct sprdwl_intf *get_intf(void) -@@ -708,8 +712,8 @@ unsigned char sprdwl_find_lut_index(struct sprdwl_intf *intf, - break; - } - -- //wl_err("ctx_id = %d, sm_state = %d, bssid =%pM\n", -- // vif->ctx_id, vif->sm_state, intf->skb_da); -+ wl_err("ctx_id = %d, sm_state = %d, bssid =%pM\n", -+ vif->ctx_id, vif->sm_state, intf->skb_da); - - return ret; - } -@@ -762,7 +766,7 @@ int sprdwl_intf_fill_msdu_dscr(struct sprdwl_vif *vif, - - lut_index = sprdwl_find_lut_index(dev, vif); - if ((lut_index < 6) && (!sprdwl_is_group(dev->skb_da))) { -- //wl_err("%s, %d, sta disconn, no data tx!", __func__, __LINE__); -+ wl_err("%s, %d, sta disconn, no data tx!", __func__, __LINE__); - return -EPERM; - } - skb_push(skb, sizeof(struct tx_msdu_dscr) + offset + dscr_rsvd); -@@ -1048,20 +1052,6 @@ void sprdwl_count_rx_tp(struct sprdwl_rx_if *rx_if, int num) - rx_if->rx_data_num = 0; - } - } -- --static int check_msdu_early(struct sprdwl_intf *intf, struct mbuf_t *mbuf) --{ -- struct rx_msdu_desc *msdu_desc = -- (struct rx_msdu_desc *)(mbuf->buf + intf->hif_offset); -- -- if (mbuf->len < msdu_desc->msdu_len || -- msdu_desc->msdu_len > 1600) { -- wl_err("%s, %d, %d, %d\n", __func__, __LINE__, mbuf->len, msdu_desc->msdu_len); -- return -1; -- } -- return 0; --} -- - static int intf_rx_handle(int chn, struct mbuf_t *head, - struct mbuf_t *tail, int num) - { -@@ -1085,13 +1075,6 @@ static int intf_rx_handle(int chn, struct mbuf_t *head, - for (i = num; i > 0; i--) { - sprdwl_sdio_process_credit(intf, - (void *)(mbuf->buf + intf->hif_offset)); -- if (intf->priv->hw_type == SPRDWL_HW_USB && -- chn == USB_RX_DATA_PORT && -- check_msdu_early(intf, mbuf)) { -- sprdwcn_bus_push_list(chn, head, tail, num); -- return 0; -- } -- - mbuf = mbuf->next; - } - } -@@ -1645,12 +1628,12 @@ void sprdwl_tx_ba_mgmt(struct sprdwl_priv *priv, void *data, int len, - tid = addba->addba_param.tid; - if (!test_and_clear_bit(tid, &peer_entry->ba_tx_done_map)) - goto out; -- //wl_err("%s, %d, tx_addba failed, reason=%d, lut_index=%d, tid=%d, map=%lu\n", -- // __func__, __LINE__, -- // rbuf[0], -- // addba->lut_index, -- // tid, -- // peer_entry->ba_tx_done_map); -+ wl_err("%s, %d, tx_addba failed, reason=%d, lut_index=%d, tid=%d, map=%lu\n", -+ __func__, __LINE__, -+ rbuf[0], -+ addba->lut_index, -+ tid, -+ peer_entry->ba_tx_done_map); - } - out: - kfree(rbuf); -@@ -1750,26 +1733,17 @@ void sprdwl_tx_delba(struct sprdwl_intf *intf, - - int sprdwl_notifier_boost(struct notifier_block *nb, unsigned long event, void *data) - { --#if KERNEL_VERSION(5, 4, 19) <= LINUX_VERSION_CODE - struct cpufreq_policy_data *policy = data; --#else -- struct cpufreq_policy *policy = data; --#endif - unsigned long min_freq; - unsigned long max_freq = policy->cpuinfo.max_freq; - struct sprdwl_intf *intf = get_intf(); - u8 boost; -- - if (NULL == intf) - return NOTIFY_DONE; - - boost = intf->boost; - --#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE -- if (event != CPUFREQ_CREATE_POLICY) --#else - if (event != CPUFREQ_ADJUST) --#endif - return NOTIFY_DONE; - - min_freq = boost ? 1200000 : 400000; -@@ -1846,7 +1820,7 @@ void adjust_rxnum_level(char *buf, unsigned char offset) - #undef MAX_LEN - } - --int sprdwl_bus_init(struct sprdwl_priv *priv) -+int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) - { - int ret = -EINVAL, chn = 0; - -@@ -1873,40 +1847,10 @@ int sprdwl_bus_init(struct sprdwl_priv *priv) - if (ret < 0) - goto err; - } -- return 0; -- } --err: -- wl_err("%s: unregister %d ops\n", -- __func__, g_intf_ops.max_num); -- -- for (; chn > 0; chn--) -- sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); - -- g_intf_ops.hif_ops = NULL; -- g_intf_ops.max_num = 0; -- -- return ret; --} -- --void sprdwl_bus_deinit(void) --{ -- int chn = 0; -- -- for (chn = 0; chn < g_intf_ops.max_num; chn++) -- sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); --} -- --int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) --{ -- int ret = -EINVAL; -- -- ret = sprdwl_bus_init(priv); -- if (ret < 0) -- return ret; -- -- g_intf_ops.intf = (void *)intf; -- /* TODO: Need we reserve g_intf_ops? */ -- intf->hw_intf = (void *)&g_intf_ops; -+ g_intf_ops.intf = (void *)intf; -+ /* TODO: Need we reserve g_intf_ops? */ -+ intf->hw_intf = (void *)&g_intf_ops; - - priv->hw_priv = intf; - priv->hw_offset = intf->hif_offset; -@@ -1917,14 +1861,30 @@ int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) - intf->rxnum_level = BOOST_RXNUM_LEVEL; - intf->boost = 0; - #ifdef UNISOC_WIFI_PS -- init_completion(&intf->suspend_completed); -+ init_completion(&intf->suspend_completed); - #endif -+ } else { -+err: -+ wl_err("%s: unregister %d ops\n", -+ __func__, g_intf_ops.max_num); -+ -+ for (; chn > 0; chn--) -+ sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); -+ -+ g_intf_ops.hif_ops = NULL; -+ g_intf_ops.max_num = 0; -+ } - - return ret; - } - - void sprdwl_intf_deinit(struct sprdwl_intf *dev) - { -+ int chn = 0; -+ -+ for (chn = 0; chn < g_intf_ops.max_num; chn++) -+ sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); -+ - g_intf_ops.intf = NULL; - g_intf_ops.max_num = 0; - dev->hw_intf = NULL; -@@ -1936,8 +1896,8 @@ int sprdwl_dis_flush_txlist(struct sprdwl_intf *intf, u8 lut_index) - int i, j; - - if (lut_index <= 5) { -- //wl_err("err lut_index:%d, %s, %d\n", -- // lut_index, __func__, __LINE__); -+ wl_err("err lut_index:%d, %s, %d\n", -+ lut_index, __func__, __LINE__); - return -1; - } - wl_debug("disconnect, flush qoslist, %s, %d\n", __func__, __LINE__); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -old mode 100644 -new mode 100755 -index b159c685a5e..7e609023f63 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -@@ -60,7 +60,6 @@ - #define BOOST_RXNUM_LEVEL 16 - - #ifdef SPRDWL_TX_SELF --#include - struct sprdwl_tx_buf { - unsigned char *base; - unsigned short buf_len; -@@ -299,5 +298,4 @@ void sprdwl_boost(void); - void sprdwl_unboost(void); - void adjust_txnum_level(char *buf, unsigned char offset); - void adjust_rxnum_level(char *buf, unsigned char offset); --void sprdwl_bus_deinit(void); - #endif /* __SPRDWL_INTF_SDIO_SC2355_H__ */ --- -2.34.1 - diff --git a/patch/kernel/archive/rockchip64-6.6/wifi-4003-uwe5622-adjust-for-rockchip.patch b/patch/kernel/archive/rockchip64-6.6/wifi-4003-uwe5622-adjust-for-rockchip.patch deleted file mode 100644 index bb07568203..0000000000 --- a/patch/kernel/archive/rockchip64-6.6/wifi-4003-uwe5622-adjust-for-rockchip.patch +++ /dev/null @@ -1,5332 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Paolo Sabatino -Date: Sun, 22 Jan 2023 14:13:39 +0000 -Subject: adjust uwe5622 driver for rockchip - ---- - drivers/net/wireless/uwe5622/Kconfig | 3 +- - drivers/net/wireless/uwe5622/Makefile | 2 +- - drivers/net/wireless/uwe5622/tty-sdio/Makefile | 9 +- - drivers/net/wireless/uwe5622/unisocwcn/Makefile | 4 +- - drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h | 3 +- - drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h | 20 + - drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c | 1 + - drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c | 2 - - drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c | 1444 ++++++++++ - drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c | 10 +- - drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c | 13 +- - drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c | 11 +- - drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c | 12 +- - drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h | 2 +- - drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c | 19 +- - drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c | 2 +- - drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c | 2 +- - drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c | 4 + - drivers/net/wireless/uwe5622/unisocwifi/api_version.c | 4 - - drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c | 59 +- - drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c | 241 +- - drivers/net/wireless/uwe5622/unisocwifi/intf.h | 20 +- - drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h | 22 - - drivers/net/wireless/uwe5622/unisocwifi/main.c | 12 +- - drivers/net/wireless/uwe5622/unisocwifi/msg.c | 2 - - drivers/net/wireless/uwe5622/unisocwifi/msg.h | 2 - - drivers/net/wireless/uwe5622/unisocwifi/npi.c | 18 +- - drivers/net/wireless/uwe5622/unisocwifi/qos.c | 53 +- - drivers/net/wireless/uwe5622/unisocwifi/qos.h | 4 +- - drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c | 4 +- - drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c | 825 ++++++ - drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c | 971 +++++++ - drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c | 10 - - drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h | 2 - - drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c | 10 +- - drivers/net/wireless/uwe5622/unisocwifi/txrx.c | 23 +- - drivers/net/wireless/uwe5622/unisocwifi/vendor.c | 2 +- - drivers/net/wireless/uwe5622/unisocwifi/wl_core.c | 108 +- - drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c | 112 +- - drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h | 2 - - 40 files changed, 3472 insertions(+), 597 deletions(-) - -diff --git a/drivers/net/wireless/uwe5622/Kconfig b/drivers/net/wireless/uwe5622/Kconfig -index a1e123b039bd..fe6c8d115c92 100644 ---- a/drivers/net/wireless/uwe5622/Kconfig -+++ b/drivers/net/wireless/uwe5622/Kconfig -@@ -1,7 +1,6 @@ - config SPARD_WLAN_SUPPORT - bool "Unisoc wireless Support" -- select AW_WIFI_DEVICE_UWE5622 if SPARD_WLAN_SUPPORT -- select AW_BIND_VERIFY if SPARD_WLAN_SUPPORT -+ select RK_WIFI_DEVICE_UWE5622 if SPARD_WLAN_SUPPORT - default n - help - This is support for spreadtrum wireless chip. -diff --git a/drivers/net/wireless/uwe5622/Makefile b/drivers/net/wireless/uwe5622/Makefile -index a5767f50df80..d2210439f3cc 100644 ---- a/drivers/net/wireless/uwe5622/Makefile -+++ b/drivers/net/wireless/uwe5622/Makefile -@@ -1,4 +1,4 @@ --obj-$(CONFIG_AW_WIFI_DEVICE_UWE5622) += unisocwcn/ -+obj-$(CONFIG_RK_WIFI_DEVICE_UWE5622) += unisocwcn/ - obj-$(CONFIG_WLAN_UWE5622) += unisocwifi/ - obj-$(CONFIG_TTY_OVERY_SDIO) += tty-sdio/ - -diff --git a/drivers/net/wireless/uwe5622/tty-sdio/Makefile b/drivers/net/wireless/uwe5622/tty-sdio/Makefile -old mode 100644 -new mode 100755 -index 9dcb75258dfe..2f6f89189e8a ---- a/drivers/net/wireless/uwe5622/tty-sdio/Makefile -+++ b/drivers/net/wireless/uwe5622/tty-sdio/Makefile -@@ -1,13 +1,16 @@ - # ccflags-y += -DDEBUG - # ccflags-y += -DKERNEL_VERSION_414 -+ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - ccflags-y += -I$(srctree)/drivers/net/wireless/uwe5622/sprdwcn/include --ccflags-y += -DOTT_UWE --ccflags-y += -DWOBLE_FUN -+endif -+#ccflags-y += -DOTT_UWE -+ccflags-y += -Wno-implicit-fallthrough - - ifneq ($(UNISOC_BSP_INCLUDE),) - ccflags-y += -I$(UNISOC_BSP_INCLUDE) - endif - -+ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - sprdbt_tty-objs := \ - tty.o \ - rfkill.o \ -@@ -17,4 +20,4 @@ sprdbt_tty-objs := \ - dump.o - - obj-$(CONFIG_TTY_OVERY_SDIO) += sprdbt_tty.o -- -+endif -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/Makefile b/drivers/net/wireless/uwe5622/unisocwcn/Makefile -old mode 100644 -new mode 100755 -index f9c595747547..939acb5c9274 ---- a/drivers/net/wireless/uwe5622/unisocwcn/Makefile -+++ b/drivers/net/wireless/uwe5622/unisocwcn/Makefile -@@ -70,8 +70,8 @@ ifeq ($(CONFIG_RK_WIFI_DEVICE_UWE5622),y) - export CONFIG_WCN_SDIO = y - #export CONFIG_WCN_USB = y - # export CONFIG_WCN_GNSS = y --#ccflags-y += -DCONFIG_CHECK_DRIVER_BY_CHIPID --ccflags-y += -DCONFIG_UWE5622 -+ccflags-y += -DCONFIG_CHECK_DRIVER_BY_CHIPID -+#ccflags-y += -DCONFIG_UWE5622 - BSP_CHIP_ID := uwe5622 - WCN_HW_TYPE := sdio - endif -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h b/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -old mode 100644 -new mode 100755 -index 7a78181a4586..ae8daac46644 ---- a/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -+++ b/drivers/net/wireless/uwe5622/unisocwcn/include/marlin_platform.h -@@ -83,8 +83,7 @@ enum marlin_wake_host_en { - }; - - enum marlin_cp2_status { -- MARLIN_CP2_STS_READY = 0, -- MARLIN_CP2_STS_ASSERTED = 1, -+ MARLIN_CP2_STS_ASSERTED = 0, - }; - - enum wcn_hw_type wcn_get_hw_if_type(void); -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h b/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h -new file mode 100755 -index 000000000000..909a4c7ecce0 ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwcn/include/wcn_wrapper.h -@@ -0,0 +1,20 @@ -+#ifndef __WCN_WRAPPER_H__ -+#define __WCN_WRAPPER_H__ -+#include -+#if KERNEL_VERSION(5, 6, 0) <= LINUX_VERSION_CODE -+#ifndef timespec -+#define timespec timespec64 -+#define timespec_to_ns timespec64_to_ns -+#define getnstimeofday ktime_get_real_ts64 -+#define do_gettimeofday ktime_get_real_ts64 -+#define timeval_to_ns timespec64_to_ns -+#define timeval timespec64 -+#endif -+ -+#elif KERNEL_VERSION(5, 0, 0) <= LINUX_VERSION_CODE -+#define timeval timespec -+#define do_gettimeofday getnstimeofday -+#define timeval_to_ns timespec_to_ns -+ -+#endif -+#endif//__WCN_WRAPPER_H__ -\ No newline at end of file -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -old mode 100644 -new mode 100755 -index 7cb79f2f2d0c..b8459b914cb1 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/bufring.c -@@ -117,6 +117,7 @@ void mdbg_ring_destroy(struct mdbg_ring_t *ring) - } - MDBG_LOG("to free ring."); - kfree(ring); -+ ring = NULL; - } - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -old mode 100644 -new mode 100755 -index 9ce23ada5635..26824b505ba8 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/pcie_boot.c -@@ -24,8 +24,6 @@ - #define FIRMWARE_PATH "/bin/wcnmodem.bin" - #define FIRMWARE_SIZE_MAX 0xf0c00 - --MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); -- - static char *load_firmware_data(int size) - { - int read_len; -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c -new file mode 100755 -index 000000000000..6454d62766d9 ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_bind_helper.c -@@ -0,0 +1,1444 @@ -+#include -+#include -+ -+static unsigned char wcn_bind_verify_bc[] = { -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0xbd, 0x7b, 0x5c, 0x54, 0xe5, -+ 0xf6, 0x30, 0xfe, 0xec, 0xb9, 0xcf, 0x30, 0x0c, 0xc3, 0x7d, 0x80, 0x01, 0xf7, 0x28, 0x37, 0x15, -+ 0x61, 0xb8, 0x88, 0xa0, 0xa0, 0x33, 0x0c, 0x1a, 0x21, 0xda, 0x64, 0x96, 0x68, 0xa6, 0x33, 0xdc, -+ 0x04, 0xe5, 0x32, 0xdc, 0x04, 0xed, 0x36, 0x37, 0x04, 0x15, 0x3b, 0x63, 0x91, 0x51, 0x59, 0x67, -+ 0x30, 0x2a, 0x3b, 0x59, 0x8d, 0x49, 0x45, 0x27, 0xea, 0xcc, 0x00, 0x12, 0x29, 0xd6, 0xe8, 0xa1, -+ 0x22, 0x8f, 0x75, 0x06, 0x6f, 0x51, 0xc7, 0x0c, 0xcd, 0xca, 0xce, 0xf1, 0xe4, 0x6f, 0x3d, 0x7b, -+ 0x2e, 0x80, 0x97, 0xce, 0xf9, 0xe3, 0x7d, 0xdf, 0xef, 0xef, 0xfd, 0xbc, 0xcd, 0x47, 0x66, 0xf6, -+ 0x7e, 0xf6, 0x7a, 0xd6, 0xed, 0x59, 0xcf, 0x7a, 0xd6, 0xb3, 0xf6, 0xda, 0xdb, 0x86, 0xc2, 0xca, -+ 0xf5, 0x05, 0x65, 0x95, 0x45, 0xeb, 0x37, 0x17, 0xd7, 0x94, 0x95, 0x6c, 0x89, 0xaf, 0x42, 0xff, -+ 0xeb, 0x3f, 0x52, 0xf8, 0xa4, 0xa6, 0xa6, 0xe0, 0xdf, 0xc4, 0x79, 0x73, 0x13, 0x5d, 0xbf, 0xc9, -+ 0x54, 0x3b, 0x5c, 0x49, 0x99, 0x37, 0x4f, 0x8a, 0x12, 0x93, 0xa1, 0x25, 0x31, 0x55, 0x9a, 0x9a, -+ 0x38, 0x17, 0x49, 0x13, 0xe7, 0x26, 0x27, 0x25, 0x21, 0x52, 0xfa, 0xbf, 0x81, 0x97, 0x9b, 0x3e, -+ 0xf5, 0xb5, 0x75, 0xea, 0x1a, 0x92, 0x44, 0x5b, 0x4b, 0xd5, 0x55, 0x5b, 0xaa, 0xea, 0xb7, 0x94, -+ 0xdd, 0x06, 0xee, 0x3f, 0x5d, 0xff, 0xbf, 0xf4, 0x93, 0xa5, 0xb0, 0x7e, 0x35, 0x37, 0x00, 0x21, -+ 0x26, 0x1c, 0x17, 0xf0, 0xa5, 0x91, 0xcb, 0x56, 0x7f, 0x50, 0xf2, 0xc0, 0xbf, 0xba, 0xaa, 0xc2, -+ 0x06, 0x23, 0xb3, 0x89, 0x24, 0x26, 0x92, 0xf0, 0x11, 0xfa, 0x63, 0x30, 0x42, 0x5e, 0x34, 0x09, -+ 0xa2, 0x01, 0x4c, 0x10, 0xfc, 0xb1, 0x75, 0x33, 0x76, 0xcb, 0x07, 0x19, 0x77, 0xb2, 0x84, 0x49, -+ 0xe9, 0x8f, 0x13, 0x46, 0x7e, 0x14, 0x93, 0x13, 0x12, 0xc1, 0xd8, 0x59, 0xa0, 0x15, 0x2d, 0xa6, -+ 0x65, 0x3d, 0xee, 0x95, 0xd5, 0x2f, 0x4c, 0x0a, 0x48, 0xe3, 0x88, 0x96, 0xf2, 0x92, 0x0a, 0x5a, -+ 0x72, 0x34, 0xfd, 0x92, 0x19, 0xd9, 0x7e, 0xcd, 0xad, 0x42, 0xf9, 0xe3, 0xb4, 0xa2, 0x41, 0xce, -+ 0xc1, 0x00, 0x52, 0xb1, 0xa4, 0x85, 0xfc, 0x88, 0x48, 0x2a, 0x30, 0x8a, 0x66, 0xc5, 0xce, 0x32, -+ 0x25, 0x3e, 0x64, 0x59, 0xbb, 0x9b, 0x1c, 0x18, 0x04, 0xbc, 0xdb, 0x49, 0x84, 0xa2, 0xe1, 0x37, -+ 0x69, 0x7a, 0x0b, 0x97, 0x2c, 0x6a, 0x62, 0xf8, 0xcf, 0xe8, 0x34, 0xc2, 0xd7, 0x19, 0x63, 0x87, -+ 0x29, 0xc0, 0x2f, 0xaf, 0xb5, 0xd5, 0xcb, 0xd8, 0x9f, 0x27, 0xec, 0xb2, 0x89, 0x09, 0x51, 0xa4, -+ 0x50, 0x06, 0x3f, 0x59, 0x0a, 0x96, 0x70, 0x65, 0x1b, 0x41, 0x72, 0xe6, 0x2f, 0x41, 0x2c, 0x1a, -+ 0x6f, 0x77, 0xec, 0x8e, 0xac, 0xa3, 0x62, 0x22, 0xb6, 0x4d, 0x52, 0xc6, 0xa9, 0x39, 0xcf, 0xd1, -+ 0xaf, 0x88, 0xec, 0xb7, 0xcb, 0x02, 0x02, 0x09, 0xb2, 0x74, 0x96, 0x22, 0x4b, 0xb8, 0x32, 0xca, -+ 0x6e, 0xe2, 0x58, 0x17, 0x9f, 0x08, 0xb8, 0xbb, 0xf7, 0xec, 0x52, 0xb6, 0xea, 0xeb, 0x7f, 0x26, -+ 0xe4, 0x05, 0x4f, 0x8f, 0x37, 0xdb, 0x62, 0x67, 0x2b, 0xf6, 0xf9, 0x76, 0x3d, 0x49, 0x76, 0xbc, -+ 0x2e, 0xbc, 0x53, 0x21, 0xbc, 0x12, 0x48, 0x23, 0x5b, 0xb6, 0xf5, 0x32, 0x42, 0x4a, 0xf3, 0x5a, -+ 0x74, 0xb9, 0xb4, 0x97, 0xd0, 0x79, 0x8e, 0x74, 0xe3, 0xe3, 0x45, 0xe6, 0x40, 0xac, 0xab, 0xbb, -+ 0x45, 0x08, 0x35, 0x10, 0x08, 0x85, 0x15, 0xc4, 0x5c, 0xbd, 0x0e, 0x1f, 0xc2, 0x84, 0x32, 0x51, -+ 0x5a, 0x81, 0xf8, 0x2b, 0x79, 0xc4, 0xd9, 0x0e, 0xf1, 0x80, 0x2e, 0x62, 0x44, 0x32, 0xed, 0xa4, -+ 0x2c, 0xe2, 0xab, 0x8e, 0x88, 0x53, 0x3a, 0xf1, 0x11, 0x9d, 0xf8, 0xa4, 0x56, 0x7c, 0xc2, 0x16, -+ 0x71, 0x02, 0x8e, 0x3b, 0xbc, 0xcf, 0x4b, 0x22, 0xce, 0xea, 0x22, 0x4e, 0x5a, 0xc5, 0x8e, 0x0e, -+ 0xef, 0x93, 0x12, 0xf1, 0x18, 0x11, 0x8e, 0x6a, 0x39, 0xec, 0xcd, 0xed, 0xcd, 0x35, 0x88, 0x53, -+ 0x93, 0xd3, 0xbc, 0x85, 0xc3, 0xae, 0x56, 0x35, 0xd7, 0x94, 0xd2, 0xb7, 0x72, 0x9a, 0xeb, 0x54, -+ 0xcd, 0xa9, 0xa2, 0x66, 0x8d, 0x0a, 0xae, 0xb2, 0xb5, 0x80, 0x39, 0xe2, 0x08, 0x41, 0x0e, 0xc9, -+ 0x23, 0x7a, 0x3b, 0xc2, 0x01, 0x8f, 0x63, 0x34, 0xfc, 0x84, 0x2d, 0x7c, 0xac, 0x43, 0x7c, 0x96, -+ 0xd0, 0x34, 0x37, 0x68, 0x9a, 0x53, 0xa1, 0x17, 0x87, 0x5d, 0x8b, 0x38, 0x9b, 0x63, 0x9b, 0xb7, -+ 0xb4, 0x37, 0xa7, 0x6a, 0xd9, 0x5b, 0x62, 0x9b, 0xab, 0x01, 0x61, 0x6c, 0x73, 0xaa, 0x94, 0xdd, -+ 0x58, 0xda, 0xac, 0x21, 0xd9, 0x56, 0x71, 0xaf, 0x2e, 0xfc, 0x7c, 0x87, 0x18, 0xed, 0xc3, 0x7d, -+ 0x4f, 0x6a, 0xc3, 0x8f, 0x8c, 0xe2, 0x96, 0x93, 0xd6, 0x88, 0x23, 0x6a, 0xf1, 0xd8, 0x68, 0xf8, -+ 0xd9, 0x0e, 0xef, 0x8b, 0x92, 0xf0, 0x41, 0x5d, 0x84, 0x9d, 0xd0, 0xd2, 0xb5, 0x80, 0xb6, 0xd4, -+ 0x50, 0xa7, 0x61, 0xd7, 0xb6, 0x3b, 0x31, 0x18, 0x36, 0x73, 0xd8, 0x5b, 0x65, 0x13, 0x48, 0x7a, -+ 0xc3, 0xbf, 0xea, 0xf0, 0x1e, 0xee, 0x88, 0x38, 0x49, 0x44, 0x9c, 0xd4, 0x46, 0xf4, 0xca, 0xc5, -+ 0x23, 0x1d, 0xe2, 0xf3, 0x84, 0x14, 0x18, 0x06, 0xa2, 0x6c, 0xaa, 0x3b, 0xbd, 0x81, 0xc3, 0x6e, -+ 0xf8, 0xad, 0xee, 0xe7, 0x25, 0xe1, 0x1f, 0xdb, 0xc2, 0xb1, 0x8a, 0x64, 0xd3, 0x8e, 0xc8, 0x23, -+ 0xbe, 0x52, 0xdf, 0x46, 0x33, 0x0d, 0x8d, 0xcd, 0xa9, 0x66, 0x36, 0x28, 0xa7, 0x51, 0xdb, 0x5c, -+ 0xa7, 0x69, 0xae, 0xbd, 0x05, 0xb6, 0x6f, 0x75, 0xe1, 0x23, 0x93, 0xd5, 0xd2, 0xe1, 0x7d, 0x02, -+ 0x63, 0x8b, 0x00, 0x00, 0xd0, 0x3c, 0xda, 0x6a, 0x6a, 0xde, 0x0a, 0x5c, 0xb5, 0xb3, 0x41, 0xb1, -+ 0xd5, 0xf9, 0x94, 0x7e, 0x1a, 0xd9, 0x5b, 0x41, 0x45, 0xe6, 0xe6, 0x06, 0x53, 0x73, 0xaa, 0xb0, -+ 0x79, 0xab, 0x94, 0x5d, 0x1b, 0xcb, 0xde, 0x52, 0x6a, 0xd8, 0x92, 0xc3, 0x7e, 0x38, 0x96, 0x8d, -+ 0x7c, 0x90, 0x1e, 0x84, 0x8a, 0xf8, 0xb8, 0x43, 0x3c, 0xd6, 0xe1, 0x3d, 0x40, 0x44, 0x7c, 0x4b, -+ 0xa4, 0x35, 0xd7, 0x68, 0x9a, 0x6b, 0x4c, 0xcd, 0x75, 0x22, 0xb6, 0xd6, 0xdc, 0xac, 0x31, 0x35, -+ 0x03, 0xfc, 0xd6, 0x52, 0x7a, 0x6d, 0x6c, 0xb3, 0xc6, 0xdc, 0x0c, 0xf8, 0x6b, 0xda, 0xd9, 0x2a, -+ 0x6f, 0x30, 0x00, 0xe0, 0xe7, 0xac, 0x2d, 0x02, 0xc6, 0x68, 0x5c, 0x22, 0x18, 0xd7, 0x7a, 0x9f, -+ 0x24, 0xc5, 0x47, 0xd4, 0x11, 0x23, 0x66, 0xef, 0x01, 0x79, 0xc4, 0x65, 0x22, 0x02, 0xf4, 0x0c, -+ 0xc7, 0x43, 0xa0, 0x34, 0x12, 0x98, 0x0c, 0xbf, 0x40, 0xf8, 0xc0, 0xe9, 0xa9, 0x0e, 0xf1, 0x57, -+ 0x36, 0xdc, 0x7e, 0x9e, 0x08, 0xef, 0x95, 0x0b, 0xd0, 0xbe, 0x88, 0x53, 0xea, 0x88, 0x5e, 0x1b, -+ 0x36, 0x18, 0x0c, 0x69, 0x0e, 0xef, 0xc5, 0x83, 0xe2, 0xd1, 0xed, 0x7e, 0x6a, 0x58, 0xdb, 0x9b, -+ 0x1b, 0xa4, 0x14, 0x03, 0xaa, 0x66, 0xd0, 0xf3, 0x56, 0x34, 0x24, 0x11, 0x8f, 0xa8, 0xc1, 0x48, -+ 0x46, 0x54, 0x1c, 0xc2, 0x82, 0x3e, 0x65, 0x15, 0x08, 0xb5, 0xc5, 0x86, 0xac, 0x6b, 0xd8, 0x42, -+ 0x51, 0x0e, 0x62, 0x0e, 0x13, 0x76, 0x76, 0x98, 0xe9, 0x34, 0x3e, 0x65, 0x9b, 0xbd, 0x11, 0x77, -+ 0xcc, 0xe0, 0x6d, 0xf4, 0x45, 0x0f, 0x59, 0xe4, 0xe9, 0xbf, 0x42, 0xd3, 0xa3, 0xe8, 0x24, 0x32, -+ 0x69, 0x17, 0xa2, 0x31, 0x95, 0x41, 0xc7, 0xb0, 0xd2, 0xec, 0x36, 0xd6, 0x74, 0x09, 0x5a, 0x38, -+ 0x62, 0x49, 0x3e, 0x82, 0x3b, 0xf8, 0xf4, 0xa7, 0xf5, 0x18, 0x32, 0x06, 0x15, 0xe9, 0xad, 0xf4, -+ 0x4c, 0x8b, 0x62, 0x61, 0x97, 0x2e, 0xa3, 0x47, 0x91, 0xd9, 0x4d, 0x4f, 0x6f, 0xa3, 0xa7, 0x77, -+ 0x11, 0xe9, 0x9d, 0x86, 0xcc, 0x4e, 0x38, 0x56, 0x84, 0x0d, 0x29, 0x32, 0x06, 0xe9, 0x99, 0x5d, -+ 0xba, 0x74, 0xab, 0x22, 0xac, 0x4b, 0x91, 0x66, 0xa7, 0xcf, 0x47, 0xe7, 0x85, 0x82, 0x0b, 0x52, -+ 0x9f, 0x73, 0x48, 0x78, 0xd6, 0x24, 0xf8, 0x41, 0x28, 0x38, 0x6d, 0x15, 0x9c, 0xb3, 0xb3, 0xae, -+ 0x08, 0x05, 0xdf, 0x58, 0x05, 0x15, 0x52, 0xc1, 0xa8, 0x15, 0x5f, 0x45, 0x99, 0x83, 0x8a, 0xcc, -+ 0x36, 0xba, 0xac, 0xdd, 0x90, 0x61, 0x54, 0x2c, 0x00, 0x3c, 0xd6, 0xbe, 0x05, 0x9d, 0x86, 0x05, -+ 0x76, 0x45, 0xfa, 0x20, 0xdd, 0x21, 0xf8, 0xde, 0x21, 0xa8, 0x80, 0x5e, 0x42, 0xc1, 0x79, 0x24, -+ 0xbc, 0xa0, 0x14, 0xfc, 0x20, 0xf5, 0xa9, 0x40, 0x3e, 0x97, 0x95, 0x82, 0x33, 0x80, 0x50, 0x29, -+ 0xa8, 0x50, 0x09, 0xc6, 0xed, 0x82, 0x51, 0x99, 0x40, 0x9b, 0x6e, 0xa4, 0x2f, 0x18, 0x52, 0xa4, -+ 0x23, 0xe3, 0x82, 0x1e, 0x45, 0x18, 0x74, 0x6f, 0xef, 0xcb, 0xb8, 0x35, 0x27, 0x17, 0xc7, 0x05, -+ 0x15, 0x0e, 0xc1, 0xa8, 0x43, 0xf0, 0x83, 0x9d, 0x75, 0x1e, 0xf9, 0x54, 0xe0, 0xee, 0x3e, 0x63, -+ 0xa8, 0x5d, 0x91, 0x66, 0xe9, 0xcb, 0x00, 0x36, 0xba, 0xfb, 0x16, 0x74, 0xd9, 0x32, 0x3a, 0xfb, -+ 0xd2, 0xbb, 0x15, 0xe9, 0x26, 0x45, 0xd8, 0x18, 0xb0, 0xd1, 0x07, 0x98, 0xc3, 0xda, 0xe9, 0x19, -+ 0x5d, 0xf2, 0x05, 0x46, 0x7a, 0xa6, 0x99, 0xae, 0xc2, 0x9c, 0x03, 0x75, 0x34, 0x2a, 0xf8, 0x1e, -+ 0xc4, 0x21, 0x7d, 0x46, 0x91, 0xcf, 0xb8, 0x49, 0x70, 0x51, 0x23, 0xb8, 0x19, 0x9b, 0x22, 0xd3, -+ 0x42, 0x5f, 0xd0, 0x45, 0x80, 0xc6, 0xe6, 0x77, 0xd3, 0x33, 0xdb, 0x0c, 0x80, 0x64, 0x3e, 0x60, -+ 0x1b, 0x01, 0x00, 0xc5, 0x7c, 0x13, 0x5d, 0x06, 0xb2, 0x60, 0xae, 0x7e, 0x90, 0xf9, 0x8c, 0x4a, -+ 0x05, 0xff, 0xb0, 0xb3, 0xc6, 0x49, 0x9f, 0xef, 0x65, 0x3e, 0xe7, 0xa4, 0x82, 0x2b, 0xe3, 0x82, -+ 0xcb, 0x76, 0xd6, 0x69, 0xa5, 0xcf, 0x79, 0x95, 0xe0, 0x1c, 0xe9, 0x53, 0x21, 0xf5, 0xf9, 0xc6, -+ 0x0c, 0x90, 0x0e, 0x42, 0x66, 0x57, 0xa4, 0x0d, 0xf6, 0x81, 0xf2, 0x33, 0xbb, 0x6c, 0x69, 0x56, -+ 0x45, 0x26, 0xfa, 0x5a, 0x29, 0xb8, 0xa8, 0x14, 0x5c, 0x36, 0x09, 0xce, 0x20, 0x21, 0xe8, 0xf6, -+ 0xb2, 0x46, 0x70, 0x4e, 0xe6, 0x03, 0x9a, 0x01, 0xa5, 0x5d, 0x51, 0x62, 0x5d, 0xfd, 0x80, 0x0e, -+ 0xe8, 0x32, 0xda, 0x80, 0x1f, 0x43, 0xc6, 0x88, 0x02, 0x86, 0x6c, 0x61, 0x3f, 0x11, 0x61, 0x91, -+ 0x87, 0x19, 0x15, 0xe9, 0x43, 0xf4, 0x30, 0x40, 0x32, 0xa8, 0x58, 0x68, 0xa5, 0x67, 0xf6, 0xc0, -+ 0x31, 0xa5, 0x31, 0x23, 0x30, 0x69, 0xc8, 0x74, 0x10, 0x70, 0xba, 0xa0, 0xad, 0x6f, 0x41, 0x37, -+ 0x86, 0xc9, 0x30, 0x03, 0x51, 0x42, 0x36, 0x6c, 0x00, 0x55, 0xa4, 0xb5, 0x03, 0x92, 0x5b, 0xea, -+ 0xf6, 0x47, 0xf8, 0xb6, 0xb3, 0x7e, 0x18, 0x17, 0x9c, 0xa7, 0x18, 0xb8, 0x30, 0x8e, 0xb5, 0xe1, -+ 0x19, 0x9a, 0xb0, 0x96, 0x28, 0xb4, 0xc7, 0x9b, 0x35, 0x03, 0x79, 0x29, 0x2b, 0x64, 0xcf, 0x60, -+ 0xc3, 0x9a, 0x86, 0x92, 0xd0, 0x74, 0xd9, 0x49, 0x6d, 0x1a, 0x3e, 0x59, 0x84, 0x1e, 0x41, 0x39, -+ 0xb2, 0xb7, 0x74, 0x8d, 0x4e, 0x83, 0xec, 0xf4, 0x66, 0x44, 0xa2, 0x0d, 0x16, 0xf9, 0x76, 0x9a, -+ 0x83, 0xaf, 0x27, 0x39, 0x27, 0xd0, 0x49, 0x6d, 0x8e, 0x5c, 0xc8, 0x90, 0x87, 0xca, 0xc2, 0x5a, -+ 0x66, 0xa2, 0x8f, 0x55, 0x0a, 0x39, 0x13, 0x1f, 0x3f, 0x96, 0x8b, 0x3e, 0x26, 0x73, 0xe8, 0xa5, -+ 0x86, 0x02, 0xa6, 0x35, 0x84, 0x41, 0xf8, 0x75, 0x12, 0xa2, 0x72, 0xe5, 0xeb, 0x28, 0xcd, 0x40, -+ 0xca, 0xf4, 0x29, 0xa4, 0xc1, 0x9b, 0x17, 0x84, 0x36, 0x08, 0x19, 0x39, 0x26, 0xd6, 0xb8, 0xa5, -+ 0x63, 0x10, 0xf0, 0xa4, 0xc6, 0xae, 0x41, 0x7b, 0xe5, 0x42, 0x52, 0x1e, 0xea, 0xb0, 0xb1, 0x8a, -+ 0xbd, 0xb4, 0xc9, 0x1c, 0xda, 0xf4, 0x1c, 0xba, 0xf0, 0x0b, 0x95, 0xc6, 0xc9, 0x83, 0x2f, 0x09, -+ 0xae, 0x1d, 0xdd, 0x09, 0x3e, 0x1e, 0x96, 0x3b, 0xe4, 0xbf, 0x4d, 0x26, 0x8a, 0x66, 0xf4, 0x1b, -+ 0x3b, 0xa4, 0xdb, 0xb8, 0x7d, 0xba, 0x48, 0x7f, 0x5a, 0xb1, 0x5e, 0xc8, 0xf1, 0xdf, 0xa6, 0x52, -+ 0x47, 0x33, 0x6c, 0x46, 0xf3, 0xd3, 0xd2, 0xb4, 0xa3, 0x52, 0x79, 0xa3, 0x99, 0x2b, 0x4f, 0x91, -+ 0x37, 0x76, 0x72, 0x7b, 0x93, 0x97, 0x71, 0x9e, 0xe7, 0xf6, 0xfa, 0x2f, 0x13, 0x3d, 0xcf, 0x7d, -+ 0x46, 0x9a, 0xb1, 0x72, 0xae, 0xbc, 0xf1, 0x00, 0xd7, 0x96, 0x22, 0xb1, 0x44, 0x33, 0x3e, 0x37, -+ 0xa2, 0x67, 0x84, 0x2a, 0x7f, 0x63, 0xcc, 0xb3, 0x64, 0xc6, 0x49, 0xa3, 0xea, 0x59, 0xa1, 0x06, -+ 0x70, 0xbf, 0xa9, 0xe1, 0xb0, 0xb7, 0x88, 0xd8, 0x75, 0x16, 0xfa, 0xfc, 0x52, 0xc3, 0x56, 0x4d, -+ 0x73, 0x3d, 0x38, 0xcd, 0x6e, 0x36, 0xf8, 0xcd, 0xcd, 0x39, 0xec, 0x86, 0xfd, 0xec, 0x87, 0x4a, -+ 0x0d, 0xb5, 0x9a, 0xe6, 0xad, 0x23, 0x52, 0x36, 0xe8, 0xf4, 0x3b, 0x33, 0xfe, 0xfe, 0x46, 0xcb, -+ 0xde, 0x0a, 0xff, 0xa4, 0xec, 0x1a, 0x38, 0x16, 0xb2, 0x37, 0x9b, 0x61, 0xb9, 0x70, 0x9f, 0xaa, -+ 0xd8, 0x75, 0x66, 0xf6, 0x66, 0x19, 0xbb, 0xc2, 0x24, 0xa8, 0x26, 0xd9, 0x8d, 0x70, 0x09, 0xbe, -+ 0xed, 0xac, 0x8b, 0x70, 0xd5, 0xd9, 0x2e, 0xf5, 0xc2, 0x2d, 0x96, 0x7d, 0x6a, 0xf6, 0x66, 0x4b, -+ 0xf3, 0x66, 0x8d, 0x61, 0x33, 0xf8, 0x2f, 0x0e, 0x1b, 0x96, 0x0d, 0xf8, 0x7e, 0x91, 0x6d, 0xe4, -+ 0x7c, 0x04, 0x4b, 0xf2, 0x0e, 0x0e, 0x37, 0x54, 0x92, 0xb7, 0xfc, 0x97, 0xd1, 0xa6, 0x47, 0xde, -+ 0x39, 0x9a, 0x90, 0x39, 0xff, 0xda, 0xc7, 0x7f, 0xf9, 0xc7, 0x2f, 0x57, 0xfe, 0xf1, 0xeb, 0x9e, -+ 0x37, 0xbe, 0x1e, 0x1f, 0xef, 0xbe, 0xc6, 0x7b, 0xef, 0xa3, 0xcb, 0x0d, 0xcf, 0xc4, 0x3d, 0x7a, -+ 0xf0, 0xef, 0x17, 0x6b, 0x47, 0xfe, 0xbd, 0xe6, 0xa9, 0x73, 0x17, 0x93, 0xfe, 0x75, 0x78, 0xf9, -+ 0x7b, 0xff, 0xb8, 0x7a, 0xdf, 0xb1, 0xc5, 0x0f, 0xee, 0x3e, 0x57, 0xf6, 0xe0, 0xea, 0x85, 0x8f, -+ 0xbe, 0x7b, 0xf4, 0xca, 0xe7, 0x99, 0x73, 0x12, 0x0e, 0x1d, 0xfd, 0xe1, 0x97, 0x57, 0x1f, 0x49, -+ 0xf8, 0xbc, 0x3c, 0xe9, 0x8b, 0x57, 0x2f, 0x2e, 0xff, 0xe4, 0xef, 0x67, 0xfe, 0x35, 0xf2, 0x6f, -+ 0xfd, 0xa1, 0xbe, 0xba, 0x1f, 0xee, 0xff, 0xea, 0x91, 0x2f, 0x3f, 0xbc, 0xf8, 0x46, 0xda, 0x77, -+ 0xd1, 0x8f, 0x7e, 0x57, 0xbc, 0xe5, 0xe4, 0xde, 0x86, 0x5d, 0x0d, 0x39, 0x32, 0x21, 0x5f, 0x23, -+ 0x85, 0x10, 0x83, 0x01, 0x2a, 0x97, 0x23, 0x29, 0xd9, 0xa1, 0x17, 0x73, 0x04, 0xaf, 0xb4, 0x25, -+ 0xa5, 0x21, 0xc4, 0x41, 0xce, 0x66, 0x12, 0xd1, 0x54, 0x39, 0x3f, 0xb2, 0xec, 0x34, 0x86, 0xd6, -+ 0x13, 0xb5, 0x08, 0x91, 0xe2, 0x4f, 0x8b, 0xac, 0x62, 0x12, 0xb1, 0xdc, 0x2d, 0x5a, 0x24, 0x5a, -+ 0xf1, 0x25, 0x2d, 0x90, 0x20, 0x64, 0x1e, 0x20, 0x86, 0xd5, 0xb4, 0x31, 0x7c, 0x3f, 0x97, 0xf3, -+ 0x18, 0xc4, 0x2d, 0x54, 0x2b, 0x8d, 0x44, 0xdb, 0x56, 0x5e, 0x77, 0xac, 0xe4, 0x48, 0x31, 0x5e, -+ 0x82, 0xc2, 0x43, 0x48, 0x3b, 0x37, 0x72, 0x8f, 0x12, 0x34, 0x95, 0xa7, 0x1b, 0x47, 0x2b, 0xf9, -+ 0x34, 0x3f, 0x2e, 0x90, 0xc6, 0x67, 0xb9, 0xba, 0x31, 0x64, 0x88, 0xff, 0xca, 0x29, 0xda, 0x49, -+ 0xa1, 0x2a, 0x0d, 0x23, 0x71, 0xb3, 0x74, 0x2e, 0x58, 0xc9, 0x44, 0xbe, 0x34, 0x0a, 0x0f, 0x60, -+ 0x03, 0x96, 0x66, 0x7d, 0x9e, 0x33, 0x9f, 0x44, 0x7e, 0x53, 0x58, 0x1a, 0xb8, 0x4c, 0x50, 0x52, -+ 0x60, 0x69, 0x64, 0x98, 0xa5, 0xdc, 0x8c, 0xbd, 0x4c, 0x8e, 0xab, 0x13, 0x85, 0x6a, 0xdb, 0xca, -+ 0x71, 0xb9, 0x11, 0xba, 0xf3, 0x70, 0x0f, 0x44, 0x81, 0xe5, 0x94, 0x0b, 0x63, 0xf7, 0x6e, 0x21, -+ 0x90, 0x89, 0x49, 0xc3, 0xf1, 0x78, 0x52, 0x44, 0xbb, 0x28, 0xc4, 0x37, 0xcf, 0xd4, 0xca, 0x8d, -+ 0xbe, 0x63, 0x80, 0xa1, 0xa0, 0x1d, 0xe9, 0x10, 0xee, 0x30, 0xf3, 0x73, 0x55, 0x0c, 0x15, 0x4b, -+ 0xbb, 0x2d, 0x44, 0xeb, 0x8b, 0x36, 0xf2, 0xa4, 0x66, 0x21, 0xaf, 0x88, 0x61, 0x3e, 0xbd, 0xa1, -+ 0x4a, 0xf2, 0xe9, 0x17, 0x6f, 0x79, 0x7f, 0x42, 0xe7, 0xed, 0x37, 0xf1, 0x5e, 0x60, 0x60, 0xb0, -+ 0x0e, 0xd1, 0x91, 0x0e, 0x32, 0x77, 0x5f, 0xec, 0x91, 0x7d, 0x07, 0xd2, 0xb7, 0xbc, 0x7c, 0x3d, -+ 0xdc, 0x3f, 0x26, 0x2a, 0xf7, 0xad, 0x2f, 0xa4, 0x96, 0xb7, 0xe6, 0xce, 0x5d, 0x9b, 0x69, 0xde, -+ 0x4b, 0x57, 0x7f, 0x78, 0xe9, 0xcc, 0xb3, 0x51, 0x77, 0xc5, 0x86, 0x13, 0x66, 0x55, 0x9c, 0xd2, -+ 0xfa, 0xcb, 0x93, 0x4b, 0xfa, 0xc8, 0xe8, 0xc2, 0x86, 0x01, 0xc3, 0xe7, 0x3f, 0x2b, 0xd6, 0x05, -+ 0x1f, 0xf9, 0x6a, 0x5d, 0xc3, 0xd6, 0x91, 0xe2, 0xee, 0xd7, 0xde, 0xbd, 0x1a, 0x75, 0xf8, 0x8f, -+ 0xde, 0x83, 0xa1, 0xd7, 0x3e, 0x5c, 0xb9, 0xff, 0xbb, 0xb0, 0x3f, 0x6c, 0x22, 0x5e, 0xfe, 0x34, -+ 0xb8, 0xa8, 0x59, 0xf8, 0xce, 0xb2, 0x94, 0x4b, 0x7f, 0xd3, 0x88, 0x5f, 0x3c, 0xfe, 0xef, 0xea, -+ 0x7c, 0xef, 0xb1, 0x1f, 0xcf, 0x7f, 0x9e, 0x31, 0xbe, 0xfe, 0xed, 0x2a, 0xf9, 0xe8, 0x01, 0x45, -+ 0x4f, 0x15, 0x73, 0xeb, 0xb9, 0xef, 0xc5, 0xe2, 0xac, 0x55, 0xef, 0xdc, 0xb3, 0x45, 0xfa, 0x4b, -+ 0xfb, 0xdf, 0xbf, 0xb7, 0xd5, 0x7d, 0xb2, 0x7b, 0x51, 0x7e, 0xf0, 0x31, 0xf9, 0x37, 0xe1, 0xab, -+ 0xbe, 0x78, 0x67, 0x38, 0x29, 0xef, 0x93, 0x24, 0xc7, 0x03, 0x73, 0xd7, 0x7e, 0x29, 0x9b, 0x77, -+ 0xf8, 0x97, 0x2f, 0xe9, 0xab, 0x5f, 0xfc, 0x65, 0x77, 0xe0, 0xc9, 0xf4, 0x88, 0x3b, 0xd6, 0xc8, -+ 0xfe, 0x3d, 0xcc, 0xa8, 0x1e, 0xbd, 0xf2, 0xe8, 0xbb, 0xbf, 0x36, 0xfd, 0x12, 0x2c, 0x6f, 0x10, -+ 0x2f, 0x7f, 0xf2, 0xa1, 0xfa, 0xfa, 0x96, 0xfa, 0xbd, 0x25, 0xcd, 0xb5, 0xf7, 0x16, 0xdf, 0x3d, -+ 0xb3, 0xec, 0xf8, 0x97, 0x31, 0x19, 0x8b, 0xbf, 0x1b, 0x3f, 0xfd, 0xf7, 0xf0, 0xa7, 0x8e, 0xa9, -+ 0x96, 0xdc, 0xd1, 0xb8, 0x9c, 0xbe, 0xe6, 0xeb, 0xb2, 0x7c, 0xc1, 0x4f, 0x6b, 0x3a, 0x8f, 0x65, -+ 0x6a, 0xee, 0x79, 0xf7, 0xac, 0xbc, 0x23, 0x72, 0xd5, 0xe5, 0xbc, 0x26, 0xcb, 0xf0, 0xf5, 0xb9, -+ 0x41, 0xf7, 0xa5, 0xbf, 0xac, 0x58, 0xa3, 0x6d, 0xb8, 0x14, 0xdd, 0xa7, 0x2e, 0x2f, 0x3b, 0x15, -+ 0xd1, 0x2c, 0x1e, 0x3e, 0x2a, 0x0e, 0x1f, 0x4c, 0x6b, 0xfb, 0x6b, 0x7d, 0xec, 0x17, 0x7b, 0xd8, -+ 0x3f, 0x12, 0x11, 0xc7, 0x4f, 0x66, 0x97, 0x07, 0x2c, 0xaf, 0x67, 0x31, 0x1b, 0x1a, 0x1e, 0xca, -+ 0x7f, 0xbf, 0xf9, 0x9b, 0x57, 0xe2, 0xff, 0xae, 0xf9, 0xf4, 0x7c, 0x4d, 0x7f, 0xe1, 0xf2, 0x27, -+ 0x3f, 0xed, 0xce, 0x34, 0xac, 0xda, 0xf3, 0x43, 0x8f, 0xf7, 0xf9, 0x47, 0xbf, 0x5e, 0x3c, 0x5f, -+ 0x53, 0x35, 0x7e, 0xc7, 0x8f, 0x8e, 0x2f, 0xab, 0xef, 0x3d, 0x47, 0x0f, 0xbd, 0xa2, 0xbe, 0x2f, -+ 0x40, 0x29, 0xaa, 0x5b, 0x7d, 0x8f, 0xfd, 0xfa, 0x5f, 0xd6, 0xdf, 0xad, 0xce, 0x6c, 0xb0, 0xb4, -+ 0x35, 0xfd, 0xeb, 0x8e, 0xaf, 0x7f, 0x0e, 0x3e, 0xfb, 0xd7, 0xe0, 0x4f, 0xaa, 0xc9, 0xde, 0xcf, -+ 0xd6, 0x98, 0x69, 0x74, 0x11, 0x1e, 0xcc, 0x83, 0xf0, 0xdd, 0x0e, 0xbf, 0xc9, 0x1c, 0xad, 0xb8, -+ 0x7f, 0x54, 0x5c, 0x12, 0x40, 0x64, 0xb6, 0x28, 0xd2, 0x8c, 0x7d, 0xad, 0x59, 0x54, 0x24, 0x52, -+ 0xdb, 0x5e, 0xcd, 0x87, 0xb5, 0xe8, 0x3b, 0x70, 0xd8, 0x5a, 0x41, 0x32, 0x3f, 0x0b, 0x16, 0xff, -+ 0x70, 0x08, 0x3d, 0x4a, 0xa4, 0x4c, 0x0a, 0xcc, 0x10, 0x36, 0x44, 0xc7, 0x8b, 0x24, 0x2c, 0xbf, -+ 0x43, 0x8d, 0xad, 0x10, 0x94, 0x3d, 0x08, 0x8e, 0x23, 0xa7, 0x59, 0xa3, 0x61, 0x6f, 0xd5, 0xd0, -+ 0x37, 0x37, 0x42, 0x70, 0xd7, 0x1c, 0x32, 0xe4, 0x2b, 0xb8, 0x60, 0x12, 0x8c, 0x4a, 0x7d, 0x2a, -+ 0xa5, 0x3e, 0x67, 0xc6, 0x05, 0xe3, 0x4a, 0x41, 0xb2, 0xb0, 0x3f, 0xfc, 0x2b, 0x08, 0x0a, 0x24, -+ 0xe1, 0xbd, 0xea, 0x88, 0x12, 0xe9, 0xf6, 0x05, 0x3d, 0xd4, 0xa2, 0xda, 0x45, 0xcf, 0x80, 0xc5, -+ 0x1c, 0xbb, 0xe4, 0xf1, 0x80, 0xcd, 0x2a, 0xf6, 0x83, 0xa5, 0xec, 0x79, 0xa5, 0x10, 0x72, 0xb2, -+ 0xe7, 0x69, 0x71, 0x50, 0x83, 0xe3, 0xcd, 0x58, 0xf6, 0xe6, 0xab, 0x4c, 0x40, 0xdb, 0xa0, 0x6d, -+ 0x5e, 0x0f, 0xe1, 0x92, 0x08, 0x42, 0x1b, 0x08, 0x2a, 0x75, 0x71, 0xb0, 0x72, 0x5e, 0x74, 0x08, -+ 0x7e, 0xc4, 0x8b, 0x36, 0xbd, 0x60, 0x10, 0x07, 0x59, 0xe2, 0x21, 0xea, 0xfb, 0x94, 0x5a, 0x7c, -+ 0x44, 0x22, 0xee, 0xd7, 0x85, 0x1f, 0x51, 0xb3, 0x3e, 0x33, 0xc1, 0x82, 0xa9, 0x48, 0x6f, 0xa7, -+ 0xbe, 0xbb, 0xfb, 0xd2, 0xda, 0x14, 0x69, 0x2d, 0x74, 0x58, 0x46, 0x12, 0x80, 0xe8, 0x35, 0xfd, -+ 0x82, 0x61, 0xfa, 0x02, 0x4b, 0x1f, 0xff, 0xc3, 0xb2, 0x66, 0x4d, 0x3e, 0xc4, 0x53, 0x86, 0xba, -+ 0x52, 0x76, 0xa3, 0x0a, 0x42, 0xaa, 0xe6, 0x3a, 0x73, 0x73, 0xc8, 0xc7, 0xf7, 0xf8, 0x5c, 0xa4, -+ 0xd6, 0x76, 0x08, 0x16, 0xce, 0xc0, 0x7a, 0x48, 0x0a, 0x60, 0xc1, 0x4f, 0x26, 0x63, 0xc3, 0x4f, -+ 0xd9, 0x70, 0x2c, 0x76, 0x42, 0x22, 0x3e, 0xa5, 0x8b, 0x38, 0xe5, 0x10, 0x9f, 0x1d, 0x0d, 0xff, -+ 0x96, 0x88, 0x28, 0x11, 0xdd, 0x8d, 0x97, 0xd0, 0xbd, 0xb0, 0x22, 0x29, 0x23, 0x5d, 0x82, 0x40, -+ 0x28, 0xd4, 0xc8, 0x6e, 0x6c, 0xbf, 0x3b, 0xef, 0x8a, 0xc9, 0x07, 0x6b, 0x20, 0x62, 0x23, 0x15, -+ 0xdb, 0x4a, 0xc2, 0x21, 0xbc, 0x7a, 0x84, 0xc0, 0xe1, 0xf9, 0x90, 0x24, 0x7c, 0x5c, 0xcd, 0x5a, -+ 0xd9, 0x64, 0x48, 0x1b, 0xea, 0x5b, 0x60, 0x51, 0x64, 0x82, 0x42, 0xae, 0xf5, 0x66, 0x9c, 0x55, -+ 0x2c, 0x68, 0x81, 0xd3, 0xbe, 0xd6, 0xc3, 0x3c, 0x1c, 0x3e, 0x37, 0x00, 0x3f, 0xe0, 0x16, 0x63, -+ 0xd9, 0x35, 0xed, 0xba, 0xb5, 0x67, 0x60, 0x71, 0x83, 0x00, 0x04, 0x87, 0x1e, 0x33, 0x6c, 0x27, -+ 0x20, 0xc6, 0x1f, 0x0d, 0x1e, 0x19, 0x0d, 0xff, 0x0a, 0x18, 0xc8, 0x09, 0x59, 0x60, 0x31, 0x64, -+ 0x76, 0x19, 0xc2, 0x8c, 0x7d, 0x69, 0xad, 0xb0, 0x96, 0xf6, 0x65, 0x74, 0xdb, 0x70, 0xb0, 0x30, -+ 0x4c, 0xcf, 0x18, 0xca, 0xe9, 0xaa, 0x86, 0xe8, 0x55, 0xc5, 0xae, 0xa6, 0xe2, 0xcd, 0x90, 0xbf, -+ 0x0d, 0x08, 0x2e, 0xa8, 0x7c, 0xbe, 0x73, 0xe0, 0xe5, 0xfd, 0x1c, 0x2c, 0x92, 0xa4, 0xcf, 0x4f, -+ 0x4a, 0x41, 0xa5, 0x50, 0x70, 0x46, 0x2a, 0x80, 0xd3, 0x1f, 0x1c, 0xac, 0x6f, 0x1c, 0x82, 0xb3, -+ 0x4a, 0xc1, 0x55, 0xa9, 0x62, 0xf4, 0xa4, 0x04, 0x87, 0xb4, 0xe3, 0x04, 0xc5, 0xb9, 0x7a, 0xc9, -+ 0xf0, 0x17, 0x7d, 0x69, 0x46, 0xac, 0xb4, 0x84, 0x11, 0x05, 0x04, 0x0e, 0xf3, 0x5b, 0x14, 0xf3, -+ 0x41, 0x6a, 0xbb, 0x62, 0xe1, 0x50, 0x7e, 0x06, 0xc4, 0xc5, 0x10, 0x14, 0x37, 0xe4, 0xb0, 0xb7, -+ 0x3a, 0x83, 0x56, 0x84, 0xb6, 0xc0, 0xde, 0xe9, 0xef, 0xe0, 0x55, 0x6a, 0x22, 0x72, 0x48, 0x45, -+ 0x0b, 0x3f, 0x84, 0x5b, 0x93, 0x94, 0x43, 0xce, 0xd0, 0xb5, 0xee, 0xde, 0x7d, 0x3c, 0xdb, 0x2c, -+ 0x8c, 0x2d, 0xca, 0x48, 0x4c, 0xca, 0x7a, 0xcc, 0x24, 0x79, 0x61, 0x84, 0x55, 0xaa, 0x6c, 0x00, -+ 0xf8, 0x6b, 0x66, 0xf6, 0x02, 0xdf, 0xc1, 0xac, 0xd0, 0x76, 0xe2, 0x32, 0x8b, 0x1e, 0x1e, 0x90, -+ 0x37, 0x63, 0xe6, 0xb2, 0x68, 0xef, 0x66, 0x59, 0x0a, 0x3d, 0x31, 0xee, 0x73, 0x29, 0x5f, 0xbe, -+ 0xc2, 0x9b, 0x57, 0x2d, 0x1a, 0x54, 0xe6, 0x33, 0x13, 0x4a, 0xab, 0x2a, 0x8a, 0x13, 0x3c, 0x9b, -+ 0xdf, 0x84, 0x86, 0xaa, 0x9a, 0x4d, 0xb5, 0x1a, 0x75, 0x61, 0x71, 0x82, 0xba, 0xb2, 0xa8, 0xa6, -+ 0xaa, 0xac, 0xa8, 0x26, 0xa1, 0xbc, 0xaa, 0x72, 0x83, 0xba, 0x32, 0x61, 0x53, 0x71, 0x4d, 0x65, -+ 0x71, 0x79, 0x42, 0x79, 0x59, 0x65, 0x7d, 0xe3, 0x9c, 0xb9, 0xf1, 0x29, 0x09, 0x45, 0x35, 0x65, -+ 0x9b, 0x8b, 0x6b, 0x6a, 0x13, 0x2a, 0x8b, 0xeb, 0x12, 0x1a, 0xca, 0x6a, 0x8a, 0xcb, 0x8b, 0x6b, -+ 0x6b, 0x13, 0xea, 0x1b, 0x8a, 0xe7, 0xa6, 0x26, 0x25, 0x25, 0xd4, 0x57, 0x96, 0xd5, 0x56, 0x15, -+ 0x36, 0x14, 0x56, 0x26, 0x68, 0xca, 0xd5, 0x75, 0x25, 0x55, 0x35, 0x15, 0x09, 0x0d, 0x37, 0xa4, -+ 0x22, 0x0a, 0xff, 0x7b, 0xda, 0x55, 0xf5, 0x75, 0x6e, 0xfa, 0x05, 0xf5, 0x65, 0xe5, 0x45, 0x72, -+ 0xe7, 0x75, 0x32, 0x36, 0x75, 0xee, 0xbc, 0xe4, 0xb9, 0x49, 0x29, 0x64, 0x81, 0xba, 0xb6, 0xb8, -+ 0x88, 0xac, 0xaa, 0x24, 0x6b, 0x92, 0xd3, 0x92, 0xd3, 0xa5, 0x49, 0x05, 0x33, 0xc9, 0xc2, 0x72, -+ 0x75, 0xe5, 0x06, 0x12, 0x73, 0x58, 0x06, 0xed, 0x89, 0x89, 0xf1, 0xd2, 0xf8, 0x24, 0x32, 0xb6, -+ 0xb4, 0xae, 0x4e, 0x53, 0x3b, 0x3f, 0xc1, 0x4d, 0x21, 0x7e, 0x43, 0x55, 0xd5, 0x06, 0x60, 0xbc, -+ 0xaa, 0xbe, 0xa6, 0xb0, 0x38, 0xbe, 0xb0, 0xaa, 0x22, 0xa1, 0xae, 0xaa, 0xaa, 0xbc, 0xb0, 0x54, -+ 0x5d, 0x56, 0x99, 0x50, 0x5e, 0xbe, 0xb9, 0x62, 0x8e, 0xa6, 0xa6, 0x6a, 0x63, 0x71, 0x61, 0x1d, -+ 0x59, 0x90, 0x9c, 0x3e, 0xaf, 0x24, 0x2d, 0x51, 0x9a, 0x2a, 0x2d, 0x2c, 0x4e, 0x2d, 0x9a, 0x27, -+ 0x4d, 0x94, 0xa6, 0x24, 0x15, 0xcc, 0x4b, 0x4b, 0x4a, 0x9c, 0x97, 0x54, 0x5c, 0x94, 0x98, 0x5c, -+ 0x50, 0x5c, 0x9c, 0x96, 0x9e, 0x56, 0x30, 0x2f, 0x7d, 0xe6, 0xa6, 0xff, 0x41, 0x3d, 0xdd, 0x44, -+ 0xba, 0xac, 0xb2, 0xb0, 0xbc, 0xbe, 0xa8, 0xd8, 0xd9, 0x92, 0x50, 0xb7, 0x45, 0x53, 0x5c, 0x1b, -+ 0x5f, 0x5a, 0x5f, 0x56, 0x59, 0x97, 0x9c, 0xb4, 0xbe, 0xee, 0xb6, 0xd0, 0xea, 0xda, 0x8a, 0x39, -+ 0x1b, 0x8a, 0x2b, 0x81, 0x7a, 0x21, 0xb4, 0xd5, 0xcd, 0x29, 0x2f, 0x4f, 0x4d, 0x81, 0x6e, 0xc9, -+ 0x49, 0xb7, 0xed, 0x51, 0xaf, 0xd6, 0x94, 0xdd, 0xa6, 0xdb, 0xfa, 0xf5, 0xd0, 0xb1, 0xbe, 0xb2, -+ 0xb6, 0x6c, 0x43, 0x25, 0x8c, 0x10, 0xb4, 0x67, 0x37, 0xa8, 0x6b, 0x4a, 0xc8, 0xfb, 0x9c, 0xe3, -+ 0x92, 0x5d, 0x5c, 0x50, 0xbf, 0x81, 0xbc, 0xb3, 0xb2, 0xa4, 0xca, 0xdd, 0xd2, 0x00, 0xca, 0xaf, -+ 0x59, 0x5f, 0x5b, 0xb6, 0xb5, 0x58, 0x51, 0x53, 0x55, 0x5b, 0x3b, 0x27, 0xfb, 0x9e, 0xbb, 0x20, -+ 0x7c, 0xb9, 0x13, 0xfe, 0x91, 0x0a, 0x75, 0x65, 0x55, 0x65, 0x59, 0xa1, 0xba, 0x9c, 0xcc, 0xad, -+ 0xaf, 0xd0, 0x90, 0x2b, 0xd5, 0x05, 0xa0, 0xca, 0xc5, 0x95, 0xf8, 0xe7, 0x1e, 0x4d, 0x79, 0x59, -+ 0x5d, 0xde, 0xca, 0xbb, 0xee, 0xad, 0x2c, 0xab, 0x03, 0x1a, 0x58, 0xc4, 0xb4, 0xf5, 0x75, 0xf5, -+ 0x69, 0x40, 0x3d, 0xcd, 0x43, 0x1c, 0x63, 0x2e, 0x02, 0xc5, 0x82, 0x35, 0xd5, 0x14, 0xd7, 0xad, -+ 0x5f, 0xb3, 0xf2, 0x9e, 0x25, 0x65, 0xca, 0xd2, 0x7b, 0xd6, 0x2f, 0x76, 0x1d, 0x6e, 0x86, 0xc3, -+ 0x78, 0x4a, 0x02, 0x58, 0x4b, 0xb6, 0x16, 0x17, 0xd5, 0x96, 0xaa, 0x0b, 0xea, 0x4b, 0xea, 0x2a, -+ 0x34, 0x65, 0x6e, 0x58, 0x0f, 0xe4, 0x14, 0xb8, 0xc2, 0xba, 0x46, 0x00, 0x4d, 0x9a, 0x9b, 0xba, -+ 0x1e, 0x8e, 0x8a, 0xd4, 0x75, 0x6a, 0xfc, 0x57, 0x5e, 0x5c, 0x59, 0x50, 0x56, 0x07, 0xdf, 0x98, -+ 0x97, 0xd4, 0x14, 0x60, 0x06, 0xbe, 0xd6, 0xc3, 0x17, 0x1e, 0x2a, 0x92, 0xfa, 0x9a, 0xac, 0x95, -+ 0xda, 0x3a, 0x75, 0x5d, 0x31, 0xcc, 0xdb, 0x25, 0xc5, 0xce, 0xd0, 0x41, 0xaa, 0xb7, 0x17, 0xcd, -+ 0xe0, 0xa0, 0x14, 0x3d, 0xca, 0x9e, 0xc1, 0xd1, 0xc2, 0x4f, 0x1e, 0x9c, 0xcd, 0xd5, 0xa3, 0x95, -+ 0x33, 0x38, 0xbb, 0x52, 0xf5, 0x76, 0xcd, 0x0c, 0xce, 0xb2, 0x79, 0x7a, 0x7b, 0xe3, 0x0c, 0xce, -+ 0xb1, 0x79, 0x7a, 0xe9, 0x5a, 0x38, 0x13, 0xb5, 0x92, 0x29, 0x05, 0xd0, 0xab, 0xd5, 0xc6, 0xe9, -+ 0xd5, 0xee, 0x22, 0x53, 0x8a, 0xe0, 0xb8, 0xcd, 0xc6, 0xc9, 0x2a, 0x64, 0x01, 0x4c, 0x08, 0x5c, -+ 0x2c, 0x85, 0x86, 0x4e, 0x68, 0x78, 0x01, 0x37, 0x84, 0x0e, 0x0d, 0x04, 0xec, 0x97, 0xa1, 0x37, -+ 0x1c, 0x63, 0x59, 0x42, 0x20, 0xb6, 0x32, 0x90, 0xf1, 0x27, 0x1c, 0x34, 0x31, 0x5e, 0x45, 0xe8, -+ 0x75, 0x2a, 0x48, 0x42, 0xd2, 0x15, 0x29, 0x79, 0xc5, 0xe3, 0x3c, 0x35, 0x84, 0x30, 0x6c, 0x64, -+ 0xbd, 0x13, 0x37, 0xd2, 0x03, 0x65, 0x24, 0xb2, 0xf2, 0xad, 0x75, 0xba, 0xc4, 0x62, 0x29, 0x7a, -+ 0xd9, 0xca, 0x4b, 0x66, 0xbc, 0x26, 0x55, 0x12, 0x01, 0x2c, 0xc4, 0x5f, 0x89, 0x9a, 0x09, 0x7c, -+ 0xbd, 0x00, 0x59, 0x65, 0x4c, 0x8b, 0x08, 0x49, 0x3f, 0x21, 0x4c, 0x72, 0x3a, 0xcb, 0x4a, 0xe4, -+ 0x0d, 0xa3, 0xa0, 0x19, 0x5e, 0x61, 0x52, 0x2f, 0x4a, 0xa8, 0xbb, 0xe9, 0xf9, 0xb9, 0x71, 0x2b, -+ 0xd1, 0x1c, 0x7c, 0x62, 0xcd, 0xf6, 0x56, 0x49, 0x2c, 0x76, 0x81, 0xcc, 0x73, 0x86, 0x83, 0xbd, -+ 0xb7, 0x29, 0xe9, 0xff, 0xca, 0xd7, 0x87, 0xa1, 0x64, 0x46, 0xb7, 0x74, 0x45, 0x24, 0x0e, 0xae, -+ 0xde, 0x41, 0x7a, 0x08, 0xcb, 0xde, 0xc5, 0x57, 0x86, 0xa4, 0x3d, 0x3a, 0x3a, 0x3b, 0x99, 0x5f, -+ 0x3d, 0x3e, 0x68, 0xe3, 0xf7, 0x89, 0x65, 0xd5, 0xd2, 0x3e, 0xc4, 0x3e, 0x2e, 0x1e, 0x92, 0x5a, -+ 0x75, 0xd9, 0xd0, 0x5c, 0x2b, 0x3d, 0x66, 0xe3, 0xdb, 0x30, 0x75, 0x82, 0xc9, 0x92, 0x11, 0x43, -+ 0xb5, 0xa8, 0x48, 0x2b, 0x41, 0x34, 0xe0, 0xe2, 0xb3, 0x28, 0xaf, 0x40, 0xa9, 0xc0, 0xcd, 0xc5, -+ 0x7d, 0x71, 0xd9, 0x28, 0xdd, 0x4d, 0xf7, 0x5e, 0x8b, 0x45, 0x20, 0x73, 0x9f, 0x8d, 0xc3, 0x4f, -+ 0x3b, 0x3d, 0x16, 0x9f, 0x25, 0xf3, 0x4f, 0x6b, 0x04, 0x5f, 0x4b, 0xfd, 0x25, 0x68, 0x0c, 0xe5, -+ 0x25, 0x73, 0xea, 0xd1, 0x90, 0x70, 0x7f, 0x5f, 0xce, 0x6e, 0x21, 0x05, 0x01, 0xeb, 0xbe, 0x05, -+ 0xa3, 0xb3, 0xf2, 0xf5, 0xe1, 0x9a, 0x64, 0xce, 0x66, 0xfb, 0x31, 0x72, 0xc4, 0x16, 0x0e, 0x60, -+ 0x8d, 0x00, 0x66, 0xf5, 0x80, 0xb5, 0x40, 0x10, 0xea, 0x83, 0xc1, 0x52, 0x0c, 0x26, 0xb6, 0x95, -+ 0x6f, 0xcb, 0x68, 0x0d, 0xe0, 0xc2, 0x08, 0x6b, 0xd3, 0xb5, 0x5c, 0x84, 0xae, 0x50, 0x12, 0x91, -+ 0x23, 0x3a, 0x11, 0x7c, 0xd9, 0xf0, 0x97, 0x6e, 0x26, 0xb0, 0x5a, 0x02, 0xad, 0x2a, 0x37, 0xab, -+ 0x19, 0xf0, 0xf3, 0x0b, 0x0e, 0x1e, 0x91, 0xd5, 0x8d, 0x93, 0x03, 0x91, 0xa3, 0x97, 0x93, 0x5b, -+ 0x7b, 0xbb, 0x6d, 0x76, 0x8b, 0x7c, 0xd6, 0x05, 0xdc, 0x06, 0x1b, 0x8f, 0xb9, 0xb2, 0x5a, 0xd6, -+ 0x1b, 0x52, 0xd6, 0x2b, 0x2a, 0x2f, 0x15, 0xd2, 0x02, 0xf0, 0x0f, 0x62, 0x14, 0x62, 0x21, 0x62, -+ 0x11, 0x1b, 0xcb, 0xbc, 0x89, 0xf4, 0x9a, 0xe6, 0xf0, 0x71, 0x6b, 0x60, 0xa3, 0xd0, 0x2b, 0x78, -+ 0xdc, 0x73, 0x56, 0x86, 0xbc, 0xc6, 0x91, 0x16, 0xeb, 0x1a, 0x01, 0x03, 0xde, 0xa1, 0x3d, 0xb4, -+ 0x90, 0xce, 0xac, 0x1c, 0x2d, 0x0d, 0xe5, 0x22, 0x2c, 0xfa, 0x3e, 0x90, 0xa9, 0xb5, 0xdf, 0x49, -+ 0x7f, 0x84, 0x06, 0x32, 0xc9, 0xfc, 0x5c, 0xf4, 0xbb, 0x6c, 0xb3, 0xdb, 0xe4, 0xb3, 0xda, 0x18, -+ 0x2d, 0x88, 0x64, 0x82, 0x2e, 0x18, 0x8b, 0xae, 0x18, 0x72, 0xda, 0xfb, 0x9d, 0x6a, 0xec, 0xa4, -+ 0x51, 0x6a, 0x7c, 0xc7, 0x0b, 0x7d, 0x58, 0x2d, 0x76, 0xfe, 0x8b, 0x61, 0x15, 0x90, 0xac, 0xbd, -+ 0xa2, 0x16, 0x9d, 0xe7, 0xdf, 0x7c, 0x2d, 0x73, 0x59, 0x37, 0x51, 0x74, 0x9c, 0xf8, 0x9a, 0x55, -+ 0xe9, 0x60, 0x55, 0xaa, 0x78, 0xdf, 0x9a, 0x05, 0xe3, 0x66, 0x41, 0xa9, 0xf5, 0x5d, 0x63, 0x58, -+ 0xb7, 0xce, 0xf9, 0xaf, 0x98, 0x67, 0x36, 0x0b, 0xbe, 0x45, 0x3e, 0xdf, 0xca, 0xd8, 0x95, 0x5a, -+ 0x96, 0x38, 0x17, 0x3a, 0x9a, 0x89, 0x50, 0x4d, 0xac, 0x0e, 0x8e, 0xe1, 0xc0, 0xac, 0x9b, 0xbf, -+ 0x9f, 0x9e, 0xdb, 0xc2, 0xc8, 0xb5, 0xd0, 0x32, 0xac, 0x86, 0x4c, 0x33, 0x03, 0x5f, 0xf2, 0x33, -+ 0xc3, 0xf2, 0xc8, 0x3d, 0xd2, 0xb4, 0xeb, 0xd8, 0xeb, 0xc7, 0x9a, 0xf2, 0x2e, 0x0c, 0x15, 0x1f, -+ 0xa8, 0x6c, 0x73, 0x04, 0x24, 0x15, 0x14, 0x1e, 0xda, 0x54, 0x5b, 0xf6, 0xe0, 0x8c, 0x57, 0x0b, -+ 0x67, 0xd7, 0x26, 0x16, 0x7a, 0x2d, 0x78, 0x36, 0xec, 0xb0, 0xbd, 0xe9, 0x01, 0x47, 0xd3, 0xba, -+ 0xf1, 0xa6, 0xf5, 0x39, 0x14, 0x70, 0xd4, 0xae, 0x03, 0x43, 0xbb, 0x2a, 0xdb, 0x90, 0x78, 0x1b, -+ 0x5f, 0x50, 0xf8, 0xa7, 0xe6, 0x8f, 0x22, 0x5e, 0x7a, 0x50, 0x94, 0x24, 0x42, 0xda, 0x40, 0xf4, -+ 0x0a, 0x8c, 0xb9, 0x2f, 0x08, 0xe4, 0xc5, 0xab, 0x89, 0x85, 0x18, 0x8a, 0xbd, 0x35, 0x5f, 0xd3, -+ 0xae, 0xc8, 0x84, 0x50, 0xc8, 0xa2, 0x48, 0xb7, 0xf7, 0xe9, 0xcf, 0x8b, 0x07, 0x3a, 0xbc, 0xc7, -+ 0xe4, 0x38, 0xc4, 0x3b, 0x2f, 0x09, 0x77, 0xc6, 0x26, 0x41, 0x29, 0x67, 0x54, 0x82, 0xaf, 0x95, -+ 0x10, 0xf2, 0xf8, 0x9c, 0xc5, 0x81, 0x8f, 0x0f, 0x6c, 0xe9, 0xa9, 0x51, 0x3f, 0x0e, 0xaa, 0xc4, -+ 0xf6, 0xce, 0x1e, 0xca, 0xe8, 0x34, 0x2c, 0xd8, 0x0b, 0x81, 0x14, 0x3d, 0xd3, 0x6c, 0xc8, 0x80, -+ 0xa0, 0xca, 0xd4, 0x87, 0x87, 0x52, 0x0d, 0xeb, 0x7d, 0x38, 0x00, 0xf8, 0x33, 0xb2, 0xe3, 0xb0, -+ 0xd6, 0x71, 0xfe, 0x36, 0x65, 0x18, 0xcd, 0x65, 0xde, 0xa3, 0x64, 0xde, 0xa7, 0x79, 0xf1, 0x6e, -+ 0xf1, 0x39, 0xb9, 0x1d, 0xef, 0x39, 0x2e, 0x49, 0x11, 0x9a, 0x07, 0x1d, 0xa6, 0xdf, 0x31, 0x68, -+ 0xba, 0x3b, 0x94, 0x13, 0x8f, 0x71, 0x17, 0xab, 0xc4, 0x34, 0x3a, 0xb4, 0xdd, 0xb0, 0x90, 0xac, -+ 0x07, 0xcf, 0x59, 0x58, 0x0f, 0xab, 0x4c, 0xb1, 0xbb, 0x01, 0xfb, 0xa9, 0x1a, 0x58, 0x43, 0x60, -+ 0x79, 0xa9, 0x2c, 0xac, 0xd9, 0xa2, 0xa9, 0x2b, 0x2b, 0xc2, 0x4d, 0xeb, 0x5d, 0x67, 0xd4, 0x71, -+ 0x51, 0x71, 0x61, 0x55, 0x65, 0x49, 0x7d, 0x21, 0xb8, 0x66, 0x7f, 0x63, 0xc9, 0xb3, 0x64, 0x8a, -+ 0x4a, 0x2a, 0xcf, 0xa1, 0xcf, 0xcb, 0x8f, 0x0a, 0x7f, 0xc3, 0xe4, 0x67, 0x9d, 0x6d, 0xbe, 0x63, -+ 0x7e, 0x27, 0x5b, 0x4b, 0x90, 0x3c, 0x3d, 0x69, 0xe4, 0x21, 0x4b, 0x10, 0xb2, 0xe4, 0xce, 0x5f, -+ 0xd7, 0x11, 0xa5, 0x5d, 0x95, 0xbf, 0xb3, 0x4e, 0xe5, 0xa5, 0xa5, 0xcb, 0x02, 0x18, 0x72, 0x4e, -+ 0x20, 0xb2, 0xc6, 0x23, 0xd9, 0xd7, 0x3a, 0x46, 0x92, 0x71, 0xd0, 0xb4, 0xdb, 0xfe, 0xa3, 0x4e, -+ 0xe8, 0xaf, 0xbd, 0xf7, 0xc4, 0x25, 0x5e, 0x3c, 0xd1, 0x93, 0x55, 0xd1, 0x69, 0xa8, 0x40, 0x62, -+ 0xb4, 0x8f, 0xe4, 0x64, 0xed, 0x47, 0xe8, 0x61, 0x02, 0x85, 0x4f, 0xe3, 0x24, 0x12, 0xed, 0xf7, -+ 0x32, 0x92, 0x2e, 0xf1, 0x2e, 0xaa, 0x87, 0x66, 0xe9, 0x9f, 0x69, 0x6c, 0x3a, 0x25, 0x2c, 0x09, -+ 0x24, 0x96, 0xf7, 0x64, 0x55, 0x72, 0x0e, 0xed, 0x20, 0x63, 0xd6, 0x49, 0xe6, 0x75, 0xad, 0x5e, -+ 0x2c, 0xf5, 0x7f, 0x83, 0x0c, 0xee, 0x3d, 0x30, 0x7d, 0x64, 0xfb, 0x2a, 0x93, 0x97, 0xfa, 0x3e, -+ 0xdf, 0xf1, 0xfe, 0xd9, 0x83, 0x4d, 0xa9, 0xaf, 0x72, 0x4a, 0x4e, 0x07, 0x5e, 0xcc, 0x82, 0xee, -+ 0x0b, 0x2f, 0xf1, 0x1a, 0x24, 0xd0, 0xfd, 0xe9, 0x46, 0xe6, 0xfb, 0xb8, 0x7b, 0x7e, 0x8f, 0x7e, -+ 0x1d, 0xe7, 0x8c, 0x9f, 0x3c, 0xfa, 0xcd, 0x55, 0xb2, 0x3f, 0xd4, 0x72, 0x90, 0x6a, 0xed, 0xf4, -+ 0x41, 0xe3, 0x4f, 0xbc, 0xb1, 0x6a, 0x01, 0x0d, 0xb5, 0x2e, 0x65, 0x3c, 0xad, 0xdc, 0xbe, 0x4a, -+ 0xe9, 0xb3, 0x19, 0x51, 0xed, 0xfd, 0xb9, 0x3d, 0xfa, 0xad, 0x16, 0x3a, 0x42, 0x9b, 0x58, 0xa3, -+ 0x51, 0x5a, 0x6f, 0xdd, 0xea, 0xbc, 0x1d, 0x46, 0x6c, 0xef, 0x62, 0x19, 0x0d, 0x69, 0x0f, 0x61, -+ 0x15, 0x0f, 0x44, 0xe9, 0xf3, 0x2c, 0xfd, 0xb3, 0xf7, 0xb3, 0xd7, 0xc0, 0xfc, 0x89, 0xf7, 0x2d, -+ 0x2a, 0x78, 0xb0, 0xe9, 0x47, 0x21, 0xc4, 0x69, 0xa9, 0xa2, 0x82, 0xc4, 0xa0, 0xa2, 0xbb, 0x83, -+ 0xca, 0x3a, 0x82, 0xce, 0xf8, 0xa9, 0xa3, 0x7b, 0x56, 0x95, 0x7a, 0x6d, 0xa1, 0x70, 0x0e, 0x65, -+ 0xff, 0xc4, 0xdb, 0x54, 0x2d, 0x20, 0x80, 0x96, 0xf1, 0x69, 0xfb, 0x3a, 0xf5, 0x9c, 0x8f, 0xe5, -+ 0x48, 0x5b, 0xbd, 0x5d, 0xea, 0xff, 0xf7, 0xd9, 0x5d, 0x8b, 0x33, 0xc1, 0x97, 0x94, 0x08, 0x55, -+ 0xb4, 0x11, 0xa1, 0xf5, 0x70, 0x67, 0x0e, 0x1e, 0xd6, 0x21, 0x42, 0x8c, 0x50, 0x0b, 0x9e, 0xe4, -+ 0xb8, 0x2f, 0x43, 0xd4, 0x93, 0x75, 0xff, 0x20, 0x98, 0x00, 0xc6, 0xd9, 0xeb, 0x08, 0x3c, 0xd9, -+ 0x0b, 0x57, 0x45, 0x4f, 0x71, 0x92, 0x0f, 0xbe, 0xaf, 0xbf, 0xbf, 0x05, 0xf8, 0x0c, 0x7b, 0xec, -+ 0x6d, 0x8d, 0xd7, 0xdb, 0x8d, 0x3b, 0xdf, 0x35, 0xef, 0xfc, 0x33, 0xb4, 0xcf, 0xbd, 0xf4, 0x7e, -+ 0x6f, 0x85, 0x99, 0x82, 0xef, 0x00, 0x79, 0xf7, 0xef, 0x72, 0xca, 0x3b, 0x0c, 0xf2, 0xbe, 0xe5, -+ 0x94, 0xd7, 0xf8, 0x0c, 0x32, 0xac, 0xea, 0xf6, 0x76, 0xca, 0x3b, 0x9c, 0x2d, 0xea, 0xe9, 0xad, -+ 0x68, 0xa7, 0x3b, 0xe1, 0xdf, 0x5e, 0x65, 0xf5, 0xae, 0x86, 0x76, 0x83, 0x2e, 0x78, 0x4b, 0x75, -+ 0xf0, 0xd6, 0x83, 0xc1, 0x0f, 0x1d, 0x5c, 0x2e, 0x6d, 0xad, 0x37, 0x12, 0x7a, 0x06, 0xe2, 0xfd, -+ 0x83, 0x43, 0x67, 0x70, 0x95, 0xb2, 0xcf, 0x7c, 0x59, 0x1c, 0xbf, 0xfd, 0xae, 0xd3, 0x36, 0xe7, -+ 0xa9, 0x54, 0xf7, 0xda, 0x0c, 0xbe, 0x30, 0xd2, 0x4e, 0x5b, 0x7d, 0x87, 0x88, 0xcc, 0xb1, 0x32, -+ 0xdf, 0x7c, 0x4c, 0x2a, 0x33, 0x59, 0xbd, 0x8a, 0xc2, 0xd5, 0x5a, 0x92, 0x08, 0x1d, 0x9c, 0xdf, -+ 0x8b, 0xe4, 0xb4, 0xb9, 0x26, 0x0a, 0x4f, 0x39, 0x49, 0x75, 0x3c, 0xe5, 0xec, 0xe8, 0xd0, 0x1d, -+ 0xa0, 0x3a, 0xd2, 0x9d, 0x1d, 0xd9, 0xce, 0x8e, 0x3e, 0xce, 0x8e, 0xd3, 0x9d, 0x1d, 0x17, 0x3b, -+ 0x3b, 0xb6, 0x3a, 0x3b, 0x8a, 0xe5, 0x54, 0x47, 0x44, 0x41, 0xca, 0x9c, 0x97, 0x8c, 0x14, 0x12, -+ 0xa9, 0xb3, 0x17, 0xcb, 0xd9, 0xcb, 0xdb, 0x79, 0x49, 0xec, 0xec, 0x95, 0xe1, 0x62, 0x5b, 0x4b, -+ 0x41, 0xaa, 0x08, 0x8a, 0x9c, 0x83, 0xf6, 0x66, 0x65, 0x62, 0x96, 0x09, 0x35, 0xcd, 0x60, 0x70, -+ 0x2f, 0x5c, 0xe5, 0x42, 0x3b, 0xed, 0xfe, 0x77, 0x44, 0x92, 0x1c, 0x6d, 0xaf, 0xaf, 0x9e, 0x51, -+ 0x73, 0x8d, 0xc1, 0xf1, 0x2b, 0xd5, 0x1d, 0xb8, 0xbf, 0x55, 0x18, 0x29, 0x1b, 0xe5, 0xc8, 0x69, -+ 0xe9, 0x8f, 0xd0, 0x18, 0xdc, 0x6e, 0xd9, 0x67, 0x73, 0x96, 0x70, 0xfc, 0xcc, 0x1a, 0x23, 0xa9, -+ 0x13, 0x2f, 0x02, 0xfc, 0xeb, 0xc8, 0x7f, 0x04, 0x41, 0x77, 0x65, 0x5a, 0x96, 0x49, 0xf6, 0xd8, -+ 0x1f, 0x81, 0xee, 0x3c, 0x53, 0xfd, 0x4e, 0xe8, 0x1e, 0x2b, 0x96, 0xe4, 0x90, 0x1f, 0xde, 0x05, -+ 0xfc, 0x44, 0x0c, 0xfe, 0xf9, 0x30, 0x74, 0x0f, 0x78, 0x4c, 0x18, 0x69, 0x3a, 0x13, 0x03, 0x3c, -+ 0xfb, 0x14, 0x7d, 0x59, 0x60, 0x24, 0x09, 0xde, 0x1d, 0x1c, 0xbf, 0xc1, 0x4b, 0xfe, 0x94, 0xd4, -+ 0x1e, 0x36, 0xce, 0x62, 0x36, 0xc6, 0xe9, 0xab, 0xa7, 0xb2, 0x41, 0xea, 0x6f, 0x60, 0x83, 0x71, -+ 0x03, 0x80, 0x4a, 0x7b, 0x03, 0x40, 0xc6, 0x8d, 0x7c, 0xc6, 0x91, 0xfe, 0x8c, 0xa4, 0x31, 0x03, -+ 0x57, 0x1f, 0x72, 0xd5, 0xc6, 0xd0, 0x99, 0x0c, 0x5c, 0x5a, 0x22, 0xdb, 0x9f, 0x91, 0xcc, 0x69, -+ 0xe2, 0xd2, 0x94, 0x3c, 0x7f, 0x46, 0x56, 0x40, 0x34, 0x67, 0xc3, 0x38, 0xb4, 0x8c, 0x4d, 0x8b, -+ 0xe6, 0xf4, 0xc7, 0xe6, 0x09, 0x43, 0x77, 0xb7, 0x93, 0xfc, 0x43, 0x52, 0x79, 0x69, 0x6e, 0x81, -+ 0x5e, 0xaa, 0xed, 0x63, 0x74, 0xc8, 0xb7, 0x73, 0xb3, 0x9e, 0xf0, 0xf3, 0x37, 0x2e, 0x89, 0x8a, -+ 0xe6, 0x1c, 0xcb, 0xcd, 0x13, 0x6e, 0xdb, 0x03, 0x00, 0x09, 0x89, 0x72, 0xd1, 0x29, 0xb5, 0xde, -+ 0x3e, 0xd8, 0xcf, 0xe8, 0x78, 0x1a, 0x00, 0x14, 0xfe, 0xfe, 0xc6, 0x97, 0xa2, 0xa3, 0x39, 0xbb, -+ 0x96, 0xe5, 0x09, 0x9f, 0x79, 0x16, 0x00, 0xd2, 0x01, 0x60, 0x33, 0x60, 0x18, 0xef, 0x63, 0xa8, -+ 0x85, 0x3b, 0x01, 0x43, 0x90, 0xbf, 0x51, 0x12, 0x1f, 0xcd, 0xa1, 0xaf, 0x03, 0x80, 0xbf, 0x00, -+ 0xc0, 0xcb, 0x00, 0xb0, 0xb6, 0x10, 0x30, 0x0c, 0x30, 0xd4, 0x96, 0x5d, 0xdc, 0x5e, 0x4b, 0x98, -+ 0xbf, 0xf1, 0xfc, 0xbc, 0x68, 0x4e, 0x5f, 0x63, 0x9e, 0xf0, 0x63, 0x14, 0x80, 0x92, 0x7d, 0x0b, -+ 0x91, 0xb2, 0x53, 0x5a, 0xa0, 0x41, 0x24, 0x87, 0x75, 0x34, 0x62, 0xe8, 0x9f, 0xd7, 0xaf, 0x5f, -+ 0x97, 0xfe, 0x00, 0x5f, 0x7d, 0x38, 0x09, 0xee, 0x93, 0xcc, 0x5a, 0x7c, 0x7f, 0x6c, 0xb2, 0xdc, -+ 0xdf, 0x9a, 0x97, 0x1d, 0x82, 0x56, 0xc6, 0xb6, 0x8a, 0xc4, 0x88, 0xa3, 0xb7, 0xf5, 0xb2, 0x0f, -+ 0xfd, 0x7a, 0xfd, 0xfa, 0xa2, 0x4e, 0x0c, 0x22, 0xc3, 0x19, 0xc0, 0xbe, 0x56, 0x79, 0x75, 0x58, -+ 0xee, 0xb2, 0x11, 0x86, 0xd4, 0x9f, 0x40, 0xc3, 0xb1, 0x43, 0xd9, 0x08, 0xcd, 0xe5, 0x25, 0xfb, -+ 0x16, 0x23, 0x65, 0x87, 0x0b, 0xb5, 0x57, 0xf8, 0x30, 0x46, 0x2d, 0xfc, 0x09, 0x43, 0xff, 0xdb, -+ 0x89, 0x9a, 0x89, 0x06, 0x19, 0xc8, 0x85, 0x32, 0x8b, 0xdd, 0x85, 0x51, 0x6a, 0xf1, 0x25, 0x2a, -+ 0xa9, 0xd8, 0x67, 0x24, 0x4c, 0xf4, 0x83, 0xc9, 0xac, 0xa6, 0xad, 0x9c, 0x24, 0x02, 0xcd, 0x60, -+ 0x0d, 0xd0, 0xf4, 0x2a, 0xc7, 0x35, 0x79, 0x28, 0xc3, 0x9f, 0x65, 0x6d, 0xb1, 0x11, 0x5a, 0x52, -+ 0x14, 0x57, 0x8f, 0x74, 0x18, 0x5c, 0xeb, 0xe2, 0x80, 0x40, 0x00, 0xd8, 0xc7, 0x62, 0x8c, 0xb2, -+ 0xe8, 0xd2, 0x42, 0xe5, 0xfe, 0xe6, 0xe9, 0xfe, 0xe8, 0x66, 0x0c, 0x5a, 0xfd, 0x64, 0x0c, 0x9b, -+ 0x85, 0x14, 0x06, 0xd3, 0x0d, 0x18, 0x2e, 0x39, 0x31, 0xdc, 0x11, 0xe5, 0x8f, 0xec, 0x47, 0xd5, -+ 0x32, 0x7a, 0x4a, 0x7b, 0x62, 0xec, 0xb0, 0xc2, 0xc4, 0x45, 0xa2, 0x44, 0x69, 0x90, 0x90, 0x41, -+ 0x8f, 0x09, 0x18, 0x26, 0xdb, 0xa5, 0x68, 0x09, 0x5f, 0x80, 0x18, 0x36, 0x95, 0x2f, 0xf3, 0x7e, -+ 0x9c, 0x95, 0xdd, 0x0a, 0xfc, 0x3f, 0x6a, 0xc7, 0x98, 0xd4, 0x03, 0x66, 0xe5, 0x1f, 0xa4, 0x14, -+ 0xb8, 0x4c, 0x24, 0x64, 0x18, 0x38, 0x01, 0xfa, 0x54, 0xa5, 0xa1, 0xa8, 0x17, 0xce, 0xd3, 0x10, -+ 0x9c, 0x9f, 0x13, 0x44, 0x3e, 0x8f, 0x7b, 0x5c, 0xc1, 0x29, 0x5b, 0x40, 0x8d, 0x64, 0xd1, 0x48, -+ 0xd5, 0x8f, 0xca, 0x64, 0x42, 0xfe, 0x74, 0xa5, 0xe9, 0xa4, 0xcc, 0xfb, 0xf1, 0x10, 0x83, 0x3e, -+ 0x93, 0xf1, 0x34, 0xd2, 0xfa, 0x1a, 0x7a, 0x09, 0xb9, 0xb4, 0xfd, 0x57, 0x12, 0xa0, 0x4e, 0xd2, -+ 0x77, 0x73, 0xdd, 0x18, 0x98, 0x3e, 0xe5, 0xc0, 0xf7, 0xa3, 0x63, 0xbf, 0x60, 0x6a, 0x98, 0x64, -+ 0x73, 0x88, 0x81, 0x86, 0x8a, 0x68, 0x68, 0x5b, 0x98, 0x3e, 0x0d, 0x19, 0x42, 0x0c, 0xbd, 0x99, -+ 0xad, 0xcf, 0x22, 0xed, 0xea, 0x6d, 0x2a, 0x4e, 0x09, 0x9f, 0xf7, 0xb3, 0x14, 0xae, 0x2c, 0xe1, -+ 0x3f, 0xc6, 0x06, 0x66, 0x3f, 0xa2, 0x3f, 0x80, 0x49, 0xab, 0x30, 0xb3, 0x0e, 0x17, 0xb3, 0x48, -+ 0xfb, 0x8c, 0x85, 0xab, 0xea, 0x77, 0x34, 0x02, 0x03, 0x7b, 0x32, 0x2c, 0x3f, 0x42, 0xeb, 0xe8, -+ 0x39, 0x7c, 0xcb, 0x03, 0xe7, 0x94, 0xa7, 0x45, 0xf3, 0xb5, 0xeb, 0x04, 0x1f, 0x85, 0x1e, 0xb0, -+ 0xe1, 0x31, 0xce, 0xc2, 0x63, 0x5c, 0xa0, 0x8a, 0x83, 0x11, 0x15, 0xcc, 0xec, 0x92, 0x4b, 0xd5, -+ 0x30, 0x7e, 0xa4, 0x90, 0xa3, 0x97, 0xa7, 0xf0, 0x08, 0x71, 0x17, 0x91, 0x5c, 0xa8, 0x3c, 0xb5, -+ 0x6d, 0x85, 0x7f, 0x2a, 0x01, 0xa3, 0xea, 0x03, 0xa3, 0xba, 0x8f, 0x7d, 0xef, 0x51, 0x3c, 0xd6, -+ 0x58, 0xc9, 0x8b, 0x86, 0x44, 0x01, 0x48, 0x39, 0xf9, 0xda, 0x13, 0x13, 0xd7, 0xf2, 0x44, 0xa8, -+ 0xc8, 0x1b, 0x58, 0xb1, 0x7b, 0x2f, 0x89, 0x29, 0xa7, 0x95, 0x1a, 0x34, 0x1d, 0x36, 0x23, 0x21, -+ 0xb3, 0x09, 0x81, 0x78, 0x2a, 0x67, 0x75, 0x28, 0x5c, 0x0e, 0xe0, 0xab, 0x7b, 0x51, 0xb7, 0xca, -+ 0xc1, 0xa5, 0x3b, 0x68, 0x8a, 0x18, 0xbe, 0x36, 0x8c, 0xf7, 0x9c, 0xd4, 0x2d, 0x94, 0x6f, 0xd3, -+ 0x3f, 0xce, 0x63, 0x25, 0x14, 0xb8, 0x64, 0x31, 0x7b, 0xeb, 0xd9, 0xec, 0x64, 0xd6, 0xe1, 0xca, -+ 0xfc, 0xf9, 0x6a, 0x7f, 0xc4, 0x54, 0xc0, 0x58, 0xc5, 0x8b, 0x1a, 0xdd, 0xd8, 0xbb, 0xcd, 0x8e, -+ 0x10, 0x43, 0xc1, 0xbc, 0xd8, 0xe7, 0x28, 0xa1, 0x11, 0x08, 0x1d, 0x74, 0xcf, 0xc8, 0x69, 0xac, -+ 0x90, 0x1c, 0x50, 0x16, 0xc2, 0xe3, 0x96, 0x4a, 0x76, 0xaa, 0x50, 0x09, 0x7f, 0xc7, 0x97, 0xf9, -+ 0x75, 0xbd, 0xd1, 0x30, 0x0a, 0x67, 0x60, 0x14, 0xf2, 0xf3, 0xe4, 0x7f, 0xc5, 0xfa, 0x96, 0x3c, -+ 0x0d, 0x23, 0x66, 0x8e, 0xc6, 0x5c, 0x92, 0xac, 0x6a, 0xb0, 0x93, 0x31, 0xd6, 0x0b, 0x20, 0x95, -+ 0x52, 0x6a, 0xe4, 0xd2, 0xcd, 0xde, 0xb4, 0x90, 0xf1, 0x49, 0x9c, 0x97, 0xc8, 0xd8, 0xfe, 0x2c, -+ 0x0f, 0x03, 0xc0, 0xbf, 0xd5, 0x0e, 0xfc, 0x6f, 0xcb, 0x8a, 0xc1, 0x17, 0x37, 0xc9, 0x58, 0xff, -+ 0x0d, 0x8f, 0x66, 0x9f, 0x5e, 0x36, 0x0f, 0x03, 0xf2, 0x01, 0xd0, 0x6a, 0x21, 0x7c, 0x39, 0x04, -+ 0x10, 0xbd, 0x30, 0xb0, 0x6f, 0x42, 0x95, 0x59, 0x5e, 0x1b, 0xb4, 0xd4, 0xc4, 0x9a, 0x5b, 0xa8, -+ 0x44, 0x32, 0x18, 0x22, 0x3b, 0x8b, 0x10, 0xfc, 0x53, 0xe5, 0x46, 0x66, 0x56, 0x71, 0xfc, 0x59, -+ 0xb2, 0x30, 0x46, 0xfa, 0xb8, 0x81, 0x4b, 0xd7, 0xea, 0x25, 0xa0, 0xcd, 0x0a, 0xe1, 0x98, 0xc3, -+ 0x27, 0x9a, 0x8f, 0x78, 0xdb, 0x60, 0x08, 0xd7, 0x4a, 0xc7, 0x8d, 0x84, 0x46, 0xd7, 0x01, 0xf3, -+ 0xc2, 0xbb, 0x69, 0x39, 0xbe, 0x78, 0x99, 0x14, 0x60, 0xe9, 0x2d, 0x20, 0xbd, 0x07, 0xa4, 0x55, -+ 0xde, 0x11, 0xd6, 0xba, 0x7c, 0x84, 0xa1, 0x91, 0xdb, 0x30, 0x37, 0x4a, 0xe0, 0x46, 0x36, 0xcd, -+ 0x98, 0x5a, 0xda, 0x84, 0x19, 0x65, 0x61, 0x65, 0x8e, 0x68, 0x39, 0x0c, 0x02, 0x2c, 0x75, 0x73, -+ 0xe1, 0x71, 0xee, 0xb3, 0x9e, 0xb1, 0x61, 0xcf, 0xb7, 0xfc, 0x0b, 0x78, 0xeb, 0xe0, 0x63, 0xe5, -+ 0xee, 0x87, 0x0b, 0x27, 0xc9, 0xab, 0xc4, 0x2c, 0x30, 0x86, 0x3f, 0xdb, 0xc6, 0x8c, 0xcb, 0x9c, -+ 0xe3, 0x5a, 0x6a, 0x40, 0xbc, 0x57, 0x80, 0x8c, 0x4b, 0x89, 0xfa, 0xd8, 0xfd, 0xbd, 0x6e, 0x25, -+ 0x7a, 0xb1, 0x9e, 0x07, 0xcd, 0x48, 0xeb, 0x40, 0x79, 0x1d, 0x76, 0x7c, 0xb1, 0x77, 0xe6, 0x55, -+ 0x30, 0xc5, 0x83, 0x61, 0x7b, 0x80, 0x17, 0x0f, 0x48, 0x62, 0x6c, 0x9d, 0x01, 0x13, 0x8d, 0x8f, -+ 0x05, 0x15, 0x8e, 0x78, 0xe7, 0x82, 0xd4, 0x63, 0x06, 0x0b, 0xfb, 0xcf, 0x94, 0xa6, 0xcc, 0xa0, -+ 0x29, 0x7e, 0x98, 0x50, 0x27, 0x44, 0x98, 0xf1, 0x38, 0xac, 0xc6, 0x16, 0xdb, 0x25, 0x3c, 0xff, -+ 0xc7, 0xcd, 0xbc, 0x4e, 0xca, 0x34, 0x6d, 0x78, 0xf2, 0xcf, 0xa5, 0x2e, 0x50, 0x8e, 0x61, 0xdc, -+ 0x7a, 0x19, 0xeb, 0xf3, 0x22, 0x36, 0xd0, 0x0e, 0xb7, 0xf1, 0x92, 0xfe, 0x08, 0x6c, 0x3f, 0x5b, -+ 0xca, 0x61, 0x7d, 0x9a, 0x39, 0x6e, 0x0b, 0x87, 0xa6, 0x0f, 0x74, 0xc3, 0x20, 0xc2, 0x0c, 0x56, -+ 0x33, 0x43, 0xaf, 0x12, 0xb2, 0xbe, 0xb7, 0xf2, 0x1a, 0xa4, 0x02, 0x70, 0x38, 0x8d, 0x91, 0x18, -+ 0x95, 0x46, 0x61, 0x16, 0xa8, 0x80, 0x81, 0x96, 0xe6, 0x55, 0xd4, 0x50, 0x89, 0xbc, 0x38, 0x7a, -+ 0x9d, 0xc1, 0xe7, 0x9c, 0x09, 0x9b, 0x66, 0x23, 0x63, 0x12, 0xb5, 0xcb, 0x76, 0x8a, 0xda, 0x77, -+ 0x98, 0x5a, 0x3d, 0xf4, 0x40, 0xda, 0x3c, 0x64, 0x8d, 0x33, 0x48, 0x19, 0x80, 0xeb, 0x21, 0x11, -+ 0xe5, 0xbc, 0x3e, 0xa4, 0xeb, 0x55, 0x96, 0xc1, 0x3e, 0x6a, 0xc6, 0x74, 0x61, 0x86, 0x86, 0x29, -+ 0x96, 0xb1, 0x6b, 0x76, 0xc9, 0x72, 0xd9, 0xc9, 0xf2, 0x05, 0x27, 0x12, 0x35, 0xba, 0x52, 0x2d, -+ 0x62, 0xd6, 0x90, 0xe0, 0x18, 0xf6, 0xcd, 0x31, 0x3e, 0x6d, 0x06, 0x53, 0xb7, 0xe6, 0x83, 0xa9, -+ 0xef, 0x7d, 0x44, 0xd4, 0xac, 0xc2, 0x9e, 0x48, 0x16, 0x0d, 0x7e, 0xa4, 0x65, 0x9a, 0xbe, 0x4e, -+ 0xd4, 0xbc, 0x02, 0x7b, 0x97, 0xac, 0xa7, 0xb9, 0xcf, 0xb8, 0x3d, 0xda, 0xd3, 0xec, 0xfb, 0xda, -+ 0xf1, 0xb4, 0x54, 0x5f, 0x71, 0xbb, 0x96, 0x12, 0x3d, 0x9e, 0x06, 0x74, 0x04, 0xd3, 0xe0, 0xbc, -+ 0x2e, 0xa0, 0x04, 0x3b, 0x2e, 0x21, 0x05, 0xe1, 0x71, 0x6a, 0xc5, 0x11, 0xf9, 0x6a, 0x6c, 0x83, -+ 0xcd, 0x76, 0x97, 0xd3, 0xb8, 0x01, 0x1c, 0xdd, 0x08, 0x7e, 0x9a, 0xf2, 0x7e, 0xb8, 0x75, 0xf4, -+ 0x7b, 0xdc, 0x8f, 0x4b, 0x77, 0xcd, 0xc6, 0x3d, 0x5b, 0xc8, 0xa6, 0x2f, 0x30, 0x92, 0x6b, 0x78, -+ 0x4e, 0x4e, 0xf8, 0xd9, 0xa7, 0xd9, 0x2b, 0x28, 0xf0, 0x8e, 0xdb, 0x80, 0x5f, 0xbd, 0x35, 0xb8, -+ 0xfa, 0x36, 0xe0, 0x57, 0x6e, 0x0d, 0x2e, 0xb9, 0x0d, 0xf8, 0xf8, 0xad, 0xc1, 0x47, 0x2f, 0xde, -+ 0x1a, 0xfc, 0xc2, 0x6d, 0x78, 0xbf, 0x0d, 0xf8, 0xd8, 0x6d, 0x78, 0xbf, 0x0d, 0xf8, 0xd9, 0xdb, -+ 0xf0, 0x7e, 0x1b, 0x70, 0xc7, 0x4d, 0xe0, 0x8d, 0x14, 0xef, 0xdf, 0xdd, 0x04, 0xfe, 0x39, 0x06, -+ 0x3f, 0x75, 0x6b, 0xf0, 0x8e, 0xdb, 0x80, 0x8f, 0xdc, 0x1a, 0x5c, 0x7d, 0x1b, 0xf0, 0xe1, 0x5b, -+ 0x83, 0x4b, 0x6e, 0x03, 0x6e, 0xbf, 0x35, 0xb8, 0xfc, 0xca, 0xad, 0xc1, 0x3f, 0xbe, 0x35, 0xb8, -+ 0xed, 0xc2, 0xad, 0xc1, 0x8f, 0x78, 0xc0, 0x29, 0x67, 0x05, 0xe0, 0x1a, 0x0a, 0x5c, 0x40, 0x19, -+ 0x30, 0xe5, 0xf6, 0xcf, 0xdb, 0x02, 0xd7, 0x60, 0x53, 0xb5, 0x18, 0x26, 0x75, 0x6f, 0xc4, 0x2b, -+ 0x81, 0xed, 0x67, 0xbc, 0x48, 0x9e, 0xc0, 0x78, 0xdc, 0x0b, 0x47, 0xa2, 0x74, 0xba, 0x88, 0x61, -+ 0xe0, 0x4d, 0xa3, 0x56, 0xec, 0x53, 0x7a, 0xe7, 0x9c, 0x72, 0xa1, 0xbe, 0xcf, 0x85, 0x1a, 0xc3, -+ 0xb6, 0xc3, 0x85, 0xc7, 0x03, 0x86, 0x9f, 0x4b, 0x8c, 0x3d, 0x5f, 0x30, 0x06, 0xc7, 0xb1, 0xa5, -+ 0x83, 0x46, 0xc2, 0x15, 0x2a, 0x2d, 0xcd, 0xec, 0xc6, 0x81, 0x95, 0x12, 0x7b, 0x4d, 0xc5, 0x37, -+ 0xee, 0x50, 0x69, 0x88, 0x81, 0x1d, 0x0d, 0x1b, 0x81, 0x1b, 0x18, 0x56, 0x50, 0x6e, 0xe0, 0x2d, -+ 0xec, 0x06, 0x4c, 0x78, 0x8d, 0xa6, 0x96, 0x61, 0x6a, 0x25, 0x58, 0xe1, 0xf3, 0x0a, 0xc2, 0xfd, -+ 0xe8, 0x11, 0xe0, 0xe4, 0x1f, 0x16, 0xe7, 0x8d, 0x8a, 0x1b, 0x61, 0x55, 0x6d, 0xf7, 0x7a, 0x35, -+ 0xa6, 0x94, 0x36, 0x28, 0xfb, 0x12, 0x5c, 0x75, 0xfc, 0xb6, 0xe7, 0xcd, 0x5c, 0xad, 0x7e, 0x1b, -+ 0x5c, 0x77, 0xa1, 0x73, 0x38, 0xbd, 0x4a, 0x37, 0x46, 0xd7, 0x4e, 0xa1, 0x03, 0x0f, 0x64, 0xcd, -+ 0xb3, 0x33, 0xdc, 0xa1, 0xdb, 0x42, 0x8a, 0x1f, 0xed, 0x04, 0x3f, 0x54, 0x00, 0x45, 0x39, 0x9d, -+ 0xab, 0x16, 0xde, 0x21, 0xdc, 0xef, 0x02, 0x2c, 0x7a, 0xf6, 0x0f, 0x25, 0x81, 0xc3, 0xea, 0x70, -+ 0x58, 0x38, 0xde, 0xb5, 0x6c, 0x05, 0x7f, 0xc1, 0xbf, 0xb5, 0x78, 0x47, 0x17, 0x5a, 0x31, 0x3a, -+ 0x6a, 0x51, 0xa0, 0xff, 0x6d, 0xb2, 0x78, 0xc1, 0x76, 0xda, 0xc7, 0xa2, 0x80, 0xda, 0xc4, 0x2b, -+ 0x13, 0xa2, 0x8e, 0xd3, 0x87, 0x30, 0x44, 0x0f, 0xa6, 0x61, 0xf9, 0xf7, 0x24, 0xde, 0x34, 0xb4, -+ 0x05, 0x8e, 0x56, 0x79, 0x62, 0xb0, 0xe2, 0x2e, 0x0f, 0x9f, 0x4b, 0x17, 0x51, 0x88, 0xed, 0x37, -+ 0x23, 0x9e, 0x37, 0x7c, 0x13, 0xe2, 0xab, 0x4e, 0xc4, 0x1f, 0xdc, 0x8c, 0x38, 0x7b, 0x8e, 0x07, -+ 0xb1, 0xc9, 0x86, 0x26, 0x62, 0x45, 0xd2, 0x17, 0x87, 0xc5, 0x74, 0x5c, 0xbd, 0xe4, 0xb3, 0xdf, -+ 0xbd, 0x24, 0x48, 0xfd, 0x53, 0x88, 0xbd, 0x6a, 0xaf, 0xb4, 0x42, 0xe5, 0xd0, 0x61, 0x3b, 0x1c, -+ 0x17, 0x49, 0xad, 0x1e, 0x41, 0x77, 0xe6, 0x0c, 0x62, 0x7e, 0x48, 0xac, 0x52, 0xc5, 0xb7, 0xb7, -+ 0x18, 0xc7, 0x96, 0x6c, 0x8a, 0x07, 0xec, 0x08, 0x17, 0x99, 0xa7, 0x8e, 0xe3, 0x74, 0xbf, 0x2e, -+ 0x4a, 0x0e, 0xc5, 0x4c, 0x6a, 0x1c, 0x4b, 0x74, 0x11, 0x9b, 0xff, 0xe3, 0x38, 0xb6, 0xf5, 0x53, -+ 0xe8, 0x70, 0xe4, 0xb6, 0x68, 0x70, 0x8a, 0x48, 0xc4, 0x4d, 0xba, 0xda, 0x79, 0xe7, 0x10, 0xe6, -+ 0x0d, 0x87, 0x81, 0xd7, 0x0d, 0xa7, 0x26, 0xf3, 0x16, 0x73, 0x96, 0x7e, 0xa3, 0xae, 0xf6, 0x3a, -+ 0x11, 0x7f, 0x7d, 0x33, 0x62, 0x7a, 0xda, 0x8d, 0x88, 0xbd, 0x72, 0x29, 0xc4, 0xda, 0x9b, 0x11, -+ 0xdf, 0xe1, 0xb8, 0x09, 0x71, 0xa7, 0x13, 0xf1, 0x37, 0x37, 0x23, 0x5e, 0x7c, 0x13, 0xe2, 0x9d, -+ 0x4e, 0xc4, 0xe6, 0x9b, 0x11, 0x6f, 0x30, 0x4e, 0x20, 0x0e, 0xe1, 0x3b, 0x75, 0x48, 0xed, 0x52, -+ 0xfc, 0x52, 0xa8, 0xd1, 0xbd, 0x8e, 0xad, 0x0d, 0x6f, 0x3e, 0xfa, 0xdc, 0x2b, 0xa6, 0xe4, 0xb4, -+ 0x16, 0x96, 0xe0, 0xb5, 0xfc, 0x4c, 0xb9, 0xbf, 0x8c, 0x45, 0x9f, 0xd0, 0x60, 0x77, 0xf6, 0x31, -+ 0x8c, 0xf8, 0x22, 0xd5, 0xed, 0x16, 0x33, 0x61, 0xe7, 0x52, 0x3b, 0xe6, 0x01, 0xbb, 0xd3, 0xeb, -+ 0x7d, 0xdf, 0x4e, 0x9d, 0x09, 0xf1, 0xd5, 0x02, 0x4a, 0x8e, 0x7e, 0x88, 0x5c, 0x34, 0x6b, 0x32, -+ 0x81, 0x7d, 0x5d, 0xf0, 0x10, 0xb0, 0xaf, 0x79, 0x36, 0xc7, 0x81, 0xa3, 0x2b, 0x2b, 0x80, 0x32, -+ 0x9f, 0x83, 0xe8, 0x6a, 0x9e, 0x70, 0xbe, 0x1a, 0xed, 0x15, 0x42, 0xc8, 0x35, 0xc5, 0xbc, 0xe6, -+ 0x76, 0x60, 0xf3, 0x52, 0x50, 0xbb, 0xae, 0x83, 0x93, 0xcd, 0xcb, 0x3d, 0xb3, 0xfd, 0xbf, 0x41, -+ 0x58, 0x12, 0x7a, 0x3c, 0xf0, 0x1b, 0xcc, 0xba, 0x08, 0x12, 0x30, 0xd7, 0x49, 0x17, 0x81, 0x34, -+ 0xdb, 0x75, 0x77, 0x62, 0x0a, 0x85, 0xe3, 0x82, 0x34, 0x08, 0xd4, 0x48, 0x1c, 0xcb, 0x11, 0x54, -+ 0x2c, 0x67, 0x04, 0x6a, 0x31, 0x8c, 0x8c, 0x09, 0x85, 0xf8, 0xab, 0x30, 0x62, 0x2a, 0xec, 0x97, -+ 0x4e, 0x51, 0x88, 0x4b, 0x86, 0x8c, 0x4b, 0x02, 0xec, 0xd2, 0x16, 0x5d, 0xc3, 0x32, 0x94, 0x4a, -+ 0x7d, 0xc0, 0xac, 0x1d, 0xcc, 0x1f, 0xdc, 0x66, 0xad, 0xd9, 0x28, 0xf3, 0x01, 0x0a, 0xce, 0xe3, -+ 0xf7, 0x84, 0x1e, 0x3a, 0x3f, 0xf6, 0x9a, 0xe1, 0x9b, 0x4b, 0xdc, 0xe5, 0xd1, 0xa3, 0xe9, 0x30, -+ 0x5e, 0x76, 0x7c, 0xb4, 0xdf, 0x4f, 0x35, 0x7a, 0x2a, 0x86, 0x31, 0x35, 0x65, 0x52, 0xe5, 0x55, -+ 0x1a, 0x01, 0x74, 0x7a, 0xcb, 0x96, 0x3b, 0xa1, 0xa8, 0x4a, 0xad, 0xff, 0x84, 0x00, 0xe2, 0x31, -+ 0xf8, 0xa6, 0x77, 0xb8, 0x11, 0x4f, 0x1e, 0xd7, 0x37, 0x83, 0x2a, 0x30, 0x93, 0xe2, 0xb3, 0xb7, -+ 0xd0, 0xd2, 0x9b, 0x41, 0x51, 0xea, 0x6e, 0xd8, 0x3a, 0x6a, 0xea, 0x64, 0x7e, 0x1e, 0xee, 0xd7, -+ 0x86, 0x8f, 0x33, 0x40, 0x15, 0x1b, 0xd8, 0x51, 0x3a, 0x3c, 0x08, 0x34, 0xc0, 0x17, 0x8c, 0x07, -+ 0xe1, 0x94, 0x0c, 0x13, 0xc9, 0xb2, 0x4e, 0x0c, 0x42, 0x4d, 0x22, 0x96, 0xdf, 0x60, 0xf8, 0xd7, -+ 0x2d, 0x94, 0x53, 0x23, 0xf1, 0x5b, 0x96, 0x09, 0xba, 0x7f, 0x87, 0x3d, 0x53, 0xe7, 0xd6, 0xbd, -+ 0xd3, 0x7a, 0x3e, 0x67, 0xcf, 0x02, 0xc4, 0xce, 0xe3, 0x3b, 0x04, 0x84, 0x1b, 0xfd, 0xde, 0x74, -+ 0xbe, 0x7b, 0xa4, 0xdd, 0xf6, 0xb3, 0x6e, 0x0c, 0x5b, 0xb9, 0xea, 0xf0, 0xf5, 0xa9, 0xb6, 0x95, -+ 0x41, 0x5d, 0xeb, 0xcc, 0xfe, 0x14, 0xdb, 0x93, 0x2e, 0x2b, 0x7f, 0x42, 0x27, 0x1d, 0x8e, 0x20, -+ 0x8f, 0x4e, 0x6c, 0xb1, 0xb7, 0xd7, 0x89, 0x5f, 0xa8, 0x19, 0x6b, 0xa3, 0xee, 0xe7, 0x5b, 0xe8, -+ 0xc4, 0x2f, 0x34, 0xc1, 0xb6, 0xbb, 0x1f, 0xba, 0x76, 0x2a, 0x79, 0x19, 0x1e, 0x9d, 0x68, 0x78, -+ 0x98, 0xb9, 0x99, 0x7b, 0xf5, 0x37, 0x18, 0xc9, 0x8a, 0xd0, 0x17, 0x30, 0x0e, 0xa3, 0xee, 0x9f, -+ 0xb7, 0x18, 0xbc, 0xb6, 0x6d, 0x79, 0x5a, 0x22, 0x17, 0xc4, 0x5c, 0x25, 0xe8, 0xb4, 0x7a, 0x0c, -+ 0x90, 0xf9, 0x32, 0x36, 0x80, 0xe7, 0x0c, 0x33, 0x6f, 0x54, 0xe7, 0x2b, 0x6a, 0x8c, 0x44, 0x11, -+ 0xa2, 0xba, 0x01, 0x4d, 0xe7, 0x92, 0x65, 0x26, 0x62, 0x29, 0xa0, 0x99, 0xc7, 0x9b, 0x8c, 0xe6, -+ 0x25, 0x8c, 0xe6, 0x49, 0xbd, 0x07, 0xcd, 0xd4, 0xb9, 0xb9, 0x8d, 0x9a, 0x70, 0x1b, 0xc9, 0x1b, -+ 0xa4, 0x3b, 0x1d, 0x9a, 0xbe, 0x9b, 0x95, 0x98, 0x08, 0x4a, 0x9a, 0xd9, 0x4e, 0xfb, 0x44, 0x14, -+ 0xd0, 0x68, 0xbb, 0x86, 0x97, 0x12, 0x33, 0x96, 0xab, 0x81, 0xb7, 0xff, 0x46, 0xd3, 0x1c, 0x5c, -+ 0xf2, 0x0f, 0x8c, 0xa6, 0x12, 0xcf, 0x84, 0x9b, 0x86, 0xf8, 0x4d, 0x9b, 0x7f, 0x85, 0xd2, 0x1f, -+ 0x7a, 0xec, 0x56, 0xcc, 0x1c, 0xf7, 0x8c, 0x01, 0x31, 0x0b, 0x33, 0x74, 0xde, 0xa9, 0xb0, 0xc9, -+ 0xa3, 0x59, 0x61, 0xc5, 0x8e, 0x80, 0x64, 0x0f, 0xde, 0x80, 0xe6, 0xed, 0x4b, 0x41, 0xd5, 0x26, -+ 0x8c, 0xe6, 0x3b, 0x18, 0x32, 0xd8, 0xaa, 0x04, 0x2f, 0xcb, 0x77, 0xaf, 0x25, 0xbb, 0xf5, 0x6b, -+ 0xf1, 0x50, 0x6e, 0x16, 0x62, 0x94, 0x36, 0xcb, 0x84, 0xaa, 0xde, 0x23, 0x82, 0x5f, 0x74, 0xf8, -+ 0xbb, 0x72, 0x22, 0xb0, 0x59, 0x29, 0xf1, 0xe5, 0x5b, 0x71, 0xd7, 0xa5, 0xf9, 0x1e, 0x0b, 0x39, -+ 0x5a, 0xd9, 0xd3, 0x14, 0x7e, 0xb5, 0xdf, 0x4d, 0xec, 0x23, 0x5d, 0xe8, 0x0d, 0xc8, 0x8f, 0xd9, -+ 0x1e, 0xc0, 0xc8, 0x8b, 0x3d, 0xc8, 0x61, 0x7f, 0xf6, 0x56, 0xe9, 0x2e, 0x58, 0x2c, 0x12, 0xb6, -+ 0x59, 0xcc, 0xd4, 0xfe, 0xcc, 0x88, 0x20, 0x2e, 0xf9, 0xa9, 0x80, 0xeb, 0xe5, 0x89, 0x4b, 0xb8, -+ 0x3e, 0x7f, 0x76, 0xd0, 0xdf, 0xc4, 0x59, 0x08, 0x55, 0x74, 0x29, 0xad, 0x7b, 0x39, 0xbf, 0x0e, -+ 0x36, 0x50, 0x3b, 0xa3, 0xe3, 0x60, 0x9d, 0x51, 0x69, 0x61, 0xb3, 0x3a, 0x60, 0x4e, 0x80, 0x8d, -+ 0x6b, 0x5a, 0x3c, 0xde, 0xb8, 0xea, 0xd5, 0xb0, 0x71, 0x5d, 0xc8, 0xa9, 0x96, 0x84, 0x81, 0xfb, -+ 0x5c, 0xc7, 0x57, 0xcb, 0x9d, 0xfb, 0x51, 0x1a, 0xde, 0x65, 0x1d, 0xf6, 0x0b, 0xf2, 0x8c, 0x49, -+ 0x4d, 0xc4, 0x16, 0x09, 0x6f, 0x63, 0xa2, 0xdb, 0x99, 0x7f, 0xf6, 0x12, 0x06, 0x4f, 0x51, 0xbb, -+ 0xe7, 0xcb, 0x87, 0xbb, 0x58, 0x30, 0x20, 0xab, 0x98, 0xf3, 0xf1, 0xbe, 0xf2, 0x02, 0x04, 0x0e, -+ 0xec, 0xd1, 0xf8, 0xca, 0x42, 0x4c, 0x56, 0x02, 0x64, 0x61, 0xf3, 0x4d, 0x93, 0xe0, 0xcd, 0xf7, -+ 0xfb, 0xf9, 0xbd, 0x7a, 0xcf, 0xe6, 0xfb, 0xe4, 0x99, 0x14, 0x25, 0x11, 0xef, 0x0e, 0x9d, 0x96, -+ 0xf0, 0x5b, 0x99, 0x0c, 0x9b, 0xf5, 0xe9, 0x3f, 0x7c, 0x35, 0x82, 0x37, 0x38, 0x09, 0x7a, 0x6a, -+ 0x83, 0xe3, 0x8c, 0xcd, 0x7e, 0x92, 0x79, 0xaf, 0xd6, 0xee, 0x74, 0xe5, 0x43, 0x5c, 0x61, 0x60, -+ 0x99, 0x0f, 0x76, 0xae, 0xd3, 0x2a, 0x6d, 0x3e, 0x38, 0xae, 0xa3, 0x1b, 0xf4, 0x72, 0xe9, 0xfe, -+ 0x31, 0x7a, 0x82, 0x12, 0x88, 0x0e, 0xfa, 0x64, 0x47, 0x23, 0xd5, 0x1e, 0x15, 0x68, 0xe0, 0x4a, -+ 0x21, 0x0e, 0xe1, 0xc6, 0x50, 0xfe, 0x1d, 0xaa, 0x60, 0x6b, 0xbd, 0xde, 0x83, 0x82, 0xa2, 0xd5, -+ 0xf1, 0x87, 0x71, 0x2b, 0x60, 0xdd, 0xb7, 0x88, 0x86, 0xf3, 0x32, 0xf4, 0x42, 0x60, 0x4a, 0x33, -+ 0xa6, 0xc8, 0xb8, 0x5c, 0xd0, 0xeb, 0xce, 0x0a, 0x35, 0x2f, 0xec, 0x57, 0x24, 0x00, 0x7e, 0x6f, -+ 0xf8, 0xd3, 0xe2, 0x02, 0x16, 0x3a, 0xfc, 0xdd, 0x2f, 0x24, 0xa3, 0xa3, 0x37, 0xb7, 0x9f, 0x54, -+ 0xd7, 0xb0, 0xa9, 0xbb, 0x6f, 0xf8, 0xde, 0xc3, 0x27, 0x34, 0x7c, 0xef, 0x41, 0x4e, 0xdd, 0x7b, -+ 0xf0, 0x9a, 0x72, 0xef, 0x21, 0x6a, 0x45, 0xe4, 0xe2, 0x7b, 0x52, 0x8b, 0x57, 0xc6, 0xbe, 0xb8, -+ 0x22, 0xee, 0xdc, 0x8a, 0xa4, 0xa6, 0x7b, 0xe6, 0x1f, 0xbe, 0x67, 0x61, 0xd4, 0xca, 0xec, 0xa9, -+ 0xf7, 0x24, 0xe6, 0x23, 0xd7, 0x3d, 0x09, 0x96, 0x91, 0x81, 0x6f, 0x65, 0x51, 0xf7, 0x12, 0x3c, -+ 0x77, 0x12, 0x10, 0x7a, 0xb5, 0xf3, 0x4c, 0xe0, 0x0a, 0x5a, 0x63, 0xd3, 0x5f, 0x72, 0xd8, 0x76, -+ 0x94, 0x86, 0xb2, 0xe5, 0x42, 0xa3, 0x92, 0x40, 0x75, 0xb0, 0x8b, 0x0b, 0xd4, 0xe5, 0xf6, 0xe8, -+ 0xcb, 0x38, 0x87, 0x76, 0xa8, 0xa2, 0xd6, 0xd9, 0x52, 0x8c, 0xab, 0x17, 0x5b, 0xfd, 0xde, 0x50, -+ 0x85, 0x9e, 0x3c, 0x30, 0x5d, 0xb9, 0x7d, 0x55, 0xbe, 0xb7, 0xfa, 0x3e, 0xdf, 0xee, 0xfe, 0xd9, -+ 0x07, 0xb6, 0x49, 0x5f, 0xe5, 0xac, 0x3c, 0x1d, 0xb8, 0x56, 0xd1, 0x7e, 0x2f, 0x43, 0x7a, 0x89, -+ 0xf7, 0x3a, 0xce, 0xf4, 0xb7, 0x37, 0x32, 0x3f, 0xb7, 0x0f, 0x44, 0xe9, 0x73, 0x8b, 0xde, 0x18, -+ 0x0f, 0xfe, 0x5a, 0x88, 0xac, 0xdd, 0xd9, 0x4a, 0xee, 0x77, 0x81, 0xbf, 0x9e, 0x16, 0x33, 0x70, -+ 0xb2, 0x7c, 0xd6, 0xe8, 0xfb, 0x59, 0xa5, 0x83, 0x54, 0x92, 0x5b, 0x1e, 0xf5, 0xc1, 0x2a, 0xce, -+ 0xae, 0xad, 0x54, 0xf2, 0x7b, 0x3f, 0x4e, 0xae, 0x97, 0x5a, 0x5c, 0xed, 0xbd, 0x8e, 0xc0, 0xac, -+ 0x3e, 0x67, 0x72, 0x7d, 0xd6, 0xc1, 0xf7, 0xf5, 0xa5, 0xce, 0xe4, 0xfa, 0xd3, 0xe6, 0xed, 0xcf, -+ 0x58, 0xb6, 0x3f, 0x6b, 0xdd, 0xbe, 0xb7, 0x9d, 0x14, 0xd6, 0x48, 0xe5, 0xe4, 0x79, 0x95, 0x5e, -+ 0xc6, 0x7a, 0x4d, 0x2a, 0x57, 0xd1, 0x57, 0xe1, 0xfb, 0x84, 0xce, 0xfc, 0xa4, 0xff, 0x41, 0x16, -+ 0x5a, 0xcc, 0x73, 0xcd, 0x61, 0x63, 0xd6, 0x97, 0x78, 0x0e, 0x3f, 0x8c, 0xfd, 0x94, 0x10, 0x4f, -+ 0x99, 0xfd, 0x9e, 0x34, 0xa2, 0x1f, 0xaf, 0x0e, 0xb7, 0x8e, 0x63, 0x37, 0x2b, 0xa3, 0x42, 0x27, -+ 0x63, 0x7a, 0xbb, 0x21, 0xc4, 0x30, 0x3d, 0x85, 0xf1, 0xa4, 0x67, 0xd8, 0xf2, 0xe5, 0x02, 0xfd, -+ 0x44, 0x2c, 0x7f, 0x9f, 0x19, 0x7b, 0x7b, 0x1d, 0xb5, 0xed, 0x2b, 0x18, 0x30, 0x73, 0xbc, 0x17, -+ 0x47, 0xe1, 0x6c, 0xdc, 0x2b, 0x70, 0x6d, 0xdf, 0xbd, 0x9c, 0x71, 0x99, 0xa0, 0x85, 0x4b, 0x37, -+ 0xbf, 0x61, 0x90, 0xb1, 0xeb, 0xc0, 0xcc, 0x8d, 0xdb, 0xcc, 0x7e, 0xc8, 0x95, 0x00, 0x5b, 0x3e, -+ 0x7b, 0x50, 0x3e, 0xe1, 0x81, 0x4f, 0x4f, 0xa2, 0xac, 0x02, 0x1f, 0xd5, 0x91, 0xf8, 0x0a, 0xe6, -+ 0x8a, 0x0c, 0xe2, 0xe8, 0xe5, 0xfd, 0x3c, 0x79, 0xc4, 0xa0, 0x3c, 0xd1, 0x03, 0x9b, 0xc4, 0x6b, -+ 0xfb, 0x0a, 0x4b, 0x30, 0x80, 0xe7, 0xf2, 0x2c, 0xc2, 0xed, 0x9b, 0x5a, 0xf5, 0x4f, 0x51, 0xcb, -+ 0x0f, 0x05, 0x28, 0x0a, 0xe6, 0xeb, 0xe5, 0x4d, 0xbc, 0x3f, 0xe2, 0x04, 0x02, 0xeb, 0x05, 0x4c, -+ 0xd4, 0x19, 0x3d, 0xc7, 0x6a, 0xb6, 0x62, 0x3a, 0x22, 0x97, 0xdc, 0x91, 0x1d, 0x17, 0x5b, 0xe5, -+ 0xd5, 0xa1, 0x8a, 0xa5, 0x48, 0xe6, 0xf7, 0x2d, 0xb8, 0xbc, 0xc8, 0x14, 0x9c, 0x67, 0x4c, 0x25, -+ 0x8d, 0x5a, 0x14, 0xcd, 0x47, 0x7e, 0x06, 0x09, 0xb0, 0xb2, 0x9f, 0x78, 0x8b, 0x81, 0xae, 0xd4, -+ 0xa7, 0x5d, 0xb6, 0x7a, 0xc3, 0x04, 0x1a, 0x16, 0xad, 0xa1, 0xa1, 0x6d, 0xde, 0x2d, 0x32, 0x52, -+ 0x0b, 0x16, 0x3e, 0x77, 0xef, 0x1e, 0xe4, 0xde, 0xaa, 0x2b, 0x75, 0xff, 0xc2, 0xaa, 0x50, 0xe3, -+ 0x04, 0x97, 0x2c, 0x0a, 0x99, 0xdf, 0xa0, 0xef, 0x63, 0x57, 0x02, 0xfd, 0xbd, 0x03, 0x27, 0xfc, -+ 0x90, 0xfd, 0x43, 0xf9, 0x17, 0xf4, 0x34, 0x98, 0x25, 0xcb, 0xfb, 0x36, 0x72, 0x11, 0x15, 0x83, -+ 0x9e, 0x4e, 0xd9, 0x06, 0x9d, 0xc5, 0xc3, 0xcf, 0x49, 0x51, 0x0e, 0x15, 0xe0, 0x97, 0xcb, 0x38, -+ 0x72, 0x44, 0x65, 0x97, 0x4e, 0xc8, 0x7c, 0x30, 0x29, 0x2d, 0x90, 0x8a, 0x15, 0x41, 0x34, 0x61, -+ 0xff, 0x7c, 0x94, 0xcb, 0x4c, 0x82, 0xde, 0xca, 0xc2, 0x52, 0x2a, 0xbf, 0x46, 0x4d, 0x71, 0xde, -+ 0xb0, 0x66, 0x8d, 0x67, 0x8e, 0xea, 0x9a, 0x12, 0xd3, 0xa8, 0x7d, 0xe3, 0x33, 0x1e, 0xf2, 0x91, -+ 0xbc, 0xa2, 0x49, 0xe4, 0x43, 0x99, 0x2b, 0xfe, 0x23, 0x79, 0x9d, 0x93, 0xfc, 0x69, 0x32, 0xe0, -+ 0x46, 0xf2, 0xb9, 0xcc, 0xb9, 0x93, 0xc9, 0xcb, 0x6f, 0x24, 0x6f, 0x63, 0xce, 0x75, 0x6e, 0x5b, -+ 0x9f, 0xf5, 0x90, 0x7f, 0x89, 0xb7, 0x71, 0x12, 0xf9, 0xfb, 0x99, 0xe9, 0xff, 0xad, 0xf4, 0x97, -+ 0x51, 0xe0, 0x8d, 0xe4, 0x77, 0x32, 0xd3, 0x7e, 0x53, 0x7a, 0xa2, 0x39, 0xa3, 0x9b, 0x22, 0x4f, -+ 0xa5, 0xc9, 0x94, 0x40, 0xa3, 0x02, 0x86, 0x47, 0x3f, 0xf7, 0x99, 0xa7, 0x90, 0xf6, 0x8c, 0x92, -+ 0x00, 0xbf, 0xeb, 0x35, 0x1f, 0x28, 0x25, 0x89, 0x54, 0xe0, 0x8c, 0x7b, 0x7d, 0xb0, 0x4b, 0x96, -+ 0x5a, 0x99, 0x7b, 0x5d, 0x2d, 0xdd, 0x2a, 0xca, 0x3d, 0x17, 0x00, 0x98, 0x9a, 0xae, 0x0f, 0xd0, -+ 0x63, 0x2f, 0x9f, 0x5f, 0xb8, 0xc5, 0x93, 0x2f, 0x8e, 0x0a, 0xff, 0x27, 0xc2, 0x51, 0x17, 0x3b, -+ 0xb5, 0xdd, 0x29, 0x9d, 0x63, 0x50, 0x16, 0xa0, 0x19, 0x30, 0xab, 0x76, 0x9d, 0x8f, 0x42, 0xa4, -+ 0x81, 0x00, 0x8f, 0x95, 0x6c, 0x78, 0xc0, 0x8a, 0x71, 0xc8, 0x01, 0x07, 0x9f, 0x05, 0x5b, 0xe2, -+ 0xc7, 0x64, 0xcc, 0xe7, 0xa5, 0x68, 0xb9, 0xf7, 0x72, 0xc2, 0xdd, 0x12, 0x2f, 0xc2, 0x59, 0x38, -+ 0xf3, 0x08, 0x95, 0xa2, 0x9b, 0xad, 0x85, 0xd5, 0xd3, 0x16, 0xda, 0xb7, 0x14, 0x79, 0x72, 0x92, -+ 0x96, 0x81, 0xcb, 0x1e, 0x3b, 0xf5, 0xca, 0xdc, 0xdb, 0x4b, 0x45, 0x10, 0x0d, 0x54, 0x3e, 0x2b, -+ 0x17, 0x59, 0xdf, 0xb7, 0xcd, 0x72, 0xe0, 0x1e, 0xc7, 0xc0, 0x54, 0xa9, 0x65, 0x20, 0x98, 0x7d, -+ 0x40, 0x8b, 0xe3, 0x31, 0xc3, 0x72, 0x57, 0x2c, 0x23, 0x4e, 0xf4, 0x82, 0x38, 0x44, 0x1c, 0xce, -+ 0xf0, 0x2c, 0x0c, 0xac, 0xd1, 0x20, 0xbb, 0x1a, 0xb3, 0x39, 0x0a, 0x73, 0xd2, 0xbd, 0x7c, 0x4d, -+ 0x16, 0xec, 0xc5, 0x69, 0xeb, 0x74, 0x78, 0x11, 0x66, 0x2b, 0x5d, 0x82, 0x91, 0x67, 0x54, 0x1e, -+ 0xbd, 0x3d, 0x61, 0xa8, 0xa1, 0x44, 0x4a, 0x07, 0xe5, 0x38, 0x85, 0x9c, 0xb1, 0x59, 0x07, 0xc2, -+ 0x1c, 0x32, 0x6c, 0xb5, 0xba, 0x5b, 0xbc, 0x58, 0xa0, 0xd5, 0xf8, 0xd8, 0xcd, 0x38, 0x07, 0x29, -+ 0x14, 0x5c, 0xa2, 0xa4, 0x18, 0x07, 0x29, 0xca, 0x65, 0x8c, 0x2c, 0x04, 0x73, 0xe7, 0xc0, 0xc1, -+ 0x1e, 0x8f, 0x73, 0xa9, 0xf1, 0x1b, 0xa5, 0x62, 0x67, 0x03, 0xce, 0x5e, 0x22, 0x70, 0x04, 0x9a, -+ 0x07, 0x91, 0x00, 0xa2, 0x4c, 0xcb, 0x92, 0x1f, 0xfc, 0x90, 0x73, 0x09, 0xfe, 0x51, 0xbe, 0x10, -+ 0xc7, 0xe2, 0x36, 0xb3, 0x27, 0x1e, 0x6c, 0xa7, 0xe3, 0x78, 0x90, 0x77, 0x4e, 0xeb, 0x6e, 0x09, -+ 0xc6, 0x51, 0xe1, 0x5a, 0x25, 0x25, 0x9e, 0x2e, 0x3c, 0xb7, 0xe0, 0xb7, 0xc4, 0x5b, 0x1c, 0xdd, -+ 0x2f, 0x79, 0xa5, 0x09, 0x2f, 0x44, 0x2b, 0x69, 0xe8, 0xe3, 0x80, 0x13, 0xc4, 0x06, 0x3e, 0xef, -+ 0xb3, 0xd2, 0x75, 0x34, 0x97, 0x1d, 0xac, 0x54, 0xb2, 0xf7, 0xba, 0x86, 0xc5, 0xb9, 0x58, 0xb7, -+ 0x34, 0xe2, 0xfc, 0xf8, 0x4a, 0x89, 0x67, 0xb1, 0x4e, 0xe5, 0xfc, 0x28, 0xf3, 0x03, 0x57, 0xb1, -+ 0x89, 0x9f, 0x80, 0xef, 0x6c, 0x64, 0x93, 0x0c, 0x2b, 0x1e, 0x83, 0xa3, 0x30, 0x6a, 0xae, 0xc0, -+ 0x63, 0x41, 0x87, 0xe0, 0xf1, 0x04, 0x97, 0x3c, 0xa6, 0x97, 0xa5, 0x56, 0xd7, 0x10, 0x59, 0x3b, -+ 0x7a, 0xa9, 0x7d, 0x8b, 0x1c, 0x07, 0x3f, 0x4e, 0xd9, 0x7c, 0x7f, 0xc1, 0x31, 0xd9, 0x7a, 0xb6, -+ 0xc6, 0xc4, 0x6d, 0x04, 0x6b, 0x88, 0x15, 0x0d, 0xb8, 0x24, 0xb5, 0x32, 0x0f, 0x53, 0x59, 0xe3, -+ 0x5f, 0x3b, 0xa2, 0xc0, 0x78, 0x3f, 0x13, 0xad, 0x73, 0xfa, 0x17, 0x0e, 0x35, 0x10, 0x7b, 0x9e, -+ 0xf2, 0xf8, 0x97, 0x23, 0x05, 0x11, 0x69, 0x75, 0xed, 0xee, 0xe9, 0xa5, 0x48, 0x3f, 0xc5, 0xc8, -+ 0xc4, 0x1a, 0x3e, 0x0e, 0x1a, 0x76, 0x26, 0x7e, 0xdf, 0xe8, 0x4b, 0x3f, 0x9b, 0x9d, 0x49, 0x25, -+ 0xfb, 0x0b, 0xdc, 0x46, 0xcd, 0x79, 0xdc, 0x41, 0x5d, 0x99, 0x7f, 0x85, 0xb1, 0x70, 0xe2, 0x36, -+ 0x80, 0xc7, 0xdc, 0x53, 0x39, 0xb3, 0xaa, 0xfd, 0x7f, 0x53, 0x40, 0xcd, 0x71, 0x9f, 0x0d, 0x52, -+ 0x1f, 0x97, 0xbb, 0xbc, 0x52, 0xaf, 0x65, 0x1f, 0xcc, 0xd9, 0xee, 0xb2, 0x10, 0xc4, 0x63, 0x25, -+ 0xa9, 0xa1, 0xcd, 0xc4, 0x7e, 0x73, 0xbc, 0xd9, 0x9d, 0x1a, 0xa7, 0xc6, 0x47, 0x7c, 0xc9, 0x0f, -+ 0x4c, 0xd1, 0x9e, 0x40, 0xf1, 0x21, 0xc3, 0xd4, 0x68, 0x4e, 0x6a, 0x29, 0x44, 0xd0, 0x6f, 0x52, -+ 0xdb, 0xaa, 0xf6, 0xab, 0xb6, 0xbb, 0xa9, 0x99, 0xd2, 0xf8, 0x6a, 0xd7, 0x24, 0x03, 0x09, 0x16, -+ 0x76, 0x35, 0xdd, 0x49, 0x49, 0x50, 0xe8, 0x91, 0x6d, 0xaf, 0x53, 0xb6, 0x45, 0xfd, 0x8b, 0x73, -+ 0x6f, 0x29, 0xdb, 0xc2, 0xdd, 0xbf, 0x4d, 0xad, 0xf3, 0x92, 0xdf, 0x83, 0x1a, 0x3f, 0x8f, 0x6c, -+ 0x24, 0xf7, 0xbd, 0xd2, 0x49, 0xb2, 0x25, 0x62, 0xd9, 0xa4, 0xdc, 0x1e, 0xcd, 0xf6, 0xa9, 0xb2, -+ 0x25, 0x06, 0x65, 0xe0, 0x2b, 0x4a, 0xee, 0x07, 0xf6, 0x9d, 0xf8, 0x8a, 0xee, 0x06, 0xab, 0x94, -+ 0xcc, 0x39, 0xff, 0x9b, 0x56, 0x79, 0x6e, 0x6e, 0x4d, 0x6f, 0x40, 0x11, 0xbe, 0xd9, 0x82, 0x60, -+ 0x51, 0xfd, 0x40, 0x90, 0xe0, 0x1b, 0x9a, 0x9a, 0xe8, 0x9a, 0x06, 0xce, 0x8c, 0xfc, 0x07, 0x82, -+ 0xc4, 0xc4, 0xd0, 0x79, 0x89, 0x38, 0xa1, 0xdf, 0xe2, 0x76, 0x2a, 0x33, 0x4e, 0xe9, 0x63, 0xf8, -+ 0xe8, 0xcd, 0x66, 0x8a, 0x0f, 0x0e, 0xa6, 0x26, 0xa3, 0xa8, 0xa9, 0xe3, 0xaf, 0xfe, 0x26, 0xb5, -+ 0xa8, 0x79, 0x67, 0x69, 0x41, 0x8d, 0x2e, 0x6a, 0x68, 0xdf, 0x4e, 0xbc, 0xa2, 0xbd, 0x71, 0x1c, -+ 0xa2, 0x64, 0x7b, 0x3a, 0xd6, 0x97, 0x79, 0x3d, 0xf6, 0xb0, 0xae, 0xfd, 0xb5, 0xd1, 0xbd, 0xbf, -+ 0x76, 0xcd, 0xd8, 0xcb, 0x61, 0x75, 0xd5, 0x5e, 0x05, 0x89, 0x4e, 0x0f, 0x84, 0xbe, 0x3b, 0x2c, -+ 0x04, 0xfb, 0x1c, 0x19, 0x84, 0xa0, 0x2e, 0x5e, 0xd8, 0x38, 0x60, 0x6e, 0xdc, 0xb5, 0x24, 0x1a, -+ 0x39, 0x68, 0x7a, 0x98, 0x54, 0x23, 0xdd, 0xd0, 0x78, 0x92, 0xbc, 0xc2, 0x2c, 0x07, 0xec, 0x96, -+ 0x44, 0x67, 0x0c, 0x4e, 0xdd, 0x30, 0x60, 0x96, 0xa7, 0x25, 0x4d, 0xac, 0xd0, 0x1f, 0x3e, 0x30, -+ 0xa6, 0x5f, 0xed, 0x9a, 0x2d, 0xb2, 0xf7, 0xa5, 0x46, 0x58, 0x06, 0xe6, 0x86, 0x42, 0x40, 0x78, -+ 0x3f, 0x73, 0x0d, 0x75, 0x67, 0x0a, 0x0b, 0xba, 0x89, 0x79, 0x3f, 0x0c, 0xa1, 0xb6, 0xae, 0x80, -+ 0x83, 0x7b, 0x17, 0x41, 0xef, 0x60, 0x0e, 0xec, 0xbb, 0x7a, 0x96, 0xcc, 0xf0, 0x47, 0x1a, 0xc2, -+ 0x86, 0x1b, 0xd7, 0x42, 0x63, 0x85, 0x30, 0xf7, 0xcc, 0x1c, 0xcc, 0x8f, 0xa8, 0x68, 0x62, 0xbe, -+ 0xd0, 0x52, 0xc5, 0x4f, 0x7b, 0xe6, 0xcb, 0x67, 0x7d, 0x09, 0xfd, 0xb6, 0x39, 0xae, 0xf5, 0xa0, -+ 0x3b, 0x7d, 0x8c, 0xfe, 0x7c, 0x62, 0xec, 0xba, 0x17, 0x76, 0xc3, 0x31, 0x19, 0x88, 0x3d, 0xf1, -+ 0xfc, 0xab, 0x74, 0x70, 0x5e, 0xb1, 0x31, 0xdb, 0xc0, 0x6b, 0x59, 0x97, 0x44, 0x03, 0x76, 0x1d, -+ 0xec, 0xa6, 0x0e, 0x6f, 0x4a, 0xc1, 0x24, 0x85, 0x40, 0xd2, 0x3a, 0x80, 0xef, 0x60, 0xb2, 0x74, -+ 0x73, 0xbf, 0x05, 0xf5, 0x69, 0x77, 0xc9, 0xa3, 0x27, 0x34, 0xac, 0xea, 0x9b, 0xb8, 0x9b, 0xb8, -+ 0x78, 0x61, 0xce, 0x8c, 0xf0, 0x6f, 0xdd, 0xe3, 0xf9, 0xb7, 0x23, 0xda, 0x0d, 0xfc, 0x1d, 0x9f, -+ 0x97, 0x62, 0x2d, 0xb5, 0x60, 0x02, 0xaf, 0x2f, 0xc0, 0xdf, 0x9c, 0xff, 0x48, 0x46, 0x9d, 0xfa, -+ 0xd3, 0x6f, 0x92, 0x89, 0x5a, 0x54, 0x42, 0x8f, 0xb8, 0xea, 0x26, 0xe3, 0x8a, 0xc5, 0x7e, 0xa5, -+ 0x67, 0x5e, 0x84, 0xa6, 0xf6, 0x5d, 0x32, 0x1c, 0x75, 0x39, 0x6f, 0x51, 0x5c, 0xcf, 0xf1, 0xe9, -+ 0x01, 0x07, 0x93, 0x42, 0xb2, 0x3c, 0x31, 0x74, 0xd4, 0x8d, 0x31, 0xb4, 0x90, 0x89, 0x63, 0xe8, -+ 0x5c, 0x2a, 0x86, 0x0e, 0x87, 0x3f, 0x46, 0x40, 0x9e, 0x2e, 0x20, 0x9b, 0x60, 0x05, 0xac, 0x4d, -+ 0xdf, 0xb0, 0xd0, 0x90, 0x3a, 0xfc, 0xf0, 0x41, 0x4d, 0x52, 0xd6, 0xee, 0x79, 0x7f, 0x0f, 0x9b, -+ 0xb6, 0xf2, 0xcc, 0x2c, 0xc7, 0xb7, 0x59, 0xbf, 0xc4, 0x1c, 0x55, 0xcc, 0x5a, 0xb9, 0x75, 0xde, -+ 0x8f, 0xc9, 0x8a, 0xd5, 0xcf, 0x3e, 0x78, 0xda, 0xa7, 0x2d, 0xee, 0xb5, 0x8e, 0xef, 0xb3, 0xbe, -+ 0x09, 0x0c, 0xf3, 0x0e, 0x8c, 0x95, 0x2d, 0xb3, 0x05, 0x36, 0xca, 0x6c, 0x01, 0xa5, 0x32, 0x62, -+ 0x7a, 0xdb, 0xfa, 0x4b, 0x4f, 0xae, 0x1b, 0x7d, 0xf2, 0x01, 0x79, 0xe0, 0x03, 0xba, 0x27, 0xd7, -+ 0x76, 0x04, 0x2c, 0x2f, 0x6b, 0xcb, 0x79, 0xa5, 0x2d, 0xef, 0x9b, 0x80, 0x3b, 0x76, 0x07, 0x2c, -+ 0x3d, 0x1e, 0x70, 0xd7, 0x96, 0xb6, 0x3b, 0xdf, 0x6d, 0x5b, 0xf6, 0x8b, 0x30, 0x85, 0xe6, 0x8c, -+ 0xc5, 0xbf, 0x74, 0xc7, 0xe2, 0x2b, 0xec, 0x8f, 0x61, 0xde, 0x8e, 0x56, 0xb3, 0xed, 0x86, 0xc8, -+ 0xa6, 0xe3, 0x45, 0x4b, 0x0b, 0x33, 0x94, 0x29, 0x52, 0x46, 0x69, 0x85, 0xba, 0x70, 0xbd, 0xb3, -+ 0x82, 0xb1, 0x16, 0x17, 0x5e, 0xfe, 0x46, 0x69, 0xe8, 0x4d, 0x85, 0x9e, 0x9a, 0xaa, 0xda, 0xb2, -+ 0xc6, 0xf5, 0xae, 0xca, 0xd2, 0xf5, 0xeb, 0x9d, 0x1d, 0xd7, 0xbb, 0xd0, 0x78, 0xce, 0x71, 0xb9, -+ 0xe3, 0xfa, 0x3a, 0xaa, 0xe8, 0xb1, 0xac, 0xb2, 0x4e, 0x53, 0xae, 0x86, 0xef, 0xe2, 0xc6, 0x3a, -+ 0x0d, 0x06, 0xab, 0xaa, 0xaf, 0xd3, 0xd4, 0xbb, 0xab, 0x31, 0x97, 0x96, 0x96, 0x4f, 0x54, 0x59, -+ 0x2e, 0xdd, 0x5c, 0x7e, 0x43, 0xa5, 0xa5, 0xab, 0xcc, 0xb2, 0xac, 0xb2, 0xac, 0xce, 0x75, 0x58, -+ 0xaf, 0x81, 0x9d, 0x45, 0xf1, 0x0d, 0xe4, 0x6e, 0x38, 0xad, 0x9f, 0x44, 0x7e, 0x72, 0xcd, 0x65, -+ 0x79, 0x71, 0xa5, 0x0b, 0x4b, 0x49, 0x59, 0xa5, 0xba, 0xbc, 0x54, 0x5d, 0x5b, 0x8a, 0xfc, 0x8d, -+ 0xdb, 0xbc, 0xa3, 0x39, 0xda, 0xb7, 0x72, 0xe7, 0xaf, 0x93, 0x44, 0x69, 0x57, 0x71, 0x76, 0xbe, -+ 0x27, 0x9c, 0xa8, 0x62, 0xd2, 0x26, 0x20, 0xd5, 0x93, 0x75, 0x3d, 0xb4, 0x65, 0xe8, 0x0d, 0x99, -+ 0xd7, 0xbe, 0xbb, 0xbd, 0x10, 0x5b, 0x1b, 0xcb, 0xd1, 0x0b, 0x67, 0x21, 0x6b, 0x29, 0xd2, 0x7e, -+ 0x4c, 0xe7, 0x16, 0x71, 0x76, 0x4b, 0x66, 0x74, 0x1c, 0xcd, 0xb2, 0xc6, 0x50, 0xfb, 0x9b, 0x8d, -+ 0xb4, 0x46, 0x66, 0xb5, 0x72, 0x57, 0xf5, 0xc4, 0xfe, 0x66, 0x2d, 0x1d, 0x9d, 0x8c, 0x63, 0x3c, -+ 0x44, 0x83, 0xdd, 0x4b, 0xff, 0xe9, 0xc0, 0x21, 0x39, 0xec, 0x5e, 0x8a, 0x2e, 0xf1, 0xce, 0x93, -+ 0xb0, 0x7b, 0x79, 0xb3, 0x91, 0x59, 0xeb, 0x80, 0xcd, 0xcf, 0xea, 0x9e, 0xac, 0xf9, 0xe2, 0x43, -+ 0x3b, 0x1c, 0x71, 0xeb, 0x24, 0xe1, 0x6f, 0xe3, 0x22, 0xa9, 0x05, 0x44, 0x4f, 0x56, 0x66, 0xff, -+ 0xb6, 0xcc, 0x89, 0x22, 0xa9, 0x2e, 0x02, 0x3d, 0x1c, 0x44, 0x5b, 0x88, 0x8b, 0xa4, 0xca, 0x2e, -+ 0xf1, 0xae, 0xa9, 0xa0, 0xf7, 0x5b, 0x8d, 0xcc, 0x47, 0x06, 0x4b, 0x02, 0x6d, 0x6b, 0x7a, 0x68, -+ 0x39, 0x91, 0x87, 0x76, 0x90, 0x73, 0xd6, 0x75, 0x44, 0xc3, 0xd6, 0xc9, 0x11, 0xf4, 0x86, 0xd2, -+ 0xbf, 0xf7, 0xc0, 0xf4, 0xc6, 0x9d, 0xab, 0xf6, 0x73, 0x2b, 0x94, 0xc4, 0x01, 0x23, 0x81, 0x1e, -+ 0x14, 0x68, 0xf9, 0x6b, 0x69, 0x01, 0x5a, 0x5a, 0xfe, 0x30, 0xba, 0x6f, 0x69, 0xff, 0x61, 0x3a, -+ 0x2e, 0x2c, 0x42, 0x28, 0x6e, 0x23, 0xda, 0x19, 0x75, 0x7a, 0x7a, 0xa0, 0x96, 0x2a, 0xb3, 0xd4, -+ 0x2e, 0xf6, 0x56, 0xbd, 0xc2, 0x88, 0x1b, 0x27, 0x64, 0xf8, 0x61, 0x29, 0x64, 0xd1, 0x09, 0xd9, -+ 0x0f, 0xef, 0xdf, 0x59, 0x3b, 0x92, 0xcd, 0xd1, 0x3e, 0x00, 0x1b, 0xa5, 0xd1, 0x98, 0x75, 0xa7, -+ 0x03, 0x7b, 0xb3, 0xa6, 0xd1, 0xf0, 0x46, 0x69, 0x11, 0xe1, 0xff, 0x86, 0x30, 0xa8, 0x5e, 0x82, -+ 0x37, 0x5c, 0x57, 0xb7, 0xb7, 0x37, 0x36, 0x59, 0xd2, 0x9a, 0x09, 0x34, 0x10, 0xd5, 0x7b, 0x97, -+ 0xc9, 0x36, 0xbb, 0x75, 0xf1, 0x2c, 0xdc, 0xdd, 0xba, 0xb3, 0xc7, 0xbe, 0xf3, 0xfd, 0x11, 0x72, -+ 0x44, 0x97, 0x57, 0x2e, 0xbc, 0xa0, 0x8a, 0x4e, 0xe5, 0x6c, 0xb6, 0xfb, 0x9f, 0xf1, 0x23, 0xe2, -+ 0x06, 0x1d, 0x81, 0xa5, 0x44, 0x14, 0x0d, 0x8d, 0x90, 0x28, 0xf6, 0xe0, 0x76, 0xa1, 0xd6, 0x8e, -+ 0x52, 0x19, 0xe6, 0xc4, 0x78, 0xdf, 0x7e, 0x3d, 0x7f, 0x9d, 0x5c, 0xac, 0x9c, 0x8e, 0xb4, 0x99, -+ 0x6c, 0x19, 0x2b, 0x9d, 0xe0, 0x59, 0x09, 0xe0, 0xd0, 0x2b, 0xe6, 0x34, 0x8d, 0x96, 0x8b, 0xe7, -+ 0x1b, 0x0a, 0x9a, 0xab, 0xad, 0xf7, 0xaf, 0xd6, 0xf1, 0xb4, 0xd4, 0x03, 0xdb, 0xd6, 0x7d, 0x2c, -+ 0x4b, 0x39, 0x2d, 0xe8, 0x22, 0x4a, 0xf3, 0xc6, 0xa7, 0x23, 0x32, 0x14, 0xdb, 0xe1, 0xb3, 0x1f, -+ 0x23, 0x1c, 0xc6, 0xb5, 0x5a, 0xf9, 0xb8, 0x4c, 0xd2, 0xb0, 0x90, 0x83, 0x6b, 0xb5, 0xfa, 0xb3, -+ 0x62, 0x30, 0xe6, 0x42, 0x5c, 0x7e, 0x45, 0x06, 0xa9, 0xc7, 0x79, 0x67, 0x55, 0xb0, 0xc1, 0x2d, -+ 0x27, 0x73, 0x0a, 0xe7, 0xe6, 0xbf, 0x30, 0x77, 0x20, 0x2a, 0x6b, 0x0d, 0xb0, 0x3d, 0x4c, 0xcf, -+ 0x65, 0x20, 0x0b, 0xac, 0x0d, 0xa7, 0xc5, 0xa9, 0xbe, 0x34, 0x14, 0x06, 0xa2, 0xe5, 0x78, 0x3d, -+ 0xdf, 0xd8, 0xb4, 0x35, 0x8d, 0x8d, 0x45, 0xcb, 0x5a, 0x63, 0xb4, 0xcd, 0x3e, 0x65, 0x98, 0x03, -+ 0xa2, 0xa9, 0x1b, 0xbd, 0xbf, 0x68, 0xdf, 0xc5, 0xa5, 0x49, 0xd8, 0xfe, 0x8c, 0x02, 0x41, 0x34, -+ 0x27, 0x34, 0x3d, 0x4f, 0x88, 0x1e, 0x69, 0x27, 0x91, 0x84, 0x48, 0xf6, 0x0d, 0x91, 0xed, 0xee, -+ 0x75, 0x2d, 0x83, 0xef, 0x08, 0xf1, 0xf6, 0xde, 0x40, 0xe5, 0xfc, 0x4f, 0xe2, 0x3d, 0xd5, 0x22, -+ 0x8f, 0xc7, 0x3e, 0x95, 0x25, 0xee, 0xc2, 0x71, 0xb5, 0x79, 0x99, 0x27, 0x05, 0x74, 0x8a, 0x46, -+ 0x65, 0x9d, 0xcb, 0xf1, 0x36, 0xaa, 0x14, 0x22, 0x9a, 0x4f, 0x5a, 0xc8, 0x40, 0x95, 0x04, 0x22, -+ 0xf6, 0x1d, 0x07, 0x85, 0x8f, 0x78, 0xf6, 0xfb, 0xbe, 0xcd, 0x52, 0xce, 0xc4, 0x5d, 0xcc, 0x01, -+ 0x02, 0x17, 0x18, 0xb0, 0xdf, 0xc6, 0x59, 0x84, 0xb7, 0x43, 0x0c, 0x05, 0x71, 0xfb, 0xff, 0xe8, -+ 0x71, 0xd3, 0x1a, 0xea, 0x5a, 0xf3, 0x21, 0xd7, 0x35, 0x1a, 0xb2, 0x4e, 0x8f, 0xd3, 0x3e, 0xef, -+ 0xad, 0x9f, 0x35, 0xd8, 0xdb, 0x2a, 0x57, 0x7b, 0xb1, 0xf3, 0x8d, 0x4c, 0xfb, 0x21, 0x75, 0x7e, -+ 0xd3, 0x1a, 0xf0, 0x87, 0x95, 0xa3, 0x68, 0xa7, 0x05, 0x6d, 0x5d, 0x22, 0x3c, 0xa0, 0xf4, 0x3a, -+ 0x00, 0xfe, 0xd4, 0xa1, 0x47, 0x41, 0x6a, 0xe2, 0x4a, 0x6b, 0xec, 0x1a, 0x5d, 0xd0, 0x1a, 0x88, -+ 0x15, 0xac, 0x4c, 0x4e, 0x5c, 0x2f, 0x4d, 0x94, 0x28, 0x93, 0x82, 0xc3, 0xdc, 0x2f, 0xa6, 0xad, -+ 0x16, 0x19, 0x0a, 0x07, 0xcc, 0x96, 0x26, 0x36, 0x6e, 0x85, 0x5d, 0x5d, 0x1a, 0xb5, 0x69, 0x0b, -+ 0x26, 0x2d, 0x1c, 0x2f, 0xf3, 0x06, 0xe3, 0x28, 0xef, 0x1d, 0x13, 0x2f, 0x99, 0xb5, 0x38, 0x9e, -+ 0xa3, 0xf2, 0x0d, 0xc2, 0x61, 0x78, 0xbf, 0x0d, 0xc7, 0xac, 0xef, 0x22, 0xdd, 0xe2, 0x7c, 0x94, -+ 0x39, 0xe3, 0xb1, 0x55, 0xd6, 0xa6, 0x95, 0x40, 0xb4, 0x4e, 0x8e, 0x89, 0xc2, 0x12, 0x43, 0x0a, -+ 0x38, 0xb8, 0x28, 0x80, 0xa2, 0x31, 0x16, 0xa2, 0xb3, 0x66, 0xc5, 0x77, 0x02, 0x8b, 0x07, 0xbd, -+ 0x68, 0xc0, 0x22, 0x8e, 0x78, 0xab, 0xa5, 0xf8, 0x0e, 0x79, 0xbc, 0x0c, 0xb0, 0x81, 0x56, 0x22, -+ 0x83, 0xea, 0xd4, 0x41, 0xb0, 0xfa, 0xac, 0x13, 0x62, 0x81, 0xd4, 0xf4, 0xe9, 0x2d, 0x74, 0x1a, -+ 0x60, 0x6b, 0x24, 0x68, 0x94, 0x08, 0xb1, 0x6f, 0x5a, 0xbc, 0xfe, 0x04, 0x22, 0x5c, 0xa1, 0x44, -+ 0x80, 0xe5, 0x52, 0x2e, 0xc6, 0x29, 0xab, 0xe3, 0x5e, 0x42, 0x2c, 0x70, 0x72, 0xc1, 0xd3, 0xcc, -+ 0x75, 0x4a, 0x08, 0x5d, 0x7b, 0x83, 0x19, 0xc0, 0x2c, 0x5e, 0x10, 0x4e, 0x6b, 0xf1, 0xa6, 0x67, -+ 0xbd, 0x96, 0x52, 0x8f, 0x2f, 0x7f, 0xce, 0x15, 0x3d, 0x8e, 0xa3, 0xff, 0x42, 0x6a, 0x81, 0x59, -+ 0x88, 0x6e, 0x84, 0x6c, 0x5c, 0x74, 0x73, 0x8d, 0xc6, 0x00, 0x6c, 0xae, 0x3c, 0x52, 0x92, 0x60, -+ 0x01, 0x1e, 0x24, 0x6a, 0x63, 0xa4, 0x62, 0xe1, 0x30, 0xa7, 0xe5, 0x70, 0xbe, 0x3b, 0x89, 0xd8, -+ 0xaa, 0xf8, 0x04, 0x0f, 0xe3, 0x06, 0xea, 0xb6, 0x95, 0x8d, 0xca, 0xca, 0x51, 0x59, 0xb2, 0xb4, -+ 0x2b, 0x3a, 0x2a, 0xfb, 0x5c, 0x32, 0x71, 0x37, 0x25, 0x49, 0xf0, 0x88, 0x12, 0xdf, 0x9b, 0x36, -+ 0x84, 0x50, 0xf9, 0x44, 0x67, 0x77, 0xfa, 0xb4, 0x36, 0x27, 0x5e, 0x7f, 0x16, 0xfa, 0xb7, 0x0d, -+ 0x22, 0x83, 0x1d, 0xb5, 0x63, 0x43, 0x05, 0x58, 0xd0, 0x7d, 0x5c, 0xac, 0xa6, 0xb4, 0xe6, 0x63, -+ 0x71, 0x03, 0x34, 0x5c, 0x99, 0x70, 0x90, 0xda, 0xc2, 0xac, 0x6e, 0x65, 0xca, 0x26, 0x81, 0xb9, -+ 0xf2, 0x52, 0x43, 0x72, 0x1f, 0xea, 0x0e, 0x65, 0x8e, 0x01, 0x8f, 0x7c, 0x7f, 0x01, 0x16, 0x4d, -+ 0x18, 0x7f, 0xad, 0x37, 0x0e, 0x44, 0xfb, 0x5a, 0xda, 0x7e, 0x38, 0xdf, 0x13, 0xb8, 0x55, 0x0b, -+ 0x9e, 0x05, 0x14, 0xa0, 0xe6, 0x8c, 0x33, 0x32, 0x1c, 0x57, 0xcc, 0xcf, 0x28, 0x49, 0x0c, 0x92, -+ 0x85, 0x19, 0xef, 0x6e, 0xa7, 0x02, 0x7c, 0xc0, 0x89, 0x4b, 0x2d, 0x60, 0xbf, 0xa9, 0xd8, 0x10, -+ 0x54, 0xe8, 0xd6, 0xc0, 0xe3, 0x82, 0x87, 0x2c, 0x98, 0x73, 0x7a, 0x18, 0x55, 0x80, 0x00, 0x17, -+ 0xae, 0xb4, 0xb6, 0x6f, 0x96, 0x8b, 0x37, 0xaa, 0x31, 0x83, 0x36, 0x60, 0xd0, 0xbd, 0x99, 0xdd, -+ 0x51, 0x3b, 0xe2, 0xe4, 0x3e, 0x6b, 0x16, 0x1b, 0x0f, 0x93, 0x7d, 0x34, 0x71, 0xe7, 0x41, 0x54, -+ 0xc2, 0xd5, 0x87, 0x18, 0xa6, 0x87, 0x0b, 0x0e, 0x89, 0xbc, 0x5c, 0x05, 0x3e, 0x41, 0xf5, 0x0e, -+ 0x3a, 0x65, 0xc6, 0x27, 0x55, 0x78, 0x25, 0x3e, 0x28, 0xf2, 0x82, 0xcd, 0xdc, 0xcc, 0xe1, 0x5e, -+ 0xcc, 0xe0, 0x73, 0x4e, 0x19, 0xc1, 0xec, 0xf7, 0xf8, 0xee, 0x49, 0x68, 0xeb, 0x9b, 0x73, 0x1b, -+ 0x21, 0x64, 0x81, 0x32, 0x18, 0xc9, 0xba, 0x46, 0x4c, 0xd0, 0xcb, 0x8e, 0xb7, 0x51, 0x6a, 0xfa, -+ 0x69, 0x1e, 0x07, 0xd7, 0x15, 0x54, 0x72, 0xf2, 0x08, 0xd8, 0xc2, 0xee, 0xa8, 0x33, 0x7f, 0x0c, -+ 0x17, 0x57, 0xb3, 0xd4, 0x1c, 0x7c, 0x92, 0x46, 0x69, 0x8c, 0x3e, 0x43, 0x2f, 0x97, 0x8e, 0x8c, -+ 0xc9, 0x8f, 0x42, 0xe7, 0x06, 0xd2, 0x0e, 0x02, 0xff, 0x39, 0x34, 0x09, 0x02, 0x23, 0xba, 0x11, -+ 0xe4, 0x5a, 0xab, 0x61, 0xc3, 0x80, 0x81, 0x19, 0xad, 0x96, 0xe1, 0xcd, 0x86, 0x85, 0xe8, 0x78, -+ 0x8d, 0x4e, 0x00, 0xfd, 0x71, 0x61, 0xc7, 0xc4, 0x98, 0x0f, 0xd2, 0x67, 0xdb, 0xf1, 0xa0, 0x29, -+ 0xd9, 0x37, 0x18, 0xc3, 0xa0, 0xe1, 0x24, 0x1e, 0xf3, 0x9a, 0xeb, 0x9e, 0xca, 0x88, 0xb2, 0x8e, -+ 0x20, 0x4f, 0x65, 0x04, 0xa5, 0xc2, 0x3e, 0xca, 0x3d, 0xd4, 0x4f, 0xba, 0xc7, 0xe6, 0xf3, 0x9a, -+ 0x03, 0x5f, 0x50, 0x84, 0x4f, 0x58, 0xc5, 0xa0, 0x82, 0xc2, 0x53, 0xe9, 0xc4, 0xe3, 0x31, 0xaa, -+ 0x9d, 0x19, 0x66, 0x4c, 0x76, 0x02, 0xbc, 0x8f, 0xd5, 0xff, 0x19, 0x9b, 0x41, 0xa5, 0xf0, 0xd7, -+ 0xec, 0x67, 0xde, 0x12, 0x0a, 0x0f, 0x98, 0x29, 0x68, 0x23, 0xe1, 0xa1, 0x56, 0xea, 0xb1, 0x65, -+ 0x25, 0x1b, 0x24, 0x8c, 0xb3, 0x41, 0x5c, 0x7a, 0xb5, 0xcf, 0x3a, 0x19, 0xe4, 0x80, 0xec, 0x67, -+ 0x4f, 0x5f, 0x72, 0xc2, 0x0a, 0xa6, 0xfb, 0x6c, 0xf4, 0xdc, 0x22, 0x73, 0x8a, 0xde, 0xd9, 0xb4, -+ 0x66, 0xa2, 0x28, 0x84, 0x62, 0xb9, 0xea, 0x26, 0x96, 0xbb, 0xf4, 0x37, 0x4b, 0x5c, 0x36, 0x95, -+ 0x07, 0x0d, 0x5d, 0x47, 0xa5, 0x58, 0xc6, 0xfb, 0xba, 0x80, 0x8d, 0xbd, 0x97, 0x04, 0x37, 0x48, -+ 0xe4, 0x95, 0xb9, 0x1f, 0xc3, 0x22, 0xcc, 0x55, 0x9f, 0x47, 0xa2, 0xce, 0xe3, 0x54, 0x12, 0x7a, -+ 0x53, 0x47, 0x90, 0xec, 0x68, 0xcb, 0xf7, 0xe2, 0x53, 0x12, 0x08, 0xd6, 0xb0, 0x77, 0x09, 0xa0, -+ 0x51, 0x95, 0x25, 0x69, 0x11, 0xe0, 0xbb, 0x0e, 0x47, 0x50, 0x65, 0x01, 0x26, 0x9c, 0x50, 0x92, -+ 0xe0, 0x5c, 0x10, 0xca, 0xf1, 0x7a, 0xcb, 0x9d, 0x73, 0x3e, 0xe8, 0x74, 0xa4, 0x54, 0x15, 0xc3, -+ 0x20, 0xbe, 0xad, 0xbe, 0xc7, 0x46, 0xb6, 0xc0, 0xbe, 0x65, 0x5a, 0x6b, 0x97, 0xd2, 0x4b, 0xd5, -+ 0xad, 0x2e, 0xa5, 0x52, 0x45, 0xd9, 0xfa, 0x32, 0xe8, 0x52, 0x12, 0xc2, 0x8b, 0xc4, 0x27, 0x05, -+ 0xa5, 0x70, 0xf2, 0x78, 0x29, 0xec, 0xc7, 0x4a, 0x43, 0x24, 0xac, 0x6f, 0x85, 0x3e, 0x20, 0xaa, -+ 0xf6, 0x25, 0xab, 0xd1, 0x0a, 0xdb, 0x53, 0xb9, 0x3f, 0xcc, 0x61, 0xd6, 0x18, 0xa2, 0xe3, 0x7c, -+ 0x3a, 0xf1, 0xb8, 0x8e, 0x14, 0x65, 0x47, 0xc9, 0x07, 0x15, 0x1a, 0x5c, 0x5f, 0x95, 0x93, 0x57, -+ 0x31, 0x61, 0x09, 0xd7, 0xf0, 0x5c, 0xbd, 0x4e, 0xa7, 0x92, 0x6f, 0x8f, 0x62, 0x59, 0x65, 0x58, -+ 0xd6, 0xa5, 0x5a, 0x90, 0x2c, 0x72, 0xf7, 0x5b, 0xa0, 0xd3, 0x3e, 0xef, 0xed, 0x71, 0x26, 0xb0, -+ 0x9f, 0x51, 0x1f, 0xfe, 0xfd, 0x70, 0xe5, 0xa8, 0x26, 0x92, 0x3a, 0xa1, 0xe3, 0x13, 0x25, 0x61, -+ 0x69, 0x76, 0x84, 0xd0, 0x03, 0xbd, 0x1b, 0x39, 0x6d, 0x3a, 0x62, 0x81, 0x15, 0x28, 0xdb, 0x93, -+ 0xb2, 0xbc, 0xcf, 0x4a, 0xa6, 0xe9, 0xb9, 0x74, 0x74, 0xbf, 0xae, 0x45, 0x87, 0x93, 0x0a, 0xd1, -+ 0xd1, 0x7c, 0xc4, 0x77, 0x10, 0x2c, 0x2a, 0xd1, 0x1c, 0x49, 0x97, 0x4b, 0x5b, 0xd6, 0xe8, 0xed, -+ 0xcd, 0x0e, 0x6f, 0x98, 0x06, 0x8f, 0xb6, 0x8f, 0x64, 0xcd, 0x71, 0x3b, 0x8e, 0x9c, 0x7d, 0x54, -+ 0xde, 0x82, 0xaa, 0x96, 0x59, 0x4e, 0x15, 0xe1, 0x61, 0xd9, 0xf7, 0x90, 0x4f, 0x27, 0xc6, 0xae, -+ 0xe8, 0xcd, 0xa5, 0x74, 0xd5, 0xca, 0x61, 0xd9, 0x54, 0x0a, 0xee, 0xbc, 0x52, 0xf0, 0x2d, 0xfa, -+ 0xc8, 0x6d, 0x6f, 0xc3, 0xf5, 0x7e, 0x74, 0x1c, 0xe7, 0x25, 0xf7, 0x94, 0xd2, 0x1f, 0xd6, 0x34, -+ 0xcd, 0x03, 0xbd, 0xe4, 0x52, 0x7a, 0x29, 0xe1, 0xfa, 0x15, 0xd0, 0xb1, 0x14, 0x33, 0xd5, 0x2f, -+ 0x82, 0x14, 0xc1, 0xda, 0xfe, 0x63, 0x70, 0x3c, 0x8a, 0x8f, 0x43, 0x52, 0xc0, 0xcc, 0x3a, 0xb3, -+ 0xdb, 0x60, 0xdc, 0x4c, 0x61, 0x29, 0x45, 0x03, 0xe6, 0x1c, 0x6e, 0xcc, 0x9c, 0x61, 0x5a, 0xb7, -+ 0x4c, 0x0b, 0x7a, 0x1f, 0xd1, 0x6a, 0x0d, 0x38, 0x51, 0x88, 0xf3, 0x3b, 0x89, 0xb1, 0x2b, 0xb3, -+ 0x30, 0xdd, 0xad, 0x4b, 0xec, 0xc4, 0xa2, 0xd6, 0xfe, 0xd9, 0x80, 0x6d, 0x96, 0x04, 0xdb, 0x99, -+ 0x7b, 0xee, 0x77, 0xf8, 0x29, 0x41, 0x5b, 0x1a, 0x43, 0x86, 0x03, 0xd6, 0x0c, 0xbf, 0x75, 0x70, -+ 0x6c, 0xb2, 0xe1, 0xf5, 0x22, 0x37, 0x07, 0xe6, 0x1a, 0xac, 0x17, 0x0b, 0xae, 0xb2, 0x9f, 0x68, -+ 0xc1, 0xd5, 0x60, 0x51, 0x46, 0x2c, 0x8a, 0xbb, 0x1a, 0xec, 0x3e, 0x1a, 0xc6, 0xfa, 0x31, 0x87, -+ 0xbb, 0x17, 0xf6, 0x75, 0xbd, 0x4b, 0xe1, 0x38, 0x49, 0x04, 0xae, 0x47, 0xc5, 0x9d, 0x09, 0x6c, -+ 0x8c, 0x85, 0x74, 0xb0, 0xa7, 0xef, 0xf6, 0x3b, 0x84, 0xf3, 0x2e, 0x46, 0x6c, 0x5b, 0x9e, 0x6d, -+ 0xd7, 0x52, 0x19, 0x9e, 0xc1, 0x51, 0xef, 0x6a, 0x61, 0x7d, 0x5b, 0xda, 0x88, 0x29, 0xb0, 0xe8, -+ 0xc0, 0xd2, 0x1c, 0x09, 0x16, 0x2a, 0x73, 0xc6, 0x3f, 0xcd, 0x91, 0xf9, 0xfb, 0x60, 0x75, 0xda, -+ 0xb1, 0x47, 0x78, 0x02, 0x94, 0x0a, 0xab, 0x93, 0x90, 0x05, 0x58, 0x4b, 0xb9, 0xb1, 0x80, 0x35, -+ 0x6d, 0x5b, 0xa4, 0x66, 0xc0, 0xac, 0xe1, 0x26, 0xc0, 0xf1, 0x20, 0xce, 0x07, 0xf5, 0x46, 0x75, -+ 0x02, 0x4b, 0xe6, 0x0d, 0x8c, 0x58, 0x73, 0xff, 0xd2, 0x53, 0xe0, 0xeb, 0x46, 0xfd, 0xb2, 0xf0, -+ 0xc8, 0xbb, 0xb3, 0x3c, 0xf1, 0x04, 0xc6, 0xfa, 0xf3, 0x29, 0x5c, 0x26, 0x90, 0xe0, 0x54, 0x1b, -+ 0x1f, 0x58, 0xea, 0x31, 0x62, 0xb5, 0x5d, 0x69, 0x15, 0x35, 0x3d, 0x69, 0xe2, 0xae, 0x05, 0x59, -+ 0xd6, 0x65, 0x61, 0x2b, 0xc6, 0x9b, 0x35, 0x21, 0x60, 0x3d, 0x1d, 0x65, 0x06, 0xac, 0x8e, 0xc8, -+ 0xb5, 0x56, 0x70, 0xe0, 0xd1, 0x3d, 0x70, 0x4c, 0x1a, 0x08, 0x30, 0xf5, 0x76, 0x13, 0x66, 0xe9, -+ 0x79, 0xdf, 0x97, 0x1c, 0x7e, 0x73, 0x77, 0x7b, 0x81, 0x2c, 0x79, 0x1c, 0x2c, 0x8b, 0x3b, 0x4d, -+ 0x66, 0x65, 0x60, 0xac, 0x6b, 0xeb, 0x71, 0xea, 0xa8, 0xdf, 0xf8, 0x14, 0x1c, 0x17, 0xe1, 0xb4, -+ 0x8b, 0xaf, 0xff, 0x0a, 0x60, 0xc9, 0x9e, 0x3c, 0x3d, 0xb0, 0x80, 0x16, 0x73, 0x02, 0x2c, 0xa2, -+ 0x85, 0x2b, 0x01, 0xfe, 0xb1, 0x7f, 0xd7, 0x61, 0xff, 0xde, 0xae, 0xc5, 0x58, 0x5d, 0x4e, 0x74, -+ 0x30, 0x2b, 0x70, 0x05, 0x80, 0x98, 0x9c, 0x20, 0xce, 0x29, 0xc7, 0x8c, 0xfb, 0x49, 0x87, 0x27, -+ 0x6a, 0x73, 0x35, 0xce, 0xb1, 0x90, 0x93, 0x2f, 0x5c, 0x76, 0x5f, 0x90, 0xa2, 0xc1, 0x00, 0x04, -+ 0x3e, 0x77, 0xa4, 0x9f, 0x11, 0x0c, 0x3c, 0x58, 0xf0, 0x2d, 0xde, 0x91, 0x6c, 0x91, 0xd5, 0x2d, -+ 0xf1, 0x88, 0x11, 0xb7, 0xc3, 0x20, 0xfc, 0x2a, 0xc4, 0x43, 0xae, 0xf6, 0x17, 0xae, 0xdd, 0xcf, -+ 0x94, 0xbd, 0x8c, 0x5a, 0x41, 0xda, 0xe8, 0xe8, 0x6e, 0x90, 0x96, 0xf6, 0xa8, 0x15, 0x1f, 0xf7, -+ 0xa2, 0x78, 0x97, 0x6e, 0x4f, 0x47, 0x47, 0x42, 0xbb, 0xd9, 0x3b, 0x2b, 0x67, 0x0c, 0xdc, 0x42, -+ 0xb5, 0x3f, 0x7d, 0xed, 0x24, 0xc5, 0xce, 0x23, 0x6c, 0x80, 0xba, 0x93, 0x87, 0xc0, 0xac, 0x35, -+ 0x05, 0x7a, 0x50, 0x5e, 0xbc, 0x10, 0x1b, 0x82, 0x66, 0x3a, 0xdf, 0x01, 0xd2, 0x50, 0x66, 0xa7, -+ 0xc9, 0xc2, 0xed, 0x27, 0xc9, 0xb6, 0xec, 0x3c, 0xe8, 0x91, 0x96, 0x68, 0x9d, 0x64, 0x73, 0x3a, -+ 0x27, 0x03, 0xaf, 0x61, 0x06, 0xa6, 0xc7, 0x38, 0x19, 0x78, 0xc2, 0x8a, 0x8f, 0x27, 0x18, 0x98, -+ 0x1e, 0xe3, 0x62, 0x20, 0x77, 0x1c, 0x18, 0xd8, 0x3d, 0x95, 0x81, 0x74, 0x8a, 0x01, 0x86, 0x17, -+ 0x66, 0xa0, 0xce, 0xc9, 0x80, 0x12, 0x33, 0x50, 0x37, 0x89, 0x81, 0x3a, 0x17, 0x03, 0x5d, 0xd9, -+ 0x78, 0x6b, 0x3f, 0x7f, 0x0a, 0x03, 0x1d, 0x4e, 0x06, 0x0e, 0x61, 0x06, 0x0a, 0x5c, 0x0c, 0x3c, -+ 0x65, 0xc5, 0xc7, 0x13, 0x0c, 0x14, 0xb8, 0x19, 0xc8, 0x1b, 0xec, 0x83, 0xa9, 0x31, 0x95, 0x81, -+ 0x05, 0x14, 0x03, 0x45, 0x14, 0x03, 0x8d, 0x4e, 0x06, 0x4c, 0x98, 0x81, 0xc6, 0x49, 0x0c, 0x34, -+ 0xba, 0x18, 0x18, 0x36, 0xe6, 0x40, 0x8f, 0x8c, 0x29, 0x0c, 0xd8, 0x9c, 0x0c, 0xbc, 0x8b, 0x19, -+ 0xd8, 0xe7, 0x62, 0xe0, 0x59, 0x2b, 0x3e, 0x9e, 0x60, 0x60, 0x9f, 0x9b, 0x81, 0xe5, 0x67, 0x81, -+ 0x81, 0xe3, 0x53, 0x19, 0xc8, 0xa4, 0x18, 0x70, 0x2d, 0x16, 0xd7, 0x0e, 0xe7, 0xe1, 0x4a, 0xa8, -+ 0xeb, 0xa4, 0x9f, 0x7b, 0x15, 0xf9, 0x79, 0x94, 0x01, 0x46, 0x9f, 0xea, 0xcb, 0xd2, 0xb8, 0xa7, -+ 0x58, 0xaa, 0x04, 0x77, 0xa8, 0x10, 0x36, 0xf6, 0xe2, 0xdc, 0xc3, 0xb3, 0x22, 0x87, 0x6b, 0x7e, -+ 0xd1, 0x60, 0x7e, 0x59, 0xb8, 0x1c, 0x20, 0xda, 0x5d, 0x15, 0x03, 0xf3, 0xab, 0x7b, 0xbb, 0x54, -+ 0xeb, 0x9e, 0xcd, 0xdd, 0x5c, 0x2e, 0xb4, 0x97, 0x1a, 0xc6, 0xfd, 0x2b, 0xc1, 0xdd, 0x9c, 0xea, -+ 0x47, 0xc1, 0x13, 0x53, 0xf9, 0xf0, 0x32, 0x19, 0xe0, 0xb6, 0x6e, 0x59, 0x88, 0x6f, 0x9b, 0x2f, -+ 0x37, 0x12, 0x6b, 0x5d, 0x8e, 0x83, 0xb9, 0x3c, 0x07, 0xd3, 0x0c, 0x63, 0x1c, 0x2c, 0xc5, 0xb7, -+ 0xeb, 0x62, 0x58, 0xdd, 0x4e, 0xaf, 0x41, 0x25, 0x0e, 0x34, 0x34, 0xac, 0x92, 0xd7, 0xbd, 0xbc, -+ 0x40, 0x55, 0x35, 0x93, 0x54, 0x55, 0xe3, 0x36, 0x16, 0xe6, 0x9d, 0x78, 0x74, 0xa7, 0xa8, 0x6a, -+ 0x37, 0xa5, 0x2a, 0x8d, 0x78, 0xb5, 0x03, 0x8f, 0x9b, 0x1a, 0xf3, 0x40, 0xcd, 0xac, 0x0e, 0x7f, -+ 0x3f, 0x68, 0xb7, 0xb3, 0x88, 0x39, 0x79, 0x05, 0x10, 0xfe, 0x6e, 0x27, 0xe2, 0x87, 0x3d, 0x77, -+ 0x19, 0x79, 0xcf, 0x69, 0x31, 0xee, 0xbf, 0x7d, 0x4c, 0xdb, 0xc0, 0xdf, 0xf1, 0x1c, 0x87, 0xde, -+ 0xed, 0x9a, 0xc4, 0x3b, 0x9e, 0x33, 0xe1, 0xf6, 0x54, 0xce, 0x26, 0x1d, 0xa8, 0xea, 0xf0, 0x72, -+ 0xbe, 0x66, 0xd2, 0x0c, 0xbe, 0xc0, 0xc0, 0xb3, 0x64, 0xef, 0x4b, 0x41, 0x30, 0x7b, 0xc6, 0x27, -+ 0xcd, 0x9e, 0x71, 0x6a, 0xf6, 0x74, 0xc9, 0x35, 0x5e, 0x4f, 0xe2, 0x51, 0x2d, 0xd0, 0xba, 0x9c, -+ 0x05, 0x95, 0x09, 0x8d, 0x21, 0xf1, 0xd8, 0xbd, 0xf9, 0xf6, 0xed, 0xc6, 0x6e, 0xad, 0xa5, 0xff, -+ 0xb7, 0xc7, 0xee, 0xd4, 0xb6, 0x35, 0x79, 0xf3, 0x13, 0x5d, 0x8b, 0x96, 0xa6, 0x61, 0x3c, 0xe8, -+ 0x96, 0x73, 0xb7, 0x4b, 0x6e, 0xde, 0x79, 0x02, 0xa8, 0x97, 0x4f, 0xa1, 0xde, 0x1b, 0x4d, 0x51, -+ 0xbf, 0x28, 0x8b, 0xbf, 0xcd, 0xc0, 0x69, 0x82, 0x5f, 0xbc, 0xdd, 0xc0, 0x7d, 0x21, 0x7f, 0x00, -+ 0x17, 0x24, 0x4c, 0x52, 0xa8, 0xce, 0xa5, 0x50, 0x79, 0x42, 0x0e, 0xec, 0x4e, 0xac, 0x53, 0x15, -+ 0xba, 0x97, 0x52, 0xe8, 0xab, 0xf4, 0x9e, 0xdb, 0x4d, 0xd3, 0xf5, 0xa7, 0x6e, 0x37, 0x4d, 0xef, -+ 0x60, 0x3f, 0x08, 0x36, 0xd2, 0x34, 0xc9, 0x46, 0x9a, 0xdc, 0x36, 0x62, 0x1f, 0xdc, 0x1e, 0x62, -+ 0xc8, 0x9a, 0x6a, 0x23, 0x75, 0x94, 0x8d, 0x54, 0x0a, 0xae, 0xdd, 0x6e, 0xec, 0x5e, 0x38, 0xe8, -+ 0x7f, 0xbb, 0xb1, 0x13, 0x1b, 0x59, 0x60, 0xf6, 0x19, 0x93, 0xcc, 0x3e, 0xc3, 0x65, 0xf6, 0x79, -+ 0x2f, 0xc4, 0x80, 0x14, 0xcf, 0x4f, 0x31, 0x7b, 0x87, 0xd3, 0xec, 0xd3, 0x48, 0x6f, 0x30, 0xc7, -+ 0xad, 0x93, 0xcc, 0x71, 0xab, 0xcb, 0x1c, 0x3b, 0x07, 0xee, 0xc2, 0xc3, 0x35, 0xc5, 0x1c, 0x8f, -+ 0x53, 0xe6, 0xe8, 0xde, 0x96, 0x3c, 0x68, 0x1c, 0x08, 0x1d, 0x3c, 0xec, 0x8a, 0x4c, 0x65, 0x1f, -+ 0xf4, 0x62, 0xe1, 0x96, 0x39, 0x85, 0x33, 0x7e, 0x3a, 0xb2, 0x0b, 0x0f, 0xd1, 0x14, 0xe1, 0xca, -+ 0x29, 0xe1, 0x4e, 0x04, 0x62, 0x2a, 0x95, 0x6e, 0x07, 0xb5, 0xad, 0x12, 0xfb, 0xd4, 0x29, 0x54, -+ 0xaa, 0x29, 0x2a, 0xa6, 0x03, 0x93, 0xc7, 0x65, 0x74, 0xae, 0xe6, 0x76, 0xe3, 0xb2, 0xb2, 0x09, -+ 0x2b, 0x68, 0xaf, 0x4b, 0x41, 0x07, 0xd5, 0x41, 0xb0, 0xbc, 0x4e, 0x55, 0xd0, 0x59, 0x4a, 0x41, -+ 0x91, 0xb3, 0xb0, 0x49, 0x8d, 0xb9, 0x4c, 0xaa, 0x7d, 0xd7, 0x21, 0xac, 0xef, 0x29, 0x26, 0x95, -+ 0x45, 0x19, 0x34, 0xb9, 0x4c, 0x3d, 0xd9, 0x03, 0x56, 0x98, 0x0f, 0xdf, 0xc6, 0x03, 0xde, 0xc9, -+ 0x9b, 0xac, 0xe4, 0xca, 0x19, 0x73, 0x6e, 0xa3, 0xe4, 0x9c, 0xbb, 0xb1, 0x59, 0x8e, 0xb9, 0xcc, -+ 0xd2, 0x14, 0x86, 0xcb, 0x08, 0xae, 0x4c, 0x31, 0xcb, 0xc5, 0x77, 0x51, 0x66, 0xe9, 0x0a, 0xe9, -+ 0xae, 0xef, 0x0e, 0x7b, 0x90, 0x0c, 0x9d, 0x88, 0x89, 0xa9, 0xa7, 0x3c, 0xda, 0x38, 0x1b, 0x31, -+ 0x23, 0xbb, 0x83, 0x6c, 0x77, 0x21, 0x2d, 0xab, 0xdf, 0x73, 0x2f, 0xde, 0x1a, 0x13, 0xfd, 0x41, -+ 0xfb, 0x3f, 0x0b, 0x2e, 0x7b, 0x79, 0xf2, 0x88, 0x47, 0xe9, 0x38, 0x8f, 0xb8, 0x84, 0xca, 0x23, -+ 0xe2, 0x3f, 0x46, 0xdb, 0x9d, 0x65, 0x01, 0x8b, 0x3f, 0xa2, 0xb2, 0x89, 0xdb, 0xdb, 0xee, 0xd8, -+ 0x1d, 0x70, 0x47, 0x62, 0xc0, 0xb2, 0xd5, 0x6d, 0xb9, 0xde, 0x01, 0x77, 0x1d, 0x54, 0xde, 0x43, -+ 0x3d, 0x10, 0xc1, 0xcc, 0x51, 0xe2, 0x7b, 0x69, 0xd3, 0xa2, 0xb0, 0x23, 0xbd, 0xfb, 0x34, 0xd5, -+ 0x84, 0x2f, 0x50, 0x37, 0xe8, 0x71, 0x4e, 0xf0, 0x79, 0x77, 0x4e, 0x70, 0x61, 0x1e, 0xf5, 0xcc, -+ 0xa0, 0x52, 0xc8, 0xc0, 0xef, 0xe0, 0x21, 0x39, 0xb6, 0x26, 0xc2, 0x95, 0x14, 0xab, 0xab, 0x51, -+ 0x57, 0xd6, 0xe2, 0x27, 0xd2, 0xd5, 0x05, 0x85, 0x45, 0xc5, 0x25, 0x1b, 0x4a, 0x37, 0xd6, 0x25, -+ 0xd6, 0x25, 0x55, 0x50, 0xc9, 0xb9, 0xcd, 0xca, 0x44, 0xe9, 0xc4, 0x33, 0xcf, 0xca, 0xa5, 0xae, -+ 0x9c, 0xdd, 0x66, 0xe5, 0x66, 0xe5, 0xd2, 0xa9, 0x29, 0x3b, 0xfc, 0x58, 0xaa, 0xf1, 0x25, 0xef, -+ 0xfb, 0xee, 0xfc, 0x70, 0x76, 0x27, 0x63, 0x9c, 0x57, 0xa6, 0x0c, 0xda, 0x88, 0x34, 0xa8, 0x45, -+ 0x4f, 0x72, 0x3a, 0x68, 0x68, 0x84, 0x89, 0x86, 0x66, 0xe9, 0xf7, 0x36, 0x32, 0xe7, 0x09, 0x4b, -+ 0x02, 0x75, 0xcb, 0x7b, 0xf4, 0x61, 0x9c, 0xd9, 0xac, 0xe7, 0xed, 0x3b, 0xdf, 0x6f, 0xbf, 0x97, -+ 0x91, 0x7e, 0x89, 0x57, 0x8d, 0x13, 0x63, 0xcf, 0x37, 0x36, 0xa5, 0x09, 0xef, 0xe3, 0x2f, 0xb2, -+ 0x05, 0x3f, 0x9c, 0xf8, 0x2a, 0xa7, 0xe6, 0x74, 0xe0, 0x3f, 0x65, 0x70, 0x55, 0x75, 0x89, 0xf7, -+ 0x30, 0xbe, 0x6a, 0x69, 0x6c, 0x5a, 0x38, 0x72, 0x1f, 0xbf, 0x70, 0x34, 0xf8, 0xd1, 0x83, 0x6a, -+ 0xa4, 0xcc, 0x9a, 0x96, 0xea, 0x4b, 0x93, 0x05, 0x59, 0xbb, 0xb3, 0x07, 0xb9, 0x49, 0x8d, 0x4d, -+ 0x29, 0xb2, 0xed, 0xf8, 0x59, 0xbd, 0xac, 0xe5, 0xed, 0xb6, 0xd9, 0x9d, 0x3a, 0x67, 0xfe, 0xa7, -+ 0x26, 0x2b, 0x6a, 0x9d, 0xda, 0xbb, 0x9c, 0xc0, 0xf9, 0x1f, 0x93, 0xff, 0xec, 0x4b, 0xbc, 0x4d, -+ 0x38, 0xff, 0xd3, 0xba, 0xd4, 0xb8, 0x57, 0xb5, 0x7d, 0x55, 0x3e, 0xfd, 0x7e, 0xaa, 0x2a, 0xe0, -+ 0x6c, 0xf6, 0xd2, 0x9e, 0xde, 0xd0, 0x11, 0x1a, 0xae, 0x0a, 0x90, 0xc4, 0xac, 0x3d, 0x1d, 0xf8, -+ 0x99, 0x35, 0x88, 0xaa, 0x0a, 0x48, 0xbf, 0xe4, 0xf7, 0x86, 0x85, 0xf5, 0x36, 0x42, 0x14, 0x89, -+ 0xf6, 0xc6, 0xa6, 0xb9, 0x16, 0xa6, 0x93, 0x44, 0x7f, 0xff, 0xec, 0x03, 0xba, 0x39, 0xd4, 0xe3, -+ 0x80, 0xb0, 0x18, 0x4c, 0x22, 0x91, 0x34, 0x89, 0x44, 0xfb, 0x24, 0x12, 0x8c, 0x65, 0x2e, 0x12, -+ 0x4f, 0x4c, 0x97, 0xe0, 0x1c, 0x1b, 0x53, 0x18, 0x80, 0x10, 0x95, 0x8c, 0xa3, 0x18, 0xc0, 0x57, -+ 0xed, 0x70, 0x16, 0x16, 0x71, 0x28, 0xcd, 0xab, 0x0b, 0x62, 0xba, 0x7c, 0xaf, 0xb7, 0x4b, 0xbd, -+ 0xde, 0x69, 0xf4, 0xea, 0x6e, 0xf1, 0x7a, 0xb7, 0x7d, 0xe7, 0x9f, 0x71, 0x32, 0x6d, 0x59, 0xb9, -+ 0xf0, 0x82, 0x03, 0x27, 0xd3, 0xb4, 0xfe, 0xf3, 0x7d, 0x22, 0x4d, 0x92, 0xec, 0x6d, 0xad, 0xc6, -+ 0x1a, 0xba, 0x6e, 0x2f, 0x0a, 0x10, 0xb7, 0x9d, 0x65, 0x98, 0x4f, 0xcb, 0xb4, 0x31, 0x28, 0x8a, -+ 0x2d, 0xcb, 0x20, 0xf6, 0x2f, 0x14, 0x5e, 0xe5, 0xca, 0x3a, 0xf4, 0xd6, 0xbb, 0x50, 0x34, 0xe7, -+ 0x19, 0x71, 0x9e, 0xb0, 0x25, 0xbd, 0x9d, 0xe4, 0xbc, 0x26, 0x95, 0x97, 0xaa, 0xd4, 0x7a, 0x7b, -+ 0x4f, 0x2f, 0xa3, 0x23, 0xbd, 0x99, 0x9b, 0x65, 0x10, 0xf8, 0x1b, 0x97, 0x84, 0x47, 0x73, 0x96, -+ 0xe5, 0xe5, 0x09, 0xd1, 0x33, 0xed, 0x24, 0x4a, 0x4d, 0x94, 0x23, 0x08, 0x89, 0xd0, 0x58, 0x3f, -+ 0x83, 0x70, 0x6c, 0xe7, 0xd2, 0x1c, 0xfe, 0xfe, 0x0c, 0x14, 0x17, 0xcd, 0xd1, 0xe6, 0xe7, 0x09, -+ 0x9f, 0x39, 0x08, 0x00, 0x45, 0x00, 0x70, 0x04, 0x00, 0xda, 0x0f, 0x33, 0x88, 0xb4, 0x9d, 0x5c, -+ 0x9a, 0x36, 0xc8, 0x9f, 0x41, 0xce, 0x01, 0x80, 0x35, 0x79, 0x42, 0xed, 0x5b, 0x00, 0xb0, 0x0f, -+ 0x00, 0x8a, 0x0a, 0xf5, 0x68, 0x68, 0x80, 0x41, 0x98, 0x77, 0x71, 0xb3, 0xee, 0x09, 0xc3, 0xf5, -+ 0x12, 0x84, 0x6c, 0x97, 0x3b, 0x2f, 0x66, 0x1e, 0xc7, 0x8f, 0x04, 0x38, 0xb7, 0xb4, 0x54, 0xad, -+ 0x53, 0xba, 0x27, 0x2f, 0xa6, 0xd5, 0x53, 0x45, 0xbf, 0xd4, 0x9e, 0x94, 0x3f, 0x51, 0x86, 0x64, -+ 0xb6, 0x3c, 0x47, 0xd5, 0x61, 0x4e, 0xd4, 0x5d, 0x69, 0x7b, 0x4b, 0xa8, 0xdd, 0xf3, 0x44, 0xa5, -+ 0x03, 0x8d, 0x77, 0x3f, 0x95, 0x60, 0xe9, 0xf3, 0x54, 0x42, 0x79, 0xc5, 0x96, 0x17, 0xdd, 0x84, -+ 0x68, 0xd7, 0x4d, 0x88, 0xa2, 0x6f, 0x46, 0x34, 0x72, 0x13, 0x22, 0xd5, 0x4d, 0x88, 0xfe, 0x7d, -+ 0xed, 0x46, 0x44, 0xe7, 0x7f, 0xb8, 0x09, 0xd1, 0x27, 0x37, 0x21, 0xca, 0x70, 0x21, 0x92, 0xb1, -+ 0xfa, 0xc1, 0xd3, 0x6f, 0x22, 0xcf, 0xe2, 0xfb, 0xb8, 0xd4, 0x33, 0x18, 0x87, 0x78, 0x39, 0x93, -+ 0xaa, 0x44, 0x79, 0xf1, 0x18, 0xf0, 0x02, 0xf5, 0x2c, 0x1b, 0x78, 0xa8, 0x4d, 0x42, 0x36, 0xa5, -+ 0xa5, 0x41, 0x96, 0x5e, 0x25, 0x7c, 0x25, 0x4b, 0xc3, 0x1e, 0x9c, 0x54, 0x65, 0xc7, 0x13, 0x53, -+ 0x0c, 0xf7, 0x4f, 0xd5, 0xa5, 0x91, 0xf6, 0x33, 0x55, 0x1a, 0x9c, 0xa8, 0x46, 0x43, 0x7e, 0xf8, -+ 0x99, 0x8d, 0x30, 0xce, 0x7c, 0xfc, 0xc4, 0xfe, 0xae, 0x74, 0x54, 0x2d, 0xe4, 0xaf, 0x4c, 0x19, -+ 0x43, 0xfd, 0x72, 0x4f, 0xf9, 0x46, 0x0f, 0x26, 0x44, 0x3d, 0x06, 0x67, 0xa0, 0xd6, 0xf2, 0xe5, -+ 0x9e, 0x9b, 0x79, 0x2f, 0x38, 0xf0, 0x68, 0x19, 0x28, 0x0a, 0x03, 0xf8, 0xce, 0x98, 0xcd, 0x0b, -+ 0x5c, 0xf5, 0xbc, 0xfc, 0xcd, 0xae, 0x2a, 0x02, 0x13, 0x21, 0xc4, 0xdb, 0xdc, 0x53, 0x4c, 0xe0, -+ 0xb2, 0x4a, 0xfa, 0x1d, 0x03, 0xad, 0x95, 0xb3, 0x17, 0xc0, 0x26, 0x85, 0x08, 0xb9, 0xc0, 0x40, -+ 0x5d, 0x72, 0x91, 0x01, 0xfc, 0x66, 0xa3, 0xa1, 0x32, 0x06, 0x39, 0xef, 0xf5, 0x85, 0x20, 0xe0, -+ 0x47, 0x85, 0x58, 0xf3, 0xf0, 0x46, 0x46, 0x1e, 0x0a, 0x30, 0x6b, 0x55, 0x17, 0x5a, 0xe5, 0x97, -+ 0x58, 0x27, 0x81, 0xe4, 0x9c, 0x2d, 0x16, 0x70, 0x99, 0x62, 0xe9, 0x02, 0x7c, 0x1f, 0xea, 0x04, -+ 0x2e, 0x56, 0x77, 0x98, 0x47, 0xb8, 0xc8, 0xf9, 0xa4, 0x10, 0x0b, 0x57, 0xce, 0x88, 0xda, 0x6c, -+ 0xde, 0x40, 0x48, 0x23, 0x04, 0x42, 0x7b, 0x7d, 0xa9, 0x8e, 0x1a, 0x8b, 0x3f, 0xd2, 0xec, 0x9e, -+ 0x06, 0xc7, 0x04, 0x5b, 0x6d, 0xc1, 0xb7, 0x7c, 0x46, 0xbd, 0x71, 0x95, 0x94, 0xa0, 0xeb, 0x39, -+ 0xe4, 0x7c, 0x4c, 0xa8, 0x08, 0x61, 0xd5, 0xb0, 0xbf, 0x00, 0x0a, 0x81, 0x36, 0xd0, 0xba, 0x46, -+ 0x03, 0xbd, 0xbb, 0x54, 0x83, 0x2b, 0x47, 0x9f, 0x49, 0x8c, 0xfd, 0x4a, 0x35, 0xe2, 0x2c, 0x7e, -+ 0x50, 0xe3, 0xed, 0xcc, 0x3c, 0x19, 0xc8, 0x25, 0x4c, 0x66, 0x8a, 0x70, 0xa1, 0xbc, 0xf9, 0x6f, -+ 0x13, 0x37, 0xa3, 0x82, 0x07, 0xa9, 0xb4, 0x00, 0xf5, 0xcc, 0x10, 0xae, 0xc5, 0x20, 0x63, 0x10, -+ 0x4a, 0x5c, 0xa5, 0xd5, 0xc1, 0x0a, 0xe9, 0x3d, 0xa8, 0x8a, 0x41, 0xee, 0xba, 0x9d, 0x07, 0x48, -+ 0x2a, 0xb7, 0x80, 0xeb, 0x76, 0xd8, 0x55, 0x78, 0xff, 0xbc, 0x17, 0x69, 0x47, 0x59, 0xb6, 0x40, -+ 0x2b, 0xa8, 0x41, 0x63, 0xd8, 0x04, 0x80, 0x7b, 0xe4, 0x1c, 0x3d, 0xee, 0xc5, 0x78, 0x0e, 0x69, -+ 0x75, 0x3b, 0xce, 0x07, 0x32, 0xfe, 0xc8, 0x71, 0x55, 0x5b, 0x7c, 0xd3, 0xf4, 0xe6, 0x75, 0xf7, -+ 0x13, 0x23, 0x88, 0xca, 0xdc, 0xd5, 0xd0, 0x90, 0x54, 0x44, 0xe7, 0x00, 0x33, 0x67, 0x65, 0x97, -+ 0xb8, 0xa8, 0xdb, 0xca, 0xaf, 0xeb, 0x45, 0xa5, 0x36, 0xc4, 0x3a, 0x28, 0xc4, 0x77, 0x66, 0x11, -+ 0xbe, 0x67, 0xab, 0x15, 0x68, 0x7a, 0x51, 0x9a, 0x4e, 0x50, 0x09, 0xdf, 0x92, 0x11, 0x7c, 0xff, -+ 0x76, 0x11, 0xae, 0x2f, 0xe0, 0x2d, 0xea, 0x86, 0x6f, 0xa3, 0x2a, 0x86, 0xaf, 0x5d, 0xf0, 0x2b, -+ 0x82, 0x6f, 0x7f, 0x1a, 0xf5, 0xc8, 0x52, 0x63, 0x2f, 0x92, 0x7d, 0xed, 0x4d, 0x02, 0x3b, 0x26, -+ 0xc3, 0xb1, 0x18, 0xe4, 0xac, 0x43, 0x30, 0x33, 0x15, 0x61, 0x57, 0xb3, 0xf0, 0xa3, 0x4e, 0xa8, -+ 0x95, 0x4b, 0x47, 0x51, 0xe9, 0x5a, 0xbc, 0x94, 0x0a, 0x86, 0xac, 0x18, 0x60, 0x81, 0x13, 0x40, -+ 0xdc, 0xa2, 0x70, 0x03, 0x38, 0x68, 0x8d, 0x98, 0x04, 0xe3, 0x5e, 0x0f, 0x89, 0x19, 0x79, 0xb8, -+ 0x1e, 0x63, 0x76, 0xde, 0x28, 0xec, 0xda, 0xfd, 0xf5, 0xcf, 0x49, 0xd1, 0xc5, 0x76, 0x5c, 0x04, -+ 0xb0, 0x9c, 0x43, 0x3d, 0x5e, 0xe6, 0x00, 0x9c, 0x8b, 0x16, 0x39, 0x71, 0x8e, 0x63, 0x9c, 0xb4, -+ 0x15, 0x14, 0x4e, 0xc3, 0xb4, 0x9e, 0x49, 0x38, 0xb9, 0xb0, 0xf6, 0xa6, 0x0f, 0x3e, 0x44, 0x43, -+ 0xf1, 0xdd, 0x98, 0x3b, 0x7a, 0xd2, 0x38, 0x48, 0xec, 0xa0, 0x3a, 0x5d, 0x80, 0x4e, 0x66, 0x66, -+ 0x5f, 0xac, 0xdd, 0x10, 0x02, 0xa3, 0x5f, 0x23, 0xbd, 0xea, 0xbc, 0x13, 0x8a, 0x13, 0xc3, 0x4d, -+ 0x62, 0x72, 0x21, 0x81, 0x1a, 0x59, 0xe3, 0x88, 0x0e, 0x8b, 0xb0, 0x38, 0x67, 0xa1, 0x67, 0x02, -+ 0x98, 0xfa, 0xa9, 0xda, 0xcc, 0x33, 0x78, 0x22, 0xed, 0xed, 0x75, 0x4d, 0x8e, 0x3e, 0x6f, 0xf9, -+ 0x42, 0xad, 0x0d, 0xf6, 0xb5, 0xec, 0xd6, 0xbb, 0x90, 0x35, 0xae, 0x8f, 0x64, 0xe0, 0x5e, 0x9c, -+ 0x4c, 0x02, 0x76, 0xef, 0xbd, 0xa3, 0x11, 0xb2, 0xd3, 0x11, 0xc0, 0xc5, 0x7c, 0x29, 0x28, 0x3e, -+ 0x16, 0x4d, 0x7a, 0x3a, 0xe0, 0x4e, 0xfc, 0x1c, 0xa8, 0xb3, 0xc4, 0xda, 0x59, 0x67, 0x61, 0x02, -+ 0x43, 0x4b, 0x2a, 0x10, 0x5f, 0x96, 0x47, 0x8e, 0xc1, 0x8e, 0x77, 0x3f, 0x7d, 0x06, 0x18, 0x38, -+ 0x4d, 0x35, 0xe1, 0x0e, 0x3a, 0x8d, 0x54, 0x45, 0x27, 0xb6, 0x83, 0x45, 0x16, 0x37, 0xf1, 0x39, -+ 0x33, 0x8e, 0xa8, 0xa7, 0xe5, 0xec, 0xc3, 0x24, 0x16, 0xdc, 0x44, 0x22, 0xb7, 0x07, 0x63, 0xa7, -+ 0xaa, 0xa9, 0x0d, 0xb3, 0x3d, 0x24, 0x4e, 0x8b, 0xff, 0x69, 0x8b, 0xbc, 0x00, 0x24, 0xba, 0x6f, -+ 0x22, 0xd1, 0xc5, 0xa0, 0x9e, 0xaa, 0xba, 0x84, 0x49, 0x58, 0x27, 0x48, 0x9c, 0x18, 0x9d, 0xa6, -+ 0x9c, 0x1e, 0x09, 0x24, 0x32, 0x6e, 0x22, 0xb1, 0xb4, 0x9f, 0x2a, 0x0d, 0xa5, 0x48, 0xc4, 0x4d, -+ 0x48, 0x11, 0x9e, 0x95, 0x15, 0x75, 0x19, 0x48, 0x0c, 0xde, 0x44, 0xa2, 0xdf, 0x48, 0x91, 0xc0, -+ 0x7e, 0x64, 0x91, 0x7d, 0x82, 0xc4, 0x49, 0x75, 0x64, 0x7e, 0x16, 0x7e, 0xba, 0x24, 0xf3, 0x26, -+ 0x12, 0x79, 0x43, 0x98, 0x04, 0xf5, 0xf8, 0xad, 0x61, 0xce, 0x84, 0x14, 0xe1, 0xb9, 0xbd, 0x51, -+ 0x3f, 0x01, 0x89, 0x91, 0x9b, 0x48, 0x0c, 0x33, 0xa8, 0x07, 0xcc, 0xf0, 0xe3, 0x9d, 0x8b, 0x1c, -+ 0xbd, 0x53, 0x5d, 0xd8, 0x30, 0x23, 0x83, 0x7a, 0x74, 0x55, 0xeb, 0x35, 0xa9, 0x22, 0xfd, 0x6e, -+ 0x3c, 0xc1, 0x0c, 0xd4, 0xc3, 0xba, 0xdd, 0x13, 0x4e, 0x70, 0x85, 0x3f, 0x4e, 0xde, 0x2d, 0x3a, -+ 0x75, 0x13, 0x78, 0x35, 0xf5, 0xe0, 0xc5, 0xaf, 0x37, 0x81, 0x53, 0x0f, 0x96, 0x9c, 0xbd, 0x09, -+ 0x7c, 0x37, 0x85, 0xfd, 0x66, 0xf0, 0x3f, 0x53, 0xee, 0xf8, 0x26, 0xf0, 0x83, 0x14, 0xf6, 0xeb, -+ 0x6e, 0xf0, 0x21, 0x3f, 0x21, 0x98, 0xd3, 0x34, 0x8e, 0x8a, 0x72, 0xb4, 0x3b, 0xf9, 0xe7, 0x64, -+ 0xfc, 0x95, 0xa8, 0x5f, 0x2a, 0xa4, 0x07, 0x6a, 0x93, 0xf8, 0xfd, 0x32, 0x26, 0xf2, 0xa6, 0x27, -+ 0x2a, 0x89, 0x7c, 0x45, 0x3c, 0xb4, 0xa0, 0x79, 0xb8, 0x85, 0x64, 0xf5, 0x61, 0x98, 0x52, 0x29, -+ 0x3e, 0x71, 0xb0, 0xfa, 0xe2, 0x84, 0xee, 0x47, 0x41, 0x18, 0x54, 0x9d, 0x3a, 0xf5, 0x1c, 0xaa, -+ 0xf1, 0x86, 0x65, 0xf2, 0x6a, 0x3f, 0xf5, 0x08, 0xe0, 0xaf, 0xce, 0x6b, 0x13, 0xa5, 0xbf, 0x77, -+ 0xe1, 0x07, 0xb6, 0xae, 0x8f, 0x63, 0x76, 0x14, 0x69, 0x13, 0x2a, 0xbe, 0x9a, 0x4d, 0x81, 0xcb, -+ 0x26, 0x37, 0x31, 0xa8, 0x26, 0xf9, 0xe4, 0xa6, 0x7e, 0x6a, 0x20, 0xb2, 0x26, 0x37, 0x19, 0xa9, -+ 0xa6, 0xa9, 0xb8, 0xa8, 0xa6, 0xec, 0x29, 0xb8, 0xa8, 0xa6, 0xc5, 0xb8, 0x69, 0x55, 0x17, 0x7e, -+ 0xea, 0xe1, 0x11, 0x6b, 0x0b, 0x13, 0xed, 0x3d, 0x2e, 0x98, 0x87, 0x4b, 0x93, 0x2f, 0x18, 0x09, -+ 0x4d, 0xcb, 0x02, 0x5c, 0xb5, 0xb3, 0x7d, 0xc1, 0x29, 0x5c, 0x43, 0x8d, 0xeb, 0x8b, 0x7d, 0x71, -+ 0xf1, 0xf3, 0x87, 0xe3, 0xf4, 0xe5, 0x22, 0xf4, 0xb9, 0xe9, 0xf0, 0x32, 0x5c, 0xec, 0xbd, 0x40, -+ 0x8d, 0xc4, 0xbe, 0x54, 0x45, 0x39, 0x5e, 0xac, 0xa6, 0xc5, 0x16, 0x10, 0x28, 0x66, 0xf1, 0xfc, -+ 0x42, 0xe5, 0x55, 0x79, 0x54, 0x10, 0xd2, 0x3c, 0x9e, 0x89, 0x2f, 0xdd, 0x4b, 0xd5, 0xf5, 0xf4, -+ 0x41, 0xaf, 0x55, 0x38, 0xcd, 0x7d, 0xd5, 0x16, 0x19, 0x84, 0xec, 0xfa, 0x8e, 0x84, 0xde, 0x2c, -+ 0xf0, 0xc9, 0xd7, 0x54, 0xfc, 0x7e, 0x6c, 0x8d, 0xb8, 0x00, 0x48, 0x81, 0x3d, 0xc3, 0x34, 0xa3, -+ 0x2e, 0x1f, 0xc9, 0xbc, 0xb6, 0x6d, 0x21, 0x77, 0x56, 0x0e, 0x98, 0xc7, 0xe9, 0x73, 0x85, 0x5e, -+ 0xc8, 0x8c, 0x44, 0xf8, 0x21, 0x04, 0x9c, 0xc3, 0x7f, 0x44, 0xcb, 0x2a, 0x98, 0x30, 0xb5, 0x26, -+ 0xaa, 0x2e, 0xcc, 0x6f, 0xa1, 0xcb, 0x66, 0x35, 0xf9, 0x6b, 0x61, 0x7b, 0x79, 0x89, 0xdd, 0x92, -+ 0x8f, 0xac, 0xc5, 0x64, 0x35, 0xae, 0xd7, 0xb6, 0x01, 0xd9, 0x77, 0x0e, 0xe3, 0x9a, 0xfd, 0x0f, -+ 0x8f, 0xf5, 0x4f, 0x65, 0x79, 0x3d, 0xf5, 0xac, 0x83, 0x4a, 0xe9, 0xef, 0x91, 0x38, 0x1b, 0x57, -+ 0x7e, 0x3c, 0x49, 0x84, 0x8c, 0x63, 0x24, 0xbb, 0x01, 0x09, 0xb3, 0x88, 0x2a, 0x47, 0xd7, 0x85, -+ 0x78, 0xca, 0xd1, 0x99, 0x78, 0xc9, 0x7c, 0x74, 0x1c, 0x54, 0xe5, 0x29, 0x72, 0xff, 0x85, 0x1a, -+ 0x51, 0x22, 0xd7, 0xc5, 0x84, 0xfb, 0x11, 0xa2, 0x32, 0x46, 0xb1, 0xd6, 0x6f, 0xc2, 0xea, 0x5e, -+ 0x24, 0xda, 0xa9, 0x72, 0x77, 0xf7, 0x13, 0x36, 0x03, 0x94, 0xfd, 0x6d, 0xa0, 0x40, 0x16, 0x6f, -+ 0xc2, 0x5b, 0xe4, 0xd8, 0xc8, 0x09, 0xc9, 0xda, 0x97, 0x50, 0xd6, 0x5c, 0x66, 0xa2, 0x92, 0x2b, -+ 0x67, 0x3d, 0x75, 0x63, 0x05, 0xa1, 0x94, 0xfd, 0xec, 0x97, 0x4f, 0x42, 0xd5, 0xbe, 0x84, 0x42, -+ 0xb5, 0xc9, 0x34, 0x89, 0xda, 0x4b, 0x36, 0xdc, 0x46, 0x0f, 0xeb, 0xc4, 0xc5, 0xfa, 0x7a, 0x18, -+ 0x9b, 0xc3, 0x33, 0x63, 0x27, 0xb0, 0xef, 0x75, 0x62, 0xaf, 0x34, 0xbb, 0xb1, 0x9b, 0xc5, 0x76, -+ 0x26, 0x1f, 0xf8, 0x7f, 0x58, 0xd5, 0xe4, 0x11, 0x4c, 0xef, 0x14, 0x6c, 0xaf, 0xcd, 0x23, 0xd8, -+ 0x29, 0xe1, 0x15, 0xa6, 0x08, 0x43, 0x21, 0x80, 0x1a, 0x4a, 0x0a, 0xc8, 0xc6, 0xb7, 0xec, 0x74, -+ 0x28, 0xc8, 0x23, 0xf2, 0xc6, 0x80, 0x8d, 0xd6, 0x1b, 0x18, 0x7e, 0x3c, 0xb4, 0x3f, 0x14, 0x3c, -+ 0x92, 0xe7, 0x81, 0xb4, 0x8d, 0xfc, 0x72, 0xeb, 0x24, 0x3e, 0x5f, 0xf1, 0xed, 0xa6, 0xaa, 0xf7, -+ 0xdd, 0x0e, 0x98, 0x35, 0xce, 0x8a, 0x9b, 0x28, 0x6e, 0x7d, 0x3c, 0xf4, 0x3a, 0xe5, 0x27, 0xa7, -+ 0x80, 0x2c, 0xe9, 0x98, 0x0a, 0xf2, 0xbf, 0x1a, 0xff, 0x00, 0xa5, 0x1b, 0xcd, 0x14, 0x2c, 0xd8, -+ 0x5d, 0x5f, 0xef, 0x0b, 0x9b, 0x42, 0x08, 0x55, 0x4e, 0x25, 0xd4, 0x35, 0x95, 0x10, 0x35, 0x26, -+ 0x53, 0x79, 0x49, 0x3c, 0x30, 0x15, 0xe4, 0x06, 0x41, 0x16, 0x53, 0x82, 0x68, 0xfa, 0x62, 0x71, -+ 0x9e, 0x89, 0xa7, 0x5c, 0x8e, 0xab, 0x21, 0xef, 0xe6, 0x11, 0x04, 0x7e, 0x2c, 0x84, 0xb5, 0x0f, -+ 0x5b, 0xc8, 0x2c, 0x59, 0x3a, 0xf5, 0x52, 0x81, 0x99, 0x0c, 0x3a, 0xf8, 0xad, 0x53, 0x61, 0x46, -+ 0x1a, 0x2e, 0x7a, 0x43, 0xe7, 0xa8, 0x85, 0xf5, 0x05, 0xa1, 0x10, 0x3f, 0x4d, 0x53, 0x8d, 0x78, -+ 0x30, 0x2c, 0x5d, 0xb4, 0x36, 0x7f, 0x5c, 0x79, 0xd8, 0x92, 0x25, 0xc5, 0xb7, 0xc0, 0x24, 0x8f, -+ 0xe2, 0xa9, 0x35, 0xdb, 0xd9, 0x3d, 0x3b, 0x96, 0xc1, 0xc0, 0xcf, 0x61, 0x87, 0x5f, 0xc5, 0x13, -+ 0xea, 0x0d, 0x57, 0x77, 0xb3, 0x90, 0x8f, 0xbb, 0x37, 0xd8, 0xd9, 0x38, 0xaf, 0xec, 0xea, 0x7e, -+ 0x4d, 0x4e, 0xdd, 0x41, 0x3b, 0x47, 0x4c, 0xc3, 0x59, 0x65, 0x2f, 0x27, 0x4f, 0xa3, 0x6c, 0x1b, -+ 0xa2, 0xc4, 0xa0, 0xf6, 0xc7, 0xa7, 0x58, 0xb0, 0xa5, 0x6a, 0x95, 0x4b, 0xbc, 0xe4, 0xcb, 0x91, -+ 0x16, 0xa6, 0x19, 0x91, 0xc8, 0xa1, 0xf6, 0xc7, 0x28, 0x26, 0xfa, 0xbd, 0xf6, 0x8b, 0x05, 0xbd, -+ 0x3b, 0xe7, 0x18, 0xc2, 0x73, 0x16, 0x1c, 0x2c, 0x16, 0xb1, 0x3f, 0x8a, 0x79, 0x9b, 0xff, 0x9a, -+ 0x64, 0x3b, 0x55, 0xc6, 0xe0, 0xde, 0x33, 0xa7, 0xa0, 0x89, 0x77, 0xe7, 0xe0, 0x57, 0x7a, 0xa6, -+ 0xb4, 0xd1, 0x7c, 0x67, 0xb8, 0x6a, 0xd3, 0x43, 0x3c, 0xb5, 0xe9, 0x0c, 0x26, 0xbe, 0xbe, 0x7e, -+ 0x7d, 0x61, 0x49, 0xd9, 0xfa, 0xc2, 0xd2, 0xe2, 0xc2, 0x4d, 0xeb, 0x4b, 0xd4, 0x65, 0xe5, 0xaf, -+ 0x76, 0x2a, 0x02, 0xb5, 0x6d, 0x4a, 0xa6, 0x2a, 0x0a, 0xf6, 0xe4, 0x32, 0x5f, 0xaa, 0xf4, 0xc3, -+ 0x11, 0x85, 0x54, 0xfe, 0x12, 0xf4, 0x2a, 0x8a, 0xdb, 0xa8, 0xa5, 0x2a, 0x7c, 0x5c, 0xfb, 0xb4, -+ 0xfd, 0x0c, 0x84, 0xe2, 0x7c, 0xb5, 0x34, 0xd8, 0xf5, 0xad, 0x04, 0x3a, 0x7b, 0x84, 0x32, 0x62, -+ 0x84, 0xec, 0x32, 0x2e, 0xc5, 0x20, 0x7d, 0xde, 0xd9, 0x88, 0x75, 0x88, 0xaf, 0x13, 0xb6, 0x8a, -+ 0x84, 0x62, 0x8e, 0x5e, 0xfe, 0x0e, 0x2b, 0xef, 0xb0, 0x74, 0x5b, 0x18, 0x4d, 0xcf, 0x2f, 0x09, -+ 0xd1, 0x4b, 0xec, 0x54, 0xfd, 0x3d, 0x17, 0xcb, 0xc4, 0x20, 0xa3, 0xde, 0xe6, 0x6b, 0x5f, 0xe6, -+ 0xdd, 0xbf, 0xcd, 0x7a, 0x4f, 0xd3, 0x1c, 0x83, 0xe3, 0x95, 0xde, 0x3d, 0xea, 0xf1, 0x95, 0xea, -+ 0xa3, 0xb2, 0xc6, 0x3f, 0x59, 0x8a, 0xd3, 0x32, 0xee, 0x9d, 0x24, 0x17, 0x83, 0x92, 0xcb, 0xd6, -+ 0x42, 0x10, 0x46, 0x52, 0x54, 0x57, 0x66, 0xc5, 0xed, 0x1d, 0xd0, 0x1e, 0x01, 0xbf, 0x2f, 0x30, -+ 0x06, 0x95, 0xc4, 0xf4, 0x3f, 0x21, 0x49, 0x92, 0xb1, 0x45, 0x28, 0xc9, 0xea, 0xe7, 0x6c, 0x0f, -+ 0x95, 0xb5, 0xf0, 0x25, 0xd3, 0xb3, 0x5b, 0x84, 0x89, 0x59, 0x2b, 0x04, 0xc2, 0xe9, 0x85, 0xc6, -+ 0xfe, 0x1e, 0x32, 0x7b, 0x5b, 0x8b, 0xaf, 0xdf, 0x65, 0xad, 0x30, 0x24, 0x6b, 0xc5, 0x1a, 0xe1, -+ 0xf4, 0x22, 0x63, 0x2e, 0x0a, 0xe8, 0xa1, 0x23, 0xc4, 0x31, 0x18, 0x9a, 0x8d, 0xf3, 0xd3, 0x98, -+ 0xdf, 0x21, 0xa4, 0x25, 0x3b, 0xfc, 0x96, 0x13, 0x8b, 0x10, 0x22, 0x95, 0xb1, 0x4d, 0xf7, 0xc4, -+ 0x7a, 0x6b, 0x11, 0x07, 0x6d, 0xec, 0x08, 0x00, 0x55, 0x69, 0x37, 0x92, 0x4c, 0x02, 0xf6, 0xbe, -+ 0x68, 0xb9, 0x24, 0xd6, 0x82, 0x92, 0x85, 0xd4, 0xeb, 0xe2, 0x51, 0x35, 0xd0, 0xc7, 0x3a, 0x49, -+ 0x02, 0x12, 0x46, 0xda, 0x45, 0x5e, 0xa3, 0xbd, 0x51, 0xc7, 0xfd, 0x4a, 0xbc, 0x1f, 0x55, 0xe9, -+ 0xbd, 0xde, 0x8f, 0x1f, 0x91, 0x7e, 0x0f, 0x8a, 0xd9, 0xb9, 0xe3, 0x89, 0xbf, 0xc8, 0x7f, 0x08, -+ 0xff, 0xaa, 0xe1, 0x61, 0x5b, 0x6a, 0xce, 0x03, 0xf7, 0xa7, 0x3e, 0xfb, 0xfc, 0xb4, 0x65, 0x8b, -+ 0xbc, 0x4f, 0x04, 0xb1, 0x8b, 0xef, 0x45, 0xff, 0xe9, 0xfd, 0xf4, 0xc7, 0x89, 0xff, 0xf2, 0xfd, -+ 0xf4, 0x7c, 0xe7, 0xfb, 0xe9, 0x8b, 0x3c, 0xef, 0xa7, 0x4f, 0xfa, 0x8d, 0xf7, 0xd3, 0x27, 0x4d, -+ 0x7e, 0x3f, 0x7d, 0x9f, 0xfb, 0xfd, 0xf4, 0x38, 0xeb, 0x92, 0x34, 0x7d, 0x90, 0x83, 0xdf, 0x4f, -+ 0xff, 0x84, 0xa4, 0xd3, 0x08, 0x5f, 0xae, 0xf7, 0xd3, 0x6f, 0x6b, 0xf5, 0x32, 0x16, 0xe5, 0x09, -+ 0x85, 0x74, 0xa2, 0x96, 0xa1, 0x92, 0xde, 0xa1, 0x1d, 0x82, 0x51, 0xff, 0x9f, 0x7a, 0xd7, 0xaf, -+ 0xd9, 0xb7, 0xf7, 0xac, 0x69, 0xda, 0xba, 0xb1, 0x86, 0xf7, 0xae, 0x9d, 0x78, 0xa1, 0xef, 0xfb, -+ 0x6b, 0xef, 0x3d, 0x7f, 0xd7, 0x5f, 0x2e, 0x56, 0xfd, 0xb2, 0x55, 0xe0, 0xf3, 0x87, 0xa3, 0x6f, -+ 0x58, 0x9e, 0x8d, 0x7b, 0xf4, 0xe5, 0x8f, 0x2e, 0x07, 0xff, 0xeb, 0xbb, 0x85, 0xcd, 0x5f, 0xbe, -+ 0x51, 0xbf, 0xfa, 0x62, 0xfc, 0xa1, 0xf5, 0x17, 0xba, 0xde, 0x7b, 0xac, 0xea, 0xd3, 0xb5, 0x5d, -+ 0xc1, 0xab, 0x9f, 0x7f, 0xfb, 0xa9, 0x73, 0x3f, 0x3c, 0xf5, 0x5e, 0xde, 0xa3, 0x5f, 0xfe, 0xf5, -+ 0x72, 0xd2, 0x7b, 0x19, 0x7f, 0xfc, 0xcb, 0xb7, 0x3f, 0xd7, 0x1c, 0x8b, 0x7e, 0xe2, 0xfd, 0x6f, -+ 0x2f, 0x5e, 0xb9, 0x96, 0xf9, 0xc1, 0x1f, 0xbe, 0x4c, 0x48, 0x5b, 0x90, 0x37, 0xef, 0x2f, 0xe7, -+ 0xbe, 0xfb, 0xfc, 0xe1, 0x0b, 0xbf, 0xee, 0xf8, 0x6b, 0xe5, 0xe5, 0xcf, 0xd7, 0xed, 0x79, 0xf9, -+ 0xd8, 0x96, 0xcf, 0xf3, 0x0b, 0x0c, 0xb2, 0xbb, 0xff, 0x01, 0x16, 0x00, 0x33, 0x0a, 0x3f, 0xcf, -+ 0x91, 0x14, 0xd1, 0x2e, 0x9c, 0xf4, 0xce, 0xda, 0xdc, 0xf4, 0x80, 0x2c, 0xdf, 0x36, 0x39, 0xb7, -+ 0x15, 0x99, 0x72, 0xcd, 0x9c, 0xd2, 0x19, 0x28, 0x70, 0xd1, 0x83, 0x5e, 0xaf, 0x7c, 0xfc, 0x7a, -+ 0x45, 0x63, 0x84, 0xf2, 0xb3, 0xbd, 0x3d, 0x7f, 0xbd, 0xfe, 0xd8, 0xf6, 0x27, 0xa8, 0x17, 0xe7, -+ 0xfe, 0xfe, 0xbe, 0xd4, 0xdf, 0xdf, 0x97, 0xfa, 0x7f, 0xea, 0x7d, 0xa9, 0x7f, 0x44, 0xff, 0xf9, -+ 0x7d, 0xa9, 0x63, 0xd2, 0x58, 0xfa, 0xae, 0xce, 0x94, 0xa7, 0xeb, 0x2e, 0x64, 0x87, 0xc4, 0x05, -+ 0x3f, 0xb9, 0xf2, 0x7f, 0xfb, 0xdb, 0x29, 0x57, 0x96, 0x96, 0x55, 0xc2, 0xe1, 0xff, 0x8f, 0xdf, -+ 0x60, 0xfa, 0x5f, 0xbd, 0x36, 0xee, 0xbf, 0x78, 0x7b, 0x66, 0x7d, 0x65, 0x63, 0xd9, 0xfa, 0x0d, -+ 0xc5, 0x75, 0xeb, 0x6b, 0xab, 0x0a, 0x61, 0x75, 0x2d, 0xd3, 0x94, 0x15, 0xfd, 0xf6, 0x7b, 0x34, -+ 0x59, 0xa9, 0xce, 0x75, 0x4e, 0xaa, 0x17, 0xa2, 0x19, 0x1c, 0x39, 0xfc, 0x70, 0x66, 0x70, 0x6c, -+ 0xf0, 0x23, 0x84, 0xb3, 0x44, 0x3d, 0x29, 0x9a, 0xc1, 0xa1, 0x27, 0xe9, 0xa5, 0x91, 0x33, 0x38, -+ 0xbd, 0x89, 0x7a, 0x69, 0x6c, 0x32, 0xff, 0x2e, 0x74, 0x4c, 0x9a, 0xad, 0x4f, 0xe9, 0x93, 0x7a, -+ 0x1f, 0xe7, 0xd3, 0xb3, 0xf3, 0x92, 0xf9, 0x4a, 0xf9, 0x31, 0x69, 0xde, 0x00, 0x34, 0x84, 0x0f, -+ 0xf3, 0x89, 0x24, 0x83, 0x6a, 0x66, 0x32, 0xe7, 0x33, 0xf8, 0x79, 0x20, 0x39, 0xe0, 0xce, 0x28, -+ 0x56, 0xa1, 0x8c, 0x95, 0xcc, 0xb9, 0x2f, 0xd9, 0xa0, 0x4a, 0x87, 0x9f, 0x54, 0x85, 0x4d, 0x55, -+ 0xa2, 0x61, 0x95, 0x6a, 0xc2, 0xac, 0xae, 0x77, 0x13, 0x4e, 0x7a, 0x2b, 0x61, 0xbe, 0xf8, 0x43, -+ 0x1d, 0xed, 0xc3, 0xea, 0x24, 0xbf, 0x76, 0x73, 0xeb, 0xc8, 0xc8, 0x85, 0x93, 0x6b, 0x4f, 0x7e, -+ 0x35, 0xf8, 0xed, 0xc8, 0x91, 0xb5, 0x43, 0x23, 0xbd, 0x1f, 0x9f, 0x5f, 0x92, 0x9e, 0x54, 0x71, -+ 0x66, 0xfe, 0xf7, 0x4b, 0xa7, 0xbc, 0x2c, 0x90, 0xff, 0x66, 0x48, 0xf2, 0xd2, 0xda, 0xc4, 0x57, -+ 0x6b, 0xc3, 0x5e, 0x58, 0xfa, 0x60, 0xed, 0xb3, 0x61, 0x8b, 0x49, 0x7a, 0xca, 0xff, 0xd1, 0xf7, -+ 0x05, 0xda, 0x48, 0x67, 0x9c, 0x43, 0xc5, 0x00, 0x34, 0xe7, 0x9a, 0x4c, 0x73, 0xad, 0xc9, 0x0c, -+ 0x57, 0xfc, 0x50, 0x0c, 0x6b, 0xa9, 0x1e, 0x7e, 0xfd, 0xe8, 0x6d, 0xd7, 0xe8, 0xae, 0xb8, 0x08, -+ 0x23, 0x4f, 0x82, 0xbf, 0x3c, 0xd7, 0x79, 0x91, 0x0b, 0xb6, 0xc8, 0x75, 0xaf, 0xe1, 0x2c, 0xe1, -+ 0x7c, 0x93, 0x7a, 0x34, 0xe1, 0x8c, 0x9b, 0x16, 0xc1, 0xef, 0x43, 0x08, 0x79, 0x5e, 0x70, 0x7e, -+ 0xcd, 0xf3, 0xa6, 0x73, 0x27, 0xbc, 0xfb, 0x57, 0xe8, 0x82, 0xc1, 0x2f, 0xae, 0x8c, 0x9a, 0xf4, -+ 0x8b, 0xa3, 0x57, 0x14, 0x89, 0x50, 0x82, 0x0b, 0xc6, 0xfd, 0x8b, 0xdb, 0x39, 0x71, 0x80, 0x1f, -+ 0x8e, 0x71, 0x5c, 0xe4, 0xfe, 0x75, 0xb7, 0xe3, 0xe7, 0xec, 0x20, 0x4c, 0xf0, 0xfc, 0xba, 0xdb, -+ 0x37, 0xb9, 0xce, 0x37, 0x4d, 0x6a, 0x17, 0x01, 0xfe, 0x47, 0xe1, 0x18, 0xaf, 0x53, 0xee, 0x5f, -+ 0x8a, 0x2e, 0xc4, 0x7e, 0xbb, 0x5c, 0x31, 0x84, 0xfb, 0xd7, 0x8d, 0xe7, 0x05, 0xe4, 0x5c, 0xfb, -+ 0xdd, 0xbf, 0x6e, 0xf8, 0xd7, 0x5d, 0xfc, 0xbd, 0x3e, 0x89, 0x4f, 0xdc, 0xfe, 0x81, 0xeb, 0xfc, -+ 0x83, 0x49, 0xed, 0xbb, 0x81, 0xee, 0xc7, 0xc8, 0x19, 0xd3, 0xb9, 0x7f, 0xdd, 0xf8, 0x3f, 0x77, -+ 0xe1, 0xfd, 0x7c, 0x12, 0x7e, 0x21, 0xc0, 0x9f, 0x76, 0xf1, 0x77, 0x7a, 0x12, 0x9f, 0x18, 0x1e, -+ 0xbf, 0x3f, 0x13, 0x8f, 0x9b, 0xfb, 0x97, 0x6a, 0x8f, 0x74, 0xea, 0xd7, 0xad, 0x72, 0xc2, 0xcd, -+ 0x8f, 0xd0, 0x79, 0xcc, 0x45, 0x13, 0xbf, 0xb8, 0x9d, 0xc1, 0x9f, 0x18, 0x1b, 0x77, 0x9f, 0xf7, -+ 0xe0, 0xc0, 0xdb, 0x75, 0xfc, 0x00, 0x5c, 0xaf, 0x77, 0xda, 0xc3, 0x7e, 0x6c, 0x0f, 0x9b, 0xb0, -+ 0xbf, 0x88, 0xaf, 0x07, 0x3f, 0xf4, 0x5f, 0xb9, 0x00, 0x0a, 0xba, 0xa8, 0x60, 0x43, 0x7c, 0x51, -+ 0x31, 0x78, 0xaa, 0x9a, 0x62, 0xea, 0xbc, 0xbc, 0xac, 0xa4, 0xb8, 0xae, 0xac, 0xa2, 0x38, 0x1e, -+ 0xff, 0xb7, 0x4b, 0x75, 0xf1, 0x1a, 0x69, 0x59, 0x1a, 0xd5, 0x5e, 0x51, 0x5c, 0x51, 0x5b, 0xec, -+ 0x3c, 0x8f, 0x2f, 0x4b, 0x4d, 0xb9, 0x95, 0x73, 0x98, 0xfa, 0x88, 0xe8, 0x54, 0x6c, 0xc5, 0x95, -+ 0x45, 0x54, 0xdf, 0xc9, 0xa5, 0xea, 0x37, 0xdc, 0xa5, 0xba, 0x31, 0x8a, 0xa7, 0x10, 0xc0, 0x55, -+ 0xcd, 0xa4, 0x0b, 0x1e, 0x96, 0x37, 0xab, 0xcb, 0xeb, 0x8b, 0x0b, 0x0a, 0x2b, 0x34, 0x4e, 0xaf, -+ 0xba, 0xa1, 0xec, 0xbf, 0xf7, 0x8f, 0x6a, 0x75, 0x4d, 0x61, 0x69, 0x6a, 0xca, 0x9c, 0xfa, 0xca, -+ 0x4d, 0x95, 0x55, 0x0d, 0x95, 0x73, 0x9c, 0x45, 0xf2, 0x1b, 0x2a, 0xeb, 0xff, 0x27, 0x5f, 0xa5, -+ 0xed, 0xd2, 0xb1, 0xf3, 0xd5, 0xc3, 0xe8, 0xf7, 0xcf, 0xef, 0x9f, 0xdf, 0x3f, 0xbf, 0x7f, 0x7e, -+ 0xff, 0xfc, 0xfe, 0xf9, 0xfd, 0xf3, 0xfb, 0xe7, 0xf7, 0xcf, 0xef, 0x9f, 0xdf, 0x3f, 0xff, 0x4f, -+ 0x7e, 0xfe, 0x3f, 0x58, 0xb7, 0xf7, 0x26, 0x00, 0x78, 0x00, 0x00 -+}; -+ -+static unsigned char wcn_bind_verify_lib[] = { -+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xed, 0x5b, 0x7b, 0x78, 0x53, 0xc7, -+ 0x95, 0x9f, 0x7b, 0xaf, 0xfc, 0x40, 0xf2, 0xdb, 0xe6, 0x61, 0x6c, 0x2c, 0xc9, 0x36, 0x0f, 0x3b, -+ 0x48, 0xb6, 0xc1, 0x36, 0x76, 0x82, 0x83, 0x2c, 0xf3, 0x74, 0x28, 0xc1, 0x0e, 0xd9, 0x92, 0x92, -+ 0x56, 0xc8, 0xd2, 0xb5, 0x25, 0x90, 0x25, 0xa1, 0x07, 0x36, 0x21, 0x59, 0x1c, 0x02, 0xa4, 0xcd, -+ 0xa3, 0xc1, 0x0d, 0x49, 0x60, 0x79, 0x14, 0x1b, 0x08, 0xe0, 0x34, 0x2d, 0xdb, 0x84, 0x26, 0xb0, -+ 0x2d, 0xaf, 0x10, 0x42, 0xd2, 0x7c, 0x5b, 0x5a, 0x17, 0xc2, 0x36, 0xb4, 0x71, 0x1e, 0x6d, 0x09, -+ 0x6c, 0x5b, 0x58, 0x48, 0x82, 0x37, 0x80, 0xf7, 0xcc, 0xbd, 0x33, 0x57, 0xd2, 0x48, 0xda, 0xb4, -+ 0xfd, 0x76, 0xff, 0xd8, 0x6f, 0x3d, 0xdf, 0xc7, 0x9d, 0x33, 0xbf, 0x39, 0xe7, 0xcc, 0x39, 0x67, -+ 0xce, 0x9c, 0xfb, 0x90, 0xe9, 0xb0, 0xb9, 0x2d, 0x2d, 0x4e, 0xb7, 0xdd, 0xb2, 0x52, 0xf4, 0x39, -+ 0x5b, 0x57, 0x19, 0x3d, 0xe8, 0x7f, 0xbe, 0x95, 0x43, 0xab, 0xae, 0xae, 0xc4, 0x7d, 0xc5, 0xb4, -+ 0xaa, 0x0a, 0xd2, 0x4f, 0x95, 0xf0, 0xf2, 0xf2, 0xa9, 0x95, 0xd3, 0xa6, 0x96, 0xa3, 0x8a, 0xa9, -+ 0x80, 0x54, 0x4c, 0x83, 0x06, 0x7c, 0x15, 0x55, 0x53, 0xa7, 0x56, 0x20, 0x5d, 0xf9, 0xff, 0x82, -+ 0x2d, 0x51, 0x2d, 0xe8, 0x0f, 0x58, 0x7d, 0x3a, 0x1d, 0x7a, 0xc8, 0x61, 0xf5, 0xac, 0xf2, 0x04, -+ 0x57, 0x39, 0xe3, 0xf0, 0x7d, 0xd5, 0xfc, 0xff, 0xd1, 0xb6, 0x66, 0xd6, 0xfc, 0xd9, 0x3c, 0xc7, -+ 0x29, 0x63, 0x0e, 0xbd, 0x86, 0xb8, 0x18, 0x7c, 0x63, 0x2a, 0x43, 0xb4, 0x89, 0x5c, 0x47, 0xa3, -+ 0x1c, 0x74, 0x6b, 0x75, 0xdf, 0x7e, 0x01, 0x75, 0xfd, 0xea, 0x96, 0x80, 0xba, 0xaf, 0xdd, 0xc7, -+ 0xed, 0xff, 0x81, 0x8d, 0xeb, 0xfe, 0x6c, 0x09, 0xbf, 0xff, 0x0b, 0x9b, 0xb0, 0xff, 0x87, 0xa9, -+ 0x68, 0xf1, 0x60, 0x11, 0x1a, 0x3c, 0xc1, 0x99, 0x06, 0x7b, 0x7f, 0x84, 0x06, 0x79, 0xe0, 0x1b, -+ 0xaf, 0x32, 0xd5, 0xea, 0x33, 0x50, 0x77, 0xf1, 0x31, 0x4b, 0x4d, 0xe1, 0x80, 0xa5, 0x66, 0xc2, -+ 0x15, 0x4b, 0xcd, 0x9e, 0xe9, 0x19, 0xf7, 0x9d, 0xd0, 0xf1, 0xa5, 0xbb, 0x97, 0xaa, 0x4a, 0xd7, -+ 0x22, 0xbe, 0x74, 0xad, 0xb3, 0xe8, 0x75, 0x1b, 0xf0, 0xac, 0x41, 0xdc, 0xd5, 0x47, 0x6f, 0x0f, -+ 0x2d, 0xfa, 0x50, 0x48, 0xe9, 0x7b, 0x9c, 0x13, 0xba, 0x8b, 0x92, 0x4d, 0x25, 0x92, 0x6c, 0xa5, -+ 0xe9, 0xd0, 0x78, 0x9d, 0xe9, 0xd0, 0x10, 0xe2, 0x2e, 0xef, 0x42, 0x82, 0x66, 0xd6, 0xdc, 0xb5, -+ 0xd9, 0x1b, 0xe6, 0xaf, 0xcb, 0xde, 0x93, 0x7f, 0xa2, 0xf1, 0xd4, 0xcc, 0x93, 0x8d, 0xbd, 0x29, -+ 0xe6, 0xc6, 0x93, 0x93, 0x66, 0x36, 0x82, 0x2e, 0x8d, 0x19, 0xe6, 0x0b, 0xa7, 0xa3, 0x43, 0x7a, -+ 0xd0, 0x33, 0x72, 0x61, 0x63, 0x49, 0xc2, 0xb5, 0xf5, 0xcd, 0xd9, 0x9d, 0xf7, 0x94, 0x24, 0x82, -+ 0x2d, 0x59, 0x33, 0xe7, 0x97, 0xcc, 0x6a, 0xda, 0xe7, 0xcb, 0x98, 0xfe, 0xb5, 0x92, 0xcb, 0x42, -+ 0x41, 0x69, 0x7b, 0x32, 0x5a, 0x7c, 0x49, 0xc8, 0x2c, 0xfd, 0x58, 0xc8, 0x2a, 0xfd, 0xa3, 0x90, -+ 0x5d, 0xfa, 0xb9, 0x90, 0x5e, 0xfa, 0xa9, 0x90, 0x51, 0x7a, 0x51, 0xc8, 0x29, 0xfd, 0x44, 0x18, -+ 0x59, 0xaa, 0x46, 0x28, 0xe7, 0x4d, 0x47, 0xfb, 0xeb, 0x9f, 0x0b, 0x23, 0x4a, 0x2f, 0x0b, 0x49, -+ 0x30, 0xa7, 0x06, 0xbe, 0xe4, 0xd2, 0x4b, 0x82, 0x00, 0x3c, 0x2a, 0x90, 0xe3, 0x81, 0x8f, 0x2b, -+ 0x5d, 0x35, 0xf9, 0xb1, 0x6c, 0x3d, 0x57, 0xa4, 0xde, 0x5c, 0xb9, 0x2e, 0xbb, 0x05, 0xa9, 0xd5, -+ 0xb5, 0x79, 0x6f, 0x34, 0xbe, 0xe0, 0x6c, 0x7d, 0xbd, 0x10, 0xf1, 0x8d, 0x63, 0x34, 0x27, 0x1b, -+ 0x3f, 0x44, 0xc9, 0x8d, 0xb5, 0x6d, 0x6f, 0x34, 0x9e, 0x02, 0x5f, 0xde, 0xe4, 0x13, 0x34, 0x85, -+ 0x02, 0xaf, 0xa9, 0x46, 0x2a, 0xf5, 0x07, 0x48, 0x75, 0x95, 0xe3, 0x92, 0xd4, 0x66, 0x94, 0xa0, -+ 0x19, 0xb3, 0xe4, 0x64, 0xe3, 0x71, 0x9e, 0x6b, 0xfc, 0x3a, 0x1a, 0xad, 0xe1, 0x04, 0x4e, 0xf3, -+ 0x11, 0xaf, 0xd1, 0x7c, 0xc8, 0x73, 0x1a, 0xee, 0xe6, 0xd0, 0xa2, 0x1e, 0xe8, 0xd7, 0xf1, 0x2a, -+ 0x8d, 0x83, 0x4f, 0xd6, 0xbc, 0x25, 0x24, 0x69, 0xcc, 0x3c, 0xaf, 0x29, 0xe2, 0x05, 0x8d, 0x9a, -+ 0x57, 0x6b, 0x3e, 0xe5, 0x46, 0x68, 0xb8, 0x0c, 0x75, 0xc9, 0x9e, 0x1f, 0x99, 0x06, 0x8f, 0x43, -+ 0xdc, 0x7b, 0x10, 0xf7, 0x4e, 0x72, 0xbe, 0xa6, 0x84, 0x4f, 0x49, 0x29, 0x51, 0x17, 0xa7, 0x96, -+ 0x7c, 0x88, 0xd0, 0xc1, 0x6b, 0xf7, 0xd5, 0xef, 0xff, 0x6c, 0x89, 0x19, 0xf6, 0xa8, 0x61, 0xff, -+ 0x60, 0x91, 0x69, 0xf0, 0xd6, 0xea, 0x73, 0xfb, 0x8e, 0x09, 0x96, 0x73, 0xb0, 0xa9, 0x9b, 0xd8, -+ 0x7d, 0x07, 0x7f, 0xfa, 0xf0, 0xfe, 0xae, 0x87, 0x7d, 0x9b, 0x84, 0x84, 0x27, 0x1f, 0x4f, 0x36, -+ 0xd5, 0xae, 0x4b, 0x41, 0xdd, 0x6b, 0xcf, 0x58, 0x6a, 0x12, 0x1d, 0xb6, 0x9a, 0xfd, 0x28, 0x49, -+ 0xfd, 0x7b, 0x94, 0xd0, 0x68, 0x53, 0xa1, 0xee, 0x09, 0x5c, 0x62, 0x63, 0x2f, 0xe2, 0xd5, 0x27, -+ 0xc0, 0xcf, 0x35, 0x19, 0xe8, 0x2a, 0x5f, 0x81, 0x6a, 0xeb, 0x21, 0xee, 0x58, 0xf7, 0xad, 0xd5, -+ 0x07, 0xf7, 0x7f, 0xf2, 0xee, 0xb6, 0xe6, 0x5d, 0x67, 0x9e, 0x6b, 0x9e, 0xed, 0xde, 0xd1, 0x8c, -+ 0xf3, 0x05, 0xe7, 0xc9, 0xe7, 0x02, 0xea, 0xc3, 0x79, 0xf3, 0x99, 0x30, 0xaa, 0xef, 0x5a, 0x36, -+ 0x5a, 0x6c, 0xde, 0xbb, 0xa3, 0xb9, 0xb8, 0xfe, 0x65, 0xdf, 0xc7, 0xae, 0xd7, 0x7c, 0x1f, 0xed, -+ 0x7f, 0xd5, 0x77, 0xea, 0xe9, 0xbd, 0xbe, 0xeb, 0x60, 0x83, 0x95, 0x07, 0x5f, 0xbe, 0x8e, 0x06, -+ 0x39, 0xb0, 0xa5, 0x67, 0x94, 0xa9, 0xe6, 0xf7, 0xf7, 0x3e, 0xd1, 0xbc, 0x3b, 0x3d, 0xb3, 0x64, -+ 0x5d, 0xe6, 0xd3, 0xcd, 0x2f, 0x6a, 0xb2, 0x4a, 0x6c, 0x55, 0x5b, 0x9b, 0x0b, 0x77, 0x6d, 0x69, -+ 0xd6, 0xa1, 0xae, 0xe6, 0x37, 0xf5, 0x7d, 0xbe, 0x73, 0x59, 0xa8, 0x7b, 0xf7, 0xd2, 0x57, 0x7c, -+ 0xb6, 0x2b, 0xbb, 0x7c, 0xfc, 0xc3, 0x2f, 0xf9, 0x3e, 0xe0, 0x47, 0x5e, 0xee, 0xf9, 0x18, 0xd5, -+ 0xf6, 0x34, 0xd4, 0xfd, 0x72, 0xe7, 0x6a, 0x74, 0xe8, 0x68, 0x03, 0x1a, 0xdc, 0xb3, 0x15, 0x1d, -+ 0xda, 0xfd, 0x4c, 0x76, 0x49, 0xef, 0x5e, 0x74, 0xa8, 0x8b, 0x43, 0x8b, 0xf4, 0x26, 0xdd, 0x93, -+ 0xbd, 0xbc, 0xa9, 0x16, 0xa9, 0x50, 0xa6, 0x16, 0x71, 0x2b, 0x30, 0x5f, 0xa1, 0xee, 0xee, 0xda, -+ 0xa5, 0x1a, 0xb4, 0xe8, 0x60, 0x22, 0xea, 0x96, 0x74, 0x80, 0xfc, 0x71, 0xf0, 0x49, 0x7b, 0x01, -+ 0xad, 0xf8, 0x54, 0x23, 0xcb, 0x7c, 0x94, 0xde, 0x95, 0x25, 0xc9, 0xdc, 0x44, 0x2b, 0x30, 0xff, -+ 0x45, 0x84, 0x16, 0x61, 0x3e, 0x3c, 0x47, 0x75, 0xcd, 0x00, 0xdc, 0x3a, 0x04, 0x7b, 0xf7, 0x31, -+ 0xea, 0x1e, 0x00, 0x7f, 0xa6, 0x0c, 0x0d, 0xbd, 0xb0, 0x13, 0x68, 0xed, 0xc3, 0x68, 0xff, 0xce, -+ 0x22, 0x4e, 0xee, 0x6d, 0x72, 0x7f, 0x74, 0x1a, 0x1a, 0xdc, 0xb9, 0xda, 0x74, 0x68, 0x57, 0x83, -+ 0x69, 0x90, 0xf7, 0x3e, 0xd2, 0x8f, 0x65, 0x20, 0x8f, 0x9f, 0xc4, 0x72, 0xbd, 0x1f, 0x70, 0xb5, -+ 0xbd, 0x60, 0x7b, 0xc3, 0xcd, 0x85, 0xfd, 0x73, 0x6e, 0xce, 0xed, 0x9f, 0x7d, 0x73, 0x71, 0xff, -+ 0xac, 0x9b, 0x4b, 0xfb, 0x67, 0xde, 0x74, 0xf4, 0xef, 0x7a, 0x8f, 0xab, 0x6d, 0xb8, 0xe9, 0xed, -+ 0x37, 0xdf, 0xec, 0xec, 0xdf, 0xfb, 0x3e, 0x57, 0xfb, 0x62, 0x3f, 0x57, 0xbb, 0xe7, 0x17, 0x5c, -+ 0xed, 0xee, 0x9f, 0x73, 0xb5, 0xbb, 0xde, 0x02, 0xb9, 0x37, 0xb8, 0xda, 0x1c, 0x58, 0xf7, 0x43, -+ 0x21, 0xa7, 0x0f, 0x09, 0x5d, 0xcd, 0xbd, 0xe9, 0x4d, 0x25, 0x7a, 0xd8, 0x37, 0x73, 0xf1, 0xb1, -+ 0xb1, 0x36, 0xf8, 0x57, 0x78, 0x45, 0x5b, 0x53, 0x94, 0x82, 0x6a, 0x7b, 0x9f, 0x35, 0x1d, 0xc2, -+ 0x58, 0x61, 0x3e, 0xd0, 0x2f, 0x10, 0x7a, 0x32, 0xd0, 0x5b, 0x09, 0x3d, 0x1d, 0xe8, 0xef, 0x13, -+ 0x7a, 0x3e, 0xd0, 0xbb, 0x08, 0xfd, 0x20, 0xd0, 0x7b, 0x65, 0x1a, 0xe9, 0x50, 0x93, 0x56, 0x87, -+ 0x2a, 0x0a, 0x5d, 0xa8, 0xf6, 0x38, 0xe4, 0xec, 0xce, 0xaf, 0x9b, 0x06, 0xf1, 0x1e, 0x72, 0x90, -+ 0x8f, 0x08, 0xf6, 0xc8, 0xaa, 0x0a, 0xe5, 0xe1, 0xad, 0xd5, 0x3f, 0x97, 0xf2, 0x4f, 0xab, 0x13, -+ 0xce, 0x62, 0x5f, 0x71, 0xac, 0xb1, 0xaf, 0x9f, 0xde, 0x1e, 0x7a, 0xe1, 0x28, 0xec, 0x41, 0x0f, -+ 0xc4, 0x01, 0xcb, 0xe8, 0x51, 0x72, 0x77, 0x0f, 0xf8, 0xbe, 0x63, 0x68, 0x68, 0x74, 0x21, 0xc4, -+ 0xf6, 0x63, 0x88, 0x3b, 0x07, 0xf1, 0x9d, 0x31, 0x80, 0x56, 0x34, 0x40, 0x7c, 0xbb, 0x3e, 0x1f, -+ 0x5a, 0xd4, 0x0b, 0x71, 0x37, 0x9b, 0xf4, 0x4f, 0xea, 0x09, 0x6e, 0x01, 0xfc, 0xd8, 0x67, 0xb1, -+ 0xf1, 0x1e, 0xd8, 0xc7, 0xbd, 0xa0, 0x2b, 0x3c, 0xef, 0x6f, 0xad, 0x7e, 0x7d, 0x3f, 0xad, 0x65, -+ 0xaf, 0xbe, 0x41, 0x73, 0x94, 0xeb, 0xeb, 0x4f, 0x40, 0x8b, 0x71, 0xdc, 0x3e, 0x83, 0x7c, 0x6d, -+ 0x01, 0x3f, 0x7a, 0x67, 0xc8, 0xf5, 0xac, 0x11, 0xe2, 0x79, 0x49, 0x40, 0xa5, 0x4b, 0x05, 0x54, -+ 0xb5, 0xb3, 0x81, 0xeb, 0xc6, 0xf9, 0xf9, 0x11, 0xf0, 0x98, 0x8b, 0x51, 0xf7, 0xba, 0x87, 0xac, -+ 0x37, 0x76, 0x2d, 0xb3, 0xd6, 0xe0, 0x18, 0xcf, 0x80, 0xf3, 0xd0, 0x00, 0xf1, 0x9d, 0xe9, 0xd5, -+ 0xde, 0xd0, 0x43, 0x1e, 0x7c, 0x02, 0xf9, 0xbe, 0xa7, 0x9f, 0xeb, 0x16, 0x10, 0xe4, 0x1b, 0x9c, -+ 0x27, 0x1e, 0xea, 0x20, 0x07, 0xf5, 0xf0, 0x28, 0x42, 0x97, 0xcd, 0xa8, 0x48, 0x6d, 0x45, 0x9c, -+ 0xba, 0x1e, 0x71, 0x8d, 0x8f, 0xe6, 0xa0, 0x9a, 0x0f, 0xa5, 0x1a, 0x38, 0xaa, 0x6f, 0x40, 0x18, -+ 0xd9, 0x97, 0x8f, 0xf3, 0x66, 0x46, 0x28, 0x96, 0x03, 0x50, 0x83, 0x7a, 0x50, 0x78, 0x2c, 0x4f, -+ 0x2b, 0x67, 0x19, 0xc7, 0x33, 0xe4, 0xd7, 0x6b, 0x8a, 0x5f, 0xaf, 0x08, 0x72, 0x8d, 0xc6, 0xe7, -+ 0x6a, 0x64, 0x12, 0xf6, 0x2b, 0xbb, 0x0f, 0x9f, 0xc3, 0x5e, 0xec, 0xd7, 0x1c, 0xd9, 0x2f, 0x9c, -+ 0x27, 0x03, 0x2a, 0x54, 0xd5, 0xfb, 0x98, 0xec, 0x13, 0xd4, 0xb6, 0x3e, 0x1b, 0xf8, 0x24, 0x82, -+ 0x4f, 0x27, 0xc3, 0x7c, 0xb2, 0x83, 0x4f, 0x22, 0xf1, 0xe9, 0x45, 0x88, 0x17, 0xae, 0x15, 0xb3, -+ 0xa0, 0x56, 0x98, 0xc1, 0xa7, 0x7a, 0xf0, 0x69, 0x26, 0xd4, 0x89, 0x89, 0x50, 0x1f, 0xa0, 0x0e, -+ 0xa9, 0x3f, 0x81, 0x1a, 0xf7, 0x28, 0xf8, 0x74, 0xdc, 0x51, 0x54, 0x83, 0xeb, 0xc5, 0x9a, 0x72, -+ 0x74, 0xb5, 0x47, 0xf2, 0x2d, 0x51, 0xaa, 0x31, 0xe3, 0x21, 0x16, 0x7a, 0x90, 0x2b, 0xbe, 0x22, -+ 0xdf, 0x1b, 0xd6, 0xa1, 0xf1, 0x6a, 0x5c, 0x4f, 0xa0, 0x8e, 0x37, 0xae, 0x5d, 0x46, 0x64, 0x60, -+ 0x4d, 0x7c, 0xfe, 0x7a, 0xe7, 0x40, 0x3d, 0x00, 0x7b, 0x21, 0x46, 0xef, 0x44, 0xfa, 0xff, 0x76, -+ 0x1c, 0xff, 0x0f, 0x2b, 0xfe, 0x63, 0xbf, 0xb1, 0xff, 0x78, 0x2f, 0xb3, 0xc1, 0x7f, 0x7c, 0x0e, -+ 0xa5, 0xfa, 0x52, 0x26, 0xd7, 0x97, 0xef, 0xff, 0x23, 0xda, 0x8f, 0xe5, 0x75, 0x1c, 0xaa, 0xec, -+ 0x2d, 0x93, 0x63, 0x8d, 0xd7, 0xb1, 0x26, 0x84, 0xaf, 0x73, 0x4a, 0x5a, 0xe7, 0x23, 0xd8, 0x93, -+ 0x9f, 0x80, 0xdf, 0x58, 0x6e, 0x37, 0xcf, 0x3d, 0xd9, 0x00, 0xbe, 0xcf, 0x4a, 0x96, 0xfd, 0x37, -+ 0x81, 0xef, 0xeb, 0xca, 0x4d, 0xb5, 0xad, 0x28, 0x41, 0x0d, 0xf7, 0xa9, 0xc6, 0x93, 0x48, 0xd5, -+ 0xb8, 0x14, 0x21, 0x75, 0x17, 0x42, 0x8d, 0xc7, 0x96, 0xe9, 0x95, 0x18, 0xe2, 0x1a, 0x39, 0x00, -+ 0xfb, 0xdb, 0x03, 0x75, 0x60, 0x29, 0xc4, 0x7d, 0xe9, 0xcd, 0xa1, 0x2a, 0x4c, 0xe3, 0xfd, 0xe6, -+ 0xf9, 0xae, 0x5f, 0x61, 0x5b, 0x4c, 0x1c, 0x22, 0xd8, 0xa8, 0xbe, 0xa7, 0x81, 0xc7, 0xf4, 0xe5, -+ 0x50, 0x15, 0xce, 0x47, 0x5c, 0x3b, 0xee, 0x83, 0xf1, 0x39, 0xc8, 0x63, 0xec, 0x2f, 0xae, 0x7f, -+ 0xfd, 0x24, 0xa7, 0xc3, 0xfd, 0xdf, 0x5c, 0xf6, 0x84, 0xb9, 0x7b, 0xe6, 0xb4, 0x15, 0xbf, 0xf8, -+ 0xf2, 0xd8, 0xc1, 0x3d, 0xef, 0x1f, 0xfc, 0x74, 0xc9, 0x89, 0x7f, 0xa8, 0xbd, 0x9a, 0x79, 0xf5, -+ 0x81, 0xdd, 0x6b, 0x67, 0x7c, 0xef, 0xec, 0xb7, 0xf2, 0x5f, 0xda, 0xdc, 0x97, 0x74, 0x9e, 0x5b, -+ 0xf2, 0x58, 0xd6, 0x91, 0xf5, 0x15, 0xc5, 0x6f, 0x3c, 0x92, 0x72, 0x7f, 0xe0, 0x9b, 0x47, 0x7c, -+ 0xb7, 0xff, 0xf9, 0x77, 0x5d, 0x7b, 0x13, 0x2f, 0x6c, 0x0d, 0x5c, 0xdd, 0x7a, 0xfc, 0xb8, 0x73, -+ 0xeb, 0x27, 0x1b, 0xe6, 0x1c, 0xf9, 0xcb, 0xa9, 0xed, 0xc7, 0xd3, 0xdf, 0xed, 0x49, 0x29, 0xf6, -+ 0x4c, 0xfe, 0xd4, 0xd0, 0xb7, 0x2e, 0xd0, 0x78, 0x61, 0xff, 0x81, 0x07, 0x7f, 0xf3, 0xed, 0xc1, -+ 0x95, 0xcd, 0x4d, 0x77, 0x6f, 0x6e, 0x3f, 0x55, 0xb1, 0xef, 0xf4, 0x44, 0xe1, 0xc0, 0x5b, 0x6b, -+ 0x1e, 0x38, 0x7a, 0x4d, 0x33, 0x70, 0x6a, 0x4e, 0xf7, 0xde, 0xb3, 0x4d, 0xb6, 0x77, 0x12, 0xdb, -+ 0x4a, 0x4a, 0x72, 0xd6, 0xab, 0x5f, 0x9b, 0x58, 0xa3, 0xcf, 0x33, 0xde, 0x6c, 0x9f, 0xfc, 0xb5, -+ 0xec, 0xd4, 0x9a, 0xfb, 0x16, 0xf9, 0xd5, 0xe2, 0xbf, 0xa8, 0x97, 0xad, 0x34, 0xbe, 0x7d, 0xe2, -+ 0xd1, 0xf5, 0x93, 0x7d, 0xdf, 0xeb, 0xb9, 0x78, 0xb4, 0xf7, 0x9e, 0xd6, 0xb1, 0xfb, 0xbc, 0x4f, -+ 0xde, 0x73, 0x62, 0x57, 0x93, 0xeb, 0xad, 0xdc, 0x8b, 0xdf, 0xfb, 0x65, 0x71, 0xe2, 0x96, 0x73, -+ 0xeb, 0xab, 0xd2, 0xae, 0x7b, 0x77, 0x2e, 0xcb, 0x18, 0x75, 0x7c, 0x77, 0x6e, 0xb2, 0x6b, 0x5a, -+ 0xc1, 0xfc, 0x8e, 0xb9, 0x13, 0x0f, 0xfe, 0xf4, 0x40, 0xe5, 0x2b, 0x29, 0xf9, 0xb5, 0x8d, 0x7d, -+ 0xe7, 0x17, 0xdc, 0xfb, 0xce, 0xb6, 0x25, 0xd7, 0x3c, 0x46, 0xc7, 0x9f, 0xd7, 0x3e, 0x13, 0xf0, -+ 0xd8, 0xf6, 0x74, 0xe6, 0x74, 0x9e, 0x5e, 0x97, 0xcc, 0xbf, 0xf5, 0xd4, 0x7f, 0x0e, 0x1d, 0xd9, -+ 0x78, 0xd9, 0xb5, 0x70, 0xf7, 0x17, 0xbb, 0x06, 0x8f, 0xfc, 0x47, 0xe7, 0x8a, 0x53, 0xd7, 0x92, -+ 0x10, 0x94, 0x62, 0xdc, 0x92, 0x39, 0xf9, 0x39, 0x87, 0x69, 0xfb, 0x92, 0x42, 0x34, 0xaf, 0x4a, -+ 0x70, 0xba, 0x03, 0x48, 0x48, 0x96, 0x30, 0xda, 0x71, 0xc9, 0xb8, 0x53, 0x99, 0x31, 0xad, 0x22, -+ 0x50, 0x22, 0xee, 0x12, 0x24, 0x99, 0x9c, 0xb6, 0x10, 0x93, 0xc0, 0x27, 0xc8, 0x5d, 0x52, 0x68, -+ 0x7e, 0xec, 0x02, 0x49, 0x57, 0x42, 0x08, 0x29, 0xd8, 0x12, 0xd2, 0x2e, 0xf3, 0xa7, 0xbd, 0xc4, -+ 0xf0, 0x08, 0xe9, 0x95, 0x0a, 0x39, 0xe7, 0xc7, 0x0a, 0x39, 0x77, 0xa7, 0xb4, 0x16, 0xaf, 0xf0, -+ 0xa9, 0xaa, 0x7f, 0xa6, 0x90, 0x77, 0x9d, 0x56, 0xc8, 0x65, 0x0f, 0x2a, 0xa4, 0xeb, 0x61, 0x85, -+ 0xf4, 0x7c, 0x17, 0xae, 0x92, 0xe5, 0x5e, 0x4e, 0xbf, 0x00, 0x22, 0x21, 0x59, 0xc0, 0x15, 0x62, -+ 0x92, 0xd0, 0x45, 0x5f, 0xc2, 0xd5, 0x24, 0xd3, 0xc5, 0x89, 0x80, 0xcf, 0x95, 0xe9, 0xf1, 0xdf, -+ 0x02, 0x7a, 0x21, 0x4a, 0xbe, 0x02, 0x03, 0x4c, 0x8e, 0xb8, 0x0b, 0x88, 0x19, 0x28, 0x19, 0xb3, -+ 0xbb, 0xe9, 0x38, 0x09, 0xa9, 0x25, 0xe6, 0x45, 0xdc, 0x06, 0x80, 0x34, 0xb6, 0x40, 0x27, 0xd0, -+ 0x98, 0x44, 0x29, 0xc9, 0x99, 0xd0, 0xa5, 0x4a, 0xb3, 0x47, 0x0d, 0xf8, 0x7a, 0x11, 0x73, 0xd8, -+ 0x9d, 0x6e, 0x18, 0x63, 0x32, 0x4d, 0x9e, 0xc2, 0x64, 0xba, 0xdf, 0x01, 0x45, 0xf0, 0xf8, 0x9f, -+ 0x31, 0xd9, 0x12, 0x6c, 0x05, 0xf2, 0x36, 0x26, 0x03, 0xed, 0x5e, 0x20, 0xd3, 0xc0, 0xf5, 0x74, -+ 0x27, 0x10, 0xd8, 0x90, 0x74, 0x9f, 0x18, 0x40, 0xdc, 0x09, 0xac, 0x0f, 0x56, 0xc0, 0x88, 0x74, -+ 0xb9, 0x4d, 0xed, 0xd1, 0xca, 0x63, 0x2c, 0x23, 0x8d, 0x8b, 0xe4, 0x71, 0x01, 0x1d, 0x0b, 0xc4, -+ 0xde, 0x16, 0xee, 0x7e, 0x9e, 0xda, 0xdb, 0xb2, 0x41, 0xb1, 0xa6, 0x45, 0x42, 0x5d, 0x22, 0xd8, -+ 0xd8, 0xf2, 0x1b, 0x24, 0xaf, 0x6b, 0xff, 0x52, 0x5e, 0x6c, 0x09, 0x4c, 0xa9, 0xb0, 0x32, 0xd9, -+ 0xa7, 0x1e, 0xc9, 0xa7, 0xed, 0x3c, 0x15, 0xed, 0xb9, 0x3f, 0x44, 0xfe, 0x1e, 0x29, 0xa4, 0xe4, -+ 0x9e, 0xb4, 0xcc, 0x2e, 0x1c, 0x0f, 0x94, 0x21, 0xc1, 0x25, 0x34, 0xfd, 0xce, 0x90, 0xe4, 0xe4, -+ 0xb6, 0x39, 0x05, 0x84, 0x32, 0x25, 0xc6, 0x92, 0x0d, 0x04, 0xcc, 0x92, 0x79, 0xef, 0xe7, 0xe5, -+ 0x61, 0x3a, 0xc4, 0xe8, 0x0e, 0x6c, 0x4c, 0x7a, 0x0b, 0x25, 0x6c, 0x94, 0xb0, 0x53, 0x42, 0xa4, -+ 0x44, 0x2b, 0x25, 0xda, 0x28, 0xe1, 0xa0, 0x84, 0x93, 0x12, 0xcb, 0x08, 0x91, 0x1d, 0xa8, 0x20, -+ 0x14, 0x92, 0x46, 0x53, 0xc2, 0x46, 0x39, 0xed, 0x30, 0xc0, 0xc6, 0x09, 0xdd, 0x37, 0x1e, 0x19, -+ 0x49, 0xed, 0xfe, 0x08, 0xe7, 0x88, 0x94, 0x0a, 0xab, 0x04, 0x25, 0x35, 0x46, 0x3d, 0x15, 0x76, -+ 0xd4, 0xe6, 0x22, 0xea, 0xd9, 0x11, 0xe0, 0x18, 0xbd, 0x8d, 0x4c, 0x8d, 0xd9, 0x0b, 0x04, 0xd7, -+ 0x94, 0xfb, 0x63, 0xe8, 0x72, 0x7f, 0x86, 0x2f, 0xa7, 0xf1, 0xa5, 0x1f, 0x5f, 0x2e, 0x60, 0x1e, -+ 0x79, 0x7f, 0x82, 0x1c, 0xdc, 0x69, 0xc9, 0xfe, 0x04, 0x43, 0xfb, 0x13, 0x94, 0xc2, 0x09, 0xf6, -+ 0x77, 0x48, 0xe6, 0x8d, 0x5a, 0xca, 0x87, 0x16, 0xdc, 0xc9, 0xd3, 0x05, 0xcf, 0xc1, 0xe9, 0x1f, -+ 0xed, 0x25, 0xc3, 0xd1, 0x1b, 0x08, 0x31, 0xb6, 0x9b, 0xc7, 0x4e, 0x7c, 0x7b, 0x4d, 0xde, 0x6a, -+ 0x20, 0xf2, 0xdd, 0x4c, 0x59, 0xe0, 0xf6, 0x98, 0x41, 0x2c, 0xef, 0x21, 0x0c, 0xe7, 0x17, 0xf0, -+ 0xcc, 0xe4, 0x8b, 0x8f, 0xe2, 0x49, 0x13, 0xc0, 0x79, 0x55, 0xf8, 0x52, 0x0a, 0x97, 0x71, 0x78, -+ 0x26, 0xf7, 0x1e, 0xa0, 0x94, 0xb0, 0x6c, 0x97, 0xe4, 0xf2, 0xb1, 0xc7, 0x11, 0xe2, 0x7b, 0x4f, -+ 0x63, 0xf1, 0xb3, 0x00, 0xe7, 0xbd, 0x23, 0x50, 0xc9, 0x01, 0x81, 0x91, 0x64, 0xd4, 0x44, 0x06, -+ 0x3b, 0x22, 0xb8, 0xef, 0x2a, 0xc1, 0xbd, 0x37, 0x21, 0x2c, 0xb8, 0xa3, 0xf7, 0x12, 0x62, 0x2c, -+ 0x0e, 0xaf, 0xd0, 0x7d, 0x60, 0xcd, 0x58, 0x1c, 0x62, 0xbe, 0x7b, 0x61, 0x28, 0xca, 0x05, 0x17, -+ 0x08, 0x8f, 0xa2, 0xfe, 0x52, 0xb8, 0x1d, 0xab, 0x04, 0x76, 0x61, 0xad, 0xb4, 0xd0, 0x4b, 0x86, -+ 0x30, 0x7f, 0xae, 0x2b, 0xcb, 0xff, 0x09, 0x96, 0xcf, 0x94, 0xce, 0xf4, 0x4b, 0x17, 0x23, 0xb2, -+ 0x56, 0x19, 0xe6, 0x48, 0x67, 0xfb, 0xe5, 0x3f, 0x13, 0x83, 0x72, 0xa4, 0xf3, 0xfd, 0xf2, 0x6d, -+ 0xd9, 0xac, 0x1c, 0xe9, 0x88, 0xbf, 0x8c, 0xb5, 0x08, 0xdd, 0x3b, 0xd7, 0xe0, 0x9d, 0x7d, 0x19, -+ 0x1f, 0xb1, 0x6c, 0xe9, 0x98, 0xff, 0x90, 0xae, 0x19, 0xdb, 0x54, 0x39, 0x07, 0x31, 0xfb, 0xad, -+ 0x04, 0x92, 0x83, 0x1a, 0x72, 0x38, 0xcf, 0x4a, 0x87, 0x73, 0x41, 0x22, 0x2d, 0x38, 0x67, 0x43, -+ 0x05, 0x47, 0x22, 0xe5, 0x2a, 0xf3, 0x1e, 0x66, 0x90, 0xab, 0xcc, 0x7b, 0xb4, 0xca, 0xbc, 0x17, -+ 0xaa, 0x32, 0xe7, 0xa5, 0xe5, 0xe5, 0xfa, 0x97, 0x48, 0x16, 0x48, 0x87, 0x87, 0x5d, 0xac, 0xe5, -+ 0x62, 0xec, 0x70, 0x2c, 0x49, 0xa2, 0xe1, 0xb8, 0x18, 0x19, 0x0e, 0x65, 0xa8, 0x97, 0x86, 0x97, -+ 0xf0, 0x72, 0xe0, 0x7f, 0xc4, 0xc8, 0x91, 0xe3, 0x84, 0x63, 0x7c, 0x09, 0x1b, 0xc5, 0x77, 0x2f, -+ 0x96, 0x6d, 0xb8, 0x8c, 0xd7, 0xc9, 0xbf, 0x95, 0x80, 0x22, 0x1a, 0x77, 0xb5, 0x14, 0x16, 0xca, -+ 0x1b, 0x03, 0x9c, 0x79, 0xa9, 0x89, 0x24, 0x9f, 0xc6, 0x16, 0x49, 0x82, 0x8e, 0x5c, 0x23, 0xf4, -+ 0xb9, 0xb5, 0xf8, 0x62, 0x4e, 0x0c, 0x0b, 0x17, 0xce, 0x1f, 0x65, 0x70, 0x59, 0xaa, 0xf1, 0x85, -+ 0x74, 0xa8, 0xe0, 0x38, 0x9d, 0x62, 0x4b, 0xc8, 0xd1, 0x5e, 0x0e, 0x57, 0xfc, 0x8f, 0x9c, 0x78, -+ 0x15, 0x3e, 0x86, 0x39, 0xcb, 0x11, 0x97, 0xf6, 0x18, 0x06, 0x95, 0xb4, 0x57, 0xe1, 0x40, 0x14, -+ 0x61, 0x2a, 0xc1, 0x80, 0xef, 0x6a, 0xc9, 0xd8, 0x8d, 0x1d, 0x80, 0x15, 0xcb, 0x68, 0x62, 0xd9, -+ 0xb3, 0x30, 0x18, 0x8f, 0xc9, 0xa4, 0x23, 0x1c, 0x9e, 0x4c, 0x9e, 0x07, 0x97, 0x63, 0x12, 0x87, -+ 0x0c, 0x73, 0xfc, 0xbb, 0xf8, 0x3e, 0x7e, 0x50, 0xe1, 0x4b, 0xe1, 0x7f, 0x4b, 0x81, 0x09, 0x74, -+ 0x9d, 0x89, 0x94, 0x48, 0xae, 0x42, 0x5c, 0x26, 0x37, 0x3e, 0x2d, 0x5b, 0x23, 0xa4, 0xe5, 0xa5, -+ 0x65, 0x72, 0x59, 0x49, 0x19, 0xf0, 0x5c, 0xc4, 0x17, 0x23, 0x8d, 0xe6, 0x6e, 0x8d, 0x00, 0x37, -+ 0x6a, 0x81, 0x90, 0x90, 0x04, 0xaa, 0x09, 0x68, 0x5e, 0x36, 0x58, 0x36, 0x0a, 0x6e, 0xc2, 0x77, -+ 0x6a, 0xee, 0xd2, 0xe0, 0x41, 0x62, 0x36, 0x27, 0xa4, 0x69, 0x34, 0x78, 0xc8, 0xc1, 0x30, 0x29, -+ 0x55, 0x99, 0xab, 0xd1, 0xe0, 0xe7, 0x08, 0x6e, 0x5e, 0x36, 0xc6, 0x47, 0xe8, 0x41, 0xb4, 0x0c, -+ 0x10, 0xb5, 0x91, 0x93, 0x19, 0x26, 0xe6, 0xea, 0x24, 0x09, 0x4d, 0x02, 0xdc, 0xcc, 0xa9, 0xb6, -+ 0x94, 0x74, 0x58, 0x0c, 0x13, 0xa9, 0x21, 0xb6, 0x79, 0xd9, 0x32, 0x63, 0x5a, 0x42, 0xd8, 0xb2, -+ 0x70, 0xcb, 0x0f, 0x49, 0x65, 0x84, 0x98, 0xb1, 0x03, 0xa6, 0x31, 0x2f, 0x98, 0x73, 0xb1, 0x44, -+ 0x66, 0x48, 0x35, 0x0f, 0x4e, 0x65, 0x85, 0x14, 0xe0, 0x61, 0x76, 0x65, 0xc4, 0x6c, 0x4e, 0xd8, -+ 0x70, 0x0c, 0x6c, 0xdf, 0x77, 0xd6, 0x72, 0x28, 0x93, 0xab, 0x00, 0x35, 0xa3, 0x8c, 0xd0, 0x45, -+ 0x28, 0x1e, 0x9d, 0x80, 0x2a, 0x24, 0xa1, 0x31, 0x12, 0x01, 0xec, 0xb9, 0x95, 0x08, 0xb3, 0x8e, -+ 0xad, 0x24, 0xe3, 0xbc, 0x04, 0x69, 0x9c, 0x3f, 0x0e, 0x44, 0x9b, 0xb9, 0xfb, 0x47, 0x2f, 0xd6, -+ 0x3c, 0x20, 0x39, 0x31, 0x4e, 0x03, 0x03, 0xa8, 0x25, 0x95, 0x44, 0x81, 0x36, 0xdc, 0xcf, 0x88, -+ 0x35, 0x74, 0x46, 0x6e, 0x46, 0x6e, 0x9c, 0x39, 0x7d, 0x65, 0xc8, 0x13, 0x58, 0xac, 0x50, 0xb6, -+ 0x15, 0x12, 0x27, 0x84, 0xcf, 0xc8, 0x9d, 0x9e, 0x0b, 0x39, 0x81, 0xcf, 0xc9, 0x78, 0x82, 0x26, -+ 0x50, 0x74, 0x82, 0x11, 0x61, 0xc2, 0x9d, 0x86, 0x37, 0x75, 0x62, 0x68, 0x80, 0x25, 0xc3, 0x0e, -+ 0xcb, 0x2f, 0xe8, 0x2d, 0x16, 0x1e, 0x66, 0xe2, 0x34, 0xfa, 0xc1, 0x8b, 0x43, 0x4d, 0xec, 0xd4, -+ 0x15, 0xd2, 0x4f, 0x56, 0xb4, 0xb4, 0xd9, 0x09, 0x79, 0x2c, 0x04, 0xbd, 0x4b, 0xc8, 0x33, 0x21, -+ 0x88, 0x55, 0xe4, 0x20, 0x53, 0x5e, 0x85, 0x25, 0x6a, 0xad, 0x01, 0x32, 0x55, 0x4c, 0xef, 0x64, -+ 0xd1, 0x16, 0x4f, 0x22, 0x53, 0x9b, 0x42, 0x2c, 0x94, 0xdc, 0xa6, 0x40, 0xad, 0xf1, 0xa4, 0x02, -+ 0x0a, 0x4b, 0x13, 0x25, 0x4d, 0x2a, 0x0a, 0xd9, 0xe7, 0x13, 0xf2, 0x74, 0x08, 0x62, 0x15, 0x9d, -+ 0x21, 0x53, 0x42, 0x82, 0xb2, 0x3c, 0x25, 0x37, 0x2a, 0x90, 0xb8, 0x99, 0x90, 0xdb, 0x42, 0x50, -+ 0x3c, 0x45, 0x57, 0x94, 0xb5, 0x9a, 0x28, 0x19, 0x52, 0xd4, 0x1a, 0xad, 0x28, 0xca, 0xb5, 0x64, -+ 0x32, 0xe5, 0x57, 0x58, 0xbe, 0x11, 0x20, 0x64, 0x57, 0xc8, 0x48, 0x4a, 0x6e, 0x0d, 0x71, 0xb1, -+ 0x8a, 0xf6, 0x91, 0xa9, 0xf7, 0x43, 0x52, 0x94, 0xdc, 0x98, 0x18, 0xb2, 0x88, 0x90, 0xdb, 0x42, -+ 0x50, 0x3c, 0x45, 0xa7, 0x15, 0x45, 0x4d, 0x94, 0x7c, 0x4a, 0x91, 0xb2, 0x47, 0x2b, 0x8a, 0x0a, -+ 0xf6, 0x85, 0x28, 0xa9, 0x85, 0x54, 0x6a, 0x6b, 0x08, 0x8a, 0x5a, 0x9e, 0x4c, 0x9d, 0x0e, 0xb1, -+ 0x50, 0xf2, 0x86, 0x02, 0x89, 0x88, 0xbc, 0x02, 0x6d, 0x4b, 0x0a, 0x41, 0x71, 0x14, 0xfd, 0x5a, -+ 0x91, 0x6a, 0xa2, 0xe4, 0xf5, 0x30, 0xa3, 0xa3, 0x14, 0x45, 0xf9, 0x31, 0x19, 0xfe, 0xc9, 0xd9, -+ 0x96, 0x1c, 0xb9, 0x40, 0x12, 0xcb, 0x49, 0xf8, 0x49, 0x6a, 0xd6, 0x90, 0x7e, 0x21, 0xe9, 0xed, -+ 0xa4, 0xef, 0x24, 0xfd, 0x46, 0xe6, 0x2c, 0xec, 0x23, 0xfd, 0xeb, 0xa4, 0x3f, 0xcd, 0x3c, 0xc4, -+ 0xd1, 0x36, 0x97, 0xe0, 0xf3, 0x99, 0x53, 0xf1, 0xb7, 0xea, 0xbd, 0x41, 0xed, 0x23, 0x89, 0xdb, -+ 0xa9, 0x8a, 0xbd, 0x1e, 0xe5, 0x9b, 0xc4, 0xf0, 0x9d, 0x8c, 0xc3, 0x9f, 0x42, 0xe2, 0xe2, 0x20, -+ 0xfd, 0x46, 0xd2, 0x6f, 0x8e, 0x13, 0xaf, 0xeb, 0xf8, 0xe9, 0x01, 0x0d, 0x02, 0xa5, 0xe2, 0xbe, -+ 0x4c, 0x4b, 0x45, 0x1c, 0x27, 0x7d, 0xe4, 0xc7, 0xcf, 0xd9, 0x76, 0x9f, 0x73, 0xa5, 0xe8, 0xf3, -+ 0x97, 0xb9, 0xc5, 0x40, 0x59, 0x87, 0xd3, 0x27, 0xba, 0x44, 0xbf, 0xbf, 0x2c, 0xd8, 0x21, 0x56, -+ 0x55, 0x4f, 0x99, 0x52, 0x16, 0x74, 0x3b, 0xfd, 0x1e, 0x5b, 0x87, 0xcd, 0x5d, 0xe6, 0x75, 0x59, -+ 0x03, 0xad, 0x1e, 0x5f, 0x3b, 0x32, 0x96, 0x39, 0xdd, 0x36, 0x57, 0xd0, 0x2e, 0x96, 0x05, 0xad, -+ 0x5e, 0x67, 0x99, 0xd5, 0xdf, 0x6e, 0x68, 0x13, 0xdd, 0xa2, 0xcf, 0x69, 0x0b, 0x9b, 0x72, 0x39, -+ 0xdd, 0xc1, 0x4e, 0x18, 0x5b, 0x7d, 0x36, 0x07, 0x5c, 0xda, 0xab, 0x2b, 0x95, 0x29, 0x10, 0x40, -+ 0xa8, 0x83, 0xf9, 0x9d, 0xc9, 0x86, 0x4d, 0x81, 0x97, 0x6c, 0x83, 0xcb, 0x55, 0x5d, 0x69, 0x74, -+ 0xe0, 0x5c, 0xf0, 0x7a, 0xfc, 0xce, 0x4e, 0x4b, 0x60, 0x95, 0x57, 0xf4, 0xcb, 0x00, 0x25, 0xe1, -+ 0x09, 0xc2, 0x66, 0xb5, 0x39, 0x44, 0x3c, 0x86, 0x21, 0x44, 0xc8, 0xeb, 0x03, 0xd1, 0xe5, 0xf2, -+ 0xd4, 0x72, 0xd1, 0xe7, 0x16, 0x5d, 0x32, 0xed, 0x0f, 0xc0, 0x44, 0x9b, 0xcc, 0x03, 0x37, 0x66, -+ 0x65, 0xaf, 0x85, 0x12, 0x6e, 0x23, 0xbc, 0xd5, 0x0b, 0xf5, 0xf8, 0xf2, 0x12, 0x5c, 0xf8, 0x05, -+ 0xf8, 0x32, 0x0f, 0x5f, 0xf4, 0xf8, 0xb2, 0xbd, 0x78, 0x42, 0x7e, 0x71, 0x41, 0x61, 0x69, 0xb9, -+ 0xb6, 0x60, 0xbc, 0x36, 0x4f, 0x2b, 0xa4, 0x4f, 0xef, 0xc4, 0xac, 0x42, 0x87, 0x0e, 0x77, 0x65, -+ 0xf8, 0xa2, 0xc5, 0x97, 0x7b, 0xf0, 0xc5, 0xa0, 0x50, 0x05, 0xf8, 0x52, 0xa8, 0xcc, 0xea, 0x95, -+ 0x59, 0x89, 0x2a, 0x56, 0x2e, 0xc2, 0x4a, 0x9d, 0x90, 0xaa, 0xd3, 0xcb, 0x4d, 0x78, 0x48, 0x37, -+ 0x71, 0x5a, 0x61, 0xa1, 0x5e, 0xf8, 0x13, 0x3a, 0xac, 0x13, 0x32, 0x74, 0x7a, 0x6d, 0x9d, 0xaf, -+ 0xb0, 0x60, 0xbc, 0xb0, 0x40, 0x27, 0xbc, 0xb6, 0x06, 0x98, 0x84, 0xb7, 0x90, 0x4e, 0x98, 0xdd, -+ 0x28, 0xdc, 0xa9, 0x13, 0x0e, 0xaf, 0xd1, 0x8d, 0xd3, 0x17, 0x6a, 0x29, 0x12, 0xd4, 0x8d, 0x2b, -+ 0x2e, 0x28, 0xd2, 0x0b, 0x23, 0x74, 0x42, 0x40, 0x57, 0xa6, 0xd7, 0x4f, 0xd4, 0x97, 0x09, 0x1e, -+ 0xdd, 0xf8, 0x42, 0x4c, 0xe8, 0xb5, 0xda, 0xc2, 0x3b, 0xf4, 0x5a, 0x61, 0x94, 0x6e, 0x6a, 0x9d, -+ 0x56, 0xaf, 0xbf, 0x4b, 0xaf, 0x2d, 0xac, 0xdb, 0x20, 0x8c, 0x30, 0x82, 0x0b, 0x98, 0xbf, 0x53, -+ 0xa7, 0x2d, 0xd2, 0x16, 0xea, 0xf5, 0xe3, 0x8a, 0xf1, 0xfa, 0x85, 0x92, 0x21, 0xf5, 0x06, 0x3d, -+ 0x70, 0xd6, 0xe1, 0x26, 0x74, 0x4e, 0x9f, 0x04, 0x3c, 0x42, 0x8e, 0x4e, 0x98, 0xb5, 0x63, 0xbe, -+ 0x16, 0xf4, 0xa4, 0x4d, 0x27, 0x6a, 0xf0, 0x3f, 0xe1, 0x0e, 0xa3, 0x30, 0x7a, 0xfa, 0xdd, 0x05, -+ 0xba, 0xf2, 0x82, 0xf9, 0x52, 0x30, 0x1e, 0x54, 0x9c, 0x9c, 0x1c, 0x19, 0x02, 0xe9, 0x62, 0xc6, -+ 0x97, 0x79, 0x0a, 0xcb, 0xbc, 0x66, 0xe1, 0x81, 0xd3, 0xb2, 0xb0, 0xfe, 0xaf, 0x14, 0xde, 0x9e, -+ 0x38, 0x1d, 0x77, 0x89, 0x52, 0xf4, 0x9e, 0xa9, 0x10, 0x26, 0x1f, 0x5e, 0x3c, 0x25, 0x7f, 0x06, -+ 0xc4, 0x26, 0x5d, 0x27, 0xac, 0xd8, 0x21, 0xb4, 0xeb, 0xb4, 0xf7, 0x74, 0x4d, 0xad, 0x2b, 0x12, -+ 0x32, 0x1a, 0x8b, 0xea, 0x8a, 0xea, 0x04, 0x87, 0x51, 0xc8, 0x33, 0xf2, 0x2a, 0xc8, 0x72, 0x9f, -+ 0xd5, 0x6d, 0xf7, 0xb4, 0x23, 0xaf, 0xd5, 0xed, 0xb4, 0x59, 0x02, 0xce, 0x76, 0xd1, 0x13, 0x0c, -+ 0x20, 0x8b, 0x25, 0x58, 0x5d, 0x09, 0xc9, 0x61, 0x0d, 0x88, 0x28, 0x08, 0x99, 0x53, 0x5d, 0x69, -+ 0x09, 0x20, 0xbf, 0xf3, 0x21, 0x91, 0x74, 0x38, 0xb1, 0x10, 0xbc, 0x92, 0x4c, 0xa9, 0xaa, 0xb6, -+ 0x04, 0xbd, 0x76, 0xcc, 0x26, 0xba, 0x6d, 0xbe, 0x55, 0x5e, 0x98, 0xa6, 0x6c, 0x0e, 0x8f, 0x2f, -+ 0xa0, 0xc3, 0x5f, 0x85, 0x60, 0xda, 0x6a, 0xa1, 0xd3, 0x58, 0x5b, 0x0d, 0x4c, 0xdb, 0x3c, 0x6e, -+ 0xbf, 0xc7, 0x25, 0x5a, 0xe4, 0xc4, 0xc4, 0x0b, 0x4e, 0x9d, 0x02, 0x57, 0x39, 0x37, 0x2d, 0x54, -+ 0x89, 0x24, 0x6a, 0x17, 0x81, 0xb9, 0x35, 0x68, 0x73, 0x7a, 0xdc, 0xc8, 0xd1, 0x6e, 0xb5, 0x59, -+ 0xe4, 0x85, 0xa5, 0x49, 0xfc, 0x91, 0xc1, 0xe5, 0x71, 0xb7, 0xe9, 0xa4, 0x0b, 0x5e, 0x0d, 0x4e, -+ 0x21, 0x74, 0x62, 0x67, 0x80, 0xda, 0xd7, 0xea, 0x74, 0x5b, 0x5d, 0x48, 0x99, 0xb7, 0x63, 0xff, -+ 0x24, 0xbd, 0x21, 0xad, 0x41, 0xb7, 0xdf, 0xd9, 0xe6, 0x16, 0xed, 0x3a, 0x9b, 0xc3, 0xea, 0x43, -+ 0xed, 0x62, 0xbb, 0x0d, 0xde, 0x66, 0x1c, 0x56, 0xbf, 0x03, 0x85, 0xe3, 0x16, 0x8b, 0x53, 0x3a, -+ 0x55, 0x96, 0x56, 0x97, 0xb5, 0xcd, 0x1f, 0xb6, 0xac, 0x22, 0x8e, 0xf5, 0x63, 0x07, 0xa7, 0x4e, -+ 0x01, 0xdb, 0xe7, 0x2c, 0xb8, 0x5f, 0xd7, 0x50, 0x53, 0xab, 0xab, 0x32, 0x4e, 0x35, 0x56, 0xe8, -+ 0xa6, 0x94, 0x57, 0x54, 0x97, 0x57, 0x56, 0x4c, 0xd1, 0x19, 0xda, 0x5d, 0xce, 0x40, 0xc0, 0x25, -+ 0x1a, 0x44, 0xb7, 0xdd, 0x69, 0x75, 0xc3, 0x58, 0xaa, 0x0d, 0x56, 0x97, 0xc1, 0x27, 0xb6, 0xf9, -+ 0x0d, 0x1e, 0xb7, 0x6b, 0x15, 0x60, 0x5e, 0x1b, 0x0c, 0xa1, 0x9e, 0x40, 0xe1, 0x31, 0x00, 0xbf, -+ 0x34, 0xef, 0xf2, 0x58, 0xed, 0x7e, 0x98, 0xb3, 0xb5, 0x7b, 0xec, 0xa2, 0xab, 0xce, 0x65, 0xf5, -+ 0xb5, 0x89, 0x30, 0xc4, 0x05, 0xa4, 0x0e, 0x0a, 0xc8, 0xca, 0x1a, 0x83, 0x15, 0x0f, 0x5b, 0x9c, -+ 0x75, 0x2e, 0x6f, 0x75, 0xa5, 0xce, 0xd0, 0xa6, 0x33, 0xdc, 0x0b, 0xeb, 0xf9, 0x03, 0xf6, 0xba, -+ 0x36, 0x77, 0xb0, 0xb6, 0x5c, 0x67, 0x68, 0x75, 0x7b, 0x0c, 0xf8, 0xc4, 0xdb, 0x02, 0x06, 0xab, -+ 0xcb, 0x69, 0xf5, 0xc3, 0xd1, 0x97, 0x41, 0x9b, 0xa7, 0xbd, 0xdd, 0x03, 0xb6, 0xb4, 0x4a, 0xbb, -+ 0x66, 0xe8, 0xc0, 0xfe, 0xca, 0x33, 0x56, 0xff, 0x2a, 0xb7, 0xcd, 0xe1, 0xf3, 0xb8, 0x3d, 0x41, -+ 0xbf, 0x21, 0xe8, 0xee, 0x80, 0x8a, 0x64, 0x08, 0x58, 0x5b, 0xa0, 0x04, 0xca, 0xf3, 0x60, 0x89, -+ 0x18, 0x10, 0x0d, 0xee, 0xa0, 0xcb, 0x65, 0xf0, 0x7a, 0x70, 0xe4, 0x7d, 0x06, 0x88, 0x91, 0x6d, -+ 0x39, 0x9e, 0x87, 0x04, 0xb2, 0x2d, 0x37, 0x78, 0x7d, 0x9e, 0x80, 0x68, 0x0b, 0x78, 0x7c, 0x78, -+ 0x6d, 0x0f, 0x5d, 0xd2, 0xd3, 0xee, 0x0c, 0x18, 0x5a, 0x7d, 0xd6, 0x76, 0x91, 0xca, 0x11, 0xdc, -+ 0x0b, 0x49, 0x08, 0xbb, 0x6f, 0xf0, 0x3b, 0x5b, 0xa0, 0x46, 0xb6, 0x19, 0x6c, 0x56, 0x97, 0x8b, -+ 0x2c, 0xb6, 0xd2, 0xea, 0x33, 0x04, 0x7c, 0xa0, 0x13, 0xe3, 0x56, 0x3f, 0x8e, 0x7a, 0xbb, 0xe8, -+ 0x0e, 0xf8, 0x23, 0x3c, 0xf3, 0x40, 0xc1, 0x6c, 0x75, 0x79, 0x3a, 0x64, 0xb0, 0x5d, 0x84, 0x28, -+ 0x81, 0xb7, 0x2e, 0x03, 0xce, 0xb8, 0x80, 0x55, 0xe6, 0x96, 0xd1, 0x70, 0x44, 0x36, 0x55, 0xb2, -+ 0xbc, 0xce, 0xed, 0x01, 0x00, 0x4f, 0x8a, 0x3e, 0x08, 0xbf, 0x34, 0x23, 0x2b, 0xf3, 0x3a, 0x6d, -+ 0x3a, 0x83, 0xc1, 0x6b, 0x05, 0xab, 0x75, 0xa0, 0xd2, 0xd3, 0x01, 0x93, 0x1e, 0x9f, 0x68, 0xc0, -+ 0xe9, 0x64, 0x00, 0xbb, 0x44, 0x7f, 0x5d, 0x39, 0x8a, 0xc8, 0x86, 0x16, 0x67, 0x00, 0xa7, 0x28, -+ 0x49, 0x45, 0xfc, 0x21, 0x86, 0x90, 0xe0, 0x86, 0xdb, 0x2f, 0xdd, 0x2d, 0xe4, 0x83, 0x12, 0x21, -+ 0x25, 0xa5, 0x1b, 0x61, 0x74, 0xba, 0x9d, 0x81, 0xd0, 0xc1, 0x08, 0xe2, 0x84, 0x83, 0xe4, 0xb2, -+ 0x98, 0x3d, 0x1e, 0x97, 0x94, 0xc6, 0xa1, 0x39, 0x3a, 0x65, 0x09, 0xd6, 0xa0, 0xe8, 0xbc, 0x74, -+ 0x88, 0x9d, 0x16, 0xab, 0xdf, 0x86, 0xca, 0x1c, 0x9e, 0x76, 0xb1, 0xcc, 0x6e, 0x75, 0xba, 0x56, -+ 0xb5, 0x04, 0x9d, 0x2e, 0x7b, 0xd9, 0x32, 0xd1, 0x0d, 0xf1, 0xf4, 0x97, 0xd9, 0x20, 0xab, 0xc2, -+ 0x71, 0xa8, 0x0b, 0x3e, 0x8f, 0xd3, 0xbe, 0xa2, 0xcc, 0x51, 0x5d, 0x51, 0x8d, 0xa3, 0x00, 0x9b, -+ 0x0e, 0x77, 0x2d, 0x08, 0x91, 0x58, 0x26, 0xaf, 0x28, 0xdf, 0xc3, 0x0c, 0x95, 0xc6, 0x5a, 0xf6, -+ 0x6e, 0x65, 0x81, 0x4d, 0xb3, 0x05, 0x21, 0x7f, 0x45, 0x0a, 0x48, 0xa6, 0xc2, 0xd1, 0xf3, 0x06, -+ 0xc3, 0xbc, 0x21, 0xa7, 0xdc, 0x62, 0x91, 0x62, 0x6c, 0xb1, 0x39, 0x96, 0x5b, 0x5a, 0xc1, 0x00, -+ 0xe4, 0xc5, 0x13, 0xe8, 0x6f, 0xbc, 0xed, 0x96, 0x45, 0xdf, 0x31, 0x89, 0xcf, 0x50, 0xa2, 0xbc, -+ 0xa2, 0x0f, 0xa1, 0x39, 0x0d, 0x0d, 0x77, 0xea, 0x26, 0xcd, 0x87, 0x7a, 0xe0, 0xf3, 0xe8, 0x60, -+ 0x80, 0x8f, 0xa6, 0x01, 0x1f, 0x4c, 0x63, 0x79, 0x55, 0x09, 0x73, 0x4e, 0x51, 0x0a, 0xdc, 0x05, -+ 0x87, 0xa0, 0x71, 0x48, 0xd5, 0x59, 0x90, 0xa2, 0x45, 0x33, 0x99, 0xe7, 0x05, 0xfa, 0x92, 0x52, -+ 0x9f, 0x36, 0xc0, 0x6f, 0x9f, 0xbc, 0xe3, 0x0e, 0x73, 0xea, 0xb8, 0xd9, 0xcf, 0x96, 0x6e, 0x2a, -+ 0x79, 0x6e, 0xd2, 0xf3, 0x13, 0x5f, 0x98, 0xb0, 0x79, 0xfc, 0x96, 0x62, 0xde, 0xa9, 0xfe, 0xdd, -+ 0x6f, 0xff, 0xed, 0xbd, 0xf3, 0x67, 0xcf, 0xf5, 0xff, 0x1a, 0x14, 0xd4, 0xcb, 0xaf, 0x53, 0x39, -+ 0x8c, 0x1e, 0xfa, 0x85, 0x6f, 0x3a, 0x83, 0xd3, 0x0f, 0x71, 0xf5, 0x69, 0x07, 0xb8, 0xed, 0xa3, -+ 0x76, 0x8c, 0x9c, 0x99, 0x3a, 0xae, 0xfe, 0xb9, 0xac, 0xe7, 0x33, 0xcd, 0xcf, 0xe6, 0x6c, 0xca, -+ 0xe6, 0xbb, 0x40, 0x35, 0xd1, 0x6b, 0xd6, 0xc4, 0x94, 0xa7, 0x1f, 0xb7, 0xea, 0xd3, 0xba, 0xb8, -+ 0xed, 0x19, 0x3b, 0xd2, 0xeb, 0x41, 0xfe, 0xd9, 0xb4, 0x4d, 0xa9, 0xe6, 0xe7, 0x52, 0x9e, 0xd7, -+ 0xb8, 0x42, 0xe2, 0xc4, 0xac, 0x28, 0xf9, 0xeb, 0x8a, 0xfc, 0x46, 0x6e, 0x7b, 0xd6, 0x8e, 0x4c, -+ 0x49, 0x3e, 0x63, 0x53, 0xba, 0xf9, 0xb9, 0xb4, 0xe7, 0x53, 0x57, 0xfe, 0x2d, 0xf2, 0x4b, 0xb7, -+ 0xa7, 0xec, 0xd0, 0x48, 0xe2, 0xea, 0x4d, 0x23, 0xcc, 0xcf, 0x25, 0x3f, 0x9f, 0xb4, 0x30, 0x5a, -+ 0x1c, 0x21, 0xa3, 0x7f, 0x55, 0x3b, 0x24, 0x19, 0xf4, 0x01, 0x9f, 0xdc, 0x3b, 0x28, 0x85, 0x4b, -+ 0xa1, 0x51, 0xaa, 0xe9, 0x46, 0x29, 0x8f, 0x8c, 0x2d, 0x7e, 0x3f, 0xa0, 0x1e, 0x79, 0x20, 0xcd, -+ 0xda, 0xc5, 0x96, 0x60, 0x1b, 0x1c, 0x96, 0x56, 0x0f, 0x22, 0xb4, 0xb5, 0xa5, 0xc5, 0x27, 0xae, -+ 0xa4, 0x23, 0x97, 0xc7, 0x16, 0xc1, 0x09, 0x67, 0xd8, 0xdd, 0x26, 0xfa, 0xe9, 0x34, 0x1d, 0x85, -+ 0x71, 0x40, 0x72, 0x8b, 0x74, 0x1a, 0x0c, 0x41, 0x46, 0x5c, 0x24, 0xa1, 0xda, 0x20, 0xa3, 0x1b, -+ 0xea, 0x99, 0x11, 0xca, 0xbb, 0x5c, 0x1a, 0x22, 0x84, 0xa4, 0x82, 0x86, 0xfe, 0xbb, 0x86, 0xd3, -+ 0x46, 0x85, 0xae, 0x0e, 0xc5, 0x9a, 0x13, 0x62, 0xfe, 0x25, 0x09, 0xc6, 0x85, 0x38, 0x78, 0xf4, -+ 0xc3, 0x6f, 0xb6, 0xb2, 0x4a, 0x64, 0x1b, 0x85, 0xf0, 0xf3, 0x6d, 0x08, 0xa7, 0xf9, 0x3b, 0x91, -+ 0xf0, 0x9f, 0x61, 0x44, 0x28, 0x7e, 0x9e, 0xc1, 0xa9, 0xfe, 0x01, 0x06, 0x2f, 0x25, 0xfa, 0x29, -+ 0x4e, 0xf3, 0xda, 0x44, 0x70, 0xfa, 0xf6, 0x4c, 0xf3, 0x9a, 0xea, 0x3f, 0xcd, 0xb8, 0x40, 0xf5, -+ 0x9f, 0x61, 0xf0, 0xc5, 0x44, 0x0f, 0xc5, 0x69, 0x7e, 0x53, 0x3d, 0x3b, 0x99, 0xaf, 0x7b, 0x54, -+ 0xcf, 0x3e, 0x06, 0x6f, 0x23, 0x7a, 0x28, 0x4e, 0xf3, 0x54, 0xd1, 0x93, 0x18, 0x47, 0x0f, 0x83, -+ 0x2b, 0xfc, 0x31, 0xde, 0x27, 0x04, 0x94, 0x10, 0x85, 0xc9, 0xfc, 0xd1, 0x78, 0x40, 0xd2, 0x12, -+ 0x86, 0x87, 0xc5, 0x55, 0x40, 0x89, 0x51, 0xfc, 0x32, 0x9e, 0x1c, 0x07, 0x1f, 0x11, 0x07, 0x57, -+ 0xc7, 0xc1, 0x53, 0xe2, 0xe0, 0xa9, 0x71, 0xf0, 0xf4, 0x38, 0x78, 0x66, 0x14, 0x26, 0xfb, 0x9b, -+ 0x25, 0xff, 0x54, 0x13, 0xc5, 0x9f, 0x15, 0x47, 0x4f, 0x34, 0xf7, 0x4a, 0x84, 0x62, 0xea, 0x78, -+ 0x3c, 0x0e, 0xbe, 0x45, 0x5a, 0x35, 0xb4, 0x5f, 0x74, 0x7f, 0x8f, 0xc6, 0xe1, 0x3f, 0x05, 0xff, -+ 0x74, 0xb1, 0x8c, 0x89, 0xbe, 0x9d, 0x14, 0xc7, 0xb8, 0x7b, 0x17, 0xdb, 0x99, 0x87, 0x49, 0x23, -+ 0x3c, 0x1e, 0x04, 0x8c, 0xe5, 0xe1, 0x4f, 0xaa, 0x46, 0xe9, 0x41, 0x03, 0x1e, 0x83, 0xbc, 0xc6, -+ 0x0a, 0xf6, 0xd1, 0x33, 0xe2, 0xe1, 0x78, 0x79, 0xf4, 0xad, 0x30, 0x1c, 0x68, 0x0b, 0x5a, 0x7d, -+ 0xf6, 0xbf, 0xf2, 0x56, 0x4b, 0x1e, 0x62, 0xfd, 0x41, 0x77, 0xa7, 0xd3, 0xd2, 0x26, 0x06, 0x2c, -+ 0x70, 0xb7, 0x04, 0x25, 0x4e, 0xaf, 0x93, 0x7c, 0x59, 0xa0, 0x1f, 0xdb, 0xf2, 0x38, 0xf2, 0x8d, -+ 0x99, 0x34, 0xe5, 0xe3, 0x1b, 0x87, 0xbf, 0x22, 0x87, 0xda, 0xf9, 0x30, 0x7c, 0x64, 0x18, 0x4e, -+ 0xdf, 0xbf, 0x59, 0x3d, 0xca, 0xf7, 0x2f, 0x46, 0x0f, 0xfd, 0x1a, 0xc5, 0xf2, 0xd3, 0xf3, 0x1b, -+ 0xc5, 0x9f, 0x18, 0x87, 0x3f, 0x31, 0x36, 0xff, 0xf9, 0x30, 0xfe, 0x89, 0x61, 0xb8, 0x3d, 0x29, -+ 0x84, 0x4f, 0x08, 0xc3, 0x37, 0x87, 0xe1, 0x11, 0xfa, 0xe9, 0xa7, 0x18, 0x46, 0x3f, 0x3d, 0x91, -+ 0x3c, 0xfe, 0x29, 0x28, 0x0c, 0x4f, 0x09, 0xc3, 0x0b, 0xa0, 0x7f, 0x80, 0xc4, 0x2b, 0x93, 0xc1, -+ 0xff, 0x89, 0xc4, 0x65, 0x24, 0x83, 0x5f, 0x21, 0x25, 0x9e, 0xea, 0xc4, 0xeb, 0x86, 0x7f, 0x7a, -+ 0x29, 0x09, 0xe3, 0x1f, 0x17, 0x86, 0x4f, 0x63, 0xf4, 0x9c, 0x23, 0x7a, 0xee, 0x66, 0xf0, 0x0a, -+ 0x32, 0x9e, 0xc5, 0xe0, 0x9b, 0x08, 0x7f, 0x13, 0x83, 0x37, 0x11, 0x7c, 0x31, 0x83, 0x17, 0x10, -+ 0xbf, 0xbe, 0xc9, 0xe0, 0xbf, 0x24, 0xfc, 0xcb, 0x18, 0x5c, 0x45, 0xf8, 0x57, 0x30, 0x38, 0xd5, -+ 0xdb, 0xc9, 0xe0, 0x8f, 0x12, 0x3d, 0x8f, 0x30, 0xf8, 0x06, 0x32, 0x7e, 0x82, 0xc1, 0x4f, 0x90, -+ 0xf1, 0x33, 0x0c, 0x4e, 0xe3, 0xbb, 0x8d, 0xc1, 0x6b, 0x89, 0x3d, 0x3d, 0x0c, 0x7e, 0x9c, 0xac, -+ 0xfb, 0x43, 0x06, 0xff, 0x23, 0x19, 0xbf, 0xc2, 0xe0, 0x7b, 0x08, 0xff, 0x11, 0x06, 0xf7, 0x93, -+ 0xfd, 0x7d, 0x9b, 0xc1, 0x9f, 0x22, 0xe3, 0x73, 0x0c, 0xfe, 0x13, 0xa2, 0xe7, 0x7d, 0x06, 0x2f, -+ 0x25, 0xe3, 0x3f, 0x30, 0x38, 0xfd, 0x54, 0x79, 0x95, 0xc1, 0xe9, 0xdf, 0x21, 0xdf, 0x64, 0xf9, -+ 0x89, 0xbf, 0x49, 0x5c, 0x24, 0xae, 0x27, 0x7c, 0x59, 0x0c, 0x2e, 0x12, 0x7b, 0x0a, 0x18, 0xfc, -+ 0xa7, 0x04, 0x2f, 0x65, 0xf0, 0xc3, 0x44, 0x4f, 0x35, 0x83, 0x7f, 0x8b, 0xf0, 0x9b, 0x19, 0x3c, -+ 0x8f, 0xf0, 0x7b, 0x18, 0x7c, 0x0b, 0xe1, 0x7f, 0x9a, 0xc1, 0x3f, 0x23, 0xfc, 0xfb, 0x18, 0x9c, -+ 0xfe, 0xa4, 0xa0, 0xe5, 0x23, 0xf1, 0x3b, 0xa9, 0x3d, 0x0c, 0x4e, 0xed, 0xb7, 0x32, 0x38, 0xdd, -+ 0xef, 0x15, 0x0c, 0x7e, 0x86, 0xe0, 0x0f, 0x33, 0xf8, 0x26, 0xb2, 0xbf, 0x8f, 0x33, 0xb8, 0x8b, -+ 0xe0, 0x3b, 0x18, 0xdc, 0x4b, 0xd6, 0xdd, 0x4d, 0x7f, 0x35, 0x60, 0xce, 0xf5, 0x9b, 0x61, 0xfc, -+ 0x63, 0xc3, 0xf0, 0x77, 0xe2, 0xd8, 0xff, 0x6b, 0x86, 0x9f, 0xd6, 0xac, 0xe9, 0x42, 0x24, 0x3e, -+ 0x9b, 0xe0, 0x8d, 0x0c, 0x4e, 0xcf, 0xc9, 0x83, 0x42, 0xa4, 0x3d, 0xb4, 0xee, 0xff, 0x23, 0x83, -+ 0xd3, 0xe7, 0xb9, 0x2d, 0x8c, 0x9e, 0x1f, 0x13, 0x3d, 0x47, 0xc3, 0x70, 0x6c, 0xe7, 0x6f, 0x08, -+ 0x7e, 0x8e, 0xc1, 0x73, 0x89, 0x9e, 0xbf, 0x30, 0xfa, 0xe9, 0x73, 0xa1, 0x5a, 0x15, 0xa9, 0x9f, -+ 0xfe, 0x21, 0x56, 0x36, 0x83, 0x6b, 0x88, 0x9e, 0x52, 0x55, 0xa4, 0x1e, 0xfa, 0xbd, 0x7b, 0x4a, -+ 0x18, 0x7f, 0x3e, 0x0a, 0xb5, 0x39, 0x0c, 0x3f, 0xfd, 0x7e, 0x7d, 0x2f, 0xc3, 0xbf, 0x94, 0xf0, -+ 0x3b, 0xe3, 0xe0, 0x7e, 0x46, 0xcf, 0x52, 0x32, 0xde, 0xc0, 0xe0, 0xf4, 0x7b, 0xf5, 0x77, 0x19, -+ 0x3d, 0x34, 0xaf, 0x76, 0xc5, 0xc1, 0x5f, 0x66, 0xf4, 0xd0, 0x7d, 0x3d, 0xcc, 0xe0, 0xaf, 0x12, -+ 0xfc, 0x6d, 0x06, 0xa7, 0xf7, 0xdd, 0xf7, 0x19, 0x9c, 0x3e, 0x37, 0x7f, 0xce, 0xc4, 0x73, 0x11, -+ 0x89, 0xe7, 0x10, 0x83, 0x6f, 0x27, 0x78, 0x51, 0x42, 0x24, 0xfe, 0x07, 0x82, 0x4f, 0x0a, 0xbb, -+ 0x5f, 0x63, 0xfd, 0x2a, 0x32, 0xae, 0x62, 0x70, 0xfa, 0x3b, 0x92, 0x99, 0xc1, 0xe9, 0xaf, 0x51, -+ 0x0b, 0xc3, 0xf4, 0xe3, 0x3c, 0x69, 0x21, 0x71, 0xf8, 0x06, 0xc3, 0x4f, 0x9f, 0xd7, 0x57, 0x33, -+ 0xf6, 0x94, 0x91, 0x38, 0x77, 0x31, 0x7a, 0x68, 0x7d, 0x78, 0x82, 0xe1, 0xa7, 0xbf, 0x4f, 0xfc, -+ 0x2b, 0x83, 0x1f, 0x27, 0x78, 0x3f, 0xb3, 0x2e, 0xfd, 0xfd, 0x68, 0x80, 0xb5, 0x9f, 0x3c, 0x08, -+ 0xdc, 0x66, 0xd6, 0xdd, 0x4e, 0xd6, 0xcd, 0x4d, 0x8c, 0x6d, 0x8f, 0x85, 0xc1, 0x67, 0x93, 0xb8, -+ 0x3b, 0xc3, 0x9e, 0x67, 0x24, 0x7f, 0xc9, 0xf8, 0x89, 0x30, 0x7e, 0x6c, 0xe7, 0x17, 0xc4, 0xce, -+ 0x67, 0xe2, 0xe8, 0xdf, 0xc2, 0xf0, 0x9b, 0x48, 0x9e, 0xec, 0x60, 0xf8, 0x69, 0xfb, 0x01, 0x83, -+ 0xd3, 0xf7, 0xb6, 0x73, 0x8c, 0x3d, 0xf4, 0xf7, 0x94, 0xdf, 0x85, 0xf1, 0x4b, 0xe7, 0x8b, 0xe4, -+ 0xc3, 0xb5, 0x38, 0x78, 0x7a, 0x52, 0xa4, 0x9e, 0x45, 0x64, 0x9c, 0xcf, 0xe0, 0xf4, 0x77, 0x9a, -+ 0x3b, 0x18, 0xfc, 0x02, 0xd1, 0x5b, 0xc9, 0xe0, 0x9d, 0x64, 0x5c, 0xcf, 0xe0, 0xdf, 0x26, 0xe3, -+ 0x05, 0x0c, 0x4e, 0x7f, 0x5a, 0x5b, 0x1d, 0x86, 0x87, 0x3f, 0xc7, 0x7e, 0x27, 0x29, 0x32, 0x0e, -+ 0xf4, 0x3e, 0xf7, 0x7d, 0x06, 0xef, 0x20, 0xfc, 0x7d, 0x0c, 0x4e, 0x5f, 0x03, 0x8f, 0x33, 0xf8, -+ 0x45, 0x12, 0xff, 0x5f, 0x31, 0xf8, 0x05, 0xb2, 0xef, 0x1f, 0x33, 0xf8, 0x63, 0x04, 0xff, 0x63, -+ 0x1c, 0xfc, 0xdf, 0x19, 0x9c, 0xde, 0xbf, 0xaf, 0xc4, 0xc1, 0xc3, 0x9f, 0x57, 0xc7, 0x84, 0xf9, -+ 0x4b, 0xdf, 0x85, 0xd8, 0xfb, 0x51, 0x22, 0x17, 0x1b, 0xa7, 0xdf, 0xad, 0xb0, 0x1e, 0x7d, 0x18, -+ 0x4e, 0x75, 0xb2, 0xfc, 0x0f, 0xc6, 0xe1, 0x5f, 0xca, 0xf0, 0xd3, 0xfb, 0x4b, 0x20, 0x0e, 0x7f, -+ 0x27, 0xc3, 0x4f, 0xef, 0x17, 0xaf, 0xc6, 0xe1, 0x7f, 0x9d, 0xe1, 0xa7, 0x75, 0xef, 0x7a, 0x1c, -+ 0xfe, 0x1b, 0x0c, 0x3f, 0xad, 0x33, 0x95, 0x5c, 0x6c, 0xfe, 0x1a, 0x26, 0x3e, 0xec, 0x77, 0x81, -+ 0xbf, 0xb7, 0xe9, 0x90, 0x7c, 0x64, 0x58, 0x75, 0x26, 0xd2, 0xb3, 0xbf, 0xf3, 0xb2, 0x5f, 0x00, -+ 0xf0, 0x73, 0x95, 0x2a, 0x8c, 0x9f, 0xb6, 0xd3, 0xe4, 0x65, 0x87, 0xda, 0x3d, 0x92, 0xac, 0x43, -+ 0xe5, 0xe9, 0xfe, 0x4d, 0x20, 0x38, 0xfb, 0xa5, 0xe9, 0x62, 0x9c, 0xdf, 0x4b, 0x39, 0x66, 0x3c, -+ 0x99, 0xe8, 0xfc, 0x7b, 0xe5, 0x2b, 0x08, 0xc6, 0xfe, 0xdc, 0xac, 0xc8, 0x33, 0x02, 0xac, 0xff, -+ 0x77, 0xc7, 0xd0, 0x29, 0xc9, 0x13, 0xc6, 0x2f, 0x18, 0x3b, 0x58, 0xde, 0x5a, 0x14, 0x3b, 0x7e, -+ 0x68, 0x92, 0xdc, 0x1d, 0x20, 0x9f, 0x50, 0x70, 0xfc, 0x12, 0x51, 0x74, 0xfc, 0x1a, 0xe3, 0xac, -+ 0xff, 0x01, 0x39, 0x68, 0x19, 0xec, 0x1f, 0x43, 0x32, 0x7c, 0x8b, 0xe3, 0xc8, 0xff, 0x85, 0x7c, -+ 0x2a, 0xf9, 0x0e, 0xfb, 0xd7, 0x90, 0x0c, 0x9f, 0x23, 0x8e, 0x7c, 0xe7, 0x28, 0xb9, 0x67, 0xff, -+ 0x6f, 0x20, 0xcb, 0x6b, 0x43, 0xb1, 0xfd, 0x3f, 0x30, 0x25, 0x52, 0x1e, 0xfb, 0x8f, 0x43, 0xc1, -+ 0xfa, 0xdf, 0x11, 0x67, 0xfd, 0x7d, 0x74, 0x7d, 0x66, 0x92, 0xe5, 0x7d, 0x22, 0x8e, 0xfc, 0xf9, -+ 0xd1, 0x72, 0x7f, 0xe3, 0x2b, 0xe2, 0xb7, 0x1e, 0xc5, 0xb6, 0x7f, 0x60, 0x4a, 0xa4, 0x9d, 0xd8, -+ 0x7e, 0xfc, 0x75, 0x8b, 0xb5, 0xff, 0x79, 0xa2, 0x93, 0x8d, 0xd3, 0x19, 0xf2, 0x50, 0x7e, 0x89, -+ 0xf9, 0x1e, 0xc9, 0x31, 0x7d, 0x4f, 0x1c, 0xf9, 0xc3, 0x5a, 0xb9, 0x37, 0x32, 0x38, 0x2b, 0xdf, -+ 0x87, 0xe2, 0xe4, 0xaf, 0x36, 0x06, 0x18, 0x83, 0xf7, 0xe8, 0x57, 0xc8, 0x7b, 0xbf, 0xe2, 0xfc, -+ 0xe0, 0xf7, 0xb8, 0x58, 0xf1, 0xbb, 0x41, 0xe2, 0xa7, 0x0b, 0xab, 0x1f, 0x59, 0x28, 0x3a, 0x7e, -+ 0xf8, 0x3b, 0x47, 0xac, 0xaf, 0xd4, 0x8b, 0x49, 0xf1, 0x7c, 0x97, 0xc1, 0x59, 0x5b, 0x63, 0x9d, -+ 0x7d, 0xdc, 0x26, 0x91, 0x3f, 0xaf, 0x3c, 0x46, 0x94, 0xe3, 0x74, 0x2a, 0x8a, 0xb1, 0xfe, 0x88, -+ 0x38, 0xeb, 0x5f, 0x1c, 0x2f, 0xf7, 0xef, 0x33, 0x78, 0xac, 0x58, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, -+ 0x86, 0xdb, 0x70, 0x1b, 0x6e, 0xc3, 0x6d, 0xb8, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, 0x86, 0xdb, 0x70, -+ 0x1b, 0x6e, 0xc3, 0x6d, 0xb8, 0x0d, 0xb7, 0xe1, 0x36, 0xdc, 0xfe, 0x7f, 0xb7, 0xff, 0x02, 0xab, -+ 0xd3, 0x36, 0xbe, 0x00, 0x50, 0x00, 0x00 -+}; -+ -+int main(int argc, const char *argv[]) -+{ -+ unsigned char *buf = wcn_bind_verify_lib; -+ ssize_t len = sizeof(wcn_bind_verify_lib); -+ -+ if (argv[1] != NULL && strcmp(argv[1], "clang") == 0) { -+ buf = wcn_bind_verify_bc; -+ len = sizeof(wcn_bind_verify_bc); -+ } -+ -+ while (len--) -+ printf("%c", *buf++); -+ -+ return 0; -+} -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -old mode 100644 -new mode 100755 -index b243b39c2133..83b899e5e2de ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c -@@ -92,7 +92,7 @@ struct gpio_config { - }; - #endif - --#define WCN_FW_MAX_PATH_NUM 3 -+#define WCN_FW_MAX_PATH_NUM 4 - /* path of cp2 firmware. */ - #ifdef CONFIG_CUSTOMIZE_UNISOC_FW_PATH - #define UNISOC_FW_PATH_DEFAULT CONFIG_CUSTOMIZE_UNISOC_FW_PATH -@@ -2313,7 +2313,7 @@ static int marlin_start_run(void) - return ret; - } - --#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) -+//#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) - #include - - static void expand_seed(u8 *seed, u8 *out) -@@ -2419,7 +2419,7 @@ static int marlin_bind_verify(void) - - return ret; - } --#endif -+//#endif - - static int check_cp_ready(void) - { -@@ -2444,7 +2444,7 @@ static int check_cp_ready(void) - marlin_dev->sync_f.prj_type); - if (marlin_dev->sync_f.init_status == SYNC_ALL_FINISHED) - i = 0; --#if IS_ENABLED(CONFIG_AW_BIND_VERIFY) -+//#ifdef CONFIG_AW_BIND_VERIFY - else if (marlin_dev->sync_f.init_status == - SYNC_VERIFY_WAITING) { - ret = marlin_bind_verify(); -@@ -2454,7 +2454,7 @@ static int check_cp_ready(void) - return ret; - } - } --#endif -+//#endif - else - msleep(20); - if (i > 10) -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -old mode 100644 -new mode 100755 -index 126746321efc..e7e48258c216 ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_misc.c -@@ -18,7 +18,8 @@ - #include - #include - #include --#if KERNEL_VERSION(4, 14, 0) <= LINUX_VERSION_CODE -+#include -+#if KERNEL_VERSION(4, 11, 0) <= LINUX_VERSION_CODE - #include - #endif - -@@ -130,13 +131,21 @@ static void wcn_gmtime(struct timespec64 *tv, struct wcn_tm *tm) - /* AP notify BTWF time by at+aptime=... cmd */ - long int wcn_ap_notify_btwf_time(void) - { -+#if KERNEL_VERSION(4, 20, 0) <= LINUX_VERSION_CODE - struct timespec64 now; -+#else -+ struct timespec now; -+#endif - struct wcn_tm tm; - char aptime[64]; - long int send_cnt = 0; - - /* get ap kernel time and transfer to China-BeiJing Time */ -- ktime_get_coarse_real_ts64(&now); -+#if KERNEL_VERSION(4, 20, 0) <= LINUX_VERSION_CODE -+ ktime_get_real_ts64(&now); -+#else -+ now = current_kernel_time(); -+#endif - wcn_gmtime(&now, &tm); - tm.tm_hour = (tm.tm_hour + WCN_BTWF_TIME_OFFSET) % 24; - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -old mode 100644 -new mode 100755 -index 77b4ec259e3d..30b53a4a00ca ---- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_procfs.c -@@ -94,12 +94,12 @@ void mdbg_assert_interface(char *str) - stop_loopcheck(); - #endif - --#if (CONFIG_CP2_ASSERT) - memset(mdbg_proc->assert.buf, 0, MDBG_ASSERT_SIZE); - strncpy(mdbg_proc->assert.buf, str, len); - WCN_INFO("mdbg_assert_interface:%s\n", - (char *)(mdbg_proc->assert.buf)); - -+#if (CONFIG_CP2_ASSERT) - sprdwcn_bus_set_carddump_status(true); - #ifndef CONFIG_WCND - /* wcn_hold_cpu(); */ -@@ -113,8 +113,9 @@ void mdbg_assert_interface(char *str) - #else - WCN_ERR("%s,%s reset & notify...\n", __func__, str); - marlin_reset_notify_call(MARLIN_CP2_STS_ASSERTED); -+ marlin_cp2_reset(); - msleep(1000); -- marlin_reset_notify_call(MARLIN_CP2_STS_READY); -+ // marlin_reset_notify_call(MARLIN_CP2_STS_READY); - #endif - - } -@@ -764,12 +765,6 @@ static ssize_t mdbg_proc_write(struct file *filp, - return count; - } - -- if (strncmp(mdbg_proc->write_buf, "startgps", 7) == 0) { -- start_marlin(MARLIN_GNSS); -- return count; -- } -- -- - - /* unit of loglimitsize is MByte. */ - if (strncmp(mdbg_proc->write_buf, "loglimitsize=", -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -old mode 100644 -new mode 100755 -index 98f483353168..eec80dea067b ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdio_v3.c -@@ -128,9 +128,9 @@ static void sdio_remove_card(void) - static void sdiohal_cp_allow_sleep(enum slp_subsys subsys) - { - #ifdef CONFIG_WCN_SLP --#ifdef CONFIG_CPLOG_DEBUG -- sdiohal_info("%s entry\n", __func__); --#endif -+//#ifdef CONFIG_CPLOG_DEBUG -+// sdiohal_info("%s entry\n", __func__); -+//#endif - slp_mgr_drv_sleep(subsys, true); - #endif - } -@@ -138,9 +138,9 @@ static void sdiohal_cp_allow_sleep(enum slp_subsys subsys) - static void sdiohal_cp_sleep_wakeup(enum slp_subsys subsys) - { - #ifdef CONFIG_WCN_SLP --#ifdef CONFIG_CPLOG_DEBUG -- sdiohal_info("%s entry\n", __func__); --#endif -+//#ifdef CONFIG_CPLOG_DEBUG -+// sdiohal_info("%s entry\n", __func__); -+//#endif - slp_mgr_drv_sleep(subsys, false); - slp_mgr_wakeup(subsys); - #endif -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -old mode 100644 -new mode 100755 -index c26bfb3251b4..f87dfafe9c83 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal.h -@@ -62,7 +62,7 @@ extern long int sdiohal_log_level; - } while (0) - #define sdiohal_pr_perf(fmt, args...) \ - do { if (sdiohal_log_level & SDIOHAL_PERF_LEVEL) \ -- trace_printk(fmt, ## args); \ -+ printk(fmt, ## args); \ - } while (0) - #else - #define sdiohal_normal(fmt, args...) -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -old mode 100644 -new mode 100755 -index 0f67a7f35c30..a10b7909e95d ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_main.c -@@ -48,9 +48,9 @@ extern void sdio_clk_always_on(int on); - extern void sdio_set_max_reqsz(unsigned int size); - #endif - --//#ifdef CONFIG_RK_BOARD --//extern int rockchip_wifi_set_carddetect(int val); --//#endif -+#ifdef CONFIG_RK_BOARD -+extern int rockchip_wifi_set_carddetect(int val); -+#endif - - #ifdef CONFIG_AW_BOARD - extern int sunxi_wlan_get_bus_index(void); -@@ -2090,9 +2090,10 @@ void sdiohal_remove_card(void) - sdiohal_set_card_present(0); - #endif - --//#ifdef CONFIG_RK_BOARD --// rockchip_wifi_set_carddetect(0); --//#endif -+#ifdef CONFIG_RK_BOARD -+ //rockchip_wifi_set_carddetect(0); -+ return ; -+#endif - - #ifdef CONFIG_AW_BOARD - // sunxi_mmc_rescan_card(wlan_bus_index); -@@ -2192,9 +2193,9 @@ int sdiohal_scan_card(void) - sdiohal_set_card_present(1); - #endif - --//#ifdef CONFIG_RK_BOARD --// rockchip_wifi_set_carddetect(1); --//#endif -+#ifdef CONFIG_RK_BOARD -+ //rockchip_wifi_set_carddetect(1); -+#endif - - #if 0 - wlan_bus_index = sunxi_wlan_get_bus_index(); -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -old mode 100644 -new mode 100755 -index 2a64dac7af55..e968c09b2335 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_rx.c -@@ -205,7 +205,7 @@ int sdiohal_rx_thread(void *data) - static int times_count; - - param.sched_priority = SDIO_RX_TASK_PRIO; -- sched_set_fifo_low(current); -+ sched_setscheduler(current, SCHED_FIFO, ¶m); - sdiohal_rx_adapt_set_dtbs(0); - sdiohal_rx_adapt_set_pac_num(1); - -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -old mode 100644 -new mode 100755 -index c0790f6cdd13..b3b000e951b8 ---- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_tx.c -@@ -141,7 +141,7 @@ int sdiohal_tx_thread(void *data) - static int times_count; - - param.sched_priority = SDIO_TX_TASK_PRIO; -- sched_set_fifo_low(current); -+ sched_setscheduler(current, SCHED_FIFO, ¶m); - - while (1) { - /* Wait the semaphore */ -diff --git a/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c b/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -old mode 100644 -new mode 100755 -index 6e95b0f3ce87..0039e23426ee ---- a/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -+++ b/drivers/net/wireless/uwe5622/unisocwcn/usb/wcn_usb_download.c -@@ -344,3 +344,7 @@ int wcn_usb_dinit(void) - if (!this->download) - wcn_usb_dp("%s create file[download] failed\n", __func__); - -+ ddthis = this; -+ return 0; -+} -+ -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/api_version.c b/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -old mode 100644 -new mode 100755 -index 91bcfee46fb8..b677980115ef ---- a/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/api_version.c -@@ -449,11 +449,7 @@ int sprdwl_api_available_check(struct sprdwl_priv *priv, - u8 drv_ver = 0, fw_ver = 0; - u32 min_ver = 255; - --#if defined(UWE5621_FTR) - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - if (cmd_id == WIFI_CMD_SYNC_VERSION) - return 0; -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -old mode 100644 -new mode 100755 -index b2f9a877edce..64e15243dc84 ---- a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c -@@ -1725,20 +1725,6 @@ static int sprdwl_cfg80211_sched_scan_stop(struct wiphy *wiphy, - #ifdef SYNC_DISCONNECT - void sprdwl_disconnect_handle(struct sprdwl_vif *vif) - { -- u16 reason_code = 0; -- if ((vif->sm_state == SPRDWL_CONNECTED) || -- (vif->sm_state == SPRDWL_DISCONNECTING)) { -- cfg80211_disconnected(vif->ndev, reason_code, --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 83) -- NULL, 0, true, GFP_KERNEL); --#else -- NULL, 0, GFP_KERNEL); --#endif -- wl_ndev_log(L_DBG, vif->ndev, -- "%s %s, reason_code %d\n", __func__, -- vif->ssid, reason_code); -- } -- - vif->sm_state = SPRDWL_DISCONNECTED; - - /* Clear bssid & ssid */ -@@ -1788,19 +1774,17 @@ static int sprdwl_cfg80211_disconnect(struct wiphy *wiphy, - goto out; - } - #ifdef SYNC_DISCONNECT -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 60) - if (!sprdwl_sync_disconnect_event(vif, msecs_to_jiffies(1000))) { - kt = ktime_get(); --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) -- msec = (u32)(div_u64(kt, NSEC_PER_MSEC)); --#else - msec = (u32)(div_u64(kt.tv64, NSEC_PER_MSEC)); --#endif - wl_err("Wait disconnect event timeout. [mstime = %d]\n", -- cpu_to_le32(msec)); -+ cpu_to_le32(msec)); - } else { - sprdwl_disconnect_handle(vif); - } - atomic_set(&vif->sync_disconnect_event, 0); -+#endif - #endif - trace_deauth_reason(vif->mode, reason_code, LOCAL_EVENT); - out: -@@ -2253,9 +2237,8 @@ void sprdwl_report_scan_result(struct sprdwl_vif *vif, u16 chan, s16 rssi, - ie, ielen, signal, GFP_KERNEL); - - if (unlikely(!bss)) -- ; -- //wl_ndev_log(L_ERR, vif->ndev, -- // "%s failed to inform bss frame!\n", __func__); -+ wl_ndev_log(L_ERR, vif->ndev, -+ "%s failed to inform bss frame!\n", __func__); - cfg80211_put_bss(wiphy, bss); - - /*check log mac flag and call report fake probe*/ -@@ -2386,11 +2369,10 @@ void sprdwl_report_connection(struct sprdwl_vif *vif, - mgmt->bssid, tsf, - capability, beacon_interval, - ie, ielen, conn_info->signal, GFP_KERNEL); -- if (unlikely(!bss)) -- ; -- //wl_ndev_log(L_ERR, vif->ndev, -- // "%s failed to inform bss frame!\n", -- // __func__); -+ //if (unlikely(!bss)) -+ // wl_ndev_log(L_ERR, vif->ndev, -+ // "%s failed to inform bss frame!\n", -+ // __func__); - } else { - wl_ndev_log(L_ERR, vif->ndev, "%s No Beason IE!\n", __func__); - } -@@ -2706,9 +2688,24 @@ static int sprdwl_cfg80211_mgmt_tx(struct wiphy *wiphy, - /* send tx mgmt */ - if (len > 0) { - ret = sprdwl_tx_mgmt(vif->priv, vif->ctx_id, -- ieee80211_frequency_to_channel -- (chan->center_freq), dont_wait_for_ack, -- wait, cookie, buf, len); -+ ieee80211_frequency_to_channel -+ (chan->center_freq), dont_wait_for_ack, -+ wait, cookie, buf, len); -+ -+ if (ret == 0 && len == 217 && (chan->center_freq == 2412 || chan->center_freq == 5200)) { -+ int type = ((*buf) & IEEE80211_FCTL_FTYPE) >> 2; -+ int subtype = ((*buf) & IEEE80211_FCTL_STYPE) >> 4; -+ int action = *(buf + MAC_LEN); -+ int action_subtype = *(buf + ACTION_SUBTYPE_OFFSET); -+ if (type == IEEE80211_FTYPE_MGMT && subtype == ACTION_TYPE && -+ action == PUB_ACTION && action_subtype == 1 && -+ buf[4] == 0x00 && buf[5] == 0x01 && buf[6] == 0x02 && -+ buf[7] == 0x03 && buf[8] == 0x04 && buf[9] == 0x05) { -+ printk("sprdwl: %s(%d), DPP Frame Received\n", __func__, __LINE__); -+ cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, 0, GFP_KERNEL); -+ } -+ } -+ - if (ret) - if (!dont_wait_for_ack) - cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, -@@ -3117,7 +3114,7 @@ static int sprdwl_cfg80211_set_mac_acl(struct wiphy *wiphy, - unsigned char *mac_addr = NULL; - - if (!acl || !acl->n_acl_entries) { -- //wl_ndev_log(L_ERR, ndev, "%s no ACL data\n", __func__); -+ wl_ndev_log(L_ERR, ndev, "%s no ACL data\n", __func__); - return 0; - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c b/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -old mode 100644 -new mode 100755 -index 55c76b74195a..1f2f6efb9184 ---- a/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/cmdevt.c -@@ -400,7 +400,6 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - struct sprdwl_cmd_hdr *hdr; - u16 plen = sizeof(*hdr) + len; - enum sprdwl_mode mode = SPRDWL_MODE_NONE;/*default to open new device*/ --#if defined(UWE5621_FTR) - void *data = NULL; - struct sprdwl_vif *vif; - struct sprdwl_intf *intf = (struct sprdwl_intf *)(priv->hw_priv); -@@ -424,14 +423,13 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - if (cmd_id >= WIFI_CMD_OPEN) { - vif = ctx_id_to_vif(priv, ctx_id); - if (!vif) -- ; -- //wl_err("%s cant't get vif, ctx_id: %d\n", -- // __func__, ctx_id); -+ wl_err("%s cant't get vif, ctx_id: %d\n", -+ __func__, ctx_id); - else - mode = vif->mode; - sprdwl_put_vif(vif); - } --#endif -+ - msg = sprdwl_intf_get_msg_buf(priv, SPRDWL_TYPE_CMD, mode, ctx_id); - if (!msg) { - wl_err("%s, %d, getmsgbuf fail, mode=%d\n", -@@ -439,7 +437,6 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - return NULL; - } - --#if defined(UWE5621_FTR) - data = kzalloc((plen + priv->hw_offset), flags); - if (data) { - hdr = (struct sprdwl_cmd_hdr *)(data + priv->hw_offset); -@@ -456,25 +453,7 @@ struct sprdwl_msg_buf *__sprdwl_cmd_getbuf(struct sprdwl_priv *priv, - sprdwl_intf_free_msg_buf(priv, msg); - return NULL; - } --#else -- msg->skb = dev_alloc_skb(plen); -- if (msg->skb) { -- memset(msg->skb->data, 0, plen); -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; -- hdr->common.type = SPRDWL_TYPE_CMD; -- hdr->common.reserv = 0; -- hdr->common.rsp = rsp; -- hdr->common.ctx_id = ctx_id; -- hdr->plen = cpu_to_le16(plen); -- hdr->cmd_id = cmd_id; -- sprdwl_fill_msg(msg, msg->skb, msg->skb->data, plen); -- msg->data = hdr + 1; -- } else { -- wl_err("%s failed to allocate skb\n", __func__); -- sprdwl_intf_free_msg_buf(priv, msg); -- return NULL; -- } --#endif -+ - return msg; - } - -@@ -488,11 +467,7 @@ static int sprdwl_cmd_send_to_ic(struct sprdwl_priv *priv, - struct sprdwl_intf *intf = (struct sprdwl_intf *)(priv->hw_priv); - struct sprdwl_tx_msg *tx_msg = (struct sprdwl_tx_msg *)intf->sprdwl_tx; - --#if defined(UWE5621_FTR) - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - /*TODO:consider common this if condition since - * SPRDWL_HEAD_NORSP not used any more - */ -@@ -595,22 +570,15 @@ int sprdwl_cmd_send_recv(struct sprdwl_priv *priv, - ret = sprdwl_api_available_check(priv, msg); - if (ret || sprdwl_cmd_lock(cmd)) { - sprdwl_intf_free_msg_buf(priv, msg); --#if defined(UWE5621_FTR) - kfree(msg->tran_data); --#else -- dev_kfree_skb(msg->skb); --#endif - if (rlen) - *rlen = 0; - if (ret) - wl_err("API check fail, return!!\n"); - goto out; - } --#if defined(UWE5621_FTR) -+ - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - ctx_id = hdr->common.ctx_id; - -@@ -692,18 +660,11 @@ int sprdwl_cmd_send_recv_no_wait(struct sprdwl_priv *priv, - if (sprdwl_cmd_lock(cmd)) { - wl_err("%s, %d, error!\n", __func__, __LINE__); - sprdwl_intf_free_msg_buf(priv, msg); --#if defined(UWE5621_FTR) - kfree(msg->tran_data); --#else -- dev_kfree_skb(msg->skb); --#endif - goto out; - } --#if defined(UWE5621_FTR) -+ - hdr = (struct sprdwl_cmd_hdr *)(msg->tran_data + priv->hw_offset); --#else -- hdr = (struct sprdwl_cmd_hdr *)msg->skb->data; --#endif - cmd_id = hdr->cmd_id; - ctx_id = hdr->common.ctx_id; - -@@ -724,7 +685,7 @@ int sprdwl_sync_version(struct sprdwl_priv *priv) - struct sprdwl_cmd_api_t *drv_api = NULL; - struct sprdwl_cmd_api_t *fw_api = NULL; - u16 r_len = sizeof(*fw_api); -- u8 r_buf[r_len]; -+ u8 r_buf[sizeof(*fw_api)]; - int ret = 0; - - msg = sprdwl_cmd_getbuf(priv, sizeof(struct sprdwl_cmd_api_t), -@@ -864,40 +825,28 @@ int sprdwl_get_fw_info(struct sprdwl_priv *priv) - struct sprdwl_tlv_data *tlv; - u16 r_len = sizeof(*p) + GET_INFO_TLV_RBUF_SIZE; - u16 r_len_ori = r_len; -- u8 r_buf[r_len]; --#ifdef COMPAT_SAMPILE_CODE -+ u8 r_buf[sizeof(*p) + GET_INFO_TLV_RBUF_SIZE]; - u8 compat_ver = 0; --#endif - unsigned int len_count = 0; - bool b_tlv_data_chk = true; -- u16 tlv_len; -+ u16 tlv_len = sizeof(struct ap_version_tlv_elmt); - #ifdef WL_CONFIG_DEBUG - u8 ap_version = NOTIFY_AP_VERSION_USER_DEBUG; - #else - u8 ap_version = NOTIFY_AP_VERSION_USER; - #endif -- u16 offset = 0; --#ifdef OTT_UWE -- u8 bytes_allign = 1; --#define OTT_UWE_OFFSET_ENABLE 1 --#endif -- u8 credit_via_data = 1; - -- tlv_len = sizeof(*tlv) + 1; - #ifdef OTT_UWE -- tlv_len += (sizeof(*tlv) + 1); -+#define OTT_UWE_OFFSET_ENABLE 1 -+ tlv_len += 1; - #endif - -- if (priv->hw_type == SPRDWL_HW_USB) -- tlv_len += (sizeof(*tlv) + 1); -- - memset(r_buf, 0, r_len); - msg = sprdwl_cmd_getbuf(priv, tlv_len, SPRDWL_MODE_NONE, - SPRDWL_HEAD_RSP, WIFI_CMD_GET_INFO); - if (!msg) - return -ENOMEM; - --#ifdef COMPAT_SAMPILE_CODE - compat_ver = need_compat_operation(priv, WIFI_CMD_GET_INFO); - if (compat_ver) { - switch (compat_ver) { -@@ -917,25 +866,16 @@ int sprdwl_get_fw_info(struct sprdwl_priv *priv) - break; - } - } --#endif - -- /*to notify CP2 use more CP2 buffer*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), NOTIFY_AP_VERSION, -+ sprdwl_set_tlv_elmt((u8 *)msg->data, NOTIFY_AP_VERSION, - sizeof(ap_version), &ap_version); -- offset += (sizeof(*tlv) + 1); -+ - #ifdef OTT_UWE -- /*to notify CP2 this is OTT version ,4bytes allign*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), OTT_UWE_OFFSET_ENABLE, -- sizeof(bytes_allign), &bytes_allign); -- offset += (sizeof(*tlv) + 1); -+ tlv = (struct sprdwl_tlv_data *)msg->data; -+ tlv->type = OTT_UWE_OFFSET_ENABLE; -+ tlv->len = 1; -+ *((char *)tlv->data) = 1; - #endif -- if (priv->hw_type == SPRDWL_HW_USB) { -- /*to notify CP2 data credit disable*/ -- sprdwl_set_tlv_elmt((u8 *)(msg->data + offset), NOTIFY_CREDIT_VIA_RX_DATA, -- sizeof(credit_via_data), &credit_via_data); -- offset += (sizeof(*tlv) + 1); -- } -- - ret = sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, &r_len); - if (!ret && r_len) { - #if defined COMPAT_SAMPILE_CODE -@@ -1598,16 +1538,12 @@ int sprdwl_set_qos_map(struct sprdwl_priv *priv, u8 vif_ctx_id, void *qos_map) - if (!qos_map) - return 0; - msg = -- sprdwl_cmd_getbuf(priv, sizeof(*p), vif_ctx_id, 1, -- WIFI_CMD_SET_QOS_MAP); -+ sprdwl_cmd_getbuf(priv, sizeof(*p), vif_ctx_id, 1, -+ WIFI_CMD_SET_QOS_MAP); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_qos_map *)msg->data; --#else -- p = (struct sprdwl_cmd_qos_map *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - memcpy((u8 *)p, qos_map, sizeof(*p)); - memcpy(&g_11u_qos_map.qos_exceptions[0], &p->dscp_exception[0], -@@ -1633,12 +1569,8 @@ int sprdwl_gscan_subcmd(struct sprdwl_priv *priv, u8 vif_ctx_id, - - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = subcmd; - - if (data != NULL) { -@@ -1661,12 +1593,8 @@ int sprdwl_set_gscan_config(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_CONFIG; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1683,12 +1611,8 @@ int sprdwl_set_gscan_scan_config(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *)(msg->skb->data + -- sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_SCAN_CONFIG; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1705,12 +1629,8 @@ int sprdwl_enable_gscan(struct sprdwl_priv *priv, u8 vif_ctx_id, void *data, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_ENABLE_GSCAN; - p->data_len = sizeof(int); - memcpy(p->data, data, p->data_len); -@@ -1727,12 +1647,8 @@ int sprdwl_get_gscan_capabilities(struct sprdwl_priv *priv, u8 vif_ctx_id, - SPRDWL_HEAD_RSP, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_GET_CAPABILITIES; - p->data_len = 0; - -@@ -1751,29 +1667,19 @@ int sprdwl_get_gscan_channel_list(struct sprdwl_priv *priv, u8 vif_ctx_id, - if (!msg) - return -ENOMEM; - --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_GET_CHANNEL_LIST; - p->data_len = sizeof(*band); - --#if defined(UWE5621_FTR) - band = (int *)(msg->data + sizeof(struct sprd_cmd_gscan_header)); --#else -- band = (int *)(msg->skb->data + sizeof(struct sprdwl_cmd_hdr) + -- sizeof(struct sprd_cmd_gscan_header)); --#endif -- - *band = *((int *)data); - - return sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, r_len); - } - - int sprdwl_set_gscan_bssid_hotlist(struct sprdwl_priv *priv, u8 vif_ctx_id, -- void *data, u16 len, u8 *r_buf, u16 *r_len) -+ void *data, u16 len, u8 *r_buf, u16 *r_len) - { - struct sprdwl_msg_buf *msg; - struct sprd_cmd_gscan_header *p; -@@ -1782,12 +1688,8 @@ int sprdwl_set_gscan_bssid_hotlist(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_GSCAN_SUBCMD_SET_HOTLIST; - p->data_len = len; - memcpy(p->data, data, len); -@@ -1804,19 +1706,15 @@ int sprdwl_set_gscan_bssid_blacklist(struct sprdwl_priv *priv, u8 vif_ctx_id, - vif_ctx_id, 1, WIFI_CMD_GSCAN); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprd_cmd_gscan_header *)msg->data; --#else -- p = (struct sprd_cmd_gscan_header *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - p->subcmd = SPRDWL_WIFI_SUBCMD_SET_BSSID_BLACKLIST; - p->data_len = len; - memcpy(p->data, data, len); - return sprdwl_cmd_send_recv(priv, msg, CMD_WAIT_TIMEOUT, r_buf, r_len); - } - int sprdwl_add_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, -- const u8 *peer, u8 user_prio, u16 admitted_time) -+ const u8 *peer, u8 user_prio, u16 admitted_time) - { - struct sprdwl_msg_buf *msg; - struct sprdwl_cmd_tx_ts *p; -@@ -1828,12 +1726,8 @@ int sprdwl_add_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, - WIFI_CMD_ADD_TX_TS); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_tx_ts *)msg->data; --#else -- p = (struct sprdwl_cmd_tx_ts *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - - p->tsid = tsid; -@@ -1859,12 +1753,8 @@ int sprdwl_del_tx_ts(struct sprdwl_priv *priv, u8 vif_ctx_id, u8 tsid, - WIFI_CMD_DEL_TX_TS); - if (!msg) - return -ENOMEM; --#if defined(UWE5621_FTR) -+ - p = (struct sprdwl_cmd_tx_ts *)msg->data; --#else -- p = (struct sprdwl_cmd_tx_ts *) -- (msg->skb->data + sizeof(struct sprdwl_cmd_hdr)); --#endif - memset((u8 *)p, 0, sizeof(*p)); - - p->tsid = tsid; -@@ -2023,37 +1913,19 @@ int sprdwl_set_roam_offload(struct sprdwl_priv *priv, u8 vif_ctx_id, - - int sprdwl_tdls_mgmt(struct sprdwl_vif *vif, struct sk_buff *skb) - { --#ifndef UWE5621_FTR -- struct sprdwl_msg_buf *msg; --#endif - int ret; - --#ifndef UWE5621_FTR -- msg = sprdwl_intf_get_msg_buf(vif->priv, SPRDWL_TYPE_DATA, -- SPRDWL_MODE_STATION, vif->ctx_id); -- if (!msg) { -- if (vif->priv->hw_type == SPRDWL_HW_SDIO_BA) -- sprdwl_stop_net(vif); -- vif->ndev->stats.tx_fifo_errors++; -- wl_err("%s, %d, get msg bug failed\n", __func__, __LINE__); -- return -NETDEV_TX_BUSY; -- } --#endif - /* temp debug use */ - if (skb_headroom(skb) < vif->ndev->needed_headroom) - wl_err("%s skb head len err:%d %d\n", -- __func__, skb_headroom(skb), -- vif->ndev->needed_headroom); --#ifdef UWE5621_FTR -+ __func__, skb_headroom(skb), -+ vif->ndev->needed_headroom); -+ - /*send TDLS mgmt through cmd port instead of data port,needed by CP2*/ - ret = sprdwl_send_tdlsdata_use_cmd(skb, vif, 1); --#else -- /* sprdwl_send_data: offset use 2 for cp bytes align */ -- ret = sprdwl_send_data(vif, msg, skb, 2, false); --#endif - if (ret) { -- //wl_err("%s drop msg due to TX Err\n", -- // __func__); -+ wl_err("%s drop msg due to TX Err\n", -+ __func__); - goto out; - } - -@@ -2735,12 +2607,12 @@ unsigned short sprdwl_rx_rsp_process(struct sprdwl_priv *priv, u8 *msg) - complete(&cmd->completed); - } else { - kfree(data); -- //wl_err("%s ctx_id %d recv mismatched rsp[%s] status[%s]\n", -- // __func__, hdr->common.ctx_id, -- // cmd2str(hdr->cmd_id), -- // err2str(hdr->status)); -- //wl_err("%s mstime:[%u %u]\n", __func__, -- // SPRDWL_GET_LE32(hdr->mstime), cmd->mstime); -+ wl_err("%s ctx_id %d recv mismatched rsp[%s] status[%s]\n", -+ __func__, hdr->common.ctx_id, -+ cmd2str(hdr->cmd_id), -+ err2str(hdr->status)); -+ wl_err("%s mstime:[%u %u]\n", __func__, -+ SPRDWL_GET_LE32(hdr->mstime), cmd->mstime); - } - spin_unlock_bh(&cmd->lock); - atomic_dec(&cmd->refcnt); -@@ -2789,11 +2661,11 @@ void sprdwl_event_scan_done(struct sprdwl_vif *vif, u8 *data, u16 len) - default: - sprdwl_scan_done(vif, true); - sprdwl_sched_scan_done(vif, false); -- //if (p->type == SPRDWL_SCAN_ERROR) -- // wl_ndev_log(L_ERR, vif->ndev, "%s error!\n", __func__); -- //else -- // wl_ndev_log(L_ERR, vif->ndev, "%s invalid scan done type: %d\n", -- // __func__, p->type); -+ if (p->type == SPRDWL_SCAN_ERROR) -+ wl_ndev_log(L_ERR, vif->ndev, "%s error!\n", __func__); -+ else -+ wl_ndev_log(L_ERR, vif->ndev, "%s invalid scan done type: %d\n", -+ __func__, p->type); - break; - } - bss_count = 0; -@@ -2897,16 +2769,19 @@ void sprdwl_event_disconnect(struct sprdwl_vif *vif, u8 *data, u16 len) - u16 reason_code; - - memcpy(&reason_code, data, sizeof(reason_code)); -- wl_info("%s reason code = %d\n", __func__, reason_code); - #ifdef SYNC_DISCONNECT -+ /*Report disconnection on version > 4.9.60, even though disconnect -+ is from wpas, otherwise it returns -EALREADY on next connect.*/ -+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 60) - if (atomic_read(&vif->sync_disconnect_event)) { - vif->disconnect_event_code = reason_code; - atomic_set(&vif->sync_disconnect_event, 0); - wake_up(&vif->disconnect_wq); -+ wl_err("%s reason code = %d\n", __func__, reason_code); - } else - #endif -- sprdwl_report_disconnection(vif, reason_code); -- -+#endif -+ sprdwl_report_disconnection(vif, reason_code); - } - - void sprdwl_event_mic_failure(struct sprdwl_vif *vif, u8 *data, u16 len) -@@ -3600,11 +3475,9 @@ unsigned short sprdwl_rx_event_process(struct sprdwl_priv *priv, u8 *msg) - sprdwl_event_nan(vif, data, len); - break; - #endif /* NAN_SUPPORT */ --#ifdef UWE5621_FTR - case WIFI_EVENT_STA_LUT_INDEX: - sprdwl_event_sta_lut(vif, data, len); - break; --#endif - case WIFI_EVENT_BA: - sprdwl_event_ba_mgmt(vif, data, len); - break; -@@ -3724,14 +3597,14 @@ int sprdwl_sync_disconnect_event(struct sprdwl_vif *vif, unsigned int timeout) - #endif - - int sprdwl_set_packet_offload(struct sprdwl_priv *priv, u8 vif_ctx_id, -- u32 req, u8 enable, u32 interval, -- u32 len, u8 *data) -+ u32 req, u8 enable, u32 interval, -+ u32 len, u8 *data) - { - struct sprdwl_msg_buf *msg; - struct sprdwl_cmd_packet_offload *p; - struct sprdwl_cmd_packet_offload *packet = NULL; - u16 r_len = sizeof(*packet); -- u8 r_buf[r_len]; -+ u8 r_buf[sizeof(*packet)]; - - msg = sprdwl_cmd_getbuf(priv, sizeof(*p) + len, vif_ctx_id, - SPRDWL_HEAD_RSP, WIFI_CMD_PACKET_OFFLOAD); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/intf.h b/drivers/net/wireless/uwe5622/unisocwifi/intf.h -old mode 100644 -new mode 100755 -index c17356251e02..41b9bd5a3fe9 ---- a/drivers/net/wireless/uwe5622/unisocwifi/intf.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/intf.h -@@ -24,35 +24,17 @@ struct sprdwl_priv; - struct sprdwl_if_ops { - struct sprdwl_msg_buf *(*get_msg_buf)(void *sdev, - enum sprdwl_head_type type, --#if defined(UWE5621_FTR) - enum sprdwl_mode mode, - u8 ctx_id); --#else -- enum sprdwl_mode mode); --#endif -+ - void (*free_msg_buf)(void *sdev, struct sprdwl_msg_buf *msg); - int (*tx)(void *spdev, struct sprdwl_msg_buf *msg); -- --#if defined(UWE5621_FTR) - void (*force_exit)(void *spdev); - int (*is_exit)(void *spdev); --#else -- void (*force_exit)(void); -- int (*is_exit)(void); --#endif /* UWE5621_FTR */ - int (*suspend)(struct sprdwl_priv *priv); - int (*resume)(struct sprdwl_priv *priv); --#if defined(UWE5621_FTR) - void (*debugfs)(void *spdev, struct dentry *dir); --#else -- void (*debugfs)(struct dentry *dir); --#endif /* UWE5621_FTR */ -- --#if defined(UWE5621_FTR) - void (*tcp_drop_msg)(void *spdev, struct sprdwl_msg_buf *msg); --#else -- void (*tcp_drop_msg)(struct sprdwl_msg_buf *msg); --#endif /* UWE5621_FTR*/ - int (*ini_download_status)(void); - }; - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h b/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -old mode 100644 -new mode 100755 -index 3844b0b06767..c580b3040260 ---- a/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/intf_ops.h -@@ -28,11 +28,7 @@ inline struct sprdwl_msg_buf *sprdwl_intf_get_msg_buf(struct sprdwl_priv *priv, - enum sprdwl_mode mode, - u8 ctx_id) - { --#if defined(UWE5621_FTR) - return priv->if_ops->get_msg_buf(priv->hw_priv, type, mode, ctx_id); --#else -- return priv->if_ops->get_msg_buf(priv->hw_priv, type, mode); --#endif - } - - static inline void sprdwl_intf_free_msg_buf(struct sprdwl_priv *priv, -@@ -53,20 +49,12 @@ static inline int sprdwl_intf_tx(struct sprdwl_priv *priv, - - static inline void sprdwl_intf_force_exit(struct sprdwl_priv *priv) - { --#if defined(UWE5621_FTR) - priv->if_ops->force_exit(priv->hw_priv); --#else -- priv->if_ops->force_exit(); --#endif - } - - static inline int sprdwl_intf_is_exit(struct sprdwl_priv *priv) - { --#if defined(UWE5621_FTR) - return priv->if_ops->is_exit(priv->hw_priv); --#else -- return priv->if_ops->is_exit(); --#endif - } - - static inline int sprdwl_intf_suspend(struct sprdwl_priv *priv) -@@ -88,25 +76,15 @@ static inline int sprdwl_intf_resume(struct sprdwl_priv *priv) - static inline void sprdwl_intf_debugfs(struct sprdwl_priv *priv, - struct dentry *dir) - { --#if defined(UWE5621_FTR) - if (priv->if_ops->debugfs) - priv->if_ops->debugfs(priv->hw_priv, dir); --#else -- if (priv->if_ops->debugfs) -- priv->if_ops->debugfs(dir); --#endif /* UWE5621_FTR */ - } - - static inline void sprdwl_intf_tcp_drop_msg(struct sprdwl_priv *priv, - struct sprdwl_msg_buf *msg) - { --#if defined(UWE5621_FTR) - if (priv->if_ops->tcp_drop_msg) - priv->if_ops->tcp_drop_msg(priv->hw_priv, msg); --#else -- if (priv->if_ops->tcp_drop_msg) -- priv->if_ops->tcp_drop_msg(msg); --#endif - } - - static inline int sprdwl_get_ini_status(struct sprdwl_priv *priv) -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/main.c b/drivers/net/wireless/uwe5622/unisocwifi/main.c -old mode 100644 -new mode 100755 -index 46b9039519cd..f1d6d7285d88 ---- a/drivers/net/wireless/uwe5622/unisocwifi/main.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/main.c -@@ -994,9 +994,8 @@ static int sprdwl_inetaddr_event(struct notifier_block *this, - if (entry->ctx_id == vif->ctx_id) - entry->ip_acquired = 1; - else -- ; -- //wl_err("ctx_id(%d) mismatch\n", -- // entry->ctx_id); -+ wl_err("ctx_id(%d) mismatch\n", -+ entry->ctx_id); - } else { - wl_err("failed to find entry\n"); - } -@@ -1089,7 +1088,12 @@ static void sprdwl_set_mac_addr(struct sprdwl_vif *vif, u8 *pending_addr, - if (is_valid_ether_addr(custom_mac)) { - ether_addr_copy(addr, custom_mac); - } else if (priv && is_valid_ether_addr(priv->mac_addr)) { -- ether_addr_copy(addr, priv->mac_addr); -+ if (type == NL80211_IFTYPE_P2P_DEVICE) { -+ ether_addr_copy(addr, priv->mac_addr); -+ } else { -+ vif->ndev->addr_len = ETH_ALEN; -+ dev_addr_set(vif->ndev, priv->mac_addr); -+ } - } else if (pending_addr && is_valid_ether_addr(pending_addr)) { - ether_addr_copy(addr, pending_addr); - } else if (priv && is_valid_ether_addr(priv->default_mac)) { -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/msg.c b/drivers/net/wireless/uwe5622/unisocwifi/msg.c -old mode 100644 -new mode 100755 -index f71a6879615d..47f78c4343be ---- a/drivers/net/wireless/uwe5622/unisocwifi/msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/msg.c -@@ -169,7 +169,6 @@ struct sprdwl_msg_buf *sprdwl_get_msgbuf_by_data(void *data, - return find ? msg_buf : NULL; - } - --#if defined(UWE5621_FTR) - struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list) - { - struct sprdwl_msg_buf *msg_buf = NULL; -@@ -181,5 +180,4 @@ struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list) - spin_unlock_bh(&list->busylock); - return msg_buf; - } --#endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/msg.h b/drivers/net/wireless/uwe5622/unisocwifi/msg.h -old mode 100644 -new mode 100755 -index 67a4b474e74e..dd57521ae708 ---- a/drivers/net/wireless/uwe5622/unisocwifi/msg.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/msg.h -@@ -215,7 +215,5 @@ void sprdwl_dequeue_msg_buf(struct sprdwl_msg_buf *msg_buf, - struct sprdwl_msg_list *list); - struct sprdwl_msg_buf *sprdwl_get_msgbuf_by_data(void *data, - struct sprdwl_msg_list *list); --#if defined(UWE5621_FTR) - struct sprdwl_msg_buf *sprdwl_get_tail_msg_buf(struct sprdwl_msg_list *list); - #endif --#endif -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/npi.c b/drivers/net/wireless/uwe5622/unisocwifi/npi.c -old mode 100644 -new mode 100755 -index 42fe960c8289..a71d18a01d46 ---- a/drivers/net/wireless/uwe5622/unisocwifi/npi.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/npi.c -@@ -33,9 +33,6 @@ static struct genl_family sprdwl_nl_genl_family; - static int sprdwl_get_flag(void) - { - struct file *fp = NULL; --#ifdef setfs -- mm_segment_t fs; --#endif - loff_t *pos; - int flag = 0; - char file_data[2]; -@@ -46,18 +43,11 @@ static int sprdwl_get_flag(void) - wl_err("open file:%s failed\n", SPRDWL_PSM_PATH); - return PTR_ERR(fp); - } --#ifdef setfs -- fs = get_fs(); -- set_fs(KERNEL_DS); --#endif - - pos = &fp->f_pos; - kernel_read(fp, file_data, 1, pos); - - filp_close(fp, NULL); --#ifdef setfs -- set_fs(fs); --#endif - - file_data[1] = 0; - if (kstrtoull(file_data, 10, &tmp)) { -@@ -268,6 +258,7 @@ static int sprdwl_nl_get_info_handler(struct sk_buff *skb_2, - } - - static struct nla_policy sprdwl_genl_policy[SPRDWL_NL_ATTR_MAX + 1] = { -+ [SPRDWL_NL_ATTR_IFINDEX] = { .type = NLA_U32, }, - [SPRDWL_NL_ATTR_AP2CP] = {.type = NLA_BINARY, .len = 1024}, - [SPRDWL_NL_ATTR_CP2AP] = {.type = NLA_BINARY, .len = 1024} - }; -@@ -275,16 +266,10 @@ static struct nla_policy sprdwl_genl_policy[SPRDWL_NL_ATTR_MAX + 1] = { - static struct genl_ops sprdwl_nl_ops[] = { - { - .cmd = SPRDWL_NL_CMD_NPI, --#if KERNEL_VERSION(5, 2, 0) > LINUX_VERSION_CODE -- .policy = sprdwl_genl_policy, --#endif - .doit = sprdwl_nl_npi_handler, - }, - { - .cmd = SPRDWL_NL_CMD_GET_INFO, --#if KERNEL_VERSION(5, 2, 0) > LINUX_VERSION_CODE -- .policy = sprdwl_genl_policy, --#endif - .doit = sprdwl_nl_get_info_handler, - } - }; -@@ -295,6 +280,7 @@ static struct genl_family sprdwl_nl_genl_family = { - .name = "SPRDWL_NL", - .version = 1, - .maxattr = SPRDWL_NL_ATTR_MAX, -+ .policy = sprdwl_genl_policy, - .pre_doit = sprdwl_npi_pre_doit, - .post_doit = sprdwl_npi_post_doit, - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/qos.c b/drivers/net/wireless/uwe5622/unisocwifi/qos.c -old mode 100644 -new mode 100755 -index d0e42a882cb4..7abcc0a02ee3 ---- a/drivers/net/wireless/uwe5622/unisocwifi/qos.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/qos.c -@@ -552,15 +552,9 @@ void wmm_ac_init(struct sprdwl_priv *priv) - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) - timer_setup(&priv->wmmac.wmmac_edcaf_timer, update_wmmac_edcaftime_timeout, 0); -- timer_setup(&priv->wmmac.wmmac_vo_timer, update_wmmac_vo_timeout, 0); -- timer_setup(&priv->wmmac.wmmac_vi_timer, update_wmmac_vi_timeout, 0); - #else - setup_timer(&priv->wmmac.wmmac_edcaf_timer, update_wmmac_edcaftime_timeout, -- (unsigned long)priv); -- setup_timer(&priv->wmmac.wmmac_vo_timer, update_wmmac_vo_timeout, -- (unsigned long)priv); -- setup_timer(&priv->wmmac.wmmac_vi_timer, update_wmmac_vi_timeout, -- (unsigned long)priv); -+ (unsigned long)priv); - #endif - memset(&priv->wmmac.ac[0], 0, 4*sizeof(struct wmm_ac_params)); - } -@@ -576,12 +570,6 @@ void reset_wmmac_parameters(struct sprdwl_priv *priv) - if (timer_pending(&priv->wmmac.wmmac_edcaf_timer)) - del_timer_sync(&priv->wmmac.wmmac_edcaf_timer); - -- if (timer_pending(&priv->wmmac.wmmac_vo_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vo_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vi_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vi_timer); -- - memset(&priv->wmmac.ac[0], 0, 4*sizeof(struct wmm_ac_params)); - } - -@@ -697,14 +685,6 @@ void update_admitted_time(struct sprdwl_priv *priv, u8 tsid, u16 medium_time, bo - g_wmmac_admittedtime[ac] += (medium_time<<5); - mod_timer(&priv->wmmac.wmmac_edcaf_timer, - jiffies + WMMAC_EDCA_TIMEOUT_MS * HZ / 1000); -- -- /*replace the usedtime logic method with timer counter, just for simplify for the WFA certification*/ -- if (ac == AC_VO) -- mod_timer(&priv->wmmac.wmmac_vo_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[ac] * WMMAC_TIME_RATIO)); -- else if (ac == AC_VI) -- mod_timer(&priv->wmmac.wmmac_vi_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[ac] * WMMAC_TIME_RATIO)); - } else { - if (g_wmmac_admittedtime[ac] > (medium_time<<5)) - g_wmmac_admittedtime[ac] -= (medium_time<<5); -@@ -712,12 +692,6 @@ void update_admitted_time(struct sprdwl_priv *priv, u8 tsid, u16 medium_time, bo - g_wmmac_admittedtime[ac] = 0; - if (timer_pending(&priv->wmmac.wmmac_edcaf_timer)) - del_timer_sync(&priv->wmmac.wmmac_edcaf_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vo_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vo_timer); -- -- if (timer_pending(&priv->wmmac.wmmac_vi_timer)) -- del_timer_sync(&priv->wmmac.wmmac_vi_timer); - } - } - -@@ -738,38 +712,13 @@ void update_wmmac_edcaftime_timeout(unsigned long data) - if (g_wmmac_admittedtime[AC_VO] > 0) { - g_wmmac_usedtime[AC_VO] = 0; - g_wmmac_available[AC_VO] = true; -- mod_timer(&priv->wmmac.wmmac_vo_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[AC_VO] * WMMAC_TIME_RATIO)); - } - if (g_wmmac_admittedtime[AC_VI] > 0) { - g_wmmac_usedtime[AC_VI] = 0; - g_wmmac_available[AC_VI] = true; -- mod_timer(&priv->wmmac.wmmac_vi_timer, -- jiffies + usecs_to_jiffies(g_wmmac_admittedtime[AC_VI] * WMMAC_TIME_RATIO)); - } - } - --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) --void update_wmmac_vo_timeout(struct timer_list *t) --#else --void update_wmmac_vo_timeout(unsigned long data) --#endif --{ -- g_wmmac_usedtime[AC_VO] = g_wmmac_admittedtime[AC_VO]; -- g_wmmac_available[AC_VO] = false; --} -- --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) --void update_wmmac_vi_timeout(struct timer_list *t) --#else --void update_wmmac_vi_timeout(unsigned long data) --#endif --{ -- g_wmmac_usedtime[AC_VI] = g_wmmac_admittedtime[AC_VI]; -- g_wmmac_available[AC_VI] = false; -- --} -- - /*change priority according to the g_wmmac_available value */ - unsigned int change_priority_if(struct sprdwl_priv *priv, unsigned char *tid, unsigned char *tos, u16 len) - { -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/qos.h b/drivers/net/wireless/uwe5622/unisocwifi/qos.h -old mode 100644 -new mode 100755 -index 3d69d1c5730a..06eeb5c81618 ---- a/drivers/net/wireless/uwe5622/unisocwifi/qos.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/qos.h -@@ -237,13 +237,11 @@ u16 get_wmmac_admitted_time(u8 tsid); - void reset_wmmac_parameters(struct sprdwl_priv *priv); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) - void update_wmmac_edcaftime_timeout(struct timer_list *t); --void update_wmmac_vo_timeout(struct timer_list *t); --void update_wmmac_vi_timeout(struct timer_list *t); - #else - void update_wmmac_edcaftime_timeout(unsigned long data); -+#endif - void update_wmmac_vo_timeout(unsigned long data); - void update_wmmac_vi_timeout(unsigned long data); --#endif - unsigned int change_priority_if(struct sprdwl_priv *priv, unsigned char *tid, unsigned char *tos, u16 len); - const u8 *get_wmm_ie(u8 *res, u16 ie_len, u8 ie, uint oui, uint oui_type); - #endif -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c b/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -old mode 100644 -new mode 100755 -index ca307f12ac99..a2f6cc394ce1 ---- a/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c -@@ -181,9 +181,9 @@ static struct nvm_name_table g_config_table[] = { - CF_TAB("Chain0_149", tx_scale.chain0[34][0], 1), - CF_TAB("Chain1_149", tx_scale.chain1[34][0], 1), - CF_TAB("Chain0_153", tx_scale.chain0[35][0], 1), -- CF_TAB("Chain1_153", tx_scale.chain1[35][0], 1), -+ CF_TAB("Chain1_153", tx_scale.chain0[35][0], 1), - CF_TAB("Chain0_157", tx_scale.chain0[36][0], 1), -- CF_TAB("Chain1_157", tx_scale.chain1[36][0], 1), -+ CF_TAB("Chain1_157", tx_scale.chain0[36][0], 1), - CF_TAB("Chain0_161", tx_scale.chain0[37][0], 1), - CF_TAB("Chain1_161", tx_scale.chain1[37][0], 1), - CF_TAB("Chain0_165", tx_scale.chain0[38][0], 1), -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c -new file mode 100644 -index 000000000000..a3abdd850ffa ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-bt.c -@@ -0,0 +1,825 @@ -+/* -+ * Copyright (C) 2012 ROCKCHIP, Inc. -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+/* Rock-chips rfkill driver for bluetooth -+ * -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#ifdef CONFIG_OF -+#include -+#include -+#include -+#endif -+ -+#if 0 -+#define DBG(x...) pr_info("[BT_RFKILL]: " x) -+#else -+#define DBG(x...) -+#endif -+ -+#define LOG(x...) pr_info("[BT_RFKILL]: " x) -+ -+#define BT_WAKEUP_TIMEOUT 10000 -+#define BT_IRQ_WAKELOCK_TIMEOUT (10 * 1000) -+ -+#define BT_BLOCKED true -+#define BT_UNBLOCK false -+#define BT_SLEEP true -+#define BT_WAKEUP false -+ -+enum { -+ IOMUX_FNORMAL = 0, -+ IOMUX_FGPIO, -+ IOMUX_FMUX, -+}; -+ -+struct rfkill_rk_data { -+ struct rfkill_rk_platform_data *pdata; -+ struct platform_device *pdev; -+ struct rfkill *rfkill_dev; -+ struct wake_lock bt_irq_wl; -+ struct delayed_work bt_sleep_delay_work; -+ int irq_req; -+}; -+ -+static struct rfkill_rk_data *g_rfkill = NULL; -+ -+static const char bt_name[] = -+#if defined(CONFIG_BCM4330) -+#if defined(CONFIG_BT_MODULE_NH660) -+ "nh660" -+#else -+ "bcm4330" -+#endif -+#elif defined(CONFIG_RK903) -+#if defined(CONFIG_RKWIFI_26M) -+ "rk903_26M" -+#else -+ "rk903" -+#endif -+#elif defined(CONFIG_BCM4329) -+ "bcm4329" -+#elif defined(CONFIG_MV8787) -+ "mv8787" -+#elif defined(CONFIG_AP6210) -+#if defined(CONFIG_RKWIFI_26M) -+ "ap6210" -+#else -+ "ap6210_24M" -+#endif -+#elif defined(CONFIG_AP6330) -+ "ap6330" -+#elif defined(CONFIG_AP6476) -+ "ap6476" -+#elif defined(CONFIG_AP6493) -+ "ap6493" -+#elif defined(CONFIG_AP6441) -+ "ap6441" -+#elif defined(CONFIG_AP6335) -+ "ap6335" -+#elif defined(CONFIG_GB86302I) -+ "gb86302i" -+#else -+ "bt_default" -+#endif -+ ; -+ -+static irqreturn_t rfkill_rk_wake_host_irq(int irq, void *dev) -+{ -+ struct rfkill_rk_data *rfkill = dev; -+ -+ LOG("BT_WAKE_HOST IRQ fired\n"); -+ -+ DBG("BT IRQ wakeup, request %dms wakelock\n", BT_IRQ_WAKELOCK_TIMEOUT); -+ -+ wake_lock_timeout(&rfkill->bt_irq_wl, -+ msecs_to_jiffies(BT_IRQ_WAKELOCK_TIMEOUT)); -+ -+ return IRQ_HANDLED; -+} -+ -+static int rfkill_rk_setup_gpio(struct platform_device *pdev, -+ struct rfkill_rk_gpio *gpio, const char *prefix, -+ const char *name) -+{ -+ if (gpio_is_valid(gpio->io)) { -+ int ret = 0; -+ -+ sprintf(gpio->name, "%s_%s", prefix, name); -+ ret = devm_gpio_request(&pdev->dev, gpio->io, gpio->name); -+ if (ret) { -+ LOG("Failed to get %s gpio.\n", gpio->name); -+ return -1; -+ } -+ } -+ -+ return 0; -+} -+ -+static int rfkill_rk_setup_wake_irq(struct rfkill_rk_data *rfkill, int flag) -+{ -+ int ret = 0; -+ struct rfkill_rk_irq *irq = &rfkill->pdata->wake_host_irq; -+ -+ if (!flag) { -+ rfkill->irq_req = 0; -+ ret = rfkill_rk_setup_gpio(rfkill->pdev, &irq->gpio, -+ rfkill->pdata->name, "wake_host"); -+ if (ret) -+ goto fail1; -+ } -+ if (gpio_is_valid(irq->gpio.io)) { -+ if (rfkill->irq_req) { -+ rfkill->irq_req = 0; -+ free_irq(irq->irq, rfkill); -+ } -+ LOG("Request irq for bt wakeup host\n"); -+ irq->irq = gpio_to_irq(irq->gpio.io); -+ sprintf(irq->name, "%s_irq", irq->gpio.name); -+ ret = request_irq(irq->irq, rfkill_rk_wake_host_irq, -+ (irq->gpio.enable == GPIO_ACTIVE_LOW) ? -+ IRQF_TRIGGER_FALLING : -+ IRQF_TRIGGER_RISING, -+ irq->name, rfkill); -+ if (ret) -+ goto fail2; -+ rfkill->irq_req = 1; -+ LOG("** disable irq\n"); -+ disable_irq(irq->irq); -+ ret = enable_irq_wake(irq->irq); -+ if (ret) -+ goto fail3; -+ } -+ -+ return ret; -+ -+fail3: -+ free_irq(irq->irq, rfkill); -+fail2: -+ gpio_free(irq->gpio.io); -+fail1: -+ return ret; -+} -+ -+static inline void rfkill_rk_sleep_bt_internal(struct rfkill_rk_data *rfkill, -+ bool sleep) -+{ -+ struct rfkill_rk_gpio *wake = &rfkill->pdata->wake_gpio; -+ -+ DBG("*** bt sleep: %d ***\n", sleep); -+#ifndef CONFIG_BK3515A_COMBO -+ gpio_direction_output(wake->io, sleep ? !wake->enable : wake->enable); -+#else -+ if (!sleep) { -+ DBG("HOST_UART0_TX pull down 10us\n"); -+ if (rfkill_rk_setup_gpio(rfkill->pdev, wake, -+ rfkill->pdata->name, "wake") != 0) { -+ return; -+ } -+ -+ gpio_direction_output(wake->io, wake->enable); -+ usleep_range(10, 20); -+ gpio_direction_output(wake->io, !wake->enable); -+ -+ gpio_free(wake->io); -+ } -+#endif -+} -+ -+static void rfkill_rk_delay_sleep_bt(struct work_struct *work) -+{ -+ struct rfkill_rk_data *rfkill = NULL; -+ -+ DBG("Enter %s\n", __func__); -+ -+ rfkill = container_of(work, struct rfkill_rk_data, -+ bt_sleep_delay_work.work); -+ -+ rfkill_rk_sleep_bt_internal(rfkill, BT_SLEEP); -+} -+ -+void rfkill_rk_sleep_bt(bool sleep) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_gpio *wake; -+ bool ret; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) { -+ LOG("*** RFKILL is empty???\n"); -+ return; -+ } -+ -+ wake = &rfkill->pdata->wake_gpio; -+ if (!gpio_is_valid(wake->io)) { -+ DBG("*** Not support bt wakeup and sleep\n"); -+ return; -+ } -+ -+ ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); -+ -+ rfkill_rk_sleep_bt_internal(rfkill, sleep); -+ -+#ifdef CONFIG_BT_AUTOSLEEP -+ if (sleep == BT_WAKEUP) { -+ schedule_delayed_work(&rfkill->bt_sleep_delay_work, -+ msecs_to_jiffies(BT_WAKEUP_TIMEOUT)); -+ } -+#endif -+} -+EXPORT_SYMBOL(rfkill_rk_sleep_bt); -+ -+static int bt_power_state = 0; -+int rfkill_get_bt_power_state(int *power, bool *toggle) -+{ -+ struct rfkill_rk_data *mrfkill = g_rfkill; -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-bt driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ *toggle = mrfkill->pdata->power_toggle; -+ *power = bt_power_state; -+ -+ return 0; -+} -+ -+static int rfkill_rk_set_power(void *data, bool blocked) -+{ -+ struct rfkill_rk_data *rfkill = data; -+ struct rfkill_rk_gpio *wake_host = &rfkill->pdata->wake_host_irq.gpio; -+ struct rfkill_rk_gpio *poweron = &rfkill->pdata->poweron_gpio; -+ struct rfkill_rk_gpio *reset = &rfkill->pdata->reset_gpio; -+ struct rfkill_rk_gpio *rts = &rfkill->pdata->rts_gpio; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ int wifi_power = 0; -+ bool toggle = false; -+ -+ DBG("Enter %s\n", __func__); -+ -+ DBG("Set blocked:%d\n", blocked); -+ -+ toggle = rfkill->pdata->power_toggle; -+ -+ if (toggle) { -+ if (rfkill_get_wifi_power_state(&wifi_power)) { -+ LOG("%s: cannot get wifi power state!\n", __func__); -+ return -1; -+ } -+ } -+ -+ DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); -+ -+ if (!blocked) { -+ if (toggle) { -+ rfkill_set_wifi_bt_power(1); -+ msleep(100); -+ } -+ -+ rfkill_rk_sleep_bt(BT_WAKEUP); // ensure bt is wakeup -+ -+ if (gpio_is_valid(wake_host->io)) { -+ LOG("%s: set bt wake_host high!\n", __func__); -+ gpio_direction_output(wake_host->io, 1); -+ msleep(20); -+ } -+ -+ if (gpio_is_valid(poweron->io)) { -+ if (gpio_get_value(poweron->io) == !poweron->enable) { -+ gpio_direction_output(poweron->io, -+ !poweron->enable); -+ msleep(20); -+ gpio_direction_output(poweron->io, -+ poweron->enable); -+ msleep(20); -+ if (gpio_is_valid(wake_host->io)) -+ gpio_direction_input(wake_host->io); -+ } -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ if (gpio_get_value(reset->io) == !reset->enable) { -+ gpio_direction_output(reset->io, -+ !reset->enable); -+ msleep(20); -+ gpio_direction_output(reset->io, reset->enable); -+ } -+ } -+ -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ pinctrl_select_state(pinctrl, rts->gpio_state); -+ LOG("ENABLE UART_RTS\n"); -+ gpio_direction_output(rts->io, rts->enable); -+ msleep(100); -+ LOG("DISABLE UART_RTS\n"); -+ gpio_direction_output(rts->io, !rts->enable); -+ pinctrl_select_state(pinctrl, rts->default_state); -+ } -+ -+ bt_power_state = 1; -+ LOG("bt turn on power\n"); -+ rfkill_rk_setup_wake_irq(rfkill, 1); -+ } else { -+ if (gpio_is_valid(poweron->io)) { -+ if (gpio_get_value(poweron->io) == poweron->enable) { -+ gpio_direction_output(poweron->io, -+ !poweron->enable); -+ msleep(20); -+ } -+ } -+ -+ bt_power_state = 0; -+ LOG("bt shut off power\n"); -+ if (gpio_is_valid(reset->io)) { -+ if (gpio_get_value(reset->io) == reset->enable) { -+ gpio_direction_output(reset->io, -+ !reset->enable); -+ msleep(20); -+ } -+ } -+ if (toggle) { -+ if (!wifi_power) { -+ LOG("%s: bt will set vbat to low\n", __func__); -+ rfkill_set_wifi_bt_power(0); -+ } else { -+ LOG("%s: bt shouldn't control the vbat\n", __func__); -+ } -+ } -+ } -+ -+ return 0; -+} -+ -+static int rfkill_rk_pm_prepare(struct device *dev) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_gpio *rts; -+ struct rfkill_rk_irq *wake_host_irq; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) -+ return 0; -+ -+ rts = &rfkill->pdata->rts_gpio; -+ wake_host_irq = &rfkill->pdata->wake_host_irq; -+ -+ //To prevent uart to receive bt data when suspended -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ DBG("Disable UART_RTS\n"); -+ pinctrl_select_state(pinctrl, rts->gpio_state); -+ gpio_direction_output(rts->io, !rts->enable); -+ } -+ -+#ifdef CONFIG_BT_AUTOSLEEP -+ rfkill_rk_sleep_bt(BT_SLEEP); -+#endif -+ -+ // enable bt wakeup host -+ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { -+ DBG("enable irq for bt wakeup host\n"); -+ enable_irq(wake_host_irq->irq); -+ } -+ -+#ifdef CONFIG_RFKILL_RESET -+ rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); -+ rfkill_rk_set_power(rfkill, BT_BLOCKED); -+#endif -+ -+ return 0; -+} -+ -+static void rfkill_rk_pm_complete(struct device *dev) -+{ -+ struct rfkill_rk_data *rfkill = g_rfkill; -+ struct rfkill_rk_irq *wake_host_irq; -+ struct rfkill_rk_gpio *rts; -+ struct pinctrl *pinctrl = rfkill->pdata->pinctrl; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!rfkill) -+ return; -+ -+ wake_host_irq = &rfkill->pdata->wake_host_irq; -+ rts = &rfkill->pdata->rts_gpio; -+ -+ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { -+ LOG("** disable irq\n"); -+ disable_irq(wake_host_irq->irq); -+ } -+ -+ if (pinctrl && gpio_is_valid(rts->io)) { -+ DBG("Enable UART_RTS\n"); -+ gpio_direction_output(rts->io, rts->enable); -+ pinctrl_select_state(pinctrl, rts->default_state); -+ } -+} -+ -+static const struct rfkill_ops rfkill_rk_ops = { -+ .set_block = rfkill_rk_set_power, -+}; -+ -+#define PROC_DIR "bluetooth/sleep" -+ -+static struct proc_dir_entry *bluetooth_dir, *sleep_dir; -+ -+static ssize_t bluesleep_read_proc_lpm(struct file *file, char __user *buffer, -+ size_t count, loff_t *data) -+{ -+ return sprintf(buffer, "unsupported to read\n"); -+} -+ -+static ssize_t bluesleep_write_proc_lpm(struct file *file, -+ const char __user *buffer, size_t count, -+ loff_t *data) -+{ -+ return count; -+} -+ -+static ssize_t bluesleep_read_proc_btwrite(struct file *file, -+ char __user *buffer, size_t count, -+ loff_t *data) -+{ -+ return sprintf(buffer, "unsupported to read\n"); -+} -+ -+static ssize_t bluesleep_write_proc_btwrite(struct file *file, -+ const char __user *buffer, -+ size_t count, loff_t *data) -+{ -+ char b; -+ -+ if (count < 1) -+ return -EINVAL; -+ -+ if (copy_from_user(&b, buffer, 1)) -+ return -EFAULT; -+ -+ DBG("btwrite %c\n", b); -+ /* HCI_DEV_WRITE */ -+ if (b != '0') -+ rfkill_rk_sleep_bt(BT_WAKEUP); -+ else -+ rfkill_rk_sleep_bt(BT_SLEEP); -+ -+ return count; -+} -+ -+#ifdef CONFIG_OF -+static int bluetooth_platdata_parse_dt(struct device *dev, -+ struct rfkill_rk_platform_data *data) -+{ -+ struct device_node *node = dev->of_node; -+ int gpio; -+ enum of_gpio_flags flags; -+ -+ if (!node) -+ return -ENODEV; -+ -+ memset(data, 0, sizeof(*data)); -+ -+ if (of_find_property(node, "wifi-bt-power-toggle", NULL)) { -+ data->power_toggle = true; -+ LOG("%s: get property wifi-bt-power-toggle.\n", __func__); -+ } else { -+ data->power_toggle = false; -+ } -+ -+ gpio = of_get_named_gpio_flags(node, "uart_rts_gpios", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->rts_gpio.io = gpio; -+ data->rts_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: uart_rts_gpios = %d.\n", __func__, gpio); -+ data->pinctrl = devm_pinctrl_get(dev); -+ if (!IS_ERR(data->pinctrl)) { -+ data->rts_gpio.default_state = -+ pinctrl_lookup_state(data->pinctrl, "default"); -+ data->rts_gpio.gpio_state = -+ pinctrl_lookup_state(data->pinctrl, "rts_gpio"); -+ } else { -+ data->pinctrl = NULL; -+ LOG("%s: dts does't define the uart rts iomux.\n", -+ __func__); -+ return -EINVAL; -+ } -+ } else { -+ data->pinctrl = NULL; -+ data->rts_gpio.io = -EINVAL; -+ LOG("%s: uart_rts_gpios is no-in-use.\n", __func__); -+ } -+ -+ gpio = of_get_named_gpio_flags(node, "BT,power_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->poweron_gpio.io = gpio; -+ data->poweron_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,power_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->poweron_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,reset_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->reset_gpio.io = gpio; -+ data->reset_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,reset_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->reset_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,wake_gpio", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wake_gpio.io = gpio; -+ data->wake_gpio.enable = (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: get property: BT,wake_gpio = %d.\n", __func__, gpio); -+ } else { -+ data->wake_gpio.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "BT,wake_host_irq", 0, &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wake_host_irq.gpio.io = gpio; -+ data->wake_host_irq.gpio.enable = flags; -+ LOG("%s: get property: BT,wake_host_irq = %d.\n", __func__, -+ gpio); -+ } else { -+ data->wake_host_irq.gpio.io = -1; -+ } -+ -+ data->ext_clk = devm_clk_get(dev, "ext_clock"); -+ if (IS_ERR(data->ext_clk)) { -+ LOG("%s: clk_get failed!!!.\n", __func__); -+ } else { -+ clk_prepare_enable(data->ext_clk); -+ } -+ return 0; -+} -+#endif //CONFIG_OF -+ -+static const struct proc_ops bluesleep_lpm = { -+ .proc_read = bluesleep_read_proc_lpm, -+ .proc_write = bluesleep_write_proc_lpm, -+}; -+ -+static const struct proc_ops bluesleep_btwrite = { -+ .proc_read = bluesleep_read_proc_btwrite, -+ .proc_write = bluesleep_write_proc_btwrite, -+}; -+ -+static int rfkill_rk_probe(struct platform_device *pdev) -+{ -+ struct rfkill_rk_data *rfkill; -+ struct rfkill_rk_platform_data *pdata = pdev->dev.platform_data; -+ int ret = 0; -+ struct proc_dir_entry *ent; -+ -+ DBG("Enter %s\n", __func__); -+ -+ if (!pdata) { -+#ifdef CONFIG_OF -+ pdata = devm_kzalloc(&pdev->dev, -+ sizeof(struct rfkill_rk_platform_data), -+ GFP_KERNEL); -+ if (!pdata) -+ return -ENOMEM; -+ -+ ret = bluetooth_platdata_parse_dt(&pdev->dev, pdata); -+ if (ret < 0) { -+#endif -+ LOG("%s: No platform data specified\n", __func__); -+ return ret; -+#ifdef CONFIG_OF -+ } -+#endif -+ } -+ -+ pdata->name = (char *)bt_name; -+ pdata->type = RFKILL_TYPE_BLUETOOTH; -+ -+ rfkill = devm_kzalloc(&pdev->dev, sizeof(*rfkill), GFP_KERNEL); -+ if (!rfkill) -+ return -ENOMEM; -+ -+ rfkill->pdata = pdata; -+ rfkill->pdev = pdev; -+ g_rfkill = rfkill; -+ -+ bluetooth_dir = proc_mkdir("bluetooth", NULL); -+ if (!bluetooth_dir) { -+ LOG("Unable to create /proc/bluetooth directory"); -+ return -ENOMEM; -+ } -+ -+ sleep_dir = proc_mkdir("sleep", bluetooth_dir); -+ if (!sleep_dir) { -+ LOG("Unable to create /proc/%s directory", PROC_DIR); -+ return -ENOMEM; -+ } -+ -+ /* read/write proc entries */ -+ ent = proc_create("lpm", 0, sleep_dir, &bluesleep_lpm); -+ if (!ent) { -+ LOG("Unable to create /proc/%s/lpm entry", PROC_DIR); -+ ret = -ENOMEM; -+ goto fail_alloc; -+ } -+ -+ /* read/write proc entries */ -+ ent = proc_create("btwrite", 0, sleep_dir, &bluesleep_btwrite); -+ if (!ent) { -+ LOG("Unable to create /proc/%s/btwrite entry", PROC_DIR); -+ ret = -ENOMEM; -+ goto fail_alloc; -+ } -+ -+ DBG("init gpio\n"); -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->poweron_gpio, pdata->name, -+ "poweron"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->reset_gpio, pdata->name, -+ "reset"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->wake_gpio, pdata->name, -+ "wake"); -+ if (ret) -+ goto fail_gpio; -+ -+ ret = rfkill_rk_setup_gpio(pdev, &pdata->rts_gpio, rfkill->pdata->name, -+ "rts"); -+ if (ret) -+ goto fail_gpio; -+ -+ wake_lock_init(&rfkill->bt_irq_wl, WAKE_LOCK_SUSPEND, -+ "rfkill_rk_irq_wl"); -+ -+ ret = rfkill_rk_setup_wake_irq(rfkill, 0); -+ if (ret) -+ goto fail_setup_wake_irq; -+ -+ DBG("setup rfkill\n"); -+ rfkill->rfkill_dev = rfkill_alloc(pdata->name, &pdev->dev, pdata->type, -+ &rfkill_rk_ops, rfkill); -+ if (!rfkill->rfkill_dev) -+ goto fail_alloc; -+ -+ rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); -+ ret = rfkill_register(rfkill->rfkill_dev); -+ if (ret < 0) -+ goto fail_rfkill; -+ -+ INIT_DELAYED_WORK(&rfkill->bt_sleep_delay_work, -+ rfkill_rk_delay_sleep_bt); -+ -+ //rfkill_rk_set_power(rfkill, BT_BLOCKED); -+ // bt turn off power -+ if (gpio_is_valid(pdata->poweron_gpio.io)) { -+ gpio_direction_output(pdata->poweron_gpio.io, -+ !pdata->poweron_gpio.enable); -+ } -+ if (gpio_is_valid(pdata->reset_gpio.io)) { -+ gpio_direction_output(pdata->reset_gpio.io, -+ !pdata->reset_gpio.enable); -+ } -+ -+ platform_set_drvdata(pdev, rfkill); -+ -+ LOG("%s device registered.\n", pdata->name); -+ -+ return 0; -+ -+fail_rfkill: -+ rfkill_destroy(rfkill->rfkill_dev); -+fail_alloc: -+ -+ remove_proc_entry("btwrite", sleep_dir); -+ remove_proc_entry("lpm", sleep_dir); -+fail_setup_wake_irq: -+ wake_lock_destroy(&rfkill->bt_irq_wl); -+fail_gpio: -+ -+ g_rfkill = NULL; -+ return ret; -+} -+ -+static int rfkill_rk_remove(struct platform_device *pdev) -+{ -+ struct rfkill_rk_data *rfkill = platform_get_drvdata(pdev); -+ -+ LOG("Enter %s\n", __func__); -+ -+ rfkill_unregister(rfkill->rfkill_dev); -+ rfkill_destroy(rfkill->rfkill_dev); -+ -+ cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); -+ -+ // free gpio -+ if (gpio_is_valid(rfkill->pdata->rts_gpio.io)) -+ gpio_free(rfkill->pdata->rts_gpio.io); -+ -+ if (gpio_is_valid(rfkill->pdata->wake_host_irq.gpio.io)) { -+ free_irq(rfkill->pdata->wake_host_irq.irq, rfkill); -+#ifndef CONFIG_BK3515A_COMBO -+ gpio_free(rfkill->pdata->wake_host_irq.gpio.io); -+#endif -+ } -+ -+#ifndef CONFIG_BK3515A_COMBO -+ if (gpio_is_valid(rfkill->pdata->wake_gpio.io)) -+ gpio_free(rfkill->pdata->wake_gpio.io); -+#endif -+ -+ if (gpio_is_valid(rfkill->pdata->reset_gpio.io)) -+ gpio_free(rfkill->pdata->reset_gpio.io); -+ -+ if (gpio_is_valid(rfkill->pdata->poweron_gpio.io)) -+ gpio_free(rfkill->pdata->poweron_gpio.io); -+ clk_disable_unprepare(rfkill->pdata->ext_clk); -+ wake_lock_destroy(&rfkill->bt_irq_wl); -+ g_rfkill = NULL; -+ -+ return 0; -+} -+ -+static const struct dev_pm_ops rfkill_rk_pm_ops = { -+ .prepare = rfkill_rk_pm_prepare, -+ .complete = rfkill_rk_pm_complete, -+}; -+ -+#ifdef CONFIG_OF -+static struct of_device_id bt_platdata_of_match[] = { -+ { .compatible = "bluetooth-platdata" }, -+ {} -+}; -+MODULE_DEVICE_TABLE(of, bt_platdata_of_match); -+#endif //CONFIG_OF -+ -+static struct platform_driver rfkill_rk_driver = { -+ .probe = rfkill_rk_probe, -+ .remove = rfkill_rk_remove, -+ .driver = { -+ .name = "rfkill_bt", -+ .owner = THIS_MODULE, -+ .pm = &rfkill_rk_pm_ops, -+ .of_match_table = of_match_ptr(bt_platdata_of_match), -+ }, -+}; -+ -+static int __init rfkill_rk_init(void) -+{ -+ int err; -+ -+ LOG("Enter %s\n", __func__); -+ err = rfkill_wlan_init(); -+ if (err) -+ return err; -+ return platform_driver_register(&rfkill_rk_driver); -+} -+ -+static void __exit rfkill_rk_exit(void) -+{ -+ LOG("Enter %s\n", __func__); -+ platform_driver_unregister(&rfkill_rk_driver); -+ rfkill_wlan_exit(); -+} -+ -+module_init(rfkill_rk_init); -+module_exit(rfkill_rk_exit); -+ -+MODULE_DESCRIPTION("rock-chips rfkill for Bluetooth v0.3"); -+MODULE_AUTHOR("cmy@rock-chips.com, gwl@rock-chips.com"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c -new file mode 100644 -index 000000000000..a0933abb0bfa ---- /dev/null -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rfkill-wlan.c -@@ -0,0 +1,971 @@ -+/* -+ * Copyright (C) 2012 ROCKCHIP, Inc. -+ * -+ * This software is licensed under the terms of the GNU General Public -+ * License version 2, as published by the Free Software Foundation, and -+ * may be copied, distributed, and modified under those terms. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+/* Rock-chips rfkill driver for wifi -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+//#include -+#include -+#include -+#include -+#ifdef CONFIG_OF -+#include -+#include -+#include -+#endif -+#include -+#include -+ -+#include "../../../../../drivers/mmc/core/pwrseq.h" -+ -+#if 0 -+#define DBG(x...) pr_info("[WLAN_RFKILL]: " x) -+#else -+#define DBG(x...) -+#endif -+ -+#define LOG(x...) pr_info("[WLAN_RFKILL]: " x) -+ -+struct rfkill_wlan_data { -+ struct rksdmmc_gpio_wifi_moudle *pdata; -+ struct wake_lock wlan_irq_wl; -+}; -+ -+static struct rfkill_wlan_data *g_rfkill = NULL; -+static int power_set_time = 0; -+static int wifi_bt_vbat_state; -+static int wifi_power_state; -+ -+static const char wlan_name[] = "rkwifi"; -+ -+static char wifi_chip_type_string[64]; -+/*********************************************************** -+ * -+ * Broadcom Wifi Static Memory -+ * -+ **********************************************************/ -+#ifdef CONFIG_RKWIFI -+#define BCM_STATIC_MEMORY_SUPPORT 0 -+#else -+#define BCM_STATIC_MEMORY_SUPPORT 0 -+#endif -+//=========================== -+#if BCM_STATIC_MEMORY_SUPPORT -+#define PREALLOC_WLAN_SEC_NUM 4 -+#define PREALLOC_WLAN_BUF_NUM 160 -+#define PREALLOC_WLAN_SECTION_HEADER 0 -+#define WLAN_SKB_BUF_NUM 16 -+ -+#define WLAN_SECTION_SIZE_0 (12 * 1024) -+#define WLAN_SECTION_SIZE_1 (12 * 1024) -+#define WLAN_SECTION_SIZE_2 (32 * 1024) -+#define WLAN_SECTION_SIZE_3 (136 * 1024) -+#define WLAN_SECTION_SIZE_4 (4 * 1024) -+#define WLAN_SECTION_SIZE_5 (64 * 1024) -+#define WLAN_SECTION_SIZE_6 (4 * 1024) -+#define WLAN_SECTION_SIZE_7 (4 * 1024) -+ -+static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM + 1]; -+ -+struct wifi_mem_prealloc { -+ void *mem_ptr; -+ unsigned long size; -+}; -+ -+static struct wifi_mem_prealloc wifi_mem_array[8] = { -+ { NULL, (WLAN_SECTION_SIZE_0) }, { NULL, (WLAN_SECTION_SIZE_1) }, -+ { NULL, (WLAN_SECTION_SIZE_2) }, { NULL, (WLAN_SECTION_SIZE_3) }, -+ { NULL, (WLAN_SECTION_SIZE_4) }, { NULL, (WLAN_SECTION_SIZE_5) }, -+ { NULL, (WLAN_SECTION_SIZE_6) }, { NULL, (WLAN_SECTION_SIZE_7) } -+}; -+ -+static int rockchip_init_wifi_mem(void) -+{ -+ int i; -+ int j; -+ -+ for (i = 0; i < WLAN_SKB_BUF_NUM; i++) { -+ wlan_static_skb[i] = -+ dev_alloc_skb(((i < (WLAN_SKB_BUF_NUM / 2)) ? -+ (PAGE_SIZE * 1) : -+ (PAGE_SIZE * 2))); -+ -+ if (!wlan_static_skb[i]) -+ goto err_skb_alloc; -+ } -+ -+ wlan_static_skb[i] = dev_alloc_skb((PAGE_SIZE * 4)); -+ if (!wlan_static_skb[i]) -+ goto err_skb_alloc; -+ -+ for (i = 0; i <= 7; i++) { -+ wifi_mem_array[i].mem_ptr = -+ kmalloc(wifi_mem_array[i].size, GFP_KERNEL); -+ -+ if (!wifi_mem_array[i].mem_ptr) -+ goto err_mem_alloc; -+ } -+ return 0; -+ -+err_mem_alloc: -+ pr_err("Failed to mem_alloc for WLAN\n"); -+ for (j = 0; j < i; j++) -+ kfree(wifi_mem_array[j].mem_ptr); -+ i = WLAN_SKB_BUF_NUM; -+err_skb_alloc: -+ pr_err("Failed to skb_alloc for WLAN\n"); -+ for (j = 0; j < i; j++) -+ dev_kfree_skb(wlan_static_skb[j]); -+ dev_kfree_skb(wlan_static_skb[j]); -+ -+ return -ENOMEM; -+} -+ -+void *rockchip_mem_prealloc(int section, unsigned long size) -+{ -+ if (section == PREALLOC_WLAN_SEC_NUM) -+ return wlan_static_skb; -+ -+ if (section < 0 || section > 7) -+ return NULL; -+ -+ if (wifi_mem_array[section].size < size) -+ return NULL; -+ -+ return wifi_mem_array[section].mem_ptr; -+} -+#else -+void *rockchip_mem_prealloc(int section, unsigned long size) -+{ -+ return NULL; -+} -+#endif -+EXPORT_SYMBOL(rockchip_mem_prealloc); -+ -+int rfkill_set_wifi_bt_power(int on) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *vbat; -+ -+ LOG("%s: %d\n", __func__, on); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ vbat = &mrfkill->pdata->vbat_n; -+ if (on) { -+ if (gpio_is_valid(vbat->io)) -+ gpio_direction_output(vbat->io, vbat->enable); -+ } else { -+ if (gpio_is_valid(vbat->io)) -+ gpio_direction_output(vbat->io, !(vbat->enable)); -+ } -+ wifi_bt_vbat_state = on; -+ return 0; -+} -+ -+/************************************************************************** -+ * -+ * get wifi power state Func -+ * -+ *************************************************************************/ -+int rfkill_get_wifi_power_state(int *power) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ *power = wifi_power_state; -+ -+ return 0; -+} -+ -+/************************************************************************** -+ * -+ * Wifi Power Control Func -+ * 0 -> power off -+ * 1 -> power on -+ * -+ *************************************************************************/ -+int rockchip_wifi_power(int on) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *poweron, *reset; -+ struct regulator *ldo = NULL; -+ int bt_power = 0; -+ bool toggle = false; -+ -+ LOG("%s: %d\n", __func__, on); -+ -+ if (!on && primary_sdio_host) -+ mmc_pwrseq_power_off(primary_sdio_host); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ if (mrfkill->pdata->wifi_power_remain && power_set_time) { -+ LOG("%s: wifi power is setted to be remain on.", __func__); -+ return 0; -+ } -+ power_set_time++; -+ -+ if (!rfkill_get_bt_power_state(&bt_power, &toggle)) { -+ LOG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); -+ } -+ -+ if (mrfkill->pdata->mregulator.power_ctrl_by_pmu) { -+ int ret = -1; -+ char *ldostr; -+ int level = mrfkill->pdata->mregulator.enable; -+ -+ ldostr = mrfkill->pdata->mregulator.pmu_regulator; -+ if (!ldostr) -+ return -1; -+ ldo = regulator_get(NULL, ldostr); -+ if (!ldo || IS_ERR(ldo)) { -+ LOG("\n\n\n%s get ldo error,please mod this\n\n\n", -+ __func__); -+ return -1; -+ } -+ if (on == level) { -+ regulator_set_voltage(ldo, 3000000, 3000000); -+ LOG("%s: %s enabled\n", __func__, ldostr); -+ ret = regulator_enable(ldo); -+ wifi_power_state = 1; -+ LOG("wifi turn on power.\n"); -+ } else { -+ LOG("%s: %s disabled\n", __func__, ldostr); -+ while (regulator_is_enabled(ldo) > 0) -+ ret = regulator_disable(ldo); -+ wifi_power_state = 0; -+ LOG("wifi shut off power.\n"); -+ } -+ regulator_put(ldo); -+ msleep(100); -+ } else { -+ poweron = &mrfkill->pdata->power_n; -+ reset = &mrfkill->pdata->reset_n; -+ -+ if (on) { -+ if (toggle) { -+ rfkill_set_wifi_bt_power(1); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(poweron->io)) { -+ gpio_direction_output(poweron->io, poweron->enable); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ gpio_direction_output(reset->io, reset->enable); -+ msleep(100); -+ } -+ -+ wifi_power_state = 1; -+ LOG("wifi turn on power [GPIO%d-%d]\n", poweron->io, poweron->enable); -+ } else { -+ if (gpio_is_valid(poweron->io)) { -+ printk("wifi power off\n"); -+ gpio_direction_output(poweron->io, !(poweron->enable)); -+ msleep(100); -+ } -+ -+ if (gpio_is_valid(reset->io)) { -+ gpio_direction_output(reset->io, !(reset->enable)); -+ } -+ -+ wifi_power_state = 0; -+ if (toggle) { -+ if (!bt_power) { -+ LOG("%s: wifi will set vbat to low\n", __func__); -+ rfkill_set_wifi_bt_power(0); -+ } else { -+ LOG("%s: wifi shouldn't control the vbat\n", __func__); -+ } -+ } -+ LOG("wifi shut off power [GPIO%d-%d]\n", poweron->io, !poweron->enable); -+ } -+ } -+ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_power); -+ -+/************************************************************************** -+ * -+ * Wifi Sdio Detect Func -+ * -+ *************************************************************************/ -+extern int mmc_host_rescan(struct mmc_host *host, int val, int irq_type); -+int rockchip_wifi_set_carddetect(int val) -+{ -+ return mmc_host_rescan(NULL, val, 1); -+} -+EXPORT_SYMBOL(rockchip_wifi_set_carddetect); -+ -+/************************************************************************** -+ * -+ * Wifi Get Interrupt irq Func -+ * -+ *************************************************************************/ -+int rockchip_wifi_get_oob_irq(void) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *wifi_int_irq; -+ -+ LOG("%s: Enter\n", __func__); -+ -+ if (!mrfkill) { -+ LOG("%s: rfkill-wlan driver has not Successful initialized\n", -+ __func__); -+ return -1; -+ } -+ -+ wifi_int_irq = &mrfkill->pdata->wifi_int_b; -+ if (gpio_is_valid(wifi_int_irq->io)) { -+ return gpio_to_irq(wifi_int_irq->io); -+ //return wifi_int_irq->io; -+ } else { -+ LOG("%s: wifi OOB pin isn't defined.\n", __func__); -+ } -+ -+ return -1; -+} -+EXPORT_SYMBOL(rockchip_wifi_get_oob_irq); -+ -+int rockchip_wifi_get_oob_irq_flag(void) -+{ -+ struct rfkill_wlan_data *mrfkill = g_rfkill; -+ struct rksdmmc_gpio *wifi_int_irq; -+ int gpio_flags = -1; -+ -+ if (mrfkill) { -+ wifi_int_irq = &mrfkill->pdata->wifi_int_b; -+ if (gpio_is_valid(wifi_int_irq->io)) -+ gpio_flags = wifi_int_irq->enable; -+ } -+ -+ return gpio_flags; -+} -+EXPORT_SYMBOL(rockchip_wifi_get_oob_irq_flag); -+ -+/************************************************************************** -+ * -+ * Wifi Reset Func -+ * -+ *************************************************************************/ -+int rockchip_wifi_reset(int on) -+{ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_reset); -+ -+/************************************************************************** -+ * -+ * Wifi MAC custom Func -+ * -+ *************************************************************************/ -+#include -+#include -+u8 wifi_custom_mac_addr[6] = { 0, 0, 0, 0, 0, 0 }; -+ -+//#define RANDOM_ADDRESS_SAVE -+static int get_wifi_addr_vendor(unsigned char *addr) -+{ -+ int ret; -+ int count = 5; -+ -+ while (count-- > 0) { -+ if (is_rk_vendor_ready()) -+ break; -+ /* sleep 500ms wait rk vendor driver ready */ -+ msleep(500); -+ } -+ ret = rk_vendor_read(WIFI_MAC_ID, addr, 6); -+ if (ret != 6 || is_zero_ether_addr(addr)) { -+ LOG("%s: rk_vendor_read wifi mac address failed (%d)\n", -+ __func__, ret); -+#ifdef CONFIG_WIFI_GENERATE_RANDOM_MAC_ADDR -+ random_ether_addr(addr); -+ LOG("%s: generate random wifi mac address: " -+ "%02x:%02x:%02x:%02x:%02x:%02x\n", -+ __func__, addr[0], addr[1], addr[2], addr[3], addr[4], -+ addr[5]); -+ ret = rk_vendor_write(WIFI_MAC_ID, addr, 6); -+ if (ret != 0) { -+ memset(addr, 0, 6); -+ return -1; -+ } -+#else -+ return -1; -+#endif -+ } -+ -+ return 0; -+} -+ -+int rockchip_wifi_mac_addr(unsigned char *buf) -+{ -+ char mac_buf[20] = { 0 }; -+ -+ // from vendor storage -+ if (is_zero_ether_addr(wifi_custom_mac_addr)) { -+ if (get_wifi_addr_vendor(wifi_custom_mac_addr) != 0) -+ return -1; -+ } -+ -+ sprintf(mac_buf, "%02x:%02x:%02x:%02x:%02x:%02x", -+ wifi_custom_mac_addr[0], wifi_custom_mac_addr[1], -+ wifi_custom_mac_addr[2], wifi_custom_mac_addr[3], -+ wifi_custom_mac_addr[4], wifi_custom_mac_addr[5]); -+ LOG("falsh wifi_custom_mac_addr=[%s]\n", mac_buf); -+ -+ if (is_valid_ether_addr(wifi_custom_mac_addr)) { -+ if (!strncmp(wifi_chip_type_string, "rtl", 3)) -+ wifi_custom_mac_addr[0] &= ~0x2; // for p2p -+ } else { -+ LOG("This mac address is not valid, ignored...\n"); -+ return -1; -+ } -+ -+ memcpy(buf, wifi_custom_mac_addr, 6); -+ -+ return 0; -+} -+EXPORT_SYMBOL(rockchip_wifi_mac_addr); -+ -+/************************************************************************** -+ * -+ * wifi get country code func -+ * -+ *************************************************************************/ -+struct cntry_locales_custom { -+ char iso_abbrev[4]; /* ISO 3166-1 country abbreviation */ -+ char custom_locale[4]; /* Custom firmware locale */ -+ int custom_locale_rev; /* Custom local revisin default -1 */ -+}; -+ -+static struct cntry_locales_custom country_cloc; -+ -+void *rockchip_wifi_country_code(char *ccode) -+{ -+ struct cntry_locales_custom *mcloc; -+ -+ LOG("%s: set country code [%s]\n", __func__, ccode); -+ mcloc = &country_cloc; -+ memcpy(mcloc->custom_locale, ccode, 4); -+ mcloc->custom_locale_rev = 0; -+ -+ return mcloc; -+} -+EXPORT_SYMBOL(rockchip_wifi_country_code); -+/**************************************************************************/ -+ -+static int rfkill_rk_setup_gpio(struct rksdmmc_gpio *gpio, const char *prefix, -+ const char *name) -+{ -+ if (gpio_is_valid(gpio->io)) { -+ int ret = 0; -+ -+ sprintf(gpio->name, "%s_%s", prefix, name); -+ ret = gpio_request(gpio->io, gpio->name); -+ if (ret) { -+ LOG("Failed to get %s gpio.\n", gpio->name); -+ return -1; -+ } -+ } -+ -+ return 0; -+} -+ -+#ifdef CONFIG_OF -+static int wlan_platdata_parse_dt(struct device *dev, -+ struct rksdmmc_gpio_wifi_moudle *data) -+{ -+ struct device_node *node = dev->of_node; -+ const char *strings; -+ u32 value; -+ int gpio, ret; -+ enum of_gpio_flags flags; -+ u32 ext_clk_value = 0; -+ -+ if (!node) -+ return -ENODEV; -+ -+ memset(data, 0, sizeof(*data)); -+ -+#ifdef CONFIG_MFD_SYSCON -+ data->grf = syscon_regmap_lookup_by_phandle(node, "rockchip,grf"); -+ if (IS_ERR(data->grf)) { -+ LOG("can't find rockchip,grf property\n"); -+ //return -1; -+ } -+#endif -+ -+ ret = of_property_read_string(node, "wifi_chip_type", &strings); -+ if (ret) { -+ LOG("%s: Can not read wifi_chip_type, set default to rkwifi.\n", -+ __func__); -+ strcpy(wifi_chip_type_string, "rkwifi"); -+ } else { -+ strcpy(wifi_chip_type_string, strings); -+ } -+ LOG("%s: wifi_chip_type = %s\n", __func__, wifi_chip_type_string); -+ -+ if (of_find_property(node, "keep_wifi_power_on", NULL)) { -+ data->wifi_power_remain = true; -+ LOG("%s: wifi power remain\n", __func__); -+ } else { -+ data->wifi_power_remain = false; -+ LOG("%s: enable wifi power control.\n", __func__); -+ } -+ -+ if (of_find_property(node, "power_ctrl_by_pmu", NULL)) { -+ data->mregulator.power_ctrl_by_pmu = true; -+ ret = of_property_read_string(node, "power_pmu_regulator", -+ &strings); -+ if (ret) { -+ LOG("%s: Can not read property: power_pmu_regulator.\n", -+ __func__); -+ data->mregulator.power_ctrl_by_pmu = false; -+ } else { -+ LOG("%s: wifi power controlled by pmu(%s).\n", __func__, -+ strings); -+ sprintf(data->mregulator.pmu_regulator, "%s", strings); -+ } -+ ret = of_property_read_u32(node, "power_pmu_enable_level", -+ &value); -+ if (ret) { -+ LOG("%s: Can not read: power_pmu_enable_level.\n", -+ __func__); -+ data->mregulator.power_ctrl_by_pmu = false; -+ } else { -+ LOG("%s: wifi power controlled by pmu(level = %s).\n", -+ __func__, (value == 1) ? "HIGH" : "LOW"); -+ data->mregulator.enable = value; -+ } -+ } else { -+ data->mregulator.power_ctrl_by_pmu = false; -+ LOG("%s: wifi power controled by gpio.\n", __func__); -+ gpio = of_get_named_gpio_flags(node, "WIFI,poweren_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->power_n.io = gpio; -+ data->power_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,poweren_gpio = %d flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->power_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,vbat_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->vbat_n.io = gpio; -+ data->vbat_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,vbat_gpio = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->vbat_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,reset_gpio", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->reset_n.io = gpio; -+ data->reset_n.enable = -+ (flags == GPIO_ACTIVE_HIGH) ? 1 : 0; -+ LOG("%s: WIFI,reset_gpio = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->reset_n.io = -1; -+ } -+ gpio = of_get_named_gpio_flags(node, "WIFI,host_wake_irq", 0, -+ &flags); -+ if (gpio_is_valid(gpio)) { -+ data->wifi_int_b.io = gpio; -+ data->wifi_int_b.enable = !flags; -+ LOG("%s: WIFI,host_wake_irq = %d, flags = %d.\n", -+ __func__, gpio, flags); -+ } else { -+ data->wifi_int_b.io = -1; -+ } -+ } -+ -+ data->ext_clk = devm_clk_get(dev, "clk_wifi"); -+ if (IS_ERR(data->ext_clk)) { -+ LOG("%s: The ref_wifi_clk not found !\n", __func__); -+ } else { -+ of_property_read_u32(node, "ref-clock-frequency", -+ &ext_clk_value); -+ if (ext_clk_value > 0) { -+ ret = clk_set_rate(data->ext_clk, ext_clk_value); -+ if (ret) -+ LOG("%s: set ref clk error!\n", __func__); -+ } -+ -+ ret = clk_prepare_enable(data->ext_clk); -+ if (ret) -+ LOG("%s: enable ref clk error!\n", __func__); -+ -+ /* WIFI clock (REF_CLKOUT) output enable. -+ * 1'b0: drive disable -+ * 1'b1: output enable -+ */ -+ if (of_machine_is_compatible("rockchip,rk3308")) -+ regmap_write(data->grf, 0x0314, 0x00020002); -+ } -+ -+ return 0; -+} -+#endif //CONFIG_OF -+ -+#if defined(CONFIG_HAS_EARLYSUSPEND) -+#include -+ -+static void wlan_early_suspend(struct early_suspend *h) -+{ -+ LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static void wlan_late_resume(struct early_suspend *h) -+{ -+ LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+struct early_suspend wlan_early_suspend { -+ .level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN - 20; -+ .suspend = wlan_early_suspend; -+ .resume = wlan_late_resume; -+} -+#endif -+ -+static void -+rfkill_wlan_early_suspend(void) -+{ -+ //LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static void rfkill_wlan_later_resume(void) -+{ -+ //LOG("%s :enter\n", __func__); -+ -+ return; -+} -+ -+static int rfkill_wlan_fb_event_notify(struct notifier_block *self, -+ unsigned long action, void *data) -+{ -+ struct fb_event *event = data; -+ int blank_mode = *((int *)event->data); -+ -+ switch (blank_mode) { -+ case FB_BLANK_UNBLANK: -+ rfkill_wlan_later_resume(); -+ break; -+ case FB_BLANK_NORMAL: -+ rfkill_wlan_early_suspend(); -+ break; -+ default: -+ rfkill_wlan_early_suspend(); -+ break; -+ } -+ -+ return 0; -+} -+ -+static struct notifier_block rfkill_wlan_fb_notifier = { -+ .notifier_call = rfkill_wlan_fb_event_notify, -+}; -+ -+static ssize_t wifi_power_show(struct class *cls, struct class_attribute *attr, char *_buf) -+{ -+ return sprintf(_buf, "%d\n", wifi_power_state); -+} -+ -+static ssize_t wifi_power_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long poweren = 0; -+ -+ if (kstrtol(_buf, 10, &poweren) < 0) -+ return -EINVAL; -+ -+ LOG("%s: poweren = %ld\n", __func__, poweren); -+ -+ if (poweren > 0) -+ rockchip_wifi_power(1); -+ else -+ rockchip_wifi_power(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_RW(wifi_power); -+ -+static ssize_t wifi_bt_vbat_show(struct class *cls, struct class_attribute *attr, char *_buf) -+{ -+ return sprintf(_buf, "%d\n", wifi_bt_vbat_state); -+} -+ -+static ssize_t wifi_bt_vbat_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long vbat = 0; -+ -+ if (kstrtol(_buf, 10, &vbat) < 0) -+ return -EINVAL; -+ -+ LOG("%s: vbat = %ld\n", __func__, vbat); -+ -+ if (vbat > 0) -+ rfkill_set_wifi_bt_power(1); -+ else -+ rfkill_set_wifi_bt_power(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_RW(wifi_bt_vbat); -+ -+static ssize_t wifi_set_carddetect_store(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count) -+{ -+ long val = 0; -+ -+ if (kstrtol(_buf, 10, &val) < 0) -+ return -EINVAL; -+ -+ LOG("%s: val = %ld\n", __func__, val); -+ -+ if (val > 0) -+ rockchip_wifi_set_carddetect(1); -+ else -+ rockchip_wifi_set_carddetect(0); -+ -+ return _count; -+} -+ -+static CLASS_ATTR_WO(wifi_set_carddetect); -+ -+static struct attribute *rkwifi_power_attrs[] = { -+ &class_attr_wifi_power.attr, -+ &class_attr_wifi_bt_vbat.attr, -+ &class_attr_wifi_set_carddetect.attr, -+ NULL, -+}; -+ATTRIBUTE_GROUPS(rkwifi_power); -+ -+/** Device model classes */ -+static struct class rkwifi_power = { -+ .name = "rkwifi", -+ .class_groups = rkwifi_power_groups, -+}; -+ -+static int rfkill_wlan_probe(struct platform_device *pdev) -+{ -+ struct rfkill_wlan_data *rfkill; -+ struct rksdmmc_gpio_wifi_moudle *pdata = pdev->dev.platform_data; -+ int ret = -1; -+ -+ LOG("Enter %s\n", __func__); -+ -+ class_register(&rkwifi_power); -+ -+ if (!pdata) { -+#ifdef CONFIG_OF -+ pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); -+ if (!pdata) -+ return -ENOMEM; -+ -+ ret = wlan_platdata_parse_dt(&pdev->dev, pdata); -+ if (ret < 0) { -+#endif -+ LOG("%s: No platform data specified\n", __func__); -+ return ret; -+#ifdef CONFIG_OF -+ } -+#endif -+ } -+ -+ rfkill = kzalloc(sizeof(*rfkill), GFP_KERNEL); -+ if (!rfkill) -+ goto rfkill_alloc_fail; -+ -+ rfkill->pdata = pdata; -+ g_rfkill = rfkill; -+ -+ LOG("%s: init gpio\n", __func__); -+ -+ if (!pdata->mregulator.power_ctrl_by_pmu) { -+ ret = rfkill_rk_setup_gpio(&pdata->vbat_n, wlan_name, -+ "wlan_vbat"); -+ if (ret) -+ goto fail_alloc; -+ -+ ret = rfkill_rk_setup_gpio(&pdata->power_n, wlan_name, -+ "wlan_poweren"); -+ if (ret) -+ goto fail_alloc; -+ -+ ret = rfkill_rk_setup_gpio(&pdata->reset_n, wlan_name, -+ "wlan_reset"); -+ if (ret) -+ goto fail_alloc; -+ } -+ -+ wake_lock_init(&rfkill->wlan_irq_wl, WAKE_LOCK_SUSPEND, -+ "rfkill_wlan_wake"); -+ -+ rfkill_set_wifi_bt_power(1); -+ -+#ifdef CONFIG_SDIO_KEEPALIVE -+ if (gpio_is_valid(pdata->power_n.io) && -+ primary_sdio_host && primary_sdio_host->support_chip_alive) -+ gpio_direction_output(pdata->power_n.io, pdata->power_n.enable); -+#else -+ if (gpio_is_valid(pdata->power_n.io)) -+ gpio_direction_output(pdata->power_n.io, !pdata->power_n.enable); -+#endif -+ -+ -+ if (pdata->wifi_power_remain) -+ rockchip_wifi_power(1); -+ -+#if BCM_STATIC_MEMORY_SUPPORT -+ rockchip_init_wifi_mem(); -+#endif -+ -+#if defined(CONFIG_HAS_EARLYSUSPEND) -+ register_early_suspend(wlan_early_suspend); -+#endif -+ -+ fb_register_client(&rfkill_wlan_fb_notifier); -+ -+ LOG("Exit %s\n", __func__); -+ -+ return 0; -+ -+fail_alloc: -+ kfree(rfkill); -+rfkill_alloc_fail: -+ kfree(pdata); -+ -+ g_rfkill = NULL; -+ -+ return ret; -+} -+ -+static int rfkill_wlan_remove(struct platform_device *pdev) -+{ -+ struct rfkill_wlan_data *rfkill = platform_get_drvdata(pdev); -+ -+ LOG("Enter %s\n", __func__); -+ -+ wake_lock_destroy(&rfkill->wlan_irq_wl); -+ -+ fb_unregister_client(&rfkill_wlan_fb_notifier); -+ -+ if (gpio_is_valid(rfkill->pdata->power_n.io)) -+ gpio_free(rfkill->pdata->power_n.io); -+ -+ if (gpio_is_valid(rfkill->pdata->reset_n.io)) -+ gpio_free(rfkill->pdata->reset_n.io); -+ -+ kfree(rfkill); -+ g_rfkill = NULL; -+ -+ return 0; -+} -+ -+static int rfkill_wlan_suspend(struct platform_device *pdev, pm_message_t state) -+{ -+ LOG("Enter %s\n", __func__); -+ return 0; -+} -+ -+static int rfkill_wlan_resume(struct platform_device *pdev) -+{ -+ LOG("Enter %s\n", __func__); -+ return 0; -+} -+ -+#ifdef CONFIG_OF -+static struct of_device_id wlan_platdata_of_match[] = { -+ { .compatible = "wlan-platdata" }, -+ {} -+}; -+MODULE_DEVICE_TABLE(of, wlan_platdata_of_match); -+#endif //CONFIG_OF -+ -+static struct platform_driver rfkill_wlan_driver = { -+ .probe = rfkill_wlan_probe, -+ .remove = rfkill_wlan_remove, -+ .suspend = rfkill_wlan_suspend, -+ .resume = rfkill_wlan_resume, -+ .driver = { -+ .name = "wlan-platdata", -+ .owner = THIS_MODULE, -+ .of_match_table = of_match_ptr(wlan_platdata_of_match), -+ }, -+}; -+ -+int __init rfkill_wlan_init(void) -+{ -+ LOG("Enter %s\n", __func__); -+ return platform_driver_register(&rfkill_wlan_driver); -+} -+ -+void __exit rfkill_wlan_exit(void) -+{ -+ LOG("Enter %s\n", __func__); -+ platform_driver_unregister(&rfkill_wlan_driver); -+} -+ -+MODULE_DESCRIPTION("rock-chips rfkill for wifi v0.1"); -+MODULE_AUTHOR("gwl@rock-chips.com"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c b/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -old mode 100644 -new mode 100755 -index b51207d19c89..d80267ad55ef ---- a/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/rx_msg.c -@@ -384,9 +384,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - { - int i, j, temp, data_len, pkt_line_num, - temp_pkt_line_num, pkt_len, m = 0; --#ifdef setfs -- mm_segment_t fs; --#endif - /*for pkt log space key and enter key*/ - char temp_space, temp_enter; - /*for pkt log txt line number and write pkt log into file*/ -@@ -399,10 +396,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - wl_err("file create/open fail %s, %d\n", __func__, __LINE__); - return 1; - } --#ifdef setfs -- fs = get_fs(); -- set_fs(KERNEL_DS); --#endif - pkt_len = ((struct sprdwl_pktlog_hdr *)(data))->plen; - data += sizeof(struct sprdwl_pktlog_hdr); - while (m < pkt_len) { -@@ -449,9 +442,6 @@ int sprdwl_pkt_log_save(struct sprdwl_intf *intf, void *data) - memset(temphdr, 0x00, 6); - } - filp_close(intf->pfile, NULL); --#ifdef setfs -- set_fs(fs); --#endif - return 0; - } - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h b/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -old mode 100644 -new mode 100755 -index a1b2f8544ec4..f612a9e9967b ---- a/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/sprdwl.h -@@ -176,8 +176,6 @@ struct wmm_params_element { - struct sprdwl_wmmac_params { - struct wmm_ac_params ac[4]; - struct timer_list wmmac_edcaf_timer; -- struct timer_list wmmac_vo_timer; -- struct timer_list wmmac_vi_timer; - }; - #endif - -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -old mode 100644 -new mode 100755 -index 40d51a7130d9..d7375248ddef ---- a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c -@@ -530,9 +530,9 @@ void sprdwl_fc_add_share_credit(struct sprdwl_vif *vif) - tx_msg = (struct sprdwl_tx_msg *)intf->sprdwl_tx; - for (i = 0; i < MAX_COLOR_BIT; i++) { - if (tx_msg->flow_ctrl[i].mode == vif->mode) { -- wl_err("%s, %d, mode:%d closed, index:%d, share it\n", -- __func__, __LINE__, -- vif->mode, i); -+ //wl_err("%s, %d, mode:%d closed, index:%d, share it\n", -+ // __func__, __LINE__, -+ // vif->mode, i); - tx_msg->flow_ctrl[i].mode = SPRDWL_MODE_NONE; - break; - } -@@ -1081,10 +1081,6 @@ int sprdwl_sdio_process_credit(void *pdev, void *data) - if (common->type == SPRDWL_TYPE_DATA_SPECIAL) { - int offset = (size_t)&((struct rx_msdu_desc *)0)->rsvd5; - -- if (intf->priv->hw_type == SPRDWL_HW_USB) { -- return -2; -- } -- - flow = data + offset; - goto out; - } -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/txrx.c b/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -old mode 100644 -new mode 100755 -index 227339ada73f..a7a21aacffcf ---- a/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/txrx.c -@@ -23,9 +23,7 @@ - #include "cmdevt.h" - #include "intf_ops.h" - #include "work.h" --#if defined(UWE5621_FTR) - #include "wl_intf.h" --#endif - #include "rx_msg.h" - #include "tcp_ack.h" - #include "wl_core.h" -@@ -34,33 +32,20 @@ - * here just free the msg buf to the freelist - */ - int sprdwl_send_data(struct sprdwl_vif *vif, struct sprdwl_msg_buf *msg, -- struct sk_buff *skb, u8 offset) -+ struct sk_buff *skb, u8 offset) - { - int ret; - int delta; - unsigned long align_addr; - unsigned char *buf = NULL; --/*TODO temp for MARLIN2*/ --#ifndef UWE5621_FTR -- struct sprdwl_data_hdr *hdr; --#endif - struct sprdwl_intf *intf; - unsigned int plen = cpu_to_le16(skb->len); - - intf = (struct sprdwl_intf *)vif->priv->hw_priv; - buf = skb->data; --/*TODO temp for MARLIN2*/ --#ifndef UWE5621_FTR -- skb_push(skb, sizeof(*hdr) + offset); -- hdr = (struct sprdwl_data_hdr *)skb->data; -- memset(hdr, 0, sizeof(*hdr)); -- hdr->common.type = SPRDWL_TYPE_DATA; -- hdr->common.ctx_id = vif->ctx_id; -- hdr->plen = cpu_to_le16(skb->len); --#else -+ - if (sprdwl_intf_fill_msdu_dscr(vif, skb, SPRDWL_TYPE_DATA, offset)) - return -EPERM; --#endif /* UWE5621_FTR */ - #ifdef OTT_UWE - skb_push(skb, 3); - if ((unsigned long)skb->data & 0x3) { -@@ -120,10 +105,6 @@ int sprdwl_send_cmd(struct sprdwl_priv *priv, struct sprdwl_msg_buf *msg) - ret = sprdwl_intf_tx(priv, msg); - if (ret) { - wl_err("%s TX cmd Err: %d\n", __func__, ret); -- /* now cmd msg droped */ --#if !defined(UWE5621_FTR) -- dev_kfree_skb(skb); --#endif - } - - return ret; -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/vendor.c b/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -old mode 100644 -new mode 100755 -index 6fba95b60d62..85b12b78dd72 ---- a/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/vendor.c -@@ -453,7 +453,7 @@ static int sprdwl_vendor_get_llstat_handler(struct wiphy *wiphy, - struct wifi_iface_stat *iface_st; - struct sprdwl_llstat_radio *dif_radio; - u16 r_len = sizeof(*llst); -- u8 r_buf[r_len], ret, i; -+ u8 r_buf[sizeof(*llst)], ret, i; - u32 reply_radio_length, reply_iface_length; - - struct sprdwl_priv *priv = wiphy_priv(wiphy); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -old mode 100644 -new mode 100755 -index 4ffaacb58de5..206824604ec5 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c -@@ -538,20 +538,12 @@ static struct notifier_block boost_notifier = { - extern struct sprdwl_priv *g_sprdwl_priv; - extern void sprdwl_cancel_scan(struct sprdwl_vif *vif); - extern void sprdwl_cancel_sched_scan(struct sprdwl_vif *vif); --extern void sprdwl_flush_all_txlist(struct sprdwl_tx_msg *sprdwl_tx_dev); --extern int sprdwl_cmd_init(void); --extern void sprdwl_cmd_deinit(void); --extern void sprdwl_net_flowcontrl(struct sprdwl_priv *priv, -- enum sprdwl_mode mode, bool state); --extern void sprdwl_reg_notify(struct wiphy *wiphy, struct regulatory_request *request); --struct work_struct wifi_rst_begin; --struct work_struct wifi_rst_down; - struct completion wifi_reset_ready; -+extern void sprdwl_net_flowcontrl(struct sprdwl_priv *priv, enum sprdwl_mode mode, bool state); - extern struct sprdwl_cmd g_sprdwl_cmd; - --static void wifi_reset_wq(struct work_struct *work) -+static void sprdwl_wifi_reset(void) - { -- struct sprdwl_vif *vif, *tmp_vif; - struct sprdwl_intf *intf = NULL; - struct sprdwl_tx_msg *tx_msg = NULL; - struct sprdwl_rx_if *rx_if = NULL; -@@ -560,103 +552,38 @@ static void wifi_reset_wq(struct work_struct *work) - tx_msg = (void *)intf->sprdwl_tx; - rx_if = (struct sprdwl_rx_if *)intf->sprdwl_rx; - -- reinit_completion(&wifi_reset_ready); -- - wl_err("cp2 reset begin..........\n"); - g_sprdwl_priv->sync.scan_not_allowed = true; - g_sprdwl_priv->sync.cmd_not_allowed = true; - intf->cp_asserted = 1; -- sprdwl_reorder_init(&rx_if->ba_entry); -- sprdwl_net_flowcontrl(g_sprdwl_priv, SPRDWL_MODE_NONE, false); -- if (tx_msg->tx_thread) -+ intf->exit = 1; -+ if (tx_msg->tx_thread) { - tx_up(tx_msg); -- -- sprdwl_flush_all_txlist(tx_msg); -- flush_workqueue(rx_if->rx_queue); -- list_for_each_entry_safe(vif, tmp_vif, &g_sprdwl_priv->vif_list, vif_node) { -- g_sprdwl_priv->sync.fw_stat[vif->mode] = g_sprdwl_priv->fw_stat[vif->mode]; -- g_sprdwl_priv->fw_stat[vif->mode] = SPRDWL_INTF_CLOSE; -- sprdwl_report_disconnection(vif, true); -- if (g_sprdwl_priv->scan_vif) -- sprdwl_cancel_scan(g_sprdwl_priv->scan_vif); -- if (g_sprdwl_priv->sched_scan_vif) { -- sprdwl_sched_scan_done(g_sprdwl_priv->sched_scan_vif, true); -- sprdwl_cancel_sched_scan(g_sprdwl_priv->sched_scan_vif); -- } -+ kthread_stop(tx_msg->tx_thread); -+ tx_msg->tx_thread = NULL; - } - -- sprdwl_vendor_deinit(g_sprdwl_priv->wiphy); -- sprdwl_cmd_wake_upall(); -- sprdwl_tcp_ack_deinit(g_sprdwl_priv); -- sprdwl_intf_deinit(intf); -- // sprdwl_cmd_deinit(); -- complete(&wifi_reset_ready); - wl_err("cp2 reset finish..........\n"); -- --} -- --static void wifi_resume_wq(struct work_struct *work) --{ -- struct sprdwl_vif *vif, *tmp_vif; -- struct sprdwl_intf *intf = NULL; -- struct sprdwl_rx_if *rx_if = NULL; -- wl_err("cp2 resume begin...............\n"); -- -- intf = (struct sprdwl_intf *)g_sprdwl_priv->hw_priv; -- rx_if = (struct sprdwl_rx_if *)intf->sprdwl_rx; -- -- wait_for_completion(&wifi_reset_ready); -- -- sprdwl_intf_init(g_sprdwl_priv, intf); -- // sprdwl_cmd_init(); -- wl_err("sprdwl cmd init finish.\n"); -- g_sprdwl_priv->sync.cmd_not_allowed = false; -- intf->cp_asserted = 0; -- sprdwl_net_flowcontrl(g_sprdwl_priv, SPRDWL_MODE_NONE, true); -- sprdwl_reorder_init(&rx_if->ba_entry); -- sprdwl_sync_version(g_sprdwl_priv); -- sprdwl_download_ini(g_sprdwl_priv); -- sprdwl_tcp_ack_init(g_sprdwl_priv); -- sprdwl_get_fw_info(g_sprdwl_priv); -- sprdwl_setup_wiphy(g_sprdwl_priv->wiphy, g_sprdwl_priv); -- sprdwl_vendor_init(g_sprdwl_priv->wiphy); -- -- sprdwl_reg_notify(g_sprdwl_priv->wiphy, &g_sprdwl_priv->sync.request); -- -- list_for_each_entry_safe(vif, tmp_vif, &g_sprdwl_priv->vif_list, vif_node) { -- if (SPRDWL_INTF_OPEN == g_sprdwl_priv->sync.fw_stat[vif->mode]) { -- vif->mode = SPRDWL_MODE_NONE; -- sprdwl_init_fw(vif); -- } -- } -- g_sprdwl_priv->sync.scan_not_allowed = false; -- wl_err("cp2 resume complete...............\n"); - } - --static void wifi_reset_init(void) -+static int wifi_exception_event(void) - { -- INIT_WORK(&wifi_rst_begin, wifi_reset_wq); -- INIT_WORK(&wifi_rst_down, wifi_resume_wq); -- init_completion(&wifi_reset_ready); -- return; -+ char *envp[2]; -+ envp[0] = "CP2-EXCEPTION-EVENT"; -+ envp[1] = NULL; -+ kobject_uevent_env(&sprdwl_dev->kobj, KOBJ_CHANGE, envp); -+ return 0; - } - - int wifi_reset_callback(struct notifier_block *nb, unsigned long event, void *v) - { -- wl_info("%s[%d]: %s %d\n", __func__, __LINE__, (char *)v, (int)event); -- switch (event) { -- case 1: -- schedule_work(&wifi_rst_begin); -- break; -- case 0: -- schedule_work(&wifi_rst_down); -- break; -- } -- -+ sprdwl_wifi_reset(); -+ wifi_exception_event(); - return NOTIFY_OK; - } -+ - static struct notifier_block wifi_reset_notifier = { -- .notifier_call = wifi_reset_callback, -+ .notifier_call = wifi_reset_callback, - }; - #endif - -@@ -668,7 +595,6 @@ static int sprdwl_probe(struct platform_device *pdev) - u8 i; - - #ifdef CP2_RESET_SUPPORT -- wifi_reset_init(); - marlin_reset_callback_register(MARLIN_WIFI, &wifi_reset_notifier); - #endif - -@@ -765,7 +691,6 @@ static int sprdwl_probe(struct platform_device *pdev) - return ret; - - err_core_init: -- sprdwl_bus_deinit(); - sprdwl_tx_deinit(intf); - err_tx_init: - sprdwl_rx_deinit(intf); -@@ -791,7 +716,6 @@ static int sprdwl_remove(struct platform_device *pdev) - cpufreq_unregister_notifier(&boost_notifier, CPUFREQ_POLICY_NOTIFIER); - sprdwl_debugfs_deinit(); - sprdwl_core_deinit(priv); -- sprdwl_bus_deinit(); - sprdwl_tx_deinit(intf); - sprdwl_rx_deinit(intf); - sprdwl_intf_deinit(intf); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -old mode 100644 -new mode 100755 -index a6def0e0682d..bb8d37625791 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.c -@@ -32,6 +32,10 @@ - .rx_threshold = threshold, .timeout = time, .pop_link = pop,\ - .push_link = push, .tx_complete = complete, .power_notify = suspend } - -+#ifndef CPUFREQ_ADJUST -+#define CPUFREQ_ADJUST CPUFREQ_CREATE_POLICY -+#endif -+ - struct sprdwl_intf_ops g_intf_ops; - - static inline struct sprdwl_intf *get_intf(void) -@@ -708,8 +712,8 @@ unsigned char sprdwl_find_lut_index(struct sprdwl_intf *intf, - break; - } - -- //wl_err("ctx_id = %d, sm_state = %d, bssid =%pM\n", -- // vif->ctx_id, vif->sm_state, intf->skb_da); -+ wl_err("ctx_id = %d, sm_state = %d, bssid =%pM\n", -+ vif->ctx_id, vif->sm_state, intf->skb_da); - - return ret; - } -@@ -762,7 +766,7 @@ int sprdwl_intf_fill_msdu_dscr(struct sprdwl_vif *vif, - - lut_index = sprdwl_find_lut_index(dev, vif); - if ((lut_index < 6) && (!sprdwl_is_group(dev->skb_da))) { -- //wl_err("%s, %d, sta disconn, no data tx!", __func__, __LINE__); -+ wl_err("%s, %d, sta disconn, no data tx!", __func__, __LINE__); - return -EPERM; - } - skb_push(skb, sizeof(struct tx_msdu_dscr) + offset + dscr_rsvd); -@@ -1048,20 +1052,6 @@ void sprdwl_count_rx_tp(struct sprdwl_rx_if *rx_if, int num) - rx_if->rx_data_num = 0; - } - } -- --static int check_msdu_early(struct sprdwl_intf *intf, struct mbuf_t *mbuf) --{ -- struct rx_msdu_desc *msdu_desc = -- (struct rx_msdu_desc *)(mbuf->buf + intf->hif_offset); -- -- if (mbuf->len < msdu_desc->msdu_len || -- msdu_desc->msdu_len > 1600) { -- wl_err("%s, %d, %d, %d\n", __func__, __LINE__, mbuf->len, msdu_desc->msdu_len); -- return -1; -- } -- return 0; --} -- - static int intf_rx_handle(int chn, struct mbuf_t *head, - struct mbuf_t *tail, int num) - { -@@ -1085,13 +1075,6 @@ static int intf_rx_handle(int chn, struct mbuf_t *head, - for (i = num; i > 0; i--) { - sprdwl_sdio_process_credit(intf, - (void *)(mbuf->buf + intf->hif_offset)); -- if (intf->priv->hw_type == SPRDWL_HW_USB && -- chn == USB_RX_DATA_PORT && -- check_msdu_early(intf, mbuf)) { -- sprdwcn_bus_push_list(chn, head, tail, num); -- return 0; -- } -- - mbuf = mbuf->next; - } - } -@@ -1645,12 +1628,12 @@ void sprdwl_tx_ba_mgmt(struct sprdwl_priv *priv, void *data, int len, - tid = addba->addba_param.tid; - if (!test_and_clear_bit(tid, &peer_entry->ba_tx_done_map)) - goto out; -- //wl_err("%s, %d, tx_addba failed, reason=%d, lut_index=%d, tid=%d, map=%lu\n", -- // __func__, __LINE__, -- // rbuf[0], -- // addba->lut_index, -- // tid, -- // peer_entry->ba_tx_done_map); -+ wl_err("%s, %d, tx_addba failed, reason=%d, lut_index=%d, tid=%d, map=%lu\n", -+ __func__, __LINE__, -+ rbuf[0], -+ addba->lut_index, -+ tid, -+ peer_entry->ba_tx_done_map); - } - out: - kfree(rbuf); -@@ -1750,26 +1733,17 @@ void sprdwl_tx_delba(struct sprdwl_intf *intf, - - int sprdwl_notifier_boost(struct notifier_block *nb, unsigned long event, void *data) - { --#if KERNEL_VERSION(5, 4, 19) <= LINUX_VERSION_CODE - struct cpufreq_policy_data *policy = data; --#else -- struct cpufreq_policy *policy = data; --#endif - unsigned long min_freq; - unsigned long max_freq = policy->cpuinfo.max_freq; - struct sprdwl_intf *intf = get_intf(); - u8 boost; -- - if (NULL == intf) - return NOTIFY_DONE; - - boost = intf->boost; - --#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE -- if (event != CPUFREQ_CREATE_POLICY) --#else - if (event != CPUFREQ_ADJUST) --#endif - return NOTIFY_DONE; - - min_freq = boost ? 1200000 : 400000; -@@ -1846,7 +1820,7 @@ void adjust_rxnum_level(char *buf, unsigned char offset) - #undef MAX_LEN - } - --int sprdwl_bus_init(struct sprdwl_priv *priv) -+int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) - { - int ret = -EINVAL, chn = 0; - -@@ -1873,40 +1847,10 @@ int sprdwl_bus_init(struct sprdwl_priv *priv) - if (ret < 0) - goto err; - } -- return 0; -- } --err: -- wl_err("%s: unregister %d ops\n", -- __func__, g_intf_ops.max_num); -- -- for (; chn > 0; chn--) -- sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); - -- g_intf_ops.hif_ops = NULL; -- g_intf_ops.max_num = 0; -- -- return ret; --} -- --void sprdwl_bus_deinit(void) --{ -- int chn = 0; -- -- for (chn = 0; chn < g_intf_ops.max_num; chn++) -- sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); --} -- --int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) --{ -- int ret = -EINVAL; -- -- ret = sprdwl_bus_init(priv); -- if (ret < 0) -- return ret; -- -- g_intf_ops.intf = (void *)intf; -- /* TODO: Need we reserve g_intf_ops? */ -- intf->hw_intf = (void *)&g_intf_ops; -+ g_intf_ops.intf = (void *)intf; -+ /* TODO: Need we reserve g_intf_ops? */ -+ intf->hw_intf = (void *)&g_intf_ops; - - priv->hw_priv = intf; - priv->hw_offset = intf->hif_offset; -@@ -1917,14 +1861,30 @@ int sprdwl_intf_init(struct sprdwl_priv *priv, struct sprdwl_intf *intf) - intf->rxnum_level = BOOST_RXNUM_LEVEL; - intf->boost = 0; - #ifdef UNISOC_WIFI_PS -- init_completion(&intf->suspend_completed); -+ init_completion(&intf->suspend_completed); - #endif -+ } else { -+err: -+ wl_err("%s: unregister %d ops\n", -+ __func__, g_intf_ops.max_num); -+ -+ for (; chn > 0; chn--) -+ sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); -+ -+ g_intf_ops.hif_ops = NULL; -+ g_intf_ops.max_num = 0; -+ } - - return ret; - } - - void sprdwl_intf_deinit(struct sprdwl_intf *dev) - { -+ int chn = 0; -+ -+ for (chn = 0; chn < g_intf_ops.max_num; chn++) -+ sprdwcn_bus_chn_deinit(&g_intf_ops.hif_ops[chn]); -+ - g_intf_ops.intf = NULL; - g_intf_ops.max_num = 0; - dev->hw_intf = NULL; -@@ -1936,8 +1896,8 @@ int sprdwl_dis_flush_txlist(struct sprdwl_intf *intf, u8 lut_index) - int i, j; - - if (lut_index <= 5) { -- //wl_err("err lut_index:%d, %s, %d\n", -- // lut_index, __func__, __LINE__); -+ wl_err("err lut_index:%d, %s, %d\n", -+ lut_index, __func__, __LINE__); - return -1; - } - wl_debug("disconnect, flush qoslist, %s, %d\n", __func__, __LINE__); -diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -old mode 100644 -new mode 100755 -index b159c685a5e0..7e609023f634 ---- a/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_intf.h -@@ -60,7 +60,6 @@ - #define BOOST_RXNUM_LEVEL 16 - - #ifdef SPRDWL_TX_SELF --#include - struct sprdwl_tx_buf { - unsigned char *base; - unsigned short buf_len; -@@ -299,5 +298,4 @@ void sprdwl_boost(void); - void sprdwl_unboost(void); - void adjust_txnum_level(char *buf, unsigned char offset); - void adjust_rxnum_level(char *buf, unsigned char offset); --void sprdwl_bus_deinit(void); - #endif /* __SPRDWL_INTF_SDIO_SC2355_H__ */ --- -Armbian - diff --git a/patch/kernel/archive/rockchip64-6.5/wifi-4003-uwe5622-adjust-for-rockchip.patch b/patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-post-6.1.patch similarity index 100% rename from patch/kernel/archive/rockchip64-6.5/wifi-4003-uwe5622-adjust-for-rockchip.patch rename to patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-post-6.1.patch diff --git a/patch/kernel/archive/rockchip64-5.15/wifi-4003-uwe5622-adjust-for-rockchip.patch b/patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-pre-6.1.patch similarity index 100% rename from patch/kernel/archive/rockchip64-5.15/wifi-4003-uwe5622-adjust-for-rockchip.patch rename to patch/misc/wireless-driver-for-uwe5622-adjust-for-rockchip-pre-6.1.patch