From 810bbe4137ab934213fd3f5eb68bbda35f23a2bc Mon Sep 17 00:00:00 2001 From: jhb Date: Tue, 5 Apr 2016 00:08:42 +0000 Subject: Don't wakeup the fdc worker thread once a second when idle. The fdc worker thread was using a one second timeout while waiting for a new bio to arrive or for the device to detach. However, the driver already does a wakeup when queueing a new bio or asking the thread to detach, so the timeout only served to waste CPU time waking up the thread once a second just so it could go right back to sleep. Use an infinite timeout instead. Discussed with: phk Sponsored by: Netflix --- sys/dev/fdc/fdc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index a8a607f..a4abd19 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -968,7 +968,7 @@ fdc_worker(struct fdc_data *fdc) fdc->bp = bioq_takefirst(&fdc->head); if (fdc->bp == NULL) msleep(&fdc->head, &fdc->fdc_mtx, - PRIBIO, "-", hz); + PRIBIO, "-", 0); } while (fdc->bp == NULL && (fdc->flags & FDC_KTHREAD_EXIT) == 0); mtx_unlock(&fdc->fdc_mtx); -- cgit v1.1 From 70dc8c3b4ad3bd171c68ba1645960241c5e9fd93 Mon Sep 17 00:00:00 2001 From: jhb Date: Tue, 5 Apr 2016 00:09:19 +0000 Subject: Remove an unneeded check. CPUs with valid per-CPU data are not absent. Sponsored by: Netflix --- sys/net/netisr.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/sys/net/netisr.c b/sys/net/netisr.c index 64efbd7..6b89a85 100644 --- a/sys/net/netisr.c +++ b/sys/net/netisr.c @@ -1167,9 +1167,6 @@ netisr_start(void *arg) STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) { if (nws_count >= netisr_maxthreads) break; - /* XXXRW: Is skipping absent CPUs still required here? */ - if (CPU_ABSENT(pc->pc_cpuid)) - continue; /* Worker will already be present for boot CPU. */ if (pc->pc_netisr != NULL) continue; -- cgit v1.1 From 61b8ee7005618c5863bdd0ba77959cbdd2aa77e0 Mon Sep 17 00:00:00 2001 From: jhb Date: Tue, 5 Apr 2016 00:10:07 +0000 Subject: Remove a redundant check. cpu_suspend_map is always empty if smp_started is false. Sponsored by: Netflix --- sys/dev/xen/control/control.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/xen/control/control.c b/sys/dev/xen/control/control.c index 6a351d8..c7bd8c2 100644 --- a/sys/dev/xen/control/control.c +++ b/sys/dev/xen/control/control.c @@ -260,7 +260,7 @@ xctrl_suspend() #ifdef SMP /* Send an IPI_BITMAP in case there are pending bitmap IPIs. */ lapic_ipi_vectored(IPI_BITMAP_VECTOR, APIC_IPI_DEST_ALL); - if (smp_started && !CPU_EMPTY(&cpu_suspend_map)) { + if (!CPU_EMPTY(&cpu_suspend_map)) { /* * Now that event channels have been initialized, * resume CPUs. -- cgit v1.1 From e8575f5bc72f2ecb0f1a130b43281aa484da57e5 Mon Sep 17 00:00:00 2001 From: wblock Date: Tue, 5 Apr 2016 01:12:56 +0000 Subject: Add another real-life example of setting a quirk for a USB gaming keyboard. From forum thread: https://forums.freebsd.org/threads/55717/ MFC after: 1 week --- share/man/man4/usb_quirk.4 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/share/man/man4/usb_quirk.4 b/share/man/man4/usb_quirk.4 index 0140ccb..5ca603a 100644 --- a/share/man/man4/usb_quirk.4 +++ b/share/man/man4/usb_quirk.4 @@ -16,7 +16,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 26, 2015 +.Dd April 4, 2016 .Dt USB_QUIRK 4 .Os .Sh NAME @@ -234,6 +234,12 @@ device which appears as a USB device on usbconfig -d ugen0.3 add_quirk UQ_MSC_EJECT_WAIT .Ed .Pp +Enable a Holtec/Keep Out F85 gaming keyboard on +.Pa ugen1.4 : +.Bd -literal -offset indent +usbconfig -d ugen1.4 add_quirk UQ_KBD_BOOTPROTO +.Ed +.Pp To install a quirk at boot time, place one or several lines like the following in .Xr loader.conf 5 : -- cgit v1.1 From 3744256f5c62876e0d891a75413cec933c562a5c Mon Sep 17 00:00:00 2001 From: jhibbits Date: Tue, 5 Apr 2016 02:27:01 +0000 Subject: Make i2c device child auto-probe work for MPC85xx and QorIQ SoCs. OFW i2c probing requires a new method ofw_bus_get_node(), and the bus device is assumed iichb. With these changes, i2c devices attached in fdt are probed and attached automagically. --- sys/powerpc/mpc85xx/i2c.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sys/powerpc/mpc85xx/i2c.c b/sys/powerpc/mpc85xx/i2c.c index e02a08b..89c91a2 100644 --- a/sys/powerpc/mpc85xx/i2c.c +++ b/sys/powerpc/mpc85xx/i2c.c @@ -97,6 +97,7 @@ static int i2c_stop(device_t dev); static int i2c_reset(device_t dev, u_char speed, u_char addr, u_char *oldaddr); static int i2c_read(device_t dev, char *buf, int len, int *read, int last, int delay); static int i2c_write(device_t dev, const char *buf, int len, int *sent, int timeout); +static phandle_t i2c_get_node(device_t bus, device_t dev); static device_method_t i2c_methods[] = { DEVMETHOD(device_probe, i2c_probe), @@ -110,12 +111,13 @@ static device_method_t i2c_methods[] = { DEVMETHOD(iicbus_read, i2c_read), DEVMETHOD(iicbus_write, i2c_write), DEVMETHOD(iicbus_transfer, iicbus_transfer_gen), + DEVMETHOD(ofw_bus_get_node, i2c_get_node), { 0, 0 } }; static driver_t i2c_driver = { - "i2c", + "iichb", i2c_methods, sizeof(struct i2c_softc), }; @@ -425,3 +427,11 @@ i2c_write(device_t dev, const char *buf, int len, int *sent, int timeout) return (IIC_NOERR); } + +static phandle_t +i2c_get_node(device_t bus, device_t dev) +{ + + /* Share controller node with iibus device. */ + return (ofw_bus_get_node(bus)); +} -- cgit v1.1 From b3511c1cca44b8155b5a49ef02e1bc31f3220a96 Mon Sep 17 00:00:00 2001 From: jhibbits Date: Tue, 5 Apr 2016 03:27:33 +0000 Subject: Add support for the Microchip mcp7941x. This is compatible with the ds1307, but comparing the mcp7941x datasheet vs the ds1307 code, appears there is one bit placement difference, so that is now accounted for. Relnotes: yes --- sys/dev/iicbus/ds1307.c | 41 +++++++++++++++++++++++++++++++++-------- sys/dev/iicbus/ds1307reg.h | 1 + 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/sys/dev/iicbus/ds1307.c b/sys/dev/iicbus/ds1307.c index 9c7cd65..987db0d 100644 --- a/sys/dev/iicbus/ds1307.c +++ b/sys/dev/iicbus/ds1307.c @@ -60,10 +60,20 @@ struct ds1307_softc { struct intr_config_hook enum_hook; uint16_t sc_addr; /* DS1307 slave address. */ uint8_t sc_ctrl; + int sc_mcp7941x; }; static void ds1307_start(void *); +#ifdef FDT +static const struct ofw_compat_data ds1307_compat_data[] = { + {"dallas,ds1307", (uintptr_t)"Maxim DS1307 RTC"}, + {"maxim,ds1307", (uintptr_t)"Maxim DS1307 RTC"}, + {"microchip,mcp7941x", (uintptr_t)"Microchip MCP7941x RTC"}, + { NULL, 0 } +}; +#endif + static int ds1307_read(device_t dev, uint16_t addr, uint8_t reg, uint8_t *data, size_t len) { @@ -167,21 +177,25 @@ ds1307_set_24hrs_mode(struct ds1307_softc *sc) static int ds1307_sqwe_sysctl(SYSCTL_HANDLER_ARGS) { - int sqwe, error, newv; + int sqwe, error, newv, sqwe_bit; struct ds1307_softc *sc; sc = (struct ds1307_softc *)arg1; error = ds1307_ctrl_read(sc); if (error != 0) return (error); - sqwe = newv = (sc->sc_ctrl & DS1307_CTRL_SQWE) ? 1 : 0; + if (sc->sc_mcp7941x) + sqwe_bit = MCP7941X_CTRL_SQWE; + else + sqwe_bit = DS1307_CTRL_SQWE; + sqwe = newv = (sc->sc_ctrl & sqwe_bit) ? 1 : 0; error = sysctl_handle_int(oidp, &newv, 0, req); if (error != 0 || req->newptr == NULL) return (error); if (sqwe != newv) { - sc->sc_ctrl &= ~DS1307_CTRL_SQWE; + sc->sc_ctrl &= ~sqwe_bit; if (newv) - sc->sc_ctrl |= DS1307_CTRL_SQWE; + sc->sc_ctrl |= sqwe_bit; error = ds1307_ctrl_write(sc); if (error != 0) return (error); @@ -252,17 +266,25 @@ ds1307_sqw_out_sysctl(SYSCTL_HANDLER_ARGS) static int ds1307_probe(device_t dev) { - #ifdef FDT + const struct ofw_compat_data *compat; + if (!ofw_bus_status_okay(dev)) return (ENXIO); - if (!ofw_bus_is_compatible(dev, "dallas,ds1307") && - !ofw_bus_is_compatible(dev, "maxim,ds1307")) + + compat = ofw_bus_search_compatible(dev, ds1307_compat_data); + + if (compat == NULL) return (ENXIO); -#endif + + device_set_desc(dev, (const char *)compat->ocd_data); + + return (BUS_PROBE_DEFAULT); +#else device_set_desc(dev, "Maxim DS1307 RTC"); return (BUS_PROBE_DEFAULT); +#endif } static int @@ -277,6 +299,9 @@ ds1307_attach(device_t dev) sc->enum_hook.ich_func = ds1307_start; sc->enum_hook.ich_arg = dev; + if (ofw_bus_is_compatible(dev, "microchip,mcp7941x")) + sc->sc_mcp7941x = 1; + /* * We have to wait until interrupts are enabled. Usually I2C read * and write only works when the interrupts are available. diff --git a/sys/dev/iicbus/ds1307reg.h b/sys/dev/iicbus/ds1307reg.h index 0c7c356..ddad40b 100644 --- a/sys/dev/iicbus/ds1307reg.h +++ b/sys/dev/iicbus/ds1307reg.h @@ -50,6 +50,7 @@ #define DS1307_YEAR_MASK 0xff #define DS1307_CONTROL 0x07 #define DS1307_CTRL_OUT (1 << 7) +#define MCP7941X_CTRL_SQWE (1 << 6) #define DS1307_CTRL_SQWE (1 << 4) #define DS1307_CTRL_RS1 (1 << 1) #define DS1307_CTRL_RS0 (1 << 0) -- cgit v1.1 From a5b629647ee84a4191285b439efdf17c683ae19c Mon Sep 17 00:00:00 2001 From: mmel Date: Tue, 5 Apr 2016 09:20:52 +0000 Subject: TEGRA: Fix CPU frequency switching. The PLL_X, base CPU frequency source, doesn't have a bypass switch and thus we must use another frequency source for CPU while changing its frequency. PLL_P is ideal for this, it runs at 480MHz and CPU can be clocked at this frequency at any CPU voltage. --- sys/arm/nvidia/tegra124/tegra124_clk_pll.c | 20 +++++++------------- sys/arm/nvidia/tegra124/tegra124_clk_super.c | 4 ++-- sys/arm/nvidia/tegra124/tegra124_cpufreq.c | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/sys/arm/nvidia/tegra124/tegra124_clk_pll.c b/sys/arm/nvidia/tegra124/tegra124_clk_pll.c index 6adfd32..2c5c3a2 100644 --- a/sys/arm/nvidia/tegra124/tegra124_clk_pll.c +++ b/sys/arm/nvidia/tegra124/tegra124_clk_pll.c @@ -823,12 +823,10 @@ pllx_set_freq(struct pll_sc *sc, uint64_t fin, uint64_t *fout, int flags) return (0); } - /* Set bypass. */ + /* PLLX doesn't have bypass, disable it first. */ RD4(sc, sc->base_reg, ®); - reg |= PLL_BASE_BYPASS; + reg &= ~PLL_BASE_ENABLE; WR4(sc, sc->base_reg, reg); - RD4(sc, sc->base_reg, ®); - DELAY(100); /* Set PLL. */ RD4(sc, sc->base_reg, ®); @@ -840,16 +838,16 @@ pllx_set_freq(struct pll_sc *sc, uint64_t fin, uint64_t *fout, int flags) RD4(sc, sc->base_reg, ®); DELAY(100); + /* Enable lock detection. */ + RD4(sc, sc->misc_reg, ®); + reg |= sc->lock_enable; + WR4(sc, sc->misc_reg, reg); + /* Enable PLL. */ RD4(sc, sc->base_reg, ®); reg |= PLL_BASE_ENABLE; WR4(sc, sc->base_reg, reg); - /* Enable lock detection */ - RD4(sc, sc->misc_reg, ®); - reg |= sc->lock_enable; - WR4(sc, sc->misc_reg, reg); - rv = wait_for_lock(sc); if (rv != 0) { /* Disable PLL */ @@ -860,10 +858,6 @@ pllx_set_freq(struct pll_sc *sc, uint64_t fin, uint64_t *fout, int flags) } RD4(sc, sc->misc_reg, ®); - /* Clear bypass. */ - RD4(sc, sc->base_reg, ®); - reg &= ~PLL_BASE_BYPASS; - WR4(sc, sc->base_reg, reg); *fout = ((fin / m) * n) / p; return (0); } diff --git a/sys/arm/nvidia/tegra124/tegra124_clk_super.c b/sys/arm/nvidia/tegra124/tegra124_clk_super.c index 7f32eba..1ff8179 100644 --- a/sys/arm/nvidia/tegra124/tegra124_clk_super.c +++ b/sys/arm/nvidia/tegra124/tegra124_clk_super.c @@ -205,8 +205,7 @@ super_mux_set_mux(struct clknode *clk, int idx) (state != SUPER_MUX_STATE_IDLE)) { panic("Unexpected super mux state: %u", state); } - - shift = state * SUPER_MUX_MUX_WIDTH; + shift = (state - 1) * SUPER_MUX_MUX_WIDTH; sc->mux = idx; if (sc->flags & SMF_HAVE_DIVIDER_2) { if (idx == sc->src_div2) { @@ -222,6 +221,7 @@ super_mux_set_mux(struct clknode *clk, int idx) } reg &= ~(((1 << SUPER_MUX_MUX_WIDTH) - 1) << shift); reg |= idx << shift; + WR4(sc, sc->base_reg, reg); RD4(sc, sc->base_reg, &dummy); DEVICE_UNLOCK(sc); diff --git a/sys/arm/nvidia/tegra124/tegra124_cpufreq.c b/sys/arm/nvidia/tegra124/tegra124_cpufreq.c index 1227c81..d449809 100644 --- a/sys/arm/nvidia/tegra124/tegra124_cpufreq.c +++ b/sys/arm/nvidia/tegra124/tegra124_cpufreq.c @@ -335,12 +335,27 @@ set_cpu_freq(struct tegra124_cpufreq_softc *sc, uint64_t freq) if (rv != 0) return (rv); } - rv = clk_set_freq(sc->clk_cpu_g, point->freq, CLK_SET_ROUND_DOWN); + + /* Switch supermux to PLLP first */ + rv = clk_set_parent_by_clk(sc->clk_cpu_g, sc->clk_pll_p); + if (rv != 0) { + device_printf(sc->dev, "Can't set parent to PLLP\n"); + return (rv); + } + + /* Set PLLX frequency */ + rv = clk_set_freq(sc->clk_pll_x, point->freq, CLK_SET_ROUND_DOWN); if (rv != 0) { device_printf(sc->dev, "Can't set CPU clock frequency\n"); return (rv); } + rv = clk_set_parent_by_clk(sc->clk_cpu_g, sc->clk_pll_x); + if (rv != 0) { + device_printf(sc->dev, "Can't set parent to PLLX\n"); + return (rv); + } + if (sc->act_speed_point->uvolt > point->uvolt) { /* set cpu voltage */ rv = regulator_set_voltage(sc->supply_vdd_cpu, -- cgit v1.1 From b2f81dcbd7e1e5eff8654667ae9c720d58322310 Mon Sep 17 00:00:00 2001 From: avg Date: Tue, 5 Apr 2016 10:36:40 +0000 Subject: x86 topo: add some comments, descriptions and references to documentation Plus a minor cosmetic change. MFC after: 1 month --- sys/kern/subr_smp.c | 35 ++++++++++++++++++++++-- sys/x86/x86/mp_x86.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 105 insertions(+), 5 deletions(-) diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index 9848136..b09bc50 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -53,9 +53,7 @@ __FBSDID("$FreeBSD$"); #ifdef SMP MALLOC_DEFINE(M_TOPO, "toponodes", "SMP topology data"); -#endif -#ifdef SMP volatile cpuset_t stopped_cpus; volatile cpuset_t started_cpus; volatile cpuset_t suspended_cpus; @@ -895,6 +893,10 @@ topo_init_root(struct topo_node *root) root->type = TOPO_TYPE_SYSTEM; } +/* + * Add a child node with the given ID under the given parent. + * Do nothing if there is already a child with that ID. + */ struct topo_node * topo_add_node_by_hwid(struct topo_node *parent, int hwid, topo_node_type type, uintptr_t subtype) @@ -921,6 +923,9 @@ topo_add_node_by_hwid(struct topo_node *parent, int hwid, return (node); } +/* + * Find a child node with the given ID under the given parent. + */ struct topo_node * topo_find_node_by_hwid(struct topo_node *parent, int hwid, topo_node_type type, uintptr_t subtype) @@ -938,6 +943,12 @@ topo_find_node_by_hwid(struct topo_node *parent, int hwid, return (NULL); } +/* + * Given a node change the order of its parent's child nodes such + * that the node becomes the firt child while preserving the cyclic + * order of the children. In other words, the given node is promoted + * by rotation. + */ void topo_promote_child(struct topo_node *child) { @@ -959,6 +970,10 @@ topo_promote_child(struct topo_node *child) } } +/* + * Iterate to the next node in the depth-first search (traversal) of + * the topology tree. + */ struct topo_node * topo_next_node(struct topo_node *top, struct topo_node *node) { @@ -977,6 +992,10 @@ topo_next_node(struct topo_node *top, struct topo_node *node) return (NULL); } +/* + * Iterate to the next node in the depth-first search of the topology tree, + * but without descending below the current node. + */ struct topo_node * topo_next_nonchild_node(struct topo_node *top, struct topo_node *node) { @@ -992,6 +1011,10 @@ topo_next_nonchild_node(struct topo_node *top, struct topo_node *node) return (NULL); } +/* + * Assign the given ID to the given topology node that represents a logical + * processor. + */ void topo_set_pu_id(struct topo_node *node, cpuid_t id) { @@ -1013,6 +1036,14 @@ topo_set_pu_id(struct topo_node *node, cpuid_t id) } } +/* + * Check if the topology is uniform, that is, each package has the same number + * of cores in it and each core has the same number of threads (logical + * processors) in it. If so, calculate the number of package, the number of + * cores per package and the number of logical processors per core. + * 'all' parameter tells whether to include administratively disabled logical + * processors into the analysis. + */ int topo_analyze(struct topo_node *topo_root, int all, int *pkg_count, int *cores_per_pkg, int *thrs_per_core) diff --git a/sys/x86/x86/mp_x86.c b/sys/x86/x86/mp_x86.c index 90051c8..7ad9b96 100644 --- a/sys/x86/x86/mp_x86.c +++ b/sys/x86/x86/mp_x86.c @@ -176,6 +176,9 @@ mask_width(u_int x) return (fls(x << (1 - powerof2(x))) - 1); } +/* + * Add a cache level to the cache topology description. + */ static int add_deterministic_cache(int type, int level, int share_count) { @@ -217,6 +220,16 @@ add_deterministic_cache(int type, int level, int share_count) return (1); } +/* + * Determine topology of processing units and caches for AMD CPUs. + * See: + * - AMD CPUID Specification (Publication # 25481) + * - BKDG For AMD Family 10h Processors (Publication # 31116), section 2.15 + * - BKDG for AMD NPT Family 0Fh Processors (Publication # 32559) + * XXX At the moment the code does not recognize grouping of AMD CMT threads, + * if supported, into cores, so each thread is treated as being in its own + * core. In other words, each logical CPU is considered to be a core. + */ static void topo_probe_amd(void) { @@ -277,6 +290,15 @@ topo_probe_amd(void) } } +/* + * Determine topology of processing units for Intel CPUs + * using CPUID Leaf 1 and Leaf 4, if supported. + * See: + * - Intel 64 Architecture Processor Topology Enumeration + * - Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual, + * Volume 3A: System Programming Guide, PROGRAMMING CONSIDERATIONS + * FOR HARDWARE MULTI-THREADING CAPABLE PROCESSORS + */ static void topo_probe_intel_0x4(void) { @@ -302,6 +324,15 @@ topo_probe_intel_0x4(void) pkg_id_shift = core_id_shift + mask_width(max_cores); } +/* + * Determine topology of processing units for Intel CPUs + * using CPUID Leaf 11, if supported. + * See: + * - Intel 64 Architecture Processor Topology Enumeration + * - Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual, + * Volume 3A: System Programming Guide, PROGRAMMING CONSIDERATIONS + * FOR HARDWARE MULTI-THREADING CAPABLE PROCESSORS + */ static void topo_probe_intel_0xb(void) { @@ -342,6 +373,14 @@ topo_probe_intel_0xb(void) } } +/* + * Determine topology of caches for Intel CPUs. + * See: + * - Intel 64 Architecture Processor Topology Enumeration + * - Intel 64 and IA-32 Architectures Software Developer’s Manual + * Volume 2A: Instruction Set Reference, A-M, + * CPUID instruction + */ static void topo_probe_intel_caches(void) { @@ -376,14 +415,16 @@ topo_probe_intel_caches(void) } } +/* + * Determine topology of processing units and caches for Intel CPUs. + * See: + * - Intel 64 Architecture Processor Topology Enumeration + */ static void topo_probe_intel(void) { /* - * See Intel(R) 64 Architecture Processor - * Topology Enumeration article for details. - * * Note that 0x1 <= cpu_high < 4 case should be * compatible with topo_probe_intel_0x4() logic when * CPUID.1:EBX[23:16] > 0 (cpu_cores will be 1) @@ -640,6 +681,12 @@ cpu_mp_announce(void) } } +/* + * Add a scheduling group, a group of logical processors sharing + * a particular cache (and, thus having an affinity), to the scheduling + * topology. + * This function recursively works on lower level caches. + */ static void x86topo_add_sched_group(struct topo_node *root, struct cpu_group *cg_root) { @@ -657,6 +704,11 @@ x86topo_add_sched_group(struct topo_node *root, struct cpu_group *cg_root) else cg_root->cg_level = root->subtype; + /* + * Check how many core nodes we have under the given root node. + * If we have multiple logical processors, but not multiple + * cores, then those processors must be hardware threads. + */ ncores = 0; node = root; while (node != NULL) { @@ -673,6 +725,13 @@ x86topo_add_sched_group(struct topo_node *root, struct cpu_group *cg_root) root->cpu_count > 1 && ncores < 2) cg_root->cg_flags = CG_FLAG_SMT; + /* + * Find out how many cache nodes we have under the given root node. + * We ignore cache nodes that cover all the same processors as the + * root node. Also, we do not descend below found cache nodes. + * That is, we count top-level "non-redundant" caches under the root + * node. + */ nchildren = 0; node = root; while (node != NULL) { @@ -689,6 +748,10 @@ x86topo_add_sched_group(struct topo_node *root, struct cpu_group *cg_root) cg_root->cg_child = smp_topo_alloc(nchildren); cg_root->cg_children = nchildren; + /* + * Now find again the same cache nodes as above and recursively + * build scheduling topologies for them. + */ node = root; i = 0; while (node != NULL) { @@ -705,6 +768,9 @@ x86topo_add_sched_group(struct topo_node *root, struct cpu_group *cg_root) } } +/* + * Build the MI scheduling topology from the discovered hardware topology. + */ struct cpu_group * cpu_topo(void) { @@ -719,6 +785,9 @@ cpu_topo(void) } +/* + * Add a logical CPU to the topology. + */ void cpu_add(u_int apic_id, char boot_cpu) { -- cgit v1.1 From cd0a56084a275f3cde65b91113b86571749bf425 Mon Sep 17 00:00:00 2001 From: trasz Date: Tue, 5 Apr 2016 11:30:52 +0000 Subject: Use proper locking macros in RACCT in RCTL. MFC after: 1 month Sponsored by: The FreeBSD Foundation --- sys/kern/kern_racct.c | 76 ++++++++++++++++++++++++----------------------- sys/kern/kern_rctl.c | 82 +++++++++++++++++++++++++++------------------------ 2 files changed, 83 insertions(+), 75 deletions(-) diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c index 419c69e..bbd50ca 100644 --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -93,6 +93,10 @@ SYSCTL_UINT(_kern_racct, OID_AUTO, pcpu_threshold, CTLFLAG_RW, &pcpu_threshold, static struct mtx racct_lock; MTX_SYSINIT(racct_lock, &racct_lock, "racct lock", MTX_DEF); +#define RACCT_LOCK() mtx_lock(&racct_lock) +#define RACCT_UNLOCK() mtx_unlock(&racct_lock) +#define RACCT_LOCK_ASSERT() mtx_assert(&racct_lock, MA_OWNED) + static uma_zone_t racct_zone; static void racct_sub_racct(struct racct *dest, const struct racct *src); @@ -391,7 +395,7 @@ racct_add_racct(struct racct *dest, const struct racct *src) int i; ASSERT_RACCT_ENABLED(); - mtx_assert(&racct_lock, MA_OWNED); + RACCT_LOCK_ASSERT(); /* * Update resource usage in dest. @@ -413,7 +417,7 @@ racct_sub_racct(struct racct *dest, const struct racct *src) int i; ASSERT_RACCT_ENABLED(); - mtx_assert(&racct_lock, MA_OWNED); + RACCT_LOCK_ASSERT(); /* * Update resource usage in dest. @@ -466,7 +470,7 @@ racct_destroy_locked(struct racct **racctp) SDT_PROBE1(racct, , racct, destroy, racctp); - mtx_assert(&racct_lock, MA_OWNED); + RACCT_LOCK_ASSERT(); KASSERT(racctp != NULL, ("NULL racctp")); KASSERT(*racctp != NULL, ("NULL racct")); @@ -493,9 +497,9 @@ racct_destroy(struct racct **racct) if (!racct_enable) return; - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_destroy_locked(racct); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } /* @@ -509,7 +513,7 @@ racct_adjust_resource(struct racct *racct, int resource, { ASSERT_RACCT_ENABLED(); - mtx_assert(&racct_lock, MA_OWNED); + RACCT_LOCK_ASSERT(); KASSERT(racct != NULL, ("NULL racct")); racct->r_resources[resource] += amount; @@ -574,9 +578,9 @@ racct_add(struct proc *p, int resource, uint64_t amount) SDT_PROBE3(racct, , rusage, add, p, resource, amount); - mtx_lock(&racct_lock); + RACCT_LOCK(); error = racct_add_locked(p, resource, amount, 0); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); return (error); } @@ -593,9 +597,9 @@ racct_add_force(struct proc *p, int resource, uint64_t amount) SDT_PROBE3(racct, , rusage, add__force, p, resource, amount); - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_add_locked(p, resource, amount, 1); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } static void @@ -625,9 +629,9 @@ racct_add_cred(struct ucred *cred, int resource, uint64_t amount) if (!racct_enable) return; - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_add_cred_locked(cred, resource, amount); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } static int @@ -703,9 +707,9 @@ racct_set(struct proc *p, int resource, uint64_t amount) SDT_PROBE3(racct, , rusage, set__force, p, resource, amount); - mtx_lock(&racct_lock); + RACCT_LOCK(); error = racct_set_locked(p, resource, amount, 0); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); return (error); } @@ -718,9 +722,9 @@ racct_set_force(struct proc *p, int resource, uint64_t amount) SDT_PROBE3(racct, , rusage, set, p, resource, amount); - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_set_locked(p, resource, amount, 1); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } /* @@ -800,7 +804,7 @@ racct_sub(struct proc *p, int resource, uint64_t amount) KASSERT(RACCT_CAN_DROP(resource), ("%s: called for non-droppable resource %d", __func__, resource)); - mtx_lock(&racct_lock); + RACCT_LOCK(); KASSERT(amount <= p->p_racct->r_resources[resource], ("%s: freeing %ju of resource %d, which is more " "than allocated %jd for %s (pid %d)", __func__, amount, resource, @@ -808,7 +812,7 @@ racct_sub(struct proc *p, int resource, uint64_t amount) racct_adjust_resource(p->p_racct, resource, -amount); racct_sub_cred_locked(p->p_ucred, resource, amount); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } static void @@ -843,9 +847,9 @@ racct_sub_cred(struct ucred *cred, int resource, uint64_t amount) if (!racct_enable) return; - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_sub_cred_locked(cred, resource, amount); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } /* @@ -866,7 +870,7 @@ racct_proc_fork(struct proc *parent, struct proc *child) PROC_LOCK(parent); PROC_LOCK(child); - mtx_lock(&racct_lock); + RACCT_LOCK(); #ifdef RCTL error = rctl_proc_fork(parent, child); @@ -896,7 +900,7 @@ racct_proc_fork(struct proc *parent, struct proc *child) error += racct_add_locked(child, RACCT_NTHR, 1, 0); out: - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); PROC_UNLOCK(child); PROC_UNLOCK(parent); @@ -919,10 +923,10 @@ racct_proc_fork_done(struct proc *child) if (!racct_enable) return; - mtx_lock(&racct_lock); + RACCT_LOCK(); rctl_enforce(child, RACCT_NPROC, 0); rctl_enforce(child, RACCT_NTHR, 0); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); #endif } @@ -958,7 +962,7 @@ racct_proc_exit(struct proc *p) pct_estimate = 0; pct = racct_getpcpu(p, pct_estimate); - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_set_locked(p, RACCT_CPU, runtime, 0); racct_add_cred_locked(p->p_ucred, RACCT_PCTCPU, pct); @@ -970,7 +974,7 @@ racct_proc_exit(struct proc *p) racct_set_locked(p, i, 0, 0); } - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); PROC_UNLOCK(p); #ifdef RCTL @@ -1003,7 +1007,7 @@ racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred, newpr = newcred->cr_prison; oldpr = oldcred->cr_prison; - mtx_lock(&racct_lock); + RACCT_LOCK(); if (newuip != olduip) { racct_sub_racct(olduip->ui_racct, p->p_racct); racct_add_racct(newuip->ui_racct, p->p_racct); @@ -1020,7 +1024,7 @@ racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred, racct_add_racct(pr->pr_prison_racct->prr_racct, p->p_racct); } - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); #ifdef RCTL rctl_proc_ucred_changed(p, newcred); @@ -1033,12 +1037,10 @@ racct_move(struct racct *dest, struct racct *src) ASSERT_RACCT_ENABLED(); - mtx_lock(&racct_lock); - + RACCT_LOCK(); racct_add_racct(dest, src); racct_sub_racct(src, src); - - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } static void @@ -1112,7 +1114,7 @@ racct_decay_callback(struct racct *racct, void *dummy1, void *dummy2) int64_t r_old, r_new; ASSERT_RACCT_ENABLED(); - mtx_assert(&racct_lock, MA_OWNED); + RACCT_LOCK_ASSERT(); r_old = racct->r_resources[RACCT_PCTCPU]; @@ -1128,14 +1130,14 @@ static void racct_decay_pre(void) { - mtx_lock(&racct_lock); + RACCT_LOCK(); } static void racct_decay_post(void) { - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); } static void @@ -1203,13 +1205,13 @@ racctd(void) } else pct_estimate = 0; pct = racct_getpcpu(p, pct_estimate); - mtx_lock(&racct_lock); + RACCT_LOCK(); racct_set_locked(p, RACCT_PCTCPU, pct, 1); racct_set_locked(p, RACCT_CPU, runtime, 0); racct_set_locked(p, RACCT_WALLCLOCK, (uint64_t)wallclock.tv_sec * 1000000 + wallclock.tv_usec, 0); - mtx_unlock(&racct_lock); + RACCT_UNLOCK(); PROC_UNLOCK(p); } diff --git a/sys/kern/kern_rctl.c b/sys/kern/kern_rctl.c index 1970ed8..7f6a7ad 100644 --- a/sys/kern/kern_rctl.c +++ b/sys/kern/kern_rctl.c @@ -181,6 +181,13 @@ static uma_zone_t rctl_rule_zone; static struct rwlock rctl_lock; RW_SYSINIT(rctl_lock, &rctl_lock, "RCTL lock"); +#define RCTL_RLOCK() rw_rlock(&rctl_lock) +#define RCTL_RUNLOCK() rw_runlock(&rctl_lock) +#define RCTL_WLOCK() rw_wlock(&rctl_lock) +#define RCTL_WUNLOCK() rw_wunlock(&rctl_lock) +#define RCTL_LOCK_ASSERT() rw_assert(&rctl_lock, RA_LOCKED) +#define RCTL_WLOCK_ASSERT() rw_assert(&rctl_lock, RA_WLOCKED) + static int rctl_rule_fully_specified(const struct rctl_rule *rule); static void rctl_rule_to_sbuf(struct sbuf *sb, const struct rctl_rule *rule); @@ -231,7 +238,7 @@ rctl_proc_rule_to_racct(const struct proc *p, const struct rctl_rule *rule) struct ucred *cred = p->p_ucred; ASSERT_RACCT_ENABLED(); - rw_assert(&rctl_lock, RA_LOCKED); + RCTL_LOCK_ASSERT(); switch (rule->rr_per) { case RCTL_SUBJECT_TYPE_PROCESS: @@ -258,7 +265,7 @@ rctl_available_resource(const struct proc *p, const struct rctl_rule *rule) const struct racct *racct; ASSERT_RACCT_ENABLED(); - rw_assert(&rctl_lock, RA_LOCKED); + RCTL_LOCK_ASSERT(); racct = rctl_proc_rule_to_racct(p, rule); available = rule->rr_amount - racct->r_resources[rule->rr_resource]; @@ -277,8 +284,7 @@ rctl_would_exceed(const struct proc *p, const struct rctl_rule *rule, int64_t available; ASSERT_RACCT_ENABLED(); - - rw_assert(&rctl_lock, RA_LOCKED); + RCTL_LOCK_ASSERT(); available = rctl_available_resource(p, rule); if (available >= amount) @@ -302,7 +308,7 @@ rctl_pcpu_available(const struct proc *p) { minavailable = INT64_MAX; limit = 0; - rw_rlock(&rctl_lock); + RCTL_RLOCK(); LIST_FOREACH(link, &p->p_racct->r_rule_links, rrl_next) { rule = link->rrl_rule; @@ -317,7 +323,7 @@ rctl_pcpu_available(const struct proc *p) { } } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); /* * Return slightly less than actual value of the available @@ -352,7 +358,7 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) ASSERT_RACCT_ENABLED(); - rw_rlock(&rctl_lock); + RCTL_RLOCK(); /* * There may be more than one matching rule; go through all of them. @@ -460,7 +466,7 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) } } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); if (should_deny) { /* @@ -482,7 +488,7 @@ rctl_get_limit(struct proc *p, int resource) ASSERT_RACCT_ENABLED(); - rw_rlock(&rctl_lock); + RCTL_RLOCK(); /* * There may be more than one matching rule; go through all of them. @@ -498,7 +504,7 @@ rctl_get_limit(struct proc *p, int resource) amount = rule->rr_amount; } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); return (amount); } @@ -514,7 +520,7 @@ rctl_get_available(struct proc *p, int resource) ASSERT_RACCT_ENABLED(); - rw_rlock(&rctl_lock); + RCTL_RLOCK(); /* * There may be more than one matching rule; go through all of them. @@ -531,7 +537,7 @@ rctl_get_available(struct proc *p, int resource) minavailable = available; } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); /* * XXX: Think about this _hard_. @@ -675,9 +681,9 @@ rctl_racct_add_rule(struct racct *racct, struct rctl_rule *rule) link->rrl_rule = rule; link->rrl_exceeded = 0; - rw_wlock(&rctl_lock); + RCTL_WLOCK(); LIST_INSERT_HEAD(&racct->r_rule_links, link, rrl_next); - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); } static int @@ -687,7 +693,7 @@ rctl_racct_add_rule_locked(struct racct *racct, struct rctl_rule *rule) ASSERT_RACCT_ENABLED(); KASSERT(rctl_rule_fully_specified(rule), ("rule not fully specified")); - rw_assert(&rctl_lock, RA_WLOCKED); + RCTL_WLOCK_ASSERT(); link = uma_zalloc(rctl_rule_link_zone, M_NOWAIT); if (link == NULL) @@ -713,7 +719,7 @@ rctl_racct_remove_rules(struct racct *racct, struct rctl_rule_link *link, *linktmp; ASSERT_RACCT_ENABLED(); - rw_assert(&rctl_lock, RA_WLOCKED); + RCTL_WLOCK_ASSERT(); LIST_FOREACH_SAFE(link, &racct->r_rule_links, rrl_next, linktmp) { if (!rctl_rule_matches(link->rrl_rule, filter)) @@ -1172,14 +1178,14 @@ static void rctl_rule_pre_callback(void) { - rw_wlock(&rctl_lock); + RCTL_WLOCK(); } static void rctl_rule_post_callback(void) { - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); } static void @@ -1189,7 +1195,7 @@ rctl_rule_remove_callback(struct racct *racct, void *arg2, void *arg3) int found = 0; ASSERT_RACCT_ENABLED(); - rw_assert(&rctl_lock, RA_WLOCKED); + RCTL_WLOCK_ASSERT(); found += rctl_racct_remove_rules(racct, filter); @@ -1210,9 +1216,9 @@ rctl_rule_remove(struct rctl_rule *filter) if (filter->rr_subject_type == RCTL_SUBJECT_TYPE_PROCESS && filter->rr_subject.rs_proc != NULL) { p = filter->rr_subject.rs_proc; - rw_wlock(&rctl_lock); + RCTL_WLOCK(); found = rctl_racct_remove_rules(p->p_racct, filter); - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); if (found) return (0); return (ESRCH); @@ -1229,11 +1235,11 @@ rctl_rule_remove(struct rctl_rule *filter) filter, (void *)&found); sx_assert(&allproc_lock, SA_LOCKED); - rw_wlock(&rctl_lock); + RCTL_WLOCK(); FOREACH_PROC_IN_SYSTEM(p) { found += rctl_racct_remove_rules(p->p_racct, filter); } - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); if (found) return (0); @@ -1460,7 +1466,7 @@ rctl_get_rules_callback(struct racct *racct, void *arg2, void *arg3) struct sbuf *sb = (struct sbuf *)arg3; ASSERT_RACCT_ENABLED(); - rw_assert(&rctl_lock, RA_LOCKED); + RCTL_LOCK_ASSERT(); LIST_FOREACH(link, &racct->r_rule_links, rrl_next) { if (!rctl_rule_matches(link->rrl_rule, filter)) @@ -1511,7 +1517,7 @@ sys_rctl_get_rules(struct thread *td, struct rctl_get_rules_args *uap) KASSERT(sb != NULL, ("sbuf_new failed")); FOREACH_PROC_IN_SYSTEM(p) { - rw_rlock(&rctl_lock); + RCTL_RLOCK(); LIST_FOREACH(link, &p->p_racct->r_rule_links, rrl_next) { /* * Non-process rules will be added to the buffer later. @@ -1525,7 +1531,7 @@ sys_rctl_get_rules(struct thread *td, struct rctl_get_rules_args *uap) rctl_rule_to_sbuf(sb, link->rrl_rule); sbuf_printf(sb, ","); } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); } loginclass_racct_foreach(rctl_get_rules_callback, @@ -1612,13 +1618,13 @@ sys_rctl_get_limits(struct thread *td, struct rctl_get_limits_args *uap) sb = sbuf_new(NULL, buf, bufsize, SBUF_FIXEDLEN); KASSERT(sb != NULL, ("sbuf_new failed")); - rw_rlock(&rctl_lock); + RCTL_RLOCK(); LIST_FOREACH(link, &filter->rr_subject.rs_proc->p_racct->r_rule_links, rrl_next) { rctl_rule_to_sbuf(sb, link->rrl_rule); sbuf_printf(sb, ","); } - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); if (sbuf_error(sb) == ENOMEM) { error = ERANGE; goto out; @@ -1743,7 +1749,7 @@ again: * credentials. */ rulecnt = 0; - rw_rlock(&rctl_lock); + RCTL_RLOCK(); LIST_FOREACH(link, &p->p_racct->r_rule_links, rrl_next) { if (link->rrl_rule->rr_subject_type == RCTL_SUBJECT_TYPE_PROCESS) @@ -1755,7 +1761,7 @@ again: rulecnt++; LIST_FOREACH(link, &newprr->prr_racct->r_rule_links, rrl_next) rulecnt++; - rw_runlock(&rctl_lock); + RCTL_RUNLOCK(); /* * Create temporary list. We've dropped the rctl_lock in order @@ -1773,7 +1779,7 @@ again: /* * Assign rules to the newly allocated list entries. */ - rw_wlock(&rctl_lock); + RCTL_WLOCK(); LIST_FOREACH(link, &p->p_racct->r_rule_links, rrl_next) { if (link->rrl_rule->rr_subject_type == RCTL_SUBJECT_TYPE_PROCESS) { @@ -1841,13 +1847,13 @@ again: newlink, rrl_next); } - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); return; } goaround: - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); /* * Rule list changed while we were not holding the rctl_lock. @@ -1879,7 +1885,7 @@ rctl_proc_fork(struct proc *parent, struct proc *child) ASSERT_RACCT_ENABLED(); KASSERT(parent->p_racct != NULL, ("process without racct; p = %p", parent)); - rw_wlock(&rctl_lock); + RCTL_WLOCK(); /* * Go through limits applicable to the parent and assign them @@ -1908,7 +1914,7 @@ rctl_proc_fork(struct proc *parent, struct proc *child) } } - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); return (0); fail: @@ -1918,7 +1924,7 @@ fail: rctl_rule_release(link->rrl_rule); uma_zfree(rctl_rule_link_zone, link); } - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); return (EAGAIN); } @@ -1932,14 +1938,14 @@ rctl_racct_release(struct racct *racct) ASSERT_RACCT_ENABLED(); - rw_wlock(&rctl_lock); + RCTL_WLOCK(); while (!LIST_EMPTY(&racct->r_rule_links)) { link = LIST_FIRST(&racct->r_rule_links); LIST_REMOVE(link, rrl_next); rctl_rule_release(link->rrl_rule); uma_zfree(rctl_rule_link_zone, link); } - rw_wunlock(&rctl_lock); + RCTL_WUNLOCK(); } static void -- cgit v1.1 From b3e10c44bfab84f30421f64b3eb9725657aee089 Mon Sep 17 00:00:00 2001 From: mmel Date: Tue, 5 Apr 2016 12:13:53 +0000 Subject: ehci_interrupt is MPSAFE code. Most drivers in tree calls bus_setup_intr with MPSAFE, some are not. Fix those. Submitted by: Howard Su Differential Revision: https://reviews.freebsd.org/D5755 --- sys/arm/nvidia/tegra_ehci.c | 4 ++-- sys/dev/usb/controller/ehci_fsl.c | 2 +- sys/dev/usb/controller/ehci_imx.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/arm/nvidia/tegra_ehci.c b/sys/arm/nvidia/tegra_ehci.c index e7f7b22..1834b33 100644 --- a/sys/arm/nvidia/tegra_ehci.c +++ b/sys/arm/nvidia/tegra_ehci.c @@ -253,8 +253,8 @@ tegra_ehci_attach(device_t dev) } /* Setup interrupt handler. */ - rv = bus_setup_intr(dev, sc->ehci_irq_res, INTR_TYPE_BIO, NULL, - (driver_intr_t *)ehci_interrupt, esc, &esc->sc_intr_hdl); + rv = bus_setup_intr(dev, sc->ehci_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)ehci_interrupt, esc, &esc->sc_intr_hdl); if (rv != 0) { device_printf(dev, "Could not setup IRQ\n"); goto out; diff --git a/sys/dev/usb/controller/ehci_fsl.c b/sys/dev/usb/controller/ehci_fsl.c index ed6c25937..7db642e 100644 --- a/sys/dev/usb/controller/ehci_fsl.c +++ b/sys/dev/usb/controller/ehci_fsl.c @@ -294,7 +294,7 @@ fsl_ehci_attach(device_t self) } /* Setup interrupt handler */ - err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO, + err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl); if (err) { device_printf(self, "Could not setup irq, %d\n", err); diff --git a/sys/dev/usb/controller/ehci_imx.c b/sys/dev/usb/controller/ehci_imx.c index 4473ebc..07f7310 100644 --- a/sys/dev/usb/controller/ehci_imx.c +++ b/sys/dev/usb/controller/ehci_imx.c @@ -261,8 +261,8 @@ imx_ehci_attach(device_t dev) } /* Setup interrupt handler. */ - err = bus_setup_intr(dev, sc->ehci_irq_res, INTR_TYPE_BIO, NULL, - (driver_intr_t *)ehci_interrupt, esc, &esc->sc_intr_hdl); + err = bus_setup_intr(dev, sc->ehci_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)ehci_interrupt, esc, &esc->sc_intr_hdl); if (err != 0) { device_printf(dev, "Could not setup IRQ\n"); goto out; -- cgit v1.1 From 92c72197bb177126dd91a518da8880eb664e866d Mon Sep 17 00:00:00 2001 From: skra Date: Tue, 5 Apr 2016 13:37:03 +0000 Subject: Rework bcm283x interrupt controller for INTRNG and enable it on RPI-B by default. Reviewed by: gonzo Differential Revision: https://reviews.freebsd.org/D5809 --- sys/arm/broadcom/bcm2835/bcm2835_intr.c | 290 +++++++++++++++++++++++++++++++- sys/arm/conf/RPI-B | 2 + 2 files changed, 291 insertions(+), 1 deletion(-) diff --git a/sys/arm/broadcom/bcm2835/bcm2835_intr.c b/sys/arm/broadcom/bcm2835/bcm2835_intr.c index 941e938..936dc52 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_intr.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_intr.c @@ -30,12 +30,15 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_platform.h" + #include #include #include #include #include #include +#include #include #include #include @@ -49,6 +52,10 @@ __FBSDID("$FreeBSD$"); #include #endif +#ifdef ARM_INTRNG +#include "pic_if.h" +#endif + #define INTC_PENDING_BASIC 0x00 #define INTC_PENDING_BANK1 0x04 #define INTC_PENDING_BANK2 0x08 @@ -60,17 +67,55 @@ __FBSDID("$FreeBSD$"); #define INTC_DISABLE_BANK2 0x20 #define INTC_DISABLE_BASIC 0x24 +#define INTC_PENDING_BASIC_ARM 0x0000FF +#define INTC_PENDING_BASIC_GPU1_PEND 0x000100 +#define INTC_PENDING_BASIC_GPU2_PEND 0x000200 +#define INTC_PENDING_BASIC_GPU1_7 0x000400 +#define INTC_PENDING_BASIC_GPU1_9 0x000800 +#define INTC_PENDING_BASIC_GPU1_10 0x001000 +#define INTC_PENDING_BASIC_GPU1_18 0x002000 +#define INTC_PENDING_BASIC_GPU1_19 0x004000 +#define INTC_PENDING_BASIC_GPU2_21 0x008000 +#define INTC_PENDING_BASIC_GPU2_22 0x010000 +#define INTC_PENDING_BASIC_GPU2_23 0x020000 +#define INTC_PENDING_BASIC_GPU2_24 0x040000 +#define INTC_PENDING_BASIC_GPU2_25 0x080000 +#define INTC_PENDING_BASIC_GPU2_30 0x100000 +#define INTC_PENDING_BASIC_MASK 0x1FFFFF + +#define INTC_PENDING_BASIC_GPU1_MASK (INTC_PENDING_BASIC_GPU1_7 | \ + INTC_PENDING_BASIC_GPU1_9 | \ + INTC_PENDING_BASIC_GPU1_10 | \ + INTC_PENDING_BASIC_GPU1_18 | \ + INTC_PENDING_BASIC_GPU1_19) + +#define INTC_PENDING_BASIC_GPU2_MASK (INTC_PENDING_BASIC_GPU2_21 | \ + INTC_PENDING_BASIC_GPU2_22 | \ + INTC_PENDING_BASIC_GPU2_23 | \ + INTC_PENDING_BASIC_GPU2_24 | \ + INTC_PENDING_BASIC_GPU2_25 | \ + INTC_PENDING_BASIC_GPU2_30) + +#define INTC_PENDING_BANK1_MASK (~((1 << 7) | (1 << 9) | (1 << 10) | \ + (1 << 18) | (1 << 19))) +#define INTC_PENDING_BANK2_MASK (~((1 << 21) | (1 << 22) | (1 << 23) | \ + (1 << 24) | (1 << 25) | (1 << 30))) + #define BANK1_START 8 #define BANK1_END (BANK1_START + 32 - 1) #define BANK2_START (BANK1_START + 32) #define BANK2_END (BANK2_START + 32 - 1) +#ifndef ARM_INTRNG #define BANK3_START (BANK2_START + 32) #define BANK3_END (BANK3_START + 32 - 1) +#endif #define IS_IRQ_BASIC(n) (((n) >= 0) && ((n) < BANK1_START)) #define IS_IRQ_BANK1(n) (((n) >= BANK1_START) && ((n) <= BANK1_END)) #define IS_IRQ_BANK2(n) (((n) >= BANK2_START) && ((n) <= BANK2_END)) +#ifndef ARM_INTRNG #define ID_IRQ_BCM2836(n) (((n) >= BANK3_START) && ((n) <= BANK3_END)) +#endif #define IRQ_BANK1(n) ((n) - BANK1_START) #define IRQ_BANK2(n) ((n) - BANK2_START) @@ -80,11 +125,28 @@ __FBSDID("$FreeBSD$"); #define dprintf(fmt, args...) #endif +#ifdef ARM_INTRNG +#define BCM_INTC_NIRQS 72 /* 8 + 32 + 32 */ + +struct bcm_intc_irqsrc { + struct intr_irqsrc bii_isrc; + u_int bii_irq; + uint16_t bii_disable_reg; + uint16_t bii_enable_reg; + uint32_t bii_mask; +}; +#endif + struct bcm_intc_softc { device_t sc_dev; struct resource * intc_res; bus_space_tag_t intc_bst; bus_space_handle_t intc_bsh; +#ifdef ARM_INTRNG + struct resource * intc_irq_res; + void * intc_irq_hdl; + struct bcm_intc_irqsrc intc_isrcs[BCM_INTC_NIRQS]; +#endif }; static struct bcm_intc_softc *bcm_intc_sc = NULL; @@ -94,6 +156,192 @@ static struct bcm_intc_softc *bcm_intc_sc = NULL; #define intc_write_4(_sc, reg, val) \ bus_space_write_4((_sc)->intc_bst, (_sc)->intc_bsh, (reg), (val)) +#ifdef ARM_INTRNG +static inline void +bcm_intc_isrc_mask(struct bcm_intc_softc *sc, struct bcm_intc_irqsrc *bii) +{ + + intc_write_4(sc, bii->bii_disable_reg, bii->bii_mask); +} + +static inline void +bcm_intc_isrc_unmask(struct bcm_intc_softc *sc, struct bcm_intc_irqsrc *bii) +{ + + intc_write_4(sc, bii->bii_enable_reg, bii->bii_mask); +} + +static inline int +bcm2835_intc_active_intr(struct bcm_intc_softc *sc) +{ + uint32_t pending, pending_gpu; + + pending = intc_read_4(sc, INTC_PENDING_BASIC) & INTC_PENDING_BASIC_MASK; + if (pending == 0) + return (-1); + if (pending & INTC_PENDING_BASIC_ARM) + return (ffs(pending) - 1); + if (pending & INTC_PENDING_BASIC_GPU1_MASK) { + if (pending & INTC_PENDING_BASIC_GPU1_7) + return (BANK1_START + 7); + if (pending & INTC_PENDING_BASIC_GPU1_9) + return (BANK1_START + 9); + if (pending & INTC_PENDING_BASIC_GPU1_10) + return (BANK1_START + 10); + if (pending & INTC_PENDING_BASIC_GPU1_18) + return (BANK1_START + 18); + if (pending & INTC_PENDING_BASIC_GPU1_19) + return (BANK1_START + 19); + } + if (pending & INTC_PENDING_BASIC_GPU2_MASK) { + if (pending & INTC_PENDING_BASIC_GPU2_21) + return (BANK2_START + 21); + if (pending & INTC_PENDING_BASIC_GPU2_22) + return (BANK2_START + 22); + if (pending & INTC_PENDING_BASIC_GPU2_23) + return (BANK2_START + 23); + if (pending & INTC_PENDING_BASIC_GPU2_24) + return (BANK2_START + 24); + if (pending & INTC_PENDING_BASIC_GPU2_25) + return (BANK2_START + 25); + if (pending & INTC_PENDING_BASIC_GPU2_30) + return (BANK2_START + 30); + } + if (pending & INTC_PENDING_BASIC_GPU1_PEND) { + pending_gpu = intc_read_4(sc, INTC_PENDING_BANK1); + pending_gpu &= INTC_PENDING_BANK1_MASK; + if (pending_gpu != 0) + return (BANK1_START + ffs(pending_gpu) - 1); + } + if (pending & INTC_PENDING_BASIC_GPU2_PEND) { + pending_gpu = intc_read_4(sc, INTC_PENDING_BANK2); + pending_gpu &= INTC_PENDING_BANK2_MASK; + if (pending_gpu != 0) + return (BANK2_START + ffs(pending_gpu) - 1); + } + return (-1); /* It shouldn't end here, but it's hardware. */ +} + +static int +bcm2835_intc_intr(void *arg) +{ + int irq, num; + struct bcm_intc_softc *sc = arg; + + for (num = 0; ; num++) { + irq = bcm2835_intc_active_intr(sc); + if (irq == -1) + break; + if (intr_isrc_dispatch(&sc->intc_isrcs[irq].bii_isrc, + curthread->td_intr_frame) != 0) { + bcm_intc_isrc_mask(sc, &sc->intc_isrcs[irq]); + device_printf(sc->sc_dev, "Stray irq %u disabled\n", + irq); + } + arm_irq_memory_barrier(0); /* XXX */ + } + if (num == 0) + device_printf(sc->sc_dev, "Spurious interrupt detected\n"); + + return (FILTER_HANDLED); +} + +static void +bcm_intc_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_intc_irqsrc *bii = (struct bcm_intc_irqsrc *)isrc; + + arm_irq_memory_barrier(bii->bii_irq); + bcm_intc_isrc_unmask(device_get_softc(dev), bii); +} + +static void +bcm_intc_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + + bcm_intc_isrc_mask(device_get_softc(dev), + (struct bcm_intc_irqsrc *)isrc); +} + +static int +bcm_intc_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + u_int irq; + struct bcm_intc_softc *sc; + + if (data->type != INTR_MAP_DATA_FDT) + return (ENOTSUP); + if (data->fdt.ncells == 1) + irq = data->fdt.cells[0]; + else if (data->fdt.ncells == 2) + irq = data->fdt.cells[0] * 32 + data->fdt.cells[1]; + else + return (EINVAL); + + if (irq >= BCM_INTC_NIRQS) + return (EINVAL); + + sc = device_get_softc(dev); + *isrcp = &sc->intc_isrcs[irq].bii_isrc; + return (0); +} + +static void +bcm_intc_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + bcm_intc_disable_intr(dev, isrc); +} + +static void +bcm_intc_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + bcm_intc_enable_intr(dev, isrc); +} + +static void +bcm_intc_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ +} + +static int +bcm_intc_pic_register(struct bcm_intc_softc *sc, intptr_t xref) +{ + struct bcm_intc_irqsrc *bii; + int error; + uint32_t irq; + const char *name; + + name = device_get_nameunit(sc->sc_dev); + for (irq = 0; irq < BCM_INTC_NIRQS; irq++) { + bii = &sc->intc_isrcs[irq]; + bii->bii_irq = irq; + if (IS_IRQ_BASIC(irq)) { + bii->bii_disable_reg = INTC_DISABLE_BASIC; + bii->bii_enable_reg = INTC_ENABLE_BASIC; + bii->bii_mask = 1 << irq; + } else if (IS_IRQ_BANK1(irq)) { + bii->bii_disable_reg = INTC_DISABLE_BANK1; + bii->bii_enable_reg = INTC_ENABLE_BANK1; + bii->bii_mask = 1 << IRQ_BANK1(irq); + } else if (IS_IRQ_BANK2(irq)) { + bii->bii_disable_reg = INTC_DISABLE_BANK2; + bii->bii_enable_reg = INTC_ENABLE_BANK2; + bii->bii_mask = 1 << IRQ_BANK2(irq); + } else + return (ENXIO); + + error = intr_isrc_register(&bii->bii_isrc, sc->sc_dev, 0, + "%s,%u", name, irq); + if (error != 0) + return (error); + } + return (intr_pic_register(sc->sc_dev, xref)); +} +#endif + static int bcm_intc_probe(device_t dev) { @@ -112,7 +360,9 @@ bcm_intc_attach(device_t dev) { struct bcm_intc_softc *sc = device_get_softc(dev); int rid = 0; - +#ifdef ARM_INTRNG + intptr_t xref; +#endif sc->sc_dev = dev; if (bcm_intc_sc) @@ -124,6 +374,32 @@ bcm_intc_attach(device_t dev) return (ENXIO); } +#ifdef ARM_INTRNG + xref = OF_xref_from_node(ofw_bus_get_node(dev)); + if (bcm_intc_pic_register(sc, xref) != 0) { + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->intc_res); + device_printf(dev, "could not register PIC\n"); + return (ENXIO); + } + + rid = 0; + sc->intc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE); + if (sc->intc_irq_res == NULL) { + if (intr_pic_claim_root(dev, xref, bcm2835_intc_intr, sc, 0) != 0) { + /* XXX clean up */ + device_printf(dev, "could not set PIC as a root\n"); + return (ENXIO); + } + } else { + if (bus_setup_intr(dev, sc->intc_irq_res, INTR_TYPE_CLK, + bcm2835_intc_intr, NULL, sc, &sc->intc_irq_hdl)) { + /* XXX clean up */ + device_printf(dev, "could not setup irq handler\n"); + return (ENXIO); + } + } +#endif sc->intc_bst = rman_get_bustag(sc->intc_res); sc->intc_bsh = rman_get_bushandle(sc->intc_res); @@ -135,6 +411,16 @@ bcm_intc_attach(device_t dev) static device_method_t bcm_intc_methods[] = { DEVMETHOD(device_probe, bcm_intc_probe), DEVMETHOD(device_attach, bcm_intc_attach), + +#ifdef ARM_INTRNG + DEVMETHOD(pic_disable_intr, bcm_intc_disable_intr), + DEVMETHOD(pic_enable_intr, bcm_intc_enable_intr), + DEVMETHOD(pic_map_intr, bcm_intc_map_intr), + DEVMETHOD(pic_post_filter, bcm_intc_post_filter), + DEVMETHOD(pic_post_ithread, bcm_intc_post_ithread), + DEVMETHOD(pic_pre_ithread, bcm_intc_pre_ithread), +#endif + { 0, 0 } }; @@ -148,6 +434,7 @@ static devclass_t bcm_intc_devclass; DRIVER_MODULE(intc, simplebus, bcm_intc_driver, bcm_intc_devclass, 0, 0); +#ifndef ARM_INTRNG int arm_get_next_irq(int last_irq) { @@ -247,3 +534,4 @@ intr_pic_init_secondary(void) { } #endif +#endif diff --git a/sys/arm/conf/RPI-B b/sys/arm/conf/RPI-B index db5f767..9bc2636 100644 --- a/sys/arm/conf/RPI-B +++ b/sys/arm/conf/RPI-B @@ -24,6 +24,8 @@ include "std.armv6" include "../broadcom/bcm2835/std.rpi" include "../broadcom/bcm2835/std.bcm2835" +options ARM_INTRNG + options HZ=100 options SCHED_4BSD # 4BSD scheduler options PLATFORM -- cgit v1.1 From 56f755f4a8ac09640d3cae30671d549c6626050a Mon Sep 17 00:00:00 2001 From: skra Date: Tue, 5 Apr 2016 13:41:51 +0000 Subject: Implement bcm2836 interrupt controller for INTRNG and enable it on RPI2 by default. Differential Revision: https://reviews.freebsd.org/D5822 --- sys/arm/broadcom/bcm2835/bcm2836.c | 712 ++++++++++++++++++++++++++++++++++ sys/arm/broadcom/bcm2835/bcm2836.h | 3 +- sys/arm/broadcom/bcm2835/bcm2836_mp.c | 2 + sys/arm/conf/RPI2 | 2 + 4 files changed, 718 insertions(+), 1 deletion(-) diff --git a/sys/arm/broadcom/bcm2835/bcm2836.c b/sys/arm/broadcom/bcm2835/bcm2836.c index c6f8cb0..05e9cc6 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836.c +++ b/sys/arm/broadcom/bcm2835/bcm2836.c @@ -1,5 +1,6 @@ /* * Copyright 2015 Andrew Turner. + * Copyright 2016 Svatopluk Kraus * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,19 +29,33 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_platform.h" + #include #include #include +#include #include #include +#include #include +#ifdef SMP +#include +#endif #include +#include #include +#ifdef SMP +#include +#endif #include #include +#ifdef ARM_INTRNG +#include "pic_if.h" +#else #include #define ARM_LOCAL_BASE 0x40000000 @@ -55,7 +70,703 @@ __FBSDID("$FreeBSD$"); #define INT_PENDING_MASK 0x011f #define MAILBOX0_IRQ 4 #define MAILBOX0_IRQEN (1 << 0) +#endif + +#ifdef ARM_INTRNG +#define BCM_LINTC_CONTROL_REG 0x00 +#define BCM_LINTC_PRESCALER_REG 0x08 +#define BCM_LINTC_GPU_ROUTING_REG 0x0c +#define BCM_LINTC_PMU_ROUTING_SET_REG 0x10 +#define BCM_LINTC_PMU_ROUTING_CLR_REG 0x14 +#define BCM_LINTC_TIMER_CFG_REG(n) (0x40 + (n) * 4) +#define BCM_LINTC_MBOX_CFG_REG(n) (0x50 + (n) * 4) +#define BCM_LINTC_PENDING_REG(n) (0x60 + (n) * 4) +#define BCM_LINTC_MBOX0_SET_REG(n) (0x80 + (n) * 16) +#define BCM_LINTC_MBOX1_SET_REG(n) (0x84 + (n) * 16) +#define BCM_LINTC_MBOX2_SET_REG(n) (0x88 + (n) * 16) +#define BCM_LINTC_MBOX3_SET_REG(n) (0x8C + (n) * 16) +#define BCM_LINTC_MBOX0_CLR_REG(n) (0xC0 + (n) * 16) +#define BCM_LINTC_MBOX1_CLR_REG(n) (0xC4 + (n) * 16) +#define BCM_LINTC_MBOX2_CLR_REG(n) (0xC8 + (n) * 16) +#define BCM_LINTC_MBOX3_CLR_REG(n) (0xCC + (n) * 16) + +/* Prescaler Register */ +#define BCM_LINTC_PSR_19_2 0x80000000 /* 19.2 MHz */ + +/* GPU Interrupt Routing Register */ +#define BCM_LINTC_GIRR_IRQ_CORE(n) (n) +#define BCM_LINTC_GIRR_FIQ_CORE(n) ((n) << 2) + +/* PMU Interrupt Routing Register */ +#define BCM_LINTC_PIRR_IRQ_EN_CORE(n) (1 << (n)) +#define BCM_LINTC_PIRR_FIQ_EN_CORE(n) (1 << ((n) + 4)) + +/* Timer Config Register */ +#define BCM_LINTC_TCR_IRQ_EN_TIMER(n) (1 << (n)) +#define BCM_LINTC_TCR_FIQ_EN_TIMER(n) (1 << ((n) + 4)) + +/* MBOX Config Register */ +#define BCM_LINTC_MCR_IRQ_EN_MBOX(n) (1 << (n)) +#define BCM_LINTC_MCR_FIQ_EN_MBOX(n) (1 << ((n) + 4)) + +#define BCM_LINTC_CNTPSIRQ_IRQ 0 +#define BCM_LINTC_CNTPNSIRQ_IRQ 1 +#define BCM_LINTC_CNTHPIRQ_IRQ 2 +#define BCM_LINTC_CNTVIRQ_IRQ 3 +#define BCM_LINTC_MBOX0_IRQ 4 +#define BCM_LINTC_MBOX1_IRQ 5 +#define BCM_LINTC_MBOX2_IRQ 6 +#define BCM_LINTC_MBOX3_IRQ 7 +#define BCM_LINTC_GPU_IRQ 8 +#define BCM_LINTC_PMU_IRQ 9 +#define BCM_LINTC_AXI_IRQ 10 +#define BCM_LINTC_LTIMER_IRQ 11 + +#define BCM_LINTC_NIRQS 12 + +#define BCM_LINTC_TIMER0_IRQ BCM_LINTC_CNTPSIRQ_IRQ +#define BCM_LINTC_TIMER1_IRQ BCM_LINTC_CNTPNSIRQ_IRQ +#define BCM_LINTC_TIMER2_IRQ BCM_LINTC_CNTHPIRQ_IRQ +#define BCM_LINTC_TIMER3_IRQ BCM_LINTC_CNTVIRQ_IRQ + +#define BCM_LINTC_TIMER0_IRQ_MASK (1 << BCM_LINTC_TIMER0_IRQ) +#define BCM_LINTC_TIMER1_IRQ_MASK (1 << BCM_LINTC_TIMER1_IRQ) +#define BCM_LINTC_TIMER2_IRQ_MASK (1 << BCM_LINTC_TIMER2_IRQ) +#define BCM_LINTC_TIMER3_IRQ_MASK (1 << BCM_LINTC_TIMER3_IRQ) +#define BCM_LINTC_MBOX0_IRQ_MASK (1 << BCM_LINTC_MBOX0_IRQ) +#define BCM_LINTC_GPU_IRQ_MASK (1 << BCM_LINTC_GPU_IRQ) +#define BCM_LINTC_PMU_IRQ_MASK (1 << BCM_LINTC_PMU_IRQ) + +#define BCM_LINTC_UP_PENDING_MASK \ + (BCM_LINTC_TIMER0_IRQ_MASK | \ + BCM_LINTC_TIMER1_IRQ_MASK | \ + BCM_LINTC_TIMER2_IRQ_MASK | \ + BCM_LINTC_TIMER3_IRQ_MASK | \ + BCM_LINTC_GPU_IRQ_MASK | \ + BCM_LINTC_PMU_IRQ_MASK) + +#define BCM_LINTC_SMP_PENDING_MASK \ + (BCM_LINTC_UP_PENDING_MASK | \ + BCM_LINTC_MBOX0_IRQ_MASK) + +#ifdef SMP +#define BCM_LINTC_PENDING_MASK BCM_LINTC_SMP_PENDING_MASK +#else +#define BCM_LINTC_PENDING_MASK BCM_LINTC_UP_PENDING_MASK +#endif + +struct bcm_lintc_irqsrc { + struct intr_irqsrc bli_isrc; + u_int bli_irq; + union { + u_int bli_mask; /* for timers */ + u_int bli_value; /* for GPU */ + }; +}; + +struct bcm_lintc_softc { + device_t bls_dev; + struct mtx bls_mtx; + struct resource * bls_mem; + bus_space_tag_t bls_bst; + bus_space_handle_t bls_bsh; + struct bcm_lintc_irqsrc bls_isrcs[BCM_LINTC_NIRQS]; +}; + +static struct bcm_lintc_softc *bcm_lintc_sc; + +#ifdef SMP +#define BCM_LINTC_NIPIS 32 /* only mailbox 0 is used for IPI */ +CTASSERT(INTR_IPI_COUNT <= BCM_LINTC_NIPIS); +#endif + +#define BCM_LINTC_LOCK(sc) mtx_lock_spin(&(sc)->bls_mtx) +#define BCM_LINTC_UNLOCK(sc) mtx_unlock_spin(&(sc)->bls_mtx) +#define BCM_LINTC_LOCK_INIT(sc) mtx_init(&(sc)->bls_mtx, \ + device_get_nameunit((sc)->bls_dev), "bmc_local_intc", MTX_SPIN) +#define BCM_LINTC_LOCK_DESTROY(sc) mtx_destroy(&(sc)->bls_mtx) + +#define bcm_lintc_read_4(sc, reg) \ + bus_space_read_4((sc)->bls_bst, (sc)->bls_bsh, (reg)) +#define bcm_lintc_write_4(sc, reg, val) \ + bus_space_write_4((sc)->bls_bst, (sc)->bls_bsh, (reg), (val)) + +static inline void +bcm_lintc_rwreg_clr(struct bcm_lintc_softc *sc, uint32_t reg, + uint32_t mask) +{ + + bcm_lintc_write_4(sc, reg, bcm_lintc_read_4(sc, reg) & ~mask); +} + +static inline void +bcm_lintc_rwreg_set(struct bcm_lintc_softc *sc, uint32_t reg, + uint32_t mask) +{ + + bcm_lintc_write_4(sc, reg, bcm_lintc_read_4(sc, reg) | mask); +} + +static void +bcm_lintc_timer_mask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + cpuset_t *cpus; + uint32_t cpu; + + cpus = &bli->bli_isrc.isrc_cpu; + + BCM_LINTC_LOCK(sc); + for (cpu = 0; cpu < 4; cpu++) + if (CPU_ISSET(cpu, cpus)) + bcm_lintc_rwreg_clr(sc, BCM_LINTC_TIMER_CFG_REG(cpu), + bli->bli_mask); + BCM_LINTC_UNLOCK(sc); +} + +static void +bcm_lintc_timer_unmask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + cpuset_t *cpus; + uint32_t cpu; + + cpus = &bli->bli_isrc.isrc_cpu; + + BCM_LINTC_LOCK(sc); + for (cpu = 0; cpu < 4; cpu++) + if (CPU_ISSET(cpu, cpus)) + bcm_lintc_rwreg_set(sc, BCM_LINTC_TIMER_CFG_REG(cpu), + bli->bli_mask); + BCM_LINTC_UNLOCK(sc); +} + +static inline void +bcm_lintc_gpu_mask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + + /* It's accessed just and only by one core. */ + bcm_lintc_write_4(sc, BCM_LINTC_GPU_ROUTING_REG, 0); +} + +static inline void +bcm_lintc_gpu_unmask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + + /* It's accessed just and only by one core. */ + bcm_lintc_write_4(sc, BCM_LINTC_GPU_ROUTING_REG, bli->bli_value); +} + +static inline void +bcm_lintc_pmu_mask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + cpuset_t *cpus; + uint32_t cpu, mask; + + mask = 0; + cpus = &bli->bli_isrc.isrc_cpu; + + BCM_LINTC_LOCK(sc); + for (cpu = 0; cpu < 4; cpu++) + if (CPU_ISSET(cpu, cpus)) + mask |= BCM_LINTC_PIRR_IRQ_EN_CORE(cpu); + /* Write-clear register. */ + bcm_lintc_write_4(sc, BCM_LINTC_PMU_ROUTING_CLR_REG, mask); + BCM_LINTC_UNLOCK(sc); +} + +static inline void +bcm_lintc_pmu_unmask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + cpuset_t *cpus; + uint32_t cpu, mask; + + mask = 0; + cpus = &bli->bli_isrc.isrc_cpu; + + BCM_LINTC_LOCK(sc); + for (cpu = 0; cpu < 4; cpu++) + if (CPU_ISSET(cpu, cpus)) + mask |= BCM_LINTC_PIRR_IRQ_EN_CORE(cpu); + /* Write-set register. */ + bcm_lintc_write_4(sc, BCM_LINTC_PMU_ROUTING_SET_REG, mask); + BCM_LINTC_UNLOCK(sc); +} + +static void +bcm_lintc_mask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + + switch (bli->bli_irq) { + case BCM_LINTC_TIMER0_IRQ: + case BCM_LINTC_TIMER1_IRQ: + case BCM_LINTC_TIMER2_IRQ: + case BCM_LINTC_TIMER3_IRQ: + bcm_lintc_timer_mask(sc, bli); + return; + case BCM_LINTC_MBOX0_IRQ: + case BCM_LINTC_MBOX1_IRQ: + case BCM_LINTC_MBOX2_IRQ: + case BCM_LINTC_MBOX3_IRQ: + return; + case BCM_LINTC_GPU_IRQ: + bcm_lintc_gpu_mask(sc, bli); + return; + case BCM_LINTC_PMU_IRQ: + bcm_lintc_pmu_mask(sc, bli); + return; + default: + panic("%s: not implemented for irq %u", __func__, bli->bli_irq); + } +} + +static void +bcm_lintc_unmask(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli) +{ + + switch (bli->bli_irq) { + case BCM_LINTC_TIMER0_IRQ: + case BCM_LINTC_TIMER1_IRQ: + case BCM_LINTC_TIMER2_IRQ: + case BCM_LINTC_TIMER3_IRQ: + bcm_lintc_timer_unmask(sc, bli); + return; + case BCM_LINTC_MBOX0_IRQ: + case BCM_LINTC_MBOX1_IRQ: + case BCM_LINTC_MBOX2_IRQ: + case BCM_LINTC_MBOX3_IRQ: + return; + case BCM_LINTC_GPU_IRQ: + bcm_lintc_gpu_unmask(sc, bli); + return; + case BCM_LINTC_PMU_IRQ: + bcm_lintc_pmu_unmask(sc, bli); + return; + default: + panic("%s: not implemented for irq %u", __func__, bli->bli_irq); + } +} + +#ifdef SMP +static inline void +bcm_lintc_ipi_write(struct bcm_lintc_softc *sc, cpuset_t cpus, u_int ipi) +{ + u_int cpu; + uint32_t mask; + + mask = 1 << ipi; + for (cpu = 0; cpu < mp_ncpus; cpu++) + if (CPU_ISSET(cpu, &cpus)) + bcm_lintc_write_4(sc, BCM_LINTC_MBOX0_SET_REG(cpu), + mask); +} + +static inline void +bcm_lintc_ipi_dispatch(struct bcm_lintc_softc *sc, u_int cpu, + struct trapframe *tf) +{ + u_int ipi; + uint32_t mask; + + mask = bcm_lintc_read_4(sc, BCM_LINTC_MBOX0_CLR_REG(cpu)); + if (mask == 0) { + device_printf(sc->bls_dev, "Spurious ipi detected\n"); + return; + } + + for (ipi = 0; mask != 0; mask >>= 1, ipi++) { + if ((mask & 0x01) == 0) + continue; + /* + * Clear an IPI before dispatching to not miss anyone + * and make sure that it's observed by everybody. + */ + bcm_lintc_write_4(sc, BCM_LINTC_MBOX0_CLR_REG(cpu), 1 << ipi); + dsb(); + intr_ipi_dispatch(ipi, tf); + } +} +#endif + +static inline void +bcm_lintc_irq_dispatch(struct bcm_lintc_softc *sc, u_int irq, + struct trapframe *tf) +{ + struct bcm_lintc_irqsrc *bli; + + bli = &sc->bls_isrcs[irq]; + if (intr_isrc_dispatch(&bli->bli_isrc, tf) != 0) + device_printf(sc->bls_dev, "Stray irq %u detected\n", irq); +} + +static int +bcm_lintc_intr(void *arg) +{ + struct bcm_lintc_softc *sc; + u_int cpu; + uint32_t num, reg; + struct trapframe *tf; + + sc = arg; + cpu = PCPU_GET(cpuid); + tf = curthread->td_intr_frame; + + for (num = 0; ; num++) { + reg = bcm_lintc_read_4(sc, BCM_LINTC_PENDING_REG(cpu)); + if ((reg & BCM_LINTC_PENDING_MASK) == 0) + break; +#ifdef SMP + if (reg & BCM_LINTC_MBOX0_IRQ_MASK) + bcm_lintc_ipi_dispatch(sc, cpu, tf); +#endif + if (reg & BCM_LINTC_TIMER0_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_TIMER0_IRQ, tf); + if (reg & BCM_LINTC_TIMER1_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_TIMER1_IRQ, tf); + if (reg & BCM_LINTC_TIMER2_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_TIMER2_IRQ, tf); + if (reg & BCM_LINTC_TIMER3_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_TIMER3_IRQ, tf); + if (reg & BCM_LINTC_GPU_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_GPU_IRQ, tf); + if (reg & BCM_LINTC_PMU_IRQ_MASK) + bcm_lintc_irq_dispatch(sc, BCM_LINTC_PMU_IRQ, tf); + + arm_irq_memory_barrier(0); /* XXX */ + } + reg &= ~BCM_LINTC_PENDING_MASK; + if (reg != 0) + device_printf(sc->bls_dev, "Unknown interrupt(s) %x\n", reg); + else if (num == 0) + device_printf(sc->bls_dev, "Spurious interrupt detected\n"); + + return (FILTER_HANDLED); +} + +static void +bcm_lintc_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + + bcm_lintc_mask(device_get_softc(dev), (struct bcm_lintc_irqsrc *)isrc); +} + +static void +bcm_lintc_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_lintc_irqsrc *bli = (struct bcm_lintc_irqsrc *)isrc; + + arm_irq_memory_barrier(bli->bli_irq); + bcm_lintc_unmask(device_get_softc(dev), bli); +} + +static int +bcm_lintc_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + struct bcm_lintc_softc *sc; + + if (data->type != INTR_MAP_DATA_FDT) + return (ENOTSUP); + if (data->fdt.ncells != 1 || data->fdt.cells[0] >= BCM_LINTC_NIRQS) + return (EINVAL); + + sc = device_get_softc(dev); + *isrcp = &sc->bls_isrcs[data->fdt.cells[0]].bli_isrc; + return (0); +} + +static void +bcm_lintc_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_lintc_irqsrc *bli = (struct bcm_lintc_irqsrc *)isrc; + + if (bli->bli_irq == BCM_LINTC_GPU_IRQ) + bcm_lintc_gpu_mask(device_get_softc(dev), bli); + else { + /* + * Handler for PPI interrupt does not make sense much unless + * there is one bound ithread for each core for it. Thus the + * interrupt can be masked on current core only while ithread + * bounded to this core ensures unmasking on the same core. + */ + panic ("%s: handlers are not supported", __func__); + } +} + +static void +bcm_lintc_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_lintc_irqsrc *bli = (struct bcm_lintc_irqsrc *)isrc; + + if (bli->bli_irq == BCM_LINTC_GPU_IRQ) + bcm_lintc_gpu_unmask(device_get_softc(dev), bli); + else { + /* See comment in bcm_lintc_pre_ithread(). */ + panic ("%s: handlers are not supported", __func__); + } +} + +static void +bcm_lintc_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ +} + +static int +bcm_lintc_setup_intr(device_t dev, struct intr_irqsrc *isrc, + struct resource *res, struct intr_map_data *data) +{ + struct bcm_lintc_softc *sc; + + if (isrc->isrc_handlers == 0 && isrc->isrc_flags & INTR_ISRCF_PPI) { + sc = device_get_softc(dev); + BCM_LINTC_LOCK(sc); + CPU_SET(PCPU_GET(cpuid), &isrc->isrc_cpu); + BCM_LINTC_UNLOCK(sc); + } + return (0); +} + +#ifdef SMP +static bool +bcm_lint_init_on_ap(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli, + u_int cpu) +{ + struct intr_irqsrc *isrc; + + isrc = &bli->bli_isrc; + + KASSERT(isrc->isrc_flags & INTR_ISRCF_PPI, + ("%s: irq %d is not PPI", __func__, bli->bli_irq)); + + if (isrc->isrc_handlers == 0) + return (false); + if (isrc->isrc_flags & INTR_ISRCF_BOUND) + return (CPU_ISSET(cpu, &isrc->isrc_cpu)); + + CPU_SET(cpu, &isrc->isrc_cpu); + return (true); +} + +static void +bcm_lintc_init_rwreg_on_ap(struct bcm_lintc_softc *sc, u_int cpu, u_int irq, + uint32_t reg, uint32_t mask) +{ + + if (bcm_lint_init_on_ap(sc, &sc->bls_isrcs[irq], cpu)) + bcm_lintc_rwreg_set(sc, reg, mask); +} + +static void +bcm_lintc_init_pmu_on_ap(struct bcm_lintc_softc *sc, u_int cpu) +{ + + if (bcm_lint_init_on_ap(sc, &sc->bls_isrcs[BCM_LINTC_PMU_IRQ], cpu)) { + /* Write-set register. */ + bcm_lintc_write_4(sc, BCM_LINTC_PMU_ROUTING_SET_REG, + BCM_LINTC_PIRR_IRQ_EN_CORE(cpu)); + } +} + +static void +bcm_lintc_init_secondary(device_t dev) +{ + u_int cpu; + struct bcm_lintc_softc *sc; + + cpu = PCPU_GET(cpuid); + sc = device_get_softc(dev); + + BCM_LINTC_LOCK(sc); + bcm_lintc_init_rwreg_on_ap(sc, cpu, BCM_LINTC_TIMER0_IRQ, + BCM_LINTC_TIMER_CFG_REG(cpu), BCM_LINTC_TCR_IRQ_EN_TIMER(0)); + bcm_lintc_init_rwreg_on_ap(sc, cpu, BCM_LINTC_TIMER1_IRQ, + BCM_LINTC_TIMER_CFG_REG(cpu), BCM_LINTC_TCR_IRQ_EN_TIMER(1)); + bcm_lintc_init_rwreg_on_ap(sc, cpu, BCM_LINTC_TIMER2_IRQ, + BCM_LINTC_TIMER_CFG_REG(cpu), BCM_LINTC_TCR_IRQ_EN_TIMER(2)); + bcm_lintc_init_rwreg_on_ap(sc, cpu, BCM_LINTC_TIMER3_IRQ, + BCM_LINTC_TIMER_CFG_REG(cpu), BCM_LINTC_TCR_IRQ_EN_TIMER(3)); + bcm_lintc_init_pmu_on_ap(sc, cpu); + BCM_LINTC_UNLOCK(sc); +} + +static void +bcm_lintc_ipi_send(device_t dev, struct intr_irqsrc *isrc, cpuset_t cpus, + u_int ipi) +{ + struct bcm_lintc_softc *sc = device_get_softc(dev); + KASSERT(isrc == &sc->bls_isrcs[BCM_LINTC_MBOX0_IRQ].bli_isrc, + ("%s: bad ISRC %p argument", __func__, isrc)); + bcm_lintc_ipi_write(sc, cpus, ipi); +} + +static int +bcm_lintc_ipi_setup(device_t dev, u_int ipi, struct intr_irqsrc **isrcp) +{ + struct bcm_lintc_softc *sc = device_get_softc(dev); + + KASSERT(ipi < BCM_LINTC_NIPIS, ("%s: too high ipi %u", __func__, ipi)); + + *isrcp = &sc->bls_isrcs[BCM_LINTC_MBOX0_IRQ].bli_isrc; + return (0); +} +#endif + +static int +bcm_lintc_pic_attach(struct bcm_lintc_softc *sc) +{ + struct bcm_lintc_irqsrc *bisrcs; + int error; + u_int flags; + uint32_t irq; + const char *name; + intptr_t xref; + + bisrcs = sc->bls_isrcs; + name = device_get_nameunit(sc->bls_dev); + for (irq = 0; irq < BCM_LINTC_NIRQS; irq++) { + bisrcs[irq].bli_irq = irq; + switch (irq) { + case BCM_LINTC_TIMER0_IRQ: + bisrcs[irq].bli_mask = BCM_LINTC_TCR_IRQ_EN_TIMER(0); + flags = INTR_ISRCF_PPI; + break; + case BCM_LINTC_TIMER1_IRQ: + bisrcs[irq].bli_mask = BCM_LINTC_TCR_IRQ_EN_TIMER(1); + flags = INTR_ISRCF_PPI; + break; + case BCM_LINTC_TIMER2_IRQ: + bisrcs[irq].bli_mask = BCM_LINTC_TCR_IRQ_EN_TIMER(2); + flags = INTR_ISRCF_PPI; + break; + case BCM_LINTC_TIMER3_IRQ: + bisrcs[irq].bli_mask = BCM_LINTC_TCR_IRQ_EN_TIMER(3); + flags = INTR_ISRCF_PPI; + break; + case BCM_LINTC_MBOX0_IRQ: + case BCM_LINTC_MBOX1_IRQ: + case BCM_LINTC_MBOX2_IRQ: + case BCM_LINTC_MBOX3_IRQ: + bisrcs[irq].bli_value = 0; /* not used */ + flags = INTR_ISRCF_IPI; + break; + case BCM_LINTC_GPU_IRQ: + bisrcs[irq].bli_value = BCM_LINTC_GIRR_IRQ_CORE(0); + flags = 0; + break; + case BCM_LINTC_PMU_IRQ: + bisrcs[irq].bli_value = 0; /* not used */ + flags = INTR_ISRCF_PPI; + break; + default: + bisrcs[irq].bli_value = 0; /* not used */ + flags = 0; + break; + } + + error = intr_isrc_register(&bisrcs[irq].bli_isrc, sc->bls_dev, + flags, "%s,%u", name, irq); + if (error != 0) + return (error); + } + + xref = OF_xref_from_node(ofw_bus_get_node(sc->bls_dev)); + error = intr_pic_register(sc->bls_dev, xref); + if (error != 0) + return (error); + + return (intr_pic_claim_root(sc->bls_dev, xref, bcm_lintc_intr, sc, 0)); +} + +static int +bcm_lintc_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_is_compatible(dev, "brcm,bcm2836-l1-intc")) + return (ENXIO); + device_set_desc(dev, "BCM2836 Interrupt Controller"); + return (BUS_PROBE_DEFAULT); +} + +static int +bcm_lintc_attach(device_t dev) +{ + struct bcm_lintc_softc *sc; + int cpu, rid; + + sc = device_get_softc(dev); + + sc->bls_dev = dev; + if (bcm_lintc_sc != NULL) + return (ENXIO); + + rid = 0; + sc->bls_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (sc->bls_mem == NULL) { + device_printf(dev, "could not allocate memory resource\n"); + return (ENXIO); + } + + sc->bls_bst = rman_get_bustag(sc->bls_mem); + sc->bls_bsh = rman_get_bushandle(sc->bls_mem); + + bcm_lintc_write_4(sc, BCM_LINTC_CONTROL_REG, 0); + bcm_lintc_write_4(sc, BCM_LINTC_PRESCALER_REG, BCM_LINTC_PSR_19_2); + + /* Disable all timers on all cores. */ + for (cpu = 0; cpu < 4; cpu++) + bcm_lintc_write_4(sc, BCM_LINTC_TIMER_CFG_REG(cpu), 0); + +#ifdef SMP + /* Enable mailbox 0 on all cores used for IPI. */ + for (cpu = 0; cpu < 4; cpu++) + bcm_lintc_write_4(sc, BCM_LINTC_MBOX_CFG_REG(cpu), + BCM_LINTC_MCR_IRQ_EN_MBOX(0)); +#endif + + if (bcm_lintc_pic_attach(sc) != 0) { + device_printf(dev, "could not attach PIC\n"); + return (ENXIO); + } + + BCM_LINTC_LOCK_INIT(sc); + bcm_lintc_sc = sc; + return (0); +} + +static device_method_t bcm_lintc_methods[] = { + DEVMETHOD(device_probe, bcm_lintc_probe), + DEVMETHOD(device_attach, bcm_lintc_attach), + + DEVMETHOD(pic_disable_intr, bcm_lintc_disable_intr), + DEVMETHOD(pic_enable_intr, bcm_lintc_enable_intr), + DEVMETHOD(pic_map_intr, bcm_lintc_map_intr), + DEVMETHOD(pic_post_filter, bcm_lintc_post_filter), + DEVMETHOD(pic_post_ithread, bcm_lintc_post_ithread), + DEVMETHOD(pic_pre_ithread, bcm_lintc_pre_ithread), + DEVMETHOD(pic_setup_intr, bcm_lintc_setup_intr), +#ifdef SMP + DEVMETHOD(pic_init_secondary, bcm_lintc_init_secondary), + DEVMETHOD(pic_ipi_send, bcm_lintc_ipi_send), + DEVMETHOD(pic_ipi_setup, bcm_lintc_ipi_setup), +#endif + + DEVMETHOD_END +}; + +static driver_t bcm_lintc_driver = { + "local_intc", + bcm_lintc_methods, + sizeof(struct bcm_lintc_softc), +}; + +static devclass_t bcm_lintc_devclass; + +EARLY_DRIVER_MODULE(local_intc, simplebus, bcm_lintc_driver, bcm_lintc_devclass, + 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); +#else /* * A driver for features of the bcm2836. */ @@ -214,3 +925,4 @@ static driver_t bcm2836_driver = { EARLY_DRIVER_MODULE(bcm2836, nexus, bcm2836_driver, bcm2836_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); +#endif diff --git a/sys/arm/broadcom/bcm2835/bcm2836.h b/sys/arm/broadcom/bcm2835/bcm2836.h index 7acd41b..14abfe2 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836.h +++ b/sys/arm/broadcom/bcm2835/bcm2836.h @@ -30,10 +30,11 @@ #ifndef _BCM2815_BCM2836_H #define _BCM2815_BCM2836_H +#ifndef ARM_INTRNG #define BCM2836_GPU_IRQ 8 int bcm2836_get_next_irq(int); void bcm2836_mask_irq(uintptr_t); void bcm2836_unmask_irq(uintptr_t); - +#endif #endif diff --git a/sys/arm/broadcom/bcm2835/bcm2836_mp.c b/sys/arm/broadcom/bcm2835/bcm2836_mp.c index 6a3a857..a361319 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836_mp.c +++ b/sys/arm/broadcom/bcm2835/bcm2836_mp.c @@ -139,6 +139,7 @@ platform_mp_start_ap(void) } } +#ifndef ARM_INTRNG void pic_ipi_send(cpuset_t cpus, u_int ipi) { @@ -176,3 +177,4 @@ void pic_ipi_clear(int ipi) { } +#endif diff --git a/sys/arm/conf/RPI2 b/sys/arm/conf/RPI2 index cfbc14e..3cee50d 100644 --- a/sys/arm/conf/RPI2 +++ b/sys/arm/conf/RPI2 @@ -24,6 +24,8 @@ include "std.armv6" include "../broadcom/bcm2835/std.rpi" include "../broadcom/bcm2835/std.bcm2836" +options ARM_INTRNG + options HZ=100 options SCHED_ULE # ULE scheduler options SMP # Enable multiple cores -- cgit v1.1 From 408158d208d5e7f189e5ccca2ca4c67580376568 Mon Sep 17 00:00:00 2001 From: skra Date: Tue, 5 Apr 2016 13:45:23 +0000 Subject: Rework BCM283x gpio interrupt controller for INTRNG. It's used on RPI-B and RPI2 where INTRNG is already enabled by default. Differential Revision: https://reviews.freebsd.org/D5810 --- sys/arm/broadcom/bcm2835/bcm2835_gpio.c | 383 +++++++++++++++++++++++++++++++- sys/boot/fdt/dts/arm/bcm2835.dtsi | 2 +- sys/boot/fdt/dts/arm/bcm2836.dtsi | 2 +- 3 files changed, 380 insertions(+), 7 deletions(-) diff --git a/sys/arm/broadcom/bcm2835/bcm2835_gpio.c b/sys/arm/broadcom/bcm2835/bcm2835_gpio.c index 6fff6d8..d448fc5 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_gpio.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_gpio.c @@ -28,6 +28,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_platform.h" + #include #include #include @@ -37,10 +39,12 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include +#include #include #include @@ -49,6 +53,10 @@ __FBSDID("$FreeBSD$"); #include "gpio_if.h" +#ifdef ARM_INTRNG +#include "pic_if.h" +#endif + #ifdef DEBUG #define dprintf(fmt, args...) do { printf("%s(): ", __func__); \ printf(fmt,##args); } while (0) @@ -64,10 +72,10 @@ __FBSDID("$FreeBSD$"); static struct resource_spec bcm_gpio_res_spec[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, - { SYS_RES_IRQ, 0, RF_ACTIVE }, - { SYS_RES_IRQ, 1, RF_ACTIVE }, - { SYS_RES_IRQ, 2, RF_ACTIVE }, - { SYS_RES_IRQ, 3, RF_ACTIVE }, + { SYS_RES_IRQ, 0, RF_ACTIVE }, /* bank 0 interrupt */ + { SYS_RES_IRQ, 1, RF_ACTIVE }, /* bank 1 interrupt */ + { SYS_RES_IRQ, 2, RF_ACTIVE }, /* bank 1 interrupt (mirrored) */ + { SYS_RES_IRQ, 3, RF_ACTIVE }, /* bank 0-1 interrupt (united) */ { -1, 0, 0 } }; @@ -76,6 +84,15 @@ struct bcm_gpio_sysctl { uint32_t pin; }; +#ifdef ARM_INTRNG +struct bcm_gpio_irqsrc { + struct intr_irqsrc bgi_isrc; + uint32_t bgi_irq; + uint32_t bgi_reg; + uint32_t bgi_mask; +}; +#endif + struct bcm_gpio_softc { device_t sc_dev; device_t sc_busdev; @@ -88,10 +105,16 @@ struct bcm_gpio_softc { int sc_ro_npins; int sc_ro_pins[BCM_GPIO_PINS]; struct gpio_pin sc_gpio_pins[BCM_GPIO_PINS]; +#ifndef ARM_INTRNG struct intr_event * sc_events[BCM_GPIO_PINS]; +#endif struct bcm_gpio_sysctl sc_sysctl[BCM_GPIO_PINS]; +#ifdef ARM_INTRNG + struct bcm_gpio_irqsrc sc_isrcs[BCM_GPIO_PINS]; +#else enum intr_trigger sc_irq_trigger[BCM_GPIO_PINS]; enum intr_polarity sc_irq_polarity[BCM_GPIO_PINS]; +#endif }; enum bcm_gpio_pud { @@ -130,6 +153,13 @@ enum bcm_gpio_pud { static struct bcm_gpio_softc *bcm_gpio_sc = NULL; +#ifdef ARM_INTRNG +static int bcm_gpio_intr_bank0(void *arg); +static int bcm_gpio_intr_bank1(void *arg); +static int bcm_gpio_pic_attach(struct bcm_gpio_softc *sc); +static int bcm_gpio_pic_detach(struct bcm_gpio_softc *sc); +#endif + static int bcm_gpio_pin_is_ro(struct bcm_gpio_softc *sc, int pin) { @@ -661,6 +691,7 @@ bcm_gpio_get_reserved_pins(struct bcm_gpio_softc *sc) return (0); } +#ifndef ARM_INTRNG static int bcm_gpio_intr(void *arg) { @@ -694,6 +725,7 @@ bcm_gpio_intr(void *arg) return (FILTER_HANDLED); } +#endif static int bcm_gpio_probe(device_t dev) @@ -709,6 +741,49 @@ bcm_gpio_probe(device_t dev) return (BUS_PROBE_DEFAULT); } +#ifdef ARM_INTRNG +static int +bcm_gpio_intr_attach(device_t dev) +{ + struct bcm_gpio_softc *sc; + + /* + * Only first two interrupt lines are used. Third line is + * mirrored second line and forth line is common for all banks. + */ + sc = device_get_softc(dev); + if (sc->sc_res[1] == NULL || sc->sc_res[2] == NULL) + return (-1); + + if (bcm_gpio_pic_attach(sc) != 0) { + device_printf(dev, "unable to attach PIC\n"); + return (-1); + } + if (bus_setup_intr(dev, sc->sc_res[1], INTR_TYPE_MISC | INTR_MPSAFE, + bcm_gpio_intr_bank0, NULL, sc, &sc->sc_intrhand[0]) != 0) + return (-1); + if (bus_setup_intr(dev, sc->sc_res[2], INTR_TYPE_MISC | INTR_MPSAFE, + bcm_gpio_intr_bank1, NULL, sc, &sc->sc_intrhand[1]) != 0) + return (-1); + + return (0); +} + +static void +bcm_gpio_intr_detach(device_t dev) +{ + struct bcm_gpio_softc *sc; + + sc = device_get_softc(dev); + if (sc->sc_intrhand[0] != NULL) + bus_teardown_intr(dev, sc->sc_res[1], sc->sc_intrhand[0]); + if (sc->sc_intrhand[1] != NULL) + bus_teardown_intr(dev, sc->sc_res[2], sc->sc_intrhand[1]); + + bcm_gpio_pic_detach(sc); +} + +#else static int bcm_gpio_intr_attach(device_t dev) { @@ -741,6 +816,7 @@ bcm_gpio_intr_detach(device_t dev) } } } +#endif static int bcm_gpio_attach(device_t dev) @@ -786,9 +862,11 @@ bcm_gpio_attach(device_t dev) sc->sc_gpio_pins[i].gp_pin = j; sc->sc_gpio_pins[i].gp_caps = BCM_GPIO_DEFAULT_CAPS; sc->sc_gpio_pins[i].gp_flags = bcm_gpio_func_flag(func); +#ifndef ARM_INTRNG /* The default is active-low interrupts. */ sc->sc_irq_trigger[i] = INTR_TRIGGER_LEVEL; sc->sc_irq_polarity[i] = INTR_POLARITY_LOW; +#endif i++; } sc->sc_gpio_npins = i; @@ -814,6 +892,289 @@ bcm_gpio_detach(device_t dev) return (EBUSY); } +#ifdef ARM_INTRNG +static inline void +bcm_gpio_isrc_eoi(struct bcm_gpio_softc *sc, struct bcm_gpio_irqsrc *bgi) +{ + uint32_t bank; + + /* Write 1 to clear. */ + bank = BCM_GPIO_BANK(bgi->bgi_irq); + BCM_GPIO_WRITE(sc, BCM_GPIO_GPEDS(bank), bgi->bgi_mask); +} + +static inline bool +bcm_gpio_isrc_is_level(struct bcm_gpio_irqsrc *bgi) +{ + uint32_t bank; + + bank = BCM_GPIO_BANK(bgi->bgi_irq); + return (bgi->bgi_reg == BCM_GPIO_GPHEN(bank) || + bgi->bgi_reg == BCM_GPIO_GPLEN(bank)); +} + +static inline void +bcm_gpio_isrc_mask(struct bcm_gpio_softc *sc, struct bcm_gpio_irqsrc *bgi) +{ + + BCM_GPIO_LOCK(sc); + BCM_GPIO_CLEAR_BITS(sc, bgi->bgi_reg, bgi->bgi_mask); + BCM_GPIO_UNLOCK(bcm_gpio_sc); +} + +static inline void +bcm_gpio_isrc_unmask(struct bcm_gpio_softc *sc, struct bcm_gpio_irqsrc *bgi) +{ + + BCM_GPIO_LOCK(sc); + BCM_GPIO_SET_BITS(sc, bgi->bgi_reg, bgi->bgi_mask); + BCM_GPIO_UNLOCK(sc); +} + +static int +bcm_gpio_intr_internal(struct bcm_gpio_softc *sc, uint32_t bank) +{ + u_int irq; + struct bcm_gpio_irqsrc *bgi; + uint32_t reg; + + /* Do not care of spurious interrupt on GPIO. */ + reg = BCM_GPIO_READ(sc, BCM_GPIO_GPEDS(bank)); + while (reg != 0) { + irq = BCM_GPIO_PINS_PER_BANK * bank + ffs(reg) - 1; + bgi = sc->sc_isrcs + irq; + if (!bcm_gpio_isrc_is_level(bgi)) + bcm_gpio_isrc_eoi(sc, bgi); + if (intr_isrc_dispatch(&bgi->bgi_isrc, + curthread->td_intr_frame) != 0) { + bcm_gpio_isrc_mask(sc, bgi); + if (bcm_gpio_isrc_is_level(bgi)) + bcm_gpio_isrc_eoi(sc, bgi); + device_printf(sc->sc_dev, "Stray irq %u disabled\n", + irq); + } + reg &= ~bgi->bgi_mask; + } + return (FILTER_HANDLED); +} + +static int +bcm_gpio_intr_bank0(void *arg) +{ + + return (bcm_gpio_intr_internal(arg, 0)); +} + +static int +bcm_gpio_intr_bank1(void *arg) +{ + + return (bcm_gpio_intr_internal(arg, 1)); +} + +static int +bcm_gpio_pic_attach(struct bcm_gpio_softc *sc) +{ + int error; + uint32_t irq; + const char *name; + + name = device_get_nameunit(sc->sc_dev); + for (irq = 0; irq < BCM_GPIO_PINS; irq++) { + sc->sc_isrcs[irq].bgi_irq = irq; + sc->sc_isrcs[irq].bgi_mask = BCM_GPIO_MASK(irq); + sc->sc_isrcs[irq].bgi_reg = 0; + + error = intr_isrc_register(&sc->sc_isrcs[irq].bgi_isrc, + sc->sc_dev, 0, "%s,%u", name, irq); + if (error != 0) + return (error); /* XXX deregister ISRCs */ + } + return (intr_pic_register(sc->sc_dev, + OF_xref_from_node(ofw_bus_get_node(sc->sc_dev)))); +} + +static int +bcm_gpio_pic_detach(struct bcm_gpio_softc *sc) +{ + + /* + * There has not been established any procedure yet + * how to detach PIC from living system correctly. + */ + device_printf(sc->sc_dev, "%s: not implemented yet\n", __func__); + return (EBUSY); +} + +static void +bcm_gpio_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_gpio_softc *sc = device_get_softc(dev); + struct bcm_gpio_irqsrc *bgi = (struct bcm_gpio_irqsrc *)isrc; + + bcm_gpio_isrc_mask(sc, bgi); +} + +static void +bcm_gpio_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_gpio_softc *sc = device_get_softc(dev); + struct bcm_gpio_irqsrc *bgi = (struct bcm_gpio_irqsrc *)isrc; + + arm_irq_memory_barrier(bgi->bgi_irq); + bcm_gpio_isrc_unmask(sc, bgi); +} + +static int +bcm_gpio_pic_map_fdt(struct bcm_gpio_softc *sc, u_int ncells, pcell_t *cells, + u_int *irqp, uint32_t *regp) +{ + u_int irq; + uint32_t reg, bank; + + /* + * The first cell is the interrupt number. + * The second cell is used to specify flags: + * bits[3:0] trigger type and level flags: + * 1 = low-to-high edge triggered. + * 2 = high-to-low edge triggered. + * 4 = active high level-sensitive. + * 8 = active low level-sensitive. + */ + if (ncells != 2) + return (EINVAL); + + irq = cells[0]; + if (irq >= BCM_GPIO_PINS || bcm_gpio_pin_is_ro(sc, irq)) + return (EINVAL); + + /* + * All interrupt types could be set for an interrupt at one moment. + * At least, the combination of 'low-to-high' and 'high-to-low' edge + * triggered interrupt types can make a sense. However, no combo is + * supported now. + */ + bank = BCM_GPIO_BANK(irq); + if (cells[1] == 1) + reg = BCM_GPIO_GPREN(bank); + else if (cells[1] == 2) + reg = BCM_GPIO_GPFEN(bank); + else if (cells[1] == 4) + reg = BCM_GPIO_GPHEN(bank); + else if (cells[1] == 8) + reg = BCM_GPIO_GPLEN(bank); + else + return (EINVAL); + + *irqp = irq; + if (regp != NULL) + *regp = reg; + return (0); +} + +static int +bcm_gpio_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + int error; + u_int irq; + struct bcm_gpio_softc *sc; + + if (data->type != INTR_MAP_DATA_FDT) + return (ENOTSUP); + + sc = device_get_softc(dev); + error = bcm_gpio_pic_map_fdt(sc, data->fdt.ncells, data->fdt.cells, + &irq, NULL); + if (error == 0) + *isrcp = &sc->sc_isrcs[irq].bgi_isrc; + return (error); +} + +static void +bcm_gpio_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_gpio_softc *sc = device_get_softc(dev); + struct bcm_gpio_irqsrc *bgi = (struct bcm_gpio_irqsrc *)isrc; + + if (bcm_gpio_isrc_is_level(bgi)) + bcm_gpio_isrc_eoi(sc, bgi); +} + +static void +bcm_gpio_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + bcm_gpio_pic_enable_intr(dev, isrc); +} + +static void +bcm_gpio_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + struct bcm_gpio_softc *sc = device_get_softc(dev); + struct bcm_gpio_irqsrc *bgi = (struct bcm_gpio_irqsrc *)isrc; + + bcm_gpio_isrc_mask(sc, bgi); + if (bcm_gpio_isrc_is_level(bgi)) + bcm_gpio_isrc_eoi(sc, bgi); +} + +static int +bcm_gpio_pic_setup_intr(device_t dev, struct intr_irqsrc *isrc, + struct resource *res, struct intr_map_data *data) +{ + u_int irq; + uint32_t bank, reg; + struct bcm_gpio_softc *sc; + struct bcm_gpio_irqsrc *bgi; + + if (data == NULL || data->type != INTR_MAP_DATA_FDT) + return (ENOTSUP); + + sc = device_get_softc(dev); + bgi = (struct bcm_gpio_irqsrc *)isrc; + + /* Get and check config for an interrupt. */ + if (bcm_gpio_pic_map_fdt(sc, data->fdt.ncells, data->fdt.cells, &irq, + ®) != 0 || bgi->bgi_irq != irq) + return (EINVAL); + + /* + * If this is a setup for another handler, + * only check that its configuration match. + */ + if (isrc->isrc_handlers != 0) + return (bgi->bgi_reg == reg ? 0 : EINVAL); + + bank = BCM_GPIO_BANK(irq); + BCM_GPIO_LOCK(sc); + BCM_GPIO_CLEAR_BITS(sc, BCM_GPIO_GPREN(bank), bgi->bgi_mask); + BCM_GPIO_CLEAR_BITS(sc, BCM_GPIO_GPFEN(bank), bgi->bgi_mask); + BCM_GPIO_CLEAR_BITS(sc, BCM_GPIO_GPHEN(bank), bgi->bgi_mask); + BCM_GPIO_CLEAR_BITS(sc, BCM_GPIO_GPLEN(bank), bgi->bgi_mask); + bgi->bgi_reg = reg; + BCM_GPIO_SET_BITS(sc, reg, bgi->bgi_mask); + BCM_GPIO_UNLOCK(sc); + return (0); +} + +static int +bcm_gpio_pic_teardown_intr(device_t dev, struct intr_irqsrc *isrc, + struct resource *res, struct intr_map_data *data) +{ + struct bcm_gpio_softc *sc = device_get_softc(dev); + struct bcm_gpio_irqsrc *bgi = (struct bcm_gpio_irqsrc *)isrc; + + if (isrc->isrc_handlers == 0) { + BCM_GPIO_LOCK(sc); + BCM_GPIO_CLEAR_BITS(sc, bgi->bgi_reg, bgi->bgi_mask); + bgi->bgi_reg = 0; + BCM_GPIO_UNLOCK(sc); + } + return (0); +} + +#else static uint32_t bcm_gpio_intr_reg(struct bcm_gpio_softc *sc, unsigned int irq, uint32_t bank) { @@ -984,6 +1345,7 @@ bcm_gpio_teardown_intr(device_t dev, device_t child, struct resource *ires, return (err); } +#endif static phandle_t bcm_gpio_get_node(device_t bus, device_t dev) @@ -1010,13 +1372,24 @@ static device_method_t bcm_gpio_methods[] = { DEVMETHOD(gpio_pin_set, bcm_gpio_pin_set), DEVMETHOD(gpio_pin_toggle, bcm_gpio_pin_toggle), +#ifdef ARM_INTRNG + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, bcm_gpio_pic_disable_intr), + DEVMETHOD(pic_enable_intr, bcm_gpio_pic_enable_intr), + DEVMETHOD(pic_map_intr, bcm_gpio_pic_map_intr), + DEVMETHOD(pic_post_filter, bcm_gpio_pic_post_filter), + DEVMETHOD(pic_post_ithread, bcm_gpio_pic_post_ithread), + DEVMETHOD(pic_pre_ithread, bcm_gpio_pic_pre_ithread), + DEVMETHOD(pic_setup_intr, bcm_gpio_pic_setup_intr), + DEVMETHOD(pic_teardown_intr, bcm_gpio_pic_teardown_intr), +#else /* Bus interface */ DEVMETHOD(bus_activate_resource, bcm_gpio_activate_resource), DEVMETHOD(bus_deactivate_resource, bcm_gpio_deactivate_resource), DEVMETHOD(bus_config_intr, bcm_gpio_config_intr), DEVMETHOD(bus_setup_intr, bcm_gpio_setup_intr), DEVMETHOD(bus_teardown_intr, bcm_gpio_teardown_intr), - +#endif /* ofw_bus interface */ DEVMETHOD(ofw_bus_get_node, bcm_gpio_get_node), diff --git a/sys/boot/fdt/dts/arm/bcm2835.dtsi b/sys/boot/fdt/dts/arm/bcm2835.dtsi index 0b73401..a1c955d 100644 --- a/sys/boot/fdt/dts/arm/bcm2835.dtsi +++ b/sys/boot/fdt/dts/arm/bcm2835.dtsi @@ -144,7 +144,7 @@ #gpio-cells = <2>; interrupt-controller; - #interrupt-cells = <1>; + #interrupt-cells = <2>; pinctrl-names = "default"; pinctrl-0 = <&pins_reserved>; diff --git a/sys/boot/fdt/dts/arm/bcm2836.dtsi b/sys/boot/fdt/dts/arm/bcm2836.dtsi index 5229d6a..5cb80af 100644 --- a/sys/boot/fdt/dts/arm/bcm2836.dtsi +++ b/sys/boot/fdt/dts/arm/bcm2836.dtsi @@ -137,7 +137,7 @@ #gpio-cells = <2>; interrupt-controller; - #interrupt-cells = <1>; + #interrupt-cells = <2>; pinctrl-names = "default"; pinctrl-0 = <&pins_reserved>; -- cgit v1.1 From 78712241dfdc26edef5f599d27536e0d154a7f7b Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 5 Apr 2016 13:47:06 +0000 Subject: Add more DPRINTF() to the ftdi driver. Now everything that can change the chip's state has a DPRINTF, with things that happen repeatedly at debug=2 level and things that happen frequently (like per-transfer IO) at debug=3. --- sys/dev/usb/serial/uftdi.c | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/sys/dev/usb/serial/uftdi.c b/sys/dev/usb/serial/uftdi.c index 136cd55..8b7e620 100644 --- a/sys/dev/usb/serial/uftdi.c +++ b/sys/dev/usb/serial/uftdi.c @@ -1178,7 +1178,7 @@ uftdi_cfg_open(struct ucom_softc *ucom) * DPRINTF() so that you can see the point at which open gets called * when debugging is enabled. */ - DPRINTF(""); + DPRINTF("\n"); } static void @@ -1190,7 +1190,7 @@ uftdi_cfg_close(struct ucom_softc *ucom) * DPRINTF() so that you can see the point at which close gets called * when debugging is enabled. */ - DPRINTF(""); + DPRINTF("\n"); } static void @@ -1202,6 +1202,8 @@ uftdi_write_callback(struct usb_xfer *xfer, usb_error_t error) uint32_t buflen; uint8_t buf[1]; + DPRINTFN(3, "\n"); + switch (USB_GET_STATE(xfer)) { default: /* Error */ if (error != USB_ERR_CANCELLED) { @@ -1262,6 +1264,8 @@ uftdi_read_callback(struct usb_xfer *xfer, usb_error_t error) int pktmax; int offset; + DPRINTFN(3, "\n"); + usbd_xfer_status(xfer, &buflen, NULL, NULL, NULL); switch (USB_GET_STATE(xfer)) { @@ -1343,6 +1347,8 @@ uftdi_cfg_set_dtr(struct ucom_softc *ucom, uint8_t onoff) uint16_t wValue; struct usb_device_request req; + DPRINTFN(2, "DTR=%u\n", onoff); + wValue = onoff ? FTDI_SIO_SET_DTR_HIGH : FTDI_SIO_SET_DTR_LOW; req.bmRequestType = UT_WRITE_VENDOR_DEVICE; @@ -1362,6 +1368,8 @@ uftdi_cfg_set_rts(struct ucom_softc *ucom, uint8_t onoff) uint16_t wValue; struct usb_device_request req; + DPRINTFN(2, "RTS=%u\n", onoff); + wValue = onoff ? FTDI_SIO_SET_RTS_HIGH : FTDI_SIO_SET_RTS_LOW; req.bmRequestType = UT_WRITE_VENDOR_DEVICE; @@ -1381,6 +1389,8 @@ uftdi_cfg_set_break(struct ucom_softc *ucom, uint8_t onoff) uint16_t wValue; struct usb_device_request req; + DPRINTFN(2, "BREAK=%u\n", onoff); + if (onoff) { sc->sc_last_lcr |= FTDI_SIO_SET_BREAK; } else { @@ -1618,14 +1628,14 @@ uftdi_cfg_param(struct ucom_softc *ucom, struct termios *t) struct uftdi_param_config cfg; struct usb_device_request req; + DPRINTF("\n"); + if (uftdi_set_parm_soft(ucom, t, &cfg)) { /* should not happen */ return; } sc->sc_last_lcr = cfg.lcr; - DPRINTF("\n"); - req.bmRequestType = UT_WRITE_VENDOR_DEVICE; req.bRequest = FTDI_SIO_SET_BAUD_RATE; USETW(req.wValue, cfg.baud_lobits); @@ -1656,8 +1666,7 @@ uftdi_cfg_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr) { struct uftdi_softc *sc = ucom->sc_parent; - DPRINTF("msr=0x%02x lsr=0x%02x\n", - sc->sc_msr, sc->sc_lsr); + DPRINTFN(3, "msr=0x%02x lsr=0x%02x\n", sc->sc_msr, sc->sc_lsr); *msr = sc->sc_msr; *lsr = sc->sc_lsr; @@ -1669,6 +1678,8 @@ uftdi_reset(struct ucom_softc *ucom, int reset_type) struct uftdi_softc *sc = ucom->sc_parent; usb_device_request_t req; + DPRINTFN(2, "\n"); + req.bmRequestType = UT_WRITE_VENDOR_DEVICE; req.bRequest = FTDI_SIO_RESET; @@ -1686,6 +1697,8 @@ uftdi_set_bitmode(struct ucom_softc *ucom, uint8_t bitmode, uint8_t iomask) usb_device_request_t req; int rv; + DPRINTFN(2, "\n"); + req.bmRequestType = UT_WRITE_VENDOR_DEVICE; req.bRequest = FTDI_SIO_SET_BITMODE; @@ -1710,6 +1723,8 @@ uftdi_get_bitmode(struct ucom_softc *ucom, uint8_t *bitmode, uint8_t *iomask) struct uftdi_softc *sc = ucom->sc_parent; usb_device_request_t req; + DPRINTFN(2, "\n"); + req.bmRequestType = UT_READ_VENDOR_DEVICE; req.bRequest = FTDI_SIO_GET_BITMODE; @@ -1727,6 +1742,8 @@ uftdi_set_latency(struct ucom_softc *ucom, int latency) struct uftdi_softc *sc = ucom->sc_parent; usb_device_request_t req; + DPRINTFN(2, "\n"); + if (latency < 0 || latency > 255) return (USB_ERR_INVAL); @@ -1748,6 +1765,8 @@ uftdi_get_latency(struct ucom_softc *ucom, int *latency) usb_error_t err; uint8_t buf; + DPRINTFN(2, "\n"); + req.bmRequestType = UT_READ_VENDOR_DEVICE; req.bRequest = FTDI_SIO_GET_LATENCY; @@ -1768,6 +1787,8 @@ uftdi_set_event_char(struct ucom_softc *ucom, int echar) usb_device_request_t req; uint8_t enable; + DPRINTFN(2, "\n"); + enable = (echar == -1) ? 0 : 1; req.bmRequestType = UT_WRITE_VENDOR_DEVICE; @@ -1787,6 +1808,8 @@ uftdi_set_error_char(struct ucom_softc *ucom, int echar) usb_device_request_t req; uint8_t enable; + DPRINTFN(2, "\n"); + enable = (echar == -1) ? 0 : 1; req.bmRequestType = UT_WRITE_VENDOR_DEVICE; @@ -1807,6 +1830,8 @@ uftdi_read_eeprom(struct ucom_softc *ucom, struct uftdi_eeio *eeio) usb_error_t err; uint16_t widx, wlength, woffset; + DPRINTFN(3, "\n"); + /* Offset and length must both be evenly divisible by two. */ if ((eeio->offset | eeio->length) & 0x01) return (EINVAL); @@ -1835,6 +1860,8 @@ uftdi_write_eeprom(struct ucom_softc *ucom, struct uftdi_eeio *eeio) usb_error_t err; uint16_t widx, wlength, woffset; + DPRINTFN(3, "\n"); + /* Offset and length must both be evenly divisible by two. */ if ((eeio->offset | eeio->length) & 0x01) return (EINVAL); @@ -1861,6 +1888,8 @@ uftdi_erase_eeprom(struct ucom_softc *ucom, int confirmation) usb_device_request_t req; usb_error_t err; + DPRINTFN(2, "\n"); + /* Small effort to prevent accidental erasure. */ if (confirmation != UFTDI_CONFIRM_ERASE) return (EINVAL); @@ -1883,8 +1912,6 @@ uftdi_ioctl(struct ucom_softc *ucom, uint32_t cmd, caddr_t data, int err; struct uftdi_bitmode * mode; - DPRINTF("portno: %d cmd: %#x\n", ucom->sc_portno, cmd); - switch (cmd) { case UFTDIIOC_RESET_IO: case UFTDIIOC_RESET_RX: -- cgit v1.1 From 6b9f4e52268d02387680ce09a77527e836788887 Mon Sep 17 00:00:00 2001 From: skra Date: Tue, 5 Apr 2016 13:56:43 +0000 Subject: Fix typo. No functional change. --- sys/arm/ti/aintc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/arm/ti/aintc.c b/sys/arm/ti/aintc.c index 9a0a313..8a544d0 100644 --- a/sys/arm/ti/aintc.c +++ b/sys/arm/ti/aintc.c @@ -64,7 +64,7 @@ __FBSDID("$FreeBSD$"); #define INTC_ISR_CLEAR(x) (0x94 + ((x) * 0x20)) #define INTC_SIR_SPURIOUS_MASK 0xffffff80 -#define INTS_SIR_ACTIVE_MASK 0x7f +#define INTC_SIR_ACTIVE_MASK 0x7f #define INTC_NIRQS 128 @@ -143,7 +143,7 @@ ti_aintc_intr(void *arg) } /* Only level-sensitive interrupts detection is supported. */ - irq &= INTS_SIR_ACTIVE_MASK; + irq &= INTC_SIR_ACTIVE_MASK; if (intr_isrc_dispatch(&sc->aintc_isrcs[irq].tai_isrc, curthread->td_intr_frame) != 0) { ti_aintc_irq_mask(sc, irq); -- cgit v1.1 From 3424af5a703006b5ca649ab0bce23c1deb99429b Mon Sep 17 00:00:00 2001 From: gonzo Date: Tue, 5 Apr 2016 18:07:13 +0000 Subject: Remove misleading comment. musb supports host mode for more than two years now Spotted by: jmcneill --- sys/dev/usb/controller/musb_otg.c | 1 - 1 file changed, 1 deletion(-) diff --git a/sys/dev/usb/controller/musb_otg.c b/sys/dev/usb/controller/musb_otg.c index eba8c65..c7bc8b3 100644 --- a/sys/dev/usb/controller/musb_otg.c +++ b/sys/dev/usb/controller/musb_otg.c @@ -33,7 +33,6 @@ * This file contains the driver for the Mentor Graphics Inventra USB * 2.0 High Speed Dual-Role controller. * - * NOTE: The current implementation only supports Device Side Mode! */ #ifdef USB_GLOBAL_INCLUDE_FILE -- cgit v1.1 From 2388d857317f7bf58aacc845f0fed1feb6f1ac9d Mon Sep 17 00:00:00 2001 From: pfg Date: Tue, 5 Apr 2016 19:30:19 +0000 Subject: bhyve: Remove unneeded variable ncq. ncq was not being inititialized properly but it was not actually necessary either, so make the code smaller by removing it. CID: 1248842 Reviewed by: grehan --- usr.sbin/bhyve/pci_ahci.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/usr.sbin/bhyve/pci_ahci.c b/usr.sbin/bhyve/pci_ahci.c index d3122cb..2ef60b7 100644 --- a/usr.sbin/bhyve/pci_ahci.c +++ b/usr.sbin/bhyve/pci_ahci.c @@ -427,7 +427,6 @@ ahci_port_stop(struct ahci_port *p) struct ahci_ioreq *aior; uint8_t *cfis; int slot; - int ncq; int error; assert(pthread_mutex_isowned_np(&p->pr_sc->mtx)); @@ -445,10 +444,7 @@ ahci_port_stop(struct ahci_port *p) if (cfis[2] == ATA_WRITE_FPDMA_QUEUED || cfis[2] == ATA_READ_FPDMA_QUEUED || cfis[2] == ATA_SEND_FPDMA_QUEUED) - ncq = 1; - - if (ncq) - p->sact &= ~(1 << slot); + p->sact &= ~(1 << slot); /* NCQ */ else p->ci &= ~(1 << slot); -- cgit v1.1 From 5a410d362579e9c2efa9b1653fee765fec758882 Mon Sep 17 00:00:00 2001 From: bdrewery Date: Tue, 5 Apr 2016 21:12:03 +0000 Subject: Remove leftover _LDSCRIPTROOT missed in r297270. Sponsored by: EMC / Isilon Storage Division --- Makefile.inc1 | 2 +- Makefile.libcompat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.inc1 b/Makefile.inc1 index 7c027a8..0156650 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -450,7 +450,7 @@ LIBCOMPAT= SOFT WMAKE= ${WMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 DESTDIR=${WORLDTMP} -IMAKEENV= ${CROSSENV:N_LDSCRIPTROOT=*} +IMAKEENV= ${CROSSENV} IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 \ ${IMAKE_INSTALL} ${IMAKE_MTREE} .if empty(.MAKEFLAGS:M-n) diff --git a/Makefile.libcompat b/Makefile.libcompat index 3ab962f..2c15a9b 100644 --- a/Makefile.libcompat +++ b/Makefile.libcompat @@ -97,7 +97,7 @@ LIBCOMPATWMAKEFLAGS+= CC="${XCC} ${LIBCOMPATCFLAGS}" \ MK_TESTS=no LIBCOMPATWMAKE+= ${LIBCOMPATWMAKEENV} ${MAKE} ${LIBCOMPATWMAKEFLAGS} \ MK_MAN=no MK_HTML=no -LIBCOMPATIMAKE+= ${LIBCOMPATWMAKE:NINSTALL=*:NDESTDIR=*:N_LDSCRIPTROOT=*} \ +LIBCOMPATIMAKE+= ${LIBCOMPATWMAKE:NINSTALL=*:NDESTDIR=*} \ MK_TOOLCHAIN=no ${IMAKE_INSTALL} \ -DLIBRARIES_ONLY -- cgit v1.1 From 774be1858136d01ba4d727fefc1cb7f91e487962 Mon Sep 17 00:00:00 2001 From: avos Date: Tue, 5 Apr 2016 21:29:11 +0000 Subject: net80211: copy MAC address into iv_myaddr[] instead of aliasing it. Since IF_LLADDR() returns a non-constant pointer to the MAC address preserve a copy of it in iv_myaddr. PR: 208505 --- sys/net80211/ieee80211.c | 4 ++-- sys/net80211/ieee80211_var.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index d64667e..9816890 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -483,7 +483,7 @@ ieee80211_vap_setup(struct ieee80211com *ic, struct ieee80211vap *vap, vap->iv_htextcaps = ic->ic_htextcaps; vap->iv_opmode = opmode; vap->iv_caps |= ieee80211_opcap[opmode]; - vap->iv_myaddr = ic->ic_macaddr; + IEEE80211_ADDR_COPY(vap->iv_myaddr, ic->ic_macaddr); switch (opmode) { case IEEE80211_M_WDS: /* @@ -603,7 +603,7 @@ ieee80211_vap_attach(struct ieee80211vap *vap, ifm_change_cb_t media_change, ifp->if_baudrate = IF_Mbps(maxrate); ether_ifattach(ifp, macaddr); - vap->iv_myaddr = IF_LLADDR(ifp); + IEEE80211_ADDR_COPY(vap->iv_myaddr, IF_LLADDR(ifp)); /* hook output method setup by ether_ifattach */ vap->iv_output = ifp->if_output; ifp->if_output = ieee80211_output; diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index 393c7c3..0066854 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -362,7 +362,8 @@ struct ieee80211vap { TAILQ_ENTRY(ieee80211vap) iv_next; /* list of vap instances */ struct ieee80211com *iv_ic; /* back ptr to common state */ - const uint8_t *iv_myaddr; /* MAC address: ifp or ic */ + /* MAC address: ifp or ic */ + uint8_t iv_myaddr[IEEE80211_ADDR_LEN]; uint32_t iv_debug; /* debug msg flags */ struct ieee80211_stats iv_stats; /* statistics */ -- cgit v1.1 From 12cdd595d6c61113378938f30ea5c2f1ed5ec9ed Mon Sep 17 00:00:00 2001 From: adrian Date: Tue, 5 Apr 2016 21:54:07 +0000 Subject: [net80211] Add a new capability flag to indicate that the stack should do software A-MSDU encapsulation. Right now there's AMSDU TX/RX capability bits and they're mostly unused, however I'd like to maintain those as the general configuration, not also "please software encap AMSDU." For platforms that can do A-MSDU in firmware (iwn, iwm, etc) then their init paths can read this flag to configure A-MSDU. --- sys/net80211/ieee80211_var.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h index 0066854..fbaa782 100644 --- a/sys/net80211/ieee80211_var.h +++ b/sys/net80211/ieee80211_var.h @@ -648,6 +648,7 @@ MALLOC_DECLARE(M_80211_VAP); #define IEEE80211_C_DFS 0x00020000 /* CAPABILITY: DFS/radar avail*/ #define IEEE80211_C_MBSS 0x00040000 /* CAPABILITY: MBSS available */ #define IEEE80211_C_SWSLEEP 0x00080000 /* CAPABILITY: do sleep here */ +#define IEEE80211_C_SWAMSDUTX 0x00100000 /* CAPABILITY: software A-MSDU TX */ /* 0x7c0000 available */ #define IEEE80211_C_WPA1 0x00800000 /* CAPABILITY: WPA1 avail */ #define IEEE80211_C_WPA2 0x01000000 /* CAPABILITY: WPA2 avail */ -- cgit v1.1 From 0bbf0b11a9d552031dc1c28c796efc5fabc6aefe Mon Sep 17 00:00:00 2001 From: adrian Date: Tue, 5 Apr 2016 21:54:42 +0000 Subject: [net80211] note that M_FF will soon mean "fast-frames" or "A-MSDU." --- sys/net80211/ieee80211_freebsd.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/net80211/ieee80211_freebsd.h b/sys/net80211/ieee80211_freebsd.h index 62f3335..d27b2ca 100644 --- a/sys/net80211/ieee80211_freebsd.h +++ b/sys/net80211/ieee80211_freebsd.h @@ -263,7 +263,7 @@ struct mbuf *ieee80211_getmgtframe(uint8_t **frm, int headroom, int pktlen); #define M_EAPOL M_PROTO3 /* PAE/EAPOL frame */ #define M_PWR_SAV M_PROTO4 /* bypass PS handling */ #define M_MORE_DATA M_PROTO5 /* more data frames to follow */ -#define M_FF M_PROTO6 /* fast frame */ +#define M_FF M_PROTO6 /* fast frame / A-MSDU */ #define M_TXCB M_PROTO7 /* do tx complete callback */ #define M_AMPDU_MPDU M_PROTO8 /* ok for A-MPDU aggregation */ #define M_FRAG M_PROTO9 /* frame fragmentation */ -- cgit v1.1 From a7d48b904239807d4bba04f3a0bdafed23b4b8ca Mon Sep 17 00:00:00 2001 From: adrian Date: Tue, 5 Apr 2016 22:01:56 +0000 Subject: [net80211] rename 11n rate macros into a useful spot * begin moving the 11n macros out of ieee80211_phy.c and into a header so they can be used elsewhere. * rename some of them into the IEEE80211_* namespace. * convert HT_RC_2_MCS() to work with three-stream rates. --- sys/net80211/ieee80211_phy.c | 2 +- sys/net80211/ieee80211_phy.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/net80211/ieee80211_phy.c b/sys/net80211/ieee80211_phy.c index 4242ac0..16bbb2a 100644 --- a/sys/net80211/ieee80211_phy.c +++ b/sys/net80211/ieee80211_phy.c @@ -590,7 +590,7 @@ static const uint16_t ht40_bps[32] = { #define HT_STF 4 #define HT_LTF(n) ((n) * 4) -#define HT_RC_2_MCS(_rc) ((_rc) & 0xf) +#define HT_RC_2_MCS(_rc) ((_rc) & 0x1f) #define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1) #define IS_HT_RATE(_rc) ( (_rc) & IEEE80211_RATE_MCS) diff --git a/sys/net80211/ieee80211_phy.h b/sys/net80211/ieee80211_phy.h index cb6b358..7970388 100644 --- a/sys/net80211/ieee80211_phy.h +++ b/sys/net80211/ieee80211_phy.h @@ -194,6 +194,14 @@ uint8_t ieee80211_plcp2rate(uint8_t, enum ieee80211_phytype); */ uint8_t ieee80211_rate2plcp(int, enum ieee80211_phytype); +/* + * 802.11n rate manipulation. + */ + +#define IEEE80211_HT_RC_2_MCS(_rc) ((_rc) & 0x1f) +#define IEEE80211_HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1) +#define IEEE80211_IS_HT_RATE(_rc) ( (_rc) & IEEE80211_RATE_MCS) + uint32_t ieee80211_compute_duration_ht(uint32_t frameLen, uint16_t rate, int streams, int isht40, int isShortGI); -- cgit v1.1 From 8eb992ff9fc95337988e29eb9aa242b7669d7095 Mon Sep 17 00:00:00 2001 From: adrian Date: Tue, 5 Apr 2016 22:14:21 +0000 Subject: [urtwn] first cut of getting the fast-frames / amsdu support in shape. The urtwn hardware transmits FF/A-MSDU just fine - it takes an 802.11 frame and will dutifully send the thing. So: * bump RX queue up from 1. Why's it 1? That's really silly. * Add the "software A-MSDU" encap capability bit. * bump the TX buffer size up so we can at least send A-MSDU frames. * track active frames submitted to the NIC - we can't make assumptions about how many are in flight in the NIC though. For 88E parts we could use per-packet TX indication, but for R92 parts we can't. So, just fake it somewhat. * Kick the transmit queue when we finish reception; try to avoid stalls. * Kick the FF queue a little more regularly. A-MSDU TX won't happen until the net80211 side is done, but atheros fast-frames support should now work. Tested: * urtwn0: MAC/BB RTL8188EU, RF 6052 1T1R ; A-MSDU transmit. --- sys/dev/urtwn/if_urtwn.c | 77 +++++++++++++++++++++++++++++++++++++++++++-- sys/dev/urtwn/if_urtwnvar.h | 9 ++++-- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/sys/dev/urtwn/if_urtwn.c b/sys/dev/urtwn/if_urtwn.c index 95de7ce..ff8e516 100644 --- a/sys/dev/urtwn/if_urtwn.c +++ b/sys/dev/urtwn/if_urtwn.c @@ -70,6 +70,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#ifdef IEEE80211_SUPPORT_SUPERG +#include +#endif #include #include @@ -577,6 +580,8 @@ urtwn_attach(device_t self) #endif | IEEE80211_C_WPA /* 802.11i */ | IEEE80211_C_WME /* 802.11e */ + | IEEE80211_C_SWAMSDUTX /* Do software A-MSDU TX */ + | IEEE80211_C_FF /* Atheros fast-frames */ ; ic->ic_cryptocaps = @@ -894,6 +899,15 @@ urtwn_report_intr(struct usb_xfer *xfer, struct urtwn_data *data) buf = data->buf; stat = (struct r92c_rx_stat *)buf; + /* + * For 88E chips we can tie the FF flushing here; + * this is where we do know exactly how deep the + * transmit queue is. + * + * But it won't work for R92 chips, so we can't + * take the easy way out. + */ + if (sc->chip & URTWN_CHIP_88E) { int report_sel = MS(le32toh(stat->rxdw3), R88E_RXDW3_RPT); @@ -1101,7 +1115,7 @@ tr_setup: data = STAILQ_FIRST(&sc->sc_rx_inactive); if (data == NULL) { KASSERT(m == NULL, ("mbuf isn't NULL")); - return; + goto finish; } STAILQ_REMOVE_HEAD(&sc->sc_rx_inactive, next); STAILQ_INSERT_TAIL(&sc->sc_rx_active, data, next); @@ -1131,7 +1145,6 @@ tr_setup: (void)ieee80211_input_all(ic, m, rssi - nf, nf); } - URTWN_LOCK(sc); m = next; } @@ -1150,6 +1163,20 @@ tr_setup: } break; } +finish: + /* Finished receive; age anything left on the FF queue by a little bump */ + /* + * XXX TODO: just make this a callout timer schedule so we can + * flush the FF staging queue if we're approaching idle. + */ +#ifdef IEEE80211_SUPPORT_SUPERG + URTWN_UNLOCK(sc); + ieee80211_ff_age_all(ic, 1); + URTWN_LOCK(sc); +#endif + + /* Kick-start more transmit in case we stalled */ + urtwn_start(sc); } static void @@ -1161,6 +1188,9 @@ urtwn_txeof(struct urtwn_softc *sc, struct urtwn_data *data, int status) if (data->ni != NULL) /* not a beacon frame */ ieee80211_tx_complete(data->ni, data->m, status); + if (sc->sc_tx_n_active > 0) + sc->sc_tx_n_active--; + data->ni = NULL; data->m = NULL; @@ -1269,6 +1299,9 @@ static void urtwn_bulk_tx_callback(struct usb_xfer *xfer, usb_error_t error) { struct urtwn_softc *sc = usbd_xfer_softc(xfer); +#ifdef IEEE80211_SUPPORT_SUPERG + struct ieee80211com *ic = &sc->sc_ic; +#endif struct urtwn_data *data; URTWN_ASSERT_LOCKED(sc); @@ -1287,12 +1320,14 @@ tr_setup: if (data == NULL) { URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT, "%s: empty pending queue\n", __func__); + sc->sc_tx_n_active = 0; goto finish; } STAILQ_REMOVE_HEAD(&sc->sc_tx_pending, next); STAILQ_INSERT_TAIL(&sc->sc_tx_active, data, next); usbd_xfer_set_frame_data(xfer, 0, data->buf, data->buflen); usbd_transfer_submit(xfer); + sc->sc_tx_n_active++; break; default: data = STAILQ_FIRST(&sc->sc_tx_active); @@ -1307,6 +1342,35 @@ tr_setup: break; } finish: +#ifdef IEEE80211_SUPPORT_SUPERG + /* + * If the TX active queue drops below a certain + * threshold, ensure we age fast-frames out so they're + * transmitted. + */ + if (sc->sc_tx_n_active <= 1) { + /* XXX ew - net80211 should defer this for us! */ + + /* + * Note: this sc_tx_n_active currently tracks + * the number of pending transmit submissions + * and not the actual depth of the TX frames + * pending to the hardware. That means that + * we're going to end up with some sub-optimal + * aggregation behaviour. + */ + /* + * XXX TODO: just make this a callout timer schedule so we can + * flush the FF staging queue if we're approaching idle. + */ + URTWN_UNLOCK(sc); + ieee80211_ff_flush(ic, WME_AC_VO); + ieee80211_ff_flush(ic, WME_AC_VI); + ieee80211_ff_flush(ic, WME_AC_BE); + ieee80211_ff_flush(ic, WME_AC_BK); + URTWN_LOCK(sc); + } +#endif /* Kick-start more transmit */ urtwn_start(sc); } @@ -3153,6 +3217,11 @@ urtwn_start(struct urtwn_softc *sc) } ni = (struct ieee80211_node *)m->m_pkthdr.rcvif; m->m_pkthdr.rcvif = NULL; + + URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT, "%s: called; m=%p\n", + __func__, + m); + if (urtwn_tx_data(sc, ni, m, bf) != 0) { if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1); @@ -5326,6 +5395,10 @@ urtwn_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, struct urtwn_data *bf; int error; + URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT, "%s: called; m=%p\n", + __func__, + m); + /* prevent management frames from being sent if we're not ready */ URTWN_LOCK(sc); if (!(sc->sc_flags & URTWN_RUNNING)) { diff --git a/sys/dev/urtwn/if_urtwnvar.h b/sys/dev/urtwn/if_urtwnvar.h index ba8ca81..dd6d78b 100644 --- a/sys/dev/urtwn/if_urtwnvar.h +++ b/sys/dev/urtwn/if_urtwnvar.h @@ -17,12 +17,14 @@ * $FreeBSD$ */ -#define URTWN_RX_LIST_COUNT 1 +#define URTWN_RX_LIST_COUNT 64 #define URTWN_TX_LIST_COUNT 8 #define URTWN_HOST_CMD_RING_COUNT 32 -#define URTWN_RXBUFSZ (16 * 1024) -#define URTWN_TXBUFSZ (sizeof(struct r92c_tx_desc) + IEEE80211_MAX_LEN) +#define URTWN_RXBUFSZ (8 * 1024) +//#define URTWN_TXBUFSZ (sizeof(struct r92c_tx_desc) + IEEE80211_MAX_LEN) +/* Leave enough space for an A-MSDU frame */ +#define URTWN_TXBUFSZ (16 * 1024) #define URTWN_RX_DESC_SIZE (sizeof(struct r92c_rx_stat)) #define URTWN_TX_DESC_SIZE (sizeof(struct r92c_tx_desc)) @@ -195,6 +197,7 @@ struct urtwn_softc { urtwn_datahead sc_rx_inactive; struct urtwn_data sc_tx[URTWN_TX_LIST_COUNT]; urtwn_datahead sc_tx_active; + int sc_tx_n_active; urtwn_datahead sc_tx_inactive; urtwn_datahead sc_tx_pending; -- cgit v1.1 From 577607dffc5297f8f8ffb8b81c3e1b87101140d8 Mon Sep 17 00:00:00 2001 From: bapt Date: Tue, 5 Apr 2016 22:36:48 +0000 Subject: Add kern.features flags for linux and linux64 modules kern.features.linux: 1 meaning linux 32 bits binaries are supported kern.features.linux64: 1 meaning linux 64 bits binaries are supported The goal here is to help 3rd party applications (including ports) to determine if the host do support linux emulation Reviewed by: dchagin MFC after: 1 week Relnotes: yes Differential Revision: D5830 --- sys/amd64/linux/linux_sysvec.c | 1 + sys/amd64/linux32/linux32_sysvec.c | 1 + sys/i386/linux/linux_sysvec.c | 1 + 3 files changed, 3 insertions(+) diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c index 6089a90..d8f56c0 100644 --- a/sys/amd64/linux/linux_sysvec.c +++ b/sys/amd64/linux/linux_sysvec.c @@ -992,3 +992,4 @@ static moduledata_t linux64_elf_mod = { DECLARE_MODULE_TIED(linux64elf, linux64_elf_mod, SI_SUB_EXEC, SI_ORDER_ANY); MODULE_DEPEND(linux64elf, linux_common, 1, 1, 1); +FEATURE(linux64, "Linux 64bit support"); diff --git a/sys/amd64/linux32/linux32_sysvec.c b/sys/amd64/linux32/linux32_sysvec.c index 673ea4f..4c4b5a1 100644 --- a/sys/amd64/linux32/linux32_sysvec.c +++ b/sys/amd64/linux32/linux32_sysvec.c @@ -1205,3 +1205,4 @@ static moduledata_t linux_elf_mod = { DECLARE_MODULE_TIED(linuxelf, linux_elf_mod, SI_SUB_EXEC, SI_ORDER_ANY); MODULE_DEPEND(linuxelf, linux_common, 1, 1, 1); +FEATURE(linux, "Linux 32bit support"); diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c index 211ec13..2a4a49e 100644 --- a/sys/i386/linux/linux_sysvec.c +++ b/sys/i386/linux/linux_sysvec.c @@ -1197,3 +1197,4 @@ static moduledata_t linux_elf_mod = { }; DECLARE_MODULE_TIED(linuxelf, linux_elf_mod, SI_SUB_EXEC, SI_ORDER_ANY); +FEATURE(linux, "Linux 32bit support"); -- cgit v1.1 From 16ce739aba6b6217a03635a9ec0dcf2aacfb2258 Mon Sep 17 00:00:00 2001 From: pfg Date: Wed, 6 Apr 2016 00:01:03 +0000 Subject: bhyveload: fix from loading undefined size. We were setting an incorrect/undefined size and as it came out the st struct was not really being used at all. This was actually a bug but by sheer luck it had no visual effect. CID: 1194320 Reviewed by: grehan --- usr.sbin/bhyveload/bhyveload.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c index 8417f2a..9df680f 100644 --- a/usr.sbin/bhyveload/bhyveload.c +++ b/usr.sbin/bhyveload/bhyveload.c @@ -152,7 +152,6 @@ struct cb_file { static int cb_open(void *arg, const char *filename, void **hp) { - struct stat st; struct cb_file *cf; char path[PATH_MAX]; @@ -169,7 +168,7 @@ cb_open(void *arg, const char *filename, void **hp) return (errno); } - cf->cf_size = st.st_size; + cf->cf_size = cf->cf_stat.st_size; if (S_ISDIR(cf->cf_stat.st_mode)) { cf->cf_isdir = 1; cf->cf_u.dir = opendir(path); -- cgit v1.1 From 1c3eb869460f7ae9ec2fd8af93e32cd1ecff3478 Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 6 Apr 2016 00:41:06 +0000 Subject: [rsu] We don't do A-MPDU transmit right now, so don't bother registering for it. --- sys/dev/usb/wlan/if_rsu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/dev/usb/wlan/if_rsu.c b/sys/dev/usb/wlan/if_rsu.c index 5aa460b..6ee1c24 100644 --- a/sys/dev/usb/wlan/if_rsu.c +++ b/sys/dev/usb/wlan/if_rsu.c @@ -521,7 +521,9 @@ rsu_attach(device_t self) /* Enable basic HT */ ic->ic_htcaps = IEEE80211_HTC_HT | +#if 0 IEEE80211_HTC_AMPDU | +#endif IEEE80211_HTC_AMSDU | IEEE80211_HTCAP_MAXAMSDU_3839 | IEEE80211_HTCAP_SMPS_OFF; -- cgit v1.1 From 03a52ab32bbd9fcf834569605b000981f384b838 Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 6 Apr 2016 00:52:30 +0000 Subject: [urtwn] disable doing AMPDU TX. We don't do AMPDU TX for now, so don't bother setting this. --- sys/dev/urtwn/if_urtwn.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/dev/urtwn/if_urtwn.c b/sys/dev/urtwn/if_urtwn.c index ff8e516..53ff965 100644 --- a/sys/dev/urtwn/if_urtwn.c +++ b/sys/dev/urtwn/if_urtwn.c @@ -593,7 +593,9 @@ urtwn_attach(device_t self) if (urtwn_enable_11n) { device_printf(self, "enabling 11n\n"); ic->ic_htcaps = IEEE80211_HTC_HT | +#if 0 IEEE80211_HTC_AMPDU | +#endif IEEE80211_HTC_AMSDU | IEEE80211_HTCAP_MAXAMSDU_3839 | IEEE80211_HTCAP_SMPS_OFF; -- cgit v1.1 From 753486d87a2e342d74c241d1e83dc2cba81dfa67 Mon Sep 17 00:00:00 2001 From: pfg Date: Wed, 6 Apr 2016 00:55:39 +0000 Subject: Fix sed functions 'i' and 'a' from discarding leading white space. This appears to be implementation dependent but convenient and makes our sed behave more like GNU sed. Given that it is not the historic behavior, bump FreeBSD_version should userland/ports somehow depend on it. Obtained from: NetBSD (bin/49872) Reviewed by: bdrewery PR: 208554 Merge after: NEVER --- sys/sys/param.h | 2 +- usr.bin/sed/compile.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sys/sys/param.h b/sys/sys/param.h index 987453c..2f6eb7a 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1100104 /* Master, propagated to newvers */ +#define __FreeBSD_version 1100105 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, diff --git a/usr.bin/sed/compile.c b/usr.bin/sed/compile.c index 68cbbc5..2d7f8d2 100644 --- a/usr.bin/sed/compile.c +++ b/usr.bin/sed/compile.c @@ -730,7 +730,7 @@ compile_tr(char *p, struct s_tr **py) } /* - * Compile the text following an a or i command. + * Compile the text following an a, c, or i command. */ static char * compile_text(void) @@ -746,7 +746,6 @@ compile_text(void) while (cu_fgets(lbuf, sizeof(lbuf), NULL)) { op = s = text + size; p = lbuf; - EATSPACE(); for (esc_nl = 0; *p != '\0'; p++) { if (*p == '\\' && p[1] != '\0' && *++p == '\n') esc_nl = 1; -- cgit v1.1 From 262c2629ed9fdbc713b277722acfdfd72a057318 Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 6 Apr 2016 01:21:51 +0000 Subject: [net80211] Initial A-MSDU support for testing / evaluation A-MSDU is another 11n aggregation mechanism where multiple ethernet frames get LLC encapsulated (so they have a length field), padded, and put in a single MPDU (802.11 MAC frame.) This means it gets sent out as a single frame, with a single seqno, it's acked as one frame, etc. It turns out that, hah, atheros fast frames is almost but not quite like this, so I'm reusing all of the current superg/fast-frames stuff in order to actually transmit A-MSDU. Yes, this means that A-MSDU frames are also only aggregated two at a time, so it's not necessarily a huge win, but it's better than nothing. This doesn't do anything by default - the driver needs to say it does A-MSDU as well as set the AMSDU software TX capability so this code path gets exercised. For now, the only driver that enables this is urtwn. I'll enable it for rsu at some point soon. Tested: * Add an amsdu encap path to aggregate two frames, same as the fast-frames path. * Always do the superg init/teardown and node init/teardown stuff, regardless of whether the nodes are doing fast-frames (the ATH capability stuff.) That way we can reuse it for amsdu. * Don't do AMSDU for multicast/broadcast and EAPOL frames. * If we're doing A-MPDU, then don't bother doing FF/A-MSDU. We can likely do both together, but I don't want to change behaviour. * Teach the fast frames approx txtime logic to support the 11n rates. But, since we don't currently have a full "current rate" support, assume it's HT20, long-gi, etc. That way we overshoot on the TX time estimation, so we're always inside the requirements. (And we only aggregate two frames for now, so we're not really going to exceed that.) * Drop the maximum FF age default down to 2ms, otherwise we end up with some very annoyingly large latencies. TODO: * We only aggregate two ethernet frames, so I'm not checking the max A-MSDU size. But when it comes time to support >2 frames, we should obey that. Tested: * urtwn(4) --- sys/net80211/ieee80211_ht.h | 4 + sys/net80211/ieee80211_node.c | 4 +- sys/net80211/ieee80211_output.c | 123 +++++++++++++++++-------- sys/net80211/ieee80211_sta.c | 6 +- sys/net80211/ieee80211_superg.c | 198 +++++++++++++++++++++++++++++++++++----- sys/net80211/ieee80211_superg.h | 23 +++++ 6 files changed, 286 insertions(+), 72 deletions(-) diff --git a/sys/net80211/ieee80211_ht.h b/sys/net80211/ieee80211_ht.h index e2b3318..c046411 100644 --- a/sys/net80211/ieee80211_ht.h +++ b/sys/net80211/ieee80211_ht.h @@ -65,6 +65,10 @@ struct ieee80211_tx_ampdu { #define IEEE80211_AMPDU_RUNNING(tap) \ (((tap)->txa_flags & IEEE80211_AGGR_RUNNING) != 0) +/* return non-zero if AMPDU tx for the TID was NACKed */ +#define IEEE80211_AMPDU_NACKED(tap)\ + (!! ((tap)->txa_flags & IEEE80211_AGGR_NAK)) + /* return non-zero if AMPDU tx for the TID is running or started */ #define IEEE80211_AMPDU_REQUESTED(tap) \ (((tap)->txa_flags & \ diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 520687b..66afb74 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -1014,8 +1014,8 @@ node_cleanup(struct ieee80211_node *ni) if (ni->ni_flags & IEEE80211_NODE_HT) ieee80211_ht_node_cleanup(ni); #ifdef IEEE80211_SUPPORT_SUPERG - else if (ni->ni_ath_flags & IEEE80211_NODE_ATH) - ieee80211_ff_node_cleanup(ni); + /* Always do FF node cleanup; for A-MSDU */ + ieee80211_ff_node_cleanup(ni); #endif #ifdef IEEE80211_SUPPORT_MESH /* diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c index b2580d1..1882a26 100644 --- a/sys/net80211/ieee80211_output.c +++ b/sys/net80211/ieee80211_output.c @@ -191,51 +191,68 @@ ieee80211_vap_pkt_send_dest(struct ieee80211vap *vap, struct mbuf *m, * otherwise unable to establish a BA stream. */ if ((ni->ni_flags & IEEE80211_NODE_AMPDU_TX) && - (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_TX) && - (m->m_flags & M_EAPOL) == 0) { - int tid = WME_AC_TO_TID(M_WME_GETAC(m)); - struct ieee80211_tx_ampdu *tap = &ni->ni_tx_ampdu[tid]; - - ieee80211_txampdu_count_packet(tap); - if (IEEE80211_AMPDU_RUNNING(tap)) { - /* - * Operational, mark frame for aggregation. - * - * XXX do tx aggregation here - */ - m->m_flags |= M_AMPDU_MPDU; - } else if (!IEEE80211_AMPDU_REQUESTED(tap) && - ic->ic_ampdu_enable(ni, tap)) { - /* - * Not negotiated yet, request service. - */ - ieee80211_ampdu_request(ni, tap); - /* XXX hold frame for reply? */ + (vap->iv_flags_ht & IEEE80211_FHT_AMPDU_TX)) { + if ((m->m_flags & M_EAPOL) == 0) { + int tid = WME_AC_TO_TID(M_WME_GETAC(m)); + struct ieee80211_tx_ampdu *tap = &ni->ni_tx_ampdu[tid]; + + ieee80211_txampdu_count_packet(tap); + if (IEEE80211_AMPDU_RUNNING(tap)) { + /* + * Operational, mark frame for aggregation. + * + * XXX do tx aggregation here + */ + m->m_flags |= M_AMPDU_MPDU; + } else if (!IEEE80211_AMPDU_REQUESTED(tap) && + ic->ic_ampdu_enable(ni, tap)) { + /* + * Not negotiated yet, request service. + */ + ieee80211_ampdu_request(ni, tap); + /* XXX hold frame for reply? */ + } } } +#ifdef IEEE80211_SUPPORT_SUPERG /* - * XXX If we aren't doing AMPDU TX then we /could/ do - * fast-frames encapsulation, however right now this - * output logic doesn't handle that case. + * Check for AMSDU/FF; queue for aggregation * - * So we'll be limited to "fast-frames" xmit for non-11n STA - * and "no fast frames" xmit for 11n STAs. - * It'd be nice to eventually test fast-frames out by - * gracefully falling from failing A-MPDU transmission - * (driver says no, fail to negotiate it with peer) to - * using fast-frames. + * Note: we don't bother trying to do fast frames or + * A-MSDU encapsulation for 802.3 drivers. Now, we + * likely could do it for FF (because it's a magic + * atheros tunnel LLC type) but I don't think we're going + * to really need to. For A-MSDU we'd have to set the + * A-MSDU QoS bit in the wifi header, so we just plain + * can't do it. * - * Note: we can actually put A-MSDU's inside an A-MPDU, - * so hopefully we can figure out how to make that particular - * combination work right. + * Strictly speaking, we could actually /do/ A-MSDU / FF + * with A-MPDU together which for certain circumstances + * is beneficial (eg A-MSDU of TCK ACKs.) However, + * I'll ignore that for now so existing behaviour is maintained. + * Later on it would be good to make "amsdu + ampdu" configurable. */ -#ifdef IEEE80211_SUPPORT_SUPERG - else if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF)) { - m = ieee80211_ff_check(ni, m); - if (m == NULL) { - /* NB: any ni ref held on stageq */ - return (0); + else if (__predict_true((vap->iv_caps & IEEE80211_C_8023ENCAP) == 0)) { + if ((! mcast) && ieee80211_amsdu_tx_ok(ni)) { + m = ieee80211_amsdu_check(ni, m); + if (m == NULL) { + /* NB: any ni ref held on stageq */ + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, + "%s: amsdu_check queued frame\n", + __func__); + return (0); + } + } else if ((! mcast) && IEEE80211_ATH_CAP(vap, ni, + IEEE80211_NODE_FF)) { + m = ieee80211_ff_check(ni, m); + if (m == NULL) { + /* NB: any ni ref held on stageq */ + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, + "%s: ff_check queued frame\n", + __func__); + return (0); + } } } #endif /* IEEE80211_SUPPORT_SUPERG */ @@ -1229,6 +1246,7 @@ ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni, ieee80211_seq seqno; int meshhdrsize, meshae; uint8_t *qos; + int is_amsdu = 0; IEEE80211_TX_LOCK_ASSERT(ic); @@ -1383,9 +1401,19 @@ ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni, } else { #ifdef IEEE80211_SUPPORT_SUPERG /* - * Aggregated frame. + * Aggregated frame. Check if it's for AMSDU or FF. + * + * XXX TODO: IEEE80211_NODE_AMSDU* isn't implemented + * anywhere for some reason. But, since 11n requires + * AMSDU RX, we can just assume "11n" == "AMSDU". */ - m = ieee80211_ff_encap(vap, m, hdrspace + meshhdrsize, key); + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, "%s: called; M_FF\n", __func__); + if (ieee80211_amsdu_tx_ok(ni)) { + m = ieee80211_amsdu_encap(vap, m, hdrspace + meshhdrsize, key); + is_amsdu = 1; + } else { + m = ieee80211_ff_encap(vap, m, hdrspace + meshhdrsize, key); + } if (m == NULL) #endif goto bad; @@ -1521,6 +1549,13 @@ ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni, qos[1] = 0; wh->i_fc[0] |= IEEE80211_FC0_SUBTYPE_QOS; + /* + * If this is an A-MSDU then ensure we set the + * relevant field. + */ + if (is_amsdu) + qos[0] |= IEEE80211_QOS_AMSDU; + if ((m->m_flags & M_AMPDU_MPDU) == 0) { /* * NB: don't assign a sequence # to potential @@ -1544,6 +1579,14 @@ ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni, *(uint16_t *)wh->i_seq = htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT); M_SEQNO_SET(m, seqno); + + /* + * XXX TODO: we shouldn't allow EAPOL, etc that would + * be forced to be non-QoS traffic to be A-MSDU encapsulated. + */ + if (is_amsdu) + printf("%s: XXX ERROR: is_amsdu set; not QoS!\n", + __func__); } diff --git a/sys/net80211/ieee80211_sta.c b/sys/net80211/ieee80211_sta.c index 16d801c..9c1707b 100644 --- a/sys/net80211/ieee80211_sta.c +++ b/sys/net80211/ieee80211_sta.c @@ -1703,12 +1703,8 @@ sta_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, int subtype, ieee80211_setup_basic_htrates(ni, htinfo); ieee80211_node_setuptxparms(ni); ieee80211_ratectl_node_init(ni); - } else { -#ifdef IEEE80211_SUPPORT_SUPERG - if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_ATH)) - ieee80211_ff_node_init(ni); -#endif } + /* * Configure state now that we are associated. * diff --git a/sys/net80211/ieee80211_superg.c b/sys/net80211/ieee80211_superg.c index 8be098a..1879d62 100644 --- a/sys/net80211/ieee80211_superg.c +++ b/sys/net80211/ieee80211_superg.c @@ -99,18 +99,22 @@ ieee80211_superg_attach(struct ieee80211com *ic) { struct ieee80211_superg *sg; - if (ic->ic_caps & IEEE80211_C_FF) { - sg = (struct ieee80211_superg *) IEEE80211_MALLOC( - sizeof(struct ieee80211_superg), M_80211_VAP, - IEEE80211_M_NOWAIT | IEEE80211_M_ZERO); - if (sg == NULL) { - printf("%s: cannot allocate SuperG state block\n", - __func__); - return; - } - ic->ic_superg = sg; + sg = (struct ieee80211_superg *) IEEE80211_MALLOC( + sizeof(struct ieee80211_superg), M_80211_VAP, + IEEE80211_M_NOWAIT | IEEE80211_M_ZERO); + if (sg == NULL) { + printf("%s: cannot allocate SuperG state block\n", + __func__); + return; } - ieee80211_ffagemax = msecs_to_ticks(150); + ic->ic_superg = sg; + + /* + * Default to not being so aggressive for FF/AMSDU + * aging, otherwise we may hold a frame around + * for way too long before we expire it out. + */ + ieee80211_ffagemax = msecs_to_ticks(2); } void @@ -353,16 +357,15 @@ ieee80211_ff_encap(struct ieee80211vap *vap, struct mbuf *m1, int hdrspace, goto bad; } m1->m_nextpkt = NULL; + /* - * Include fast frame headers in adjusting header layout. + * Adjust to include 802.11 header requirement. */ KASSERT(m1->m_len >= sizeof(eh1), ("no ethernet header!")); ETHER_HEADER_COPY(&eh1, mtod(m1, caddr_t)); - m1 = ieee80211_mbuf_adjust(vap, - hdrspace + sizeof(struct llc) + sizeof(uint32_t) + 2 + - sizeof(struct ether_header), - key, m1); + m1 = ieee80211_mbuf_adjust(vap, hdrspace, key, m1); if (m1 == NULL) { + printf("%s: failed initial mbuf_adjust\n", __func__); /* NB: ieee80211_mbuf_adjust handles msgs+statistics */ m_freem(m2); goto bad; @@ -370,17 +373,15 @@ ieee80211_ff_encap(struct ieee80211vap *vap, struct mbuf *m1, int hdrspace, /* * Copy second frame's Ethernet header out of line - * and adjust for encapsulation headers. Note that - * we make room for padding in case there isn't room + * and adjust for possible padding in case there isn't room * at the end of first frame. */ KASSERT(m2->m_len >= sizeof(eh2), ("no ethernet header!")); ETHER_HEADER_COPY(&eh2, mtod(m2, caddr_t)); - m2 = ieee80211_mbuf_adjust(vap, - ATH_FF_MAX_HDR_PAD + sizeof(struct ether_header), - NULL, m2); + m2 = ieee80211_mbuf_adjust(vap, 4, NULL, m2); if (m2 == NULL) { /* NB: ieee80211_mbuf_adjust handles msgs+statistics */ + printf("%s: failed second \n", __func__); goto bad; } @@ -418,9 +419,8 @@ ieee80211_ff_encap(struct ieee80211vap *vap, struct mbuf *m1, int hdrspace, } /* - * Now, stick 'em together and prepend the tunnel headers; - * first the Atheros tunnel header (all zero for now) and - * then a special fast frame LLC. + * A-MSDU's are just appended; the "I'm A-MSDU!" bit is in the + * QoS header. * * XXX optimize by prepending together */ @@ -454,6 +454,7 @@ ieee80211_ff_encap(struct ieee80211vap *vap, struct mbuf *m1, int hdrspace, return m1; bad: + vap->iv_stats.is_ff_encapfail++; if (m1 != NULL) m_freem(m1); if (m2 != NULL) @@ -461,6 +462,114 @@ bad: return NULL; } +/* + * A-MSDU encapsulation. + * + * This assumes just two frames for now, since we're borrowing the + * same queuing code and infrastructure as fast-frames. + * + * There must be two packets chained with m_nextpkt. + * We do header adjustment for each, and then concatenate the mbuf chains + * to form a single frame for transmission. + */ +struct mbuf * +ieee80211_amsdu_encap(struct ieee80211vap *vap, struct mbuf *m1, int hdrspace, + struct ieee80211_key *key) +{ + struct mbuf *m2; + struct ether_header eh1, eh2; + struct mbuf *m; + int pad; + + m2 = m1->m_nextpkt; + if (m2 == NULL) { + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG, + "%s: only one frame\n", __func__); + goto bad; + } + m1->m_nextpkt = NULL; + + /* + * Include A-MSDU header in adjusting header layout. + */ + KASSERT(m1->m_len >= sizeof(eh1), ("no ethernet header!")); + ETHER_HEADER_COPY(&eh1, mtod(m1, caddr_t)); + m1 = ieee80211_mbuf_adjust(vap, + hdrspace + sizeof(struct llc) + sizeof(uint32_t) + + sizeof(struct ether_header), + key, m1); + if (m1 == NULL) { + /* NB: ieee80211_mbuf_adjust handles msgs+statistics */ + m_freem(m2); + goto bad; + } + + /* + * Copy second frame's Ethernet header out of line + * and adjust for encapsulation headers. Note that + * we make room for padding in case there isn't room + * at the end of first frame. + */ + KASSERT(m2->m_len >= sizeof(eh2), ("no ethernet header!")); + ETHER_HEADER_COPY(&eh2, mtod(m2, caddr_t)); + m2 = ieee80211_mbuf_adjust(vap, 4, NULL, m2); + if (m2 == NULL) { + /* NB: ieee80211_mbuf_adjust handles msgs+statistics */ + goto bad; + } + + /* + * Now do tunnel encapsulation. First, each + * frame gets a standard encapsulation. + */ + m1 = ieee80211_ff_encap1(vap, m1, &eh1); + if (m1 == NULL) + goto bad; + m2 = ieee80211_ff_encap1(vap, m2, &eh2); + if (m2 == NULL) + goto bad; + + /* + * Pad leading frame to a 4-byte boundary. If there + * is space at the end of the first frame, put it + * there; otherwise prepend to the front of the second + * frame. We know doing the second will always work + * because we reserve space above. We prefer appending + * as this typically has better DMA alignment properties. + */ + for (m = m1; m->m_next != NULL; m = m->m_next) + ; + pad = roundup2(m1->m_pkthdr.len, 4) - m1->m_pkthdr.len; + if (pad) { + if (M_TRAILINGSPACE(m) < pad) { /* prepend to second */ + m2->m_data -= pad; + m2->m_len += pad; + m2->m_pkthdr.len += pad; + } else { /* append to first */ + m->m_len += pad; + m1->m_pkthdr.len += pad; + } + } + + /* + * Now, stick 'em together. + */ + m->m_next = m2; /* NB: last mbuf from above */ + m1->m_pkthdr.len += m2->m_pkthdr.len; + + vap->iv_stats.is_amsdu_encap++; + + return m1; +bad: + vap->iv_stats.is_amsdu_encapfail++; + if (m1 != NULL) + m_freem(m1); + if (m2 != NULL) + m_freem(m2); + return NULL; +} + + static void ff_transmit(struct ieee80211_node *ni, struct mbuf *m) { @@ -605,6 +714,7 @@ ff_approx_txtime(struct ieee80211_node *ni, struct ieee80211com *ic = ni->ni_ic; struct ieee80211vap *vap = ni->ni_vap; uint32_t framelen; + uint32_t frame_time; /* * Approximate the frame length to be transmitted. A swag to add @@ -621,7 +731,21 @@ ff_approx_txtime(struct ieee80211_node *ni, framelen += 24; if (m2 != NULL) framelen += m2->m_pkthdr.len; - return ieee80211_compute_duration(ic->ic_rt, framelen, ni->ni_txrate, 0); + + /* + * For now, we assume non-shortgi, 20MHz, just because I want to + * at least test 802.11n. + */ + if (ni->ni_txrate & IEEE80211_RATE_MCS) + frame_time = ieee80211_compute_duration_ht(framelen, + ni->ni_txrate, + IEEE80211_HT_RC_2_STREAMS(ni->ni_txrate), + 0, /* isht40 */ + 0); /* isshortgi */ + else + frame_time = ieee80211_compute_duration(ic->ic_rt, framelen, + ni->ni_txrate, 0); + return (frame_time); } /* @@ -753,6 +877,30 @@ ieee80211_ff_check(struct ieee80211_node *ni, struct mbuf *m) return mstaged; } +struct mbuf * +ieee80211_amsdu_check(struct ieee80211_node *ni, struct mbuf *m) +{ + /* + * XXX TODO: actually enforce the node support + * and HTCAP requirements for the maximum A-MSDU + * size. + */ + + /* First: software A-MSDU transmit? */ + if (! ieee80211_amsdu_tx_ok(ni)) + return (m); + + /* Next - EAPOL? Nope, don't aggregate; we don't QoS encap them */ + if (m->m_flags & (M_EAPOL | M_MCAST | M_BCAST)) + return (m); + + /* Next - needs to be a data frame, non-broadcast, etc */ + if (ETHER_IS_MULTICAST(mtod(m, struct ether_header *)->ether_dhost)) + return (m); + + return (ieee80211_ff_check(ni, m)); +} + void ieee80211_ff_node_init(struct ieee80211_node *ni) { diff --git a/sys/net80211/ieee80211_superg.h b/sys/net80211/ieee80211_superg.h index 4df1386..ced3c9b 100644 --- a/sys/net80211/ieee80211_superg.h +++ b/sys/net80211/ieee80211_superg.h @@ -82,6 +82,27 @@ int ieee80211_parse_athparams(struct ieee80211_node *, uint8_t *, void ieee80211_ff_node_init(struct ieee80211_node *); void ieee80211_ff_node_cleanup(struct ieee80211_node *); +static inline int +ieee80211_amsdu_tx_ok(struct ieee80211_node *ni) +{ + + /* First: software A-MSDU transmit? */ + if ((ni->ni_ic->ic_caps & IEEE80211_C_SWAMSDUTX) == 0) + return (0); + + /* Next: does the VAP have AMSDU TX enabled? */ + if ((ni->ni_vap->iv_flags_ht & IEEE80211_FHT_AMSDU_TX) == 0) + return (0); + + /* Next: 11n node? (assumed that A-MSDU TX to HT nodes is ok */ + if ((ni->ni_flags & IEEE80211_NODE_HT) == 0) + return (0); + + /* ok, we can at least /do/ AMSDU to this node */ + return (1); +} + +struct mbuf * ieee80211_amsdu_check(struct ieee80211_node *ni, struct mbuf *m); struct mbuf *ieee80211_ff_check(struct ieee80211_node *, struct mbuf *); void ieee80211_ff_age(struct ieee80211com *, struct ieee80211_stageq *, int quanta); @@ -122,6 +143,8 @@ ieee80211_ff_age_all(struct ieee80211com *ic, int quanta) struct mbuf *ieee80211_ff_encap(struct ieee80211vap *, struct mbuf *, int, struct ieee80211_key *); +struct mbuf * ieee80211_amsdu_encap(struct ieee80211vap *vap, struct mbuf *m1, + int hdrspace, struct ieee80211_key *key); struct mbuf *ieee80211_ff_decap(struct ieee80211_node *, struct mbuf *); -- cgit v1.1 From e191826c54c3325354b4888c2932d94c70958753 Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 6 Apr 2016 01:22:20 +0000 Subject: [net80211] missed commit from last one - always cleanup superg state. --- sys/net80211/ieee80211_hostap.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c index 1e356dc..4227dfb 100644 --- a/sys/net80211/ieee80211_hostap.c +++ b/sys/net80211/ieee80211_hostap.c @@ -2078,8 +2078,8 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, } else if (ni->ni_flags & IEEE80211_NODE_HT) ieee80211_ht_node_cleanup(ni); #ifdef IEEE80211_SUPPORT_SUPERG - else if (ni->ni_ath_flags & IEEE80211_NODE_ATH) - ieee80211_ff_node_cleanup(ni); + /* Always do ff node cleanup; for A-MSDU */ + ieee80211_ff_node_cleanup(ni); #endif /* * Allow AMPDU operation only with unencrypted traffic @@ -2097,6 +2097,10 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, "capinfo 0x%x ucastcipher %d", capinfo, rsnparms.rsn_ucastcipher); ieee80211_ht_node_cleanup(ni); +#ifdef IEEE80211_SUPPORT_SUPERG + /* Always do ff node cleanup; for A-MSDU */ + ieee80211_ff_node_cleanup(ni); +#endif vap->iv_stats.is_ht_assoc_downgrade++; } /* -- cgit v1.1 From 53c521f0151fb7ef6aed88528de683a2cdee207d Mon Sep 17 00:00:00 2001 From: ngie Date: Wed, 6 Apr 2016 03:12:44 +0000 Subject: Chase r296204 by renaming tzsetup(1) to tzsetup(8) in the tests MFC after: 3 days X-MFC with: r296204 Sponsored by: EMC / Isilon Storage Division --- usr.sbin/etcupdate/tests/tzsetup_test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/etcupdate/tests/tzsetup_test.sh b/usr.sbin/etcupdate/tests/tzsetup_test.sh index dbdcc0e..5d3fe89 100644 --- a/usr.sbin/etcupdate/tests/tzsetup_test.sh +++ b/usr.sbin/etcupdate/tests/tzsetup_test.sh @@ -196,7 +196,7 @@ $COMMAND -nr -d $WORKDIR -D $TEST > $WORKDIR/testn.out cat > $WORKDIR/correct.out < Date: Wed, 6 Apr 2016 03:22:39 +0000 Subject: [wlanstats] Convert rssi / signal / rate to use float. * Convert rssi/signal/rate to be a single digit precision float * rssi is actually in 1/2 dBm units, so divide it by 2 --- tools/tools/net80211/wlanstats/wlanstats.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/tools/net80211/wlanstats/wlanstats.c b/tools/tools/net80211/wlanstats/wlanstats.c index 50c86fc..0e55568 100644 --- a/tools/tools/net80211/wlanstats/wlanstats.c +++ b/tools/tools/net80211/wlanstats/wlanstats.c @@ -365,13 +365,13 @@ static const struct fmt wlanstats[] = { #define S_TX_MCAST AFTER(S_TX_UCAST) { 8, "tx_mcast", "tx_mcast", "multicast data frames sent" }, #define S_RATE AFTER(S_TX_MCAST) - { 5, "rate", "rate", "current transmit rate" }, + { 7, "rate", "rate", "current transmit rate" }, #define S_RSSI AFTER(S_RATE) - { 5, "rssi", "rssi", "current rssi" }, + { 6, "rssi", "rssi", "current rssi" }, #define S_NOISE AFTER(S_RSSI) { 5, "noise", "noise", "current noise floor (dBm)" }, #define S_SIGNAL AFTER(S_NOISE) - { 5, "signal", "sig", "current signal (dBm)" }, + { 6, "signal", "sig", "current signal (dBm)" }, #define S_BEACON_BAD AFTER(S_SIGNAL) { 9, "beacon_bad", "beaconbad", "bad beacons received" }, #define S_AMPDU_BARTX AFTER(S_BEACON_BAD) @@ -635,16 +635,17 @@ wlan_getinfo(struct wlanstatfoo_p *wf, int s, char b[], size_t bs) switch (s) { case S_RATE: - snprintf(b, bs, "%uM", si->isi_txmbps/2); + snprintf(b, bs, "%.1fM", (float) si->isi_txmbps/2.0); return 1; case S_RSSI: - snprintf(b, bs, "%d", si->isi_rssi); + snprintf(b, bs, "%.1f", (float) si->isi_rssi/2.0); return 1; case S_NOISE: snprintf(b, bs, "%d", si->isi_noise); return 1; case S_SIGNAL: - snprintf(b, bs, "%d", si->isi_rssi + si->isi_noise); + snprintf(b, bs, "%.1f", (float) si->isi_rssi/2.0 + + (float) si->isi_noise); return 1; case S_RX_AUTH_FAIL_CODE: if (wf->cur.is_rx_authfail_code == 0) -- cgit v1.1 From 01f4e87387e393f55a2920e4b9be52f3541cf0f6 Mon Sep 17 00:00:00 2001 From: jhb Date: Wed, 6 Apr 2016 04:10:22 +0000 Subject: Convert pci_delete_child() to a bus_child_deleted() method. Instead of providing a wrapper around device_delete_child() that the PCI bus and child bus drivers must call explicitly, move the bulk of the logic from pci_delete_child() into a bus_child_deleted() method (pci_child_deleted()). This allows PCI devices to be safely deleted via device_delete_child(). - Add a bus_child_deleted method to the ACPI PCI bus which clears the device_t associated with the corresponding ACPI handle in addition to the normal PCI bus cleanup. - Change cardbus_detach_card to call device_delete_children() and move CardBus-specific delete logic into a new cardbus_child_deleted() method. - Use device_delete_child() instead of pci_delete_child() in the SRIOV code. - Add a bus_child_deleted method to the OpenFirmware PCI bus drivers which frees the OpenFirmware device info for each PCI device. Reviewed by: imp Tested on: amd64 (CardBus and PCI-e hotplug) Differential Revision: https://reviews.freebsd.org/D5831 --- sys/dev/acpica/acpi_pci.c | 12 ++++++++++++ sys/dev/cardbus/cardbus.c | 36 ++++++++++++++++++------------------ sys/dev/pci/pci.c | 15 ++++++++------- sys/dev/pci/pci_iov.c | 4 ++-- sys/dev/pci/pci_private.h | 2 +- sys/powerpc/ofw/ofw_pcibus.c | 12 ++++++++++++ sys/sparc64/pci/ofw_pcibus.c | 12 ++++++++++++ 7 files changed, 65 insertions(+), 28 deletions(-) diff --git a/sys/dev/acpica/acpi_pci.c b/sys/dev/acpica/acpi_pci.c index 9509f82..09cecc3 100644 --- a/sys/dev/acpica/acpi_pci.c +++ b/sys/dev/acpica/acpi_pci.c @@ -70,6 +70,7 @@ CTASSERT(ACPI_STATE_D2 == PCI_POWERSTATE_D2); CTASSERT(ACPI_STATE_D3 == PCI_POWERSTATE_D3); static int acpi_pci_attach(device_t dev); +static void acpi_pci_child_deleted(device_t dev, device_t child); static int acpi_pci_child_location_str_method(device_t cbdev, device_t child, char *buf, size_t buflen); static int acpi_pci_probe(device_t dev); @@ -97,6 +98,7 @@ static device_method_t acpi_pci_methods[] = { /* Bus interface */ DEVMETHOD(bus_read_ivar, acpi_pci_read_ivar), DEVMETHOD(bus_write_ivar, acpi_pci_write_ivar), + DEVMETHOD(bus_child_deleted, acpi_pci_child_deleted), DEVMETHOD(bus_child_location_str, acpi_pci_child_location_str_method), DEVMETHOD(bus_get_dma_tag, acpi_pci_get_dma_tag), DEVMETHOD(bus_get_domain, acpi_get_domain), @@ -153,6 +155,16 @@ acpi_pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value) return (pci_write_ivar(dev, child, which, value)); } +static void +acpi_pci_child_deleted(device_t dev, device_t child) +{ + struct acpi_pci_devinfo *dinfo = device_get_ivars(child); + + if (acpi_get_device(dinfo->ap_handle) == child) + AcpiDetachData(dinfo->ap_handle, acpi_fake_objhandler); + pci_child_deleted(dev, child); +} + static int acpi_pci_child_location_str_method(device_t cbdev, device_t child, char *buf, size_t buflen) diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c index b33f462a..e785b0f 100644 --- a/sys/dev/cardbus/cardbus.c +++ b/sys/dev/cardbus/cardbus.c @@ -226,31 +226,30 @@ cardbus_attach_card(device_t cbdev) return (ENOENT); } +static void +cardbus_child_deleted(device_t cbdev, device_t child) +{ + struct cardbus_devinfo *dinfo = device_get_ivars(child); + + if (dinfo->pci.cfg.dev != child) + device_printf(cbdev, "devinfo dev mismatch\n"); + cardbus_device_destroy(dinfo); + pci_child_deleted(cbdev, child); +} + static int cardbus_detach_card(device_t cbdev) { - int numdevs; - device_t *devlist; - int tmp; int err = 0; - if (device_get_children(cbdev, &devlist, &numdevs) != 0) - return (ENOENT); - if (numdevs == 0) { - free(devlist, M_TEMP); - return (ENOENT); - } - - for (tmp = 0; tmp < numdevs; tmp++) { - struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]); + err = bus_generic_detach(cbdev); + if (err) + return (err); + err = device_delete_children(cbdev); + if (err) + return (err); - if (dinfo->pci.cfg.dev != devlist[tmp]) - device_printf(cbdev, "devinfo dev mismatch\n"); - cardbus_device_destroy(dinfo); - pci_delete_child(cbdev, devlist[tmp]); - } POWER_DISABLE_SOCKET(device_get_parent(cbdev), cbdev); - free(devlist, M_TEMP); return (err); } @@ -335,6 +334,7 @@ static device_method_t cardbus_methods[] = { DEVMETHOD(device_resume, cardbus_resume), /* Bus interface */ + DEVMETHOD(bus_child_deleted, cardbus_child_deleted), DEVMETHOD(bus_get_dma_tag, bus_generic_get_dma_tag), DEVMETHOD(bus_read_ivar, cardbus_read_ivar), DEVMETHOD(bus_driver_added, cardbus_driver_added), diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 8343181..fbe9abd 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -161,6 +161,7 @@ static device_method_t pci_methods[] = { DEVMETHOD(bus_release_resource, pci_release_resource), DEVMETHOD(bus_activate_resource, pci_activate_resource), DEVMETHOD(bus_deactivate_resource, pci_deactivate_resource), + DEVMETHOD(bus_child_deleted, pci_child_deleted), DEVMETHOD(bus_child_detached, pci_child_detached), DEVMETHOD(bus_child_pnpinfo_str, pci_child_pnpinfo_str_method), DEVMETHOD(bus_child_location_str, pci_child_location_str_method), @@ -5194,7 +5195,7 @@ pci_deactivate_resource(device_t dev, device_t child, int type, } void -pci_delete_child(device_t dev, device_t child) +pci_child_deleted(device_t dev, device_t child) { struct resource_list_entry *rle; struct resource_list *rl; @@ -5203,12 +5204,13 @@ pci_delete_child(device_t dev, device_t child) dinfo = device_get_ivars(child); rl = &dinfo->resources; - if (device_is_attached(child)) - device_detach(child); - /* Turn off access to resources we're about to free */ - pci_write_config(child, PCIR_COMMAND, pci_read_config(child, - PCIR_COMMAND, 2) & ~(PCIM_CMD_MEMEN | PCIM_CMD_PORTEN), 2); + if (bus_child_present(child) != 0) { + pci_write_config(child, PCIR_COMMAND, pci_read_config(child, + PCIR_COMMAND, 2) & ~(PCIM_CMD_MEMEN | PCIM_CMD_PORTEN), 2); + + pci_disable_busmaster(child); + } /* Free all allocated resources */ STAILQ_FOREACH(rle, rl, link) { @@ -5229,7 +5231,6 @@ pci_delete_child(device_t dev, device_t child) } resource_list_free(rl); - device_delete_child(dev, child); pci_freecfg(dinfo); } diff --git a/sys/dev/pci/pci_iov.c b/sys/dev/pci/pci_iov.c index 8189ffb..d216557 100644 --- a/sys/dev/pci/pci_iov.c +++ b/sys/dev/pci/pci_iov.c @@ -640,7 +640,7 @@ pci_iov_enumerate_vfs(struct pci_devinfo *dinfo, const nvlist_t *config, error = PCI_IOV_ADD_VF(dev, i, driver_config); if (error != 0) { device_printf(dev, "Failed to add VF %d\n", i); - pci_delete_child(bus, vf); + device_delete_child(bus, vf); } } @@ -833,7 +833,7 @@ pci_iov_delete(struct cdev *cdev) vf = devlist[i]; if (pci_iov_is_child_vf(iov, vf)) - pci_delete_child(bus, vf); + device_delete_child(bus, vf); } PCI_IOV_UNINIT(dev); diff --git a/sys/dev/pci/pci_private.h b/sys/dev/pci/pci_private.h index 9b018ab..e11dcfa 100644 --- a/sys/dev/pci/pci_private.h +++ b/sys/dev/pci/pci_private.h @@ -57,7 +57,6 @@ void pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask); void pci_add_resources_ea(device_t bus, device_t dev, int alloc_iov); int pci_attach_common(device_t dev); -void pci_delete_child(device_t dev, device_t child); void pci_driver_added(device_t dev, driver_t *driver); int pci_ea_is_enabled(device_t dev, int rid); int pci_print_child(device_t dev, device_t child); @@ -122,6 +121,7 @@ struct pci_devinfo *pci_read_device(device_t pcib, int d, int b, int s, int f, size_t size); void pci_print_verbose(struct pci_devinfo *dinfo); int pci_freecfg(struct pci_devinfo *dinfo); +void pci_child_deleted(device_t dev, device_t child); void pci_child_detached(device_t dev, device_t child); int pci_child_location_str_method(device_t cbdev, device_t child, char *buf, size_t buflen); diff --git a/sys/powerpc/ofw/ofw_pcibus.c b/sys/powerpc/ofw/ofw_pcibus.c index cde3c74..4ce6e73 100644 --- a/sys/powerpc/ofw/ofw_pcibus.c +++ b/sys/powerpc/ofw/ofw_pcibus.c @@ -61,6 +61,7 @@ static device_probe_t ofw_pcibus_probe; static device_attach_t ofw_pcibus_attach; static pci_assign_interrupt_t ofw_pcibus_assign_interrupt; static ofw_bus_get_devinfo_t ofw_pcibus_get_devinfo; +static bus_child_deleted_t ofw_pcibus_child_deleted; static int ofw_pcibus_child_pnpinfo_str_method(device_t cbdev, device_t child, char *buf, size_t buflen); @@ -73,6 +74,7 @@ static device_method_t ofw_pcibus_methods[] = { DEVMETHOD(device_attach, ofw_pcibus_attach), /* Bus interface */ + DEVMETHOD(bus_child_deleted, ofw_pcibus_child_deleted), DEVMETHOD(bus_child_pnpinfo_str, ofw_pcibus_child_pnpinfo_str_method), /* PCI interface */ @@ -269,6 +271,16 @@ ofw_pcibus_enum_bus(device_t dev, u_int domain, u_int busno) } } +static void +ofw_pcibus_child_deleted(device_t dev, device_t child) +{ + struct ofw_pcibus_devinfo *dinfo; + + dinfo = device_get_ivars(dev); + ofw_bus_gen_destroy_devinfo(&dinfo->opd_obdinfo); + pci_child_deleted(dev, child); +} + static int ofw_pcibus_child_pnpinfo_str_method(device_t cbdev, device_t child, char *buf, size_t buflen) diff --git a/sys/sparc64/pci/ofw_pcibus.c b/sys/sparc64/pci/ofw_pcibus.c index 92b9f76..08ffa5d 100644 --- a/sys/sparc64/pci/ofw_pcibus.c +++ b/sys/sparc64/pci/ofw_pcibus.c @@ -65,6 +65,7 @@ static void ofw_pcibus_setup_device(device_t bridge, uint32_t clock, u_int busno, u_int slot, u_int func); /* Methods */ +static bus_child_deleted_t ofw_pcibus_child_deleted; static bus_child_pnpinfo_str_t ofw_pcibus_pnpinfo_str; static device_attach_t ofw_pcibus_attach; static device_probe_t ofw_pcibus_probe; @@ -77,6 +78,7 @@ static device_method_t ofw_pcibus_methods[] = { DEVMETHOD(device_attach, ofw_pcibus_attach), /* Bus interface */ + DEVMETHOD(bus_child_deleted, ofw_pcibus_child_deleted), DEVMETHOD(bus_child_pnpinfo_str, ofw_pcibus_pnpinfo_str), /* PCI interface */ @@ -327,6 +329,16 @@ ofw_pcibus_get_devinfo(device_t bus, device_t dev) return (&dinfo->opd_obdinfo); } +static void +ofw_pcibus_child_deleted(device_t dev, device_t child) +{ + struct ofw_pcibus_devinfo *dinfo; + + dinfo = device_get_ivars(dev); + ofw_bus_gen_destroy_devinfo(&dinfo->opd_obdinfo); + pci_child_deleted(dev, child); +} + static int ofw_pcibus_pnpinfo_str(device_t dev, device_t child, char *buf, size_t buflen) -- cgit v1.1 From 1f8d2c0640ab54481001fa95f48cea15a460e121 Mon Sep 17 00:00:00 2001 From: rpokala Date: Wed, 6 Apr 2016 04:50:28 +0000 Subject: Storage Controller Interface driver - typo in unimplemented macro in scic_sds_controller_registers.h s/contoller/controller/ PR: 207336 Submitted by: Tony Narlock --- sys/dev/isci/scil/scic_sds_controller_registers.h | 2 +- sys/net/if_lagg.c | 263 +++++++++++++++++++--- sys/net/if_lagg.h | 54 ++++- 3 files changed, 279 insertions(+), 40 deletions(-) diff --git a/sys/dev/isci/scil/scic_sds_controller_registers.h b/sys/dev/isci/scil/scic_sds_controller_registers.h index e4a0fb4..81a1f3f 100644 --- a/sys/dev/isci/scil/scic_sds_controller_registers.h +++ b/sys/dev/isci/scil/scic_sds_controller_registers.h @@ -586,7 +586,7 @@ extern "C" { #define SCU_PTSGRTC_READ(controller) \ scu_ptsg_register_read( \ - contoller, \ + controller, \ real_time_clock \ ) /*@}*/ diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c index 0477122..2f425a0 100644 --- a/sys/net/if_lagg.c +++ b/sys/net/if_lagg.c @@ -101,7 +101,11 @@ static const char laggname[] = "lagg"; static void lagg_lladdr(struct lagg_softc *, uint8_t *); static void lagg_capabilities(struct lagg_softc *); static void lagg_port_lladdr(struct lagg_port *, uint8_t *, lagg_llqtype); -static void lagg_port_setlladdr(void *, int); +static void lagg_port_ops(void *, int); +static void lagg_llq_action_mtu(struct lagg_softc *, + struct lagg_llq_slist_entry *); +static void lagg_llq_action_lladdr(struct lagg_softc *, + struct lagg_llq_slist_entry *); static int lagg_port_create(struct lagg_softc *, struct ifnet *); static int lagg_port_destroy(struct lagg_port *, int); static struct mbuf *lagg_input(struct ifnet *, struct mbuf *); @@ -130,6 +134,9 @@ static int lagg_media_change(struct ifnet *); static void lagg_media_status(struct ifnet *, struct ifmediareq *); static struct lagg_port *lagg_link_active(struct lagg_softc *, struct lagg_port *); +static int lagg_change_mtu(struct ifnet *, struct ifreq *); +static void _lagg_free_llq_entries(struct lagg_llq_slist_entry *); +static void lagg_free_llq_entries(struct lagg_softc *, lagg_llq_idx); /* Simple round robin */ static void lagg_rr_attach(struct lagg_softc *); @@ -165,6 +172,24 @@ static struct mbuf *lagg_lacp_input(struct lagg_softc *, struct lagg_port *, struct mbuf *); static void lagg_lacp_lladdr(struct lagg_softc *); +/* + * This action handler shall be called from taskqueue handler for each + * submitted operation + */ +typedef void (*lagg_llq_action)(struct lagg_softc *, + struct lagg_llq_slist_entry *); + +/* + * lagg llq action Table: Called at the taskqueue context for each + * submitted operations. + * Contents SHOULD be in sync with lagg_llq_idx index. + * New entries shall be appended. + */ +static const lagg_llq_action llq_action[LAGG_LLQ_MAX] = { + lagg_llq_action_lladdr, /* Maps to LAGG_LLQ_LLADDR index */ + lagg_llq_action_mtu, /* Maps to LAGG_LLQ_MTU index */ +}; + /* lagg protocol table */ static const struct lagg_proto { lagg_proto pr_num; @@ -487,7 +512,7 @@ lagg_clone_create(struct if_clone *ifc, int unit, caddr_t params) LAGG_LOCK_INIT(sc); SLIST_INIT(&sc->sc_ports); - TASK_INIT(&sc->sc_lladdr_task, 0, lagg_port_setlladdr, sc); + TASK_INIT(&sc->sc_llq_task, 0, lagg_port_ops, sc); /* Initialise pseudo media types */ ifmedia_init(&sc->sc_media, 0, lagg_media_change, @@ -505,6 +530,10 @@ lagg_clone_create(struct if_clone *ifc, int unit, caddr_t params) ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST; ifp->if_capenable = ifp->if_capabilities = IFCAP_HWSTATS; + mtx_init(&sc->sc_mtu_ctxt.mtu_sync.lock, ifp->if_xname, + "mtu_sync_lock", MTX_DEF); + cv_init(&sc->sc_mtu_ctxt.mtu_sync.cv, "mtu_sync_cv"); + /* * Attach as an ordinary ethernet device, children will be attached * as special device IFT_IEEE8023ADLAG. @@ -553,7 +582,9 @@ lagg_clone_destroy(struct ifnet *ifp) SLIST_REMOVE(&V_lagg_list, sc, lagg_softc, sc_entries); LAGG_LIST_UNLOCK(); - taskqueue_drain(taskqueue_swi, &sc->sc_lladdr_task); + taskqueue_drain(taskqueue_swi, &sc->sc_llq_task); + cv_destroy(&sc->sc_mtu_ctxt.mtu_sync.cv); + mtx_destroy(&sc->sc_mtu_ctxt.mtu_sync.lock); LAGG_LOCK_DESTROY(sc); free(sc, M_DEVBUF); } @@ -645,7 +676,8 @@ lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr, lagg_llqtype llq_type) { struct lagg_softc *sc = lp->lp_softc; struct ifnet *ifp = lp->lp_ifp; - struct lagg_llq *llq; + struct lagg_llq_slist_entry *cmn_llq; + struct lagg_lladdr_llq_ctxt *llq_ctxt; LAGG_WLOCK_ASSERT(sc); @@ -658,51 +690,213 @@ lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr, lagg_llqtype llq_type) return; /* Check to make sure its not already queued to be changed */ - SLIST_FOREACH(llq, &sc->sc_llq_head, llq_entries) { - if (llq->llq_ifp == ifp) { + SLIST_FOREACH(cmn_llq, &sc->sc_llq[LAGG_LLQ_LLADDR], + llq_entries) { + llq_ctxt = (struct lagg_lladdr_llq_ctxt *)cmn_llq; + if (llq_ctxt->llq_ifp == ifp) { /* Update lladdr, it may have changed */ - bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN); + bcopy(lladdr, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); return; } } - llq = malloc(sizeof(struct lagg_llq), M_DEVBUF, M_NOWAIT | M_ZERO); - if (llq == NULL) /* XXX what to do */ + llq_ctxt = malloc(sizeof(struct lagg_lladdr_llq_ctxt), M_DEVBUF, + M_NOWAIT | M_ZERO); + if (llq_ctxt == NULL) /* XXX what to do */ return; - llq->llq_ifp = ifp; - llq->llq_type = llq_type; - bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN); + llq_ctxt->llq_ifp = ifp; + llq_ctxt->llq_type = llq_type; + bcopy(lladdr, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); /* XXX: We should insert to tail */ - SLIST_INSERT_HEAD(&sc->sc_llq_head, llq, llq_entries); + SLIST_INSERT_HEAD(&sc->sc_llq[LAGG_LLQ_LLADDR], + (struct lagg_llq_slist_entry *)llq_ctxt, llq_entries); - taskqueue_enqueue(taskqueue_swi, &sc->sc_lladdr_task); + taskqueue_enqueue(taskqueue_swi, &sc->sc_llq_task); } /* - * Set the interface MAC address from a taskqueue to avoid a LOR. + * Set the interface MTU, MAC address from a taskqueue to avoid a LOR. * * Set noinline to be dtrace-friendly */ static __noinline void -lagg_port_setlladdr(void *arg, int pending) +lagg_port_ops(void *arg, int pending) { struct lagg_softc *sc = (struct lagg_softc *)arg; - struct lagg_llq *llq, *head; - struct ifnet *ifp; + struct lagg_llq_slist_entry *llq_first; + lagg_llq_idx llq_idx; + + for (llq_idx = LAGG_LLQ_MIN; llq_idx < LAGG_LLQ_MAX; llq_idx++) { + LAGG_WLOCK(sc); + llq_first = SLIST_FIRST(&sc->sc_llq[llq_idx]); + SLIST_INIT(&sc->sc_llq[llq_idx]); + LAGG_WUNLOCK(sc); + + if (llq_first != NULL) + llq_action[llq_idx](sc, llq_first); + } +} - /* Grab a local reference of the queue and remove it from the softc */ +static void +lagg_llq_action_mtu(struct lagg_softc *sc, struct lagg_llq_slist_entry *first) +{ + struct lagg_llq_slist_entry *llq; + int err; + + /* Set the new MTU on the lagg interface */ LAGG_WLOCK(sc); - head = SLIST_FIRST(&sc->sc_llq_head); - SLIST_FIRST(&sc->sc_llq_head) = NULL; + sc->sc_ifp->if_mtu = ((struct lagg_mtu_llq_ctxt *)first)->llq_ifr.ifr_mtu; LAGG_WUNLOCK(sc); /* + * Traverse the queue and set the mtu on each ifp. It is safe to do + * unlocked as we have the only reference to it. + */ + err = EIO; /* In case the list is empty. */ + llq = first; + SLIST_FOREACH_FROM(llq, (struct __llqhd *)NULL, llq_entries) { + struct lagg_mtu_llq_ctxt *llq_ctxt; + + llq_ctxt = (struct lagg_mtu_llq_ctxt *)llq; + /* Set the new MTU on the physical interface */ + err = (*llq_ctxt->llq_ioctl)(llq_ctxt->llq_ifp, SIOCSIFMTU, + (caddr_t)&llq_ctxt->llq_ifr); + if (err) { + if_printf(llq_ctxt->llq_ifp, + "Failed to change MTU from %d to %d (err %d)\n", + llq_ctxt->llq_old_mtu, llq_ctxt->llq_ifr.ifr_mtu, err); + break; + } + } + + if (err) { + /* Restore the old MTU on the lagg interface */ + LAGG_WLOCK(sc); + sc->sc_ifp->if_mtu = ((struct lagg_mtu_llq_ctxt *)first)->llq_old_mtu; + LAGG_WUNLOCK(sc); + + /* Restore the old MTU on the physical interface */ + llq = first; + SLIST_FOREACH_FROM(llq, (struct __llqhd *)NULL, llq_entries) { + struct lagg_mtu_llq_ctxt *llq_ctxt; + + llq_ctxt = (struct lagg_mtu_llq_ctxt *)llq; + llq_ctxt->llq_ifr.ifr_mtu = llq_ctxt->llq_old_mtu; + err = (*llq_ctxt->llq_ioctl) + (llq_ctxt->llq_ifp, SIOCSIFMTU, (caddr_t)&llq_ctxt->llq_ifr); + if (err) { + if_printf(llq_ctxt->llq_ifp, + "Failed to restore MTU to %d (err %d)\n", + llq_ctxt->llq_old_mtu, err); + } + } + } + + /* Free the MTU LLQ entries */ + _lagg_free_llq_entries(first); + + mtx_lock(&sc->sc_mtu_ctxt.mtu_sync.lock); + sc->sc_mtu_ctxt.mtu_cmd_ret = err; + /* Signal for command completion */ + cv_signal(&sc->sc_mtu_ctxt.mtu_sync.cv); + mtx_unlock(&sc->sc_mtu_ctxt.mtu_sync.lock); +} + +static void +_lagg_free_llq_entries(struct lagg_llq_slist_entry *llq) +{ + struct lagg_llq_slist_entry *tmp_llq; + + SLIST_FOREACH_FROM_SAFE(llq, (struct __llqhd *)NULL, llq_entries, + tmp_llq) { + free(llq, M_DEVBUF); + } +} + +static void +lagg_free_llq_entries(struct lagg_softc *sc, lagg_llq_idx idx) +{ + struct lagg_llq_slist_entry *llq; + + LAGG_WLOCK_ASSERT(sc); + + llq = SLIST_FIRST(&sc->sc_llq[idx]); + SLIST_INIT(&sc->sc_llq[idx]); + + _lagg_free_llq_entries(llq); +} + +static int +lagg_change_mtu(struct ifnet *ifp, struct ifreq *ifr) +{ + struct lagg_softc *sc; + struct lagg_port *lp; + struct lagg_mtu_llq_ctxt *llq_ctxt; + int ret; + + sc = (struct lagg_softc *)ifp->if_softc; + ret = 0; + + LAGG_WLOCK(sc); + if (SLIST_EMPTY(&sc->sc_ports)) { + LAGG_WUNLOCK(sc); + return (EIO); + } else if (sc->sc_mtu_ctxt.busy) { + LAGG_WUNLOCK(sc); + return (EBUSY); + } else if (ifp->if_mtu == ifr->ifr_mtu) { + LAGG_WUNLOCK(sc); + return (0); + } + sc->sc_mtu_ctxt.busy = TRUE; + + SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) { + llq_ctxt = malloc(sizeof(struct lagg_mtu_llq_ctxt), M_DEVBUF, + M_NOWAIT); + if (llq_ctxt == NULL) { + lagg_free_llq_entries(sc, LAGG_LLQ_MTU); + ret = ENOMEM; + goto out; + } + SLIST_INSERT_HEAD(&sc->sc_llq[LAGG_LLQ_MTU], + (struct lagg_llq_slist_entry *)llq_ctxt, llq_entries); + + bcopy(ifr, &llq_ctxt->llq_ifr, sizeof(struct ifreq)); + llq_ctxt->llq_old_mtu = ifp->if_mtu; + llq_ctxt->llq_ifp = lp->lp_ifp; + llq_ctxt->llq_ioctl = lp->lp_ioctl; + } + mtx_lock(&sc->sc_mtu_ctxt.mtu_sync.lock); + taskqueue_enqueue(taskqueue_swi, &sc->sc_llq_task); + LAGG_WUNLOCK(sc); + + /* Wait for the command completion */ + cv_wait(&sc->sc_mtu_ctxt.mtu_sync.cv, &sc->sc_mtu_ctxt.mtu_sync.lock); + ret = sc->sc_mtu_ctxt.mtu_cmd_ret; + mtx_unlock(&sc->sc_mtu_ctxt.mtu_sync.lock); + LAGG_WLOCK(sc); + +out: + sc->sc_mtu_ctxt.busy = FALSE; + LAGG_WUNLOCK(sc); + return (ret); +} + +static void +lagg_llq_action_lladdr(struct lagg_softc *sc, struct lagg_llq_slist_entry *head) +{ + struct lagg_lladdr_llq_ctxt *llq_ctxt; + struct lagg_llq_slist_entry *llq; + struct ifnet *ifp; + + /* * Traverse the queue and set the lladdr on each ifp. It is safe to do * unlocked as we have the only reference to it. */ for (llq = head; llq != NULL; llq = head) { - ifp = llq->llq_ifp; + llq_ctxt = (struct lagg_lladdr_llq_ctxt *)llq; + ifp = llq_ctxt->llq_ifp; CURVNET_SET(ifp->if_vnet); @@ -711,9 +905,8 @@ lagg_port_setlladdr(void *arg, int pending) * Note that if_setlladdr() or iflladdr_event handler * may result in arp transmission / lltable updates. */ - if (llq->llq_type == LAGG_LLQTYPE_PHYS) - if_setlladdr(ifp, llq->llq_lladdr, - ETHER_ADDR_LEN); + if (llq_ctxt->llq_type == LAGG_LLQTYPE_PHYS) + if_setlladdr(ifp, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); else EVENTHANDLER_INVOKE(iflladdr_event, ifp); CURVNET_RESTORE(); @@ -877,7 +1070,8 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport) { struct lagg_softc *sc = lp->lp_softc; struct lagg_port *lp_ptr, *lp0; - struct lagg_llq *llq; + struct lagg_llq_slist_entry *cmn_llq; + struct lagg_lladdr_llq_ctxt *llq_ctxt; struct ifnet *ifp = lp->lp_ifp; uint64_t *pval, vdiff; int i; @@ -940,11 +1134,12 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport) /* Remove any pending lladdr changes from the queue */ if (lp->lp_detaching) { - SLIST_FOREACH(llq, &sc->sc_llq_head, llq_entries) { - if (llq->llq_ifp == ifp) { - SLIST_REMOVE(&sc->sc_llq_head, llq, lagg_llq, - llq_entries); - free(llq, M_DEVBUF); + SLIST_FOREACH(cmn_llq, &sc->sc_llq[LAGG_LLQ_LLADDR], llq_entries) { + llq_ctxt = (struct lagg_lladdr_llq_ctxt *)cmn_llq; + if (llq_ctxt->llq_ifp == ifp) { + SLIST_REMOVE(&sc->sc_llq[LAGG_LLQ_LLADDR], cmn_llq, + lagg_llq_slist_entry, llq_entries); + free(cmn_llq, M_DEVBUF); break; /* Only appears once */ } } @@ -1537,10 +1732,12 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) break; case SIOCSIFCAP: - case SIOCSIFMTU: - /* Do not allow the MTU or caps to be directly changed */ + /* Do not allow the CAPs to be directly changed. */ error = EINVAL; break; + case SIOCSIFMTU: + error = lagg_change_mtu(ifp, ifr); + break; default: error = ether_ioctl(ifp, cmd, data); diff --git a/sys/net/if_lagg.h b/sys/net/if_lagg.h index 334995e..11e9f2d 100644 --- a/sys/net/if_lagg.h +++ b/sys/net/if_lagg.h @@ -21,6 +21,8 @@ #ifndef _NET_LAGG_H #define _NET_LAGG_H +#include + /* * Global definitions */ @@ -207,18 +209,55 @@ typedef enum { LAGG_LLQTYPE_VIRT, /* Task related to lagg interface itself */ } lagg_llqtype; -/* List of interfaces to have the MAC address modified */ -struct lagg_llq { +/* Adding new entry here, SHOULD also have relevant entry in llq_action */ +typedef enum { + LAGG_LLQ_MIN = 0, + LAGG_LLQ_LLADDR = LAGG_LLQ_MIN, /* MAC Address index */ + LAGG_LLQ_MTU, /* MTU index */ + LAGG_LLQ_MAX /* This SHOULD be the last entry */ +} lagg_llq_idx; + +/* Common list entry definition for each taskq operation */ +struct lagg_llq_slist_entry { + SLIST_ENTRY(lagg_llq_slist_entry) llq_entries; +}; + +/* Context for lladdr llq operation part of lagg soft context */ +struct lagg_lladdr_llq_ctxt { + struct lagg_llq_slist_entry llq_cmn; /* This SHOULD be the first + member */ struct ifnet *llq_ifp; uint8_t llq_lladdr[ETHER_ADDR_LEN]; lagg_llqtype llq_type; - SLIST_ENTRY(lagg_llq) llq_entries; +}; + +/* Context for mtu llq operation part of lagg soft context */ +struct lagg_mtu_llq_ctxt { + struct lagg_llq_slist_entry llq_cmn; /* This SHOULD be the first + member */ + struct ifnet *llq_ifp; + struct ifreq llq_ifr; + uint32_t llq_old_mtu; + int (*llq_ioctl)(struct ifnet *, u_long, caddr_t); }; struct lagg_counters { uint64_t val[IFCOUNTERS]; }; +/* Conditional variables context for lagg operations */ +struct lagg_signal { + struct mtx lock; + struct cv cv; +}; + +/* Lagg MTU context */ +struct lagg_mtu_ctxt { + struct lagg_signal mtu_sync; /* Synchronize cmd completion */ + int mtu_cmd_ret; + bool busy; +}; + struct lagg_softc { struct ifnet *sc_ifp; /* virtual interface */ struct rmlock sc_mtx; @@ -236,9 +275,12 @@ struct lagg_softc { SLIST_HEAD(__tplhd, lagg_port) sc_ports; /* list of interfaces */ SLIST_ENTRY(lagg_softc) sc_entries; - struct task sc_lladdr_task; - SLIST_HEAD(__llqhd, lagg_llq) sc_llq_head; /* interfaces to program - the lladdr on */ + struct task sc_llq_task; /* SYNC & ASYNC ops + enqueued here */ + struct lagg_mtu_ctxt sc_mtu_ctxt; /* MTU programming */ + /* List of LLQs */ + SLIST_HEAD(__llqhd, lagg_llq_slist_entry) sc_llq[LAGG_LLQ_MAX]; + eventhandler_tag vlan_attach; eventhandler_tag vlan_detach; struct callout sc_callout; -- cgit v1.1 From b4cec75b570705bdb63d9d3d22ad0ca5269dd739 Mon Sep 17 00:00:00 2001 From: rpokala Date: Wed, 6 Apr 2016 04:58:20 +0000 Subject: Revert accidental submit of WIP as part of r297609 Pointyhat to: rpokala --- sys/net/if_lagg.c | 263 +++++++----------------------------------------------- sys/net/if_lagg.h | 54 ++--------- 2 files changed, 39 insertions(+), 278 deletions(-) diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c index 2f425a0..0477122 100644 --- a/sys/net/if_lagg.c +++ b/sys/net/if_lagg.c @@ -101,11 +101,7 @@ static const char laggname[] = "lagg"; static void lagg_lladdr(struct lagg_softc *, uint8_t *); static void lagg_capabilities(struct lagg_softc *); static void lagg_port_lladdr(struct lagg_port *, uint8_t *, lagg_llqtype); -static void lagg_port_ops(void *, int); -static void lagg_llq_action_mtu(struct lagg_softc *, - struct lagg_llq_slist_entry *); -static void lagg_llq_action_lladdr(struct lagg_softc *, - struct lagg_llq_slist_entry *); +static void lagg_port_setlladdr(void *, int); static int lagg_port_create(struct lagg_softc *, struct ifnet *); static int lagg_port_destroy(struct lagg_port *, int); static struct mbuf *lagg_input(struct ifnet *, struct mbuf *); @@ -134,9 +130,6 @@ static int lagg_media_change(struct ifnet *); static void lagg_media_status(struct ifnet *, struct ifmediareq *); static struct lagg_port *lagg_link_active(struct lagg_softc *, struct lagg_port *); -static int lagg_change_mtu(struct ifnet *, struct ifreq *); -static void _lagg_free_llq_entries(struct lagg_llq_slist_entry *); -static void lagg_free_llq_entries(struct lagg_softc *, lagg_llq_idx); /* Simple round robin */ static void lagg_rr_attach(struct lagg_softc *); @@ -172,24 +165,6 @@ static struct mbuf *lagg_lacp_input(struct lagg_softc *, struct lagg_port *, struct mbuf *); static void lagg_lacp_lladdr(struct lagg_softc *); -/* - * This action handler shall be called from taskqueue handler for each - * submitted operation - */ -typedef void (*lagg_llq_action)(struct lagg_softc *, - struct lagg_llq_slist_entry *); - -/* - * lagg llq action Table: Called at the taskqueue context for each - * submitted operations. - * Contents SHOULD be in sync with lagg_llq_idx index. - * New entries shall be appended. - */ -static const lagg_llq_action llq_action[LAGG_LLQ_MAX] = { - lagg_llq_action_lladdr, /* Maps to LAGG_LLQ_LLADDR index */ - lagg_llq_action_mtu, /* Maps to LAGG_LLQ_MTU index */ -}; - /* lagg protocol table */ static const struct lagg_proto { lagg_proto pr_num; @@ -512,7 +487,7 @@ lagg_clone_create(struct if_clone *ifc, int unit, caddr_t params) LAGG_LOCK_INIT(sc); SLIST_INIT(&sc->sc_ports); - TASK_INIT(&sc->sc_llq_task, 0, lagg_port_ops, sc); + TASK_INIT(&sc->sc_lladdr_task, 0, lagg_port_setlladdr, sc); /* Initialise pseudo media types */ ifmedia_init(&sc->sc_media, 0, lagg_media_change, @@ -530,10 +505,6 @@ lagg_clone_create(struct if_clone *ifc, int unit, caddr_t params) ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST; ifp->if_capenable = ifp->if_capabilities = IFCAP_HWSTATS; - mtx_init(&sc->sc_mtu_ctxt.mtu_sync.lock, ifp->if_xname, - "mtu_sync_lock", MTX_DEF); - cv_init(&sc->sc_mtu_ctxt.mtu_sync.cv, "mtu_sync_cv"); - /* * Attach as an ordinary ethernet device, children will be attached * as special device IFT_IEEE8023ADLAG. @@ -582,9 +553,7 @@ lagg_clone_destroy(struct ifnet *ifp) SLIST_REMOVE(&V_lagg_list, sc, lagg_softc, sc_entries); LAGG_LIST_UNLOCK(); - taskqueue_drain(taskqueue_swi, &sc->sc_llq_task); - cv_destroy(&sc->sc_mtu_ctxt.mtu_sync.cv); - mtx_destroy(&sc->sc_mtu_ctxt.mtu_sync.lock); + taskqueue_drain(taskqueue_swi, &sc->sc_lladdr_task); LAGG_LOCK_DESTROY(sc); free(sc, M_DEVBUF); } @@ -676,8 +645,7 @@ lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr, lagg_llqtype llq_type) { struct lagg_softc *sc = lp->lp_softc; struct ifnet *ifp = lp->lp_ifp; - struct lagg_llq_slist_entry *cmn_llq; - struct lagg_lladdr_llq_ctxt *llq_ctxt; + struct lagg_llq *llq; LAGG_WLOCK_ASSERT(sc); @@ -690,213 +658,51 @@ lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr, lagg_llqtype llq_type) return; /* Check to make sure its not already queued to be changed */ - SLIST_FOREACH(cmn_llq, &sc->sc_llq[LAGG_LLQ_LLADDR], - llq_entries) { - llq_ctxt = (struct lagg_lladdr_llq_ctxt *)cmn_llq; - if (llq_ctxt->llq_ifp == ifp) { + SLIST_FOREACH(llq, &sc->sc_llq_head, llq_entries) { + if (llq->llq_ifp == ifp) { /* Update lladdr, it may have changed */ - bcopy(lladdr, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); + bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN); return; } } - llq_ctxt = malloc(sizeof(struct lagg_lladdr_llq_ctxt), M_DEVBUF, - M_NOWAIT | M_ZERO); - if (llq_ctxt == NULL) /* XXX what to do */ + llq = malloc(sizeof(struct lagg_llq), M_DEVBUF, M_NOWAIT | M_ZERO); + if (llq == NULL) /* XXX what to do */ return; - llq_ctxt->llq_ifp = ifp; - llq_ctxt->llq_type = llq_type; - bcopy(lladdr, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); + llq->llq_ifp = ifp; + llq->llq_type = llq_type; + bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN); /* XXX: We should insert to tail */ - SLIST_INSERT_HEAD(&sc->sc_llq[LAGG_LLQ_LLADDR], - (struct lagg_llq_slist_entry *)llq_ctxt, llq_entries); + SLIST_INSERT_HEAD(&sc->sc_llq_head, llq, llq_entries); - taskqueue_enqueue(taskqueue_swi, &sc->sc_llq_task); + taskqueue_enqueue(taskqueue_swi, &sc->sc_lladdr_task); } /* - * Set the interface MTU, MAC address from a taskqueue to avoid a LOR. + * Set the interface MAC address from a taskqueue to avoid a LOR. * * Set noinline to be dtrace-friendly */ static __noinline void -lagg_port_ops(void *arg, int pending) +lagg_port_setlladdr(void *arg, int pending) { struct lagg_softc *sc = (struct lagg_softc *)arg; - struct lagg_llq_slist_entry *llq_first; - lagg_llq_idx llq_idx; - - for (llq_idx = LAGG_LLQ_MIN; llq_idx < LAGG_LLQ_MAX; llq_idx++) { - LAGG_WLOCK(sc); - llq_first = SLIST_FIRST(&sc->sc_llq[llq_idx]); - SLIST_INIT(&sc->sc_llq[llq_idx]); - LAGG_WUNLOCK(sc); - - if (llq_first != NULL) - llq_action[llq_idx](sc, llq_first); - } -} - -static void -lagg_llq_action_mtu(struct lagg_softc *sc, struct lagg_llq_slist_entry *first) -{ - struct lagg_llq_slist_entry *llq; - int err; - - /* Set the new MTU on the lagg interface */ - LAGG_WLOCK(sc); - sc->sc_ifp->if_mtu = ((struct lagg_mtu_llq_ctxt *)first)->llq_ifr.ifr_mtu; - LAGG_WUNLOCK(sc); - - /* - * Traverse the queue and set the mtu on each ifp. It is safe to do - * unlocked as we have the only reference to it. - */ - err = EIO; /* In case the list is empty. */ - llq = first; - SLIST_FOREACH_FROM(llq, (struct __llqhd *)NULL, llq_entries) { - struct lagg_mtu_llq_ctxt *llq_ctxt; - - llq_ctxt = (struct lagg_mtu_llq_ctxt *)llq; - /* Set the new MTU on the physical interface */ - err = (*llq_ctxt->llq_ioctl)(llq_ctxt->llq_ifp, SIOCSIFMTU, - (caddr_t)&llq_ctxt->llq_ifr); - if (err) { - if_printf(llq_ctxt->llq_ifp, - "Failed to change MTU from %d to %d (err %d)\n", - llq_ctxt->llq_old_mtu, llq_ctxt->llq_ifr.ifr_mtu, err); - break; - } - } - - if (err) { - /* Restore the old MTU on the lagg interface */ - LAGG_WLOCK(sc); - sc->sc_ifp->if_mtu = ((struct lagg_mtu_llq_ctxt *)first)->llq_old_mtu; - LAGG_WUNLOCK(sc); - - /* Restore the old MTU on the physical interface */ - llq = first; - SLIST_FOREACH_FROM(llq, (struct __llqhd *)NULL, llq_entries) { - struct lagg_mtu_llq_ctxt *llq_ctxt; - - llq_ctxt = (struct lagg_mtu_llq_ctxt *)llq; - llq_ctxt->llq_ifr.ifr_mtu = llq_ctxt->llq_old_mtu; - err = (*llq_ctxt->llq_ioctl) - (llq_ctxt->llq_ifp, SIOCSIFMTU, (caddr_t)&llq_ctxt->llq_ifr); - if (err) { - if_printf(llq_ctxt->llq_ifp, - "Failed to restore MTU to %d (err %d)\n", - llq_ctxt->llq_old_mtu, err); - } - } - } - - /* Free the MTU LLQ entries */ - _lagg_free_llq_entries(first); - - mtx_lock(&sc->sc_mtu_ctxt.mtu_sync.lock); - sc->sc_mtu_ctxt.mtu_cmd_ret = err; - /* Signal for command completion */ - cv_signal(&sc->sc_mtu_ctxt.mtu_sync.cv); - mtx_unlock(&sc->sc_mtu_ctxt.mtu_sync.lock); -} - -static void -_lagg_free_llq_entries(struct lagg_llq_slist_entry *llq) -{ - struct lagg_llq_slist_entry *tmp_llq; - - SLIST_FOREACH_FROM_SAFE(llq, (struct __llqhd *)NULL, llq_entries, - tmp_llq) { - free(llq, M_DEVBUF); - } -} - -static void -lagg_free_llq_entries(struct lagg_softc *sc, lagg_llq_idx idx) -{ - struct lagg_llq_slist_entry *llq; - - LAGG_WLOCK_ASSERT(sc); - - llq = SLIST_FIRST(&sc->sc_llq[idx]); - SLIST_INIT(&sc->sc_llq[idx]); - - _lagg_free_llq_entries(llq); -} - -static int -lagg_change_mtu(struct ifnet *ifp, struct ifreq *ifr) -{ - struct lagg_softc *sc; - struct lagg_port *lp; - struct lagg_mtu_llq_ctxt *llq_ctxt; - int ret; - - sc = (struct lagg_softc *)ifp->if_softc; - ret = 0; - - LAGG_WLOCK(sc); - if (SLIST_EMPTY(&sc->sc_ports)) { - LAGG_WUNLOCK(sc); - return (EIO); - } else if (sc->sc_mtu_ctxt.busy) { - LAGG_WUNLOCK(sc); - return (EBUSY); - } else if (ifp->if_mtu == ifr->ifr_mtu) { - LAGG_WUNLOCK(sc); - return (0); - } - sc->sc_mtu_ctxt.busy = TRUE; - - SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) { - llq_ctxt = malloc(sizeof(struct lagg_mtu_llq_ctxt), M_DEVBUF, - M_NOWAIT); - if (llq_ctxt == NULL) { - lagg_free_llq_entries(sc, LAGG_LLQ_MTU); - ret = ENOMEM; - goto out; - } - SLIST_INSERT_HEAD(&sc->sc_llq[LAGG_LLQ_MTU], - (struct lagg_llq_slist_entry *)llq_ctxt, llq_entries); - - bcopy(ifr, &llq_ctxt->llq_ifr, sizeof(struct ifreq)); - llq_ctxt->llq_old_mtu = ifp->if_mtu; - llq_ctxt->llq_ifp = lp->lp_ifp; - llq_ctxt->llq_ioctl = lp->lp_ioctl; - } - mtx_lock(&sc->sc_mtu_ctxt.mtu_sync.lock); - taskqueue_enqueue(taskqueue_swi, &sc->sc_llq_task); - LAGG_WUNLOCK(sc); + struct lagg_llq *llq, *head; + struct ifnet *ifp; - /* Wait for the command completion */ - cv_wait(&sc->sc_mtu_ctxt.mtu_sync.cv, &sc->sc_mtu_ctxt.mtu_sync.lock); - ret = sc->sc_mtu_ctxt.mtu_cmd_ret; - mtx_unlock(&sc->sc_mtu_ctxt.mtu_sync.lock); + /* Grab a local reference of the queue and remove it from the softc */ LAGG_WLOCK(sc); - -out: - sc->sc_mtu_ctxt.busy = FALSE; + head = SLIST_FIRST(&sc->sc_llq_head); + SLIST_FIRST(&sc->sc_llq_head) = NULL; LAGG_WUNLOCK(sc); - return (ret); -} - -static void -lagg_llq_action_lladdr(struct lagg_softc *sc, struct lagg_llq_slist_entry *head) -{ - struct lagg_lladdr_llq_ctxt *llq_ctxt; - struct lagg_llq_slist_entry *llq; - struct ifnet *ifp; /* * Traverse the queue and set the lladdr on each ifp. It is safe to do * unlocked as we have the only reference to it. */ for (llq = head; llq != NULL; llq = head) { - llq_ctxt = (struct lagg_lladdr_llq_ctxt *)llq; - ifp = llq_ctxt->llq_ifp; + ifp = llq->llq_ifp; CURVNET_SET(ifp->if_vnet); @@ -905,8 +711,9 @@ lagg_llq_action_lladdr(struct lagg_softc *sc, struct lagg_llq_slist_entry *head) * Note that if_setlladdr() or iflladdr_event handler * may result in arp transmission / lltable updates. */ - if (llq_ctxt->llq_type == LAGG_LLQTYPE_PHYS) - if_setlladdr(ifp, llq_ctxt->llq_lladdr, ETHER_ADDR_LEN); + if (llq->llq_type == LAGG_LLQTYPE_PHYS) + if_setlladdr(ifp, llq->llq_lladdr, + ETHER_ADDR_LEN); else EVENTHANDLER_INVOKE(iflladdr_event, ifp); CURVNET_RESTORE(); @@ -1070,8 +877,7 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport) { struct lagg_softc *sc = lp->lp_softc; struct lagg_port *lp_ptr, *lp0; - struct lagg_llq_slist_entry *cmn_llq; - struct lagg_lladdr_llq_ctxt *llq_ctxt; + struct lagg_llq *llq; struct ifnet *ifp = lp->lp_ifp; uint64_t *pval, vdiff; int i; @@ -1134,12 +940,11 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport) /* Remove any pending lladdr changes from the queue */ if (lp->lp_detaching) { - SLIST_FOREACH(cmn_llq, &sc->sc_llq[LAGG_LLQ_LLADDR], llq_entries) { - llq_ctxt = (struct lagg_lladdr_llq_ctxt *)cmn_llq; - if (llq_ctxt->llq_ifp == ifp) { - SLIST_REMOVE(&sc->sc_llq[LAGG_LLQ_LLADDR], cmn_llq, - lagg_llq_slist_entry, llq_entries); - free(cmn_llq, M_DEVBUF); + SLIST_FOREACH(llq, &sc->sc_llq_head, llq_entries) { + if (llq->llq_ifp == ifp) { + SLIST_REMOVE(&sc->sc_llq_head, llq, lagg_llq, + llq_entries); + free(llq, M_DEVBUF); break; /* Only appears once */ } } @@ -1732,11 +1537,9 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) break; case SIOCSIFCAP: - /* Do not allow the CAPs to be directly changed. */ - error = EINVAL; - break; case SIOCSIFMTU: - error = lagg_change_mtu(ifp, ifr); + /* Do not allow the MTU or caps to be directly changed */ + error = EINVAL; break; default: diff --git a/sys/net/if_lagg.h b/sys/net/if_lagg.h index 11e9f2d..334995e 100644 --- a/sys/net/if_lagg.h +++ b/sys/net/if_lagg.h @@ -21,8 +21,6 @@ #ifndef _NET_LAGG_H #define _NET_LAGG_H -#include - /* * Global definitions */ @@ -209,55 +207,18 @@ typedef enum { LAGG_LLQTYPE_VIRT, /* Task related to lagg interface itself */ } lagg_llqtype; -/* Adding new entry here, SHOULD also have relevant entry in llq_action */ -typedef enum { - LAGG_LLQ_MIN = 0, - LAGG_LLQ_LLADDR = LAGG_LLQ_MIN, /* MAC Address index */ - LAGG_LLQ_MTU, /* MTU index */ - LAGG_LLQ_MAX /* This SHOULD be the last entry */ -} lagg_llq_idx; - -/* Common list entry definition for each taskq operation */ -struct lagg_llq_slist_entry { - SLIST_ENTRY(lagg_llq_slist_entry) llq_entries; -}; - -/* Context for lladdr llq operation part of lagg soft context */ -struct lagg_lladdr_llq_ctxt { - struct lagg_llq_slist_entry llq_cmn; /* This SHOULD be the first - member */ +/* List of interfaces to have the MAC address modified */ +struct lagg_llq { struct ifnet *llq_ifp; uint8_t llq_lladdr[ETHER_ADDR_LEN]; lagg_llqtype llq_type; -}; - -/* Context for mtu llq operation part of lagg soft context */ -struct lagg_mtu_llq_ctxt { - struct lagg_llq_slist_entry llq_cmn; /* This SHOULD be the first - member */ - struct ifnet *llq_ifp; - struct ifreq llq_ifr; - uint32_t llq_old_mtu; - int (*llq_ioctl)(struct ifnet *, u_long, caddr_t); + SLIST_ENTRY(lagg_llq) llq_entries; }; struct lagg_counters { uint64_t val[IFCOUNTERS]; }; -/* Conditional variables context for lagg operations */ -struct lagg_signal { - struct mtx lock; - struct cv cv; -}; - -/* Lagg MTU context */ -struct lagg_mtu_ctxt { - struct lagg_signal mtu_sync; /* Synchronize cmd completion */ - int mtu_cmd_ret; - bool busy; -}; - struct lagg_softc { struct ifnet *sc_ifp; /* virtual interface */ struct rmlock sc_mtx; @@ -275,12 +236,9 @@ struct lagg_softc { SLIST_HEAD(__tplhd, lagg_port) sc_ports; /* list of interfaces */ SLIST_ENTRY(lagg_softc) sc_entries; - struct task sc_llq_task; /* SYNC & ASYNC ops - enqueued here */ - struct lagg_mtu_ctxt sc_mtu_ctxt; /* MTU programming */ - /* List of LLQs */ - SLIST_HEAD(__llqhd, lagg_llq_slist_entry) sc_llq[LAGG_LLQ_MAX]; - + struct task sc_lladdr_task; + SLIST_HEAD(__llqhd, lagg_llq) sc_llq_head; /* interfaces to program + the lladdr on */ eventhandler_tag vlan_attach; eventhandler_tag vlan_detach; struct callout sc_callout; -- cgit v1.1 From f5a4347e1c8f2e48ca0d0185b8c27fb25c428c27 Mon Sep 17 00:00:00 2001 From: wma Date: Wed, 6 Apr 2016 05:13:36 +0000 Subject: Implement dtrace_getupcstack in ARM64 Allow using DTRACE for performance analysis of userspace applications - the function call stack can be captured. This is almost an exact copy of AMD64 solution. Obtained from: Semihalf Sponsored by: Cavium Reviewed by: emaste, gnn, jhibbits Differential Revision: https://reviews.freebsd.org/D5779 --- sys/arm64/include/frame.h | 5 ++ sys/cddl/dev/dtrace/aarch64/dtrace_isa.c | 119 ++++++++++++++++++++++++++++++- 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/sys/arm64/include/frame.h b/sys/arm64/include/frame.h index 7e644d5..6d43e13 100644 --- a/sys/arm64/include/frame.h +++ b/sys/arm64/include/frame.h @@ -49,6 +49,11 @@ struct trapframe { uint64_t tf_x[30]; }; +struct arm64_frame { + struct arm64_frame *f_frame; + u_long f_retaddr; +}; + /* * Signal frame, pushedonto the user stack */ diff --git a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c index 3d7e044..442367f 100644 --- a/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c +++ b/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c @@ -57,6 +57,7 @@ */ #define MAX_FUNCTION_SIZE 0x10000 #define MAX_PROLOGUE_SIZE 0x100 +#define MAX_USTACK_DEPTH 2048 uint8_t dtrace_fuword8_nocheck(void *); uint16_t dtrace_fuword16_nocheck(void *); @@ -111,11 +112,127 @@ dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes, } } +static int +dtrace_getustack_common(uint64_t *pcstack, int pcstack_limit, uintptr_t pc, + uintptr_t fp) +{ + volatile uint16_t *flags = + (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags; + int ret = 0; + uintptr_t oldfp; + + ASSERT(pcstack == NULL || pcstack_limit > 0); + + while (pc != 0) { + /* + * We limit the number of times we can go around this + * loop to account for a circular stack. + */ + if (ret++ >= MAX_USTACK_DEPTH) { + *flags |= CPU_DTRACE_BADSTACK; + cpu_core[curcpu].cpuc_dtrace_illval = fp; + break; + } + + if (pcstack != NULL) { + *pcstack++ = (uint64_t)pc; + pcstack_limit--; + if (pcstack_limit <= 0) + break; + } + + if (fp == 0) + break; + + pc = dtrace_fuword64((void *)(fp + + offsetof(struct arm64_frame, f_retaddr))); + fp = dtrace_fuword64((void *)fp); + + if (fp == oldfp) { + *flags |= CPU_DTRACE_BADSTACK; + cpu_core[curcpu].cpuc_dtrace_illval = fp; + break; + } + + /* + * ARM64TODO: + * This workaround might not be necessary. It needs to be + * revised and removed from all architectures if found + * unwanted. Leaving the original x86 comment for reference. + * + * This is totally bogus: if we faulted, we're going to clear + * the fault and break. This is to deal with the apparently + * broken Java stacks on x86. + */ + if (*flags & CPU_DTRACE_FAULT) { + *flags &= ~CPU_DTRACE_FAULT; + break; + } + } + + return (ret); +} + void dtrace_getupcstack(uint64_t *pcstack, int pcstack_limit) { + proc_t *p = curproc; + struct trapframe *tf; + uintptr_t pc, sp, fp; + volatile uint16_t *flags = + (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags; + int n; - printf("IMPLEMENT ME: %s\n", __func__); + if (*flags & CPU_DTRACE_FAULT) + return; + + if (pcstack_limit <= 0) + return; + + /* + * If there's no user context we still need to zero the stack. + */ + if (p == NULL || (tf = curthread->td_frame) == NULL) + goto zero; + + *pcstack++ = (uint64_t)p->p_pid; + pcstack_limit--; + + if (pcstack_limit <= 0) + return; + + pc = tf->tf_elr; + sp = tf->tf_sp; + fp = tf->tf_x[29]; + + if (DTRACE_CPUFLAG_ISSET(CPU_DTRACE_ENTRY)) { + /* + * In an entry probe. The frame pointer has not yet been + * pushed (that happens in the function prologue). The + * best approach is to add the current pc as a missing top + * of stack and back the pc up to the caller, which is stored + * at the current stack pointer address since the call + * instruction puts it there right before the branch. + */ + + *pcstack++ = (uint64_t)pc; + pcstack_limit--; + if (pcstack_limit <= 0) + return; + + pc = tf->tf_lr; + } + + n = dtrace_getustack_common(pcstack, pcstack_limit, pc, fp); + ASSERT(n >= 0); + ASSERT(n <= pcstack_limit); + + pcstack += n; + pcstack_limit -= n; + +zero: + while (pcstack_limit-- > 0) + *pcstack++ = 0; } int -- cgit v1.1 From e55c02e6f81af885baabf454832a1908013331f5 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 6 Apr 2016 11:11:31 +0000 Subject: Make CloudABI's way of doing TLS more friendly to userspace emulators. We're currently seeing how hard it would be to run CloudABI binaries on operating systems cannot be modified easily (Windows, Mac OS X). The idea is that we want to just run them without any sandboxing. Now that CloudABI executables are PIE, this is already a bit easier, but TLS is still problematic: - CloudABI executables want to write to the %fs, which typically requires extra system calls by the emulator every time it needs to switch between CloudABI's and its own TLS. - If CloudABI executables overwrite the %fs base unconditionally, it also becomes harder for the emulator to store a backup of the old value of %fs. To solve this, let's no longer overwrite %fs, but just %fs:0. As CloudABI's C library does not use a TCB, this space can now be used by an emulator to keep track of its internal state. The executable can now safely overwrite %fs:0, as long as it makes sure that the TCB is copied over to the new TLS area. Ensure that there is an initial TLS area set up when the process starts, only containing a bogus TCB. We don't really care about its contents on FreeBSD. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D5836 --- sys/amd64/cloudabi64/cloudabi64_sysvec.c | 64 +++++++++++++++++++++++++++++-- sys/arm64/cloudabi64/cloudabi64_sysvec.c | 28 +++++++++++++- sys/compat/cloudabi64/cloudabi64_module.c | 8 +++- sys/compat/cloudabi64/cloudabi64_thread.c | 10 ++++- sys/compat/cloudabi64/cloudabi64_util.h | 4 +- sys/contrib/cloudabi/cloudabi64_types.h | 7 ++++ 6 files changed, 110 insertions(+), 11 deletions(-) diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c index 16d3ef9..b94c0ef 100644 --- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c @@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -47,6 +48,45 @@ extern const char *cloudabi64_syscallnames[]; extern struct sysent cloudabi64_sysent[]; static int +cloudabi64_fixup_tcb(register_t **stack_base, struct image_params *imgp) +{ + int error; + register_t tcbptr; + + /* Place auxiliary vector and TCB on the stack. */ + error = cloudabi64_fixup(stack_base, imgp); + if (error != 0) + return (error); + + /* + * On x86-64, the TCB is referred to by %fs:0. Take some space + * from the top of the stack to store a single element array, + * containing a pointer to the TCB. %fs base will point to this. + */ + tcbptr = (register_t)*stack_base; + return (copyout(&tcbptr, --*stack_base, sizeof(tcbptr))); +} + +static void +cloudabi64_proc_setregs(struct thread *td, struct image_params *imgp, + unsigned long stack) +{ + struct trapframe *regs; + + exec_setregs(td, imgp, stack); + + /* + * The stack now contains a pointer to the TCB, the TCB itself, + * and the auxiliary vector. Let %rdx point to the auxiliary + * vector, and set %fs base to the address of the TCB. + */ + regs = td->td_frame; + regs->tf_rdi = stack + sizeof(register_t) + + roundup(sizeof(cloudabi64_tcb_t), sizeof(register_t)); + (void)cpu_set_user_tls(td, (void *)stack); +} + +static int cloudabi64_fetch_syscall_args(struct thread *td, struct syscall_args *sa) { struct trapframe *frame = td->td_frame; @@ -109,16 +149,29 @@ cloudabi64_schedtail(struct thread *td) frame->tf_rdx = td->td_tid; } -void +int cloudabi64_thread_setregs(struct thread *td, - const cloudabi64_threadattr_t *attr) + const cloudabi64_threadattr_t *attr, uint64_t tcb) { struct trapframe *frame; stack_t stack; + uint64_t tcbptr; + int error; + + /* + * On x86-64, the TCB is referred to by %fs:0. Take some space + * from the top of the stack to store a single element array, + * containing a pointer to the TCB. %fs base will point to this. + */ + tcbptr = rounddown(attr->stack + attr->stack_size - sizeof(tcbptr), + _Alignof(tcbptr)); + error = copyout(&tcb, (void *)tcbptr, sizeof(tcb)); + if (error != 0) + return (error); /* Perform standard register initialization. */ stack.ss_sp = (void *)attr->stack; - stack.ss_size = attr->stack_size; + stack.ss_size = tcbptr - attr->stack; cpu_set_upcall_kse(td, (void *)attr->entry_point, NULL, &stack); /* @@ -129,12 +182,14 @@ cloudabi64_thread_setregs(struct thread *td, frame = td->td_frame; frame->tf_rdi = td->td_tid; frame->tf_rsi = attr->argument; + + return (cpu_set_user_tls(td, (void *)tcbptr)); } static struct sysentvec cloudabi64_elf_sysvec = { .sv_size = CLOUDABI64_SYS_MAXSYSCALL, .sv_table = cloudabi64_sysent, - .sv_fixup = cloudabi64_fixup, + .sv_fixup = cloudabi64_fixup_tcb, .sv_name = "CloudABI ELF64", .sv_coredump = elf64_coredump, .sv_pagesize = PAGE_SIZE, @@ -143,6 +198,7 @@ static struct sysentvec cloudabi64_elf_sysvec = { .sv_usrstack = USRSTACK, .sv_stackprot = VM_PROT_READ | VM_PROT_WRITE, .sv_copyout_strings = cloudabi64_copyout_strings, + .sv_setregs = cloudabi64_proc_setregs, .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64, .sv_set_syscall_retval = cloudabi64_set_syscall_retval, .sv_fetch_syscall_args = cloudabi64_fetch_syscall_args, diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c index a26007a..fd13db8 100644 --- a/sys/arm64/cloudabi64/cloudabi64_sysvec.c +++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c @@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -46,6 +47,25 @@ __FBSDID("$FreeBSD$"); extern const char *cloudabi64_syscallnames[]; extern struct sysent cloudabi64_sysent[]; +static void +cloudabi64_proc_setregs(struct thread *td, struct image_params *imgp, + unsigned long stack) +{ + struct trapframe *regs; + + exec_setregs(td, imgp, stack); + + /* + * The stack now contains a pointer to the TCB and the auxiliary + * vector. Let x0 point to the auxiliary vector, and set + * tpidr_el0 to the TCB. + */ + regs = td->td_frame; + regs->tf_x[0] = td->td_retval[0] = + stack + roundup(sizeof(cloudabi64_tcb_t), sizeof(register_t)); + (void)cpu_set_user_tls(td, (void *)stack); +} + static int cloudabi64_fetch_syscall_args(struct thread *td, struct syscall_args *sa) { @@ -110,9 +130,9 @@ cloudabi64_schedtail(struct thread *td) } } -void +int cloudabi64_thread_setregs(struct thread *td, - const cloudabi64_threadattr_t *attr) + const cloudabi64_threadattr_t *attr, uint64_t tcb) { struct trapframe *frame; stack_t stack; @@ -130,6 +150,9 @@ cloudabi64_thread_setregs(struct thread *td, frame = td->td_frame; frame->tf_x[0] = td->td_tid; frame->tf_x[1] = attr->argument; + + /* Set up TLS. */ + return (cpu_set_user_tls(td, (void *)tcb)); } static struct sysentvec cloudabi64_elf_sysvec = { @@ -144,6 +167,7 @@ static struct sysentvec cloudabi64_elf_sysvec = { .sv_usrstack = USRSTACK, .sv_stackprot = VM_PROT_READ | VM_PROT_WRITE, .sv_copyout_strings = cloudabi64_copyout_strings, + .sv_setregs = cloudabi64_proc_setregs, .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM | SV_LP64, .sv_set_syscall_retval = cloudabi64_set_syscall_retval, .sv_fetch_syscall_args = cloudabi64_fetch_syscall_args, diff --git a/sys/compat/cloudabi64/cloudabi64_module.c b/sys/compat/cloudabi64/cloudabi64_module.c index de890bc..246a887 100644 --- a/sys/compat/cloudabi64/cloudabi64_module.c +++ b/sys/compat/cloudabi64/cloudabi64_module.c @@ -112,7 +112,13 @@ cloudabi64_fixup(register_t **stack_base, struct image_params *imgp) { .a_type = CLOUDABI_AT_NULL }, }; *stack_base -= howmany(sizeof(auxv), sizeof(register_t)); - return (copyout(auxv, *stack_base, sizeof(auxv))); + error = copyout(auxv, *stack_base, sizeof(auxv)); + if (error != 0) + return (error); + + /* Reserve space for storing the TCB. */ + *stack_base -= howmany(sizeof(cloudabi64_tcb_t), sizeof(register_t)); + return (0); } static int diff --git a/sys/compat/cloudabi64/cloudabi64_thread.c b/sys/compat/cloudabi64/cloudabi64_thread.c index 51961f8..429ad33 100644 --- a/sys/compat/cloudabi64/cloudabi64_thread.c +++ b/sys/compat/cloudabi64/cloudabi64_thread.c @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); struct thread_create_args { cloudabi64_threadattr_t attr; + uint64_t tcb; lwpid_t tid; }; @@ -49,8 +50,7 @@ initialize_thread(struct thread *td, void *thunk) args->tid = td->td_tid; /* Set up initial register contents. */ - cloudabi64_thread_setregs(td, &args->attr); - return (0); + return (cloudabi64_thread_setregs(td, &args->attr, args->tcb)); } int @@ -63,6 +63,12 @@ cloudabi64_sys_thread_create(struct thread *td, error = copyin(uap->attr, &args.attr, sizeof(args.attr)); if (error != 0) return (error); + + /* Remove some space on the top of the stack for the TCB. */ + args.tcb = rounddown(args.attr.stack + args.attr.stack_size - + sizeof(cloudabi64_tcb_t), _Alignof(cloudabi64_tcb_t)); + args.attr.stack_size = args.tcb - args.attr.stack; + error = thread_create(td, NULL, initialize_thread, &args); if (error != 0) return (error); diff --git a/sys/compat/cloudabi64/cloudabi64_util.h b/sys/compat/cloudabi64/cloudabi64_util.h index dcec70e..29a90d7 100644 --- a/sys/compat/cloudabi64/cloudabi64_util.h +++ b/sys/compat/cloudabi64/cloudabi64_util.h @@ -42,7 +42,7 @@ extern Elf64_Brandinfo cloudabi64_brand; register_t *cloudabi64_copyout_strings(struct image_params *); int cloudabi64_fixup(register_t **, struct image_params *); -void cloudabi64_thread_setregs(struct thread *, - const cloudabi64_threadattr_t *); +int cloudabi64_thread_setregs(struct thread *, + const cloudabi64_threadattr_t *, uint64_t); #endif diff --git a/sys/contrib/cloudabi/cloudabi64_types.h b/sys/contrib/cloudabi/cloudabi64_types.h index 88babaa..cb354d4 100644 --- a/sys/contrib/cloudabi/cloudabi64_types.h +++ b/sys/contrib/cloudabi/cloudabi64_types.h @@ -192,6 +192,13 @@ _Static_assert(offsetof(cloudabi64_subscription_t, proc_terminate.fd) == 16, "In _Static_assert(sizeof(cloudabi64_subscription_t) == 56, "Incorrect layout"); _Static_assert(_Alignof(cloudabi64_subscription_t) == 8, "Incorrect layout"); +typedef struct { + _Alignas(8) uint64_t parent; +} cloudabi64_tcb_t; +_Static_assert(offsetof(cloudabi64_tcb_t, parent) == 0, "Incorrect layout"); +_Static_assert(sizeof(cloudabi64_tcb_t) == 8, "Incorrect layout"); +_Static_assert(_Alignof(cloudabi64_tcb_t) == 8, "Incorrect layout"); + typedef void cloudabi64_threadentry_t(cloudabi_tid_t tid, uint64_t aux); typedef struct { -- cgit v1.1 From b96ba003d03d8772cac516c11358172ed588f28a Mon Sep 17 00:00:00 2001 From: skra Date: Wed, 6 Apr 2016 12:48:45 +0000 Subject: Fix PIC lookup by device and xref. There was not taken into account the situation that someone has a pointer to device but not its xref. This situation is regular now, after r297539. --- sys/kern/subr_intr.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c index 96319ad..fc3e74f 100644 --- a/sys/kern/subr_intr.c +++ b/sys/kern/subr_intr.c @@ -766,11 +766,19 @@ pic_lookup_locked(device_t dev, intptr_t xref) mtx_assert(&pic_list_lock, MA_OWNED); + if (dev == NULL && xref == 0) + return (NULL); + + /* Note that pic->pic_dev is never NULL on registered PIC. */ SLIST_FOREACH(pic, &pic_list, pic_next) { - if (pic->pic_xref != xref) - continue; - if (pic->pic_xref != 0 || pic->pic_dev == dev) - return (pic); + if (dev == NULL) { + if (xref == pic->pic_xref) + return (pic); + } else if (xref == 0 || pic->pic_xref == 0) { + if (dev == pic->pic_dev) + return (pic); + } else if (xref == pic->pic_xref && dev == pic->pic_dev) + return (pic); } return (NULL); } @@ -840,14 +848,14 @@ intr_pic_register(device_t dev, intptr_t xref) { struct intr_pic *pic; + if (dev == NULL) + return (EINVAL); pic = pic_create(dev, xref); if (pic == NULL) return (ENOMEM); - if (pic->pic_dev != dev) - return (EINVAL); /* XXX it could be many things. */ - debugf("PIC %p registered for %s \n", pic, - device_get_nameunit(dev), xref); + debugf("PIC %p registered for %s \n", pic, + device_get_nameunit(dev), dev, xref); return (0); } -- cgit v1.1 From d532565c6da2dee9fa355e47534a76d44af6b7b1 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 6 Apr 2016 14:08:10 +0000 Subject: Allow vmparam.h to be included from assembly files on arm64. Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation --- sys/arm64/arm64/copyinout.S | 2 ++ sys/arm64/arm64/genassym.c | 3 --- sys/arm64/arm64/locore.S | 1 + sys/arm64/arm64/support.S | 1 + sys/arm64/include/vmparam.h | 6 +++++- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/arm64/arm64/copyinout.S b/sys/arm64/arm64/copyinout.S index b99dbc2..86711fc 100644 --- a/sys/arm64/arm64/copyinout.S +++ b/sys/arm64/arm64/copyinout.S @@ -33,6 +33,8 @@ __FBSDID("$FreeBSD$"); #include +#include + #include "assym.s" /* diff --git a/sys/arm64/arm64/genassym.c b/sys/arm64/arm64/genassym.c index 26adc6d..36ad877 100644 --- a/sys/arm64/arm64/genassym.c +++ b/sys/arm64/arm64/genassym.c @@ -37,9 +37,6 @@ __FBSDID("$FreeBSD$"); #include #include -ASSYM(KERNBASE, KERNBASE); -ASSYM(VM_MAXUSER_ADDRESS, VM_MAXUSER_ADDRESS); - ASSYM(TDF_ASTPENDING, TDF_ASTPENDING); ASSYM(TDF_NEEDRESCHED, TDF_NEEDRESCHED); diff --git a/sys/arm64/arm64/locore.S b/sys/arm64/arm64/locore.S index 676c1d5..615b2e1 100644 --- a/sys/arm64/arm64/locore.S +++ b/sys/arm64/arm64/locore.S @@ -34,6 +34,7 @@ #include #include #include +#include #define VIRT_BITS 48 diff --git a/sys/arm64/arm64/support.S b/sys/arm64/arm64/support.S index 4938240..1ca8c2b 100644 --- a/sys/arm64/arm64/support.S +++ b/sys/arm64/arm64/support.S @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include "assym.s" diff --git a/sys/arm64/include/vmparam.h b/sys/arm64/include/vmparam.h index cd9198e..e086422 100644 --- a/sys/arm64/include/vmparam.h +++ b/sys/arm64/include/vmparam.h @@ -160,7 +160,6 @@ #define DMAP_MIN_ADDRESS (0xffffffc000000000UL) #define DMAP_MAX_ADDRESS (0xffffffdfffffffffUL) -extern vm_paddr_t dmap_phys_base; #define DMAP_MIN_PHYSADDR (dmap_phys_base) #define DMAP_MAX_PHYSADDR (dmap_phys_base + (DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS)) @@ -229,10 +228,15 @@ extern vm_paddr_t dmap_phys_base; #define UMA_MD_SMALL_ALLOC +#ifndef LOCORE + +extern vm_paddr_t dmap_phys_base; extern u_int tsb_kernel_ldd_phys; extern vm_offset_t vm_max_kernel_address; extern vm_offset_t init_pt_va; +#endif + #define ZERO_REGION_SIZE (64 * 1024) /* 64KB */ #endif /* !_MACHINE_VMPARAM_H_ */ -- cgit v1.1 From c287d03447df3c2a6e83106c8fa7f3c78897b008 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 6 Apr 2016 14:12:00 +0000 Subject: Cleanup the early pagetable creation code in preperation for increasing the size of the arm64 DMAP region. Approved by: ABT Systems Ltd Sponsored by: The FreeBSD Foundation --- sys/arm64/arm64/locore.S | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/sys/arm64/arm64/locore.S b/sys/arm64/arm64/locore.S index 615b2e1..ca57cfc 100644 --- a/sys/arm64/arm64/locore.S +++ b/sys/arm64/arm64/locore.S @@ -378,6 +378,7 @@ create_pagetables: /* Link the l0 -> l1 table */ mov x9, x6 mov x6, x24 + mov x10, #1 bl link_l0_pagetable /* @@ -408,6 +409,7 @@ create_pagetables: /* Link the l0 -> l1 table */ mov x9, x6 mov x6, x27 + mov x10, #1 bl link_l0_pagetable /* Restore the Link register */ @@ -423,6 +425,7 @@ create_pagetables: * x6 = L0 table * x8 = Virtual Address * x9 = L1 PA (trashed) + * x10 = Entry count * x11, x12 and x13 are trashed */ link_l0_pagetable: @@ -437,11 +440,16 @@ link_l0_pagetable: mov x12, #L0_TABLE /* Only use the output address bits */ - lsr x9, x9, #12 - orr x12, x12, x9, lsl #12 + lsr x9, x9, #PAGE_SHIFT +1: orr x13, x12, x9, lsl #PAGE_SHIFT /* Store the entry */ - str x12, [x6, x11, lsl #3] + str x13, [x6, x11, lsl #3] + + sub x10, x10, #1 + add x11, x11, #1 + add x9, x9, #1 + cbnz x10, 1b ret @@ -468,11 +476,11 @@ link_l1_pagetable: mov x12, #L1_TABLE /* Only use the output address bits */ - lsr x9, x9, #12 - orr x12, x12, x9, lsl #12 + lsr x9, x9, #PAGE_SHIFT + orr x13, x12, x9, lsl #PAGE_SHIFT /* Store the entry */ - str x12, [x6, x11, lsl #3] + str x13, [x6, x11, lsl #3] ret @@ -482,7 +490,7 @@ link_l1_pagetable: * x7 = Type (0 = Device, 1 = Normal) * x8 = VA start * x9 = PA start (trashed) - * x10 = Entry count (TODO) + * x10 = Entry count * x11, x12 and x13 are trashed */ build_l1_block_pagetable: @@ -505,20 +513,17 @@ build_l1_block_pagetable: lsr x9, x9, #L1_SHIFT /* Set the physical address for this virtual address */ -1: orr x12, x12, x9, lsl #L1_SHIFT +1: orr x13, x12, x9, lsl #L1_SHIFT /* Store the entry */ - str x12, [x6, x11, lsl #3] - - /* Clear the address bits */ - and x12, x12, #ATTR_MASK_L + str x13, [x6, x11, lsl #3] sub x10, x10, #1 add x11, x11, #1 add x9, x9, #1 cbnz x10, 1b -2: ret + ret /* * Builds count 2 MiB page table entry @@ -526,7 +531,7 @@ build_l1_block_pagetable: * x7 = Type (0 = Device, 1 = Normal) * x8 = VA start * x9 = PA start (trashed) - * x10 = Entry count (TODO) + * x10 = Entry count * x11, x12 and x13 are trashed */ build_l2_block_pagetable: @@ -549,20 +554,17 @@ build_l2_block_pagetable: lsr x9, x9, #L2_SHIFT /* Set the physical address for this virtual address */ -1: orr x12, x12, x9, lsl #L2_SHIFT +1: orr x13, x12, x9, lsl #L2_SHIFT /* Store the entry */ - str x12, [x6, x11, lsl #3] - - /* Clear the address bits */ - and x12, x12, #ATTR_MASK_L + str x13, [x6, x11, lsl #3] sub x10, x10, #1 add x11, x11, #1 add x9, x9, #1 cbnz x10, 1b -2: ret + ret start_mmu: dsb sy -- cgit v1.1 From d28cfa553c23d80caf0e6c73ed4b8213769a93a6 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 6 Apr 2016 14:16:37 +0000 Subject: Use PHYS_IN_DMAP to check if a physical address is within the DMAP region. Approved by: ABT Systems Ltd Sponsored by: The FreeBSD Foundation --- sys/arm64/arm64/pmap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 5eeccdd..ca232f0 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -3534,7 +3534,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count, needs_mapping = FALSE; for (i = 0; i < count; i++) { paddr = VM_PAGE_TO_PHYS(page[i]); - if (__predict_false(paddr >= DMAP_MAX_PHYSADDR)) { + if (__predict_false(!PHYS_IN_DMAP(paddr))) { error = vmem_alloc(kernel_arena, PAGE_SIZE, M_BESTFIT | M_WAITOK, &vaddr[i]); KASSERT(error == 0, ("vmem_alloc failed: %d", error)); @@ -3552,7 +3552,7 @@ pmap_map_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count, sched_pin(); for (i = 0; i < count; i++) { paddr = VM_PAGE_TO_PHYS(page[i]); - if (paddr >= DMAP_MAX_PHYSADDR) { + if (!PHYS_IN_DMAP(paddr)) { panic( "pmap_map_io_transient: TODO: Map out of DMAP data"); } @@ -3572,7 +3572,7 @@ pmap_unmap_io_transient(vm_page_t page[], vm_offset_t vaddr[], int count, sched_unpin(); for (i = 0; i < count; i++) { paddr = VM_PAGE_TO_PHYS(page[i]); - if (paddr >= DMAP_MAX_PHYSADDR) { + if (!PHYS_IN_DMAP(paddr)) { panic("ARM64TODO: pmap_unmap_io_transient: Unmap data"); } } -- cgit v1.1 From e2cfe2525660130f6dd9d3fb0e97fe34ceaae281 Mon Sep 17 00:00:00 2001 From: pfg Date: Wed, 6 Apr 2016 15:28:26 +0000 Subject: fsck_msdosfs(8): Optimimize memsets Obtained from: NetBSD (bin/50908) MFC after: 2 weeks --- sbin/fsck_msdosfs/dir.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sbin/fsck_msdosfs/dir.c b/sbin/fsck_msdosfs/dir.c index e8d6475..d20762b 100644 --- a/sbin/fsck_msdosfs/dir.c +++ b/sbin/fsck_msdosfs/dir.c @@ -925,6 +925,7 @@ int reconnect(int dosfs, struct bootblock *boot, struct fatEntry *fat, cl_t head) { struct dosDirEntry d; + int len; u_char *p; if (!ask(1, "Reconnect")) @@ -976,14 +977,15 @@ reconnect(int dosfs, struct bootblock *boot, struct fatEntry *fat, cl_t head) boot->NumFiles++; /* Ensure uniqueness of entry here! XXX */ memset(&d, 0, sizeof d); - (void)snprintf(d.name, sizeof(d.name), "%u", head); + /* worst case -1 = 4294967295, 10 digits */ + len = snprintf(d.name, sizeof(d.name), "%u", head); d.flags = 0; d.head = head; d.size = fat[head].length * boot->ClusterSize; - memset(p, 0, 32); - memset(p, ' ', 11); - memcpy(p, d.name, strlen(d.name)); + memcpy(p, d.name, len); + memset(p + len, ' ', 11 - len); + memset(p + 11, 0, 32 - 11); p[26] = (u_char)d.head; p[27] = (u_char)(d.head >> 8); if (boot->ClustMask == CLUST32_MASK) { -- cgit v1.1 From 1c933ace1f9b45949f4fde8695e411d3eb21fdc4 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 6 Apr 2016 16:09:10 +0000 Subject: Disable support for compat syscalls on arm64. These symbols were never shipped since arm64 exists only on 11+. Submitted by: brooks Reviewed by: emaste, imp --- lib/libc/aarch64/gen/Makefile.inc | 2 ++ lib/libc/aarch64/sys/Makefile.inc | 2 ++ lib/libc/arm/aeabi/aeabi_vfp.h | 4 +++- lib/libc/gen/semctl.c | 6 ++++++ lib/libc/include/compat.h | 2 ++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/libc/aarch64/gen/Makefile.inc b/lib/libc/aarch64/gen/Makefile.inc index f138008..fe39136 100644 --- a/lib/libc/aarch64/gen/Makefile.inc +++ b/lib/libc/aarch64/gen/Makefile.inc @@ -1,5 +1,7 @@ # $FreeBSD$ +CFLAGS+= -DNO_COMPAT7 + SRCS+= _ctx_start.S \ fabs.S \ flt_rounds.c \ diff --git a/lib/libc/aarch64/sys/Makefile.inc b/lib/libc/aarch64/sys/Makefile.inc index b33b568..5a8c595 100644 --- a/lib/libc/aarch64/sys/Makefile.inc +++ b/lib/libc/aarch64/sys/Makefile.inc @@ -1,5 +1,7 @@ # $FreeBSD$ +MIASM:= ${MIASM:Nfreebsd[467]_*} + SRCS+= __vdso_gettc.c #MDASM= ptrace.S diff --git a/lib/libc/arm/aeabi/aeabi_vfp.h b/lib/libc/arm/aeabi/aeabi_vfp.h index 927652f..bb2f823 100644 --- a/lib/libc/arm/aeabi/aeabi_vfp.h +++ b/lib/libc/arm/aeabi/aeabi_vfp.h @@ -42,7 +42,9 @@ #define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x ## _vfp) #define AEABI_END(x) END(__aeabi_ ## x ## _vfp) #else -#define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x) +#define AEABI_ENTRY(x) \ + .set __fbsd_ ## x, __aeabi_ ## x; \ + ENTRY(__aeabi_ ## x) #define AEABI_END(x) END(__aeabi_ ## x) #endif diff --git a/lib/libc/gen/semctl.c b/lib/libc/gen/semctl.c index c68734d..0e418f6 100644 --- a/lib/libc/gen/semctl.c +++ b/lib/libc/gen/semctl.c @@ -29,7 +29,9 @@ #include __FBSDID("$FreeBSD$"); +#ifndef NO_COMPAT7 #define _WANT_SEMUN_OLD +#endif #include #include @@ -38,8 +40,10 @@ __FBSDID("$FreeBSD$"); #include int __semctl(int semid, int semnum, int cmd, union semun *arg); +#ifndef NO_COMPAT7 int freebsd7___semctl(int semid, int semnum, int cmd, union semun_old *arg); int freebsd7_semctl(int semid, int semnum, int cmd, ...); +#endif int semctl(int semid, int semnum, int cmd, ...) @@ -61,6 +65,7 @@ semctl(int semid, int semnum, int cmd, ...) return (__semctl(semid, semnum, cmd, semun_ptr)); } +#ifndef NO_COMPAT7 int freebsd7_semctl(int semid, int semnum, int cmd, ...) { @@ -82,3 +87,4 @@ freebsd7_semctl(int semid, int semnum, int cmd, ...) } __sym_compat(semctl, freebsd7_semctl, FBSD_1.0); +#endif diff --git a/lib/libc/include/compat.h b/lib/libc/include/compat.h index b20fac5..e83d13c 100644 --- a/lib/libc/include/compat.h +++ b/lib/libc/include/compat.h @@ -38,9 +38,11 @@ #define __sym_compat(sym,impl,verid) \ .symver impl, sym@verid +#ifndef NO_COMPAT7 __sym_compat(__semctl, freebsd7___semctl, FBSD_1.0); __sym_compat(msgctl, freebsd7_msgctl, FBSD_1.0); __sym_compat(shmctl, freebsd7_shmctl, FBSD_1.0); +#endif #undef __sym_compat -- cgit v1.1 From b58948f222cdaf757479b1ad2bbbd36f16af8067 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 6 Apr 2016 16:50:18 +0000 Subject: Revert a change that sneeked with 297619 --- lib/libc/arm/aeabi/aeabi_vfp.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/libc/arm/aeabi/aeabi_vfp.h b/lib/libc/arm/aeabi/aeabi_vfp.h index bb2f823..927652f 100644 --- a/lib/libc/arm/aeabi/aeabi_vfp.h +++ b/lib/libc/arm/aeabi/aeabi_vfp.h @@ -42,9 +42,7 @@ #define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x ## _vfp) #define AEABI_END(x) END(__aeabi_ ## x ## _vfp) #else -#define AEABI_ENTRY(x) \ - .set __fbsd_ ## x, __aeabi_ ## x; \ - ENTRY(__aeabi_ ## x) +#define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x) #define AEABI_END(x) END(__aeabi_ ## x) #endif -- cgit v1.1 From 5499ecc9666fdf02ad318ae02374b358ee18ff35 Mon Sep 17 00:00:00 2001 From: imp Date: Wed, 6 Apr 2016 19:34:44 +0000 Subject: Update cust_pkgng with a simpler, more robust version. We don't need to loop for pkg, which simplifies things. --- tools/tools/nanobsd/defaults.sh | 67 +++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh index cb7a2d1..d881276 100755 --- a/tools/tools/nanobsd/defaults.sh +++ b/tools/tools/nanobsd/defaults.sh @@ -916,6 +916,17 @@ cust_install_files ( ) ( cust_pkgng ( ) ( + local PKG_CONF="${NANO_WORLDDIR}/usr/local/etc/pkg.conf" + local PKGCMD="env ASSUME_ALWAYS_YES=YES PKG_DBDIR=${NANO_PKG_META_BASE}/pkg SIGNATURE_TYPE=none /usr/sbin/pkg" + + # Ensure pkg.conf points pkg to where the package meta data lives. + touch ${PKG_CONF} + if grep -Eiq '^PKG_DBDIR:.*' ${PKG_CONF}; then + sed -i -e "\|^PKG_DBDIR:.*|Is||PKG_DBDIR: "\"${NANO_PKG_META_BASE}/pkg\""|" ${PKG_CONF} + else + echo "PKG_DBDIR: \"${NANO_PKG_META_BASE}/pkg\"" >> ${PKG_CONF} + fi + # If the package directory doesn't exist, we're done. if [ ! -d ${NANO_PACKAGE_DIR} ]; then echo "DONE 0 packages" @@ -930,52 +941,28 @@ cust_pkgng ( ) ( echo "FAILED: need a pkg/ package for bootstrapping" exit 2 fi + NANO_PACKAGE_LIST="${_NANO_PKG_PACKAGE} ${NANO_PACKAGE_LIST}" - # Copy packages into chroot - mkdir -p ${NANO_WORLDDIR}/Pkg - ( - cd "${NANO_PACKAGE_DIR}" - find ${NANO_PACKAGE_LIST} -print | - cpio -Ldumpv ${NANO_WORLDDIR}/Pkg - ) + # Mount packages into chroot + mkdir -p ${NANO_WORLDDIR}/_.p + mount -t nullfs -o noatime -o ro ${NANO_PACKAGE_DIR} ${NANO_WORLDDIR}/_.p - #Bootstrap pkg - CR env ASSUME_ALWAYS_YES=YES SIGNATURE_TYPE=none /usr/sbin/pkg add /Pkg/${_NANO_PKG_PACKAGE} - CR pkg -N >/dev/null 2>&1 - if [ "$?" -ne "0" ]; then - echo "FAILED: pkg bootstrapping faied" - exit 2 - fi - rm -f ${NANO_WORLDDIR}/Pkg/pkg-* + trap "umount ${NANO_WORLDDIR}/_.p ; rm -rf ${NANO_WORLDDIR}/_.p" 1 2 15 - # Count & report how many we have to install - todo=`ls ${NANO_WORLDDIR}/Pkg | /usr/bin/wc -l` - todo=$(expr $todo + 1) # add one for pkg since it is installed already + # Install packages + todo="$(echo "${NANO_PACKAGE_LIST}" | awk '{ print NF }')" echo "=== TODO: $todo" - ls ${NANO_WORLDDIR}/Pkg + echo "${NANO_PACKAGE_LIST}" echo "===" - while true - do - # Record how many we have now - have=$(CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info | /usr/bin/wc -l) - - # Attempt to install more packages - CR0 'ls 'Pkg/*txz' | xargs env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg add' - - # See what that got us - now=$(CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info | /usr/bin/wc -l) - echo "=== NOW $now" - CR env ASSUME_ALWAYS_YES=YES /usr/sbin/pkg info - echo "===" - if [ $now -eq $todo ] ; then - echo "DONE $now packages" - break - elif [ $now -eq $have ] ; then - echo "FAILED: Nothing happened on this pass" - exit 2 - fi + for _PKG in ${NANO_PACKAGE_LIST}; do + CR "${PKGCMD} add /_.p/${_PKG}" done - rm -rf ${NANO_WORLDDIR}/Pkg + + CR0 "${PKGCMD} info" + + trap - 1 2 15 EXIT + umount ${NANO_WORLDDIR}/_.p + rm -rf ${NANO_WORLDDIR}/_.p ) ####################################################################### -- cgit v1.1 From 3261994ba6feb27f89151ec6f7139edd8484cf00 Mon Sep 17 00:00:00 2001 From: bdrewery Date: Wed, 6 Apr 2016 22:38:50 +0000 Subject: Follow-up r295924: Only sync hash-based db files open for writing when closing. This fixes a major performance regression when reading db files such as the pw database during a 'pkg install'. MFC after: 1 week Tested by: bapt Reviewed by: bapt Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D5868 --- lib/libc/db/hash/hash.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/libc/db/hash/hash.c b/lib/libc/db/hash/hash.c index 02503ee..fc4e50e 100644 --- a/lib/libc/db/hash/hash.c +++ b/lib/libc/db/hash/hash.c @@ -423,7 +423,8 @@ hdestroy(HTAB *hashp) free(hashp->tmp_buf); if (hashp->fp != -1) { - (void)_fsync(hashp->fp); + if (hashp->save_file) + (void)_fsync(hashp->fp); (void)_close(hashp->fp); } -- cgit v1.1 From c5bf375480de2be54a7e58e51cb4619ff3021b6a Mon Sep 17 00:00:00 2001 From: jmcneill Date: Wed, 6 Apr 2016 23:11:03 +0000 Subject: Convert Allwinner port to extres clk/hwreset/regulator APIs. Reviewed by: andrew, gonzo, Emmanuel Vadot Approved by: gonzo (mentor) Differential Revision: https://reviews.freebsd.org/D5752 --- sys/arm/allwinner/a10_ahci.c | 52 +- sys/arm/allwinner/a10_clk.c | 862 ---------------------------- sys/arm/allwinner/a10_clk.h | 247 -------- sys/arm/allwinner/a10_codec.c | 33 +- sys/arm/allwinner/a10_dmac.c | 14 +- sys/arm/allwinner/a10_ehci.c | 61 +- sys/arm/allwinner/a10_fb.c | 137 ++++- sys/arm/allwinner/a10_hdmi.c | 73 ++- sys/arm/allwinner/a10_mmc.c | 97 ++-- sys/arm/allwinner/a20/a20_if_dwc.c | 59 +- sys/arm/allwinner/a31/a31_clk.c | 378 ------------ sys/arm/allwinner/a31/a31_clk.h | 213 ------- sys/arm/allwinner/aw_ccu.c | 224 ++++++++ sys/arm/allwinner/aw_reset.c | 163 ++++++ sys/arm/allwinner/aw_usbphy.c | 107 ++-- sys/arm/allwinner/clk/aw_ahbclk.c | 308 ++++++++++ sys/arm/allwinner/clk/aw_apbclk.c | 283 +++++++++ sys/arm/allwinner/clk/aw_axiclk.c | 201 +++++++ sys/arm/allwinner/clk/aw_codecclk.c | 164 ++++++ sys/arm/allwinner/clk/aw_cpuclk.c | 161 ++++++ sys/arm/allwinner/clk/aw_debeclk.c | 351 +++++++++++ sys/arm/allwinner/clk/aw_gate.c | 198 +++++++ sys/arm/allwinner/clk/aw_gmacclk.c | 259 +++++++++ sys/arm/allwinner/clk/aw_hdmiclk.c | 315 ++++++++++ sys/arm/allwinner/clk/aw_lcdclk.c | 560 ++++++++++++++++++ sys/arm/allwinner/clk/aw_mmcclk.c | 351 +++++++++++ sys/arm/allwinner/clk/aw_modclk.c | 318 ++++++++++ sys/arm/allwinner/clk/aw_oscclk.c | 132 +++++ sys/arm/allwinner/clk/aw_pll.c | 757 ++++++++++++++++++++++++ sys/arm/allwinner/clk/aw_usbclk.c | 246 ++++++++ sys/arm/allwinner/files.allwinner | 19 +- sys/arm/allwinner/if_emac.c | 33 +- sys/arm/conf/A10 | 7 + sys/arm/conf/A20 | 7 + sys/boot/fdt/dts/arm/bananapi.dts | 78 +-- sys/boot/fdt/dts/arm/cubieboard.dts | 54 +- sys/boot/fdt/dts/arm/cubieboard2.dts | 7 - sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts | 12 +- sys/boot/fdt/dts/arm/olinuxino-lime.dts | 11 - sys/boot/fdt/dts/arm/sun4i-a10.dtsi | 153 ----- sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi | 63 ++ sys/boot/fdt/dts/arm/sun7i-a20.dtsi | 217 ------- sys/dev/dwc/if_dwc.c | 40 ++ sys/dev/iicbus/twsi/a10_twsi.c | 51 +- 44 files changed, 5632 insertions(+), 2444 deletions(-) delete mode 100644 sys/arm/allwinner/a10_clk.c delete mode 100644 sys/arm/allwinner/a10_clk.h delete mode 100644 sys/arm/allwinner/a31/a31_clk.c delete mode 100644 sys/arm/allwinner/a31/a31_clk.h create mode 100644 sys/arm/allwinner/aw_ccu.c create mode 100644 sys/arm/allwinner/aw_reset.c create mode 100644 sys/arm/allwinner/clk/aw_ahbclk.c create mode 100644 sys/arm/allwinner/clk/aw_apbclk.c create mode 100644 sys/arm/allwinner/clk/aw_axiclk.c create mode 100644 sys/arm/allwinner/clk/aw_codecclk.c create mode 100644 sys/arm/allwinner/clk/aw_cpuclk.c create mode 100644 sys/arm/allwinner/clk/aw_debeclk.c create mode 100644 sys/arm/allwinner/clk/aw_gate.c create mode 100644 sys/arm/allwinner/clk/aw_gmacclk.c create mode 100644 sys/arm/allwinner/clk/aw_hdmiclk.c create mode 100644 sys/arm/allwinner/clk/aw_lcdclk.c create mode 100644 sys/arm/allwinner/clk/aw_mmcclk.c create mode 100644 sys/arm/allwinner/clk/aw_modclk.c create mode 100644 sys/arm/allwinner/clk/aw_oscclk.c create mode 100644 sys/arm/allwinner/clk/aw_pll.c create mode 100644 sys/arm/allwinner/clk/aw_usbclk.c delete mode 100644 sys/boot/fdt/dts/arm/sun4i-a10.dtsi delete mode 100644 sys/boot/fdt/dts/arm/sun7i-a20.dtsi diff --git a/sys/arm/allwinner/a10_ahci.c b/sys/arm/allwinner/a10_ahci.c index a6c5f5d..009ef5f 100644 --- a/sys/arm/allwinner/a10_ahci.c +++ b/sys/arm/allwinner/a10_ahci.c @@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include /* * Allwinner a1x/a2x/a8x SATA attachment. This is just the AHCI register @@ -117,6 +117,8 @@ __FBSDID("$FreeBSD$"); #define AHCI_P0PHYCR 0x0078 #define AHCI_P0PHYSR 0x007C +#define PLL_FREQ 100000000 + static void inline ahci_set(struct resource *m, bus_size_t off, uint32_t set) { @@ -295,8 +297,11 @@ ahci_a10_attach(device_t dev) { int error; struct ahci_controller *ctlr; + clk_t clk_pll, clk_gate; ctlr = device_get_softc(dev); + clk_pll = clk_gate = NULL; + ctlr->quirks = AHCI_Q_NOPMP; ctlr->vendorid = 0; ctlr->deviceid = 0; @@ -307,15 +312,36 @@ ahci_a10_attach(device_t dev) &ctlr->r_rid, RF_ACTIVE))) return (ENXIO); - /* Turn on the PLL for SATA */ - a10_clk_ahci_activate(); - + /* Enable clocks */ + error = clk_get_by_ofw_index(dev, 0, &clk_pll); + if (error != 0) { + device_printf(dev, "Cannot get PLL clock\n"); + goto fail; + } + error = clk_get_by_ofw_index(dev, 1, &clk_gate); + if (error != 0) { + device_printf(dev, "Cannot get gate clock\n"); + goto fail; + } + error = clk_set_freq(clk_pll, PLL_FREQ, CLK_SET_ROUND_DOWN); + if (error != 0) { + device_printf(dev, "Cannot set PLL frequency\n"); + goto fail; + } + error = clk_enable(clk_pll); + if (error != 0) { + device_printf(dev, "Cannot enable PLL\n"); + goto fail; + } + error = clk_enable(clk_gate); + if (error != 0) { + device_printf(dev, "Cannot enable clk gate\n"); + goto fail; + } + /* Reset controller */ - if ((error = ahci_a10_ctlr_reset(dev)) != 0) { - bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, - ctlr->r_mem); - return (error); - }; + if ((error = ahci_a10_ctlr_reset(dev)) != 0) + goto fail; /* * No MSI registers on this platform. @@ -330,6 +356,14 @@ ahci_a10_attach(device_t dev) * Note: ahci_attach will release ctlr->r_mem on errors automatically */ return (ahci_attach(dev)); + +fail: + if (clk_gate != NULL) + clk_release(clk_gate); + if (clk_pll != NULL) + clk_release(clk_pll); + bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); + return (error); } static int diff --git a/sys/arm/allwinner/a10_clk.c b/sys/arm/allwinner/a10_clk.c deleted file mode 100644 index 46bd6ad..0000000 --- a/sys/arm/allwinner/a10_clk.c +++ /dev/null @@ -1,862 +0,0 @@ -/*- - * Copyright (c) 2013 Ganbold Tsagaankhuu - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* Simple clock driver for Allwinner A10 */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "a10_clk.h" - -#define TCON_PLL_WORST 1000000 -#define TCON_PLL_N_MIN 1 -#define TCON_PLL_N_MAX 15 -#define TCON_PLL_M_MIN 9 -#define TCON_PLL_M_MAX 127 -#define TCON_PLLREF_SINGLE 3000 /* kHz */ -#define TCON_PLLREF_DOUBLE 6000 /* kHz */ -#define TCON_RATE_KHZ(rate_hz) ((rate_hz) / 1000) -#define TCON_RATE_HZ(rate_khz) ((rate_khz) * 1000) -#define HDMI_DEFAULT_RATE 297000000 -#define DEBE_DEFAULT_RATE 300000000 - -struct a10_ccm_softc { - struct resource *res; - bus_space_tag_t bst; - bus_space_handle_t bsh; - struct mtx mtx; - int pll6_enabled; - int ehci_cnt; - int ohci_cnt; - int usbphy_cnt; - int usb_cnt; -}; - -static struct a10_ccm_softc *a10_ccm_sc = NULL; - -static int a10_clk_usbphy_activate(struct a10_ccm_softc *sc); -static int a10_clk_usbphy_deactivate(struct a10_ccm_softc *sc); -static int a10_clk_usb_activate(struct a10_ccm_softc *sc); -static int a10_clk_usb_deactivate(struct a10_ccm_softc *sc); - -#define CCM_LOCK(sc) mtx_lock(&(sc)->mtx); -#define CCM_UNLOCK(sc) mtx_unlock(&(sc)->mtx); -#define CCM_LOCK_ASSERT(sc) mtx_assert(&(sc)->mtx, MA_OWNED) -#define ccm_read_4(sc, reg) \ - bus_space_read_4((sc)->bst, (sc)->bsh, (reg)) -#define ccm_write_4(sc, reg, val) \ - bus_space_write_4((sc)->bst, (sc)->bsh, (reg), (val)) - -static int -a10_ccm_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - - if (ofw_bus_is_compatible(dev, "allwinner,sun4i-ccm")) { - device_set_desc(dev, "Allwinner Clock Control Module"); - return(BUS_PROBE_DEFAULT); - } - - return (ENXIO); -} - -static int -a10_ccm_attach(device_t dev) -{ - struct a10_ccm_softc *sc = device_get_softc(dev); - int rid = 0; - - if (a10_ccm_sc) - return (ENXIO); - - sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); - if (!sc->res) { - device_printf(dev, "could not allocate resource\n"); - return (ENXIO); - } - - sc->bst = rman_get_bustag(sc->res); - sc->bsh = rman_get_bushandle(sc->res); - - mtx_init(&sc->mtx, "a10_ccm", NULL, MTX_DEF); - - a10_ccm_sc = sc; - - return (0); -} - -static device_method_t a10_ccm_methods[] = { - DEVMETHOD(device_probe, a10_ccm_probe), - DEVMETHOD(device_attach, a10_ccm_attach), - { 0, 0 } -}; - -static driver_t a10_ccm_driver = { - "a10_ccm", - a10_ccm_methods, - sizeof(struct a10_ccm_softc), -}; - -static devclass_t a10_ccm_devclass; - -EARLY_DRIVER_MODULE(a10_ccm, simplebus, a10_ccm_driver, a10_ccm_devclass, 0, 0, - BUS_PASS_TIMER + BUS_PASS_ORDER_MIDDLE); - -int -a10_clk_ehci_activate(void) -{ - struct a10_ccm_softc *sc = a10_ccm_sc; - uint32_t reg_value; - - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - - if (++sc->ehci_cnt == 1) { - /* Gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_EHCI0; /* AHB clock gate ehci0 */ - reg_value |= CCM_AHB_GATING_EHCI1; /* AHB clock gate ehci1 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - } - - a10_clk_usb_activate(sc); - a10_clk_usbphy_activate(sc); - - CCM_UNLOCK(sc); - - return (0); -} - -int -a10_clk_ehci_deactivate(void) -{ - struct a10_ccm_softc *sc = a10_ccm_sc; - uint32_t reg_value; - - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - - if (--sc->ehci_cnt == 0) { - /* Disable gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value &= ~CCM_AHB_GATING_EHCI0; /* disable AHB clock gate ehci0 */ - reg_value &= ~CCM_AHB_GATING_EHCI1; /* disable AHB clock gate ehci1 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - } - - a10_clk_usb_deactivate(sc); - a10_clk_usbphy_deactivate(sc); - - CCM_UNLOCK(sc); - - return (0); -} - -int -a10_clk_ohci_activate(void) -{ - struct a10_ccm_softc *sc = a10_ccm_sc; - uint32_t reg_value; - - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - - if (++sc->ohci_cnt == 1) { - /* Gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_OHCI0; /* AHB clock gate ohci0 */ - reg_value |= CCM_AHB_GATING_OHCI1; /* AHB clock gate ohci1 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - - /* Enable clock for USB */ - reg_value = ccm_read_4(sc, CCM_USB_CLK); - reg_value |= CCM_SCLK_GATING_OHCI0; - reg_value |= CCM_SCLK_GATING_OHCI1; - ccm_write_4(sc, CCM_USB_CLK, reg_value); - } - - a10_clk_usb_activate(sc); - a10_clk_usbphy_activate(sc); - - CCM_UNLOCK(sc); - - return (0); -} - -int -a10_clk_ohci_deactivate(void) -{ - struct a10_ccm_softc *sc = a10_ccm_sc; - uint32_t reg_value; - - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - - if (--sc->ohci_cnt == 0) { - /* Disable clock for USB */ - reg_value = ccm_read_4(sc, CCM_USB_CLK); - reg_value &= ~CCM_SCLK_GATING_OHCI0; - reg_value &= ~CCM_SCLK_GATING_OHCI1; - ccm_write_4(sc, CCM_USB_CLK, reg_value); - - /* Disable gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value &= ~CCM_AHB_GATING_OHCI0; /* disable AHB clock gate ohci0 */ - reg_value &= ~CCM_AHB_GATING_OHCI1; /* disable AHB clock gate ohci1 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - } - - a10_clk_usb_deactivate(sc); - a10_clk_usbphy_deactivate(sc); - - CCM_UNLOCK(sc); - - return (0); -} - -static int -a10_clk_usb_activate(struct a10_ccm_softc *sc) -{ - uint32_t reg_value; - - CCM_LOCK_ASSERT(sc); - - if (++sc->usb_cnt == 1) { - /* Gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_USB0; /* AHB clock gate usb0 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - } - - return (0); -} - -static int -a10_clk_usb_deactivate(struct a10_ccm_softc *sc) -{ - uint32_t reg_value; - - CCM_LOCK_ASSERT(sc); - - if (--sc->usb_cnt == 0) { - /* Disable gating AHB clock for USB */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value &= ~CCM_AHB_GATING_USB0; /* disable AHB clock gate usb0 */ - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - } - - return (0); -} - -static int -a10_clk_usbphy_activate(struct a10_ccm_softc *sc) -{ - uint32_t reg_value; - - CCM_LOCK_ASSERT(sc); - - if (++sc->usbphy_cnt == 1) { - /* Enable clock for USB */ - reg_value = ccm_read_4(sc, CCM_USB_CLK); - reg_value |= CCM_USB_PHY; /* USBPHY */ - reg_value |= CCM_USBPHY0_RESET; /* disable reset for USBPHY0 */ - reg_value |= CCM_USBPHY1_RESET; /* disable reset for USBPHY1 */ - reg_value |= CCM_USBPHY2_RESET; /* disable reset for USBPHY2 */ - ccm_write_4(sc, CCM_USB_CLK, reg_value); - } - - return (0); -} - -static int -a10_clk_usbphy_deactivate(struct a10_ccm_softc *sc) -{ - uint32_t reg_value; - - CCM_LOCK_ASSERT(sc); - - if (--sc->usbphy_cnt == 0) { - /* Disable clock for USB */ - reg_value = ccm_read_4(sc, CCM_USB_CLK); - reg_value &= ~CCM_USB_PHY; /* USBPHY */ - reg_value &= ~CCM_USBPHY0_RESET; /* reset for USBPHY0 */ - reg_value &= ~CCM_USBPHY1_RESET; /* reset for USBPHY1 */ - reg_value &= ~CCM_USBPHY2_RESET; /* reset for USBPHY2 */ - ccm_write_4(sc, CCM_USB_CLK, reg_value); - } - - return (0); -} - -int -a10_clk_emac_activate(void) -{ - struct a10_ccm_softc *sc = a10_ccm_sc; - uint32_t reg_value; - - if (sc == NULL) - return (ENXIO); - - /* Gating AHB clock for EMAC */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_EMAC; - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - - return (0); -} - -int -a10_clk_gmac_activate(phandle_t node) -{ - char *phy_type; - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - /* Gating AHB clock for GMAC */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING1); - reg_value |= CCM_AHB_GATING_GMAC; - ccm_write_4(sc, CCM_AHB_GATING1, reg_value); - - /* Set GMAC mode. */ - reg_value = CCM_GMAC_CLK_MII; - if (OF_getprop_alloc(node, "phy-mode", 1, (void **)&phy_type) > 0) { - if (strcasecmp(phy_type, "rgmii") == 0) - reg_value = CCM_GMAC_CLK_RGMII | CCM_GMAC_MODE_RGMII; - else if (strcasecmp(phy_type, "rgmii-bpi") == 0) { - reg_value = CCM_GMAC_CLK_RGMII | CCM_GMAC_MODE_RGMII; - reg_value |= (3 << CCM_GMAC_CLK_DELAY_SHIFT); - } - free(phy_type, M_OFWPROP); - } - ccm_write_4(sc, CCM_GMAC_CLK, reg_value); - - return (0); -} - -static void -a10_clk_pll6_enable(void) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - /* - * SATA needs PLL6 to be a 100MHz clock. - * The SATA output frequency is 24MHz * n * k / m / 6. - * To get to 100MHz, k & m must be equal and n must be 25. - * For other uses the output frequency is 24MHz * n * k / 2. - */ - sc = a10_ccm_sc; - if (sc->pll6_enabled) - return; - reg_value = ccm_read_4(sc, CCM_PLL6_CFG); - reg_value &= ~CCM_PLL_CFG_BYPASS; - reg_value &= ~(CCM_PLL_CFG_FACTOR_K | CCM_PLL_CFG_FACTOR_M | - CCM_PLL_CFG_FACTOR_N); - reg_value |= (25 << CCM_PLL_CFG_FACTOR_N_SHIFT); - reg_value |= CCM_PLL6_CFG_SATA_CLKEN; - reg_value |= CCM_PLL_CFG_ENABLE; - ccm_write_4(sc, CCM_PLL6_CFG, reg_value); - sc->pll6_enabled = 1; -} - -static unsigned int -a10_clk_pll6_get_rate(void) -{ - struct a10_ccm_softc *sc; - uint32_t k, n, reg_value; - - sc = a10_ccm_sc; - reg_value = ccm_read_4(sc, CCM_PLL6_CFG); - n = ((reg_value & CCM_PLL_CFG_FACTOR_N) >> CCM_PLL_CFG_FACTOR_N_SHIFT); - k = ((reg_value & CCM_PLL_CFG_FACTOR_K) >> CCM_PLL_CFG_FACTOR_K_SHIFT) + - 1; - - return ((CCM_CLK_REF_FREQ * n * k) / 2); -} - -static int -a10_clk_pll2_set_rate(unsigned int freq) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - unsigned int prediv, postdiv, n; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - reg_value = ccm_read_4(sc, CCM_PLL2_CFG); - reg_value &= ~(CCM_PLL2_CFG_PREDIV | CCM_PLL2_CFG_POSTDIV | - CCM_PLL_CFG_FACTOR_N); - - /* - * Audio Codec needs PLL2 to be either 24576000 Hz or 22579200 Hz - * - * PLL2 output frequency is 24MHz * n / prediv / postdiv. - * To get as close as possible to the desired rate, we use a - * pre-divider of 21 and a post-divider of 4. With these values, - * a multiplier of 86 or 79 gets us close to the target rates. - */ - prediv = 21; - postdiv = 4; - - switch (freq) { - case 24576000: - n = 86; - reg_value |= CCM_PLL_CFG_ENABLE; - break; - case 22579200: - n = 79; - reg_value |= CCM_PLL_CFG_ENABLE; - break; - case 0: - n = 1; - reg_value &= ~CCM_PLL_CFG_ENABLE; - break; - default: - return (EINVAL); - } - - reg_value |= (prediv << CCM_PLL2_CFG_PREDIV_SHIFT); - reg_value |= (postdiv << CCM_PLL2_CFG_POSTDIV_SHIFT); - reg_value |= (n << CCM_PLL_CFG_FACTOR_N_SHIFT); - ccm_write_4(sc, CCM_PLL2_CFG, reg_value); - - return (0); -} - -static int -a10_clk_pll3_set_rate(unsigned int freq) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - int m; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - if (freq == 0) { - /* Disable PLL3 */ - ccm_write_4(sc, CCM_PLL3_CFG, 0); - return (0); - } - - m = freq / TCON_RATE_HZ(TCON_PLLREF_SINGLE); - - reg_value = CCM_PLL_CFG_ENABLE | CCM_PLL3_CFG_MODE_SEL_INT | m; - ccm_write_4(sc, CCM_PLL3_CFG, reg_value); - - return (0); -} - -static unsigned int -a10_clk_pll5x_get_rate(void) -{ - struct a10_ccm_softc *sc; - uint32_t k, n, p, reg_value; - - sc = a10_ccm_sc; - reg_value = ccm_read_4(sc, CCM_PLL5_CFG); - n = ((reg_value & CCM_PLL_CFG_FACTOR_N) >> CCM_PLL_CFG_FACTOR_N_SHIFT); - k = ((reg_value & CCM_PLL_CFG_FACTOR_K) >> CCM_PLL_CFG_FACTOR_K_SHIFT) + - 1; - p = ((reg_value & CCM_PLL5_CFG_OUT_EXT_DIV_P) >> CCM_PLL5_CFG_OUT_EXT_DIV_P_SHIFT); - - return ((CCM_CLK_REF_FREQ * n * k) >> p); -} - -int -a10_clk_ahci_activate(void) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - a10_clk_pll6_enable(); - - /* Gating AHB clock for SATA */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_SATA; - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - DELAY(1000); - - ccm_write_4(sc, CCM_SATA_CLK, CCM_PLL_CFG_ENABLE); - - return (0); -} - -int -a10_clk_mmc_activate(int devid) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - a10_clk_pll6_enable(); - - /* Gating AHB clock for SD/MMC */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_SDMMC0 << devid; - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - - return (0); -} - -int -a10_clk_mmc_cfg(int devid, int freq) -{ - struct a10_ccm_softc *sc; - uint32_t clksrc, m, n, ophase, phase, reg_value; - unsigned int pll_freq; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - freq /= 1000; - if (freq <= 400) { - pll_freq = CCM_CLK_REF_FREQ / 1000; - clksrc = CCM_SD_CLK_SRC_SEL_OSC24M; - ophase = 0; - phase = 0; - n = 2; - } else if (freq <= 25000) { - pll_freq = a10_clk_pll6_get_rate() / 1000; - clksrc = CCM_SD_CLK_SRC_SEL_PLL6; - ophase = 0; - phase = 5; - n = 2; - } else if (freq <= 50000) { - pll_freq = a10_clk_pll6_get_rate() / 1000; - clksrc = CCM_SD_CLK_SRC_SEL_PLL6; - ophase = 3; - phase = 5; - n = 0; - } else - return (EINVAL); - m = ((pll_freq / (1 << n)) / (freq)) - 1; - reg_value = ccm_read_4(sc, CCM_MMC0_SCLK_CFG + (devid * 4)); - reg_value &= ~CCM_SD_CLK_SRC_SEL; - reg_value |= (clksrc << CCM_SD_CLK_SRC_SEL_SHIFT); - reg_value &= ~CCM_SD_CLK_PHASE_CTR; - reg_value |= (phase << CCM_SD_CLK_PHASE_CTR_SHIFT); - reg_value &= ~CCM_SD_CLK_DIV_RATIO_N; - reg_value |= (n << CCM_SD_CLK_DIV_RATIO_N_SHIFT); - reg_value &= ~CCM_SD_CLK_OPHASE_CTR; - reg_value |= (ophase << CCM_SD_CLK_OPHASE_CTR_SHIFT); - reg_value &= ~CCM_SD_CLK_DIV_RATIO_M; - reg_value |= m; - reg_value |= CCM_PLL_CFG_ENABLE; - ccm_write_4(sc, CCM_MMC0_SCLK_CFG + (devid * 4), reg_value); - - return (0); -} - -int -a10_clk_i2c_activate(int devid) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - a10_clk_pll6_enable(); - - /* Gating APB clock for I2C/TWI */ - reg_value = ccm_read_4(sc, CCM_APB1_GATING); - if (devid == 4) - reg_value |= CCM_APB1_GATING_TWI << 15; - else - reg_value |= CCM_APB1_GATING_TWI << devid; - ccm_write_4(sc, CCM_APB1_GATING, reg_value); - - return (0); -} - -int -a10_clk_dmac_activate(void) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - /* Gating AHB clock for DMA controller */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING0); - reg_value |= CCM_AHB_GATING_DMA; - ccm_write_4(sc, CCM_AHB_GATING0, reg_value); - - return (0); -} - -int -a10_clk_codec_activate(unsigned int freq) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - a10_clk_pll2_set_rate(freq); - - /* Gating APB clock for ADDA */ - reg_value = ccm_read_4(sc, CCM_APB0_GATING); - reg_value |= CCM_APB0_GATING_ADDA; - ccm_write_4(sc, CCM_APB0_GATING, reg_value); - - /* Enable audio codec clock */ - reg_value = ccm_read_4(sc, CCM_AUDIO_CODEC_CLK); - reg_value |= CCM_AUDIO_CODEC_ENABLE; - ccm_write_4(sc, CCM_AUDIO_CODEC_CLK, reg_value); - - return (0); -} - -static void -calc_tcon_pll(int f_ref, int f_out, int *pm, int *pn) -{ - int best, m, n, f_cur, diff; - - best = TCON_PLL_WORST; - for (n = TCON_PLL_N_MIN; n <= TCON_PLL_N_MAX; n++) { - for (m = TCON_PLL_M_MIN; m <= TCON_PLL_M_MAX; m++) { - f_cur = (m * f_ref) / n; - diff = f_out - f_cur; - if (diff > 0 && diff < best) { - best = diff; - *pm = m; - *pn = n; - } - } - } -} - -int -a10_clk_debe_activate(void) -{ - struct a10_ccm_softc *sc; - int pll_rate, clk_div; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - /* Leave reset */ - reg_value = ccm_read_4(sc, CCM_BE0_SCLK); - reg_value |= CCM_BE_CLK_RESET; - ccm_write_4(sc, CCM_BE0_SCLK, reg_value); - - pll_rate = a10_clk_pll5x_get_rate(); - - clk_div = howmany(pll_rate, DEBE_DEFAULT_RATE); - - /* Set BE0 source to PLL5 (DDR external peripheral clock) */ - reg_value = CCM_BE_CLK_RESET; - reg_value |= (CCM_BE_CLK_SRC_SEL_PLL5 << CCM_BE_CLK_SRC_SEL_SHIFT); - reg_value |= (clk_div - 1); - ccm_write_4(sc, CCM_BE0_SCLK, reg_value); - - /* Gating AHB clock for BE0 */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING1); - reg_value |= CCM_AHB_GATING_DE_BE0; - ccm_write_4(sc, CCM_AHB_GATING1, reg_value); - - /* Enable DRAM clock to BE0 */ - reg_value = ccm_read_4(sc, CCM_DRAM_CLK); - reg_value |= CCM_DRAM_CLK_BE0_CLK_ENABLE; - ccm_write_4(sc, CCM_DRAM_CLK, reg_value); - - /* Enable BE0 clock */ - reg_value = ccm_read_4(sc, CCM_BE0_SCLK); - reg_value |= CCM_BE_CLK_SCLK_GATING; - ccm_write_4(sc, CCM_BE0_SCLK, reg_value); - - return (0); -} - -int -a10_clk_lcd_activate(void) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - /* Clear LCD0 reset */ - reg_value = ccm_read_4(sc, CCM_LCD0_CH0_CLK); - reg_value |= CCM_LCD_CH0_RESET; - ccm_write_4(sc, CCM_LCD0_CH0_CLK, reg_value); - - /* Gating AHB clock for LCD0 */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING1); - reg_value |= CCM_AHB_GATING_LCD0; - ccm_write_4(sc, CCM_AHB_GATING1, reg_value); - - return (0); -} - -int -a10_clk_tcon_activate(unsigned int freq) -{ - struct a10_ccm_softc *sc; - int m, n, m2, n2, f_single, f_double, dbl, src_sel; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - m = n = m2 = n2 = 0; - dbl = 0; - - calc_tcon_pll(TCON_PLLREF_SINGLE, TCON_RATE_KHZ(freq), &m, &n); - calc_tcon_pll(TCON_PLLREF_DOUBLE, TCON_RATE_KHZ(freq), &m2, &n2); - - f_single = n ? (m * TCON_PLLREF_SINGLE) / n : 0; - f_double = n2 ? (m2 * TCON_PLLREF_DOUBLE) / n2 : 0; - - if (f_double > f_single) { - dbl = 1; - m = m2; - n = n2; - } - src_sel = dbl ? CCM_LCD_CH1_SRC_SEL_PLL3_2X : CCM_LCD_CH1_SRC_SEL_PLL3; - - if (n == 0 || m == 0) - return (EINVAL); - - /* Set PLL3 to the closest possible rate */ - a10_clk_pll3_set_rate(TCON_RATE_HZ(m * TCON_PLLREF_SINGLE)); - - /* Enable LCD0 CH1 clock */ - ccm_write_4(sc, CCM_LCD0_CH1_CLK, - CCM_LCD_CH1_SCLK2_GATING | CCM_LCD_CH1_SCLK1_GATING | - (src_sel << CCM_LCD_CH1_SRC_SEL_SHIFT) | (n - 1)); - - return (0); -} - -int -a10_clk_tcon_get_config(int *pdiv, int *pdbl) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - int src; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - reg_value = ccm_read_4(sc, CCM_LCD0_CH1_CLK); - - *pdiv = (reg_value & CCM_LCD_CH1_CLK_DIV_RATIO_M) + 1; - - src = (reg_value & CCM_LCD_CH1_SRC_SEL) >> CCM_LCD_CH1_SRC_SEL_SHIFT; - switch (src) { - case CCM_LCD_CH1_SRC_SEL_PLL3: - case CCM_LCD_CH1_SRC_SEL_PLL7: - *pdbl = 0; - break; - case CCM_LCD_CH1_SRC_SEL_PLL3_2X: - case CCM_LCD_CH1_SRC_SEL_PLL7_2X: - *pdbl = 1; - break; - } - - return (0); -} - -int -a10_clk_hdmi_activate(void) -{ - struct a10_ccm_softc *sc; - uint32_t reg_value; - int error; - - sc = a10_ccm_sc; - if (sc == NULL) - return (ENXIO); - - /* Set PLL3 to 297MHz */ - error = a10_clk_pll3_set_rate(HDMI_DEFAULT_RATE); - if (error != 0) - return (error); - - /* Enable HDMI clock, source PLL3 */ - reg_value = ccm_read_4(sc, CCM_HDMI_CLK); - reg_value |= CCM_HDMI_CLK_SCLK_GATING; - reg_value &= ~CCM_HDMI_CLK_SRC_SEL; - reg_value |= (CCM_HDMI_CLK_SRC_SEL_PLL3 << CCM_HDMI_CLK_SRC_SEL_SHIFT); - ccm_write_4(sc, CCM_HDMI_CLK, reg_value); - - /* Gating AHB clock for HDMI */ - reg_value = ccm_read_4(sc, CCM_AHB_GATING1); - reg_value |= CCM_AHB_GATING_HDMI; - ccm_write_4(sc, CCM_AHB_GATING1, reg_value); - - return (0); -} diff --git a/sys/arm/allwinner/a10_clk.h b/sys/arm/allwinner/a10_clk.h deleted file mode 100644 index 6b626be..0000000 --- a/sys/arm/allwinner/a10_clk.h +++ /dev/null @@ -1,247 +0,0 @@ -/*- - * Copyright (c) 2013 Ganbold Tsagaankhuu - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _A10_CLK_H_ -#define _A10_CLK_H_ - -#define CCM_PLL1_CFG 0x0000 -#define CCM_PLL1_TUN 0x0004 -#define CCM_PLL2_CFG 0x0008 -#define CCM_PLL2_TUN 0x000c -#define CCM_PLL3_CFG 0x0010 -#define CCM_PLL3_TUN 0x0014 -#define CCM_PLL4_CFG 0x0018 -#define CCM_PLL4_TUN 0x001c -#define CCM_PLL5_CFG 0x0020 -#define CCM_PLL5_TUN 0x0024 -#define CCM_PLL6_CFG 0x0028 -#define CCM_PLL6_TUN 0x002c -#define CCM_PLL7_CFG 0x0030 -#define CCM_PLL7_TUN 0x0034 -#define CCM_PLL1_TUN2 0x0038 -#define CCM_PLL5_TUN2 0x003c -#define CCM_PLL_LOCK_DBG 0x004c -#define CCM_OSC24M_CFG 0x0050 -#define CCM_CPU_AHB_APB0_CFG 0x0054 -#define CCM_APB1_CLK_DIV 0x0058 -#define CCM_AXI_GATING 0x005c -#define CCM_AHB_GATING0 0x0060 -#define CCM_AHB_GATING1 0x0064 -#define CCM_APB0_GATING 0x0068 -#define CCM_APB1_GATING 0x006c -#define CCM_NAND_SCLK_CFG 0x0080 -#define CCM_MS_SCLK_CFG 0x0084 -#define CCM_MMC0_SCLK_CFG 0x0088 -#define CCM_MMC1_SCLK_CFG 0x008c -#define CCM_MMC2_SCLK_CFG 0x0090 -#define CCM_MMC3_SCLK_CFG 0x0094 -#define CCM_TS_CLK 0x0098 -#define CCM_SS_CLK 0x009c -#define CCM_SPI0_CLK 0x00a0 -#define CCM_SPI1_CLK 0x00a4 -#define CCM_SPI2_CLK 0x00a8 -#define CCM_PATA_CLK 0x00ac -#define CCM_IR0_CLK 0x00b0 -#define CCM_IR1_CLK 0x00b4 -#define CCM_IIS_CLK 0x00b8 -#define CCM_AC97_CLK 0x00bc -#define CCM_SPDIF_CLK 0x00c0 -#define CCM_KEYPAD_CLK 0x00c4 -#define CCM_SATA_CLK 0x00c8 -#define CCM_USB_CLK 0x00cc -#define CCM_GPS_CLK 0x00d0 -#define CCM_SPI3_CLK 0x00d4 -#define CCM_DRAM_CLK 0x0100 -#define CCM_BE0_SCLK 0x0104 -#define CCM_BE1_SCLK 0x0108 -#define CCM_FE0_CLK 0x010c -#define CCM_FE1_CLK 0x0110 -#define CCM_MP_CLK 0x0114 -#define CCM_LCD0_CH0_CLK 0x0118 -#define CCM_LCD1_CH0_CLK 0x011c -#define CCM_CSI_ISP_CLK 0x0120 -#define CCM_TVD_CLK 0x0128 -#define CCM_LCD0_CH1_CLK 0x012c -#define CCM_LCD1_CH1_CLK 0x0130 -#define CCM_CS0_CLK 0x0134 -#define CCM_CS1_CLK 0x0138 -#define CCM_VE_CLK 0x013c -#define CCM_AUDIO_CODEC_CLK 0x0140 -#define CCM_AVS_CLK 0x0144 -#define CCM_ACE_CLK 0x0148 -#define CCM_LVDS_CLK 0x014c -#define CCM_HDMI_CLK 0x0150 -#define CCM_MALI400_CLK 0x0154 -#define CCM_GMAC_CLK 0x0164 - -#define CCM_GMAC_CLK_DELAY_SHIFT 10 -#define CCM_GMAC_CLK_MODE_MASK 0x7 -#define CCM_GMAC_MODE_RGMII (1 << 2) -#define CCM_GMAC_CLK_MII 0x0 -#define CCM_GMAC_CLK_EXT_RGMII 0x1 -#define CCM_GMAC_CLK_RGMII 0x2 - -/* APB0_GATING */ -#define CCM_APB0_GATING_ADDA (1 << 0) - -/* AHB_GATING_REG0 */ -#define CCM_AHB_GATING_USB0 (1 << 0) -#define CCM_AHB_GATING_EHCI0 (1 << 1) -#define CCM_AHB_GATING_OHCI0 (1 << 2) -#define CCM_AHB_GATING_EHCI1 (1 << 3) -#define CCM_AHB_GATING_OHCI1 (1 << 4) -#define CCM_AHB_GATING_DMA (1 << 6) -#define CCM_AHB_GATING_SDMMC0 (1 << 8) -#define CCM_AHB_GATING_EMAC (1 << 17) -#define CCM_AHB_GATING_SATA (1 << 25) - -/* AHB_GATING_REG1 */ -#define CCM_AHB_GATING_GMAC (1 << 17) -#define CCM_AHB_GATING_DE_BE1 (1 << 13) -#define CCM_AHB_GATING_DE_BE0 (1 << 12) -#define CCM_AHB_GATING_HDMI (1 << 11) -#define CCM_AHB_GATING_LCD1 (1 << 5) -#define CCM_AHB_GATING_LCD0 (1 << 4) - -/* APB1_GATING_REG */ -#define CCM_APB1_GATING_TWI (1 << 0) - -/* USB */ -#define CCM_USB_PHY (1 << 8) -#define CCM_SCLK_GATING_OHCI1 (1 << 7) -#define CCM_SCLK_GATING_OHCI0 (1 << 6) -#define CCM_USBPHY2_RESET (1 << 2) -#define CCM_USBPHY1_RESET (1 << 1) -#define CCM_USBPHY0_RESET (1 << 0) - -#define CCM_PLL_CFG_ENABLE (1U << 31) -#define CCM_PLL_CFG_BYPASS (1U << 30) -#define CCM_PLL_CFG_PLL5 (1U << 25) -#define CCM_PLL_CFG_PLL6 (1U << 24) -#define CCM_PLL_CFG_FACTOR_N 0x1f00 -#define CCM_PLL_CFG_FACTOR_N_SHIFT 8 -#define CCM_PLL_CFG_FACTOR_K 0x30 -#define CCM_PLL_CFG_FACTOR_K_SHIFT 4 -#define CCM_PLL_CFG_FACTOR_M 0x3 - -#define CCM_PLL2_CFG_POSTDIV 0x3c000000 -#define CCM_PLL2_CFG_POSTDIV_SHIFT 26 -#define CCM_PLL2_CFG_PREDIV 0x1f -#define CCM_PLL2_CFG_PREDIV_SHIFT 0 - -#define CCM_PLL3_CFG_MODE_SEL_SHIFT 15 -#define CCM_PLL3_CFG_MODE_SEL_FRACT (0 << CCM_PLL3_CFG_MODE_SEL_SHIFT) -#define CCM_PLL3_CFG_MODE_SEL_INT (1 << CCM_PLL3_CFG_MODE_SEL_SHIFT) -#define CCM_PLL3_CFG_FUNC_SET_SHIFT 14 -#define CCM_PLL3_CFG_FUNC_SET_270MHZ (0 << CCM_PLL3_CFG_FUNC_SET_SHIFT) -#define CCM_PLL3_CFG_FUNC_SET_297MHZ (1 << CCM_PLL3_CFG_FUNC_SET_SHIFT) -#define CCM_PLL3_CFG_FACTOR_M 0x7f - -#define CCM_PLL5_CFG_OUT_EXT_DIV_P 0x30000 -#define CCM_PLL5_CFG_OUT_EXT_DIV_P_SHIFT 16 - -#define CCM_PLL6_CFG_SATA_CLKEN (1U << 14) - -#define CCM_SD_CLK_SRC_SEL 0x3000000 -#define CCM_SD_CLK_SRC_SEL_SHIFT 24 -#define CCM_SD_CLK_SRC_SEL_OSC24M 0 -#define CCM_SD_CLK_SRC_SEL_PLL6 1 -#define CCM_SD_CLK_PHASE_CTR 0x700000 -#define CCM_SD_CLK_PHASE_CTR_SHIFT 20 -#define CCM_SD_CLK_DIV_RATIO_N 0x30000 -#define CCM_SD_CLK_DIV_RATIO_N_SHIFT 16 -#define CCM_SD_CLK_OPHASE_CTR 0x700 -#define CCM_SD_CLK_OPHASE_CTR_SHIFT 8 -#define CCM_SD_CLK_DIV_RATIO_M 0xf - -#define CCM_AUDIO_CODEC_ENABLE (1U << 31) - -#define CCM_LCD_CH0_SCLK_GATING (1U << 31) -#define CCM_LCD_CH0_RESET (1U << 30) -#define CCM_LCD_CH0_SRC_SEL 0x03000000 -#define CCM_LCD_CH0_SRC_SEL_SHIFT 24 -#define CCM_LCD_CH0_SRC_SEL_PLL3 0 -#define CCM_LCD_CH0_SRC_SEL_PLL7 1 -#define CCM_LCD_CH0_SRC_SEL_PLL3_2X 2 -#define CCM_LCD_CH0_SRC_SEL_PLL6_2X 3 - -#define CCM_LCD_CH1_SCLK2_GATING (1U << 31) -#define CCM_LCD_CH1_SRC_SEL 0x03000000 -#define CCM_LCD_CH1_SRC_SEL_SHIFT 24 -#define CCM_LCD_CH1_SRC_SEL_PLL3 0 -#define CCM_LCD_CH1_SRC_SEL_PLL7 1 -#define CCM_LCD_CH1_SRC_SEL_PLL3_2X 2 -#define CCM_LCD_CH1_SRC_SEL_PLL7_2X 3 -#define CCM_LCD_CH1_SCLK1_GATING (1U << 15) -#define CCM_LCD_CH1_SCLK1_SRC_SEL_SHIFT 11 -#define CCM_LCD_CH1_SCLK1_SRC_SEL_SCLK2 0 -#define CCM_LCD_CH1_SCLK1_SRC_SEL_SCLK2_DIV2 1 -#define CCM_LCD_CH1_CLK_DIV_RATIO_M 0xf - -#define CCM_DRAM_CLK_BE1_CLK_ENABLE (1U << 27) -#define CCM_DRAM_CLK_BE0_CLK_ENABLE (1U << 26) - -#define CCM_BE_CLK_SCLK_GATING (1U << 31) -#define CCM_BE_CLK_RESET (1U << 30) -#define CCM_BE_CLK_SRC_SEL 0x03000000 -#define CCM_BE_CLK_SRC_SEL_SHIFT 24 -#define CCM_BE_CLK_SRC_SEL_PLL3 0 -#define CCM_BE_CLK_SRC_SEL_PLL7 1 -#define CCM_BE_CLK_SRC_SEL_PLL5 2 -#define CCM_BE_CLK_DIV_RATIO_M 0xf - -#define CCM_HDMI_CLK_SCLK_GATING (1U << 31) -#define CCM_HDMI_CLK_SRC_SEL 0x03000000 -#define CCM_HDMI_CLK_SRC_SEL_SHIFT 24 -#define CCM_HDMI_CLK_SRC_SEL_PLL3 0 -#define CCM_HDMI_CLK_SRC_SEL_PLL7 1 -#define CCM_HDMI_CLK_SRC_SEL_PLL3_2X 2 -#define CCM_HDMI_CLK_SRC_SEL_PLL7_2X 3 -#define CCM_HDMI_CLK_DIV_RATIO_M 0xf - -#define CCM_CLK_REF_FREQ 24000000U - -int a10_clk_ehci_activate(void); -int a10_clk_ehci_deactivate(void); -int a10_clk_ohci_activate(void); -int a10_clk_ohci_deactivate(void); -int a10_clk_emac_activate(void); -int a10_clk_gmac_activate(phandle_t); -int a10_clk_ahci_activate(void); -int a10_clk_mmc_activate(int); -int a10_clk_mmc_cfg(int, int); -int a10_clk_i2c_activate(int); -int a10_clk_dmac_activate(void); -int a10_clk_codec_activate(unsigned int); -int a10_clk_debe_activate(void); -int a10_clk_lcd_activate(void); -int a10_clk_tcon_activate(unsigned int); -int a10_clk_tcon_get_config(int *, int *); -int a10_clk_hdmi_activate(void); - -#endif /* _A10_CLK_H_ */ diff --git a/sys/arm/allwinner/a10_codec.c b/sys/arm/allwinner/a10_codec.c index 6646f2d..f791b18 100644 --- a/sys/arm/allwinner/a10_codec.c +++ b/sys/arm/allwinner/a10_codec.c @@ -50,7 +50,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include "sunxi_dma_if.h" #include "mixer_if.h" @@ -738,6 +738,7 @@ a10codec_attach(device_t dev) { struct a10codec_info *sc; char status[SND_STATUSLEN]; + clk_t clk_apb, clk_codec; uint32_t val; int error; @@ -778,6 +779,24 @@ a10codec_attach(device_t dev) goto fail; } + /* Get clocks */ + error = clk_get_by_ofw_name(dev, "apb", &clk_apb); + if (error != 0) { + device_printf(dev, "cannot find apb clock\n"); + goto fail; + } + error = clk_get_by_ofw_name(dev, "codec", &clk_codec); + if (error != 0) { + device_printf(dev, "cannot find codec clock\n"); + goto fail; + } + + /* Gating APB clock for codec */ + error = clk_enable(clk_apb); + if (error != 0) { + device_printf(dev, "cannot enable apb clock\n"); + goto fail; + } /* Activate audio codec clock. According to the A10 and A20 user * manuals, Audio_pll can be either 24.576MHz or 22.5792MHz. Most * audio sampling rates require an 24.576MHz input clock with the @@ -787,7 +806,17 @@ a10codec_attach(device_t dev) * 24.576MHz clock source and don't advertise native support for * the three sampling rates that require a 22.5792MHz input. */ - a10_clk_codec_activate(24576000); + error = clk_set_freq(clk_codec, 24576000, CLK_SET_ROUND_DOWN); + if (error != 0) { + device_printf(dev, "cannot set codec clock frequency\n"); + goto fail; + } + /* Enable audio codec clock */ + error = clk_enable(clk_codec); + if (error != 0) { + device_printf(dev, "cannot enable codec clock\n"); + goto fail; + } /* Enable DAC */ val = CODEC_READ(sc, AC_DAC_DPC); diff --git a/sys/arm/allwinner/a10_dmac.c b/sys/arm/allwinner/a10_dmac.c index 65fa352..fd5aaa6 100644 --- a/sys/arm/allwinner/a10_dmac.c +++ b/sys/arm/allwinner/a10_dmac.c @@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include "sunxi_dma_if.h" @@ -111,6 +111,7 @@ a10dmac_attach(device_t dev) { struct a10dmac_softc *sc; unsigned int index; + clk_t clk; int error; sc = device_get_softc(dev); @@ -123,7 +124,16 @@ a10dmac_attach(device_t dev) mtx_init(&sc->sc_mtx, "a10 dmac", NULL, MTX_SPIN); /* Activate DMA controller clock */ - a10_clk_dmac_activate(); + error = clk_get_by_ofw_index(dev, 0, &clk); + if (error != 0) { + device_printf(dev, "cannot get clock\n"); + return (error); + } + error = clk_enable(clk); + if (error != 0) { + device_printf(dev, "cannot enable clock\n"); + return (error); + } /* Disable all interrupts and clear pending status */ DMA_WRITE(sc, AWIN_DMA_IRQ_EN_REG, 0); diff --git a/sys/arm/allwinner/a10_ehci.c b/sys/arm/allwinner/a10_ehci.c index c633de2..c325d60 100644 --- a/sys/arm/allwinner/a10_ehci.c +++ b/sys/arm/allwinner/a10_ehci.c @@ -59,8 +59,8 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include +#include +#include #define EHCI_HC_DEVSTR "Allwinner Integrated USB 2.0 controller" @@ -90,25 +90,22 @@ static device_detach_t a10_ehci_detach; bs_r_1_proto(reversed); bs_w_1_proto(reversed); +struct aw_ehci_softc { + ehci_softc_t sc; + clk_t clk; + hwreset_t rst; +}; + struct aw_ehci_conf { - int (*clk_activate)(void); - int (*clk_deactivate)(void); bool sdram_init; }; static const struct aw_ehci_conf a10_ehci_conf = { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - .clk_activate = a10_clk_ehci_activate, - .clk_deactivate = a10_clk_ehci_deactivate, -#endif .sdram_init = true, }; static const struct aw_ehci_conf a31_ehci_conf = { -#if defined(SOC_ALLWINNER_A31) || defined(SOC_ALLWINNER_A31S) - .clk_activate = a31_clk_ehci_activate, - .clk_deactivate = a31_clk_ehci_deactivate, -#endif + .sdram_init = false, }; static struct ofw_compat_data compat_data[] = { @@ -136,7 +133,8 @@ a10_ehci_probe(device_t self) static int a10_ehci_attach(device_t self) { - ehci_softc_t *sc = device_get_softc(self); + struct aw_ehci_softc *aw_sc = device_get_softc(self); + ehci_softc_t *sc = &aw_sc->sc; const struct aw_ehci_conf *conf; bus_space_handle_t bsh; int err; @@ -144,10 +142,6 @@ a10_ehci_attach(device_t self) uint32_t reg_value = 0; conf = USB_CONF(self); - if (conf->clk_activate == NULL) { - device_printf(self, "clock not supported\n"); - return (ENXIO); - } /* initialise some bus fields */ sc->sc_bus.parent = self; @@ -208,9 +202,24 @@ a10_ehci_attach(device_t self) sc->sc_flags |= EHCI_SCFLG_DONTRESET; + /* De-assert reset */ + if (hwreset_get_by_ofw_idx(self, 0, &aw_sc->rst) == 0) { + err = hwreset_deassert(aw_sc->rst); + if (err != 0) { + device_printf(self, "Could not de-assert reset\n"); + goto error; + } + } + /* Enable clock for USB */ - if (conf->clk_activate() != 0) { - device_printf(self, "Could not activate clock\n"); + err = clk_get_by_ofw_index(self, 0, &aw_sc->clk); + if (err != 0) { + device_printf(self, "Could not get clock\n"); + goto error; + } + err = clk_enable(aw_sc->clk); + if (err != 0) { + device_printf(self, "Could not enable clock\n"); goto error; } @@ -240,6 +249,8 @@ a10_ehci_attach(device_t self) return (0); error: + if (aw_sc->clk) + clk_release(aw_sc->clk); a10_ehci_detach(self); return (ENXIO); } @@ -247,7 +258,8 @@ error: static int a10_ehci_detach(device_t self) { - ehci_softc_t *sc = device_get_softc(self); + struct aw_ehci_softc *aw_sc = device_get_softc(self); + ehci_softc_t *sc = &aw_sc->sc; const struct aw_ehci_conf *conf; device_t bdev; int err; @@ -305,7 +317,14 @@ a10_ehci_detach(device_t self) A10_WRITE_4(sc, SW_USB_PMU_IRQ_ENABLE, reg_value); /* Disable clock for USB */ - conf->clk_deactivate(); + clk_disable(aw_sc->clk); + clk_release(aw_sc->clk); + + /* Assert reset */ + if (aw_sc->rst != NULL) { + hwreset_assert(aw_sc->rst); + hwreset_release(aw_sc->rst); + } return (0); } diff --git a/sys/arm/allwinner/a10_fb.c b/sys/arm/allwinner/a10_fb.c index ea033f8..cf8f167 100644 --- a/sys/arm/allwinner/a10_fb.c +++ b/sys/arm/allwinner/a10_fb.c @@ -54,7 +54,8 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include +#include #include "fb_if.h" #include "hdmi_if.h" @@ -66,6 +67,7 @@ __FBSDID("$FreeBSD$"); #define FB_ALIGN 0x1000 #define HDMI_ENABLE_DELAY 20000 +#define DEBE_FREQ 300000000 #define DOT_CLOCK_TO_HZ(c) ((c) * 1000) @@ -193,18 +195,68 @@ a10fb_freefb(struct a10fb_softc *sc) kmem_free(kernel_arena, sc->vaddr, sc->fbsize); } -static void +static int a10fb_setup_debe(struct a10fb_softc *sc, const struct videomode *mode) { int width, height, interlace, reg; + clk_t clk_ahb, clk_dram, clk_debe; + hwreset_t rst; uint32_t val; + int error; interlace = !!(mode->flags & VID_INTERLACE); width = mode->hdisplay; height = mode->vdisplay << interlace; - /* Enable DEBE clocks */ - a10_clk_debe_activate(); + /* Leave reset */ + error = hwreset_get_by_ofw_name(sc->dev, "de_be", &rst); + if (error != 0) { + device_printf(sc->dev, "cannot find reset 'de_be'\n"); + return (error); + } + error = hwreset_deassert(rst); + if (error != 0) { + device_printf(sc->dev, "couldn't de-assert reset 'de_be'\n"); + return (error); + } + /* Gating AHB clock for BE */ + error = clk_get_by_ofw_name(sc->dev, "ahb_de_be", &clk_ahb); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'ahb_de_be'\n"); + return (error); + } + error = clk_enable(clk_ahb); + if (error != 0) { + device_printf(sc->dev, "cannot enable clk 'ahb_de_be'\n"); + return (error); + } + /* Enable DRAM clock to BE */ + error = clk_get_by_ofw_name(sc->dev, "dram_de_be", &clk_dram); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'dram_de_be'\n"); + return (error); + } + error = clk_enable(clk_dram); + if (error != 0) { + device_printf(sc->dev, "cannot enable clk 'dram_de_be'\n"); + return (error); + } + /* Set BE clock to 300MHz and enable */ + error = clk_get_by_ofw_name(sc->dev, "de_be", &clk_debe); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'de_be'\n"); + return (error); + } + error = clk_set_freq(clk_debe, DEBE_FREQ, CLK_SET_ROUND_DOWN); + if (error != 0) { + device_printf(sc->dev, "cannot set 'de_be' frequency\n"); + return (error); + } + error = clk_enable(clk_debe); + if (error != 0) { + device_printf(sc->dev, "cannot enable clk 'de_be'\n"); + return (error); + } /* Initialize all registers to 0 */ for (reg = DEBE_REG_START; reg < DEBE_REG_END; reg += DEBE_REG_WIDTH) @@ -247,14 +299,55 @@ a10fb_setup_debe(struct a10fb_softc *sc, const struct videomode *mode) val = DEBE_READ(sc, DEBE_MODCTL); val |= MODCTL_START_CTL; DEBE_WRITE(sc, DEBE_MODCTL, val); + + return (0); } -static void +static int +a10fb_setup_pll(struct a10fb_softc *sc, uint64_t freq) +{ + clk_t clk_sclk1, clk_sclk2; + int error; + + error = clk_get_by_ofw_name(sc->dev, "lcd_ch1_sclk1", &clk_sclk1); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'lcd_ch1_sclk1'\n"); + return (error); + } + error = clk_get_by_ofw_name(sc->dev, "lcd_ch1_sclk2", &clk_sclk2); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'lcd_ch1_sclk2'\n"); + return (error); + } + + error = clk_set_freq(clk_sclk2, freq, 0); + if (error != 0) { + device_printf(sc->dev, "cannot set lcd ch1 frequency\n"); + return (error); + } + error = clk_enable(clk_sclk2); + if (error != 0) { + device_printf(sc->dev, "cannot enable lcd ch1 sclk2\n"); + return (error); + } + error = clk_enable(clk_sclk1); + if (error != 0) { + device_printf(sc->dev, "cannot enable lcd ch1 sclk1\n"); + return (error); + } + + return (0); +} + +static int a10fb_setup_tcon(struct a10fb_softc *sc, const struct videomode *mode) { u_int interlace, hspw, hbp, vspw, vbp, vbl, width, height, start_delay; u_int vtotal, framerate, clk; + clk_t clk_ahb; + hwreset_t rst; uint32_t val; + int error; interlace = !!(mode->flags & VID_INTERLACE); width = mode->hdisplay; @@ -266,8 +359,28 @@ a10fb_setup_tcon(struct a10fb_softc *sc, const struct videomode *mode) vbl = VBLANK_LEN(mode->vtotal, mode->vdisplay, interlace); start_delay = START_DELAY(vbl); - /* Enable LCD clocks */ - a10_clk_lcd_activate(); + /* Leave reset */ + error = hwreset_get_by_ofw_name(sc->dev, "lcd", &rst); + if (error != 0) { + device_printf(sc->dev, "cannot find reset 'lcd'\n"); + return (error); + } + error = hwreset_deassert(rst); + if (error != 0) { + device_printf(sc->dev, "couldn't de-assert reset 'lcd'\n"); + return (error); + } + /* Gating AHB clock for LCD */ + error = clk_get_by_ofw_name(sc->dev, "ahb_lcd", &clk_ahb); + if (error != 0) { + device_printf(sc->dev, "cannot find clk 'ahb_lcd'\n"); + return (error); + } + error = clk_enable(clk_ahb); + if (error != 0) { + device_printf(sc->dev, "cannot enable clk 'ahb_lcd'\n"); + return (error); + } /* Disable TCON and TCON1 */ TCON_WRITE(sc, TCON_GCTL, 0); @@ -322,7 +435,7 @@ a10fb_setup_tcon(struct a10fb_softc *sc, const struct videomode *mode) TCON_WRITE(sc, TCON1_CTL, val); /* Setup PLL */ - a10_clk_tcon_activate(DOT_CLOCK_TO_HZ(mode->dot_clock)); + return (a10fb_setup_pll(sc, DOT_CLOCK_TO_HZ(mode->dot_clock))); } static void @@ -378,10 +491,14 @@ a10fb_configure(struct a10fb_softc *sc, const struct videomode *mode) } /* Setup display backend */ - a10fb_setup_debe(sc, mode); + error = a10fb_setup_debe(sc, mode); + if (error != 0) + return (error); /* Setup display timing controller */ - a10fb_setup_tcon(sc, mode); + error = a10fb_setup_tcon(sc, mode); + if (error != 0) + return (error); /* Attach framebuffer device */ sc->info.fb_name = device_get_nameunit(sc->dev); diff --git a/sys/arm/allwinner/a10_hdmi.c b/sys/arm/allwinner/a10_hdmi.c index ff86fa0..99cbc2f 100644 --- a/sys/arm/allwinner/a10_hdmi.c +++ b/sys/arm/allwinner/a10_hdmi.c @@ -49,7 +49,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #include "hdmi_if.h" @@ -204,6 +204,7 @@ __FBSDID("$FreeBSD$"); #define HDMI_VSDB_MINLEN 5 #define HDMI_OUI "\x03\x0c\x00" #define HDMI_OUI_LEN 3 +#define HDMI_DEFAULT_FREQ 297000000 struct a10hdmi_softc { struct resource *res; @@ -214,6 +215,10 @@ struct a10hdmi_softc { int has_hdmi; int has_audio; + + clk_t clk_ahb; + clk_t clk_hdmi; + clk_t clk_lcd; }; static struct resource_spec a10hdmi_spec[] = { @@ -287,7 +292,33 @@ a10hdmi_attach(device_t dev) return (ENXIO); } - a10_clk_hdmi_activate(); + /* Setup clocks */ + error = clk_get_by_ofw_name(dev, "ahb", &sc->clk_ahb); + if (error != 0) { + device_printf(dev, "cannot find ahb clock\n"); + return (error); + } + error = clk_get_by_ofw_name(dev, "hdmi", &sc->clk_hdmi); + if (error != 0) { + device_printf(dev, "cannot find hdmi clock\n"); + return (error); + } + error = clk_get_by_ofw_name(dev, "lcd", &sc->clk_lcd); + if (error != 0) { + device_printf(dev, "cannot find lcd clock\n"); + } + /* Enable HDMI clock */ + error = clk_enable(sc->clk_hdmi); + if (error != 0) { + device_printf(dev, "cannot enable hdmi clock\n"); + return (error); + } + /* Gating AHB clock for HDMI */ + error = clk_enable(sc->clk_ahb); + if (error != 0) { + device_printf(dev, "cannot enable ahb gate\n"); + return (error); + } a10hdmi_init(sc); @@ -527,6 +558,38 @@ a10hdmi_set_audiomode(device_t dev, const struct videomode *mode) } static int +a10hdmi_get_tcon_config(struct a10hdmi_softc *sc, int *div, int *dbl) +{ + uint64_t lcd_fin, lcd_fout; + clk_t clk_lcd_parent; + const char *pname; + int error; + + error = clk_get_parent(sc->clk_lcd, &clk_lcd_parent); + if (error != 0) + return (error); + + /* Get the LCD CH1 special clock 2 divider */ + error = clk_get_freq(sc->clk_lcd, &lcd_fout); + if (error != 0) + return (error); + error = clk_get_freq(clk_lcd_parent, &lcd_fin); + if (error != 0) + return (error); + *div = lcd_fin / lcd_fout; + + /* Detect LCD CH1 special clock using a 1X or 2X source */ + /* XXX */ + pname = clk_get_name(clk_lcd_parent); + if (strcmp(pname, "pll3-1x") == 0 || strcmp(pname, "pll7-1x") == 0) + *dbl = 0; + else + *dbl = 1; + + return (0); +} + +static int a10hdmi_set_videomode(device_t dev, const struct videomode *mode) { struct a10hdmi_softc *sc; @@ -543,9 +606,11 @@ a10hdmi_set_videomode(device_t dev, const struct videomode *mode) vspw = mode->vsync_end - mode->vsync_start; vbp = mode->vtotal - mode->vsync_start; - error = a10_clk_tcon_get_config(&clk_div, &clk_dbl); - if (error != 0) + error = a10hdmi_get_tcon_config(sc, &clk_div, &clk_dbl); + if (error != 0) { + device_printf(dev, "couldn't get tcon config: %d\n", error); return (error); + } /* Clear interrupt status */ HDMI_WRITE(sc, HDMI_INT_STATUS, HDMI_READ(sc, HDMI_INT_STATUS)); diff --git a/sys/arm/allwinner/a10_mmc.c b/sys/arm/allwinner/a10_mmc.c index dc341dd..1b89c0f 100644 --- a/sys/arm/allwinner/a10_mmc.c +++ b/sys/arm/allwinner/a10_mmc.c @@ -49,9 +49,9 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include -#include +#include +#include #define A10_MMC_MEMRES 0 #define A10_MMC_IRQRES 1 @@ -60,6 +60,8 @@ __FBSDID("$FreeBSD$"); #define A10_MMC_DMA_MAX_SIZE 0x2000 #define A10_MMC_DMA_FTRGLEVEL 0x20070008 +#define CARD_ID_FREQUENCY 400000 + static int a10_mmc_pio_mode = 0; TUNABLE_INT("hw.a10.mmc.pio_mode", &a10_mmc_pio_mode); @@ -74,6 +76,9 @@ struct a10_mmc_softc { bus_space_handle_t a10_bsh; bus_space_tag_t a10_bst; device_t a10_dev; + clk_t a10_clk_ahb; + clk_t a10_clk_mmc; + hwreset_t a10_rst_ahb; int a10_bus_busy; int a10_id; int a10_resid; @@ -147,7 +152,7 @@ a10_mmc_attach(device_t dev) struct a10_mmc_softc *sc; struct sysctl_ctx_list *ctx; struct sysctl_oid_list *tree; - int clk; + int error; sc = device_get_softc(dev); sc->a10_dev = dev; @@ -170,6 +175,9 @@ a10_mmc_attach(device_t dev) device_printf(dev, "cannot setup interrupt handler\n"); return (ENXIO); } + mtx_init(&sc->a10_mtx, device_get_nameunit(sc->a10_dev), "a10_mmc", + MTX_DEF); + callout_init_mtx(&sc->a10_timeoutc, &sc->a10_mtx, 0); /* * Later chips use a different FIFO offset. Unfortunately the FDT @@ -186,30 +194,41 @@ a10_mmc_attach(device_t dev) break; } + /* De-assert reset */ + if (hwreset_get_by_ofw_name(dev, "ahb", &sc->a10_rst_ahb) == 0) { + error = hwreset_deassert(sc->a10_rst_ahb); + if (error != 0) { + device_printf(dev, "cannot de-assert reset\n"); + return (error); + } + } + /* Activate the module clock. */ - switch (allwinner_soc_type()) { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - case ALLWINNERSOC_A10: - case ALLWINNERSOC_A10S: - case ALLWINNERSOC_A20: - clk = a10_clk_mmc_activate(sc->a10_id); - break; -#endif -#if defined(SOC_ALLWINNER_A31) || defined(SOC_ALLWINNER_A31S) - case ALLWINNERSOC_A31: - case ALLWINNERSOC_A31S: - clk = a31_clk_mmc_activate(sc->a10_id); - break; -#endif - default: - clk = -1; + error = clk_get_by_ofw_name(dev, "ahb", &sc->a10_clk_ahb); + if (error != 0) { + device_printf(dev, "cannot get ahb clock\n"); + goto fail; } - if (clk != 0) { - bus_teardown_intr(dev, sc->a10_res[A10_MMC_IRQRES], - sc->a10_intrhand); - bus_release_resources(dev, a10_mmc_res_spec, sc->a10_res); - device_printf(dev, "cannot activate mmc clock\n"); - return (ENXIO); + error = clk_enable(sc->a10_clk_ahb); + if (error != 0) { + device_printf(dev, "cannot enable ahb clock\n"); + goto fail; + } + error = clk_get_by_ofw_name(dev, "mmc", &sc->a10_clk_mmc); + if (error != 0) { + device_printf(dev, "cannot get mmc clock\n"); + goto fail; + } + error = clk_set_freq(sc->a10_clk_mmc, CARD_ID_FREQUENCY, + CLK_SET_ROUND_DOWN); + if (error != 0) { + device_printf(dev, "cannot init mmc clock\n"); + goto fail; + } + error = clk_enable(sc->a10_clk_mmc); + if (error != 0) { + device_printf(dev, "cannot enable mmc clock\n"); + goto fail; } sc->a10_timeout = 10; @@ -217,9 +236,6 @@ a10_mmc_attach(device_t dev) tree = SYSCTL_CHILDREN(device_get_sysctl_tree(dev)); SYSCTL_ADD_INT(ctx, tree, OID_AUTO, "req_timeout", CTLFLAG_RW, &sc->a10_timeout, 0, "Request timeout in seconds"); - mtx_init(&sc->a10_mtx, device_get_nameunit(sc->a10_dev), "a10_mmc", - MTX_DEF); - callout_init_mtx(&sc->a10_timeoutc, &sc->a10_mtx, 0); /* Reset controller. */ if (a10_mmc_reset(sc) != 0) { @@ -826,25 +842,14 @@ a10_mmc_update_ios(device_t bus, device_t child) return (error); /* Set the MMC clock. */ - switch (allwinner_soc_type()) { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - case ALLWINNERSOC_A10: - case ALLWINNERSOC_A10S: - case ALLWINNERSOC_A20: - error = a10_clk_mmc_cfg(sc->a10_id, ios->clock); - break; -#endif -#if defined(SOC_ALLWINNER_A31) || defined(SOC_ALLWINNER_A31S) - case ALLWINNERSOC_A31: - case ALLWINNERSOC_A31S: - error = a31_clk_mmc_cfg(sc->a10_id, ios->clock); - break; -#endif - default: - error = ENXIO; - } - if (error != 0) + error = clk_set_freq(sc->a10_clk_mmc, ios->clock, + CLK_SET_ROUND_DOWN); + if (error != 0) { + device_printf(sc->a10_dev, + "failed to set frequency to %u Hz: %d\n", + ios->clock, error); return (error); + } /* Enable clock. */ clkcr |= A10_MMC_CARD_CLK_ON; diff --git a/sys/arm/allwinner/a20/a20_if_dwc.c b/sys/arm/allwinner/a20/a20_if_dwc.c index 711873d..5e901e4 100644 --- a/sys/arm/allwinner/a20/a20_if_dwc.c +++ b/sys/arm/allwinner/a20/a20_if_dwc.c @@ -41,8 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include +#include #include "if_dwc_if.h" @@ -62,29 +61,39 @@ a20_if_dwc_probe(device_t dev) static int a20_if_dwc_init(device_t dev) { - int clk; - - /* Activate GMAC clock and set the pin mux to rgmii. */ - switch (allwinner_soc_type()) { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - case ALLWINNERSOC_A10: - case ALLWINNERSOC_A10S: - case ALLWINNERSOC_A20: - clk = a10_clk_gmac_activate(ofw_bus_get_node(dev)); - break; -#endif -#if defined(SOC_ALLWINNER_A31) || defined(SOC_ALLWINNER_A31S) - case ALLWINNERSOC_A31: - case ALLWINNERSOC_A31S: - clk = a31_clk_gmac_activate(ofw_bus_get_node(dev)); - break; -#endif - default: - clk = -1; - } - if (clk != 0) { - device_printf(dev, "could not activate gmac module\n"); - return (ENXIO); + const char *tx_parent_name; + char *phy_type; + clk_t clk_tx, clk_tx_parent; + phandle_t node; + int error; + + node = ofw_bus_get_node(dev); + + /* Configure PHY for MII or RGMII mode */ + if (OF_getprop_alloc(node, "phy-mode", 1, (void **)&phy_type)) { + error = clk_get_by_ofw_name(dev, "allwinner_gmac_tx", &clk_tx); + if (error != 0) { + device_printf(dev, "could not get tx clk\n"); + return (error); + } + + if (strcmp(phy_type, "rgmii") == 0) + tx_parent_name = "gmac_int_tx"; + else + tx_parent_name = "mii_phy_tx"; + + error = clk_get_by_name(dev, tx_parent_name, &clk_tx_parent); + if (error != 0) { + device_printf(dev, "could not get clock '%s'\n", + tx_parent_name); + return (error); + } + + error = clk_set_parent_by_clk(clk_tx, clk_tx_parent); + if (error != 0) { + device_printf(dev, "could not set tx clk parent\n"); + return (error); + } } return (0); diff --git a/sys/arm/allwinner/a31/a31_clk.c b/sys/arm/allwinner/a31/a31_clk.c deleted file mode 100644 index edda8bb..0000000 --- a/sys/arm/allwinner/a31/a31_clk.c +++ /dev/null @@ -1,378 +0,0 @@ -/*- - * Copyright (c) 2013 Ganbold Tsagaankhuu - * Copyright (c) 2016 Emmanuel Vadot - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Simple clock driver for Allwinner A31 - * Adapted from a10_clk.c -*/ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -struct a31_ccm_softc { - struct resource *res; - struct mtx mtx; - int pll6_enabled; - int ehci_refcnt; -}; - -static struct a31_ccm_softc *a31_ccm_sc = NULL; - -#define ccm_read_4(sc, reg) \ - bus_read_4((sc)->res, (reg)) -#define ccm_write_4(sc, reg, val) \ - bus_write_4((sc)->res, (reg), (val)) - -#define CCM_LOCK(sc) mtx_lock(&(sc)->mtx) -#define CCM_UNLOCK(sc) mtx_unlock(&(sc)->mtx) - -#define PLL6_TIMEOUT 10 - -static int -a31_ccm_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - - if (ofw_bus_is_compatible(dev, "allwinner,sun6i-a31-ccm")) { - device_set_desc(dev, "Allwinner Clock Control Module"); - return(BUS_PROBE_DEFAULT); - } - - return (ENXIO); -} - -static int -a31_ccm_attach(device_t dev) -{ - struct a31_ccm_softc *sc = device_get_softc(dev); - int rid = 0; - - if (a31_ccm_sc) - return (ENXIO); - - sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); - if (!sc->res) { - device_printf(dev, "could not allocate resource\n"); - return (ENXIO); - } - - mtx_init(&sc->mtx, "a31 ccm", NULL, MTX_DEF); - - a31_ccm_sc = sc; - - return (0); -} - -static device_method_t a31_ccm_methods[] = { - DEVMETHOD(device_probe, a31_ccm_probe), - DEVMETHOD(device_attach, a31_ccm_attach), - { 0, 0 } -}; - -static driver_t a31_ccm_driver = { - "a31_ccm", - a31_ccm_methods, - sizeof(struct a31_ccm_softc), -}; - -static devclass_t a31_ccm_devclass; - -EARLY_DRIVER_MODULE(a31_ccm, simplebus, a31_ccm_driver, a31_ccm_devclass, 0, 0, - BUS_PASS_TIMER + BUS_PASS_ORDER_MIDDLE); - -static int -a31_clk_pll6_enable(void) -{ - struct a31_ccm_softc *sc; - uint32_t reg_value; - int i; - - /* Datasheet recommand to use the default 600Mhz value */ - sc = a31_ccm_sc; - if (sc->pll6_enabled) - return (0); - reg_value = ccm_read_4(sc, A31_CCM_PLL6_CFG); - reg_value |= A31_CCM_PLL_CFG_ENABLE; - ccm_write_4(sc, A31_CCM_PLL6_CFG, reg_value); - - /* Wait for PLL to be stable */ - for (i = 0; i < PLL6_TIMEOUT; i++) - if ((ccm_read_4(sc, A31_CCM_PLL6_CFG) & - A31_CCM_PLL6_CFG_REG_LOCK) == A31_CCM_PLL6_CFG_REG_LOCK) - break; - if (i == PLL6_TIMEOUT) - return (ENXIO); - sc->pll6_enabled = 1; - - return (0); -} - -static unsigned int -a31_clk_pll6_get_rate(void) -{ - struct a31_ccm_softc *sc; - uint32_t k, n, reg_value; - - sc = a31_ccm_sc; - reg_value = ccm_read_4(sc, A31_CCM_PLL6_CFG); - n = ((reg_value & A31_CCM_PLL_CFG_FACTOR_N) >> - A31_CCM_PLL_CFG_FACTOR_N_SHIFT); - k = ((reg_value & A31_CCM_PLL_CFG_FACTOR_K) >> - A31_CCM_PLL_CFG_FACTOR_K_SHIFT) + 1; - - return ((A31_CCM_CLK_REF_FREQ * n * k) / 2); -} - -int -a31_clk_gmac_activate(phandle_t node) -{ - char *phy_type; - struct a31_ccm_softc *sc; - uint32_t reg_value; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - if (a31_clk_pll6_enable()) - return (ENXIO); - - /* Gating AHB clock for GMAC */ - reg_value = ccm_read_4(sc, A31_CCM_AHB_GATING0); - reg_value |= A31_CCM_AHB_GATING_GMAC; - ccm_write_4(sc, A31_CCM_AHB_GATING0, reg_value); - - /* Set GMAC mode. */ - reg_value = A31_CCM_GMAC_CLK_MII; - if (OF_getprop_alloc(node, "phy-mode", 1, (void **)&phy_type) > 0) { - if (strcasecmp(phy_type, "rgmii") == 0) - reg_value = A31_CCM_GMAC_CLK_RGMII | - A31_CCM_GMAC_MODE_RGMII; - free(phy_type, M_OFWPROP); - } - ccm_write_4(sc, A31_CCM_GMAC_CLK, reg_value); - - /* Reset gmac */ - reg_value = ccm_read_4(sc, A31_CCM_AHB1_RST_REG0); - reg_value |= A31_CCM_AHB1_RST_REG0_GMAC; - ccm_write_4(sc, A31_CCM_AHB1_RST_REG0, reg_value); - - return (0); -} - -int -a31_clk_mmc_activate(int devid) -{ - struct a31_ccm_softc *sc; - uint32_t reg_value; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - if (a31_clk_pll6_enable()) - return (ENXIO); - - /* Gating AHB clock for SD/MMC */ - reg_value = ccm_read_4(sc, A31_CCM_AHB_GATING0); - reg_value |= A31_CCM_AHB_GATING_SDMMC0 << devid; - ccm_write_4(sc, A31_CCM_AHB_GATING0, reg_value); - - /* Soft reset */ - reg_value = ccm_read_4(sc, A31_CCM_AHB1_RST_REG0); - reg_value |= A31_CCM_AHB1_RST_REG0_SDMMC << devid; - ccm_write_4(sc, A31_CCM_AHB1_RST_REG0, reg_value); - - return (0); -} - -int -a31_clk_mmc_cfg(int devid, int freq) -{ - struct a31_ccm_softc *sc; - uint32_t clksrc, m, n, ophase, phase, reg_value; - unsigned int pll_freq; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - freq /= 1000; - if (freq <= 400) { - pll_freq = A31_CCM_CLK_REF_FREQ / 1000; - clksrc = A31_CCM_SD_CLK_SRC_SEL_OSC24M; - ophase = 0; - phase = 0; - n = 2; - } else if (freq <= 25000) { - pll_freq = a31_clk_pll6_get_rate() / 1000; - clksrc = A31_CCM_SD_CLK_SRC_SEL_PLL6; - ophase = 0; - phase = 5; - n = 2; - } else if (freq <= 50000) { - pll_freq = a31_clk_pll6_get_rate() / 1000; - clksrc = A31_CCM_SD_CLK_SRC_SEL_PLL6; - ophase = 3; - phase = 5; - n = 0; - } else - return (EINVAL); - m = ((pll_freq / (1 << n)) / (freq)) - 1; - reg_value = ccm_read_4(sc, A31_CCM_MMC0_SCLK_CFG + (devid * 4)); - reg_value &= ~A31_CCM_SD_CLK_SRC_SEL; - reg_value |= (clksrc << A31_CCM_SD_CLK_SRC_SEL_SHIFT); - reg_value &= ~A31_CCM_SD_CLK_PHASE_CTR; - reg_value |= (phase << A31_CCM_SD_CLK_PHASE_CTR_SHIFT); - reg_value &= ~A31_CCM_SD_CLK_DIV_RATIO_N; - reg_value |= (n << A31_CCM_SD_CLK_DIV_RATIO_N_SHIFT); - reg_value &= ~A31_CCM_SD_CLK_OPHASE_CTR; - reg_value |= (ophase << A31_CCM_SD_CLK_OPHASE_CTR_SHIFT); - reg_value &= ~A31_CCM_SD_CLK_DIV_RATIO_M; - reg_value |= m; - reg_value |= A31_CCM_PLL_CFG_ENABLE; - ccm_write_4(sc, A31_CCM_MMC0_SCLK_CFG + (devid * 4), reg_value); - - return (0); -} - -int -a31_clk_i2c_activate(int devid) -{ - struct a31_ccm_softc *sc; - uint32_t reg_value; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - if (a31_clk_pll6_enable()) - return (ENXIO); - - /* Gating APB clock for I2C/TWI */ - reg_value = ccm_read_4(sc, A31_CCM_APB2_GATING); - reg_value |= A31_CCM_APB2_GATING_TWI << devid; - ccm_write_4(sc, A31_CCM_APB2_GATING, reg_value); - - /* Soft reset */ - reg_value = ccm_read_4(sc, A31_CCM_APB2_RST); - reg_value |= A31_CCM_APB2_RST_TWI << devid; - ccm_write_4(sc, A31_CCM_APB2_RST, reg_value); - - return (0); -} - -int -a31_clk_ehci_activate(void) -{ - struct a31_ccm_softc *sc; - uint32_t reg_value; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - if (++sc->ehci_refcnt == 1) { - /* Enable USB PHY */ - reg_value = ccm_read_4(sc, A31_CCM_USBPHY_CLK); - reg_value |= A31_CCM_USBPHY_CLK_GATING_USBPHY0; - reg_value |= A31_CCM_USBPHY_CLK_GATING_USBPHY1; - reg_value |= A31_CCM_USBPHY_CLK_GATING_USBPHY2; - reg_value |= A31_CCM_USBPHY_CLK_USBPHY1_RST; - reg_value |= A31_CCM_USBPHY_CLK_USBPHY2_RST; - ccm_write_4(sc, A31_CCM_USBPHY_CLK, reg_value); - - /* Gating AHB clock for EHCI */ - reg_value = ccm_read_4(sc, A31_CCM_AHB_GATING0); - reg_value |= A31_CCM_AHB_GATING_EHCI0; - reg_value |= A31_CCM_AHB_GATING_EHCI1; - ccm_write_4(sc, A31_CCM_AHB_GATING0, reg_value); - - /* De-assert reset */ - reg_value = ccm_read_4(sc, A31_CCM_AHB1_RST_REG0); - reg_value |= A31_CCM_AHB1_RST_REG0_EHCI0; - reg_value |= A31_CCM_AHB1_RST_REG0_EHCI1; - ccm_write_4(sc, A31_CCM_AHB1_RST_REG0, reg_value); - } - CCM_UNLOCK(sc); - - return (0); -} - -int -a31_clk_ehci_deactivate(void) -{ - struct a31_ccm_softc *sc; - uint32_t reg_value; - - sc = a31_ccm_sc; - if (sc == NULL) - return (ENXIO); - - CCM_LOCK(sc); - if (--sc->ehci_refcnt == 0) { - /* Disable USB PHY */ - reg_value = ccm_read_4(sc, A31_CCM_USBPHY_CLK); - reg_value &= ~A31_CCM_USBPHY_CLK_GATING_USBPHY0; - reg_value &= ~A31_CCM_USBPHY_CLK_GATING_USBPHY1; - reg_value &= ~A31_CCM_USBPHY_CLK_GATING_USBPHY2; - reg_value &= ~A31_CCM_USBPHY_CLK_USBPHY1_RST; - reg_value &= ~A31_CCM_USBPHY_CLK_USBPHY2_RST; - ccm_write_4(sc, A31_CCM_USBPHY_CLK, reg_value); - - /* Gating AHB clock for EHCI */ - reg_value = ccm_read_4(sc, A31_CCM_AHB_GATING0); - reg_value &= ~A31_CCM_AHB_GATING_EHCI0; - reg_value &= ~A31_CCM_AHB_GATING_EHCI1; - ccm_write_4(sc, A31_CCM_AHB_GATING0, reg_value); - - /* Assert reset */ - reg_value = ccm_read_4(sc, A31_CCM_AHB1_RST_REG0); - reg_value &= ~A31_CCM_AHB1_RST_REG0_EHCI0; - reg_value &= ~A31_CCM_AHB1_RST_REG0_EHCI1; - ccm_write_4(sc, A31_CCM_AHB1_RST_REG0, reg_value); - } - CCM_UNLOCK(sc); - - return (0); -} diff --git a/sys/arm/allwinner/a31/a31_clk.h b/sys/arm/allwinner/a31/a31_clk.h deleted file mode 100644 index 1ec6a79..0000000 --- a/sys/arm/allwinner/a31/a31_clk.h +++ /dev/null @@ -1,213 +0,0 @@ -/*- - * Copyright (c) 2013 Ganbold Tsagaankhuu - * Copyright (c) 2016 Emmanuel Vadot - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _A31_CLK_H_ -#define _A31_CLK_H_ - -#define A31_CCM_PLL1_CFG 0x0000 -#define A31_CCM_PLL2_CFG 0x0008 -#define A31_CCM_PLL3_CFG 0x0010 -#define A31_CCM_PLL4_CFG 0x0018 -#define A31_CCM_PLL5_CFG 0x0020 -#define A31_CCM_PLL6_CFG 0x0028 -#define A31_CCM_PLL7_CFG 0x0030 -#define A31_CCM_PLL8_CFG 0x0038 -#define A31_CCM_MIPI_PLL_CFG 0x0040 -#define A31_CCM_PLL9_CFG 0x0044 -#define A31_CCM_PLL10_CFG 0x0048 -#define A31_CCM_AXI_CFG_REG 0x0050 -#define A31_CCM_AHB1_APB1_CFG 0x0054 -#define A31_CCM_APB2_CLK_DIV 0x0058 -#define A31_CCM_AHB_GATING0 0x0060 -#define A31_CCM_AHB_GATING1 0x0064 -#define A31_CCM_APB1_GATING 0x0068 -#define A31_CCM_APB2_GATING 0x006c -#define A31_CCM_NAND0_SCLK_CFG 0x0080 -#define A31_CCM_NAND1_SCLK_CFG 0x0084 -#define A31_CCM_MMC0_SCLK_CFG 0x0088 -#define A31_CCM_MMC1_SCLK_CFG 0x008c -#define A31_CCM_MMC2_SCLK_CFG 0x0090 -#define A31_CCM_MMC3_SCLK_CFG 0x0094 -#define A31_CCM_TS_CLK 0x0098 -#define A31_CCM_SS_CLK 0x009c -#define A31_CCM_SPI0_CLK 0x00a0 -#define A31_CCM_SPI1_CLK 0x00a4 -#define A31_CCM_SPI2_CLK 0x00a8 -#define A31_CCM_SPI3_CLK 0x00ac -#define A31_CCM_DAUDIO0_CLK 0x00b0 -#define A31_CCM_DAUDIO1_CLK 0x00b4 -#define A31_CCM_USBPHY_CLK 0x00cc -#define A31_CCM_GMAC_CLK 0x00d0 -#define A31_CCM_MDFS_CLK 0x00f0 -#define A31_CCM_DRAM_CLK 0x00f4 -#define A31_CCM_DRAM_GATING 0x0100 -#define A31_CCM_BE0_SCLK 0x0104 -#define A31_CCM_BE1_SCLK 0x0108 -#define A31_CCM_FE0_CLK 0x010c -#define A31_CCM_FE1_CLK 0x0110 -#define A31_CCM_MP_CLK 0x0114 -#define A31_CCM_LCD0_CH0_CLK 0x0118 -#define A31_CCM_LCD1_CH0_CLK 0x011c -#define A31_CCM_LCD0_CH1_CLK 0x012c -#define A31_CCM_LCD1_CH1_CLK 0x0130 -#define A31_CCM_CSI0_CLK 0x0134 -#define A31_CCM_CSI1_CLK 0x0138 -#define A31_CCM_VE_CLK 0x013c -#define A31_CCM_AUDIO_CODEC_CLK 0x0140 -#define A31_CCM_AVS_CLK 0x0144 -#define A31_CCM_DIGITAL_MIC_CLK 0x0148 -#define A31_CCM_HDMI_CLK 0x0150 -#define A31_CCM_PS_CLK 0x0154 -#define A31_CCM_MBUS_SCLK_CFG0 0x015c -#define A31_CCM_MBUS_SCLK_CFG1 0x0160 -#define A31_CCM_MIPI_DSI_CLK 0x0168 -#define A31_CCM_MIPI_CSI0_CLK 0x016c -#define A31_CCM_DRC0_SCLK_CFG 0x0180 -#define A31_CCM_DRC1_SCLK_CFG 0x0184 -#define A31_CCM_DEU0_SCLK_CFG 0x0188 -#define A31_CCM_DEU1_SCLK_CFG 0x018c -#define A31_CCM_GPU_CORE_CLK 0x01a0 -#define A31_CCM_GPU_MEM_CLK 0x01a4 -#define A31_CCM_GPU_HYD_CLK 0x01a8 -#define A31_CCM_ATS_CLK 0x01b0 -#define A31_CCM_TRACE_CLK 0x01b4 -#define A31_CCM_PLL_LOCK_CFG 0x0200 -#define A31_CCM_PLL1_LOCK_CFG 0x0204 -#define A31_CCM_PLL1_BIAS 0x0220 -#define A31_CCM_PLL2_BIAS 0x0224 -#define A31_CCM_PLL3_BIAS 0x0228 -#define A31_CCM_PLL4_BIAS 0x022c -#define A31_CCM_PLL5_BIAS 0x0230 -#define A31_CCM_PLL6_BIAS 0x0234 -#define A31_CCM_PLL7_BIAS 0x0238 -#define A31_CCM_PLL8_BIAS 0x023c -#define A31_CCM_PLL9_BIAS 0x0240 -#define A31_CCM_MIPI_PLL_BIAS 0x0244 -#define A31_CCM_PLL10_BIAS 0x0248 -#define A31_CCM_PLL1_PAT_CFG 0x0280 -#define A31_CCM_PLL2_PAT_CFG 0x0284 -#define A31_CCM_PLL3_PAT_CFG 0x0288 -#define A31_CCM_PLL4_PAT_CFG 0x028c -#define A31_CCM_PLL5_PAT_CFG 0x0290 -#define A31_CCM_PLL6_PAT_CFG 0x0294 -#define A31_CCM_PLL7_PAT_CFG 0x0298 -#define A31_CCM_PLL8_PAT_CFG 0x029c -#define A31_CCM_MIPI_PLL_PAT_CFG 0x02a0 -#define A31_CCM_PLL9_PAT_CFG 0x02a4 -#define A31_CCM_PLL10_PAT_CFG 0x02a8 -#define A31_CCM_AHB1_RST_REG0 0x02c0 -#define A31_CCM_AHB1_RST_REG1 0x02c4 -#define A31_CCM_AHB1_RST_REG2 0x02c8 -#define A31_CCM_APB1_RST 0x02d0 -#define A31_CCM_APB2_RST 0x02d8 -#define A31_CCM_CLK_OUTA 0x0300 -#define A31_CCM_CLK_OUTB 0x0304 -#define A31_CCM_CLK_OUTC 0x0308 - -/* PLL6_CFG_REG */ -#define A31_CCM_PLL6_CFG_REG_LOCK (1 << 28) - -/* AHB_GATING_REG0 */ -#define A31_CCM_AHB_GATING_OHCI2 (1 << 31) -#define A31_CCM_AHB_GATING_OHCI1 (1 << 30) -#define A31_CCM_AHB_GATING_OHCI0 (1 << 29) -#define A31_CCM_AHB_GATING_EHCI1 (1 << 27) -#define A31_CCM_AHB_GATING_EHCI0 (1 << 26) -#define A31_CCM_AHB_GATING_USBDRD (1 << 24) -#define A31_CCM_AHB_GATING_GMAC (1 << 17) -#define A31_CCM_AHB_GATING_SDMMC0 (1 << 8) - -#define A31_CCM_PLL_CFG_ENABLE (1U << 31) -#define A31_CCM_PLL_CFG_BYPASS (1U << 30) -#define A31_CCM_PLL_CFG_PLL5 (1U << 25) -#define A31_CCM_PLL_CFG_PLL6 (1U << 24) -#define A31_CCM_PLL_CFG_FACTOR_N 0x1f00 -#define A31_CCM_PLL_CFG_FACTOR_N_SHIFT 8 -#define A31_CCM_PLL_CFG_FACTOR_K 0x30 -#define A31_CCM_PLL_CFG_FACTOR_K_SHIFT 4 -#define A31_CCM_PLL_CFG_FACTOR_M 0x3 - -/* APB2_GATING */ -#define A31_CCM_APB2_GATING_TWI (1 << 0) - -/* AHB1_RST_REG0 */ -#define A31_CCM_AHB1_RST_REG0_OHCI2 (1 << 31) -#define A31_CCM_AHB1_RST_REG0_OHCI1 (1 << 30) -#define A31_CCM_AHB1_RST_REG0_OHCI0 (1 << 29) -#define A31_CCM_AHB1_RST_REG0_EHCI1 (1 << 27) -#define A31_CCM_AHB1_RST_REG0_EHCI0 (1 << 26) -#define A31_CCM_AHB1_RST_REG0_GMAC (1 << 17) -#define A31_CCM_AHB1_RST_REG0_SDMMC (1 << 8) - -/* APB2_RST_REG */ -#define A31_CCM_APB2_RST_TWI (1 << 0) - - -/* GMAC */ -#define A31_CCM_GMAC_CLK_DELAY_SHIFT 10 -#define A31_CCM_GMAC_CLK_MODE_MASK 0x7 -#define A31_CCM_GMAC_MODE_RGMII (1 << 2) -#define A31_CCM_GMAC_CLK_MII 0x0 -#define A31_CCM_GMAC_CLK_EXT_RGMII 0x1 -#define A31_CCM_GMAC_CLK_RGMII 0x2 - -/* SD/MMC */ -#define A31_CCM_SD_CLK_SRC_SEL 0x3000000 -#define A31_CCM_SD_CLK_SRC_SEL_SHIFT 24 -#define A31_CCM_SD_CLK_SRC_SEL_OSC24M 0 -#define A31_CCM_SD_CLK_SRC_SEL_PLL6 1 -#define A31_CCM_SD_CLK_PHASE_CTR 0x700000 -#define A31_CCM_SD_CLK_PHASE_CTR_SHIFT 20 -#define A31_CCM_SD_CLK_DIV_RATIO_N 0x30000 -#define A31_CCM_SD_CLK_DIV_RATIO_N_SHIFT 16 -#define A31_CCM_SD_CLK_OPHASE_CTR 0x700 -#define A31_CCM_SD_CLK_OPHASE_CTR_SHIFT 8 -#define A31_CCM_SD_CLK_DIV_RATIO_M 0xf - -/* USB */ -#define A31_CCM_USBPHY_CLK_GATING_OHCI2 (1 << 18) -#define A31_CCM_USBPHY_CLK_GATING_OHCI1 (1 << 17) -#define A31_CCM_USBPHY_CLK_GATING_OHCI0 (1 << 16) -#define A31_CCM_USBPHY_CLK_GATING_USBPHY2 (1 << 10) -#define A31_CCM_USBPHY_CLK_GATING_USBPHY1 (1 << 9) -#define A31_CCM_USBPHY_CLK_GATING_USBPHY0 (1 << 8) -#define A31_CCM_USBPHY_CLK_USBPHY2_RST (1 << 2) -#define A31_CCM_USBPHY_CLK_USBPHY1_RST (1 << 1) -#define A31_CCM_USBPHY_CLK_USBPHY0_RST (1 << 0) - -#define A31_CCM_CLK_REF_FREQ 24000000U - -int a31_clk_gmac_activate(phandle_t); -int a31_clk_mmc_activate(int); -int a31_clk_mmc_cfg(int, int); -int a31_clk_i2c_activate(int); -int a31_clk_ehci_activate(void); -int a31_clk_ehci_deactivate(void); - -#endif /* _A31_CLK_H_ */ diff --git a/sys/arm/allwinner/aw_ccu.c b/sys/arm/allwinner/aw_ccu.c new file mode 100644 index 0000000..d2ce774 --- /dev/null +++ b/sys/arm/allwinner/aw_ccu.c @@ -0,0 +1,224 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner oscillator clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include + +#include "clkdev_if.h" + +#define CCU_BASE 0x01c20000 +#define CCU_SIZE 0x400 + +struct aw_ccu_softc { + struct simplebus_softc sc; + bus_space_tag_t bst; + bus_space_handle_t bsh; + struct mtx mtx; +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10", 1 }, + { "allwinner,sun7i-a20", 1 }, + { "allwinner,sun6i-a31", 1 }, + { "allwinner,sun6i-a31s", 1 }, + { NULL, 0 } +}; + +static int +aw_ccu_check_addr(bus_addr_t addr) +{ + if (addr < CCU_BASE || addr >= (CCU_BASE + CCU_SIZE)) + return (EINVAL); + return (0); +} + +static int +aw_ccu_write_4(device_t dev, bus_addr_t addr, uint32_t val) +{ + struct aw_ccu_softc *sc; + + if (aw_ccu_check_addr(addr) != 0) + return (EINVAL); + + sc = device_get_softc(dev); + mtx_assert(&sc->mtx, MA_OWNED); + bus_space_write_4(sc->bst, sc->bsh, addr - CCU_BASE, val); + + return (0); +} + +static int +aw_ccu_read_4(device_t dev, bus_addr_t addr, uint32_t *val) +{ + struct aw_ccu_softc *sc; + + if (aw_ccu_check_addr(addr) != 0) + return (EINVAL); + + sc = device_get_softc(dev); + mtx_assert(&sc->mtx, MA_OWNED); + *val = bus_space_read_4(sc->bst, sc->bsh, addr - CCU_BASE); + + return (0); +} + +static int +aw_ccu_modify_4(device_t dev, bus_addr_t addr, uint32_t clr, uint32_t set) +{ + struct aw_ccu_softc *sc; + uint32_t val; + + if (aw_ccu_check_addr(addr) != 0) + return (EINVAL); + + sc = device_get_softc(dev); + mtx_assert(&sc->mtx, MA_OWNED); + val = bus_space_read_4(sc->bst, sc->bsh, addr - CCU_BASE); + val &= ~clr; + val |= set; + bus_space_write_4(sc->bst, sc->bsh, addr - CCU_BASE, val); + + return (0); +} + +static void +aw_ccu_device_lock(device_t dev) +{ + struct aw_ccu_softc *sc; + + sc = device_get_softc(dev); + mtx_lock(&sc->mtx); +} + +static void +aw_ccu_device_unlock(device_t dev) +{ + struct aw_ccu_softc *sc; + + sc = device_get_softc(dev); + mtx_unlock(&sc->mtx); +} + +static int +aw_ccu_probe(device_t dev) +{ + const char *name; + device_t pdev; + + name = ofw_bus_get_name(dev); + + if (name == NULL || strcmp(name, "clocks") != 0) + return (ENXIO); + + pdev = device_get_parent(dev); + if (ofw_bus_search_compatible(pdev, compat_data)->ocd_data == 0) + return (0); + + device_set_desc(dev, "Allwinner Clock Control Unit"); + return (BUS_PROBE_SPECIFIC); +} + +static int +aw_ccu_attach(device_t dev) +{ + struct aw_ccu_softc *sc; + phandle_t node, child; + device_t cdev; + int error; + + sc = device_get_softc(dev); + node = ofw_bus_get_node(dev); + + simplebus_init(dev, node); + + /* + * Map CCU registers. The DT doesn't have a "reg" property for the + * /clocks node and child nodes have conflicting "reg" properties. + */ + sc->bst = bus_get_bus_tag(dev); + error = bus_space_map(sc->bst, CCU_BASE, CCU_SIZE, 0, &sc->bsh); + if (error != 0) { + device_printf(dev, "couldn't map CCU: %d\n", error); + return (error); + } + + mtx_init(&sc->mtx, device_get_nameunit(dev), NULL, MTX_DEF); + + /* Attach child devices */ + for (child = OF_child(node); child > 0; child = OF_peer(child)) { + cdev = simplebus_add_device(dev, child, 0, NULL, -1, NULL); + if (cdev != NULL) + device_probe_and_attach(cdev); + } + + return (bus_generic_attach(dev)); +} + +static device_method_t aw_ccu_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_ccu_probe), + DEVMETHOD(device_attach, aw_ccu_attach), + + /* clkdev interface */ + DEVMETHOD(clkdev_write_4, aw_ccu_write_4), + DEVMETHOD(clkdev_read_4, aw_ccu_read_4), + DEVMETHOD(clkdev_modify_4, aw_ccu_modify_4), + DEVMETHOD(clkdev_device_lock, aw_ccu_device_lock), + DEVMETHOD(clkdev_device_unlock, aw_ccu_device_unlock), + + DEVMETHOD_END +}; + +DEFINE_CLASS_1(aw_ccu, aw_ccu_driver, aw_ccu_methods, + sizeof(struct aw_ccu_softc), simplebus_driver); + +static devclass_t aw_ccu_devclass; + +EARLY_DRIVER_MODULE(aw_ccu, simplebus, aw_ccu_driver, aw_ccu_devclass, + 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); + +MODULE_VERSION(aw_ccu, 1); diff --git a/sys/arm/allwinner/aw_reset.c b/sys/arm/allwinner/aw_reset.c new file mode 100644 index 0000000..cabd9c7 --- /dev/null +++ b/sys/arm/allwinner/aw_reset.c @@ -0,0 +1,163 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner module software reset registers + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "hwreset_if.h" + +#define RESET_OFFSET(index) ((index / 32) * 4) +#define RESET_SHIFT(index) (index % 32) + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun6i-a31-ahb1-reset", 1 }, + { "allwinner,sun6i-a31-clock-reset", 1 }, + { NULL, 0 } +}; + +struct aw_reset_softc { + struct resource *res; + struct mtx mtx; +}; + +static struct resource_spec aw_reset_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { -1, 0 } +}; + +#define RESET_READ(sc, reg) bus_read_4((sc)->res, (reg)) +#define RESET_WRITE(sc, reg, val) bus_write_4((sc)->res, (reg), (val)) + +static int +aw_reset_assert(device_t dev, intptr_t id, bool reset) +{ + struct aw_reset_softc *sc; + uint32_t reg_value; + + sc = device_get_softc(dev); + + mtx_lock(&sc->mtx); + reg_value = RESET_READ(sc, RESET_OFFSET(id)); + if (reset) + reg_value &= ~(1 << RESET_SHIFT(id)); + else + reg_value |= (1 << RESET_SHIFT(id)); + RESET_WRITE(sc, RESET_OFFSET(id), reg_value); + mtx_unlock(&sc->mtx); + + return (0); +} + +static int +aw_reset_is_asserted(device_t dev, intptr_t id, bool *reset) +{ + struct aw_reset_softc *sc; + uint32_t reg_value; + + sc = device_get_softc(dev); + + mtx_lock(&sc->mtx); + reg_value = RESET_READ(sc, RESET_OFFSET(id)); + mtx_unlock(&sc->mtx); + + *reset = (reg_value & (1 << RESET_SHIFT(id))) != 0 ? false : true; + + return (0); +} + +static int +aw_reset_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner Module Resets"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_reset_attach(device_t dev) +{ + struct aw_reset_softc *sc; + + sc = device_get_softc(dev); + + if (bus_alloc_resources(dev, aw_reset_spec, &sc->res) != 0) { + device_printf(dev, "cannot allocate resources for device\n"); + return (ENXIO); + } + + mtx_init(&sc->mtx, device_get_nameunit(dev), NULL, MTX_DEF); + + hwreset_register_ofw_provider(dev); + + return (0); +} + +static device_method_t aw_reset_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_reset_probe), + DEVMETHOD(device_attach, aw_reset_attach), + + /* Reset interface */ + DEVMETHOD(hwreset_assert, aw_reset_assert), + DEVMETHOD(hwreset_is_asserted, aw_reset_is_asserted), + + DEVMETHOD_END +}; + +static driver_t aw_reset_driver = { + "aw_reset", + aw_reset_methods, + sizeof(struct aw_reset_softc), +}; + +static devclass_t aw_reset_devclass; + +DRIVER_MODULE(aw_reset, simplebus, aw_reset_driver, aw_reset_devclass, 0, 0); +MODULE_VERSION(aw_reset, 1); diff --git a/sys/arm/allwinner/aw_usbphy.c b/sys/arm/allwinner/aw_usbphy.c index f0ee79d..25e8da0 100644 --- a/sys/arm/allwinner/aw_usbphy.c +++ b/sys/arm/allwinner/aw_usbphy.c @@ -44,10 +44,11 @@ __FBSDID("$FreeBSD$"); #include #include -#include "gpio_if.h" +#include +#include +#include #define USBPHY_NUMOFF 3 -#define GPIO_POLARITY(flags) (((flags) & 1) ? GPIO_PIN_LOW : GPIO_PIN_HIGH) static struct ofw_compat_data compat_data[] = { { "allwinner,sun4i-a10-usb-phy", 1 }, @@ -58,89 +59,45 @@ static struct ofw_compat_data compat_data[] = { }; static int -awusbphy_gpio_set(device_t dev, phandle_t node, const char *pname) -{ - pcell_t gpio_prop[4]; - phandle_t gpio_node; - device_t gpio_dev; - uint32_t pin, flags; - ssize_t len; - int val; - - len = OF_getencprop(node, pname, gpio_prop, sizeof(gpio_prop)); - if (len == -1) - return (0); - - if (len != sizeof(gpio_prop)) { - device_printf(dev, "property %s length was %d, expected %d\n", - pname, len, sizeof(gpio_prop)); - return (ENXIO); - } - - gpio_node = OF_node_from_xref(gpio_prop[0]); - gpio_dev = OF_device_from_xref(gpio_prop[0]); - if (gpio_dev == NULL) { - device_printf(dev, "failed to get the GPIO device for %s\n", - pname); - return (ENOENT); - } - - if (GPIO_MAP_GPIOS(gpio_dev, node, gpio_node, - sizeof(gpio_prop) / sizeof(gpio_prop[0]) - 1, gpio_prop + 1, - &pin, &flags) != 0) { - device_printf(dev, "failed to map the GPIO pin for %s\n", - pname); - return (ENXIO); - } - - val = GPIO_POLARITY(flags); - - GPIO_PIN_SETFLAGS(gpio_dev, pin, GPIO_PIN_OUTPUT); - GPIO_PIN_SET(gpio_dev, pin, val); - - return (0); -} - -static int -awusbphy_supply_set(device_t dev, const char *pname) -{ - phandle_t node, reg_node; - pcell_t reg_xref; - - node = ofw_bus_get_node(dev); - - if (OF_getencprop(node, pname, ®_xref, sizeof(reg_xref)) == -1) - return (0); - - reg_node = OF_node_from_xref(reg_xref); - - return (awusbphy_gpio_set(dev, reg_node, "gpio")); -} - -static int awusbphy_init(device_t dev) { char pname[20]; - phandle_t node; int error, off; - - node = ofw_bus_get_node(dev); - - for (off = 0; off < USBPHY_NUMOFF; off++) { - snprintf(pname, sizeof(pname), "usb%d_id_det-gpio", off); - error = awusbphy_gpio_set(dev, node, pname); - if (error) + regulator_t reg; + hwreset_t rst; + clk_t clk; + + /* Enable clocks */ + for (off = 0; clk_get_by_ofw_index(dev, off, &clk) == 0; off++) { + error = clk_enable(clk); + if (error != 0) { + device_printf(dev, "couldn't enable clock %s\n", + clk_get_name(clk)); return (error); + } + } - snprintf(pname, sizeof(pname), "usb%d_vbus_det-gpio", off); - error = awusbphy_gpio_set(dev, node, pname); - if (error) + /* De-assert resets */ + for (off = 0; hwreset_get_by_ofw_idx(dev, off, &rst) == 0; off++) { + error = hwreset_deassert(rst); + if (error != 0) { + device_printf(dev, "couldn't de-assert reset %d\n", + off); return (error); + } + } + /* Enable regulator(s) */ + for (off = 0; off < USBPHY_NUMOFF; off++) { snprintf(pname, sizeof(pname), "usb%d_vbus-supply", off); - error = awusbphy_supply_set(dev, pname); - if (error) + if (regulator_get_by_ofw_property(dev, pname, ®) != 0) + continue; + error = regulator_enable(reg); + if (error != 0) { + device_printf(dev, "couldn't enable regulator %s\n", + pname); return (error); + } } return (0); diff --git a/sys/arm/allwinner/clk/aw_ahbclk.c b/sys/arm/allwinner/clk/aw_ahbclk.c new file mode 100644 index 0000000..1d3b1a4 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_ahbclk.c @@ -0,0 +1,308 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner AHB clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "clkdev_if.h" + +#define A10_AHB_CLK_DIV_RATIO (0x3 << 4) +#define A10_AHB_CLK_DIV_RATIO_SHIFT 4 + +#define A13_AHB_CLK_SRC_SEL (0x3 << 6) +#define A13_AHB_CLK_SRC_SEL_MAX 3 +#define A13_AHB_CLK_SRC_SEL_SHIFT 6 + +#define A31_AHB1_PRE_DIV (0x3 << 6) +#define A31_AHB1_PRE_DIV_SHIFT 6 +#define A31_AHB1_CLK_SRC_SEL (0x3 << 12) +#define A31_AHB1_CLK_SRC_SEL_PLL6 3 +#define A31_AHB1_CLK_SRC_SEL_MAX 3 +#define A31_AHB1_CLK_SRC_SEL_SHIFT 12 + +enum aw_ahbclk_type { + AW_A10_AHB = 1, + AW_A13_AHB, + AW_A31_AHB1, +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-ahb-clk", AW_A10_AHB }, + { "allwinner,sun5i-a13-ahb-clk", AW_A13_AHB }, + { "allwinner,sun6i-a31-ahb1-clk", AW_A31_AHB1 }, + { NULL, 0 } +}; + +struct aw_ahbclk_sc { + device_t clkdev; + bus_addr_t reg; + enum aw_ahbclk_type type; +}; + +#define AHBCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define AHBCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_ahbclk_init(struct clknode *clk, device_t dev) +{ + struct aw_ahbclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_A10_AHB: + index = 0; + break; + case AW_A13_AHB: + DEVICE_LOCK(sc); + AHBCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + index = (val & A13_AHB_CLK_SRC_SEL) >> + A13_AHB_CLK_SRC_SEL_SHIFT; + break; + case AW_A31_AHB1: + DEVICE_LOCK(sc); + AHBCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + index = (val & A31_AHB1_CLK_SRC_SEL) >> + A31_AHB1_CLK_SRC_SEL_SHIFT; + break; + default: + return (ENXIO); + } + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_ahbclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_ahbclk_sc *sc; + uint32_t val, src_sel, div, pre_div; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + AHBCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + div = 1 << ((val & A10_AHB_CLK_DIV_RATIO) >> + A10_AHB_CLK_DIV_RATIO_SHIFT); + + switch (sc->type) { + case AW_A31_AHB1: + src_sel = (val & A31_AHB1_CLK_SRC_SEL) >> + A31_AHB1_CLK_SRC_SEL_SHIFT; + if (src_sel == A31_AHB1_CLK_SRC_SEL_PLL6) + pre_div = ((val & A31_AHB1_PRE_DIV) >> + A31_AHB1_PRE_DIV_SHIFT) + 1; + else + pre_div = 1; + break; + default: + pre_div = 1; + break; + } + + *freq = *freq / pre_div / div; + + return (0); +} + +static int +aw_ahbclk_set_mux(struct clknode *clk, int index) +{ + struct aw_ahbclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_A10_AHB: + if (index != 0) + return (ERANGE); + break; + case AW_A13_AHB: + if (index < 0 || index > A13_AHB_CLK_SRC_SEL_MAX) + return (ERANGE); + DEVICE_LOCK(sc); + AHBCLK_READ(sc, &val); + val &= ~A13_AHB_CLK_SRC_SEL; + val |= (index << A13_AHB_CLK_SRC_SEL_SHIFT); + AHBCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + break; + default: + return (ENXIO); + } + + return (0); +} + +static clknode_method_t aw_ahbclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_ahbclk_init), + CLKNODEMETHOD(clknode_recalc_freq, aw_ahbclk_recalc_freq), + CLKNODEMETHOD(clknode_set_mux, aw_ahbclk_set_mux), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_ahbclk_clknode, aw_ahbclk_clknode_class, + aw_ahbclk_clknode_methods, sizeof(struct aw_ahbclk_sc), clknode_class); + +static int +aw_ahbclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner AHB Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_ahbclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_ahbclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + def.id = 1; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, + M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + + clk = clknode_create(clkdom, &aw_ahbclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + sc = clknode_get_softc(clk); + sc->type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_ahbclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_ahbclk_probe), + DEVMETHOD(device_attach, aw_ahbclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_ahbclk_driver = { + "aw_ahbclk", + aw_ahbclk_methods, + 0 +}; + +static devclass_t aw_ahbclk_devclass; + +EARLY_DRIVER_MODULE(aw_ahbclk, simplebus, aw_ahbclk_driver, + aw_ahbclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_apbclk.c b/sys/arm/allwinner/clk/aw_apbclk.c new file mode 100644 index 0000000..a56387b --- /dev/null +++ b/sys/arm/allwinner/clk/aw_apbclk.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner APB clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "clkdev_if.h" + +#define APB0_CLK_RATIO (0x3 << 8) +#define APB0_CLK_RATIO_SHIFT 8 +#define APB1_CLK_SRC_SEL (0x3 << 24) +#define APB1_CLK_SRC_SEL_SHIFT 24 +#define APB1_CLK_SRC_SEL_MAX 0x3 +#define APB1_CLK_RAT_N (0x3 << 16) +#define APB1_CLK_RAT_N_SHIFT 16 +#define APB1_CLK_RAT_M (0x1f << 0) +#define APB1_CLK_RAT_M_SHIFT 0 + +enum aw_apbclk_type { + AW_A10_APB0 = 1, + AW_A10_APB1, +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-apb0-clk", AW_A10_APB0 }, + { "allwinner,sun4i-a10-apb1-clk", AW_A10_APB1 }, + { NULL, 0 } +}; + +struct aw_apbclk_sc { + device_t clkdev; + bus_addr_t reg; + enum aw_apbclk_type type; +}; + +#define APBCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define APBCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_apbclk_init(struct clknode *clk, device_t dev) +{ + struct aw_apbclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_A10_APB0: + index = 0; + break; + case AW_A10_APB1: + DEVICE_LOCK(sc); + APBCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + index = (val & APB1_CLK_SRC_SEL) >> APB1_CLK_SRC_SEL_SHIFT; + break; + default: + return (ENXIO); + } + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_apbclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_apbclk_sc *sc; + uint32_t val, div, m, n; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + APBCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + switch (sc->type) { + case AW_A10_APB0: + div = 1 << ((val & APB0_CLK_RATIO) >> APB0_CLK_RATIO_SHIFT); + if (div == 1) + div = 2; + *freq = *freq / div; + break; + case AW_A10_APB1: + n = 1 << ((val & APB1_CLK_RAT_N) >> APB1_CLK_RAT_N_SHIFT); + m = ((val & APB1_CLK_RAT_N) >> APB1_CLK_RAT_M_SHIFT) + 1; + *freq = *freq / n / m; + break; + default: + return (ENXIO); + } + + return (0); +} + +static int +aw_apbclk_set_mux(struct clknode *clk, int index) +{ + struct aw_apbclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + if (sc->type != AW_A10_APB1) + return (ENXIO); + + if (index < 0 || index > APB1_CLK_SRC_SEL_MAX) + return (ERANGE); + + DEVICE_LOCK(sc); + APBCLK_READ(sc, &val); + val &= ~APB1_CLK_SRC_SEL; + val |= (index << APB1_CLK_SRC_SEL_SHIFT); + APBCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static clknode_method_t aw_apbclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_apbclk_init), + CLKNODEMETHOD(clknode_recalc_freq, aw_apbclk_recalc_freq), + CLKNODEMETHOD(clknode_set_mux, aw_apbclk_set_mux), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_apbclk_clknode, aw_apbclk_clknode_class, + aw_apbclk_clknode_methods, sizeof(struct aw_apbclk_sc), clknode_class); + +static int +aw_apbclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner APB Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_apbclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_apbclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + clk = clknode_create(clkdom, &aw_apbclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_apbclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_apbclk_probe), + DEVMETHOD(device_attach, aw_apbclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_apbclk_driver = { + "aw_apbclk", + aw_apbclk_methods, + 0 +}; + +static devclass_t aw_apbclk_devclass; + +EARLY_DRIVER_MODULE(aw_apbclk, simplebus, aw_apbclk_driver, + aw_apbclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_axiclk.c b/sys/arm/allwinner/clk/aw_axiclk.c new file mode 100644 index 0000000..8f4a6d6 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_axiclk.c @@ -0,0 +1,201 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner AXI clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define AXI_CLK_DIV_RATIO (0x3 << 0) + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-axi-clk", 1 }, + { NULL, 0 } +}; + +struct aw_axiclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +#define AXICLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define AXICLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_axiclk_init(struct clknode *clk, device_t dev) +{ + clknode_init_parent_idx(clk, 0); + return (0); +} + +static int +aw_axiclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_axiclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + AXICLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + *freq = *freq / ((val & AXI_CLK_DIV_RATIO) + 1); + + return (0); +} + +static clknode_method_t aw_axiclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_axiclk_init), + CLKNODEMETHOD(clknode_recalc_freq, aw_axiclk_recalc_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_axiclk_clknode, aw_axiclk_clknode_class, + aw_axiclk_clknode_methods, sizeof(struct aw_axiclk_sc), clknode_class); + +static int +aw_axiclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner AXI Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_axiclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_axiclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + error = clk_get_by_ofw_index(dev, 0, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot parse clock parent\n"); + return (ENXIO); + } + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *), M_OFWPROP, M_WAITOK); + def.parent_names[0] = clk_get_name(clk_parent); + def.parent_cnt = 1; + + clk = clknode_create(clkdom, &aw_axiclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_axiclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_axiclk_probe), + DEVMETHOD(device_attach, aw_axiclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_axiclk_driver = { + "aw_axiclk", + aw_axiclk_methods, + 0 +}; + +static devclass_t aw_axiclk_devclass; + +EARLY_DRIVER_MODULE(aw_axiclk, simplebus, aw_axiclk_driver, + aw_axiclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_codecclk.c b/sys/arm/allwinner/clk/aw_codecclk.c new file mode 100644 index 0000000..5c50f49 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_codecclk.c @@ -0,0 +1,164 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner CODEC clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define SCLK_GATING_SHIFT 31 + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-codec-clk", 1 }, + { NULL, 0 } +}; + +static int +aw_codecclk_create(device_t dev, bus_addr_t paddr, struct clkdom *clkdom, + const char *pclkname, const char *clkname, int index) +{ + const char *parent_names[1] = { pclkname }; + struct clk_gate_def def; + + memset(&def, 0, sizeof(def)); + def.clkdef.id = index; + def.clkdef.name = clkname; + def.clkdef.parent_names = parent_names; + def.clkdef.parent_cnt = 1; + def.offset = paddr; + def.shift = SCLK_GATING_SHIFT; + def.mask = 1; + def.on_value = 1; + def.off_value = 0; + + return (clknode_gate_register(clkdom, &def)); +} + +static int +aw_codecclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner CODEC Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_codecclk_attach(device_t dev) +{ + struct clkdom *clkdom; + const char **names; + int nout, error; + uint32_t *indices; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + + node = ofw_bus_get_node(dev); + indices = NULL; + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout != 1) { + device_printf(dev, "must have exactly one output clock\n"); + error = ENOENT; + goto fail; + } + + error = clk_get_by_ofw_index(dev, 0, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot parse clock parent\n"); + return (ENXIO); + } + + error = aw_codecclk_create(dev, paddr, clkdom, + clk_get_name(clk_parent), names[0], 1); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_codecclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_codecclk_probe), + DEVMETHOD(device_attach, aw_codecclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_codecclk_driver = { + "aw_codecclk", + aw_codecclk_methods, + 0 +}; + +static devclass_t aw_codecclk_devclass; + +EARLY_DRIVER_MODULE(aw_codecclk, simplebus, aw_codecclk_driver, + aw_codecclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_cpuclk.c b/sys/arm/allwinner/clk/aw_cpuclk.c new file mode 100644 index 0000000..045751b --- /dev/null +++ b/sys/arm/allwinner/clk/aw_cpuclk.c @@ -0,0 +1,161 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner CPU clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#define CPU_CLK_SRC_SEL_WIDTH 2 +#define CPU_CLK_SRC_SEL_SHIFT 16 + +static int +aw_cpuclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_is_compatible(dev, "allwinner,sun4i-a10-cpu-clk")) + return (ENXIO); + + device_set_desc(dev, "Allwinner CPU Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_cpuclk_attach(device_t dev) +{ + struct clk_mux_def def; + struct clkdom *clkdom; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + clk_t clk; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + def.clkdef.id = 1; + def.clkdef.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, + M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.clkdef.parent_names[i] = clk_get_name(clk); + clk_release(clk); + } + def.clkdef.parent_cnt = ncells; + def.offset = paddr; + def.shift = CPU_CLK_SRC_SEL_SHIFT; + def.width = CPU_CLK_SRC_SEL_WIDTH; + + error = clk_parse_ofw_clk_name(dev, node, &def.clkdef.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + + error = clknode_mux_register(clkdom, &def); + if (error != 0) { + device_printf(dev, "cannot register mux clock\n"); + error = ENXIO; + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + free(__DECONST(char *, def.clkdef.parent_names), M_OFWPROP); + free(__DECONST(char *, def.clkdef.name), M_OFWPROP); + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + free(__DECONST(char *, def.clkdef.name), M_OFWPROP); + return (error); +} + +static device_method_t aw_cpuclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_cpuclk_probe), + DEVMETHOD(device_attach, aw_cpuclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_cpuclk_driver = { + "aw_cpuclk", + aw_cpuclk_methods, + 0 +}; + +static devclass_t aw_cpuclk_devclass; + +EARLY_DRIVER_MODULE(aw_cpuclk, simplebus, aw_cpuclk_driver, + aw_cpuclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_debeclk.c b/sys/arm/allwinner/clk/aw_debeclk.c new file mode 100644 index 0000000..885fad8 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_debeclk.c @@ -0,0 +1,351 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner display backend clocks + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" +#include "hwreset_if.h" + +#define SCLK_GATING (1 << 31) +#define BE_RST (1 << 30) +#define CLK_SRC_SEL (0x3 << 24) +#define CLK_SRC_SEL_SHIFT 24 +#define CLK_SRC_SEL_MAX 2 +#define CLK_SRC_SEL_PLL3 0 +#define CLK_SRC_SEL_PLL7 1 +#define CLK_SRC_SEL_PLL5 2 +#define CLK_RATIO_M (0xf << 0) +#define CLK_RATIO_M_SHIFT 0 +#define CLK_RATIO_M_MAX 0xf + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-de-be-clk", 1 }, + { NULL, 0 } +}; + +struct aw_debeclk_softc { + device_t clkdev; + bus_addr_t reg; +}; + +#define DEBECLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define DEBECLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEBECLK_MODIFY(sc, clr, set) \ + CLKDEV_MODIFY_4((sc)->clkdev, (sc)->reg, (clr), (set)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_debeclk_hwreset_assert(device_t dev, intptr_t id, bool value) +{ + struct aw_debeclk_softc *sc; + int error; + + sc = device_get_softc(dev); + + DEVICE_LOCK(sc); + error = DEBECLK_MODIFY(sc, BE_RST, value ? 0 : BE_RST); + DEVICE_UNLOCK(sc); + + return (error); +} + +static int +aw_debeclk_hwreset_is_asserted(device_t dev, intptr_t id, bool *value) +{ + struct aw_debeclk_softc *sc; + uint32_t val; + int error; + + sc = device_get_softc(dev); + + DEVICE_LOCK(sc); + error = DEBECLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + if (error) + return (error); + + *value = (val & BE_RST) != 0 ? false : true; + + return (0); +} + +static int +aw_debeclk_init(struct clknode *clk, device_t dev) +{ + struct aw_debeclk_softc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + /* Set BE source to PLL5 (DDR external peripheral clock) */ + index = CLK_SRC_SEL_PLL5; + + DEVICE_LOCK(sc); + DEBECLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + DEBECLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_debeclk_set_mux(struct clknode *clk, int index) +{ + struct aw_debeclk_softc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + if (index < 0 || index > CLK_SRC_SEL_MAX) + return (ERANGE); + + DEVICE_LOCK(sc); + DEBECLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + DEBECLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_debeclk_set_gate(struct clknode *clk, bool enable) +{ + struct aw_debeclk_softc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + DEBECLK_READ(sc, &val); + if (enable) + val |= SCLK_GATING; + else + val &= ~SCLK_GATING; + DEBECLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_debeclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_debeclk_softc *sc; + uint32_t val, m; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + DEBECLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + m = ((val & CLK_RATIO_M) >> CLK_RATIO_M_SHIFT) + 1; + + *freq = *freq / m; + + return (0); +} + +static int +aw_debeclk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_debeclk_softc *sc; + uint32_t val, m; + + sc = clknode_get_softc(clk); + + m = howmany(fin, *fout) - 1; + + DEVICE_LOCK(sc); + DEBECLK_READ(sc, &val); + val &= ~CLK_RATIO_M; + val |= (m << CLK_RATIO_M_SHIFT); + DEBECLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + *fout = fin / (m + 1); + *stop = 1; + + return (0); +} + +static clknode_method_t aw_debeclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_debeclk_init), + CLKNODEMETHOD(clknode_set_gate, aw_debeclk_set_gate), + CLKNODEMETHOD(clknode_set_mux, aw_debeclk_set_mux), + CLKNODEMETHOD(clknode_recalc_freq, aw_debeclk_recalc_freq), + CLKNODEMETHOD(clknode_set_freq, aw_debeclk_set_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_debeclk_clknode, aw_debeclk_clknode_class, + aw_debeclk_clknode_methods, sizeof(struct aw_debeclk_softc), clknode_class); + +static int +aw_debeclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner Display Engine Backend Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_debeclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_debeclk_softc *sc, *clk_sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + + sc = device_get_softc(dev); + sc->clkdev = device_get_parent(dev); + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &sc->reg, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + clk = clknode_create(clkdom, &aw_debeclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + clk_sc = clknode_get_softc(clk); + clk_sc->reg = sc->reg; + clk_sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + hwreset_register_ofw_provider(dev); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_debeclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_debeclk_probe), + DEVMETHOD(device_attach, aw_debeclk_attach), + + /* Reset interface */ + DEVMETHOD(hwreset_assert, aw_debeclk_hwreset_assert), + DEVMETHOD(hwreset_is_asserted, aw_debeclk_hwreset_is_asserted), + + DEVMETHOD_END +}; + +static driver_t aw_debeclk_driver = { + "aw_debeclk", + aw_debeclk_methods, + sizeof(struct aw_debeclk_softc) +}; + +static devclass_t aw_debeclk_devclass; + +EARLY_DRIVER_MODULE(aw_debeclk, simplebus, aw_debeclk_driver, + aw_debeclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_gate.c b/sys/arm/allwinner/clk/aw_gate.c new file mode 100644 index 0000000..d43d021 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_gate.c @@ -0,0 +1,198 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner clock gates + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#define GATE_OFFSET(index) ((index / 32) * 4) +#define GATE_SHIFT(index) (index % 32) + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-dram-gates-clk", + (uintptr_t)"Allwinner DRAM Clock Gates" }, + { "allwinner,sun4i-a10-ahb-gates-clk", + (uintptr_t)"Allwinner AHB Clock Gates" }, + { "allwinner,sun4i-a10-apb0-gates-clk", + (uintptr_t)"Allwinner APB0 Clock Gates" }, + { "allwinner,sun4i-a10-apb1-gates-clk", + (uintptr_t)"Allwinner APB1 Clock Gates" }, + + { "allwinner,sun7i-a20-ahb-gates-clk", + (uintptr_t)"Allwinner AHB Clock Gates" }, + { "allwinner,sun7i-a20-apb0-gates-clk", + (uintptr_t)"Allwinner APB0 Clock Gates" }, + { "allwinner,sun7i-a20-apb1-gates-clk", + (uintptr_t)"Allwinner APB1 Clock Gates" }, + + { "allwinner,sun6i-a31-ahb1-gates-clk", + (uintptr_t)"Allwinner AHB1 Clock Gates" }, + { "allwinner,sun6i-a31-apb0-gates-clk", + (uintptr_t)"Allwinner APB0 Clock Gates" }, + { "allwinner,sun6i-a31-apb1-gates-clk", + (uintptr_t)"Allwinner APB1 Clock Gates" }, + { "allwinner,sun6i-a31-apb2-gates-clk", + (uintptr_t)"Allwinner APB2 Clock Gates" }, + + { NULL, 0 } +}; + +static int +aw_gate_create(device_t dev, bus_addr_t paddr, struct clkdom *clkdom, + const char *pclkname, const char *clkname, int index) +{ + const char *parent_names[1] = { pclkname }; + struct clk_gate_def def; + + memset(&def, 0, sizeof(def)); + def.clkdef.id = index; + def.clkdef.name = clkname; + def.clkdef.parent_names = parent_names; + def.clkdef.parent_cnt = 1; + def.offset = paddr + GATE_OFFSET(index); + def.shift = GATE_SHIFT(index); + def.mask = 1; + def.on_value = 1; + def.off_value = 0; + + return (clknode_gate_register(clkdom, &def)); +} + +static int +aw_gate_probe(device_t dev) +{ + const char *d; + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + d = (const char *)ofw_bus_search_compatible(dev, compat_data)->ocd_data; + if (d == NULL) + return (ENXIO); + + device_set_desc(dev, d); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_gate_attach(device_t dev) +{ + struct clkdom *clkdom; + const char **names; + int index, nout, error; + uint32_t *indices; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + + node = ofw_bus_get_node(dev); + indices = NULL; + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout == 0) { + device_printf(dev, "no clock outputs found\n"); + error = ENOENT; + goto fail; + } + if (indices == NULL) { + device_printf(dev, "no clock-indices property\n"); + error = ENXIO; + goto fail; + } + + error = clk_get_by_ofw_index(dev, 0, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot parse clock parent\n"); + return (ENXIO); + } + + for (index = 0; index < nout; index++) { + error = aw_gate_create(dev, paddr, clkdom, + clk_get_name(clk_parent), names[index], indices[index]); + if (error) + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_gate_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_gate_probe), + DEVMETHOD(device_attach, aw_gate_attach), + + DEVMETHOD_END +}; + +static driver_t aw_gate_driver = { + "aw_gate", + aw_gate_methods, + 0 +}; + +static devclass_t aw_gate_devclass; + +EARLY_DRIVER_MODULE(aw_gate, simplebus, aw_gate_driver, + aw_gate_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_gmacclk.c b/sys/arm/allwinner/clk/aw_gmacclk.c new file mode 100644 index 0000000..5e2f618 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_gmacclk.c @@ -0,0 +1,259 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner GMAC clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define GMAC_CLK_PIT (0x1 << 2) +#define GMAC_CLK_PIT_SHIFT 2 +#define GMAC_CLK_PIT_MII 0 +#define GMAC_CLK_PIT_RGMII 1 +#define GMAC_CLK_SRC (0x3 << 0) +#define GMAC_CLK_SRC_SHIFT 0 +#define GMAC_CLK_SRC_MII 0 +#define GMAC_CLK_SRC_EXT_RGMII 1 +#define GMAC_CLK_SRC_RGMII 2 + +#define CLK_IDX_MII 0 +#define CLK_IDX_RGMII 1 +#define CLK_IDX_COUNT 2 + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun7i-a20-gmac-clk", 1 }, + { NULL, 0 } +}; + +struct aw_gmacclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +#define GMACCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define GMACCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_gmacclk_init(struct clknode *clk, device_t dev) +{ + struct aw_gmacclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + GMACCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + switch ((val & GMAC_CLK_SRC) >> GMAC_CLK_SRC_SHIFT) { + case GMAC_CLK_SRC_MII: + index = CLK_IDX_MII; + break; + case GMAC_CLK_SRC_RGMII: + index = CLK_IDX_RGMII; + break; + default: + return (ENXIO); + } + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_gmacclk_set_mux(struct clknode *clk, int index) +{ + struct aw_gmacclk_sc *sc; + uint32_t val, clk_src, pit; + int error; + + sc = clknode_get_softc(clk); + error = 0; + + switch (index) { + case CLK_IDX_MII: + clk_src = GMAC_CLK_SRC_MII; + pit = GMAC_CLK_PIT_MII; + break; + case CLK_IDX_RGMII: + clk_src = GMAC_CLK_SRC_RGMII; + pit = GMAC_CLK_PIT_RGMII; + break; + default: + return (ENXIO); + } + + DEVICE_LOCK(sc); + GMACCLK_READ(sc, &val); + val &= ~(GMAC_CLK_SRC | GMAC_CLK_PIT); + val |= (clk_src << GMAC_CLK_SRC_SHIFT); + val |= (pit << GMAC_CLK_PIT_SHIFT); + GMACCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static clknode_method_t aw_gmacclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_gmacclk_init), + CLKNODEMETHOD(clknode_set_mux, aw_gmacclk_set_mux), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_gmacclk_clknode, aw_gmacclk_clknode_class, + aw_gmacclk_clknode_methods, sizeof(struct aw_gmacclk_sc), clknode_class); + +static int +aw_gmacclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner Module Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_gmacclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_gmacclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0 || ncells != CLK_IDX_COUNT) { + device_printf(dev, "couldn't find parent clocks\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", error); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + clk = clknode_create(clkdom, &aw_gmacclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_gmacclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_gmacclk_probe), + DEVMETHOD(device_attach, aw_gmacclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_gmacclk_driver = { + "aw_gmacclk", + aw_gmacclk_methods, + 0 +}; + +static devclass_t aw_gmacclk_devclass; + +EARLY_DRIVER_MODULE(aw_gmacclk, simplebus, aw_gmacclk_driver, + aw_gmacclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_hdmiclk.c b/sys/arm/allwinner/clk/aw_hdmiclk.c new file mode 100644 index 0000000..635418c --- /dev/null +++ b/sys/arm/allwinner/clk/aw_hdmiclk.c @@ -0,0 +1,315 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner HDMI clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define SCLK_GATING (1 << 31) +#define CLK_SRC_SEL (0x3 << 24) +#define CLK_SRC_SEL_SHIFT 24 +#define CLK_SRC_SEL_MAX 0x3 +#define CLK_RATIO_N (0x3 << 16) +#define CLK_RATIO_N_SHIFT 16 +#define CLK_RATIO_N_MAX 0x3 +#define CLK_RATIO_M (0x1f << 0) +#define CLK_RATIO_M_SHIFT 0 +#define CLK_RATIO_M_MAX 0x1f + +#define CLK_IDX_PLL3_1X 0 + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-hdmi-clk", 1 }, + { NULL, 0 } +}; + +struct aw_hdmiclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +#define HDMICLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define HDMICLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_hdmiclk_init(struct clknode *clk, device_t dev) +{ + struct aw_hdmiclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + /* Select PLL3(1X) clock source */ + index = CLK_IDX_PLL3_1X; + + DEVICE_LOCK(sc); + HDMICLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + HDMICLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_hdmiclk_set_mux(struct clknode *clk, int index) +{ + struct aw_hdmiclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + if (index < 0 || index > CLK_SRC_SEL_MAX) + return (ERANGE); + + DEVICE_LOCK(sc); + HDMICLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + HDMICLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_hdmiclk_set_gate(struct clknode *clk, bool enable) +{ + struct aw_hdmiclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + HDMICLK_READ(sc, &val); + if (enable) + val |= SCLK_GATING; + else + val &= ~SCLK_GATING; + HDMICLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_hdmiclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_hdmiclk_sc *sc; + uint32_t val, m, n; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + HDMICLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + n = 1 << ((val & CLK_RATIO_N) >> CLK_RATIO_N_SHIFT); + m = ((val & CLK_RATIO_M) >> CLK_RATIO_M_SHIFT) + 1; + + *freq = *freq / n / m; + + return (0); +} + +static int +aw_hdmiclk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_hdmiclk_sc *sc; + uint32_t val, m, n, best_m, best_n; + uint64_t cur_freq; + int64_t best_diff, cur_diff; + + sc = clknode_get_softc(clk); + best_n = best_m = 0; + best_diff = (int64_t)*fout; + + for (n = 0; n <= CLK_RATIO_N_MAX; n++) + for (m = 0; m <= CLK_RATIO_M_MAX; m++) { + cur_freq = fin / (1 << n) / (m + 1); + cur_diff = (int64_t)*fout - cur_freq; + if (cur_diff >= 0 && cur_diff < best_diff) { + best_diff = cur_diff; + best_m = m; + best_n = n; + } + } + + if (best_diff == (int64_t)*fout) + return (ERANGE); + + DEVICE_LOCK(sc); + HDMICLK_READ(sc, &val); + val &= ~(CLK_RATIO_N | CLK_RATIO_M); + val |= (best_n << CLK_RATIO_N_SHIFT); + val |= (best_m << CLK_RATIO_M_SHIFT); + HDMICLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + *fout = fin / (1 << best_n) / (best_m + 1); + *stop = 1; + + return (0); +} + +static clknode_method_t aw_hdmiclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_hdmiclk_init), + CLKNODEMETHOD(clknode_set_gate, aw_hdmiclk_set_gate), + CLKNODEMETHOD(clknode_set_mux, aw_hdmiclk_set_mux), + CLKNODEMETHOD(clknode_recalc_freq, aw_hdmiclk_recalc_freq), + CLKNODEMETHOD(clknode_set_freq, aw_hdmiclk_set_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_hdmiclk_clknode, aw_hdmiclk_clknode_class, + aw_hdmiclk_clknode_methods, sizeof(struct aw_hdmiclk_sc), clknode_class); + +static int +aw_hdmiclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner HDMI Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_hdmiclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_hdmiclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + error = clk_get_by_ofw_index(dev, 0, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot parse clock parent\n"); + return (ENXIO); + } + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *), M_OFWPROP, M_WAITOK); + def.parent_names[0] = clk_get_name(clk_parent); + def.parent_cnt = 1; + + clk = clknode_create(clkdom, &aw_hdmiclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_hdmiclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_hdmiclk_probe), + DEVMETHOD(device_attach, aw_hdmiclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_hdmiclk_driver = { + "aw_hdmiclk", + aw_hdmiclk_methods, + 0 +}; + +static devclass_t aw_hdmiclk_devclass; + +EARLY_DRIVER_MODULE(aw_hdmiclk, simplebus, aw_hdmiclk_driver, + aw_hdmiclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_lcdclk.c b/sys/arm/allwinner/clk/aw_lcdclk.c new file mode 100644 index 0000000..bebee01 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_lcdclk.c @@ -0,0 +1,560 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner LCD clocks + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" +#include "hwreset_if.h" + +/* CH0 */ +#define CH0_SCLK_GATING (1 << 31) +#define CH0_LCD_RST (1 << 30) +#define CH0_CLK_SRC_SEL (0x3 << 24) +#define CH0_CLK_SRC_SEL_SHIFT 24 +#define CH0_CLK_SRC_SEL_PLL3_1X 0 +#define CH0_CLK_SRC_SEL_PLL7_1X 1 +#define CH0_CLK_SRC_SEL_PLL3_2X 2 +#define CH0_CLK_SRC_SEL_PLL6 3 + +/* CH1 */ +#define CH1_SCLK2_GATING (1 << 31) +#define CH1_SCLK2_SEL (0x3 << 24) +#define CH1_SCLK2_SEL_SHIFT 24 +#define CH1_SCLK2_SEL_PLL3_1X 0 +#define CH1_SCLK2_SEL_PLL7_1X 1 +#define CH1_SCLK2_SEL_PLL3_2X 2 +#define CH1_SCLK2_SEL_PLL7_2X 3 +#define CH1_SCLK1_GATING (1 << 15) +#define CH1_SCLK1_SEL (0x1 << 11) +#define CH1_SCLK1_SEL_SHIFT 11 +#define CH1_SCLK1_SEL_SCLK2 0 +#define CH1_SCLK1_SEL_SCLK2_DIV2 1 +#define CH1_CLK_DIV_RATIO_M (0x1f << 0) +#define CH1_CLK_DIV_RATIO_M_SHIFT 0 + +#define TCON_PLLREF 3000000ULL +#define TCON_PLL_M_MIN 1 +#define TCON_PLL_M_MAX 15 +#define TCON_PLL_N_MIN 9 +#define TCON_PLL_N_MAX 127 + +#define CLK_IDX_CH1_SCLK1 0 +#define CLK_IDX_CH1_SCLK2 1 + +#define CLK_IDX_ + +enum aw_lcdclk_type { + AW_LCD_CH0 = 1, + AW_LCD_CH1, +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-lcd-ch0-clk", AW_LCD_CH0 }, + { "allwinner,sun4i-a10-lcd-ch1-clk", AW_LCD_CH1 }, + { NULL, 0 } +}; + +struct aw_lcdclk_softc { + enum aw_lcdclk_type type; + device_t clkdev; + bus_addr_t reg; + int id; +}; + +#define LCDCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define LCDCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define LCDCLK_MODIFY(sc, clr, set) \ + CLKDEV_MODIFY_4((sc)->clkdev, (sc)->reg, (clr), (set)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_lcdclk_hwreset_assert(device_t dev, intptr_t id, bool value) +{ + struct aw_lcdclk_softc *sc; + int error; + + sc = device_get_softc(dev); + + if (sc->type != AW_LCD_CH0) + return (ENXIO); + + DEVICE_LOCK(sc); + error = LCDCLK_MODIFY(sc, CH0_LCD_RST, value ? 0 : CH0_LCD_RST); + DEVICE_UNLOCK(sc); + + return (error); +} + +static int +aw_lcdclk_hwreset_is_asserted(device_t dev, intptr_t id, bool *value) +{ + struct aw_lcdclk_softc *sc; + uint32_t val; + int error; + + sc = device_get_softc(dev); + + if (sc->type != AW_LCD_CH0) + return (ENXIO); + + DEVICE_LOCK(sc); + error = LCDCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + if (error) + return (error); + + *value = (val & CH0_LCD_RST) != 0 ? false : true; + + return (0); +} + +static int +aw_lcdclk_init(struct clknode *clk, device_t dev) +{ + struct aw_lcdclk_softc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + switch (sc->type) { + case AW_LCD_CH0: + index = (val & CH0_CLK_SRC_SEL) >> CH0_CLK_SRC_SEL_SHIFT; + break; + case AW_LCD_CH1: + switch (sc->id) { + case CLK_IDX_CH1_SCLK1: + index = 0; + break; + case CLK_IDX_CH1_SCLK2: + index = (val & CH1_SCLK2_SEL_SHIFT) >> + CH1_SCLK2_SEL_SHIFT; + break; + default: + return (ENXIO); + } + break; + default: + return (ENXIO); + } + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_lcdclk_set_mux(struct clknode *clk, int index) +{ + struct aw_lcdclk_softc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_LCD_CH0: + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + val &= ~CH0_CLK_SRC_SEL; + val |= (index << CH0_CLK_SRC_SEL_SHIFT); + LCDCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + break; + case AW_LCD_CH1: + switch (sc->id) { + case CLK_IDX_CH1_SCLK2: + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + val &= ~CH1_SCLK2_SEL; + val |= (index << CH1_SCLK2_SEL_SHIFT); + LCDCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + break; + default: + return (ENXIO); + } + break; + default: + return (ENXIO); + } + + return (0); +} + +static int +aw_lcdclk_set_gate(struct clknode *clk, bool enable) +{ + struct aw_lcdclk_softc *sc; + uint32_t val, mask; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_LCD_CH0: + mask = CH0_SCLK_GATING; + break; + case AW_LCD_CH1: + mask = (sc->id == CLK_IDX_CH1_SCLK1) ? CH1_SCLK1_GATING : + CH1_SCLK2_GATING; + break; + default: + return (ENXIO); + } + + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + if (enable) + val |= mask; + else + val &= ~mask; + LCDCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_lcdclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_lcdclk_softc *sc; + uint32_t val, m; + + sc = clknode_get_softc(clk); + + if (sc->type != AW_LCD_CH1) + return (0); + + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + m = ((val & CH1_CLK_DIV_RATIO_M) >> CH1_CLK_DIV_RATIO_M_SHIFT) + 1; + *freq = *freq / m; + + if (sc->id == CLK_IDX_CH1_SCLK1) { + if ((val & CH1_SCLK1_SEL) == CH1_SCLK1_SEL_SCLK2_DIV2) + *freq /= 2; + } + + return (0); +} + +static void +calc_tcon_pll(uint64_t fin, uint64_t fout, uint32_t *pm, uint32_t *pn) +{ + int64_t diff, fcur, best; + int m, n; + + best = fout; + for (m = TCON_PLL_M_MIN; m <= TCON_PLL_M_MAX; m++) { + for (n = TCON_PLL_N_MIN; n <= TCON_PLL_N_MAX; n++) { + fcur = (n * fin) / m; + diff = (int64_t)fout - fcur; + if (diff > 0 && diff < best) { + best = diff; + *pm = m; + *pn = n; + } + } + } +} + +static int +aw_lcdclk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_lcdclk_softc *sc; + uint32_t val, m, m2, n, n2, src_sel; + uint64_t fsingle, fdouble; + int error; + bool dbl; + + sc = clknode_get_softc(clk); + + switch (sc->type) { + case AW_LCD_CH0: + *stop = 0; + break; + case AW_LCD_CH1: + if (sc->id != CLK_IDX_CH1_SCLK2) + return (ENXIO); + + m = n = m2 = n2 = 0; + dbl = false; + + /* Find the frequency closes to the target dot clock, using + * both 1X and 2X PLL inputs as possible candidates. + */ + calc_tcon_pll(TCON_PLLREF, *fout, &m, &n); + calc_tcon_pll(TCON_PLLREF * 2, *fout, &m2, &n2); + + fsingle = m ? (n * TCON_PLLREF) / m : 0; + fdouble = m2 ? (n2 * TCON_PLLREF * 2) / m2 : 0; + + if (fdouble > fsingle) { + dbl = true; + m = m2; + n = n2; + } + + src_sel = dbl ? CH0_CLK_SRC_SEL_PLL3_2X : + CH0_CLK_SRC_SEL_PLL3_1X; + + /* Switch parent clock if necessary */ + if (src_sel != clknode_get_parent_idx(clk)) { + error = clknode_set_parent_by_idx(clk, src_sel); + if (error != 0) + return (error); + } + + /* Set desired parent frequency */ + fin = n * TCON_PLLREF; + + error = clknode_set_freq(clknode_get_parent(clk), fin, 0, 0); + if (error != 0) + return (error); + + error = clknode_enable(clknode_get_parent(clk)); + if (error != 0) + return (error); + + /* Fetch new input frequency */ + error = clknode_get_freq(clknode_get_parent(clk), &fin); + if (error != 0) + return (error); + + /* Set LCD divisor */ + DEVICE_LOCK(sc); + LCDCLK_READ(sc, &val); + val &= ~CH1_CLK_DIV_RATIO_M; + val |= ((m - 1) << CH1_CLK_DIV_RATIO_M_SHIFT); + LCDCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + *fout = fin / m; + *stop = 1; + + break; + } + + return (0); +} + +static clknode_method_t aw_lcdclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_lcdclk_init), + CLKNODEMETHOD(clknode_set_gate, aw_lcdclk_set_gate), + CLKNODEMETHOD(clknode_set_mux, aw_lcdclk_set_mux), + CLKNODEMETHOD(clknode_recalc_freq, aw_lcdclk_recalc_freq), + CLKNODEMETHOD(clknode_set_freq, aw_lcdclk_set_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_lcdclk_clknode, aw_lcdclk_clknode_class, + aw_lcdclk_clknode_methods, sizeof(struct aw_lcdclk_softc), clknode_class); + +static int +aw_lcdclk_create(device_t dev, struct clkdom *clkdom, + const char **parent_names, int parent_cnt, const char *name, int index) +{ + struct aw_lcdclk_softc *sc, *clk_sc; + struct clknode_init_def def; + struct clknode *clk; + phandle_t node; + + sc = device_get_softc(dev); + node = ofw_bus_get_node(dev); + + memset(&def, 0, sizeof(def)); + def.id = index; + def.name = name; + def.parent_names = parent_names; + def.parent_cnt = parent_cnt; + + clk = clknode_create(clkdom, &aw_lcdclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + return (ENXIO); + } + + clk_sc = clknode_get_softc(clk); + clk_sc->type = sc->type; + clk_sc->reg = sc->reg; + clk_sc->clkdev = sc->clkdev; + clk_sc->id = index; + + clknode_register(clkdom, clk); + + return (0); +} + +static int +aw_lcdclk_probe(device_t dev) +{ + enum aw_lcdclk_type type; + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + switch (type) { + case AW_LCD_CH0: + device_set_desc(dev, "Allwinner LCD CH0 Clock"); + break; + case AW_LCD_CH1: + device_set_desc(dev, "Allwinner LCD CH1 Clock"); + break; + default: + return (ENXIO); + } + + return (BUS_PROBE_DEFAULT); +} + +static int +aw_lcdclk_attach(device_t dev) +{ + struct aw_lcdclk_softc *sc; + struct clkdom *clkdom; + clk_t clk_parent; + bus_size_t psize; + phandle_t node; + uint32_t *indices; + const char **parent_names; + const char **names; + int error, ncells, nout, i; + + sc = device_get_softc(dev); + sc->clkdev = device_get_parent(dev); + sc->type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &sc->reg, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout == 0) { + device_printf(dev, "no clock outputs found\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + for (i = 0; i < nout; i++) { + error = aw_lcdclk_create(dev, clkdom, parent_names, ncells, + names[i], nout == 1 ? 1 : i); + if (error) + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + if (sc->type == AW_LCD_CH0) + hwreset_register_ofw_provider(dev); + + free(parent_names, M_OFWPROP); + return (0); + +fail: + free(parent_names, M_OFWPROP); + return (error); +} + +static device_method_t aw_lcdclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_lcdclk_probe), + DEVMETHOD(device_attach, aw_lcdclk_attach), + + /* Reset interface */ + DEVMETHOD(hwreset_assert, aw_lcdclk_hwreset_assert), + DEVMETHOD(hwreset_is_asserted, aw_lcdclk_hwreset_is_asserted), + + DEVMETHOD_END +}; + +static driver_t aw_lcdclk_driver = { + "aw_lcdclk", + aw_lcdclk_methods, + sizeof(struct aw_lcdclk_softc) +}; + +static devclass_t aw_lcdclk_devclass; + +EARLY_DRIVER_MODULE(aw_lcdclk, simplebus, aw_lcdclk_driver, + aw_lcdclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_mmcclk.c b/sys/arm/allwinner/clk/aw_mmcclk.c new file mode 100644 index 0000000..653afd9 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_mmcclk.c @@ -0,0 +1,351 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner MMC clocks + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define SCLK_GATING (1 << 31) +#define CLK_SRC_SEL (0x3 << 24) +#define CLK_SRC_SEL_SHIFT 24 +#define CLK_SRC_SEL_MAX 0x3 +#define CLK_SRC_SEL_OSC24M 0 +#define CLK_SRC_SEL_PLL6 1 +#define CLK_PHASE_CTR (0x7 << 20) +#define CLK_PHASE_CTR_SHIFT 20 +#define CLK_RATIO_N (0x3 << 16) +#define CLK_RATIO_N_SHIFT 16 +#define CLK_RATIO_N_MAX 0x3 +#define OUTPUT_CLK_PHASE_CTR (0x7 << 8) +#define OUTPUT_CLK_PHASE_CTR_SHIFT 8 +#define CLK_RATIO_M (0xf << 0) +#define CLK_RATIO_M_SHIFT 0 +#define CLK_RATIO_M_MAX 0xf + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-mmc-clk", 1 }, + { NULL, 0 } +}; + +struct aw_mmcclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +#define MODCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define MODCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_mmcclk_init(struct clknode *clk, device_t dev) +{ + struct aw_mmcclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + index = (val & CLK_SRC_SEL) >> CLK_SRC_SEL_SHIFT; + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_mmcclk_set_mux(struct clknode *clk, int index) +{ + struct aw_mmcclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + if (index < 0 || index > CLK_SRC_SEL_MAX) + return (ERANGE); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_mmcclk_set_gate(struct clknode *clk, bool enable) +{ + struct aw_mmcclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + if (enable) + val |= SCLK_GATING; + else + val &= ~SCLK_GATING; + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_mmcclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_mmcclk_sc *sc; + uint32_t val, m, n; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + n = 1 << ((val & CLK_RATIO_N) >> CLK_RATIO_N_SHIFT); + m = ((val & CLK_RATIO_M) >> CLK_RATIO_M_SHIFT) + 1; + + *freq = *freq / n / m; + + return (0); +} + +static int +aw_mmcclk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_mmcclk_sc *sc; + uint32_t val, m, n, phase, ophase; + int parent_idx, error; + + sc = clknode_get_softc(clk); + + /* XXX + * The ophase/phase values should be set by the MMC driver, but + * there is currently no way to do this with the clk API + */ + if (*fout <= 400000) { + parent_idx = CLK_SRC_SEL_OSC24M; + ophase = 0; + phase = 0; + n = 2; + } else if (*fout <= 25000000) { + parent_idx = CLK_SRC_SEL_PLL6; + ophase = 0; + phase = 5; + n = 2; + } else if (*fout <= 50000000) { + parent_idx = CLK_SRC_SEL_PLL6; + ophase = 3; + phase = 5; + n = 0; + } else + return (ERANGE); + + /* Switch parent clock, if necessary */ + if (parent_idx != clknode_get_parent_idx(clk)) { + error = clknode_set_parent_by_idx(clk, parent_idx); + if (error != 0) + return (error); + + /* Fetch new input frequency */ + error = clknode_get_freq(clknode_get_parent(clk), &fin); + if (error != 0) + return (error); + } + + m = ((fin / (1 << n)) / *fout) - 1; + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + val &= ~(CLK_RATIO_N | CLK_RATIO_M | CLK_PHASE_CTR | + OUTPUT_CLK_PHASE_CTR); + val |= (n << CLK_RATIO_N_SHIFT); + val |= (m << CLK_RATIO_M_SHIFT); + val |= (phase << CLK_PHASE_CTR_SHIFT); + val |= (ophase << OUTPUT_CLK_PHASE_CTR_SHIFT); + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + *fout = fin / (1 << n) / (m + 1); + *stop = 1; + + return (0); +} + +static clknode_method_t aw_mmcclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_mmcclk_init), + CLKNODEMETHOD(clknode_set_gate, aw_mmcclk_set_gate), + CLKNODEMETHOD(clknode_set_mux, aw_mmcclk_set_mux), + CLKNODEMETHOD(clknode_recalc_freq, aw_mmcclk_recalc_freq), + CLKNODEMETHOD(clknode_set_freq, aw_mmcclk_set_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_mmcclk_clknode, aw_mmcclk_clknode_class, + aw_mmcclk_clknode_methods, sizeof(struct aw_mmcclk_sc), clknode_class); + +static int +aw_mmcclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner MMC Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_mmcclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_mmcclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + const char **names; + uint32_t *indices; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, nout, ncells, i; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0 || ncells == 0) { + device_printf(dev, "couldn't find parent clocks\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout == 0) { + device_printf(dev, "no output clocks found\n"); + error = ENXIO; + goto fail; + } + + memset(&def, 0, sizeof(def)); + def.name = names[0]; + def.id = 0; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + def.flags = CLK_NODE_GLITCH_FREE; + + clk = clknode_create(clkdom, &aw_mmcclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_mmcclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_mmcclk_probe), + DEVMETHOD(device_attach, aw_mmcclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_mmcclk_driver = { + "aw_mmcclk", + aw_mmcclk_methods, + 0 +}; + +static devclass_t aw_mmcclk_devclass; + +EARLY_DRIVER_MODULE(aw_mmcclk, simplebus, aw_mmcclk_driver, + aw_mmcclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_modclk.c b/sys/arm/allwinner/clk/aw_modclk.c new file mode 100644 index 0000000..f4755ea --- /dev/null +++ b/sys/arm/allwinner/clk/aw_modclk.c @@ -0,0 +1,318 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner module clocks + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" + +#define SCLK_GATING (1 << 31) +#define CLK_SRC_SEL (0x3 << 24) +#define CLK_SRC_SEL_SHIFT 24 +#define CLK_SRC_SEL_MAX 0x3 +#define CLK_RATIO_N (0x3 << 16) +#define CLK_RATIO_N_SHIFT 16 +#define CLK_RATIO_N_MAX 0x3 +#define CLK_RATIO_M (0x1f << 0) +#define CLK_RATIO_M_SHIFT 0 +#define CLK_RATIO_M_MAX 0x1f + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-mod0-clk", 1 }, + { NULL, 0 } +}; + +struct aw_modclk_sc { + device_t clkdev; + bus_addr_t reg; +}; + +#define MODCLK_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define MODCLK_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +aw_modclk_init(struct clknode *clk, device_t dev) +{ + struct aw_modclk_sc *sc; + uint32_t val, index; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + index = (val & CLK_SRC_SEL) >> CLK_SRC_SEL_SHIFT; + + clknode_init_parent_idx(clk, index); + return (0); +} + +static int +aw_modclk_set_mux(struct clknode *clk, int index) +{ + struct aw_modclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + if (index < 0 || index > CLK_SRC_SEL_MAX) + return (ERANGE); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + val &= ~CLK_SRC_SEL; + val |= (index << CLK_SRC_SEL_SHIFT); + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_modclk_set_gate(struct clknode *clk, bool enable) +{ + struct aw_modclk_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + if (enable) + val |= SCLK_GATING; + else + val &= ~SCLK_GATING; + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_modclk_recalc_freq(struct clknode *clk, uint64_t *freq) +{ + struct aw_modclk_sc *sc; + uint32_t val, m, n; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + DEVICE_UNLOCK(sc); + + n = 1 << ((val & CLK_RATIO_N) >> CLK_RATIO_N_SHIFT); + m = ((val & CLK_RATIO_M) >> CLK_RATIO_M_SHIFT) + 1; + + *freq = *freq / n / m; + + return (0); +} + +static int +aw_modclk_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_modclk_sc *sc; + uint32_t val, m, n, best_m, best_n; + uint64_t cur_freq; + int64_t best_diff, cur_diff; + + sc = clknode_get_softc(clk); + best_n = best_m = 0; + best_diff = (int64_t)*fout; + + for (n = 0; n <= CLK_RATIO_N_MAX; n++) + for (m = 0; m <= CLK_RATIO_M_MAX; m++) { + cur_freq = fin / (1 << n) / (m + 1); + cur_diff = (int64_t)*fout - cur_freq; + if (cur_diff >= 0 && cur_diff < best_diff) { + best_diff = cur_diff; + best_m = m; + best_n = n; + } + } + + if (best_diff == (int64_t)*fout) + return (ERANGE); + + DEVICE_LOCK(sc); + MODCLK_READ(sc, &val); + val &= ~(CLK_RATIO_N | CLK_RATIO_M); + val |= (best_n << CLK_RATIO_N_SHIFT); + val |= (best_m << CLK_RATIO_M_SHIFT); + MODCLK_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + *fout = fin / (1 << best_n) / (best_m + 1); + *stop = 1; + + return (0); +} + +static clknode_method_t aw_modclk_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_modclk_init), + CLKNODEMETHOD(clknode_set_gate, aw_modclk_set_gate), + CLKNODEMETHOD(clknode_set_mux, aw_modclk_set_mux), + CLKNODEMETHOD(clknode_recalc_freq, aw_modclk_recalc_freq), + CLKNODEMETHOD(clknode_set_freq, aw_modclk_set_freq), + CLKNODEMETHOD_END +}; +DEFINE_CLASS_1(aw_modclk_clknode, aw_modclk_clknode_class, + aw_modclk_clknode_methods, sizeof(struct aw_modclk_sc), clknode_class); + +static int +aw_modclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner Module Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_modclk_attach(device_t dev) +{ + struct clknode_init_def def; + struct aw_modclk_sc *sc; + struct clkdom *clkdom; + struct clknode *clk; + clk_t clk_parent; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + int error, ncells, i; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + error = ofw_bus_parse_xref_list_get_length(node, "clocks", + "#clock-cells", &ncells); + if (error != 0) { + device_printf(dev, "cannot get clock count\n"); + return (error); + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + error = clk_parse_ofw_clk_name(dev, node, &def.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + def.id = 1; + def.parent_names = malloc(sizeof(char *) * ncells, M_OFWPROP, M_WAITOK); + for (i = 0; i < ncells; i++) { + error = clk_get_by_ofw_index(dev, i, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot get clock %d\n", i); + goto fail; + } + def.parent_names[i] = clk_get_name(clk_parent); + clk_release(clk_parent); + } + def.parent_cnt = ncells; + + clk = clknode_create(clkdom, &aw_modclk_clknode_class, &def); + if (clk == NULL) { + device_printf(dev, "cannot create clknode\n"); + error = ENXIO; + goto fail; + } + + sc = clknode_get_softc(clk); + sc->reg = paddr; + sc->clkdev = device_get_parent(dev); + + clknode_register(clkdom, clk); + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_modclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_modclk_probe), + DEVMETHOD(device_attach, aw_modclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_modclk_driver = { + "aw_modclk", + aw_modclk_methods, + 0 +}; + +static devclass_t aw_modclk_devclass; + +EARLY_DRIVER_MODULE(aw_modclk, simplebus, aw_modclk_driver, + aw_modclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_oscclk.c b/sys/arm/allwinner/clk/aw_oscclk.c new file mode 100644 index 0000000..313111f --- /dev/null +++ b/sys/arm/allwinner/clk/aw_oscclk.c @@ -0,0 +1,132 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner oscillator clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +static int +aw_oscclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_is_compatible(dev, "allwinner,sun4i-a10-osc-clk")) + return (ENXIO); + + device_set_desc(dev, "Allwinner Oscillator Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_oscclk_attach(device_t dev) +{ + struct clk_fixed_def def; + struct clkdom *clkdom; + phandle_t node; + uint32_t freq; + int error; + + node = ofw_bus_get_node(dev); + + if (OF_getencprop(node, "clock-frequency", &freq, sizeof(freq)) <= 0) { + device_printf(dev, "missing clock-frequency property\n"); + error = ENXIO; + goto fail; + } + + clkdom = clkdom_create(dev); + + memset(&def, 0, sizeof(def)); + def.clkdef.id = 1; + def.freq = freq; + error = clk_parse_ofw_clk_name(dev, node, &def.clkdef.name); + if (error != 0) { + device_printf(dev, "cannot parse clock name\n"); + error = ENXIO; + goto fail; + } + + error = clknode_fixed_register(clkdom, &def); + if (error != 0) { + device_printf(dev, "cannot register fixed clock\n"); + error = ENXIO; + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + free(__DECONST(char *, def.clkdef.name), M_OFWPROP); + + return (0); + +fail: + free(__DECONST(char *, def.clkdef.name), M_OFWPROP); + return (error); +} + +static device_method_t aw_oscclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_oscclk_probe), + DEVMETHOD(device_attach, aw_oscclk_attach), + + DEVMETHOD_END +}; + +static driver_t aw_oscclk_driver = { + "aw_oscclk", + aw_oscclk_methods, + 0, +}; + +static devclass_t aw_oscclk_devclass; + +EARLY_DRIVER_MODULE(aw_oscclk, simplebus, aw_oscclk_driver, + aw_oscclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_pll.c b/sys/arm/allwinner/clk/aw_pll.c new file mode 100644 index 0000000..2e67646 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_pll.c @@ -0,0 +1,757 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner PLL clock + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include + +#include "clkdev_if.h" + +#define AW_PLL_ENABLE (1 << 31) + +#define A10_PLL1_OUT_EXT_DIVP (0x3 << 16) +#define A10_PLL1_OUT_EXT_DIVP_SHIFT 16 +#define A10_PLL1_FACTOR_N (0x1f << 8) +#define A10_PLL1_FACTOR_N_SHIFT 8 +#define A10_PLL1_FACTOR_K (0x3 << 4) +#define A10_PLL1_FACTOR_K_SHIFT 4 +#define A10_PLL1_FACTOR_M (0x3 << 0) +#define A10_PLL1_FACTOR_M_SHIFT 0 + +#define A10_PLL2_POST_DIV (0xf << 26) +#define A10_PLL2_POST_DIV_SHIFT 26 +#define A10_PLL2_FACTOR_N (0x7f << 8) +#define A10_PLL2_FACTOR_N_SHIFT 8 +#define A10_PLL2_PRE_DIV (0x1f << 0) +#define A10_PLL2_PRE_DIV_SHIFT 0 + +#define A10_PLL3_MODE_SEL (0x1 << 15) +#define A10_PLL3_MODE_SEL_FRACT (0 << 15) +#define A10_PLL3_MODE_SEL_INT (1 << 15) +#define A10_PLL3_FUNC_SET (0x1 << 14) +#define A10_PLL3_FUNC_SET_270MHZ (0 << 14) +#define A10_PLL3_FUNC_SET_297MHZ (1 << 14) +#define A10_PLL3_FACTOR_M (0x7f << 0) +#define A10_PLL3_FACTOR_M_SHIFT 0 +#define A10_PLL3_REF_FREQ 3000000 + +#define A10_PLL5_OUT_EXT_DIVP (0x3 << 16) +#define A10_PLL5_OUT_EXT_DIVP_SHIFT 16 +#define A10_PLL5_FACTOR_N (0x1f << 8) +#define A10_PLL5_FACTOR_N_SHIFT 8 +#define A10_PLL5_FACTOR_K (0x3 << 4) +#define A10_PLL5_FACTOR_K_SHIFT 4 +#define A10_PLL5_FACTOR_M1 (0x3 << 2) +#define A10_PLL5_FACTOR_M1_SHIFT 2 +#define A10_PLL5_FACTOR_M (0x3 << 0) +#define A10_PLL5_FACTOR_M_SHIFT 0 + +#define A10_PLL6_BYPASS_EN (1 << 30) +#define A10_PLL6_SATA_CLK_EN (1 << 14) +#define A10_PLL6_FACTOR_N (0x1f << 8) +#define A10_PLL6_FACTOR_N_SHIFT 8 +#define A10_PLL6_FACTOR_K (0x3 << 4) +#define A10_PLL6_FACTOR_K_SHIFT 4 +#define A10_PLL6_FACTOR_M (0x3 << 0) +#define A10_PLL6_FACTOR_M_SHIFT 0 + +#define A10_PLL2_POST_DIV (0xf << 26) + +#define A31_PLL1_LOCK (1 << 28) +#define A31_PLL1_CPU_SIGMA_DELTA_EN (1 << 24) +#define A31_PLL1_FACTOR_N (0x1f << 8) +#define A31_PLL1_FACTOR_N_SHIFT 8 +#define A31_PLL1_FACTOR_K (0x3 << 4) +#define A31_PLL1_FACTOR_K_SHIFT 4 +#define A31_PLL1_FACTOR_M (0x3 << 0) +#define A31_PLL1_FACTOR_M_SHIFT 0 + +#define A31_PLL6_LOCK (1 << 28) +#define A31_PLL6_BYPASS_EN (1 << 25) +#define A31_PLL6_CLK_OUT_EN (1 << 24) +#define A31_PLL6_24M_OUT_EN (1 << 18) +#define A31_PLL6_24M_POST_DIV (0x3 << 16) +#define A31_PLL6_24M_POST_DIV_SHIFT 16 +#define A31_PLL6_FACTOR_N (0x1f << 8) +#define A31_PLL6_FACTOR_N_SHIFT 8 +#define A31_PLL6_FACTOR_K (0x3 << 4) +#define A31_PLL6_FACTOR_K_SHIFT 4 +#define A31_PLL6_DEFAULT_N 0x18 +#define A31_PLL6_DEFAULT_K 0x1 +#define A31_PLL6_TIMEOUT 10 + +#define CLKID_A10_PLL3_1X 0 +#define CLKID_A10_PLL3_2X 1 + +#define CLKID_A10_PLL5_DDR 0 +#define CLKID_A10_PLL5_OTHER 1 + +#define CLKID_A10_PLL6_SATA 0 +#define CLKID_A10_PLL6_OTHER 1 +#define CLKID_A10_PLL6 2 +#define CLKID_A10_PLL6_DIV_4 3 + +#define CLKID_A31_PLL6 0 +#define CLKID_A31_PLL6_X2 1 + +enum aw_pll_type { + AWPLL_A10_PLL1 = 1, + AWPLL_A10_PLL2, + AWPLL_A10_PLL3, + AWPLL_A10_PLL5, + AWPLL_A10_PLL6, + AWPLL_A31_PLL1, + AWPLL_A31_PLL6, +}; + +struct aw_pll_sc { + enum aw_pll_type type; + device_t clkdev; + bus_addr_t reg; + int id; +}; + +struct aw_pll_funcs { + int (*recalc)(struct aw_pll_sc *, uint64_t *); + int (*set_freq)(struct aw_pll_sc *, uint64_t, uint64_t *, int); + int (*init)(device_t, bus_addr_t, struct clknode_init_def *); +}; + +#define PLL_READ(sc, val) CLKDEV_READ_4((sc)->clkdev, (sc)->reg, (val)) +#define PLL_WRITE(sc, val) CLKDEV_WRITE_4((sc)->clkdev, (sc)->reg, (val)) +#define DEVICE_LOCK(sc) CLKDEV_DEVICE_LOCK((sc)->clkdev) +#define DEVICE_UNLOCK(sc) CLKDEV_DEVICE_UNLOCK((sc)->clkdev) + +static int +a10_pll1_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, m, n, k, p; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + p = 1 << ((val & A10_PLL1_OUT_EXT_DIVP) >> A10_PLL1_OUT_EXT_DIVP_SHIFT); + m = ((val & A10_PLL1_FACTOR_M) >> A10_PLL1_FACTOR_M_SHIFT) + 1; + k = ((val & A10_PLL1_FACTOR_K) >> A10_PLL1_FACTOR_K_SHIFT) + 1; + n = (val & A10_PLL1_FACTOR_N) >> A10_PLL1_FACTOR_N_SHIFT; + if (n == 0) + n = 1; + + *freq = (*freq * n * k) / (m * p); + + return (0); +} + +static int +a10_pll2_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, post_div, n, pre_div; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + post_div = (val & A10_PLL2_POST_DIV) >> A10_PLL2_POST_DIV_SHIFT; + if (post_div == 0) + post_div = 1; + n = (val & A10_PLL2_FACTOR_N) >> A10_PLL2_FACTOR_N_SHIFT; + if (n == 0) + n = 1; + pre_div = (val & A10_PLL2_PRE_DIV) >> A10_PLL2_PRE_DIV_SHIFT; + if (pre_div == 0) + pre_div = 1; + + switch (sc->id) { + case SUN4I_A10_PLL2_1X: + *freq = (*freq * 2 * n) / pre_div / post_div / 2; + break; + case SUN4I_A10_PLL2_2X: + *freq = (*freq * 2 * n) / pre_div / 4; + break; + case SUN4I_A10_PLL2_4X: + *freq = (*freq * 2 * n) / pre_div / 2; + break; + case SUN4I_A10_PLL2_8X: + *freq = (*freq * 2 * n) / pre_div; + break; + default: + return (EINVAL); + } + + return (0); +} + +static int +a10_pll2_set_freq(struct aw_pll_sc *sc, uint64_t fin, uint64_t *fout, + int flags) +{ + uint32_t val, post_div, n, pre_div; + + if (sc->id != SUN4I_A10_PLL2_1X) + return (ENXIO); + + /* + * Audio Codec needs PLL2-1X to be either 24576000 or 22579200. + * + * PLL2-1X output frequency is (48MHz * n) / pre_div / post_div / 2. + * To get as close as possible to the desired rate, we use a + * pre-divider of 21 and a post-divider of 4. With these values, + * a multiplier of 86 or 79 gets us close to the target rates. + */ + if (*fout != 24576000 && *fout != 22579200) + return (EINVAL); + + pre_div = 21; + post_div = 4; + n = (*fout * pre_div * post_div * 2) / (2 * fin); + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + val &= ~(A10_PLL2_POST_DIV | A10_PLL2_FACTOR_N | A10_PLL2_PRE_DIV); + val |= (post_div << A10_PLL2_POST_DIV_SHIFT); + val |= (n << A10_PLL2_FACTOR_N_SHIFT); + val |= (pre_div << A10_PLL2_PRE_DIV_SHIFT); + PLL_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +a10_pll3_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, m; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + if ((val & A10_PLL3_MODE_SEL) == A10_PLL3_MODE_SEL_INT) { + /* In integer mode, output is 3MHz * m */ + m = (val & A10_PLL3_FACTOR_M) >> A10_PLL3_FACTOR_M_SHIFT; + *freq = A10_PLL3_REF_FREQ * m; + } else { + /* In fractional mode, output is either 270MHz or 297MHz */ + if ((val & A10_PLL3_FUNC_SET) == A10_PLL3_FUNC_SET_270MHZ) + *freq = 270000000; + else + *freq = 297000000; + } + + if (sc->id == CLKID_A10_PLL3_2X) + *freq *= 2; + + return (0); +} + +static int +a10_pll3_set_freq(struct aw_pll_sc *sc, uint64_t fin, uint64_t *fout, + int flags) +{ + uint32_t val, m, mode, func; + + m = *fout / A10_PLL3_REF_FREQ; + if (sc->id == CLKID_A10_PLL3_2X) + m /= 2; + + mode = A10_PLL3_MODE_SEL_INT; + func = 0; + *fout = m * A10_PLL3_REF_FREQ; + if (sc->id == CLKID_A10_PLL3_2X) + *fout *= 2; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + val &= ~(A10_PLL3_MODE_SEL | A10_PLL3_FUNC_SET | A10_PLL3_FACTOR_M); + val |= mode; + val |= func; + val |= (m << A10_PLL3_FACTOR_M_SHIFT); + PLL_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +a10_pll3_init(device_t dev, bus_addr_t reg, struct clknode_init_def *def) +{ + uint32_t val; + + /* Allow changing PLL frequency while enabled */ + def->flags = CLK_NODE_GLITCH_FREE; + + /* Set PLL to 297MHz */ + CLKDEV_DEVICE_LOCK(dev); + CLKDEV_READ_4(dev, reg, &val); + val &= ~(A10_PLL3_MODE_SEL | A10_PLL3_FUNC_SET | A10_PLL3_FACTOR_M); + val |= A10_PLL3_MODE_SEL_FRACT; + val |= A10_PLL3_FUNC_SET_297MHZ; + CLKDEV_WRITE_4(dev, reg, val); + CLKDEV_DEVICE_UNLOCK(dev); + + return (0); +} + +static int +a10_pll5_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, m, n, k, p; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + p = 1 << ((val & A10_PLL5_OUT_EXT_DIVP) >> A10_PLL5_OUT_EXT_DIVP_SHIFT); + m = ((val & A10_PLL5_FACTOR_M) >> A10_PLL5_FACTOR_M_SHIFT) + 1; + k = ((val & A10_PLL5_FACTOR_K) >> A10_PLL5_FACTOR_K_SHIFT) + 1; + n = (val & A10_PLL5_FACTOR_N) >> A10_PLL5_FACTOR_N_SHIFT; + if (n == 0) + return (ENXIO); + + switch (sc->id) { + case CLKID_A10_PLL5_DDR: + *freq = (*freq * n * k) / m; + break; + case CLKID_A10_PLL5_OTHER: + *freq = (*freq * n * k) / p; + break; + default: + return (ENXIO); + } + + return (0); +} + +static int +a10_pll6_init(device_t dev, bus_addr_t reg, struct clknode_init_def *def) +{ + uint32_t val, m, n, k; + + /* + * SATA needs PLL6 to be a 100MHz clock. + * + * The SATA output frequency is (24MHz * n * k) / m / 6. + * To get to 100MHz, k & m must be equal and n must be 25. + */ + m = k = 0; + n = 25; + + CLKDEV_DEVICE_LOCK(dev); + CLKDEV_READ_4(dev, reg, &val); + val &= ~(A10_PLL6_FACTOR_N | A10_PLL6_FACTOR_K | A10_PLL6_FACTOR_M); + val &= ~A10_PLL6_BYPASS_EN; + val |= A10_PLL6_SATA_CLK_EN; + val |= (n << A10_PLL6_FACTOR_N_SHIFT); + val |= (k << A10_PLL6_FACTOR_K_SHIFT); + val |= (m << A10_PLL6_FACTOR_M_SHIFT); + CLKDEV_WRITE_4(dev, reg, val); + CLKDEV_DEVICE_UNLOCK(dev); + + return (0); +} + +static int +a10_pll6_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, m, k, n; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + m = ((val & A10_PLL6_FACTOR_M) >> A10_PLL6_FACTOR_M_SHIFT) + 1; + k = ((val & A10_PLL6_FACTOR_K) >> A10_PLL6_FACTOR_K_SHIFT) + 1; + n = (val & A10_PLL6_FACTOR_N) >> A10_PLL6_FACTOR_N_SHIFT; + if (n == 0) + return (ENXIO); + + switch (sc->id) { + case CLKID_A10_PLL6_SATA: + *freq = (*freq * n * k) / m / 6; + break; + case CLKID_A10_PLL6_OTHER: + *freq = (*freq * n * k) / 2; + break; + case CLKID_A10_PLL6: + *freq = (*freq * n * k); + break; + case CLKID_A10_PLL6_DIV_4: + *freq = (*freq * n * k) / 4; + break; + default: + return (ENXIO); + } + + return (0); +} + +static int +a10_pll6_set_freq(struct aw_pll_sc *sc, uint64_t fin, uint64_t *fout, + int flags) +{ + if (sc->id != CLKID_A10_PLL6_SATA) + return (ENXIO); + + /* PLL6 SATA output has been set to 100MHz in a10_pll6_init */ + if (*fout != 100000000) + return (ERANGE); + + return (0); +} + +static int +a31_pll1_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, m, n, k; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + m = ((val & A31_PLL1_FACTOR_M) >> A31_PLL1_FACTOR_M_SHIFT) + 1; + k = ((val & A31_PLL1_FACTOR_K) >> A31_PLL1_FACTOR_K_SHIFT) + 1; + n = ((val & A31_PLL1_FACTOR_N) >> A31_PLL1_FACTOR_N_SHIFT) + 1; + + *freq = (*freq * n * k) / m; + + return (0); +} + +static int +a31_pll6_init(device_t dev, bus_addr_t reg, struct clknode_init_def *def) +{ + uint32_t val; + int retry; + + if (def->id != CLKID_A31_PLL6) + return (0); + + /* + * The datasheet recommends that PLL6 output should be fixed to + * 600MHz. + */ + CLKDEV_DEVICE_LOCK(dev); + CLKDEV_READ_4(dev, reg, &val); + val &= ~(A31_PLL6_FACTOR_N | A31_PLL6_FACTOR_K | A31_PLL6_BYPASS_EN); + val |= (A31_PLL6_DEFAULT_N << A31_PLL6_FACTOR_N_SHIFT); + val |= (A31_PLL6_DEFAULT_K << A31_PLL6_FACTOR_K_SHIFT); + CLKDEV_WRITE_4(dev, reg, val); + + /* Wait for PLL to become stable */ + for (retry = A31_PLL6_TIMEOUT; retry > 0; retry--) { + CLKDEV_READ_4(dev, reg, &val); + if ((val & A31_PLL6_LOCK) == A31_PLL6_LOCK) + break; + DELAY(1); + } + + CLKDEV_DEVICE_UNLOCK(dev); + + if (retry == 0) + return (ETIMEDOUT); + + return (0); +} + +static int +a31_pll6_recalc(struct aw_pll_sc *sc, uint64_t *freq) +{ + uint32_t val, k, n; + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + DEVICE_UNLOCK(sc); + + k = ((val & A10_PLL6_FACTOR_K) >> A10_PLL6_FACTOR_K_SHIFT) + 1; + n = ((val & A10_PLL6_FACTOR_N) >> A10_PLL6_FACTOR_N_SHIFT) + 1; + + switch (sc->id) { + case CLKID_A31_PLL6: + *freq = (*freq * n * k) / 2; + break; + case CLKID_A31_PLL6_X2: + *freq = *freq * n * k; + break; + default: + return (ENXIO); + } + + return (0); +} + +#define PLL(_type, _recalc, _set_freq, _init) \ + [(_type)] = { \ + .recalc = (_recalc), \ + .set_freq = (_set_freq), \ + .init = (_init) \ + } + +static struct aw_pll_funcs aw_pll_func[] = { + PLL(AWPLL_A10_PLL1, a10_pll1_recalc, NULL, NULL), + PLL(AWPLL_A10_PLL2, a10_pll2_recalc, a10_pll2_set_freq, NULL), + PLL(AWPLL_A10_PLL3, a10_pll3_recalc, a10_pll3_set_freq, a10_pll3_init), + PLL(AWPLL_A10_PLL5, a10_pll5_recalc, NULL, NULL), + PLL(AWPLL_A10_PLL6, a10_pll6_recalc, a10_pll6_set_freq, a10_pll6_init), + PLL(AWPLL_A31_PLL1, a31_pll1_recalc, NULL, NULL), + PLL(AWPLL_A31_PLL6, a31_pll6_recalc, NULL, a31_pll6_init), +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-pll1-clk", AWPLL_A10_PLL1 }, + { "allwinner,sun4i-a10-pll2-clk", AWPLL_A10_PLL2 }, + { "allwinner,sun4i-a10-pll3-clk", AWPLL_A10_PLL3 }, + { "allwinner,sun4i-a10-pll5-clk", AWPLL_A10_PLL5 }, + { "allwinner,sun4i-a10-pll6-clk", AWPLL_A10_PLL6 }, + { "allwinner,sun6i-a31-pll1-clk", AWPLL_A31_PLL1 }, + { "allwinner,sun6i-a31-pll6-clk", AWPLL_A31_PLL6 }, + { NULL, 0 } +}; + +static int +aw_pll_init(struct clknode *clk, device_t dev) +{ + clknode_init_parent_idx(clk, 0); + return (0); +} + +static int +aw_pll_set_gate(struct clknode *clk, bool enable) +{ + struct aw_pll_sc *sc; + uint32_t val; + + sc = clknode_get_softc(clk); + + DEVICE_LOCK(sc); + PLL_READ(sc, &val); + if (enable) + val |= AW_PLL_ENABLE; + else + val &= ~AW_PLL_ENABLE; + PLL_WRITE(sc, val); + DEVICE_UNLOCK(sc); + + return (0); +} + +static int +aw_pll_recalc(struct clknode *clk, uint64_t *freq) +{ + struct aw_pll_sc *sc; + + sc = clknode_get_softc(clk); + + if (aw_pll_func[sc->type].recalc == NULL) + return (ENXIO); + + return (aw_pll_func[sc->type].recalc(sc, freq)); +} + +static int +aw_pll_set_freq(struct clknode *clk, uint64_t fin, uint64_t *fout, + int flags, int *stop) +{ + struct aw_pll_sc *sc; + + sc = clknode_get_softc(clk); + + *stop = 1; + + if (aw_pll_func[sc->type].set_freq == NULL) + return (ENXIO); + + return (aw_pll_func[sc->type].set_freq(sc, fin, fout, flags)); +} + +static clknode_method_t aw_pll_clknode_methods[] = { + /* Device interface */ + CLKNODEMETHOD(clknode_init, aw_pll_init), + CLKNODEMETHOD(clknode_set_gate, aw_pll_set_gate), + CLKNODEMETHOD(clknode_recalc_freq, aw_pll_recalc), + CLKNODEMETHOD(clknode_set_freq, aw_pll_set_freq), + CLKNODEMETHOD_END +}; + +DEFINE_CLASS_1(aw_pll_clknode, aw_pll_clknode_class, aw_pll_clknode_methods, + sizeof(struct aw_pll_sc), clknode_class); + +static int +aw_pll_create(device_t dev, bus_addr_t paddr, struct clkdom *clkdom, + const char *pclkname, const char *clkname, int index) +{ + enum aw_pll_type type; + struct clknode_init_def clkdef; + struct aw_pll_sc *sc; + struct clknode *clk; + int error; + + type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + + memset(&clkdef, 0, sizeof(clkdef)); + clkdef.id = index; + clkdef.name = clkname; + if (pclkname != NULL) { + clkdef.parent_names = malloc(sizeof(char *), M_OFWPROP, + M_WAITOK); + clkdef.parent_names[0] = pclkname; + clkdef.parent_cnt = 1; + } else + clkdef.parent_cnt = 0; + + if (aw_pll_func[type].init != NULL) { + error = aw_pll_func[type].init(device_get_parent(dev), + paddr, &clkdef); + if (error != 0) { + device_printf(dev, "clock %s init failed\n", clkname); + return (error); + } + } + + clk = clknode_create(clkdom, &aw_pll_clknode_class, &clkdef); + if (clk == NULL) { + device_printf(dev, "cannot create clock node\n"); + return (ENXIO); + } + sc = clknode_get_softc(clk); + sc->clkdev = device_get_parent(dev); + sc->reg = paddr; + sc->type = type; + sc->id = clkdef.id; + + clknode_register(clkdom, clk); + + free(__DECONST(char *, clkdef.parent_names), M_OFWPROP); + + return (0); +} + +static int +aw_pll_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner PLL Clock"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_pll_attach(device_t dev) +{ + struct clkdom *clkdom; + const char **names; + int index, nout, error; + clk_t clk_parent; + uint32_t *indices; + bus_addr_t paddr; + bus_size_t psize; + phandle_t node; + + node = ofw_bus_get_node(dev); + + if (ofw_reg_to_paddr(node, 0, &paddr, &psize, NULL) != 0) { + device_printf(dev, "couldn't parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout == 0) { + device_printf(dev, "no clock outputs found\n"); + error = ENOENT; + goto fail; + } + + if (clk_get_by_ofw_index(dev, 0, &clk_parent) != 0) + clk_parent = NULL; + + for (index = 0; index < nout; index++) { + error = aw_pll_create(dev, paddr, clkdom, + clk_parent ? clk_get_name(clk_parent) : NULL, + names[index], nout == 1 ? 1 : index); + if (error) + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_pll_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_pll_probe), + DEVMETHOD(device_attach, aw_pll_attach), + + DEVMETHOD_END +}; + +static driver_t aw_pll_driver = { + "aw_pll", + aw_pll_methods, + 0, +}; + +static devclass_t aw_pll_devclass; + +EARLY_DRIVER_MODULE(aw_pll, simplebus, aw_pll_driver, + aw_pll_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/clk/aw_usbclk.c b/sys/arm/allwinner/clk/aw_usbclk.c new file mode 100644 index 0000000..bac9991 --- /dev/null +++ b/sys/arm/allwinner/clk/aw_usbclk.c @@ -0,0 +1,246 @@ +/*- + * Copyright (c) 2016 Jared McNeill + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Allwinner USB clocks + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "clkdev_if.h" +#include "hwreset_if.h" + +#define A10_SCLK_GATING_USBPHY (1 << 8) +#define A10_SCLK_GATING_OHCI1 (1 << 7) +#define A10_SCLK_GATING_OHCI0 (1 << 6) + +#define USBPHY2_RST (1 << 2) +#define USBPHY1_RST (1 << 1) +#define USBPHY0_RST (1 << 0) + +enum aw_usbclk_type { + AW_A10_USBCLK = 1, + AW_A31_USBCLK, +}; + +static struct ofw_compat_data compat_data[] = { + { "allwinner,sun4i-a10-usb-clk", AW_A10_USBCLK }, + { "allwinner,sun6i-a31-usb-clk", AW_A31_USBCLK }, + { NULL, 0 } +}; + +/* Clock indices for A10, as there is no clock-indices property in the DT */ +static uint32_t aw_usbclk_indices_a10[] = { 6, 7, 8 }; + +struct aw_usbclk_softc { + bus_addr_t reg; +}; + +static int +aw_usbclk_hwreset_assert(device_t dev, intptr_t id, bool value) +{ + struct aw_usbclk_softc *sc; + uint32_t mask; + device_t pdev; + int error; + + sc = device_get_softc(dev); + pdev = device_get_parent(dev); + + mask = USBPHY0_RST << id; + + CLKDEV_DEVICE_LOCK(pdev); + error = CLKDEV_MODIFY_4(pdev, sc->reg, mask, value ? 0 : mask); + CLKDEV_DEVICE_UNLOCK(pdev); + + return (error); +} + +static int +aw_usbclk_hwreset_is_asserted(device_t dev, intptr_t id, bool *value) +{ + struct aw_usbclk_softc *sc; + uint32_t mask, val; + device_t pdev; + int error; + + sc = device_get_softc(dev); + pdev = device_get_parent(dev); + + mask = USBPHY0_RST << id; + + CLKDEV_DEVICE_LOCK(pdev); + error = CLKDEV_READ_4(pdev, sc->reg, &val); + CLKDEV_DEVICE_UNLOCK(pdev); + + if (error) + return (error); + + *value = (val & mask) != 0 ? false : true; + + return (0); +} + +static int +aw_usbclk_create(device_t dev, bus_addr_t paddr, struct clkdom *clkdom, + const char *pclkname, const char *clkname, int index) +{ + const char *parent_names[1] = { pclkname }; + struct clk_gate_def def; + + memset(&def, 0, sizeof(def)); + def.clkdef.id = index; + def.clkdef.name = clkname; + def.clkdef.parent_names = parent_names; + def.clkdef.parent_cnt = 1; + def.offset = paddr; + def.shift = index; + def.mask = 1; + def.on_value = 1; + def.off_value = 0; + + return (clknode_gate_register(clkdom, &def)); +} + +static int +aw_usbclk_probe(device_t dev) +{ + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "Allwinner USB Clocks"); + return (BUS_PROBE_DEFAULT); +} + +static int +aw_usbclk_attach(device_t dev) +{ + struct aw_usbclk_softc *sc; + struct clkdom *clkdom; + const char **names; + int index, nout, error; + enum aw_usbclk_type type; + uint32_t *indices; + clk_t clk_parent; + bus_size_t psize; + phandle_t node; + + sc = device_get_softc(dev); + node = ofw_bus_get_node(dev); + indices = NULL; + type = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + + if (ofw_reg_to_paddr(node, 0, &sc->reg, &psize, NULL) != 0) { + device_printf(dev, "cannot parse 'reg' property\n"); + return (ENXIO); + } + + clkdom = clkdom_create(dev); + + nout = clk_parse_ofw_out_names(dev, node, &names, &indices); + if (nout == 0) { + device_printf(dev, "no clock outputs found\n"); + error = ENOENT; + goto fail; + } + + if (indices == NULL && type == AW_A10_USBCLK) + indices = aw_usbclk_indices_a10; + + error = clk_get_by_ofw_index(dev, 0, &clk_parent); + if (error != 0) { + device_printf(dev, "cannot parse clock parent\n"); + return (ENXIO); + } + + for (index = 0; index < nout; index++) { + error = aw_usbclk_create(dev, sc->reg, clkdom, + clk_get_name(clk_parent), names[index], + indices != NULL ? indices[index] : index); + if (error) + goto fail; + } + + if (clkdom_finit(clkdom) != 0) { + device_printf(dev, "cannot finalize clkdom initialization\n"); + error = ENXIO; + goto fail; + } + + if (bootverbose) + clkdom_dump(clkdom); + + hwreset_register_ofw_provider(dev); + + return (0); + +fail: + return (error); +} + +static device_method_t aw_usbclk_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, aw_usbclk_probe), + DEVMETHOD(device_attach, aw_usbclk_attach), + + /* Reset interface */ + DEVMETHOD(hwreset_assert, aw_usbclk_hwreset_assert), + DEVMETHOD(hwreset_is_asserted, aw_usbclk_hwreset_is_asserted), + + DEVMETHOD_END +}; + +static driver_t aw_usbclk_driver = { + "aw_usbclk", + aw_usbclk_methods, + sizeof(struct aw_usbclk_softc) +}; + +static devclass_t aw_usbclk_devclass; + +EARLY_DRIVER_MODULE(aw_usbclk, simplebus, aw_usbclk_driver, + aw_usbclk_devclass, 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/arm/allwinner/files.allwinner b/sys/arm/allwinner/files.allwinner index a13b637..34daf43 100644 --- a/sys/arm/allwinner/files.allwinner +++ b/sys/arm/allwinner/files.allwinner @@ -2,7 +2,6 @@ kern/kern_clocksource.c standard arm/allwinner/a10_ahci.c optional ahci -arm/allwinner/a10_clk.c standard arm/allwinner/a10_codec.c optional sound arm/allwinner/a10_common.c standard arm/allwinner/a10_dmac.c standard @@ -25,3 +24,21 @@ arm/allwinner/a10_fb.c optional vt arm/allwinner/a10_hdmi.c optional hdmi arm/allwinner/a10_hdmiaudio.c optional hdmi sound arm/arm/hdmi_if.m optional hdmi + +arm/allwinner/aw_reset.c standard +arm/allwinner/aw_ccu.c standard +arm/allwinner/clk/aw_ahbclk.c standard +arm/allwinner/clk/aw_apbclk.c standard +arm/allwinner/clk/aw_axiclk.c standard +arm/allwinner/clk/aw_codecclk.c standard +arm/allwinner/clk/aw_cpuclk.c standard +arm/allwinner/clk/aw_debeclk.c standard +arm/allwinner/clk/aw_gate.c standard +arm/allwinner/clk/aw_gmacclk.c standard +arm/allwinner/clk/aw_hdmiclk.c standard +arm/allwinner/clk/aw_lcdclk.c standard +arm/allwinner/clk/aw_modclk.c standard +arm/allwinner/clk/aw_mmcclk.c standard +arm/allwinner/clk/aw_oscclk.c standard +arm/allwinner/clk/aw_pll.c standard +arm/allwinner/clk/aw_usbclk.c standard diff --git a/sys/arm/allwinner/if_emac.c b/sys/arm/allwinner/if_emac.c index 268f5cb..cb9892f 100644 --- a/sys/arm/allwinner/if_emac.c +++ b/sys/arm/allwinner/if_emac.c @@ -78,11 +78,12 @@ __FBSDID("$FreeBSD$"); #include +#include + #include "miibus_if.h" #include "gpio_if.h" -#include "a10_clk.h" #include "a10_sramc.h" struct emac_softc { @@ -94,6 +95,7 @@ struct emac_softc { struct resource *emac_res; struct resource *emac_irq; void *emac_intrhand; + clk_t emac_clk; int emac_if_flags; struct mtx emac_mtx; struct callout emac_tick_ch; @@ -110,7 +112,7 @@ static int emac_shutdown(device_t); static int emac_suspend(device_t); static int emac_resume(device_t); -static void emac_sys_setup(void); +static int emac_sys_setup(struct emac_softc *); static void emac_reset(struct emac_softc *); static void emac_init_locked(struct emac_softc *); @@ -138,14 +140,27 @@ static int sysctl_hw_emac_proc_limit(SYSCTL_HANDLER_ARGS); #define EMAC_WRITE_REG(sc, reg, val) \ bus_space_write_4(sc->emac_tag, sc->emac_handle, reg, val) -static void -emac_sys_setup(void) +static int +emac_sys_setup(struct emac_softc *sc) { + int error; /* Activate EMAC clock. */ - a10_clk_emac_activate(); + error = clk_get_by_ofw_index(sc->emac_dev, 0, &sc->emac_clk); + if (error != 0) { + device_printf(sc->emac_dev, "cannot get clock\n"); + return (error); + } + error = clk_enable(sc->emac_clk); + if (error != 0) { + device_printf(sc->emac_dev, "cannot enable clock\n"); + return (error); + } + /* Map sram. */ a10_map_to_emac(); + + return (0); } static void @@ -784,6 +799,9 @@ emac_detach(device_t dev) bus_generic_detach(sc->emac_dev); } + if (sc->emac_clk != NULL) + clk_disable(sc->emac_clk); + if (sc->emac_res != NULL) bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->emac_res); @@ -897,7 +915,10 @@ emac_attach(device_t dev) } } /* Setup EMAC */ - emac_sys_setup(); + error = emac_sys_setup(sc); + if (error != 0) + goto fail; + emac_reset(sc); ifp = sc->emac_ifp = if_alloc(IFT_ETHER); diff --git a/sys/arm/conf/A10 b/sys/arm/conf/A10 index 31a5e24..fc39be7 100644 --- a/sys/arm/conf/A10 +++ b/sys/arm/conf/A10 @@ -51,6 +51,13 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed #options BOOTP_NFSV3 #options BOOTP_WIRED_TO=emac0 +# EXT_RESOURCES pseudo devices +options EXT_RESOURCES +device clk +device phy +device hwreset +device regulator + # MMC/SD/SDIO Card slot support device mmc # mmc/sd bus device mmcsd # mmc/sd flash cards diff --git a/sys/arm/conf/A20 b/sys/arm/conf/A20 index ad3b29a..8f56523 100644 --- a/sys/arm/conf/A20 +++ b/sys/arm/conf/A20 @@ -55,6 +55,13 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed #options BOOTP_NFSV3 #options BOOTP_WIRED_TO=dwc0 +# EXT_RESOURCES pseudo devices +options EXT_RESOURCES +device clk +device phy +device hwreset +device regulator + # Interrupt controller device gic diff --git a/sys/boot/fdt/dts/arm/bananapi.dts b/sys/boot/fdt/dts/arm/bananapi.dts index a101720..03a9fef 100644 --- a/sys/boot/fdt/dts/arm/bananapi.dts +++ b/sys/boot/fdt/dts/arm/bananapi.dts @@ -26,83 +26,21 @@ * $FreeBSD$ */ -/dts-v1/; - -#include "sun7i-a20.dtsi" - -#include +#include "sun7i-a20-bananapi.dts" +#include "sun7i-a20-hdmi.dtsi" / { - model = "LeMaker Banana Pi"; - compatible = "lemaker,bananapi", "allwinner,sun7i-a20"; - - memory { - device_type = "memory"; - reg = < 0x40000000 0x40000000 >; /* 1GB RAM */ - }; - - aliases { - soc = &SOC; - UART0 = &UART0; - }; - - SOC: a20 { - - usb1: usb@01c14000 { - status = "okay"; - }; - - usb2: usb@01c1c000 { - status = "okay"; - }; - - UART0: serial@01c28000 { - status = "okay"; - }; - - mmc0: mmc@01c0f000 { + soc@01c00000 { + hdmi@01c16000 { status = "okay"; }; - gmac@01c50000 { - phy-mode = "rgmii-bpi"; - status = "okay"; - pinctrl-names = "default"; - pinctrl-0 = <&gmac_pins_rgmii>; - }; - - ahci: sata@01c18000 { - status = "okay"; - }; - - hdmi: hdmi@01c16000 { - compatible = "allwinner,sun7i-a20-hdmi"; - reg = <0x01c16000 0x1000>; - }; - hdmiaudio { - compatible = "allwinner,sun7i-a20-hdmiaudio"; - }; - - fb: fb@01e60000 { - compatible = "allwinner,sun7i-a20-fb"; - reg = <0x01e60000 0x10000>, /* DEBE0 */ - <0x01c0c000 0x1000>; /* LCD0 */ - }; - }; - - leds { - compatible = "gpio-leds"; - - green { - label = "bananapi:green:usr"; - gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>; + status = "okay"; }; }; +}; - chosen { - bootargs = "-v"; - stdin = "UART0"; - stdout = "UART0"; - }; +&mmc0_pins_a { + allwinner,pull = ; }; diff --git a/sys/boot/fdt/dts/arm/cubieboard.dts b/sys/boot/fdt/dts/arm/cubieboard.dts index a21ea4d..a3095b9 100644 --- a/sys/boot/fdt/dts/arm/cubieboard.dts +++ b/sys/boot/fdt/dts/arm/cubieboard.dts @@ -26,56 +26,4 @@ * $FreeBSD$ */ -/dts-v1/; - -#include "sun4i-a10.dtsi" - -/ { - model = "Cubietech Cubieboard"; - - memory { - device_type = "memory"; - reg = < 0x40000000 0x40000000 >; /* 1GB RAM */ - }; - - aliases { - soc = &SOC; - UART0 = &UART0; - }; - - SOC: a10 { - - usb1: usb@01c14000 { - status = "okay"; - }; - - usb2: usb@01c1c000 { - status = "okay"; - }; - - UART0: serial@01c28000 { - status = "okay"; - }; - - mmc0: mmc@01c0f000 { - status = "okay"; - }; - - emac@01c0b000 { - status = "okay"; - pinctrl-names = "default"; - pinctrl-0 = <&emac_pins>; - }; - - ahci: sata@01c18000 { - status = "okay"; - }; - }; - - chosen { - bootargs = "-v"; - stdin = "UART0"; - stdout = "UART0"; - }; -}; - +#include "sun4i-a10-cubieboard.dts" diff --git a/sys/boot/fdt/dts/arm/cubieboard2.dts b/sys/boot/fdt/dts/arm/cubieboard2.dts index f9e1eb8..a240e84 100644 --- a/sys/boot/fdt/dts/arm/cubieboard2.dts +++ b/sys/boot/fdt/dts/arm/cubieboard2.dts @@ -32,13 +32,6 @@ / { soc@01c00000 { - ccm@01c20000 { - compatible = "allwinner,sun4i-ccm"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c20000 0x400 >; - }; - hdmi@01c16000 { status = "okay"; }; diff --git a/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts b/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts index ffe0777..5d99f30 100644 --- a/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts +++ b/sys/boot/fdt/dts/arm/olimex-a20-som-evb.dts @@ -27,14 +27,16 @@ */ #include "sun7i-a20-olimex-som-evb.dts" +#include "sun7i-a20-hdmi.dtsi" / { soc@01c00000 { - ccm@01c20000 { - compatible = "allwinner,sun4i-ccm"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c20000 0x400 >; + hdmi@01c16000 { + status = "okay"; + }; + + hdmiaudio { + status = "okay"; }; }; }; diff --git a/sys/boot/fdt/dts/arm/olinuxino-lime.dts b/sys/boot/fdt/dts/arm/olinuxino-lime.dts index b965788..cd39f66 100644 --- a/sys/boot/fdt/dts/arm/olinuxino-lime.dts +++ b/sys/boot/fdt/dts/arm/olinuxino-lime.dts @@ -27,14 +27,3 @@ */ #include "sun4i-a10-olinuxino-lime.dts" - -/ { - soc@01c00000 { - ccm@01c20000 { - compatible = "allwinner,sun4i-ccm"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c20000 0x400 >; - }; - }; -}; diff --git a/sys/boot/fdt/dts/arm/sun4i-a10.dtsi b/sys/boot/fdt/dts/arm/sun4i-a10.dtsi deleted file mode 100644 index 417ea22..0000000 --- a/sys/boot/fdt/dts/arm/sun4i-a10.dtsi +++ /dev/null @@ -1,153 +0,0 @@ -/*- - * Copyright (c) 2014 Ganbold Tsagaankhuu - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include - -/ { - compatible = "allwinner,sun4i-a10"; - #address-cells = <1>; - #size-cells = <1>; - - interrupt-parent = <&AINTC>; - - aliases { - soc = &SOC; - }; - - SOC: a10 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "simple-bus"; - ranges; - bus-frequency = <0>; - - AINTC: interrupt-controller@01c20400 { - compatible = "allwinner,sun4i-a10-ic"; - interrupt-controller; - #address-cells = <0>; - #interrupt-cells = <1>; - reg = < 0x01c20400 0x400 >; - }; - - sramc@01c00000 { - compatible = "allwinner,sun4i-sramc"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c00000 0x1000 >; - }; - - ccm@01c20000 { - compatible = "allwinner,sun4i-ccm"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c20000 0x400 >; - }; - - timer@01c20c00 { - compatible = "allwinner,sun4i-a10-timer"; - reg = <0x01c20c00 0x90>; - interrupts = < 22 >; - interrupt-parent = <&AINTC>; - clock-frequency = < 24000000 >; - }; - - watchdog@01c20c90 { - compatible = "allwinner,sun4i-wdt"; - reg = <0x01c20c90 0x08>; - }; - - - GPIO: gpio@01c20800 { - #gpio-cells = <3>; - compatible = "allwinner,sun4i-a10-pinctrl"; - gpio-controller; - reg =< 0x01c20800 0x400 >; - interrupts = < 28 >; - interrupt-parent = <&AINTC>; - - emac_pins: emac@0 { - allwinner,pins = "PA0", "PA1", "PA2", - "PA3", "PA4", "PA5", "PA6", - "PA7", "PA8", "PA9", "PA10", - "PA11", "PA12", "PA13", "PA14", - "PA15", "PA16"; - allwinner,function = "emac"; - allwinner,drive = ; - allwinner,pull = ; - }; - }; - - usb1: usb@01c14000 { - compatible = "allwinner,sun4i-a10-ehci", "generic-ehci"; - reg = <0x01c14000 0x1000>; - interrupts = < 39 >; - interrupt-parent = <&AINTC>; - }; - - usb2: usb@01c1c000 { - compatible = "allwinner,sun4i-a10-ehci", "generic-ehci"; - reg = <0x01c1c000 0x1000>; - interrupts = < 40 >; - interrupt-parent = <&AINTC>; - }; - - mmc0: mmc@01c0f000 { - compatible = "allwinner,sun4i-a10-mmc"; - reg = <0x01c0f000 0x1000>; - interrupts = <32>; - interrupt-parent = <&AINTC>; - status = "disabled"; - }; - - sata@01c18000 { - compatible = "allwinner,sun4i-a10-ahci"; - reg = <0x01c18000 0x1000>; - interrupts = <56>; - interrupt-parent = <&AINTC>; - status = "disabled"; - }; - - UART0: serial@01c28000 { - compatible = "snps,dw-apb-uart"; - reg = <0x01c28000 0x400>; - reg-shift = <2>; - interrupts = <1>; - interrupt-parent = <&AINTC>; - current-speed = <115200>; - clock-frequency = < 24000000 >; - }; - - emac@01c0b000 { - compatible = "allwinner,sun4i-a10-emac"; - reg = <0x01c0b000 0x1000>; - interrupts = <55>; - interrupt-parent = <&AINTC>; - }; - }; -}; - diff --git a/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi b/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi index 4d4a3c5..2567be5 100644 --- a/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi +++ b/sys/boot/fdt/dts/arm/sun7i-a20-hdmi.dtsi @@ -27,10 +27,65 @@ */ / { + clocks { + pll3: clk@01c20010 { + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-pll3-clk"; + reg = <0x01c20010 0x4>; + clock-output-names = "pll3-1x", "pll3-2x"; + }; + + pll7: clk@01c20030 { + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-pll3-clk"; + reg = <0x01c20030 0x4>; + clock-output-names = "pll7-1x", "pll7-2x"; + }; + + hdmi_clk: clk@01c20150 { + #clock-cells = <0>; + compatible = "allwinner,sun4i-a10-hdmi-clk"; + reg = <0x01c20150 0x4>; + clocks = <&pll3 0>, <&pll7 0>, <&pll3 1>, <&pll7 1>; + clock-output-names = "hdmi"; + }; + + lcd0_ch0_clk: clk@01c20118 { + #clock-cells = <0>; + #reset-cells = <0>; + compatible = "allwinner,sun4i-a10-lcd-ch0-clk"; + reg = <0x01c20118 0x4>; + clocks = <&pll3 0>, <&pll7 0>, <&pll3 1>, <&pll6 2>; + clock-output-names = "lcd0_ch0"; + }; + + lcd0_ch1_clk: clk@01c2012c { + #clock-cells = <1>; + compatible = "allwinner,sun4i-a10-lcd-ch1-clk"; + reg = <0x01c2012c 0x4>; + clocks = <&pll3 0>, <&pll7 0>, <&pll3 1>, <&pll7 1>; + clock-output-names = "lcd0_ch1_sclk1", + "lcd0_ch1_sclk2"; + }; + + de_be0_clk: clk@01c20104 { + #clock-cells = <0>; + #reset-cells = <0>; + compatible = "allwinner,sun4i-a10-de-be-clk"; + reg = <0x01c20104 0x4>; + clocks = <&pll3 0>, <&pll7 0>, <&pll5 1>; + clock-output-names = "de_be0"; + }; + }; + soc@01c00000 { hdmi: hdmi@01c16000 { compatible = "allwinner,sun7i-a20-hdmi"; reg = <0x01c16000 0x1000>; + clocks = <&ahb_gates 43>, <&hdmi_clk>, + <&lcd0_ch1_clk 1>; + clock-names = "ahb", "hdmi", + "lcd"; status = "disabled"; }; @@ -43,6 +98,14 @@ compatible = "allwinner,sun7i-a20-fb"; reg = <0x01e60000 0x10000>, /* DEBE0 */ <0x01c0c000 0x1000>; /* LCD0 */ + clocks = <&ahb_gates 44>, <&dram_gates 26>, + <&de_be0_clk>, <&ahb_gates 36>, + <&lcd0_ch1_clk 0>, <&lcd0_ch1_clk 1>; + clock-names = "ahb_de_be", "dram_de_be", + "de_be", "ahb_lcd", + "lcd_ch1_sclk1", "lcd_ch1_sclk2"; + resets = <&de_be0_clk>, <&lcd0_ch0_clk>; + reset-names = "de_be", "lcd"; }; }; }; diff --git a/sys/boot/fdt/dts/arm/sun7i-a20.dtsi b/sys/boot/fdt/dts/arm/sun7i-a20.dtsi deleted file mode 100644 index 43c6e4b..0000000 --- a/sys/boot/fdt/dts/arm/sun7i-a20.dtsi +++ /dev/null @@ -1,217 +0,0 @@ -/*- - * Copyright (c) 2014 Ganbold Tsagaankhuu - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include - -/ { - compatible = "allwinner,sun7i-a20"; - #address-cells = <1>; - #size-cells = <1>; - - interrupt-parent = <&GIC>; - - aliases { - soc = &SOC; - }; - - timer { - compatible = "arm,armv7-timer"; - interrupts = , - , - , - ; - }; - - SOC: a20 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "simple-bus"; - ranges; - bus-frequency = <0>; - - GIC: interrupt-controller@01c81000 { - compatible = "arm,gic"; - reg = <0x01c81000 0x1000>, /* Distributor Registers */ - <0x01c82000 0x0100>, /* CPU Interface Registers */ - <0x01c84000 0x2000>, - <0x01c86000 0x2000>; - interrupt-controller; - #interrupt-cells = <3>; - interrupts = ; - }; - - sramc@01c00000 { - compatible = "allwinner,sun4i-sramc"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c00000 0x1000 >; - }; - - cpu-cfg@01c25c00 { - compatible = "allwinner,sun7i-cpu-cfg"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c25c00 0x400 >; - }; - - ccm@01c20000 { - compatible = "allwinner,sun4i-ccm"; - #address-cells = <1>; - #size-cells = <1>; - reg = < 0x01c20000 0x400 >; - }; - - timer@01c20c00 { - compatible = "allwinner,sun4i-a10-timer"; - reg = <0x01c20c00 0x90>; - interrupts = , - , - , - , - , - ; - interrupt-parent = <&GIC>; - clock-frequency = < 24000000 >; - }; - - watchdog@01c20c90 { - compatible = "allwinner,sun4i-a10-wdt"; - reg = <0x01c20c90 0x10>; - }; - - pio: gpio@01c20800 { - #gpio-cells = <3>; - compatible = "allwinner,sun7i-a20-pinctrl"; - gpio-controller; - reg =< 0x01c20800 0x400 >; - interrupts = ; - interrupt-controller; - #interrupt-cells = <2>; - interrupt-parent = <&GIC>; - - gmac_pins_mii: gmac_mii@0 { - allwinner,pins = "PA0", "PA1", "PA2", - "PA3", "PA4", "PA5", "PA6", - "PA7", "PA8", "PA9", "PA10", - "PA11", "PA12", "PA13", "PA14", - "PA15", "PA16"; - allwinner,function = "gmac"; - allwinner,drive = ; - allwinner,pull = ; - }; - - gmac_pins_rgmii: gmac_rgmii@0 { - allwinner,pins = "PA0", "PA1", "PA2", - "PA3", "PA4", "PA5", "PA6", - "PA7", "PA8", "PA10", - "PA11", "PA12", "PA13", - "PA15", "PA16"; - allwinner,function = "gmac"; - allwinner,drive = ; - allwinner,pull = ; - }; - - }; - - usb1: usb@01c14000 { - compatible = "allwinner,sun7i-a20-ehci", "generic-ehci"; - reg = <0x01c14000 0x1000>; - interrupts = ; - interrupt-parent = <&GIC>; - }; - - usb2: usb@01c1c000 { - compatible = "allwinner,sun7i-a20-ehci", "generic-ehci"; - reg = <0x01c1c000 0x1000>; - interrupts = ; - interrupt-parent = <&GIC>; - }; - - mmc0: mmc@01c0f000 { - compatible = "allwinner,sun5i-a13-mmc"; - reg = <0x01c0f000 0x1000>; - interrupts = ; - status = "disabled"; - }; - - sata@01c18000 { - compatible = "allwinner,sun4i-a10-ahci"; - reg = <0x01c18000 0x1000>; - interrupts = ; - interrupt-parent = <&GIC>; - status = "disabled"; - }; - - UART0: serial@01c28000 { - compatible = "snps,dw-apb-uart"; - reg = <0x01c28000 0x400>; - reg-shift = <2>; - interrupts = ; - current-speed = <115200>; - clock-frequency = < 24000000 >; - }; - - emac@01c0b000 { - compatible = "allwinner,sun4i-a10-emac"; - reg = <0x01c0b000 0x1000>; - interrupts = ; - interrupt-parent = <&GIC>; - status = "disabled"; - }; - - gmac@01c50000 { - compatible = "allwinner,sun7i-a20-gmac"; - reg = <0x01c50000 0x10000>; - interrupts = ; - interrupt-parent = <&GIC>; - snps,pbl = <2>; - snps,fixed-burst; - snps,force_sf_dma_mode; - status = "disabled"; - #address-cells = <1>; - #size-cells = <0>; - }; - - dma: dma-controller@01c02000 { - compatible = "allwinner,sun4i-a10-dma"; - reg = <0x01c02000 0x1000>; - interrupts = <27>; - interrupt-parent = <&GIC>; - }; - - codec: codec@01c22c00 { - compatible = "allwinner,sun7i-a20-codec"; - reg = <0x01c22c00 0x40>; - interrupts = <30>; - interrupt-parent = <&GIC>; - status = "disabled"; - }; - }; -}; - diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c index f0548d8..1984c48 100644 --- a/sys/dev/dwc/if_dwc.c +++ b/sys/dev/dwc/if_dwc.c @@ -70,6 +70,11 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef EXT_RESOURCES +#include +#include +#endif + #include "if_dwc_if.h" #include "gpio_if.h" #include "miibus_if.h" @@ -1068,6 +1073,36 @@ dwc_reset(device_t dev) return (0); } +#ifdef EXT_RESOURCES +static int +dwc_clock_init(device_t dev) +{ + hwreset_t rst; + clk_t clk; + int error; + + /* Enable clock */ + if (clk_get_by_ofw_name(dev, "stmmaceth", &clk) == 0) { + error = clk_enable(clk); + if (error != 0) { + device_printf(dev, "could not enable main clock\n"); + return (error); + } + } + + /* De-assert reset */ + if (hwreset_get_by_ofw_name(dev, "stmmaceth", &rst) == 0) { + error = hwreset_deassert(rst); + if (error != 0) { + device_printf(dev, "could not de-assert reset\n"); + return (error); + } + } + + return (0); +} +#endif + static int dwc_probe(device_t dev) { @@ -1101,6 +1136,11 @@ dwc_attach(device_t dev) if (IF_DWC_INIT(dev) != 0) return (ENXIO); +#ifdef EXT_RESOURCES + if (dwc_clock_init(dev) != 0) + return (ENXIO); +#endif + if (bus_alloc_resources(dev, dwc_spec, sc->res)) { device_printf(dev, "could not allocate resources\n"); return (ENXIO); diff --git a/sys/dev/iicbus/twsi/a10_twsi.c b/sys/dev/iicbus/twsi/a10_twsi.c index 6ee13ad..701153b 100644 --- a/sys/dev/iicbus/twsi/a10_twsi.c +++ b/sys/dev/iicbus/twsi/a10_twsi.c @@ -48,8 +48,8 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include +#include +#include #include "iicbus_if.h" @@ -63,21 +63,16 @@ __FBSDID("$FreeBSD$"); #define TWI_EFR 0x1C #define TWI_LCR 0x20 -#define A10_I2C 1 -#define A31_I2C 2 - static struct ofw_compat_data compat_data[] = { - {"allwinner,sun4i-a10-i2c", A10_I2C}, - {"allwinner,sun6i-a31-i2c", A31_I2C}, + {"allwinner,sun4i-a10-i2c", 1}, + {"allwinner,sun6i-a31-i2c", 1}, {NULL, 0}, }; static int a10_twsi_probe(device_t dev) { - struct twsi_softc *sc; - sc = device_get_softc(dev); if (!ofw_bus_status_okay(dev)) return (ENXIO); @@ -92,29 +87,31 @@ static int a10_twsi_attach(device_t dev) { struct twsi_softc *sc; - int clk; + clk_t clk; + hwreset_t rst; + int error; sc = device_get_softc(dev); - /* Activate clock */ - switch (ofw_bus_search_compatible(dev, compat_data)->ocd_data) { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - case A10_I2C: - clk = a10_clk_i2c_activate(device_get_unit(dev)); - break; -#endif -#if defined(SOC_ALLWINNER_A31) || defined(SOC_ALLWINNER_A31S) - case A31_I2C: - clk = a31_clk_i2c_activate(device_get_unit(dev)); - break; -#endif - default: - clk = -1; + /* De-assert reset */ + if (hwreset_get_by_ofw_idx(dev, 0, &rst) == 0) { + error = hwreset_deassert(rst); + if (error != 0) { + device_printf(dev, "could not de-assert reset\n"); + return (error); + } } - if (clk != 0) { - device_printf(dev, "could not activate i2c clock\n"); - return (ENXIO); + /* Activate clock */ + error = clk_get_by_ofw_index(dev, 0, &clk); + if (error != 0) { + device_printf(dev, "could not find clock\n"); + return (error); + } + error = clk_enable(clk); + if (error != 0) { + device_printf(dev, "could not enable clock\n"); + return (error); } sc->reg_data = TWI_DATA; -- cgit v1.1 From e803d94b3def91f079a5880372af2ce84f9dbe9c Mon Sep 17 00:00:00 2001 From: glebius Date: Wed, 6 Apr 2016 23:17:05 +0000 Subject: Add optional configuration knob NANO_CUST_FILES_MTREE. If set, it will require an entry in custom mtree definition for every custom installed file. Obtained from: Netflix --- tools/tools/nanobsd/defaults.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh index d881276..3b28b39 100755 --- a/tools/tools/nanobsd/defaults.sh +++ b/tools/tools/nanobsd/defaults.sh @@ -52,6 +52,11 @@ NANO_PACKAGE_LIST="*" # where package metadata gets placed NANO_PKG_META_BASE=/var/db +# Path to mtree file to apply to anything copied by cust_install_files(). +# If you specify this, the mtree file *must* have an entry for every file and +# directory located in Files. +#NANO_CUST_FILES_MTREE="" + # Object tree directory # default is subdir of /usr/obj #NANO_OBJ="" @@ -909,6 +914,10 @@ cust_allow_ssh_root ( ) ( cust_install_files ( ) ( cd "${NANO_TOOLS}/Files" find . -print | grep -Ev '/(CVS|\.svn|\.hg|\.git)' | cpio -Ldumpv ${NANO_WORLDDIR} + + if [ -f ${NANO_CUST_FILES_MTREE} ]; then + CR "mtree -eiU -p /" <${NANO_CUST_FILES_MTREE} + fi ) ####################################################################### -- cgit v1.1 From 6da26de1ae88bf0f8bdbbd72ea8695e9df179c75 Mon Sep 17 00:00:00 2001 From: allanjude Date: Wed, 6 Apr 2016 23:21:44 +0000 Subject: Fix GELIBoot support for GELI sector size is > 512 Add support for 4k sector GELI encrypted partitions to the bootloader This is the default created by the installer Because the IV is different for each sector, and the XTS tweak carries forward you can not decrypt a partial sector if the starting offset is not 0 Make boot2 and the loader read in 4k aligned chunks Reviewed by: ed, oshogbo Sponsored by: ScaleEngine Inc. Differential Revision: https://reviews.freebsd.org/D5820 --- sys/boot/geli/geliboot.c | 64 +++++++++++++++++++++++-------------- sys/boot/geli/geliboot.h | 3 ++ sys/boot/i386/libi386/biosdisk.c | 36 +++++++++++++++++---- sys/boot/i386/zfsboot/zfsboot.c | 69 +++++++++++++++++++++++++++++----------- 4 files changed, 124 insertions(+), 48 deletions(-) diff --git a/sys/boot/geli/geliboot.c b/sys/boot/geli/geliboot.c index becbc5f..c714616 100644 --- a/sys/boot/geli/geliboot.c +++ b/sys/boot/geli/geliboot.c @@ -73,30 +73,34 @@ geli_taste(int read_func(void *vdev, void *priv, off_t off, void *buf, size_t bytes), struct dsk *dskp, daddr_t lastsector) { struct g_eli_metadata md; - u_char buf[DEV_BSIZE]; + u_char buf[DEV_GELIBOOT_BSIZE]; int error; + off_t alignsector; - error = read_func(NULL, dskp, (off_t) lastsector * DEV_BSIZE, &buf, - (size_t) DEV_BSIZE); + alignsector = (lastsector * DEV_BSIZE) & + ~(off_t)(DEV_GELIBOOT_BSIZE - 1); + error = read_func(NULL, dskp, alignsector, &buf, DEV_GELIBOOT_BSIZE); if (error != 0) { return (error); } - error = eli_metadata_decode(buf, &md); + /* Extract the last DEV_BSIZE bytes from the block. */ + error = eli_metadata_decode(buf + (DEV_GELIBOOT_BSIZE - DEV_BSIZE), + &md); if (error != 0) { return (error); } if ((md.md_flags & G_ELI_FLAG_ONETIME)) { - /* Swap device, skip it */ + /* Swap device, skip it. */ return (1); } if (!(md.md_flags & G_ELI_FLAG_BOOT)) { - /* Disk is not GELI boot device, skip it */ + /* Disk is not GELI boot device, skip it. */ return (1); } if (md.md_iterations < 0) { - /* XXX TODO: Support loading key files */ - /* Disk does not have a passphrase, skip it */ + /* XXX TODO: Support loading key files. */ + /* Disk does not have a passphrase, skip it. */ return (1); } geli_e = malloc(sizeof(struct geli_entry)); @@ -143,7 +147,7 @@ geli_attach(struct dsk *dskp, const char *passphrase) * Prepare Derived-Key from the user passphrase. */ if (geli_e->md.md_iterations < 0) { - /* XXX TODO: Support loading key files */ + /* XXX TODO: Support loading key files. */ return (1); } else if (geli_e->md.md_iterations == 0) { g_eli_crypto_hmac_update(&ctx, geli_e->md.md_salt, @@ -151,8 +155,8 @@ geli_attach(struct dsk *dskp, const char *passphrase) g_eli_crypto_hmac_update(&ctx, passphrase, strlen(passphrase)); } else if (geli_e->md.md_iterations > 0) { - printf("Calculating GELI Decryption Key disk%dp%d @ %lu " - "iterations...\n", dskp->unit, + printf("Calculating GELI Decryption Key disk%dp%d @ %lu" + " iterations...\n", dskp->unit, (dskp->slice > 0 ? dskp->slice : dskp->part), geli_e->md.md_iterations); u_char dkey[G_ELI_USERKEYLEN]; @@ -193,7 +197,7 @@ geli_attach(struct dsk *dskp, const char *passphrase) } bzero(&mkey, sizeof(mkey)); - /* Initialize the per-sector IV */ + /* Initialize the per-sector IV. */ switch (geli_e->sc.sc_ealgo) { case CRYPTO_AES_XTS: break; @@ -207,7 +211,7 @@ geli_attach(struct dsk *dskp, const char *passphrase) return (0); } - /* Disk not found */ + /* Disk not found. */ return (2); } @@ -229,35 +233,49 @@ geli_read(struct dsk *dskp, off_t offset, u_char *buf, size_t bytes) u_char iv[G_ELI_IVKEYLEN]; u_char *pbuf; int error; - off_t os; + off_t dstoff; uint64_t keyno; - size_t n, nb; + size_t n, nsec, secsize; struct g_eli_key gkey; + pbuf = buf; SLIST_FOREACH_SAFE(geli_e, &geli_head, entries, geli_e_tmp) { if (geli_same_device(geli_e, dskp) != 0) { continue; } - nb = bytes / DEV_BSIZE; - for (n = 0; n < nb; n++) { - os = offset + (n * DEV_BSIZE); - pbuf = buf + (n * DEV_BSIZE); + secsize = geli_e->sc.sc_sectorsize; + nsec = bytes / secsize; + if (nsec == 0) { + /* + * A read of less than the GELI sector size has been + * requested. The caller provided destination buffer may + * not be big enough to boost the read to a full sector, + * so just attempt to decrypt the truncated sector. + */ + secsize = bytes; + nsec = 1; + } + + for (n = 0, dstoff = offset; n < nsec; n++, dstoff += secsize) { - g_eli_crypto_ivgen(&geli_e->sc, os, iv, G_ELI_IVKEYLEN); + g_eli_crypto_ivgen(&geli_e->sc, dstoff, iv, + G_ELI_IVKEYLEN); - /* Get the key that corresponds to this offset */ - keyno = (os >> G_ELI_KEY_SHIFT) / DEV_BSIZE; + /* Get the key that corresponds to this offset. */ + keyno = (dstoff >> G_ELI_KEY_SHIFT) / secsize; g_eli_key_fill(&geli_e->sc, &gkey, keyno); error = geliboot_crypt(geli_e->sc.sc_ealgo, 0, pbuf, - DEV_BSIZE, gkey.gek_key, geli_e->sc.sc_ekeylen, iv); + secsize, gkey.gek_key, + geli_e->sc.sc_ekeylen, iv); if (error != 0) { bzero(&gkey, sizeof(gkey)); printf("Failed to decrypt in geli_read()!"); return (error); } + pbuf += secsize; } bzero(&gkey, sizeof(gkey)); return (0); diff --git a/sys/boot/geli/geliboot.h b/sys/boot/geli/geliboot.h index 36bebcc..61e64f1 100644 --- a/sys/boot/geli/geliboot.h +++ b/sys/boot/geli/geliboot.h @@ -55,6 +55,9 @@ #ifndef DEV_BSIZE #define DEV_BSIZE 512 #endif +#ifndef DEV_GELIBOOT_BSIZE +#define DEV_GELIBOOT_BSIZE 4096 +#endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) diff --git a/sys/boot/i386/libi386/biosdisk.c b/sys/boot/i386/libi386/biosdisk.c index 1c54769..38ca85d 100644 --- a/sys/boot/i386/libi386/biosdisk.c +++ b/sys/boot/i386/libi386/biosdisk.c @@ -706,15 +706,38 @@ bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest) { #ifdef LOADER_GELI_SUPPORT struct dsk dskp; - off_t p_off; - int err, n; + off_t p_off, diff; + daddr_t alignlba; + int err, n, alignblks; + char *tmpbuf; /* if we already know there is no GELI, skip the rest */ if (geli_status[dev->d_unit][dev->d_slice] != ISGELI_YES) return (bd_io(dev, dblk, blks, dest, 0)); if (geli_status[dev->d_unit][dev->d_slice] == ISGELI_YES) { - err = bd_io(dev, dblk, blks, dest, 0); + /* + * Align reads to DEV_GELIBOOT_BSIZE bytes because partial + * sectors cannot be decrypted. Round the requested LBA down to + * nearest multiple of DEV_GELIBOOT_BSIZE bytes. + */ + alignlba = dblk & + ~(daddr_t)((DEV_GELIBOOT_BSIZE / BIOSDISK_SECSIZE) - 1); + /* + * Round number of blocks to read up to nearest multiple of + * DEV_GELIBOOT_BSIZE + */ + alignblks = blks + (dblk - alignlba) + + ((DEV_GELIBOOT_BSIZE / BIOSDISK_SECSIZE) - 1) & + ~(int)((DEV_GELIBOOT_BSIZE / BIOSDISK_SECSIZE) - 1); + diff = (dblk - alignlba) * BIOSDISK_SECSIZE; + /* + * Use a temporary buffer here because the buffer provided by + * the caller may be too small. + */ + tmpbuf = alloca(alignblks * BIOSDISK_SECSIZE); + + err = bd_io(dev, alignlba, alignblks, tmpbuf, 0); if (err) return (err); @@ -726,13 +749,14 @@ bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest) dskp.start = dev->d_offset; /* GELI needs the offset relative to the partition start */ - p_off = dblk - dskp.start; + p_off = alignlba - dskp.start; - err = geli_read(&dskp, p_off * BIOSDISK_SECSIZE, dest, - blks * BIOSDISK_SECSIZE); + err = geli_read(&dskp, p_off * BIOSDISK_SECSIZE, tmpbuf, + alignblks * BIOSDISK_SECSIZE); if (err) return (err); + bcopy(tmpbuf + diff, dest, blks * BIOSDISK_SECSIZE); return (0); } #endif /* LOADER_GELI_SUPPORT */ diff --git a/sys/boot/i386/zfsboot/zfsboot.c b/sys/boot/i386/zfsboot/zfsboot.c index 4b371dc..71d6cfa 100644 --- a/sys/boot/i386/zfsboot/zfsboot.c +++ b/sys/boot/i386/zfsboot/zfsboot.c @@ -46,18 +46,20 @@ __FBSDID("$FreeBSD$"); #include "libzfs.h" -#define ARGS 0x900 -#define NOPT 14 -#define NDEV 3 +#define ARGS 0x900 +#define NOPT 14 +#define NDEV 3 -#define BIOS_NUMDRIVES 0x475 -#define DRV_HARD 0x80 -#define DRV_MASK 0x7f +#define BIOS_NUMDRIVES 0x475 +#define DRV_HARD 0x80 +#define DRV_MASK 0x7f -#define TYPE_AD 0 -#define TYPE_DA 1 -#define TYPE_MAXHARD TYPE_DA -#define TYPE_FD 2 +#define TYPE_AD 0 +#define TYPE_DA 1 +#define TYPE_MAXHARD TYPE_DA +#define TYPE_FD 2 + +#define DEV_GELIBOOT_BSIZE 4096 extern uint32_t _end; @@ -104,13 +106,13 @@ static struct bios_smap smap; /* * The minimum amount of memory to reserve in bios_extmem for the heap. */ -#define HEAP_MIN (3 * 1024 * 1024) +#define HEAP_MIN (3 * 1024 * 1024) static char *heap_next; static char *heap_end; /* Buffers that must not span a 64k boundary. */ -#define READ_BUF_SIZE 8192 +#define READ_BUF_SIZE 8192 struct dmadat { char rdbuf[READ_BUF_SIZE]; /* for reading large things */ char secbuf[READ_BUF_SIZE]; /* for MBR/disklabel */ @@ -198,8 +200,9 @@ static int vdev_read(vdev_t *vdev, void *priv, off_t off, void *buf, size_t bytes) { char *p; - daddr_t lba; - unsigned int nb; + daddr_t lba, alignlba; + off_t alignoff, diff; + unsigned int nb, alignnb; struct dsk *dsk = (struct dsk *) priv; if ((off & (DEV_BSIZE - 1)) || (bytes & (DEV_BSIZE - 1))) @@ -208,24 +211,52 @@ vdev_read(vdev_t *vdev, void *priv, off_t off, void *buf, size_t bytes) p = buf; lba = off / DEV_BSIZE; lba += dsk->start; + /* Align reads to 4k else 4k sector GELIs will not decrypt. */ + alignoff = off & ~ (off_t)(DEV_GELIBOOT_BSIZE - 1); + /* Round LBA down to nearest multiple of DEV_GELIBOOT_BSIZE bytes. */ + alignlba = alignoff / DEV_BSIZE; + /* + * The read must be aligned to DEV_GELIBOOT_BSIZE bytes relative to the + * start of the GELI partition, not the start of the actual disk. + */ + alignlba += dsk->start; + diff = (lba - alignlba) * DEV_BSIZE; + while (bytes > 0) { nb = bytes / DEV_BSIZE; if (nb > READ_BUF_SIZE / DEV_BSIZE) nb = READ_BUF_SIZE / DEV_BSIZE; - if (drvread(dsk, dmadat->rdbuf, lba, nb)) + /* + * Ensure that the read size plus the leading offset does not + * exceed the size of the read buffer. + */ + if (nb * DEV_BSIZE + diff > READ_BUF_SIZE) + nb -= diff / DEV_BSIZE; + /* + * Round the number of blocks to read up to the nearest multiple + * of DEV_GELIBOOT_BSIZE. + */ + alignnb = nb + (diff / DEV_BSIZE) + + (DEV_GELIBOOT_BSIZE / DEV_BSIZE - 1) & ~ + (unsigned int)(DEV_GELIBOOT_BSIZE / DEV_BSIZE - 1); + + if (drvread(dsk, dmadat->rdbuf, alignlba, alignnb)) return -1; #ifdef LOADER_GELI_SUPPORT /* decrypt */ if (is_geli(dsk) == 0) { - if (geli_read(dsk, ((lba - dsk->start) * DEV_BSIZE), - dmadat->rdbuf, nb * DEV_BSIZE)) - return (-1); + if (geli_read(dsk, ((alignlba - dsk->start) * + DEV_BSIZE), dmadat->rdbuf, alignnb * DEV_BSIZE)) + return (-1); } #endif - memcpy(p, dmadat->rdbuf, nb * DEV_BSIZE); + memcpy(p, dmadat->rdbuf + diff, nb * DEV_BSIZE); p += nb * DEV_BSIZE; lba += nb; + alignlba += alignnb; bytes -= nb * DEV_BSIZE; + /* Don't need the leading offset after the first block. */ + diff = 0; } return 0; -- cgit v1.1 From cc1aaf5a1a88524a7d9ff817b98dcfb66049f5f8 Mon Sep 17 00:00:00 2001 From: cy Date: Thu, 7 Apr 2016 01:42:09 +0000 Subject: Add DTrace probes for packets flagged as bad by ipfilter. All probes for bad packets are named ipf_fi_bad_*. An example of its use might be: dtrace -n 'sdt:::ipf_fi_bad_* { stack(); }' Reviewed by: Darren Reed --- sys/contrib/ipfilter/netinet/fil.c | 50 ++++++++++++++++++++++----- sys/contrib/ipfilter/netinet/ip_fil_freebsd.c | 8 +++++ sys/contrib/ipfilter/netinet/ip_frag.c | 3 ++ sys/contrib/ipfilter/netinet/ip_state.c | 12 +++++-- 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/sys/contrib/ipfilter/netinet/fil.c b/sys/contrib/ipfilter/netinet/fil.c index 58d9028..0aeb44b 100644 --- a/sys/contrib/ipfilter/netinet/fil.c +++ b/sys/contrib/ipfilter/netinet/fil.c @@ -629,6 +629,7 @@ ipf_pr_ipv6hdr(fin) ipf_main_softc_t *softc = fin->fin_main_soft; fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_ipv6_frag_1, fr_info_t *, fin, int, go); LBUMPD(ipf_stats[fin->fin_out], fr_v6_badfrag); LBUMP(ipf_stats[fin->fin_out].fr_v6_bad); } @@ -687,6 +688,7 @@ ipf_pr_ipv6exthdr(fin, multiple, proto) if (shift > fin->fin_dlen) { /* Nasty extension header length? */ fin->fin_flx |= FI_BAD; + DT3(ipf_fi_bad_pr_ipv6exthdr_len, fr_info_t *, fin, u_short, shift, u_short, fin->fin_dlen); LBUMPD(ipf_stats[fin->fin_out], fr_v6_ext_hlen); return NULL; } @@ -708,9 +710,10 @@ ipf_pr_ipv6exthdr(fin, multiple, proto) * Most IPv6 extension headers are only allowed once. */ if ((multiple == 0) && - ((fin->fin_optmsk & ip6exthdr[i].ol_bit) != 0)) + ((fin->fin_optmsk & ip6exthdr[i].ol_bit) != 0)) { fin->fin_flx |= FI_BAD; - else + DT2(ipf_fi_bad_ipv6exthdr_once, fr_info_t *, fin, u_int, (fin->fin_optmsk & ip6exthdr[i].ol_bit)); + } else fin->fin_optmsk |= ip6exthdr[i].ol_bit; break; } @@ -790,6 +793,7 @@ ipf_pr_routing6(fin) ipf_main_softc_t *softc = fin->fin_main_soft; fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_routing6, fr_info_t *, fin); LBUMPD(ipf_stats[fin->fin_out], fr_v6_rh_bad); return IPPROTO_NONE; } @@ -852,8 +856,10 @@ ipf_pr_fragment6(fin) * Any fragment that isn't the last fragment must have its * length as a multiple of 8. */ - if ((fin->fin_plen & 7) != 0) + if ((fin->fin_plen & 7) != 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_frag_not_8, fr_info_t *, fin, u_int, (fin->fin_plen & 7)); + } } fin->fin_fraghdr = frag; @@ -865,8 +871,10 @@ ipf_pr_fragment6(fin) /* * Jumbograms aren't handled, so the max. length is 64k */ - if ((fin->fin_off << 3) + fin->fin_dlen > 65535) + if ((fin->fin_off << 3) + fin->fin_dlen > 65535) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_jumbogram, fr_info_t *, fin, u_int, ((fin->fin_off << 3) + fin->fin_dlen)); + } /* * We don't know where the transport layer header (or whatever is next @@ -970,8 +978,10 @@ ipf_pr_icmp6(fin) icmp6 = fin->fin_dp; ip6 = (ip6_t *)((char *)icmp6 + ICMPERR_ICMPHLEN); if (IP6_NEQ(&fin->fin_fi.fi_dst, - (i6addr_t *)&ip6->ip6_src)) + (i6addr_t *)&ip6->ip6_src)) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_icmp6, fr_info_t *, fin); + } break; default : break; @@ -1283,8 +1293,10 @@ ipf_pr_icmp(fin) case ICMP_UNREACH : #ifdef icmp_nextmtu if (icmp->icmp_code == ICMP_UNREACH_NEEDFRAG) { - if (icmp->icmp_nextmtu < softc->ipf_icmpminfragmtu) + if (icmp->icmp_nextmtu < softc->ipf_icmpminfragmtu) { fin->fin_flx |= FI_BAD; + DT3(ipf_fi_bad_icmp_nextmtu, fr_info_t *, fin, u_int, icmp->icmp_nextmtu, u_int, softc->ipf_icmpminfragmtu); + } } #endif case ICMP_SOURCEQUENCH : @@ -1303,16 +1315,20 @@ ipf_pr_icmp(fin) * fragment. */ oip = (ip_t *)((char *)fin->fin_dp + ICMPERR_ICMPHLEN); - if ((ntohs(oip->ip_off) & IP_OFFMASK) != 0) + if ((ntohs(oip->ip_off) & IP_OFFMASK) != 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_icmp_err, fr_info_t, fin, u_int, (ntohs(oip->ip_off) & IP_OFFMASK)); + } /* * If the destination of this packet doesn't match the * source of the original packet then this packet is * not correct. */ - if (oip->ip_src.s_addr != fin->fin_daddr) + if (oip->ip_src.s_addr != fin->fin_daddr) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_src_ne_dst, fr_info_t *, fin); + } break; default : break; @@ -1372,6 +1388,7 @@ ipf_pr_tcpcommon(fin) if (tlen < sizeof(tcphdr_t)) { LBUMPD(ipf_stats[fin->fin_out], fr_tcp_small); fin->fin_flx |= FI_BAD; + DT3(ipf_fi_bad_tlen, fr_info_t, fin, u_int, tlen, u_int, sizeof(tcphdr_t)); return 1; } @@ -1385,6 +1402,7 @@ ipf_pr_tcpcommon(fin) */ if ((flags & TH_URG) != 0 && (tcp->th_urp == 0)) { fin->fin_flx |= FI_BAD; + DT3(ipf_fi_bad_th_urg, fr_info_t*, fin, u_int, (flags & TH_URG), u_int, tcp->th_urp); #if 0 } else if ((flags & TH_URG) == 0 && (tcp->th_urp != 0)) { /* @@ -1392,11 +1410,13 @@ ipf_pr_tcpcommon(fin) * traffic with bogus values in the urgent pointer field. */ fin->fin_flx |= FI_BAD; + DT3(ipf_fi_bad_th_urg0, fr_info_t *, fin, u_int, (flags & TH_URG), u_int, tcp->th_urp); #endif } else if (((flags & (TH_SYN|TH_FIN)) != 0) && ((flags & (TH_RST|TH_ACK)) == TH_RST)) { /* TH_FIN|TH_RST|TH_ACK seems to appear "naturally" */ fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_th_fin_rst_ack, fr_info_t, fin); #if 1 } else if (((flags & TH_SYN) != 0) && ((flags & (TH_URG|TH_PUSH)) != 0)) { @@ -1405,6 +1425,7 @@ ipf_pr_tcpcommon(fin) * possible(?) with T/TCP...but who uses T/TCP? */ fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_th_syn_urg_psh, fr_info_t *, fin); #endif } else if (!(flags & TH_ACK)) { /* @@ -1423,10 +1444,13 @@ ipf_pr_tcpcommon(fin) * achieved. */ /*fin->fin_flx |= FI_BAD*/; + /*DT1(ipf_fi_bad_th_syn_ack, fr_info_t *, fin);*/ } else if (!(flags & (TH_RST|TH_SYN))) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_th_rst_syn, fr_info_t *, fin); } else if ((flags & (TH_URG|TH_PUSH|TH_FIN)) != 0) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_th_urg_push_fin, fr_info_t *, fin); } } if (fin->fin_flx & FI_BAD) { @@ -1757,6 +1781,7 @@ ipf_pr_ipv4hdr(fin) * must be an even multiple of 8. */ fi->fi_flx |= FI_BAD; + DT1(ipf_fi_bad_fragbody_gt_65535, fr_info_t *, fin); } } } @@ -1840,6 +1865,7 @@ ipf_pr_ipv4hdr(fin) case IPOPT_SECURITY : if (optmsk & op->ol_bit) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_ipopt_security, fr_info_t *, fin, u_short, (optmsk & op->ol_bit)); } else { doi = ipf_checkripso(s); secmsk = doi >> 16; @@ -1851,6 +1877,7 @@ ipf_pr_ipv4hdr(fin) if (optmsk & op->ol_bit) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_ipopt_cipso, fr_info_t *, fin, u_short, (optmsk & op->ol_bit)); } else { doi = ipf_checkcipso(fin, s, ol); @@ -1949,6 +1976,7 @@ ipf_checkcipso(fin, s, ol) if (ol < 6 || ol > 40) { LBUMPD(ipf_stats[fin->fin_out], fr_v4_cipso_bad); fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_ol, fr_info_t *, fin, u_int, ol); return 0; } @@ -1966,6 +1994,7 @@ ipf_checkcipso(fin, s, ol) if (tlen > len || tlen < 4 || tlen > 34) { LBUMPD(ipf_stats[fin->fin_out], fr_v4_cipso_tlen); fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tlen, fr_info_t *, fin, u_int, tlen); return 0; } @@ -1976,10 +2005,12 @@ ipf_checkcipso(fin, s, ol) */ if (tag == 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tag, fr_info_t *, fin, u_int, tag); continue; } else if (tag == 1) { if (*(t + 2) != 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tag1_t2, fr_info_t *, fin, u_int, (*t + 2)); continue; } sensitivity = *(t + 3); @@ -1988,6 +2019,7 @@ ipf_checkcipso(fin, s, ol) } else if (tag == 4) { if (*(t + 2) != 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tag4_t2, fr_info_t *, fin, u_int, (*t + 2)); continue; } sensitivity = *(t + 3); @@ -1996,6 +2028,7 @@ ipf_checkcipso(fin, s, ol) } else if (tag == 5) { if (*(t + 2) != 0) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tag5_t2, fr_info_t *, fin, u_int, (*t + 2)); continue; } sensitivity = *(t + 3); @@ -2006,6 +2039,7 @@ ipf_checkcipso(fin, s, ol) ; } else { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkcipso_tag127, fr_info_t *, fin, u_int, tag); continue; } diff --git a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c index 8a5a90d..3b74f8c 100644 --- a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c +++ b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c @@ -1091,6 +1091,7 @@ ipf_checkv4sum(fin) CSUM_IP_CHECKED) { fin->fin_cksum = FI_CK_BAD; fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkv4sum_csum_ip_checked, fr_info_t *, fin, u_int, m->m_pkthdr.csum_flags & (CSUM_IP_CHECKED|CSUM_IP_VALID)); return -1; } if (m->m_pkthdr.csum_flags & CSUM_DATA_VALID) { @@ -1120,6 +1121,7 @@ ipf_checkv4sum(fin) if (sum != 0) { fin->fin_cksum = FI_CK_BAD; fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkv4sum_sum, fr_info_t *, fin, u_int, sum); } else { fin->fin_cksum = FI_CK_SUMOK; return 0; @@ -1143,12 +1145,14 @@ skipauto: if (manual != 0) { if (ipf_checkl4sum(fin) == -1) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkv4sum_manual, fr_info_t *, fin, u_int, manual); return -1; } } #else if (ipf_checkl4sum(fin) == -1) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkv4sum_checkl4sum, fr_info_t *, fin, u_int, -1); return -1; } #endif @@ -1162,16 +1166,20 @@ ipf_checkv6sum(fin) fr_info_t *fin; { if ((fin->fin_flx & FI_NOCKSUM) != 0) + DT(ipf_checkv6sum_fi_nocksum); return 0; if ((fin->fin_flx & FI_SHORT) != 0) + DT(ipf_checkv6sum_fi_short); return 1; if (fin->fin_cksum != FI_CK_NEEDED) + DT(ipf_checkv6sum_fi_ck_needed); return (fin->fin_cksum > FI_CK_NEEDED) ? 0 : -1; if (ipf_checkl4sum(fin) == -1) { fin->fin_flx |= FI_BAD; + DT2(ipf_fi_bad_checkv6sum_checkl4sum, fr_info_t *, fin, u_int, -1); return -1; } return 0; diff --git a/sys/contrib/ipfilter/netinet/ip_frag.c b/sys/contrib/ipfilter/netinet/ip_frag.c index 7e3457a..e0cc5f3 100644 --- a/sys/contrib/ipfilter/netinet/ip_frag.c +++ b/sys/contrib/ipfilter/netinet/ip_frag.c @@ -719,6 +719,8 @@ ipf_frag_lookup(softc, softf, fin, table FBUMP(ifs_overlap); DT2(ifs_overlap, u_short, off, ipfr_t *, f); + DT3(ipf_fi_bad_ifs_overlap, fr_info_t *, fin, u_short, off, + ipfr_t *, f); fin->fin_flx |= FI_BAD; break; } @@ -901,6 +903,7 @@ ipf_frag_known(fin, passp) if (fin->fin_flx & FI_BAD) { fr = &ipfr_block; fin->fin_reason = FRB_BADFRAG; + DT2(ipf_frb_badfrag, fr_info_t *, fin, uint, fra); } else { fr = fra->ipfr_rule; } diff --git a/sys/contrib/ipfilter/netinet/ip_state.c b/sys/contrib/ipfilter/netinet/ip_state.c index 2ceec32..34a64f0 100644 --- a/sys/contrib/ipfilter/netinet/ip_state.c +++ b/sys/contrib/ipfilter/netinet/ip_state.c @@ -1611,8 +1611,10 @@ ipf_state_add(softc, fin, stsave, flags) TH_SYN && (TCP_OFF(tcp) > (sizeof(tcphdr_t) >> 2))) { if (ipf_tcpoptions(softs, fin, tcp, - &is->is_tcp.ts_data[0]) == -1) + &is->is_tcp.ts_data[0]) == -1) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_tcpoptions_th_fin_ack_ecnall, fr_info_t *, fin); + } } if ((fin->fin_out != 0) && (pass & FR_NEWISN) != 0) { @@ -2068,8 +2070,10 @@ ipf_state_tcp(softc, softs, fin, tcp, is) is->is_s0[!source] = ntohl(tcp->th_seq) + 1; if ((TCP_OFF(tcp) > (sizeof(tcphdr_t) >> 2))) { if (ipf_tcpoptions(softs, fin, tcp, - fdata) == -1) + fdata) == -1) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_winscale_syn_ack, fr_info_t *, fin); + } } if ((fin->fin_out != 0) && (is->is_pass & FR_NEWISN)) ipf_checknewisn(fin, is); @@ -2077,8 +2081,10 @@ ipf_state_tcp(softc, softs, fin, tcp, is) is->is_s0[source] = ntohl(tcp->th_seq) + 1; if ((TCP_OFF(tcp) > (sizeof(tcphdr_t) >> 2))) { if (ipf_tcpoptions(softs, fin, tcp, - fdata) == -1) + fdata) == -1) { fin->fin_flx |= FI_BAD; + DT1(ipf_fi_bad_winscale_syn, fr_info_t *, fin); + } } if ((fin->fin_out != 0) && (is->is_pass & FR_NEWISN)) -- cgit v1.1 From 825d80e01c65efad6bfe7302038a657bbc08e06a Mon Sep 17 00:00:00 2001 From: trasz Date: Thu, 7 Apr 2016 04:23:25 +0000 Subject: Add four new RCTL resources - readbps, readiops, writebps and writeiops, for limiting disk (actually filesystem) IO. Note that in some cases these limits are not quite precise. It's ok, as long as it's within some reasonable bounds. Testing - and review of the code, in particular the VFS and VM parts - is very welcome. MFC after: 1 month Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5080 --- .../contrib/opensolaris/uts/common/fs/zfs/arc.c | 9 + .../contrib/opensolaris/uts/common/fs/zfs/dmu.c | 20 +- sys/fs/ext2fs/ext2_bmap.c | 8 + sys/kern/kern_physio.c | 17 ++ sys/kern/kern_racct.c | 77 ++++++-- sys/kern/kern_rctl.c | 214 ++++++++++++++++++--- sys/kern/subr_trap.c | 10 +- sys/kern/vfs_bio.c | 31 ++- sys/kern/vfs_cluster.c | 15 ++ sys/sys/proc.h | 2 +- sys/sys/racct.h | 9 +- sys/sys/rctl.h | 4 +- sys/ufs/ffs/ffs_inode.c | 8 + sys/ufs/ffs/ffs_softdep.c | 8 + sys/ufs/ufs/ufs_bmap.c | 8 + sys/vm/vm_fault.c | 16 ++ usr.bin/rctl/rctl.8 | 39 +++- 17 files changed, 449 insertions(+), 46 deletions(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c index f944903..534dfb2 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c @@ -132,6 +132,7 @@ #include #ifdef _KERNEL #include +#include #endif #include #include @@ -4503,6 +4504,14 @@ top: demand, prefetch, !HDR_ISTYPE_METADATA(hdr), data, metadata, misses); #ifdef _KERNEL +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_force(curproc, RACCT_READBPS, size); + racct_add_force(curproc, RACCT_READIOPS, 1); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; #endif diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c index b60236f..af8d366 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c @@ -47,6 +47,7 @@ #include #include #ifdef _KERNEL +#include #include #include #endif @@ -427,6 +428,15 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset, uint64_t length, } dbp = kmem_zalloc(sizeof (dmu_buf_t *) * nblks, KM_SLEEP); +#if defined(_KERNEL) && defined(RACCT) + if (racct_enable && !read) { + PROC_LOCK(curproc); + racct_add_force(curproc, RACCT_WRITEBPS, length); + racct_add_force(curproc, RACCT_WRITEIOPS, nblks); + PROC_UNLOCK(curproc); + } +#endif + zio = zio_root(dn->dn_objset->os_spa, NULL, NULL, ZIO_FLAG_CANFAIL); blkid = dbuf_whichblock(dn, 0, offset); for (i = 0; i < nblks; i++) { @@ -1422,7 +1432,15 @@ dmu_assign_arcbuf(dmu_buf_t *handle, uint64_t offset, arc_buf_t *buf, DBUF_GET_BUFC_TYPE(db) == ARC_BUFC_DATA) { #ifdef _KERNEL curthread->td_ru.ru_oublock++; -#endif +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_force(curproc, RACCT_WRITEBPS, blksz); + racct_add_force(curproc, RACCT_WRITEIOPS, 1); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ +#endif /* _KERNEL */ dbuf_assign_arcbuf(db, buf, tx); dbuf_rele(db, FTAG); } else { diff --git a/sys/fs/ext2fs/ext2_bmap.c b/sys/fs/ext2fs/ext2_bmap.c index 8e5e986..7966b9b 100644 --- a/sys/fs/ext2fs/ext2_bmap.c +++ b/sys/fs/ext2fs/ext2_bmap.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -247,6 +248,13 @@ ext2_bmaparray(struct vnode *vp, daddr_t bn, daddr_t *bnp, int *runp, int *runb) vfs_busy_pages(bp, 0); bp->b_iooffset = dbtob(bp->b_blkno); bstrategy(bp); +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif curthread->td_ru.ru_inblock++; error = bufwait(bp); if (error) { diff --git a/sys/kern/kern_physio.c b/sys/kern/kern_physio.c index a148386..31d8f16 100644 --- a/sys/kern/kern_physio.c +++ b/sys/kern/kern_physio.c @@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -109,6 +110,22 @@ physio(struct cdev *dev, struct uio *uio, int ioflag) prot |= VM_PROT_WRITE; /* Less backwards than it looks */ error = 0; for (i = 0; i < uio->uio_iovcnt; i++) { +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + if (uio->uio_rw == UIO_READ) { + racct_add_force(curproc, RACCT_READBPS, + uio->uio_iov[i].iov_len); + racct_add_force(curproc, RACCT_READIOPS, 1); + } else { + racct_add_force(curproc, RACCT_WRITEBPS, + uio->uio_iov[i].iov_len); + racct_add_force(curproc, RACCT_WRITEIOPS, 1); + } + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ + while (uio->uio_iov[i].iov_len) { g_reset_bio(bp); if (uio->uio_rw == UIO_READ) { diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c index bbd50ca..438a249 100644 --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include "opt_sched.h" #include +#include #include #include #include @@ -177,7 +178,15 @@ int racct_types[] = { [RACCT_WALLCLOCK] = RACCT_IN_MILLIONS, [RACCT_PCTCPU] = - RACCT_DECAYING | RACCT_DENIABLE | RACCT_IN_MILLIONS }; + RACCT_DECAYING | RACCT_DENIABLE | RACCT_IN_MILLIONS, + [RACCT_READBPS] = + RACCT_DECAYING, + [RACCT_WRITEBPS] = + RACCT_DECAYING, + [RACCT_READIOPS] = + RACCT_DECAYING, + [RACCT_WRITEIOPS] = + RACCT_DECAYING }; static const fixpt_t RACCT_DECAY_FACTOR = 0.3 * FSCALE; @@ -634,6 +643,28 @@ racct_add_cred(struct ucred *cred, int resource, uint64_t amount) RACCT_UNLOCK(); } +/* + * Account for disk IO resource consumption. Checks for limits, + * but never fails, due to disk limits being undeniable. + */ +void +racct_add_buf(struct proc *p, const struct buf *bp, int is_write) +{ + + ASSERT_RACCT_ENABLED(); + PROC_LOCK_ASSERT(p, MA_OWNED); + + RACCT_LOCK(); + if (is_write) { + racct_add_locked(curproc, RACCT_WRITEBPS, bp->b_bcount, 1); + racct_add_locked(curproc, RACCT_WRITEIOPS, 1, 1); + } else { + racct_add_locked(curproc, RACCT_READBPS, bp->b_bcount, 1); + racct_add_locked(curproc, RACCT_READIOPS, 1, 1); + } + RACCT_UNLOCK(); +} + static int racct_set_locked(struct proc *p, int resource, uint64_t amount, int force) { @@ -655,7 +686,7 @@ racct_set_locked(struct proc *p, int resource, uint64_t amount, int force) * The diffs may be negative. */ diff_proc = amount - old_amount; - if (RACCT_IS_DECAYING(resource)) { + if (resource == RACCT_PCTCPU) { /* * Resources in per-credential racct containers may decay. * If this is the case, we need to calculate the difference @@ -1043,14 +1074,19 @@ racct_move(struct racct *dest, struct racct *src) RACCT_UNLOCK(); } -static void -racct_proc_throttle(struct proc *p) +/* + * Make the process sleep in userret() for 'timeout' ticks. Setting + * timeout to -1 makes it sleep until woken up by racct_proc_wakeup(). + */ +void +racct_proc_throttle(struct proc *p, int timeout) { struct thread *td; #ifdef SMP int cpuid; #endif + KASSERT(timeout != 0, ("timeout %d", timeout)); ASSERT_RACCT_ENABLED(); PROC_LOCK_ASSERT(p, MA_OWNED); @@ -1058,10 +1094,13 @@ racct_proc_throttle(struct proc *p) * Do not block kernel processes. Also do not block processes with * low %cpu utilization to improve interactivity. */ - if (((p->p_flag & (P_SYSTEM | P_KPROC)) != 0) || - (p->p_racct->r_resources[RACCT_PCTCPU] <= pcpu_threshold)) + if ((p->p_flag & (P_SYSTEM | P_KPROC)) != 0) return; - p->p_throttled = 1; + + if (p->p_throttled < 0 || (timeout > 0 && p->p_throttled > timeout)) + return; + + p->p_throttled = timeout; FOREACH_THREAD_IN_PROC(p, td) { thread_lock(td); @@ -1102,7 +1141,7 @@ racct_proc_wakeup(struct proc *p) PROC_LOCK_ASSERT(p, MA_OWNED); - if (p->p_throttled) { + if (p->p_throttled != 0) { p->p_throttled = 0; wakeup(p->p_racct); } @@ -1116,6 +1155,13 @@ racct_decay_callback(struct racct *racct, void *dummy1, void *dummy2) ASSERT_RACCT_ENABLED(); RACCT_LOCK_ASSERT(); +#ifdef RCTL + rctl_throttle_decay(racct, RACCT_READBPS); + rctl_throttle_decay(racct, RACCT_WRITEBPS); + rctl_throttle_decay(racct, RACCT_READIOPS); + rctl_throttle_decay(racct, RACCT_WRITEIOPS); +#endif + r_old = racct->r_resources[RACCT_PCTCPU]; /* If there is nothing to decay, just exit. */ @@ -1206,6 +1252,12 @@ racctd(void) pct_estimate = 0; pct = racct_getpcpu(p, pct_estimate); RACCT_LOCK(); +#ifdef RCTL + rctl_throttle_decay(p->p_racct, RACCT_READBPS); + rctl_throttle_decay(p->p_racct, RACCT_WRITEBPS); + rctl_throttle_decay(p->p_racct, RACCT_READIOPS); + rctl_throttle_decay(p->p_racct, RACCT_WRITEIOPS); +#endif racct_set_locked(p, RACCT_PCTCPU, pct, 1); racct_set_locked(p, RACCT_CPU, runtime, 0); racct_set_locked(p, RACCT_WALLCLOCK, @@ -1228,10 +1280,13 @@ racctd(void) continue; } - if (racct_pcpu_available(p) <= 0) - racct_proc_throttle(p); - else if (p->p_throttled) + if (racct_pcpu_available(p) <= 0) { + if (p->p_racct->r_resources[RACCT_PCTCPU] > + pcpu_threshold) + racct_proc_throttle(p, -1); + } else if (p->p_throttled == -1) { racct_proc_wakeup(p); + } PROC_UNLOCK(p); } sx_sunlock(&allproc_lock); diff --git a/sys/kern/kern_rctl.c b/sys/kern/kern_rctl.c index 7f6a7ad..8f301b8 100644 --- a/sys/kern/kern_rctl.c +++ b/sys/kern/kern_rctl.c @@ -77,9 +77,13 @@ FEATURE(rctl, "Resource Limits"); #define RCTL_PCPU_SHIFT (10 * 1000000) -unsigned int rctl_maxbufsize = RCTL_MAX_OUTBUFSIZE; +static unsigned int rctl_maxbufsize = RCTL_MAX_OUTBUFSIZE; static int rctl_log_rate_limit = 10; static int rctl_devctl_rate_limit = 10; +static unsigned int rctl_throttle_min = 0; +static unsigned int rctl_throttle_max = 0; +static unsigned int rctl_throttle_pct = 0; +static unsigned int rctl_throttle_pct2 = 0; SYSCTL_NODE(_kern_racct, OID_AUTO, rctl, CTLFLAG_RW, 0, "Resource Limits"); SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, maxbufsize, CTLFLAG_RWTUN, @@ -88,6 +92,16 @@ SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, log_rate_limit, CTLFLAG_RW, &rctl_log_rate_limit, 0, "Maximum number of log messages per second"); SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, devctl_rate_limit, CTLFLAG_RW, &rctl_devctl_rate_limit, 0, "Maximum number of devctl messages per second"); +SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_min, CTLFLAG_RDTUN, + &rctl_throttle_min, 0, "Shortest throttling duration, in hz"); +SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_max, CTLFLAG_RDTUN, + &rctl_throttle_max, 0, "Longest throttling duration, in hz"); +SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_pct, CTLFLAG_RDTUN, + &rctl_throttle_pct, 0, + "Throttling penalty for process consumption, in percent"); +SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_pct2, CTLFLAG_RDTUN, + &rctl_throttle_pct2, 0, + "Throttling penalty for container consumption, in percent"); /* * 'rctl_rule_link' connects a rule with every racct it's related to. @@ -134,6 +148,10 @@ static struct dict resourcenames[] = { { "shmsize", RACCT_SHMSIZE }, { "wallclock", RACCT_WALLCLOCK }, { "pcpu", RACCT_PCTCPU }, + { "readbps", RACCT_READBPS }, + { "writebps", RACCT_WRITEBPS }, + { "readiops", RACCT_READIOPS }, + { "writeiops", RACCT_WRITEIOPS }, { NULL, -1 }}; static struct dict actionnames[] = { @@ -171,6 +189,7 @@ static struct dict actionnames[] = { { "deny", RCTL_ACTION_DENY }, { "log", RCTL_ACTION_LOG }, { "devctl", RCTL_ACTION_DEVCTL }, + { "throttle", RCTL_ACTION_THROTTLE }, { NULL, -1 }}; static void rctl_init(void); @@ -274,23 +293,53 @@ rctl_available_resource(const struct proc *p, const struct rctl_rule *rule) } /* - * Return non-zero if allocating 'amount' by proc 'p' would exceed - * resource limit specified by 'rule'. + * Called every second for proc, uidinfo, loginclass, and jail containers. + * If the limit isn't exceeded, it decreases the usage amount to zero. + * Otherwise, it decreases it by the value of the limit. This way + * resource consumption exceeding the limit "carries over" to the next + * period. */ -static int -rctl_would_exceed(const struct proc *p, const struct rctl_rule *rule, - int64_t amount) +void +rctl_throttle_decay(struct racct *racct, int resource) { - int64_t available; + struct rctl_rule *rule; + struct rctl_rule_link *link; + int64_t minavailable; ASSERT_RACCT_ENABLED(); - RCTL_LOCK_ASSERT(); - available = rctl_available_resource(p, rule); - if (available >= amount) - return (0); + minavailable = INT64_MAX; - return (1); + RCTL_RLOCK(); + + LIST_FOREACH(link, &racct->r_rule_links, rrl_next) { + rule = link->rrl_rule; + + if (rule->rr_resource != resource) + continue; + if (rule->rr_action != RCTL_ACTION_THROTTLE) + continue; + + if (rule->rr_amount < minavailable) + minavailable = rule->rr_amount; + } + + RCTL_RUNLOCK(); + + if (racct->r_resources[resource] < minavailable) { + racct->r_resources[resource] = 0; + } else { + /* + * Cap utilization counter at ten times the limit. Otherwise, + * if we changed the rule lowering the allowed amount, it could + * take unreasonably long time for the accumulated resource + * usage to drop. + */ + if (racct->r_resources[resource] > minavailable * 10) + racct->r_resources[resource] = minavailable * 10; + + racct->r_resources[resource] -= minavailable; + } } /* @@ -340,6 +389,38 @@ rctl_pcpu_available(const struct proc *p) { return (minavailable); } +static uint64_t +xadd(uint64_t a, uint64_t b) +{ + uint64_t c; + + c = a + b; + + /* + * Detect overflow. + */ + if (c < a || c < b) + return (UINT64_MAX); + + return (c); +} + +static uint64_t +xmul(uint64_t a, uint64_t b) +{ + uint64_t c; + + if (a == 0 || b == 0) + return (0); + + c = a * b; + + if (c < a || c < b) + return (UINT64_MAX); + + return (c); +} + /* * Check whether the proc 'p' can allocate 'amount' of 'resource' in addition * to what it keeps allocated now. Returns non-zero if the allocation should @@ -353,9 +434,12 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) struct rctl_rule *rule; struct rctl_rule_link *link; struct sbuf sb; + int64_t available; + uint64_t sleep_ms, sleep_ratio; int should_deny = 0; char *buf; + ASSERT_RACCT_ENABLED(); RCTL_RLOCK(); @@ -368,7 +452,9 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) rule = link->rrl_rule; if (rule->rr_resource != resource) continue; - if (!rctl_would_exceed(p, rule, amount)) { + + available = rctl_available_resource(p, rule); + if (available >= (int64_t)amount) { link->rrl_exceeded = 0; continue; } @@ -421,7 +507,7 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) if (p->p_state != PRS_NORMAL) continue; - + if (!ppsratecheck(&devctl_lasttime, &devctl_curtime, rctl_devctl_rate_limit)) continue; @@ -444,6 +530,69 @@ rctl_enforce(struct proc *p, int resource, uint64_t amount) free(buf, M_RCTL); link->rrl_exceeded = 1; continue; + case RCTL_ACTION_THROTTLE: + if (p->p_state != PRS_NORMAL) + continue; + + /* + * Make the process sleep for a fraction of second + * proportional to the ratio of process' resource + * utilization compared to the limit. The point is + * to penalize resource hogs: processes that consume + * more of the available resources sleep for longer. + * + * We're trying to defer division until the very end, + * to minimize the rounding effects. The following + * calculation could have been written in a clearer + * way like this: + * + * sleep_ms = hz * p->p_racct->r_resources[resource] / + * rule->rr_amount; + * sleep_ms *= rctl_throttle_pct / 100; + * if (sleep_ms < rctl_throttle_min) + * sleep_ms = rctl_throttle_min; + * + */ + sleep_ms = xmul(hz, p->p_racct->r_resources[resource]); + sleep_ms = xmul(sleep_ms, rctl_throttle_pct) / 100; + if (sleep_ms < rctl_throttle_min * rule->rr_amount) + sleep_ms = rctl_throttle_min * rule->rr_amount; + + /* + * Multiply that by the ratio of the resource + * consumption for the container compared to the limit, + * squared. In other words, a process in a container + * that is two times over the limit will be throttled + * four times as much for hitting the same rule. The + * point is to penalize processes more if the container + * itself (eg certain UID or jail) is above the limit. + */ + if (available < 0) + sleep_ratio = -available / rule->rr_amount; + else + sleep_ratio = 0; + sleep_ratio = xmul(sleep_ratio, sleep_ratio); + sleep_ratio = xmul(sleep_ratio, rctl_throttle_pct2) / 100; + sleep_ms = xadd(sleep_ms, xmul(sleep_ms, sleep_ratio)); + + /* + * Finally the division. + */ + sleep_ms /= rule->rr_amount; + + if (sleep_ms > rctl_throttle_max) + sleep_ms = rctl_throttle_max; +#if 0 + printf("%s: pid %d (%s), %jd of %jd, will sleep for %ld ms (ratio %ld, available %ld)\n", + __func__, p->p_pid, p->p_comm, + p->p_racct->r_resources[resource], + rule->rr_amount, sleep_ms, sleep_ratio, available); +#endif + + KASSERT(sleep_ms >= rctl_throttle_min, ("%s: %ju < %d\n", + __func__, (uintmax_t)sleep_ms, rctl_throttle_min)); + racct_proc_throttle(p, sleep_ms); + continue; default: if (link->rrl_exceeded != 0) continue; @@ -1073,20 +1222,32 @@ rctl_rule_add(struct rctl_rule *rule) KASSERT(rctl_rule_fully_specified(rule), ("rule not fully specified")); /* - * Some rules just don't make sense. Note that the one below - * cannot be rewritten using RACCT_IS_DENIABLE(); the RACCT_PCTCPU, - * for example, is not deniable in the racct sense, but the - * limit is enforced in a different way, so "deny" rules for %CPU - * do make sense. + * Some rules just don't make sense, like "deny" rule for an undeniable + * resource. The exception are the RSS and %CPU resources - they are + * not deniable in the racct sense, but the limit is enforced in + * a different way. */ if (rule->rr_action == RCTL_ACTION_DENY && - (rule->rr_resource == RACCT_CPU || - rule->rr_resource == RACCT_WALLCLOCK)) + !RACCT_IS_DENIABLE(rule->rr_resource) && + rule->rr_resource != RACCT_RSS && + rule->rr_resource != RACCT_PCTCPU) { return (EOPNOTSUPP); + } + + if (rule->rr_action == RCTL_ACTION_THROTTLE && + !RACCT_IS_DECAYING(rule->rr_resource)) { + return (EOPNOTSUPP); + } + + if (rule->rr_action == RCTL_ACTION_THROTTLE && + rule->rr_resource == RACCT_PCTCPU) { + return (EOPNOTSUPP); + } if (rule->rr_per == RCTL_SUBJECT_TYPE_PROCESS && - RACCT_IS_SLOPPY(rule->rr_resource)) + RACCT_IS_SLOPPY(rule->rr_resource)) { return (EOPNOTSUPP); + } /* * Make sure there are no duplicated rules. Also, for the "deny" @@ -1960,6 +2121,15 @@ rctl_init(void) UMA_ALIGN_PTR, UMA_ZONE_NOFREE); rctl_rule_zone = uma_zcreate("rctl_rule", sizeof(struct rctl_rule), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + + if (rctl_throttle_min <= 0) + rctl_throttle_min = 1; + if (rctl_throttle_max <= 0) + rctl_throttle_max = 2 * hz; + if (rctl_throttle_pct <= 0) + rctl_throttle_pct = 100; + if (rctl_throttle_pct2 <= 0) + rctl_throttle_pct2 = 100; } #else /* !RCTL */ diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index a371456..6d1ac70 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -172,10 +172,14 @@ userret(struct thread *td, struct trapframe *frame) (td->td_vnet_lpush != NULL) ? td->td_vnet_lpush : "N/A")); #endif #ifdef RACCT - if (racct_enable && p->p_throttled == 1) { + if (racct_enable && p->p_throttled != 0) { PROC_LOCK(p); - while (p->p_throttled == 1) - msleep(p->p_racct, &p->p_mtx, 0, "racct", 0); + while (p->p_throttled != 0) { + msleep(p->p_racct, &p->p_mtx, 0, "racct", + p->p_throttled < 0 ? 0 : p->p_throttled); + if (p->p_throttled > 0) + p->p_throttled = 0; + } PROC_UNLOCK(p); } #endif diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index e272f9d..b7b9641 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -1784,8 +1785,16 @@ breada(struct vnode * vp, daddr_t * rablkno, int * rabsize, rabp = getblk(vp, *rablkno, *rabsize, 0, 0, 0); if ((rabp->b_flags & B_CACHE) == 0) { - if (!TD_IS_IDLETHREAD(curthread)) + if (!TD_IS_IDLETHREAD(curthread)) { +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, rabp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; + } rabp->b_flags |= B_ASYNC; rabp->b_flags &= ~B_INVAL; rabp->b_ioflags &= ~BIO_ERROR; @@ -1829,8 +1838,16 @@ breadn_flags(struct vnode *vp, daddr_t blkno, int size, daddr_t *rablkno, /* if not found in cache, do some I/O */ if ((bp->b_flags & B_CACHE) == 0) { - if (!TD_IS_IDLETHREAD(curthread)) + if (!TD_IS_IDLETHREAD(curthread)) { +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; + } bp->b_iocmd = BIO_READ; bp->b_flags &= ~B_INVAL; bp->b_ioflags &= ~BIO_ERROR; @@ -1926,8 +1943,16 @@ bufwrite(struct buf *bp) bp->b_runningbufspace = bp->b_bufsize; space = atomic_fetchadd_long(&runningbufspace, bp->b_runningbufspace); - if (!TD_IS_IDLETHREAD(curthread)) + if (!TD_IS_IDLETHREAD(curthread)) { +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 1); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_oublock++; + } if (oldflags & B_ASYNC) BUF_KERNPROC(bp); bp->b_iooffset = dbtob(bp->b_blkno); diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index 9871a50..40dc0c0 100644 --- a/sys/kern/vfs_cluster.c +++ b/sys/kern/vfs_cluster.c @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -241,6 +242,13 @@ cluster_read(struct vnode *vp, u_quad_t filesize, daddr_t lblkno, long size, BUF_KERNPROC(bp); bp->b_iooffset = dbtob(bp->b_blkno); bstrategy(bp); +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; } @@ -294,6 +302,13 @@ cluster_read(struct vnode *vp, u_quad_t filesize, daddr_t lblkno, long size, BUF_KERNPROC(rbp); rbp->b_iooffset = dbtob(rbp->b_blkno); bstrategy(rbp); +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, rbp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; } diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 2d1769e..d2b617c 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -623,7 +623,7 @@ struct proc { after fork. */ uint64_t p_prev_runtime; /* (c) Resource usage accounting. */ struct racct *p_racct; /* (b) Resource accounting. */ - u_char p_throttled; /* (c) Flag for racct pcpu throttling */ + int p_throttled; /* (c) Flag for racct pcpu throttling */ struct vm_domain_policy p_vm_dom_policy; /* (c) process default VM domain, or -1 */ /* * An orphan is the child that has beed re-parented to the diff --git a/sys/sys/racct.h b/sys/sys/racct.h index 8d1f2fa..5330c63 100644 --- a/sys/sys/racct.h +++ b/sys/sys/racct.h @@ -42,6 +42,7 @@ #include #include +struct buf; struct proc; struct rctl_rule_link; struct ucred; @@ -71,7 +72,11 @@ struct ucred; #define RACCT_SHMSIZE 18 #define RACCT_WALLCLOCK 19 #define RACCT_PCTCPU 20 -#define RACCT_MAX RACCT_PCTCPU +#define RACCT_READBPS 21 +#define RACCT_WRITEBPS 22 +#define RACCT_READIOPS 23 +#define RACCT_WRITEIOPS 24 +#define RACCT_MAX RACCT_WRITEIOPS /* * Resource properties. @@ -153,6 +158,7 @@ SYSCTL_DECL(_kern_racct); int racct_add(struct proc *p, int resource, uint64_t amount); void racct_add_cred(struct ucred *cred, int resource, uint64_t amount); void racct_add_force(struct proc *p, int resource, uint64_t amount); +void racct_add_buf(struct proc *p, const struct buf *bufp, int is_write); int racct_set(struct proc *p, int resource, uint64_t amount); void racct_set_force(struct proc *p, int resource, uint64_t amount); void racct_sub(struct proc *p, int resource, uint64_t amount); @@ -170,6 +176,7 @@ void racct_proc_exit(struct proc *p); void racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred, struct ucred *newcred); void racct_move(struct racct *dest, struct racct *src); +void racct_proc_throttle(struct proc *p, int timeout); #else diff --git a/sys/sys/rctl.h b/sys/sys/rctl.h index e1a45a4..b9e6cd6 100644 --- a/sys/sys/rctl.h +++ b/sys/sys/rctl.h @@ -129,7 +129,8 @@ struct rctl_rule { #define RCTL_ACTION_DENY (RCTL_ACTION_SIGNAL_MAX + 1) #define RCTL_ACTION_LOG (RCTL_ACTION_SIGNAL_MAX + 2) #define RCTL_ACTION_DEVCTL (RCTL_ACTION_SIGNAL_MAX + 3) -#define RCTL_ACTION_MAX RCTL_ACTION_DEVCTL +#define RCTL_ACTION_THROTTLE (RCTL_ACTION_SIGNAL_MAX + 4) +#define RCTL_ACTION_MAX RCTL_ACTION_THROTTLE #define RCTL_AMOUNT_UNDEFINED -1 @@ -140,6 +141,7 @@ void rctl_rule_release(struct rctl_rule *rule); int rctl_rule_add(struct rctl_rule *rule); int rctl_rule_remove(struct rctl_rule *filter); int rctl_enforce(struct proc *p, int resource, uint64_t amount); +void rctl_throttle_decay(struct racct *racct, int resource); int64_t rctl_pcpu_available(const struct proc *p); uint64_t rctl_get_limit(struct proc *p, int resource); uint64_t rctl_get_available(struct proc *p, int resource); diff --git a/sys/ufs/ffs/ffs_inode.c b/sys/ufs/ffs/ffs_inode.c index c8dac1b..0202820 100644 --- a/sys/ufs/ffs/ffs_inode.c +++ b/sys/ufs/ffs/ffs_inode.c @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -659,6 +660,13 @@ ffs_indirtrunc(ip, lbn, dbn, lastbn, level, countp) vp = ITOV(ip); bp = getblk(vp, lbn, (int)fs->fs_bsize, 0, 0, 0); if ((bp->b_flags & B_CACHE) == 0) { +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; /* pay for read */ bp->b_iocmd = BIO_READ; bp->b_flags &= ~B_INVAL; diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index bedc8e1..bc0693a 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -6229,6 +6230,13 @@ setup_trunc_indir(freeblks, ip, lbn, lastlbn, blkno) vfs_busy_pages(bp, 0); bp->b_iooffset = dbtob(bp->b_blkno); bstrategy(bp); +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; error = bufwait(bp); if (error) { diff --git a/sys/ufs/ufs/ufs_bmap.c b/sys/ufs/ufs/ufs_bmap.c index 9819ef5..768298f 100644 --- a/sys/ufs/ufs/ufs_bmap.c +++ b/sys/ufs/ufs/ufs_bmap.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -223,6 +224,13 @@ ufs_bmaparray(vp, bn, bnp, nbp, runp, runb) vfs_busy_pages(bp, 0); bp->b_iooffset = dbtob(bp->b_blkno); bstrategy(bp); +#ifdef RACCT + if (racct_enable) { + PROC_LOCK(curproc); + racct_add_buf(curproc, bp, 0); + PROC_UNLOCK(curproc); + } +#endif /* RACCT */ curthread->td_ru.ru_inblock++; error = bufwait(bp); if (error) { diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index a7e3d37..13a5757 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -83,6 +83,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -994,6 +995,21 @@ vnode_locked: if (hardfault) { PCPU_INC(cnt.v_io_faults); curthread->td_ru.ru_majflt++; +#ifdef RACCT + if (racct_enable && fs.object->type == OBJT_VNODE) { + PROC_LOCK(curproc); + if ((fault_type & (VM_PROT_COPY | VM_PROT_WRITE)) != 0) { + racct_add_force(curproc, RACCT_WRITEBPS, + PAGE_SIZE + behind * PAGE_SIZE); + racct_add_force(curproc, RACCT_WRITEIOPS, 1); + } else { + racct_add_force(curproc, RACCT_READBPS, + PAGE_SIZE + ahead * PAGE_SIZE); + racct_add_force(curproc, RACCT_READIOPS, 1); + } + PROC_UNLOCK(curproc); + } +#endif } else curthread->td_ru.ru_minflt++; diff --git a/usr.bin/rctl/rctl.8 b/usr.bin/rctl/rctl.8 index ec97623..2d92d54 100644 --- a/usr.bin/rctl/rctl.8 +++ b/usr.bin/rctl/rctl.8 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 29, 2015 +.Dd January 30, 2016 .Dt RCTL 8 .Os .Sh NAME @@ -204,14 +204,22 @@ resource would be .It Sy shmsize Ta "SysV shared memory size, in bytes" .It Sy wallclock Ta "wallclock time, in seconds" .It Sy pcpu Ta "%CPU, in percents of a single CPU core" +.It Sy readbps Ta "filesystem reads, in bytes per second" +.It Sy writebps Ta "filesystem writes, in bytes per second" +.It Sy readiops Ta "filesystem reads, in operations per second" +.It Sy writeiops Ta "filesystem writes, in operations per second" .El .Sh ACTIONS .Bl -column -offset 3n "pseudoterminals" .It Em action .It Sy deny Ta deny the allocation; not supported for -.Sy cputime +.Sy cputime , +.Sy wallclock , +.Sy readbps , +.Sy writebps , +.Sy readiops , and -.Sy wallclock +.Sy writeiops .It Sy log Ta "log a warning to the console" .It Sy devctl Ta "send notification to" .Xr devd 8 @@ -228,6 +236,12 @@ send a signal to the offending process. See .Xr signal 3 for a list of supported signals +.It Sy throttle Ta "slow down process execution"; only supported for +.Sy readbps , +.Sy writebps , +.Sy readiops , +and +.Sy writeiops . .El .Pp Not all actions are supported for all resources. @@ -287,3 +301,22 @@ under sponsorship from the FreeBSD Foundation. Limiting .Sy memoryuse may kill the machine due to thrashing. +.Pp +The +.Sy readiops +and +.Sy writeiops +counters are only approximations. +Like +.Sy readbps +and +.Sy writebps , +they are calculated in the filesystem layer, where it is difficult +or even impossible to observe actual disk device operations. +.Pp +The +.Sy writebps +and +.Sy writeiops +resources generally account for writes to the filesystem cache, +not to actual devices. -- cgit v1.1 From 51ae60a9ec85a0f03cf9c12cbe9e656f79b70667 Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 05:31:22 +0000 Subject: hyperv: Use mb() instead of atomic_thread_fence_seq_cst() Since atomic_thread_fence_seq_cst() will become compiler fence on UP kernel. Reviewed by: kib, Dexuan Cui MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5852 --- sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c index 669a532..b3e0b9e 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -117,8 +117,12 @@ handled: * message_pending and EOMing. Otherwise, the EOMing will * not deliver any more messages * since there is no empty slot + * + * NOTE: + * mb() is used here, since atomic_thread_fence_seq_cst() + * will become compler fence on UP kernel. */ - atomic_thread_fence_seq_cst(); + mb(); if (msg->header.message_flags.u.message_pending) { /* @@ -190,8 +194,12 @@ hv_vmbus_isr(struct trapframe *frame) * message_pending and EOMing. Otherwise, the EOMing will * not deliver any more messages * since there is no empty slot + * + * NOTE: + * mb() is used here, since atomic_thread_fence_seq_cst() + * will become compler fence on UP kernel. */ - atomic_thread_fence_seq_cst(); + mb(); if (msg->header.message_flags.u.message_pending) { /* -- cgit v1.1 From 728fb34a75c56183c03f5ca278a29d04a298a692 Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 05:45:49 +0000 Subject: hyperv/vmbus: Use default mtx for channel message queue First of all sema_post() can't be called w/ spinlock, and the channel message queue processing is not on hot code path, i.e. spinlock is not necessary. Submitted by: Jun Su Reviewed by: sephe, Dexuan Cui MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5812 --- sys/dev/hyperv/vmbus/hv_channel.c | 24 ++++++++++++------------ sys/dev/hyperv/vmbus/hv_channel_mgmt.c | 16 ++++++++-------- sys/dev/hyperv/vmbus/hv_connection.c | 14 +++++++------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_channel.c b/sys/dev/hyperv/vmbus/hv_channel.c index 03a3457..46d15bf 100644 --- a/sys/dev/hyperv/vmbus/hv_channel.c +++ b/sys/dev/hyperv/vmbus/hv_channel.c @@ -270,12 +270,12 @@ hv_vmbus_channel_open( if (user_data_len) memcpy(open_msg->user_data, user_data, user_data_len); - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_INSERT_TAIL( &hv_vmbus_g_connection.channel_msg_anchor, open_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); ret = hv_vmbus_post_message( open_msg, sizeof(hv_vmbus_channel_open_channel)); @@ -302,12 +302,12 @@ hv_vmbus_channel_open( } cleanup: - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_REMOVE( &hv_vmbus_g_connection.channel_msg_anchor, open_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); sema_destroy(&open_info->wait_sema); free(open_info, M_DEVBUF); @@ -496,13 +496,13 @@ hv_vmbus_channel_establish_gpadl( gpadl_msg->child_rel_id = channel->offer_msg.child_rel_id; gpadl_msg->gpadl = next_gpadl_handle; - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_INSERT_TAIL( &hv_vmbus_g_connection.channel_msg_anchor, msg_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); ret = hv_vmbus_post_message( gpadl_msg, @@ -541,10 +541,10 @@ hv_vmbus_channel_establish_gpadl( cleanup: - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_REMOVE(&hv_vmbus_g_connection.channel_msg_anchor, msg_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); sema_destroy(&msg_info->wait_sema); free(msg_info, M_DEVBUF); @@ -583,10 +583,10 @@ hv_vmbus_channel_teardown_gpdal( msg->child_rel_id = channel->offer_msg.child_rel_id; msg->gpadl = gpadl_handle; - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_INSERT_TAIL(&hv_vmbus_g_connection.channel_msg_anchor, info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); ret = hv_vmbus_post_message(msg, sizeof(hv_vmbus_channel_gpadl_teardown)); @@ -599,10 +599,10 @@ cleanup: /* * Received a torndown response */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_REMOVE(&hv_vmbus_g_connection.channel_msg_anchor, info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); sema_destroy(&info->wait_sema); free(info, M_DEVBUF); diff --git a/sys/dev/hyperv/vmbus/hv_channel_mgmt.c b/sys/dev/hyperv/vmbus/hv_channel_mgmt.c index 30f2504..42d3750 100644 --- a/sys/dev/hyperv/vmbus/hv_channel_mgmt.c +++ b/sys/dev/hyperv/vmbus/hv_channel_mgmt.c @@ -492,7 +492,7 @@ vmbus_channel_on_open_result(hv_vmbus_channel_msg_header* hdr) /* * Find the open msg, copy the result and signal/unblock the wait event */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor, msg_list_entry) { @@ -510,7 +510,7 @@ vmbus_channel_on_open_result(hv_vmbus_channel_msg_header* hdr) } } } - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); } @@ -534,7 +534,7 @@ vmbus_channel_on_gpadl_created(hv_vmbus_channel_msg_header* hdr) /* Find the establish msg, copy the result and signal/unblock * the wait event */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor, msg_list_entry) { request_header = (hv_vmbus_channel_msg_header*) msg_info->msg; @@ -553,7 +553,7 @@ vmbus_channel_on_gpadl_created(hv_vmbus_channel_msg_header* hdr) } } } - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); } /** @@ -578,7 +578,7 @@ vmbus_channel_on_gpadl_torndown(hv_vmbus_channel_msg_header* hdr) * wait event. */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor, msg_list_entry) { @@ -598,7 +598,7 @@ vmbus_channel_on_gpadl_torndown(hv_vmbus_channel_msg_header* hdr) } } } - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); } /** @@ -618,7 +618,7 @@ vmbus_channel_on_version_response(hv_vmbus_channel_msg_header* hdr) versionResponse = (hv_vmbus_channel_version_response*)hdr; - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_FOREACH(msg_info, &hv_vmbus_g_connection.channel_msg_anchor, msg_list_entry) { requestHeader = (hv_vmbus_channel_msg_header*) msg_info->msg; @@ -632,7 +632,7 @@ vmbus_channel_on_version_response(hv_vmbus_channel_msg_header* hdr) sema_post(&msg_info->wait_sema); } } - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); } diff --git a/sys/dev/hyperv/vmbus/hv_connection.c b/sys/dev/hyperv/vmbus/hv_connection.c index e170298..44effef 100644 --- a/sys/dev/hyperv/vmbus/hv_connection.c +++ b/sys/dev/hyperv/vmbus/hv_connection.c @@ -96,26 +96,26 @@ hv_vmbus_negotiate_version(hv_vmbus_channel_msg_info *msg_info, * Add to list before we send the request since we may receive the * response before returning from this routine */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_INSERT_TAIL( &hv_vmbus_g_connection.channel_msg_anchor, msg_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); ret = hv_vmbus_post_message( msg, sizeof(hv_vmbus_channel_initiate_contact)); if (ret != 0) { - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_REMOVE( &hv_vmbus_g_connection.channel_msg_anchor, msg_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); return (ret); } @@ -124,12 +124,12 @@ hv_vmbus_negotiate_version(hv_vmbus_channel_msg_info *msg_info, */ ret = sema_timedwait(&msg_info->wait_sema, 5 * hz); /* KYS 5 seconds */ - mtx_lock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_lock(&hv_vmbus_g_connection.channel_msg_lock); TAILQ_REMOVE( &hv_vmbus_g_connection.channel_msg_anchor, msg_info, msg_list_entry); - mtx_unlock_spin(&hv_vmbus_g_connection.channel_msg_lock); + mtx_unlock(&hv_vmbus_g_connection.channel_msg_lock); /** * Check if successful @@ -166,7 +166,7 @@ hv_vmbus_connect(void) { TAILQ_INIT(&hv_vmbus_g_connection.channel_msg_anchor); mtx_init(&hv_vmbus_g_connection.channel_msg_lock, "vmbus channel msg", - NULL, MTX_SPIN); + NULL, MTX_DEF); TAILQ_INIT(&hv_vmbus_g_connection.channel_anchor); mtx_init(&hv_vmbus_g_connection.channel_lock, "vmbus channel", -- cgit v1.1 From 4ca2f015b050cde68fe91a8138b89220d58c27cc Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 05:56:22 +0000 Subject: hyperv: Typo in r297634 Noticed by: hiren MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c index b3e0b9e..3f6e019 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -120,7 +120,7 @@ handled: * * NOTE: * mb() is used here, since atomic_thread_fence_seq_cst() - * will become compler fence on UP kernel. + * will become compiler fence on UP kernel. */ mb(); @@ -197,7 +197,7 @@ hv_vmbus_isr(struct trapframe *frame) * * NOTE: * mb() is used here, since atomic_thread_fence_seq_cst() - * will become compler fence on UP kernel. + * will become compiler fence on UP kernel. */ mb(); -- cgit v1.1 From 27fc2724b62d2680680bb625ce5191f46c93311b Mon Sep 17 00:00:00 2001 From: ngie Date: Thu, 7 Apr 2016 06:21:33 +0000 Subject: Disable the NetBSD-specific EFAULT requirements test in gettimeofday_err FreeBSD doesn't specifically list this as a supported error, and in some configurations/versions of FreeBSD, this test will segfault as the memory address might be evaluated in userspace, instead of in kernel space like in NetBSD. MFC after: 1 week Sponsored by: EMC / Isilon Storage Division --- contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c b/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c index 1cf303b..4d82a26 100644 --- a/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c +++ b/contrib/netbsd-tests/lib/libc/sys/t_gettimeofday.c @@ -46,9 +46,11 @@ ATF_TC_HEAD(gettimeofday_err, tc) ATF_TC_BODY(gettimeofday_err, tc) { +#ifdef __NetBSD__ errno = 0; ATF_REQUIRE_ERRNO(EFAULT, gettimeofday((void *)-1, NULL) != 0); +#endif } ATF_TC(gettimeofday_mono); -- cgit v1.1 From c20a763eab10615481ec25d82f29622a5cba4d46 Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 06:36:03 +0000 Subject: x86: Allow interrupt vector allocation/free even on UP It is needed by the hypervisor FreeBSD guest to allocate/free private interrupt vectors. Reviewed by: kib, jhb, Dexuan Cui Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5849 --- sys/x86/x86/local_apic.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 82efae3..5830b77 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -321,9 +321,9 @@ static int native_lapic_set_lvt_triggermode(u_int apic_id, u_int lvt, static void native_lapic_ipi_raw(register_t icrlo, u_int dest); static void native_lapic_ipi_vectored(u_int vector, int dest); static int native_lapic_ipi_wait(int delay); +#endif /* SMP */ static int native_lapic_ipi_alloc(inthand_t *ipifunc); static void native_lapic_ipi_free(int vector); -#endif /* SMP */ struct apic_ops apic_ops = { .create = native_lapic_create, @@ -350,9 +350,9 @@ struct apic_ops apic_ops = { .ipi_raw = native_lapic_ipi_raw, .ipi_vectored = native_lapic_ipi_vectored, .ipi_wait = native_lapic_ipi_wait, +#endif .ipi_alloc = native_lapic_ipi_alloc, .ipi_free = native_lapic_ipi_free, -#endif .set_lvt_mask = native_lapic_set_lvt_mask, .set_lvt_mode = native_lapic_set_lvt_mode, .set_lvt_polarity = native_lapic_set_lvt_polarity, @@ -1904,6 +1904,8 @@ native_lapic_ipi_vectored(u_int vector, int dest) #endif /* DETECT_DEADLOCK */ } +#endif /* SMP */ + /* * Since the IDT is shared by all CPUs the IPI slot update needs to be globally * visible. @@ -1958,5 +1960,3 @@ native_lapic_ipi_free(int vector) setidt(vector, &IDTVEC(rsvd), SDT_APICT, SEL_KPL, GSEL_APIC); mtx_unlock_spin(&icu_lock); } - -#endif /* SMP */ -- cgit v1.1 From cc3c77c93e2a2796e1953780ac00fcb78a0c8958 Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 07:00:00 +0000 Subject: xen: Set ipi_{alloc,free} even for UP This keeps XEN apic_ops aligned w/ x86's. Suggested by: kib, jhb Reviewed by: jhb, royger Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5871 --- sys/x86/xen/xen_apic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/x86/xen/xen_apic.c b/sys/x86/xen/xen_apic.c index 9400378..4d7a39b 100644 --- a/sys/x86/xen/xen_apic.c +++ b/sys/x86/xen/xen_apic.c @@ -296,6 +296,7 @@ xen_pv_lapic_ipi_wait(int delay) XEN_APIC_UNSUPPORTED; return (0); } +#endif /* SMP */ static int xen_pv_lapic_ipi_alloc(inthand_t *ipifunc) @@ -311,7 +312,6 @@ xen_pv_lapic_ipi_free(int vector) XEN_APIC_UNSUPPORTED; } -#endif /* SMP */ static int xen_pv_lapic_set_lvt_mask(u_int apic_id, u_int lvt, u_char masked) @@ -372,9 +372,9 @@ struct apic_ops xen_apic_ops = { .ipi_raw = xen_pv_lapic_ipi_raw, .ipi_vectored = xen_pv_lapic_ipi_vectored, .ipi_wait = xen_pv_lapic_ipi_wait, +#endif .ipi_alloc = xen_pv_lapic_ipi_alloc, .ipi_free = xen_pv_lapic_ipi_free, -#endif .set_lvt_mask = xen_pv_lapic_set_lvt_mask, .set_lvt_mode = xen_pv_lapic_set_lvt_mode, .set_lvt_polarity = xen_pv_lapic_set_lvt_polarity, -- cgit v1.1 From 018d7a211836a779a9658847a01b4972f5eded2f Mon Sep 17 00:00:00 2001 From: sephe Date: Thu, 7 Apr 2016 07:12:57 +0000 Subject: hyperv: Use lapic_{alloc,free}_ipi to allocate private interrupt vector Suggested by: jhb Reviewed by: Dexuan Cui , Jun Su Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5850 --- sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c | 86 +++-------------------------- sys/dev/hyperv/vmbus/hv_vmbus_priv.h | 4 +- 2 files changed, 11 insertions(+), 79 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c index 3f6e019..8a07e45 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c +++ b/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c @@ -391,80 +391,9 @@ vmbus_probe(device_t dev) { } #ifdef HYPERV -extern inthand_t IDTVEC(rsvd), IDTVEC(hv_vmbus_callback); - -/** - * @brief Find a free IDT slot and setup the interrupt handler. - */ -static int -vmbus_vector_alloc(void) -{ - int vector; - uintptr_t func; - struct gate_descriptor *ip; - - /* - * Search backwards form the highest IDT vector available for use - * as vmbus channel callback vector. We install 'hv_vmbus_callback' - * handler at that vector and use it to interrupt vcpus. - */ - vector = APIC_SPURIOUS_INT; - while (--vector >= APIC_IPI_INTS) { - ip = &idt[vector]; - func = ((long)ip->gd_hioffset << 16 | ip->gd_looffset); - if (func == (uintptr_t)&IDTVEC(rsvd)) { -#ifdef __i386__ - setidt(vector , IDTVEC(hv_vmbus_callback), SDT_SYS386IGT, - SEL_KPL, GSEL(GCODE_SEL, SEL_KPL)); -#else - setidt(vector , IDTVEC(hv_vmbus_callback), SDT_SYSIGT, - SEL_KPL, 0); +extern inthand_t IDTVEC(hv_vmbus_callback); #endif - return (vector); - } - } - return (0); -} - -/** - * @brief Restore the IDT slot to rsvd. - */ -static void -vmbus_vector_free(int vector) -{ - uintptr_t func; - struct gate_descriptor *ip; - - if (vector == 0) - return; - - KASSERT(vector >= APIC_IPI_INTS && vector < APIC_SPURIOUS_INT, - ("invalid vector %d", vector)); - - ip = &idt[vector]; - func = ((long)ip->gd_hioffset << 16 | ip->gd_looffset); - KASSERT(func == (uintptr_t)&IDTVEC(hv_vmbus_callback), - ("invalid vector %d", vector)); - - setidt(vector, IDTVEC(rsvd), SDT_SYSIGT, SEL_KPL, 0); -} - -#else /* HYPERV */ - -static int -vmbus_vector_alloc(void) -{ - return(0); -} - -static void -vmbus_vector_free(int vector) -{ -} - -#endif /* HYPERV */ - /** * @brief Main vmbus driver initialization routine. * @@ -497,12 +426,15 @@ vmbus_bus_init(void) return (ret); } +#ifdef HYPERV /* * Find a free IDT slot for vmbus callback. */ - hv_vmbus_g_context.hv_cb_vector = vmbus_vector_alloc(); - - if (hv_vmbus_g_context.hv_cb_vector == 0) { + hv_vmbus_g_context.hv_cb_vector = lapic_ipi_alloc(IDTVEC(hv_vmbus_callback)); +#else + hv_vmbus_g_context.hv_cb_vector = -1; +#endif + if (hv_vmbus_g_context.hv_cb_vector < 0) { if(bootverbose) printf("Error VMBUS: Cannot find free IDT slot for " "vmbus callback!\n"); @@ -595,7 +527,7 @@ vmbus_bus_init(void) } } - vmbus_vector_free(hv_vmbus_g_context.hv_cb_vector); + lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector); cleanup: hv_vmbus_cleanup(); @@ -663,7 +595,7 @@ vmbus_bus_exit(void) } } - vmbus_vector_free(hv_vmbus_g_context.hv_cb_vector); + lapic_ipi_free(hv_vmbus_g_context.hv_cb_vector); return; } diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h index 1a0ed04..bc625a0 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h +++ b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h @@ -208,10 +208,10 @@ typedef struct { struct taskqueue *hv_msg_tq[MAXCPU]; struct task hv_msg_task[MAXCPU]; /* - * Host use this vector to intrrupt guest for vmbus channel + * Host use this vector to interrupt guest for vmbus channel * event and msg. */ - unsigned int hv_cb_vector; + int hv_cb_vector; } hv_vmbus_context; /* -- cgit v1.1 From 50189484f0e997ff7e620cf0a89c1ebae481e8ec Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 07:22:22 +0000 Subject: This revision adds support to if_rt for more SoCs. The SoCs I've tried the driver with include the following: RT3050, RT5350, RT3662, RT3883, MT7620, MT7621, MT7688. On boards, based on the above SoCs traffic is passing through correctly and the boards survive a flood ping with very little or no drops (drops may be caused elsewhere in my test setup, however). One issue still remains and needs to be fixed in the future: if_rt does not survive an ifconfig rt0 down/ifconfig rt0 up cycle. This issue existed before this commit as well, however. Reviewed by: ray Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5864 --- sys/dev/rt/if_rt.c | 114 +++++++++++++++++++++++++++++++------------------- sys/dev/rt/if_rtvar.h | 13 ++++++ 2 files changed, 83 insertions(+), 44 deletions(-) diff --git a/sys/dev/rt/if_rt.c b/sys/dev/rt/if_rt.c index 8057b2c..ff08748 100644 --- a/sys/dev/rt/if_rt.c +++ b/sys/dev/rt/if_rt.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015, Stanislav Galabov + * Copyright (c) 2015-2016, Stanislav Galabov * Copyright (c) 2014, Aleksandr A. Mityaev * Copyright (c) 2011, Aleksandr Rybalko * based on hard work @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -69,8 +70,10 @@ __FBSDID("$FreeBSD$"); #include #include +#if 0 #include #include +#endif #ifdef IF_RT_PHY_SUPPORT #include "miibus_if.h" @@ -89,19 +92,20 @@ __FBSDID("$FreeBSD$"); #define RT_TX_WATCHDOG_TIMEOUT 5 #define RT_CHIPID_RT3050 0x3050 -#define RT_CHIPID_RT3052 0x3052 #define RT_CHIPID_RT5350 0x5350 -#define RT_CHIPID_RT6855 0x6855 #define RT_CHIPID_MT7620 0x7620 +#define RT_CHIPID_MT7621 0x7621 #ifdef FDT /* more specific and new models should go first */ static const struct ofw_compat_data rt_compat_data[] = { - { "ralink,rt6855-eth", (uintptr_t)RT_CHIPID_RT6855 }, - { "ralink,rt5350-eth", (uintptr_t)RT_CHIPID_RT5350 }, - { "ralink,rt3052-eth", (uintptr_t)RT_CHIPID_RT3052 }, - { "ralink,rt305x-eth", (uintptr_t)RT_CHIPID_RT3050 }, - { NULL, (uintptr_t)NULL } + { "ralink,rt3050-eth", RT_CHIPID_RT3050 }, + { "ralink,rt3352-eth", RT_CHIPID_RT3050 }, + { "ralink,rt3883-eth", RT_CHIPID_RT3050 }, + { "ralink,rt5350-eth", RT_CHIPID_RT5350 }, + { "ralink,mt7620a-eth", RT_CHIPID_MT7620 }, + { "ralink,mt7621-eth", RT_CHIPID_MT7621 }, + { NULL, 0 } }; #endif @@ -182,21 +186,23 @@ rt_probe(device_t dev) const struct ofw_compat_data * cd; cd = ofw_bus_search_compatible(dev, rt_compat_data); - if (cd->ocd_data == (uintptr_t)NULL) + if (cd->ocd_data == 0) return (ENXIO); sc->rt_chipid = (unsigned int)(cd->ocd_data); #else #if defined(MT7620) sc->rt_chipid = RT_CHIPID_MT7620; +#elif defined(MT7621) + sc->rt_chipid = RT_CHIPID_MT7621; #elif defined(RT5350) sc->rt_chipid = RT_CHIPID_RT5350; #else sc->rt_chipid = RT_CHIPID_RT3050; #endif #endif - snprintf(buf, sizeof(buf), "Ralink RT%x onChip Ethernet driver", - sc->rt_chipid); + snprintf(buf, sizeof(buf), "Ralink %cT%x onChip Ethernet driver", + sc->rt_chipid >= 0x7600 ? 'M' : 'R', sc->rt_chipid); device_set_desc_copy(dev, buf); return (BUS_PROBE_GENERIC); } @@ -373,12 +379,26 @@ rt_attach(device_t dev) /* Reset hardware */ reset_freng(sc); + + + if (sc->rt_chipid == RT_CHIPID_MT7620) { + sc->csum_fail_ip = MT7620_RXD_SRC_IP_CSUM_FAIL; + sc->csum_fail_l4 = MT7620_RXD_SRC_L4_CSUM_FAIL; + } else if (sc->rt_chipid == RT_CHIPID_MT7621) { + sc->csum_fail_ip = MT7621_RXD_SRC_IP_CSUM_FAIL; + sc->csum_fail_l4 = MT7621_RXD_SRC_L4_CSUM_FAIL; + } else { + sc->csum_fail_ip = RT305X_RXD_SRC_IP_CSUM_FAIL; + sc->csum_fail_l4 = RT305X_RXD_SRC_L4_CSUM_FAIL; + } /* Fill in soc-specific registers map */ switch(sc->rt_chipid) { case RT_CHIPID_MT7620: + case RT_CHIPID_MT7621: case RT_CHIPID_RT5350: - device_printf(dev, "RT%x Ethernet MAC (rev 0x%08x)\n", + device_printf(dev, "%cT%x Ethernet MAC (rev 0x%08x)\n", + sc->rt_chipid >= 0x7600 ? 'M' : 'R', sc->rt_chipid, sc->mac_rev); /* RT5350: No GDMA, PSE, CDMA, PPE */ RT_WRITE(sc, GE_PORT_BASE + 0x0C00, // UDPCS, TCPCS, IPCS=1 @@ -406,10 +426,6 @@ rt_attach(device_t dev) sc->int_rx_done_mask=RT5350_INT_RXQ0_DONE; sc->int_tx_done_mask=RT5350_INT_TXQ0_DONE; break; - case RT_CHIPID_RT6855: - device_printf(dev, "RT6855 Ethernet MAC (rev 0x%08x)\n", - sc->mac_rev); - break; default: device_printf(dev, "RT305XF Ethernet MAC (rev 0x%08x)\n", sc->mac_rev); @@ -533,7 +549,8 @@ rt_attach(device_t dev) /* set up interrupt */ error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE, NULL, (sc->rt_chipid == RT_CHIPID_RT5350 || - sc->rt_chipid == RT_CHIPID_MT7620) ? rt_rt5350_intr : rt_intr, + sc->rt_chipid == RT_CHIPID_MT7620 || + sc->rt_chipid == RT_CHIPID_MT7621) ? rt_rt5350_intr : rt_intr, sc, &sc->irqh); if (error != 0) { printf("%s: could not set up interrupt\n", @@ -763,7 +780,7 @@ rt_init_locked(void *priv) //rt305x_sysctl_set(SYSCTL_RSTCTRL, SYSCTL_RSTCTRL_FRENG); /* Fwd to CPU (uni|broad|multi)cast and Unknown */ - if(sc->rt_chipid == RT_CHIPID_RT3050 || sc->rt_chipid == RT_CHIPID_RT3052) + if(sc->rt_chipid == RT_CHIPID_RT3050) RT_WRITE(sc, GDMA1_BASE + GDMA_FWD_CFG, ( GDM_ICS_EN | /* Enable IP Csum */ @@ -831,7 +848,8 @@ rt_init_locked(void *priv) /* write back DDONE, 16byte burst enable RX/TX DMA */ tmp = FE_TX_WB_DDONE | FE_DMA_BT_SIZE16 | FE_RX_DMA_EN | FE_TX_DMA_EN; - if (sc->rt_chipid == RT_CHIPID_MT7620) + if (sc->rt_chipid == RT_CHIPID_MT7620 || + sc->rt_chipid == RT_CHIPID_MT7621) tmp |= (1<<31); RT_WRITE(sc, sc->pdma_glo_cfg, tmp); @@ -843,7 +861,8 @@ rt_init_locked(void *priv) /* enable interrupts */ if (sc->rt_chipid == RT_CHIPID_RT5350 || - sc->rt_chipid == RT_CHIPID_MT7620) + sc->rt_chipid == RT_CHIPID_MT7620 || + sc->rt_chipid == RT_CHIPID_MT7621) tmp = RT5350_INT_TX_COHERENT | RT5350_INT_RX_COHERENT | RT5350_INT_TXQ3_DONE | @@ -945,7 +964,8 @@ rt_stop_locked(void *priv) RT_WRITE(sc, sc->fe_int_enable, 0); if(sc->rt_chipid == RT_CHIPID_RT5350 || - sc->rt_chipid == RT_CHIPID_MT7620) { + sc->rt_chipid == RT_CHIPID_MT7620 || + sc->rt_chipid == RT_CHIPID_MT7621) { } else { /* reset adapter */ RT_WRITE(sc, GE_PORT_BASE + FE_RST_GLO, PSE_RESET); @@ -1055,22 +1075,29 @@ rt_tx_data(struct rt_softc *sc, struct mbuf *m, int qid) /* TODO: this needs to be refined as MT7620 for example has * a different word3 layout than RT305x and RT5350 (the last - * one doesn't use word3 at all). + * one doesn't use word3 at all). And so does MT7621... */ - /* Set destination */ - if (sc->rt_chipid != RT_CHIPID_MT7620) - desc->dst = (TXDSCR_DST_PORT_GDMA1); - - if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) - desc->dst |= (TXDSCR_IP_CSUM_GEN|TXDSCR_UDP_CSUM_GEN| - TXDSCR_TCP_CSUM_GEN); - /* Set queue id */ - desc->qn = qid; - /* No PPPoE */ - desc->pppoe = 0; - /* No VLAN */ - desc->vid = 0; + if (sc->rt_chipid != RT_CHIPID_MT7621) { + /* Set destination */ + if (sc->rt_chipid != RT_CHIPID_MT7620) + desc->dst = (TXDSCR_DST_PORT_GDMA1); + + if ((ifp->if_capenable & IFCAP_TXCSUM) != 0) + desc->dst |= (TXDSCR_IP_CSUM_GEN | + TXDSCR_UDP_CSUM_GEN | TXDSCR_TCP_CSUM_GEN); + /* Set queue id */ + desc->qn = qid; + /* No PPPoE */ + desc->pppoe = 0; + /* No VLAN */ + desc->vid = 0; + } else { + desc->vid = 0; + desc->pppoe = 0; + desc->qn = 0; + desc->dst = 2; + } desc->sdp0 = htole32(dma_seg[i].ds_addr); desc->sdl0 = htole16(dma_seg[i].ds_len | @@ -1714,7 +1741,8 @@ rt_tx_done_task(void *context, int pending) ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; if(sc->rt_chipid == RT_CHIPID_RT5350 || - sc->rt_chipid == RT_CHIPID_MT7620) + sc->rt_chipid == RT_CHIPID_MT7620 || + sc->rt_chipid == RT_CHIPID_MT7621) intr_mask = ( RT5350_INT_TXQ3_DONE | RT5350_INT_TXQ2_DONE | @@ -1870,15 +1898,13 @@ rt_rx_eof(struct rt_softc *sc, struct rt_softc_rx_ring *ring, int limit) BUS_DMASYNC_PREREAD); m = data->m; - desc_flags = desc->src; + desc_flags = desc->word3; data->m = mnew; /* Add 2 for proper align of RX IP header */ desc->sdp0 = htole32(segs[0].ds_addr+2); desc->sdl0 = htole32(segs[0].ds_len-2); - desc->src = 0; - desc->ai = 0; - desc->foe = 0; + desc->word3 = 0; RT_DPRINTF(sc, RT_DEBUG_RX, "Rx frame: rxdesc flags=0x%08x\n", desc_flags); @@ -1891,8 +1917,7 @@ rt_rx_eof(struct rt_softc *sc, struct rt_softc_rx_ring *ring, int limit) /* check for crc errors */ if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) { /*check for valid checksum*/ - if (desc_flags & (RXDSXR_SRC_IP_CSUM_FAIL| - RXDSXR_SRC_L4_CSUM_FAIL)) { + if (desc_flags & (sc->csum_fail_ip|sc->csum_fail_l4)) { RT_DPRINTF(sc, RT_DEBUG_RX, "rxdesc: crc error\n"); @@ -1903,7 +1928,7 @@ rt_rx_eof(struct rt_softc *sc, struct rt_softc_rx_ring *ring, int limit) goto skip; } } - if ((desc_flags & RXDSXR_SRC_IP_CSUM_FAIL) != 0) { + if ((desc_flags & sc->csum_fail_ip) == 0) { m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED; m->m_pkthdr.csum_flags |= CSUM_IP_VALID; m->m_pkthdr.csum_data = 0xffff; @@ -2031,7 +2056,8 @@ rt_watchdog(struct rt_softc *sc) int ntries; #endif if(sc->rt_chipid != RT_CHIPID_RT5350 && - sc->rt_chipid != RT_CHIPID_MT7620) { + sc->rt_chipid != RT_CHIPID_MT7620 && + sc->rt_chipid != RT_CHIPID_MT7621) { tmp = RT_READ(sc, PSE_BASE + CDMA_OQ_STA); RT_DPRINTF(sc, RT_DEBUG_WATCHDOG, diff --git a/sys/dev/rt/if_rtvar.h b/sys/dev/rt/if_rtvar.h index f46574f..b2869c5 100644 --- a/sys/dev/rt/if_rtvar.h +++ b/sys/dev/rt/if_rtvar.h @@ -115,12 +115,21 @@ struct rt_txdesc } __packed; #define RT_RXDESC_SDL0_DDONE (1 << 15) + +#define RT305X_RXD_SRC_L4_CSUM_FAIL (1 << 28) +#define RT305X_RXD_SRC_IP_CSUM_FAIL (1 << 29) +#define MT7620_RXD_SRC_L4_CSUM_FAIL (1 << 22) +#define MT7620_RXD_SRC_IP_CSUM_FAIL (1 << 25) +#define MT7621_RXD_SRC_L4_CSUM_FAIL (1 << 23) +#define MT7621_RXD_SRC_IP_CSUM_FAIL (1 << 26) + struct rt_rxdesc { uint32_t sdp0; uint16_t sdl1; uint16_t sdl0; uint32_t sdp1; +#if 0 uint16_t foe; #define RXDSXR_FOE_ENTRY_VALID 0x40 #define RXDSXR_FOE_ENTRY_MASK 0x3f @@ -134,6 +143,8 @@ struct rt_rxdesc #define RXDSXR_SRC_L4_CSUM_FAIL 0x10 #define RXDSXR_SRC_AIS 0x08 #define RXDSXR_SRC_PORT_MASK 0x07 +#endif + uint32_t word3; } __packed; struct rt_softc_rx_data @@ -263,6 +274,8 @@ struct rt_softc uint32_t rt_chipid; /* chip specific registers config */ int rx_ring_count; + uint32_t csum_fail_l4; + uint32_t csum_fail_ip; uint32_t int_rx_done_mask; uint32_t int_tx_done_mask; uint32_t delay_int_cfg; -- cgit v1.1 From 28010098ff581463a55af664c04cb7e237c28156 Mon Sep 17 00:00:00 2001 From: rrs Date: Thu, 7 Apr 2016 09:10:34 +0000 Subject: This is work done by Michael Tuexen and myself at the IETF. This adds the new I-Data (Interleaved Data) message. This allows a user to be able to have complete freedom from Head Of Line blocking that was previously there due to the in-ability to send multiple large messages without the TSN's being in sequence. The code as been tested with Michaels various packet drill scripts as well as inter-networking between the IETF's location in Argentina and Germany. --- sys/netinet/sctp.h | 6 +- sys/netinet/sctp_constants.h | 23 +- sys/netinet/sctp_dtrace_define.h | 176 +-- sys/netinet/sctp_header.h | 23 + sys/netinet/sctp_indata.c | 3006 ++++++++++++++++++++------------------ sys/netinet/sctp_indata.h | 20 +- sys/netinet/sctp_input.c | 71 +- sys/netinet/sctp_os_bsd.h | 4 +- sys/netinet/sctp_output.c | 218 ++- sys/netinet/sctp_pcb.c | 157 +- sys/netinet/sctp_pcb.h | 3 + sys/netinet/sctp_structs.h | 36 +- sys/netinet/sctp_sysctl.h | 2 +- sys/netinet/sctp_uio.h | 13 +- sys/netinet/sctp_usrreq.c | 72 + sys/netinet/sctp_var.h | 14 +- sys/netinet/sctputil.c | 116 +- sys/netinet/sctputil.h | 3 + 18 files changed, 2242 insertions(+), 1721 deletions(-) diff --git a/sys/netinet/sctp.h b/sys/netinet/sctp.h index 784c1d4..ec42cff 100644 --- a/sys/netinet/sctp.h +++ b/sys/netinet/sctp.h @@ -196,6 +196,9 @@ struct sctp_paramhdr { #define SCTP_SS_VALUE 0x00001204 #define SCTP_CC_OPTION 0x00001205 /* Options for CC * modules */ +/* For I-DATA */ +#define SCTP_INTERLEAVING_SUPPORTED 0x00001206 + /* read only */ #define SCTP_GET_SNDBUF_USE 0x00001101 #define SCTP_GET_STAT_LOG 0x00001103 @@ -452,6 +455,7 @@ struct sctp_error_auth_invalid_hmac { /* EY nr_sack chunk id*/ #define SCTP_NR_SELECTIVE_ACK 0x10 /************0x40 series ***********/ +#define SCTP_IDATA 0x40 /************0x80 series ***********/ /* RFC5061 */ #define SCTP_ASCONF_ACK 0x80 @@ -467,7 +471,7 @@ struct sctp_error_auth_invalid_hmac { #define SCTP_FORWARD_CUM_TSN 0xc0 /* RFC5061 */ #define SCTP_ASCONF 0xc1 - +#define SCTP_IFORWARD_CUM_TSN 0xc2 /* ABORT and SHUTDOWN COMPLETE FLAG */ #define SCTP_HAD_NO_TCB 0x01 diff --git a/sys/netinet/sctp_constants.h b/sys/netinet/sctp_constants.h index 497dde6..6c1a014 100644 --- a/sys/netinet/sctp_constants.h +++ b/sys/netinet/sctp_constants.h @@ -386,8 +386,8 @@ __FBSDID("$FreeBSD$"); /* align to 32-bit sizes */ #define SCTP_SIZE32(x) ((((x) + 3) >> 2) << 2) -#define IS_SCTP_CONTROL(a) ((a)->chunk_type != SCTP_DATA) -#define IS_SCTP_DATA(a) ((a)->chunk_type == SCTP_DATA) +#define IS_SCTP_CONTROL(a) (((a)->chunk_type != SCTP_DATA) && ((a)->chunk_type != SCTP_IDATA)) +#define IS_SCTP_DATA(a) (((a)->chunk_type == SCTP_DATA) || ((a)->chunk_type == SCTP_IDATA)) /* SCTP parameter types */ @@ -886,12 +886,19 @@ __FBSDID("$FreeBSD$"); /* modular comparison */ /* See RFC 1982 for details. */ -#define SCTP_SSN_GT(a, b) (((a < b) && ((uint16_t)(b - a) > (1U<<15))) || \ - ((a > b) && ((uint16_t)(a - b) < (1U<<15)))) -#define SCTP_SSN_GE(a, b) (SCTP_SSN_GT(a, b) || (a == b)) -#define SCTP_TSN_GT(a, b) (((a < b) && ((uint32_t)(b - a) > (1U<<31))) || \ - ((a > b) && ((uint32_t)(a - b) < (1U<<31)))) -#define SCTP_TSN_GE(a, b) (SCTP_TSN_GT(a, b) || (a == b)) +#define SCTP_UINT16_GT(a, b) (((a < b) && ((uint16_t)(b - a) > (1U<<15))) || \ + ((a > b) && ((uint16_t)(a - b) < (1U<<15)))) +#define SCTP_UINT16_GE(a, b) (SCTP_UINT16_GT(a, b) || (a == b)) +#define SCTP_UINT32_GT(a, b) (((a < b) && ((uint32_t)(b - a) > (1U<<31))) || \ + ((a > b) && ((uint32_t)(a - b) < (1U<<31)))) +#define SCTP_UINT32_GE(a, b) (SCTP_UINT32_GT(a, b) || (a == b)) + +#define SCTP_SSN_GT(a, b) SCTP_UINT16_GT(a, b) +#define SCTP_SSN_GE(a, b) SCTP_UINT16_GE(a, b) +#define SCTP_TSN_GT(a, b) SCTP_UINT32_GT(a, b) +#define SCTP_TSN_GE(a, b) SCTP_UINT32_GE(a, b) +#define SCTP_MSGID_GT(o, a, b) ((o == 1) ? SCTP_UINT16_GT((uint16_t)a, (uint16_t)b) : SCTP_UINT32_GT(a, b)) +#define SCTP_MSGID_GE(o, a, b) ((o == 1) ? SCTP_UINT16_GE((uint16_t)a, (uint16_t)b) : SCTP_UINT32_GE(a, b)) /* Mapping array manipulation routines */ #define SCTP_IS_TSN_PRESENT(arry, gap) ((arry[(gap >> 3)] >> (gap & 0x07)) & 0x01) diff --git a/sys/netinet/sctp_dtrace_define.h b/sys/netinet/sctp_dtrace_define.h index f34effb..19f44da 100644 --- a/sys/netinet/sctp_dtrace_define.h +++ b/sys/netinet/sctp_dtrace_define.h @@ -45,131 +45,131 @@ SDT_PROVIDER_DEFINE(sctp); /********************************************************/ /* Initial */ SDT_PROBE_DEFINE5(sctp, cwnd, net, init, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* ACK-INCREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, ack, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* ACK-INCREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, rttvar, - "uint64_t", /* The Vtag << 32 | localport << 16 | remoteport */ - "uint64_t", /* obw | nbw */ - "uint64_t", /* bwrtt | newrtt */ - "uint64_t", /* flight */ - "uint64_t"); /* (cwnd << 32) | point << 16 | retval(0/1) */ + "uint64_t", /* The Vtag << 32 | localport << 16 | + * remoteport */ + "uint64_t", /* obw | nbw */ + "uint64_t", /* bwrtt | newrtt */ + "uint64_t", /* flight */ + "uint64_t"); /* (cwnd << 32) | point << 16 | retval(0/1) */ SDT_PROBE_DEFINE5(sctp, cwnd, net, rttstep, - "uint64_t", /* The Vtag << 32 | localport << 16 | remoteport */ - "uint64_t", /* obw | nbw */ - "uint64_t", /* bwrtt | newrtt */ - "uint64_t", /* flight */ - "uint64_t"); /* (cwnd << 32) | point << 16 | retval(0/1) */ + "uint64_t", /* The Vtag << 32 | localport << 16 | + * remoteport */ + "uint64_t", /* obw | nbw */ + "uint64_t", /* bwrtt | newrtt */ + "uint64_t", /* flight */ + "uint64_t"); /* (cwnd << 32) | point << 16 | retval(0/1) */ /* FastRetransmit-DECREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, fr, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* TimeOut-DECREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, to, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* BurstLimit-DECREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, bl, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* ECN-DECREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, ecn, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /* PacketDrop-DECREASE */ SDT_PROBE_DEFINE5(sctp, cwnd, net, pd, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The old value of the cwnd */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The old value of the cwnd */ + "int"); /* The new value of the cwnd */ /********************************************************/ /* Rwnd probe - tracks changes in the receiver window for an assoc */ /********************************************************/ SDT_PROBE_DEFINE4(sctp, rwnd, assoc, val, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "int", /* The up/down amount */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "int", /* The up/down amount */ + "int"); /* The new value of the cwnd */ /********************************************************/ /* flight probe - tracks changes in the flight size on a net or assoc */ /********************************************************/ SDT_PROBE_DEFINE5(sctp, flightsize, net, val, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "uintptr_t", /* The pointer to the struct sctp_nets * changing */ - "int", /* The up/down amount */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "uintptr_t", /* The pointer to the struct sctp_nets * + * changing */ + "int", /* The up/down amount */ + "int"); /* The new value of the cwnd */ /********************************************************/ /* The total flight version */ /********************************************************/ SDT_PROBE_DEFINE4(sctp, flightsize, assoc, val, - "uint32_t", /* The Vtag for this end */ - "uint32_t", /* - * The port number of the local side << 16 | port number - * of remote in network byte order. - */ - "int", /* The up/down amount */ - "int"); /* The new value of the cwnd */ + "uint32_t", /* The Vtag for this end */ + "uint32_t", /* The port number of the local side << 16 | + * port number of remote in network byte + * order. */ + "int", /* The up/down amount */ + "int"); /* The new value of the cwnd */ #endif diff --git a/sys/netinet/sctp_header.h b/sys/netinet/sctp_header.h index dc05b3d..d38c837 100644 --- a/sys/netinet/sctp_header.h +++ b/sys/netinet/sctp_header.h @@ -152,6 +152,23 @@ struct sctp_data_chunk { struct sctp_data dp; } SCTP_PACKED; +struct sctp_idata { + uint32_t tsn; + uint16_t stream_id; + uint16_t reserved; /* Where does the SSN go? */ + uint32_t msg_id; + union { + uint32_t protocol_id; + uint32_t fsn; /* Fragment Sequence Number */ + }; + /* user data follows */ +} SCTP_PACKED; + +struct sctp_idata_chunk { + struct sctp_chunkhdr ch; + struct sctp_idata dp; +} SCTP_PACKED; + /* * Structures for the control chunks */ @@ -378,6 +395,12 @@ struct sctp_strseq { uint16_t sequence; } SCTP_PACKED; +struct sctp_strseq_mid { + uint16_t stream; + uint16_t reserved; + uint32_t msg_id; +}; + struct sctp_forward_tsn_msg { struct sctphdr sh; struct sctp_forward_tsn_chunk msg; diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c index cbc7fb5..76f0ad3 100644 --- a/sys/netinet/sctp_indata.c +++ b/sys/netinet/sctp_indata.c @@ -34,18 +34,22 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include -#include #include +#include #include #include -#include -#include #include +#include #include - - +#include +#include +#include +#include +#include +#include /* * NOTES: On the outbound side of things I need to check the sack timer to * see if I should generate a sack into the chunk queue (if I have data to @@ -55,6 +59,13 @@ __FBSDID("$FreeBSD$"); * This will cause sctp_service_queues() to get called on the top entry in * the list. */ +static void +sctp_add_chk_to_control(struct sctp_queued_to_read *control, + struct sctp_stream_in *strm, + struct sctp_tcb *stcb, + struct sctp_association *asoc, + struct sctp_tmit_chunk *chk); + void sctp_set_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) @@ -74,9 +85,9 @@ sctp_calc_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) * sctp_soreceive then we will fix this so that ONLY this * associations data is taken into account. */ - if (stcb->sctp_socket == NULL) + if (stcb->sctp_socket == NULL) { return (calc); - + } if (stcb->asoc.sb_cc == 0 && asoc->size_on_reasm_queue == 0 && asoc->size_on_all_streams == 0) { @@ -86,7 +97,6 @@ sctp_calc_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) } /* get actual space */ calc = (uint32_t) sctp_sbspace(&stcb->asoc, &stcb->sctp_socket->so_rcv); - /* * take out what has NOT been put on socket queue and we yet hold * for putting up. @@ -95,7 +105,6 @@ sctp_calc_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) asoc->cnt_on_reasm_queue * MSIZE)); calc = sctp_sbspace_sub(calc, (uint32_t) (asoc->size_on_all_streams + asoc->cnt_on_all_streams * MSIZE)); - if (calc == 0) { /* out of space */ return (calc); @@ -122,7 +131,7 @@ sctp_build_readq_entry(struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t tsn, uint32_t ppid, uint32_t context, uint16_t stream_no, - uint16_t stream_seq, uint8_t flags, + uint32_t stream_seq, uint8_t flags, struct mbuf *dm) { struct sctp_queued_to_read *read_queue_e = NULL; @@ -131,73 +140,26 @@ sctp_build_readq_entry(struct sctp_tcb *stcb, if (read_queue_e == NULL) { goto failed_build; } + memset(read_queue_e, 0, sizeof(struct sctp_queued_to_read)); read_queue_e->sinfo_stream = stream_no; read_queue_e->sinfo_ssn = stream_seq; read_queue_e->sinfo_flags = (flags << 8); read_queue_e->sinfo_ppid = ppid; read_queue_e->sinfo_context = context; - read_queue_e->sinfo_timetolive = 0; read_queue_e->sinfo_tsn = tsn; read_queue_e->sinfo_cumtsn = tsn; read_queue_e->sinfo_assoc_id = sctp_get_associd(stcb); + read_queue_e->top_fsn = read_queue_e->fsn_included = 0xffffffff; + TAILQ_INIT(&read_queue_e->reasm); read_queue_e->whoFrom = net; - read_queue_e->length = 0; atomic_add_int(&net->ref_count, 1); read_queue_e->data = dm; - read_queue_e->spec_flags = 0; - read_queue_e->tail_mbuf = NULL; - read_queue_e->aux_data = NULL; - read_queue_e->stcb = stcb; - read_queue_e->port_from = stcb->rport; - read_queue_e->do_not_ref_stcb = 0; - read_queue_e->end_added = 0; - read_queue_e->some_taken = 0; - read_queue_e->pdapi_aborted = 0; -failed_build: - return (read_queue_e); -} - - -/* - * Build out our readq entry based on the incoming packet. - */ -static struct sctp_queued_to_read * -sctp_build_readq_entry_chk(struct sctp_tcb *stcb, - struct sctp_tmit_chunk *chk) -{ - struct sctp_queued_to_read *read_queue_e = NULL; - - sctp_alloc_a_readq(stcb, read_queue_e); - if (read_queue_e == NULL) { - goto failed_build; - } - read_queue_e->sinfo_stream = chk->rec.data.stream_number; - read_queue_e->sinfo_ssn = chk->rec.data.stream_seq; - read_queue_e->sinfo_flags = (chk->rec.data.rcv_flags << 8); - read_queue_e->sinfo_ppid = chk->rec.data.payloadtype; - read_queue_e->sinfo_context = stcb->asoc.context; - read_queue_e->sinfo_timetolive = 0; - read_queue_e->sinfo_tsn = chk->rec.data.TSN_seq; - read_queue_e->sinfo_cumtsn = chk->rec.data.TSN_seq; - read_queue_e->sinfo_assoc_id = sctp_get_associd(stcb); - read_queue_e->whoFrom = chk->whoTo; - read_queue_e->aux_data = NULL; - read_queue_e->length = 0; - atomic_add_int(&chk->whoTo->ref_count, 1); - read_queue_e->data = chk->data; - read_queue_e->tail_mbuf = NULL; read_queue_e->stcb = stcb; read_queue_e->port_from = stcb->rport; - read_queue_e->spec_flags = 0; - read_queue_e->do_not_ref_stcb = 0; - read_queue_e->end_added = 0; - read_queue_e->some_taken = 0; - read_queue_e->pdapi_aborted = 0; failed_build: return (read_queue_e); } - struct mbuf * sctp_build_ctl_nchunk(struct sctp_inpcb *inp, struct sctp_sndrcvinfo *sinfo) { @@ -317,6 +279,7 @@ sctp_mark_non_revokable(struct sctp_association *asoc, uint32_t tsn) { uint32_t gap, i, cumackp1; int fnd = 0; + int in_r = 0, in_nr = 0; if (SCTP_BASE_SYSCTL(sctp_do_drain) == 0) { return; @@ -330,15 +293,20 @@ sctp_mark_non_revokable(struct sctp_association *asoc, uint32_t tsn) return; } SCTP_CALC_TSN_TO_GAP(gap, tsn, asoc->mapping_array_base_tsn); - if (!SCTP_IS_TSN_PRESENT(asoc->mapping_array, gap)) { + in_r = SCTP_IS_TSN_PRESENT(asoc->mapping_array, gap); + in_nr = SCTP_IS_TSN_PRESENT(asoc->nr_mapping_array, gap); + if ((in_r == 0) && (in_nr == 0)) { +#ifdef INVARIANTS + panic("Things are really messed up now"); +#else SCTP_PRINTF("gap:%x tsn:%x\n", gap, tsn); sctp_print_mapping_array(asoc); -#ifdef INVARIANTS - panic("Things are really messed up now!!"); #endif } - SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); - SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); + if (in_nr == 0) + SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); + if (in_r) + SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { asoc->highest_tsn_inside_nr_map = tsn; } @@ -358,191 +326,157 @@ sctp_mark_non_revokable(struct sctp_association *asoc, uint32_t tsn) } } - -/* - * We are delivering currently from the reassembly queue. We must continue to - * deliver until we either: 1) run out of space. 2) run out of sequential - * TSN's 3) hit the SCTP_DATA_LAST_FRAG flag. - */ -static void -sctp_service_reassembly(struct sctp_tcb *stcb, struct sctp_association *asoc) +static int +sctp_place_control_in_stream(struct sctp_stream_in *strm, + struct sctp_association *asoc, + struct sctp_queued_to_read *control) { - struct sctp_tmit_chunk *chk, *nchk; - uint16_t nxt_todel; - uint16_t stream_no; - int end = 0; - int cntDel; - struct sctp_queued_to_read *control, *ctl, *nctl; - - if (stcb == NULL) - return; - - cntDel = stream_no = 0; - if ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) || - (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) || - (stcb->asoc.state & SCTP_STATE_CLOSED_SOCKET)) { - /* socket above is long gone or going.. */ -abandon: - asoc->fragmented_delivery_inprogress = 0; - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - asoc->size_on_reasm_queue -= chk->send_size; - sctp_ucount_decr(asoc->cnt_on_reasm_queue); - /* - * Lose the data pointer, since its in the socket - * buffer - */ - if (chk->data) { - sctp_m_freem(chk->data); - chk->data = NULL; + struct sctp_queued_to_read *at; + struct sctp_readhead *q; + uint8_t bits, unordered; + + bits = (control->sinfo_flags >> 8); + unordered = bits & SCTP_DATA_UNORDERED; + if (unordered) { + q = &strm->uno_inqueue; + if (asoc->idata_supported == 0) { + if (!TAILQ_EMPTY(q)) { + /* + * Only one stream can be here in old style + * -- abort + */ + return (-1); } - /* Now free the address and data */ - sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); - /* sa_ignore FREED_MEMORY */ + TAILQ_INSERT_TAIL(q, control, next_instrm); + control->on_strm_q = SCTP_ON_UNORDERED; + return (0); } - return; + } else { + q = &strm->inqueue; } - SCTP_TCB_LOCK_ASSERT(stcb); - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - if (chk->rec.data.TSN_seq != (asoc->tsn_last_delivered + 1)) { - /* Can't deliver more :< */ - return; - } - stream_no = chk->rec.data.stream_number; - nxt_todel = asoc->strmin[stream_no].last_sequence_delivered + 1; - if (nxt_todel != chk->rec.data.stream_seq && - (chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == 0) { - /* - * Not the next sequence to deliver in its stream OR - * unordered - */ - return; - } - if (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { - - control = sctp_build_readq_entry_chk(stcb, chk); - if (control == NULL) { - /* out of memory? */ - return; - } - /* save it off for our future deliveries */ - stcb->asoc.control_pdapi = control; - if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) - end = 1; - else - end = 0; - sctp_mark_non_revokable(asoc, chk->rec.data.TSN_seq); - sctp_add_to_readq(stcb->sctp_ep, - stcb, control, &stcb->sctp_socket->so_rcv, end, - SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); - cntDel++; + if ((bits & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + control->end_added = control->last_frag_seen = control->first_frag_seen = 1; + } + if (TAILQ_EMPTY(q)) { + /* Empty queue */ + TAILQ_INSERT_HEAD(q, control, next_instrm); + if (unordered) { + control->on_strm_q = SCTP_ON_UNORDERED; } else { - if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) - end = 1; - else - end = 0; - sctp_mark_non_revokable(asoc, chk->rec.data.TSN_seq); - if (sctp_append_to_readq(stcb->sctp_ep, stcb, - stcb->asoc.control_pdapi, - chk->data, end, chk->rec.data.TSN_seq, - &stcb->sctp_socket->so_rcv)) { + control->on_strm_q = SCTP_ON_ORDERED; + } + return (0); + } else { + TAILQ_FOREACH(at, q, next_instrm) { + if (SCTP_TSN_GT(at->msg_id, control->msg_id)) { /* - * something is very wrong, either - * control_pdapi is NULL, or the tail_mbuf - * is corrupt, or there is a EOM already on - * the mbuf chain. + * one in queue is bigger than the new one, + * insert before this one */ - if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) { - goto abandon; + TAILQ_INSERT_BEFORE(at, control, next_instrm); + if (unordered) { + control->on_strm_q = SCTP_ON_UNORDERED; } else { -#ifdef INVARIANTS - if ((stcb->asoc.control_pdapi == NULL) || (stcb->asoc.control_pdapi->tail_mbuf == NULL)) { - panic("This should not happen control_pdapi NULL?"); + control->on_strm_q = SCTP_ON_ORDERED; + } + break; + } else if (at->msg_id == control->msg_id) { + /* + * Gak, He sent me a duplicate msg id + * number?? return -1 to abort. + */ + return (-1); + } else { + if (TAILQ_NEXT(at, next_instrm) == NULL) { + /* + * We are at the end, insert it + * after this one + */ + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { + sctp_log_strm_del(control, at, + SCTP_STR_LOG_FROM_INSERT_TL); } - /* if we did not panic, it was a EOM */ - panic("Bad chunking ??"); -#else - if ((stcb->asoc.control_pdapi == NULL) || (stcb->asoc.control_pdapi->tail_mbuf == NULL)) { - SCTP_PRINTF("This should not happen control_pdapi NULL?\n"); + TAILQ_INSERT_AFTER(q, + at, control, next_instrm); + if (unordered) { + control->on_strm_q = SCTP_ON_UNORDERED; + } else { + control->on_strm_q = SCTP_ON_ORDERED; } - SCTP_PRINTF("Bad chunking ??\n"); - SCTP_PRINTF("Dumping re-assembly queue this will probably hose the association\n"); - -#endif - goto abandon; + break; } } - cntDel++; - } - /* pull it we did it */ - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) { - asoc->fragmented_delivery_inprogress = 0; - if ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == 0) { - asoc->strmin[stream_no].last_sequence_delivered++; - } - if ((chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) == 0) { - SCTP_STAT_INCR_COUNTER64(sctps_reasmusrmsgs); - } - } else if (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { - /* - * turn the flag back on since we just delivered - * yet another one. - */ - asoc->fragmented_delivery_inprogress = 1; } - asoc->tsn_of_pdapi_last_delivered = chk->rec.data.TSN_seq; - asoc->last_flags_delivered = chk->rec.data.rcv_flags; - asoc->last_strm_seq_delivered = chk->rec.data.stream_seq; - asoc->last_strm_no_delivered = chk->rec.data.stream_number; + } + return (0); +} - asoc->tsn_last_delivered = chk->rec.data.TSN_seq; - asoc->size_on_reasm_queue -= chk->send_size; - sctp_ucount_decr(asoc->cnt_on_reasm_queue); - /* free up the chk */ - chk->data = NULL; - sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); +static void +sctp_abort_in_reasm(struct sctp_tcb *stcb, + struct sctp_stream_in *strm, + struct sctp_queued_to_read *control, + struct sctp_tmit_chunk *chk, + int *abort_flag, int opspot) +{ + char msg[SCTP_DIAG_INFO_LEN]; + struct mbuf *oper; + + if (stcb->asoc.idata_supported) { + snprintf(msg, sizeof(msg), + "Reass %x,CF:%x,TSN=%8.8x,SID=%4.4x,FSN=%8.8x,MID:%8.8x", + opspot, + control->fsn_included, + chk->rec.data.TSN_seq, + chk->rec.data.stream_number, + chk->rec.data.fsn_num, chk->rec.data.stream_seq); + } else { + snprintf(msg, sizeof(msg), + "Reass %x, CI:%x,TSN=%8.8x,SID=%4.4x,FSN=%4.4x, SSN:%4.4x", + opspot, + control->fsn_included, + chk->rec.data.TSN_seq, + chk->rec.data.stream_number, + chk->rec.data.fsn_num, + (uint16_t) chk->rec.data.stream_seq); + } + oper = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + sctp_m_freem(chk->data); + chk->data = NULL; + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_1; + sctp_abort_an_association(stcb->sctp_ep, stcb, oper, SCTP_SO_NOT_LOCKED); + *abort_flag = 1; +} - if (asoc->fragmented_delivery_inprogress == 0) { - /* - * Now lets see if we can deliver the next one on - * the stream - */ - struct sctp_stream_in *strm; +static void +clean_up_control(struct sctp_tcb *stcb, struct sctp_queued_to_read *control) +{ + /* + * The control could not be placed and must be cleaned. + */ + struct sctp_tmit_chunk *chk, *nchk; - strm = &asoc->strmin[stream_no]; - nxt_todel = strm->last_sequence_delivered + 1; - TAILQ_FOREACH_SAFE(ctl, &strm->inqueue, next, nctl) { - /* Deliver more if we can. */ - if (nxt_todel == ctl->sinfo_ssn) { - TAILQ_REMOVE(&strm->inqueue, ctl, next); - asoc->size_on_all_streams -= ctl->length; - sctp_ucount_decr(asoc->cnt_on_all_streams); - strm->last_sequence_delivered++; - sctp_mark_non_revokable(asoc, ctl->sinfo_tsn); - sctp_add_to_readq(stcb->sctp_ep, stcb, - ctl, - &stcb->sctp_socket->so_rcv, 1, - SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); - } else { - break; - } - nxt_todel = strm->last_sequence_delivered + 1; - } - break; - } + TAILQ_FOREACH_SAFE(chk, &control->reasm, sctp_next, nchk) { + TAILQ_REMOVE(&control->reasm, chk, sctp_next); + if (chk->data) + sctp_m_freem(chk->data); + chk->data = NULL; + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); } + sctp_free_a_readq(stcb, control); } /* * Queue the chunk either right into the socket buffer if it is the next one * to go OR put it in the correct place in the delivery queue. If we do - * append to the so_buf, keep doing so until we are out of order. One big - * question still remains, what to do when the socket buffer is FULL?? + * append to the so_buf, keep doing so until we are out of order as + * long as the control's entered are non-fragmented. */ static void -sctp_queue_data_to_stream(struct sctp_tcb *stcb, struct sctp_association *asoc, - struct sctp_queued_to_read *control, int *abort_flag) +sctp_queue_data_to_stream(struct sctp_tcb *stcb, + struct sctp_stream_in *strm, + struct sctp_association *asoc, + struct sctp_queued_to_read *control, int *abort_flag, int *need_reasm) { /* * FIX-ME maybe? What happens when the ssn wraps? If we are getting @@ -562,27 +496,16 @@ sctp_queue_data_to_stream(struct sctp_tcb *stcb, struct sctp_association *asoc, * SSN alone. Maybe a hybred approach is the answer * */ - struct sctp_stream_in *strm; struct sctp_queued_to_read *at; int queue_needed; - uint16_t nxt_todel; + uint32_t nxt_todel; struct mbuf *op_err; char msg[SCTP_DIAG_INFO_LEN]; - queue_needed = 1; - asoc->size_on_all_streams += control->length; - sctp_ucount_incr(asoc->cnt_on_all_streams); - strm = &asoc->strmin[control->sinfo_stream]; - nxt_todel = strm->last_sequence_delivered + 1; if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { sctp_log_strm_del(control, NULL, SCTP_STR_LOG_FROM_INTO_STRD); } - SCTPDBG(SCTP_DEBUG_INDATA1, - "queue to stream called for sid:%u ssn:%u tsn:%u lastdel:%u nxt:%u\n", - (uint32_t) control->sinfo_stream, (uint32_t) control->sinfo_ssn, - (uint32_t) control->sinfo_tsn, - (uint32_t) strm->last_sequence_delivered, (uint32_t) nxt_todel); - if (SCTP_SSN_GE(strm->last_sequence_delivered, control->sinfo_ssn)) { + if (SCTP_MSGID_GT((!asoc->idata_supported), strm->last_sequence_delivered, control->sinfo_ssn)) { /* The incoming sseq is behind where we last delivered? */ SCTPDBG(SCTP_DEBUG_INDATA1, "Duplicate S-SEQ:%d delivered:%d from peer, Abort association\n", control->sinfo_ssn, strm->last_sequence_delivered); @@ -591,32 +514,39 @@ protocol_error: * throw it in the stream so it gets cleaned up in * association destruction */ - TAILQ_INSERT_HEAD(&strm->inqueue, control, next); + TAILQ_INSERT_HEAD(&strm->inqueue, control, next_instrm); snprintf(msg, sizeof(msg), "Delivered SSN=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", strm->last_sequence_delivered, control->sinfo_tsn, control->sinfo_stream, control->sinfo_ssn); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_1; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_2; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); *abort_flag = 1; return; } -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - struct socket *so; - - so = SCTP_INP_SO(stcb->sctp_ep); - atomic_add_int(&stcb->asoc.refcnt, 1); - SCTP_TCB_UNLOCK(stcb); - SCTP_SOCKET_LOCK(so, 1); - SCTP_TCB_LOCK(stcb); - atomic_subtract_int(&stcb->asoc.refcnt, 1); - if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) { - SCTP_SOCKET_UNLOCK(so, 1); - return; + if ((SCTP_TSN_GE(asoc->cumulative_tsn, control->sinfo_tsn)) && (asoc->idata_supported == 0)) { + goto protocol_error; } -#endif + queue_needed = 1; + asoc->size_on_all_streams += control->length; + sctp_ucount_incr(asoc->cnt_on_all_streams); + nxt_todel = strm->last_sequence_delivered + 1; if (nxt_todel == control->sinfo_ssn) { +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + struct socket *so; + + so = SCTP_INP_SO(stcb->sctp_ep); + atomic_add_int(&stcb->asoc.refcnt, 1); + SCTP_TCB_UNLOCK(stcb); + SCTP_SOCKET_LOCK(so, 1); + SCTP_TCB_LOCK(stcb); + atomic_subtract_int(&stcb->asoc.refcnt, 1); + if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) { + SCTP_SOCKET_UNLOCK(so, 1); + return; + } +#endif /* can be delivered right away? */ if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { sctp_log_strm_del(control, NULL, SCTP_STR_LOG_FROM_IMMED_DEL); @@ -626,19 +556,25 @@ protocol_error: asoc->size_on_all_streams -= control->length; sctp_ucount_decr(asoc->cnt_on_all_streams); strm->last_sequence_delivered++; - sctp_mark_non_revokable(asoc, control->sinfo_tsn); sctp_add_to_readq(stcb->sctp_ep, stcb, control, &stcb->sctp_socket->so_rcv, 1, - SCTP_READ_LOCK_NOT_HELD, SCTP_SO_LOCKED); - TAILQ_FOREACH_SAFE(control, &strm->inqueue, next, at) { + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + TAILQ_FOREACH_SAFE(control, &strm->inqueue, next_instrm, at) { /* all delivered */ nxt_todel = strm->last_sequence_delivered + 1; - if (nxt_todel == control->sinfo_ssn) { - TAILQ_REMOVE(&strm->inqueue, control, next); + if ((nxt_todel == control->sinfo_ssn) && + (((control->sinfo_flags >> 8) & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG)) { asoc->size_on_all_streams -= control->length; sctp_ucount_decr(asoc->cnt_on_all_streams); + if (control->on_strm_q == SCTP_ON_ORDERED) { + TAILQ_REMOVE(&strm->inqueue, control, next_instrm); + } else { + panic("Huh control:%p is on_strm_q:%d", + control, control->on_strm_q); + } + control->on_strm_q = 0; strm->last_sequence_delivered++; /* * We ignore the return of deliver_data here @@ -655,655 +591,1000 @@ protocol_error: control, &stcb->sctp_socket->so_rcv, 1, SCTP_READ_LOCK_NOT_HELD, - SCTP_SO_LOCKED); + SCTP_SO_NOT_LOCKED); continue; + } else if (nxt_todel == control->sinfo_ssn) { + *need_reasm = 1; } break; } +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + SCTP_SOCKET_UNLOCK(so, 1); +#endif } if (queue_needed) { /* * Ok, we did not deliver this guy, find the correct place * to put it on the queue. */ - if (SCTP_TSN_GE(asoc->cumulative_tsn, control->sinfo_tsn)) { -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - SCTP_SOCKET_UNLOCK(so, 1); -#endif - goto protocol_error; - } - if (TAILQ_EMPTY(&strm->inqueue)) { - /* Empty queue */ - if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { - sctp_log_strm_del(control, NULL, SCTP_STR_LOG_FROM_INSERT_HD); - } - TAILQ_INSERT_HEAD(&strm->inqueue, control, next); - } else { - TAILQ_FOREACH(at, &strm->inqueue, next) { - if (SCTP_SSN_GT(at->sinfo_ssn, control->sinfo_ssn)) { - /* - * one in queue is bigger than the - * new one, insert before this one - */ - if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { - sctp_log_strm_del(control, at, - SCTP_STR_LOG_FROM_INSERT_MD); - } - TAILQ_INSERT_BEFORE(at, control, next); - break; - } else if (at->sinfo_ssn == control->sinfo_ssn) { - /* - * Gak, He sent me a duplicate str - * seq number - */ - /* - * foo bar, I guess I will just free - * this new guy, should we abort - * too? FIX ME MAYBE? Or it COULD be - * that the SSN's have wrapped. - * Maybe I should compare to TSN - * somehow... sigh for now just blow - * away the chunk! - */ + if (sctp_place_control_in_stream(strm, asoc, control)) { + char msg[SCTP_DIAG_INFO_LEN]; + struct mbuf *oper; - if (control->data) - sctp_m_freem(control->data); - control->data = NULL; - asoc->size_on_all_streams -= control->length; - sctp_ucount_decr(asoc->cnt_on_all_streams); - if (control->whoFrom) { - sctp_free_remote_addr(control->whoFrom); - control->whoFrom = NULL; - } - sctp_free_a_readq(stcb, control); -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - SCTP_SOCKET_UNLOCK(so, 1); -#endif - return; - } else { - if (TAILQ_NEXT(at, next) == NULL) { - /* - * We are at the end, insert - * it after this one - */ - if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { - sctp_log_strm_del(control, at, - SCTP_STR_LOG_FROM_INSERT_TL); - } - TAILQ_INSERT_AFTER(&strm->inqueue, - at, control, next); - break; - } - } - } + snprintf(msg, sizeof(msg), + "Queue to str mid:%d duplicate", + control->msg_id); + clean_up_control(stcb, control); + oper = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_3; + sctp_abort_an_association(stcb->sctp_ep, stcb, oper, SCTP_SO_NOT_LOCKED); + *abort_flag = 1; } } -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - SCTP_SOCKET_UNLOCK(so, 1); -#endif } -/* - * Returns two things: You get the total size of the deliverable parts of the - * first fragmented message on the reassembly queue. And you get a 1 back if - * all of the message is ready or a 0 back if the message is still incomplete - */ -static int -sctp_is_all_msg_on_reasm(struct sctp_association *asoc, uint32_t * t_size) -{ - struct sctp_tmit_chunk *chk; - uint32_t tsn; - *t_size = 0; - chk = TAILQ_FIRST(&asoc->reasmqueue); - if (chk == NULL) { - /* nothing on the queue */ - return (0); - } - if ((chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) == 0) { - /* Not a first on the queue */ - return (0); - } - tsn = chk->rec.data.TSN_seq; - TAILQ_FOREACH(chk, &asoc->reasmqueue, sctp_next) { - if (tsn != chk->rec.data.TSN_seq) { - return (0); +static void +sctp_setup_tail_pointer(struct sctp_queued_to_read *control) +{ + struct mbuf *m, *prev = NULL; + struct sctp_tcb *stcb; + + stcb = control->stcb; + control->held_length = 0; + control->length = 0; + m = control->data; + while (m) { + if (SCTP_BUF_LEN(m) == 0) { + /* Skip mbufs with NO length */ + if (prev == NULL) { + /* First one */ + control->data = sctp_m_free(m); + m = control->data; + } else { + SCTP_BUF_NEXT(prev) = sctp_m_free(m); + m = SCTP_BUF_NEXT(prev); + } + if (m == NULL) { + control->tail_mbuf = prev; + } + continue; } - *t_size += chk->send_size; - if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) { - return (1); + prev = m; + atomic_add_int(&control->length, SCTP_BUF_LEN(m)); + if (control->on_read_q) { + /* + * On read queue so we must increment the SB stuff, + * we assume caller has done any locks of SB. + */ + sctp_sballoc(stcb, &stcb->sctp_socket->so_rcv, m); } - tsn++; + m = SCTP_BUF_NEXT(m); + } + if (prev) { + control->tail_mbuf = prev; } - return (0); } static void -sctp_deliver_reasm_check(struct sctp_tcb *stcb, struct sctp_association *asoc) +sctp_add_to_tail_pointer(struct sctp_queued_to_read *control, struct mbuf *m) { - struct sctp_tmit_chunk *chk; - uint16_t nxt_todel; - uint32_t tsize, pd_point; - -doit_again: - chk = TAILQ_FIRST(&asoc->reasmqueue); - if (chk == NULL) { - /* Huh? */ - asoc->size_on_reasm_queue = 0; - asoc->cnt_on_reasm_queue = 0; + struct mbuf *prev = NULL; + struct sctp_tcb *stcb; + + stcb = control->stcb; + if (stcb == NULL) { + panic("Control broken"); + } + if (control->tail_mbuf == NULL) { + /* TSNH */ + control->data = m; + sctp_setup_tail_pointer(control); return; } - if (asoc->fragmented_delivery_inprogress == 0) { - nxt_todel = - asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered + 1; - if ((chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) && - (nxt_todel == chk->rec.data.stream_seq || - (chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED))) { - /* - * Yep the first one is here and its ok to deliver - * but should we? - */ - if (stcb->sctp_socket) { - pd_point = min(SCTP_SB_LIMIT_RCV(stcb->sctp_socket) >> SCTP_PARTIAL_DELIVERY_SHIFT, - stcb->sctp_ep->partial_delivery_point); + control->tail_mbuf->m_next = m; + while (m) { + if (SCTP_BUF_LEN(m) == 0) { + /* Skip mbufs with NO length */ + if (prev == NULL) { + /* First one */ + control->tail_mbuf->m_next = sctp_m_free(m); + m = control->tail_mbuf->m_next; } else { - pd_point = stcb->sctp_ep->partial_delivery_point; + SCTP_BUF_NEXT(prev) = sctp_m_free(m); + m = SCTP_BUF_NEXT(prev); } - if (sctp_is_all_msg_on_reasm(asoc, &tsize) || (tsize >= pd_point)) { - /* - * Yes, we setup to start reception, by - * backing down the TSN just in case we - * can't deliver. If we - */ - asoc->fragmented_delivery_inprogress = 1; - asoc->tsn_last_delivered = - chk->rec.data.TSN_seq - 1; - asoc->str_of_pdapi = - chk->rec.data.stream_number; - asoc->ssn_of_pdapi = chk->rec.data.stream_seq; - asoc->pdapi_ppid = chk->rec.data.payloadtype; - asoc->fragment_flags = chk->rec.data.rcv_flags; - sctp_service_reassembly(stcb, asoc); + if (m == NULL) { + control->tail_mbuf = prev; } + continue; } - } else { - /* - * Service re-assembly will deliver stream data queued at - * the end of fragmented delivery.. but it wont know to go - * back and call itself again... we do that here with the - * got doit_again - */ - sctp_service_reassembly(stcb, asoc); - if (asoc->fragmented_delivery_inprogress == 0) { + prev = m; + if (control->on_read_q) { /* - * finished our Fragmented delivery, could be more - * waiting? + * On read queue so we must increment the SB stuff, + * we assume caller has done any locks of SB. */ - goto doit_again; + sctp_sballoc(stcb, &stcb->sctp_socket->so_rcv, m); } + atomic_add_int(&control->length, SCTP_BUF_LEN(m)); + m = SCTP_BUF_NEXT(m); + } + if (prev) { + control->tail_mbuf = prev; } } -/* - * Dump onto the re-assembly queue, in its proper place. After dumping on the - * queue, see if anthing can be delivered. If so pull it off (or as much as - * we can. If we run out of space then we must dump what we can and set the - * appropriate flag to say we queued what we could. - */ static void -sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc, - struct sctp_tmit_chunk *chk, int *abort_flag) +sctp_build_readq_entry_from_ctl(struct sctp_queued_to_read *nc, struct sctp_queued_to_read *control) { - struct mbuf *op_err; - char msg[SCTP_DIAG_INFO_LEN]; - uint32_t cum_ackp1, prev_tsn, post_tsn; - struct sctp_tmit_chunk *at, *prev, *next; - - prev = next = NULL; - cum_ackp1 = asoc->tsn_last_delivered + 1; - if (TAILQ_EMPTY(&asoc->reasmqueue)) { - /* This is the first one on the queue */ - TAILQ_INSERT_HEAD(&asoc->reasmqueue, chk, sctp_next); - /* - * we do not check for delivery of anything when only one - * fragment is here - */ - asoc->size_on_reasm_queue = chk->send_size; - sctp_ucount_incr(asoc->cnt_on_reasm_queue); - if (chk->rec.data.TSN_seq == cum_ackp1) { - if (asoc->fragmented_delivery_inprogress == 0 && - (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) != - SCTP_DATA_FIRST_FRAG) { - /* - * An empty queue, no delivery inprogress, - * we hit the next one and it does NOT have - * a FIRST fragment mark. - */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, its not first, no fragmented delivery in progress\n"); - snprintf(msg, sizeof(msg), - "Expected B-bit for TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_2; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - } else if (asoc->fragmented_delivery_inprogress && - (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) == SCTP_DATA_FIRST_FRAG) { - /* - * We are doing a partial delivery and the - * NEXT chunk MUST be either the LAST or - * MIDDLE fragment NOT a FIRST - */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, it IS a first and fragmented delivery in progress\n"); - snprintf(msg, sizeof(msg), - "Didn't expect B-bit for TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_3; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - } else if (asoc->fragmented_delivery_inprogress) { - /* - * Here we are ok with a MIDDLE or LAST - * piece - */ - if (chk->rec.data.stream_number != - asoc->str_of_pdapi) { - /* Got to be the right STR No */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, it IS not same stream number %d vs %d\n", - chk->rec.data.stream_number, - asoc->str_of_pdapi); - snprintf(msg, sizeof(msg), - "Expected SID=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - asoc->str_of_pdapi, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_4; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - } else if ((asoc->fragment_flags & SCTP_DATA_UNORDERED) != - SCTP_DATA_UNORDERED && - chk->rec.data.stream_seq != asoc->ssn_of_pdapi) { - /* Got to be the right STR Seq */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, it IS not same stream seq %d vs %d\n", - chk->rec.data.stream_seq, - asoc->ssn_of_pdapi); - snprintf(msg, sizeof(msg), - "Expected SSN=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - asoc->ssn_of_pdapi, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_5; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; + memset(nc, 0, sizeof(struct sctp_queued_to_read)); + nc->sinfo_stream = control->sinfo_stream; + nc->sinfo_ssn = control->sinfo_ssn; + TAILQ_INIT(&nc->reasm); + nc->top_fsn = control->top_fsn; + nc->msg_id = control->msg_id; + nc->sinfo_flags = control->sinfo_flags; + nc->sinfo_ppid = control->sinfo_ppid; + nc->sinfo_context = control->sinfo_context; + nc->fsn_included = 0xffffffff; + nc->sinfo_tsn = control->sinfo_tsn; + nc->sinfo_cumtsn = control->sinfo_cumtsn; + nc->sinfo_assoc_id = control->sinfo_assoc_id; + nc->whoFrom = control->whoFrom; + atomic_add_int(&nc->whoFrom->ref_count, 1); + nc->stcb = control->stcb; + nc->port_from = control->port_from; +} + +static int +sctp_handle_old_data(struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_stream_in *strm, + struct sctp_queued_to_read *control, uint32_t pd_point) +{ + /* + * Special handling for the old un-ordered data chunk. All the + * chunks/TSN's go to msg_id 0. So we have to do the old style + * watching to see if we have it all. If you return one, no other + * control entries on the un-ordered queue will be looked at. In + * theory there should be no others entries in reality, unless the + * guy is sending both unordered NDATA and unordered DATA... + */ + struct sctp_tmit_chunk *chk, *lchk, *tchk; + uint32_t fsn; + struct sctp_queued_to_read *nc = NULL; + int cnt_added; + + if (control->first_frag_seen == 0) { + /* Nothing we can do, we have not seen the first piece yet */ + return (1); + } + /* Collapse any we can */ + cnt_added = 0; +restart: + fsn = control->fsn_included + 1; + /* Now what can we add? */ + TAILQ_FOREACH_SAFE(chk, &control->reasm, sctp_next, lchk) { + if (chk->rec.data.fsn_num == fsn) { + /* Ok lets add it */ + TAILQ_REMOVE(&control->reasm, chk, sctp_next); + sctp_add_chk_to_control(control, strm, stcb, asoc, chk); + fsn++; + cnt_added++; + chk = NULL; + if (control->end_added) { + /* We are done */ + if (!TAILQ_EMPTY(&control->reasm)) { + /* + * Ok we have to move anything left + * on the control queue to a new + * control. + */ + sctp_alloc_a_readq(stcb, nc); + sctp_build_readq_entry_from_ctl(nc, control); + tchk = TAILQ_FIRST(&control->reasm); + if (tchk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { + TAILQ_REMOVE(&control->reasm, tchk, sctp_next); + nc->first_frag_seen = 1; + nc->fsn_included = tchk->rec.data.fsn_num; + nc->data = tchk->data; + sctp_mark_non_revokable(asoc, tchk->rec.data.TSN_seq); + tchk->data = NULL; + sctp_free_a_chunk(stcb, tchk, SCTP_SO_NOT_LOCKED); + sctp_setup_tail_pointer(nc); + tchk = TAILQ_FIRST(&control->reasm); + } + /* Spin the rest onto the queue */ + while (tchk) { + TAILQ_REMOVE(&control->reasm, tchk, sctp_next); + TAILQ_INSERT_TAIL(&nc->reasm, tchk, sctp_next); + tchk = TAILQ_FIRST(&control->reasm); + } + /* + * Now lets add it to the queue + * after removing control + */ + TAILQ_INSERT_TAIL(&strm->uno_inqueue, nc, next_instrm); + nc->on_strm_q = SCTP_ON_UNORDERED; + if (control->on_strm_q) { + TAILQ_REMOVE(&strm->uno_inqueue, control, next_instrm); + control->on_strm_q = 0; + } + } + if (control->on_read_q == 0) { + sctp_add_to_readq(stcb->sctp_ep, stcb, control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + } + if (control->pdapi_started) { + strm->pd_api_started = 0; + control->pdapi_started = 0; } + if (control->on_strm_q) { + TAILQ_REMOVE(&strm->uno_inqueue, control, next_instrm); + control->on_strm_q = 0; + } + sctp_wakeup_the_read_socket(stcb->sctp_ep); + if ((nc) && (nc->first_frag_seen)) { + /* + * Switch to the new guy and + * continue + */ + control = nc; + nc = NULL; + goto restart; + } + return (1); } + } else { + /* Can't add more */ + break; } + } + if ((control->length > pd_point) && (strm->pd_api_started == 0)) { + sctp_add_to_readq(stcb->sctp_ep, stcb, control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + strm->pd_api_started = 1; + control->pdapi_started = 1; + sctp_wakeup_the_read_socket(stcb->sctp_ep); + return (0); + } else { + return (1); + } +} + +static void +sctp_inject_old_data_unordered(struct sctp_tcb *stcb, struct sctp_association *asoc, + struct sctp_stream_in *strm, + struct sctp_queued_to_read *control, + struct sctp_tmit_chunk *chk, + int *abort_flag) +{ + struct sctp_tmit_chunk *at; + int inserted = 0; + + /* + * Here we need to place the chunk into the control structure sorted + * in the correct order. + */ + if (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { + /* Its the very first one. */ + SCTPDBG(SCTP_DEBUG_XXX, + "chunk is a first fsn:%d becomes fsn_included\n", + chk->rec.data.fsn_num); + if (control->first_frag_seen) { + /* + * In old un-ordered we can reassembly on one + * control multiple messages. As long as the next + * FIRST is greater then the old first (TSN i.e. FSN + * wise) + */ + struct mbuf *tdata; + uint32_t tmp; + + if (SCTP_TSN_GT(chk->rec.data.fsn_num, control->fsn_included)) { + /* + * Easy way the start of a new guy beyond + * the lowest + */ + goto place_chunk; + } + if ((chk->rec.data.fsn_num == control->fsn_included) || + (control->pdapi_started)) { + /* + * Ok this should not happen, if it does we + * started the pd-api on the higher TSN + * (since the equals part is a TSN failure + * it must be that). + * + * We are completly hosed in that case since I + * have no way to recover. This really will + * only happen if we can get more TSN's + * higher before the pd-api-point. + */ + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_4); + + return; + } + /* + * Ok we have two firsts and the one we just got is + * smaller than the one we previously placed.. yuck! + * We must swap them out. + */ + /* swap the mbufs */ + tdata = control->data; + control->data = chk->data; + chk->data = tdata; + /* Swap the lengths */ + tmp = control->length; + control->length = chk->send_size; + chk->send_size = tmp; + /* Fix the FSN included */ + tmp = control->fsn_included; + control->fsn_included = chk->rec.data.fsn_num; + chk->rec.data.fsn_num = tmp; + goto place_chunk; + } + control->first_frag_seen = 1; + control->top_fsn = control->fsn_included = chk->rec.data.fsn_num; + control->data = chk->data; + sctp_mark_non_revokable(asoc, chk->rec.data.TSN_seq); + chk->data = NULL; + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + sctp_setup_tail_pointer(control); + return; + } +place_chunk: + if (TAILQ_EMPTY(&control->reasm)) { + TAILQ_INSERT_TAIL(&control->reasm, chk, sctp_next); + asoc->size_on_reasm_queue += chk->send_size; + sctp_ucount_incr(asoc->cnt_on_reasm_queue); return; } - /* Find its place */ - TAILQ_FOREACH(at, &asoc->reasmqueue, sctp_next) { - if (SCTP_TSN_GT(at->rec.data.TSN_seq, chk->rec.data.TSN_seq)) { + TAILQ_FOREACH(at, &control->reasm, sctp_next) { + if (SCTP_TSN_GT(at->rec.data.fsn_num, chk->rec.data.fsn_num)) { /* - * one in queue is bigger than the new one, insert - * before this one + * This one in queue is bigger than the new one, + * insert the new one before at. */ - /* A check */ asoc->size_on_reasm_queue += chk->send_size; sctp_ucount_incr(asoc->cnt_on_reasm_queue); - next = at; + inserted = 1; TAILQ_INSERT_BEFORE(at, chk, sctp_next); break; - } else if (at->rec.data.TSN_seq == chk->rec.data.TSN_seq) { - /* Gak, He sent me a duplicate str seq number */ + } else if (at->rec.data.fsn_num == chk->rec.data.fsn_num) { /* - * foo bar, I guess I will just free this new guy, - * should we abort too? FIX ME MAYBE? Or it COULD be - * that the SSN's have wrapped. Maybe I should - * compare to TSN somehow... sigh for now just blow - * away the chunk! + * They sent a duplicate fsn number. This really + * should not happen since the FSN is a TSN and it + * should have been dropped earlier. */ if (chk->data) { sctp_m_freem(chk->data); chk->data = NULL; } sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_5); return; + } + } + if (inserted == 0) { + /* Its at the end */ + asoc->size_on_reasm_queue += chk->send_size; + sctp_ucount_incr(asoc->cnt_on_reasm_queue); + control->top_fsn = chk->rec.data.fsn_num; + TAILQ_INSERT_TAIL(&control->reasm, chk, sctp_next); + } +} + +static int +sctp_deliver_reasm_check(struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_stream_in *strm) +{ + /* + * Given a stream, strm, see if any of the SSN's on it that are + * fragmented are ready to deliver. If so go ahead and place them on + * the read queue. In so placing if we have hit the end, then we + * need to remove them from the stream's queue. + */ + struct sctp_queued_to_read *control, *nctl = NULL; + uint32_t next_to_del; + uint32_t pd_point; + int ret = 0; + + if (stcb->sctp_socket) { + pd_point = min(SCTP_SB_LIMIT_RCV(stcb->sctp_socket) >> SCTP_PARTIAL_DELIVERY_SHIFT, + stcb->sctp_ep->partial_delivery_point); + } else { + pd_point = stcb->sctp_ep->partial_delivery_point; + } + control = TAILQ_FIRST(&strm->uno_inqueue); + if ((control) && + (asoc->idata_supported == 0)) { + /* Special handling needed for "old" data format */ + nctl = TAILQ_NEXT(control, next_instrm); + if (sctp_handle_old_data(stcb, asoc, strm, control, pd_point)) { + goto done_un; + } + } + if (strm->pd_api_started) { + /* Can't add more */ + return (0); + } + while (control) { + SCTPDBG(SCTP_DEBUG_XXX, "Looking at control:%p e(%d) ssn:%d top_fsn:%d inc_fsn:%d -uo\n", + control, control->end_added, control->sinfo_ssn, control->top_fsn, control->fsn_included); + nctl = TAILQ_NEXT(control, next_instrm); + if (control->end_added) { + /* We just put the last bit on */ + if (control->on_strm_q) { + if (control->on_strm_q != SCTP_ON_UNORDERED) { + panic("Huh control:%p on_q:%d -- not unordered?", + control, control->on_strm_q); + } + TAILQ_REMOVE(&strm->uno_inqueue, control, next_instrm); + control->on_strm_q = 0; + } + if (control->on_read_q == 0) { + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + } } else { - prev = at; - if (TAILQ_NEXT(at, sctp_next) == NULL) { - /* - * We are at the end, insert it after this - * one - */ - /* check it first */ - asoc->size_on_reasm_queue += chk->send_size; - sctp_ucount_incr(asoc->cnt_on_reasm_queue); - TAILQ_INSERT_AFTER(&asoc->reasmqueue, at, chk, sctp_next); + /* Can we do a PD-API for this un-ordered guy? */ + if ((control->length >= pd_point) && (strm->pd_api_started == 0)) { + strm->pd_api_started = 1; + control->pdapi_started = 1; + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + break; } } + control = nctl; } - /* Now the audits */ - if (prev) { - prev_tsn = chk->rec.data.TSN_seq - 1; - if (prev_tsn == prev->rec.data.TSN_seq) { - /* - * Ok the one I am dropping onto the end is the - * NEXT. A bit of valdiation here. - */ - if ((prev->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_FIRST_FRAG || - (prev->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_MIDDLE_FRAG) { - /* - * Insert chk MUST be a MIDDLE or LAST - * fragment - */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_FIRST_FRAG) { - SCTPDBG(SCTP_DEBUG_INDATA1, "Prev check - It can be a midlle or last but not a first\n"); - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, it's a FIRST!\n"); - snprintf(msg, sizeof(msg), - "Can't handle B-bit, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_6; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; - } - if (chk->rec.data.stream_number != - prev->rec.data.stream_number) { - /* - * Huh, need the correct STR here, - * they must be the same. - */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Prev check - Gak, Evil plot, sid:%d not the same as at:%d\n", - chk->rec.data.stream_number, - prev->rec.data.stream_number); - snprintf(msg, sizeof(msg), - "Expect SID=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - prev->rec.data.stream_number, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_7; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; +done_un: + control = TAILQ_FIRST(&strm->inqueue); + if (strm->pd_api_started) { + /* Can't add more */ + return (0); + } + if (control == NULL) { + return (ret); + } + if (strm->last_sequence_delivered == control->sinfo_ssn) { + /* + * Ok the guy at the top was being partially delivered + * completed, so we remove it. Note the pd_api flag was + * taken off when the chunk was merged on in + * sctp_queue_data_for_reasm below. + */ + nctl = TAILQ_NEXT(control, next_instrm); + SCTPDBG(SCTP_DEBUG_XXX, + "Looking at control:%p e(%d) ssn:%d top_fsn:%d inc_fsn:%d (lastdel:%d)- o\n", + control, control->end_added, control->sinfo_ssn, + control->top_fsn, control->fsn_included, + strm->last_sequence_delivered); + if (control->end_added) { + if (control->on_strm_q) { + if (control->on_strm_q != SCTP_ON_ORDERED) { + panic("Huh control:%p on_q:%d -- not ordered?", + control, control->on_strm_q); } - if ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) != - (prev->rec.data.rcv_flags & SCTP_DATA_UNORDERED)) { - /* - * Huh, need the same ordering here, - * they must be the same. - */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Prev check - Gak, Evil plot, U-bit not constant\n"); - snprintf(msg, sizeof(msg), - "Expect U-bit=%d for TSN=%8.8x, got U-bit=%d", - (prev->rec.data.rcv_flags & SCTP_DATA_UNORDERED) ? 1 : 0, - chk->rec.data.TSN_seq, - (chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) ? 1 : 0); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_8; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; + TAILQ_REMOVE(&strm->inqueue, control, next_instrm); + control->on_strm_q = 0; + } + if (control->on_read_q == 0) { + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + } + if (strm->pd_api_started && control->pdapi_started) { + control->pdapi_started = 0; + strm->pd_api_started = 0; + } + control = nctl; + } + } + if (strm->pd_api_started) { + /* + * Can't add more must have gotten an un-ordered above being + * partially delivered. + */ + return (0); + } +deliver_more: + next_to_del = strm->last_sequence_delivered + 1; + if (control) { + SCTPDBG(SCTP_DEBUG_XXX, + "Looking at control:%p e(%d) ssn:%d top_fsn:%d inc_fsn:%d (nxtdel:%d)- o\n", + control, control->end_added, control->sinfo_ssn, control->top_fsn, control->fsn_included, + next_to_del); + nctl = TAILQ_NEXT(control, next_instrm); + if ((control->sinfo_ssn == next_to_del) && + (control->first_frag_seen)) { + /* Ok we can deliver it onto the stream. */ + if (control->end_added) { + /* We are done with it afterwards */ + if (control->on_strm_q) { + if (control->on_strm_q != SCTP_ON_ORDERED) { + panic("Huh control:%p on_q:%d -- not ordered?", + control, control->on_strm_q); + } + TAILQ_REMOVE(&strm->inqueue, control, next_instrm); + control->on_strm_q = 0; } - if ((prev->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == 0 && - chk->rec.data.stream_seq != - prev->rec.data.stream_seq) { + ret++; + } + if (((control->sinfo_flags >> 8) & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + /* + * A singleton now slipping through - mark + * it non-revokable too + */ + sctp_mark_non_revokable(asoc, control->sinfo_tsn); + } else if (control->end_added == 0) { + /* + * Check if we can defer adding until its + * all there + */ + if ((control->length < pd_point) || (strm->pd_api_started)) { /* - * Huh, need the correct STR here, - * they must be the same. + * Don't need it or cannot add more + * (one being delivered that way) */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Prev check - Gak, Evil plot, sseq:%d not the same as at:%d\n", - chk->rec.data.stream_seq, - prev->rec.data.stream_seq); - snprintf(msg, sizeof(msg), - "Expect SSN=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - prev->rec.data.stream_seq, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_9; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; - } - } else if ((prev->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_LAST_FRAG) { - /* Insert chk MUST be a FIRST */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) != - SCTP_DATA_FIRST_FRAG) { - SCTPDBG(SCTP_DEBUG_INDATA1, "Prev check - Gak, evil plot, its not FIRST and it must be!\n"); - snprintf(msg, sizeof(msg), - "Expect B-bit, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_10; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; + goto out; } } + if (control->on_read_q == 0) { + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + } + strm->last_sequence_delivered = next_to_del; + if ((control->end_added) && (control->last_frag_seen)) { + control = nctl; + goto deliver_more; + } else { + /* We are now doing PD API */ + strm->pd_api_started = 1; + control->pdapi_started = 1; + } + } + } +out: + return (ret); +} + +void +sctp_add_chk_to_control(struct sctp_queued_to_read *control, + struct sctp_stream_in *strm, + struct sctp_tcb *stcb, struct sctp_association *asoc, + struct sctp_tmit_chunk *chk) +{ + /* + * Given a control and a chunk, merge the data from the chk onto the + * control and free up the chunk resources. + */ + int i_locked = 0; + + if (control->on_read_q) { + /* + * Its being pd-api'd so we must do some locks. + */ + SCTP_INP_READ_LOCK(stcb->sctp_ep); + i_locked = 1; + } + if (control->data == NULL) { + control->data = chk->data; + sctp_setup_tail_pointer(control); + } else { + sctp_add_to_tail_pointer(control, chk->data); + } + control->fsn_included = chk->rec.data.fsn_num; + asoc->size_on_reasm_queue -= chk->send_size; + sctp_ucount_decr(asoc->cnt_on_reasm_queue); + sctp_mark_non_revokable(asoc, chk->rec.data.TSN_seq); + chk->data = NULL; + if (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { + control->first_frag_seen = 1; + } + if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) { + /* Its complete */ + if ((control->on_strm_q) && (control->on_read_q)) { + if (control->pdapi_started) { + control->pdapi_started = 0; + strm->pd_api_started = 0; + } + if (control->on_strm_q == SCTP_ON_UNORDERED) { + /* Unordered */ + TAILQ_REMOVE(&strm->uno_inqueue, control, next_instrm); + control->on_strm_q = 0; + } else if (control->on_strm_q == SCTP_ON_ORDERED) { + /* Ordered */ + TAILQ_REMOVE(&strm->inqueue, control, next_instrm); + control->on_strm_q = 0; + } else if (control->on_strm_q) { + panic("Unknown state on ctrl:%p on_strm_q:%d", control, + control->on_strm_q); + } } + control->end_added = 1; + control->last_frag_seen = 1; } - if (next) { - post_tsn = chk->rec.data.TSN_seq + 1; - if (post_tsn == next->rec.data.TSN_seq) { + if (i_locked) { + SCTP_INP_READ_UNLOCK(stcb->sctp_ep); + } + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); +} + +/* + * Dump onto the re-assembly queue, in its proper place. After dumping on the + * queue, see if anthing can be delivered. If so pull it off (or as much as + * we can. If we run out of space then we must dump what we can and set the + * appropriate flag to say we queued what we could. + */ +static void +sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc, + struct sctp_stream_in *strm, + struct sctp_queued_to_read *control, + struct sctp_tmit_chunk *chk, + int created_control, + int *abort_flag, uint32_t tsn) +{ + uint32_t next_fsn; + struct sctp_tmit_chunk *at, *nat; + int cnt_added, unordered; + + /* + * For old un-ordered data chunks. + */ + if ((control->sinfo_flags >> 8) & SCTP_DATA_UNORDERED) { + unordered = 1; + } else { + unordered = 0; + } + /* Must be added to the stream-in queue */ + if (created_control) { + if (sctp_place_control_in_stream(strm, asoc, control)) { + /* Duplicate SSN? */ + clean_up_control(stcb, control); + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_6); + return; + } + if ((tsn == (asoc->cumulative_tsn + 1) && (asoc->idata_supported == 0))) { /* - * Ok the one I am inserting ahead of is my NEXT - * one. A bit of valdiation here. + * Ok we created this control and now lets validate + * that its legal i.e. there is a B bit set, if not + * and we have up to the cum-ack then its invalid. */ - if (next->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { - /* Insert chk MUST be a last fragment */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) - != SCTP_DATA_LAST_FRAG) { - SCTPDBG(SCTP_DEBUG_INDATA1, "Next chk - Next is FIRST, we must be LAST\n"); - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, its not a last!\n"); - snprintf(msg, sizeof(msg), - "Expect only E-bit, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_11; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; - } - } else if ((next->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_MIDDLE_FRAG || - (next->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_LAST_FRAG) { + if ((chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) == 0) { + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_7); + return; + } + } + } + if ((asoc->idata_supported == 0) && ((control->sinfo_flags >> 8) & SCTP_DATA_UNORDERED)) { + sctp_inject_old_data_unordered(stcb, asoc, strm, control, chk, abort_flag); + return; + } + /* + * Ok we must queue the chunk into the reasembly portion: o if its + * the first it goes to the control mbuf. o if its not first but the + * next in sequence it goes to the control, and each succeeding one + * in order also goes. o if its not in order we place it on the list + * in its place. + */ + if (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) { + /* Its the very first one. */ + SCTPDBG(SCTP_DEBUG_XXX, + "chunk is a first fsn:%d becomes fsn_included\n", + chk->rec.data.fsn_num); + if (control->first_frag_seen) { + /* + * Error on senders part, they either sent us two + * data chunks with FIRST, or they sent two + * un-ordered chunks that were fragmented at the + * same time in the same stream. + */ + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_8); + return; + } + control->first_frag_seen = 1; + control->fsn_included = chk->rec.data.fsn_num; + control->data = chk->data; + sctp_mark_non_revokable(asoc, chk->rec.data.TSN_seq); + chk->data = NULL; + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + sctp_setup_tail_pointer(control); + } else { + /* Place the chunk in our list */ + int inserted = 0; + + if (control->last_frag_seen == 0) { + /* Still willing to raise highest FSN seen */ + if (SCTP_TSN_GT(chk->rec.data.fsn_num, control->top_fsn)) { + SCTPDBG(SCTP_DEBUG_XXX, + "We have a new top_fsn:%d\n", + chk->rec.data.fsn_num); + control->top_fsn = chk->rec.data.fsn_num; + } + if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) { + SCTPDBG(SCTP_DEBUG_XXX, + "The last fsn is now in place fsn:%d\n", + chk->rec.data.fsn_num); + control->last_frag_seen = 1; + } + if (asoc->idata_supported || control->first_frag_seen) { /* - * Insert chk CAN be MIDDLE or FIRST NOT - * LAST + * For IDATA we always check since we know + * that the first fragment is 0. For old + * DATA we have to receive the first before + * we knwo the first FSN (which is the TSN). */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) == - SCTP_DATA_LAST_FRAG) { - SCTPDBG(SCTP_DEBUG_INDATA1, "Next chk - Next is a MIDDLE/LAST\n"); - SCTPDBG(SCTP_DEBUG_INDATA1, "Gak, Evil plot, new prev chunk is a LAST\n"); - snprintf(msg, sizeof(msg), - "Didn't expect E-bit, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_12; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; - } - if (chk->rec.data.stream_number != - next->rec.data.stream_number) { + if (SCTP_TSN_GE(control->fsn_included, chk->rec.data.fsn_num)) { /* - * Huh, need the correct STR here, - * they must be the same. + * We have already delivered up to + * this so its a dup */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Next chk - Gak, Evil plot, ssn:%d not the same as at:%d\n", - chk->rec.data.stream_number, - next->rec.data.stream_number); - snprintf(msg, sizeof(msg), - "Required SID %4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - next->rec.data.stream_number, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_13; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_9); return; } - if ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) != - (next->rec.data.rcv_flags & SCTP_DATA_UNORDERED)) { + } + } else { + if (chk->rec.data.rcv_flags & SCTP_DATA_LAST_FRAG) { + /* Second last? huh? */ + SCTPDBG(SCTP_DEBUG_XXX, + "Duplicate last fsn:%d (top:%d) -- abort\n", + chk->rec.data.fsn_num, control->top_fsn); + sctp_abort_in_reasm(stcb, strm, control, + chk, abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_10); + return; + } + if (asoc->idata_supported || control->first_frag_seen) { + /* + * For IDATA we always check since we know + * that the first fragment is 0. For old + * DATA we have to receive the first before + * we knwo the first FSN (which is the TSN). + */ + + if (SCTP_TSN_GE(control->fsn_included, chk->rec.data.fsn_num)) { /* - * Huh, need the same ordering here, - * they must be the same. + * We have already delivered up to + * this so its a dup */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Next check - Gak, Evil plot, U-bit not constant\n"); - snprintf(msg, sizeof(msg), - "Expect U-bit=%d for TSN=%8.8x, got U-bit=%d", - (next->rec.data.rcv_flags & SCTP_DATA_UNORDERED) ? 1 : 0, - chk->rec.data.TSN_seq, - (chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) ? 1 : 0); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_14; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; + SCTPDBG(SCTP_DEBUG_XXX, + "New fsn:%d is already seen in included_fsn:%d -- abort\n", + chk->rec.data.fsn_num, control->fsn_included); + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_11); return; } - if ((next->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == 0 && - chk->rec.data.stream_seq != - next->rec.data.stream_seq) { - /* - * Huh, need the correct STR here, - * they must be the same. - */ - SCTPDBG(SCTP_DEBUG_INDATA1, "Next chk - Gak, Evil plot, sseq:%d not the same as at:%d\n", - chk->rec.data.stream_seq, - next->rec.data.stream_seq); - snprintf(msg, sizeof(msg), - "Required SSN %4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - next->rec.data.stream_seq, - chk->rec.data.TSN_seq, - chk->rec.data.stream_number, - chk->rec.data.stream_seq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_15; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - return; + } + /* + * validate not beyond top FSN if we have seen last + * one + */ + if (SCTP_TSN_GT(chk->rec.data.fsn_num, control->top_fsn)) { + SCTPDBG(SCTP_DEBUG_XXX, + "New fsn:%d is beyond or at top_fsn:%d -- abort\n", + chk->rec.data.fsn_num, + control->top_fsn); + sctp_abort_in_reasm(stcb, strm, control, chk, + abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_12); + return; + } + } + /* + * If we reach here, we need to place the new chunk in the + * reassembly for this control. + */ + SCTPDBG(SCTP_DEBUG_XXX, + "chunk is a not first fsn:%d needs to be inserted\n", + chk->rec.data.fsn_num); + TAILQ_FOREACH(at, &control->reasm, sctp_next) { + if (SCTP_TSN_GT(at->rec.data.fsn_num, chk->rec.data.fsn_num)) { + /* + * This one in queue is bigger than the new + * one, insert the new one before at. + */ + SCTPDBG(SCTP_DEBUG_XXX, + "Insert it before fsn:%d\n", + at->rec.data.fsn_num); + asoc->size_on_reasm_queue += chk->send_size; + sctp_ucount_incr(asoc->cnt_on_reasm_queue); + TAILQ_INSERT_BEFORE(at, chk, sctp_next); + inserted = 1; + break; + } else if (at->rec.data.fsn_num == chk->rec.data.fsn_num) { + /* + * Gak, He sent me a duplicate str seq + * number + */ + /* + * foo bar, I guess I will just free this + * new guy, should we abort too? FIX ME + * MAYBE? Or it COULD be that the SSN's have + * wrapped. Maybe I should compare to TSN + * somehow... sigh for now just blow away + * the chunk! + */ + SCTPDBG(SCTP_DEBUG_XXX, + "Duplicate to fsn:%d -- abort\n", + at->rec.data.fsn_num); + sctp_abort_in_reasm(stcb, strm, control, + chk, abort_flag, + SCTP_FROM_SCTP_INDATA + SCTP_LOC_13); + return; + } + } + if (inserted == 0) { + /* Goes on the end */ + SCTPDBG(SCTP_DEBUG_XXX, "Inserting at tail of list fsn:%d\n", + chk->rec.data.fsn_num); + asoc->size_on_reasm_queue += chk->send_size; + sctp_ucount_incr(asoc->cnt_on_reasm_queue); + TAILQ_INSERT_TAIL(&control->reasm, chk, sctp_next); + } + } + /* + * Ok lets see if we can suck any up into the control structure that + * are in seq if it makes sense. + */ + cnt_added = 0; + /* + * If the first fragment has not been seen there is no sense in + * looking. + */ + if (control->first_frag_seen) { + next_fsn = control->fsn_included + 1; + TAILQ_FOREACH_SAFE(at, &control->reasm, sctp_next, nat) { + if (at->rec.data.fsn_num == next_fsn) { + /* We can add this one now to the control */ + SCTPDBG(SCTP_DEBUG_XXX, + "Adding more to control:%p at:%p fsn:%d next_fsn:%d included:%d\n", + control, at, + at->rec.data.fsn_num, + next_fsn, control->fsn_included); + TAILQ_REMOVE(&control->reasm, at, sctp_next); + sctp_add_chk_to_control(control, strm, stcb, asoc, at); + cnt_added++; + next_fsn++; + if (control->end_added && control->pdapi_started) { + if (strm->pd_api_started) { + strm->pd_api_started = 0; + control->pdapi_started = 0; + } + if (control->on_read_q == 0) { + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, + &stcb->sctp_socket->so_rcv, control->end_added, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + } + break; } + } else { + break; } } } - /* Do we need to do some delivery? check */ - sctp_deliver_reasm_check(stcb, asoc); + if ((control->on_read_q) && (cnt_added > 0)) { + /* Need to wakeup the reader */ + sctp_wakeup_the_read_socket(stcb->sctp_ep); + } } -/* - * This is an unfortunate routine. It checks to make sure a evil guy is not - * stuffing us full of bad packet fragments. A broken peer could also do this - * but this is doubtful. It is to bad I must worry about evil crackers sigh - * :< more cycles. - */ -static int -sctp_does_tsn_belong_to_reasm(struct sctp_association *asoc, - uint32_t TSN_seq) +static struct sctp_queued_to_read * +find_reasm_entry(struct sctp_stream_in *strm, uint32_t msg_id, int ordered, int old) { - struct sctp_tmit_chunk *at; - uint32_t tsn_est; - - TAILQ_FOREACH(at, &asoc->reasmqueue, sctp_next) { - if (SCTP_TSN_GT(TSN_seq, at->rec.data.TSN_seq)) { - /* is it one bigger? */ - tsn_est = at->rec.data.TSN_seq + 1; - if (tsn_est == TSN_seq) { - /* yep. It better be a last then */ - if ((at->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) != - SCTP_DATA_LAST_FRAG) { - /* - * Ok this guy belongs next to a guy - * that is NOT last, it should be a - * middle/last, not a complete - * chunk. - */ - return (1); - } else { - /* - * This guy is ok since its a LAST - * and the new chunk is a fully - * self- contained one. - */ - return (0); - } + struct sctp_queued_to_read *reasm; + + if (ordered) { + TAILQ_FOREACH(reasm, &strm->inqueue, next_instrm) { + if (reasm->msg_id == msg_id) { + break; } - } else if (TSN_seq == at->rec.data.TSN_seq) { - /* Software error since I have a dup? */ - return (1); - } else { - /* - * Ok, 'at' is larger than new chunk but does it - * need to be right before it. - */ - tsn_est = TSN_seq + 1; - if (tsn_est == at->rec.data.TSN_seq) { - /* Yep, It better be a first */ - if ((at->rec.data.rcv_flags & SCTP_DATA_FRAG_MASK) != - SCTP_DATA_FIRST_FRAG) { - return (1); - } else { - return (0); - } + } + } else { + if (old) { + reasm = TAILQ_FIRST(&strm->uno_inqueue); + return (reasm); + } + TAILQ_FOREACH(reasm, &strm->uno_inqueue, next_instrm) { + if (reasm->msg_id == msg_id) { + break; } } } - return (0); + return (reasm); } + static int sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, - struct mbuf **m, int offset, struct sctp_data_chunk *ch, int chk_length, + struct mbuf **m, int offset, int chk_length, struct sctp_nets *net, uint32_t * high_tsn, int *abort_flag, - int *break_flag, int last_chunk) + int *break_flag, int last_chunk, uint8_t chtype) { /* Process a data chunk */ /* struct sctp_tmit_chunk *chk; */ + struct sctp_data_chunk *ch; + struct sctp_idata_chunk *nch, chunk_buf; struct sctp_tmit_chunk *chk; - uint32_t tsn, gap; + uint32_t tsn, fsn, gap, msg_id; struct mbuf *dmbuf; int the_len; int need_reasm_check = 0; - uint16_t strmno, strmseq; + uint16_t strmno; struct mbuf *op_err; char msg[SCTP_DIAG_INFO_LEN]; - struct sctp_queued_to_read *control; - int ordered; + struct sctp_queued_to_read *control = NULL; uint32_t protocol_id; uint8_t chunk_flags; struct sctp_stream_reset_list *liste; + struct sctp_stream_in *strm; + int ordered; + size_t clen; + int created_control = 0; + uint8_t old_data; chk = NULL; - tsn = ntohl(ch->dp.tsn); + if (chtype == SCTP_IDATA) { + nch = (struct sctp_idata_chunk *)sctp_m_getptr(*m, offset, + sizeof(struct sctp_idata_chunk), (uint8_t *) & chunk_buf); + + ch = (struct sctp_data_chunk *)nch; + clen = sizeof(struct sctp_idata_chunk); + tsn = ntohl(ch->dp.tsn); + msg_id = ntohl(nch->dp.msg_id); + if (ch->ch.chunk_flags & SCTP_DATA_FIRST_FRAG) + fsn = 0; + else + fsn = ntohl(nch->dp.fsn); + old_data = 0; + } else { + ch = (struct sctp_data_chunk *)sctp_m_getptr(*m, offset, + sizeof(struct sctp_data_chunk), (uint8_t *) & chunk_buf); + + tsn = ntohl(ch->dp.tsn); + clen = sizeof(struct sctp_data_chunk); + fsn = tsn; + msg_id = (uint32_t) (ntohs(ch->dp.stream_sequence)); + nch = NULL; + old_data = 1; + } chunk_flags = ch->ch.chunk_flags; + if ((size_t)chk_length == clen) { + /* + * Need to send an abort since we had a empty data chunk. + */ + struct mbuf *op_err; + + op_err = sctp_generate_no_user_data_cause(ch->dp.tsn); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_14; + sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); + *abort_flag = 1; + return (0); + } + ordered = ((chunk_flags & SCTP_DATA_UNORDERED) == 0); if ((chunk_flags & SCTP_DATA_SACK_IMMEDIATELY) == SCTP_DATA_SACK_IMMEDIATELY) { asoc->send_sack = 1; } @@ -1377,54 +1658,9 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, * for on a partial delivery API. */ - /* now do the tests */ - if (((asoc->cnt_on_all_streams + - asoc->cnt_on_reasm_queue + - asoc->cnt_msg_on_sb) >= SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue)) || - (((int)asoc->my_rwnd) <= 0)) { - /* - * When we have NO room in the rwnd we check to make sure - * the reader is doing its job... - */ - if (stcb->sctp_socket->so_rcv.sb_cc) { - /* some to read, wake-up */ -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - struct socket *so; - - so = SCTP_INP_SO(stcb->sctp_ep); - atomic_add_int(&stcb->asoc.refcnt, 1); - SCTP_TCB_UNLOCK(stcb); - SCTP_SOCKET_LOCK(so, 1); - SCTP_TCB_LOCK(stcb); - atomic_subtract_int(&stcb->asoc.refcnt, 1); - if (stcb->asoc.state & SCTP_STATE_CLOSED_SOCKET) { - /* assoc was freed while we were unlocked */ - SCTP_SOCKET_UNLOCK(so, 1); - return (0); - } -#endif - sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket); -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - SCTP_SOCKET_UNLOCK(so, 1); -#endif - } - /* now is it in the mapping array of what we have accepted? */ - if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_map) && - SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { - /* Nope not in the valid range dump it */ - sctp_set_rwnd(stcb, asoc); - if ((asoc->cnt_on_all_streams + - asoc->cnt_on_reasm_queue + - asoc->cnt_msg_on_sb) >= SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue)) { - SCTP_STAT_INCR(sctps_datadropchklmt); - } else { - SCTP_STAT_INCR(sctps_datadroprwnd); - } - *break_flag = 1; - return (0); - } - } + /* Is the stream valid? */ strmno = ntohs(ch->dp.stream_id); + if (strmno >= asoc->streamincnt) { struct sctp_error_invalid_stream *cause; @@ -1458,14 +1694,121 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, } return (0); } + strm = &asoc->strmin[strmno]; /* - * Before we continue lets validate that we are not being fooled by - * an evil attacker. We can only have 4k chunks based on our TSN - * spread allowed by the mapping array 512 * 8 bits, so there is no - * way our stream sequence numbers could have wrapped. We of course - * only validate the FIRST fragment so the bit must be set. + * If its a fragmented message, lets see if we can find the control + * on the reassembly queues. */ - strmseq = ntohs(ch->dp.stream_sequence); + if ((chtype == SCTP_IDATA) && ((chunk_flags & SCTP_DATA_FIRST_FRAG) == 0) && (fsn == 0)) { + /* + * The first *must* be fsn 0, and other (middle/end) pieces + * can *not* be fsn 0. + */ + goto err_out; + } + if ((chunk_flags & SCTP_DATA_NOT_FRAG) != SCTP_DATA_NOT_FRAG) { + /* See if we can find the re-assembly entity */ + control = find_reasm_entry(strm, msg_id, ordered, old_data); + SCTPDBG(SCTP_DEBUG_XXX, "chunk_flags:0x%x look for control on queues %p\n", + chunk_flags, control); + if (control) { + /* We found something, does it belong? */ + if (ordered && (msg_id != control->sinfo_ssn)) { + err_out: + op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_15; + sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); + *abort_flag = 1; + return (0); + } + if (ordered && ((control->sinfo_flags >> 8) & SCTP_DATA_UNORDERED)) { + /* + * We can't have a switched order with an + * unordered chunk + */ + goto err_out; + } + if (!ordered && (((control->sinfo_flags >> 8) & SCTP_DATA_UNORDERED) == 0)) { + /* + * We can't have a switched unordered with a + * ordered chunk + */ + goto err_out; + } + } + } else { + /* + * Its a complete segment. Lets validate we don't have a + * re-assembly going on with the same Stream/Seq (for + * ordered) or in the same Stream for unordered. + */ + SCTPDBG(SCTP_DEBUG_XXX, "chunk_flags:0x%x look for msg in case we have dup\n", + chunk_flags); + if (find_reasm_entry(strm, msg_id, ordered, old_data)) { + SCTPDBG(SCTP_DEBUG_XXX, "chunk_flags:0x%x dup detected on msg_id:%d\n", + chunk_flags, + msg_id); + + goto err_out; + } + } + /* now do the tests */ + if (((asoc->cnt_on_all_streams + + asoc->cnt_on_reasm_queue + + asoc->cnt_msg_on_sb) >= SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue)) || + (((int)asoc->my_rwnd) <= 0)) { + /* + * When we have NO room in the rwnd we check to make sure + * the reader is doing its job... + */ + if (stcb->sctp_socket->so_rcv.sb_cc) { + /* some to read, wake-up */ +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + struct socket *so; + + so = SCTP_INP_SO(stcb->sctp_ep); + atomic_add_int(&stcb->asoc.refcnt, 1); + SCTP_TCB_UNLOCK(stcb); + SCTP_SOCKET_LOCK(so, 1); + SCTP_TCB_LOCK(stcb); + atomic_subtract_int(&stcb->asoc.refcnt, 1); + if (stcb->asoc.state & SCTP_STATE_CLOSED_SOCKET) { + /* assoc was freed while we were unlocked */ + SCTP_SOCKET_UNLOCK(so, 1); + return (0); + } +#endif + sctp_sorwakeup(stcb->sctp_ep, stcb->sctp_socket); +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + SCTP_SOCKET_UNLOCK(so, 1); +#endif + } + /* now is it in the mapping array of what we have accepted? */ + if (nch == NULL) { + if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_map) && + SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { + /* Nope not in the valid range dump it */ + dump_packet: + sctp_set_rwnd(stcb, asoc); + if ((asoc->cnt_on_all_streams + + asoc->cnt_on_reasm_queue + + asoc->cnt_msg_on_sb) >= SCTP_BASE_SYSCTL(sctp_max_chunks_on_queue)) { + SCTP_STAT_INCR(sctps_datadropchklmt); + } else { + SCTP_STAT_INCR(sctps_datadroprwnd); + } + *break_flag = 1; + return (0); + } + } else { + if (control == NULL) { + goto dump_packet; + } + if (SCTP_TSN_GT(fsn, control->top_fsn)) { + goto dump_packet; + } + } + } #ifdef SCTP_ASOCLOG_OF_TSNS SCTP_TCB_LOCK_ASSERT(stcb); if (asoc->tsn_in_at >= SCTP_TSN_LOG_SIZE) { @@ -1474,7 +1817,7 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, } asoc->in_tsnlog[asoc->tsn_in_at].tsn = tsn; asoc->in_tsnlog[asoc->tsn_in_at].strm = strmno; - asoc->in_tsnlog[asoc->tsn_in_at].seq = strmseq; + asoc->in_tsnlog[asoc->tsn_in_at].seq = msg_id; asoc->in_tsnlog[asoc->tsn_in_at].sz = chk_length; asoc->in_tsnlog[asoc->tsn_in_at].flgs = chunk_flags; asoc->in_tsnlog[asoc->tsn_in_at].stcb = (void *)stcb; @@ -1482,17 +1825,24 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, asoc->in_tsnlog[asoc->tsn_in_at].in_out = 1; asoc->tsn_in_at++; #endif + /* + * Before we continue lets validate that we are not being fooled by + * an evil attacker. We can only have Nk chunks based on our TSN + * spread allowed by the mapping array N * 8 bits, so there is no + * way our stream sequence numbers could have wrapped. We of course + * only validate the FIRST fragment so the bit must be set. + */ if ((chunk_flags & SCTP_DATA_FIRST_FRAG) && (TAILQ_EMPTY(&asoc->resetHead)) && (chunk_flags & SCTP_DATA_UNORDERED) == 0 && - SCTP_SSN_GE(asoc->strmin[strmno].last_sequence_delivered, strmseq)) { + SCTP_MSGID_GE(old_data, asoc->strmin[strmno].last_sequence_delivered, msg_id)) { /* The incoming sseq is behind where we last delivered? */ SCTPDBG(SCTP_DEBUG_INDATA1, "EVIL/Broken-Dup S-SEQ:%d delivered:%d from peer, Abort!\n", - strmseq, asoc->strmin[strmno].last_sequence_delivered); + msg_id, asoc->strmin[strmno].last_sequence_delivered); snprintf(msg, sizeof(msg), "Delivered SSN=%4.4x, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", asoc->strmin[strmno].last_sequence_delivered, - tsn, strmno, strmseq); + tsn, strmno, msg_id); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_16; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); @@ -1503,12 +1853,21 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, * From here down we may find ch-> invalid * so its a good idea NOT to use it. *************************************/ - - the_len = (chk_length - sizeof(struct sctp_data_chunk)); + if (nch) { + the_len = (chk_length - sizeof(struct sctp_idata_chunk)); + } else { + the_len = (chk_length - sizeof(struct sctp_data_chunk)); + } if (last_chunk == 0) { - dmbuf = SCTP_M_COPYM(*m, - (offset + sizeof(struct sctp_data_chunk)), - the_len, M_NOWAIT); + if (nch) { + dmbuf = SCTP_M_COPYM(*m, + (offset + sizeof(struct sctp_idata_chunk)), + the_len, M_NOWAIT); + } else { + dmbuf = SCTP_M_COPYM(*m, + (offset + sizeof(struct sctp_data_chunk)), + the_len, M_NOWAIT); + } #ifdef SCTP_MBUF_LOGGING if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_MBUF_LOGGING_ENABLE) { sctp_log_mbc(dmbuf, SCTP_MBUF_ICOPY); @@ -1520,7 +1879,11 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, dmbuf = *m; /* lop off the top part */ - m_adj(dmbuf, (offset + sizeof(struct sctp_data_chunk))); + if (nch) { + m_adj(dmbuf, (offset + sizeof(struct sctp_idata_chunk))); + } else { + m_adj(dmbuf, (offset + sizeof(struct sctp_data_chunk))); + } if (SCTP_BUF_NEXT(dmbuf) == NULL) { l_len = SCTP_BUF_LEN(dmbuf); } else { @@ -1544,11 +1907,36 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, SCTP_STAT_INCR(sctps_nomem); return (0); } + /* + * Now no matter what we need a control, get one if we don't have + * one (we may have gotten it above when we found the message was + * fragmented + */ + if (control == NULL) { + sctp_alloc_a_readq(stcb, control); + sctp_build_readq_entry_mac(control, stcb, asoc->context, net, tsn, + protocol_id, + strmno, msg_id, + chunk_flags, + NULL, fsn, msg_id); + if (control == NULL) { + SCTP_STAT_INCR(sctps_nomem); + return (0); + } + if ((chunk_flags & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + control->data = dmbuf; + control->tail_mbuf = NULL; + control->end_added = control->last_frag_seen = control->first_frag_seen = 1; + control->top_fsn = control->fsn_included = fsn; + } + created_control = 1; + } + SCTPDBG(SCTP_DEBUG_XXX, "chunk_flags:0x%x ordered:%d msgid:%d control:%p\n", + chunk_flags, ordered, msg_id, control); if ((chunk_flags & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG && - asoc->fragmented_delivery_inprogress == 0 && TAILQ_EMPTY(&asoc->resetHead) && ((ordered == 0) || - ((uint16_t) (asoc->strmin[strmno].last_sequence_delivered + 1) == strmseq && + ((uint16_t) (asoc->strmin[strmno].last_sequence_delivered + 1) == msg_id && TAILQ_EMPTY(&asoc->strmin[strmno].inqueue)))) { /* Candidate for express delivery */ /* @@ -1556,111 +1944,32 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, * delivery queue, Its un-ordered OR ordered and the next to * deliver AND nothing else is stuck on the stream queue, * And there is room for it in the socket buffer. Lets just - * stuff it up the buffer.... - */ - - /* It would be nice to avoid this copy if we could :< */ - sctp_alloc_a_readq(stcb, control); - sctp_build_readq_entry_mac(control, stcb, asoc->context, net, tsn, - protocol_id, - strmno, strmseq, - chunk_flags, - dmbuf); - if (control == NULL) { - goto failed_express_del; - } - SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); - if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { - asoc->highest_tsn_inside_nr_map = tsn; - } - sctp_add_to_readq(stcb->sctp_ep, stcb, - control, &stcb->sctp_socket->so_rcv, - 1, SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); - - if ((chunk_flags & SCTP_DATA_UNORDERED) == 0) { - /* for ordered, bump what we delivered */ - asoc->strmin[strmno].last_sequence_delivered++; - } - SCTP_STAT_INCR(sctps_recvexpress); - if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { - sctp_log_strm_del_alt(stcb, tsn, strmseq, strmno, - SCTP_STR_LOG_FROM_EXPRS_DEL); - } - control = NULL; - - goto finish_express_del; - } -failed_express_del: - /* If we reach here this is a new chunk */ - chk = NULL; - control = NULL; - /* Express for fragmented delivery? */ - if ((asoc->fragmented_delivery_inprogress) && - (stcb->asoc.control_pdapi) && - (asoc->str_of_pdapi == strmno) && - (asoc->ssn_of_pdapi == strmseq) - ) { - control = stcb->asoc.control_pdapi; - if ((chunk_flags & SCTP_DATA_FIRST_FRAG) == SCTP_DATA_FIRST_FRAG) { - /* Can't be another first? */ - goto failed_pdapi_express_del; - } - if (tsn == (control->sinfo_tsn + 1)) { - /* Yep, we can add it on */ - int end = 0; - - if (chunk_flags & SCTP_DATA_LAST_FRAG) { - end = 1; - } - if (sctp_append_to_readq(stcb->sctp_ep, stcb, control, dmbuf, end, - tsn, - &stcb->sctp_socket->so_rcv)) { - SCTP_PRINTF("Append fails end:%d\n", end); - goto failed_pdapi_express_del; - } - SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); - if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { - asoc->highest_tsn_inside_nr_map = tsn; - } - SCTP_STAT_INCR(sctps_recvexpressm); - asoc->tsn_last_delivered = tsn; - asoc->fragment_flags = chunk_flags; - asoc->tsn_of_pdapi_last_delivered = tsn; - asoc->last_flags_delivered = chunk_flags; - asoc->last_strm_seq_delivered = strmseq; - asoc->last_strm_no_delivered = strmno; - if (end) { - /* clean up the flags and such */ - asoc->fragmented_delivery_inprogress = 0; - if ((chunk_flags & SCTP_DATA_UNORDERED) == 0) { - asoc->strmin[strmno].last_sequence_delivered++; - } - stcb->asoc.control_pdapi = NULL; - if (TAILQ_EMPTY(&asoc->reasmqueue) == 0) { - /* - * There could be another message - * ready - */ - need_reasm_check = 1; - } - } - control = NULL; - goto finish_express_del; - } - } -failed_pdapi_express_del: - control = NULL; - if (SCTP_BASE_SYSCTL(sctp_do_drain) == 0) { + * stuff it up the buffer.... + */ SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { asoc->highest_tsn_inside_nr_map = tsn; } - } else { - SCTP_SET_TSN_PRESENT(asoc->mapping_array, gap); - if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_map)) { - asoc->highest_tsn_inside_map = tsn; + SCTPDBG(SCTP_DEBUG_XXX, "Injecting control:%p to be read (mid:%d)\n", + control, msg_id); + + sctp_add_to_readq(stcb->sctp_ep, stcb, + control, &stcb->sctp_socket->so_rcv, + 1, SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); + + if ((chunk_flags & SCTP_DATA_UNORDERED) == 0) { + /* for ordered, bump what we delivered */ + strm->last_sequence_delivered++; + } + SCTP_STAT_INCR(sctps_recvexpress); + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { + sctp_log_strm_del_alt(stcb, tsn, msg_id, strmno, + SCTP_STR_LOG_FROM_EXPRS_DEL); } + control = NULL; + goto finish_express_del; } + /* Now will we need a chunk too? */ if ((chunk_flags & SCTP_DATA_NOT_FRAG) != SCTP_DATA_NOT_FRAG) { sctp_alloc_a_chunk(stcb, chk); if (chk == NULL) { @@ -1674,7 +1983,8 @@ failed_pdapi_express_del: } chk->rec.data.TSN_seq = tsn; chk->no_fr_allowed = 0; - chk->rec.data.stream_seq = strmseq; + chk->rec.data.fsn_num = fsn; + chk->rec.data.stream_seq = msg_id; chk->rec.data.stream_number = strmno; chk->rec.data.payloadtype = protocol_id; chk->rec.data.context = stcb->asoc.context; @@ -1683,193 +1993,110 @@ failed_pdapi_express_del: chk->asoc = asoc; chk->send_size = the_len; chk->whoTo = net; + SCTPDBG(SCTP_DEBUG_XXX, "Building ck:%p for control:%p to be read (mid:%d)\n", + chk, + control, msg_id); atomic_add_int(&net->ref_count, 1); chk->data = dmbuf; + } + /* Set the appropriate TSN mark */ + if (SCTP_BASE_SYSCTL(sctp_do_drain) == 0) { + SCTP_SET_TSN_PRESENT(asoc->nr_mapping_array, gap); + if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_nr_map)) { + asoc->highest_tsn_inside_nr_map = tsn; + } } else { - sctp_alloc_a_readq(stcb, control); - sctp_build_readq_entry_mac(control, stcb, asoc->context, net, tsn, - protocol_id, - strmno, strmseq, - chunk_flags, - dmbuf); - if (control == NULL) { - /* No memory so we drop the chunk */ - SCTP_STAT_INCR(sctps_nomem); - if (last_chunk == 0) { - /* we copied it, free the copy */ - sctp_m_freem(dmbuf); - } - return (0); + SCTP_SET_TSN_PRESENT(asoc->mapping_array, gap); + if (SCTP_TSN_GT(tsn, asoc->highest_tsn_inside_map)) { + asoc->highest_tsn_inside_map = tsn; } - control->length = the_len; } - - /* Mark it as received */ - /* Now queue it where it belongs */ - if (control != NULL) { - /* First a sanity check */ - if (asoc->fragmented_delivery_inprogress) { + /* Now is it complete (i.e. not fragmented)? */ + if ((chunk_flags & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + /* + * Special check for when streams are resetting. We could be + * more smart about this and check the actual stream to see + * if it is not being reset.. that way we would not create a + * HOLB when amongst streams being reset and those not being + * reset. + * + */ + if (((liste = TAILQ_FIRST(&asoc->resetHead)) != NULL) && + SCTP_TSN_GT(tsn, liste->tsn)) { /* - * Ok, we have a fragmented delivery in progress if - * this chunk is next to deliver OR belongs in our - * view to the reassembly, the peer is evil or - * broken. + * yep its past where we need to reset... go ahead + * and queue it. */ - uint32_t estimate_tsn; - - estimate_tsn = asoc->tsn_last_delivered + 1; - if (TAILQ_EMPTY(&asoc->reasmqueue) && - (estimate_tsn == control->sinfo_tsn)) { - /* Evil/Broke peer */ - sctp_m_freem(control->data); - control->data = NULL; - if (control->whoFrom) { - sctp_free_remote_addr(control->whoFrom); - control->whoFrom = NULL; - } - sctp_free_a_readq(stcb, control); - snprintf(msg, sizeof(msg), "Reas. queue emtpy, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - tsn, strmno, strmseq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_17; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - if (last_chunk) { - *m = NULL; - } - return (0); + if (TAILQ_EMPTY(&asoc->pending_reply_queue)) { + /* first one on */ + TAILQ_INSERT_TAIL(&asoc->pending_reply_queue, control, next); } else { - if (sctp_does_tsn_belong_to_reasm(asoc, control->sinfo_tsn)) { - sctp_m_freem(control->data); - control->data = NULL; - if (control->whoFrom) { - sctp_free_remote_addr(control->whoFrom); - control->whoFrom = NULL; - } - sctp_free_a_readq(stcb, control); - snprintf(msg, sizeof(msg), "PD ongoing, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - tsn, strmno, strmseq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_18; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - if (last_chunk) { - *m = NULL; + struct sctp_queued_to_read *ctlOn, *nctlOn; + unsigned char inserted = 0; + + TAILQ_FOREACH_SAFE(ctlOn, &asoc->pending_reply_queue, next, nctlOn) { + if (SCTP_TSN_GT(control->sinfo_tsn, ctlOn->sinfo_tsn)) { + + continue; + } else { + /* found it */ + TAILQ_INSERT_BEFORE(ctlOn, control, next); + inserted = 1; + break; } - return (0); } - } - } else { - /* No PDAPI running */ - if (!TAILQ_EMPTY(&asoc->reasmqueue)) { - /* - * Reassembly queue is NOT empty validate - * that this tsn does not need to be in - * reasembly queue. If it does then our peer - * is broken or evil. - */ - if (sctp_does_tsn_belong_to_reasm(asoc, control->sinfo_tsn)) { - sctp_m_freem(control->data); - control->data = NULL; - if (control->whoFrom) { - sctp_free_remote_addr(control->whoFrom); - control->whoFrom = NULL; - } - sctp_free_a_readq(stcb, control); - snprintf(msg, sizeof(msg), "No PD ongoing, got TSN=%8.8x, SID=%4.4x, SSN=%4.4x", - tsn, strmno, strmseq); - op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_19; - sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); - *abort_flag = 1; - if (last_chunk) { - *m = NULL; - } - return (0); + if (inserted == 0) { + /* + * must be put at end, use prevP + * (all setup from loop) to setup + * nextP. + */ + TAILQ_INSERT_TAIL(&asoc->pending_reply_queue, control, next); } } + goto finish_express_del; } - /* ok, if we reach here we have passed the sanity checks */ if (chunk_flags & SCTP_DATA_UNORDERED) { /* queue directly into socket buffer */ + SCTPDBG(SCTP_DEBUG_XXX, "Unordered data to be read control:%p msg_id:%d\n", + control, msg_id); sctp_mark_non_revokable(asoc, control->sinfo_tsn); sctp_add_to_readq(stcb->sctp_ep, stcb, control, - &stcb->sctp_socket->so_rcv, 1, SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); - } else { - /* - * Special check for when streams are resetting. We - * could be more smart about this and check the - * actual stream to see if it is not being reset.. - * that way we would not create a HOLB when amongst - * streams being reset and those not being reset. - * - * We take complete messages that have a stream reset - * intervening (aka the TSN is after where our - * cum-ack needs to be) off and put them on a - * pending_reply_queue. The reassembly ones we do - * not have to worry about since they are all sorted - * and proceessed by TSN order. It is only the - * singletons I must worry about. - */ - if (((liste = TAILQ_FIRST(&asoc->resetHead)) != NULL) && - SCTP_TSN_GT(tsn, liste->tsn)) { - /* - * yep its past where we need to reset... go - * ahead and queue it. - */ - if (TAILQ_EMPTY(&asoc->pending_reply_queue)) { - /* first one on */ - TAILQ_INSERT_TAIL(&asoc->pending_reply_queue, control, next); - } else { - struct sctp_queued_to_read *ctlOn, - *nctlOn; - unsigned char inserted = 0; + &stcb->sctp_socket->so_rcv, 1, + SCTP_READ_LOCK_NOT_HELD, SCTP_SO_NOT_LOCKED); - TAILQ_FOREACH_SAFE(ctlOn, &asoc->pending_reply_queue, next, nctlOn) { - if (SCTP_TSN_GT(control->sinfo_tsn, ctlOn->sinfo_tsn)) { - continue; - } else { - /* found it */ - TAILQ_INSERT_BEFORE(ctlOn, control, next); - inserted = 1; - break; - } - } - if (inserted == 0) { - /* - * must be put at end, use - * prevP (all setup from - * loop) to setup nextP. - */ - TAILQ_INSERT_TAIL(&asoc->pending_reply_queue, control, next); - } - } - } else { - sctp_queue_data_to_stream(stcb, asoc, control, abort_flag); - if (*abort_flag) { - if (last_chunk) { - *m = NULL; - } - return (0); + } else { + SCTPDBG(SCTP_DEBUG_XXX, "Queue control:%p for reordering msg_id:%d\n", control, + msg_id); + sctp_queue_data_to_stream(stcb, strm, asoc, control, abort_flag, &need_reasm_check); + if (*abort_flag) { + if (last_chunk) { + *m = NULL; } + return (0); } } - } else { - /* Into the re-assembly queue */ - sctp_queue_data_for_reasm(stcb, asoc, chk, abort_flag); - if (*abort_flag) { - /* - * the assoc is now gone and chk was put onto the - * reasm queue, which has all been freed. - */ - if (last_chunk) { - *m = NULL; - } - return (0); + goto finish_express_del; + } + /* If we reach here its a reassembly */ + need_reasm_check = 1; + SCTPDBG(SCTP_DEBUG_XXX, + "Queue data to stream for reasm control:%p msg_id:%d\n", + control, msg_id); + sctp_queue_data_for_reasm(stcb, asoc, strm, control, chk, created_control, abort_flag, tsn); + if (*abort_flag) { + /* + * the assoc is now gone and chk was put onto the reasm + * queue, which has all been freed. + */ + if (last_chunk) { + *m = NULL; } + return (0); } finish_express_del: + /* Here we tidy up things */ if (tsn == (asoc->cumulative_tsn + 1)) { /* Update cum-ack */ asoc->cumulative_tsn = tsn; @@ -1885,7 +2112,7 @@ finish_express_del: SCTP_STAT_INCR(sctps_recvdata); /* Set it present please */ if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_STR_LOGGING_ENABLE) { - sctp_log_strm_del_alt(stcb, tsn, strmseq, strmno, SCTP_STR_LOG_FROM_MARK_TSN); + sctp_log_strm_del_alt(stcb, tsn, msg_id, strmno, SCTP_STR_LOG_FROM_MARK_TSN); } if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_MAP_LOGGING_ENABLE) { sctp_log_map(asoc->mapping_array_base_tsn, asoc->cumulative_tsn, @@ -1912,7 +2139,7 @@ finish_express_del: /* All can be removed */ TAILQ_FOREACH_SAFE(ctl, &asoc->pending_reply_queue, next, nctl) { TAILQ_REMOVE(&asoc->pending_reply_queue, ctl, next); - sctp_queue_data_to_stream(stcb, asoc, ctl, abort_flag); + sctp_queue_data_to_stream(stcb, strm, asoc, ctl, abort_flag, &need_reasm_check); if (*abort_flag) { return (0); } @@ -1928,7 +2155,7 @@ finish_express_del: * ctl->sinfo_tsn > liste->tsn */ TAILQ_REMOVE(&asoc->pending_reply_queue, ctl, next); - sctp_queue_data_to_stream(stcb, asoc, ctl, abort_flag); + sctp_queue_data_to_stream(stcb, strm, asoc, ctl, abort_flag, &need_reasm_check); if (*abort_flag) { return (0); } @@ -1938,12 +2165,12 @@ finish_express_del: * Now service re-assembly to pick up anything that has been * held on reassembly queue? */ - sctp_deliver_reasm_check(stcb, asoc); + (void)sctp_deliver_reasm_check(stcb, asoc, strm); need_reasm_check = 0; } if (need_reasm_check) { /* Another one waits ? */ - sctp_deliver_reasm_check(stcb, asoc); + (void)sctp_deliver_reasm_check(stcb, asoc, strm); } return (1); } @@ -2179,7 +2406,7 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap) if (SCTP_OS_TIMER_PENDING(&stcb->asoc.dack_timer.timer)) { sctp_timer_stop(SCTP_TIMER_TYPE_RECV, stcb->sctp_ep, stcb, NULL, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_20); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_17); } sctp_send_shutdown(stcb, ((stcb->asoc.alternate) ? stcb->asoc.alternate : stcb->asoc.primary_destination)); @@ -2244,73 +2471,12 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap) } } -void -sctp_service_queues(struct sctp_tcb *stcb, struct sctp_association *asoc) -{ - struct sctp_tmit_chunk *chk; - uint32_t tsize, pd_point; - uint16_t nxt_todel; - - if (asoc->fragmented_delivery_inprogress) { - sctp_service_reassembly(stcb, asoc); - } - /* Can we proceed further, i.e. the PD-API is complete */ - if (asoc->fragmented_delivery_inprogress) { - /* no */ - return; - } - /* - * Now is there some other chunk I can deliver from the reassembly - * queue. - */ -doit_again: - chk = TAILQ_FIRST(&asoc->reasmqueue); - if (chk == NULL) { - asoc->size_on_reasm_queue = 0; - asoc->cnt_on_reasm_queue = 0; - return; - } - nxt_todel = asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered + 1; - if ((chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG) && - ((nxt_todel == chk->rec.data.stream_seq) || - (chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED))) { - /* - * Yep the first one is here. We setup to start reception, - * by backing down the TSN just in case we can't deliver. - */ - - /* - * Before we start though either all of the message should - * be here or the socket buffer max or nothing on the - * delivery queue and something can be delivered. - */ - if (stcb->sctp_socket) { - pd_point = min(SCTP_SB_LIMIT_RCV(stcb->sctp_socket) >> SCTP_PARTIAL_DELIVERY_SHIFT, - stcb->sctp_ep->partial_delivery_point); - } else { - pd_point = stcb->sctp_ep->partial_delivery_point; - } - if (sctp_is_all_msg_on_reasm(asoc, &tsize) || (tsize >= pd_point)) { - asoc->fragmented_delivery_inprogress = 1; - asoc->tsn_last_delivered = chk->rec.data.TSN_seq - 1; - asoc->str_of_pdapi = chk->rec.data.stream_number; - asoc->ssn_of_pdapi = chk->rec.data.stream_seq; - asoc->pdapi_ppid = chk->rec.data.payloadtype; - asoc->fragment_flags = chk->rec.data.rcv_flags; - sctp_service_reassembly(stcb, asoc); - if (asoc->fragmented_delivery_inprogress == 0) { - goto doit_again; - } - } - } -} - int sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t * high_tsn) { - struct sctp_data_chunk *ch, chunk_buf; + struct sctp_chunkhdr *ch, chunk_buf; struct sctp_association *asoc; int num_chunks = 0; /* number of control chunks processed */ int stop_proc = 0; @@ -2368,8 +2534,8 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, } } /* get pointer to the first chunk header */ - ch = (struct sctp_data_chunk *)sctp_m_getptr(m, *offset, - sizeof(struct sctp_data_chunk), (uint8_t *) & chunk_buf); + ch = (struct sctp_chunkhdr *)sctp_m_getptr(m, *offset, + sizeof(struct sctp_chunkhdr), (uint8_t *) & chunk_buf); if (ch == NULL) { return (1); } @@ -2381,14 +2547,44 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, asoc->data_pkts_seen++; while (stop_proc == 0) { /* validate chunk length */ - chk_length = ntohs(ch->ch.chunk_length); + chk_length = ntohs(ch->chunk_length); if (length - *offset < chk_length) { /* all done, mutulated chunk */ stop_proc = 1; continue; } - if (ch->ch.chunk_type == SCTP_DATA) { - if ((size_t)chk_length < sizeof(struct sctp_data_chunk)) { + if ((asoc->idata_supported == 1) && + (ch->chunk_type == SCTP_DATA)) { + struct mbuf *op_err; + char msg[SCTP_DIAG_INFO_LEN]; + + snprintf(msg, sizeof(msg), "I-DATA chunk received when DATA was negotiated"); + op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_18; + sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); + return (2); + } + if ((asoc->idata_supported == 0) && + (ch->chunk_type == SCTP_IDATA)) { + struct mbuf *op_err; + char msg[SCTP_DIAG_INFO_LEN]; + + snprintf(msg, sizeof(msg), "DATA chunk received when I-DATA was negotiated"); + op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_19; + sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); + return (2); + } + if ((ch->chunk_type == SCTP_DATA) || + (ch->chunk_type == SCTP_IDATA)) { + int clen; + + if (ch->chunk_type == SCTP_DATA) { + clen = sizeof(struct sctp_data_chunk); + } else { + clen = sizeof(struct sctp_idata_chunk); + } + if ((size_t)chk_length < clen) { /* * Need to send an abort since we had a * invalid data chunk. @@ -2399,19 +2595,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, snprintf(msg, sizeof(msg), "DATA chunk of length %d", chk_length); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_21; - sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); - return (2); - } - if ((size_t)chk_length == sizeof(struct sctp_data_chunk)) { - /* - * Need to send an abort since we had an - * empty data chunk. - */ - struct mbuf *op_err; - - op_err = sctp_generate_no_user_data_cause(ch->dp.tsn); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_22; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_20; sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); return (2); } @@ -2423,9 +2607,9 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, } else { last_chunk = 0; } - if (sctp_process_a_data_chunk(stcb, asoc, mm, *offset, ch, + if (sctp_process_a_data_chunk(stcb, asoc, mm, *offset, chk_length, net, high_tsn, &abort_flag, &break_flag, - last_chunk)) { + last_chunk, ch->chunk_type)) { num_chunks++; } if (abort_flag) @@ -2441,7 +2625,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, } } else { /* not a data chunk in the data region */ - switch (ch->ch.chunk_type) { + switch (ch->chunk_type) { case SCTP_INITIATION: case SCTP_INITIATION_ACK: case SCTP_SELECTIVE_ACK: @@ -2477,7 +2661,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, char msg[SCTP_DIAG_INFO_LEN]; snprintf(msg, sizeof(msg), "DATA chunk followed by chunk of type %2.2x", - ch->ch.chunk_type); + ch->chunk_type); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED); return (2); @@ -2485,7 +2669,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, break; default: /* unknown chunk type, use bit rules */ - if (ch->ch.chunk_type & 0x40) { + if (ch->chunk_type & 0x40) { /* Add a error report to the queue */ struct mbuf *op_err; struct sctp_gen_error_cause *cause; @@ -2505,7 +2689,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, } } } - if ((ch->ch.chunk_type & 0x80) == 0) { + if ((ch->chunk_type & 0x80) == 0) { /* discard the rest of this packet */ stop_proc = 1; } /* else skip this bad chunk and @@ -2519,8 +2703,8 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, stop_proc = 1; continue; } - ch = (struct sctp_data_chunk *)sctp_m_getptr(m, *offset, - sizeof(struct sctp_data_chunk), (uint8_t *) & chunk_buf); + ch = (struct sctp_chunkhdr *)sctp_m_getptr(m, *offset, + sizeof(struct sctp_chunkhdr), (uint8_t *) & chunk_buf); if (ch == NULL) { *offset = length; stop_proc = 1; @@ -2550,9 +2734,6 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, (void)SCTP_GETTIME_TIMEVAL(&stcb->asoc.time_last_rcvd); } /* now service all of the reassm queue if needed */ - if (!(TAILQ_EMPTY(&asoc->reasmqueue))) - sctp_service_queues(stcb, asoc); - if (SCTP_GET_STATE(asoc) == SCTP_STATE_SHUTDOWN_SENT) { /* Assure that we ack right away */ stcb->asoc.send_sack = 1; @@ -3629,7 +3810,7 @@ sctp_express_handle_sack(struct sctp_tcb *stcb, uint32_t cumack, snprintf(msg, sizeof(msg), "Cum ack %8.8x greater or equal than TSN %8.8x", cumack, send_s); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_23; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_21; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); return; } @@ -3832,7 +4013,7 @@ sctp_express_handle_sack(struct sctp_tcb *stcb, uint32_t cumack, net->dest_state &= ~SCTP_ADDR_PF; sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_24); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_22); sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net); asoc->cc_functions.sctp_cwnd_update_exit_pf(stcb, net); /* Done with this net */ @@ -3918,7 +4099,7 @@ again: } else if (SCTP_OS_TIMER_PENDING(&net->rxt_timer.timer)) { sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_25); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_23); } } } @@ -3992,7 +4173,7 @@ again: *abort_now = 1; /* XXX */ op_err = sctp_generate_cause(SCTP_CAUSE_USER_INITIATED_ABT, ""); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_26; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_24; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); return; } else { @@ -4206,7 +4387,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, snprintf(msg, sizeof(msg), "Cum ack %8.8x greater or equal than TSN %8.8x", cum_ack, send_s); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_27; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_25; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); return; } @@ -4238,7 +4419,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, /* stop any timers */ TAILQ_FOREACH(net, &asoc->nets, sctp_next) { sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, - stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_28); + stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_26); net->partial_bytes_acked = 0; net->flight_size = 0; } @@ -4443,14 +4624,14 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, if (net->new_pseudo_cumack) sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_29); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_27); } } else { if (accum_moved) { TAILQ_FOREACH(net, &asoc->nets, sctp_next) { sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, - stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_30); + stcb, net, SCTP_FROM_SCTP_INDATA + SCTP_LOC_28); } } } @@ -4630,7 +4811,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, net->dest_state &= ~SCTP_ADDR_PF; sctp_timer_stop(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_31); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_29); sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, stcb->sctp_ep, stcb, net); asoc->cc_functions.sctp_cwnd_update_exit_pf(stcb, net); /* Done with this net */ @@ -4654,7 +4835,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, /* stop all timers */ sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_32); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_30); net->flight_size = 0; net->partial_bytes_acked = 0; } @@ -4710,7 +4891,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, *abort_now = 1; /* XXX */ op_err = sctp_generate_cause(SCTP_CAUSE_USER_INITIATED_ABT, ""); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_33; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_31; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); return; } else { @@ -4862,7 +5043,7 @@ again: } else if (SCTP_OS_TIMER_PENDING(&net->rxt_timer.timer)) { sctp_timer_stop(SCTP_TIMER_TYPE_SEND, stcb->sctp_ep, stcb, net, - SCTP_FROM_SCTP_INDATA + SCTP_LOC_34); + SCTP_FROM_SCTP_INDATA + SCTP_LOC_32); } } } @@ -4963,130 +5144,175 @@ sctp_kick_prsctp_reorder_queue(struct sctp_tcb *stcb, { struct sctp_queued_to_read *ctl, *nctl; struct sctp_association *asoc; - uint16_t tt; + uint32_t tt; + int need_reasm_check = 0, old; asoc = &stcb->asoc; tt = strmin->last_sequence_delivered; + if (asoc->idata_supported) { + old = 0; + } else { + old = 1; + } /* * First deliver anything prior to and including the stream no that - * came in + * came in. */ - TAILQ_FOREACH_SAFE(ctl, &strmin->inqueue, next, nctl) { - if (SCTP_SSN_GE(tt, ctl->sinfo_ssn)) { + TAILQ_FOREACH_SAFE(ctl, &strmin->inqueue, next_instrm, nctl) { + if (SCTP_MSGID_GE(old, tt, ctl->sinfo_ssn)) { /* this is deliverable now */ - TAILQ_REMOVE(&strmin->inqueue, ctl, next); - /* subtract pending on streams */ - asoc->size_on_all_streams -= ctl->length; - sctp_ucount_decr(asoc->cnt_on_all_streams); - /* deliver it to at least the delivery-q */ - if (stcb->sctp_socket) { - sctp_mark_non_revokable(asoc, ctl->sinfo_tsn); - sctp_add_to_readq(stcb->sctp_ep, stcb, - ctl, - &stcb->sctp_socket->so_rcv, 1, SCTP_READ_LOCK_HELD, SCTP_SO_NOT_LOCKED); + if (((ctl->sinfo_flags >> 8) & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + if (ctl->on_strm_q) { + if (ctl->on_strm_q == SCTP_ON_ORDERED) { + TAILQ_REMOVE(&strmin->inqueue, ctl, next_instrm); + } else if (ctl->on_strm_q == SCTP_ON_UNORDERED) { + TAILQ_REMOVE(&strmin->uno_inqueue, ctl, next_instrm); + } else { + panic("strmin:%p ctl:%p unknown %d", + strmin, ctl, ctl->on_strm_q); + } + ctl->on_strm_q = 0; + } + /* subtract pending on streams */ + asoc->size_on_all_streams -= ctl->length; + sctp_ucount_decr(asoc->cnt_on_all_streams); + /* deliver it to at least the delivery-q */ + if (stcb->sctp_socket) { + sctp_mark_non_revokable(asoc, ctl->sinfo_tsn); + sctp_add_to_readq(stcb->sctp_ep, stcb, + ctl, + &stcb->sctp_socket->so_rcv, + 1, SCTP_READ_LOCK_HELD, + SCTP_SO_NOT_LOCKED); + } + } else { + /* Its a fragmented message */ + if (ctl->first_frag_seen) { + /* + * Make it so this is next to + * deliver, we restore later + */ + strmin->last_sequence_delivered = ctl->sinfo_ssn - 1; + need_reasm_check = 1; + break; + } } } else { /* no more delivery now. */ break; } } + if (need_reasm_check) { + int ret; + + ret = sctp_deliver_reasm_check(stcb, &stcb->asoc, strmin); + if (SCTP_MSGID_GT(old, tt, strmin->last_sequence_delivered)) { + /* Restore the next to deliver unless we are ahead */ + strmin->last_sequence_delivered = tt; + } + if (ret == 0) { + /* Left the front Partial one on */ + return; + } + need_reasm_check = 0; + } /* * now we must deliver things in queue the normal way if any are * now ready. */ tt = strmin->last_sequence_delivered + 1; - TAILQ_FOREACH_SAFE(ctl, &strmin->inqueue, next, nctl) { + TAILQ_FOREACH_SAFE(ctl, &strmin->inqueue, next_instrm, nctl) { if (tt == ctl->sinfo_ssn) { - /* this is deliverable now */ - TAILQ_REMOVE(&strmin->inqueue, ctl, next); - /* subtract pending on streams */ - asoc->size_on_all_streams -= ctl->length; - sctp_ucount_decr(asoc->cnt_on_all_streams); - /* deliver it to at least the delivery-q */ - strmin->last_sequence_delivered = ctl->sinfo_ssn; - if (stcb->sctp_socket) { - sctp_mark_non_revokable(asoc, ctl->sinfo_tsn); - sctp_add_to_readq(stcb->sctp_ep, stcb, - ctl, - &stcb->sctp_socket->so_rcv, 1, SCTP_READ_LOCK_HELD, SCTP_SO_NOT_LOCKED); + if (((ctl->sinfo_flags >> 8) & SCTP_DATA_NOT_FRAG) == SCTP_DATA_NOT_FRAG) { + /* this is deliverable now */ + if (ctl->on_strm_q) { + if (ctl->on_strm_q == SCTP_ON_ORDERED) { + TAILQ_REMOVE(&strmin->inqueue, ctl, next_instrm); + } else if (ctl->on_strm_q == SCTP_ON_UNORDERED) { + TAILQ_REMOVE(&strmin->uno_inqueue, ctl, next_instrm); + } else { + panic("strmin:%p ctl:%p unknown %d", + strmin, ctl, ctl->on_strm_q); + } + ctl->on_strm_q = 0; + } + /* subtract pending on streams */ + asoc->size_on_all_streams -= ctl->length; + sctp_ucount_decr(asoc->cnt_on_all_streams); + /* deliver it to at least the delivery-q */ + strmin->last_sequence_delivered = ctl->sinfo_ssn; + if (stcb->sctp_socket) { + sctp_mark_non_revokable(asoc, ctl->sinfo_tsn); + sctp_add_to_readq(stcb->sctp_ep, stcb, + ctl, + &stcb->sctp_socket->so_rcv, 1, + SCTP_READ_LOCK_HELD, SCTP_SO_NOT_LOCKED); + } + tt = strmin->last_sequence_delivered + 1; + } else { + /* Its a fragmented message */ + if (ctl->first_frag_seen) { + /* + * Make it so this is next to + * deliver + */ + strmin->last_sequence_delivered = ctl->sinfo_ssn - 1; + need_reasm_check = 1; + break; + } } - tt = strmin->last_sequence_delivered + 1; } else { break; } } + if (need_reasm_check) { + (void)sctp_deliver_reasm_check(stcb, &stcb->asoc, strmin); + } } static void sctp_flush_reassm_for_str_seq(struct sctp_tcb *stcb, struct sctp_association *asoc, - uint16_t stream, uint16_t seq) + uint16_t stream, uint32_t seq) { + struct sctp_queued_to_read *control; + struct sctp_stream_in *strm; struct sctp_tmit_chunk *chk, *nchk; - /* For each one on here see if we need to toss it */ /* - * For now large messages held on the reasmqueue that are complete + * For now large messages held on the stream reasm that are complete * will be tossed too. We could in theory do more work to spin * through and stop after dumping one msg aka seeing the start of a * new msg at the head, and call the delivery function... to see if * it can be delivered... But for now we just dump everything on the * queue. */ - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - /* - * Do not toss it if on a different stream or marked for - * unordered delivery in which case the stream sequence - * number has no meaning. - */ - if ((chk->rec.data.stream_number != stream) || - ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == SCTP_DATA_UNORDERED)) { - continue; + strm = &asoc->strmin[stream]; + control = find_reasm_entry(strm, (uint32_t) seq, 0, 0); + if (control == NULL) { + /* Not found */ + return; + } + TAILQ_FOREACH_SAFE(chk, &control->reasm, sctp_next, nchk) { + /* Purge hanging chunks */ + TAILQ_REMOVE(&control->reasm, chk, sctp_next); + asoc->size_on_reasm_queue -= chk->send_size; + sctp_ucount_decr(asoc->cnt_on_reasm_queue); + if (chk->data) { + sctp_m_freem(chk->data); + chk->data = NULL; } - if (chk->rec.data.stream_seq == seq) { - /* It needs to be tossed */ - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - if (SCTP_TSN_GT(chk->rec.data.TSN_seq, asoc->tsn_last_delivered)) { - asoc->tsn_last_delivered = chk->rec.data.TSN_seq; - asoc->str_of_pdapi = chk->rec.data.stream_number; - asoc->ssn_of_pdapi = chk->rec.data.stream_seq; - asoc->fragment_flags = chk->rec.data.rcv_flags; - } - asoc->size_on_reasm_queue -= chk->send_size; - sctp_ucount_decr(asoc->cnt_on_reasm_queue); - - /* Clear up any stream problem */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) != SCTP_DATA_UNORDERED && - SCTP_SSN_GT(chk->rec.data.stream_seq, asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered)) { - /* - * We must dump forward this streams - * sequence number if the chunk is not - * unordered that is being skipped. There is - * a chance that if the peer does not - * include the last fragment in its FWD-TSN - * we WILL have a problem here since you - * would have a partial chunk in queue that - * may not be deliverable. Also if a Partial - * delivery API as started the user may get - * a partial chunk. The next read returning - * a new chunk... really ugly but I see no - * way around it! Maybe a notify?? - */ - asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered = chk->rec.data.stream_seq; - } - if (chk->data) { - sctp_m_freem(chk->data); - chk->data = NULL; - } - sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); - } else if (SCTP_SSN_GT(chk->rec.data.stream_seq, seq)) { - /* - * If the stream_seq is > than the purging one, we - * are done - */ - break; + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + } + TAILQ_REMOVE(&strm->inqueue, control, next_instrm); + if (control->on_read_q == 0) { + sctp_free_remote_addr(control->whoFrom); + if (control->data) { + sctp_m_freem(control->data); + control->data = NULL; } + sctp_free_a_readq(stcb, control); } } @@ -5113,7 +5339,6 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, unsigned int i, fwd_sz, m_size; uint32_t str_seq; struct sctp_stream_in *strm; - struct sctp_tmit_chunk *chk, *nchk; struct sctp_queued_to_read *ctl, *sv; asoc = &stcb->asoc; @@ -5152,7 +5377,7 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, "New cum ack %8.8x too high, highest TSN %8.8x", new_cum_tsn, asoc->highest_tsn_inside_map); op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg); - stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_35; + stcb->sctp_ep->last_abort_code = SCTP_FROM_SCTP_INDATA + SCTP_LOC_33; sctp_abort_an_association(stcb->sctp_ep, stcb, op_err, SCTP_SO_NOT_LOCKED); return; } @@ -5183,67 +5408,9 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, /*************************************************************/ /* 2. Clear up re-assembly queue */ /*************************************************************/ - /* - * First service it if pd-api is up, just in case we can progress it - * forward - */ - if (asoc->fragmented_delivery_inprogress) { - sctp_service_reassembly(stcb, asoc); - } - /* For each one on here see if we need to toss it */ - /* - * For now large messages held on the reasmqueue that are complete - * will be tossed too. We could in theory do more work to spin - * through and stop after dumping one msg aka seeing the start of a - * new msg at the head, and call the delivery function... to see if - * it can be delivered... But for now we just dump everything on the - * queue. - */ - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - if (SCTP_TSN_GE(new_cum_tsn, chk->rec.data.TSN_seq)) { - /* It needs to be tossed */ - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - if (SCTP_TSN_GT(chk->rec.data.TSN_seq, asoc->tsn_last_delivered)) { - asoc->tsn_last_delivered = chk->rec.data.TSN_seq; - asoc->str_of_pdapi = chk->rec.data.stream_number; - asoc->ssn_of_pdapi = chk->rec.data.stream_seq; - asoc->fragment_flags = chk->rec.data.rcv_flags; - } - asoc->size_on_reasm_queue -= chk->send_size; - sctp_ucount_decr(asoc->cnt_on_reasm_queue); - - /* Clear up any stream problem */ - if ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) != SCTP_DATA_UNORDERED && - SCTP_SSN_GT(chk->rec.data.stream_seq, asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered)) { - /* - * We must dump forward this streams - * sequence number if the chunk is not - * unordered that is being skipped. There is - * a chance that if the peer does not - * include the last fragment in its FWD-TSN - * we WILL have a problem here since you - * would have a partial chunk in queue that - * may not be deliverable. Also if a Partial - * delivery API as started the user may get - * a partial chunk. The next read returning - * a new chunk... really ugly but I see no - * way around it! Maybe a notify?? - */ - asoc->strmin[chk->rec.data.stream_number].last_sequence_delivered = chk->rec.data.stream_seq; - } - if (chk->data) { - sctp_m_freem(chk->data); - chk->data = NULL; - } - sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); - } else { - /* - * Ok we have gone beyond the end of the fwd-tsn's - * mark. - */ - break; - } - } + + /* This is now done as part of clearing up the stream/seq */ + /*******************************************************/ /* 3. Update the PR-stream re-ordering queues and fix */ /* delivery issues as needed. */ @@ -5252,27 +5419,45 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, if (m && fwd_sz) { /* New method. */ unsigned int num_str; + uint32_t sequence; + uint16_t stream; + int old; struct sctp_strseq *stseq, strseqbuf; + struct sctp_strseq_mid *stseq_m, strseqbuf_m; offset += sizeof(*fwd); SCTP_INP_READ_LOCK(stcb->sctp_ep); - num_str = fwd_sz / sizeof(struct sctp_strseq); + if (asoc->idata_supported) { + num_str = fwd_sz / sizeof(struct sctp_strseq_mid); + old = 0; + } else { + num_str = fwd_sz / sizeof(struct sctp_strseq); + old = 1; + } for (i = 0; i < num_str; i++) { - uint16_t st; - - stseq = (struct sctp_strseq *)sctp_m_getptr(m, offset, - sizeof(struct sctp_strseq), - (uint8_t *) & strseqbuf); - offset += sizeof(struct sctp_strseq); - if (stseq == NULL) { - break; + if (asoc->idata_supported) { + stseq_m = (struct sctp_strseq_mid *)sctp_m_getptr(m, offset, + sizeof(struct sctp_strseq_mid), + (uint8_t *) & strseqbuf_m); + offset += sizeof(struct sctp_strseq_mid); + if (stseq_m == NULL) { + break; + } + stream = ntohs(stseq_m->stream); + sequence = ntohl(stseq_m->msg_id); + } else { + stseq = (struct sctp_strseq *)sctp_m_getptr(m, offset, + sizeof(struct sctp_strseq), + (uint8_t *) & strseqbuf); + offset += sizeof(struct sctp_strseq); + if (stseq == NULL) { + break; + } + stream = ntohs(stseq->stream); + sequence = (uint32_t) ntohs(stseq->sequence); } /* Convert */ - st = ntohs(stseq->stream); - stseq->stream = st; - st = ntohs(stseq->sequence); - stseq->sequence = st; /* now process */ @@ -5281,12 +5466,12 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, * queue where its not all delivered. If we find it * we transmute the read entry into a PDI_ABORTED. */ - if (stseq->stream >= asoc->streamincnt) { + if (stream >= asoc->streamincnt) { /* screwed up streams, stop! */ break; } - if ((asoc->str_of_pdapi == stseq->stream) && - (asoc->ssn_of_pdapi == stseq->sequence)) { + if ((asoc->str_of_pdapi == stream) && + (asoc->ssn_of_pdapi == sequence)) { /* * If this is the one we were partially * delivering now then we no longer are. @@ -5295,14 +5480,24 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, */ asoc->fragmented_delivery_inprogress = 0; } - sctp_flush_reassm_for_str_seq(stcb, asoc, stseq->stream, stseq->sequence); + strm = &asoc->strmin[stream]; + sctp_flush_reassm_for_str_seq(stcb, asoc, stream, sequence); TAILQ_FOREACH(ctl, &stcb->sctp_ep->read_queue, next) { - if ((ctl->sinfo_stream == stseq->stream) && - (ctl->sinfo_ssn == stseq->sequence)) { - str_seq = (stseq->stream << 16) | stseq->sequence; - ctl->end_added = 1; + if ((ctl->sinfo_stream == stream) && + (ctl->sinfo_ssn == sequence)) { + str_seq = (stream << 16) | (0x0000ffff & sequence); ctl->pdapi_aborted = 1; sv = stcb->asoc.control_pdapi; + ctl->end_added = 1; + if (ctl->on_strm_q == SCTP_ON_ORDERED) { + TAILQ_REMOVE(&strm->inqueue, ctl, next_instrm); + } else if (ctl->on_strm_q == SCTP_ON_UNORDERED) { + TAILQ_REMOVE(&strm->uno_inqueue, ctl, next_instrm); + } else if (ctl->on_strm_q) { + panic("strm:%p ctl:%p unknown %d", + strm, ctl, ctl->on_strm_q); + } + ctl->on_strm_q = 0; stcb->asoc.control_pdapi = ctl; sctp_ulp_notify(SCTP_NOTIFY_PARTIAL_DELVIERY_INDICATION, stcb, @@ -5311,16 +5506,15 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, SCTP_SO_NOT_LOCKED); stcb->asoc.control_pdapi = sv; break; - } else if ((ctl->sinfo_stream == stseq->stream) && - SCTP_SSN_GT(ctl->sinfo_ssn, stseq->sequence)) { + } else if ((ctl->sinfo_stream == stream) && + SCTP_MSGID_GT(old, ctl->sinfo_ssn, sequence)) { /* We are past our victim SSN */ break; } } - strm = &asoc->strmin[stseq->stream]; - if (SCTP_SSN_GT(stseq->sequence, strm->last_sequence_delivered)) { + if (SCTP_MSGID_GT(old, sequence, strm->last_sequence_delivered)) { /* Update the sequence number */ - strm->last_sequence_delivered = stseq->sequence; + strm->last_sequence_delivered = sequence; } /* now kick the stream the new way */ /* sa_ignore NO_NULL_CHK */ @@ -5332,10 +5526,4 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, * Now slide thing forward. */ sctp_slide_mapping_arrays(stcb); - - if (!TAILQ_EMPTY(&asoc->reasmqueue)) { - /* now lets kick out and check for more fragmented delivery */ - /* sa_ignore NO_NULL_CHK */ - sctp_deliver_reasm_check(stcb, &stcb->asoc); - } } diff --git a/sys/netinet/sctp_indata.h b/sys/netinet/sctp_indata.h index 94cd49c..c95c5b8 100644 --- a/sys/netinet/sctp_indata.h +++ b/sys/netinet/sctp_indata.h @@ -43,35 +43,31 @@ sctp_build_readq_entry(struct sctp_tcb *stcb, struct sctp_nets *net, uint32_t tsn, uint32_t ppid, uint32_t context, uint16_t stream_no, - uint16_t stream_seq, uint8_t flags, + uint32_t stream_seq, uint8_t flags, struct mbuf *dm); -#define sctp_build_readq_entry_mac(_ctl, in_it, context, net, tsn, ppid, stream_no, stream_seq, flags, dm) do { \ +#define sctp_build_readq_entry_mac(_ctl, in_it, context, net, tsn, ppid, stream_no, stream_seq, flags, dm, tfsn, msgid) do { \ if (_ctl) { \ atomic_add_int(&((net)->ref_count), 1); \ + memset(_ctl, 0, sizeof(struct sctp_queued_to_read)); \ (_ctl)->sinfo_stream = stream_no; \ (_ctl)->sinfo_ssn = stream_seq; \ + TAILQ_INIT(&_ctl->reasm); \ + (_ctl)->top_fsn = tfsn; \ + (_ctl)->msg_id = msgid; \ (_ctl)->sinfo_flags = (flags << 8); \ (_ctl)->sinfo_ppid = ppid; \ (_ctl)->sinfo_context = context; \ - (_ctl)->sinfo_timetolive = 0; \ + (_ctl)->fsn_included = 0xffffffff; \ + (_ctl)->top_fsn = 0xffffffff; \ (_ctl)->sinfo_tsn = tsn; \ (_ctl)->sinfo_cumtsn = tsn; \ (_ctl)->sinfo_assoc_id = sctp_get_associd((in_it)); \ - (_ctl)->length = 0; \ - (_ctl)->held_length = 0; \ (_ctl)->whoFrom = net; \ (_ctl)->data = dm; \ - (_ctl)->tail_mbuf = NULL; \ - (_ctl)->aux_data = NULL; \ (_ctl)->stcb = (in_it); \ (_ctl)->port_from = (in_it)->rport; \ - (_ctl)->spec_flags = 0; \ - (_ctl)->do_not_ref_stcb = 0; \ - (_ctl)->end_added = 0; \ - (_ctl)->pdapi_aborted = 0; \ - (_ctl)->some_taken = 0; \ } \ } while (0) diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c index c555be2..9e4cbd8 100644 --- a/sys/netinet/sctp_input.c +++ b/sys/netinet/sctp_input.c @@ -386,17 +386,9 @@ sctp_process_init(struct sctp_init_chunk *cp, struct sctp_tcb *stcb) if (asoc->strmin != NULL) { /* Free the old ones */ - struct sctp_queued_to_read *ctl, *nctl; - for (i = 0; i < asoc->streamincnt; i++) { - TAILQ_FOREACH_SAFE(ctl, &asoc->strmin[i].inqueue, next, nctl) { - TAILQ_REMOVE(&asoc->strmin[i].inqueue, ctl, next); - sctp_free_remote_addr(ctl->whoFrom); - ctl->whoFrom = NULL; - sctp_m_freem(ctl->data); - ctl->data = NULL; - sctp_free_a_readq(stcb, ctl); - } + sctp_clean_up_stream(stcb, &asoc->strmin[i].inqueue); + sctp_clean_up_stream(stcb, &asoc->strmin[i].uno_inqueue); } SCTP_FREE(asoc->strmin, SCTP_M_STRMI); } @@ -414,8 +406,10 @@ sctp_process_init(struct sctp_init_chunk *cp, struct sctp_tcb *stcb) } for (i = 0; i < asoc->streamincnt; i++) { asoc->strmin[i].stream_no = i; - asoc->strmin[i].last_sequence_delivered = 0xffff; + asoc->strmin[i].last_sequence_delivered = 0xffffffff; TAILQ_INIT(&asoc->strmin[i].inqueue); + TAILQ_INIT(&asoc->strmin[i].uno_inqueue); + asoc->strmin[i].pd_api_started = 0; asoc->strmin[i].delivery_started = 0; } /* @@ -894,6 +888,29 @@ sctp_handle_shutdown(struct sctp_shutdown_chunk *cp, * With a normal shutdown we assume the end of last record. */ SCTP_INP_READ_LOCK(stcb->sctp_ep); + if (asoc->control_pdapi->on_strm_q) { + struct sctp_stream_in *strm; + + strm = &asoc->strmin[asoc->control_pdapi->sinfo_stream]; + if (asoc->control_pdapi->on_strm_q == SCTP_ON_UNORDERED) { + /* Unordered */ + TAILQ_REMOVE(&strm->uno_inqueue, asoc->control_pdapi, next_instrm); + asoc->control_pdapi->on_strm_q = 0; + } else if (asoc->control_pdapi->on_strm_q == SCTP_ON_ORDERED) { + /* Ordered */ + TAILQ_REMOVE(&strm->inqueue, asoc->control_pdapi, next_instrm); + asoc->control_pdapi->on_strm_q = 0; + } else { + panic("Unknown state on ctrl:%p on_strm_q:%d", + asoc->control_pdapi, + asoc->control_pdapi->on_strm_q); + } + } + printf("%s:%d End added to ctl:%p (%d)\n", + __FUNCTION__, + __LINE__, + asoc->control_pdapi, + asoc->control_pdapi->on_strm_q); asoc->control_pdapi->end_added = 1; asoc->control_pdapi->pdapi_aborted = 1; asoc->control_pdapi = NULL; @@ -1009,6 +1026,11 @@ sctp_handle_shutdown_ack(struct sctp_shutdown_ack_chunk *cp SCTP_UNUSED, * With a normal shutdown we assume the end of last record. */ SCTP_INP_READ_LOCK(stcb->sctp_ep); + printf("%s:%d End added to ctl:%p (%d)\n", + __FUNCTION__, + __LINE__, + asoc->control_pdapi, + asoc->control_pdapi->on_strm_q); asoc->control_pdapi->end_added = 1; asoc->control_pdapi->pdapi_aborted = 1; asoc->control_pdapi = NULL; @@ -1083,6 +1105,7 @@ sctp_process_unrecog_chunk(struct sctp_tcb *stcb, struct sctp_paramhdr *phdr, case SCTP_ASCONF: sctp_asconf_cleanup(stcb, net); break; + case SCTP_IFORWARD_CUM_TSN: case SCTP_FORWARD_CUM_TSN: stcb->asoc.prsctp_supported = 0; break; @@ -3450,6 +3473,7 @@ process_chunk_drop(struct sctp_tcb *stcb, struct sctp_chunk_desc *desc, /* resend last asconf ack */ sctp_send_asconf_ack(stcb); break; + case SCTP_IFORWARD_CUM_TSN: case SCTP_FORWARD_CUM_TSN: send_forward_tsn(stcb, &stcb->asoc); break; @@ -3475,8 +3499,8 @@ sctp_reset_in_stream(struct sctp_tcb *stcb, uint32_t number_entries, uint16_t * uint16_t temp; /* - * We set things to 0xffff since this is the last delivered sequence - * and we will be sending in 0 after the reset. + * We set things to 0xffffffff since this is the last delivered + * sequence and we will be sending in 0 after the reset. */ if (number_entries) { @@ -3485,12 +3509,12 @@ sctp_reset_in_stream(struct sctp_tcb *stcb, uint32_t number_entries, uint16_t * if (temp >= stcb->asoc.streamincnt) { continue; } - stcb->asoc.strmin[temp].last_sequence_delivered = 0xffff; + stcb->asoc.strmin[temp].last_sequence_delivered = 0xffffffff; } } else { list = NULL; for (i = 0; i < stcb->asoc.streamincnt; i++) { - stcb->asoc.strmin[i].last_sequence_delivered = 0xffff; + stcb->asoc.strmin[i].last_sequence_delivered = 0xffffffff; } } sctp_ulp_notify(SCTP_NOTIFY_STR_RESET_RECV, stcb, number_entries, (void *)list, SCTP_SO_NOT_LOCKED); @@ -4031,20 +4055,28 @@ sctp_handle_str_reset_add_strm(struct sctp_tcb *stcb, struct sctp_tmit_chunk *ch /* copy off the old data */ for (i = 0; i < stcb->asoc.streamincnt; i++) { TAILQ_INIT(&stcb->asoc.strmin[i].inqueue); + TAILQ_INIT(&stcb->asoc.strmin[i].uno_inqueue); stcb->asoc.strmin[i].stream_no = i; stcb->asoc.strmin[i].last_sequence_delivered = oldstrm[i].last_sequence_delivered; stcb->asoc.strmin[i].delivery_started = oldstrm[i].delivery_started; + stcb->asoc.strmin[i].pd_api_started = oldstrm[i].pd_api_started; /* now anything on those queues? */ - TAILQ_FOREACH_SAFE(ctl, &oldstrm[i].inqueue, next, nctl) { - TAILQ_REMOVE(&oldstrm[i].inqueue, ctl, next); - TAILQ_INSERT_TAIL(&stcb->asoc.strmin[i].inqueue, ctl, next); + TAILQ_FOREACH_SAFE(ctl, &oldstrm[i].inqueue, next_instrm, nctl) { + TAILQ_REMOVE(&oldstrm[i].inqueue, ctl, next_instrm); + TAILQ_INSERT_TAIL(&stcb->asoc.strmin[i].inqueue, ctl, next_instrm); + } + TAILQ_FOREACH_SAFE(ctl, &oldstrm[i].uno_inqueue, next_instrm, nctl) { + TAILQ_REMOVE(&oldstrm[i].uno_inqueue, ctl, next_instrm); + TAILQ_INSERT_TAIL(&stcb->asoc.strmin[i].uno_inqueue, ctl, next_instrm); } } /* Init the new streams */ for (i = stcb->asoc.streamincnt; i < num_stream; i++) { TAILQ_INIT(&stcb->asoc.strmin[i].inqueue); + TAILQ_INIT(&stcb->asoc.strmin[i].uno_inqueue); stcb->asoc.strmin[i].stream_no = i; - stcb->asoc.strmin[i].last_sequence_delivered = 0xffff; + stcb->asoc.strmin[i].last_sequence_delivered = 0xffffffff; + stcb->asoc.strmin[i].pd_api_started = 0; stcb->asoc.strmin[i].delivery_started = 0; } SCTP_FREE(oldstrm, SCTP_M_STRMI); @@ -5441,6 +5473,7 @@ process_control_chunks: } break; case SCTP_FORWARD_CUM_TSN: + case SCTP_IFORWARD_CUM_TSN: SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_FWD-TSN\n"); if (chk_length < sizeof(struct sctp_forward_tsn_chunk)) { /* Its not ours */ diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h index 777e0a7..90c4ab8 100644 --- a/sys/netinet/sctp_os_bsd.h +++ b/sys/netinet/sctp_os_bsd.h @@ -480,9 +480,9 @@ sctp_get_mbuf_for_msg(unsigned int space_needed, #define SCTP_SAVE_ATOMIC_DECREMENT(addr, val) \ { \ int32_t oldval; \ - oldval = atomic_fetchadd_int(addr, -val); \ + oldval = atomic_fetchadd_int(addr, -val); \ if (oldval < val) { \ - panic("Counter goes negative"); \ + panic("Counter goes negative addr:%p val:%d oldval:%d", addr, val, oldval); \ } \ } #else diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index 8eda473..77d6114 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -3326,10 +3326,11 @@ sctp_source_address_selection(struct sctp_inpcb *inp, #endif /** - * Rules: - Find the route if needed, cache if I can. - Look at - * interface address in route, Is it in the bound list. If so we - * have the best source. - If not we must rotate amongst the - * addresses. + * Rules: + * - Find the route if needed, cache if I can. + * - Look at interface address in route, Is it in the bound list. If so we + * have the best source. + * - If not we must rotate amongst the addresses. * * Cavets and issues * @@ -4796,6 +4797,9 @@ sctp_send_initiate(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int so_locked pr_supported = (struct sctp_supported_chunk_types_param *)(mtod(m, caddr_t)+chunk_len); if (stcb->asoc.prsctp_supported == 1) { pr_supported->chunk_types[num_ext++] = SCTP_FORWARD_CUM_TSN; + if (stcb->asoc.idata_supported) { + pr_supported->chunk_types[num_ext++] = SCTP_IFORWARD_CUM_TSN; + } } if (stcb->asoc.auth_supported == 1) { pr_supported->chunk_types[num_ext++] = SCTP_AUTHENTICATION; @@ -4807,6 +4811,9 @@ sctp_send_initiate(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int so_locked if (stcb->asoc.reconfig_supported == 1) { pr_supported->chunk_types[num_ext++] = SCTP_STREAM_RESET; } + if (stcb->asoc.idata_supported) { + pr_supported->chunk_types[num_ext++] = SCTP_IDATA; + } if (stcb->asoc.nrsack_supported == 1) { pr_supported->chunk_types[num_ext++] = SCTP_NR_SELECTIVE_ACK; } @@ -5951,6 +5958,10 @@ do_a_abort: if (((asoc != NULL) && (asoc->prsctp_supported == 1)) || ((asoc == NULL) && (inp->prsctp_supported == 1))) { pr_supported->chunk_types[num_ext++] = SCTP_FORWARD_CUM_TSN; + if (((asoc != NULL) && (asoc->idata_supported == 1)) || + ((asoc == NULL) && (inp->idata_supported == 1))) { + pr_supported->chunk_types[num_ext++] = SCTP_IFORWARD_CUM_TSN; + } } if (((asoc != NULL) && (asoc->auth_supported == 1)) || ((asoc == NULL) && (inp->auth_supported == 1))) { @@ -5965,6 +5976,10 @@ do_a_abort: ((asoc == NULL) && (inp->reconfig_supported == 1))) { pr_supported->chunk_types[num_ext++] = SCTP_STREAM_RESET; } + if (((asoc != NULL) && (asoc->idata_supported == 1)) || + ((asoc == NULL) && (inp->idata_supported == 1))) { + pr_supported->chunk_types[num_ext++] = SCTP_IDATA; + } if (((asoc != NULL) && (asoc->nrsack_supported == 1)) || ((asoc == NULL) && (inp->nrsack_supported == 1))) { pr_supported->chunk_types[num_ext++] = SCTP_NR_SELECTIVE_ACK; @@ -6232,11 +6247,15 @@ sctp_get_frag_point(struct sctp_tcb *stcb, * we use a larger frag point. */ if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) { - ovh = SCTP_MED_OVERHEAD; + ovh = SCTP_MIN_OVERHEAD; } else { - ovh = SCTP_MED_V4_OVERHEAD; + ovh = SCTP_MIN_V4_OVERHEAD; + } + if (stcb->asoc.idata_supported) { + ovh += sizeof(struct sctp_idata_chunk); + } else { + ovh += sizeof(struct sctp_data_chunk); } - if (stcb->asoc.sctp_frag_point > asoc->smallest_mtu) siz = asoc->smallest_mtu - ovh; else @@ -6361,6 +6380,8 @@ sctp_msg_append(struct sctp_tcb *stcb, sp->timetolive = srcv->sinfo_timetolive; sp->ppid = srcv->sinfo_ppid; sp->context = srcv->sinfo_context; + sp->fsn = 0; + sp->msg_id = atomic_fetchadd_int(&stcb->asoc.assoc_msg_id, 1); if (sp->sinfo_flags & SCTP_ADDR_OVER) { sp->net = net; atomic_add_int(&sp->net->ref_count, 1); @@ -7163,8 +7184,9 @@ sctp_move_to_outqueue(struct sctp_tcb *stcb, struct sctp_association *asoc; struct sctp_stream_queue_pending *sp; struct sctp_tmit_chunk *chk; - struct sctp_data_chunk *dchkh; - uint32_t to_move, length; + struct sctp_data_chunk *dchkh = NULL; + struct sctp_idata_chunk *ndchkh = NULL; + uint32_t to_move, length, leading; uint8_t rcv_flags = 0; uint8_t some_taken; uint8_t send_lock_up = 0; @@ -7173,6 +7195,7 @@ sctp_move_to_outqueue(struct sctp_tcb *stcb, asoc = &stcb->asoc; one_more_time: /* sa_ignore FREED_MEMORY */ + *locked = 0; sp = TAILQ_FIRST(&strq->outqueue); if (sp == NULL) { *locked = 0; @@ -7184,7 +7207,9 @@ one_more_time: if (sp) { goto one_more_time; } - if (strq->last_msg_incomplete) { + if ((sctp_is_feature_on(stcb->sctp_ep, SCTP_PCB_FLAGS_EXPLICIT_EOR) == 0) && + (stcb->asoc.idata_supported == 0) && + (strq->last_msg_incomplete)) { SCTP_PRINTF("Huh? Stream:%d lm_in_c=%d but queue is NULL\n", strq->stream_no, strq->last_msg_incomplete); @@ -7248,7 +7273,8 @@ one_more_time: * sender just finished this but still holds a * reference */ - *locked = 1; + if (stcb->asoc.idata_supported == 0) + *locked = 1; *giveup = 1; to_move = 0; goto out_of; @@ -7257,7 +7283,8 @@ one_more_time: /* is there some to get */ if (sp->length == 0) { /* no */ - *locked = 1; + if (stcb->asoc.idata_supported == 0) + *locked = 1; *giveup = 1; to_move = 0; goto out_of; @@ -7280,7 +7307,8 @@ one_more_time: } sp->length = 0; sp->some_taken = 1; - *locked = 1; + if (stcb->asoc.idata_supported == 0) + *locked = 1; *giveup = 1; to_move = 0; goto out_of; @@ -7342,7 +7370,8 @@ re_look: } } else { /* Nothing to take. */ - if (sp->some_taken) { + if ((sp->some_taken) && + (stcb->asoc.idata_supported == 0)) { *locked = 1; } *giveup = 1; @@ -7461,7 +7490,12 @@ dont_do_it: } else { atomic_subtract_int(&sp->length, to_move); } - if (M_LEADINGSPACE(chk->data) < (int)sizeof(struct sctp_data_chunk)) { + if (stcb->asoc.idata_supported == 0) { + leading = (int)sizeof(struct sctp_data_chunk); + } else { + leading = (int)sizeof(struct sctp_idata_chunk); + } + if (M_LEADINGSPACE(chk->data) < leading) { /* Not enough room for a chunk header, get some */ struct mbuf *m; @@ -7502,7 +7536,11 @@ dont_do_it: M_ALIGN(chk->data, 4); } } - SCTP_BUF_PREPEND(chk->data, sizeof(struct sctp_data_chunk), M_NOWAIT); + if (stcb->asoc.idata_supported == 0) { + SCTP_BUF_PREPEND(chk->data, sizeof(struct sctp_data_chunk), M_NOWAIT); + } else { + SCTP_BUF_PREPEND(chk->data, sizeof(struct sctp_idata_chunk), M_NOWAIT); + } if (chk->data == NULL) { /* HELP, TSNH since we assured it would not above? */ #ifdef INVARIANTS @@ -7515,8 +7553,13 @@ dont_do_it: to_move = 0; goto out_of; } - sctp_snd_sb_alloc(stcb, sizeof(struct sctp_data_chunk)); - chk->book_size = chk->send_size = (uint16_t) (to_move + sizeof(struct sctp_data_chunk)); + if (stcb->asoc.idata_supported == 0) { + sctp_snd_sb_alloc(stcb, sizeof(struct sctp_data_chunk)); + chk->book_size = chk->send_size = (uint16_t) (to_move + sizeof(struct sctp_data_chunk)); + } else { + sctp_snd_sb_alloc(stcb, sizeof(struct sctp_idata_chunk)); + chk->book_size = chk->send_size = (uint16_t) (to_move + sizeof(struct sctp_idata_chunk)); + } chk->book_size_scale = 0; chk->sent = SCTP_DATAGRAM_UNSENT; @@ -7555,7 +7598,11 @@ dont_do_it: (uint32_t) ((chk->rec.data.stream_number << 16) | chk->rec.data.stream_seq), chk->rec.data.TSN_seq); } - dchkh = mtod(chk->data, struct sctp_data_chunk *); + if (stcb->asoc.idata_supported == 0) { + dchkh = mtod(chk->data, struct sctp_data_chunk *); + } else { + ndchkh = mtod(chk->data, struct sctp_idata_chunk *); + } /* * Put the rest of the things in place now. Size was done earlier in * previous loop prior to padding. @@ -7577,14 +7624,29 @@ dont_do_it: asoc->out_tsnlog[asoc->tsn_out_at].in_out = 2; asoc->tsn_out_at++; #endif - - dchkh->ch.chunk_type = SCTP_DATA; - dchkh->ch.chunk_flags = chk->rec.data.rcv_flags; - dchkh->dp.tsn = htonl(chk->rec.data.TSN_seq); - dchkh->dp.stream_id = htons(strq->stream_no); - dchkh->dp.stream_sequence = htons(chk->rec.data.stream_seq); - dchkh->dp.protocol_id = chk->rec.data.payloadtype; - dchkh->ch.chunk_length = htons(chk->send_size); + if (stcb->asoc.idata_supported == 0) { + dchkh->ch.chunk_type = SCTP_DATA; + dchkh->ch.chunk_flags = chk->rec.data.rcv_flags; + dchkh->dp.tsn = htonl(chk->rec.data.TSN_seq); + dchkh->dp.stream_id = htons((strq->stream_no & 0x0000ffff)); + dchkh->dp.stream_sequence = htons(chk->rec.data.stream_seq); + dchkh->dp.protocol_id = chk->rec.data.payloadtype; + dchkh->ch.chunk_length = htons(chk->send_size); + } else { + ndchkh->ch.chunk_type = SCTP_IDATA; + ndchkh->ch.chunk_flags = chk->rec.data.rcv_flags; + ndchkh->dp.tsn = htonl(chk->rec.data.TSN_seq); + ndchkh->dp.stream_id = htons(strq->stream_no); + /* WHAT DO WE DO HERE??? */ + ndchkh->dp.reserved = htons(0); + ndchkh->dp.msg_id = htonl(sp->msg_id); + if (sp->fsn == 0) + ndchkh->dp.protocol_id = chk->rec.data.payloadtype; + else + ndchkh->dp.fsn = htonl(sp->fsn); + sp->fsn++; + ndchkh->ch.chunk_length = htons(chk->send_size); + } /* Now advance the chk->send_size by the actual pad needed. */ if (chk->send_size < SCTP_SIZE32(chk->book_size)) { /* need a pad */ @@ -7640,7 +7702,8 @@ dont_do_it: stcb->asoc.locked_on_sending = NULL; } else { /* more to go, we are locked */ - *locked = 1; + if (stcb->asoc.idata_supported == 0) + *locked = 1; } asoc->chunks_on_out_queue++; strq->chunks_on_queues++; @@ -7686,7 +7749,11 @@ sctp_fill_outqueue(struct sctp_tcb *stcb, break; } /* Need an allowance for the data chunk header too */ - goal_mtu -= sizeof(struct sctp_data_chunk); + if (stcb->asoc.idata_supported == 0) { + goal_mtu -= sizeof(struct sctp_data_chunk); + } else { + goal_mtu -= sizeof(struct sctp_idata_chunk); + } /* must make even word boundary */ goal_mtu &= 0xfffffffc; @@ -7797,12 +7864,15 @@ sctp_med_chunk_output(struct sctp_inpcb *inp, { /** * Ok this is the generic chunk service queue. we must do the - * following: - Service the stream queue that is next, moving any - * message (note I must get a complete message i.e. FIRST/MIDDLE and - * LAST to the out queue in one pass) and assigning TSN's - Check to - * see if the cwnd/rwnd allows any output, if so we go ahead and - * fomulate and send the low level chunks. Making sure to combine - * any control in the control chunk queue also. + * following: + * - Service the stream queue that is next, moving any + * message (note I must get a complete message i.e. FIRST/MIDDLE and + * LAST to the out queue in one pass) and assigning TSN's. This + * only applys though if the peer does not support NDATA. For NDATA + * chunks its ok to not send the entire message ;-) + * - Check to see if the cwnd/rwnd allows any output, if so we go ahead and + * fomulate and send the low level chunks. Making sure to combine + * any control in the control chunk queue also. */ struct sctp_nets *net, *start_at, *sack_goes_to = NULL, *old_start_at = NULL; struct mbuf *outchain, *endoutchain; @@ -10225,7 +10295,13 @@ send_forward_tsn(struct sctp_tcb *stcb, struct sctp_tmit_chunk *chk; struct sctp_forward_tsn_chunk *fwdtsn; uint32_t advance_peer_ack_point; + int old; + if (asoc->idata_supported) { + old = 0; + } else { + old = 1; + } SCTP_TCB_LOCK_ASSERT(stcb); TAILQ_FOREACH(chk, &asoc->control_send_queue, sctp_next) { if (chk->rec.chunk_id.id == SCTP_FORWARD_CUM_TSN) { @@ -10247,6 +10323,11 @@ send_forward_tsn(struct sctp_tcb *stcb, } asoc->fwd_tsn_cnt++; chk->copy_by_ref = 0; + /* + * We don't do the old thing here since this is used not for on-wire + * but to tell if we are sending a fwd-tsn by the stack during + * output. And if its a IFORWARD or a FORWARD it is a fwd-tsn. + */ chk->rec.chunk_id.id = SCTP_FORWARD_CUM_TSN; chk->rec.chunk_id.can_take_data = 0; chk->flags = 0; @@ -10271,6 +10352,7 @@ sctp_fill_in_rest: { struct sctp_tmit_chunk *at, *tp1, *last; struct sctp_strseq *strseq; + struct sctp_strseq_mid *strseq_m; unsigned int cnt_of_space, i, ovh; unsigned int space_needed; unsigned int cnt_of_skipped = 0; @@ -10287,9 +10369,13 @@ sctp_fill_in_rest: } cnt_of_skipped++; } - space_needed = (sizeof(struct sctp_forward_tsn_chunk) + - (cnt_of_skipped * sizeof(struct sctp_strseq))); - + if (old) { + space_needed = (sizeof(struct sctp_forward_tsn_chunk) + + (cnt_of_skipped * sizeof(struct sctp_strseq))); + } else { + space_needed = (sizeof(struct sctp_forward_tsn_chunk) + + (cnt_of_skipped * sizeof(struct sctp_strseq_mid))); + } cnt_of_space = (unsigned int)M_TRAILINGSPACE(chk->data); if (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_BOUND_V6) { @@ -10318,8 +10404,13 @@ sctp_fill_in_rest: 0xff, 0xff, cnt_of_space, space_needed); } - cnt_of_skipped = cnt_of_space - sizeof(struct sctp_forward_tsn_chunk); - cnt_of_skipped /= sizeof(struct sctp_strseq); + if (old) { + cnt_of_skipped = cnt_of_space - sizeof(struct sctp_forward_tsn_chunk); + cnt_of_skipped /= sizeof(struct sctp_strseq); + } else { + cnt_of_skipped = cnt_of_space - sizeof(struct sctp_forward_tsn_chunk); + cnt_of_skipped /= sizeof(struct sctp_strseq_mid); + } /*- * Go through and find the TSN that will be the one * we report. @@ -10346,15 +10437,24 @@ sctp_fill_in_rest: */ if (last) advance_peer_ack_point = last->rec.data.TSN_seq; - space_needed = sizeof(struct sctp_forward_tsn_chunk) + - cnt_of_skipped * sizeof(struct sctp_strseq); + if (old) { + space_needed = sizeof(struct sctp_forward_tsn_chunk) + + cnt_of_skipped * sizeof(struct sctp_strseq); + } else { + space_needed = sizeof(struct sctp_forward_tsn_chunk) + + cnt_of_skipped * sizeof(struct sctp_strseq_mid); + } } chk->send_size = space_needed; /* Setup the chunk */ fwdtsn = mtod(chk->data, struct sctp_forward_tsn_chunk *); fwdtsn->ch.chunk_length = htons(chk->send_size); fwdtsn->ch.chunk_flags = 0; - fwdtsn->ch.chunk_type = SCTP_FORWARD_CUM_TSN; + if (old) { + fwdtsn->ch.chunk_type = SCTP_FORWARD_CUM_TSN; + } else { + fwdtsn->ch.chunk_type = SCTP_IFORWARD_CUM_TSN; + } fwdtsn->new_cumulative_tsn = htonl(advance_peer_ack_point); SCTP_BUF_LEN(chk->data) = chk->send_size; fwdtsn++; @@ -10362,7 +10462,11 @@ sctp_fill_in_rest: * Move pointer to after the fwdtsn and transfer to the * strseq pointer. */ - strseq = (struct sctp_strseq *)fwdtsn; + if (old) { + strseq = (struct sctp_strseq *)fwdtsn; + } else { + strseq_m = (struct sctp_strseq_mid *)fwdtsn; + } /*- * Now populate the strseq list. This is done blindly * without pulling out duplicate stream info. This is @@ -10389,9 +10493,15 @@ sctp_fill_in_rest: if (at->rec.data.TSN_seq == advance_peer_ack_point) { at->rec.data.fwd_tsn_cnt = 0; } - strseq->stream = ntohs(at->rec.data.stream_number); - strseq->sequence = ntohs(at->rec.data.stream_seq); - strseq++; + if (old) { + strseq->stream = ntohs(at->rec.data.stream_number); + strseq->sequence = ntohs(at->rec.data.stream_seq); + strseq++; + } else { + strseq_m->stream = ntohs(at->rec.data.stream_number); + strseq_m->msg_id = ntohl(at->rec.data.stream_seq); + strseq_m++; + } at = tp1; } } @@ -12312,6 +12422,8 @@ sctp_copy_it_in(struct sctp_tcb *stcb, sp->timetolive = srcv->sinfo_timetolive; sp->ppid = srcv->sinfo_ppid; sp->context = srcv->sinfo_context; + sp->fsn = 0; + sp->msg_id = atomic_fetchadd_int(&stcb->asoc.assoc_msg_id, 1); (void)SCTP_GETTIME_TIMEVAL(&sp->ts); sp->stream = srcv->sinfo_stream; @@ -13065,8 +13177,10 @@ skip_preblock: * interrupt. */ strm->last_msg_incomplete = 1; - asoc->stream_locked = 1; - asoc->stream_locked_on = srcv->sinfo_stream; + if (stcb->asoc.idata_supported == 0) { + asoc->stream_locked = 1; + asoc->stream_locked_on = srcv->sinfo_stream; + } sp->sender_all_done = 0; } sctp_snd_sb_alloc(stcb, sp->length); @@ -13325,8 +13439,10 @@ skip_preblock: if (sp) { if (sp->msg_is_complete == 0) { strm->last_msg_incomplete = 1; - asoc->stream_locked = 1; - asoc->stream_locked_on = srcv->sinfo_stream; + if (stcb->asoc.idata_supported == 0) { + asoc->stream_locked = 1; + asoc->stream_locked_on = srcv->sinfo_stream; + } } else { sp->sender_all_done = 1; strm->last_msg_incomplete = 0; diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index 12aa145..2013fbc 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -2476,6 +2476,8 @@ sctp_inpcb_alloc(struct socket *so, uint32_t vrf_id) inp->reconfig_supported = (uint8_t) SCTP_BASE_SYSCTL(sctp_reconfig_enable); inp->nrsack_supported = (uint8_t) SCTP_BASE_SYSCTL(sctp_nrsack_enable); inp->pktdrop_supported = (uint8_t) SCTP_BASE_SYSCTL(sctp_pktdrop_enable); + inp->idata_supported = 0; + inp->fibnum = so->so_fibnum; /* init the small hash table we use to track asocid <-> tcb */ inp->sctp_asocidhash = SCTP_HASH_INIT(SCTP_STACK_VTAG_HASH_SIZE, &inp->hashasocidmark); @@ -3660,8 +3662,7 @@ sctp_inpcb_free(struct sctp_inpcb *inp, int immediate, int from) * no need to free the net count, since at this point all * assoc's are gone. */ - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), sq); - SCTP_DECR_READQ_COUNT(); + sctp_free_a_readq(NULL, sq); } /* Now the sctp_pcb things */ /* @@ -4649,6 +4650,45 @@ sctp_add_vtag_to_timewait(uint32_t tag, uint32_t time, uint16_t lport, uint16_t } } +void +sctp_clean_up_stream(struct sctp_tcb *stcb, struct sctp_readhead *rh) +{ + struct sctp_tmit_chunk *chk, *nchk; + struct sctp_queued_to_read *ctl, *nctl; + + TAILQ_FOREACH_SAFE(ctl, rh, next_instrm, nctl) { + TAILQ_REMOVE(rh, ctl, next_instrm); + ctl->on_strm_q = 0; + if (ctl->on_read_q == 0) { + sctp_free_remote_addr(ctl->whoFrom); + if (ctl->data) { + sctp_m_freem(ctl->data); + ctl->data = NULL; + } + } + /* Reassembly free? */ + TAILQ_FOREACH_SAFE(chk, &ctl->reasm, sctp_next, nchk) { + TAILQ_REMOVE(&ctl->reasm, chk, sctp_next); + if (chk->data) { + sctp_m_freem(chk->data); + chk->data = NULL; + } + if (chk->holds_key_ref) + sctp_auth_key_release(stcb, chk->auth_keyid, SCTP_SO_LOCKED); + sctp_free_remote_addr(chk->whoTo); + SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_chunk), chk); + SCTP_DECR_CHK_COUNT(); + /* sa_ignore FREED_MEMORY */ + } + /* + * We don't free the address here since all the net's were + * freed above. + */ + if (ctl->on_read_q == 0) { + sctp_free_a_readq(stcb, ctl); + } + } +} /*- @@ -4986,8 +5026,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre sq->whoFrom = NULL; sq->stcb = NULL; /* Free the ctl entry */ - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), sq); - SCTP_DECR_READQ_COUNT(); + sctp_free_a_readq(stcb, sq); /* sa_ignore FREED_MEMORY */ } TAILQ_FOREACH_SAFE(chk, &asoc->free_chunks, sctp_next, nchk) { @@ -5100,20 +5139,6 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre SCTP_DECR_CHK_COUNT(); /* sa_ignore FREED_MEMORY */ } - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - if (chk->data) { - sctp_m_freem(chk->data); - chk->data = NULL; - } - if (chk->holds_key_ref) - sctp_auth_key_release(stcb, chk->auth_keyid, SCTP_SO_LOCKED); - sctp_free_remote_addr(chk->whoTo); - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_chunk), chk); - SCTP_DECR_CHK_COUNT(); - /* sa_ignore FREED_MEMORY */ - } - if (asoc->mapping_array) { SCTP_FREE(asoc->mapping_array, SCTP_M_MAP); asoc->mapping_array = NULL; @@ -5129,23 +5154,9 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre } asoc->strm_realoutsize = asoc->streamoutcnt = 0; if (asoc->strmin) { - struct sctp_queued_to_read *ctl, *nctl; - for (i = 0; i < asoc->streamincnt; i++) { - TAILQ_FOREACH_SAFE(ctl, &asoc->strmin[i].inqueue, next, nctl) { - TAILQ_REMOVE(&asoc->strmin[i].inqueue, ctl, next); - sctp_free_remote_addr(ctl->whoFrom); - if (ctl->data) { - sctp_m_freem(ctl->data); - ctl->data = NULL; - } - /* - * We don't free the address here since all - * the net's were freed above. - */ - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), ctl); - SCTP_DECR_READQ_COUNT(); - } + sctp_clean_up_stream(stcb, &asoc->strmin[i].inqueue); + sctp_clean_up_stream(stcb, &asoc->strmin[i].uno_inqueue); } SCTP_FREE(asoc->strmin, SCTP_M_STRMI); asoc->strmin = NULL; @@ -6094,6 +6105,7 @@ sctp_load_addresses_from_init(struct sctp_tcb *stcb, struct mbuf *m, uint8_t peer_supports_reconfig; uint8_t peer_supports_nrsack; uint8_t peer_supports_pktdrop; + uint8_t peer_supports_idata; #ifdef INET struct sockaddr_in sin; @@ -6122,6 +6134,7 @@ sctp_load_addresses_from_init(struct sctp_tcb *stcb, struct mbuf *m, } else { sa = src; } + peer_supports_idata = 0; peer_supports_ecn = 0; peer_supports_prsctp = 0; peer_supports_auth = 0; @@ -6502,6 +6515,9 @@ sctp_load_addresses_from_init(struct sctp_tcb *stcb, struct mbuf *m, case SCTP_AUTHENTICATION: peer_supports_auth = 1; break; + case SCTP_IDATA: + peer_supports_idata = 1; + break; default: /* one I have not learned yet */ break; @@ -6660,6 +6676,10 @@ next_param: (peer_supports_reconfig == 0)) { stcb->asoc.reconfig_supported = 0; } + if ((stcb->asoc.idata_supported == 1) && + (peer_supports_idata == 0)) { + stcb->asoc.idata_supported = 0; + } if ((stcb->asoc.nrsack_supported == 1) && (peer_supports_nrsack == 0)) { stcb->asoc.nrsack_supported = 0; @@ -6851,26 +6871,9 @@ sctp_drain_mbufs(struct sctp_tcb *stcb) SCTP_STAT_INCR(sctps_protocol_drains_done); cumulative_tsn_p1 = asoc->cumulative_tsn + 1; cnt = 0; - /* First look in the re-assembly queue */ - TAILQ_FOREACH_SAFE(chk, &asoc->reasmqueue, sctp_next, nchk) { - if (SCTP_TSN_GT(chk->rec.data.TSN_seq, cumulative_tsn_p1)) { - /* Yep it is above cum-ack */ - cnt++; - SCTP_CALC_TSN_TO_GAP(gap, chk->rec.data.TSN_seq, asoc->mapping_array_base_tsn); - asoc->size_on_reasm_queue = sctp_sbspace_sub(asoc->size_on_reasm_queue, chk->send_size); - sctp_ucount_decr(asoc->cnt_on_reasm_queue); - SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); - TAILQ_REMOVE(&asoc->reasmqueue, chk, sctp_next); - if (chk->data) { - sctp_m_freem(chk->data); - chk->data = NULL; - } - sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); - } - } /* Ok that was fun, now we will drain all the inbound streams? */ for (strmat = 0; strmat < asoc->streamincnt; strmat++) { - TAILQ_FOREACH_SAFE(ctl, &asoc->strmin[strmat].inqueue, next, nctl) { + TAILQ_FOREACH_SAFE(ctl, &asoc->strmin[strmat].inqueue, next_instrm, nctl) { if (SCTP_TSN_GT(ctl->sinfo_tsn, cumulative_tsn_p1)) { /* Yep it is above cum-ack */ cnt++; @@ -6878,14 +6881,58 @@ sctp_drain_mbufs(struct sctp_tcb *stcb) asoc->size_on_all_streams = sctp_sbspace_sub(asoc->size_on_all_streams, ctl->length); sctp_ucount_decr(asoc->cnt_on_all_streams); SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); - TAILQ_REMOVE(&asoc->strmin[strmat].inqueue, ctl, next); + TAILQ_REMOVE(&asoc->strmin[strmat].inqueue, ctl, next_instrm); if (ctl->data) { sctp_m_freem(ctl->data); ctl->data = NULL; } sctp_free_remote_addr(ctl->whoFrom); - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), ctl); - SCTP_DECR_READQ_COUNT(); + /* Now its reasm? */ + TAILQ_FOREACH_SAFE(chk, &ctl->reasm, sctp_next, nchk) { + cnt++; + SCTP_CALC_TSN_TO_GAP(gap, chk->rec.data.TSN_seq, asoc->mapping_array_base_tsn); + asoc->size_on_reasm_queue = sctp_sbspace_sub(asoc->size_on_reasm_queue, chk->send_size); + sctp_ucount_decr(asoc->cnt_on_reasm_queue); + SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); + TAILQ_REMOVE(&ctl->reasm, chk, sctp_next); + if (chk->data) { + sctp_m_freem(chk->data); + chk->data = NULL; + } + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + } + sctp_free_a_readq(stcb, ctl); + } + } + TAILQ_FOREACH_SAFE(ctl, &asoc->strmin[strmat].uno_inqueue, next_instrm, nctl) { + if (SCTP_TSN_GT(ctl->sinfo_tsn, cumulative_tsn_p1)) { + /* Yep it is above cum-ack */ + cnt++; + SCTP_CALC_TSN_TO_GAP(gap, ctl->sinfo_tsn, asoc->mapping_array_base_tsn); + asoc->size_on_all_streams = sctp_sbspace_sub(asoc->size_on_all_streams, ctl->length); + sctp_ucount_decr(asoc->cnt_on_all_streams); + SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); + TAILQ_REMOVE(&asoc->strmin[strmat].uno_inqueue, ctl, next_instrm); + if (ctl->data) { + sctp_m_freem(ctl->data); + ctl->data = NULL; + } + sctp_free_remote_addr(ctl->whoFrom); + /* Now its reasm? */ + TAILQ_FOREACH_SAFE(chk, &ctl->reasm, sctp_next, nchk) { + cnt++; + SCTP_CALC_TSN_TO_GAP(gap, chk->rec.data.TSN_seq, asoc->mapping_array_base_tsn); + asoc->size_on_reasm_queue = sctp_sbspace_sub(asoc->size_on_reasm_queue, chk->send_size); + sctp_ucount_decr(asoc->cnt_on_reasm_queue); + SCTP_UNSET_TSN_PRESENT(asoc->mapping_array, gap); + TAILQ_REMOVE(&ctl->reasm, chk, sctp_next); + if (chk->data) { + sctp_m_freem(chk->data); + chk->data = NULL; + } + sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); + } + sctp_free_a_readq(stcb, ctl); } } } diff --git a/sys/netinet/sctp_pcb.h b/sys/netinet/sctp_pcb.h index f28016a..a5810a7 100644 --- a/sys/netinet/sctp_pcb.h +++ b/sys/netinet/sctp_pcb.h @@ -410,6 +410,7 @@ struct sctp_inpcb { uint8_t ecn_supported; uint8_t prsctp_supported; uint8_t auth_supported; + uint8_t idata_supported; uint8_t asconf_supported; uint8_t reconfig_supported; uint8_t nrsack_supported; @@ -629,6 +630,8 @@ int sctp_destination_is_reachable(struct sctp_tcb *, struct sockaddr *); int sctp_swap_inpcb_for_listen(struct sctp_inpcb *inp); +void sctp_clean_up_stream(struct sctp_tcb *stcb, struct sctp_readhead *rh); + /*- * Null in last arg inpcb indicate run on ALL ep's. Specific inp in last arg * indicates run on ONLY assoc's of the specified endpoint. diff --git a/sys/netinet/sctp_structs.h b/sys/netinet/sctp_structs.h index 8756650..87aa05b 100644 --- a/sys/netinet/sctp_structs.h +++ b/sys/netinet/sctp_structs.h @@ -389,7 +389,7 @@ struct sctp_nets { struct sctp_data_chunkrec { uint32_t TSN_seq; /* the TSN of this transmit */ - uint16_t stream_seq; /* the stream sequence number of this transmit */ + uint32_t stream_seq; /* the stream sequence number of this transmit */ uint16_t stream_number; /* the stream number of this guy */ uint32_t payloadtype; uint32_t context; /* from send */ @@ -400,6 +400,7 @@ struct sctp_data_chunkrec { */ uint32_t fast_retran_tsn; /* sending_seq at the time of FR */ struct timeval timetodrop; /* time we drop it from queue */ + uint32_t fsn_num; /* Fragment Sequence Number */ uint8_t doing_fast_retransmit; uint8_t rcv_flags; /* flags pulled from data chunk on inbound for * outbound holds sending flags for PR-SCTP. */ @@ -458,7 +459,7 @@ struct sctp_tmit_chunk { */ struct sctp_queued_to_read { /* sinfo structure Pluse more */ uint16_t sinfo_stream; /* off the wire */ - uint16_t sinfo_ssn; /* off the wire */ + uint32_t sinfo_ssn; /* off the wire */ uint16_t sinfo_flags; /* SCTP_UNORDERED from wire use SCTP_EOF for * EOR */ uint32_t sinfo_ppid; /* off the wire */ @@ -468,8 +469,11 @@ struct sctp_queued_to_read { /* sinfo structure Pluse more */ uint32_t sinfo_cumtsn; /* Use this in reassembly as last TSN */ sctp_assoc_t sinfo_assoc_id; /* our assoc id */ /* Non sinfo stuff */ + uint32_t msg_id; /* Fragment Index */ uint32_t length; /* length of data */ uint32_t held_length; /* length held in sb */ + uint32_t top_fsn; /* Highest FSN in queue */ + uint32_t fsn_included; /* Highest FSN in *data portion */ struct sctp_nets *whoFrom; /* where it came from */ struct mbuf *data; /* front of the mbuf chain of data with * PKT_HDR */ @@ -478,14 +482,24 @@ struct sctp_queued_to_read { /* sinfo structure Pluse more */ * take it from us */ struct sctp_tcb *stcb; /* assoc, used for window update */ TAILQ_ENTRY(sctp_queued_to_read) next; + TAILQ_ENTRY(sctp_queued_to_read) next_instrm; + struct sctpchunk_listhead reasm; uint16_t port_from; uint16_t spec_flags; /* Flags to hold the notification field */ uint8_t do_not_ref_stcb; uint8_t end_added; uint8_t pdapi_aborted; + uint8_t pdapi_started; uint8_t some_taken; + uint8_t last_frag_seen; + uint8_t first_frag_seen; + uint8_t on_read_q; + uint8_t on_strm_q; }; +#define SCTP_ON_ORDERED 1 +#define SCTP_ON_UNORDERED 2 + /* This data structure will be on the outbound * stream queues. Data will be pulled off from * the front of the mbuf data and chunk-ified @@ -511,6 +525,8 @@ struct sctp_stream_queue_pending { struct sctp_nets *net; TAILQ_ENTRY(sctp_stream_queue_pending) next; TAILQ_ENTRY(sctp_stream_queue_pending) ss_next; + uint32_t fsn; + uint32_t msg_id; uint32_t length; uint32_t timetolive; uint32_t ppid; @@ -534,9 +550,11 @@ struct sctp_stream_queue_pending { TAILQ_HEAD(sctpwheelunrel_listhead, sctp_stream_in); struct sctp_stream_in { struct sctp_readhead inqueue; + struct sctp_readhead uno_inqueue; + uint32_t last_sequence_delivered; /* used for re-order */ uint16_t stream_no; - uint16_t last_sequence_delivered; /* used for re-order */ uint8_t delivery_started; + uint8_t pd_api_started; }; TAILQ_HEAD(sctpwheel_listhead, sctp_stream_out); @@ -605,8 +623,8 @@ struct sctp_stream_out { uint32_t abandoned_unsent[1]; uint32_t abandoned_sent[1]; #endif + uint32_t next_sequence_send; /* next one I expect to send out */ uint16_t stream_no; - uint16_t next_sequence_send; /* next one I expect to send out */ uint8_t last_msg_incomplete; uint8_t state; }; @@ -635,12 +653,13 @@ struct sctp_scoping { struct sctp_tsn_log { void *stcb; uint32_t tsn; + uint32_t seq; uint16_t strm; - uint16_t seq; uint16_t sz; uint16_t flgs; uint16_t in_pos; uint16_t in_out; + uint16_t resv; }; #define SCTP_FS_SPEC_LOG_SIZE 200 @@ -811,9 +830,6 @@ struct sctp_association { struct sctpchunk_listhead sent_queue; struct sctpchunk_listhead send_queue; - /* re-assembly queue for fragmented chunks on the inbound path */ - struct sctpchunk_listhead reasmqueue; - /* Scheduling queues */ union scheduling_data ss_data; @@ -881,7 +897,7 @@ struct sctp_association { uint32_t stream_scheduling_module; uint32_t vrf_id; - + uint32_t assoc_msg_id; uint32_t cookie_preserve_req; /* ASCONF next seq I am sending out, inits at init-tsn */ uint32_t asconf_seq_out; @@ -1177,12 +1193,12 @@ struct sctp_association { uint8_t reconfig_supported; uint8_t nrsack_supported; uint8_t pktdrop_supported; + uint8_t idata_supported; /* Did the peer make the stream config (add out) request */ uint8_t peer_req_out; uint8_t local_strreset_support; - uint8_t peer_supports_nat; struct sctp_scoping scope; diff --git a/sys/netinet/sctp_sysctl.h b/sys/netinet/sctp_sysctl.h index 38494ad..7a7ffc7 100644 --- a/sys/netinet/sctp_sysctl.h +++ b/sys/netinet/sctp_sysctl.h @@ -432,7 +432,7 @@ struct sctp_sysctl { #define SCTPCTL_STRICT_DATA_ORDER_DESC "Enforce strict data ordering, abort if control inside data" #define SCTPCTL_STRICT_DATA_ORDER_MIN 0 #define SCTPCTL_STRICT_DATA_ORDER_MAX 1 -#define SCTPCTL_STRICT_DATA_ORDER_DEFAULT 0 +#define SCTPCTL_STRICT_DATA_ORDER_DEFAULT 1 /* min_residual: min residual in a data fragment leftover */ #define SCTPCTL_MIN_RESIDUAL_DESC "Minimum residual data chunk in second part of split" diff --git a/sys/netinet/sctp_uio.h b/sys/netinet/sctp_uio.h index 2299f66..248a25e 100644 --- a/sys/netinet/sctp_uio.h +++ b/sys/netinet/sctp_uio.h @@ -318,12 +318,13 @@ struct sctp_assoc_change { #define SCTP_CANT_STR_ASSOC 0x0005 /* sac_info values */ -#define SCTP_ASSOC_SUPPORTS_PR 0x01 -#define SCTP_ASSOC_SUPPORTS_AUTH 0x02 -#define SCTP_ASSOC_SUPPORTS_ASCONF 0x03 -#define SCTP_ASSOC_SUPPORTS_MULTIBUF 0x04 -#define SCTP_ASSOC_SUPPORTS_RE_CONFIG 0x05 -#define SCTP_ASSOC_SUPPORTS_MAX 0x05 +#define SCTP_ASSOC_SUPPORTS_PR 0x01 +#define SCTP_ASSOC_SUPPORTS_AUTH 0x02 +#define SCTP_ASSOC_SUPPORTS_ASCONF 0x03 +#define SCTP_ASSOC_SUPPORTS_MULTIBUF 0x04 +#define SCTP_ASSOC_SUPPORTS_RE_CONFIG 0x05 +#define SCTP_ASSOC_SUPPORTS_INTERLEAVING 0x06 +#define SCTP_ASSOC_SUPPORTS_MAX 0x06 /* * Address event */ diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index a75f025..64d3a26 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -1730,6 +1730,37 @@ flags_out: *optsize = sizeof(uint32_t); break; } + case SCTP_INTERLEAVING_SUPPORTED: + { + struct sctp_assoc_value *av; + + SCTP_CHECK_AND_CAST(av, optval, struct sctp_assoc_value, *optsize); + SCTP_FIND_STCB(inp, stcb, av->assoc_id); + + if (stcb) { + av->assoc_value = stcb->asoc.idata_supported; + SCTP_TCB_UNLOCK(stcb); + } else { + if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || + (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) || + (av->assoc_id == SCTP_FUTURE_ASSOC)) { + SCTP_INP_RLOCK(inp); + if (inp->idata_supported) { + av->assoc_value = 1; + } else { + av->assoc_value = 0; + } + SCTP_INP_RUNLOCK(inp); + } else { + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); + error = EINVAL; + } + } + if (error == 0) { + *optsize = sizeof(struct sctp_assoc_value); + } + break; + } case SCTP_CMT_ON_OFF: { struct sctp_assoc_value *av; @@ -3904,6 +3935,47 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, } break; } + case SCTP_INTERLEAVING_SUPPORTED: + { + struct sctp_assoc_value *av; + + SCTP_CHECK_AND_CAST(av, optval, struct sctp_assoc_value, optsize); + SCTP_FIND_STCB(inp, stcb, av->assoc_id); + + if (stcb) { + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); + error = EINVAL; + SCTP_TCB_UNLOCK(stcb); + } else { + if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) || + (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL) || + (av->assoc_id == SCTP_FUTURE_ASSOC)) { + SCTP_INP_WLOCK(inp); + if (av->assoc_value == 0) { + inp->idata_supported = 0; + } else { + if ((sctp_is_feature_on(inp, SCTP_PCB_FLAGS_FRAG_INTERLEAVE)) && + (sctp_is_feature_on(inp, SCTP_PCB_FLAGS_INTERLEAVE_STRMS))) { + inp->idata_supported = 1; + } else { + /* + * Must have Frag + * interleave and + * stream interleave + * on + */ + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); + error = EINVAL; + } + } + SCTP_INP_WUNLOCK(inp); + } else { + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); + error = EINVAL; + } + } + break; + } case SCTP_CMT_ON_OFF: if (SCTP_BASE_SYSCTL(sctp_cmt_on_off)) { struct sctp_assoc_value *av; diff --git a/sys/netinet/sctp_var.h b/sys/netinet/sctp_var.h index 7213b97..b4656e9 100644 --- a/sys/netinet/sctp_var.h +++ b/sys/netinet/sctp_var.h @@ -97,11 +97,19 @@ extern struct pr_usrreqs sctp_usrreqs; * an mbuf cache as well so it is not really worth doing, at least * right now :-D */ - +#ifdef INVARIANTS #define sctp_free_a_readq(_stcb, _readq) { \ + if ((_readq)->on_strm_q) \ + panic("On strm q stcb:%p readq:%p", (_stcb), (_readq)); \ SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), (_readq)); \ SCTP_DECR_READQ_COUNT(); \ } +#else +#define sctp_free_a_readq(_stcb, _readq) { \ + SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), (_readq)); \ + SCTP_DECR_READQ_COUNT(); \ +} +#endif #define sctp_alloc_a_readq(_stcb, _readq) { \ (_readq) = SCTP_ZONE_GET(SCTP_BASE_INFO(ipi_zone_readq), struct sctp_queued_to_read); \ @@ -196,7 +204,7 @@ extern struct pr_usrreqs sctp_usrreqs; } #define sctp_sbfree(ctl, stcb, sb, m) { \ - SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_cc, SCTP_BUF_LEN((m))); \ + SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_cc, SCTP_BUF_LEN((m))); \ SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_mbcnt, MSIZE); \ if (((ctl)->do_not_ref_stcb == 0) && stcb) {\ SCTP_SAVE_ATOMIC_DECREMENT(&(stcb)->asoc.sb_cc, SCTP_BUF_LEN((m))); \ @@ -211,7 +219,7 @@ extern struct pr_usrreqs sctp_usrreqs; atomic_add_int(&(sb)->sb_cc,SCTP_BUF_LEN((m))); \ atomic_add_int(&(sb)->sb_mbcnt, MSIZE); \ if (stcb) { \ - atomic_add_int(&(stcb)->asoc.sb_cc,SCTP_BUF_LEN((m))); \ + atomic_add_int(&(stcb)->asoc.sb_cc, SCTP_BUF_LEN((m))); \ atomic_add_int(&(stcb)->asoc.my_rwnd_control_len, MSIZE); \ } \ if (SCTP_BUF_TYPE(m) != MT_DATA && SCTP_BUF_TYPE(m) != MT_HEADER && \ diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 9434f06..87aa519 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -970,11 +970,13 @@ sctp_init_asoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, asoc->sctp_cmt_on_off = inp->sctp_cmt_on_off; asoc->ecn_supported = inp->ecn_supported; asoc->prsctp_supported = inp->prsctp_supported; + asoc->idata_supported = inp->idata_supported; asoc->auth_supported = inp->auth_supported; asoc->asconf_supported = inp->asconf_supported; asoc->reconfig_supported = inp->reconfig_supported; asoc->nrsack_supported = inp->nrsack_supported; asoc->pktdrop_supported = inp->pktdrop_supported; + asoc->idata_supported = inp->idata_supported; asoc->sctp_cmt_pf = (uint8_t) 0; asoc->sctp_frag_point = inp->sctp_frag_point; asoc->sctp_features = inp->sctp_features; @@ -1163,7 +1165,6 @@ sctp_init_asoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, TAILQ_INIT(&asoc->asconf_send_queue); TAILQ_INIT(&asoc->send_queue); TAILQ_INIT(&asoc->sent_queue); - TAILQ_INIT(&asoc->reasmqueue); TAILQ_INIT(&asoc->resetHead); asoc->max_inbound_streams = inp->sctp_ep.max_open_streams_intome; TAILQ_INIT(&asoc->asconf_queue); @@ -2736,6 +2737,9 @@ sctp_notify_assoc_change(uint16_t state, struct sctp_tcb *stcb, if (stcb->asoc.asconf_supported == 1) { sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_ASCONF; } + if (stcb->asoc.idata_supported == 1) { + sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_INTERLEAVING; + } sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_MULTIBUF; if (stcb->asoc.reconfig_supported == 1) { sac->sac_info[i++] = SCTP_ASSOC_SUPPORTS_RE_CONFIG; @@ -4450,6 +4454,43 @@ sctp_pull_off_control_to_new_inp(struct sctp_inpcb *old_inp, } void +sctp_wakeup_the_read_socket(struct sctp_inpcb *inp) +{ + if (inp && inp->sctp_socket) { + if (sctp_is_feature_on(inp, SCTP_PCB_FLAGS_ZERO_COPY_ACTIVE)) { + SCTP_ZERO_COPY_EVENT(inp, inp->sctp_socket); + } else { +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + struct socket *so; + + so = SCTP_INP_SO(inp); + if (!so_locked) { + if (stcb) { + atomic_add_int(&stcb->asoc.refcnt, 1); + SCTP_TCB_UNLOCK(stcb); + } + SCTP_SOCKET_LOCK(so, 1); + if (stcb) { + SCTP_TCB_LOCK(stcb); + atomic_subtract_int(&stcb->asoc.refcnt, 1); + } + if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) { + SCTP_SOCKET_UNLOCK(so, 1); + return; + } + } +#endif + sctp_sorwakeup(inp, inp->sctp_socket); +#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) + if (!so_locked) { + SCTP_SOCKET_UNLOCK(so, 1); + } +#endif + } + } +} + +void sctp_add_to_readq(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sctp_queued_to_read *control, @@ -4484,7 +4525,7 @@ sctp_add_to_readq(struct sctp_inpcb *inp, sctp_m_freem(control->data); control->data = NULL; } - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), control); + sctp_free_a_readq(stcb, control); if (inp_read_lock_held == 0) SCTP_INP_READ_UNLOCK(inp); return; @@ -4530,7 +4571,7 @@ sctp_add_to_readq(struct sctp_inpcb *inp, } else { /* Everything got collapsed out?? */ sctp_free_remote_addr(control->whoFrom); - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), control); + sctp_free_a_readq(stcb, control); if (inp_read_lock_held == 0) SCTP_INP_READ_UNLOCK(inp); return; @@ -4539,39 +4580,11 @@ sctp_add_to_readq(struct sctp_inpcb *inp, control->end_added = 1; } TAILQ_INSERT_TAIL(&inp->read_queue, control, next); + control->on_read_q = 1; if (inp_read_lock_held == 0) SCTP_INP_READ_UNLOCK(inp); if (inp && inp->sctp_socket) { - if (sctp_is_feature_on(inp, SCTP_PCB_FLAGS_ZERO_COPY_ACTIVE)) { - SCTP_ZERO_COPY_EVENT(inp, inp->sctp_socket); - } else { -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - struct socket *so; - - so = SCTP_INP_SO(inp); - if (!so_locked) { - if (stcb) { - atomic_add_int(&stcb->asoc.refcnt, 1); - SCTP_TCB_UNLOCK(stcb); - } - SCTP_SOCKET_LOCK(so, 1); - if (stcb) { - SCTP_TCB_LOCK(stcb); - atomic_subtract_int(&stcb->asoc.refcnt, 1); - } - if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) { - SCTP_SOCKET_UNLOCK(so, 1); - return; - } - } -#endif - sctp_sorwakeup(inp, inp->sctp_socket); -#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) - if (!so_locked) { - SCTP_SOCKET_UNLOCK(so, 1); - } -#endif - } + sctp_wakeup_the_read_socket(inp); } } @@ -5552,6 +5565,10 @@ restart_nosblocks: sctp_m_free(control->aux_data); control->aux_data = NULL; } + if (control->on_strm_q) { + panic("About to free ctl:%p so:%p and its in %d", + control, so, control->on_strm_q); + } sctp_free_remote_addr(control->whoFrom); sctp_free_a_readq(stcb, control); if (hold_rlock) { @@ -5822,15 +5839,8 @@ get_more_data: /* error we are out of here */ goto release; } - if ((SCTP_BUF_NEXT(m) == NULL) && - (cp_len >= SCTP_BUF_LEN(m)) && - ((control->end_added == 0) || - (control->end_added && - (TAILQ_NEXT(control, next) == NULL))) - ) { - SCTP_INP_READ_LOCK(inp); - hold_rlock = 1; - } + SCTP_INP_READ_LOCK(inp); + hold_rlock = 1; if (cp_len == SCTP_BUF_LEN(m)) { if ((SCTP_BUF_NEXT(m) == NULL) && (control->end_added)) { @@ -5948,19 +5958,9 @@ get_more_data: #endif } done_with_control: - if (TAILQ_NEXT(control, next) == NULL) { - /* - * If we don't have a next we need a - * lock, if there is a next - * interrupt is filling ahead of us - * and we don't need a lock to - * remove this guy (which is the - * head of the queue). - */ - if (hold_rlock == 0) { - SCTP_INP_READ_LOCK(inp); - hold_rlock = 1; - } + if (hold_rlock == 0) { + SCTP_INP_READ_LOCK(inp); + hold_rlock = 1; } TAILQ_REMOVE(&inp->read_queue, control, next); /* Add back any hiddend data */ @@ -5976,6 +5976,10 @@ get_more_data: no_rcv_needed = control->do_not_ref_stcb; sctp_free_remote_addr(control->whoFrom); control->data = NULL; + if (control->on_strm_q) { + panic("About to free ctl:%p so:%p and its in %d", + control, so, control->on_strm_q); + } sctp_free_a_readq(stcb, control); control = NULL; if ((freed_so_far >= rwnd_req) && @@ -6096,7 +6100,7 @@ wait_some_more: * corrupt? */ #ifdef INVARIANTS - panic("Impossible data==NULL length !=0"); + panic("Impossible data==NULL length !=0 control:%p stcb:%p length:%d", control, stcb, control->length); #endif out_flags |= MSG_EOR; out_flags |= MSG_TRUNC; diff --git a/sys/netinet/sctputil.h b/sys/netinet/sctputil.h index 2d32792..f58e17b 100644 --- a/sys/netinet/sctputil.h +++ b/sys/netinet/sctputil.h @@ -108,6 +108,9 @@ void sctp_mtu_size_reset(struct sctp_inpcb *, struct sctp_association *, uint32_t); void + sctp_wakeup_the_read_socket(struct sctp_inpcb *inp); + +void sctp_add_to_readq(struct sctp_inpcb *inp, struct sctp_tcb *stcb, struct sctp_queued_to_read *control, -- cgit v1.1 From d7c17f7512ce19f20a6db9d6cd29668a69ba14c7 Mon Sep 17 00:00:00 2001 From: rrs Date: Thu, 7 Apr 2016 09:34:41 +0000 Subject: A couple of minor changes that I missed that Michael had done, most noted in these is the change to non-strict ordering for incoming data (this will make pkt-drill test 14 fail but its expected). --- sys/netinet/sctp_indata.h | 2 +- sys/netinet/sctp_os_bsd.h | 4 ++-- sys/netinet/sctp_output.c | 1 + sys/netinet/sctp_sysctl.h | 2 +- sys/netinet/sctp_var.h | 6 +++--- sys/netinet/sctputil.c | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/sys/netinet/sctp_indata.h b/sys/netinet/sctp_indata.h index c95c5b8..162ca90 100644 --- a/sys/netinet/sctp_indata.h +++ b/sys/netinet/sctp_indata.h @@ -53,7 +53,7 @@ sctp_build_readq_entry(struct sctp_tcb *stcb, memset(_ctl, 0, sizeof(struct sctp_queued_to_read)); \ (_ctl)->sinfo_stream = stream_no; \ (_ctl)->sinfo_ssn = stream_seq; \ - TAILQ_INIT(&_ctl->reasm); \ + TAILQ_INIT(&_ctl->reasm); \ (_ctl)->top_fsn = tfsn; \ (_ctl)->msg_id = msgid; \ (_ctl)->sinfo_flags = (flags << 8); \ diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h index 90c4ab8..777e0a7 100644 --- a/sys/netinet/sctp_os_bsd.h +++ b/sys/netinet/sctp_os_bsd.h @@ -480,9 +480,9 @@ sctp_get_mbuf_for_msg(unsigned int space_needed, #define SCTP_SAVE_ATOMIC_DECREMENT(addr, val) \ { \ int32_t oldval; \ - oldval = atomic_fetchadd_int(addr, -val); \ + oldval = atomic_fetchadd_int(addr, -val); \ if (oldval < val) { \ - panic("Counter goes negative addr:%p val:%d oldval:%d", addr, val, oldval); \ + panic("Counter goes negative"); \ } \ } #else diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index 77d6114..4e683a2 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -10499,6 +10499,7 @@ sctp_fill_in_rest: strseq++; } else { strseq_m->stream = ntohs(at->rec.data.stream_number); + strseq_m->reserved = ntohs(0); strseq_m->msg_id = ntohl(at->rec.data.stream_seq); strseq_m++; } diff --git a/sys/netinet/sctp_sysctl.h b/sys/netinet/sctp_sysctl.h index 7a7ffc7..38494ad 100644 --- a/sys/netinet/sctp_sysctl.h +++ b/sys/netinet/sctp_sysctl.h @@ -432,7 +432,7 @@ struct sctp_sysctl { #define SCTPCTL_STRICT_DATA_ORDER_DESC "Enforce strict data ordering, abort if control inside data" #define SCTPCTL_STRICT_DATA_ORDER_MIN 0 #define SCTPCTL_STRICT_DATA_ORDER_MAX 1 -#define SCTPCTL_STRICT_DATA_ORDER_DEFAULT 1 +#define SCTPCTL_STRICT_DATA_ORDER_DEFAULT 0 /* min_residual: min residual in a data fragment leftover */ #define SCTPCTL_MIN_RESIDUAL_DESC "Minimum residual data chunk in second part of split" diff --git a/sys/netinet/sctp_var.h b/sys/netinet/sctp_var.h index b4656e9..009ffdb 100644 --- a/sys/netinet/sctp_var.h +++ b/sys/netinet/sctp_var.h @@ -99,8 +99,8 @@ extern struct pr_usrreqs sctp_usrreqs; */ #ifdef INVARIANTS #define sctp_free_a_readq(_stcb, _readq) { \ - if ((_readq)->on_strm_q) \ - panic("On strm q stcb:%p readq:%p", (_stcb), (_readq)); \ + if ((_readq)->on_strm_q) \ + panic("On strm q stcb:%p readq:%p", (_stcb), (_readq)); \ SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_readq), (_readq)); \ SCTP_DECR_READQ_COUNT(); \ } @@ -204,7 +204,7 @@ extern struct pr_usrreqs sctp_usrreqs; } #define sctp_sbfree(ctl, stcb, sb, m) { \ - SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_cc, SCTP_BUF_LEN((m))); \ + SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_cc, SCTP_BUF_LEN((m))); \ SCTP_SAVE_ATOMIC_DECREMENT(&(sb)->sb_mbcnt, MSIZE); \ if (((ctl)->do_not_ref_stcb == 0) && stcb) {\ SCTP_SAVE_ATOMIC_DECREMENT(&(stcb)->asoc.sb_cc, SCTP_BUF_LEN((m))); \ diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 87aa519..ced18fe 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -6100,7 +6100,7 @@ wait_some_more: * corrupt? */ #ifdef INVARIANTS - panic("Impossible data==NULL length !=0 control:%p stcb:%p length:%d", control, stcb, control->length); + panic("Impossible data==NULL length !=0"); #endif out_flags |= MSG_EOR; out_flags |= MSG_TRUNC; -- cgit v1.1 From fa19c68f9fc264035f6529ad9e6c229e27bdb83a Mon Sep 17 00:00:00 2001 From: zbb Date: Thu, 7 Apr 2016 10:36:50 +0000 Subject: Fix interrupts delivery on ThunderX for VF IDs beyond 8 SR-IOV devices usually use Alternative Routing ID (ARI). In that case slot/device is always assumed to be 0 and function/identifier is extended to 8 bits. Fix interrupts delivery to VF IDs beyond 8 by using a correct DevID if ARI is enabled. Reviewed by: jhb, wma Obtained from: Semihalf Sponsored by: Cavium Differential Revision: https://reviews.freebsd.org/D5855 --- sys/arm64/arm64/gic_v3_its.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sys/arm64/arm64/gic_v3_its.c b/sys/arm64/arm64/gic_v3_its.c index c847f95..aef6346 100644 --- a/sys/arm64/arm64/gic_v3_its.c +++ b/sys/arm64/arm64/gic_v3_its.c @@ -1579,9 +1579,7 @@ its_get_devid_thunder(device_t pci_dev) uint32_t bus; bus = pci_get_bus(pci_dev); - - bsf = PCI_RID(pci_get_bus(pci_dev), pci_get_slot(pci_dev), - pci_get_function(pci_dev)); + bsf = pci_get_rid(pci_dev); /* Check if accessing internal PCIe (low bus numbers) */ if (bus < GIC_V3_ITS_QUIRK_THUNDERX_PEM_BUS_OFFSET) { -- cgit v1.1 From 8b5422550f5cb7b5026d847bc653c44b37430079 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 10:48:26 +0000 Subject: Bring MIPS INTRNG support back up again, in line with D5370 Reviewed by: kan Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5838 --- sys/mips/mips/mips_pic.c | 293 ++++++++++++++++------------------------------- sys/mips/mips/nexus.c | 19 ++- 2 files changed, 105 insertions(+), 207 deletions(-) diff --git a/sys/mips/mips/mips_pic.c b/sys/mips/mips/mips_pic.c index 4e97c41..e4a7672 100644 --- a/sys/mips/mips/mips_pic.c +++ b/sys/mips/mips/mips_pic.c @@ -71,15 +71,24 @@ __FBSDID("$FreeBSD$"); static int mips_pic_intr(void *); +struct mips_pic_irqsrc { + struct intr_irqsrc isrc; + struct resource *res; + u_int irq; +}; + struct mips_pic_softc { - device_t pic_dev; - struct intr_irqsrc * pic_irqs[NREAL_IRQS]; - struct mtx mutex; - uint32_t nirqs; + device_t pic_dev; + struct mips_pic_irqsrc pic_irqs[NREAL_IRQS]; + struct rman pic_irq_rman; + struct mtx mutex; + uint32_t nirqs; }; static struct mips_pic_softc *pic_sc; +#define PIC_INTR_ISRC(sc, irq) (&(sc)->pic_irqs[(irq)].isrc) + #ifdef FDT static struct ofw_compat_data compat_data[] = { {"mti,cpu-interrupt-controller", true}, @@ -143,6 +152,39 @@ pic_xref(device_t dev) } static int +mips_pic_register_isrcs(struct mips_pic_softc *sc) +{ + int error; + uint32_t irq, i; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->pic_dev); + for (irq = 0; irq < sc->nirqs; irq++) { + sc->pic_irqs[irq].irq = irq; + sc->pic_irqs[irq].res = rman_reserve_resource(&sc->pic_irq_rman, + irq, irq, 1, RF_ACTIVE, sc->pic_dev); + if (sc->pic_irqs[irq].res == NULL) { + device_printf(sc->pic_dev, + "%s failed to alloc resource for irq %d", + __func__, irq); + return (ENOMEM); + } + isrc = PIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->pic_dev, 0, "%s", name); + if (error != 0) { + for (i = 0; i < irq; i++) { + intr_isrc_deregister(PIC_INTR_ISRC(sc, i)); + } + device_printf(sc->pic_dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int mips_pic_attach(device_t dev) { struct mips_pic_softc *sc; @@ -162,6 +204,21 @@ mips_pic_attach(device_t dev) /* Set the number of interrupts */ sc->nirqs = nitems(sc->pic_irqs); + /* Init the IRQ rman */ + sc->pic_irq_rman.rm_type = RMAN_ARRAY; + sc->pic_irq_rman.rm_descr = "MIPS PIC IRQs"; + if (rman_init(&sc->pic_irq_rman) != 0 || + rman_manage_region(&sc->pic_irq_rman, 0, sc->nirqs - 1) != 0) { + device_printf(dev, "failed to setup IRQ rman\n"); + goto cleanup; + } + + /* Register the interrupts */ + if (mips_pic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register PIC ISRCs\n"); + goto cleanup; + } + /* * Now, when everything is initialized, it's right time to * register interrupt controller to interrupt framefork. @@ -174,7 +231,7 @@ mips_pic_attach(device_t dev) /* Claim our root controller role */ if (intr_pic_claim_root(dev, xref, mips_pic_intr, sc, 0) != 0) { device_printf(dev, "could not set PIC as a root\n"); - intr_pic_unregister(dev, xref); + intr_pic_deregister(dev, xref); goto cleanup; } @@ -189,7 +246,6 @@ mips_pic_intr(void *arg) { struct mips_pic_softc *sc = arg; register_t cause, status; - struct intr_irqsrc *isrc; int i, intr; cause = mips_rd_cause(); @@ -205,15 +261,13 @@ mips_pic_intr(void *arg) i--; /* Get a 0-offset interrupt. */ intr &= ~(1 << i); - isrc = sc->pic_irqs[i]; - if (isrc == NULL) { + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { device_printf(sc->pic_dev, "Stray interrupt %u detected\n", i); pic_irq_mask(sc, i); continue; } - - intr_irq_dispatch(isrc, curthread->td_intr_frame); } KASSERT(i == 0, ("all interrupts handled")); @@ -228,178 +282,56 @@ mips_pic_intr(void *arg) return (FILTER_HANDLED); } -static int -pic_attach_isrc(struct mips_pic_softc *sc, struct intr_irqsrc *isrc, u_int irq) -{ - - /* - * 1. The link between ISRC and controller must be set atomically. - * 2. Just do things only once in rare case when consumers - * of shared interrupt came here at the same moment. - */ - mtx_lock_spin(&sc->mutex); - if (sc->pic_irqs[irq] != NULL) { - mtx_unlock_spin(&sc->mutex); - return (sc->pic_irqs[irq] == isrc ? 0 : EEXIST); - } - sc->pic_irqs[irq] = isrc; - isrc->isrc_data = irq; - mtx_unlock_spin(&sc->mutex); - - if (irq < NSOFT_IRQS) - intr_irq_set_name(isrc, "sint%u", irq); - else if (irq < NREAL_IRQS) - intr_irq_set_name(isrc, "int%u", irq - NSOFT_IRQS); - else - panic("Invalid irq %u", irq); - return (0); -} - -static int -pic_detach_isrc(struct mips_pic_softc *sc, struct intr_irqsrc *isrc, u_int irq) +static void +mips_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) { + u_int irq; - mtx_lock_spin(&sc->mutex); - if (sc->pic_irqs[irq] != isrc) { - mtx_unlock_spin(&sc->mutex); - return (sc->pic_irqs[irq] == NULL ? 0 : EINVAL); - } - sc->pic_irqs[irq] = NULL; - isrc->isrc_data = 0; - mtx_unlock_spin(&sc->mutex); - - intr_irq_set_name(isrc, "%s", ""); - return (0); + irq = ((struct mips_pic_irqsrc *)isrc)->irq; + pic_irq_mask(device_get_softc(dev), irq); } -static int -pic_irq_from_nspc(struct mips_pic_softc *sc, u_int type, u_int num, u_int *irqp) +static void +mips_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) { + u_int irq; - switch (type) { - case INTR_IRQ_NSPC_PLAIN: - *irqp = num; - return (*irqp < sc->nirqs ? 0 : EINVAL); - - case INTR_IRQ_NSPC_SWI: - *irqp = num; - return (num < NSOFT_IRQS ? 0 : EINVAL); - - case INTR_IRQ_NSPC_IRQ: - *irqp = num + NSOFT_IRQS; - return (num < NHARD_IRQS ? 0 : EINVAL); - - default: - return (EINVAL); - } + irq = ((struct mips_pic_irqsrc *)isrc)->irq; + pic_irq_unmask(device_get_softc(dev), irq); } static int -pic_map_nspc(struct mips_pic_softc *sc, struct intr_irqsrc *isrc, u_int *irqp) +mips_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) { - int error; - - error = pic_irq_from_nspc(sc, isrc->isrc_nspc_type, isrc->isrc_nspc_num, - irqp); - if (error != 0) - return (error); - return (pic_attach_isrc(sc, isrc, *irqp)); -} - #ifdef FDT -static int -pic_map_fdt(struct mips_pic_softc *sc, struct intr_irqsrc *isrc, u_int *irqp) -{ - u_int irq; - int error; + struct mips_pic_softc *sc; - irq = isrc->isrc_cells[0]; + sc = device_get_softc(dev); - if (irq >= sc->nirqs) + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->nirqs) return (EINVAL); - error = pic_attach_isrc(sc, isrc, irq); - if (error != 0) - return (error); - - isrc->isrc_nspc_type = INTR_IRQ_NSPC_PLAIN; - isrc->isrc_nspc_num = irq; - isrc->isrc_trig = INTR_TRIGGER_CONFORM; - isrc->isrc_pol = INTR_POLARITY_CONFORM; - - *irqp = irq; + *isrcp = PIC_INTR_ISRC(sc, data->fdt.cells[0]); return (0); -} -#endif - -static int -mips_pic_register(device_t dev, struct intr_irqsrc *isrc, boolean_t *is_percpu) -{ - struct mips_pic_softc *sc = device_get_softc(dev); - u_int irq; - int error; - - if (isrc->isrc_type == INTR_ISRCT_NAMESPACE) - error = pic_map_nspc(sc, isrc, &irq); -#ifdef FDT - else if (isrc->isrc_type == INTR_ISRCT_FDT) - error = pic_map_fdt(sc, isrc, &irq); +#else + return (EINVAL); #endif - else - return (EINVAL); - - if (error == 0) - *is_percpu = TRUE; - return (error); -} - -static void -mips_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) -{ - - if (isrc->isrc_trig == INTR_TRIGGER_CONFORM) - isrc->isrc_trig = INTR_TRIGGER_LEVEL; -} - -static void -mips_pic_enable_source(device_t dev, struct intr_irqsrc *isrc) -{ - struct mips_pic_softc *sc = device_get_softc(dev); - u_int irq = isrc->isrc_data; - - pic_irq_unmask(sc, irq); -} - -static void -mips_pic_disable_source(device_t dev, struct intr_irqsrc *isrc) -{ - struct mips_pic_softc *sc = device_get_softc(dev); - u_int irq = isrc->isrc_data; - - pic_irq_mask(sc, irq); -} - -static int -mips_pic_unregister(device_t dev, struct intr_irqsrc *isrc) -{ - struct mips_pic_softc *sc = device_get_softc(dev); - u_int irq = isrc->isrc_data; - - return (pic_detach_isrc(sc, isrc, irq)); } static void mips_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) { - mips_pic_disable_source(dev, isrc); + mips_pic_disable_intr(dev, isrc); } static void mips_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) { - mips_pic_enable_source(dev, isrc); + mips_pic_enable_intr(dev, isrc); } static void @@ -407,19 +339,6 @@ mips_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) { } -#ifdef SMP -static int -mips_pic_bind(device_t dev, struct intr_irqsrc *isrc) -{ - return (EOPNOTSUPP); -} - -static void -mips_pic_ipi_send(device_t dev, struct intr_irqsrc *isrc, cpuset_t cpus) -{ -} -#endif - static device_method_t mips_pic_methods[] = { /* Device interface */ #ifndef FDT @@ -427,20 +346,15 @@ static device_method_t mips_pic_methods[] = { #endif DEVMETHOD(device_probe, mips_pic_probe), DEVMETHOD(device_attach, mips_pic_attach), + /* Interrupt controller interface */ - DEVMETHOD(pic_disable_source, mips_pic_disable_source), + DEVMETHOD(pic_disable_intr, mips_pic_disable_intr), DEVMETHOD(pic_enable_intr, mips_pic_enable_intr), - DEVMETHOD(pic_enable_source, mips_pic_enable_source), - DEVMETHOD(pic_post_filter, mips_pic_post_filter), - DEVMETHOD(pic_post_ithread, mips_pic_post_ithread), + DEVMETHOD(pic_map_intr, mips_pic_map_intr), DEVMETHOD(pic_pre_ithread, mips_pic_pre_ithread), - DEVMETHOD(pic_register, mips_pic_register), - DEVMETHOD(pic_unregister, mips_pic_unregister), -#ifdef SMP - DEVMETHOD(pic_bind, mips_pic_bind), - DEVMETHOD(pic_init_secondary, mips_pic_init_secondary), - DEVMETHOD(pic_ipi_send, mips_pic_ipi_send), -#endif + DEVMETHOD(pic_post_ithread, mips_pic_post_ithread), + DEVMETHOD(pic_post_filter, mips_pic_post_filter), + { 0, 0 } }; @@ -469,7 +383,6 @@ void cpu_establish_hardintr(const char *name, driver_filter_t *filt, void (*handler)(void*), void *arg, int irq, int flags, void **cookiep) { - u_int vec; int res; /* @@ -479,17 +392,11 @@ cpu_establish_hardintr(const char *name, driver_filter_t *filt, panic("%s called for unknown hard intr %d", __func__, irq); KASSERT(pic_sc != NULL, ("%s: no pic", __func__)); - vec = intr_namespace_map_irq(pic_sc->pic_dev, INTR_IRQ_NSPC_IRQ, irq); - KASSERT(vec != NIRQ, ("Unable to map hard IRQ %d\n", irq)); - res = intr_irq_add_handler(pic_sc->pic_dev, filt, handler, arg, vec, - flags, cookiep); + irq += NSOFT_IRQS; + res = intr_setup_irq(pic_sc->pic_dev, pic_sc->pic_irqs[irq].res, filt, + handler, arg, flags, cookiep); if (res != 0) panic("Unable to add hard IRQ %d handler", irq); - - (void)pic_irq_from_nspc(pic_sc, INTR_IRQ_NSPC_IRQ, irq, &vec); - KASSERT(pic_sc->pic_irqs[vec] != NULL, - ("Hard IRQ %d not registered\n", irq)); - intr_irq_set_name(pic_sc->pic_irqs[vec], "%s", name); } void @@ -497,23 +404,15 @@ cpu_establish_softintr(const char *name, driver_filter_t *filt, void (*handler)(void*), void *arg, int irq, int flags, void **cookiep) { - u_int vec; int res; if (irq < 0 || irq > NSOFT_IRQS) panic("%s called for unknown soft intr %d", __func__, irq); KASSERT(pic_sc != NULL, ("%s: no pic", __func__)); - vec = intr_namespace_map_irq(pic_sc->pic_dev, INTR_IRQ_NSPC_SWI, irq); - KASSERT(vec <= NIRQ, ("Unable to map soft IRQ %d\n", irq)); - intr_irq_add_handler(pic_sc->pic_dev, filt, handler, arg, vec, - flags, cookiep); + res = intr_setup_irq(pic_sc->pic_dev, pic_sc->pic_irqs[irq].res, filt, + handler, arg, flags, cookiep); if (res != 0) panic("Unable to add soft IRQ %d handler", irq); - - (void)pic_irq_from_nspc(pic_sc, INTR_IRQ_NSPC_SWI, irq, &vec); - KASSERT(pic_sc->pic_irqs[vec] != NULL, - ("Soft IRQ %d not registered\n", irq)); - intr_irq_set_name(pic_sc->pic_irqs[vec], "%s", name); } diff --git a/sys/mips/mips/nexus.c b/sys/mips/mips/nexus.c index 89049f0..a2a8e527 100644 --- a/sys/mips/mips/nexus.c +++ b/sys/mips/mips/nexus.c @@ -457,14 +457,11 @@ static int nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep) { - int irq; #ifdef MIPS_INTRNG - for (irq = rman_get_start(res); irq <= rman_get_end(res); irq++) { - intr_irq_add_handler(child, filt, intr, arg, irq, flags, - cookiep); - } + return (intr_setup_irq(child, res, filt, intr, arg, flags, cookiep)); #else + int irq; register_t s; s = intr_disable(); @@ -477,8 +474,9 @@ nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags, cpu_establish_hardintr(device_get_nameunit(child), filt, intr, arg, irq, flags, cookiep); intr_restore(s); -#endif + return (0); +#endif } static int @@ -486,7 +484,7 @@ nexus_teardown_intr(device_t dev, device_t child, struct resource *r, void *ih) { #ifdef MIPS_INTRNG - return (intr_irq_remove_handler(child, rman_get_start(r), ih)); + return (intr_teardown_irq(child, r, ih)); #else printf("Unimplemented %s at %s:%d\n", __func__, __FILE__, __LINE__); return (0); @@ -499,7 +497,8 @@ nexus_config_intr(device_t dev, int irq, enum intr_trigger trig, enum intr_polarity pol) { - return (intr_irq_config(irq, trig, pol)); + device_printf(dev, "bus_config_intr is obsolete and not supported!\n"); + return (EOPNOTSUPP); } static int @@ -507,7 +506,7 @@ nexus_describe_intr(device_t dev, device_t child, struct resource *irq, void *cookie, const char *descr) { - return (intr_irq_describe(rman_get_start(irq), cookie, descr)); + return (intr_describe_irq(child, irq, cookie, descr)); } #ifdef SMP @@ -515,7 +514,7 @@ static int nexus_bind_intr(device_t dev, device_t child, struct resource *irq, int cpu) { - return (intr_irq_bind(rman_get_start(irq), cpu)); + return (intr_bind_irq(child, irq, cpu)); } #endif -- cgit v1.1 From b9e46d1b171ed8cb47dd031d377fba578e14ab59 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 11:02:49 +0000 Subject: This revision adds the following parts: - machine dependent low level init code - SoC clocks detection and some utility functions - Common interface to read/write/modify SoC system control registers, used by some of the other drivers and utility functions - simple FDT resets support, based on the fdt_clock implementation already in the tree. For the moment resets and clocks are managed using these implementations. I am planning to port those to the new extres framework in the future, but currently I simply don't have time to do this part too. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5826 --- sys/mips/mediatek/fdt_reset.c | 125 +++++++++++ sys/mips/mediatek/fdt_reset.h | 49 +++++ sys/mips/mediatek/fdt_reset_if.m | 58 ++++++ sys/mips/mediatek/mtk_machdep.c | 286 +++++++++++++++++++++++++ sys/mips/mediatek/mtk_soc.c | 438 +++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_soc.h | 130 ++++++++++++ sys/mips/mediatek/mtk_sysctl.c | 191 +++++++++++++++++ sys/mips/mediatek/mtk_sysctl.h | 59 ++++++ 8 files changed, 1336 insertions(+) create mode 100644 sys/mips/mediatek/fdt_reset.c create mode 100644 sys/mips/mediatek/fdt_reset.h create mode 100644 sys/mips/mediatek/fdt_reset_if.m create mode 100644 sys/mips/mediatek/mtk_machdep.c create mode 100644 sys/mips/mediatek/mtk_soc.c create mode 100644 sys/mips/mediatek/mtk_soc.h create mode 100644 sys/mips/mediatek/mtk_sysctl.c create mode 100644 sys/mips/mediatek/mtk_sysctl.h diff --git a/sys/mips/mediatek/fdt_reset.c b/sys/mips/mediatek/fdt_reset.c new file mode 100644 index 0000000..5ff2758 --- /dev/null +++ b/sys/mips/mediatek/fdt_reset.c @@ -0,0 +1,125 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * Copyright (c) 2014 Ian Lepore + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "fdt_reset_if.h" +#include + +/* + * Loop through all the tuples in the resets= property for a device, asserting + * or deasserting each reset. + * + * Be liberal about errors for now: warn about a failure to (de)assert but keep + * trying with any other resets in the list. Return ENXIO if any errors were + * found, and let the caller decide whether the problem is fatal. + */ +static int +assert_deassert_all(device_t consumer, boolean_t assert) +{ + phandle_t rnode; + device_t resetdev; + int resetnum, err, i, ncells; + uint32_t *resets; + boolean_t anyerrors; + + rnode = ofw_bus_get_node(consumer); + ncells = OF_getencprop_alloc(rnode, "resets", sizeof(*resets), + (void **)&resets); + if (!assert && ncells < 2) { + device_printf(consumer, "Warning: No resets specified in fdt " + "data; device may not function."); + return (ENXIO); + } + anyerrors = false; + for (i = 0; i < ncells; i += 2) { + resetdev = OF_device_from_xref(resets[i]); + resetnum = resets[i + 1]; + if (resetdev == NULL) { + if (!assert) + device_printf(consumer, "Warning: can not find " + "driver for reset number %u; device may " + "not function\n", resetnum); + anyerrors = true; + continue; + } + if (assert) + err = FDT_RESET_ASSERT(resetdev, resetnum); + else + err = FDT_RESET_DEASSERT(resetdev, resetnum); + if (err != 0) { + if (!assert) + device_printf(consumer, "Warning: failed to " + "deassert reset number %u; device may not " + "function\n", resetnum); + anyerrors = true; + } + } + free(resets, M_OFWPROP); + return (anyerrors ? ENXIO : 0); +} + +int +fdt_reset_assert_all(device_t consumer) +{ + + return (assert_deassert_all(consumer, true)); +} + +int +fdt_reset_deassert_all(device_t consumer) +{ + + return (assert_deassert_all(consumer, false)); +} + +void +fdt_reset_register_provider(device_t provider) +{ + + OF_device_register_xref( + OF_xref_from_node(ofw_bus_get_node(provider)), provider); +} + +void +fdt_reset_unregister_provider(device_t provider) +{ + + OF_device_register_xref(OF_xref_from_device(provider), NULL); +} + diff --git a/sys/mips/mediatek/fdt_reset.h b/sys/mips/mediatek/fdt_reset.h new file mode 100644 index 0000000..195beaa --- /dev/null +++ b/sys/mips/mediatek/fdt_reset.h @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * Copyright (c) 2014 Ian Lepore + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef DEV_FDT_RESET_H +#define DEV_FDT_RESET_H + +#include "fdt_reset_if.h" + +/* + * Look up "resets" property in consumer's fdt data and assert or deassert all + * configured resets. + */ +int fdt_reset_assert_all(device_t consumer); +int fdt_reset_deassert_all(device_t consumer); + +/* + * [Un]register the given device instance as a driver that implements the + * fdt_clock interface. + */ +void fdt_reset_register_provider(device_t provider); +void fdt_reset_unregister_provider(device_t provider); + +#endif /* DEV_FDT_RESET_H */ + diff --git a/sys/mips/mediatek/fdt_reset_if.m b/sys/mips/mediatek/fdt_reset_if.m new file mode 100644 index 0000000..2bde7b7 --- /dev/null +++ b/sys/mips/mediatek/fdt_reset_if.m @@ -0,0 +1,58 @@ +#- +# Copyright (c) 2016 Stanislav Galabov +# Copyright (c) 2014 Ian Lepore +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +#include + +# +# This is the interface that fdt_reset drivers provide to other drivers. +# In this context, reset refers to a reset signal provided to some other +# hardware component within the system. They are most often found within +# embedded processors that have on-chip IO controllers. +# + +INTERFACE fdt_reset; + +# +# Enable/assert/apply the specified reset. +# Returns 0 on success or a standard errno value. +# +METHOD int assert { + device_t provider; + int index; +}; + +# +# Disable/de-assert/remove the specified reset. +# Returns 0 on success or a standard errno value. +# +METHOD int deassert { + device_t provider; + int index; +}; + diff --git a/sys/mips/mediatek/mtk_machdep.c b/sys/mips/mediatek/mtk_machdep.c new file mode 100644 index 0000000..eeadd4f --- /dev/null +++ b/sys/mips/mediatek/mtk_machdep.c @@ -0,0 +1,286 @@ +/*- + * Copyright (C) 2015-2016 by Stanislav Galabov. All rights reserved. + * Copyright (C) 2010-2011 by Aleksandr Rybalko. All rights reserved. + * Copyright (C) 2007 by Oleksandr Tymoshenko. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_ddb.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "opt_platform.h" +#include "opt_rt305x.h" + +#include +#include + +extern int *edata; +extern int *end; +static char boot1_env[0x1000]; + +void +platform_cpu_init() +{ + /* Nothing special */ +} + +static void +mips_init(void) +{ + struct mem_region mr[FDT_MEM_REGIONS]; + uint64_t val; + int i, j, mr_cnt; + char *memsize; + + printf("entry: mips_init()\n"); + + bootverbose = 1; + + for (i = 0; i < 10; i++) + phys_avail[i] = 0; + + dump_avail[0] = phys_avail[0] = MIPS_KSEG0_TO_PHYS(kernel_kseg0_end); + + /* + * The most low memory MT7621 can have. Currently MT7621 is the chip + * that supports the most memory, so that seems reasonable. + */ + realmem = btoc(448 * 1024 * 1024); + + if (fdt_get_mem_regions(mr, &mr_cnt, &val) == 0) { + physmem = btoc(val); + + printf("RAM size: %ldMB (from FDT)\n", + ctob(physmem) / (1024 * 1024)); + + KASSERT((phys_avail[0] >= mr[0].mr_start) && \ + (phys_avail[0] < (mr[0].mr_start + mr[0].mr_size)), + ("First region is not within FDT memory range")); + + /* Limit size of the first region */ + phys_avail[1] = (mr[0].mr_start + + MIN(mr[0].mr_size, ctob(realmem))); + dump_avail[1] = phys_avail[1]; + + /* Add the rest of the regions */ + for (i = 1, j = 2; i < mr_cnt; i++, j+=2) { + phys_avail[j] = mr[i].mr_start; + phys_avail[j+1] = (mr[i].mr_start + mr[i].mr_size); + dump_avail[j] = phys_avail[j]; + dump_avail[j+1] = phys_avail[j+1]; + } + } else { + if ((memsize = kern_getenv("memsize")) != NULL) { + physmem = btoc(strtol(memsize, NULL, 0) << 20); + printf("RAM size: %ldMB (from memsize)\n", + ctob(physmem) / (1024 * 1024)); + } else { /* All else failed, assume 32MB */ + physmem = btoc(32 * 1024 * 1024); + printf("RAM size: %ldMB (assumed)\n", + ctob(physmem) / (1024 * 1024)); + } + + if (ctob(physmem) < (448 * 1024 * 1024)) { + /* + * Anything up to 448MB is assumed to be directly + * mappable as low memory... + */ + dump_avail[1] = phys_avail[1] = ctob(physmem); + } else if (mtk_soc_get_socid() == MTK_SOC_MT7621) { + /* + * On MT7621 the low memory is limited to 448MB, the + * rest is high memory, mapped at 0x20000000 + */ + phys_avail[1] = 448 * 1024 * 1024; + phys_avail[2] = 0x20000000; + phys_avail[3] = phys_avail[2] + ctob(physmem) - + phys_avail[1]; + dump_avail[1] = phys_avail[1] - phys_avail[0]; + dump_avail[2] = phys_avail[2]; + dump_avail[3] = phys_avail[3] - phys_avail[2]; + } else { + /* + * We have > 448MB RAM and we're not MT7621? Currently + * there is no such chip, so we'll just limit the RAM to + * 32MB and let the user know... + */ + printf("Unknown chip, assuming 32MB RAM\n"); + physmem = btoc(32 * 1024 * 1024); + dump_avail[1] = phys_avail[1] = ctob(physmem); + } + } + + if (physmem < realmem) + realmem = physmem; + + init_param1(); + init_param2(physmem); + mips_cpu_init(); + pmap_bootstrap(); + mips_proc0_init(); + mutex_init(); + kdb_init(); +#ifdef KDB + if (boothowto & RB_KDB) + kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); +#endif +} + +void +platform_reset(void) +{ + + mtk_soc_reset(); +} + +void +platform_start(__register_t a0 __unused, __register_t a1 __unused, + __register_t a2 __unused, __register_t a3 __unused) +{ + vm_offset_t kernend; + int argc = a0, i;//, res; + uint32_t timer_clk; + char **argv = (char **)MIPS_PHYS_TO_KSEG0(a1); + char **envp = (char **)MIPS_PHYS_TO_KSEG0(a2); + void *dtbp; + + /* clear the BSS and SBSS segments */ + kernend = (vm_offset_t)&end; + memset(&edata, 0, kernend - (vm_offset_t)(&edata)); + + mips_postboot_fixup(); + + /* Initialize pcpu stuff */ + mips_pcpu0_init(); + + dtbp = &fdt_static_dtb; + if (OF_install(OFW_FDT, 0) == FALSE) + while (1); + if (OF_init((void *)dtbp) != 0) + while (1); + + mtk_soc_try_early_detect(); + if ((timer_clk = mtk_soc_get_timerclk()) == 0) + timer_clk = 1000000000; /* no such speed yet */ + + mips_timer_early_init(timer_clk); + + /* initialize console so that we have printf */ + boothowto |= (RB_SERIAL | RB_MULTIPLE); /* Use multiple consoles */ + boothowto |= (RB_VERBOSE); + cninit(); + + init_static_kenv(boot1_env, sizeof(boot1_env)); + + printf("FDT DTB at: 0x%08x\n", (uint32_t)dtbp); + + printf("CPU clock: %4dMHz\n", mtk_soc_get_cpuclk()/(1000*1000)); + printf("Timer clock: %4dMHz\n", timer_clk/(1000*1000)); + printf("UART clock: %4dMHz\n\n", mtk_soc_get_uartclk()/(1000*1000)); + + printf("U-Boot args (from %d args):\n", argc - 1); + + if (argc == 1) + printf("\tNone\n"); + + for (i = 1; i < argc; i++) { + char *n = "argv ", *arg; + + if (i > 99) + break; + + if (argv[i]) + { + arg = (char *)(intptr_t)MIPS_PHYS_TO_KSEG0(argv[i]); + printf("\targv[%d] = %s\n", i, arg); + sprintf(n, "argv%d", i); + kern_setenv(n, arg); + } + } + + printf("Environment:\n"); + + for (i = 0; envp[i] && MIPS_IS_VALID_PTR(envp[i]); i++) { + char *n, *arg; + + arg = (char *)(intptr_t)MIPS_PHYS_TO_KSEG0(envp[i]); + if (! MIPS_IS_VALID_PTR(arg)) + continue; + printf("\t%s\n", arg); + n = strsep(&arg, "="); + if (arg == NULL) + kern_setenv(n, "1"); + else + kern_setenv(n, arg); + } + + + mips_init(); + mips_timer_init_params(timer_clk, 0); +} diff --git a/sys/mips/mediatek/mtk_soc.c b/sys/mips/mediatek/mtk_soc.c new file mode 100644 index 0000000..be576bd --- /dev/null +++ b/sys/mips/mediatek/mtk_soc.c @@ -0,0 +1,438 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +static uint32_t mtk_soc_socid = MTK_SOC_UNKNOWN; +static uint32_t mtk_soc_uartclk = 0; +static uint32_t mtk_soc_cpuclk = MTK_CPU_CLK_880MHZ; +static uint32_t mtk_soc_timerclk = MTK_CPU_CLK_880MHZ / 2; + +static const struct ofw_compat_data compat_data[] = { + { "ralink,rt3050-soc", MTK_SOC_RT3050 }, + { "ralink,rt3052-soc", MTK_SOC_RT3052 }, + { "ralink,rt3350-soc", MTK_SOC_RT3350 }, + { "ralink,rt3352-soc", MTK_SOC_RT3352 }, + { "ralink,rt3662-soc", MTK_SOC_RT3662 }, + { "ralink,rt3883-soc", MTK_SOC_RT3883 }, + { "ralink,rt5350-soc", MTK_SOC_RT5350 }, + { "ralink,mtk7620a-soc", MTK_SOC_MT7620A }, + { "ralink,mtk7620n-soc", MTK_SOC_MT7620N }, + { "mediatek,mtk7621-soc", MTK_SOC_MT7621 }, + { "ralink,mtk7621-soc", MTK_SOC_MT7621 }, + { "ralink,mtk7628an-soc", MTK_SOC_MT7628 }, + { "mediatek,mt7628an-soc", MTK_SOC_MT7628 }, + { "ralink,mtk7688-soc", MTK_SOC_MT7688 }, + + /* Sentinel */ + { NULL, MTK_SOC_UNKNOWN }, +}; + +static uint32_t +mtk_detect_cpuclk_rt305x(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t clk; + + clk = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + clk >>= RT305X_CPU_CLKSEL_OFF; + clk &= RT305X_CPU_CLKSEL_MSK; + + return ((clk == 0) ? MTK_CPU_CLK_320MHZ : MTK_CPU_CLK_384MHZ); +} + +static uint32_t +mtk_detect_cpuclk_rt3352(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val; + + val = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + val >>= RT3352_CPU_CLKSEL_OFF; + val &= RT3352_CPU_CLKSEL_MSK; + + if (val) + return (MTK_CPU_CLK_400MHZ); + + return (MTK_CPU_CLK_384MHZ); +} + +static uint32_t +mtk_detect_cpuclk_rt3883(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val; + + val = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + val >>= RT3883_CPU_CLKSEL_OFF; + val &= RT3883_CPU_CLKSEL_MSK; + + switch (val) { + case 0: + return (MTK_CPU_CLK_250MHZ); + case 1: + return (MTK_CPU_CLK_384MHZ); + case 2: + return (MTK_CPU_CLK_480MHZ); + case 3: + return (MTK_CPU_CLK_500MHZ); + } + + /* Never reached */ + return (0); +} + +static uint32_t +mtk_detect_cpuclk_rt5350(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val1, val2; + + val1 = val2 = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + + val1 >>= RT5350_CPU_CLKSEL_OFF1; + val2 >>= RT5350_CPU_CLKSEL_OFF2; + val1 &= RT5350_CPU_CLKSEL_MSK; + val2 &= RT5350_CPU_CLKSEL_MSK; + val1 |= (val2 << 1); + + switch (val1) { + case 0: + return (MTK_CPU_CLK_360MHZ); + case 1: + /* Reserved value, but we return UNKNOWN */ + return (MTK_CPU_CLK_UNKNOWN); + case 2: + return (MTK_CPU_CLK_320MHZ); + case 3: + return (MTK_CPU_CLK_300MHZ); + } + + /* Never reached */ + return (0); +} + +static uint32_t +mtk_detect_cpuclk_mt7620(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val, mul, div, res; + + val = bus_space_read_4(bst, bsh, SYSCTL_MT7620_CPLL_CFG1); + if (val & MT7620_CPU_CLK_AUX0) + return (MTK_CPU_CLK_480MHZ); + + val = bus_space_read_4(bst, bsh, SYSCTL_MT7620_CPLL_CFG0); + if (!(val & MT7620_CPLL_SW_CFG)) + return (MTK_CPU_CLK_600MHZ); + + mul = MT7620_PLL_MULT_RATIO_BASE + ((val >> MT7620_PLL_MULT_RATIO_OFF) & + MT7620_PLL_MULT_RATIO_MSK); + div = (val >> MT7620_PLL_DIV_RATIO_OFF) & MT7620_PLL_DIV_RATIO_MSK; + + if (div != MT7620_PLL_DIV_RATIO_MSK) + div += MT7620_PLL_DIV_RATIO_BASE; + else + div = MT7620_PLL_DIV_RATIO_MAX; + + res = (MT7620_XTAL_40 * mul) / div; + + return (MTK_MHZ(res)); +} + +static uint32_t +mtk_detect_cpuclk_mt7621(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val, div, res; + + val = bus_space_read_4(bst, bsh, SYSCTL_CLKCFG0); + if (val & MT7621_USES_MEMDIV) { + div = bus_space_read_4(bst, bsh, MTK_MT7621_CLKDIV_REG); + div >>= MT7621_MEMDIV_OFF; + div &= MT7621_MEMDIV_MSK; + div += MT7621_MEMDIV_BASE; + + val = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + val >>= MT7621_CLKSEL_OFF; + val &= MT7621_CLKSEL_MSK; + + if (val >= MT7621_CLKSEL_25MHZ_VAL) + res = div * MT7621_CLKSEL_25MHZ; + else if (val >= MT7621_CLKSEL_20MHZ_VAL) + res = div * MT7621_CLKSEL_20MHZ; + else + res = div * 0; /* XXX: not sure about this */ + } else { + val = bus_space_read_4(bst, bsh, SYSCTL_CUR_CLK_STS); + div = (val >> MT7621_CLK_STS_DIV_OFF) & MT7621_CLK_STS_MSK; + val &= MT7621_CLK_STS_MSK; + + res = (MT7621_CLK_STS_BASE * val) / div; + } + + return (MTK_MHZ(res)); +} + +static uint32_t +mtk_detect_cpuclk_mt7628(bus_space_tag_t bst, bus_space_handle_t bsh) +{ + uint32_t val; + + val = bus_space_read_4(bst, bsh, SYSCTL_SYSCFG); + val >>= MT7628_CPU_CLKSEL_OFF; + val &= MT7628_CPU_CLKSEL_MSK; + + if (val) + return (MTK_CPU_CLK_580MHZ); + + return (MTK_CPU_CLK_575MHZ); +} + +void +mtk_soc_try_early_detect(void) +{ + bus_space_tag_t bst; + bus_space_handle_t bsh; + uint32_t base; + phandle_t node; + int i; + + if ((node = OF_finddevice("/")) == -1) + return; + + for (i = 0; compat_data[i].ocd_str != NULL; i++) { + if (fdt_is_compatible(node, compat_data[i].ocd_str)) { + mtk_soc_socid = compat_data[i].ocd_data; + break; + } + } + + if (mtk_soc_socid == MTK_SOC_UNKNOWN) { + /* We don't know the SoC, so we don't know how to get clocks */ + return; + } + + bst = fdtbus_bs_tag; + if (mtk_soc_socid == MTK_SOC_MT7621) + base = MTK_MT7621_BASE; + else + base = MTK_DEFAULT_BASE; + + if (bus_space_map(bst, MTK_DEFAULT_BASE, MTK_DEFAULT_SIZE, 0, &bsh)) + return; + + /* First, figure out the CPU clock */ + switch (mtk_soc_socid) { + case MTK_SOC_RT3050: /* fallthrough */ + case MTK_SOC_RT3052: + mtk_soc_cpuclk = mtk_detect_cpuclk_rt305x(bst, bsh); + break; + case MTK_SOC_RT3350: + mtk_soc_cpuclk = MTK_CPU_CLK_320MHZ; + break; + case MTK_SOC_RT3352: + mtk_soc_cpuclk = mtk_detect_cpuclk_rt3352(bst, bsh); + break; + case MTK_SOC_RT3662: /* fallthrough */ + case MTK_SOC_RT3883: + mtk_soc_cpuclk = mtk_detect_cpuclk_rt3883(bst, bsh); + break; + case MTK_SOC_RT5350: + mtk_soc_cpuclk = mtk_detect_cpuclk_rt5350(bst, bsh); + break; + case MTK_SOC_MT7620A: /* fallthrough */ + case MTK_SOC_MT7620N: + mtk_soc_cpuclk = mtk_detect_cpuclk_mt7620(bst, bsh); + break; + case MTK_SOC_MT7621: + mtk_soc_cpuclk = mtk_detect_cpuclk_mt7621(bst, bsh); + break; + case MTK_SOC_MT7628: /* fallthrough */ + case MTK_SOC_MT7688: + mtk_soc_cpuclk = mtk_detect_cpuclk_mt7628(bst, bsh); + break; + default: + /* We don't know the SoC, so we can't find the CPU clock */ + break; + } + + /* Now figure out the timer clock */ + if (mtk_soc_socid == MTK_SOC_MT7621) { +#ifdef notyet + /* + * We use the GIC timer for timing source and its clock freq is + * the same as the CPU's clock freq + */ + mtk_soc_timerclk = mtk_soc_cpuclk; +#else + /* + * When GIC timer and MIPS timer are ready to co-exist and + * GIC timer is actually implemented, we need to switch to it. + * Until then we use a fake GIC timer, which is actually a + * normal MIPS ticker, so the timer clock is half the CPU clock + */ + mtk_soc_timerclk = mtk_soc_cpuclk / 2; +#endif + } else { + /* + * We use the MIPS ticker for the rest for now, so + * the CPU clock is divided by 2 + */ + mtk_soc_timerclk = mtk_soc_cpuclk / 2; + } + + switch (mtk_soc_socid) { + case MTK_SOC_RT3350: /* fallthrough */ + case MTK_SOC_RT3050: /* fallthrough */ + case MTK_SOC_RT3052: + /* UART clock is CPU clock / 3 */ + mtk_soc_uartclk = mtk_soc_cpuclk / MTK_UARTDIV_3; + break; + case MTK_SOC_RT3352: /* fallthrough */ + case MTK_SOC_RT3662: /* fallthrough */ + case MTK_SOC_RT3883: /* fallthrough */ + case MTK_SOC_RT5350: /* fallthrough */ + case MTK_SOC_MT7620A: /* fallthrough */ + case MTK_SOC_MT7620N: /* fallthrough */ + case MTK_SOC_MT7628: /* fallthrough */ + case MTK_SOC_MT7688: + /* UART clock is always 40MHz */ + mtk_soc_uartclk = MTK_UART_CLK_40MHZ; + break; + case MTK_SOC_MT7621: + /* UART clock is always 50MHz */ + mtk_soc_uartclk = MTK_UART_CLK_50MHZ; + break; + default: + /* We don't know the SoC, so we don't know the UART clock */ + break; + } + + bus_space_unmap(bst, bsh, MTK_DEFAULT_SIZE); +} + +uint32_t +mtk_soc_get_uartclk(void) +{ + + return mtk_soc_uartclk; +} + +uint32_t +mtk_soc_get_cpuclk(void) +{ + + return mtk_soc_cpuclk; +} + +uint32_t +mtk_soc_get_timerclk(void) +{ + + return mtk_soc_timerclk; +} + +uint32_t +mtk_soc_get_socid(void) +{ + + return mtk_soc_socid; +} + +/* + * The following are generic reset and clock functions + */ + +/* Default reset time is 100ms */ +#define DEFAULT_RESET_TIME 100000 + +int +mtk_soc_reset_device(device_t dev) +{ + int res; + + res = fdt_reset_assert_all(dev); + if (res == 0) { + DELAY(DEFAULT_RESET_TIME); + res = fdt_reset_deassert_all(dev); + if (res == 0) + DELAY(DEFAULT_RESET_TIME); + } + + return (res); +} + +int +mtk_soc_stop_clock(device_t dev) +{ + + return (fdt_clock_disable_all(dev)); +} + +int +mtk_soc_start_clock(device_t dev) +{ + + return (fdt_clock_enable_all(dev)); +} + +int +mtk_soc_assert_reset(device_t dev) +{ + + return (fdt_reset_assert_all(dev)); +} + +int +mtk_soc_deassert_reset(device_t dev) +{ + + return (fdt_reset_deassert_all(dev)); +} + +void +mtk_soc_reset(void) +{ + + mtk_sysctl_clr_set(SYSCTL_RSTCTRL, 0, 1); + mtk_sysctl_clr_set(SYSCTL_RSTCTRL, 1, 0); +} diff --git a/sys/mips/mediatek/mtk_soc.h b/sys/mips/mediatek/mtk_soc.h new file mode 100644 index 0000000..445675d --- /dev/null +++ b/sys/mips/mediatek/mtk_soc.h @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _MTK_SOC_H_ +#define _MTK_SOC_H_ + +enum mtk_soc_id { + MTK_SOC_UNKNOWN, + MTK_SOC_RT3050, + MTK_SOC_RT3052, + MTK_SOC_RT3350, + MTK_SOC_RT3352, + MTK_SOC_RT3662, + MTK_SOC_RT3883, + MTK_SOC_RT5350, + MTK_SOC_MT7620A, + MTK_SOC_MT7620N, + MTK_SOC_MT7621, + MTK_SOC_MT7628, + MTK_SOC_MT7688, + MTK_SOC_MAX +}; + +#define RT305X_CPU_CLKSEL_OFF 18 +#define RT305X_CPU_CLKSEL_MSK 0x1 +#define RT3352_CPU_CLKSEL_OFF 8 +#define RT3352_CPU_CLKSEL_MSK 0x1 +#define RT3883_CPU_CLKSEL_OFF 8 +#define RT3883_CPU_CLKSEL_MSK 0x3 +#define RT5350_CPU_CLKSEL_OFF1 8 +#define RT5350_CPU_CLKSEL_OFF2 10 +#define RT5350_CPU_CLKSEL_MSK 0x1 +#define MT7628_CPU_CLKSEL_OFF 6 +#define MT7628_CPU_CLKSEL_MSK 0x1 + +#define MT7620_CPU_CLK_AUX0 (1u<<24) +#define MT7620_CPLL_SW_CFG (1u<<31) +#define MT7620_PLL_MULT_RATIO_OFF 16 +#define MT7620_PLL_MULT_RATIO_MSK 0x7 +#define MT7620_PLL_MULT_RATIO_BASE 24 +#define MT7620_PLL_DIV_RATIO_OFF 10 +#define MT7620_PLL_DIV_RATIO_MSK 0x3 +#define MT7620_PLL_DIV_RATIO_BASE 2 +#define MT7620_PLL_DIV_RATIO_MAX 8 +#define MT7620_XTAL_40 40 + +#define MT7621_USES_MEMDIV (1u<<30) +#define MT7621_MEMDIV_OFF 4 +#define MT7621_MEMDIV_MSK 0x7f +#define MT7621_MEMDIV_BASE 1 +#define MT7621_CLKSEL_OFF 6 +#define MT7621_CLKSEL_MSK 0x7 +#define MT7621_CLKSEL_25MHZ_VAL 6 +#define MT7621_CLKSEL_20MHZ_VAL 3 +#define MT7621_CLKSEL_20MHZ 20 +#define MT7621_CLKSEL_25MHZ 25 +#define MT7621_CLK_STS_DIV_OFF 8 +#define MT7621_CLK_STS_MSK 0x1f +#define MT7621_CLK_STS_BASE 500 + +#define MTK_MT7621_CLKDIV_REG 0x5648 +#define MTK_MT7621_CLKDIV_OFF 4 +#define MTK_MT7621_CLKDIV_MSK 0x7f + +#define MTK_MHZ(x) ((x) * 1000 * 1000) + +#define MTK_CPU_CLK_UNKNOWN 0 +#define MTK_CPU_CLK_250MHZ 250000000 +#define MTK_CPU_CLK_300MHZ 300000000 +#define MTK_CPU_CLK_320MHZ 320000000 +#define MTK_CPU_CLK_360MHZ 360000000 +#define MTK_CPU_CLK_384MHZ 384000000 +#define MTK_CPU_CLK_400MHZ 400000000 +#define MTK_CPU_CLK_480MHZ 480000000 +#define MTK_CPU_CLK_500MHZ 500000000 +#define MTK_CPU_CLK_575MHZ 575000000 +#define MTK_CPU_CLK_580MHZ 580000000 +#define MTK_CPU_CLK_600MHZ 600000000 +#define MTK_CPU_CLK_880MHZ 880000000 + +#define MTK_UART_CLK_40MHZ 40000000 +#define MTK_UART_CLK_50MHZ 50000000 + +#define MTK_UARTDIV_2 2 +#define MTK_UARTDIV_3 3 + +#define MTK_DEFAULT_BASE 0x10000000 +#define MTK_MT7621_BASE 0x1e000000 +#define MTK_DEFAULT_SIZE 0x6000 + +extern void mtk_soc_try_early_detect(void); +extern uint32_t mtk_soc_get_uartclk(void); +extern uint32_t mtk_soc_get_cpuclk(void); +extern uint32_t mtk_soc_get_timerclk(void); +extern uint32_t mtk_soc_get_socid(void); + +extern int mtk_soc_reset_device(device_t); +extern int mtk_soc_stop_clock(device_t); +extern int mtk_soc_start_clock(device_t); +extern int mtk_soc_assert_reset(device_t); +extern int mtk_soc_deassert_reset(device_t); +extern void mtk_soc_reset(void); + +#endif /* _MTK_SOC_H_ */ diff --git a/sys/mips/mediatek/mtk_sysctl.c b/sys/mips/mediatek/mtk_sysctl.c new file mode 100644 index 0000000..c16b55d --- /dev/null +++ b/sys/mips/mediatek/mtk_sysctl.c @@ -0,0 +1,191 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +#include + +struct mtk_sysctl_softc { + device_t dev; + struct resource *mem_res; + int mem_rid; + struct mtx mtx; +}; + +static struct mtk_sysctl_softc *mtk_sysctl_sc = NULL; + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-sysc", 1 }, + { "ralink,rt3050-sysc", 1 }, + { "ralink,rt3352-sysc", 1 }, + { "ralink,rt3883-sysc", 1 }, + { "ralink,rt5350-sysc", 1 }, + { "ralink,mt7620a-sysc", 1 }, + { "mtk,mt7621-sysc", 1 }, + + /* Sentinel */ + { NULL, 0 } +}; + +#define MTK_SYSCTL_LOCK(sc) mtx_lock_spin(&(sc)->mtx) +#define MTK_SYSCTL_UNLOCK(sc) mtx_unlock_spin(&(sc)->mtx) +#define MTK_SYSCTL_LOCK_INIT(sc) \ + mtx_init(&(sc)->mtx, device_get_nameunit((sc)->dev), \ + "mtk_sysctl", MTX_SPIN) +#define MTK_SYSCTL_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtx) + +static int +mtk_sysctl_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK System Controller"); + + return (BUS_PROBE_DEFAULT); +} + +static int mtk_sysctl_detach(device_t); + +static int +mtk_sysctl_attach(device_t dev) +{ + struct mtk_sysctl_softc *sc = device_get_softc(dev); + + if (device_get_unit(dev) != 0 || mtk_sysctl_sc != NULL) { + device_printf(dev, "Only one sysctl module supported\n"); + return (ENXIO); + } + + mtk_sysctl_sc = sc; + + /* Map control/status registers. */ + sc->mem_rid = 0; + sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, + &sc->mem_rid, RF_ACTIVE); + + if (sc->mem_res == NULL) { + device_printf(dev, "couldn't map memory\n"); + mtk_sysctl_detach(dev); + return (ENXIO); + } + + sc->dev = dev; + + MTK_SYSCTL_LOCK_INIT(sc); + + return (0); +} + +static int +mtk_sysctl_detach(device_t dev) +{ + struct mtk_sysctl_softc *sc = device_get_softc(dev); + + if (sc->mem_res) + bus_release_resource(dev, SYS_RES_MEMORY, sc->mem_rid, + sc->mem_res); + + MTK_SYSCTL_LOCK_DESTROY(sc); + + return(0); +} + +uint32_t +mtk_sysctl_get(uint32_t reg) +{ + uint32_t val; + + MTK_SYSCTL_LOCK(mtk_sysctl_sc); + val = bus_read_4(mtk_sysctl_sc->mem_res, reg); + MTK_SYSCTL_UNLOCK(mtk_sysctl_sc); + + return (val); +} + +void +mtk_sysctl_set(uint32_t reg, uint32_t val) +{ + + MTK_SYSCTL_LOCK(mtk_sysctl_sc); + bus_write_4(mtk_sysctl_sc->mem_res, reg, val); + MTK_SYSCTL_UNLOCK(mtk_sysctl_sc); +} + +void +mtk_sysctl_clr_set(uint32_t reg, uint32_t clr, uint32_t set) +{ + uint32_t val; + + MTK_SYSCTL_LOCK(mtk_sysctl_sc); + val = bus_read_4(mtk_sysctl_sc->mem_res, reg); + val &= ~(clr); + val |= set; + bus_write_4(mtk_sysctl_sc->mem_res, reg, val); + MTK_SYSCTL_UNLOCK(mtk_sysctl_sc); +} + +static device_method_t mtk_sysctl_methods[] = { + DEVMETHOD(device_probe, mtk_sysctl_probe), + DEVMETHOD(device_attach, mtk_sysctl_attach), + DEVMETHOD(device_detach, mtk_sysctl_detach), + + DEVMETHOD_END +}; + +static driver_t mtk_sysctl_driver = { + "sysc", + mtk_sysctl_methods, + sizeof(struct mtk_sysctl_softc), +}; +static devclass_t mtk_sysctl_devclass; + +EARLY_DRIVER_MODULE(mtk_sysctl, simplebus, mtk_sysctl_driver, + mtk_sysctl_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_EARLY); diff --git a/sys/mips/mediatek/mtk_sysctl.h b/sys/mips/mediatek/mtk_sysctl.h new file mode 100644 index 0000000..0ef908e --- /dev/null +++ b/sys/mips/mediatek/mtk_sysctl.h @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _MTK_SYSCTL_H_ +#define _MTK_SYSCTL_H_ + +/* System Control */ +#define SYSCTL_CHIPID0_3 0x00 +#define SYSCTL_CHIPID4_7 0x04 + +#define SYSCTL_REVID 0x0C +#define SYSCTL_REVID_MASK 0xFFFF +#define SYSCTL_MT7621_REV_E 0x0101 + +#define SYSCTL_SYSCFG 0x10 +#define SYSCTL_SYSCFG1 0x14 +#define SYSCTL_CLKCFG0 0x2C +#define SYSCTL_CLKCFG1 0x30 +#define SYSCTL_RSTCTRL 0x34 +#define SYSCTL_GPIOMODE 0x60 + +#define SYSCTL_CUR_CLK_STS 0x44 + +#define SYSCTL_MT7620_CPLL_CFG0 0x54 +#define SYSCTL_MT7620_CPLL_CFG1 0x58 + +#define SYSCFG1_USB_HOST_MODE (1<<10) + +extern uint32_t mtk_sysctl_get(uint32_t); +extern void mtk_sysctl_set(uint32_t, uint32_t); +extern void mtk_sysctl_clr_set(uint32_t, uint32_t, uint32_t); + +#endif /* _MTK_SYSCTL_H_ */ -- cgit v1.1 From 757fe95d48ebd78273f52200c8c8563cf71192d0 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 11:08:50 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #2 This revision adds the following to the Mediatek/Ralink support: - initial support for "clocks" FDT property, currently based on fdt_clock - initial support for "resets" FDT property, currently based on the fdt_reset interface from D5826 - initial support for "pinctrl,bits" functionality via FDT. May be extended in the future to cover a better and fuller pinctrl implementation Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5827 --- sys/mips/mediatek/mtk_clock.c | 156 ++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_pinctrl.c | 114 +++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_reset.c | 139 +++++++++++++++++++++++++++++++++++ 3 files changed, 409 insertions(+) create mode 100644 sys/mips/mediatek/mtk_clock.c create mode 100644 sys/mips/mediatek/mtk_pinctrl.c create mode 100644 sys/mips/mediatek/mtk_reset.c diff --git a/sys/mips/mediatek/mtk_clock.c b/sys/mips/mediatek/mtk_clock.c new file mode 100644 index 0000000..83433fb --- /dev/null +++ b/sys/mips/mediatek/mtk_clock.c @@ -0,0 +1,156 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "fdt_clock_if.h" + +static const struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-clock", 1 }, + + /* Sentinel */ + { NULL, 0 } +}; + +static int +mtk_clock_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Clock Controller"); + + return (0); +} + +static int +mtk_clock_attach(device_t dev) +{ + + if (device_get_unit(dev) != 0) { + device_printf(dev, "Only one clock control allowed\n"); + return (ENXIO); + } + + fdt_clock_register_provider(dev); + + return (0); +} + +#define CLOCK_ENABLE 1 +#define CLOCK_DISABLE 0 + +static int +mtk_clock_set(device_t dev, int index, int value) +{ + uint32_t mask; + + /* Clock config register holds 32 clock gating bits */ + if (index < 0 || index > 31) + return (EINVAL); + + mask = (1u << index); + + if (value == CLOCK_ENABLE) + mtk_sysctl_clr_set(SYSCTL_CLKCFG1, 0, mask); + else + mtk_sysctl_clr_set(SYSCTL_CLKCFG1, mask, 0); + + return (0); +} + +static int +mtk_clock_enable(device_t dev, int index) +{ + + return mtk_clock_set(dev, index, CLOCK_ENABLE); +} + +static int +mtk_clock_disable(device_t dev, int index) +{ + + return mtk_clock_set(dev, index, CLOCK_DISABLE); +} + +static int +mtk_clock_get_info(device_t dev, int index, struct fdt_clock_info *info) +{ + uint32_t mask; + + if (index < 0 || index > 31 || info == NULL) + return (EINVAL); + + if (mtk_sysctl_get(SYSCTL_CLKCFG1) & mask) + info->flags = FDT_CIFLAG_RUNNING; + else + info->flags = 0; + + return (0); +} + +static device_method_t mtk_clock_methods[] = { + DEVMETHOD(device_probe, mtk_clock_probe), + DEVMETHOD(device_attach, mtk_clock_attach), + + /* fdt_clock interface */ + DEVMETHOD(fdt_clock_enable, mtk_clock_enable), + DEVMETHOD(fdt_clock_disable, mtk_clock_disable), + DEVMETHOD(fdt_clock_get_info, mtk_clock_get_info), + + DEVMETHOD_END +}; + +static driver_t mtk_clock_driver = { + "clkctrl", + mtk_clock_methods, + 0, +}; +static devclass_t mtk_clock_devclass; + +EARLY_DRIVER_MODULE(mtk_clock, simplebus, mtk_clock_driver, mtk_clock_devclass, + 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_EARLY); + +MODULE_DEPEND(mtk_clock, mtk_sysctl, 1, 1, 1); diff --git a/sys/mips/mediatek/mtk_pinctrl.c b/sys/mips/mediatek/mtk_pinctrl.c new file mode 100644 index 0000000..489be5b --- /dev/null +++ b/sys/mips/mediatek/mtk_pinctrl.c @@ -0,0 +1,114 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "fdt_pinctrl_if.h" + +static const struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-pinctrl", 1 }, + + /* Sentinel */ + { NULL, 0 } +}; + +static int +mtk_pinctrl_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Pin Controller"); + + return (0); +} + +static int +mtk_pinctrl_attach(device_t dev) +{ + + if (device_get_unit(dev) != 0) { + device_printf(dev, "Only one pin control allowed\n"); + return (ENXIO); + } + + fdt_pinctrl_register(dev, "pinctrl-single,bits"); + fdt_pinctrl_configure_tree(dev); + + if (bootverbose) + device_printf(dev, "GPIO mode: 0x%08x\n", + mtk_sysctl_get(SYSCTL_GPIOMODE)); + + return (0); +} + +static int +mtk_pinctrl_configure(device_t dev, phandle_t cfgxref) +{ + + return (EINVAL); +} + +static device_method_t mtk_pinctrl_methods[] = { + DEVMETHOD(device_probe, mtk_pinctrl_probe), + DEVMETHOD(device_attach, mtk_pinctrl_attach), + + /* fdt_pinctrl interface */ + DEVMETHOD(fdt_pinctrl_configure, mtk_pinctrl_configure), + + DEVMETHOD_END +}; + +static driver_t mtk_pinctrl_driver = { + "pinctrl", + mtk_pinctrl_methods, + 0, +}; +static devclass_t mtk_pinctrl_devclass; + +EARLY_DRIVER_MODULE(mtk_pinctrl, simplebus, mtk_pinctrl_driver, + mtk_pinctrl_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_EARLY); + +MODULE_DEPEND(mtk_pinctrl, mtk_sysctl, 1, 1, 1); diff --git a/sys/mips/mediatek/mtk_reset.c b/sys/mips/mediatek/mtk_reset.c new file mode 100644 index 0000000..31d56e4 --- /dev/null +++ b/sys/mips/mediatek/mtk_reset.c @@ -0,0 +1,139 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include "fdt_reset_if.h" + +static const struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-reset", 1 }, + + /* Sentinel */ + { NULL, 0 } +}; + +static int +mtk_reset_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Reset Controller"); + + return (0); +} + +static int +mtk_reset_attach(device_t dev) +{ + + if (device_get_unit(dev) != 0) { + device_printf(dev, "Only one reset control allowed\n"); + return (ENXIO); + } + + fdt_reset_register_provider(dev); + + return (0); +} + +#define RESET_ASSERT 1 +#define RESET_DEASSERT 0 + +static int +mtk_reset_set(device_t dev, int index, int value) +{ + uint32_t mask; + + /* index 0 is SoC reset, indices 1 - 31 are valid peripheral resets */ + if (index < 1 || index > 31) + return (EINVAL); + + mask = (1u << index); + + if (value == RESET_ASSERT) + mtk_sysctl_clr_set(SYSCTL_RSTCTRL, 0, mask); + else + mtk_sysctl_clr_set(SYSCTL_RSTCTRL, mask, 0); + + return (0); +} + +static int +mtk_reset_assert(device_t dev, int index) +{ + + return mtk_reset_set(dev, index, RESET_ASSERT); +} + +static int +mtk_reset_deassert(device_t dev, int index) +{ + + return mtk_reset_set(dev, index, RESET_DEASSERT); +} + +static device_method_t mtk_reset_methods[] = { + DEVMETHOD(device_probe, mtk_reset_probe), + DEVMETHOD(device_attach, mtk_reset_attach), + + /* fdt_reset interface */ + DEVMETHOD(fdt_reset_assert, mtk_reset_assert), + DEVMETHOD(fdt_reset_deassert, mtk_reset_deassert), + + DEVMETHOD_END +}; + +static driver_t mtk_reset_driver = { + "rstctrl", + mtk_reset_methods, + 0, +}; +static devclass_t mtk_reset_devclass; + +EARLY_DRIVER_MODULE(mtk_reset, simplebus, mtk_reset_driver, mtk_reset_devclass, + 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_EARLY); + +MODULE_DEPEND(mtk_reset, mtk_sysctl, 1, 1, 1); -- cgit v1.1 From c1a33b7984a1746d9f4514dc4b6db189262837b1 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 11:12:37 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #3 Interrupt controllers found in various Mediatek/Ralink SoCs. mtk_intr_v1 and mtk_intr_v2 are basically the same at the moment, with just different register mappings. However, v1 interrupt controller has a subset of the functionality of the v2 interrupt controller, so in the future the v2 interrupt controller driver may be enhanced, if needed, with things like level/edge interrupts and soft interrupts. So, for the moment I suggest we keep them as 2 separate files. mtk_intr_gic provides very basic (similar to v1 and v2) support for MIPS GIC controllers, which currently maps all interrupts to a single core and sets them to type level, active high. In the future this may be developed into a generic GIC controller to support any new MIPS SoCs that include it. The GIC is a standard MTI interrupt controller in their multi-core line-up (e.g., 1004K, 1074K, etc.), rather than a SoC-specific controller. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5839 --- sys/mips/mediatek/mtk_intr_gic.c | 377 +++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_intr_v1.c | 353 ++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_intr_v2.c | 348 ++++++++++++++++++++++++++++++++++++ 3 files changed, 1078 insertions(+) create mode 100644 sys/mips/mediatek/mtk_intr_gic.c create mode 100644 sys/mips/mediatek/mtk_intr_v1.c create mode 100644 sys/mips/mediatek/mtk_intr_v2.c diff --git a/sys/mips/mediatek/mtk_intr_gic.c b/sys/mips/mediatek/mtk_intr_gic.c new file mode 100644 index 0000000..3eb6ffc --- /dev/null +++ b/sys/mips/mediatek/mtk_intr_gic.c @@ -0,0 +1,377 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov + * Copyright (c) 2015 Alexander Kabaev + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "pic_if.h" + +#define MTK_NIRQS 64 /* We'll only use 64 for now */ + +#define MTK_INTPOL 0x0100 +#define MTK_INTTRIG 0x0180 +#define MTK_INTDIS 0x0300 +#define MTK_INTENA 0x0380 +#define MTK_INTMASK 0x0400 +#define MTK_INTSTAT 0x0480 +#define MTK_MAPPIN(_i) (0x0500 + (4 * (_i))) +#define MTK_MAPVPE(_i, _v) (0x2000 + (32 * (_i)) + (((_v) / 32) * 4)) + +#define MTK_INTPOL_POS 1 +#define MTK_INTPOL_NEG 0 +#define MTK_INTTRIG_EDGE 1 +#define MTK_INTTRIG_LEVEL 0 +#define MTK_PIN_BITS(_i) ((1 << 31) | (_i)) +#define MTK_VPE_BITS(_v) (1 << ((_v) % 32)) + +static int mtk_gic_intr(void *); + +struct mtk_gic_irqsrc { + struct intr_irqsrc isrc; + u_int irq; +}; + +struct mtk_gic_softc { + device_t gic_dev; + void * gic_intrhand; + struct resource * gic_res[2]; + struct mtk_gic_irqsrc gic_irqs[MTK_NIRQS]; + struct mtx mutex; + uint32_t nirqs; +}; + +#define GIC_INTR_ISRC(sc, irq) (&(sc)->gic_irqs[(irq)].isrc) + +static struct resource_spec mtk_gic_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, /* Registers */ + { SYS_RES_IRQ, 0, RF_ACTIVE }, /* Parent interrupt 1 */ + { -1, 0 } +}; + +static struct ofw_compat_data compat_data[] = { + { "mti,gic", 1 }, + { NULL, 0 } +}; + +#if 0 +#define READ4(_sc, _reg) \ + bus_space_read_4((_sc)->bst, (_sc)->bsh, _reg) +#define WRITE4(_sc, _reg, _val) \ + bus_space_write_4((_sc)->bst, (_sc)->bsh, _reg, _val) +#else +#define READ4(_sc, _reg) bus_read_4((_sc)->gic_res[0], (_reg)) +#define WRITE4(_sc, _reg, _val) bus_write_4((_sc)->gic_res[0], (_reg), (_val)) +#endif + +static int +mtk_gic_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Interrupt Controller (GIC)"); + return (BUS_PROBE_DEFAULT); +} + +static inline void +gic_irq_unmask(struct mtk_gic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTENA, (1u << (irq))); +} + +static inline void +gic_irq_mask(struct mtk_gic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTDIS, (1u << (irq))); +} + +static inline intptr_t +gic_xref(device_t dev) +{ + + return (OF_xref_from_node(ofw_bus_get_node(dev))); +} + +static int +mtk_gic_register_isrcs(struct mtk_gic_softc *sc) +{ + int error; + uint32_t irq; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->gic_dev); + for (irq = 0; irq < sc->nirqs; irq++) { + sc->gic_irqs[irq].irq = irq; + isrc = GIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->gic_dev, 0, "%s", name); + if (error != 0) { + /* XXX call intr_isrc_deregister */ + device_printf(sc->gic_dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int +mtk_gic_attach(device_t dev) +{ + struct mtk_gic_softc *sc; + intptr_t xref = gic_xref(dev); + int i; + + sc = device_get_softc(dev); + + if (bus_alloc_resources(dev, mtk_gic_spec, sc->gic_res)) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + + sc->gic_dev = dev; + + /* Initialize mutex */ + mtx_init(&sc->mutex, "PIC lock", "", MTX_SPIN); + + /* Set the number of interrupts */ + sc->nirqs = nitems(sc->gic_irqs); + + /* Mask all interrupts */ + WRITE4(sc, MTK_INTDIS, 0xFFFFFFFF); + + /* All interrupts are of type level */ + WRITE4(sc, MTK_INTTRIG, 0x00000000); + + /* All interrupts are of positive polarity */ + WRITE4(sc, MTK_INTPOL, 0xFFFFFFFF); + + /* + * Route all interrupts to pin 0 on VPE 0; + */ + for (i = 0; i < 32; i++) { + WRITE4(sc, MTK_MAPPIN(i), MTK_PIN_BITS(0)); + WRITE4(sc, MTK_MAPVPE(i, 0), MTK_VPE_BITS(0)); + } + + /* Register the interrupts */ + if (mtk_gic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register GIC ISRCs\n"); + goto cleanup; + } + + /* + * Now, when everything is initialized, it's right time to + * register interrupt controller to interrupt framefork. + */ + if (intr_pic_register(dev, xref) != 0) { + device_printf(dev, "could not register PIC\n"); + goto cleanup; + } + + if (bus_setup_intr(dev, sc->gic_res[1], INTR_TYPE_CLK, + mtk_gic_intr, NULL, sc, &sc->gic_intrhand)) { + device_printf(dev, "could not setup irq handler\n"); + intr_pic_deregister(dev, xref); + goto cleanup; + } + return (0); + +cleanup: + bus_release_resources(dev, mtk_gic_spec, sc->gic_res); + return(ENXIO); +} + +static int +mtk_gic_intr(void *arg) +{ + struct mtk_gic_softc *sc = arg; + struct thread *td; + uint32_t i, intr; + + td = curthread; + /* Workaround: do not inflate intr nesting level */ + td->td_intr_nesting_level--; + + intr = READ4(sc, MTK_INTSTAT) & READ4(sc, MTK_INTMASK); + while ((i = fls(intr)) != 0) { + i--; + intr &= ~(1u << i); + + if (intr_isrc_dispatch(GIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->gic_dev, + "Stray interrupt %u detected\n", i); + gic_irq_mask(sc, i); + continue; + } + } + + KASSERT(i == 0, ("all interrupts handled")); + + td->td_intr_nesting_level++; + + return (FILTER_HANDLED); +} + +static int +mtk_gic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ +#ifdef FDT + struct mtk_gic_softc *sc; + + sc = device_get_softc(dev); + + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->nirqs) + return (EINVAL); + + *isrcp = GIC_INTR_ISRC(sc, data->fdt.cells[0]); + return (0); +#else + return (EINVAL); +#endif +} + +static void +mtk_gic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_gic_irqsrc *)isrc)->irq; + gic_irq_unmask(device_get_softc(dev), irq); +} + +static void +mtk_gic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_gic_irqsrc *)isrc)->irq; + gic_irq_mask(device_get_softc(dev), irq); +} + +static void +mtk_gic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gic_disable_intr(dev, isrc); +} + +static void +mtk_gic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gic_enable_intr(dev, isrc); +} + +static void +mtk_gic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ +} + +#ifdef SMP +static int +mtk_gic_bind(device_t dev, struct intr_irqsrc *isrc) +{ + return (EOPNOTSUPP); +} + +static void +mtk_gic_init_secondary(device_t dev) +{ +} + +static void +mtk_gic_ipi_send(device_t dev, struct intr_irqsrc *isrc, cpuset_t cpus) +{ +} +#endif + +static device_method_t mtk_gic_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_gic_probe), + DEVMETHOD(device_attach, mtk_gic_attach), + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, mtk_gic_disable_intr), + DEVMETHOD(pic_enable_intr, mtk_gic_enable_intr), + DEVMETHOD(pic_map_intr, mtk_gic_map_intr), + DEVMETHOD(pic_post_filter, mtk_gic_post_filter), + DEVMETHOD(pic_post_ithread, mtk_gic_post_ithread), + DEVMETHOD(pic_pre_ithread, mtk_gic_pre_ithread), +#ifdef SMP + DEVMETHOD(pic_bind, mtk_gic_bind), + DEVMETHOD(pic_init_secondary, mtk_gic_init_secondary), + DEVMETHOD(pic_ipi_send, mtk_gic_ipi_send), +#endif + { 0, 0 } +}; + +static driver_t mtk_gic_driver = { + "intc", + mtk_gic_methods, + sizeof(struct mtk_gic_softc), +}; + +static devclass_t mtk_gic_devclass; + +EARLY_DRIVER_MODULE(intc_gic, simplebus, mtk_gic_driver, mtk_gic_devclass, 0, 0, + BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/mips/mediatek/mtk_intr_v1.c b/sys/mips/mediatek/mtk_intr_v1.c new file mode 100644 index 0000000..f1ae3a2 --- /dev/null +++ b/sys/mips/mediatek/mtk_intr_v1.c @@ -0,0 +1,353 @@ +/*- + * Copyright (c) 2015 Stanislav Galabov + * Copyright (c) 2015 Alexander Kabaev + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "pic_if.h" + +#define MTK_NIRQS 32 + +#define MTK_IRQ0STAT 0x0000 +#define MTK_IRQ1STAT 0x0004 +#define MTK_INTTYPE 0x0020 +#define MTK_INTRAW 0x0030 +#define MTK_INTENA 0x0034 +#define MTK_INTDIS 0x0038 + +static int mtk_pic_intr(void *); + +struct mtk_pic_irqsrc { + struct intr_irqsrc isrc; + u_int irq; +}; + +struct mtk_pic_softc { + device_t pic_dev; + void * pic_intrhand; + struct resource * pic_res[2]; + struct mtk_pic_irqsrc pic_irqs[MTK_NIRQS]; + struct mtx mutex; + uint32_t nirqs; +}; + +#define PIC_INTR_ISRC(sc, irq) (&(sc)->pic_irqs[(irq)].isrc) + +static struct resource_spec mtk_pic_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, /* Registers */ + { SYS_RES_IRQ, 0, RF_ACTIVE }, /* Parent interrupt 1 */ +// { SYS_RES_IRQ, 1, RF_ACTIVE }, /* Parent interrupt 2 */ + { -1, 0 } +}; + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-intc", 1 }, + { "ralink,rt3050-intc", 1 }, + { "ralink,rt3352-intc", 1 }, + { "ralink,rt3883-intc", 1 }, + { "ralink,rt5350-intc", 1 }, + { "ralink,mt7620a-intc", 1 }, + { NULL, 0 } +}; + +#define READ4(_sc, _reg) bus_read_4((_sc)->pic_res[0], _reg) +#define WRITE4(_sc, _reg, _val) bus_write_4((_sc)->pic_res[0], _reg, _val) + +static int +mtk_pic_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Interrupt Controller (v2)"); + return (BUS_PROBE_DEFAULT); +} + +static inline void +pic_irq_unmask(struct mtk_pic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTENA, (1u << (irq))); +} + +static inline void +pic_irq_mask(struct mtk_pic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTDIS, (1u << (irq))); +} + +static inline intptr_t +pic_xref(device_t dev) +{ + return (OF_xref_from_node(ofw_bus_get_node(dev))); +} + +static int +mtk_pic_register_isrcs(struct mtk_pic_softc *sc) +{ + int error; + uint32_t irq; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->pic_dev); + for (irq = 0; irq < sc->nirqs; irq++) { + sc->pic_irqs[irq].irq = irq; + isrc = PIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->pic_dev, 0, "%s", name); + if (error != 0) { + /* XXX call intr_isrc_deregister */ + device_printf(sc->pic_dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int +mtk_pic_attach(device_t dev) +{ + struct mtk_pic_softc *sc; + intptr_t xref = pic_xref(dev); + + sc = device_get_softc(dev); + + if (bus_alloc_resources(dev, mtk_pic_spec, sc->pic_res)) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + + sc->pic_dev = dev; + + /* Initialize mutex */ + mtx_init(&sc->mutex, "PIC lock", "", MTX_SPIN); + + /* Set the number of interrupts */ + sc->nirqs = nitems(sc->pic_irqs); + + /* Mask all interrupts */ + WRITE4(sc, MTK_INTDIS, 0x7FFFFFFF); + + /* But enable interrupt generation/masking */ + WRITE4(sc, MTK_INTENA, 0x80000000); + + /* Set all interrupts to type 0 */ + WRITE4(sc, MTK_INTTYPE, 0x00000000); + + /* Register the interrupts */ + if (mtk_pic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register PIC ISRCs\n"); + goto cleanup; + } + + /* + * Now, when everything is initialized, it's right time to + * register interrupt controller to interrupt framefork. + */ + if (intr_pic_register(dev, xref) != 0) { + device_printf(dev, "could not register PIC\n"); + goto cleanup; + } + + if (bus_setup_intr(dev, sc->pic_res[1], INTR_TYPE_CLK, + mtk_pic_intr, NULL, sc, &sc->pic_intrhand)) { + device_printf(dev, "could not setup irq handler\n"); + intr_pic_deregister(dev, xref); + goto cleanup; + } + return (0); + +cleanup: + bus_release_resources(dev, mtk_pic_spec, sc->pic_res); + return(ENXIO); +} + +static int +mtk_pic_intr(void *arg) +{ + struct mtk_pic_softc *sc = arg; + struct thread *td; + uint32_t i, intr; + + td = curthread; + /* Workaround: do not inflate intr nesting level */ + td->td_intr_nesting_level--; + +#ifdef _notyet_ + intr = READ4(sc, MTK_IRQ1STAT); + while ((i = fls(intr)) != 0) { + i--; + intr &= ~(1u << i); + + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->pic_dev, + "Stray interrupt %u detected\n", i); + pic_irq_mask(sc, i); + continue; + } + } + + KASSERT(i == 0, ("all interrupts handled")); +#endif + + intr = READ4(sc, MTK_IRQ0STAT); + + while ((i = fls(intr)) != 0) { + i--; + intr &= ~(1u << i); + + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->pic_dev, + "Stray interrupt %u detected\n", i); + pic_irq_mask(sc, i); + continue; + } + } + + KASSERT(i == 0, ("all interrupts handled")); + + td->td_intr_nesting_level++; + + return (FILTER_HANDLED); +} + +static int +mtk_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ +#ifdef FDT + struct mtk_pic_softc *sc; + + sc = device_get_softc(dev); + + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->nirqs) + return (EINVAL); + + *isrcp = PIC_INTR_ISRC(sc, data->fdt.cells[0]); + return (0); +#else + return (EINVAL); +#endif +} + +static void +mtk_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_pic_irqsrc *)isrc)->irq; + pic_irq_unmask(device_get_softc(dev), irq); +} + +static void +mtk_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_pic_irqsrc *)isrc)->irq; + pic_irq_mask(device_get_softc(dev), irq); +} + +static void +mtk_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_pic_disable_intr(dev, isrc); +} + +static void +mtk_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_pic_enable_intr(dev, isrc); +} + +static void +mtk_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ +} + +static device_method_t mtk_pic_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_pic_probe), + DEVMETHOD(device_attach, mtk_pic_attach), + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, mtk_pic_disable_intr), + DEVMETHOD(pic_enable_intr, mtk_pic_enable_intr), + DEVMETHOD(pic_map_intr, mtk_pic_map_intr), + DEVMETHOD(pic_post_filter, mtk_pic_post_filter), + DEVMETHOD(pic_post_ithread, mtk_pic_post_ithread), + DEVMETHOD(pic_pre_ithread, mtk_pic_pre_ithread), + { 0, 0 } +}; + +static driver_t mtk_pic_driver = { + "intc", + mtk_pic_methods, + sizeof(struct mtk_pic_softc), +}; + +static devclass_t mtk_pic_devclass; + +EARLY_DRIVER_MODULE(intc_v1, simplebus, mtk_pic_driver, mtk_pic_devclass, 0, 0, + BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); diff --git a/sys/mips/mediatek/mtk_intr_v2.c b/sys/mips/mediatek/mtk_intr_v2.c new file mode 100644 index 0000000..5a9646e --- /dev/null +++ b/sys/mips/mediatek/mtk_intr_v2.c @@ -0,0 +1,348 @@ +/*- + * Copyright (c) 2015 Stanislav Galabov + * Copyright (c) 2015 Alexander Kabaev + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification, immediately at the beginning of the file. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "pic_if.h" + +#define MTK_NIRQS 32 + +#define MTK_IRQ0STAT 0x009c +#define MTK_IRQ1STAT 0x00a0 +#define MTK_INTTYPE 0x0000 +#define MTK_INTRAW 0x00a4 +#define MTK_INTENA 0x0080 +#define MTK_INTDIS 0x0078 + +static int mtk_pic_intr(void *); + +struct mtk_pic_irqsrc { + struct intr_irqsrc isrc; + u_int irq; +}; + +struct mtk_pic_softc { + device_t pic_dev; + void * pic_intrhand; + struct resource * pic_res[2]; + struct mtk_pic_irqsrc pic_irqs[MTK_NIRQS]; + struct mtx mutex; + uint32_t nirqs; +}; + +#define PIC_INTR_ISRC(sc, irq) (&(sc)->pic_irqs[(irq)].isrc) + +static struct resource_spec mtk_pic_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, /* Registers */ + { SYS_RES_IRQ, 0, RF_ACTIVE }, /* Parent interrupt 1 */ +// { SYS_RES_IRQ, 1, RF_ACTIVE }, /* Parent interrupt 2 */ + { -1, 0 } +}; + +static struct ofw_compat_data compat_data[] = { + { "ralink,mt7628an-intc", 1 }, + { NULL, 0 } +}; + +#define READ4(_sc, _reg) bus_read_4((_sc)->pic_res[0], _reg) +#define WRITE4(_sc, _reg, _val) bus_write_4((_sc)->pic_res[0], _reg, _val) + +static int +mtk_pic_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + device_set_desc(dev, "MTK Interrupt Controller (v2)"); + return (BUS_PROBE_DEFAULT); +} + +static inline void +pic_irq_unmask(struct mtk_pic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTENA, (1u << (irq))); +} + +static inline void +pic_irq_mask(struct mtk_pic_softc *sc, u_int irq) +{ + + WRITE4(sc, MTK_INTDIS, (1u << (irq))); +} + +static inline intptr_t +pic_xref(device_t dev) +{ + return (OF_xref_from_node(ofw_bus_get_node(dev))); +} + +static int +mtk_pic_register_isrcs(struct mtk_pic_softc *sc) +{ + int error; + uint32_t irq; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->pic_dev); + for (irq = 0; irq < sc->nirqs; irq++) { + sc->pic_irqs[irq].irq = irq; + isrc = PIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->pic_dev, 0, "%s", name); + if (error != 0) { + /* XXX call intr_isrc_deregister */ + device_printf(sc->pic_dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int +mtk_pic_attach(device_t dev) +{ + struct mtk_pic_softc *sc; + intptr_t xref = pic_xref(dev); + + sc = device_get_softc(dev); + + if (bus_alloc_resources(dev, mtk_pic_spec, sc->pic_res)) { + device_printf(dev, "could not allocate resources\n"); + return (ENXIO); + } + + sc->pic_dev = dev; + + /* Initialize mutex */ + mtx_init(&sc->mutex, "PIC lock", "", MTX_SPIN); + + /* Set the number of interrupts */ + sc->nirqs = nitems(sc->pic_irqs); + + /* Mask all interrupts */ + WRITE4(sc, MTK_INTDIS, 0xFFFFFFFF); + + /* But enable interrupt generation/masking */ + WRITE4(sc, MTK_INTENA, 0x00000000); + + /* Set all interrupts to type 0 */ + WRITE4(sc, MTK_INTTYPE, 0xFFFFFFFF); + + /* Register the interrupts */ + if (mtk_pic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register PIC ISRCs\n"); + goto cleanup; + } + + /* + * Now, when everything is initialized, it's right time to + * register interrupt controller to interrupt framefork. + */ + if (intr_pic_register(dev, xref) != 0) { + device_printf(dev, "could not register PIC\n"); + goto cleanup; + } + + if (bus_setup_intr(dev, sc->pic_res[1], INTR_TYPE_CLK, + mtk_pic_intr, NULL, sc, &sc->pic_intrhand)) { + device_printf(dev, "could not setup irq handler\n"); + intr_pic_deregister(dev, xref); + goto cleanup; + } + return (0); + +cleanup: + bus_release_resources(dev, mtk_pic_spec, sc->pic_res); + return(ENXIO); +} + +static int +mtk_pic_intr(void *arg) +{ + struct mtk_pic_softc *sc = arg; + struct thread *td; + uint32_t i, intr; + + td = curthread; + /* Workaround: do not inflate intr nesting level */ + td->td_intr_nesting_level--; + +#ifdef _notyet_ + intr = READ4(sc, MTK_IRQ1STAT); + while ((i = fls(intr)) != 0) { + i--; + intr &= ~(1u << i); + + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->pic_dev, + "Stray interrupt %u detected\n", i); + pic_irq_mask(sc, i); + continue; + } + } + + KASSERT(i == 0, ("all interrupts handled")); +#endif + + intr = READ4(sc, MTK_IRQ0STAT); + + while ((i = fls(intr)) != 0) { + i--; + intr &= ~(1u << i); + + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->pic_dev, + "Stray interrupt %u detected\n", i); + pic_irq_mask(sc, i); + continue; + } + } + + KASSERT(i == 0, ("all interrupts handled")); + + td->td_intr_nesting_level++; + + return (FILTER_HANDLED); +} + +static int +mtk_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ +#ifdef FDT + struct mtk_pic_softc *sc; + + sc = device_get_softc(dev); + + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->nirqs) + return (EINVAL); + + *isrcp = PIC_INTR_ISRC(sc, data->fdt.cells[0]); + return (0); +#else + return (EINVAL); +#endif +} + +static void +mtk_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_pic_irqsrc *)isrc)->irq; + pic_irq_unmask(device_get_softc(dev), irq); +} + +static void +mtk_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + u_int irq; + + irq = ((struct mtk_pic_irqsrc *)isrc)->irq; + pic_irq_mask(device_get_softc(dev), irq); +} + +static void +mtk_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_pic_disable_intr(dev, isrc); +} + +static void +mtk_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_pic_enable_intr(dev, isrc); +} + +static void +mtk_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ +} + +static device_method_t mtk_pic_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_pic_probe), + DEVMETHOD(device_attach, mtk_pic_attach), + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, mtk_pic_disable_intr), + DEVMETHOD(pic_enable_intr, mtk_pic_enable_intr), + DEVMETHOD(pic_map_intr, mtk_pic_map_intr), + DEVMETHOD(pic_post_filter, mtk_pic_post_filter), + DEVMETHOD(pic_post_ithread, mtk_pic_post_ithread), + DEVMETHOD(pic_pre_ithread, mtk_pic_pre_ithread), + { 0, 0 } +}; + +static driver_t mtk_pic_driver = { + "intc", + mtk_pic_methods, + sizeof(struct mtk_pic_softc), +}; + +static devclass_t mtk_pic_devclass; + +EARLY_DRIVER_MODULE(intc_v2, simplebus, mtk_pic_driver, mtk_pic_devclass, 0, 0, + BUS_PASS_INTERRUPT + BUS_PASS_ORDER_MIDDLE); -- cgit v1.1 From 12fb57ccb70470ac4fac6f36b3d7d28d2397533b Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 11:16:32 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #4 UART drivers. - uart_dev_mtk.[ch] are the old-style Mediatek/Ralink-specific UART driver as also found in sys/mips/rt305x/uart_dev_rt305x.c, with minor improvements and FDT attachment enabled for the appropriate SoCs. - uart_dev_mtk_ns8250.c is the new-style ns16550a-compatible UART driver found in newer Mediatek SoCs. It uses the uart_dev_ns8250.c driver indirectly and is basically just a wrapper around it and only overrides its probe method. The reason I am not using the uart_dev_ns8250.c driver directly is because I have some code that does UART clock detection before initializing the UART, so that we don't need to hard-code the UART clock frequency in the dts files for each board. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5840 --- sys/mips/mediatek/uart_dev_mtk.c | 552 ++++++++++++++++++++++++++++++++ sys/mips/mediatek/uart_dev_mtk.h | 126 ++++++++ sys/mips/mediatek/uart_dev_mtk_ns8250.c | 113 +++++++ 3 files changed, 791 insertions(+) create mode 100644 sys/mips/mediatek/uart_dev_mtk.c create mode 100644 sys/mips/mediatek/uart_dev_mtk.h create mode 100644 sys/mips/mediatek/uart_dev_mtk_ns8250.c diff --git a/sys/mips/mediatek/uart_dev_mtk.c b/sys/mips/mediatek/uart_dev_mtk.c new file mode 100644 index 0000000..5993cb6 --- /dev/null +++ b/sys/mips/mediatek/uart_dev_mtk.c @@ -0,0 +1,552 @@ +/* $NetBSD: uart.c,v 1.2 2007/03/23 20:05:47 dogcow Exp $ */ + +/*- + * Copyright (c) 2013, Alexander A. Mityaev + * Copyright (c) 2010 Aleksandr Rybalko. + * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. + * Copyright (c) 2007 Oleksandr Tymoshenko. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_ddb.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include "uart_if.h" + +/* Set some reference clock value. Real value will be taken from FDT */ +#define DEFAULT_RCLK (120 * 1000 * 1000) + +/* + * Low-level UART interface. + */ +static int mtk_uart_probe(struct uart_bas *bas); +static void mtk_uart_init(struct uart_bas *bas, int, int, int, int); +static void mtk_uart_term(struct uart_bas *bas); +static void mtk_uart_putc(struct uart_bas *bas, int); +static int mtk_uart_rxready(struct uart_bas *bas); +static int mtk_uart_getc(struct uart_bas *bas, struct mtx *); + +static struct uart_ops uart_mtk_ops = { + .probe = mtk_uart_probe, + .init = mtk_uart_init, + .term = mtk_uart_term, + .putc = mtk_uart_putc, + .rxready = mtk_uart_rxready, + .getc = mtk_uart_getc, +}; + +static int uart_output = 1; +TUNABLE_INT("kern.uart_output", &uart_output); +SYSCTL_INT(_kern, OID_AUTO, uart_output, CTLFLAG_RW, + &uart_output, 0, "UART output enabled."); + +static int +mtk_uart_probe(struct uart_bas *bas) +{ + return (0); +} + +static void +mtk_uart_init(struct uart_bas *bas, int baudrate, int databits, + int stopbits, int parity) +{ + /* CLKDIV = 384000000/ 3/ 16/ br */ + /* for 384MHz CLKDIV = 8000000 / baudrate; */ + switch (databits) { + case 5: + databits = UART_LCR_5B; + break; + case 6: + databits = UART_LCR_6B; + break; + case 7: + databits = UART_LCR_7B; + break; + case 8: + databits = UART_LCR_8B; + break; + default: + /* Unsupported */ + return; + } + switch (parity) { + case UART_PARITY_EVEN: parity = (UART_LCR_PEN|UART_LCR_EVEN); break; + case UART_PARITY_ODD: parity = (UART_LCR_PEN); break; + case UART_PARITY_NONE: parity = 0; break; + /* Unsupported */ + default: return; + } + + if (bas->rclk && baudrate) { + uart_setreg(bas, UART_CDDL_REG, bas->rclk/16/baudrate); + uart_barrier(bas); + } + + uart_setreg(bas, UART_LCR_REG, databits | + (stopbits==1?0:UART_LCR_STB_15) | + parity); + uart_barrier(bas); +} + +static void +mtk_uart_term(struct uart_bas *bas) +{ + uart_setreg(bas, UART_MCR_REG, 0); + uart_barrier(bas); +} + +static void +mtk_uart_putc(struct uart_bas *bas, int c) +{ + char chr; + if (!uart_output) return; + chr = c; + while (!(uart_getreg(bas, UART_LSR_REG) & UART_LSR_THRE)); + uart_setreg(bas, UART_TX_REG, c); + uart_barrier(bas); + while (!(uart_getreg(bas, UART_LSR_REG) & UART_LSR_THRE)); +} + +static int +mtk_uart_rxready(struct uart_bas *bas) +{ + if (uart_getreg(bas, UART_LSR_REG) & UART_LSR_DR) + return (1); + return (0); +} + +static int +mtk_uart_getc(struct uart_bas *bas, struct mtx *hwmtx) +{ + int c; + + uart_lock(hwmtx); + + while (!(uart_getreg(bas, UART_LSR_REG) & UART_LSR_DR)) { + uart_unlock(hwmtx); + DELAY(10); + uart_lock(hwmtx); + } + + c = uart_getreg(bas, UART_RX_REG); + + uart_unlock(hwmtx); + + return (c); +} + +/* + * High-level UART interface. + */ +struct uart_mtk_softc { + struct uart_softc base; + uint8_t ier_mask; + uint8_t ier; +}; + +static int mtk_uart_bus_attach(struct uart_softc *); +static int mtk_uart_bus_detach(struct uart_softc *); +static int mtk_uart_bus_flush(struct uart_softc *, int); +static int mtk_uart_bus_getsig(struct uart_softc *); +static int mtk_uart_bus_ioctl(struct uart_softc *, int, intptr_t); +static int mtk_uart_bus_ipend(struct uart_softc *); +static int mtk_uart_bus_param(struct uart_softc *, int, int, int, int); +static int mtk_uart_bus_probe(struct uart_softc *); +static int mtk_uart_bus_receive(struct uart_softc *); +static int mtk_uart_bus_setsig(struct uart_softc *, int); +static int mtk_uart_bus_transmit(struct uart_softc *); +static void mtk_uart_bus_grab(struct uart_softc *); +static void mtk_uart_bus_ungrab(struct uart_softc *); + +static kobj_method_t uart_mtk_methods[] = { + KOBJMETHOD(uart_attach, mtk_uart_bus_attach), + KOBJMETHOD(uart_detach, mtk_uart_bus_detach), + KOBJMETHOD(uart_flush, mtk_uart_bus_flush), + KOBJMETHOD(uart_getsig, mtk_uart_bus_getsig), + KOBJMETHOD(uart_ioctl, mtk_uart_bus_ioctl), + KOBJMETHOD(uart_ipend, mtk_uart_bus_ipend), + KOBJMETHOD(uart_param, mtk_uart_bus_param), + KOBJMETHOD(uart_probe, mtk_uart_bus_probe), + KOBJMETHOD(uart_receive, mtk_uart_bus_receive), + KOBJMETHOD(uart_setsig, mtk_uart_bus_setsig), + KOBJMETHOD(uart_transmit, mtk_uart_bus_transmit), + KOBJMETHOD(uart_grab, mtk_uart_bus_grab), + KOBJMETHOD(uart_ungrab, mtk_uart_bus_ungrab), + { 0, 0 } +}; + +struct uart_class uart_mtk_class = { + "uart_mtk", + uart_mtk_methods, + sizeof(struct uart_mtk_softc), + .uc_ops = &uart_mtk_ops, + .uc_range = 1, /* use hinted range */ + .uc_rclk = 0 +}; + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-uart", (uintptr_t)&uart_mtk_class }, + { "ralink,rt3050-uart", (uintptr_t)&uart_mtk_class }, + { "ralink,rt3352-uart", (uintptr_t)&uart_mtk_class }, + { "ralink,rt3883-uart", (uintptr_t)&uart_mtk_class }, + { "ralink,rt5350-uart", (uintptr_t)&uart_mtk_class }, + { "ralink,mt7620a-uart", (uintptr_t)&uart_mtk_class }, + { NULL, (uintptr_t)NULL }, +}; +UART_FDT_CLASS_AND_DEVICE(compat_data); + + +#define SIGCHG(c, i, s, d) \ + if (c) { \ + i |= (i & s) ? s : s | d; \ + } else { \ + i = (i & s) ? (i & ~s) | d : i; \ + } + +/* + * Disable TX interrupt. uart should be locked + */ +static __inline void +mtk_uart_disable_txintr(struct uart_softc *sc) +{ + struct uart_bas *bas = &sc->sc_bas; + uint8_t cr; + + cr = uart_getreg(bas, UART_IER_REG); + cr &= ~UART_IER_ETBEI; + uart_setreg(bas, UART_IER_REG, cr); + uart_barrier(bas); +} + +/* + * Enable TX interrupt. uart should be locked + */ +static __inline void +mtk_uart_enable_txintr(struct uart_softc *sc) +{ + struct uart_bas *bas = &sc->sc_bas; + uint8_t cr; + + cr = uart_getreg(bas, UART_IER_REG); + cr |= UART_IER_ETBEI; + uart_setreg(bas, UART_IER_REG, cr); + uart_barrier(bas); +} + +static int +mtk_uart_bus_attach(struct uart_softc *sc) +{ + struct uart_bas *bas; + struct uart_devinfo *di; + struct uart_mtk_softc *usc = (struct uart_mtk_softc *)sc; + + bas = &sc->sc_bas; + + if (!bas->rclk) { + bas->rclk = mtk_soc_get_uartclk(); + } + + if (sc->sc_sysdev != NULL) { + di = sc->sc_sysdev; + mtk_uart_init(bas, di->baudrate, di->databits, di->stopbits, + di->parity); + } else { + mtk_uart_init(bas, 57600, 8, 1, 0); + } + + sc->sc_rxfifosz = 16; + sc->sc_txfifosz = 16; + + (void)mtk_uart_bus_getsig(sc); + + /* Enable FIFO */ + uart_setreg(bas, UART_FCR_REG, + uart_getreg(bas, UART_FCR_REG) | + UART_FCR_FIFOEN | UART_FCR_TXTGR_1 | UART_FCR_RXTGR_1); + uart_barrier(bas); + /* Enable interrupts */ + usc->ier_mask = 0xf0; + uart_setreg(bas, UART_IER_REG, + UART_IER_EDSSI | UART_IER_ELSI | UART_IER_ERBFI); + uart_barrier(bas); + + return (0); +} + +static int +mtk_uart_bus_detach(struct uart_softc *sc) +{ + return (0); +} + +static int +mtk_uart_bus_flush(struct uart_softc *sc, int what) +{ + struct uart_bas *bas = &sc->sc_bas; + uint32_t fcr = uart_getreg(bas, UART_FCR_REG); + + if (what & UART_FLUSH_TRANSMITTER) { + uart_setreg(bas, UART_FCR_REG, fcr|UART_FCR_TXRST); + uart_barrier(bas); + } + if (what & UART_FLUSH_RECEIVER) { + uart_setreg(bas, UART_FCR_REG, fcr|UART_FCR_RXRST); + uart_barrier(bas); + } + uart_setreg(bas, UART_FCR_REG, fcr); + uart_barrier(bas); + return (0); +} + +static int +mtk_uart_bus_getsig(struct uart_softc *sc) +{ + uint32_t new, old, sig; + uint8_t bes; + + return(0); + do { + old = sc->sc_hwsig; + sig = old; + uart_lock(sc->sc_hwmtx); + bes = uart_getreg(&sc->sc_bas, UART_MSR_REG); + uart_unlock(sc->sc_hwmtx); + /* XXX: chip can show delta */ + SIGCHG(bes & UART_MSR_CTS, sig, SER_CTS, SER_DCTS); + SIGCHG(bes & UART_MSR_DCD, sig, SER_DCD, SER_DDCD); + SIGCHG(bes & UART_MSR_DSR, sig, SER_DSR, SER_DDSR); + new = sig & ~SER_MASK_DELTA; + } while (!atomic_cmpset_32(&sc->sc_hwsig, old, new)); + + return (sig); +} + +static int +mtk_uart_bus_ioctl(struct uart_softc *sc, int request, intptr_t data) +{ + struct uart_bas *bas; + int baudrate, divisor, error; + + bas = &sc->sc_bas; + error = 0; + uart_lock(sc->sc_hwmtx); + switch (request) { + case UART_IOCTL_BREAK: + /* TODO: Send BREAK */ + break; + case UART_IOCTL_BAUD: + divisor = uart_getreg(bas, UART_CDDL_REG); + baudrate = bas->rclk / (divisor * 16); + *(int*)data = baudrate; + break; + default: + error = EINVAL; + break; + } + uart_unlock(sc->sc_hwmtx); + return (error); +} + +static int +mtk_uart_bus_ipend(struct uart_softc *sc) +{ + struct uart_bas *bas; + int ipend; + uint8_t iir, lsr, msr; + +// breakpoint(); + + bas = &sc->sc_bas; + ipend = 0; + + uart_lock(sc->sc_hwmtx); + iir = uart_getreg(&sc->sc_bas, UART_IIR_REG); + lsr = uart_getreg(&sc->sc_bas, UART_LSR_REG); + uart_setreg(&sc->sc_bas, UART_LSR_REG, lsr); + msr = uart_getreg(&sc->sc_bas, UART_MSR_REG); + uart_setreg(&sc->sc_bas, UART_MSR_REG, msr); + if (iir & UART_IIR_INTP) { + uart_unlock(sc->sc_hwmtx); + return (0); + } + switch ((iir >> 1) & 0x07) { + case UART_IIR_ID_THRE: + ipend |= SER_INT_TXIDLE; + break; + case UART_IIR_ID_DR2: + mtk_uart_bus_flush(sc, UART_FLUSH_RECEIVER); + /* passthrough */ + case UART_IIR_ID_DR: + ipend |= SER_INT_RXREADY; + break; + case UART_IIR_ID_MST: + case UART_IIR_ID_LINESTATUS: + ipend |= SER_INT_SIGCHG; + if (lsr & UART_LSR_BI) + ipend |= SER_INT_BREAK; + if (lsr & UART_LSR_OE) + ipend |= SER_INT_OVERRUN; + break; + default: + /* XXX: maybe return error here */ + break; + } + + uart_unlock(sc->sc_hwmtx); + + return (ipend); +} + +static int +mtk_uart_bus_param(struct uart_softc *sc, int baudrate, int databits, + int stopbits, int parity) +{ + uart_lock(sc->sc_hwmtx); + mtk_uart_init(&sc->sc_bas, baudrate, databits, stopbits, parity); + uart_unlock(sc->sc_hwmtx); + return (0); +} + +static int +mtk_uart_bus_probe(struct uart_softc *sc) +{ + int error; + + error = mtk_uart_probe(&sc->sc_bas); + if (error) + return (error); + + device_set_desc(sc->sc_dev, "MTK UART Controller"); + + return (0); +} + +static int +mtk_uart_bus_receive(struct uart_softc *sc) +{ + struct uart_bas *bas; + int xc; + uint8_t lsr; + + bas = &sc->sc_bas; + uart_lock(sc->sc_hwmtx); + lsr = uart_getreg(bas, UART_LSR_REG); + while ((lsr & UART_LSR_DR)) { + if (uart_rx_full(sc)) { + sc->sc_rxbuf[sc->sc_rxput] = UART_STAT_OVERRUN; + break; + } + xc = 0; + xc = uart_getreg(bas, UART_RX_REG); + if (lsr & UART_LSR_FE) + xc |= UART_STAT_FRAMERR; + if (lsr & UART_LSR_PE) + xc |= UART_STAT_PARERR; + if (lsr & UART_LSR_OE) + xc |= UART_STAT_OVERRUN; + uart_barrier(bas); + uart_rx_put(sc, xc); + lsr = uart_getreg(bas, UART_LSR_REG); + } + + uart_unlock(sc->sc_hwmtx); + return (0); +} + +static int +mtk_uart_bus_setsig(struct uart_softc *sc, int sig) +{ + /* TODO: implement (?) */ + return (sig); +} + +static int +mtk_uart_bus_transmit(struct uart_softc *sc) +{ + struct uart_bas *bas = &sc->sc_bas; + int i; + + if (!uart_output) return (0); + + bas = &sc->sc_bas; + uart_lock(sc->sc_hwmtx); + while ((uart_getreg(bas, UART_LSR_REG) & UART_LSR_THRE) == 0); + mtk_uart_enable_txintr(sc); + for (i = 0; i < sc->sc_txdatasz; i++) { + uart_setreg(bas, UART_TX_REG, sc->sc_txbuf[i]); + uart_barrier(bas); + } + sc->sc_txbusy = 1; + uart_unlock(sc->sc_hwmtx); + return (0); +} + +void +mtk_uart_bus_grab(struct uart_softc *sc) +{ + struct uart_bas *bas = &sc->sc_bas; + struct uart_mtk_softc *usc = (struct uart_mtk_softc *)sc; + + uart_lock(sc->sc_hwmtx); + usc->ier = uart_getreg(bas, UART_IER_REG); + uart_setreg(bas, UART_IER_REG, usc->ier & usc->ier_mask); + uart_barrier(bas); + uart_unlock(sc->sc_hwmtx); +} + +void +mtk_uart_bus_ungrab(struct uart_softc *sc) +{ + struct uart_mtk_softc *usc = (struct uart_mtk_softc *)sc; + struct uart_bas *bas = &sc->sc_bas; + + uart_lock(sc->sc_hwmtx); + uart_setreg(bas, UART_IER_REG, usc->ier); + uart_barrier(bas); + uart_unlock(sc->sc_hwmtx); +} diff --git a/sys/mips/mediatek/uart_dev_mtk.h b/sys/mips/mediatek/uart_dev_mtk.h new file mode 100644 index 0000000..44fcdd8 --- /dev/null +++ b/sys/mips/mediatek/uart_dev_mtk.h @@ -0,0 +1,126 @@ +/*- + * Copyright (c) 2010 Aleksandr Rybalko. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. The names of the authors may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef _MTKUART_H +#define _MTKUART_H + +#undef uart_getreg +#undef uart_setreg +#define uart_getreg(bas, reg) \ + bus_space_read_4((bas)->bst, (bas)->bsh, reg) +#define uart_setreg(bas, reg, value) \ + bus_space_write_4((bas)->bst, (bas)->bsh, reg, value) + +/* UART registers */ +#define UART_RX_REG 0x00 +#define UART_TX_REG 0x04 + +#define UART_IER_REG 0x08 +#define UART_IER_EDSSI (1<<3) /* Only full UART */ +#define UART_IER_ELSI (1<<2) +#define UART_IER_ETBEI (1<<1) +#define UART_IER_ERBFI (1<<0) + +#define UART_IIR_REG 0x0c +#define UART_IIR_RXFIFO (1<<7) +#define UART_IIR_TXFIFO (1<<6) +#define UART_IIR_ID_MST 0 +#define UART_IIR_ID_THRE 1 +#define UART_IIR_ID_DR 2 +#define UART_IIR_ID_LINESTATUS 3 +#define UART_IIR_ID_DR2 6 +#define UART_IIR_ID_SHIFT 1 +#define UART_IIR_ID_MASK 0x0000000e +#define UART_IIR_INTP (1<<0) + +#define UART_FCR_REG 0x10 +#define UART_FCR_RXTGR_1 (0<<6) +#define UART_FCR_RXTGR_4 (1<<6) +#define UART_FCR_RXTGR_8 (2<<6) +#define UART_FCR_RXTGR_12 (3<<6) +#define UART_FCR_TXTGR_1 (0<<4) +#define UART_FCR_TXTGR_4 (1<<4) +#define UART_FCR_TXTGR_8 (2<<4) +#define UART_FCR_TXTGR_12 (3<<4) +#define UART_FCR_DMA (1<<3) +#define UART_FCR_TXRST (1<<2) +#define UART_FCR_RXRST (1<<1) +#define UART_FCR_FIFOEN (1<<0) + +#define UART_LCR_REG 0x14 +#define UART_LCR_DLAB (1<<7) +#define UART_LCR_BRK (1<<6) +#define UART_LCR_FPAR (1<<5) +#define UART_LCR_EVEN (1<<4) +#define UART_LCR_PEN (1<<3) +#define UART_LCR_STB_15 (1<<2) +#define UART_LCR_5B 0 +#define UART_LCR_6B 1 +#define UART_LCR_7B 2 +#define UART_LCR_8B 3 + +#define UART_MCR_REG 0x18 +#define UART_MCR_LOOP (1<<4) +#define UART_MCR_OUT2_L (1<<3) /* Only full UART */ +#define UART_MCR_OUT1_L (1<<2) /* Only full UART */ +#define UART_MCR_RTS_L (1<<1) /* Only full UART */ +#define UART_MCR_DTR_L (1<<0) /* Only full UART */ + +#define UART_LSR_REG 0x1c +#define UART_LSR_ERINF (1<<7) +#define UART_LSR_TEMT (1<<6) +#define UART_LSR_THRE (1<<5) +#define UART_LSR_BI (1<<4) +#define UART_LSR_FE (1<<3) +#define UART_LSR_PE (1<<2) +#define UART_LSR_OE (1<<1) +#define UART_LSR_DR (1<<0) + +#define UART_MSR_REG 0x20 /* Only full UART */ +#define UART_MSR_DCD (1<<7) /* Only full UART */ +#define UART_MSR_RI (1<<6) /* Only full UART */ +#define UART_MSR_DSR (1<<5) /* Only full UART */ +#define UART_MSR_CTS (1<<4) /* Only full UART */ +#define UART_MSR_DDCD (1<<3) /* Only full UART */ +#define UART_MSR_TERI (1<<2) /* Only full UART */ +#define UART_MSR_DDSR (1<<1) /* Only full UART */ +#define UART_MSR_DCTS (1<<0) /* Only full UART */ + +#define UART_CDDL_REG 0x28 +#define UART_CDDLL_REG 0x2c +#define UART_CDDLH_REG 0x30 + +#define UART_IFCTL_REG 0x34 +#define UART_IFCTL_IFCTL (1<<0) + +int uart_cnattach(void); +#endif /* _MTKUART_H */ diff --git a/sys/mips/mediatek/uart_dev_mtk_ns8250.c b/sys/mips/mediatek/uart_dev_mtk_ns8250.c new file mode 100644 index 0000000..3c259ff --- /dev/null +++ b/sys/mips/mediatek/uart_dev_mtk_ns8250.c @@ -0,0 +1,113 @@ +/*- + * Copyright (c) 2013 Ian Lepore + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "uart_if.h" + +/* + * High-level UART interface. + */ +static struct uart_class uart_mtk_ns8250_class; +static int mtk_ns8250_bus_probe(struct uart_softc *); + +static kobj_method_t mtk_ns8250_methods[] = { + KOBJMETHOD(uart_probe, mtk_ns8250_bus_probe), + + KOBJMETHOD(uart_attach, ns8250_bus_attach), + KOBJMETHOD(uart_detach, ns8250_bus_detach), + KOBJMETHOD(uart_flush, ns8250_bus_flush), + KOBJMETHOD(uart_getsig, ns8250_bus_getsig), + KOBJMETHOD(uart_ioctl, ns8250_bus_ioctl), + KOBJMETHOD(uart_ipend, ns8250_bus_ipend), + KOBJMETHOD(uart_param, ns8250_bus_param), + KOBJMETHOD(uart_receive, ns8250_bus_receive), + KOBJMETHOD(uart_setsig, ns8250_bus_setsig), + KOBJMETHOD(uart_transmit, ns8250_bus_transmit), + KOBJMETHOD_END +}; + +static struct uart_class uart_mtk_ns8250_class = { + "mtk8250", + mtk_ns8250_methods, + sizeof(struct ns8250_softc), + .uc_ops = &uart_ns8250_ops, + .uc_range = 1, /* use hinted range */ + .uc_rclk = 0, + .uc_rshift = 2 +}; + +static struct ofw_compat_data compat_data[] = { + { "mtk,ns16550a", (uintptr_t)&uart_mtk_ns8250_class }, + { "ns16550a", (uintptr_t)&uart_mtk_ns8250_class }, + { NULL, (uintptr_t)NULL }, +}; +UART_FDT_CLASS_AND_DEVICE(compat_data); + +static int +mtk_ns8250_bus_probe(struct uart_softc *sc) +{ + int status; + + if (!ofw_bus_status_okay(sc->sc_dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(sc->sc_dev, compat_data)->ocd_data == + (uintptr_t)NULL) + return (ENXIO); + + sc->sc_bas.rclk = mtk_soc_get_uartclk(); + + status = ns8250_bus_probe(sc); + if (status == 0) + device_set_desc(sc->sc_dev, "MTK UART Controller (ns16550a)"); + + return (status); +} -- cgit v1.1 From dfaa9c5ff9f09ef643be69a64882cd027c407059 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 11:20:03 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #5 USB support This revision adds USB (EHCI/OHCI/OTG, depending on SoC type) support for various Ralink/Mediatek SoCs. Currently USB is not supported on MT7621, this will be a future addition. A USB PHY driver is also included, so that we can properly initialize the USB PHY (e.g., clocks, resets, registers where needed), before attempting to initialize EHCI/OHCI/OTG functionality. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5841 --- sys/mips/mediatek/mtk_dotg.c | 220 ++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_ehci.c | 223 ++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_ohci.c | 223 ++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_usb_phy.c | 314 ++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_usb_phy.h | 66 +++++++++ 5 files changed, 1046 insertions(+) create mode 100644 sys/mips/mediatek/mtk_dotg.c create mode 100644 sys/mips/mediatek/mtk_ehci.c create mode 100644 sys/mips/mediatek/mtk_ohci.c create mode 100644 sys/mips/mediatek/mtk_usb_phy.c create mode 100644 sys/mips/mediatek/mtk_usb_phy.h diff --git a/sys/mips/mediatek/mtk_dotg.c b/sys/mips/mediatek/mtk_dotg.c new file mode 100644 index 0000000..d7421ad --- /dev/null +++ b/sys/mips/mediatek/mtk_dotg.c @@ -0,0 +1,220 @@ +#include +__FBSDID("$FreeBSD$"); + +/*- + * Copyright (c) 2015-2016 Stanislav Galabov. All rights reserved. + * Copyright (c) 2010,2011 Aleksandr Rybalko. All rights reserved. + * Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define MEM_RID 0 + +static device_probe_t dotg_fdt_probe; +static device_attach_t dotg_fdt_attach; +static device_detach_t dotg_fdt_detach; + +static int +dotg_fdt_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (!ofw_bus_is_compatible(dev, "ralink,rt3050-otg")) + return (ENXIO); + + device_set_desc(dev, "MTK DWC-OTG USB Controller"); + return (0); +} + +static int +dotg_fdt_attach(device_t dev) +{ + struct dwc_otg_softc *sc = device_get_softc(dev); + int err, rid; + + /* setup controller interface softc */ + + /* initialise some bus fields */ + sc->sc_mode = DWC_MODE_HOST; + sc->sc_bus.parent = dev; + sc->sc_bus.devices = sc->sc_devices; + sc->sc_bus.devices_max = DWC_OTG_MAX_DEVICES; + sc->sc_bus.dma_bits = 32; + + /* get all DMA memory */ + if (usb_bus_mem_alloc_all(&sc->sc_bus, + USB_GET_DMA_TAG(dev), NULL)) { + printf("No mem\n"); + return (ENOMEM); + } + rid = 0; + sc->sc_io_res = + bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); + if (!(sc->sc_io_res)) { + printf("Can`t alloc MEM\n"); + goto error; + } + sc->sc_io_tag = rman_get_bustag(sc->sc_io_res); + sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res); + sc->sc_io_size = rman_get_size(sc->sc_io_res); + + rid = 0; + sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, + &rid, RF_ACTIVE); + if (!(sc->sc_irq_res)) { + printf("Can`t alloc IRQ\n"); + goto error; + } + + sc->sc_bus.bdev = device_add_child(dev, "usbus", -1); + if (!(sc->sc_bus.bdev)) { + printf("Can`t add usbus\n"); + goto error; + } + device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus); + + err = bus_setup_intr(dev, sc->sc_irq_res, + INTR_TYPE_TTY | INTR_MPSAFE, dwc_otg_filter_interrupt, + dwc_otg_interrupt, sc, &sc->sc_intr_hdl); + if (err) { + sc->sc_intr_hdl = NULL; + printf("Can`t set IRQ handle\n"); + goto error; + } + + err = dwc_otg_init(sc); + if (err) printf("dotg_init fail\n"); + if (!err) { + err = device_probe_and_attach(sc->sc_bus.bdev); + if (err) printf("device_probe_and_attach fail %d\n", err); + } + if (err) { + goto error; + } + return (0); + +error: + dotg_fdt_detach(dev); + return (ENXIO); +} + +static int +dotg_fdt_detach(device_t dev) +{ + struct dwc_otg_softc *sc = device_get_softc(dev); + device_t bdev; + int err; + + if (sc->sc_bus.bdev) { + bdev = sc->sc_bus.bdev; + device_detach(bdev); + device_delete_child(dev, bdev); + } + /* during module unload there are lots of children leftover */ + device_delete_children(dev); + + if (sc->sc_irq_res && sc->sc_intr_hdl) { + /* + * only call dotg_fdt_uninit() after dotg_fdt_init() + */ + dwc_otg_uninit(sc); + + err = bus_teardown_intr(dev, sc->sc_irq_res, + sc->sc_intr_hdl); + sc->sc_intr_hdl = NULL; + } + if (sc->sc_irq_res) { + bus_release_resource(dev, SYS_RES_IRQ, 0, + sc->sc_irq_res); + sc->sc_irq_res = NULL; + } + if (sc->sc_io_res) { + bus_release_resource(dev, SYS_RES_MEMORY, 0, + sc->sc_io_res); + sc->sc_io_res = NULL; + } + usb_bus_mem_free_all(&sc->sc_bus, NULL); + + return (0); +} + +static device_method_t dotg_fdt_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, dotg_fdt_probe), + DEVMETHOD(device_attach, dotg_fdt_attach), + DEVMETHOD(device_detach, dotg_fdt_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t dotg_fdt_driver = { + .name = "dwcotg", + .methods = dotg_fdt_methods, + .size = sizeof(struct dwc_otg_softc), +}; + +static devclass_t dotg_fdt_devclass; + +DRIVER_MODULE(dotg, simplebus, dotg_fdt_driver, dotg_fdt_devclass, 0, 0); diff --git a/sys/mips/mediatek/mtk_ehci.c b/sys/mips/mediatek/mtk_ehci.c new file mode 100644 index 0000000..109a32a --- /dev/null +++ b/sys/mips/mediatek/mtk_ehci.c @@ -0,0 +1,223 @@ +#include +__FBSDID("$FreeBSD$"); + +/*- + * Copyright (c) 2015 Stanislav Galabov. All rights reserved. + * Copyright (c) 2010,2011 Aleksandr Rybalko. All rights reserved. + * Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define EHCI_HC_DEVSTR "MTK USB 2.0 Controller" + +static device_probe_t ehci_fdt_probe; +static device_attach_t ehci_fdt_attach; +static device_detach_t ehci_fdt_detach; + +static int +ehci_fdt_probe(device_t self) +{ + + if (!ofw_bus_status_okay(self)) + return (ENXIO); + + if (!ofw_bus_is_compatible(self, "ralink,rt3xxx-ehci")) + return (ENXIO); + + device_set_desc(self, EHCI_HC_DEVSTR); + + return (BUS_PROBE_DEFAULT); +} + +static int +ehci_fdt_attach(device_t self) +{ + ehci_softc_t *sc = device_get_softc(self); + int err; + int rid; + + /* initialise some bus fields */ + sc->sc_bus.parent = self; + sc->sc_bus.devices = sc->sc_devices; + sc->sc_bus.devices_max = EHCI_MAX_DEVICES; + sc->sc_bus.dma_bits = 32; + + /* get all DMA memory */ + if (usb_bus_mem_alloc_all(&sc->sc_bus, + USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) { + printf("No mem\n"); + return (ENOMEM); + } + + rid = 0; + sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->sc_io_res) { + device_printf(self, "Could not map memory\n"); + goto error; + } + sc->sc_io_tag = rman_get_bustag(sc->sc_io_res); + sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res); + sc->sc_io_size = rman_get_size(sc->sc_io_res); + + rid = 0; + sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid, + RF_SHAREABLE | RF_ACTIVE); + if (sc->sc_irq_res == NULL) { + device_printf(self, "Could not allocate irq\n"); + goto error; + } + + sc->sc_bus.bdev = device_add_child(self, "usbus", -1); + if (!(sc->sc_bus.bdev)) { + device_printf(self, "Could not add USB device\n"); + goto error; + } + device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus); + device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR); + + sprintf(sc->sc_vendor, "MediaTek"); + + err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl); + if (err) { + device_printf(self, "Could not setup irq, %d\n", err); + sc->sc_intr_hdl = NULL; + goto error; + } + + err = ehci_init(sc); + if (!err) { + err = device_probe_and_attach(sc->sc_bus.bdev); + } + if (err) { + device_printf(self, "USB init failed err=%d\n", err); + goto error; + } + return (0); + +error: + ehci_fdt_detach(self); + return (ENXIO); +} + +static int +ehci_fdt_detach(device_t self) +{ + ehci_softc_t *sc = device_get_softc(self); + device_t bdev; + int err; + + if (sc->sc_bus.bdev) { + bdev = sc->sc_bus.bdev; + device_detach(bdev); + device_delete_child(self, bdev); + } + /* during module unload there are lots of children leftover */ + device_delete_children(self); + + if (sc->sc_irq_res && sc->sc_intr_hdl) { + /* + * only call ehci_detach() after ehci_init() + */ + ehci_detach(sc); + + err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl); + if (err) + device_printf(self, "Could not tear down irq, %d\n", + err); + sc->sc_intr_hdl = NULL; + } + if (sc->sc_irq_res) { + bus_release_resource(self, SYS_RES_IRQ, 0, + sc->sc_irq_res); + sc->sc_irq_res = NULL; + } + if (sc->sc_io_res) { + bus_release_resource(self, SYS_RES_MEMORY, 0, + sc->sc_io_res); + sc->sc_io_res = NULL; + } + usb_bus_mem_free_all(&sc->sc_bus, &ehci_iterate_hw_softc); + + return (0); +} + +static device_method_t ehci_fdt_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, ehci_fdt_probe), + DEVMETHOD(device_attach, ehci_fdt_attach), + DEVMETHOD(device_detach, ehci_fdt_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t ehci_fdt_driver = { + .name = "ehci", + .methods = ehci_fdt_methods, + .size = sizeof(ehci_softc_t), +}; + +static devclass_t ehci_fdt_devclass; + +DRIVER_MODULE(ehci, simplebus, ehci_fdt_driver, ehci_fdt_devclass, 0, 0); diff --git a/sys/mips/mediatek/mtk_ohci.c b/sys/mips/mediatek/mtk_ohci.c new file mode 100644 index 0000000..91c98ce --- /dev/null +++ b/sys/mips/mediatek/mtk_ohci.c @@ -0,0 +1,223 @@ +#include +__FBSDID("$FreeBSD$"); + +/*- + * Copyright (c) 2015 Stanislav Galabov. All rights reserved. + * Copyright (c) 2010,2011 Aleksandr Rybalko. All rights reserved. + * Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define OHCI_HC_DEVSTR "MTK USB Controller" + +static device_probe_t ohci_fdt_probe; +static device_attach_t ohci_fdt_attach; +static device_detach_t ohci_fdt_detach; + +static int +ohci_fdt_probe(device_t self) +{ + + if (!ofw_bus_status_okay(self)) + return (ENXIO); + + if (!ofw_bus_is_compatible(self, "ralink,rt3xxx-ohci")) + return (ENXIO); + + device_set_desc(self, OHCI_HC_DEVSTR); + + return (BUS_PROBE_DEFAULT); +} + +static int +ohci_fdt_attach(device_t self) +{ + ohci_softc_t *sc = device_get_softc(self); + int err; + int rid; + + /* initialise some bus fields */ + sc->sc_bus.parent = self; + sc->sc_bus.devices = sc->sc_devices; + sc->sc_bus.devices_max = OHCI_MAX_DEVICES; + sc->sc_bus.dma_bits = 32; + + /* get all DMA memory */ + if (usb_bus_mem_alloc_all(&sc->sc_bus, + USB_GET_DMA_TAG(self), &ohci_iterate_hw_softc)) { + printf("No mem\n"); + return (ENOMEM); + } + + rid = 0; + sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->sc_io_res) { + device_printf(self, "Could not map memory\n"); + goto error; + } + sc->sc_io_tag = rman_get_bustag(sc->sc_io_res); + sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res); + sc->sc_io_size = rman_get_size(sc->sc_io_res); + + rid = 0; + sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid, + RF_SHAREABLE | RF_ACTIVE); + if (sc->sc_irq_res == NULL) { + device_printf(self, "Could not allocate irq\n"); + goto error; + } + + sc->sc_bus.bdev = device_add_child(self, "usbus", -1); + if (!(sc->sc_bus.bdev)) { + device_printf(self, "Could not add USB device\n"); + goto error; + } + device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus); + device_set_desc(sc->sc_bus.bdev, OHCI_HC_DEVSTR); + + sprintf(sc->sc_vendor, "MediaTek"); + + err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)ohci_interrupt, sc, &sc->sc_intr_hdl); + if (err) { + device_printf(self, "Could not setup irq, %d\n", err); + sc->sc_intr_hdl = NULL; + goto error; + } + + err = ohci_init(sc); + if (!err) { + err = device_probe_and_attach(sc->sc_bus.bdev); + } + if (err) { + device_printf(self, "USB init failed err=%d\n", err); + goto error; + } + return (0); + +error: + ohci_fdt_detach(self); + return (ENXIO); +} + +static int +ohci_fdt_detach(device_t self) +{ + ohci_softc_t *sc = device_get_softc(self); + device_t bdev; + int err; + + if (sc->sc_bus.bdev) { + bdev = sc->sc_bus.bdev; + device_detach(bdev); + device_delete_child(self, bdev); + } + /* during module unload there are lots of children leftover */ + device_delete_children(self); + + if (sc->sc_irq_res && sc->sc_intr_hdl) { + /* + * only call ohci_detach() after ohci_init() + */ + ohci_detach(sc); + + err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl); + if (err) + device_printf(self, "Could not tear down irq, %d\n", + err); + sc->sc_intr_hdl = NULL; + } + if (sc->sc_irq_res) { + bus_release_resource(self, SYS_RES_IRQ, 0, + sc->sc_irq_res); + sc->sc_irq_res = NULL; + } + if (sc->sc_io_res) { + bus_release_resource(self, SYS_RES_MEMORY, 0, + sc->sc_io_res); + sc->sc_io_res = NULL; + } + usb_bus_mem_free_all(&sc->sc_bus, &ohci_iterate_hw_softc); + + return (0); +} + +static device_method_t ohci_fdt_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, ohci_fdt_probe), + DEVMETHOD(device_attach, ohci_fdt_attach), + DEVMETHOD(device_detach, ohci_fdt_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t ohci_fdt_driver = { + .name = "ohci", + .methods = ohci_fdt_methods, + .size = sizeof(ohci_softc_t), +}; + +static devclass_t ohci_fdt_devclass; + +DRIVER_MODULE(ohci, simplebus, ohci_fdt_driver, ohci_fdt_devclass, 0, 0); diff --git a/sys/mips/mediatek/mtk_usb_phy.c b/sys/mips/mediatek/mtk_usb_phy.c new file mode 100644 index 0000000..da2acf0 --- /dev/null +++ b/sys/mips/mediatek/mtk_usb_phy.c @@ -0,0 +1,314 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define RESET_ASSERT_DELAY 1000 +#define RESET_DEASSERT_DELAY 10000 + +struct mtk_usb_phy_softc { + device_t dev; + struct resource * res; + uint32_t fm_base; + uint32_t u2_base; + uint32_t sr_coef; + uint32_t socid; +}; + +#define USB_PHY_READ(_sc, _off) bus_read_4((_sc)->res, (_off)) +#define USB_PHY_WRITE(_sc, _off, _val) bus_write_4((_sc)->res, (_off), (_val)) +#define USB_PHY_CLR_SET(_sc, _off, _clr, _set) \ + USB_PHY_WRITE(_sc, _off, ((USB_PHY_READ(_sc, _off) & ~(_clr)) | (_set))) + +#define USB_PHY_READ_U2(_sc, _off) \ + USB_PHY_READ((_sc), ((_sc)->u2_base + (_off))) +#define USB_PHY_WRITE_U2(_sc, _off, _val) \ + USB_PHY_WRITE((_sc), ((_sc)->u2_base + (_off)), (_val)) +#define USB_PHY_CLR_SET_U2(_sc, _off, _clr, _set) \ + USB_PHY_WRITE_U2((_sc), (_off), ((USB_PHY_READ_U2((_sc), (_off)) & \ + ~(_clr)) | (_set))) +#define USB_PHY_BARRIER(_sc) bus_barrier((_sc)->res, 0, 0, \ + BUS_SPACE_BARRIER_WRITE | BUS_SPACE_BARRIER_READ) + +#define USB_PHY_READ_FM(_sc, _off) \ + USB_PHY_READ((_sc), ((_sc)->fm_base + (_off))) +#define USB_PHY_WRITE_FM(_sc, _off) \ + USB_PHY_WRITE((_sc), ((_sc)->fm_base + (_off)), (_val)) +#define USB_PHY_CLR_SET_FM(_sc, _off, _clr, _set) \ + USB_PHY_WRITE_U2((_sc), (_off), ((USB_PHY_READ_U2((_sc), (_off)) & \ + ~(_clr)) | (_set))) + +static void mtk_usb_phy_mt7621_init(device_t); +static void mtk_usb_phy_mt7628_init(device_t); + +static struct ofw_compat_data compat_data[] = { + { "ralink,mt7620a-usbphy", MTK_SOC_MT7620A }, + { "ralink,mt7628an-usbphy", MTK_SOC_MT7628 }, + { "ralink,rt3xxx-usbphy", MTK_SOC_RT3352 }, + { NULL, MTK_SOC_UNKNOWN } +}; + +static int +mtk_usb_phy_probe(device_t dev) +{ + struct mtk_usb_phy_softc *sc = device_get_softc(dev); + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + if ((sc->socid = + ofw_bus_search_compatible(dev, compat_data)->ocd_data) == + MTK_SOC_UNKNOWN) + return (ENXIO); + + device_set_desc(dev, "MTK USB PHY"); + + return (0); +} + +static int +mtk_usb_phy_attach(device_t dev) +{ + struct mtk_usb_phy_softc * sc = device_get_softc(dev); + phandle_t node; + uint32_t val; + int rid; + + sc->dev = dev; + + /* Get our FDT node and SoC id */ + node = ofw_bus_get_node(dev); + + /* Now let's see about setting USB to host or device mode */ + /* XXX: is it the same for all SoCs? */ + val = mtk_sysctl_get(SYSCTL_SYSCFG1); + if (OF_hasprop(node, "mtk,usb-device")) + val &= ~SYSCFG1_USB_HOST_MODE; + else + val |= SYSCFG1_USB_HOST_MODE; + mtk_sysctl_set(SYSCTL_SYSCFG1, val); + + /* If we have clocks defined - enable them */ + if (OF_hasprop(node, "clocks")) + fdt_clock_enable_all(dev); + + /* If we have resets defined - perform a reset sequence */ + if (OF_hasprop(node, "resets")) { + fdt_reset_assert_all(dev); + DELAY(RESET_ASSERT_DELAY); + fdt_reset_deassert_all(dev); + DELAY(RESET_DEASSERT_DELAY); + } + + /* Careful, some devices actually require resources */ + if (OF_hasprop(node, "reg")) { + rid = 0; + sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (sc->res == NULL) { + device_printf(dev, "could not map memory\n"); + return (ENXIO); + } + } else { + sc->res = NULL; + } + + /* Some SoCs require specific USB PHY init... handle these */ + switch (sc->socid) { + case MTK_SOC_MT7628: /* Fallthrough */ + case MTK_SOC_MT7688: + if (sc->res == NULL) + return (ENXIO); + sc->fm_base = MT7628_FM_FEG_BASE; + sc->u2_base = MT7628_U2_BASE; + sc->sr_coef = MT7628_SR_COEF; + mtk_usb_phy_mt7628_init(dev); + break; + case MTK_SOC_MT7621: + if (sc->res == NULL) + return (ENXIO); + sc->fm_base = MT7621_FM_FEG_BASE; + sc->u2_base = MT7621_U2_BASE; + sc->sr_coef = MT7621_SR_COEF; + mtk_usb_phy_mt7621_init(dev); + break; + } + + /* We no longer need the resources, release them */ + if (sc->res != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); + + return (0); +} + +static int +mtk_usb_phy_detach(device_t dev) +{ + struct mtk_usb_phy_softc *sc = device_get_softc(dev); + phandle_t node; + + /* Get our FDT node */ + node = ofw_bus_get_node(dev); + + /* If we have resets defined - assert them */ + if (OF_hasprop(node, "resets")) + fdt_reset_assert_all(dev); + + /* If we have clocks defined - disable them */ + if (OF_hasprop(node, "clocks")) + fdt_clock_disable_all(dev); + + /* Finally, release resources, if any were allocated */ + if (sc->res != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->res); + + return (0); +} + +static void +mtk_usb_phy_slew_rate_calibration(struct mtk_usb_phy_softc *sc) +{ + uint32_t val; + int i; + + USB_PHY_CLR_SET_U2(sc, U2_PHY_ACR0, 0, SRCAL_EN); + USB_PHY_BARRIER(sc); + DELAY(1000); + + USB_PHY_CLR_SET_FM(sc, U2_PHY_FMMONR1, 0, FRCK_EN); + USB_PHY_BARRIER(sc); + USB_PHY_CLR_SET_FM(sc, U2_PHY_FMCR0, CYCLECNT, 0x400); + USB_PHY_BARRIER(sc); + USB_PHY_CLR_SET_FM(sc, U2_PHY_FMCR0, 0, FDET_EN); + USB_PHY_BARRIER(sc); + + for (i = 0; i < 1000; i++) { + if ((val = USB_PHY_READ_FM(sc, U2_PHY_FMMONR0)) != 0) { + device_printf(sc->dev, "DONE with FDET\n"); + break; + } + DELAY(10000); + } + device_printf(sc->dev, "After FDET\n"); + + USB_PHY_CLR_SET_FM(sc, U2_PHY_FMCR0, FDET_EN, 0); + USB_PHY_BARRIER(sc); + USB_PHY_CLR_SET_FM(sc, U2_PHY_FMMONR1, FRCK_EN, 0); + USB_PHY_BARRIER(sc); + USB_PHY_CLR_SET_U2(sc, U2_PHY_ACR0, SRCAL_EN, 0); + USB_PHY_BARRIER(sc); + DELAY(1000); + + if (val == 0) { + USB_PHY_CLR_SET_U2(sc, U2_PHY_ACR0, SRCTRL, 0x4 << SRCTRL_OFF); + USB_PHY_BARRIER(sc); + } else { + val = ((((1024 * 25 * sc->sr_coef) / val) + 500) / 1000) & + SRCTRL_MSK; + USB_PHY_CLR_SET_U2(sc, U2_PHY_ACR0, SRCTRL, val << SRCTRL_OFF); + USB_PHY_BARRIER(sc); + } +} + +static void +mtk_usb_phy_mt7621_init(device_t dev) +{ + struct mtk_usb_phy_softc *sc = device_get_softc(dev); + + /* Slew rate calibration only, but for 2 ports */ + mtk_usb_phy_slew_rate_calibration(sc); + + sc->u2_base = MT7621_U2_BASE_P1; + mtk_usb_phy_slew_rate_calibration(sc); +} + +static void +mtk_usb_phy_mt7628_init(device_t dev) +{ + struct mtk_usb_phy_softc *sc = device_get_softc(dev); + + /* XXX: possibly add barriers between the next writes? */ + USB_PHY_WRITE_U2(sc, U2_PHY_DCR0, 0x00ffff02); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_DCR0, 0x00555502); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_DCR0, 0x00aaaa02); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_DCR0, 0x00000402); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_AC0, 0x0048086a); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_AC1, 0x4400001c); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_ACR3, 0xc0200000); + USB_PHY_BARRIER(sc); + USB_PHY_WRITE_U2(sc, U2_PHY_DTM0, 0x02000000); + USB_PHY_BARRIER(sc); + + /* Slew rate calibration */ + //mtk_usb_phy_slew_rate_calibration(sc); +} + +static device_method_t mtk_usb_phy_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_usb_phy_probe), + DEVMETHOD(device_attach, mtk_usb_phy_attach), + DEVMETHOD(device_detach, mtk_usb_phy_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t mtk_usb_phy_driver = { + .name = "usbphy", + .methods = mtk_usb_phy_methods, + .size = sizeof(struct mtk_usb_phy_softc), +}; + +static devclass_t mtk_usb_phy_devclass; + +DRIVER_MODULE(usbphy, simplebus, mtk_usb_phy_driver, mtk_usb_phy_devclass, 0, + 0); diff --git a/sys/mips/mediatek/mtk_usb_phy.h b/sys/mips/mediatek/mtk_usb_phy.h new file mode 100644 index 0000000..24fb661 --- /dev/null +++ b/sys/mips/mediatek/mtk_usb_phy.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#ifndef _MTK_USB_PHY_H_ +#define _MTK_USB_PHY_H_ + +#define MT7621_FM_FEG_BASE 0x0100 +#define MT7621_U2_BASE 0x0800 +#define MT7621_U2_BASE_P1 0x1000 +#define MT7621_SR_COEF 28 + +#define MT7628_FM_FEG_BASE 0x0f00 +#define MT7628_U2_BASE 0x0800 +#define MT7628_SR_COEF 32 + +#define U2_PHY_AC0 0x00 +#define U2_PHY_AC1 0x04 +#define U2_PHY_AC2 0x08 +#define U2_PHY_ACR0 0x10 +#define SRCAL_EN (1<<23) +#define SRCTRL_MSK 0x7 +#define SRCTRL_OFF 16 +#define SRCTRL (SRCTRL_MSK< Date: Thu, 7 Apr 2016 11:21:42 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #6 SPI drivers for the various Ralink/Mediatek SoCs. There are 2 versions of the SPI controller (so far) present in the supported SoCs, hence v1 and v2 drivers. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5842 --- sys/mips/mediatek/mtk_spi_v1.c | 351 ++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_spi_v1.h | 71 ++++++++ sys/mips/mediatek/mtk_spi_v2.c | 357 +++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_spi_v2.h | 55 +++++++ 4 files changed, 834 insertions(+) create mode 100644 sys/mips/mediatek/mtk_spi_v1.c create mode 100644 sys/mips/mediatek/mtk_spi_v1.h create mode 100644 sys/mips/mediatek/mtk_spi_v2.c create mode 100644 sys/mips/mediatek/mtk_spi_v2.h diff --git a/sys/mips/mediatek/mtk_spi_v1.c b/sys/mips/mediatek/mtk_spi_v1.c new file mode 100644 index 0000000..1835b8e --- /dev/null +++ b/sys/mips/mediatek/mtk_spi_v1.c @@ -0,0 +1,351 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * Copyright (c) 2011, Aleksandr Rybalko + * Copyright (c) 2013, Alexander A. Mityaev + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +//#include + +#include +#include +#include "spibus_if.h" + +#include "opt_platform.h" + +#include +#include +#include + +#include +#include + +#undef MTK_SPI_DEBUG +#ifdef MTK_SPI_DEBUG +#define dprintf printf +#else +#define dprintf(x, arg...) +#endif + +/* + * register space access macros + */ +#define SPI_WRITE(sc, reg, val) do { \ + bus_write_4(sc->sc_mem_res, (reg), (val)); \ + } while (0) + +#define SPI_READ(sc, reg) bus_read_4(sc->sc_mem_res, (reg)) + +#define SPI_SET_BITS(sc, reg, bits) \ + SPI_WRITE(sc, reg, SPI_READ(sc, (reg)) | (bits)) + +#define SPI_CLEAR_BITS(sc, reg, bits) \ + SPI_WRITE(sc, reg, SPI_READ(sc, (reg)) & ~(bits)) + +struct mtk_spi_softc { + device_t sc_dev; + struct resource *sc_mem_res; +}; + +static int mtk_spi_probe(device_t); +static int mtk_spi_attach(device_t); +static int mtk_spi_detach(device_t); +static int mtk_spi_wait(struct mtk_spi_softc *); +static void mtk_spi_chip_activate(struct mtk_spi_softc *); +static void mtk_spi_chip_deactivate(struct mtk_spi_softc *); +static uint8_t mtk_spi_txrx(struct mtk_spi_softc *, uint8_t *, int); +static int mtk_spi_transfer(device_t, device_t, struct spi_command *); +static phandle_t mtk_spi_get_node(device_t, device_t); + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-spi", 1 }, + { "ralink,rt3050-spi", 1 }, + { "ralink,rt3352-spi", 1 }, + { "ralink,rt3883-spi", 1 }, + { "ralink,rt5350-spi", 1 }, + { "ralink,mt7620a-spi", 1 }, + { NULL, 0 } +}; + +static int +mtk_spi_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return(ENXIO); + + device_set_desc(dev, "MTK SPI Controller (v1)"); + + return (0); +} + +static int +mtk_spi_attach(device_t dev) +{ + struct mtk_spi_softc *sc = device_get_softc(dev); + int rid; + + sc->sc_dev = dev; + rid = 0; + sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->sc_mem_res) { + device_printf(dev, "Could not map memory\n"); + return (ENXIO); + } + + if (mtk_spi_wait(sc)) { + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); + return (EBUSY); + } + + SPI_WRITE(sc, MTK_SPICFG, MSBFIRST | SPICLKPOL | TX_ON_CLK_FALL | + SPI_CLK_DIV8); /* XXX: make it configurable */ + /* + * W25Q64CV max 104MHz, bus 120-192 MHz, so divide by 2. + * Update: divide by 4, DEV2 to fast for flash. + */ + + device_add_child(dev, "spibus", 0); + return (bus_generic_attach(dev)); +} + +static int +mtk_spi_detach(device_t dev) +{ + struct mtk_spi_softc *sc = device_get_softc(dev); + + SPI_SET_BITS(sc, MTK_SPICTL, HIZSMOSI | CS_HIGH); + + if (sc->sc_mem_res) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); + + return (0); +} + +static void +mtk_spi_chip_activate(struct mtk_spi_softc *sc) +{ +// printf("%s\n", __func__); + mtk_spi_wait(sc); + /* + * Put all CSx to low + */ + SPI_CLEAR_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI); +} + +static void +mtk_spi_chip_deactivate(struct mtk_spi_softc *sc) +{ +// printf("%s\n", __func__); + mtk_spi_wait(sc); + /* + * Put all CSx to high + */ + SPI_SET_BITS(sc, MTK_SPICTL, CS_HIGH | HIZSMOSI); +} + +static int +mtk_spi_wait(struct mtk_spi_softc *sc) +{ + int i = 1000; + + while (i--) { + if (!SPI_READ(sc, MTK_SPIBUSY)) + break; + } + if (i == 0) { + printf("busy\n"); + return (1); + } + + return (0); +} + +static uint8_t +mtk_spi_txrx(struct mtk_spi_softc *sc, uint8_t *data, int write) +{ + + if (mtk_spi_wait(sc)) + return (EBUSY); + + if (write == MTK_SPI_WRITE) { + SPI_WRITE(sc, MTK_SPIDATA, *data); + SPI_SET_BITS(sc, MTK_SPICTL, START_WRITE); + //printf("%s(W:%d)\n", __func__, *data); + } else {/* MTK_SPI_READ */ + SPI_SET_BITS(sc, MTK_SPICTL, START_READ); + if (mtk_spi_wait(sc)) + return (EBUSY); + + *data = SPI_READ(sc, MTK_SPIDATA) & 0xff; + //printf("%s(R:%d)\n", __func__, *data); + } + return (0); +} + +static int +mtk_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) +{ + struct mtk_spi_softc *sc; + uint8_t *buf, byte, *tx_buf; + struct spibus_ivar *devi = SPIBUS_IVAR(child); + int i, sz, error = 0, write = 0; + + sc = device_get_softc(dev); + + if (devi->cs != 0) + /* Only 1 CS */ + return (ENXIO); + + /* There is always a command to transfer. */ + tx_buf = (uint8_t *)(cmd->tx_cmd); + + /* Perform some fixup because MTK dont support duplex SPI */ + switch(tx_buf[0]) { + case CMD_READ_IDENT: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 3; + break; + case CMD_ENTER_4B_MODE: + case CMD_EXIT_4B_MODE: + case CMD_WRITE_ENABLE: + case CMD_WRITE_DISABLE: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 0; + break; + case CMD_READ_STATUS: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 1; + break; + case CMD_READ: + case CMD_FAST_READ: + cmd->rx_cmd_sz = cmd->tx_data_sz = 0; + break; + case CMD_SECTOR_ERASE: + cmd->rx_cmd_sz = 0; + break; + case CMD_PAGE_PROGRAM: + cmd->rx_cmd_sz = cmd->rx_data_sz = 0; + break; + } + + mtk_spi_chip_activate(sc); + + if (cmd->tx_cmd_sz + cmd->rx_cmd_sz) { + buf = (uint8_t *)(cmd->rx_cmd); + tx_buf = (uint8_t *)(cmd->tx_cmd); + sz = cmd->tx_cmd_sz + cmd->rx_cmd_sz; + + for (i = 0; i < sz; i++) { + if(i < cmd->tx_cmd_sz) { + byte = tx_buf[i]; + error = mtk_spi_txrx(sc, &byte, + MTK_SPI_WRITE); + if (error) + goto mtk_spi_transfer_fail; + continue; + } + error = mtk_spi_txrx(sc, &byte, + MTK_SPI_READ); + if (error) + goto mtk_spi_transfer_fail; + buf[i] = byte; + } + } + + /* + * Transfer/Receive data + */ + + if (cmd->tx_data_sz + cmd->rx_data_sz) { + write = (cmd->tx_data_sz > 0)?1:0; + buf = (uint8_t *)(write ? cmd->tx_data : cmd->rx_data); + sz = write ? cmd->tx_data_sz : cmd->rx_data_sz; + + for (i = 0; i < sz; i++) { + byte = buf[i]; + error = mtk_spi_txrx(sc, &byte, + write ? MTK_SPI_WRITE : MTK_SPI_READ); + if (error) + goto mtk_spi_transfer_fail; + buf[i] = byte; + } + } +mtk_spi_transfer_fail: + mtk_spi_chip_deactivate(sc); + + return (error); +} + +static phandle_t +mtk_spi_get_node(device_t bus, device_t dev) +{ + + /* We only have one child, the SPI bus, which needs our own node. */ + return (ofw_bus_get_node(bus)); +} + +static device_method_t mtk_spi_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_spi_probe), + DEVMETHOD(device_attach, mtk_spi_attach), + DEVMETHOD(device_detach, mtk_spi_detach), + + DEVMETHOD(spibus_transfer, mtk_spi_transfer), + + /* ofw_bus interface */ + DEVMETHOD(ofw_bus_get_node, mtk_spi_get_node), + + DEVMETHOD_END +}; + +static driver_t mtk_spi_driver = { + .name = "spi", + .methods = mtk_spi_methods, + .size = sizeof(struct mtk_spi_softc), +}; + +static devclass_t mtk_spi_devclass; + +DRIVER_MODULE(mtk_spi_v1, simplebus, mtk_spi_driver, mtk_spi_devclass, 0, 0); diff --git a/sys/mips/mediatek/mtk_spi_v1.h b/sys/mips/mediatek/mtk_spi_v1.h new file mode 100644 index 0000000..3b82e5b --- /dev/null +++ b/sys/mips/mediatek/mtk_spi_v1.h @@ -0,0 +1,71 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * Copyright (c) 2011, Aleksandr Rybalko + * Copyright (c) 2013, Alexander A. Mityaev + * Copyright (c) 2016, Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _MTK_SPIVAR_H_ +#define _MTK_SPIVAR_H_ + +/* SPI controller interface */ + +#define MTK_SPISTAT 0x00 +/* SPIBUSY is alias for SPIBUSY, because SPISTAT have only BUSY bit*/ +#define MTK_SPIBUSY MTK_SPISTAT + +#define MTK_SPICFG 0x10 +#define MSBFIRST (1<<8) +#define SPICLKPOL (1<<6) +#define CAPT_ON_CLK_FALL (1<<5) +#define TX_ON_CLK_FALL (1<<4) +#define HIZSPI (1<<3) /* Set SPI pins to Tri-state */ +#define SPI_CLK_SHIFT 0 /* SPI clock divide control */ +#define SPI_CLK_MASK 0x00000007 +#define SPI_CLK_DIV2 0 +#define SPI_CLK_DIV4 1 +#define SPI_CLK_DIV8 2 +#define SPI_CLK_DIV16 3 +#define SPI_CLK_DIV32 4 +#define SPI_CLK_DIV64 5 +#define SPI_CLK_DIV128 6 +#define SPI_CLK_DISABLED 7 + +#define MTK_SPICTL 0x14 +#define HIZSMOSI (1<<3) +#define START_WRITE (1<<2) +#define START_READ (1<<1) +#define CS_HIGH (1<<0) + +#define MTK_SPIDATA 0x20 +#define SPIDATA_MASK 0x000000ff + +#define MTK_SPI_WRITE 1 +#define MTK_SPI_READ 0 + +#endif /* _MTK_SPIVAR_H_ */ diff --git a/sys/mips/mediatek/mtk_spi_v2.c b/sys/mips/mediatek/mtk_spi_v2.c new file mode 100644 index 0000000..0ffd976 --- /dev/null +++ b/sys/mips/mediatek/mtk_spi_v2.c @@ -0,0 +1,357 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * Copyright (c) 2011, Aleksandr Rybalko + * Copyright (c) 2013, Alexander A. Mityaev + * Copyright (c) 2016, Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +//#include + +#include +#include +#include "spibus_if.h" + +#include "opt_platform.h" + +#include +#include +#include + +#include +#include + +#undef MTK_SPI_DEBUG +#ifdef MTK_SPI_DEBUG +#define dprintf printf +#else +#define dprintf(x, arg...) +#endif + +/* + * register space access macros + */ +#define SPI_WRITE(sc, reg, val) do { \ + bus_write_4(sc->sc_mem_res, (reg), (val)); \ + } while (0) + +#define SPI_READ(sc, reg) bus_read_4(sc->sc_mem_res, (reg)) + +#define SPI_SET_BITS(sc, reg, bits) \ + SPI_WRITE(sc, reg, SPI_READ(sc, (reg)) | (bits)) + +#define SPI_CLEAR_BITS(sc, reg, bits) \ + SPI_WRITE(sc, reg, SPI_READ(sc, (reg)) & ~(bits)) + +struct mtk_spi_softc { + device_t sc_dev; + struct resource *sc_mem_res; +}; + +static int mtk_spi_probe(device_t); +static int mtk_spi_attach(device_t); +static int mtk_spi_detach(device_t); +static int mtk_spi_wait(struct mtk_spi_softc *); +static void mtk_spi_chip_activate(struct mtk_spi_softc *); +static void mtk_spi_chip_deactivate(struct mtk_spi_softc *); +static uint8_t mtk_spi_txrx(struct mtk_spi_softc *, uint8_t *, int); +static int mtk_spi_transfer(device_t, device_t, struct spi_command *); +static phandle_t mtk_spi_get_node(device_t, device_t); + +static struct ofw_compat_data compat_data[] = { + { "ralink,mt7621-spi", 1 }, + { "ralink,mtk7628an-spi", 1 }, + { NULL, 0 } +}; + +static int +mtk_spi_probe(device_t dev) +{ + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return(ENXIO); + + device_set_desc(dev, "MTK SPI Controller (v2)"); + + return (0); +} + +static int +mtk_spi_attach(device_t dev) +{ + struct mtk_spi_softc *sc = device_get_softc(dev); + uint32_t val; + int rid; + + sc->sc_dev = dev; + rid = 0; + sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->sc_mem_res) { + device_printf(dev, "Could not map memory\n"); + return (ENXIO); + } + + if (mtk_spi_wait(sc)) { + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); + return (EBUSY); + } + + val = SPI_READ(sc, MTK_SPIMASTER); + val &= ~(0xfff << 16); + val |= 13 << 16; + val |= 7 << 29; + val |= 1 << 2; + SPI_WRITE(sc, MTK_SPIMASTER, val); + /* + * W25Q64CV max 104MHz, bus 120-192 MHz, so divide by 2. + * Update: divide by 4, DEV2 to fast for flash. + */ + + device_add_child(dev, "spibus", 0); + return (bus_generic_attach(dev)); +} + +static int +mtk_spi_detach(device_t dev) +{ + struct mtk_spi_softc *sc = device_get_softc(dev); + + //SPI_SET_BITS(sc, MTK_SPICTL, HIZSMOSI | CS_HIGH); + + if (sc->sc_mem_res) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res); + + return (0); +} + +static void +mtk_spi_chip_activate(struct mtk_spi_softc *sc) +{ +// printf("%s\n", __func__); + mtk_spi_wait(sc); + /* + * Put all CSx to low + */ + SPI_SET_BITS(sc, MTK_SPIPOLAR, 1); +} + +static void +mtk_spi_chip_deactivate(struct mtk_spi_softc *sc) +{ +// printf("%s\n", __func__); + mtk_spi_wait(sc); + /* + * Put all CSx to high + */ + SPI_CLEAR_BITS(sc, MTK_SPIPOLAR, 1); +} + +static int +mtk_spi_wait(struct mtk_spi_softc *sc) +{ + int i = 1000; + + while (i--) { + if (!(SPI_READ(sc, MTK_SPITRANS) & SPIBUSY)) + break; + } + if (i == 0) { + //printf("busy\n"); + return (1); + } + + return (0); +} + +static uint8_t +mtk_spi_txrx(struct mtk_spi_softc *sc, uint8_t *data, int write) +{ + + if (mtk_spi_wait(sc)) + return (0xff); + + if (write == MTK_SPI_WRITE) { + SPI_WRITE(sc, MTK_SPIOPCODE, (*data)); + SPI_WRITE(sc, MTK_SPIMOREBUF, (8<<24)); + } else { + SPI_WRITE(sc, MTK_SPIMOREBUF, (8<<12)); + } + + SPI_SET_BITS(sc, MTK_SPITRANS, SPISTART); + + if (mtk_spi_wait(sc)) + return (0xff); + + if (write == MTK_SPI_READ) { + *data = SPI_READ(sc, MTK_SPIDATA) & 0xff; + } + + return (0); +} + +static int +mtk_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) +{ + struct mtk_spi_softc *sc; + uint8_t *buf, byte, *tx_buf; + struct spibus_ivar *devi = SPIBUS_IVAR(child); + int i, sz, error, write = 0; + + sc = device_get_softc(dev); + + if (devi->cs != 0) + /* Only 1 CS */ + return (ENXIO); + + /* There is always a command to transfer. */ + tx_buf = (uint8_t *)(cmd->tx_cmd); + + /* Perform some fixup because MTK dont support duplex SPI */ + switch(tx_buf[0]) { + case CMD_READ_IDENT: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 3; + break; + case CMD_ENTER_4B_MODE: + case CMD_EXIT_4B_MODE: + case CMD_WRITE_ENABLE: + case CMD_WRITE_DISABLE: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 0; + break; + case CMD_READ_STATUS: + cmd->tx_cmd_sz = 1; + cmd->rx_cmd_sz = 1; + break; + case CMD_READ: + case CMD_FAST_READ: + cmd->rx_cmd_sz = cmd->tx_data_sz = 0; + break; + case CMD_SECTOR_ERASE: + cmd->rx_cmd_sz = 0; + break; + case CMD_PAGE_PROGRAM: + cmd->rx_cmd_sz = cmd->rx_data_sz = 0; + break; + } + + mtk_spi_chip_activate(sc); + + if (cmd->tx_cmd_sz + cmd->rx_cmd_sz) { + buf = (uint8_t *)(cmd->rx_cmd); + tx_buf = (uint8_t *)(cmd->tx_cmd); + sz = cmd->tx_cmd_sz + cmd->rx_cmd_sz; + + for (i = 0; i < sz; i++) { + if(i < cmd->tx_cmd_sz) { + byte = tx_buf[i]; + error = mtk_spi_txrx(sc, &byte, + MTK_SPI_WRITE); + if (error) + goto mtk_spi_transfer_fail; + continue; + } + error = mtk_spi_txrx(sc, &byte, + MTK_SPI_READ); + if (error) + goto mtk_spi_transfer_fail; + buf[i] = byte; + } + } + + /* + * Transfer/Receive data + */ + + if (cmd->tx_data_sz + cmd->rx_data_sz) { + write = (cmd->tx_data_sz > 0)?1:0; + buf = (uint8_t *)(write ? cmd->tx_data : cmd->rx_data); + sz = write ? cmd->tx_data_sz : cmd->rx_data_sz; + + for (i = 0; i < sz; i++) { + byte = buf[i]; + error = mtk_spi_txrx(sc, &byte, + write ? MTK_SPI_WRITE : MTK_SPI_READ); + if (error) + goto mtk_spi_transfer_fail; + buf[i] = byte; + } + } +mtk_spi_transfer_fail: + mtk_spi_chip_deactivate(sc); + + return (0); +} + +static phandle_t +mtk_spi_get_node(device_t bus, device_t dev) +{ + + /* We only have one child, the SPI bus, which needs our own node. */ + return (ofw_bus_get_node(bus)); +} + +static device_method_t mtk_spi_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_spi_probe), + DEVMETHOD(device_attach, mtk_spi_attach), + DEVMETHOD(device_detach, mtk_spi_detach), + + DEVMETHOD(spibus_transfer, mtk_spi_transfer), + + /* ofw_bus interface */ + DEVMETHOD(ofw_bus_get_node, mtk_spi_get_node), + + DEVMETHOD_END +}; + +static driver_t mtk_spi_driver = { + .name = "spi", + .methods = mtk_spi_methods, + .size = sizeof(struct mtk_spi_softc), +}; + +static devclass_t mtk_spi_devclass; + +DRIVER_MODULE(mtk_spi_v2, simplebus, mtk_spi_driver, mtk_spi_devclass, 0, 0); diff --git a/sys/mips/mediatek/mtk_spi_v2.h b/sys/mips/mediatek/mtk_spi_v2.h new file mode 100644 index 0000000..fc7ae31 --- /dev/null +++ b/sys/mips/mediatek/mtk_spi_v2.h @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 2009, Oleksandr Tymoshenko + * Copyright (c) 2011, Aleksandr Rybalko + * Copyright (c) 2013, Alexander A. Mityaev + * Copyright (c) 2016, Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _MTK_SPI_NEWVAR_H_ +#define _MTK_SPI_NEWVAR_H_ + +/* SPI controller interface */ + +#define MTK_SPITRANS 0x00 +#define SPIBUSY (1<<16) +#define SPISTART (1<<8) + +#define MTK_SPIMASTER 0x28 + +#define MTK_SPIMOREBUF 0x2C + +#define MTK_SPIOPCODE 0x04 +#define MTK_SPIDATA 0x08 +#define SPIDATA_MASK 0x000000ff + +#define MTK_SPI_WRITE 1 +#define MTK_SPI_READ 0 + +#define MTK_SPIPOLAR 0x38 + +#endif /* _MTK_SPI_NEWVAR_H_ */ -- cgit v1.1 From b9aa8fc68c03e5f238a890bbc34bde388f4fc35c Mon Sep 17 00:00:00 2001 From: mav Date: Thu, 7 Apr 2016 12:54:44 +0000 Subject: Alike to r293708 relax pool check in vdev_geom_open_by_path(). This made impossible spare disk open by known path, which kind of worked only because the same fix was applied to vdev_geom_attach_by_guids() in r293708. MFC after: 1 week --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c index 1fd9623..f459655 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c @@ -679,7 +679,15 @@ vdev_geom_open_by_path(vdev_t *vd, int check_guid) g_topology_unlock(); vdev_geom_read_guids(cp, &pguid, &vguid); g_topology_lock(); - if (pguid != spa_guid(vd->vdev_spa) || + /* + * Check that the label's vdev guid matches the + * desired guid. If the label has a pool guid, + * check that it matches too. (Inactive spares + * and L2ARCs do not have any pool guid in the + * label.) + */ + if ((pguid != 0 && + pguid != spa_guid(vd->vdev_spa)) || vguid != vd->vdev_guid) { vdev_geom_close_locked(vd); cp = NULL; -- cgit v1.1 From be3e91df09c48b99ed25c7c5179a549605906d43 Mon Sep 17 00:00:00 2001 From: mp Date: Thu, 7 Apr 2016 14:25:15 +0000 Subject: Revert r296416 by removing SAVESIGVEC and switching to fork instead. This fixes usage with system libraries which maintain their own signal state. PR: 208132 Obtained from: kib MFC after: 3 days --- bin/csh/config_p.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/csh/config_p.h b/bin/csh/config_p.h index f2d7ebc..c25e87a 100644 --- a/bin/csh/config_p.h +++ b/bin/csh/config_p.h @@ -34,7 +34,8 @@ * Note that some machines eg. rs6000 have a vfork, but not * with the berkeley semantics, so we cannot use it there either. */ -#define VFORK +/* #define VFORK */ +#define vfork fork /* * BSDJOBS You have BSD-style job control (both process groups and @@ -80,7 +81,6 @@ /****************** local defines *********************/ #if defined(__FreeBSD__) -#define SAVESIGVEC #define NLS_BUGS #define BSD_STYLE_COLORLS /* Use LC_MESSAGES locale category to open the message catalog */ -- cgit v1.1 From 1e6a6a2cd532830c02d26ea94ea8341b2a446444 Mon Sep 17 00:00:00 2001 From: skra Date: Thu, 7 Apr 2016 15:00:25 +0000 Subject: Implement intr_isrc_init_on_cpu() and use it to replace very same code implemented in every interrupt controller driver running SMP. This function returns true, if provided ISRC should be enabled on given cpu. --- sys/arm/arm/gic.c | 27 +++++++-------------------- sys/arm/broadcom/bcm2835/bcm2836.c | 25 +++---------------------- sys/kern/subr_intr.c | 26 ++++++++++++++++++++++++++ sys/sys/intr.h | 4 ++++ 4 files changed, 40 insertions(+), 42 deletions(-) diff --git a/sys/arm/arm/gic.c b/sys/arm/arm/gic.c index 23b9577..922e386 100644 --- a/sys/arm/arm/gic.c +++ b/sys/arm/arm/gic.c @@ -256,11 +256,11 @@ static void arm_gic_init_secondary(device_t dev) { struct arm_gic_softc *sc = device_get_softc(dev); - struct intr_irqsrc *isrc; - u_int irq; + u_int irq, cpu; /* Set the mask so we can find this CPU to send it IPIs */ - arm_gic_map[PCPU_GET(cpuid)] = gic_cpu_mask(sc); + cpu = PCPU_GET(cpuid); + arm_gic_map[cpu] = gic_cpu_mask(sc); for (irq = 0; irq < sc->nirqs; irq += 4) gic_d_write_4(sc, GICD_IPRIORITYR(irq >> 2), 0); @@ -280,27 +280,14 @@ arm_gic_init_secondary(device_t dev) gic_d_write_4(sc, GICD_CTLR, 0x01); /* Unmask attached SGI interrupts. */ - for (irq = GIC_FIRST_SGI; irq <= GIC_LAST_SGI; irq++) { - isrc = GIC_INTR_ISRC(sc, irq); - if (isrc != NULL && isrc->isrc_handlers != 0) { - CPU_SET(PCPU_GET(cpuid), &isrc->isrc_cpu); + for (irq = GIC_FIRST_SGI; irq <= GIC_LAST_SGI; irq++) + if (intr_isrc_init_on_cpu(GIC_INTR_ISRC(sc, irq), cpu)) gic_irq_unmask(sc, irq); - } - } /* Unmask attached PPI interrupts. */ - for (irq = GIC_FIRST_PPI; irq <= GIC_LAST_PPI; irq++) { - isrc = GIC_INTR_ISRC(sc, irq); - if (isrc == NULL || isrc->isrc_handlers == 0) - continue; - if (isrc->isrc_flags & INTR_ISRCF_BOUND) { - if (CPU_ISSET(PCPU_GET(cpuid), &isrc->isrc_cpu)) - gic_irq_unmask(sc, irq); - } else { - CPU_SET(PCPU_GET(cpuid), &isrc->isrc_cpu); + for (irq = GIC_FIRST_PPI; irq <= GIC_LAST_PPI; irq++) + if (intr_isrc_init_on_cpu(GIC_INTR_ISRC(sc, irq), cpu)) gic_irq_unmask(sc, irq); - } - } } #else static void diff --git a/sys/arm/broadcom/bcm2835/bcm2836.c b/sys/arm/broadcom/bcm2835/bcm2836.c index 05e9cc6..f9a2fcc 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836.c +++ b/sys/arm/broadcom/bcm2835/bcm2836.c @@ -525,40 +525,21 @@ bcm_lintc_setup_intr(device_t dev, struct intr_irqsrc *isrc, } #ifdef SMP -static bool -bcm_lint_init_on_ap(struct bcm_lintc_softc *sc, struct bcm_lintc_irqsrc *bli, - u_int cpu) -{ - struct intr_irqsrc *isrc; - - isrc = &bli->bli_isrc; - - KASSERT(isrc->isrc_flags & INTR_ISRCF_PPI, - ("%s: irq %d is not PPI", __func__, bli->bli_irq)); - - if (isrc->isrc_handlers == 0) - return (false); - if (isrc->isrc_flags & INTR_ISRCF_BOUND) - return (CPU_ISSET(cpu, &isrc->isrc_cpu)); - - CPU_SET(cpu, &isrc->isrc_cpu); - return (true); -} - static void bcm_lintc_init_rwreg_on_ap(struct bcm_lintc_softc *sc, u_int cpu, u_int irq, uint32_t reg, uint32_t mask) { - if (bcm_lint_init_on_ap(sc, &sc->bls_isrcs[irq], cpu)) + if (intr_isrc_init_on_cpu(&sc->bls_isrcs[irq].bli_isrc, cpu)) bcm_lintc_rwreg_set(sc, reg, mask); } static void bcm_lintc_init_pmu_on_ap(struct bcm_lintc_softc *sc, u_int cpu) { + struct intr_irqsrc *isrc = &sc->bls_isrcs[BCM_LINTC_PMU_IRQ].bli_isrc; - if (bcm_lint_init_on_ap(sc, &sc->bls_isrcs[BCM_LINTC_PMU_IRQ], cpu)) { + if (intr_isrc_init_on_cpu(isrc, cpu)) { /* Write-set register. */ bcm_lintc_write_4(sc, BCM_LINTC_PMU_ROUTING_SET_REG, BCM_LINTC_PIRR_IRQ_EN_CORE(cpu)); diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c index fc3e74f..6e6241b 100644 --- a/sys/kern/subr_intr.c +++ b/sys/kern/subr_intr.c @@ -467,6 +467,32 @@ intr_isrc_deregister(struct intr_irqsrc *isrc) return (error); } +#ifdef SMP +/* + * A support function for a PIC to decide if provided ISRC should be inited + * on given cpu. The logic of INTR_ISRCF_BOUND flag and isrc_cpu member of + * struct intr_irqsrc is the following: + * + * If INTR_ISRCF_BOUND is set, the ISRC should be inited only on cpus + * set in isrc_cpu. If not, the ISRC should be inited on every cpu and + * isrc_cpu is kept consistent with it. Thus isrc_cpu is always correct. + */ +bool +intr_isrc_init_on_cpu(struct intr_irqsrc *isrc, u_int cpu) +{ + + if (isrc->isrc_handlers == 0) + return (false); + if ((isrc->isrc_flags & (INTR_ISRCF_PPI | INTR_ISRCF_IPI)) == 0) + return (false); + if (isrc->isrc_flags & INTR_ISRCF_BOUND) + return (CPU_ISSET(cpu, &isrc->isrc_cpu)); + + CPU_SET(cpu, &isrc->isrc_cpu); + return (true); +} +#endif + static struct intr_dev_data * intr_ddata_alloc(u_int extsize) { diff --git a/sys/sys/intr.h b/sys/sys/intr.h index 04325c1..f7d2abe 100644 --- a/sys/sys/intr.h +++ b/sys/sys/intr.h @@ -98,6 +98,10 @@ int intr_isrc_deregister(struct intr_irqsrc *); int intr_isrc_register(struct intr_irqsrc *, device_t, u_int, const char *, ...) __printflike(4, 5); +#ifdef SMP +bool intr_isrc_init_on_cpu(struct intr_irqsrc *isrc, u_int cpu); +#endif + int intr_isrc_dispatch(struct intr_irqsrc *, struct trapframe *); u_int intr_irq_next_cpu(u_int current_cpu, cpuset_t *cpumask); -- cgit v1.1 From 08f3a7ae7d3cf0c06af705e550666f2395957ea0 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Thu, 7 Apr 2016 15:11:24 +0000 Subject: Initial import of Ralink/Mediatek MIPS SoC support #7 GPIO controller drivers import. As with other Ralink/Mediatek work, there are 2 versions of the GPIO controller driver, depending on the type of SoC. This revision introduces initial support for these. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5877 --- sys/mips/mediatek/mtk_gpio_v1.c | 646 ++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_gpio_v2.c | 646 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1292 insertions(+) create mode 100644 sys/mips/mediatek/mtk_gpio_v1.c create mode 100644 sys/mips/mediatek/mtk_gpio_v2.c diff --git a/sys/mips/mediatek/mtk_gpio_v1.c b/sys/mips/mediatek/mtk_gpio_v1.c new file mode 100644 index 0000000..1882029 --- /dev/null +++ b/sys/mips/mediatek/mtk_gpio_v1.c @@ -0,0 +1,646 @@ +/*- + * Copyright 2016 Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_platform.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include +#include +#include + +#include + +#include "gpio_if.h" +#include "pic_if.h" + +#define MTK_GPIO_PINS 32 + +struct mtk_gpio_pin_irqsrc { + struct intr_irqsrc isrc; + u_int irq; +}; + +struct mtk_gpio_pin { + uint32_t pin_caps; + uint32_t pin_flags; + enum intr_trigger intr_trigger; + enum intr_polarity intr_polarity; + char pin_name[GPIOMAXNAME]; + struct mtk_gpio_pin_irqsrc pin_irqsrc; +}; + +struct mtk_gpio_softc { + device_t dev; + device_t busdev; + struct resource *res[2]; + struct mtx mtx; + struct mtk_gpio_pin pins[MTK_GPIO_PINS]; + void *intrhand; + + uint32_t num_pins; + uint8_t do_remap; +}; + +#define PIC_INTR_ISRC(sc, irq) (&(sc)->pins[(irq)].pin_irqsrc.isrc) + +static struct resource_spec mtk_gpio_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, + { -1, 0 } +}; + +static int mtk_gpio_probe(device_t dev); +static int mtk_gpio_attach(device_t dev); +static int mtk_gpio_detach(device_t dev); +static int mtk_gpio_intr(void *arg); + +#define MTK_GPIO_LOCK(sc) mtx_lock_spin(&(sc)->mtx) +#define MTK_GPIO_UNLOCK(sc) mtx_unlock_spin(&(sc)->mtx) +#define MTK_GPIO_LOCK_INIT(sc) \ + mtx_init(&(sc)->mtx, device_get_nameunit((sc)->dev), \ + "mtk_gpio", MTX_SPIN) +#define MTK_GPIO_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtx) + +#define MTK_WRITE_4(sc, reg, val) bus_write_4((sc)->res[0], (reg), (val)) +#define MTK_READ_4(sc, reg) bus_read_4((sc)->res[0], (reg)) + +/* Register definitions */ +#define GPIO_PIOINT(_sc) 0x0000 +#define GPIO_PIOEDGE(_sc) 0x0004 +#define GPIO_PIORENA(_sc) 0x0008 +#define GPIO_PIOFENA(_sc) 0x000C +#define GPIO_PIODATA(_sc) ((_sc)->do_remap ? 0x0020 : 0x0010) +#define GPIO_PIODIR(_sc) ((_sc)->do_remap ? 0x0024 : 0x0014) +#define GPIO_PIOPOL(_sc) ((_sc)->do_remap ? 0x0028 : 0x0018) +#define GPIO_PIOSET(_sc) ((_sc)->do_remap ? 0x002C : 0x001C) +#define GPIO_PIORESET(_sc) ((_sc)->do_remap ? 0x0030 : 0x0020) +#define GPIO_PIOTOG(_sc) ((_sc)->do_remap ? 0x0034 : 0x0024) + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt2880-gpio", 1 }, + { "ralink,rt3050-gpio", 1 }, + { "ralink,rt3352-gpio", 1 }, + { "ralink,rt3883-gpio", 1 }, + { "ralink,rt5350-gpio", 1 }, + { "ralink,mt7620a-gpio", 1 }, + { NULL, 0 } +}; + +static int +mtk_gpio_probe(device_t dev) +{ + phandle_t node; + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + node = ofw_bus_get_node(dev); + if (!OF_hasprop(node, "gpio-controller")) + return (ENXIO); + + device_set_desc(dev, "MTK GPIO Controller (v1)"); + + return (BUS_PROBE_DEFAULT); +} + +static int +mtk_pic_register_isrcs(struct mtk_gpio_softc *sc) +{ + int error; + uint32_t irq; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->dev); + for (irq = 0; irq < sc->num_pins; irq++) { + sc->pins[irq].pin_irqsrc.irq = irq; + isrc = PIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->dev, 0, "%s", name); + if (error != 0) { + /* XXX call intr_isrc_deregister */ + device_printf(sc->dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int +mtk_gpio_pin_set_direction(struct mtk_gpio_softc *sc, uint32_t pin, + uint32_t dir) +{ + uint32_t regval, mask = (1u << pin); + + if (!(sc->pins[pin].pin_caps & dir)) + return (EINVAL); + + regval = MTK_READ_4(sc, GPIO_PIODIR(sc)); + if (dir == GPIO_PIN_INPUT) + regval &= ~mask; + else + regval |= mask; + MTK_WRITE_4(sc, GPIO_PIODIR(sc), regval); + + sc->pins[pin].pin_flags &= ~(GPIO_PIN_INPUT | GPIO_PIN_OUTPUT); + sc->pins[pin].pin_flags |= dir; + + return (0); +} + +static int +mtk_gpio_pin_set_invert(struct mtk_gpio_softc *sc, uint32_t pin, uint32_t val) +{ + uint32_t regval, mask = (1u << pin); + + regval = MTK_READ_4(sc, GPIO_PIOPOL(sc)); + if (val) + regval |= mask; + else + regval &= ~mask; + MTK_WRITE_4(sc, GPIO_PIOPOL(sc), regval); + sc->pins[pin].pin_flags &= ~(GPIO_PIN_INVIN | GPIO_PIN_INVOUT); + sc->pins[pin].pin_flags |= val; + + return (0); +} + +static void +mtk_gpio_pin_probe(struct mtk_gpio_softc *sc, uint32_t pin) +{ + uint32_t mask = (1u << pin); + uint32_t val; + + /* Clear cached gpio config */ + sc->pins[pin].pin_flags = 0; + + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) | + MTK_READ_4(sc, GPIO_PIOFENA(sc)); + if (val & mask) { + /* Pin is in interrupt mode */ + sc->pins[pin].intr_trigger = INTR_TRIGGER_EDGE; + val = MTK_READ_4(sc, GPIO_PIORENA(sc)); + if (val & mask) + sc->pins[pin].intr_polarity = INTR_POLARITY_HIGH; + else + sc->pins[pin].intr_polarity = INTR_POLARITY_LOW; + } + + val = MTK_READ_4(sc, GPIO_PIODIR(sc)); + if (val & mask) + sc->pins[pin].pin_flags |= GPIO_PIN_OUTPUT; + else + sc->pins[pin].pin_flags |= GPIO_PIN_INPUT; + + val = MTK_READ_4(sc, GPIO_PIOPOL(sc)); + if (val & mask) { + if (sc->pins[pin].pin_flags & GPIO_PIN_INPUT) { + sc->pins[pin].pin_flags |= GPIO_PIN_INVIN; + } else { + sc->pins[pin].pin_flags |= GPIO_PIN_INVOUT; + } + } +} + +static int +mtk_gpio_attach(device_t dev) +{ + struct mtk_gpio_softc *sc; + phandle_t node; + uint32_t i, num_pins; + + sc = device_get_softc(dev); + sc->dev = dev; + + if (bus_alloc_resources(dev, mtk_gpio_spec, sc->res)) { + device_printf(dev, "could not allocate resources for device\n"); + return (ENXIO); + } + + MTK_GPIO_LOCK_INIT(sc); + + node = ofw_bus_get_node(dev); + + if (OF_hasprop(node, "clocks")) + mtk_soc_start_clock(dev); + if (OF_hasprop(node, "resets")) + mtk_soc_reset_device(dev); + + if (OF_hasprop(node, "mtk,register-gap")) { + device_printf(dev, "\n"); + sc->do_remap = 1; + } else { + device_printf(dev, "\n"); + sc->do_remap = 0; + } + + if (OF_hasprop(node, "mtk,num-pins") && (OF_getencprop(node, + "mtk,num-pins", &num_pins, sizeof(num_pins)) >= 0)) + sc->num_pins = num_pins; + else + sc->num_pins = MTK_GPIO_PINS; + + for (i = 0; i < num_pins; i++) { + sc->pins[i].pin_caps |= GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | + GPIO_PIN_INVIN | GPIO_PIN_INVOUT; + sc->pins[i].intr_polarity = INTR_POLARITY_HIGH; + sc->pins[i].intr_trigger = INTR_TRIGGER_EDGE; + + snprintf(sc->pins[i].pin_name, GPIOMAXNAME - 1, "gpio%c%d", + device_get_unit(dev) + 'a', i); + sc->pins[i].pin_name[GPIOMAXNAME - 1] = '\0'; + + mtk_gpio_pin_probe(sc, i); + } + + if (mtk_pic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register PIC ISRCs\n"); + goto fail; + } + + if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) { + device_printf(dev, "could not register PIC\n"); + goto fail; + } + + if (bus_setup_intr(dev, sc->res[1], INTR_TYPE_MISC | INTR_MPSAFE, + mtk_gpio_intr, NULL, sc, &sc->intrhand) != 0) + goto fail_pic; + + sc->busdev = gpiobus_attach_bus(dev); + if (sc->busdev == NULL) + goto fail_pic; + + return (0); +fail_pic: + intr_pic_deregister(dev, OF_xref_from_node(node)); +fail: + if(sc->intrhand != NULL) + bus_teardown_intr(dev, sc->res[1], sc->intrhand); + bus_release_resources(dev, mtk_gpio_spec, sc->res); + MTK_GPIO_LOCK_DESTROY(sc); + return (ENXIO); +} + +static int +mtk_gpio_detach(device_t dev) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + phandle_t node; + + node = ofw_bus_get_node(dev); + intr_pic_deregister(dev, OF_xref_from_node(node)); + if (sc->intrhand != NULL) + bus_teardown_intr(dev, sc->res[1], sc->intrhand); + bus_release_resources(dev, mtk_gpio_spec, sc->res); + MTK_GPIO_LOCK_DESTROY(sc); + return (0); +} + +static device_t +mtk_gpio_get_bus(device_t dev) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + return (sc->busdev); +} + +static int +mtk_gpio_pin_max(device_t dev, int *maxpin) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + *maxpin = sc->num_pins - 1; + + return (0); +} + +static int +mtk_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + *caps = sc->pins[pin].pin_caps; + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + *flags = sc->pins[pin].pin_flags; + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_getname(device_t dev, uint32_t pin, char *name) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + strncpy(name, sc->pins[pin].pin_name, GPIOMAXNAME - 1); + name[GPIOMAXNAME - 1] = '\0'; + + return (0); +} + +static int +mtk_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) +{ + struct mtk_gpio_softc *sc; + int retval; + + sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + retval = mtk_gpio_pin_set_direction(sc, pin, + flags & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT)); + if (retval == 0) + retval = mtk_gpio_pin_set_invert(sc, pin, + flags & (GPIO_PIN_INVIN | GPIO_PIN_INVOUT)); + MTK_GPIO_UNLOCK(sc); + + return (retval); +} + +static int +mtk_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + if (value) + MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); + else + MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) +{ + struct mtk_gpio_softc *sc; + uint32_t data; + + sc = device_get_softc(dev); + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + data = MTK_READ_4(sc, GPIO_PIODATA(sc)); + MTK_GPIO_UNLOCK(sc); + *val = (data & (1u << pin)) ? 1 : 0; + + return (0); +} + +static int +mtk_gpio_pin_toggle(device_t dev, uint32_t pin) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + MTK_WRITE_4(sc, GPIO_PIOTOG(sc), (1u << pin)); + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + struct mtk_gpio_softc *sc; + + sc = device_get_softc(dev); + + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->num_pins) + return (EINVAL); + + *isrcp = PIC_INTR_ISRC(sc, data->fdt.cells[0]); + return (0); +} + +static void +mtk_gpio_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + uint32_t pin, mask, val; + + sc = device_get_softc(dev); + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + pin = pisrc->irq; + mask = 1u << pin; + + MTK_GPIO_LOCK(sc); + + if (sc->pins[pin].intr_polarity == INTR_POLARITY_LOW) { + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) | mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + } else { + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) | mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + } + + MTK_GPIO_UNLOCK(sc); +} + +static void +mtk_gpio_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + uint32_t pin, mask, val; + + sc = device_get_softc(dev); + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + pin = pisrc->irq; + mask = 1u << pin; + + MTK_GPIO_LOCK(sc); + + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + + MTK_GPIO_UNLOCK(sc); +} + +static void +mtk_gpio_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gpio_pic_disable_intr(dev, isrc); +} + +static void +mtk_gpio_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gpio_pic_enable_intr(dev, isrc); +} + +static void +mtk_gpio_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + sc = device_get_softc(dev); + MTK_WRITE_4(sc, GPIO_PIOINT(sc), 1u << pisrc->irq); +} + +static int +mtk_gpio_intr(void *arg) +{ + struct mtk_gpio_softc *sc; + uint32_t i, interrupts; + + sc = arg; + interrupts = MTK_READ_4(sc, GPIO_PIOINT(sc)); + + for (i = 0; interrupts != 0; i++, interrupts >>= 1) { + if ((interrupts & 0x1) == 0) + continue; + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->dev, "spurious interrupt %d\n", i); + } + } + + return (FILTER_HANDLED); +} + +static phandle_t +mtk_gpio_get_node(device_t bus, device_t dev) +{ + + /* We only have one child, the GPIO bus, which needs our own node. */ + return (ofw_bus_get_node(bus)); +} + +static device_method_t mtk_gpio_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_gpio_probe), + DEVMETHOD(device_attach, mtk_gpio_attach), + DEVMETHOD(device_detach, mtk_gpio_detach), + + /* GPIO protocol */ + DEVMETHOD(gpio_get_bus, mtk_gpio_get_bus), + DEVMETHOD(gpio_pin_max, mtk_gpio_pin_max), + DEVMETHOD(gpio_pin_getname, mtk_gpio_pin_getname), + DEVMETHOD(gpio_pin_getflags, mtk_gpio_pin_getflags), + DEVMETHOD(gpio_pin_getcaps, mtk_gpio_pin_getcaps), + DEVMETHOD(gpio_pin_setflags, mtk_gpio_pin_setflags), + DEVMETHOD(gpio_pin_get, mtk_gpio_pin_get), + DEVMETHOD(gpio_pin_set, mtk_gpio_pin_set), + DEVMETHOD(gpio_pin_toggle, mtk_gpio_pin_toggle), + + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, mtk_gpio_pic_disable_intr), + DEVMETHOD(pic_enable_intr, mtk_gpio_pic_enable_intr), + DEVMETHOD(pic_map_intr, mtk_gpio_pic_map_intr), + DEVMETHOD(pic_post_filter, mtk_gpio_pic_post_filter), + DEVMETHOD(pic_post_ithread, mtk_gpio_pic_post_ithread), + DEVMETHOD(pic_pre_ithread, mtk_gpio_pic_pre_ithread), + + /* ofw_bus interface */ + DEVMETHOD(ofw_bus_get_node, mtk_gpio_get_node), + + DEVMETHOD_END +}; + +static driver_t mtk_gpio_driver = { + "gpio", + mtk_gpio_methods, + sizeof(struct mtk_gpio_softc), +}; + +static devclass_t mtk_gpio_devclass; + +EARLY_DRIVER_MODULE(mtk_gpio_v1, simplebus, mtk_gpio_driver, + mtk_gpio_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_LATE); diff --git a/sys/mips/mediatek/mtk_gpio_v2.c b/sys/mips/mediatek/mtk_gpio_v2.c new file mode 100644 index 0000000..543133c --- /dev/null +++ b/sys/mips/mediatek/mtk_gpio_v2.c @@ -0,0 +1,646 @@ +/*- + * Copyright 2016 Stanislav Galabov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_platform.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include +#include +#include + +#include + +#include "gpio_if.h" +#include "pic_if.h" + +#define MTK_GPIO_PINS 32 + +struct mtk_gpio_pin_irqsrc { + struct intr_irqsrc isrc; + u_int irq; +}; + +struct mtk_gpio_pin { + uint32_t pin_caps; + uint32_t pin_flags; + enum intr_trigger intr_trigger; + enum intr_polarity intr_polarity; + char pin_name[GPIOMAXNAME]; + struct mtk_gpio_pin_irqsrc pin_irqsrc; +}; + +struct mtk_gpio_softc { + device_t dev; + device_t busdev; + struct resource *res[2]; + struct mtx mtx; + struct mtk_gpio_pin pins[MTK_GPIO_PINS]; + void *intrhand; + + uint32_t num_pins; + uint32_t bank_id; +}; + +#define PIC_INTR_ISRC(sc, irq) (&(sc)->pins[(irq)].pin_irqsrc.isrc) + +static struct resource_spec mtk_gpio_spec[] = { + { SYS_RES_MEMORY, 0, RF_ACTIVE | RF_SHAREABLE }, + { SYS_RES_IRQ, 0, RF_ACTIVE | RF_SHAREABLE }, + { -1, 0 } +}; + +static int mtk_gpio_probe(device_t dev); +static int mtk_gpio_attach(device_t dev); +static int mtk_gpio_detach(device_t dev); +static int mtk_gpio_intr(void *arg); + +#define MTK_GPIO_LOCK(sc) mtx_lock_spin(&(sc)->mtx) +#define MTK_GPIO_UNLOCK(sc) mtx_unlock_spin(&(sc)->mtx) +#define MTK_GPIO_LOCK_INIT(sc) \ + mtx_init(&(sc)->mtx, device_get_nameunit((sc)->dev), \ + "mtk_gpio", MTX_SPIN) +#define MTK_GPIO_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtx) + +#define MTK_WRITE_4(sc, reg, val) bus_write_4((sc)->res[0], (reg), (val)) +#define MTK_READ_4(sc, reg) bus_read_4((sc)->res[0], (reg)) + +/* Register definitions */ +#define GPIO_REG(_sc, _reg) ((_reg) + (_sc)->bank_id * 0x4) +#define GPIO_PIOINT(_sc) GPIO_REG((_sc), 0x0090) +#define GPIO_PIOEDGE(_sc) GPIO_REG((_sc), 0x00A0) +#define GPIO_PIORENA(_sc) GPIO_REG((_sc), 0x0050) +#define GPIO_PIOFENA(_sc) GPIO_REG((_sc), 0x0060) +#define GPIO_PIODATA(_sc) GPIO_REG((_sc), 0x0020) +#define GPIO_PIODIR(_sc) GPIO_REG((_sc), 0x0000) +#define GPIO_PIOPOL(_sc) GPIO_REG((_sc), 0x0010) +#define GPIO_PIOSET(_sc) GPIO_REG((_sc), 0x0030) +#define GPIO_PIORESET(_sc) GPIO_REG((_sc), 0x0040) + +static struct ofw_compat_data compat_data[] = { + { "mtk,mt7621-gpio", 1 }, + { "mtk,mt7628-gpio", 1 }, + { NULL, 0 } +}; + +static int +mtk_gpio_probe(device_t dev) +{ + phandle_t node; + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + node = ofw_bus_get_node(dev); + if (!OF_hasprop(node, "gpio-controller")) + return (ENXIO); + + device_set_desc(dev, "MTK GPIO Controller (v2)"); + + return (BUS_PROBE_DEFAULT); +} + +static int +mtk_pic_register_isrcs(struct mtk_gpio_softc *sc) +{ + int error; + uint32_t irq; + struct intr_irqsrc *isrc; + const char *name; + + name = device_get_nameunit(sc->dev); + for (irq = 0; irq < sc->num_pins; irq++) { + sc->pins[irq].pin_irqsrc.irq = irq; + isrc = PIC_INTR_ISRC(sc, irq); + error = intr_isrc_register(isrc, sc->dev, 0, "%s", name); + if (error != 0) { + /* XXX call intr_isrc_deregister */ + device_printf(sc->dev, "%s failed", __func__); + return (error); + } + } + + return (0); +} + +static int +mtk_gpio_pin_set_direction(struct mtk_gpio_softc *sc, uint32_t pin, + uint32_t dir) +{ + uint32_t regval, mask = (1u << pin); + + if (!(sc->pins[pin].pin_caps & dir)) + return (EINVAL); + + regval = MTK_READ_4(sc, GPIO_PIODIR(sc)); + if (dir == GPIO_PIN_INPUT) + regval &= ~mask; + else + regval |= mask; + MTK_WRITE_4(sc, GPIO_PIODIR(sc), regval); + + sc->pins[pin].pin_flags &= ~(GPIO_PIN_INPUT | GPIO_PIN_OUTPUT); + sc->pins[pin].pin_flags |= dir; + + return (0); +} + +static int +mtk_gpio_pin_set_invert(struct mtk_gpio_softc *sc, uint32_t pin, uint32_t val) +{ + uint32_t regval, mask = (1u << pin); + + regval = MTK_READ_4(sc, GPIO_PIOPOL(sc)); + if (val) + regval |= mask; + else + regval &= ~mask; + MTK_WRITE_4(sc, GPIO_PIOPOL(sc), regval); + sc->pins[pin].pin_flags &= ~(GPIO_PIN_INVIN | GPIO_PIN_INVOUT); + sc->pins[pin].pin_flags |= val; + + return (0); +} + +static void +mtk_gpio_pin_probe(struct mtk_gpio_softc *sc, uint32_t pin) +{ + uint32_t mask = (1u << pin); + uint32_t val; + + /* Clear cached gpio config */ + sc->pins[pin].pin_flags = 0; + + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) | + MTK_READ_4(sc, GPIO_PIOFENA(sc)); + if (val & mask) { + /* Pin is in interrupt mode */ + sc->pins[pin].intr_trigger = INTR_TRIGGER_EDGE; + val = MTK_READ_4(sc, GPIO_PIORENA(sc)); + if (val & mask) + sc->pins[pin].intr_polarity = INTR_POLARITY_HIGH; + else + sc->pins[pin].intr_polarity = INTR_POLARITY_LOW; + } + + val = MTK_READ_4(sc, GPIO_PIODIR(sc)); + if (val & mask) + sc->pins[pin].pin_flags |= GPIO_PIN_OUTPUT; + else + sc->pins[pin].pin_flags |= GPIO_PIN_INPUT; + + val = MTK_READ_4(sc, GPIO_PIOPOL(sc)); + if (val & mask) { + if (sc->pins[pin].pin_flags & GPIO_PIN_INPUT) { + sc->pins[pin].pin_flags |= GPIO_PIN_INVIN; + } else { + sc->pins[pin].pin_flags |= GPIO_PIN_INVOUT; + } + } +} + +static int +mtk_gpio_attach(device_t dev) +{ + struct mtk_gpio_softc *sc; + phandle_t node; + uint32_t i, num_pins, bank_id; + + sc = device_get_softc(dev); + sc->dev = dev; + + if (bus_alloc_resources(dev, mtk_gpio_spec, sc->res)) { + device_printf(dev, "could not allocate resources for device\n"); + return (ENXIO); + } + + MTK_GPIO_LOCK_INIT(sc); + + node = ofw_bus_get_node(dev); + + if (OF_hasprop(node, "clocks")) + mtk_soc_start_clock(dev); + if (OF_hasprop(node, "resets")) + mtk_soc_reset_device(dev); + + if (OF_hasprop(node, "mtk,bank-id") && (OF_getencprop(node, + "mtk,bank-id", &bank_id, sizeof(bank_id)) >= 0)) + sc->bank_id = bank_id; + else + sc->bank_id = device_get_unit(dev); + + if (OF_hasprop(node, "mtk,num-pins") && (OF_getencprop(node, + "mtk,num-pins", &num_pins, sizeof(num_pins)) >= 0)) + sc->num_pins = num_pins; + else + sc->num_pins = MTK_GPIO_PINS; + + for (i = 0; i < num_pins; i++) { + sc->pins[i].pin_caps |= GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | + GPIO_PIN_INVIN | GPIO_PIN_INVOUT; + sc->pins[i].intr_polarity = INTR_POLARITY_HIGH; + sc->pins[i].intr_trigger = INTR_TRIGGER_EDGE; + + snprintf(sc->pins[i].pin_name, GPIOMAXNAME - 1, "gpio%c%d", + device_get_unit(dev) + 'a', i); + sc->pins[i].pin_name[GPIOMAXNAME - 1] = '\0'; + + mtk_gpio_pin_probe(sc, i); + } + + if (mtk_pic_register_isrcs(sc) != 0) { + device_printf(dev, "could not register PIC ISRCs\n"); + goto fail; + } + + if (intr_pic_register(dev, OF_xref_from_node(node)) != 0) { + device_printf(dev, "could not register PIC\n"); + goto fail; + } + + if (bus_setup_intr(dev, sc->res[1], INTR_TYPE_MISC | INTR_MPSAFE, + mtk_gpio_intr, NULL, sc, &sc->intrhand) != 0) + goto fail_pic; + + sc->busdev = gpiobus_attach_bus(dev); + if (sc->busdev == NULL) + goto fail_pic; + + return (0); +fail_pic: + intr_pic_deregister(dev, OF_xref_from_node(node)); +fail: + if(sc->intrhand != NULL) + bus_teardown_intr(dev, sc->res[1], sc->intrhand); + bus_release_resources(dev, mtk_gpio_spec, sc->res); + MTK_GPIO_LOCK_DESTROY(sc); + return (ENXIO); +} + +static int +mtk_gpio_detach(device_t dev) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + phandle_t node; + + node = ofw_bus_get_node(dev); + intr_pic_deregister(dev, OF_xref_from_node(node)); + if (sc->intrhand != NULL) + bus_teardown_intr(dev, sc->res[1], sc->intrhand); + bus_release_resources(dev, mtk_gpio_spec, sc->res); + MTK_GPIO_LOCK_DESTROY(sc); + return (0); +} + +static device_t +mtk_gpio_get_bus(device_t dev) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + return (sc->busdev); +} + +static int +mtk_gpio_pin_max(device_t dev, int *maxpin) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + *maxpin = sc->num_pins - 1; + + return (0); +} + +static int +mtk_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + *caps = sc->pins[pin].pin_caps; + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + *flags = sc->pins[pin].pin_flags; + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_getname(device_t dev, uint32_t pin, char *name) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + strncpy(name, sc->pins[pin].pin_name, GPIOMAXNAME - 1); + name[GPIOMAXNAME - 1] = '\0'; + + return (0); +} + +static int +mtk_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) +{ + struct mtk_gpio_softc *sc; + int retval; + + sc = device_get_softc(dev); + + if (pin >= sc->num_pins) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + retval = mtk_gpio_pin_set_direction(sc, pin, + flags & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT)); + if (retval == 0) + retval = mtk_gpio_pin_set_invert(sc, pin, + flags & (GPIO_PIN_INVIN | GPIO_PIN_INVOUT)); + MTK_GPIO_UNLOCK(sc); + + return (retval); +} + +static int +mtk_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + if (value) + MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); + else + MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) +{ + struct mtk_gpio_softc *sc; + uint32_t data; + + sc = device_get_softc(dev); + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + data = MTK_READ_4(sc, GPIO_PIODATA(sc)); + MTK_GPIO_UNLOCK(sc); + *val = (data & (1u << pin)) ? 1 : 0; + + return (0); +} + +static int +mtk_gpio_pin_toggle(device_t dev, uint32_t pin) +{ + struct mtk_gpio_softc *sc = device_get_softc(dev); + uint32_t val; + + if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + return (EINVAL); + + MTK_GPIO_LOCK(sc); + val = MTK_READ_4(sc, GPIO_PIODATA(sc)); + val &= (1u << pin); + if (val) + MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); + else + MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); + MTK_GPIO_UNLOCK(sc); + + return (0); +} + +static int +mtk_gpio_pic_map_intr(device_t dev, struct intr_map_data *data, + struct intr_irqsrc **isrcp) +{ + struct mtk_gpio_softc *sc; + + sc = device_get_softc(dev); + + if (data == NULL || data->type != INTR_MAP_DATA_FDT || + data->fdt.ncells != 1 || data->fdt.cells[0] >= sc->num_pins) + return (EINVAL); + + *isrcp = PIC_INTR_ISRC(sc, data->fdt.cells[0]); + return (0); +} + +static void +mtk_gpio_pic_enable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + uint32_t pin, mask, val; + + sc = device_get_softc(dev); + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + pin = pisrc->irq; + mask = 1u << pin; + + MTK_GPIO_LOCK(sc); + + if (sc->pins[pin].intr_polarity == INTR_POLARITY_LOW) { + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) | mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + } else { + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) | mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + } + + MTK_GPIO_UNLOCK(sc); +} + +static void +mtk_gpio_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + uint32_t pin, mask, val; + + sc = device_get_softc(dev); + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + pin = pisrc->irq; + mask = 1u << pin; + + MTK_GPIO_LOCK(sc); + + val = MTK_READ_4(sc, GPIO_PIORENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIORENA(sc), val); + val = MTK_READ_4(sc, GPIO_PIOFENA(sc)) & ~mask; + MTK_WRITE_4(sc, GPIO_PIOFENA(sc), val); + + MTK_GPIO_UNLOCK(sc); +} + +static void +mtk_gpio_pic_pre_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gpio_pic_disable_intr(dev, isrc); +} + +static void +mtk_gpio_pic_post_ithread(device_t dev, struct intr_irqsrc *isrc) +{ + + mtk_gpio_pic_enable_intr(dev, isrc); +} + +static void +mtk_gpio_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) +{ + struct mtk_gpio_softc *sc; + struct mtk_gpio_pin_irqsrc *pisrc; + + pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; + sc = device_get_softc(dev); + MTK_WRITE_4(sc, GPIO_PIOINT(sc), 1u << pisrc->irq); +} + +static int +mtk_gpio_intr(void *arg) +{ + struct mtk_gpio_softc *sc; + uint32_t i, interrupts; + + sc = arg; + interrupts = MTK_READ_4(sc, GPIO_PIOINT(sc)); + + for (i = 0; interrupts != 0; i++, interrupts >>= 1) { + if ((interrupts & 0x1) == 0) + continue; + if (intr_isrc_dispatch(PIC_INTR_ISRC(sc, i), + curthread->td_intr_frame) != 0) { + device_printf(sc->dev, "spurious interrupt %d\n", i); + } + } + + return (FILTER_HANDLED); +} + +static phandle_t +mtk_gpio_get_node(device_t bus, device_t dev) +{ + + /* We only have one child, the GPIO bus, which needs our own node. */ + return (ofw_bus_get_node(bus)); +} + +static device_method_t mtk_gpio_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_gpio_probe), + DEVMETHOD(device_attach, mtk_gpio_attach), + DEVMETHOD(device_detach, mtk_gpio_detach), + + /* GPIO protocol */ + DEVMETHOD(gpio_get_bus, mtk_gpio_get_bus), + DEVMETHOD(gpio_pin_max, mtk_gpio_pin_max), + DEVMETHOD(gpio_pin_getname, mtk_gpio_pin_getname), + DEVMETHOD(gpio_pin_getflags, mtk_gpio_pin_getflags), + DEVMETHOD(gpio_pin_getcaps, mtk_gpio_pin_getcaps), + DEVMETHOD(gpio_pin_setflags, mtk_gpio_pin_setflags), + DEVMETHOD(gpio_pin_get, mtk_gpio_pin_get), + DEVMETHOD(gpio_pin_set, mtk_gpio_pin_set), + DEVMETHOD(gpio_pin_toggle, mtk_gpio_pin_toggle), + + /* Interrupt controller interface */ + DEVMETHOD(pic_disable_intr, mtk_gpio_pic_disable_intr), + DEVMETHOD(pic_enable_intr, mtk_gpio_pic_enable_intr), + DEVMETHOD(pic_map_intr, mtk_gpio_pic_map_intr), + DEVMETHOD(pic_post_filter, mtk_gpio_pic_post_filter), + DEVMETHOD(pic_post_ithread, mtk_gpio_pic_post_ithread), + DEVMETHOD(pic_pre_ithread, mtk_gpio_pic_pre_ithread), + + /* ofw_bus interface */ + DEVMETHOD(ofw_bus_get_node, mtk_gpio_get_node), + + DEVMETHOD_END +}; + +static driver_t mtk_gpio_driver = { + "gpio", + mtk_gpio_methods, + sizeof(struct mtk_gpio_softc), +}; + +static devclass_t mtk_gpio_devclass; + +EARLY_DRIVER_MODULE(mtk_gpio_v2, simplebus, mtk_gpio_driver, + mtk_gpio_devclass, 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_LATE); -- cgit v1.1 From b67819482f622eca834d2d2070bd49098c305ea2 Mon Sep 17 00:00:00 2001 From: skra Date: Thu, 7 Apr 2016 15:16:33 +0000 Subject: Fix intr_irq_shuffle(). After r297539, ISRCs doing IPI may be also registered into global interrupt table. Thus, they must be filtered out like per-cpu interrupts. Fortunately, it does not influence anything on interrupt controllers which already use INTRNG. --- sys/kern/subr_intr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c index 6e6241b..dc1e487 100644 --- a/sys/kern/subr_intr.c +++ b/sys/kern/subr_intr.c @@ -1190,7 +1190,7 @@ intr_irq_shuffle(void *arg __unused) for (i = 0; i < NIRQ; i++) { isrc = irq_sources[i]; if (isrc == NULL || isrc->isrc_handlers == 0 || - isrc->isrc_flags & INTR_ISRCF_PPI) + isrc->isrc_flags & (INTR_ISRCF_PPI | INTR_ISRCF_IPI)) continue; if (isrc->isrc_event != NULL && -- cgit v1.1 From 03e016b04f7869d12810f7dbb77b5bafb62ca9ba Mon Sep 17 00:00:00 2001 From: skra Date: Thu, 7 Apr 2016 15:26:12 +0000 Subject: Properly initialize isrc_cpu field of ISRC which is setup for an IPI. --- sys/arm/arm/gic.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sys/arm/arm/gic.c b/sys/arm/arm/gic.c index 922e386..5c0aece 100644 --- a/sys/arm/arm/gic.c +++ b/sys/arm/arm/gic.c @@ -1003,13 +1003,18 @@ arm_gic_ipi_send(device_t dev, struct intr_irqsrc *isrc, cpuset_t cpus, static int arm_gic_ipi_setup(device_t dev, u_int ipi, struct intr_irqsrc **isrcp) { + struct intr_irqsrc *isrc; struct arm_gic_softc *sc = device_get_softc(dev); if (sgi_first_unused > GIC_LAST_SGI) return (ENOSPC); - *isrcp = GIC_INTR_ISRC(sc, sgi_first_unused); + isrc = GIC_INTR_ISRC(sc, sgi_first_unused); sgi_to_ipi[sgi_first_unused++] = ipi; + + CPU_SET(PCPU_GET(cpuid), &isrc->isrc_cpu); + + *isrcp = isrc; return (0); } #endif -- cgit v1.1 From eb925cdf00743d23b2dfdc0c9d749485a95f24ce Mon Sep 17 00:00:00 2001 From: gahr Date: Thu, 7 Apr 2016 16:12:38 +0000 Subject: Enhance uuencode with a -r option to produce raw output. This matches with uudecode's -r option to decode raw data without initial and final framing lines. $ echo Test | uuencode -mr - | uudecode -mr Test Approved by: cognet MFC after: 1 week --- usr.bin/uuencode/uuencode.1 | 4 ++++ usr.bin/uuencode/uuencode.c | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/usr.bin/uuencode/uuencode.1 b/usr.bin/uuencode/uuencode.1 index 2c31bdc..9ce7e05 100644 --- a/usr.bin/uuencode/uuencode.1 +++ b/usr.bin/uuencode/uuencode.1 @@ -40,6 +40,7 @@ .Sh SYNOPSIS .Nm .Op Fl m +.Op Fl r .Op Fl o Ar output_file .Op Ar file .Ar name @@ -50,6 +51,7 @@ .Op Fl i .Fl o Ar output_file .Nm b64encode +.Op Fl r .Op Fl o Ar output_file .Op Ar file .Ar name @@ -123,6 +125,8 @@ The following options are available for Use the Base64 method of encoding, rather than the traditional .Nm algorithm. +.It Fl r +Produce raw output by excluding the initial and final framing lines. .It Fl o Ar output_file Output to .Ar output_file diff --git a/usr.bin/uuencode/uuencode.c b/usr.bin/uuencode/uuencode.c index def8bcc..500dcd3 100644 --- a/usr.bin/uuencode/uuencode.c +++ b/usr.bin/uuencode/uuencode.c @@ -66,6 +66,7 @@ static void usage(void); static FILE *output; static int mode; +static char raw = 0; static char **av; int @@ -82,7 +83,7 @@ main(int argc, char *argv[]) if (strcmp(basename(argv[0]), "b64encode") == 0) base64 = 1; - while ((ch = getopt(argc, argv, "mo:")) != -1) { + while ((ch = getopt(argc, argv, "mo:r")) != -1) { switch (ch) { case 'm': base64 = 1; @@ -90,6 +91,9 @@ main(int argc, char *argv[]) case 'o': outfile = optarg; break; + case 'r': + raw = 1; + break; case '?': default: usage(); @@ -152,7 +156,8 @@ base64_encode(void) sequence = 0; - fprintf(output, "begin-base64 %o %s\n", mode, *av); + if (!raw) + fprintf(output, "begin-base64 %o %s\n", mode, *av); while ((n = fread(buf, 1, sizeof(buf), stdin))) { ++sequence; rv = b64_ntop(buf, n, buf2, (sizeof(buf2) / sizeof(buf2[0]))); @@ -162,7 +167,8 @@ base64_encode(void) } if (sequence % GROUPS) fprintf(output, "\n"); - fprintf(output, "====\n"); + if (!raw) + fprintf(output, "====\n"); } /* @@ -175,7 +181,8 @@ encode(void) register char *p; char buf[80]; - (void)fprintf(output, "begin %o %s\n", mode, *av); + if (!raw) + (void)fprintf(output, "begin %o %s\n", mode, *av); while ((n = fread(buf, 1, 45, stdin))) { ch = ENC(n); if (fputc(ch, output) == EOF) @@ -209,7 +216,8 @@ encode(void) } if (ferror(stdin)) errx(1, "read error"); - (void)fprintf(output, "%c\nend\n", ENC('\0')); + if (!raw) + (void)fprintf(output, "%c\nend\n", ENC('\0')); } static void -- cgit v1.1 From 07227124862241463a10be15edbe413babb68e8e Mon Sep 17 00:00:00 2001 From: jhb Date: Thu, 7 Apr 2016 17:15:16 +0000 Subject: Associate device_t objects with ACPI handles via PCI_CHILD_ADDED(). Previously, the ACPI PCI bus driver did a single pass over the devices in the namespace that were a child of a given PCI bus to associate the PCI bus-enumerated device_t devices with the corresponding ACPI handles. However, this meant that handles were only established at runtime for devices found during the initial PCI bus scan. PCI_IOV adds devices that show up after the initial PCI bus scan, and coming changes to add a bus rescan can also add devices after the initial scan. This change adds a pci_child_added() callback to the ACPI PCI bus that walks the namespace to find the ACPI handle for each device that is added. Using a callback means that the handle is correctly set for any device no matter how it is added (initial scan, IOV, or a bus rescan). --- sys/dev/acpica/acpi_pci.c | 56 ++++++++++++++++++++---------------------- sys/dev/acpica/acpi_pcivar.h | 38 ++++++++++++++++++++++++++++ sys/dev/xen/pci/xen_acpi_pci.c | 11 ++++++++- 3 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 sys/dev/acpica/acpi_pcivar.h diff --git a/sys/dev/acpica/acpi_pci.c b/sys/dev/acpica/acpi_pci.c index 09cecc3..1dee131 100644 --- a/sys/dev/acpica/acpi_pci.c +++ b/sys/dev/acpica/acpi_pci.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -104,6 +105,7 @@ static device_method_t acpi_pci_methods[] = { DEVMETHOD(bus_get_domain, acpi_get_domain), /* PCI interface */ + DEVMETHOD(pci_child_added, acpi_pci_child_added), DEVMETHOD(pci_set_powerstate, acpi_pci_set_powerstate_method), #ifdef PCI_IOV DEVMETHOD(pci_create_iov_child, acpi_pci_create_iov_child), @@ -271,31 +273,35 @@ acpi_pci_save_handle(ACPI_HANDLE handle, UINT32 level, void *context, void **status) { struct acpi_pci_devinfo *dinfo; - device_t *devlist; - int devcount, i, func, slot; + device_t child; + int func, slot; UINT32 address; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); + child = context; if (ACPI_FAILURE(acpi_GetInteger(handle, "_ADR", &address))) return_ACPI_STATUS (AE_OK); slot = ACPI_ADR_PCI_SLOT(address); func = ACPI_ADR_PCI_FUNC(address); - if (device_get_children((device_t)context, &devlist, &devcount) != 0) - return_ACPI_STATUS (AE_OK); - for (i = 0; i < devcount; i++) { - dinfo = device_get_ivars(devlist[i]); - if (dinfo->ap_dinfo.cfg.func == func && - dinfo->ap_dinfo.cfg.slot == slot) { - dinfo->ap_handle = handle; - acpi_pci_update_device(handle, devlist[i]); - break; - } + dinfo = device_get_ivars(child); + if (dinfo->ap_dinfo.cfg.func == func && + dinfo->ap_dinfo.cfg.slot == slot) { + dinfo->ap_handle = handle; + acpi_pci_update_device(handle, child); + return_ACPI_STATUS (AE_CTRL_TERMINATE); } - free(devlist, M_TEMP); return_ACPI_STATUS (AE_OK); } +void +acpi_pci_child_added(device_t dev, device_t child) +{ + + AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1, + acpi_pci_save_handle, NULL, child, NULL); +} + static int acpi_pci_probe(device_t dev) { @@ -325,18 +331,18 @@ acpi_pci_attach(device_t dev) busno = pcib_get_bus(dev); /* - * First, PCI devices are added as in the normal PCI bus driver. - * Afterwards, the ACPI namespace under the bridge driver is - * walked to save ACPI handles to all the devices that appear in - * the ACPI namespace as immediate descendants of the bridge. + * PCI devices are added via the bus scan in the normal PCI + * bus driver. As each device is added, the + * acpi_pci_child_added() callback walks the ACPI namespace + * under the bridge driver to save ACPI handles to all the + * devices that appear in the ACPI namespace as immediate + * descendants of the bridge. * * XXX: Sometimes PCI devices show up in the ACPI namespace that * pci_add_children() doesn't find. We currently just ignore * these devices. */ pci_add_children(dev, domain, busno, sizeof(struct acpi_pci_devinfo)); - AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1, - acpi_pci_save_handle, NULL, dev, NULL); return (bus_generic_attach(dev)); } @@ -371,17 +377,9 @@ static device_t acpi_pci_create_iov_child(device_t bus, device_t pf, uint16_t rid, uint16_t vid, uint16_t did) { - struct acpi_pci_devinfo *dinfo; - device_t vf; - - vf = pci_add_iov_child(bus, pf, sizeof(struct acpi_pci_devinfo), rid, - vid, did); - if (vf == NULL) - return (NULL); - dinfo = device_get_ivars(vf); - dinfo->ap_handle = NULL; - return (vf); + return (pci_add_iov_child(bus, pf, sizeof(struct acpi_pci_devinfo), rid, + vid, did)); } #endif diff --git a/sys/dev/acpica/acpi_pcivar.h b/sys/dev/acpica/acpi_pcivar.h new file mode 100644 index 0000000..a720cc2 --- /dev/null +++ b/sys/dev/acpica/acpi_pcivar.h @@ -0,0 +1,38 @@ +/*- + * Copyright (c) 2016 John Baldwin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _ACPI_PCIVAR_H_ +#define _ACPI_PCIVAR_H_ + +#ifdef _KERNEL + +void acpi_pci_child_added(device_t dev, device_t child); + +#endif + +#endif /* !_ACPI_PCIVAR_H_ */ diff --git a/sys/dev/xen/pci/xen_acpi_pci.c b/sys/dev/xen/pci/xen_acpi_pci.c index 0eadd4a..11797fb 100644 --- a/sys/dev/xen/pci/xen_acpi_pci.c +++ b/sys/dev/xen/pci/xen_acpi_pci.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -65,6 +66,14 @@ xen_acpi_pci_probe(device_t dev) return (BUS_PROBE_SPECIFIC); } +static void +xen_acpi_pci_child_added(device_t dev, device_t child) +{ + + acpi_pci_child_added(dev, child); + xen_pci_child_added_method(dev, child); +} + static device_method_t xen_acpi_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, xen_acpi_pci_probe), @@ -72,7 +81,7 @@ static device_method_t xen_acpi_pci_methods[] = { /* PCI interface overwrites */ DEVMETHOD(pci_enable_msi, xen_pci_enable_msi_method), DEVMETHOD(pci_disable_msi, xen_pci_disable_msi_method), - DEVMETHOD(pci_child_added, xen_pci_child_added_method), + DEVMETHOD(pci_child_added, xen_acpi_pci_child_added), DEVMETHOD_END }; -- cgit v1.1 From b04802100628537587131b4ef04b339f23d5a033 Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 7 Apr 2016 17:45:01 +0000 Subject: Comestic changes; when INTRNG support was added, some functions became oddly separated from related functionality. This just moves some blocks of code around so that setup_intr and teardown_intr are near each other again, and likewise for enable/disable_intr. No functional changes. --- sys/arm/freescale/imx/imx_gpio.c | 80 ++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/sys/arm/freescale/imx/imx_gpio.c b/sys/arm/freescale/imx/imx_gpio.c index cdff020..e67aa66 100644 --- a/sys/arm/freescale/imx/imx_gpio.c +++ b/sys/arm/freescale/imx/imx_gpio.c @@ -157,45 +157,6 @@ static int imx51_gpio_pin_toggle(device_t, uint32_t pin); #ifdef ARM_INTRNG static int -gpio_pic_teardown_intr(device_t dev, struct intr_irqsrc *isrc, - struct resource *res, struct intr_map_data *data) -{ - struct imx51_gpio_softc *sc; - struct gpio_irqsrc *gi; - - sc = device_get_softc(dev); - if (isrc->isrc_handlers == 0) { - gi = (struct gpio_irqsrc *)isrc; - gi->gi_pol = INTR_POLARITY_CONFORM; - gi->gi_trig = INTR_TRIGGER_CONFORM; - - // XXX Not sure this is necessary - mtx_lock_spin(&sc->sc_mtx); - CLEAR4(sc, IMX_GPIO_IMR_REG, (1U << gi->gi_irq)); - WRITE4(sc, IMX_GPIO_ISR_REG, (1U << gi->gi_irq)); - mtx_unlock_spin(&sc->sc_mtx); - } - return (0); -} - -/* - * this is mask_intr - */ -static void -gpio_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) -{ - struct imx51_gpio_softc *sc; - u_int irq; - - sc = device_get_softc(dev); - irq = ((struct gpio_irqsrc *)isrc)->gi_irq; - - mtx_lock_spin(&sc->sc_mtx); - CLEAR4(sc, IMX_GPIO_IMR_REG, (1U << irq)); - mtx_unlock_spin(&sc->sc_mtx); -} - -static int gpio_pic_map_fdt(device_t dev, u_int ncells, pcell_t *cells, u_int *irqp, enum intr_polarity *polp, enum intr_trigger *trigp) { @@ -279,6 +240,28 @@ gpio_pic_map_intr(device_t dev, struct intr_map_data *data, } static int +gpio_pic_teardown_intr(device_t dev, struct intr_irqsrc *isrc, + struct resource *res, struct intr_map_data *data) +{ + struct imx51_gpio_softc *sc; + struct gpio_irqsrc *gi; + + sc = device_get_softc(dev); + if (isrc->isrc_handlers == 0) { + gi = (struct gpio_irqsrc *)isrc; + gi->gi_pol = INTR_POLARITY_CONFORM; + gi->gi_trig = INTR_TRIGGER_CONFORM; + + // XXX Not sure this is necessary + mtx_lock_spin(&sc->sc_mtx); + CLEAR4(sc, IMX_GPIO_IMR_REG, (1U << gi->gi_irq)); + WRITE4(sc, IMX_GPIO_ISR_REG, (1U << gi->gi_irq)); + mtx_unlock_spin(&sc->sc_mtx); + } + return (0); +} + +static int gpio_pic_setup_intr(device_t dev, struct intr_irqsrc *isrc, struct resource *res, struct intr_map_data *data) { @@ -345,6 +328,23 @@ gpio_pic_setup_intr(device_t dev, struct intr_irqsrc *isrc, } /* + * this is mask_intr + */ +static void +gpio_pic_disable_intr(device_t dev, struct intr_irqsrc *isrc) +{ + struct imx51_gpio_softc *sc; + u_int irq; + + sc = device_get_softc(dev); + irq = ((struct gpio_irqsrc *)isrc)->gi_irq; + + mtx_lock_spin(&sc->sc_mtx); + CLEAR4(sc, IMX_GPIO_IMR_REG, (1U << irq)); + mtx_unlock_spin(&sc->sc_mtx); +} + +/* * this is unmask_intr */ static void @@ -417,7 +417,7 @@ gpio_pic_filter(void *arg) } /* - * register our isrcs into intrng to make it known about them. + * Initialize our isrcs and register them with intrng. */ static int gpio_pic_register_isrcs(struct imx51_gpio_softc *sc) -- cgit v1.1 From da39bc2a5473a8e43c137ad0ebb83b6a230a8ec8 Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 7 Apr 2016 18:19:09 +0000 Subject: Fix a copyright glitch before it gets copy-pasted again. I think this must have started as collateral damage in a global search-replace, then it got copied around when I cloned a file to begin creating a new file. --- sys/arm/arm/locore.S | 2 +- sys/arm/arm/physmem.c | 2 +- sys/mips/mips/ofw_machdep.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/arm/arm/locore.S b/sys/arm/arm/locore.S index 2aecb7e..0a6a2d3 100644 --- a/sys/arm/arm/locore.S +++ b/sys/arm/arm/locore.S @@ -1,6 +1,6 @@ /*- * Copyright (c) 2014 Ian Lepore - * All rights excluded. + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/sys/arm/arm/physmem.c b/sys/arm/arm/physmem.c index d023905..f6222c3 100644 --- a/sys/arm/arm/physmem.c +++ b/sys/arm/arm/physmem.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2014 Ian Lepore - * All rights excluded. + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/sys/mips/mips/ofw_machdep.c b/sys/mips/mips/ofw_machdep.c index 26bc260..6b840e7 100644 --- a/sys/mips/mips/ofw_machdep.c +++ b/sys/mips/mips/ofw_machdep.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2015 Ian Lepore - * All rights excluded. + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions -- cgit v1.1 From d1312255dfda198688cc3865c5da8b0bf08f5672 Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 7 Apr 2016 19:17:47 +0000 Subject: Code cleanup: stop searching for a pin in the array and just use the pin number directly as an index. We create the array ourselves and nothing can change the order of items in it, it's a simple 1:1 mapping. --- sys/arm/freescale/imx/imx_gpio.c | 66 +++++++++------------------------------- 1 file changed, 15 insertions(+), 51 deletions(-) diff --git a/sys/arm/freescale/imx/imx_gpio.c b/sys/arm/freescale/imx/imx_gpio.c index e67aa66..96b54fb 100644 --- a/sys/arm/freescale/imx/imx_gpio.c +++ b/sys/arm/freescale/imx/imx_gpio.c @@ -497,19 +497,14 @@ static int imx51_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); - *caps = sc->gpio_pins[i].gp_caps; + *caps = sc->gpio_pins[pin].gp_caps; mtx_unlock_spin(&sc->sc_mtx); return (0); @@ -519,19 +514,14 @@ static int imx51_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); - *flags = sc->gpio_pins[i].gp_flags; + *flags = sc->gpio_pins[pin].gp_flags; mtx_unlock_spin(&sc->sc_mtx); return (0); @@ -541,19 +531,13 @@ static int imx51_gpio_pin_getname(device_t dev, uint32_t pin, char *name) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); - memcpy(name, sc->gpio_pins[i].gp_name, GPIOMAXNAME); + memcpy(name, sc->gpio_pins[pin].gp_name, GPIOMAXNAME); mtx_unlock_spin(&sc->sc_mtx); return (0); @@ -563,18 +547,13 @@ static int imx51_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); - imx51_gpio_pin_configure(sc, &sc->gpio_pins[i], flags); + imx51_gpio_pin_configure(sc, &sc->gpio_pins[pin], flags); return (0); } @@ -583,22 +562,17 @@ static int imx51_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); if (value) - SET4(sc, IMX_GPIO_DR_REG, (1U << i)); + SET4(sc, IMX_GPIO_DR_REG, (1U << pin)); else - CLEAR4(sc, IMX_GPIO_DR_REG, (1U << i)); + CLEAR4(sc, IMX_GPIO_DR_REG, (1U << pin)); mtx_unlock_spin(&sc->sc_mtx); return (0); @@ -608,19 +582,14 @@ static int imx51_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); - *val = (READ4(sc, IMX_GPIO_DR_REG) >> i) & 1; + *val = (READ4(sc, IMX_GPIO_DR_REG) >> pin) & 1; mtx_unlock_spin(&sc->sc_mtx); return (0); @@ -630,20 +599,15 @@ static int imx51_gpio_pin_toggle(device_t dev, uint32_t pin) { struct imx51_gpio_softc *sc; - int i; sc = device_get_softc(dev); - for (i = 0; i < sc->gpio_npins; i++) { - if (sc->gpio_pins[i].gp_pin == pin) - break; - } - if (i >= sc->gpio_npins) + if (pin >= sc->gpio_npins) return (EINVAL); mtx_lock_spin(&sc->sc_mtx); WRITE4(sc, IMX_GPIO_DR_REG, - (READ4(sc, IMX_GPIO_DR_REG) ^ (1U << i))); + (READ4(sc, IMX_GPIO_DR_REG) ^ (1U << pin))); mtx_unlock_spin(&sc->sc_mtx); return (0); -- cgit v1.1 From 4a670a48704efbbc8611576a75f4987f92800b2a Mon Sep 17 00:00:00 2001 From: ian Date: Thu, 7 Apr 2016 19:51:27 +0000 Subject: Remove unecessary locking, mostly from places where a read is done of a value that can't ever be in an inconsistant intermediate state even when some other thread is in the middle of writing the value/register. Locking of the hardware remains in the few places that do r-m-w operations. Locking of metadata access is restricted to places using memcpy or sprintf to modify the metadata. --- sys/arm/freescale/imx/imx_gpio.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/sys/arm/freescale/imx/imx_gpio.c b/sys/arm/freescale/imx/imx_gpio.c index 96b54fb..df0f2ad 100644 --- a/sys/arm/freescale/imx/imx_gpio.c +++ b/sys/arm/freescale/imx/imx_gpio.c @@ -451,22 +451,27 @@ static void imx51_gpio_pin_configure(struct imx51_gpio_softc *sc, struct gpio_pin *pin, unsigned int flags) { + u_int newflags; mtx_lock_spin(&sc->sc_mtx); /* - * Manage input/output + * Manage input/output; other flags not supported yet. + * + * Note that changes to pin->gp_flags must be acccumulated in newflags + * and stored with a single writeback to gp_flags at the end, to enable + * unlocked reads of that value elsewhere. */ - if (flags & (GPIO_PIN_INPUT|GPIO_PIN_OUTPUT)) { - pin->gp_flags &= ~(GPIO_PIN_INPUT|GPIO_PIN_OUTPUT); + if (flags & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT)) { + newflags = pin->gp_flags & ~(GPIO_PIN_INPUT | GPIO_PIN_OUTPUT); if (flags & GPIO_PIN_OUTPUT) { - pin->gp_flags |= GPIO_PIN_OUTPUT; + newflags |= GPIO_PIN_OUTPUT; SET4(sc, IMX_GPIO_OE_REG, (1U << pin->gp_pin)); - } - else { - pin->gp_flags |= GPIO_PIN_INPUT; + } else { + newflags |= GPIO_PIN_INPUT; CLEAR4(sc, IMX_GPIO_OE_REG, (1U << pin->gp_pin)); } + pin->gp_flags = newflags; } mtx_unlock_spin(&sc->sc_mtx); @@ -503,9 +508,7 @@ imx51_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) if (pin >= sc->gpio_npins) return (EINVAL); - mtx_lock_spin(&sc->sc_mtx); *caps = sc->gpio_pins[pin].gp_caps; - mtx_unlock_spin(&sc->sc_mtx); return (0); } @@ -520,9 +523,7 @@ imx51_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) if (pin >= sc->gpio_npins) return (EINVAL); - mtx_lock_spin(&sc->sc_mtx); *flags = sc->gpio_pins[pin].gp_flags; - mtx_unlock_spin(&sc->sc_mtx); return (0); } @@ -588,9 +589,7 @@ imx51_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) if (pin >= sc->gpio_npins) return (EINVAL); - mtx_lock_spin(&sc->sc_mtx); *val = (READ4(sc, IMX_GPIO_DR_REG) >> pin) & 1; - mtx_unlock_spin(&sc->sc_mtx); return (0); } -- cgit v1.1 From bb8c3b811d9a971519e5ec1a9246cdfcf758cae0 Mon Sep 17 00:00:00 2001 From: emaste Date: Thu, 7 Apr 2016 20:12:45 +0000 Subject: Add option to specify built-in keymap for kbdmux PR: 153459 Submitted by: swell.k@gmail.com --- sys/conf/NOTES | 4 ++++ sys/conf/files | 4 ++++ sys/conf/options | 2 ++ sys/dev/kbdmux/kbdmux.c | 8 ++++++++ sys/modules/kbdmux/Makefile | 2 +- 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sys/conf/NOTES b/sys/conf/NOTES index c9fce2e..42570fe 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -1409,6 +1409,10 @@ options MSGBUF_SIZE=40960 options KBD_DISABLE_KEYMAP_LOAD # refuse to load a keymap options KBD_INSTALL_CDEV # install a CDEV entry in /dev +device kbdmux # keyboard multiplexer +options KBDMUX_DFLT_KEYMAP # specify the built-in keymap +makeoptions KBDMUX_DFLT_KEYMAP=it.iso + options FB_DEBUG # Frame buffer debugging device splash # Splash screen and screen saver support diff --git a/sys/conf/files b/sys/conf/files index e2dbc67..46e9768 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -47,6 +47,10 @@ pccarddevs.h standard \ compile-with "${AWK} -f $S/tools/pccarddevs2h.awk $S/dev/pccard/pccarddevs" \ no-obj no-implicit-rule before-depend \ clean "pccarddevs.h" +kbdmuxmap.h optional kbdmux_dflt_keymap \ + compile-with "kbdcontrol -P ${S:S/sys$/share/}/vt/keymaps -P ${S:S/sys$/share/}/syscons/keymaps -L ${KBDMUX_DFLT_KEYMAP} | sed -e 's/^static keymap_t.* = /static keymap_t key_map = /' -e 's/^static accentmap_t.* = /static accentmap_t accent_map = /' > kbdmuxmap.h" \ + no-obj no-implicit-rule before-depend \ + clean "kbdmuxmap.h" teken_state.h optional sc | vt \ dependency "$S/teken/gensequences $S/teken/sequences" \ compile-with "${AWK} -f $S/teken/gensequences $S/teken/sequences > teken_state.h" \ diff --git a/sys/conf/options b/sys/conf/options index 4df24a5..f2fef26 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -801,6 +801,8 @@ KBD_MAXWAIT opt_kbd.h KBD_RESETDELAY opt_kbd.h KBDIO_DEBUG opt_kbd.h +KBDMUX_DFLT_KEYMAP opt_kbdmux.h + # options for the Atheros driver ATH_DEBUG opt_ath.h ATH_TXBUF opt_ath.h diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c index a21b37c..0dce120 100644 --- a/sys/dev/kbdmux/kbdmux.c +++ b/sys/dev/kbdmux/kbdmux.c @@ -33,6 +33,7 @@ #include "opt_compat.h" #include "opt_kbd.h" +#include "opt_kbdmux.h" #include #include @@ -54,6 +55,13 @@ #include #include #include + +/* the initial key map, accent map and fkey strings */ +#ifdef KBDMUX_DFLT_KEYMAP +#define KBD_DFLT_KEYMAP +#include "kbdmuxmap.h" +#endif + #include #define KEYBOARD_NAME "kbdmux" diff --git a/sys/modules/kbdmux/Makefile b/sys/modules/kbdmux/Makefile index 70b39a0..363343a 100644 --- a/sys/modules/kbdmux/Makefile +++ b/sys/modules/kbdmux/Makefile @@ -4,7 +4,7 @@ .PATH: ${.CURDIR}/../../dev/kbdmux KMOD= kbdmux -SRCS= kbdmux.c opt_compat.h opt_kbd.h bus_if.h device_if.h +SRCS= kbdmux.c opt_compat.h opt_kbd.h opt_kbdmux.h bus_if.h device_if.h .if !defined(KERNBUILDDIR) opt_compat.h: -- cgit v1.1 From 0a89d9e809921597168da5cf93ad6ee65ed195b8 Mon Sep 17 00:00:00 2001 From: emaste Date: Thu, 7 Apr 2016 20:26:27 +0000 Subject: Rename SHT_AMD64_UNWIND to SHT_X86_64_UNWIND per ABI doc From http://www.x86-64.org/documentation_folder/abi-0.99.pdf --- sys/sys/elf_common.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h index b4574f3..f4579c8 100644 --- a/sys/sys/elf_common.h +++ b/sys/sys/elf_common.h @@ -415,7 +415,8 @@ typedef struct { #define SHT_HISUNW 0x6fffffff #define SHT_HIOS 0x6fffffff /* Last of OS specific semantics */ #define SHT_LOPROC 0x70000000 /* reserved range for processor */ -#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */ +#define SHT_X86_64_UNWIND 0x70000001 /* unwind information */ +#define SHT_AMD64_UNWIND SHT_X86_64_UNWIND #define SHT_ARM_EXIDX 0x70000001 /* Exception index table. */ #define SHT_ARM_PREEMPTMAP 0x70000002 /* BPABI DLL dynamic linking -- cgit v1.1 From f6e1e7db8cd3d145b4a3cd526016ca225b7621a0 Mon Sep 17 00:00:00 2001 From: emaste Date: Thu, 7 Apr 2016 20:30:46 +0000 Subject: newvers.sh: rationalize licence condition numbering --- sys/conf/newvers.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/conf/newvers.sh b/sys/conf/newvers.sh index a5d4749..b8aeea5 100644 --- a/sys/conf/newvers.sh +++ b/sys/conf/newvers.sh @@ -11,7 +11,7 @@ # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. -# 4. Neither the name of the University nor the names of its contributors +# 3. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # -- cgit v1.1 From 0edb0feb114b38da0cb99f67e8cceb76d7a3cee8 Mon Sep 17 00:00:00 2001 From: pfg Date: Thu, 7 Apr 2016 21:33:14 +0000 Subject: chdone(): Prevent returning uninitialized scalar value. Improve over the solution in r297527: Instead of attempting to initialize all the possible cases, just move the check nearer to the case where it makes sense. CID: 1006486 Reviewed by: ken MFC after: 2 weeks --- sys/cam/scsi/scsi_ch.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sys/cam/scsi/scsi_ch.c b/sys/cam/scsi/scsi_ch.c index 8e069db..59ec6aa 100644 --- a/sys/cam/scsi/scsi_ch.c +++ b/sys/cam/scsi/scsi_ch.c @@ -648,10 +648,14 @@ chdone(struct cam_periph *periph, union ccb *done_ccb) softc->sc_counts[CHET_IE], PLURAL(softc->sc_counts[CHET_IE])); #undef PLURAL + if (announce_buf[0] != '\0') { + xpt_announce_periph(periph, announce_buf); + xpt_announce_quirks(periph, softc->quirks, + CH_Q_BIT_STRING); + } } else { int error; - announce_buf[0] = '\0'; error = cherror(done_ccb, CAM_RETRY_SELTO, SF_RETRY_UA | SF_NO_PRINT); /* @@ -715,14 +719,8 @@ chdone(struct cam_periph *periph, union ccb *done_ccb) cam_periph_invalidate(periph); - announce_buf[0] = '\0'; } } - if (announce_buf[0] != '\0') { - xpt_announce_periph(periph, announce_buf); - xpt_announce_quirks(periph, softc->quirks, - CH_Q_BIT_STRING); - } softc->state = CH_STATE_NORMAL; free(mode_header, M_SCSICH); /* -- cgit v1.1 From e5d329425c99d560a97d702594adc136edeba1dc Mon Sep 17 00:00:00 2001 From: jmcneill Date: Fri, 8 Apr 2016 00:01:19 +0000 Subject: Match on compatible string "allwinner,sun4i-a10-sram-controller" instead of "allwinner,sun4i-sramc", to match upstream DTS. --- sys/arm/allwinner/a10_sramc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/arm/allwinner/a10_sramc.c b/sys/arm/allwinner/a10_sramc.c index a26afbb..63c9946 100644 --- a/sys/arm/allwinner/a10_sramc.c +++ b/sys/arm/allwinner/a10_sramc.c @@ -71,7 +71,7 @@ static int a10_sramc_probe(device_t dev) { - if (ofw_bus_is_compatible(dev, "allwinner,sun4i-sramc")) { + if (ofw_bus_is_compatible(dev, "allwinner,sun4i-a10-sram-controller")) { device_set_desc(dev, "Allwinner sramc module"); return (BUS_PROBE_DEFAULT); } -- cgit v1.1 From 06e191b1f4d4f394459831c03a262c065f6251d9 Mon Sep 17 00:00:00 2001 From: sobomax Date: Fri, 8 Apr 2016 00:24:21 +0000 Subject: Document vfs.root.mountfrom. Reviewed by: imp, wblock Differential Revision: https://reviews.freebsd.org/D5332 --- sys/boot/forth/loader.conf.5 | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/sys/boot/forth/loader.conf.5 b/sys/boot/forth/loader.conf.5 index 0320e98..631250c 100644 --- a/sys/boot/forth/loader.conf.5 +++ b/sys/boot/forth/loader.conf.5 @@ -112,6 +112,31 @@ The name must be a subdirectory of that contains a kernel. .It Ar kernel_options Flags to be passed to the kernel. +.It Ar vfs.root.mountfrom +Specify the root partition to mount. +For example: +.Pp +.Dl vfs.root.mountfrom="ufs:/dev/da0s1a" +.Pp +.Xr loader 8 +automatically calculates the value of this tunable from +.Pa /etc/fstab +from the partition the kernel was loaded from. +The calculated value might be calculated incorrectly when +.Pa /etc/fstab +is not available during +.Xr loader 8 +startup (as during diskless booting from NFS), or if a different +device is desired by the user. +The preferred value can be set in +.Pa /loader.conf . +.Pp +The value can also be overridden from the +.Xr loader 8 +command line. +This is useful for system recovery when +.Pa /etc/fstab +is damaged, lost, or read from the wrong partition. .It Ar password Protect boot menu with a password without interrupting .Ic autoboot -- cgit v1.1 From 9554f17afbf54c0ff9989be2fc1ff9621632e4f9 Mon Sep 17 00:00:00 2001 From: allanjude Date: Fri, 8 Apr 2016 01:25:25 +0000 Subject: Create the GELIBOOT GEOM_ELI flag This flag indicates that the user wishes to use the GELIBOOT feature to boot from a fully encrypted root file system. Currently, GELIBOOT does not support key files, and in the future when it does, they will be loaded differently. Due to the design of GELI, and the desire for secrecy, the GELI metadata does not know if key files are used or not, it just adds the key material (if any) to the HMAC before the optional passphrase, so there is no way to tell if a GELI partition requires key files or not. Since the GELIBOOT code in boot2 and the loader does not support keys, they will now only attempt to attach if this flag is set. This will stop GELIBOOT from prompting for passwords to GELIs that it cannot decrypt, disrupting the boot process PR: 208251 Reviewed by: ed, oshogbo, wblock Sponsored by: ScaleEngine Inc. Differential Revision: https://reviews.freebsd.org/D5867 --- sbin/geom/class/eli/geli.8 | 16 ++++++++++++-- sbin/geom/class/eli/geom_eli.c | 50 ++++++++++++++++++++++++++++++++++-------- sys/geom/eli/g_eli.c | 1 + sys/geom/eli/g_eli.h | 2 ++ sys/geom/eli/g_eli_ctl.c | 33 +++++++++++++++++++++++++++- 5 files changed, 90 insertions(+), 12 deletions(-) diff --git a/sbin/geom/class/eli/geli.8 b/sbin/geom/class/eli/geli.8 index ed425da..e8a1ef0 100644 --- a/sbin/geom/class/eli/geli.8 +++ b/sbin/geom/class/eli/geli.8 @@ -51,7 +51,7 @@ utility: .Pp .Nm .Cm init -.Op Fl bPTv +.Op Fl bgPTv .Op Fl a Ar aalgo .Op Fl B Ar backupfile .Op Fl e Ar ealgo @@ -88,7 +88,7 @@ utility: .Ar prov .Nm .Cm configure -.Op Fl bBtT +.Op Fl bBgGtT .Ar prov ... .Nm .Cm setkey @@ -293,6 +293,11 @@ The default and recommended algorithm is .Nm AES-XTS . .Nm NULL is unencrypted. +.It Fl g +Enable booting from this encrypted root filesystem. +The boot loader prompts for the passphrase and loads +.Xr loader 8 +from the encrypted partition. .It Fl i Ar iterations Number of iterations to use with PKCS#5v2 when processing User Key passphrase component. @@ -485,6 +490,13 @@ For more information, see the description of the subcommand. .It Fl B Remove the BOOT flag from the given providers. +.It Fl g +Enable booting from this encrypted root filesystem. +The boot loader prompts for the passphrase and loads +.Xr loader 8 +from the encrypted partition. +.It Fl G +Deactivate booting from this encrypted root partition. .It Fl t Enable TRIM/UNMAP passthru. For more information, see the description of the diff --git a/sbin/geom/class/eli/geom_eli.c b/sbin/geom/class/eli/geom_eli.c index 0c6ca2c..c804622 100644 --- a/sbin/geom/class/eli/geom_eli.c +++ b/sbin/geom/class/eli/geom_eli.c @@ -82,13 +82,13 @@ static int eli_backup_create(struct gctl_req *req, const char *prov, /* * Available commands: * - * init [-bhPv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-J newpassfile] [-K newkeyfile] [-V version] prov + * init [-bgPTv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-J newpassfile] [-K newkeyfile] [-s sectorsize] [-V version] prov * label - alias for 'init' * attach [-dprv] [-j passfile] [-k keyfile] prov * detach [-fl] prov ... * stop - alias for 'detach' * onetime [-d] [-a aalgo] [-e ealgo] [-l keylen] prov - * configure [-bB] prov ... + * configure [-bBgGtT] prov ... * setkey [-pPv] [-n keyno] [-j passfile] [-J newpassfile] [-k keyfile] [-K newkeyfile] prov * delkey [-afv] [-n keyno] prov * suspend [-v] -a | prov ... @@ -108,6 +108,7 @@ struct g_command class_commands[] = { { 'b', "boot", NULL, G_TYPE_BOOL }, { 'B', "backupfile", "", G_TYPE_STRING }, { 'e', "ealgo", "", G_TYPE_STRING }, + { 'g', "geliboot", NULL, G_TYPE_BOOL }, { 'i', "iterations", "-1", G_TYPE_NUMBER }, { 'J', "newpassfile", G_VAL_OPTIONAL, G_TYPE_STRING | G_TYPE_MULTI }, { 'K', "newkeyfile", G_VAL_OPTIONAL, G_TYPE_STRING | G_TYPE_MULTI }, @@ -118,7 +119,7 @@ struct g_command class_commands[] = { { 'V', "mdversion", "-1", G_TYPE_NUMBER }, G_OPT_SENTINEL }, - "[-bPTv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-J newpassfile] [-K newkeyfile] [-s sectorsize] [-V version] prov" + "[-bgPTv] [-a aalgo] [-B backupfile] [-e ealgo] [-i iterations] [-l keylen] [-J newpassfile] [-K newkeyfile] [-s sectorsize] [-V version] prov" }, { "label", G_FLAG_VERBOSE, eli_main, { @@ -126,6 +127,7 @@ struct g_command class_commands[] = { { 'b', "boot", NULL, G_TYPE_BOOL }, { 'B', "backupfile", "", G_TYPE_STRING }, { 'e', "ealgo", "", G_TYPE_STRING }, + { 'g', "geliboot", NULL, G_TYPE_BOOL }, { 'i', "iterations", "-1", G_TYPE_NUMBER }, { 'J', "newpassfile", G_VAL_OPTIONAL, G_TYPE_STRING | G_TYPE_MULTI }, { 'K', "newkeyfile", G_VAL_OPTIONAL, G_TYPE_STRING | G_TYPE_MULTI }, @@ -180,11 +182,13 @@ struct g_command class_commands[] = { { { 'b', "boot", NULL, G_TYPE_BOOL }, { 'B', "noboot", NULL, G_TYPE_BOOL }, + { 'g', "geliboot", NULL, G_TYPE_BOOL }, + { 'G', "nogeliboot", NULL, G_TYPE_BOOL }, { 't', "trim", NULL, G_TYPE_BOOL }, { 'T', "notrim", NULL, G_TYPE_BOOL }, G_OPT_SENTINEL }, - "[-bBtT] prov ..." + "[-bBgGtT] prov ..." }, { "setkey", G_FLAG_VERBOSE, eli_main, { @@ -702,6 +706,8 @@ eli_init(struct gctl_req *req) md.md_flags = 0; if (gctl_get_int(req, "boot")) md.md_flags |= G_ELI_FLAG_BOOT; + if (gctl_get_int(req, "geliboot")) + md.md_flags |= G_ELI_FLAG_GELIBOOT; if (gctl_get_int(req, "notrim")) md.md_flags |= G_ELI_FLAG_NODELETE; md.md_ealgo = CRYPTO_ALGORITHM_MIN - 1; @@ -906,7 +912,7 @@ eli_attach(struct gctl_req *req) static void eli_configure_detached(struct gctl_req *req, const char *prov, int boot, - int trim) + int geliboot, int trim) { struct g_eli_metadata md; bool changed = 0; @@ -928,6 +934,20 @@ eli_configure_detached(struct gctl_req *req, const char *prov, int boot, changed = 1; } + if (geliboot == 1 && (md.md_flags & G_ELI_FLAG_GELIBOOT)) { + if (verbose) + printf("GELIBOOT flag already configured for %s.\n", prov); + } else if (geliboot == 0 && !(md.md_flags & G_ELI_FLAG_GELIBOOT)) { + if (verbose) + printf("GELIBOOT flag not configured for %s.\n", prov); + } else if (geliboot >= 0) { + if (geliboot) + md.md_flags |= G_ELI_FLAG_GELIBOOT; + else + md.md_flags &= ~G_ELI_FLAG_GELIBOOT; + changed = 1; + } + if (trim == 0 && (md.md_flags & G_ELI_FLAG_NODELETE)) { if (verbose) printf("TRIM disable flag already configured for %s.\n", prov); @@ -951,8 +971,8 @@ static void eli_configure(struct gctl_req *req) { const char *prov; - bool boot, noboot, trim, notrim; - int doboot, dotrim; + bool boot, noboot, geliboot, nogeliboot, trim, notrim; + int doboot, dogeliboot, dotrim; int i, nargs; nargs = gctl_get_int(req, "nargs"); @@ -963,6 +983,8 @@ eli_configure(struct gctl_req *req) boot = gctl_get_int(req, "boot"); noboot = gctl_get_int(req, "noboot"); + geliboot = gctl_get_int(req, "geliboot"); + nogeliboot = gctl_get_int(req, "nogeliboot"); trim = gctl_get_int(req, "trim"); notrim = gctl_get_int(req, "notrim"); @@ -976,6 +998,16 @@ eli_configure(struct gctl_req *req) else if (noboot) doboot = 0; + dogeliboot = -1; + if (geliboot && nogeliboot) { + gctl_error(req, "Options -g and -G are mutually exclusive."); + return; + } + if (geliboot) + dogeliboot = 1; + else if (nogeliboot) + dogeliboot = 0; + dotrim = -1; if (trim && notrim) { gctl_error(req, "Options -t and -T are mutually exclusive."); @@ -986,7 +1018,7 @@ eli_configure(struct gctl_req *req) else if (notrim) dotrim = 0; - if (doboot == -1 && dotrim == -1) { + if (doboot == -1 && dogeliboot == -1 && dotrim == -1) { gctl_error(req, "No option given."); return; } @@ -997,7 +1029,7 @@ eli_configure(struct gctl_req *req) for (i = 0; i < nargs; i++) { prov = gctl_get_ascii(req, "arg%d", i); if (!eli_is_attached(prov)) - eli_configure_detached(req, prov, doboot, dotrim); + eli_configure_detached(req, prov, doboot, dogeliboot, dotrim); } } diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c index a2b4e65..912a5c5 100644 --- a/sys/geom/eli/g_eli.c +++ b/sys/geom/eli/g_eli.c @@ -1181,6 +1181,7 @@ g_eli_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp, ADD_FLAG(G_ELI_FLAG_DESTROY, "DESTROY"); ADD_FLAG(G_ELI_FLAG_RO, "READ-ONLY"); ADD_FLAG(G_ELI_FLAG_NODELETE, "NODELETE"); + ADD_FLAG(G_ELI_FLAG_GELIBOOT, "GELIBOOT"); #undef ADD_FLAG } sbuf_printf(sb, "\n"); diff --git a/sys/geom/eli/g_eli.h b/sys/geom/eli/g_eli.h index 3deb865..13e7807 100644 --- a/sys/geom/eli/g_eli.h +++ b/sys/geom/eli/g_eli.h @@ -97,6 +97,8 @@ #define G_ELI_FLAG_RO 0x00000020 /* Don't pass through BIO_DELETE requests. */ #define G_ELI_FLAG_NODELETE 0x00000040 +/* This GELI supports GELIBoot */ +#define G_ELI_FLAG_GELIBOOT 0x00000080 /* RUNTIME FLAGS. */ /* Provider was open for writing. */ #define G_ELI_FLAG_WOPEN 0x00010000 diff --git a/sys/geom/eli/g_eli_ctl.c b/sys/geom/eli/g_eli_ctl.c index 9de7ec3..89e9f02 100644 --- a/sys/geom/eli/g_eli_ctl.c +++ b/sys/geom/eli/g_eli_ctl.c @@ -376,7 +376,7 @@ g_eli_ctl_configure(struct gctl_req *req, struct g_class *mp) char param[16]; const char *prov; u_char *sector; - int *nargs, *boot, *noboot, *trim, *notrim; + int *nargs, *boot, *noboot, *trim, *notrim, *geliboot, *nogeliboot; int zero, error, changed; u_int i; @@ -421,6 +421,19 @@ g_eli_ctl_configure(struct gctl_req *req, struct g_class *mp) if (*trim || *notrim) changed = 1; + geliboot = gctl_get_paraml(req, "geliboot", sizeof(*geliboot)); + if (geliboot == NULL) + geliboot = &zero; + nogeliboot = gctl_get_paraml(req, "nogeliboot", sizeof(*nogeliboot)); + if (nogeliboot == NULL) + nogeliboot = &zero; + if (*geliboot && *nogeliboot) { + gctl_error(req, "Options -g and -G are mutually exclusive."); + return; + } + if (*geliboot || *nogeliboot) + changed = 1; + if (!changed) { gctl_error(req, "No option given."); return; @@ -469,6 +482,16 @@ g_eli_ctl_configure(struct gctl_req *req, struct g_class *mp) continue; } + if (*geliboot && (sc->sc_flags & G_ELI_FLAG_GELIBOOT)) { + G_ELI_DEBUG(1, "GELIBOOT flag already configured for %s.", + prov); + continue; + } else if (*nogeliboot && !(sc->sc_flags & G_ELI_FLAG_GELIBOOT)) { + G_ELI_DEBUG(1, "GELIBOOT flag not configured for %s.", + prov); + continue; + } + if (!(sc->sc_flags & G_ELI_FLAG_ONETIME)) { /* * ONETIME providers don't write metadata to @@ -504,6 +527,14 @@ g_eli_ctl_configure(struct gctl_req *req, struct g_class *mp) sc->sc_flags &= ~G_ELI_FLAG_NODELETE; } + if (*geliboot) { + md.md_flags |= G_ELI_FLAG_GELIBOOT; + sc->sc_flags |= G_ELI_FLAG_GELIBOOT; + } else if (*nogeliboot) { + md.md_flags &= ~G_ELI_FLAG_GELIBOOT; + sc->sc_flags &= ~G_ELI_FLAG_GELIBOOT; + } + if (sc->sc_flags & G_ELI_FLAG_ONETIME) { /* There's no metadata on disk so we are done here. */ continue; -- cgit v1.1 From b11db0106389f678ff146b18f3526adb1b9675cd Mon Sep 17 00:00:00 2001 From: allanjude Date: Fri, 8 Apr 2016 01:27:40 +0000 Subject: GELIBoot should only prompt for the GELI passphrase if the provider has the G_ELI_FLAG_GELIBOOT set PR: 208251 Sponsored by: ScaleEngine Inc. Differential Revision: https://reviews.freebsd.org/D5870 --- sys/boot/geli/geliboot.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/boot/geli/geliboot.c b/sys/boot/geli/geliboot.c index c714616..df40c3b 100644 --- a/sys/boot/geli/geliboot.c +++ b/sys/boot/geli/geliboot.c @@ -90,12 +90,12 @@ geli_taste(int read_func(void *vdev, void *priv, off_t off, void *buf, return (error); } - if ((md.md_flags & G_ELI_FLAG_ONETIME)) { - /* Swap device, skip it. */ + if (!(md.md_flags & G_ELI_FLAG_GELIBOOT)) { + /* The GELIBOOT feature is not activated */ return (1); } - if (!(md.md_flags & G_ELI_FLAG_BOOT)) { - /* Disk is not GELI boot device, skip it. */ + if ((md.md_flags & G_ELI_FLAG_ONETIME)) { + /* Swap device, skip it. */ return (1); } if (md.md_iterations < 0) { -- cgit v1.1 From 99e1acfb71cd0afb9426daa85e3e274c091a9bb0 Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 8 Apr 2016 03:26:21 +0000 Subject: audit(8): leave unsigned comparison for last. aq64_minfree is unsigned so comparing to find out if it is less than zero is a nonsense. Move the comparison to the last position as we don't want to spend time if any of the others triggers first. hile it would be tempting to just remove it, it may be important to keep it for portability with platforms where may be signed(?) or in case we may want to change it in the future. --- sys/security/audit/audit_syscalls.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/security/audit/audit_syscalls.c b/sys/security/audit/audit_syscalls.c index 90d811d..73411a4 100644 --- a/sys/security/audit/audit_syscalls.c +++ b/sys/security/audit/audit_syscalls.c @@ -303,8 +303,8 @@ sys_auditon(struct thread *td, struct auditon_args *uap) (udata.au_qctrl64.aq64_lowater >= udata.au_qctrl.aq_hiwater) || (udata.au_qctrl64.aq64_bufsz > AQ_MAXBUFSZ) || - (udata.au_qctrl64.aq64_minfree < 0) || - (udata.au_qctrl64.aq64_minfree > 100)) + (udata.au_qctrl64.aq64_minfree > 100) || + (udata.au_qctrl64.aq64_minfree < 0)) return (EINVAL); audit_qctrl.aq_hiwater = (int)udata.au_qctrl64.aq64_hiwater; -- cgit v1.1 From 87acea459d6cad730ac0e2db71e9f7478942c987 Mon Sep 17 00:00:00 2001 From: kevlo Date: Fri, 8 Apr 2016 04:29:05 +0000 Subject: Fix comment. --- sys/fs/ext2fs/ext2_vfsops.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/fs/ext2fs/ext2_vfsops.c b/sys/fs/ext2fs/ext2_vfsops.c index fab98a5..a1f3c51 100644 --- a/sys/fs/ext2fs/ext2_vfsops.c +++ b/sys/fs/ext2fs/ext2_vfsops.c @@ -308,8 +308,8 @@ ext2_check_sb_compat(struct ext2fs *es, struct cdev *dev, int ronly) } /* - * This computes the fields of the ext2_sb_info structure from the - * data in the ext2_super_block structure read in. + * This computes the fields of the m_ext2fs structure from the + * data in the ext2fs structure read in. */ static int compute_sb_data(struct vnode *devvp, struct ext2fs *es, @@ -600,7 +600,7 @@ ext2_mountfs(struct vnode *devvp, struct mount *mp) /* * I don't know whether this is the right strategy. Note that - * we dynamically allocate both an ext2_sb_info and an ext2_super_block + * we dynamically allocate both an m_ext2fs and an ext2fs * while Linux keeps the super block in a locked buffer. */ ump->um_e2fs = malloc(sizeof(struct m_ext2fs), -- cgit v1.1 From 04cd58cb68f84e0599e6f24e99b53829298b54cf Mon Sep 17 00:00:00 2001 From: hselasky Date: Fri, 8 Apr 2016 06:51:49 +0000 Subject: Add new USB quirk. Submitted by: AJ PR: 208623 MFC after: 1 week --- sys/dev/usb/quirk/usb_quirk.c | 3 +++ sys/dev/usb/usbdevs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c index 5af2136..6f6dac7 100644 --- a/sys/dev/usb/quirk/usb_quirk.c +++ b/sys/dev/usb/quirk/usb_quirk.c @@ -529,6 +529,9 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = { /* DYMO LabelManager Pnp */ USB_QUIRK(DYMO, LABELMANAGERPNP, 0x0000, 0xffff, UQ_MSC_DYMO_EJECT), + + /* Holtek USB gaming keyboard */ + USB_QUIRK(HOLTEK, F85, 0x0000, 0xffff, UQ_KBD_BOOTPROTO), }; #undef USB_QUIRK_VP #undef USB_QUIRK diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index 7f75d5a..a2df3e4 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -2268,6 +2268,9 @@ product HIDGLOBAL CM6020 0x1784 Omnikey Cardman 6020 product HITACHI DVDCAM_DZ_MV100A 0x0004 DVD-CAM DZ-MV100A Camcorder product HITACHI DVDCAM_USB 0x001e DVDCAM USB HS Interface +/* Holtek products */ +product HOLTEK F85 0xa030 Holtek USB gaming keyboard + /* HP products */ product HP 895C 0x0004 DeskJet 895C product HP 4100C 0x0101 Scanjet 4100C -- cgit v1.1 From e099b3defecad889c8551888e1fb721a4dedab27 Mon Sep 17 00:00:00 2001 From: sephe Date: Fri, 8 Apr 2016 09:20:46 +0000 Subject: hyperv: Revert r297481 Use vm_guest == VM_GUEST_HV is not enough to determine whether FreeBSD is running on Hyper-V or not. What a mess. Reported by: smokehydration tutanota com Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index a87b5ce..a423328 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -36,7 +36,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -208,6 +207,8 @@ hv_vmbus_init(void) hv_vmbus_g_context.hypercall_page = virt_addr; + tc_init(&hv_timecounter); /* register virtual timecount */ + hv_et_init(); return (0); @@ -436,14 +437,3 @@ void hv_vmbus_synic_cleanup(void *arg) wrmsr(HV_X64_MSR_SIEFP, siefp.as_uint64_t); } -static void -hv_tc_init(void) -{ - if (vm_guest != VM_GUEST_HV) - return; - - /* register virtual timecounter */ - tc_init(&hv_timecounter); -} - -SYSINIT(hv_tc_init, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hv_tc_init, NULL); -- cgit v1.1 From 21446f2890b124fd46c7f3b1244f0f24d80670b3 Mon Sep 17 00:00:00 2001 From: kib Date: Fri, 8 Apr 2016 10:21:43 +0000 Subject: Assert that the lock objects put into the off-page, fit into the page. Sponsored by: The FreeBSD Foundation --- lib/libthr/thread/thr_barrier.c | 3 +++ lib/libthr/thread/thr_cond.c | 3 +++ lib/libthr/thread/thr_mutex.c | 3 +++ lib/libthr/thread/thr_pspinlock.c | 3 +++ lib/libthr/thread/thr_rwlock.c | 3 +++ 5 files changed, 15 insertions(+) diff --git a/lib/libthr/thread/thr_barrier.c b/lib/libthr/thread/thr_barrier.c index 45ca41a..ad4477d 100644 --- a/lib/libthr/thread/thr_barrier.c +++ b/lib/libthr/thread/thr_barrier.c @@ -34,6 +34,9 @@ #include "thr_private.h" +_Static_assert(sizeof(struct pthread_barrier) <= PAGE_SIZE, + "pthread_barrier is too large for off-page"); + __weak_reference(_pthread_barrier_init, pthread_barrier_init); __weak_reference(_pthread_barrier_wait, pthread_barrier_wait); __weak_reference(_pthread_barrier_destroy, pthread_barrier_destroy); diff --git a/lib/libthr/thread/thr_cond.c b/lib/libthr/thread/thr_cond.c index 934f9a0..13487bf 100644 --- a/lib/libthr/thread/thr_cond.c +++ b/lib/libthr/thread/thr_cond.c @@ -40,6 +40,9 @@ #include "thr_private.h" +_Static_assert(sizeof(struct pthread_cond) <= PAGE_SIZE, + "pthread_cond too large"); + /* * Prototypes */ diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c index 865e4cf..f732a63 100644 --- a/lib/libthr/thread/thr_mutex.c +++ b/lib/libthr/thread/thr_mutex.c @@ -51,6 +51,9 @@ #include "thr_private.h" +_Static_assert(sizeof(struct pthread_mutex) <= PAGE_SIZE, + "pthread_mutex is too large for off-page"); + /* * For adaptive mutexes, how many times to spin doing trylock2 * before entering the kernel to block diff --git a/lib/libthr/thread/thr_pspinlock.c b/lib/libthr/thread/thr_pspinlock.c index 1c9b412..124e97b 100644 --- a/lib/libthr/thread/thr_pspinlock.c +++ b/lib/libthr/thread/thr_pspinlock.c @@ -38,6 +38,9 @@ #include "thr_private.h" +_Static_assert(sizeof(struct pthread_spinlock) <= PAGE_SIZE, + "pthread_spinlock is too large for off-page"); + #define SPIN_COUNT 100000 __weak_reference(_pthread_spin_init, pthread_spin_init); diff --git a/lib/libthr/thread/thr_rwlock.c b/lib/libthr/thread/thr_rwlock.c index aadd0e9..8e9fd73 100644 --- a/lib/libthr/thread/thr_rwlock.c +++ b/lib/libthr/thread/thr_rwlock.c @@ -35,6 +35,9 @@ #include "un-namespace.h" #include "thr_private.h" +_Static_assert(sizeof(struct pthread_rwlock) <= PAGE_SIZE, + "pthread_rwlock is too large for off-page"); + __weak_reference(_pthread_rwlock_destroy, pthread_rwlock_destroy); __weak_reference(_pthread_rwlock_init, pthread_rwlock_init); __weak_reference(_pthread_rwlock_rdlock, pthread_rwlock_rdlock); -- cgit v1.1 From 7c6ea895eee6bde9c649866fc1d6f46830c6bea1 Mon Sep 17 00:00:00 2001 From: kib Date: Fri, 8 Apr 2016 10:23:48 +0000 Subject: Use the ABI-prescribed name for SHT_X86_64_UNWIND in the loader and kernel linker, after the r297686. Sponsored by: The FreeBSD Foundation --- sys/boot/common/load_elf_obj.c | 2 +- sys/kern/link_elf_obj.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sys/boot/common/load_elf_obj.c b/sys/boot/common/load_elf_obj.c index 285a88e..a32b9fd 100644 --- a/sys/boot/common/load_elf_obj.c +++ b/sys/boot/common/load_elf_obj.c @@ -222,7 +222,7 @@ __elfN(obj_loadimage)(struct preloaded_file *fp, elf_file_t ef, u_int64_t off) case SHT_PROGBITS: case SHT_NOBITS: #if defined(__i386__) || defined(__amd64__) - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif lastaddr = roundup(lastaddr, shdr[i].sh_addralign); shdr[i].sh_addr = (Elf_Addr)lastaddr; diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c index 012d5b7..575a706 100644 --- a/sys/kern/link_elf_obj.c +++ b/sys/kern/link_elf_obj.c @@ -258,7 +258,7 @@ link_elf_link_preload(linker_class_t cls, const char *filename, case SHT_PROGBITS: case SHT_NOBITS: #ifdef __amd64__ - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif ef->nprogtab++; break; @@ -331,13 +331,13 @@ link_elf_link_preload(linker_class_t cls, const char *filename, case SHT_PROGBITS: case SHT_NOBITS: #ifdef __amd64__ - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif ef->progtab[pb].addr = (void *)shdr[i].sh_addr; if (shdr[i].sh_type == SHT_PROGBITS) ef->progtab[pb].name = "<>"; #ifdef __amd64__ - else if (shdr[i].sh_type == SHT_AMD64_UNWIND) + else if (shdr[i].sh_type == SHT_X86_64_UNWIND) ef->progtab[pb].name = "<>"; #endif else @@ -597,7 +597,7 @@ link_elf_load_file(linker_class_t cls, const char *filename, case SHT_PROGBITS: case SHT_NOBITS: #ifdef __amd64__ - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif ef->nprogtab++; break; @@ -712,7 +712,7 @@ link_elf_load_file(linker_class_t cls, const char *filename, case SHT_PROGBITS: case SHT_NOBITS: #ifdef __amd64__ - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif alignmask = shdr[i].sh_addralign - 1; mapsize += alignmask; @@ -782,7 +782,7 @@ link_elf_load_file(linker_class_t cls, const char *filename, case SHT_PROGBITS: case SHT_NOBITS: #ifdef __amd64__ - case SHT_AMD64_UNWIND: + case SHT_X86_64_UNWIND: #endif alignmask = shdr[i].sh_addralign - 1; mapbase += alignmask; @@ -797,7 +797,7 @@ link_elf_load_file(linker_class_t cls, const char *filename, } else if (shdr[i].sh_type == SHT_PROGBITS) ef->progtab[pb].name = "<>"; #ifdef __amd64__ - else if (shdr[i].sh_type == SHT_AMD64_UNWIND) + else if (shdr[i].sh_type == SHT_X86_64_UNWIND) ef->progtab[pb].name = "<>"; #endif else @@ -823,7 +823,7 @@ link_elf_load_file(linker_class_t cls, const char *filename, ef->progtab[pb].sec = i; if (shdr[i].sh_type == SHT_PROGBITS #ifdef __amd64__ - || shdr[i].sh_type == SHT_AMD64_UNWIND + || shdr[i].sh_type == SHT_X86_64_UNWIND #endif ) { error = vn_rdwr(UIO_READ, nd.ni_vp, -- cgit v1.1 From 6ec3e5b2420d57ec774b63a0ae6f36acd527f525 Mon Sep 17 00:00:00 2001 From: jmcneill Date: Fri, 8 Apr 2016 10:54:59 +0000 Subject: Add function for mapping SRAM-D area to USB0 (OTG) controller. Use a lower pass number to ensure that this driver is loaded before EMAC or OTG, regardless of the order of nodes in the DT. --- sys/arm/allwinner/a10_sramc.c | 21 ++++++++++++++++++++- sys/arm/allwinner/a10_sramc.h | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/sys/arm/allwinner/a10_sramc.c b/sys/arm/allwinner/a10_sramc.c index 63c9946..22ba1f7 100644 --- a/sys/arm/allwinner/a10_sramc.c +++ b/sys/arm/allwinner/a10_sramc.c @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #include "a10_sramc.h" #define SRAM_CTL1_CFG 0x04 +#define CTL1_CFG_SRAMD_MAP_USB0 (1 << 0) struct a10_sramc_softc { struct resource *res; @@ -113,7 +114,8 @@ static driver_t a10_sramc_driver = { static devclass_t a10_sramc_devclass; -DRIVER_MODULE(a10_sramc, simplebus, a10_sramc_driver, a10_sramc_devclass, 0, 0); +EARLY_DRIVER_MODULE(a10_sramc, simplebus, a10_sramc_driver, a10_sramc_devclass, + 0, 0, BUS_PASS_RESOURCE + BUS_PASS_ORDER_EARLY); int a10_map_to_emac(void) @@ -131,3 +133,20 @@ a10_map_to_emac(void) return (0); } + +int +a10_map_to_otg(void) +{ + struct a10_sramc_softc *sc = a10_sramc_sc; + uint32_t reg_value; + + if (sc == NULL) + return (ENXIO); + + /* Map SRAM to OTG */ + reg_value = sramc_read_4(sc, SRAM_CTL1_CFG); + reg_value |= CTL1_CFG_SRAMD_MAP_USB0; + sramc_write_4(sc, SRAM_CTL1_CFG, reg_value); + + return (0); +} diff --git a/sys/arm/allwinner/a10_sramc.h b/sys/arm/allwinner/a10_sramc.h index 9c906df..d66a8f2 100644 --- a/sys/arm/allwinner/a10_sramc.h +++ b/sys/arm/allwinner/a10_sramc.h @@ -30,5 +30,6 @@ #define _A10_SRAMC_H_ int a10_map_to_emac(void); +int a10_map_to_otg(void); #endif -- cgit v1.1 From 7dbfd5ad027d5eede9963cdaf6b072e4981ef62b Mon Sep 17 00:00:00 2001 From: kib Date: Fri, 8 Apr 2016 10:59:06 +0000 Subject: Use ANSI C function definitions, fix spelling in a comment. Sponsored by: The FreeBSD Foundation --- lib/libthr/thread/thr_main_np.c | 4 ++-- lib/libthr/thread/thr_multi_np.c | 2 +- lib/libthr/thread/thr_single_np.c | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/libthr/thread/thr_main_np.c b/lib/libthr/thread/thr_main_np.c index bfa8b87..f6244f3 100644 --- a/lib/libthr/thread/thr_main_np.c +++ b/lib/libthr/thread/thr_main_np.c @@ -37,10 +37,10 @@ __weak_reference(_pthread_main_np, pthread_main_np); /* - * Provide the equivelant to Solaris thr_main() function + * Provide the equivalent to Solaris thr_main() function. */ int -_pthread_main_np() +_pthread_main_np(void) { if (!_thr_initial) diff --git a/lib/libthr/thread/thr_multi_np.c b/lib/libthr/thread/thr_multi_np.c index 339a21d..013bdfa 100644 --- a/lib/libthr/thread/thr_multi_np.c +++ b/lib/libthr/thread/thr_multi_np.c @@ -37,7 +37,7 @@ __weak_reference(_pthread_multi_np, pthread_multi_np); int -_pthread_multi_np() +_pthread_multi_np(void) { /* Return to multi-threaded scheduling mode: */ diff --git a/lib/libthr/thread/thr_single_np.c b/lib/libthr/thread/thr_single_np.c index 81bdf8c..af0c32b 100644 --- a/lib/libthr/thread/thr_single_np.c +++ b/lib/libthr/thread/thr_single_np.c @@ -36,7 +36,8 @@ __weak_reference(_pthread_single_np, pthread_single_np); -int _pthread_single_np() +int +_pthread_single_np(void) { /* Enter single-threaded (non-POSIX) scheduling mode: */ -- cgit v1.1 From 3f81fe2ce06b0be2c179e60d88d8316d47f0c5a2 Mon Sep 17 00:00:00 2001 From: ae Date: Fri, 8 Apr 2016 11:13:24 +0000 Subject: Fix regression introduced in r296986. Currently we don't keep zoneid in in6_ifaddr structure, because there is still some code, that doesn't properly initialize sin6_scope_id, but some functions use sa_equal() for addresses comparison. sa_equal() compares full sockaddr_in6 structures and such comparison will fail. For now use zero zoneid in in6ifa_ifwithaddr(). It is safe, because used address is in embedded form. In future we will use zoneid, so mark it with XXX comment. Reported by: kp Tested by: kp --- sys/netinet6/in6_src.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c index 40b4723..54c0a0a 100644 --- a/sys/netinet6/in6_src.c +++ b/sys/netinet6/in6_src.c @@ -255,7 +255,7 @@ in6_selectsrc(uint32_t fibnum, struct sockaddr_in6 *dstsock, * ancillary data. */ if ((inp->inp_flags & INP_BINDANY) == 0) { - ia = in6ifa_ifwithaddr(&tmp, odstzone); + ia = in6ifa_ifwithaddr(&tmp, 0 /* XXX */); if (ia == NULL || (ia->ia6_flags & (IN6_IFF_ANYCAST | IN6_IFF_NOTREADY))) { if (ia != NULL) -- cgit v1.1 From fe92c9d1a421512e227c74db8239456b35dd7f15 Mon Sep 17 00:00:00 2001 From: kib Date: Fri, 8 Apr 2016 11:15:26 +0000 Subject: Use __FBSDID() for .c files from lib/libthr/thread. Sponsored by: The FreeBSD Foundation --- lib/libthr/thread/thr_affinity.c | 6 +++--- lib/libthr/thread/thr_attr.c | 5 +++-- lib/libthr/thread/thr_autoinit.c | 5 +++-- lib/libthr/thread/thr_barrier.c | 5 +++-- lib/libthr/thread/thr_barrierattr.c | 5 +++-- lib/libthr/thread/thr_cancel.c | 6 +++--- lib/libthr/thread/thr_clean.c | 5 +++-- lib/libthr/thread/thr_concurrency.c | 5 +++-- lib/libthr/thread/thr_cond.c | 5 +++-- lib/libthr/thread/thr_condattr.c | 5 +++-- lib/libthr/thread/thr_create.c | 5 +++-- lib/libthr/thread/thr_detach.c | 6 +++--- lib/libthr/thread/thr_equal.c | 6 ++++-- lib/libthr/thread/thr_event.c | 5 +++-- lib/libthr/thread/thr_exit.c | 5 +++-- lib/libthr/thread/thr_fork.c | 5 +++-- lib/libthr/thread/thr_getcpuclockid.c | 5 +++-- lib/libthr/thread/thr_getprio.c | 6 ++++-- lib/libthr/thread/thr_getschedparam.c | 5 +++-- lib/libthr/thread/thr_getthreadid_np.c | 5 +++-- lib/libthr/thread/thr_info.c | 5 +++-- lib/libthr/thread/thr_init.c | 5 +++-- lib/libthr/thread/thr_join.c | 6 +++--- lib/libthr/thread/thr_kern.c | 5 +++-- lib/libthr/thread/thr_kill.c | 5 +++-- lib/libthr/thread/thr_list.c | 5 +++-- lib/libthr/thread/thr_main_np.c | 5 +++-- lib/libthr/thread/thr_multi_np.c | 5 +++-- lib/libthr/thread/thr_mutex.c | 5 +++-- lib/libthr/thread/thr_mutexattr.c | 5 +++-- lib/libthr/thread/thr_once.c | 6 +++--- lib/libthr/thread/thr_printf.c | 5 +++-- lib/libthr/thread/thr_pspinlock.c | 5 +++-- lib/libthr/thread/thr_resume_np.c | 5 +++-- lib/libthr/thread/thr_rtld.c | 6 +++--- lib/libthr/thread/thr_rwlock.c | 5 +++-- lib/libthr/thread/thr_rwlockattr.c | 5 +++-- lib/libthr/thread/thr_self.c | 5 +++-- lib/libthr/thread/thr_sem.c | 5 +++-- lib/libthr/thread/thr_setprio.c | 5 +++-- lib/libthr/thread/thr_setschedparam.c | 5 +++-- lib/libthr/thread/thr_sig.c | 5 +++-- lib/libthr/thread/thr_single_np.c | 5 +++-- lib/libthr/thread/thr_sleepq.c | 5 +++-- lib/libthr/thread/thr_spec.c | 5 +++-- lib/libthr/thread/thr_spinlock.c | 6 +++--- lib/libthr/thread/thr_stack.c | 5 +++-- lib/libthr/thread/thr_suspend_np.c | 5 +++-- lib/libthr/thread/thr_switch_np.c | 5 +++-- lib/libthr/thread/thr_symbols.c | 5 +++-- lib/libthr/thread/thr_umtx.c | 6 +++--- lib/libthr/thread/thr_yield.c | 5 +++-- 52 files changed, 158 insertions(+), 112 deletions(-) diff --git a/lib/libthr/thread/thr_affinity.c b/lib/libthr/thread/thr_affinity.c index 7e9b0f9..e76ca2a 100644 --- a/lib/libthr/thread/thr_affinity.c +++ b/lib/libthr/thread/thr_affinity.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_attr.c b/lib/libthr/thread/thr_attr.c index 0cac528..ff9eb2d5 100644 --- a/lib/libthr/thread/thr_attr.c +++ b/lib/libthr/thread/thr_attr.c @@ -89,10 +89,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_autoinit.c b/lib/libthr/thread/thr_autoinit.c index c425569..7d9e52c 100644 --- a/lib/libthr/thread/thr_autoinit.c +++ b/lib/libthr/thread/thr_autoinit.c @@ -29,10 +29,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include "thr_private.h" diff --git a/lib/libthr/thread/thr_barrier.c b/lib/libthr/thread/thr_barrier.c index ad4477d..dd8f48e 100644 --- a/lib/libthr/thread/thr_barrier.c +++ b/lib/libthr/thread/thr_barrier.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_barrierattr.c b/lib/libthr/thread/thr_barrierattr.c index e98a66f..acaa059 100644 --- a/lib/libthr/thread/thr_barrierattr.c +++ b/lib/libthr/thread/thr_barrierattr.c @@ -24,10 +24,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_cancel.c b/lib/libthr/thread/thr_cancel.c index beae707..c080931 100644 --- a/lib/libthr/thread/thr_cancel.c +++ b/lib/libthr/thread/thr_cancel.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include "un-namespace.h" diff --git a/lib/libthr/thread/thr_clean.c b/lib/libthr/thread/thr_clean.c index f200726..62e3db2 100644 --- a/lib/libthr/thread/thr_clean.c +++ b/lib/libthr/thread/thr_clean.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_concurrency.c b/lib/libthr/thread/thr_concurrency.c index 61f0c4a..24714e6 100644 --- a/lib/libthr/thread/thr_concurrency.c +++ b/lib/libthr/thread/thr_concurrency.c @@ -28,10 +28,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_cond.c b/lib/libthr/thread/thr_cond.c index 13487bf..0e37b70 100644 --- a/lib/libthr/thread/thr_cond.c +++ b/lib/libthr/thread/thr_cond.c @@ -26,10 +26,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_condattr.c b/lib/libthr/thread/thr_condattr.c index 7ce827b..906ea77 100644 --- a/lib/libthr/thread/thr_condattr.c +++ b/lib/libthr/thread/thr_condattr.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c index 81a95da..ee2c727 100644 --- a/lib/libthr/thread/thr_create.c +++ b/lib/libthr/thread/thr_create.c @@ -23,10 +23,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_detach.c b/lib/libthr/thread/thr_detach.c index c494f7c..f03731f 100644 --- a/lib/libthr/thread/thr_detach.c +++ b/lib/libthr/thread/thr_detach.c @@ -23,11 +23,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_equal.c b/lib/libthr/thread/thr_equal.c index 2f602b5..a9eed8c 100644 --- a/lib/libthr/thread/thr_equal.c +++ b/lib/libthr/thread/thr_equal.c @@ -25,9 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ + +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include "un-namespace.h" diff --git a/lib/libthr/thread/thr_event.c b/lib/libthr/thread/thr_event.c index 716d21e..982f86a 100644 --- a/lib/libthr/thread/thr_event.c +++ b/lib/libthr/thread/thr_event.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "thr_private.h" void diff --git a/lib/libthr/thread/thr_exit.c b/lib/libthr/thread/thr_exit.c index 7001311..e76623c 100644 --- a/lib/libthr/thread/thr_exit.c +++ b/lib/libthr/thread/thr_exit.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #ifdef _PTHREAD_FORCED_UNWIND diff --git a/lib/libthr/thread/thr_fork.c b/lib/libthr/thread/thr_fork.c index 531e09c..1a646b0 100644 --- a/lib/libthr/thread/thr_fork.c +++ b/lib/libthr/thread/thr_fork.c @@ -23,8 +23,6 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ /* @@ -57,6 +55,9 @@ * */ +#include +__FBSDID("$FreeBSD$"); + #include #include "namespace.h" #include diff --git a/lib/libthr/thread/thr_getcpuclockid.c b/lib/libthr/thread/thr_getcpuclockid.c index b4ec666..1ad6a08 100644 --- a/lib/libthr/thread/thr_getcpuclockid.c +++ b/lib/libthr/thread/thr_getcpuclockid.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_getprio.c b/lib/libthr/thread/thr_getprio.c index f0d1a296..033f4f5 100644 --- a/lib/libthr/thread/thr_getprio.c +++ b/lib/libthr/thread/thr_getprio.c @@ -25,9 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ + +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_getschedparam.c b/lib/libthr/thread/thr_getschedparam.c index ff6c3ab..04ff399 100644 --- a/lib/libthr/thread/thr_getschedparam.c +++ b/lib/libthr/thread/thr_getschedparam.c @@ -28,10 +28,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_getthreadid_np.c b/lib/libthr/thread/thr_getthreadid_np.c index f963a56..e7b496e 100644 --- a/lib/libthr/thread/thr_getthreadid_np.c +++ b/lib/libthr/thread/thr_getthreadid_np.c @@ -21,10 +21,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_info.c b/lib/libthr/thread/thr_info.c index 350c848..4e4f41e 100644 --- a/lib/libthr/thread/thr_info.c +++ b/lib/libthr/thread/thr_info.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c index c9f30ab..c852406 100644 --- a/lib/libthr/thread/thr_init.c +++ b/lib/libthr/thread/thr_init.c @@ -29,10 +29,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_join.c b/lib/libthr/thread/thr_join.c index a39ff67..42bd749 100644 --- a/lib/libthr/thread/thr_join.c +++ b/lib/libthr/thread/thr_join.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_kern.c b/lib/libthr/thread/thr_kern.c index b5a8358..6463f1d 100644 --- a/lib/libthr/thread/thr_kern.c +++ b/lib/libthr/thread/thr_kern.c @@ -23,10 +23,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_kill.c b/lib/libthr/thread/thr_kill.c index 8b0f683..15928b1 100644 --- a/lib/libthr/thread/thr_kill.c +++ b/lib/libthr/thread/thr_kill.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_list.c b/lib/libthr/thread/thr_list.c index d27d87d..ae1f124 100644 --- a/lib/libthr/thread/thr_list.c +++ b/lib/libthr/thread/thr_list.c @@ -23,10 +23,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include diff --git a/lib/libthr/thread/thr_main_np.c b/lib/libthr/thread/thr_main_np.c index f6244f3..9558adf 100644 --- a/lib/libthr/thread/thr_main_np.c +++ b/lib/libthr/thread/thr_main_np.c @@ -23,10 +23,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_multi_np.c b/lib/libthr/thread/thr_multi_np.c index 013bdfa..74379f5 100644 --- a/lib/libthr/thread/thr_multi_np.c +++ b/lib/libthr/thread/thr_multi_np.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c index f732a63..28fd9ee 100644 --- a/lib/libthr/thread/thr_mutex.c +++ b/lib/libthr/thread/thr_mutex.c @@ -34,10 +34,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include "namespace.h" #include diff --git a/lib/libthr/thread/thr_mutexattr.c b/lib/libthr/thread/thr_mutexattr.c index fa349cf..a9e07c2 100644 --- a/lib/libthr/thread/thr_mutexattr.c +++ b/lib/libthr/thread/thr_mutexattr.c @@ -25,8 +25,6 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ /* @@ -59,6 +57,9 @@ * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_once.c b/lib/libthr/thread/thr_once.c index 208b703..80739da 100644 --- a/lib/libthr/thread/thr_once.c +++ b/lib/libthr/thread/thr_once.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include "un-namespace.h" diff --git a/lib/libthr/thread/thr_printf.c b/lib/libthr/thread/thr_printf.c index a64b446..ed94287 100644 --- a/lib/libthr/thread/thr_printf.c +++ b/lib/libthr/thread/thr_printf.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_pspinlock.c b/lib/libthr/thread/thr_pspinlock.c index 124e97b..1c83b25 100644 --- a/lib/libthr/thread/thr_pspinlock.c +++ b/lib/libthr/thread/thr_pspinlock.c @@ -26,10 +26,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_resume_np.c b/lib/libthr/thread/thr_resume_np.c index 53377da..d11e328 100644 --- a/lib/libthr/thread/thr_resume_np.c +++ b/lib/libthr/thread/thr_resume_np.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_rtld.c b/lib/libthr/thread/thr_rtld.c index 6c407d1..6f5347d 100644 --- a/lib/libthr/thread/thr_rtld.c +++ b/lib/libthr/thread/thr_rtld.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + /* * A lockless rwlock for rtld. */ diff --git a/lib/libthr/thread/thr_rwlock.c b/lib/libthr/thread/thr_rwlock.c index 8e9fd73..748eb52 100644 --- a/lib/libthr/thread/thr_rwlock.c +++ b/lib/libthr/thread/thr_rwlock.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_rwlockattr.c b/lib/libthr/thread/thr_rwlockattr.c index b9e442e..56174ed 100644 --- a/lib/libthr/thread/thr_rwlockattr.c +++ b/lib/libthr/thread/thr_rwlockattr.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_self.c b/lib/libthr/thread/thr_self.c index 72cda7e..65ad631 100644 --- a/lib/libthr/thread/thr_self.c +++ b/lib/libthr/thread/thr_self.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include "un-namespace.h" diff --git a/lib/libthr/thread/thr_sem.c b/lib/libthr/thread/thr_sem.c index f20bde3..a8b02ac 100644 --- a/lib/libthr/thread/thr_sem.c +++ b/lib/libthr/thread/thr_sem.c @@ -26,10 +26,11 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_setprio.c b/lib/libthr/thread/thr_setprio.c index 4b7d2c0..6f8a009 100644 --- a/lib/libthr/thread/thr_setprio.c +++ b/lib/libthr/thread/thr_setprio.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include "un-namespace.h" diff --git a/lib/libthr/thread/thr_setschedparam.c b/lib/libthr/thread/thr_setschedparam.c index 6e98fb4..4db09e7 100644 --- a/lib/libthr/thread/thr_setschedparam.c +++ b/lib/libthr/thread/thr_setschedparam.c @@ -28,10 +28,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_sig.c b/lib/libthr/thread/thr_sig.c index ebb6c58..ce7e70b 100644 --- a/lib/libthr/thread/thr_sig.c +++ b/lib/libthr/thread/thr_sig.c @@ -22,10 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_single_np.c b/lib/libthr/thread/thr_single_np.c index af0c32b..32bc586 100644 --- a/lib/libthr/thread/thr_single_np.c +++ b/lib/libthr/thread/thr_single_np.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_sleepq.c b/lib/libthr/thread/thr_sleepq.c index c5dcac5..5ecd6f9 100644 --- a/lib/libthr/thread/thr_sleepq.c +++ b/lib/libthr/thread/thr_sleepq.c @@ -22,10 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include "thr_private.h" diff --git a/lib/libthr/thread/thr_spec.c b/lib/libthr/thread/thr_spec.c index b53c4b7..46d4ddf 100644 --- a/lib/libthr/thread/thr_spec.c +++ b/lib/libthr/thread/thr_spec.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_spinlock.c b/lib/libthr/thread/thr_spinlock.c index 380d10d..6639612 100644 --- a/lib/libthr/thread/thr_spinlock.c +++ b/lib/libthr/thread/thr_spinlock.c @@ -25,11 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_stack.c b/lib/libthr/thread/thr_stack.c index 74e1329..3510a74 100644 --- a/lib/libthr/thread/thr_stack.c +++ b/lib/libthr/thread/thr_stack.c @@ -23,10 +23,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_suspend_np.c b/lib/libthr/thread/thr_suspend_np.c index 284619d..48d4bc1 100644 --- a/lib/libthr/thread/thr_suspend_np.c +++ b/lib/libthr/thread/thr_suspend_np.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_switch_np.c b/lib/libthr/thread/thr_switch_np.c index f6ffb07..4380386 100644 --- a/lib/libthr/thread/thr_switch_np.c +++ b/lib/libthr/thread/thr_switch_np.c @@ -28,10 +28,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include diff --git a/lib/libthr/thread/thr_symbols.c b/lib/libthr/thread/thr_symbols.c index ea323c5..9eef8db 100644 --- a/lib/libthr/thread/thr_symbols.c +++ b/lib/libthr/thread/thr_symbols.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include #include #include diff --git a/lib/libthr/thread/thr_umtx.c b/lib/libthr/thread/thr_umtx.c index 37e5df1..ebf344b 100644 --- a/lib/libthr/thread/thr_umtx.c +++ b/lib/libthr/thread/thr_umtx.c @@ -22,11 +22,11 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * */ +#include +__FBSDID("$FreeBSD$"); + #include "thr_private.h" #include "thr_umtx.h" diff --git a/lib/libthr/thread/thr_yield.c b/lib/libthr/thread/thr_yield.c index c3f68f2..1739495 100644 --- a/lib/libthr/thread/thr_yield.c +++ b/lib/libthr/thread/thr_yield.c @@ -25,10 +25,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include +__FBSDID("$FreeBSD$"); + #include "namespace.h" #include #include -- cgit v1.1 From fabab043a546b89419e02abfdc27cd7748dc284e Mon Sep 17 00:00:00 2001 From: wma Date: Fri, 8 Apr 2016 11:20:56 +0000 Subject: Speedup BGX link polling on ARM64 The previous values caused the callout thread stall for 100ms each 2s if no link is present. Dtrace analysis showed that it has significant impact on overall interrupt performance. Decrease these values by a factor of 100. Obtained from: Semihalf Sponsored by: Cavium Reviewed by: zbb Differential Revision: https://reviews.freebsd.org/D5854 --- sys/dev/vnic/thunder_bgx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/vnic/thunder_bgx.c b/sys/dev/vnic/thunder_bgx.c index 3494754..7a3a941 100644 --- a/sys/dev/vnic/thunder_bgx.c +++ b/sys/dev/vnic/thunder_bgx.c @@ -240,7 +240,7 @@ static int bgx_poll_reg(struct bgx *bgx, uint8_t lmac, uint64_t reg, uint64_t mask, boolean_t zero) { - int timeout = 100; + int timeout = 10; uint64_t reg_val; while (timeout) { @@ -250,7 +250,7 @@ bgx_poll_reg(struct bgx *bgx, uint8_t lmac, uint64_t reg, uint64_t mask, if (!zero && (reg_val & mask)) return (0); - DELAY(1000); + DELAY(100); timeout--; } return (ETIMEDOUT); -- cgit v1.1 From 3389187e4b646b62f4754a92855389d967de816f Mon Sep 17 00:00:00 2001 From: fanf Date: Fri, 8 Apr 2016 11:43:22 +0000 Subject: Handle whois referrals between RIRs This is rather ugly, because the RIPE and APNIC whois servers do not provide referrals for address blocks that they do not manage. However ARIN is usually the right place or knows the right place so we try there. The particular instance which clued me in to this bug is U.Mich. 141.211.0.0/16 for which the referral chain should be IANA -> RIPE -> ARIN. RIPE's RDAP does provide useful redirects (for example try `curl -I http://rdap.db.ripe.net/ip/141.211.0.0) so maybe their whois server can be improved. AfriNIC's whois server gives more direct referrals, but they are designed to be human-readable. Ugly, but we can manage. The issue of referrals between RIRs is likely to become more important in the future whith the increasing number of cross-region IP address block transfers increases. --- usr.bin/whois/whois.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/usr.bin/whois/whois.c b/usr.bin/whois/whois.c index 49b2005..9bae3b1 100644 --- a/usr.bin/whois/whois.c +++ b/usr.bin/whois/whois.c @@ -114,9 +114,16 @@ static struct { WHOIS_REFERRAL("Whois Server:"), WHOIS_REFERRAL("Registrar WHOIS Server:"), /* corporatedomains.com */ WHOIS_REFERRAL("ReferralServer: whois://"), /* ARIN */ + WHOIS_REFERRAL("descr: region. Please query"), /* AfriNIC */ { NULL, 0 } }; +static const char *actually_arin[] = { + "netname: ERX-NETBLOCK\n", /* APNIC */ + "netname: NON-RIPE-NCC-MANAGED-ADDRESS-BLOCK\n", + NULL +}; + static const char *port = DEFAULT_PORT; static const char *choose_server(char *); @@ -469,6 +476,12 @@ done: (int)(p - host), host); break; } + for (i = 0; actually_arin[i] != NULL; i++) { + if (strncmp(buf, actually_arin[i], len) == 0) { + s_asprintf(&nhost, "%s", ANICHOST); + break; + } + } } /* Verisign etc. */ if (!(flags & WHOIS_SPAM_ME) && -- cgit v1.1 From f54441416cb43a6dfc3d6b0720514d42020d383c Mon Sep 17 00:00:00 2001 From: avg Date: Fri, 8 Apr 2016 11:58:24 +0000 Subject: zio write issue threads should have lower (numerically greater) priority This is because they might do data compression which is quite CPU expensive. The original code is correct for illumos, because there a higher priority corresponds to a greater number. MFC after: 2 weeks --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c index f69a5e7..2e039ed 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c @@ -929,7 +929,7 @@ spa_taskqs_init(spa_t *spa, zio_type_t t, zio_taskq_type_t q) * than the other taskqs. */ if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) - pri--; + pri++; tq = taskq_create_proc(name, value, pri, 50, INT_MAX, spa->spa_proc, flags); -- cgit v1.1 From fd12934507d1f2052285453bdeda0a52941182ed Mon Sep 17 00:00:00 2001 From: avg Date: Fri, 8 Apr 2016 11:59:11 +0000 Subject: topo_set_pu_id: turn a check into an assertion The new id must not be present in any cpu set in any topology element. MFC after: 30 days --- sys/kern/subr_smp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index b09bc50..4f3b51d 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -1029,8 +1029,8 @@ topo_set_pu_id(struct topo_node *node, cpuid_t id) node->subtype = 1; while ((node = node->parent) != NULL) { - if (CPU_ISSET(id, &node->cpuset)) - break; + KASSERT(!CPU_ISSET(id, &node->cpuset), + ("logical ID %u is already set in node %p", id, node)); CPU_SET(id, &node->cpuset); node->cpu_count++; } -- cgit v1.1 From 0a0494372684565b3d6af4647d46f2976e2700e4 Mon Sep 17 00:00:00 2001 From: allanjude Date: Fri, 8 Apr 2016 15:05:06 +0000 Subject: Do not add swap to fstab when swapsize is 0 If a user requested encrypted swap, but 0 sized, it would still be added to fstab PR: 208630 Submitted by: Ganael LAPLANCHE MFC after: 2 weeks Sponsored by: ScaleEngine Inc. --- usr.sbin/bsdinstall/scripts/zfsboot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usr.sbin/bsdinstall/scripts/zfsboot b/usr.sbin/bsdinstall/scripts/zfsboot index 4dedbf0..c3b2137 100755 --- a/usr.sbin/bsdinstall/scripts/zfsboot +++ b/usr.sbin/bsdinstall/scripts/zfsboot @@ -964,6 +964,8 @@ zfs_create_diskpart() f_expand_number "$ZFSBOOT_SWAP_SIZE" swapsize if [ "$isswapmirror" ]; then # This is not the first disk in the mirror, do nothing + elif [ ${swapsize:-0} -eq 0 ]; then + # If swap is 0 sized, don't add it to fstab elif [ "$ZFSBOOT_SWAP_ENCRYPTION" -a "$ZFSBOOT_SWAP_MIRROR" ]; then f_eval_catch $funcname printf "$PRINTF_FSTAB" \ /dev/mirror/swap.eli none swap sw 0 0 \ @@ -981,8 +983,6 @@ zfs_create_diskpart() /dev/$disk${swappart}.eli none swap sw 0 0 \ $BSDINSTALL_TMPETC/fstab || return $FAILURE - elif [ ${swapsize:-0} -eq 0 ]; then - # If swap is 0 sized, don't add it to fstab else f_eval_catch $funcname printf "$PRINTF_FSTAB" \ /dev/$disk$swappart none swap sw 0 0 \ -- cgit v1.1 From e6c5638fc9ea834e5c18816d8165ac2028a8168f Mon Sep 17 00:00:00 2001 From: allanjude Date: Fri, 8 Apr 2016 15:08:22 +0000 Subject: bsdinstall/zfsboot should create /tmp and /var/tmp if they do not exist PR: 208629 PR: 208568 Submitted by: Galael LAPLANCHE MFC after: 2 weeks --- usr.sbin/bsdinstall/scripts/zfsboot | 2 ++ 1 file changed, 2 insertions(+) diff --git a/usr.sbin/bsdinstall/scripts/zfsboot b/usr.sbin/bsdinstall/scripts/zfsboot index c3b2137..415afb6 100755 --- a/usr.sbin/bsdinstall/scripts/zfsboot +++ b/usr.sbin/bsdinstall/scripts/zfsboot @@ -1256,6 +1256,8 @@ zfs_create_boot() f_dprintf "$funcname: Modifying directory permissions..." local dir for dir in /tmp /var/tmp; do + f_eval_catch $funcname mkdir "$MKDIR_P" \ + $BSDINSTALL_CHROOT$dir || return $FAILURE f_eval_catch $funcname chmod "$CHMOD_MODE" 1777 \ $BSDINSTALL_CHROOT$dir || return $FAILURE done -- cgit v1.1 From 9c95842ec4d237ae7950fb5de2cb900e88769575 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:13:38 +0000 Subject: Fix wrong memory mapping In mtk_soc.c memory is mapped incorrectly for MT7621. This revision fixes this. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5882 --- sys/mips/mediatek/mtk_soc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/mips/mediatek/mtk_soc.c b/sys/mips/mediatek/mtk_soc.c index be576bd..b331467 100644 --- a/sys/mips/mediatek/mtk_soc.c +++ b/sys/mips/mediatek/mtk_soc.c @@ -257,7 +257,7 @@ mtk_soc_try_early_detect(void) else base = MTK_DEFAULT_BASE; - if (bus_space_map(bst, MTK_DEFAULT_BASE, MTK_DEFAULT_SIZE, 0, &bsh)) + if (bus_space_map(bst, base, MTK_DEFAULT_SIZE, 0, &bsh)) return; /* First, figure out the CPU clock */ -- cgit v1.1 From 655f72782fe11ad2002f75c294d65778f1eef49e Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:20:58 +0000 Subject: Disable USB PHY slew rate calibration for Mediatek SoCs for now USB on both MT7621 and MT7688 seems to work much better without doing slew rate calibration. These are the only two SoCs, apart from MT7628, which actually make use of the slew rate calibration routines implemented in the mtk_usb_phy driver. Since MT7628 is actually a superset of MT7688 things should be the same for it as well. We do not remove the code, we simply define it out. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5884 --- sys/mips/mediatek/mtk_usb_phy.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sys/mips/mediatek/mtk_usb_phy.c b/sys/mips/mediatek/mtk_usb_phy.c index da2acf0..d400720 100644 --- a/sys/mips/mediatek/mtk_usb_phy.c +++ b/sys/mips/mediatek/mtk_usb_phy.c @@ -206,6 +206,11 @@ mtk_usb_phy_detach(device_t dev) return (0); } +/* + * Things currently seem to work a lot better without slew rate calibration + * both on MT7621 and MT7688, so we leave it out for now. + */ +#ifdef notyet static void mtk_usb_phy_slew_rate_calibration(struct mtk_usb_phy_softc *sc) { @@ -250,10 +255,12 @@ mtk_usb_phy_slew_rate_calibration(struct mtk_usb_phy_softc *sc) USB_PHY_BARRIER(sc); } } +#endif static void mtk_usb_phy_mt7621_init(device_t dev) { +#ifdef notyet struct mtk_usb_phy_softc *sc = device_get_softc(dev); /* Slew rate calibration only, but for 2 ports */ @@ -261,6 +268,7 @@ mtk_usb_phy_mt7621_init(device_t dev) sc->u2_base = MT7621_U2_BASE_P1; mtk_usb_phy_slew_rate_calibration(sc); +#endif } static void @@ -286,8 +294,10 @@ mtk_usb_phy_mt7628_init(device_t dev) USB_PHY_WRITE_U2(sc, U2_PHY_DTM0, 0x02000000); USB_PHY_BARRIER(sc); +#ifdef notyet /* Slew rate calibration */ - //mtk_usb_phy_slew_rate_calibration(sc); + mtk_usb_phy_slew_rate_calibration(sc); +#endif } static device_method_t mtk_usb_phy_methods[] = { -- cgit v1.1 From f6bfd8051b7087ab37f4349979c2415e1dd32ad6 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:22:30 +0000 Subject: Introduce XHCI support for MT7621 SoC Tested on a MT7621 board, similar to the WiTi board. More testing will be required to confirm everything is fine, but things look good so far. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5885 --- sys/mips/mediatek/mtk_xhci.c | 298 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 sys/mips/mediatek/mtk_xhci.c diff --git a/sys/mips/mediatek/mtk_xhci.c b/sys/mips/mediatek/mtk_xhci.c new file mode 100644 index 0000000..0899307 --- /dev/null +++ b/sys/mips/mediatek/mtk_xhci.c @@ -0,0 +1,298 @@ +#include +__FBSDID("$FreeBSD$"); + +/*- + * Copyright (c) 2015 Stanislav Galabov. All rights reserved. + * Copyright (c) 2010,2011 Aleksandr Rybalko. All rights reserved. + * Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#define XHCI_HC_DEVSTR "MTK USB 3.0 controller" + +static device_probe_t mtk_xhci_fdt_probe; +static device_attach_t mtk_xhci_fdt_attach; +static device_detach_t mtk_xhci_fdt_detach; + +static void mtk_xhci_fdt_init(device_t dev); + +static int +mtk_xhci_fdt_probe(device_t self) +{ + + if (!ofw_bus_status_okay(self)) + return (ENXIO); + + if (!ofw_bus_is_compatible(self, "mtk,usb-xhci")) + return (ENXIO); + + device_set_desc(self, XHCI_HC_DEVSTR); + + return (BUS_PROBE_DEFAULT); +} + +static int +mtk_xhci_fdt_attach(device_t self) +{ + struct xhci_softc *sc = device_get_softc(self); + int err; + int rid; + + /* initialise some bus fields */ + sc->sc_bus.parent = self; + sc->sc_bus.devices = sc->sc_devices; + sc->sc_bus.devices_max = XHCI_MAX_DEVICES; + sc->sc_bus.dma_bits = 32; + + rid = 0; + sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (!sc->sc_io_res) { + device_printf(self, "Could not map memory\n"); + goto error; + } + sc->sc_io_tag = rman_get_bustag(sc->sc_io_res); + sc->sc_io_hdl = rman_get_bushandle(sc->sc_io_res); + sc->sc_io_size = rman_get_size(sc->sc_io_res); + + mtk_xhci_fdt_init(self); + + rid = 0; + sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid, + RF_SHAREABLE | RF_ACTIVE); + if (sc->sc_irq_res == NULL) { + device_printf(self, "Could not allocate irq\n"); + goto error; + } + + sc->sc_bus.bdev = device_add_child(self, "usbus", -1); + if (!(sc->sc_bus.bdev)) { + device_printf(self, "Could not add USB device\n"); + goto error; + } + device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus); + device_set_desc(sc->sc_bus.bdev, XHCI_HC_DEVSTR); + + sprintf(sc->sc_vendor, "Mediatek"); + + err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE, + NULL, (driver_intr_t *)xhci_interrupt, sc, &sc->sc_intr_hdl); + if (err) { + device_printf(self, "Could not setup irq, %d\n", err); + sc->sc_intr_hdl = NULL; + goto error; + } + + err = xhci_init(sc, self, 1); + if (err == 0) + err = xhci_halt_controller(sc); + if (err == 0) + err = xhci_start_controller(sc); + if (err == 0) + err = device_probe_and_attach(sc->sc_bus.bdev); + if (err) { + device_printf(self, "USB init failed err=%d\n", err); + goto error; + } + return (0); + +error: + mtk_xhci_fdt_detach(self); + return (ENXIO); +} + +static int +mtk_xhci_fdt_detach(device_t self) +{ + struct xhci_softc *sc = device_get_softc(self); + device_t bdev; + int err; + + if (sc->sc_bus.bdev) { + bdev = sc->sc_bus.bdev; + device_detach(bdev); + device_delete_child(self, bdev); + } + /* during module unload there are lots of children leftover */ + device_delete_children(self); + + if (sc->sc_irq_res && sc->sc_intr_hdl) { + /* + * only call xhci_detach() after xhci_init() + */ + xhci_uninit(sc); + + err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl); + if (err) + device_printf(self, "Could not tear down irq, %d\n", + err); + sc->sc_intr_hdl = NULL; + } + if (sc->sc_irq_res) { + bus_release_resource(self, SYS_RES_IRQ, 0, + sc->sc_irq_res); + sc->sc_irq_res = NULL; + } + if (sc->sc_io_res) { + bus_release_resource(self, SYS_RES_MEMORY, 0, + sc->sc_io_res); + sc->sc_io_res = NULL; + } + + return (0); +} + +static device_method_t mtk_xhci_fdt_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_xhci_fdt_probe), + DEVMETHOD(device_attach, mtk_xhci_fdt_attach), + DEVMETHOD(device_detach, mtk_xhci_fdt_detach), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + + DEVMETHOD_END +}; + +static driver_t mtk_xhci_fdt_driver = { + .name = "xhci", + .methods = mtk_xhci_fdt_methods, + .size = sizeof(struct xhci_softc), +}; + +static devclass_t mtk_xhci_fdt_devclass; + +DRIVER_MODULE(xhci, simplebus, mtk_xhci_fdt_driver, mtk_xhci_fdt_devclass, 0, + 0); + +#define USB_HDMA_CFG 0x950 +#define USB_HDMA_CFG_MT7621_VAL 0x10E0E0C + +#define U3_LTSSM_TIMING_PARAM3 0x2514 +#define U3_LTSSM_TIMING_VAL 0x3E8012C + +#define SYNC_HS_EOF 0x938 +#define SYNC_HS_EOF_VAL 0x201F3 + +#define USB_IP_SPAR0 0x107C8 +#define USB_IP_SPAR0_VAL 1 + +#define U2_PHY_BASE_P0 0x10800 +#define U2_PHY_BASE_P1 0x11000 +#define U2_PHYD_CR1 0x64 +#define U2_PHYD_CR1_MASK (3<<18) +#define U2_PHYD_CR1_VAL (1<<18) + +#define USB_IP_PW_CTRL 0x10700 +#define USB_IP_PW_CTRL_1 0x10704 +#define USB_IP_CAP 0x10724 +#define USB_U3_CTRL(p) (0x10730 + ((p) * 0x08)) +#define USB_U2_CTRL(p) (0x10750 + ((p) * 0x08)) + +#define USB_IP_SW_RST (1 << 0) +#define USB_IP_PDN (1 << 0) + +#define USB_PORT_DIS (1 << 0) +#define USB_PORT_PDN (1 << 1) + +#define U3_PORT_NUM(p) (p & 0xFF) +#define U2_PORT_NUM(p) ((p>>8) & 0xFF) + +#define RD4(_sc, _reg) bus_read_4((_sc)->sc_io_res, (_reg)) +#define WR4(_sc, _reg, _val) bus_write_4((_sc)->sc_io_res, (_reg), (_val)) +#define CLRSET4(_sc, _reg, _clr, _set) \ + WR4((_sc), (_reg), (RD4((_sc), (_reg)) & ~(_clr)) | (_set)) + +static void +mtk_xhci_fdt_init(device_t dev) +{ + struct xhci_softc *sc; + uint32_t temp, u3_ports, u2_ports, i; + + sc = device_get_softc(dev); + + temp = RD4(sc, USB_IP_CAP); + u3_ports = U3_PORT_NUM(temp); + u2_ports = U2_PORT_NUM(temp); + + device_printf(dev, "%d USB3 ports, %d USB2 ports\n", + u3_ports, u2_ports); + + CLRSET4(sc, USB_IP_PW_CTRL, 0, USB_IP_SW_RST); + CLRSET4(sc, USB_IP_PW_CTRL, USB_IP_SW_RST, 0); + CLRSET4(sc, USB_IP_PW_CTRL_1, USB_IP_PDN, 0); + + for (i = 0; i < u3_ports; i++) + CLRSET4(sc, USB_U3_CTRL(i), USB_PORT_PDN | USB_PORT_DIS, 0); + + for (i = 0; i < u2_ports; i++) + CLRSET4(sc, USB_U2_CTRL(i), USB_PORT_PDN | USB_PORT_DIS, 0); + + DELAY(100000); + + WR4(sc, USB_HDMA_CFG, USB_HDMA_CFG_MT7621_VAL); + WR4(sc, U3_LTSSM_TIMING_PARAM3, U3_LTSSM_TIMING_VAL); + WR4(sc, SYNC_HS_EOF, SYNC_HS_EOF_VAL); + WR4(sc, USB_IP_SPAR0, USB_IP_SPAR0_VAL); + CLRSET4(sc, U2_PHY_BASE_P0 + U2_PHYD_CR1, U2_PHYD_CR1_MASK, + U2_PHYD_CR1_VAL); + CLRSET4(sc, U2_PHY_BASE_P1 + U2_PHYD_CR1, U2_PHYD_CR1_MASK, + U2_PHYD_CR1_VAL); +} -- cgit v1.1 From b7ef0383b8e27ff2210c513b1da66990ad327f15 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:26:49 +0000 Subject: Introduce Mediatek/Ralink PCIe support This revision introduces PCIe support for the relevant Mediatek/Ralink SoCs. Currently the PCIe support is not converted to INTRNG, this may be a task for the future. Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5886 --- sys/mips/mediatek/mtk_pcie.c | 1489 ++++++++++++++++++++++++++++++++++++++++++ sys/mips/mediatek/mtk_pcie.h | 164 +++++ 2 files changed, 1653 insertions(+) create mode 100644 sys/mips/mediatek/mtk_pcie.c create mode 100644 sys/mips/mediatek/mtk_pcie.h diff --git a/sys/mips/mediatek/mtk_pcie.c b/sys/mips/mediatek/mtk_pcie.c new file mode 100644 index 0000000..a43d277 --- /dev/null +++ b/sys/mips/mediatek/mtk_pcie.c @@ -0,0 +1,1489 @@ +/*- + * Copyright (c) 2016 Stanislav Galabov. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The pci allocator parts are based on code from sys/dev/arm/mv/: + * + * Copyright (c) 2008 MARVELL INTERNATIONAL LTD. + * Copyright (c) 2010 The FreeBSD Foundation + * Copyright (c) 2010-2012 Semihalf + * All rights reserved. + * + * Developed by Semihalf. + */ +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "pcib_if.h" +#include "pic_if.h" + +/* + * Note: We only support PCIe at the moment. + * Most SoCs in the Ralink/Mediatek family that we target actually don't + * support PCI anyway, with the notable exceptions being RT3662/RT3883, which + * support both PCI and PCIe. If there exists a board based on one of them + * which is of interest in the future it shouldn't be too hard to enable PCI + * support for it. + */ + +/* Chip specific function declarations */ +static int mtk_pcie_phy_init(device_t); +static int mtk_pcie_phy_start(device_t); +static int mtk_pcie_phy_stop(device_t); +static int mtk_pcie_phy_mt7621_init(device_t); +static int mtk_pcie_phy_mt7628_init(device_t); +static int mtk_pcie_phy_mt7620_init(device_t); +static int mtk_pcie_phy_rt3883_init(device_t); +static void mtk_pcie_phy_setup_slots(device_t); + +/* Generic declarations */ +struct mtx mtk_pci_mtx; +MTX_SYSINIT(mtk_pci_mtx, &mtk_pci_mtx, "MTK PCIe mutex", MTX_SPIN); + +static int mtk_pcib_init(device_t, int, int); +static int mtk_pci_intr(void *); + +static struct mtk_pci_softc *mt_sc = NULL; + +struct mtk_pci_range { + u_long base; + u_long len; +}; + +#define FDT_RANGES_CELLS (3 * 2) + +static void +mtk_pci_range_dump(struct mtk_pci_range *range) +{ +#ifdef DEBUG + printf("\n"); + printf(" base = 0x%08lx\n", range->base); + printf(" len = 0x%08lx\n", range->len); +#endif +} + +static int +mtk_pci_ranges_decode(phandle_t node, struct mtk_pci_range *io_space, + struct mtk_pci_range *mem_space) +{ + struct mtk_pci_range *pci_space; + pcell_t ranges[FDT_RANGES_CELLS]; + pcell_t *rangesptr; + pcell_t cell0, cell1, cell2; + int tuples, i, rv, len; + + /* + * Retrieve 'ranges' property. + */ + if (!OF_hasprop(node, "ranges")) { + printf("%s: %d\n", __FUNCTION__, 1); + return (EINVAL); + } + + len = OF_getproplen(node, "ranges"); + if (len > sizeof(ranges)) { + printf("%s: %d\n", __FUNCTION__, 2); + return (ENOMEM); + } + + if (OF_getprop(node, "ranges", ranges, sizeof(ranges)) <= 0) { + printf("%s: %d\n", __FUNCTION__, 3); + return (EINVAL); + } + + tuples = len / (sizeof(pcell_t) * 3); + + /* + * Initialize the ranges so that we don't have to worry about + * having them all defined in the FDT. In particular, it is + * perfectly fine not to want I/O space on PCI busses. + */ + bzero(io_space, sizeof(*io_space)); + bzero(mem_space, sizeof(*mem_space)); + + rangesptr = &ranges[0]; + for (i = 0; i < tuples; i++) { + cell0 = fdt_data_get((void *)rangesptr, 1); + rangesptr++; + cell1 = fdt_data_get((void *)rangesptr, 1); + rangesptr++; + cell2 = fdt_data_get((void *)rangesptr, 1); + rangesptr++; + + if (cell0 == 2) { + pci_space = mem_space; + } else if (cell0 == 1) { + pci_space = io_space; + } else { + rv = ERANGE; + printf("%s: %d\n", __FUNCTION__, 4); + goto out; + } + + pci_space->base = cell1; + pci_space->len = cell2; + } + + rv = 0; +out: + return (rv); +} + +static int +mtk_pci_ranges(phandle_t node, struct mtk_pci_range *io_space, + struct mtk_pci_range *mem_space) +{ + int err; + + if ((err = mtk_pci_ranges_decode(node, io_space, mem_space)) != 0) { + return (err); + } + + mtk_pci_range_dump(io_space); + mtk_pci_range_dump(mem_space); + + return (0); +} + +static struct ofw_compat_data compat_data[] = { + { "ralink,rt3662-pcie", MTK_SOC_RT3883 }, + { "ralink,rt3883-pcie", MTK_SOC_RT3883 }, + { "ralink,mt7620a-pcie", MTK_SOC_MT7620A }, + { "ralink,mt7621-pcie", MTK_SOC_MT7621 }, + { "ralink,mt7628-pcie", MTK_SOC_MT7628 }, + { "ralink,mt7688-pcie", MTK_SOC_MT7628 }, + { NULL, MTK_SOC_UNKNOWN } +}; + +static int +mtk_pci_probe(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + if (!ofw_bus_status_okay(dev)) + return (ENXIO); + + sc->socid = ofw_bus_search_compatible(dev, compat_data)->ocd_data; + if (sc->socid == MTK_SOC_UNKNOWN) + return (ENXIO); + + device_set_desc(dev, "MTK PCIe Controller"); + + return (0); +} + +static int +mtk_pci_attach(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + struct mtk_pci_range io_space, mem_space; + phandle_t node; + intptr_t xref; + int i, rid; + + sc->sc_dev = dev; + mt_sc = sc; + sc->addr_mask = 0xffffffff; + + /* Request our memory */ + rid = 0; + sc->pci_res[0] = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + if (sc->pci_res[0] == NULL) { + device_printf(dev, "could not allocate memory resource\n"); + return (ENXIO); + } + + /* See how many interrupts we need */ + if (sc->socid == MTK_SOC_MT7621) + sc->sc_num_irq = 3; + else { + sc->sc_num_irq = 1; + sc->pci_res[2] = sc->pci_res[3] = NULL; + sc->pci_intrhand[1] = sc->pci_intrhand[2] = NULL; + } + + /* Request our interrupts */ + for (i = 1; i <= sc->sc_num_irq ; i++) { + rid = i - 1; + sc->pci_res[i] = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, + RF_ACTIVE); + if (sc->pci_res[i] == NULL) { + device_printf(dev, "could not allocate interrupt " + "resource %d\n", rid); + goto cleanup_res; + } + } + + /* Parse our PCI 'ranges' property */ + node = ofw_bus_get_node(dev); + xref = OF_xref_from_node(node); + if (mtk_pci_ranges(node, &io_space, &mem_space)) { + device_printf(dev, "could not retrieve 'ranges' data\n"); + goto cleanup_res; + } + + /* Memory, I/O and IRQ resource limits */ + sc->sc_io_base = io_space.base; + sc->sc_io_size = io_space.len; + sc->sc_mem_base = mem_space.base; + sc->sc_mem_size = mem_space.len; + sc->sc_irq_start = MTK_PCIE0_IRQ; + sc->sc_irq_end = MTK_PCIE2_IRQ; + + /* Init resource managers for memory, I/O and IRQ */ + sc->sc_mem_rman.rm_type = RMAN_ARRAY; + sc->sc_mem_rman.rm_descr = "mtk pcie memory window"; + if (rman_init(&sc->sc_mem_rman) != 0 || + rman_manage_region(&sc->sc_mem_rman, sc->sc_mem_base, + sc->sc_mem_base + sc->sc_mem_size - 1) != 0) { + device_printf(dev, "failed to setup memory rman\n"); + goto cleanup_res; + } + + sc->sc_io_rman.rm_type = RMAN_ARRAY; + sc->sc_io_rman.rm_descr = "mtk pcie io window"; + if (rman_init(&sc->sc_io_rman) != 0 || + rman_manage_region(&sc->sc_io_rman, sc->sc_io_base, + sc->sc_io_base + sc->sc_io_size - 1) != 0) { + device_printf(dev, "failed to setup io rman\n"); + goto cleanup_res; + } + + sc->sc_irq_rman.rm_type = RMAN_ARRAY; + sc->sc_irq_rman.rm_descr = "mtk pcie irqs"; + if (rman_init(&sc->sc_irq_rman) != 0 || + rman_manage_region(&sc->sc_irq_rman, sc->sc_irq_start, + sc->sc_irq_end) != 0) { + device_printf(dev, "failed to setup irq rman\n"); + goto cleanup_res; + } + + /* Do SoC-specific PCIe initialization */ + if (mtk_pcie_phy_init(dev)) { + device_printf(dev, "pcie phy init failed\n"); + goto cleanup_rman; + } + + /* Register ourselves as an interrupt controller */ + if (intr_pic_register(dev, xref) != 0) { + device_printf(dev, "could not register PIC\n"); + goto cleanup_rman; + } + + /* Set up our interrupt handler */ + for (i = 1; i <= sc->sc_num_irq; i++) { + sc->pci_intrhand[i - 1] = NULL; + if (bus_setup_intr(dev, sc->pci_res[i], INTR_TYPE_MISC, + mtk_pci_intr, NULL, sc, &sc->pci_intrhand[i - 1])) { + device_printf(dev, "could not setup intr handler %d\n", + i); + goto cleanup; + } + } + + /* Do generic PCIe initialization and resource allocation */ + mtk_pcib_init(dev, 0, PCI_SLOTMAX); + + /* Attach our PCI child so bus enumeration can start */ + if (device_add_child(dev, "pci", -1) == NULL) { + device_printf(dev, "could not attach pci bus\n"); + goto cleanup; + } + + /* And finally, attach ourselves to the bus */ + if (bus_generic_attach(dev)) { + device_printf(dev, "could not attach to bus\n"); + goto cleanup; + } + + return (0); + +cleanup: +#ifdef notyet + intr_pic_unregister(dev, xref); +#endif + for (i = 1; i <= sc->sc_num_irq; i++) { + if (sc->pci_intrhand[i - 1] != NULL) + bus_teardown_intr(dev, sc->pci_res[i], + sc->pci_intrhand[i - 1]); + } +cleanup_rman: + mtk_pcie_phy_stop(dev); + rman_fini(&sc->sc_irq_rman); + rman_fini(&sc->sc_io_rman); + rman_fini(&sc->sc_mem_rman); +cleanup_res: + mt_sc = NULL; + if (sc->pci_res[0] != NULL) + bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->pci_res[0]); + if (sc->pci_res[1] != NULL) + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->pci_res[1]); + if (sc->pci_res[2] != NULL) + bus_release_resource(dev, SYS_RES_IRQ, 1, sc->pci_res[2]); + if (sc->pci_res[3] != NULL) + bus_release_resource(dev, SYS_RES_IRQ, 2, sc->pci_res[3]); + return (ENXIO); +} + +static int +mtk_pci_read_ivar(device_t dev, device_t child, int which, + uintptr_t *result) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + switch (which) { + case PCIB_IVAR_DOMAIN: + *result = device_get_unit(dev); + return (0); + case PCIB_IVAR_BUS: + *result = sc->sc_busno; + return (0); + } + + return (ENOENT); +} + +static int +mtk_pci_write_ivar(device_t dev, device_t child, int which, + uintptr_t result) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + switch (which) { + case PCIB_IVAR_BUS: + sc->sc_busno = result; + return (0); + } + + return (ENOENT); +} + +static struct resource * +mtk_pci_alloc_resource(device_t bus, device_t child, int type, int *rid, + rman_res_t start, rman_res_t end, rman_res_t count, u_int flags) +{ + struct mtk_pci_softc *sc = device_get_softc(bus); + struct resource *rv; + struct rman *rm; + + switch (type) { + case SYS_RES_IRQ: + rm = &sc->sc_irq_rman; + break; + case SYS_RES_IOPORT: + rm = &sc->sc_io_rman; + break; + case SYS_RES_MEMORY: + rm = &sc->sc_mem_rman; + break; + default: + return (NULL); + } + + rv = rman_reserve_resource(rm, start, end, count, flags, child); + + if (rv == NULL) + return (NULL); + + rman_set_rid(rv, *rid); + + if ((flags & RF_ACTIVE) && type != SYS_RES_IRQ) { + if (bus_activate_resource(child, type, *rid, rv)) { + rman_release_resource(rv); + return (NULL); + } + } + + return (rv); +} + +static inline int +mtk_idx_to_irq(int idx) +{ + + return ((idx == 0) ? MTK_PCIE0_IRQ : + (idx == 1) ? MTK_PCIE1_IRQ : + (idx == 2) ? MTK_PCIE2_IRQ : -1); +} + +static inline int +mtk_irq_to_idx(int irq) +{ + + return ((irq == MTK_PCIE0_IRQ) ? 0 : + (irq == MTK_PCIE1_IRQ) ? 1 : + (irq == MTK_PCIE2_IRQ) ? 2 : -1); +} + +static void +mtk_pci_mask_irq(void *source) +{ + MT_WRITE32(mt_sc, MTK_PCI_PCIENA, + MT_READ32(mt_sc, MTK_PCI_PCIENA) & ~(1<<((int)source))); +} + +static void +mtk_pci_unmask_irq(void *source) +{ + + MT_WRITE32(mt_sc, MTK_PCI_PCIENA, + MT_READ32(mt_sc, MTK_PCI_PCIENA) | (1<<((int)source))); +} + +static int +mtk_pci_setup_intr(device_t bus, device_t child, struct resource *ires, + int flags, driver_filter_t *filt, driver_intr_t *handler, + void *arg, void **cookiep) +{ + struct mtk_pci_softc *sc = device_get_softc(bus); + struct intr_event *event; + int irq, error, irqidx; + + irq = rman_get_start(ires); + + if (irq < sc->sc_irq_start || irq > sc->sc_irq_end) + return (EINVAL); + + irqidx = irq - sc->sc_irq_start; + + event = sc->sc_eventstab[irqidx]; + if (event == NULL) { + error = intr_event_create(&event, (void *)irq, 0, irq, + mtk_pci_mask_irq, mtk_pci_unmask_irq, NULL, NULL, + "pci intr%d:", irq); + + if (error == 0) { + sc->sc_eventstab[irqidx] = event; + } + else { + return (error); + } + } + + intr_event_add_handler(event, device_get_nameunit(child), filt, + handler, arg, intr_priority(flags), flags, cookiep); + + mtk_pci_unmask_irq((void*)irq); + + return (0); +} + +static int +mtk_pci_teardown_intr(device_t dev, device_t child, struct resource *ires, + void *cookie) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + int irq, result, irqidx; + + irq = rman_get_start(ires); + if (irq < sc->sc_irq_start || irq > sc->sc_irq_end) + return (EINVAL); + + irqidx = irq - sc->sc_irq_start; + if (sc->sc_eventstab[irqidx] == NULL) + panic("Trying to teardown unoccupied IRQ"); + + mtk_pci_mask_irq((void*)irq); + + result = intr_event_remove_handler(cookie); + if (!result) + sc->sc_eventstab[irqidx] = NULL; + + + return (result); +} + +static inline uint32_t +mtk_pci_make_addr(int bus, int slot, int func, int reg) +{ + uint32_t addr; + + addr = ((((reg & 0xf00) >> 8) << 24) | (bus << 16) | (slot << 11) | + (func << 8) | (reg & 0xfc) | (1 << 31)); + + return (addr); +} + +static int +mtk_pci_maxslots(device_t dev) +{ + + return (PCI_SLOTMAX); +} + +static inline int +mtk_pci_slot_has_link(device_t dev, int slot) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + return !!(sc->pcie_link_status & (1<addr_mask; + MT_WRITE32(sc, MTK_PCI_CFGADDR, addr); + switch (bytes % 4) { + case 0: + data = MT_READ32(sc, MTK_PCI_CFGDATA); + break; + case 1: + data = MT_READ8(sc, MTK_PCI_CFGDATA + (reg & 0x3)); + break; + case 2: + data = MT_READ16(sc, MTK_PCI_CFGDATA + (reg & 0x3)); + break; + default: + panic("%s(): Wrong number of bytes (%d) requested!\n", + __FUNCTION__, bytes % 4); + } + mtx_unlock_spin(&mtk_pci_mtx); + + return (data); +} + +static void +mtk_pci_write_config(device_t dev, u_int bus, u_int slot, u_int func, + u_int reg, uint32_t val, int bytes) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + uint32_t addr = 0, data = val; + + /* Do not write if slot has no link */ + if (bus == 0 && mtk_pci_slot_has_link(dev, slot) == 0) + return; + + mtx_lock_spin(&mtk_pci_mtx); + addr = mtk_pci_make_addr(bus, slot, func, (reg & ~3)) & sc->addr_mask; + MT_WRITE32(sc, MTK_PCI_CFGADDR, addr); + switch (bytes % 4) { + case 0: + MT_WRITE32(sc, MTK_PCI_CFGDATA, data); + break; + case 1: + MT_WRITE8(sc, MTK_PCI_CFGDATA + (reg & 0x3), data); + break; + case 2: + MT_WRITE16(sc, MTK_PCI_CFGDATA + (reg & 0x3), data); + break; + default: + panic("%s(): Wrong number of bytes (%d) requested!\n", + __FUNCTION__, bytes % 4); + } + mtx_unlock_spin(&mtk_pci_mtx); +} + +#if 0 +/* We take care of interrupt routing in the allocator code below */ +static int +mtk_pci_route_interrupt(device_t pcib, device_t device, int pin) +{ + //struct mtk_pci_softc *sc = device_get_softc(pcib); + int bus, sl, dev; + + if (1) return PCI_INVALID_IRQ; + + bus = pci_get_bus(device); + sl = pci_get_slot(device); + dev = pci_get_device(device); + + printf("%s: for %d:%d:%d, int = %d\n", __FUNCTION__, bus, sl, dev, pin); + + if (bus != 0) + panic("Unexpected bus number %d\n", bus); + + /* PCIe only */ + switch (sl) { + case 0: return MTK_PCIE0_IRQ; + case 1: return MTK_PCIE0_IRQ + 1; + case 2: return MTK_PCIE0_IRQ + 2; + default: return (-1); + } + + return (-1); +} +#endif + +static device_method_t mtk_pci_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, mtk_pci_probe), + DEVMETHOD(device_attach, mtk_pci_attach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + DEVMETHOD(device_suspend, bus_generic_suspend), + DEVMETHOD(device_resume, bus_generic_resume), + + /* Bus interface */ + DEVMETHOD(bus_read_ivar, mtk_pci_read_ivar), + DEVMETHOD(bus_write_ivar, mtk_pci_write_ivar), + DEVMETHOD(bus_alloc_resource, mtk_pci_alloc_resource), + DEVMETHOD(bus_release_resource, bus_generic_release_resource), + DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_setup_intr, mtk_pci_setup_intr), + DEVMETHOD(bus_teardown_intr, mtk_pci_teardown_intr), + + /* pcib interface */ + DEVMETHOD(pcib_maxslots, mtk_pci_maxslots), + DEVMETHOD(pcib_read_config, mtk_pci_read_config), + DEVMETHOD(pcib_write_config, mtk_pci_write_config), +#if 0 + DEVMETHOD(pcib_route_interrupt, mtk_pci_route_interrupt), +#endif + + DEVMETHOD_END +}; + +static driver_t mtk_pci_driver = { + "pcib", + mtk_pci_methods, + sizeof(struct mtk_pci_softc), +}; + +static devclass_t mtk_pci_devclass; + +DRIVER_MODULE(mtk_pci, simplebus, mtk_pci_driver, mtk_pci_devclass, 0, 0); + +/* Resource allocation code */ +static inline uint32_t +pcib_bit_get(uint32_t *map, uint32_t bit) +{ + uint32_t n = bit / BITS_PER_UINT32; + + bit = bit % BITS_PER_UINT32; + return (map[n] & (1 << bit)); +} + +static inline void +pcib_bit_set(uint32_t *map, uint32_t bit) +{ + uint32_t n = bit / BITS_PER_UINT32; + + bit = bit % BITS_PER_UINT32; + map[n] |= (1 << bit); +} + +static inline uint32_t +pcib_map_check(uint32_t *map, uint32_t start, uint32_t bits) +{ + uint32_t i; + + for (i = start; i < start + bits; i++) + if (pcib_bit_get(map, i)) + return (0); + + return (1); +} + +static inline void +pcib_map_set(uint32_t *map, uint32_t start, uint32_t bits) +{ + uint32_t i; + + for (i = start; i < start + bits; i++) + pcib_bit_set(map, i); +} + +static bus_addr_t +pcib_alloc(device_t dev, uint32_t smask) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + uint32_t bits, bits_limit, i, *map, min_alloc, size; + bus_addr_t addr = 0; + bus_addr_t base; + + if (smask & 1) { + base = sc->sc_io_base; + min_alloc = PCI_MIN_IO_ALLOC; + bits_limit = sc->sc_io_size / min_alloc; + map = sc->sc_io_map; + smask &= ~0x3; + } else { + base = sc->sc_mem_base; + min_alloc = PCI_MIN_MEM_ALLOC; + bits_limit = sc->sc_mem_size / min_alloc; + map = sc->sc_mem_map; + smask &= ~0xF; + } + + size = ~smask + 1; + bits = size / min_alloc; + + for (i = 0; i + bits <= bits_limit; i+= bits) + if (pcib_map_check(map, i, bits)) { + pcib_map_set(map, i, bits); + addr = base + (i * min_alloc); + return (addr); + } + + return (addr); +} + +static int +mtk_pcib_init_bar(device_t dev, int bus, int slot, int func, int barno) +{ + uint32_t addr, bar; + int reg, width; + + reg = PCIR_BAR(barno); + + mtk_pci_write_config(dev, bus, slot, func, reg, ~0, 4); + bar = mtk_pci_read_config(dev, bus, slot, func, reg, 4); + if (bar == 0) + return (1); + + /* Calculate BAR size: 64 or 32 bit (in 32-bit units) */ + width = ((bar & 7) == 4) ? 2 : 1; + + addr = pcib_alloc(dev, bar); + if (!addr) + return (-1); + + if (bootverbose) + printf("PCI %u:%u:%u: reg %x: smask=%08x: addr=%08x\n", + bus, slot, func, reg, bar, addr); + + mtk_pci_write_config(dev, bus, slot, func, reg, addr, 4); + if (width == 2) + mtk_pci_write_config(dev, bus, slot, func, reg + 4, 0, 4); + + return (width); +} + +static int +mtk_pcib_init_all_bars(device_t dev, int bus, int slot, int func, + int hdrtype) +{ + int maxbar, bar, i; + + maxbar = (hdrtype & PCIM_HDRTYPE) ? 0 : 6; + bar = 0; + + while (bar < maxbar) { + i = mtk_pcib_init_bar(dev, bus, slot, func, bar); + bar += i; + if (i < 0) { + device_printf(dev, "PCI IO/Memory space exhausted\n"); + return (ENOMEM); + } + } + + return (0); +} + +static void +mtk_pcib_init_bridge(device_t dev, int bus, int slot, int func) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + bus_addr_t io_base, mem_base; + uint32_t io_limit, mem_limit; + int secbus; + + if (bus == 0 && !mtk_pci_slot_has_link(dev, slot)) { + sc->sc_cur_secbus++; + device_printf(dev, "Skip bus %d due to no link\n", + sc->sc_cur_secbus); + return; + } + + io_base = sc->sc_io_base; + io_limit = io_base + sc->sc_io_size - 1; + mem_base = sc->sc_mem_base; + mem_limit = mem_base + sc->sc_mem_size - 1; + + mtk_pci_write_config(dev, bus, slot, func, PCIR_IOBASEL_1, + io_base >> 8, 1); + mtk_pci_write_config(dev, bus, slot, func, PCIR_IOBASEH_1, + io_base >> 16, 2); + mtk_pci_write_config(dev, bus, slot, func, PCIR_IOLIMITL_1, + io_limit >> 8, 1); + mtk_pci_write_config(dev, bus, slot, func, PCIR_IOLIMITH_1, + io_limit >> 16, 2); + + mtk_pci_write_config(dev, bus, slot, func, PCIR_MEMBASE_1, + mem_base >> 16, 2); + mtk_pci_write_config(dev, bus, slot, func, PCIR_MEMLIMIT_1, + mem_limit >> 16, 2); + + mtk_pci_write_config(dev, bus, slot, func, PCIR_PMBASEL_1, + 0x10, 2); + mtk_pci_write_config(dev, bus, slot, func, PCIR_PMBASEH_1, + 0x0, 4); + mtk_pci_write_config(dev, bus, slot, func, PCIR_PMLIMITL_1, + 0xF, 2); + mtk_pci_write_config(dev, bus, slot, func, PCIR_PMLIMITH_1, + 0x0, 4); + + mtk_pci_write_config(dev, bus, slot, func, PCIR_INTLINE, 0xff, 1); + + secbus = mtk_pci_read_config(dev, bus, slot, func, PCIR_SECBUS_1, 1); + + if (secbus == 0) { + sc->sc_cur_secbus++; + mtk_pci_write_config(dev, bus, slot, func, PCIR_SECBUS_1, + sc->sc_cur_secbus, 1); + mtk_pci_write_config(dev, bus, slot, func, PCIR_SUBBUS_1, + sc->sc_cur_secbus, 1); + secbus = sc->sc_cur_secbus; + } + + mtk_pcib_init(dev, secbus, PCI_SLOTMAX); +} + +static uint8_t +mtk_pci_get_int(device_t dev, int bus, int slot) +{ + + if (slot != 0) + return (PCI_INVALID_IRQ); + + switch (bus) { + case 1: + return (MTK_PCIE0_IRQ); + case 2: + return (MTK_PCIE1_IRQ); + case 3: + return (MTK_PCIE2_IRQ); + default: + device_printf(dev, "Bus %d out of range\n", slot); + return (PCI_INVALID_IRQ); + } + + /* Unreachable */ + return (PCI_INVALID_IRQ); +} + +static int +mtk_pcib_init(device_t dev, int bus, int maxslot) +{ + int slot, func, maxfunc, error; + uint8_t hdrtype, command, class, subclass; + + for (slot = 0; slot <= maxslot; slot++) { + maxfunc = 0; + for (func = 0; func <= maxfunc; func++) { + hdrtype = mtk_pci_read_config(dev, bus, slot, func, + PCIR_HDRTYPE, 1); + + if ((hdrtype & PCIM_HDRTYPE) > PCI_MAXHDRTYPE) + continue; + + if (func == 0 && (hdrtype & PCIM_MFDEV)) + maxfunc = PCI_FUNCMAX; + + command = mtk_pci_read_config(dev, bus, slot, func, + PCIR_COMMAND, 1); + command &= ~(PCIM_CMD_MEMEN | PCIM_CMD_PORTEN); + mtk_pci_write_config(dev, bus, slot, func, + PCIR_COMMAND, command, 1); + + error = mtk_pcib_init_all_bars(dev, bus, slot, func, + hdrtype); + + if (error) + return (error); + + command |= PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN | + PCIM_CMD_PORTEN; + mtk_pci_write_config(dev, bus, slot, func, + PCIR_COMMAND, command, 1); + + mtk_pci_write_config(dev, bus, slot, func, + PCIR_CACHELNSZ, 16, 1); + + class = mtk_pci_read_config(dev, bus, slot, func, + PCIR_CLASS, 1); + subclass = mtk_pci_read_config(dev, bus, slot, func, + PCIR_SUBCLASS, 1); + + if (class != PCIC_BRIDGE || + subclass != PCIS_BRIDGE_PCI) { + uint8_t val; + + val = mtk_pci_get_int(dev, bus, slot); + + mtk_pci_write_config(dev, bus, slot, func, + PCIR_INTLINE, val, 1); /* XXX */ + continue; + } + + mtk_pcib_init_bridge(dev, bus, slot, func); + } + } + + return (0); +} + +/* Our interrupt handler */ +static int +mtk_pci_intr(void *arg) +{ + struct mtk_pci_softc *sc = arg; + struct intr_event *event; + uint32_t reg, irq, irqidx; + + reg = MT_READ32(sc, MTK_PCI_PCIINT); + + for (irq = sc->sc_irq_start; irq <= sc->sc_irq_end; irq++) { + if (reg & (1u<sc_irq_start; + event = sc->sc_eventstab[irqidx]; + if (!event || TAILQ_EMPTY(&event->ie_handlers)) { + if (irq != 0) + printf("Stray PCI IRQ %d\n", irq); + continue; + } + + intr_event_handle(event, NULL); + } + } + + return (FILTER_HANDLED); +} + +/* PCIe SoC-specific initialization */ +static int +mtk_pcie_phy_init(device_t dev) +{ + struct mtk_pci_softc *sc; + + /* Get our softc */ + sc = device_get_softc(dev); + + /* We don't know how many slots we have yet */ + sc->num_slots = 0; + + /* Handle SoC specific PCIe init */ + switch (sc->socid) { + case MTK_SOC_MT7628: /* Fallthrough */ + case MTK_SOC_MT7688: + if (mtk_pcie_phy_mt7628_init(dev)) + return (ENXIO); + break; + case MTK_SOC_MT7621: + if (mtk_pcie_phy_mt7621_init(dev)) + return (ENXIO); + break; + case MTK_SOC_MT7620A: + if (mtk_pcie_phy_mt7620_init(dev)) + return (ENXIO); + break; + case MTK_SOC_RT3662: /* Fallthrough */ + case MTK_SOC_RT3883: + if (mtk_pcie_phy_rt3883_init(dev)) + return (ENXIO); + break; + default: + device_printf(dev, "unsupported device %x\n", sc->socid); + return (ENXIO); + } + + /* + * If we were successful so far go and set up the PCIe slots, so we + * may allocate mem/io/irq resources and enumerate busses later. + */ + mtk_pcie_phy_setup_slots(dev); + + return (0); +} + +static int +mtk_pcie_phy_start(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + if (sc->socid == MTK_SOC_MT7621 && + (mtk_sysctl_get(SYSCTL_REVID) & SYSCTL_REVID_MASK) != + SYSCTL_MT7621_REV_E) { + if (fdt_reset_assert_all(dev)) + return (ENXIO); + } else { + if (fdt_reset_deassert_all(dev)) + return (ENXIO); + } + + if (fdt_clock_enable_all(dev)) + return (ENXIO); + + return (0); +} + +static int +mtk_pcie_phy_stop(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + if (sc->socid == MTK_SOC_MT7621 && + (mtk_sysctl_get(SYSCTL_REVID) & SYSCTL_REVID_MASK) != + SYSCTL_MT7621_REV_E) { + if (fdt_reset_deassert_all(dev)) + return (ENXIO); + } else { + if (fdt_reset_assert_all(dev)) + return (ENXIO); + } + + if (fdt_clock_disable_all(dev)) + return (ENXIO); + + return (0); +} + +#define mtk_pcie_phy_set(_sc, _reg, _s, _n, _v) \ + MT_WRITE32((_sc), (_reg), ((MT_READ32((_sc), (_reg)) & \ + (~(((1ull << (_n)) - 1) << (_s)))) | ((_v) << (_s)))) + +static void +mtk_pcie_phy_mt7621_bypass_pipe_rst(struct mtk_pci_softc *sc, uint32_t off) +{ + + mtk_pcie_phy_set(sc, off + 0x002c, 12, 1, 1); + mtk_pcie_phy_set(sc, off + 0x002c, 4, 1, 1); + mtk_pcie_phy_set(sc, off + 0x012c, 12, 1, 1); + mtk_pcie_phy_set(sc, off + 0x012c, 4, 1, 1); + mtk_pcie_phy_set(sc, off + 0x102c, 12, 1, 1); + mtk_pcie_phy_set(sc, off + 0x102c, 4, 1, 1); +} + +static void +mtk_pcie_phy_mt7621_setup_ssc(struct mtk_pci_softc *sc, uint32_t off) +{ + uint32_t xtal_sel; + + xtal_sel = mtk_sysctl_get(SYSCTL_SYSCFG) >> 6; + xtal_sel &= 0x7; + + mtk_pcie_phy_set(sc, off + 0x400, 8, 1, 1); + mtk_pcie_phy_set(sc, off + 0x400, 9, 2, 0); + mtk_pcie_phy_set(sc, off + 0x000, 4, 1, 1); + mtk_pcie_phy_set(sc, off + 0x100, 4, 1, 1); + mtk_pcie_phy_set(sc, off + 0x000, 5, 1, 0); + mtk_pcie_phy_set(sc, off + 0x100, 5, 1, 0); + + if (xtal_sel <= 5 && xtal_sel >= 3) { + mtk_pcie_phy_set(sc, off + 0x490, 6, 2, 1); + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 12, 0x1a); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 12, 0x1a); + } else { + mtk_pcie_phy_set(sc, off + 0x490, 6, 2, 0); + if (xtal_sel >= 6) { + mtk_pcie_phy_set(sc, off + 0x4bc, 4, 2, 0x01); + mtk_pcie_phy_set(sc, off + 0x49c, 0, 31, 0x18000000); + mtk_pcie_phy_set(sc, off + 0x4a4, 0, 16, 0x18d); + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 12, 0x4a); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 12, 0x4a); + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 12, 0x11); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 12, 0x11); + } else { + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 12, 0x1a); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 12, 0x1a); + } + } + + mtk_pcie_phy_set(sc, off + 0x4a0, 5, 1, 1); + mtk_pcie_phy_set(sc, off + 0x490, 22, 2, 2); + mtk_pcie_phy_set(sc, off + 0x490, 18, 4, 6); + mtk_pcie_phy_set(sc, off + 0x490, 12, 4, 2); + mtk_pcie_phy_set(sc, off + 0x490, 8, 4, 1); + mtk_pcie_phy_set(sc, off + 0x4ac, 16, 3, 0); + mtk_pcie_phy_set(sc, off + 0x490, 1, 3, 2); + + if (xtal_sel <= 5 && xtal_sel >= 3) { + mtk_pcie_phy_set(sc, off + 0x414, 6, 2, 1); + mtk_pcie_phy_set(sc, off + 0x414, 5, 1, 1); + } + + mtk_pcie_phy_set(sc, off + 0x414, 28, 2, 1); + mtk_pcie_phy_set(sc, off + 0x040, 17, 4, 7); + mtk_pcie_phy_set(sc, off + 0x040, 16, 1, 1); + mtk_pcie_phy_set(sc, off + 0x140, 17, 4, 7); + mtk_pcie_phy_set(sc, off + 0x140, 16, 1, 1); + + mtk_pcie_phy_set(sc, off + 0x000, 5, 1, 1); + mtk_pcie_phy_set(sc, off + 0x100, 5, 1, 1); + mtk_pcie_phy_set(sc, off + 0x000, 4, 1, 0); + mtk_pcie_phy_set(sc, off + 0x100, 4, 1, 0); +} + +/* XXX: ugly, we need to fix this at some point */ +#define MT7621_GPIO_CTRL0 *((volatile uint32_t *)0xbe000600) +#define MT7621_GPIO_DATA0 *((volatile uint32_t *)0xbe000620) + +#define mtk_gpio_clr_set(_reg, _clr, _set) \ + do { \ + (_reg) = ((_reg) & (_clr)) | (_set); \ + } while (0) + +static int +mtk_pcie_phy_mt7621_init(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + /* First off, stop the PHY */ + if (mtk_pcie_phy_stop(dev)) + return (ENXIO); + + /* PCIe resets are GPIO pins */ + mtk_sysctl_clr_set(SYSCTL_GPIOMODE, MT7621_PERST_GPIO_MODE | + MT7621_UARTL3_GPIO_MODE, MT7621_PERST_GPIO | MT7621_UARTL3_GPIO); + + /* Set GPIO pins as outputs */ + mtk_gpio_clr_set(MT7621_GPIO_CTRL0, 0, MT7621_PCIE_RST); + + /* Assert resets to PCIe devices */ + mtk_gpio_clr_set(MT7621_GPIO_DATA0, MT7621_PCIE_RST, 0); + + /* Give everything a chance to sink in */ + DELAY(100000); + + /* Now start the PHY again */ + if (mtk_pcie_phy_start(dev)) + return (ENXIO); + + /* Wait for things to settle */ + DELAY(100000); + + /* Only apply below to REV-E hardware */ + if ((mtk_sysctl_get(SYSCTL_REVID) & SYSCTL_REVID_MASK) == + SYSCTL_MT7621_REV_E) + mtk_pcie_phy_mt7621_bypass_pipe_rst(sc, 0x9000); + + /* Setup PCIe ports 0 and 1 */ + mtk_pcie_phy_mt7621_setup_ssc(sc, 0x9000); + /* Setup PCIe port 2 */ + mtk_pcie_phy_mt7621_setup_ssc(sc, 0xa000); + + /* Deassert resets to PCIe devices */ + mtk_gpio_clr_set(MT7621_GPIO_DATA0, 0, MT7621_PCIE_RST); + + /* Set number of slots supported */ + sc->num_slots = 3; + + /* Give it a chance to sink in */ + DELAY(100000); + + return (0); +} + +static void +mtk_pcie_phy_mt7628_setup(struct mtk_pci_softc *sc, uint32_t off) +{ + uint32_t xtal_sel; + + xtal_sel = mtk_sysctl_get(SYSCTL_SYSCFG) >> 6; + xtal_sel &= 0x1; + + mtk_pcie_phy_set(sc, off + 0x400, 8, 1, 1); + mtk_pcie_phy_set(sc, off + 0x400, 9, 2, 0); + mtk_pcie_phy_set(sc, off + 0x000, 4, 1, 1); + mtk_pcie_phy_set(sc, off + 0x000, 5, 1, 0); + mtk_pcie_phy_set(sc, off + 0x4ac, 16, 3, 3); + + if (xtal_sel == 1) { + mtk_pcie_phy_set(sc, off + 0x4bc, 24, 8, 0x7d); + mtk_pcie_phy_set(sc, off + 0x490, 12, 4, 0x08); + mtk_pcie_phy_set(sc, off + 0x490, 6, 2, 0x01); + mtk_pcie_phy_set(sc, off + 0x4c0, 0, 32, 0x1f400000); + mtk_pcie_phy_set(sc, off + 0x4a4, 0, 16, 0x013d); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 16, 0x74); + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 16, 0x74); + } else { + mtk_pcie_phy_set(sc, off + 0x4bc, 24, 8, 0x64); + mtk_pcie_phy_set(sc, off + 0x490, 12, 4, 0x0a); + mtk_pcie_phy_set(sc, off + 0x490, 6, 2, 0x00); + mtk_pcie_phy_set(sc, off + 0x4c0, 0, 32, 0x19000000); + mtk_pcie_phy_set(sc, off + 0x4a4, 0, 16, 0x018d); + mtk_pcie_phy_set(sc, off + 0x4a8, 16, 16, 0x4a); + mtk_pcie_phy_set(sc, off + 0x4a8, 0, 16, 0x4a); + } + + mtk_pcie_phy_set(sc, off + 0x498, 0, 8, 5); + mtk_pcie_phy_set(sc, off + 0x000, 5, 1, 1); + mtk_pcie_phy_set(sc, off + 0x000, 4, 1, 0); +} + +static int +mtk_pcie_phy_mt7628_init(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + /* Set PCIe reset to normal mode */ + mtk_sysctl_clr_set(SYSCTL_GPIOMODE, MT7628_PERST_GPIO_MODE, + MT7628_PERST); + + /* Start the PHY */ + if (mtk_pcie_phy_start(dev)) + return (ENXIO); + + /* Give it a chance to sink in */ + DELAY(100000); + + /* Setup the PHY */ + mtk_pcie_phy_mt7628_setup(sc, 0x9000); + + /* Deassert PCIe device reset */ + MT_CLR_SET32(sc, MTK_PCI_PCICFG, MTK_PCI_RESET, 0); + + /* Set number of slots supported */ + sc->num_slots = 1; + + return (0); +} + +static int +mtk_pcie_phy_mt7620_wait_busy(struct mtk_pci_softc *sc) +{ + uint32_t reg_value, retry; + + reg_value = retry = 0; + + while (retry++ < MT7620_MAX_RETRIES) { + reg_value = MT_READ32(sc, MT7620_PCIE_PHY_CFG); + if (reg_value & PHY_BUSY) + DELAY(100000); + else + break; + } + + if (retry >= MT7620_MAX_RETRIES) + return (ENXIO); + + return (0); +} + +static int +mtk_pcie_phy_mt7620_set(struct mtk_pci_softc *sc, uint32_t reg, + uint32_t val) +{ + uint32_t reg_val; + + if (mtk_pcie_phy_mt7620_wait_busy(sc)) + return (ENXIO); + + reg_val = PHY_MODE_WRITE | ((reg & 0xff) << PHY_ADDR_OFFSET) | + (val & 0xff); + MT_WRITE32(sc, MT7620_PCIE_PHY_CFG, reg_val); + DELAY(1000); + + if (mtk_pcie_phy_mt7620_wait_busy(sc)) + return (ENXIO); + + return (0); +} + +static int +mtk_pcie_phy_mt7620_init(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + /* + * The below sets the PCIe PHY to bypass the PCIe DLL and enables + * "elastic buffer control", whatever that may be... + */ + if (mtk_pcie_phy_mt7620_set(sc, 0x00, 0x80) || + mtk_pcie_phy_mt7620_set(sc, 0x01, 0x04) || + mtk_pcie_phy_mt7620_set(sc, 0x68, 0x84)) + return (ENXIO); + + /* Stop PCIe */ + if (mtk_pcie_phy_stop(dev)) + return (ENXIO); + + /* Restore PPLL to a sane state before going on */ + mtk_sysctl_clr_set(MT7620_PPLL_DRV, LC_CKDRVPD, PDRV_SW_SET); + + /* No PCIe on the MT7620N */ + if (!(mtk_sysctl_get(SYSCTL_REVID) & MT7620_PKG_BGA)) { + device_printf(dev, "PCIe disabled for MT7620N\n"); + mtk_sysctl_clr_set(MT7620_PPLL_CFG0, 0, PPLL_SW_SET); + mtk_sysctl_clr_set(MT7620_PPLL_CFG1, 0, PPLL_PD); + return (ENXIO); + } + + /* PCIe device reset pin is in normal mode */ + mtk_sysctl_clr_set(SYSCTL_GPIOMODE, MT7620_PERST_GPIO_MODE, + MT7620_PERST); + + /* Enable PCIe now */ + if (mtk_pcie_phy_start(dev)) + return (ENXIO); + + /* Give it a chance to sink in */ + DELAY(100000); + + /* If PLL is not locked - bail */ + if (!(mtk_sysctl_get(MT7620_PPLL_CFG1) & PPLL_LOCKED)) { + device_printf(dev, "no PPLL not lock\n"); + mtk_pcie_phy_stop(dev); + return (ENXIO); + } + + /* Configure PCIe PLL */ + mtk_sysctl_clr_set(MT7620_PPLL_DRV, LC_CKDRVOHZ | LC_CKDRVHZ, + LC_CKDRVPD | PDRV_SW_SET); + + /* and give it a chance to settle */ + DELAY(100000); + + /* Deassert PCIe device reset */ + MT_CLR_SET32(sc, MTK_PCI_PCICFG, MTK_PCI_RESET, 0); + + /* MT7620 supports one PCIe slot */ + sc->num_slots = 1; + + return (0); +} + +static int +mtk_pcie_phy_rt3883_init(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + + /* Enable PCI host mode and PCIe RC mode */ + mtk_sysctl_clr_set(SYSCTL_SYSCFG1, 0, RT3883_PCI_HOST_MODE | + RT3883_PCIE_RC_MODE); + + /* Enable PCIe PHY */ + if (mtk_pcie_phy_start(dev)) + return (ENXIO); + + /* Disable PCI, we only support PCIe for now */ + mtk_sysctl_clr_set(SYSCTL_RSTCTRL, 0, RT3883_PCI_RST); + mtk_sysctl_clr_set(SYSCTL_CLKCFG1, RT3883_PCI_CLK, 0); + + /* Give things a chance to sink in */ + DELAY(500000); + + /* Set PCIe port number to 0 and lift PCIe reset */ + MT_WRITE32(sc, MTK_PCI_PCICFG, 0); + + /* Configure PCI Arbiter */ + MT_WRITE32(sc, MTK_PCI_ARBCTL, 0x79); + + /* We have a single PCIe slot */ + sc->num_slots = 1; + + return (0); +} + +static void +mtk_pcie_phy_setup_slots(device_t dev) +{ + struct mtk_pci_softc *sc = device_get_softc(dev); + uint32_t bar0_val, val; + int i; + + /* Disable all PCIe interrupts */ + MT_WRITE32(sc, MTK_PCI_PCIENA, 0); + + /* Default bar0_val is 64M, enabled */ + bar0_val = 0x03FF0001; + + /* But we override it to 2G, enabled for some SoCs */ + if (sc->socid == MTK_SOC_MT7620A || sc->socid == MTK_SOC_MT7628 || + sc->socid == MTK_SOC_MT7688 || sc->socid == MTK_SOC_MT7621) + bar0_val = 0x7FFF0001; + + /* We still don't know which slots have linked up */ + sc->pcie_link_status = 0; + + /* XXX: I am not sure if this delay is really necessary */ + DELAY(500000); + + /* + * See which slots have links and mark them. + * Set up all slots' BARs and make them look like PCIe bridges. + */ + for (i = 0; i < sc->num_slots; i++) { + /* If slot has link - mark it */ + if (MT_READ32(sc, MTK_PCIE_STATUS(i)) & 1) + sc->pcie_link_status |= (1<pci_res[0], (off), (val)) +#define MT_WRITE16(sc, off, val) \ + bus_write_2((sc)->pci_res[0], (off), (val)) +#define MT_WRITE8(sc, off, val) \ + bus_write_1((sc)->pci_res[0], (off), (val)) +#define MT_READ32(sc, off) \ + bus_read_4((sc)->pci_res[0], (off)) +#define MT_READ16(sc, off) \ + bus_read_2((sc)->pci_res[0], (off)) +#define MT_READ8(sc, off) \ + bus_read_1((sc)->pci_res[0], (off)) + +#define MT_CLR_SET32(sc, off, clr, set) \ + MT_WRITE32((sc), (off), ((MT_READ32((sc), (off)) & ~(clr)) | (off))) + +#endif /* __MTK_PCIE_H__ */ -- cgit v1.1 From 0b9eafa294015a9c7d4b2f39a39997164aae5d63 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:28:12 +0000 Subject: Introduce better locking for mtk_gpio_v[12] drivers Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5887 --- sys/mips/mediatek/mtk_gpio_v1.c | 49 +++++++++++++++++++++++++++++++-------- sys/mips/mediatek/mtk_gpio_v2.c | 51 ++++++++++++++++++++++++++++++++--------- 2 files changed, 79 insertions(+), 21 deletions(-) diff --git a/sys/mips/mediatek/mtk_gpio_v1.c b/sys/mips/mediatek/mtk_gpio_v1.c index 1882029..29b2258 100644 --- a/sys/mips/mediatek/mtk_gpio_v1.c +++ b/sys/mips/mediatek/mtk_gpio_v1.c @@ -431,19 +431,29 @@ mtk_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) static int mtk_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) { - struct mtk_gpio_softc *sc = device_get_softc(dev); + struct mtk_gpio_softc *sc; + int ret; + + sc = device_get_softc(dev); + ret = 0; - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + if (pin >= sc->num_pins) return (EINVAL); MTK_GPIO_LOCK(sc); + if(!(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) { + ret = EINVAL; + goto out; + } + if (value) MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); else MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); - MTK_GPIO_UNLOCK(sc); - return (0); +out: + MTK_GPIO_UNLOCK(sc); + return (ret); } static int @@ -451,33 +461,50 @@ mtk_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) { struct mtk_gpio_softc *sc; uint32_t data; + int ret; sc = device_get_softc(dev); + ret = 0; - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) + if (pin >= sc->num_pins) return (EINVAL); MTK_GPIO_LOCK(sc); + if(!(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) { + ret = EINVAL; + goto out; + } data = MTK_READ_4(sc, GPIO_PIODATA(sc)); - MTK_GPIO_UNLOCK(sc); *val = (data & (1u << pin)) ? 1 : 0; - return (0); +out: + MTK_GPIO_UNLOCK(sc); + return (ret); } static int mtk_gpio_pin_toggle(device_t dev, uint32_t pin) { - struct mtk_gpio_softc *sc = device_get_softc(dev); + struct mtk_gpio_softc *sc; + int ret; - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + if (pin >= sc->num_pins) return (EINVAL); + sc = device_get_softc(dev); + ret = 0; + MTK_GPIO_LOCK(sc); + if (!(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) { + ret = EINVAL; + goto out; + } MTK_WRITE_4(sc, GPIO_PIOTOG(sc), (1u << pin)); + +out: MTK_GPIO_UNLOCK(sc); - return (0); + return (ret); } static int @@ -571,7 +598,9 @@ mtk_gpio_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; sc = device_get_softc(dev); + MTK_GPIO_LOCK(sc); MTK_WRITE_4(sc, GPIO_PIOINT(sc), 1u << pisrc->irq); + MTK_GPIO_UNLOCK(sc); } static int diff --git a/sys/mips/mediatek/mtk_gpio_v2.c b/sys/mips/mediatek/mtk_gpio_v2.c index 543133c..282b112 100644 --- a/sys/mips/mediatek/mtk_gpio_v2.c +++ b/sys/mips/mediatek/mtk_gpio_v2.c @@ -425,19 +425,29 @@ mtk_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags) static int mtk_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value) { - struct mtk_gpio_softc *sc = device_get_softc(dev); + struct mtk_gpio_softc *sc; + int ret; - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + if (pin >= sc->num_pins) return (EINVAL); + sc = device_get_softc(dev); + ret = 0; + MTK_GPIO_LOCK(sc); + if (!(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) { + ret = EINVAL; + goto out; + } if (value) MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); else MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); + +out: MTK_GPIO_UNLOCK(sc); - return (0); + return (ret); } static int @@ -445,39 +455,56 @@ mtk_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val) { struct mtk_gpio_softc *sc; uint32_t data; + int ret; - sc = device_get_softc(dev); - - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) + if (pin >= sc->num_pins) return (EINVAL); + sc = device_get_softc(dev); + ret = 0; + MTK_GPIO_LOCK(sc); + if (!(sc->pins[pin].pin_flags & GPIO_PIN_INPUT)) { + ret = EINVAL; + goto out; + } data = MTK_READ_4(sc, GPIO_PIODATA(sc)); - MTK_GPIO_UNLOCK(sc); *val = (data & (1u << pin)) ? 1 : 0; - return (0); +out: + MTK_GPIO_UNLOCK(sc); + return (ret); } static int mtk_gpio_pin_toggle(device_t dev, uint32_t pin) { - struct mtk_gpio_softc *sc = device_get_softc(dev); + struct mtk_gpio_softc *sc; uint32_t val; + int ret; - if (pin >= sc->num_pins || !(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) + if (pin >= sc->num_pins) return (EINVAL); + sc = device_get_softc(dev); + ret = 0; + MTK_GPIO_LOCK(sc); + if(!(sc->pins[pin].pin_flags & GPIO_PIN_OUTPUT)) { + ret = EINVAL; + goto out; + } val = MTK_READ_4(sc, GPIO_PIODATA(sc)); val &= (1u << pin); if (val) MTK_WRITE_4(sc, GPIO_PIORESET(sc), (1u << pin)); else MTK_WRITE_4(sc, GPIO_PIOSET(sc), (1u << pin)); + +out: MTK_GPIO_UNLOCK(sc); - return (0); + return (ret); } static int @@ -571,7 +598,9 @@ mtk_gpio_pic_post_filter(device_t dev, struct intr_irqsrc *isrc) pisrc = (struct mtk_gpio_pin_irqsrc *)isrc; sc = device_get_softc(dev); + MTK_GPIO_LOCK(sc); MTK_WRITE_4(sc, GPIO_PIOINT(sc), 1u << pisrc->irq); + MTK_GPIO_UNLOCK(sc); } static int -- cgit v1.1 From 707781311d708dc22fc53e8910d550d39e8e77e2 Mon Sep 17 00:00:00 2001 From: sgalabov Date: Fri, 8 Apr 2016 15:48:10 +0000 Subject: Fix MIPS INTRNG omissions, add soft/hard interrupts with different names Reviewed by: kan Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D5888 --- sys/mips/mips/mips_pic.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sys/mips/mips/mips_pic.c b/sys/mips/mips/mips_pic.c index e4a7672..a24647d 100644 --- a/sys/mips/mips/mips_pic.c +++ b/sys/mips/mips/mips_pic.c @@ -134,13 +134,6 @@ pic_irq_mask(struct mips_pic_softc *sc, u_int irq) mips_wr_status(mips_rd_status() & ~((1 << irq) << 8)); } -#ifdef SMP -static void -mips_pic_init_secondary(device_t dev) -{ -} -#endif /* SMP */ - static inline intptr_t pic_xref(device_t dev) { @@ -155,23 +148,30 @@ static int mips_pic_register_isrcs(struct mips_pic_softc *sc) { int error; - uint32_t irq, i; + uint32_t irq, i, tmpirq; struct intr_irqsrc *isrc; - const char *name; + char *name; - name = device_get_nameunit(sc->pic_dev); for (irq = 0; irq < sc->nirqs; irq++) { sc->pic_irqs[irq].irq = irq; sc->pic_irqs[irq].res = rman_reserve_resource(&sc->pic_irq_rman, irq, irq, 1, RF_ACTIVE, sc->pic_dev); if (sc->pic_irqs[irq].res == NULL) { device_printf(sc->pic_dev, - "%s failed to alloc resource for irq %d", + "%s failed to alloc resource for irq %u", __func__, irq); return (ENOMEM); } isrc = PIC_INTR_ISRC(sc, irq); - error = intr_isrc_register(isrc, sc->pic_dev, 0, "%s", name); + if (irq < NSOFT_IRQS) { + name = "sint"; + tmpirq = irq; + } else { + name = "int"; + tmpirq = irq - NSOFT_IRQS; + } + error = intr_isrc_register(isrc, sc->pic_dev, 0, "%s%u", + name, tmpirq); if (error != 0) { for (i = 0; i < irq; i++) { intr_isrc_deregister(PIC_INTR_ISRC(sc, i)); -- cgit v1.1 From 4725d544894d02c6313aad59ff0a71227654779c Mon Sep 17 00:00:00 2001 From: zbb Date: Fri, 8 Apr 2016 16:14:18 +0000 Subject: Fix sending TSO packets larger than single DMA segment on VNIC Due to the bug in the number of 'GATHER' subdescriptors for TSO packets, VNIC was not able to transmit more than one DMA segment with TSO enabled. Obtained from: Semihalf Sponsored by: Cavium --- sys/dev/vnic/nicvf_queues.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/sys/dev/vnic/nicvf_queues.c b/sys/dev/vnic/nicvf_queues.c index 9b46d7c..087cf9f 100644 --- a/sys/dev/vnic/nicvf_queues.c +++ b/sys/dev/vnic/nicvf_queues.c @@ -1904,7 +1904,6 @@ static int nicvf_tx_mbuf_locked(struct snd_queue *sq, struct mbuf **mbufp) { bus_dma_segment_t segs[256]; - struct nicvf *nic; struct snd_buff *snd_buff; size_t seg; int nsegs, qentry; @@ -1928,12 +1927,7 @@ nicvf_tx_mbuf_locked(struct snd_queue *sq, struct mbuf **mbufp) } /* Set how many subdescriptors is required */ - nic = sq->nic; - if ((*mbufp)->m_pkthdr.tso_segsz != 0 && nic->hw_tso) - subdesc_cnt = MIN_SQ_DESC_PER_PKT_XMIT; - else - subdesc_cnt = MIN_SQ_DESC_PER_PKT_XMIT + nsegs - 1; - + subdesc_cnt = MIN_SQ_DESC_PER_PKT_XMIT + nsegs - 1; if (subdesc_cnt > sq->free_cnt) { /* ARM64TODO: Add mbuf defragmentation if we lack descriptors */ bus_dmamap_unload(sq->snd_buff_dmat, snd_buff->dmap); -- cgit v1.1 From fd767bd07b023753c54246e5acc56a1454c1e9f0 Mon Sep 17 00:00:00 2001 From: trasz Date: Fri, 8 Apr 2016 18:15:31 +0000 Subject: Make it possible to tweak RCTL throttling sysctls at runtime. MFC after: 1 month Sponsored by: The FreeBSD Foundation --- sys/kern/kern_rctl.c | 127 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 110 insertions(+), 17 deletions(-) diff --git a/sys/kern/kern_rctl.c b/sys/kern/kern_rctl.c index 8f301b8..2442852 100644 --- a/sys/kern/kern_rctl.c +++ b/sys/kern/kern_rctl.c @@ -80,28 +80,43 @@ FEATURE(rctl, "Resource Limits"); static unsigned int rctl_maxbufsize = RCTL_MAX_OUTBUFSIZE; static int rctl_log_rate_limit = 10; static int rctl_devctl_rate_limit = 10; -static unsigned int rctl_throttle_min = 0; -static unsigned int rctl_throttle_max = 0; -static unsigned int rctl_throttle_pct = 0; -static unsigned int rctl_throttle_pct2 = 0; + +/* + * Values below are initialized in rctl_init(). + */ +static int rctl_throttle_min = -1; +static int rctl_throttle_max = -1; +static int rctl_throttle_pct = -1; +static int rctl_throttle_pct2 = -1; + +static int rctl_throttle_min_sysctl(SYSCTL_HANDLER_ARGS); +static int rctl_throttle_max_sysctl(SYSCTL_HANDLER_ARGS); +static int rctl_throttle_pct_sysctl(SYSCTL_HANDLER_ARGS); +static int rctl_throttle_pct2_sysctl(SYSCTL_HANDLER_ARGS); SYSCTL_NODE(_kern_racct, OID_AUTO, rctl, CTLFLAG_RW, 0, "Resource Limits"); SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, maxbufsize, CTLFLAG_RWTUN, &rctl_maxbufsize, 0, "Maximum output buffer size"); SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, log_rate_limit, CTLFLAG_RW, &rctl_log_rate_limit, 0, "Maximum number of log messages per second"); -SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, devctl_rate_limit, CTLFLAG_RW, +SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, devctl_rate_limit, CTLFLAG_RWTUN, &rctl_devctl_rate_limit, 0, "Maximum number of devctl messages per second"); -SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_min, CTLFLAG_RDTUN, - &rctl_throttle_min, 0, "Shortest throttling duration, in hz"); -SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_max, CTLFLAG_RDTUN, - &rctl_throttle_max, 0, "Longest throttling duration, in hz"); -SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_pct, CTLFLAG_RDTUN, - &rctl_throttle_pct, 0, +SYSCTL_PROC(_kern_racct_rctl, OID_AUTO, throttle_min, + CTLTYPE_UINT | CTLFLAG_RWTUN, 0, 0, &rctl_throttle_min_sysctl, "IU", + "Shortest throttling duration, in hz"); +TUNABLE_INT("kern.racct.rctl.throttle_min", &rctl_throttle_min); +SYSCTL_PROC(_kern_racct_rctl, OID_AUTO, throttle_max, + CTLTYPE_UINT | CTLFLAG_RWTUN, 0, 0, &rctl_throttle_max_sysctl, "IU", + "Longest throttling duration, in hz"); +TUNABLE_INT("kern.racct.rctl.throttle_max", &rctl_throttle_max); +SYSCTL_PROC(_kern_racct_rctl, OID_AUTO, throttle_pct, + CTLTYPE_UINT | CTLFLAG_RWTUN, 0, 0, &rctl_throttle_pct_sysctl, "IU", "Throttling penalty for process consumption, in percent"); -SYSCTL_UINT(_kern_racct_rctl, OID_AUTO, throttle_pct2, CTLFLAG_RDTUN, - &rctl_throttle_pct2, 0, +TUNABLE_INT("kern.racct.rctl.throttle_pct", &rctl_throttle_pct); +SYSCTL_PROC(_kern_racct_rctl, OID_AUTO, throttle_pct2, + CTLTYPE_UINT | CTLFLAG_RWTUN, 0, 0, &rctl_throttle_pct2_sysctl, "IU", "Throttling penalty for container consumption, in percent"); +TUNABLE_INT("kern.racct.rctl.throttle_pct2", &rctl_throttle_pct2); /* * 'rctl_rule_link' connects a rule with every racct it's related to. @@ -212,6 +227,78 @@ static void rctl_rule_to_sbuf(struct sbuf *sb, const struct rctl_rule *rule); static MALLOC_DEFINE(M_RCTL, "rctl", "Resource Limits"); +static int rctl_throttle_min_sysctl(SYSCTL_HANDLER_ARGS) +{ + int val = rctl_throttle_min; + int error; + + error = sysctl_handle_int(oidp, &val, 0, req); + if (error || !req->newptr) + return (error); + if (val < 1 || val > rctl_throttle_max) + return (EINVAL); + + RCTL_WLOCK(); + rctl_throttle_min = val; + RCTL_WUNLOCK(); + + return (0); +} + +static int rctl_throttle_max_sysctl(SYSCTL_HANDLER_ARGS) +{ + int val = rctl_throttle_max; + int error; + + error = sysctl_handle_int(oidp, &val, 0, req); + if (error || !req->newptr) + return (error); + if (val < rctl_throttle_min) + return (EINVAL); + + RCTL_WLOCK(); + rctl_throttle_max = val; + RCTL_WUNLOCK(); + + return (0); +} + +static int rctl_throttle_pct_sysctl(SYSCTL_HANDLER_ARGS) +{ + int val = rctl_throttle_pct; + int error; + + error = sysctl_handle_int(oidp, &val, 0, req); + if (error || !req->newptr) + return (error); + if (val < 0) + return (EINVAL); + + RCTL_WLOCK(); + rctl_throttle_pct = val; + RCTL_WUNLOCK(); + + return (0); +} + +static int rctl_throttle_pct2_sysctl(SYSCTL_HANDLER_ARGS) +{ + int val = rctl_throttle_pct2; + int error; + + error = sysctl_handle_int(oidp, &val, 0, req); + if (error || !req->newptr) + return (error); + if (val < 0) + return (EINVAL); + + RCTL_WLOCK(); + rctl_throttle_pct2 = val; + RCTL_WUNLOCK(); + + return (0); +} + static const char * rctl_subject_type_name(int subject) { @@ -2122,13 +2209,19 @@ rctl_init(void) rctl_rule_zone = uma_zcreate("rctl_rule", sizeof(struct rctl_rule), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); - if (rctl_throttle_min <= 0) + /* + * Set default values, making sure not to overwrite the ones + * fetched from tunables. Most of those could be set at the + * declaration, except for the rctl_throttle_max - we cannot + * set it there due to hz not being compile time constant. + */ + if (rctl_throttle_min < 1) rctl_throttle_min = 1; - if (rctl_throttle_max <= 0) + if (rctl_throttle_max < rctl_throttle_min) rctl_throttle_max = 2 * hz; - if (rctl_throttle_pct <= 0) + if (rctl_throttle_pct < 0) rctl_throttle_pct = 100; - if (rctl_throttle_pct2 <= 0) + if (rctl_throttle_pct2 < 0) rctl_throttle_pct2 = 100; } -- cgit v1.1 From 64d68e8b7ecf39652e0ff0935b9c49d2b33ed516 Mon Sep 17 00:00:00 2001 From: jmcneill Date: Fri, 8 Apr 2016 23:07:16 +0000 Subject: Attach hwreset resources at the same time as clock resources. --- sys/arm/allwinner/aw_reset.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/arm/allwinner/aw_reset.c b/sys/arm/allwinner/aw_reset.c index cabd9c7..3f56e9f 100644 --- a/sys/arm/allwinner/aw_reset.c +++ b/sys/arm/allwinner/aw_reset.c @@ -159,5 +159,6 @@ static driver_t aw_reset_driver = { static devclass_t aw_reset_devclass; -DRIVER_MODULE(aw_reset, simplebus, aw_reset_driver, aw_reset_devclass, 0, 0); +EARLY_DRIVER_MODULE(aw_reset, simplebus, aw_reset_driver, aw_reset_devclass, + 0, 0, BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE); MODULE_VERSION(aw_reset, 1); -- cgit v1.1 From f96cd9f3c12e20c84846e5fb8d19be144de77fbc Mon Sep 17 00:00:00 2001 From: jmcneill Date: Fri, 8 Apr 2016 23:11:00 +0000 Subject: Fix incorrect pin definitions for Allwinner A31. --- sys/arm/allwinner/a31/a31_padconf.c | 40 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/sys/arm/allwinner/a31/a31_padconf.c b/sys/arm/allwinner/a31/a31_padconf.c index 1a38c79..e591d57 100644 --- a/sys/arm/allwinner/a31/a31_padconf.c +++ b/sys/arm/allwinner/a31/a31_padconf.c @@ -51,19 +51,19 @@ const static struct allwinner_pins a31_pins[] = { {"PA12", 0, 12, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", NULL, NULL}}, {"PA13", 0, 13, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", NULL, NULL}}, {"PA14", 0, 14, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", NULL, NULL}}, - {"PA15", 0, 15, {"gpio_in", "gpio_out", "gmac", "lcd1", "dmic", NULL, NULL, NULL}}, + {"PA15", 0, 15, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_a", NULL, NULL, NULL}}, {"PA16", 0, 16, {"gpio_in", "gpio_out", "gmac", "lcd1", "dmic", NULL, NULL, NULL}}, - {"PA17", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_b", NULL, NULL, NULL}}, - {"PA18", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, NULL, NULL}}, - {"PA19", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, NULL, NULL}}, - {"PA20", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA21", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA22", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA23", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA24", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA25", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, - {"PA26", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_c", NULL, NULL, NULL}}, - {"PA27", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", NULL, NULL, NULL, NULL}}, + {"PA17", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "dmic", NULL, NULL, NULL}}, + {"PA18", 0, 18, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_b", NULL, NULL, NULL}}, + {"PA19", 0, 19, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, NULL, NULL}}, + {"PA20", 0, 20, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, NULL, NULL}}, + {"PA21", 0, 21, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, + {"PA22", 0, 22, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, + {"PA23", 0, 23, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, + {"PA24", 0, 24, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, + {"PA25", 0, 25, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, NULL, NULL}}, + {"PA26", 0, 26, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_c", NULL, NULL, NULL}}, + {"PA27", 0, 27, {"gpio_in", "gpio_out", "gmac", "lcd1", NULL, NULL, NULL, NULL}}, {"PB0", 1, 0, {"gpio_in", "gpio_out", "i2s0", "uart3", "csi", NULL, NULL, NULL}}, {"PB1", 1, 1, {"gpio_in", "gpio_out", "i2s0", NULL, NULL, NULL, NULL, NULL}}, @@ -144,11 +144,11 @@ const static struct allwinner_pins a31_pins[] = { {"PE9", 4, 9, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, {"PE10", 4, 10, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, {"PE11", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, - {"PE12", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, - {"PE13", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, - {"PE14", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, - {"PE15", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, - {"PE16", 4, 11, {"gpio_in", "gpio_out", "csi", NULL, NULL, NULL, NULL, NULL}}, + {"PE12", 4, 12, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, + {"PE13", 4, 13, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, + {"PE14", 4, 14, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, + {"PE15", 4, 15, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, NULL, NULL}}, + {"PE16", 4, 16, {"gpio_in", "gpio_out", "csi", NULL, NULL, NULL, NULL, NULL}}, {"PF0", 5, 0, {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}}, {"PF1", 5, 1, {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}}, @@ -205,9 +205,9 @@ const static struct allwinner_pins a31_pins[] = { {"PH25", 7, 25, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}}, {"PH26", 7, 26, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}}, {"PH27", 7, 27, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}}, - {"PH28", 7, 27, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}}, - {"PH29", 7, 27, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}}, - {"PH30", 7, 27, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}}, + {"PH28", 7, 28, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}}, + {"PH29", 7, 29, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}}, + {"PH30", 7, 30, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}}, }; const struct allwinner_padconf a31_padconf = { -- cgit v1.1 From 587ad3ebbb7c664174d14c713098341503b82961 Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 00:54:02 +0000 Subject: [net80211] revert part of r282405 in order to restore IBSS behaviour. This prevents nodes being created for peers on BSSes that are not our own. (Ie, same channel, IBSS, but different BSS.) The "IBSS merge" thing was fixed by me enabling "see all beacons" in the ath(4) driver a few months ago. Trouble is, we now need the filtering again. Tested: * ath(4), IBSS, on a very busy IBSS channel with lots (> 15) IBSS networks. PR: kern/208643 Sponsored by: Eva Automation, Inc. --- sys/net80211/ieee80211_adhoc.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sys/net80211/ieee80211_adhoc.c b/sys/net80211/ieee80211_adhoc.c index a9334d0..eca9877 100644 --- a/sys/net80211/ieee80211_adhoc.c +++ b/sys/net80211/ieee80211_adhoc.c @@ -371,10 +371,7 @@ adhoc_input(struct ieee80211_node *ni, struct mbuf *m, /* * Validate the bssid. */ - if (!(type == IEEE80211_FC0_TYPE_MGT && - (subtype == IEEE80211_FC0_SUBTYPE_BEACON || - subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)) && - !IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) && + if (!IEEE80211_ADDR_EQ(bssid, vap->iv_bss->ni_bssid) && !IEEE80211_ADDR_EQ(bssid, ifp->if_broadcastaddr)) { /* not interested in */ IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT, -- cgit v1.1 From 9156287ee2c214457b1d3e13e8a917525b654819 Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 00:55:55 +0000 Subject: [net8021] Pull out the ibss check code into a public function. The ath(4) driver now sees beacons and management frames for different BSSIDs in IBSS mode, which is a problem when you're in a very busy IBSS environment. So, expose this function so drivers can use it to check if the current RX node is actually for a BSS we need to pay attention to or not. PR: kern/208644 Sponsored by: Eva Automation. Inc. --- sys/net80211/ieee80211_node.c | 44 ++++++++++++++++++++++++++++--------------- sys/net80211/ieee80211_node.h | 1 + 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 66afb74..5590dfc 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -556,6 +556,33 @@ check_bss_debug(struct ieee80211vap *vap, struct ieee80211_node *ni) } #endif /* IEEE80211_DEBUG */ + +int +ieee80211_ibss_merge_check(struct ieee80211_node *ni) +{ + struct ieee80211vap *vap = ni->ni_vap; + + if (ni == vap->iv_bss || + IEEE80211_ADDR_EQ(ni->ni_bssid, vap->iv_bss->ni_bssid)) { + /* unchanged, nothing to do */ + return 0; + } + + if (!check_bss(vap, ni)) { + /* capabilities mismatch */ + IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC, + "%s: merge failed, capabilities mismatch\n", __func__); +#ifdef IEEE80211_DEBUG + if (ieee80211_msg_assoc(vap)) + check_bss_debug(vap, ni); +#endif + vap->iv_stats.is_ibss_capmismatch++; + return 0; + } + + return 1; +} + /* * Handle 802.11 ad hoc network merge. The * convention, set by the Wireless Ethernet Compatibility Alliance @@ -576,22 +603,9 @@ ieee80211_ibss_merge(struct ieee80211_node *ni) struct ieee80211com *ic = ni->ni_ic; #endif - if (ni == vap->iv_bss || - IEEE80211_ADDR_EQ(ni->ni_bssid, vap->iv_bss->ni_bssid)) { - /* unchanged, nothing to do */ + if (! ieee80211_ibss_merge_check(ni)) return 0; - } - if (!check_bss(vap, ni)) { - /* capabilities mismatch */ - IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC, - "%s: merge failed, capabilities mismatch\n", __func__); -#ifdef IEEE80211_DEBUG - if (ieee80211_msg_assoc(vap)) - check_bss_debug(vap, ni); -#endif - vap->iv_stats.is_ibss_capmismatch++; - return 0; - } + IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC, "%s: new bssid %s: %s preamble, %s slot time%s\n", __func__, ether_sprintf(ni->ni_bssid), diff --git a/sys/net80211/ieee80211_node.h b/sys/net80211/ieee80211_node.h index e9b7393..9492fc0 100644 --- a/sys/net80211/ieee80211_node.h +++ b/sys/net80211/ieee80211_node.h @@ -330,6 +330,7 @@ void ieee80211_setupcurchan(struct ieee80211com *, struct ieee80211_channel *); void ieee80211_setcurchan(struct ieee80211com *, struct ieee80211_channel *); void ieee80211_update_chw(struct ieee80211com *); +int ieee80211_ibss_merge_check(struct ieee80211_node *); int ieee80211_ibss_merge(struct ieee80211_node *); struct ieee80211_scan_entry; int ieee80211_sta_join(struct ieee80211vap *, struct ieee80211_channel *, -- cgit v1.1 From aebce00b4b69c5728fa19631858fd85ad7bbd05a Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 00:58:38 +0000 Subject: [ath] Only process beacon frames for the IBSS/BSSID if appropriate. * Don't use arbitrary frames for the average RX RSSI - only frames from the current BSSID * Don't log / do the syncbeacon logic for another BSSID and definitely don't do the syncbeacon call if we miss beacons outside of STA mode. * Don't do the IBSS merge bits if the current node plainly won't ever match our current BSS (ie, the IBSS doesn't have to match, but all the same bits that we check in ieee80211_ibss_merge() have to match.) Tested: * ath(4), AR9380, IBSS mode, surrounded by a lot of IBSS 11ac networks. Sponsored by: Eva Automation, Inc. --- sys/dev/ath/if_ath_rx.c | 145 +++++++++++++++++++++++++++--------------------- 1 file changed, 81 insertions(+), 64 deletions(-) diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c index dbdfb89..ff056ad 100644 --- a/sys/dev/ath/if_ath_rx.c +++ b/sys/dev/ath/if_ath_rx.c @@ -361,85 +361,102 @@ ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, ATH_VAP(vap)->av_recv_mgmt(ni, m, subtype, rxs, rssi, nf); switch (subtype) { case IEEE80211_FC0_SUBTYPE_BEACON: - /* update rssi statistics for use by the hal */ - /* XXX unlocked check against vap->iv_bss? */ - ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi); - - tsf_beacon = ((uint64_t) LE_READ_4(ni->ni_tstamp.data + 4)) << 32; - tsf_beacon |= LE_READ_4(ni->ni_tstamp.data); - - nexttbtt = ath_hal_getnexttbtt(sc->sc_ah); /* - * Let's calculate the delta and remainder, so we can see - * if the beacon timer from the AP is varying by more than - * a few TU. (Which would be a huge, huge problem.) + * Only do the following processing if it's for + * the current BSS. + * + * In scan and IBSS mode we receive all beacons, + * which means we need to filter out stuff + * that isn't for us or we'll end up constantly + * trying to sync / merge to BSSes that aren't + * actually us. */ - tsf_delta = (long long) tsf_beacon - (long long) tsf_beacon_old; + if (IEEE80211_ADDR_EQ(ni->ni_bssid, vap->iv_bss->ni_bssid)) { + /* update rssi statistics for use by the hal */ + /* XXX unlocked check against vap->iv_bss? */ + ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi); - tsf_delta_bmiss = tsf_delta / tsf_intval; - /* - * If our delta is greater than half the beacon interval, - * let's round the bmiss value up to the next beacon - * interval. Ie, we're running really, really early - * on the next beacon. - */ - if (tsf_delta % tsf_intval > (tsf_intval / 2)) - tsf_delta_bmiss ++; + tsf_beacon = ((uint64_t) LE_READ_4(ni->ni_tstamp.data + 4)) << 32; + tsf_beacon |= LE_READ_4(ni->ni_tstamp.data); - tsf_beacon_target = tsf_beacon_old + - (((unsigned long long) tsf_delta_bmiss) * (long long) tsf_intval); + nexttbtt = ath_hal_getnexttbtt(sc->sc_ah); - /* - * The remainder using '%' is between 0 .. intval-1. - * If we're actually running too fast, then the remainder - * will be some large number just under intval-1. - * So we need to look at whether we're running - * before or after the target beacon interval - * and if we are, modify how we do the remainder - * calculation. - */ - if (tsf_beacon < tsf_beacon_target) { - tsf_remainder = - -(tsf_intval - ((tsf_beacon - tsf_beacon_old) % tsf_intval)); - } else { - tsf_remainder = (tsf_beacon - tsf_beacon_old) % tsf_intval; - } + /* + * Let's calculate the delta and remainder, so we can see + * if the beacon timer from the AP is varying by more than + * a few TU. (Which would be a huge, huge problem.) + */ + tsf_delta = (long long) tsf_beacon - (long long) tsf_beacon_old; + + tsf_delta_bmiss = tsf_delta / tsf_intval; + + /* + * If our delta is greater than half the beacon interval, + * let's round the bmiss value up to the next beacon + * interval. Ie, we're running really, really early + * on the next beacon. + */ + if (tsf_delta % tsf_intval > (tsf_intval / 2)) + tsf_delta_bmiss ++; + + tsf_beacon_target = tsf_beacon_old + + (((unsigned long long) tsf_delta_bmiss) * (long long) tsf_intval); - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: old_tsf=%llu, new_tsf=%llu, target_tsf=%llu, delta=%lld, bmiss=%d, remainder=%d\n", - __func__, - (unsigned long long) tsf_beacon_old, - (unsigned long long) tsf_beacon, - (unsigned long long) tsf_beacon_target, - (long long) tsf_delta, - tsf_delta_bmiss, - tsf_remainder); - - DPRINTF(sc, ATH_DEBUG_BEACON, "%s: tsf=%llu, nexttbtt=%llu, delta=%d\n", - __func__, - (unsigned long long) tsf_beacon, - (unsigned long long) nexttbtt, - (int32_t) tsf_beacon - (int32_t) nexttbtt + tsf_intval); - - if (sc->sc_syncbeacon && - ni == vap->iv_bss && - (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP)) { - DPRINTF(sc, ATH_DEBUG_BEACON, - "%s: syncbeacon=1; syncing\n", - __func__); /* - * Resync beacon timers using the tsf of the beacon - * frame we just received. + * The remainder using '%' is between 0 .. intval-1. + * If we're actually running too fast, then the remainder + * will be some large number just under intval-1. + * So we need to look at whether we're running + * before or after the target beacon interval + * and if we are, modify how we do the remainder + * calculation. */ - ath_beacon_config(sc, vap); - sc->sc_syncbeacon = 0; + if (tsf_beacon < tsf_beacon_target) { + tsf_remainder = + -(tsf_intval - ((tsf_beacon - tsf_beacon_old) % tsf_intval)); + } else { + tsf_remainder = (tsf_beacon - tsf_beacon_old) % tsf_intval; + } + + DPRINTF(sc, ATH_DEBUG_BEACON, "%s: old_tsf=%llu, new_tsf=%llu, target_tsf=%llu, delta=%lld, bmiss=%d, remainder=%d\n", + __func__, + (unsigned long long) tsf_beacon_old, + (unsigned long long) tsf_beacon, + (unsigned long long) tsf_beacon_target, + (long long) tsf_delta, + tsf_delta_bmiss, + tsf_remainder); + + DPRINTF(sc, ATH_DEBUG_BEACON, "%s: tsf=%llu, nexttbtt=%llu, delta=%d\n", + __func__, + (unsigned long long) tsf_beacon, + (unsigned long long) nexttbtt, + (int32_t) tsf_beacon - (int32_t) nexttbtt + tsf_intval); + + /* We only do syncbeacon on STA VAPs; not on IBSS */ + if (vap->iv_opmode == IEEE80211_M_STA && + sc->sc_syncbeacon && + ni == vap->iv_bss && + (vap->iv_state == IEEE80211_S_RUN || vap->iv_state == IEEE80211_S_SLEEP)) { + DPRINTF(sc, ATH_DEBUG_BEACON, + "%s: syncbeacon=1; syncing\n", + __func__); + /* + * Resync beacon timers using the tsf of the beacon + * frame we just received. + */ + ath_beacon_config(sc, vap); + sc->sc_syncbeacon = 0; + } } /* fall thru... */ case IEEE80211_FC0_SUBTYPE_PROBE_RESP: if (vap->iv_opmode == IEEE80211_M_IBSS && - vap->iv_state == IEEE80211_S_RUN) { + vap->iv_state == IEEE80211_S_RUN && + ieee80211_ibss_merge_check(ni)) { uint32_t rstamp = sc->sc_lastrs->rs_tstamp; uint64_t tsf = ath_extend_tsf(sc, rstamp, ath_hal_gettsf64(sc->sc_ah)); -- cgit v1.1 From 60a000630bf328e79060f1996315227510e9c27e Mon Sep 17 00:00:00 2001 From: jhibbits Date: Sat, 9 Apr 2016 01:02:17 +0000 Subject: Fix a masking bug for e500 PMC. No idea how this slipped through my regression testing. pe_code is the event to count, pe_cpu is the CPU family mask. --- sys/dev/hwpmc/hwpmc_e500.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/dev/hwpmc/hwpmc_e500.c b/sys/dev/hwpmc/hwpmc_e500.c index f8ae119..dbec7ae 100644 --- a/sys/dev/hwpmc/hwpmc_e500.c +++ b/sys/dev/hwpmc/hwpmc_e500.c @@ -507,6 +507,7 @@ e500_allocate_pmc(int cpu, int ri, struct pmc *pm, pe = a->pm_ev; config = PMLCax_FCS | PMLCax_FCU | PMLCax_FCM1 | PMLCax_FCM1; + if (pe < PMC_EV_E500_FIRST || pe > PMC_EV_E500_LAST) return (EINVAL); @@ -517,14 +518,14 @@ e500_allocate_pmc(int cpu, int ri, struct pmc *pm, vers = mfpvr() >> 16; switch (vers) { case FSL_E500v1: - pe_cpu_mask = ev->pe_code & PMC_PPC_E500V1; + pe_cpu_mask = ev->pe_cpu & PMC_PPC_E500V1; break; case FSL_E500v2: - pe_cpu_mask = ev->pe_code & PMC_PPC_E500V2; + pe_cpu_mask = ev->pe_cpu & PMC_PPC_E500V2; break; case FSL_E500mc: case FSL_E5500: - pe_cpu_mask = ev->pe_code & PMC_PPC_E500MC; + pe_cpu_mask = ev->pe_cpu & PMC_PPC_E500MC; break; } if (pe_cpu_mask == 0) -- cgit v1.1 From b26030b6716894275e1bdd8ec07cf700f66122b2 Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 04:57:25 +0000 Subject: [net80211] print out the channel type (eg a, b, g, n) when creating an IBSS network. --- sys/net80211/ieee80211_node.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 5590dfc..9355f37 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -330,9 +330,10 @@ ieee80211_create_ibss(struct ieee80211vap* vap, struct ieee80211_channel *chan) struct ieee80211_node *ni; IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, - "%s: creating %s on channel %u\n", __func__, + "%s: creating %s on channel %u%c\n", __func__, ieee80211_opmode_name[vap->iv_opmode], - ieee80211_chan2ieee(ic, chan)); + ieee80211_chan2ieee(ic, chan), + ieee80211_channel_type_char(chan)); ni = ieee80211_alloc_node(&ic->ic_sta, vap, vap->iv_myaddr); if (ni == NULL) { -- cgit v1.1 From 9c35ad4130a8122538459a76dde8021c751b586f Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 09:24:05 +0000 Subject: Make the KASSERT message in hash destroy more informative. While the pointer might not be too helpful, the malloc type might at least give a good hint about which hashtbl we are talking. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Reviewed by: gnn, emaste Differential Revision: https://reviews.freebsd.org/D5802 --- sys/kern/subr_hash.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/kern/subr_hash.c b/sys/kern/subr_hash.c index 5533882..fe81286 100644 --- a/sys/kern/subr_hash.c +++ b/sys/kern/subr_hash.c @@ -93,7 +93,8 @@ hashdestroy(void *vhashtbl, struct malloc_type *type, u_long hashmask) hashtbl = vhashtbl; for (hp = hashtbl; hp <= &hashtbl[hashmask]; hp++) - KASSERT(LIST_EMPTY(hp), ("%s: hash not empty", __func__)); + KASSERT(LIST_EMPTY(hp), ("%s: hashtbl %p not empty " + "(malloc type %s)", __func__, hashtbl, type->ks_shortdesc)); free(hashtbl, type); } -- cgit v1.1 From 6f42f1ad0cb8445a8de04e668c623c72283cce2c Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 09:31:28 +0000 Subject: Try to unbreak the build: the 'vap' variable is only used if ieee80211 debugging compile is on. --- sys/net80211/ieee80211_node.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c index 9355f37..0986145 100644 --- a/sys/net80211/ieee80211_node.c +++ b/sys/net80211/ieee80211_node.c @@ -599,8 +599,8 @@ ieee80211_ibss_merge_check(struct ieee80211_node *ni) int ieee80211_ibss_merge(struct ieee80211_node *ni) { - struct ieee80211vap *vap = ni->ni_vap; #ifdef IEEE80211_DEBUG + struct ieee80211vap *vap = ni->ni_vap; struct ieee80211com *ic = ni->ni_ic; #endif -- cgit v1.1 From 7d6c3b6b6e74b8826f1bb373e8ae0be0d53553f4 Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 10:39:54 +0000 Subject: Mfp: r296346 No reason identified to keep UMA_ZONE_NOFREE here. Reviewed by: gnn MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5736 --- sys/netinet/ip_divert.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index 3e3bc94..f23a3a8 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -158,8 +158,7 @@ div_init(void) * place for hashbase == NULL. */ in_pcbinfo_init(&V_divcbinfo, "div", &V_divcb, 1, 1, "divcb", - div_inpcb_init, div_inpcb_fini, UMA_ZONE_NOFREE, - IPI_HASHFIELDS_NONE); + div_inpcb_init, div_inpcb_fini, 0, IPI_HASHFIELDS_NONE); } static void -- cgit v1.1 From 41a06afd336489369a7adffa4ee67ba1db4d726d Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 10:44:57 +0000 Subject: Mfp: r296345 No need to keep type stability on raw sockets zone. We've also been running with a KASSERT since r222488 to make sure the ipi_count is 0 on destroy. PR: 164763 Reviewed by: gnn MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5735 --- sys/netinet/raw_ip.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 2eecb95..9f29444 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -209,8 +209,7 @@ rip_init(void) { in_pcbinfo_init(&V_ripcbinfo, "rip", &V_ripcb, INP_PCBHASH_RAW_SIZE, - 1, "ripcb", rip_inpcb_init, NULL, UMA_ZONE_NOFREE, - IPI_HASHFIELDS_NONE); + 1, "ripcb", rip_inpcb_init, NULL, 0, IPI_HASHFIELDS_NONE); EVENTHANDLER_REGISTER(maxsockets_change, rip_zone_change, NULL, EVENTHANDLER_PRI_ANY); } -- cgit v1.1 From 81f6cff67c94a9fa89332a7ada837294e3abb366 Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 10:51:07 +0000 Subject: Mfp: r296309 While there is no dependency interaction, stopping the timer before freeing the rest of the resources seems more natural and avoids it being scheduled an extra time when it is no longer needed. Reviewed by: gnn, emaste MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5733 --- sys/netinet/tcp_syncache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c index b898c49..1cf27e1 100644 --- a/sys/netinet/tcp_syncache.c +++ b/sys/netinet/tcp_syncache.c @@ -281,6 +281,12 @@ syncache_destroy(void) struct syncache *sc, *nsc; int i; + /* + * Stop the re-seed timer before freeing resources. No need to + * possibly schedule it another time. + */ + callout_drain(&V_tcp_syncache.secret.reseed); + /* Cleanup hash buckets: stop timers, free entries, destroy locks. */ for (i = 0; i < V_tcp_syncache.hashsize; i++) { @@ -304,8 +310,6 @@ syncache_destroy(void) /* Free the allocated global resources. */ uma_zdestroy(V_tcp_syncache.zone); free(V_tcp_syncache.hashbase, M_SYNCACHE); - - callout_drain(&V_tcp_syncache.secret.reseed); } #endif -- cgit v1.1 From c17351943ca48eae70fe00dae338b6293d6927a0 Mon Sep 17 00:00:00 2001 From: phk Date: Sat, 9 Apr 2016 10:53:21 +0000 Subject: Create /usr/local/etc before filling things into it. Only run mtree if the NANO_CUST_FILES_MTREE is nonempty Also umount the packages on non-signal failure --- tools/tools/nanobsd/defaults.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh index 3b28b39..19cf887 100755 --- a/tools/tools/nanobsd/defaults.sh +++ b/tools/tools/nanobsd/defaults.sh @@ -915,7 +915,7 @@ cust_install_files ( ) ( cd "${NANO_TOOLS}/Files" find . -print | grep -Ev '/(CVS|\.svn|\.hg|\.git)' | cpio -Ldumpv ${NANO_WORLDDIR} - if [ -f ${NANO_CUST_FILES_MTREE} ]; then + if [ -n "${NANO_CUST_FILES_MTREE}" -a -f ${NANO_CUST_FILES_MTREE} ]; then CR "mtree -eiU -p /" <${NANO_CUST_FILES_MTREE} fi ) @@ -925,6 +925,7 @@ cust_install_files ( ) ( cust_pkgng ( ) ( + mkdir -p ${NANO_WORLDDIR}/usr/local/etc local PKG_CONF="${NANO_WORLDDIR}/usr/local/etc/pkg.conf" local PKGCMD="env ASSUME_ALWAYS_YES=YES PKG_DBDIR=${NANO_PKG_META_BASE}/pkg SIGNATURE_TYPE=none /usr/sbin/pkg" @@ -956,7 +957,7 @@ cust_pkgng ( ) ( mkdir -p ${NANO_WORLDDIR}/_.p mount -t nullfs -o noatime -o ro ${NANO_PACKAGE_DIR} ${NANO_WORLDDIR}/_.p - trap "umount ${NANO_WORLDDIR}/_.p ; rm -rf ${NANO_WORLDDIR}/_.p" 1 2 15 + trap "umount ${NANO_WORLDDIR}/_.p ; rm -rf ${NANO_WORLDDIR}/_.p" 1 2 15 EXIT # Install packages todo="$(echo "${NANO_PACKAGE_LIST}" | awk '{ print NF }')" -- cgit v1.1 From 55f63f4b6bf72e562fc5960e77787c0c96f525b9 Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 10:58:08 +0000 Subject: Mfp: r296259 We attach the "counter" to the tcpcbs. Thus don't free the TCP Fastopen zone before the tcpcbs are gone, as otherwise the zone won't be empty. With that it should be safe to destroy the "tfo" zone without leaking the memory. PR: 164763 Reviewed by: gnn MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5731 --- sys/netinet/tcp_fastopen.c | 2 +- sys/netinet/tcp_subr.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/netinet/tcp_fastopen.c b/sys/netinet/tcp_fastopen.c index 482320e..ec02d18 100644 --- a/sys/netinet/tcp_fastopen.c +++ b/sys/netinet/tcp_fastopen.c @@ -204,7 +204,7 @@ void tcp_fastopen_init(void) { V_counter_zone = uma_zcreate("tfo", sizeof(unsigned int), - NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); rm_init(&V_tcp_fastopen_keylock, "tfo_keylock"); callout_init_rm(&V_tcp_fastopen_autokey_ctx.c, &V_tcp_fastopen_keylock, 0); diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 33b16ad..417e0d8 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -738,9 +738,6 @@ tcp_destroy(void) { int error; -#ifdef TCP_RFC7413 - tcp_fastopen_destroy(); -#endif tcp_hc_destroy(); syncache_destroy(); tcp_tw_destroy(); @@ -748,6 +745,14 @@ tcp_destroy(void) uma_zdestroy(V_sack_hole_zone); uma_zdestroy(V_tcpcb_zone); +#ifdef TCP_RFC7413 + /* + * Cannot free the zone until all tcpcbs are released as we attach + * the allocations to them. + */ + tcp_fastopen_destroy(); +#endif + error = hhook_head_deregister(V_tcp_hhh[HHOOK_TCP_EST_IN]); if (error != 0) { printf("%s: WARNING: unable to deregister helper hook " -- cgit v1.1 From 60b0ddf59cc08c6d33cdca4e95c81ada8f1c637d Mon Sep 17 00:00:00 2001 From: jmcneill Date: Sat, 9 Apr 2016 11:23:46 +0000 Subject: Enable PHY regulator when the optional "phy-supply" property is present. Submitted by: Emmanuel Vadot --- sys/arm/allwinner/a20/a20_if_dwc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sys/arm/allwinner/a20/a20_if_dwc.c b/sys/arm/allwinner/a20/a20_if_dwc.c index 5e901e4..2f88d9d 100644 --- a/sys/arm/allwinner/a20/a20_if_dwc.c +++ b/sys/arm/allwinner/a20/a20_if_dwc.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include "if_dwc_if.h" @@ -64,6 +65,7 @@ a20_if_dwc_init(device_t dev) const char *tx_parent_name; char *phy_type; clk_t clk_tx, clk_tx_parent; + regulator_t reg; phandle_t node; int error; @@ -96,6 +98,15 @@ a20_if_dwc_init(device_t dev) } } + /* Enable PHY regulator if applicable */ + if (regulator_get_by_ofw_property(dev, "phy-supply", ®) == 0) { + error = regulator_enable(reg); + if (error != 0) { + device_printf(dev, "could not enable PHY regulator\n"); + return (error); + } + } + return (0); } -- cgit v1.1 From f32403211c57706f4430e9887c6638f50d30c867 Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 11:27:47 +0000 Subject: Mfp: r296260 The tcp_inpcb (pcbinfo) zone should be safe to destroy. PR: 164763 Reviewed by: gnn MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5732 --- sys/netinet/tcp_subr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 417e0d8..56283db 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -654,8 +654,7 @@ tcp_init(void) hashsize); } in_pcbinfo_init(&V_tcbinfo, "tcp", &V_tcb, hashsize, hashsize, - "tcp_inpcb", tcp_inpcb_init, NULL, UMA_ZONE_NOFREE, - IPI_HASHFIELDS_4TUPLE); + "tcp_inpcb", tcp_inpcb_init, NULL, 0, IPI_HASHFIELDS_4TUPLE); /* * These have to be type stable for the benefit of the timers. -- cgit v1.1 From e1837bd3b608bd731cbff92f07b7fa8adfac3ba0 Mon Sep 17 00:00:00 2001 From: mav Date: Sat, 9 Apr 2016 11:54:09 +0000 Subject: Reduce code duplication when executing Passthrough IOCB. MFC after: 2 weeks --- sys/dev/isp/isp.c | 267 ++++++++++++++++-------------------------------------- 1 file changed, 80 insertions(+), 187 deletions(-) diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index d5c393b..c4c7d80 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -3494,26 +3494,17 @@ isp_gid_ft_sns(ispsoftc_t *isp, int chan) } static int -isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) +isp_ct_passthru(ispsoftc_t *isp, int chan, uint32_t cmd_bcnt, uint32_t rsp_bcnt) { mbreg_t mbs; fcparam *fcp = FCPARAM(isp, chan); union { isp_ct_pt_t plocal; - ct_hdr_t clocal; uint8_t q[QENTRY_LEN]; } un; isp_ct_pt_t *pt; - ct_hdr_t *ct; - uint32_t *rp; uint8_t *scp = fcp->isp_scratch; - isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GID_FT via CT", chan); - if (FC_SCRATCH_ACQUIRE(isp, chan)) { - isp_prt(isp, ISP_LOGERR, sacq); - return (-1); - } - /* * Build a Passthrough IOCB in memory. */ @@ -3527,39 +3518,21 @@ isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); pt->ctp_time = 10; pt->ctp_rsp_cnt = 1; - pt->ctp_rsp_bcnt = GIDLEN; - pt->ctp_cmd_bcnt = sizeof (*ct) + sizeof (uint32_t); + pt->ctp_rsp_bcnt = rsp_bcnt; + pt->ctp_cmd_bcnt = cmd_bcnt; pt->ctp_dataseg[0].ds_base = DMA_LO32(fcp->isp_scdma+XTXOFF); pt->ctp_dataseg[0].ds_basehi = DMA_HI32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_count = sizeof (*ct) + sizeof (uint32_t); + pt->ctp_dataseg[0].ds_count = cmd_bcnt; pt->ctp_dataseg[1].ds_base = DMA_LO32(fcp->isp_scdma); pt->ctp_dataseg[1].ds_basehi = DMA_HI32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_count = GIDLEN; - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "ct IOCB", QENTRY_LEN, pt); - } - isp_put_ct_pt(isp, pt, (isp_ct_pt_t *) &scp[CTXOFF]); + pt->ctp_dataseg[1].ds_count = rsp_bcnt; + isp_put_ct_pt(isp, pt, (isp_ct_pt_t *)&scp[CTXOFF]); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT IOCB request", QENTRY_LEN, &scp[CTXOFF]); /* - * Build the CT header and command in memory. - * - * Note that the CT header has to end up as Big Endian format in memory. + * Execute the Passthrough IOCB. */ - ct = &un.clocal; - ISP_MEMZERO(ct, sizeof (*ct)); - ct->ct_revision = CT_REVISION; - ct->ct_fcs_type = CT_FC_TYPE_FC; - ct->ct_fcs_subtype = CT_FC_SUBTYPE_NS; - ct->ct_cmd_resp = SNS_GID_FT; - ct->ct_bcnt_resid = (GIDLEN - 16) >> 2; - - isp_put_ct_hdr(isp, ct, (ct_hdr_t *) &scp[XTXOFF]); - rp = (uint32_t *) &scp[XTXOFF+sizeof (*ct)]; - ISP_IOZPUT_32(isp, FC4_SCSI, rp); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "CT HDR + payload after put", - sizeof (*ct) + sizeof (uint32_t), &scp[XTXOFF]); - } ISP_MEMZERO(&scp[ZTXOFF], QENTRY_LEN); MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, MBCMD_DEFAULT_TIMEOUT + pt->ctp_time * 1000000); @@ -3574,18 +3547,58 @@ isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) return (-1); } MEMORYBARRIER(isp, SYNC_SFORCPU, 0, ISP_FC_SCRLEN, chan); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT IOCB response", QENTRY_LEN, &scp[ZTXOFF]); pt = &un.plocal; isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "IOCB response", QENTRY_LEN, pt); - } - if (pt->ctp_status && pt->ctp_status != RQCS_DATA_UNDERRUN) { isp_prt(isp, ISP_LOGWARN, "Chan %d GID_FT CT Passthrough returned 0x%x", chan, pt->ctp_status); return (-1); } + + return (0); +} + +static int +isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) +{ + fcparam *fcp = FCPARAM(isp, chan); + ct_hdr_t ct; + uint32_t *rp; + uint8_t *scp = fcp->isp_scratch; + + isp_prt(isp, ISP_LOGDEBUG0, "Chan %d requesting GID_FT via CT", chan); + if (FC_SCRATCH_ACQUIRE(isp, chan)) { + isp_prt(isp, ISP_LOGERR, sacq); + return (-1); + } + + /* + * Build the CT header and command in memory. + * + * Note that the CT header has to end up as Big Endian format in memory. + */ + ISP_MEMZERO(&ct, sizeof (ct)); + ct.ct_revision = CT_REVISION; + ct.ct_fcs_type = CT_FC_TYPE_FC; + ct.ct_fcs_subtype = CT_FC_SUBTYPE_NS; + ct.ct_cmd_resp = SNS_GID_FT; + ct.ct_bcnt_resid = (GIDLEN - 16) >> 2; + isp_put_ct_hdr(isp, &ct, (ct_hdr_t *) &scp[XTXOFF]); + rp = (uint32_t *) &scp[XTXOFF + sizeof(ct)]; + ISP_IOZPUT_32(isp, FC4_SCSI, rp); + if (isp->isp_dblev & ISP_LOGDEBUG1) { + isp_print_bytes(isp, "CT request", + sizeof(ct) + sizeof(uint32_t), &scp[XTXOFF]); + } + + if (isp_ct_passthru(isp, chan, sizeof(ct) + sizeof(uint32_t), GIDLEN)) { + FC_SCRATCH_RELEASE(isp, chan); + return (-1); + } + if (isp->isp_dblev & ISP_LOGDEBUG1) isp_print_bytes(isp, "CT response", GIDLEN, scp); isp_get_gid_ft_response(isp, (sns_gid_ft_rsp_t *)scp, @@ -3957,16 +3970,9 @@ isp_register_fc4_type(ispsoftc_t *isp, int chan) static int isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan) { - mbreg_t mbs; fcparam *fcp = FCPARAM(isp, chan); - union { - isp_ct_pt_t plocal; - rft_id_t clocal; - uint8_t q[QENTRY_LEN]; - } un; - isp_ct_pt_t *pt; ct_hdr_t *ct; - rft_id_t *rp; + rft_id_t rp; uint8_t *scp = fcp->isp_scratch; if (FC_SCRATCH_ACQUIRE(isp, chan)) { @@ -3975,110 +3981,50 @@ isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan) } /* - * Build a Passthrough IOCB in memory. - */ - ISP_MEMZERO(un.q, QENTRY_LEN); - pt = &un.plocal; - pt->ctp_header.rqs_entry_count = 1; - pt->ctp_header.rqs_entry_type = RQSTYPE_CT_PASSTHRU; - pt->ctp_handle = 0xffffffff; - pt->ctp_nphdl = fcp->isp_sns_hdl; - pt->ctp_cmd_cnt = 1; - pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); - pt->ctp_time = 4; - pt->ctp_rsp_cnt = 1; - pt->ctp_rsp_bcnt = sizeof (ct_hdr_t); - pt->ctp_cmd_bcnt = sizeof (rft_id_t); - pt->ctp_dataseg[0].ds_base = DMA_LO32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_basehi = DMA_HI32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_count = sizeof (rft_id_t); - pt->ctp_dataseg[1].ds_base = DMA_LO32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_basehi = DMA_HI32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_count = sizeof (ct_hdr_t); - isp_put_ct_pt(isp, pt, (isp_ct_pt_t *) &scp[CTXOFF]); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "IOCB CT Request", QENTRY_LEN, pt); - } - - /* * Build the CT header and command in memory. * * Note that the CT header has to end up as Big Endian format in memory. */ - ISP_MEMZERO(&un.clocal, sizeof (un.clocal)); - ct = &un.clocal.rftid_hdr; + ISP_MEMZERO(&rp, sizeof(rp)); + ct = &rp.rftid_hdr; ct->ct_revision = CT_REVISION; ct->ct_fcs_type = CT_FC_TYPE_FC; ct->ct_fcs_subtype = CT_FC_SUBTYPE_NS; ct->ct_cmd_resp = SNS_RFT_ID; ct->ct_bcnt_resid = (sizeof (rft_id_t) - sizeof (ct_hdr_t)) >> 2; - rp = &un.clocal; - rp->rftid_portid[0] = fcp->isp_portid >> 16; - rp->rftid_portid[1] = fcp->isp_portid >> 8; - rp->rftid_portid[2] = fcp->isp_portid; - rp->rftid_fc4types[FC4_SCSI >> 5] = 1 << (FC4_SCSI & 0x1f); - isp_put_rft_id(isp, rp, (rft_id_t *) &scp[XTXOFF]); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "CT Header", QENTRY_LEN, &scp[XTXOFF]); - } - - ISP_MEMZERO(&scp[ZTXOFF], sizeof (ct_hdr_t)); + rp.rftid_portid[0] = fcp->isp_portid >> 16; + rp.rftid_portid[1] = fcp->isp_portid >> 8; + rp.rftid_portid[2] = fcp->isp_portid; + rp.rftid_fc4types[FC4_SCSI >> 5] = 1 << (FC4_SCSI & 0x1f); + isp_put_rft_id(isp, &rp, (rft_id_t *)&scp[XTXOFF]); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT request", sizeof(rft_id_t), &scp[XTXOFF]); - MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, - MBCMD_DEFAULT_TIMEOUT + pt->ctp_time * 1000000); - mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma + CTXOFF); - mbs.param[3] = DMA_WD0(fcp->isp_scdma + CTXOFF); - mbs.param[6] = DMA_WD3(fcp->isp_scdma + CTXOFF); - mbs.param[7] = DMA_WD2(fcp->isp_scdma + CTXOFF); - MEMORYBARRIER(isp, SYNC_SFORDEV, XTXOFF, 2 * QENTRY_LEN, chan); - isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { + if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { FC_SCRATCH_RELEASE(isp, chan); return (-1); } - MEMORYBARRIER(isp, SYNC_SFORCPU, ZTXOFF, QENTRY_LEN, chan); - pt = &un.plocal; - isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "IOCB response", QENTRY_LEN, pt); - } - if (pt->ctp_status) { - FC_SCRATCH_RELEASE(isp, chan); - isp_prt(isp, ISP_LOGWARN, - "Chan %d Register FC4 Type CT Passthrough returned 0x%x", - chan, pt->ctp_status); - return (1); - } isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); FC_SCRATCH_RELEASE(isp, chan); - if (ct->ct_cmd_resp == LS_RJT) { isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type rejected", chan); return (-1); } else if (ct->ct_cmd_resp == LS_ACC) { isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan); - return (0); } else { isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->ct_cmd_resp); return (-1); } + return (0); } static int isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) { - mbreg_t mbs; fcparam *fcp = FCPARAM(isp, chan); - union { - isp_ct_pt_t plocal; - rff_id_t clocal; - uint8_t q[QENTRY_LEN]; - } un; - isp_ct_pt_t *pt; ct_hdr_t *ct; - rff_id_t *rp; + rff_id_t rp; uint8_t *scp = fcp->isp_scratch; if (FC_SCRATCH_ACQUIRE(isp, chan)) { @@ -4087,90 +4033,37 @@ isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) } /* - * Build a Passthrough IOCB in memory. - */ - ISP_MEMZERO(un.q, QENTRY_LEN); - pt = &un.plocal; - pt->ctp_header.rqs_entry_count = 1; - pt->ctp_header.rqs_entry_type = RQSTYPE_CT_PASSTHRU; - pt->ctp_handle = 0xffffffff; - pt->ctp_nphdl = fcp->isp_sns_hdl; - pt->ctp_cmd_cnt = 1; - pt->ctp_vpidx = ISP_GET_VPIDX(isp, chan); - pt->ctp_time = 4; - pt->ctp_rsp_cnt = 1; - pt->ctp_rsp_bcnt = sizeof (ct_hdr_t); - pt->ctp_cmd_bcnt = sizeof (rff_id_t); - pt->ctp_dataseg[0].ds_base = DMA_LO32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_basehi = DMA_HI32(fcp->isp_scdma+XTXOFF); - pt->ctp_dataseg[0].ds_count = sizeof (rff_id_t); - pt->ctp_dataseg[1].ds_base = DMA_LO32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_basehi = DMA_HI32(fcp->isp_scdma); - pt->ctp_dataseg[1].ds_count = sizeof (ct_hdr_t); - isp_put_ct_pt(isp, pt, (isp_ct_pt_t *) &scp[CTXOFF]); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "IOCB CT Request", QENTRY_LEN, pt); - } - - /* * Build the CT header and command in memory. * * Note that the CT header has to end up as Big Endian format in memory. */ - ISP_MEMZERO(&un.clocal, sizeof (un.clocal)); - ct = &un.clocal.rffid_hdr; + ISP_MEMZERO(&rp, sizeof(rp)); + ct = &rp.rffid_hdr; ct->ct_revision = CT_REVISION; ct->ct_fcs_type = CT_FC_TYPE_FC; ct->ct_fcs_subtype = CT_FC_SUBTYPE_NS; ct->ct_cmd_resp = SNS_RFF_ID; ct->ct_bcnt_resid = (sizeof (rff_id_t) - sizeof (ct_hdr_t)) >> 2; - rp = &un.clocal; - rp->rffid_portid[0] = fcp->isp_portid >> 16; - rp->rffid_portid[1] = fcp->isp_portid >> 8; - rp->rffid_portid[2] = fcp->isp_portid; - rp->rffid_fc4features = 0; + rp.rffid_portid[0] = fcp->isp_portid >> 16; + rp.rffid_portid[1] = fcp->isp_portid >> 8; + rp.rffid_portid[2] = fcp->isp_portid; + rp.rffid_fc4features = 0; if (fcp->role & ISP_ROLE_TARGET) - rp->rffid_fc4features |= 1; + rp.rffid_fc4features |= 1; if (fcp->role & ISP_ROLE_INITIATOR) - rp->rffid_fc4features |= 2; - rp->rffid_fc4type = FC4_SCSI; - isp_put_rff_id(isp, rp, (rff_id_t *) &scp[XTXOFF]); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "CT Header", QENTRY_LEN, &scp[XTXOFF]); - } - - ISP_MEMZERO(&scp[ZTXOFF], sizeof (ct_hdr_t)); + rp.rffid_fc4features |= 2; + rp.rffid_fc4type = FC4_SCSI; + isp_put_rff_id(isp, &rp, (rff_id_t *)&scp[XTXOFF]); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT request", sizeof(rft_id_t), &scp[XTXOFF]); - MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, - MBCMD_DEFAULT_TIMEOUT + pt->ctp_time * 1000000); - mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma + CTXOFF); - mbs.param[3] = DMA_WD0(fcp->isp_scdma + CTXOFF); - mbs.param[6] = DMA_WD3(fcp->isp_scdma + CTXOFF); - mbs.param[7] = DMA_WD2(fcp->isp_scdma + CTXOFF); - MEMORYBARRIER(isp, SYNC_SFORDEV, XTXOFF, 2 * QENTRY_LEN, chan); - isp_mboxcmd(isp, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { + if (isp_ct_passthru(isp, chan, sizeof(rft_id_t), sizeof(ct_hdr_t))) { FC_SCRATCH_RELEASE(isp, chan); return (-1); } - MEMORYBARRIER(isp, SYNC_SFORCPU, ZTXOFF, QENTRY_LEN, chan); - pt = &un.plocal; - isp_get_ct_pt(isp, (isp_ct_pt_t *) &scp[ZTXOFF], pt); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "IOCB response", QENTRY_LEN, pt); - } - if (pt->ctp_status) { - FC_SCRATCH_RELEASE(isp, chan); - isp_prt(isp, ISP_LOGWARN, - "Chan %d Register FC4 Features CT Passthrough returned 0x%x", - chan, pt->ctp_status); - return (1); - } isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); FC_SCRATCH_RELEASE(isp, chan); - if (ct->ct_cmd_resp == LS_RJT) { isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Features rejected", chan); @@ -4178,12 +4071,12 @@ isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) } else if (ct->ct_cmd_resp == LS_ACC) { isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Features accepted", chan); - return (0); } else { isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Features: 0x%x", chan, ct->ct_cmd_resp); return (-1); } + return (0); } static uint16_t -- cgit v1.1 From 0a1a3e73fc3c60bf53b8881f9d1e751025e37567 Mon Sep 17 00:00:00 2001 From: bz Date: Sat, 9 Apr 2016 12:05:23 +0000 Subject: Mfp: r296310,r296343 It looks like as with the safety belt of DELAY() fastened (*) we can completely tear down and free all memory for TCP (after r281599). (*) in theory a few ticks should be good enough to make sure the timers are all really gone. Could we use a better matric here and check a tcbcb count as an optimization? PR: 164763 Reviewed by: gnn, emaste MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5734 --- sys/netinet/tcp_subr.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 56283db..aa24299 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -660,7 +660,7 @@ tcp_init(void) * These have to be type stable for the benefit of the timers. */ V_tcpcb_zone = uma_zcreate("tcpcb", sizeof(struct tcpcb_mem), - NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); uma_zone_set_max(V_tcpcb_zone, maxsockets); uma_zone_set_warning(V_tcpcb_zone, "kern.ipc.maxsockets limit reached"); @@ -670,7 +670,7 @@ tcp_init(void) TUNABLE_INT_FETCH("net.inet.tcp.sack.enable", &V_tcp_do_sack); V_sack_hole_zone = uma_zcreate("sackhole", sizeof(struct sackhole), - NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE); + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); /* Skip initialization of globals for non-default instances. */ if (!IS_DEFAULT_VNET(curvnet)) @@ -737,10 +737,21 @@ tcp_destroy(void) { int error; + /* + * All our processes are gone, all our sockets should be cleaned + * up, which means, we should be past the tcp_discardcb() calls. + * Sleep to let all tcpcb timers really disappear and then cleanup. + * Timewait will cleanup its queue and will be ready to go. + * XXX-BZ In theory a few ticks should be good enough to make sure + * the timers are all really gone. We should see if we could use a + * better metric here and, e.g., check a tcbcb count as an optimization? + */ + DELAY(1000000 / hz); tcp_hc_destroy(); syncache_destroy(); tcp_tw_destroy(); in_pcbinfo_destroy(&V_tcbinfo); + /* tcp_discardcb() clears the sack_holes up. */ uma_zdestroy(V_sack_hole_zone); uma_zdestroy(V_tcpcb_zone); -- cgit v1.1 From ae5846b336d36050c2a80b867d117f4bf2f3d907 Mon Sep 17 00:00:00 2001 From: cem Date: Sat, 9 Apr 2016 13:15:34 +0000 Subject: ioat(4): ioat_get_dmaengine(): Add M_WAITOK mode Sponsored by: EMC / Isilon Storage Division --- sys/dev/ioat/ioat.c | 36 +++++++++++++++++++++++++++++++----- sys/dev/ioat/ioat.h | 4 +++- sys/dev/ioat/ioat_internal.h | 1 + sys/dev/ioat/ioat_test.c | 2 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/sys/dev/ioat/ioat.c b/sys/dev/ioat/ioat.c index bcc4e9a..85ceacb 100644 --- a/sys/dev/ioat/ioat.c +++ b/sys/dev/ioat/ioat.c @@ -314,6 +314,9 @@ ioat_detach(device_t device) mtx_lock(IOAT_REFLK); ioat->quiescing = TRUE; + ioat->destroying = TRUE; + wakeup(&ioat->quiescing); + ioat_channel[ioat->chan_idx] = NULL; ioat_drain_locked(ioat); @@ -739,18 +742,40 @@ ioat_reset_hw_task(void *ctx, int pending __unused) * User API functions */ bus_dmaengine_t -ioat_get_dmaengine(uint32_t index) +ioat_get_dmaengine(uint32_t index, int flags) { - struct ioat_softc *sc; + struct ioat_softc *ioat; + + KASSERT((flags & ~(M_NOWAIT | M_WAITOK)) == 0, + ("invalid flags: 0x%08x", flags)); + KASSERT((flags & (M_NOWAIT | M_WAITOK)) != (M_NOWAIT | M_WAITOK), + ("invalid wait | nowait")); if (index >= ioat_channel_index) return (NULL); - sc = ioat_channel[index]; - if (sc == NULL || sc->quiescing) + ioat = ioat_channel[index]; + if (ioat == NULL || ioat->destroying) return (NULL); - return (&ioat_get(sc, IOAT_DMAENGINE_REF)->dmaengine); + if (ioat->quiescing) { + if ((flags & M_NOWAIT) != 0) + return (NULL); + + mtx_lock(IOAT_REFLK); + while (ioat->quiescing && !ioat->destroying) + msleep(&ioat->quiescing, IOAT_REFLK, 0, "getdma", 0); + mtx_unlock(IOAT_REFLK); + + if (ioat->destroying) + return (NULL); + } + + /* + * There's a race here between the quiescing check and HW reset or + * module destroy. + */ + return (&ioat_get(ioat, IOAT_DMAENGINE_REF)->dmaengine); } void @@ -1571,6 +1596,7 @@ ioat_reset_hw(struct ioat_softc *ioat) out: mtx_lock(IOAT_REFLK); ioat->quiescing = FALSE; + wakeup(&ioat->quiescing); mtx_unlock(IOAT_REFLK); if (error == 0) diff --git a/sys/dev/ioat/ioat.h b/sys/dev/ioat/ioat.h index 3b6e094..ff05602 100644 --- a/sys/dev/ioat/ioat.h +++ b/sys/dev/ioat/ioat.h @@ -68,8 +68,10 @@ typedef void (*bus_dmaengine_callback_t)(void *arg, int error); /* * Called first to acquire a reference to the DMA channel + * + * Flags may be M_WAITOK or M_NOWAIT. */ -bus_dmaengine_t ioat_get_dmaengine(uint32_t channel_index); +bus_dmaengine_t ioat_get_dmaengine(uint32_t channel_index, int flags); /* Release the DMA channel */ void ioat_put_dmaengine(bus_dmaengine_t dmaengine); diff --git a/sys/dev/ioat/ioat_internal.h b/sys/dev/ioat/ioat_internal.h index b33faea..85b7316 100644 --- a/sys/dev/ioat/ioat_internal.h +++ b/sys/dev/ioat/ioat_internal.h @@ -410,6 +410,7 @@ struct ioat_softc { struct task reset_task; boolean_t quiescing; + boolean_t destroying; boolean_t is_resize_pending; boolean_t is_completion_pending; boolean_t is_reset_pending; diff --git a/sys/dev/ioat/ioat_test.c b/sys/dev/ioat/ioat_test.c index ee014c0..7fecd48 100644 --- a/sys/dev/ioat/ioat_test.c +++ b/sys/dev/ioat/ioat_test.c @@ -388,7 +388,7 @@ ioat_dma_test(void *arg) return; } - dmaengine = ioat_get_dmaengine(test->channel_index); + dmaengine = ioat_get_dmaengine(test->channel_index, M_NOWAIT); if (dmaengine == NULL) { ioat_test_log(0, "Couldn't acquire dmaengine\n"); test->status[IOAT_TEST_NO_DMA_ENGINE]++; -- cgit v1.1 From 6beb82443a9241c4c9035f9b1df9d1358154592c Mon Sep 17 00:00:00 2001 From: jhb Date: Sat, 9 Apr 2016 13:58:04 +0000 Subject: Add more fine-grained kernel options for NUMA support. VM_NUMA_ALLOC is used to enable use of domain-aware memory allocation in the virtual memory system. DEVICE_NUMA is used to enable affinity reporting for devices such as bus_get_domain(). MAXMEMDOM must still be set to a value greater than for any NUMA support to be effective. Note that 'cpuset -gd' always works if MAXMEMDOM is enabled and the system supports NUMA. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D5782 --- sys/conf/NOTES | 10 ++++++++- sys/conf/options | 2 ++ sys/dev/acpica/acpi.c | 4 +++- sys/dev/acpica/acpivar.h | 2 -- sys/kern/kern_cpuset.c | 16 +++++++++----- sys/vm/vm_domain.c | 25 ++++++++++++++++++++-- sys/vm/vm_pageout.c | 4 ++-- sys/vm/vm_phys.c | 22 +++++++++++-------- sys/vm/vm_phys.h | 2 +- sys/x86/acpica/srat.c | 55 ++++++++++++++++++++++++++++++------------------ 10 files changed, 99 insertions(+), 43 deletions(-) diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 42570fe..ec5618c 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -229,7 +229,15 @@ options MAXCPU=32 # MAXMEMDOM defines the maximum number of memory domains that can boot in the # system. A default value should already be defined by every architecture. -options MAXMEMDOM=1 +options MAXMEMDOM=2 + +# VM_NUMA_ALLOC enables use of memory domain-aware allocation in the VM +# system. +options VM_NUMA_ALLOC + +# DEVICE_NUMA enables reporting of domain affinity of I/O devices via +# bus_get_domain(), etc. +options DEVICE_NUMA # ADAPTIVE_MUTEXES changes the behavior of blocking mutexes to spin # if the thread that currently owns the mutex is executing on another diff --git a/sys/conf/options b/sys/conf/options index f2fef26..2283705 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -90,6 +90,7 @@ COMPAT_LINUXKPI opt_compat.h COMPILING_LINT opt_global.h CY_PCI_FASTINTR DEADLKRES opt_watchdog.h +DEVICE_NUMA EXT_RESOURCES opt_global.h DIRECTIO FILEMON opt_dontuse.h @@ -603,6 +604,7 @@ VM_KMEM_SIZE opt_vm.h VM_KMEM_SIZE_SCALE opt_vm.h VM_KMEM_SIZE_MAX opt_vm.h VM_NRESERVLEVEL opt_vm.h +VM_NUMA_ALLOC opt_vm.h VM_LEVEL_0_ORDER opt_vm.h NO_SWAPPING opt_vm.h MALLOC_MAKE_FAILURES opt_vm.h diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 6f5a11f..32a07dd 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -31,6 +31,8 @@ __FBSDID("$FreeBSD$"); #include "opt_acpi.h" +#include "opt_device_numa.h" + #include #include #include @@ -1083,7 +1085,7 @@ acpi_hint_device_unit(device_t acdev, device_t child, const char *name, int acpi_parse_pxm(device_t dev, int *domain) { -#if MAXMEMDOM > 1 +#ifdef DEVICE_NUMA ACPI_HANDLE h; int d, pxm; diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index 4df83d5..3ee7ab3 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -502,9 +502,7 @@ SYSCTL_DECL(_debug_acpi); * * Returns the VM domain ID if found, or -1 if not found / invalid. */ -#if MAXMEMDOM > 1 extern int acpi_map_pxm_to_vm_domainid(int pxm); -#endif extern int acpi_get_domain(device_t dev, device_t child, int *domain); extern int acpi_parse_pxm(device_t dev, int *domain); diff --git a/sys/kern/kern_cpuset.c b/sys/kern/kern_cpuset.c index 4c057cc..f0f184b 100644 --- a/sys/kern/kern_cpuset.c +++ b/sys/kern/kern_cpuset.c @@ -831,7 +831,7 @@ struct cpuset * cpuset_thread0(void) { struct cpuset *set; - int error; + int error, i; cpuset_zone = uma_zcreate("cpuset", sizeof(struct cpuset), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); @@ -863,9 +863,15 @@ cpuset_thread0(void) */ cpuset_unr = new_unrhdr(2, INT_MAX, NULL); - /* MD Code is responsible for initializing sets if vm_ndomains > 1. */ - if (vm_ndomains == 1) - CPU_COPY(&all_cpus, &cpuset_domain[0]); + /* + * If MD code has not initialized per-domain cpusets, place all + * CPUs in domain 0. + */ + for (i = 0; i < MAXMEMDOM; i++) + if (!CPU_EMPTY(&cpuset_domain[i])) + goto domains_set; + CPU_COPY(&all_cpus, &cpuset_domain[0]); +domains_set: return (set); } @@ -1118,7 +1124,7 @@ sys_cpuset_getaffinity(struct thread *td, struct cpuset_getaffinity_args *uap) error = intr_getaffinity(uap->id, mask); break; case CPU_WHICH_DOMAIN: - if (uap->id < 0 || uap->id >= vm_ndomains) + if (uap->id < 0 || uap->id >= MAXMEMDOM) error = ESRCH; else CPU_COPY(&cpuset_domain[uap->id], mask); diff --git a/sys/vm/vm_domain.c b/sys/vm/vm_domain.c index c042aa7..354a223 100644 --- a/sys/vm/vm_domain.c +++ b/sys/vm/vm_domain.c @@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC #include #endif #include @@ -64,7 +64,7 @@ __FBSDID("$FreeBSD$"); static __inline int vm_domain_rr_selectdomain(int skip_domain) { -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC struct thread *td; td = curthread; @@ -188,8 +188,13 @@ vm_domain_policy_validate(const struct vm_domain_policy *vp) return (-1); case VM_POLICY_FIXED_DOMAIN: case VM_POLICY_FIXED_DOMAIN_ROUND_ROBIN: +#ifdef VM_NUMA_ALLOC if (vp->p.domain >= 0 && vp->p.domain < vm_ndomains) return (0); +#else + if (vp->p.domain == 0) + return (0); +#endif return (-1); default: return (-1); @@ -221,6 +226,7 @@ vm_domain_iterator_set(struct vm_domain_iterator *vi, vm_domain_policy_type_t vt, int domain) { +#ifdef VM_NUMA_ALLOC switch (vt) { case VM_POLICY_FIXED_DOMAIN: vi->policy = VM_POLICY_FIXED_DOMAIN; @@ -249,6 +255,10 @@ vm_domain_iterator_set(struct vm_domain_iterator *vi, vi->n = vm_ndomains; break; } +#else + vi->domain = 0; + vi->n = 1; +#endif return (0); } @@ -259,6 +269,8 @@ static inline void _vm_domain_iterator_set_policy(struct vm_domain_iterator *vi, const struct vm_domain_policy *vt) { + +#ifdef VM_NUMA_ALLOC /* * Initialise the iterator. * @@ -300,6 +312,10 @@ _vm_domain_iterator_set_policy(struct vm_domain_iterator *vi, vi->n = vm_ndomains; break; } +#else + vi->domain = 0; + vi->n = 1; +#endif } void @@ -334,6 +350,7 @@ vm_domain_iterator_run(struct vm_domain_iterator *vi, int *domain) if (vi->n <= 0) return (-1); +#ifdef VM_NUMA_ALLOC switch (vi->policy) { case VM_POLICY_FIXED_DOMAIN: case VM_POLICY_FIRST_TOUCH: @@ -358,6 +375,10 @@ vm_domain_iterator_run(struct vm_domain_iterator *vi, int *domain) vi->n--; break; } +#else + *domain = 0; + vi->n--; +#endif return (0); } diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index b7f6887..e981e8b 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -1656,12 +1656,12 @@ static void vm_pageout(void) { int error; -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC int i; #endif swap_pager_swap_init(); -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC for (i = 1; i < vm_ndomains; i++) { error = kthread_add(vm_pageout_worker, (void *)(uintptr_t)i, curproc, NULL, 0, 0, "dom%d", i); diff --git a/sys/vm/vm_phys.c b/sys/vm/vm_phys.c index 3979513..d2f1edb 100644 --- a/sys/vm/vm_phys.c +++ b/sys/vm/vm_phys.c @@ -48,9 +48,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#if MAXMEMDOM > 1 #include -#endif #include #include #include @@ -73,8 +71,10 @@ __FBSDID("$FreeBSD$"); _Static_assert(sizeof(long) * NBBY >= VM_PHYSSEG_MAX, "Too many physsegs."); +#ifdef VM_NUMA_ALLOC struct mem_affinity *mem_affinity; int *mem_locality; +#endif int vm_ndomains = 1; @@ -144,7 +144,7 @@ static int sysctl_vm_phys_segs(SYSCTL_HANDLER_ARGS); SYSCTL_OID(_vm, OID_AUTO, phys_segs, CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, sysctl_vm_phys_segs, "A", "Phys Seg Info"); -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC static int sysctl_vm_phys_locality(SYSCTL_HANDLER_ARGS); SYSCTL_OID(_vm, OID_AUTO, phys_locality, CTLTYPE_STRING | CTLFLAG_RD, NULL, 0, sysctl_vm_phys_locality, "A", "Phys Locality Info"); @@ -159,7 +159,7 @@ SYSCTL_INT(_vm, OID_AUTO, ndomains, CTLFLAG_RD, static struct mtx vm_default_policy_mtx; MTX_SYSINIT(vm_default_policy, &vm_default_policy_mtx, "default policy mutex", MTX_DEF); -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC static struct vm_domain_policy vm_default_policy = VM_DOMAIN_POLICY_STATIC_INITIALISER(VM_POLICY_FIRST_TOUCH_ROUND_ROBIN, 0); #else @@ -277,7 +277,7 @@ vm_phys_fictitious_cmp(struct vm_phys_fictitious_seg *p1, static __inline int vm_rr_selectdomain(void) { -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC struct thread *td; td = curthread; @@ -303,13 +303,13 @@ vm_rr_selectdomain(void) static void vm_policy_iterator_init(struct vm_domain_iterator *vi) { -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC struct vm_domain_policy lcl; #endif vm_domain_iterator_init(vi); -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC /* Copy out the thread policy */ vm_domain_policy_localcopy(&lcl, &curthread->td_vm_dom_policy); if (lcl.p.policy != VM_POLICY_NONE) { @@ -433,7 +433,7 @@ int vm_phys_mem_affinity(int f, int t) { -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC if (mem_locality == NULL) return (-1); if (f >= vm_ndomains || t >= vm_ndomains) @@ -444,7 +444,7 @@ vm_phys_mem_affinity(int f, int t) #endif } -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC /* * Outputs the VM locality table. */ @@ -520,6 +520,7 @@ _vm_phys_create_seg(vm_paddr_t start, vm_paddr_t end, int domain) static void vm_phys_create_seg(vm_paddr_t start, vm_paddr_t end) { +#ifdef VM_NUMA_ALLOC int i; if (mem_affinity == NULL) { @@ -544,6 +545,9 @@ vm_phys_create_seg(vm_paddr_t start, vm_paddr_t end) mem_affinity[i].domain); start = mem_affinity[i].end; } +#else + _vm_phys_create_seg(start, end, 0); +#endif } /* diff --git a/sys/vm/vm_phys.h b/sys/vm/vm_phys.h index f9c776d..ee4aa2d 100644 --- a/sys/vm/vm_phys.h +++ b/sys/vm/vm_phys.h @@ -99,7 +99,7 @@ int vm_phys_mem_affinity(int f, int t); static inline struct vm_domain * vm_phys_domain(vm_page_t m) { -#if MAXMEMDOM > 1 +#ifdef VM_NUMA_ALLOC int domn, segind; /* XXXKIB try to assert that the page is managed */ diff --git a/sys/x86/acpica/srat.c b/sys/x86/acpica/srat.c index 2ec0c32..19ed116 100644 --- a/sys/x86/acpica/srat.c +++ b/sys/x86/acpica/srat.c @@ -28,6 +28,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_vm.h" + #include #include #include @@ -62,7 +64,8 @@ int num_mem; static ACPI_TABLE_SRAT *srat; static vm_paddr_t srat_physaddr; -static int vm_domains[VM_PHYSSEG_MAX]; +static int domain_pxm[MAXMEMDOM]; +static int ndomain; static ACPI_TABLE_SLIT *slit; static vm_paddr_t slit_physaddr; @@ -145,8 +148,10 @@ parse_slit(void) acpi_unmap_table(slit); slit = NULL; +#ifdef VM_NUMA_ALLOC /* Tell the VM about it! */ mem_locality = vm_locality_table; +#endif return (0); } @@ -340,48 +345,46 @@ renumber_domains(void) int i, j, slot; /* Enumerate all the domains. */ - vm_ndomains = 0; + ndomain = 0; for (i = 0; i < num_mem; i++) { /* See if this domain is already known. */ - for (j = 0; j < vm_ndomains; j++) { - if (vm_domains[j] >= mem_info[i].domain) + for (j = 0; j < ndomain; j++) { + if (domain_pxm[j] >= mem_info[i].domain) break; } - if (j < vm_ndomains && vm_domains[j] == mem_info[i].domain) + if (j < ndomain && domain_pxm[j] == mem_info[i].domain) continue; /* Insert the new domain at slot 'j'. */ slot = j; - for (j = vm_ndomains; j > slot; j--) - vm_domains[j] = vm_domains[j - 1]; - vm_domains[slot] = mem_info[i].domain; - vm_ndomains++; - if (vm_ndomains > MAXMEMDOM) { - vm_ndomains = 1; + for (j = ndomain; j > slot; j--) + domain_pxm[j] = domain_pxm[j - 1]; + domain_pxm[slot] = mem_info[i].domain; + ndomain++; + if (ndomain > MAXMEMDOM) { + ndomain = 1; printf("SRAT: Too many memory domains\n"); return (EFBIG); } } - /* Renumber each domain to its index in the sorted 'domains' list. */ - for (i = 0; i < vm_ndomains; i++) { + /* Renumber each domain to its index in the sorted 'domain_pxm' list. */ + for (i = 0; i < ndomain; i++) { /* * If the domain is already the right value, no need * to renumber. */ - if (vm_domains[i] == i) + if (domain_pxm[i] == i) continue; /* Walk the cpu[] and mem_info[] arrays to renumber. */ for (j = 0; j < num_mem; j++) - if (mem_info[j].domain == vm_domains[i]) + if (mem_info[j].domain == domain_pxm[i]) mem_info[j].domain = i; for (j = 0; j <= MAX_APIC_ID; j++) - if (cpus[j].enabled && cpus[j].domain == vm_domains[i]) + if (cpus[j].enabled && cpus[j].domain == domain_pxm[i]) cpus[j].domain = i; } - KASSERT(vm_ndomains > 0, - ("renumber_domains: invalid final vm_ndomains setup")); return (0); } @@ -416,8 +419,11 @@ parse_srat(void) return (-1); } +#ifdef VM_NUMA_ALLOC /* Point vm_phys at our memory affinity table. */ + vm_ndomains = ndomain; mem_affinity = mem_info; +#endif return (0); } @@ -495,12 +501,21 @@ acpi_map_pxm_to_vm_domainid(int pxm) { int i; - for (i = 0; i < vm_ndomains; i++) { - if (vm_domains[i] == pxm) + for (i = 0; i < ndomain; i++) { + if (domain_pxm[i] == pxm) return (i); } return (-1); } +#else /* MAXMEMDOM == 1 */ + +int +acpi_map_pxm_to_vm_domainid(int pxm) +{ + + return (-1); +} + #endif /* MAXMEMDOM > 1 */ -- cgit v1.1 From 872f9979ca66f9de4958fee179e93aadf7de7dd8 Mon Sep 17 00:00:00 2001 From: mav Date: Sat, 9 Apr 2016 14:50:47 +0000 Subject: Register symbolic port/node names in FC name server. This is cosmetics that simplifies identification of new ports on FC switch. It would be good to use target name from CTL here instead of hostname, but it is not passed here through CAM now. MFC after: 2 weeks --- sys/dev/isp/isp.c | 134 +++++++++++++++++++++++++++++++++++++++++++--- sys/dev/isp/isp_freebsd.h | 1 + sys/dev/isp/isp_library.c | 23 ++++++++ sys/dev/isp/isp_library.h | 2 + sys/dev/isp/isp_stds.h | 25 +++++++++ sys/dev/isp/ispmbox.h | 2 + 6 files changed, 181 insertions(+), 6 deletions(-) diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index c4c7d80..5dd47bd 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -126,6 +126,8 @@ static int isp_send_change_request(ispsoftc_t *, int); static int isp_register_fc4_type(ispsoftc_t *, int); static int isp_register_fc4_type_24xx(ispsoftc_t *, int); static int isp_register_fc4_features_24xx(ispsoftc_t *, int); +static int isp_register_port_name_24xx(ispsoftc_t *, int); +static int isp_register_node_name_24xx(ispsoftc_t *, int); static uint16_t isp_next_handle(ispsoftc_t *, uint16_t *); static int isp_fw_state(ispsoftc_t *, int); static void isp_mboxcmd_qnw(ispsoftc_t *, mbreg_t *, int); @@ -3073,6 +3075,8 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) r = isp_register_fc4_type_24xx(isp, chan); if (r == 0) isp_register_fc4_features_24xx(isp, chan); + isp_register_port_name_24xx(isp, chan); + isp_register_node_name_24xx(isp, chan); } else { fcp->isp_sns_hdl = SNS_ID; r = isp_register_fc4_type(isp, chan); @@ -3577,8 +3581,6 @@ isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) /* * Build the CT header and command in memory. - * - * Note that the CT header has to end up as Big Endian format in memory. */ ISP_MEMZERO(&ct, sizeof (ct)); ct.ct_revision = CT_REVISION; @@ -3982,8 +3984,6 @@ isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan) /* * Build the CT header and command in memory. - * - * Note that the CT header has to end up as Big Endian format in memory. */ ISP_MEMZERO(&rp, sizeof(rp)); ct = &rp.rftid_hdr; @@ -4034,8 +4034,6 @@ isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) /* * Build the CT header and command in memory. - * - * Note that the CT header has to end up as Big Endian format in memory. */ ISP_MEMZERO(&rp, sizeof(rp)); ct = &rp.rffid_hdr; @@ -4079,6 +4077,130 @@ isp_register_fc4_features_24xx(ispsoftc_t *isp, int chan) return (0); } +static int +isp_register_port_name_24xx(ispsoftc_t *isp, int chan) +{ + fcparam *fcp = FCPARAM(isp, chan); + ct_hdr_t *ct; + rspn_id_t rp; + uint8_t *scp = fcp->isp_scratch; + int len; + + if (FC_SCRATCH_ACQUIRE(isp, chan)) { + isp_prt(isp, ISP_LOGERR, sacq); + return (-1); + } + + /* + * Build the CT header and command in memory. + */ + ISP_MEMZERO(&rp, sizeof(rp)); + ct = &rp.rspnid_hdr; + ct->ct_revision = CT_REVISION; + ct->ct_fcs_type = CT_FC_TYPE_FC; + ct->ct_fcs_subtype = CT_FC_SUBTYPE_NS; + ct->ct_cmd_resp = SNS_RSPN_ID; + rp.rspnid_portid[0] = fcp->isp_portid >> 16; + rp.rspnid_portid[1] = fcp->isp_portid >> 8; + rp.rspnid_portid[2] = fcp->isp_portid; + rp.rspnid_length = 0; + len = offsetof(rspn_id_t, rspnid_name); + mtx_lock(&prison0.pr_mtx); + rp.rspnid_length += sprintf(&scp[XTXOFF + len + rp.rspnid_length], + "%s", prison0.pr_hostname[0] ? prison0.pr_hostname : "FreeBSD"); + mtx_unlock(&prison0.pr_mtx); + rp.rspnid_length += sprintf(&scp[XTXOFF + len + rp.rspnid_length], + ":%s", device_get_nameunit(isp->isp_dev)); + if (chan != 0) { + rp.rspnid_length += sprintf(&scp[XTXOFF + len + + rp.rspnid_length], "/%d", chan); + } + len += rp.rspnid_length; + ct->ct_bcnt_resid = (len - sizeof(ct_hdr_t)) >> 2; + isp_put_rspn_id(isp, &rp, (rspn_id_t *)&scp[XTXOFF]); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT request", len, &scp[XTXOFF]); + + if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { + FC_SCRATCH_RELEASE(isp, chan); + return (-1); + } + + isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); + FC_SCRATCH_RELEASE(isp, chan); + if (ct->ct_cmd_resp == LS_RJT) { + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, + "Chan %d Register Symbolic Port Name rejected", chan); + return (-1); + } else if (ct->ct_cmd_resp == LS_ACC) { + isp_prt(isp, ISP_LOG_SANCFG, + "Chan %d Register Symbolic Port Name accepted", chan); + } else { + isp_prt(isp, ISP_LOGWARN, + "Chan %d Register Symbolic Port Name: 0x%x", chan, ct->ct_cmd_resp); + return (-1); + } + return (0); +} + +static int +isp_register_node_name_24xx(ispsoftc_t *isp, int chan) +{ + fcparam *fcp = FCPARAM(isp, chan); + ct_hdr_t *ct; + rsnn_nn_t rp; + uint8_t *scp = fcp->isp_scratch; + int len; + + if (FC_SCRATCH_ACQUIRE(isp, chan)) { + isp_prt(isp, ISP_LOGERR, sacq); + return (-1); + } + + /* + * Build the CT header and command in memory. + */ + ISP_MEMZERO(&rp, sizeof(rp)); + ct = &rp.rsnnnn_hdr; + ct->ct_revision = CT_REVISION; + ct->ct_fcs_type = CT_FC_TYPE_FC; + ct->ct_fcs_subtype = CT_FC_SUBTYPE_NS; + ct->ct_cmd_resp = SNS_RSNN_NN; + MAKE_NODE_NAME_FROM_WWN(rp.rsnnnn_nodename, fcp->isp_wwnn); + rp.rsnnnn_length = 0; + len = offsetof(rsnn_nn_t, rsnnnn_name); + mtx_lock(&prison0.pr_mtx); + rp.rsnnnn_length += sprintf(&scp[XTXOFF + len + rp.rsnnnn_length], + "%s", prison0.pr_hostname[0] ? prison0.pr_hostname : "FreeBSD"); + mtx_unlock(&prison0.pr_mtx); + len += rp.rsnnnn_length; + ct->ct_bcnt_resid = (len - sizeof(ct_hdr_t)) >> 2; + isp_put_rsnn_nn(isp, &rp, (rsnn_nn_t *)&scp[XTXOFF]); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "CT request", len, &scp[XTXOFF]); + + if (isp_ct_passthru(isp, chan, len, sizeof(ct_hdr_t))) { + FC_SCRATCH_RELEASE(isp, chan); + return (-1); + } + + isp_get_ct_hdr(isp, (ct_hdr_t *) scp, ct); + FC_SCRATCH_RELEASE(isp, chan); + if (ct->ct_cmd_resp == LS_RJT) { + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, + "Chan %d Register Symbolic Node Name rejected", chan); + return (-1); + } else if (ct->ct_cmd_resp == LS_ACC) { + isp_prt(isp, ISP_LOG_SANCFG, + "Chan %d Register Symbolic Node Name accepted", chan); + } else { + isp_prt(isp, ISP_LOGWARN, + "Chan %d Register Symbolic Node Name: 0x%x", chan, ct->ct_cmd_resp); + return (-1); + } + return (0); +} + static uint16_t isp_next_handle(ispsoftc_t *isp, uint16_t *ohp) { diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h index 7702ee6..3e77077 100644 --- a/sys/dev/isp/isp_freebsd.h +++ b/sys/dev/isp/isp_freebsd.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c index 78c7f6f..987e515 100644 --- a/sys/dev/isp/isp_library.c +++ b/sys/dev/isp/isp_library.c @@ -1988,6 +1988,17 @@ isp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst) } void +isp_put_rspn_id(ispsoftc_t *isp, rspn_id_t *src, rspn_id_t *dst) +{ +/* int i;*/ + isp_put_ct_hdr(isp, &src->rspnid_hdr, &dst->rspnid_hdr); + ISP_IOZPUT_8(isp, src->rspnid_reserved, &dst->rspnid_reserved); + ISP_IOZPUT_8(isp, src->rspnid_length, &dst->rspnid_length); +/* for (i = 0; i < src->rspnid_length; i++) + ISP_IOZPUT_8(isp, src->rspnid_name[i], &dst->rspnid_name[i]);*/ +} + +void isp_put_rff_id(ispsoftc_t *isp, rff_id_t *src, rff_id_t *dst) { int i; @@ -2002,6 +2013,18 @@ isp_put_rff_id(ispsoftc_t *isp, rff_id_t *src, rff_id_t *dst) } void +isp_put_rsnn_nn(ispsoftc_t *isp, rsnn_nn_t *src, rsnn_nn_t *dst) +{ + int i; + isp_put_ct_hdr(isp, &src->rsnnnn_hdr, &dst->rsnnnn_hdr); + for (i = 0; i < 8; i++) + ISP_IOZPUT_8(isp, src->rsnnnn_nodename[i], &dst->rsnnnn_nodename[i]); + ISP_IOZPUT_8(isp, src->rsnnnn_length, &dst->rsnnnn_length); +/* for (i = 0; i < src->rsnnnn_length; i++) + ISP_IOZPUT_8(isp, src->rsnnnn_name[i], &dst->rsnnnn_name[i]);*/ +} + +void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst) { ISP_IOZGET_8(isp, &src->ct_revision, dst->ct_revision); diff --git a/sys/dev/isp/isp_library.h b/sys/dev/isp/isp_library.h index 922a98b..c70b2cc 100644 --- a/sys/dev/isp/isp_library.h +++ b/sys/dev/isp/isp_library.h @@ -144,7 +144,9 @@ void isp_get_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *); void isp_put_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *); void isp_get_fcp_cmnd_iu(ispsoftc_t *, fcp_cmnd_iu_t *, fcp_cmnd_iu_t *); void isp_put_rft_id(ispsoftc_t *, rft_id_t *, rft_id_t *); +void isp_put_rspn_id(ispsoftc_t *, rspn_id_t *, rspn_id_t *); void isp_put_rff_id(ispsoftc_t *, rff_id_t *, rff_id_t *); +void isp_put_rsnn_nn(ispsoftc_t *, rsnn_nn_t *, rsnn_nn_t *); void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *); void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *); void isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *, fcp_rsp_iu_t *); diff --git a/sys/dev/isp/isp_stds.h b/sys/dev/isp/isp_stds.h index 315870e..a83f08f 100644 --- a/sys/dev/isp/isp_stds.h +++ b/sys/dev/isp/isp_stds.h @@ -139,6 +139,19 @@ typedef struct { } rft_id_t; /* + * RSPN_ID Requet CT_IU + * + * Source: INCITS 463-2010 Generic Services 6 Section 5.2.5.32 + */ +typedef struct { + ct_hdr_t rspnid_hdr; + uint8_t rspnid_reserved; + uint8_t rspnid_portid[3]; + uint8_t rspnid_length; + uint8_t rspnid_name[0]; +} rspn_id_t; + +/* * RFF_ID Requet CT_IU * * Source: INCITS 463-2010 Generic Services 6 Section 5.2.5.34 @@ -153,6 +166,18 @@ typedef struct { } rff_id_t; /* + * RSNN_NN Requet CT_IU + * + * Source: INCITS 463-2010 Generic Services 6 Section 5.2.5.35 + */ +typedef struct { + ct_hdr_t rsnnnn_hdr; + uint8_t rsnnnn_nodename[8]; + uint8_t rsnnnn_length; + uint8_t rsnnnn_name[0]; +} rsnn_nn_t; + +/* * FCP Response IU and bits of interest * Source: NCITS T10, Project 1828D, Revision 02b (aka FCP4r02b) */ diff --git a/sys/dev/isp/ispmbox.h b/sys/dev/isp/ispmbox.h index 5a1306f..8bd4d1a 100644 --- a/sys/dev/isp/ispmbox.h +++ b/sys/dev/isp/ispmbox.h @@ -1548,7 +1548,9 @@ typedef struct { #define SNS_GFF_ID 0x11F #define SNS_GID_FT 0x171 #define SNS_RFT_ID 0x217 +#define SNS_RSPN_ID 0x218 #define SNS_RFF_ID 0x21F +#define SNS_RSNN_NN 0x239 typedef struct { uint16_t snscb_rblen; /* response buffer length (words) */ uint16_t snscb_reserved0; -- cgit v1.1 From 8c8069ff15ec4563a7ca9d91a07748e0fd5a5a67 Mon Sep 17 00:00:00 2001 From: jilles Date: Sat, 9 Apr 2016 16:06:13 +0000 Subject: sh: Fix some unquoted variables in tests. The builtins/getopts1.0 test failed if a single-character file existed in the current directory. --- bin/sh/tests/builtins/getopts1.0 | 8 ++++---- bin/sh/tests/builtins/getopts2.0 | 2 +- bin/sh/tests/builtins/getopts9.0 | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/sh/tests/builtins/getopts1.0 b/bin/sh/tests/builtins/getopts1.0 index 64763bc..10d2b59 100644 --- a/bin/sh/tests/builtins/getopts1.0 +++ b/bin/sh/tests/builtins/getopts1.0 @@ -3,7 +3,7 @@ printf -- '-1-\n' set -- -abc getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" # In this case 'getopts' should realize that we have not provided the # required argument for "-b". @@ -14,12 +14,12 @@ echo ${OPTION} printf -- '-2-\n' set -- -ab getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" getopts "ab:" OPTION 3>&2 2>&1 >&3 3>&- -echo ${OPTION} +printf '%s\n' "${OPTION}" # The 'shift' is aimed at causing an error. printf -- '-3-\n' shift 1 getopts "ab:" OPTION -echo ${OPTION} +printf '%s\n' "${OPTION}" diff --git a/bin/sh/tests/builtins/getopts2.0 b/bin/sh/tests/builtins/getopts2.0 index 5a5dbe2..1bd2c32 100644 --- a/bin/sh/tests/builtins/getopts2.0 +++ b/bin/sh/tests/builtins/getopts2.0 @@ -3,4 +3,4 @@ set - -ax getopts ax option set -C getopts ax option -echo $option +printf '%s\n' "$option" diff --git a/bin/sh/tests/builtins/getopts9.0 b/bin/sh/tests/builtins/getopts9.0 index d23fc43..1c35fc6 100644 --- a/bin/sh/tests/builtins/getopts9.0 +++ b/bin/sh/tests/builtins/getopts9.0 @@ -2,8 +2,8 @@ args='-ab' getopts ab opt $args -echo $?:$opt:$OPTARG +printf '%s\n' "$?:$opt:$OPTARG" for dummy in dummy1 dummy2; do getopts ab opt $args - echo $?:$opt:$OPTARG + printf '%s\n' "$?:$opt:$OPTARG" done -- cgit v1.1 From 123efcdbc480869bf3edc9ea94678440f8073964 Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 17:37:36 +0000 Subject: ixl(4): replace 0 with NULL for pointers. Found by devel/coccinelle. Differential Revision: https://reviews.freebsd.org/D5894 Reviewed by: erj --- sys/dev/ixl/if_ixl.c | 4 ++-- sys/dev/ixl/if_ixlv.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/dev/ixl/if_ixl.c b/sys/dev/ixl/if_ixl.c index 2ac5b92..36d79ad 100644 --- a/sys/dev/ixl/if_ixl.c +++ b/sys/dev/ixl/if_ixl.c @@ -3380,7 +3380,7 @@ ixl_add_sysctls_eth_stats(struct sysctl_ctx_list *ctx, }; struct ixl_sysctl_info *entry = ctls; - while (entry->stat != 0) + while (entry->stat != NULL) { SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, entry->name, CTLFLAG_RD, entry->stat, @@ -3439,7 +3439,7 @@ ixl_add_sysctls_mac_stats(struct sysctl_ctx_list *ctx, }; struct ixl_sysctl_info *entry = ctls; - while (entry->stat != 0) + while (entry->stat != NULL) { SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, entry->name, CTLFLAG_RD, entry->stat, diff --git a/sys/dev/ixl/if_ixlv.c b/sys/dev/ixl/if_ixlv.c index 51d4e95..8c4a901 100644 --- a/sys/dev/ixl/if_ixlv.c +++ b/sys/dev/ixl/if_ixlv.c @@ -2832,7 +2832,7 @@ ixlv_add_sysctls(struct ixlv_sc *sc) {0,0,0} }; struct ixl_sysctl_info *entry = ctls; - while (entry->stat != 0) + while (entry->stat != NULL) { SYSCTL_ADD_QUAD(ctx, child, OID_AUTO, entry->name, CTLFLAG_RD, entry->stat, -- cgit v1.1 From 5113401b57541f0c9458db76f4cf00fa8488bc41 Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 18:08:21 +0000 Subject: libfetch: replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: des --- lib/libfetch/ftp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libfetch/ftp.c b/lib/libfetch/ftp.c index 4e650b9..dd58c0d 100644 --- a/lib/libfetch/ftp.c +++ b/lib/libfetch/ftp.c @@ -929,7 +929,7 @@ ftp_authenticate(conn_t *conn, struct url *url, struct url *purl) if (*pwd == '\0') pwd = getenv("FTP_PASSWORD"); if (pwd == NULL || *pwd == '\0') { - if ((logname = getlogin()) == 0) + if ((logname = getlogin()) == NULL) logname = FTP_ANONYMOUS_USER; if ((len = snprintf(pbuf, MAXLOGNAME + 1, "%s@", logname)) < 0) len = 0; -- cgit v1.1 From dc9d6625c32731117e4801eb88847cee4986b6ed Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 18:09:10 +0000 Subject: libpam: replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: des --- lib/libpam/modules/pam_krb5/pam_krb5.c | 2 +- lib/libpam/modules/pam_login_access/login_access.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/libpam/modules/pam_krb5/pam_krb5.c b/lib/libpam/modules/pam_krb5/pam_krb5.c index 19592e3..8c72e28 100644 --- a/lib/libpam/modules/pam_krb5/pam_krb5.c +++ b/lib/libpam/modules/pam_krb5/pam_krb5.c @@ -860,7 +860,7 @@ verify_krb_v5_tgt(krb5_context context, krb5_ccache ccache, services[0] = "host"; services[1] = pam_service; services[2] = NULL; - keyblock = 0; + keyblock = NULL; retval = -1; for (service = &services[0]; *service != NULL; service++) { retval = krb5_sname_to_principal(context, NULL, *service, diff --git a/lib/libpam/modules/pam_login_access/login_access.c b/lib/libpam/modules/pam_login_access/login_access.c index dacb9d7..9b6d257 100644 --- a/lib/libpam/modules/pam_login_access/login_access.c +++ b/lib/libpam/modules/pam_login_access/login_access.c @@ -124,7 +124,7 @@ list_match(char *list, const char *item, * the match is affected by any exceptions. */ - for (tok = strtok(list, sep); tok != 0; tok = strtok((char *) 0, sep)) { + for (tok = strtok(list, sep); tok != NULL; tok = strtok((char *) 0, sep)) { if (strcasecmp(tok, "EXCEPT") == 0) /* EXCEPT: give up */ break; if ((match = (*match_fn)(tok, item)) != 0) /* YES */ @@ -135,7 +135,7 @@ list_match(char *list, const char *item, if (match != NO) { while ((tok = strtok((char *) 0, sep)) && strcasecmp(tok, "EXCEPT")) /* VOID */ ; - if (tok == 0 || list_match((char *) 0, item, match_fn) == NO) + if (tok == NULL || list_match((char *) 0, item, match_fn) == NO) return (match); } return (NO); -- cgit v1.1 From 46483654c950233765ca6b3cf869fa842d80a0ab Mon Sep 17 00:00:00 2001 From: mav Date: Sat, 9 Apr 2016 18:39:57 +0000 Subject: Add couple new constants from SPC5r08. --- sys/cam/scsi/scsi_all.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h index f2b4b21..997a58c 100644 --- a/sys/cam/scsi/scsi_all.h +++ b/sys/cam/scsi/scsi_all.h @@ -2291,6 +2291,8 @@ struct scsi_vpd_id_descriptor #define SVPD_ID_TYPE_LUNGRP 0x06 #define SVPD_ID_TYPE_MD5_LUN_ID 0x07 #define SVPD_ID_TYPE_SCSI_NAME 0x08 +#define SVPD_ID_TYPE_PROTO 0x09 +#define SVPD_ID_TYPE_UUID 0x0a #define SVPD_ID_TYPE_MASK 0x0f u_int8_t reserved; u_int8_t length; -- cgit v1.1 From b1f5ba96ab953fbf5cf52e9cca1214831cb6df42 Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 18:52:09 +0000 Subject: libedit: replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: Christos Zoulas --- lib/libedit/filecomplete.c | 4 ++-- lib/libedit/vi.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/libedit/filecomplete.c b/lib/libedit/filecomplete.c index 10d44e4..4527302 100644 --- a/lib/libedit/filecomplete.c +++ b/lib/libedit/filecomplete.c @@ -471,7 +471,7 @@ fn_complete(EditLine *el, /* these can be used by function called in completion_matches() */ /* or (*attempted_completion_function)() */ - if (point != 0) + if (point != NULL) *point = (int)(li->cursor - li->buffer); if (end != NULL) *end = (int)(li->lastchar - li->buffer); @@ -483,7 +483,7 @@ fn_complete(EditLine *el, &el->el_scratch), cur_off - (int)len, cur_off); } else - matches = 0; + matches = NULL; if (!attempted_completion_function || (over != NULL && !*over && !matches)) matches = completion_matches( diff --git a/lib/libedit/vi.c b/lib/libedit/vi.c index 0a426fd..6b0a775 100644 --- a/lib/libedit/vi.c +++ b/lib/libedit/vi.c @@ -1088,7 +1088,7 @@ vi_history_word(EditLine *el, Int c __attribute__((__unused__))) if (wp == NULL) return CC_ERROR; - wep = wsp = 0; + wep = wsp = NULL; do { while (Isspace(*wp)) wp++; @@ -1101,7 +1101,7 @@ vi_history_word(EditLine *el, Int c __attribute__((__unused__))) } while ((!el->el_state.doingarg || --el->el_state.argument > 0) && *wp != 0); - if (wsp == 0 || (el->el_state.doingarg && el->el_state.argument != 0)) + if (wsp == NULL || (el->el_state.doingarg && el->el_state.argument != 0)) return CC_ERROR; cv_undo(el); -- cgit v1.1 From 02c6e6bd14411a4740ce0a788ebb4a2e308b0c7e Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 9 Apr 2016 19:09:06 +0000 Subject: Align the start of the text segment to an 8-byte boundary. This fixes alignment aborts in ubldr.bin for RPi that started happening with clang 3.8 (earlier clang apparently didn't generate strd instructions that trigger the alignment fault). The abort happened in ubldr.bin and not ubldr (elf version) because the elf headers are 0xf4 bytes long, and stripping them off left everything 4-byte aligned. While here, also stop aligning the data segment to a page boundary, align it to 8 bytes instead (aligning to a page just needlessly makes the file bigger); pointed out by andrew@. --- sys/boot/arm/uboot/ldscript.arm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sys/boot/arm/uboot/ldscript.arm b/sys/boot/arm/uboot/ldscript.arm index 1eb10a8..8eb604c 100644 --- a/sys/boot/arm/uboot/ldscript.arm +++ b/sys/boot/arm/uboot/ldscript.arm @@ -6,6 +6,7 @@ SECTIONS { /* Read-only sections, merged into text segment: */ . = UBLDR_LOADADDR + SIZEOF_HEADERS; + . = ALIGN(8); .text : { *(.text) @@ -47,8 +48,8 @@ SECTIONS .rodata1 : { *(.rodata1) } .sdata2 : { *(.sdata2) } .sbss2 : { *(.sbss2) } - /* Adjust the address for the data segment to the next page up. */ - . = ((. + 0x1000) & ~(0x1000 - 1)); + /* Adjust the address for the data segment to the doubleword boundary. */ + . = ALIGN(8); .data : { *(.data) -- cgit v1.1 From 29cd60d86a00dcefdbec7360417eb01ae82de66f Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 20:05:39 +0000 Subject: sh(1): replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: jilles --- bin/sh/miscbltin.c | 2 +- bin/sh/parser.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c index 1537196..56ecae8 100644 --- a/bin/sh/miscbltin.c +++ b/bin/sh/miscbltin.c @@ -341,7 +341,7 @@ umaskcmd(int argc __unused, char **argv __unused) } else { void *set; INTOFF; - if ((set = setmode (ap)) == 0) + if ((set = setmode (ap)) == NULL) error("Illegal number: %s", ap); mask = getmode (set, ~mask & 0777); diff --git a/bin/sh/parser.c b/bin/sh/parser.c index da6defd..3f9732c 100644 --- a/bin/sh/parser.c +++ b/bin/sh/parser.c @@ -628,7 +628,7 @@ simplecmd(union node **rpp, union node *redir) /* If we don't have any redirections already, then we must reset */ /* rpp to be the address of the local redir variable. */ - if (redir == 0) + if (redir == NULL) rpp = &redir; args = NULL; -- cgit v1.1 From c068b26cc6d12f0ebee2f24534a00b823e8020bb Mon Sep 17 00:00:00 2001 From: jhb Date: Sat, 9 Apr 2016 20:18:34 +0000 Subject: Use DELAY() instead of sleeping during boot-time attach. Tested by: Wolfgang Zenker --- sys/dev/ichiic/ig4_iic.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/dev/ichiic/ig4_iic.c b/sys/dev/ichiic/ig4_iic.c index a556127..23bdb7d 100644 --- a/sys/dev/ichiic/ig4_iic.c +++ b/sys/dev/ichiic/ig4_iic.c @@ -117,7 +117,10 @@ set_controller(ig4iic_softc_t *sc, uint32_t ctl) error = 0; break; } - mtx_sleep(sc, &sc->io_lock, 0, "i2cslv", 1); + if (cold) + DELAY(1000); + else + mtx_sleep(sc, &sc->io_lock, 0, "i2cslv", 1); } return (error); } -- cgit v1.1 From 6dcdb61ae36b64cef3125daa63d6dc75f5bcdadd Mon Sep 17 00:00:00 2001 From: mav Date: Sat, 9 Apr 2016 20:30:50 +0000 Subject: MFV r297760: 6418 zpool should have a label clearing command Reviewed by: Yuri Pankov Reviewed by: Matthew Ahrens Reviewed by: George Wilson Author: Will Andrews Closes #83 Closes #32 openzfs/openzfs@9663688425131744221ea99f9e66b9ed964492ae FreeBSD already had `zpool labelclear` functionality, so this is mostly just a diff reduction. MFC after: 1 month --- cddl/contrib/opensolaris/cmd/zdb/zdb.c | 5 +- cddl/contrib/opensolaris/cmd/zpool/zpool_main.c | 156 ++++++++++++--------- cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c | 4 +- .../opensolaris/lib/libzfs/common/libzfs_import.c | 16 +-- .../opensolaris/lib/libzfs/common/libzfs_pool.c | 16 +-- .../contrib/opensolaris/uts/common/sys/fs/zfs.h | 4 + 6 files changed, 115 insertions(+), 86 deletions(-) diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb.c b/cddl/contrib/opensolaris/cmd/zdb/zdb.c index bb45b5e..64e5cbd 100644 --- a/cddl/contrib/opensolaris/cmd/zdb/zdb.c +++ b/cddl/contrib/opensolaris/cmd/zdb/zdb.c @@ -2156,10 +2156,11 @@ dump_label(const char *dev) uint64_t psize, ashift; int len = strlen(dev) + 1; - if (strncmp(dev, "/dev/dsk/", 9) == 0) { + if (strncmp(dev, ZFS_DISK_ROOTD, strlen(ZFS_DISK_ROOTD)) == 0) { len++; path = malloc(len); - (void) snprintf(path, len, "%s%s", "/dev/rdsk/", dev + 9); + (void) snprintf(path, len, "%s%s", ZFS_RDISK_ROOTD, + dev + strlen(ZFS_DISK_ROOTD)); } else { path = strdup(dev); } diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c index b979833..ce8782f 100644 --- a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c +++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c @@ -21,12 +21,12 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2012 by Frederik Wessels. All rights reserved. * Copyright (c) 2012 Martin Matuska . All rights reserved. * Copyright (c) 2013 by Prasad Joshi (sTec). All rights reserved. * Copyright 2016 Igor Kozhukhov . + * Copyright 2016 Nexenta Systems, Inc. */ #include @@ -626,7 +626,10 @@ zpool_do_remove(int argc, char **argv) } /* - * zpool labelclear + * zpool labelclear [-f] + * + * -f Force clearing the label for the vdevs which are members of + * the exported or foreign pools. * * Verifies that the vdev is not active and zeros out the label information * on the device. @@ -634,8 +637,11 @@ zpool_do_remove(int argc, char **argv) int zpool_do_labelclear(int argc, char **argv) { - char *vdev, *name; - int c, fd = -1, ret = 0; + char vdev[MAXPATHLEN]; + char *name = NULL; + struct stat st; + int c, fd, ret = 0; + nvlist_t *config; pool_state_t state; boolean_t inuse = B_FALSE; boolean_t force = B_FALSE; @@ -658,88 +664,110 @@ zpool_do_labelclear(int argc, char **argv) /* get vdev name */ if (argc < 1) { - (void) fprintf(stderr, gettext("missing vdev device name\n")); + (void) fprintf(stderr, gettext("missing vdev name\n")); usage(B_FALSE); } + if (argc > 1) { + (void) fprintf(stderr, gettext("too many arguments\n")); + usage(B_FALSE); + } + + /* + * Check if we were given absolute path and use it as is. + * Otherwise if the provided vdev name doesn't point to a file, + * try prepending dsk path and appending s0. + */ + (void) strlcpy(vdev, argv[0], sizeof (vdev)); + if (vdev[0] != '/' && stat(vdev, &st) != 0) { + char *s; + + (void) snprintf(vdev, sizeof (vdev), "%s/%s", +#ifdef illumos + ZFS_DISK_ROOT, argv[0]); + if ((s = strrchr(argv[0], 's')) == NULL || + !isdigit(*(s + 1))) + (void) strlcat(vdev, "s0", sizeof (vdev)); +#else + "/dev", argv[0]); +#endif + if (stat(vdev, &st) != 0) { + (void) fprintf(stderr, gettext( + "failed to find device %s, try specifying absolute " + "path instead\n"), argv[0]); + return (1); + } + } - vdev = argv[0]; if ((fd = open(vdev, O_RDWR)) < 0) { - (void) fprintf(stderr, gettext("Unable to open %s\n"), vdev); - return (B_FALSE); + (void) fprintf(stderr, gettext("failed to open %s: %s\n"), + vdev, strerror(errno)); + return (1); } - name = NULL; - if (zpool_in_use(g_zfs, fd, &state, &name, &inuse) != 0) { - if (force) - goto wipe_label; - + if (zpool_read_label(fd, &config) != 0 || config == NULL) { (void) fprintf(stderr, - gettext("Unable to determine pool state for %s\n" - "Use -f to force the clearing any label data\n"), vdev); - + gettext("failed to read label from %s\n"), vdev); return (1); } + nvlist_free(config); - if (inuse) { - switch (state) { - default: - case POOL_STATE_ACTIVE: - case POOL_STATE_SPARE: - case POOL_STATE_L2CACHE: - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member (%s), of pool \"%s\".\n" - "\tTo remove label information from this device, export or destroy\n" - "\tthe pool, or remove %s from the configuration of this pool\n" - "\tand retry the labelclear operation\n"), - vdev, zpool_pool_state_to_name(state), name, vdev); - ret = 1; - goto errout; - - case POOL_STATE_EXPORTED: - if (force) - break; + ret = zpool_in_use(g_zfs, fd, &state, &name, &inuse); + if (ret != 0) { + (void) fprintf(stderr, + gettext("failed to check state for %s\n"), vdev); + return (1); + } - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member of the exported pool \"%s\".\n" - "\tUse \"zpool labelclear -f %s\" to force the removal of label\n" - "\tinformation.\n"), - vdev, name, vdev); - ret = 1; - goto errout; + if (!inuse) + goto wipe_label; - case POOL_STATE_POTENTIALLY_ACTIVE: - if (force) - break; + switch (state) { + default: + case POOL_STATE_ACTIVE: + case POOL_STATE_SPARE: + case POOL_STATE_L2CACHE: + (void) fprintf(stderr, gettext( + "%s is a member (%s) of pool \"%s\"\n"), + vdev, zpool_pool_state_to_name(state), name); + ret = 1; + goto errout; - (void) fprintf(stderr, -gettext("labelclear operation failed.\n" - "\tVdev %s is a member of the pool \"%s\".\n" - "\tThis pool is unknown to this system, but may be active on\n" - "\tanother system. Use \'zpool labelclear -f %s\' to force the\n" - "\tremoval of label information.\n"), - vdev, name, vdev); - ret = 1; - goto errout; + case POOL_STATE_EXPORTED: + if (force) + break; + (void) fprintf(stderr, gettext( + "use '-f' to override the following error:\n" + "%s is a member of exported pool \"%s\"\n"), + vdev, name); + ret = 1; + goto errout; - case POOL_STATE_DESTROYED: - /* inuse should never be set for a destoryed pool... */ + case POOL_STATE_POTENTIALLY_ACTIVE: + if (force) break; - } + (void) fprintf(stderr, gettext( + "use '-f' to override the following error:\n" + "%s is a member of potentially active pool \"%s\"\n"), + vdev, name); + ret = 1; + goto errout; + + case POOL_STATE_DESTROYED: + /* inuse should never be set for a destroyed pool */ + assert(0); + break; } wipe_label: - if (zpool_clear_label(fd) != 0) { + ret = zpool_clear_label(fd); + if (ret != 0) { (void) fprintf(stderr, - gettext("Label clear failed on vdev %s\n"), vdev); - ret = 1; + gettext("failed to clear label for %s\n"), vdev); } errout: - close(fd); - if (name != NULL) - free(name); + free(name); + (void) close(fd); return (ret); } diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c index 227d25a..14f37e1 100644 --- a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c +++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c @@ -79,8 +79,6 @@ #include "zpool_util.h" -#define DISK_ROOT "/dev/dsk" -#define RDISK_ROOT "/dev/rdsk" #define BACKUP_SLICE "s2" /* @@ -384,7 +382,7 @@ is_whole_disk(const char *arg) char path[MAXPATHLEN]; (void) snprintf(path, sizeof (path), "%s%s%s", - RDISK_ROOT, strrchr(arg, '/'), BACKUP_SLICE); + ZFS_RDISK_ROOT, strrchr(arg, '/'), BACKUP_SLICE); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) return (B_FALSE); if (efi_alloc_and_init(fd, EFI_NUMPAR, &label) != 0) { diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c index 133cc6f..aa2f142 100644 --- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c +++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c @@ -20,10 +20,10 @@ */ /* - * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 by Delphix. All rights reserved. * Copyright 2015 RackTop Systems. + * Copyright 2016 Nexenta Systems, Inc. */ /* @@ -1099,9 +1099,7 @@ zpool_open_func(void *arg) } /* - * Given a file descriptor, clear (zero) the label information. This function - * is used in the appliance stack as part of the ZFS sysevent module and - * to implement the "zpool labelclear" command. + * Given a file descriptor, clear (zero) the label information. */ int zpool_clear_label(int fd) @@ -1168,7 +1166,7 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg) */ for (i = 0; i < dirs; i++) { tpool_t *t; - char *rdsk; + char rdsk[MAXPATHLEN]; int dfd; boolean_t config_failed = B_FALSE; DIR *dirp; @@ -1184,15 +1182,17 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg) *end = 0; pathleft = &path[sizeof (path)] - end; +#ifdef illumos /* * Using raw devices instead of block devices when we're * reading the labels skips a bunch of slow operations during * close(2) processing, so we replace /dev/dsk with /dev/rdsk. */ - if (strcmp(path, "/dev/dsk/") == 0) - rdsk = "/dev/"; + if (strcmp(path, ZFS_DISK_ROOTD) == 0) + (void) strlcpy(rdsk, ZFS_RDISK_ROOTD, sizeof (rdsk)); else - rdsk = path; +#endif + (void) strlcpy(rdsk, path, sizeof (rdsk)); if ((dfd = open64(rdsk, O_RDONLY)) < 0 || (dirp = fdopendir(dfd)) == NULL) { diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c index 4dc48fa..658059c 100644 --- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c +++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c @@ -20,10 +20,10 @@ */ /* - * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. */ #include @@ -49,8 +49,6 @@ static int read_efi_label(nvlist_t *config, diskaddr_t *sb); -#define DISK_ROOT "/dev/dsk" -#define RDISK_ROOT "/dev/rdsk" #define BACKUP_SLICE "s2" typedef struct prop_flags { @@ -2345,7 +2343,7 @@ zpool_relabel_disk(libzfs_handle_t *hdl, const char *name) "efi_use_whole_disk")) == NULL) return (-1); - (void) snprintf(path, sizeof (path), "%s/%s", RDISK_ROOT, name); + (void) snprintf(path, sizeof (path), "%s/%s", ZFS_RDISK_ROOT, name); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) { zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "cannot " @@ -2421,7 +2419,7 @@ zpool_vdev_online(zpool_handle_t *zhp, const char *path, int flags, } if (wholedisk) { - pathname += strlen(DISK_ROOT) + 1; + pathname += strlen(ZFS_DISK_ROOT) + 1; (void) zpool_relabel_disk(hdl, pathname); } } @@ -3411,8 +3409,8 @@ zpool_vdev_name(libzfs_handle_t *hdl, zpool_handle_t *zhp, nvlist_t *nv, } #ifdef illumos - if (strncmp(path, "/dev/dsk/", 9) == 0) - path += 9; + if (strncmp(path, ZFS_DISK_ROOTD, strlen(ZFS_DISK_ROOTD)) == 0) + path += strlen(ZFS_DISK_ROOTD); if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_WHOLE_DISK, &value) == 0 && value) { @@ -3846,7 +3844,7 @@ read_efi_label(nvlist_t *config, diskaddr_t *sb) if (nvlist_lookup_string(config, ZPOOL_CONFIG_PATH, &path) != 0) return (err); - (void) snprintf(diskname, sizeof (diskname), "%s%s", RDISK_ROOT, + (void) snprintf(diskname, sizeof (diskname), "%s%s", ZFS_RDISK_ROOT, strrchr(path, '/')); if ((fd = open(diskname, O_RDONLY|O_NDELAY)) >= 0) { struct dk_gpt *vtoc; @@ -3931,7 +3929,7 @@ zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, const char *name) start_block = NEW_START_BLOCK; } - (void) snprintf(path, sizeof (path), "%s/%s%s", RDISK_ROOT, name, + (void) snprintf(path, sizeof (path), "%s/%s%s", ZFS_RDISK_ROOT, name, BACKUP_SLICE); if ((fd = open(path, O_RDWR | O_NDELAY)) < 0) { diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h index 3818616..7c25ddd 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h +++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h @@ -785,6 +785,10 @@ typedef struct ddt_histogram { #define ZFS_DRIVER "zfs" #define ZFS_DEV_NAME "zfs" #define ZFS_DEV "/dev/" ZFS_DEV_NAME +#define ZFS_DISK_ROOT "/dev/dsk" +#define ZFS_DISK_ROOTD ZFS_DISK_ROOT "/" +#define ZFS_RDISK_ROOT "/dev/rdsk" +#define ZFS_RDISK_ROOTD ZFS_RDISK_ROOT "/" /* general zvol path */ #define ZVOL_DIR "/dev/zvol" -- cgit v1.1 From aa42ac0ef56e414b8acc167fa71c786c75af2a2c Mon Sep 17 00:00:00 2001 From: pfg Date: Sat, 9 Apr 2016 20:36:07 +0000 Subject: USB: replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: hselasky --- lib/libusb/libusb20.c | 4 ++-- lib/libusbhid/descr.c | 2 +- lib/libusbhid/usage.c | 6 +++--- sys/dev/usb/net/if_urndis.c | 2 +- sys/dev/usb/usb_transfer.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/libusb/libusb20.c b/lib/libusb/libusb20.c index 1de3a26..2eb75f1 100644 --- a/lib/libusb/libusb20.c +++ b/lib/libusb/libusb20.c @@ -139,8 +139,8 @@ libusb20_tr_close(struct libusb20_transfer *xfer) free(xfer->ppBuffer); } /* reset variable fields in case the transfer is opened again */ - xfer->priv_sc0 = 0; - xfer->priv_sc1 = 0; + xfer->priv_sc0 = NULL; + xfer->priv_sc1 = NULL; xfer->is_opened = 0; xfer->is_pending = 0; xfer->is_cancel = 0; diff --git a/lib/libusbhid/descr.c b/lib/libusbhid/descr.c index 0c66342..4ca9dd7 100644 --- a/lib/libusbhid/descr.c +++ b/lib/libusbhid/descr.c @@ -159,7 +159,7 @@ hid_use_report_desc(unsigned char *data, unsigned int size) report_desc_t r; r = malloc(sizeof(*r) + size); - if (r == 0) { + if (r == NULL) { errno = ENOMEM; return (NULL); } diff --git a/lib/libusbhid/usage.c b/lib/libusbhid/usage.c index eeff818..3960dad 100644 --- a/lib/libusbhid/usage.c +++ b/lib/libusbhid/usage.c @@ -77,9 +77,9 @@ hid_init(const char *hidname) char line[100], name[100], *p, *n; int no; int lineno; - struct usage_page *curpage = 0; + struct usage_page *curpage = NULL; - if (hidname == 0) + if (hidname == NULL) hidname = _PATH_HIDTABLE; f = fopen(hidname, "r"); @@ -124,7 +124,7 @@ hid_init(const char *hidname) curpage->pagesize++; } else { if (npages >= npagesmax) { - if (pages == 0) { + if (pages == NULL) { npagesmax = 5; pages = malloc(npagesmax * sizeof (struct usage_page)); diff --git a/sys/dev/usb/net/if_urndis.c b/sys/dev/usb/net/if_urndis.c index 749f874..de7fd1e 100644 --- a/sys/dev/usb/net/if_urndis.c +++ b/sys/dev/usb/net/if_urndis.c @@ -235,7 +235,7 @@ urndis_attach(device_t dev) cmd = usbd_find_descriptor(uaa->device, NULL, uaa->info.bIfaceIndex, UDESC_CS_INTERFACE, 0xFF, UDESCSUB_CDC_CM, 0xFF); - if (cmd != 0) { + if (cmd != NULL) { DPRINTF("Call Mode Descriptor found, dataif=%d\n", cmd->bDataInterface); iface_index[0] = cmd->bDataInterface; } diff --git a/sys/dev/usb/usb_transfer.c b/sys/dev/usb/usb_transfer.c index 783a96c..17b9367 100644 --- a/sys/dev/usb/usb_transfer.c +++ b/sys/dev/usb/usb_transfer.c @@ -925,7 +925,7 @@ usbd_transfer_setup(struct usb_device *udev, DPRINTFN(6, "setup array has zero length!\n"); return (USB_ERR_INVAL); } - if (ifaces == 0) { + if (ifaces == NULL) { DPRINTFN(6, "ifaces array is NULL!\n"); return (USB_ERR_INVAL); } -- cgit v1.1 From aa8d56fcef79e9484f85dbb306b909cb0b78018a Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 21:57:34 +0000 Subject: [net80211] add back in the ff/superg node init call that I accidentally deleted. It's mostly a no-op right now, so it shouldn't have changed behaviour. --- sys/net80211/ieee80211_sta.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/net80211/ieee80211_sta.c b/sys/net80211/ieee80211_sta.c index 9c1707b..d80c767 100644 --- a/sys/net80211/ieee80211_sta.c +++ b/sys/net80211/ieee80211_sta.c @@ -1706,6 +1706,14 @@ sta_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, int subtype, } /* + * Always initialise FF/superg state; we can use this + * for doing A-MSDU encapsulation as well. + */ +#ifdef IEEE80211_SUPPORT_SUPERG + ieee80211_ff_node_init(ni); +#endif + + /* * Configure state now that we are associated. * * XXX may need different/additional driver callbacks? -- cgit v1.1 From 0d5c9ef4aad56d9e9141c6d5ebb5abff8061c92f Mon Sep 17 00:00:00 2001 From: adrian Date: Sat, 9 Apr 2016 22:01:32 +0000 Subject: [net80211] log the node pointer when calling ht node init/cleanup This makes it easier to track which node is having what done do it during normal use. This is likely the eighth time I've done this since I started doing net80211 development, so I think it's about time I just committed it. --- sys/net80211/ieee80211_ht.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index be380e9..7f322fd 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -1063,8 +1063,9 @@ ieee80211_ht_node_init(struct ieee80211_node *ni) IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_11N, ni, - "%s: called", - __func__); + "%s: called (%p)", + __func__, + ni); if (ni->ni_flags & IEEE80211_NODE_HT) { /* @@ -1074,8 +1075,8 @@ ieee80211_ht_node_init(struct ieee80211_node *ni) */ IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_11N, ni, - "%s: calling cleanup", - __func__); + "%s: calling cleanup (%p)", + __func__, ni); ieee80211_ht_node_cleanup(ni); } for (tid = 0; tid < WME_NUM_TID; tid++) { @@ -1100,8 +1101,8 @@ ieee80211_ht_node_cleanup(struct ieee80211_node *ni) IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_11N, ni, - "%s: called", - __func__); + "%s: called (%p)", + __func__, ni); KASSERT(ni->ni_flags & IEEE80211_NODE_HT, ("not an HT node")); -- cgit v1.1 From 33baaeb76fe6b3a5c254ee1d33e9e923fbecaa26 Mon Sep 17 00:00:00 2001 From: markj Date: Sun, 10 Apr 2016 01:23:39 +0000 Subject: Initialize DTrace hrtimer frequency during SI_SUB_CPU on i386 and amd64. This allows the hrtimer to be used earlier during boot. This is required for boot-time DTrace: anonymous enablings are created during SI_SUB_DTRACE_ANON, which runs before APs are started. In particular, the DTrace deadman timer requires that the hrtimer be functional. MFC after: 2 weeks --- sys/cddl/dev/dtrace/amd64/dtrace_subr.c | 48 ++++++++++++++++++++------------- sys/cddl/dev/dtrace/i386/dtrace_subr.c | 48 ++++++++++++++++++++------------- 2 files changed, 60 insertions(+), 36 deletions(-) diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c index f6577d5..2a26b65 100644 --- a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c @@ -246,24 +246,14 @@ static uint64_t nsec_scale; /* See below for the explanation of this macro. */ #define SCALE_SHIFT 28 +/* + * Get the frequency and scale factor as early as possible so that they can be + * used for boot-time tracing. + */ static void -dtrace_gethrtime_init_cpu(void *arg) -{ - uintptr_t cpu = (uintptr_t) arg; - - if (cpu == curcpu) - tgt_cpu_tsc = rdtsc(); - else - hst_cpu_tsc = rdtsc(); -} - -static void -dtrace_gethrtime_init(void *arg) +dtrace_gethrtime_init_early(void *arg) { - struct pcpu *pc; uint64_t tsc_f; - cpuset_t map; - int i; /* * Get TSC frequency known at this moment. @@ -279,7 +269,8 @@ dtrace_gethrtime_init(void *arg) * another 32-bit integer without overflowing 64-bit. * Thus minimum supported TSC frequency is 62.5MHz. */ - KASSERT(tsc_f > (NANOSEC >> (32 - SCALE_SHIFT)), ("TSC frequency is too low")); + KASSERT(tsc_f > (NANOSEC >> (32 - SCALE_SHIFT)), + ("TSC frequency is too low")); /* * We scale up NANOSEC/tsc_f ratio to preserve as much precision @@ -291,6 +282,27 @@ dtrace_gethrtime_init(void *arg) * (terahertz) values; */ nsec_scale = ((uint64_t)NANOSEC << SCALE_SHIFT) / tsc_f; +} +SYSINIT(dtrace_gethrtime_init_early, SI_SUB_CPU, SI_ORDER_ANY, + dtrace_gethrtime_init_early, NULL); + +static void +dtrace_gethrtime_init_cpu(void *arg) +{ + uintptr_t cpu = (uintptr_t) arg; + + if (cpu == curcpu) + tgt_cpu_tsc = rdtsc(); + else + hst_cpu_tsc = rdtsc(); +} + +static void +dtrace_gethrtime_init(void *arg) +{ + struct pcpu *pc; + cpuset_t map; + int i; /* The current CPU is the reference one. */ sched_pin(); @@ -311,8 +323,8 @@ dtrace_gethrtime_init(void *arg) } sched_unpin(); } - -SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, NULL); +SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, + NULL); /* * DTrace needs a high resolution time function which can diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c index be5bd4b..daca7dd 100644 --- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c @@ -248,24 +248,14 @@ static uint64_t nsec_scale; /* See below for the explanation of this macro. */ #define SCALE_SHIFT 28 +/* + * Get the frequency and scale factor as early as possible so that they can be + * used for boot-time tracing. + */ static void -dtrace_gethrtime_init_cpu(void *arg) -{ - uintptr_t cpu = (uintptr_t) arg; - - if (cpu == curcpu) - tgt_cpu_tsc = rdtsc(); - else - hst_cpu_tsc = rdtsc(); -} - -static void -dtrace_gethrtime_init(void *arg) +dtrace_gethrtime_init_early(void *arg) { - cpuset_t map; - struct pcpu *pc; uint64_t tsc_f; - int i; /* * Get TSC frequency known at this moment. @@ -281,7 +271,8 @@ dtrace_gethrtime_init(void *arg) * another 32-bit integer without overflowing 64-bit. * Thus minimum supported TSC frequency is 62.5MHz. */ - KASSERT(tsc_f > (NANOSEC >> (32 - SCALE_SHIFT)), ("TSC frequency is too low")); + KASSERT(tsc_f > (NANOSEC >> (32 - SCALE_SHIFT)), + ("TSC frequency is too low")); /* * We scale up NANOSEC/tsc_f ratio to preserve as much precision @@ -293,6 +284,27 @@ dtrace_gethrtime_init(void *arg) * (terahertz) values; */ nsec_scale = ((uint64_t)NANOSEC << SCALE_SHIFT) / tsc_f; +} +SYSINIT(dtrace_gethrtime_init_early, SI_SUB_CPU, SI_ORDER_ANY, + dtrace_gethrtime_init_early, NULL); + +static void +dtrace_gethrtime_init_cpu(void *arg) +{ + uintptr_t cpu = (uintptr_t) arg; + + if (cpu == curcpu) + tgt_cpu_tsc = rdtsc(); + else + hst_cpu_tsc = rdtsc(); +} + +static void +dtrace_gethrtime_init(void *arg) +{ + cpuset_t map; + struct pcpu *pc; + int i; /* The current CPU is the reference one. */ sched_pin(); @@ -313,8 +325,8 @@ dtrace_gethrtime_init(void *arg) } sched_unpin(); } - -SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, NULL); +SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, + NULL); /* * DTrace needs a high resolution time function which can -- cgit v1.1 From 9cabb4498124991a1d317d8d8e111c31966ca609 Mon Sep 17 00:00:00 2001 From: markj Date: Sun, 10 Apr 2016 01:24:27 +0000 Subject: Initialize SDT probes during SI_SUB_DTRACE_PROVIDER. This is consistent with all other DTrace providers and ensures that SDT probes are available for boot-time tracing. MFC after: 2 weeks --- sys/cddl/dev/sdt/sdt.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/sys/cddl/dev/sdt/sdt.c b/sys/cddl/dev/sdt/sdt.c index 4e5dd71..cef816f 100644 --- a/sys/cddl/dev/sdt/sdt.c +++ b/sys/cddl/dev/sdt/sdt.c @@ -384,28 +384,20 @@ sdt_unload() static int sdt_modevent(module_t mod __unused, int type, void *data __unused) { - int error = 0; switch (type) { case MOD_LOAD: - sdt_load(); - break; - case MOD_UNLOAD: - error = sdt_unload(); - break; - case MOD_SHUTDOWN: - break; - + return (0); default: - error = EOPNOTSUPP; - break; + return (EOPNOTSUPP); } - - return (error); } +SYSINIT(sdt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_load, NULL); +SYSUNINIT(sdt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_unload, NULL); + DEV_MODULE(sdt, sdt_modevent, NULL); MODULE_VERSION(sdt, 1); MODULE_DEPEND(sdt, dtrace, 1, 1, 1); -- cgit v1.1 From 7a70a2258262a6c228b3b459dfeb426e68e58e32 Mon Sep 17 00:00:00 2001 From: markj Date: Sun, 10 Apr 2016 01:25:12 +0000 Subject: nextboot(8): add a -a option for appending to a configuration. By default, a nextboot invocation will clobber any existing nextboot configuration. MFC after: 2 weeks Relnotes: yes --- sbin/reboot/nextboot.8 | 9 ++++++++- sbin/reboot/nextboot.sh | 26 ++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/sbin/reboot/nextboot.8 b/sbin/reboot/nextboot.8 index df46a0c..d006c3f 100644 --- a/sbin/reboot/nextboot.8 +++ b/sbin/reboot/nextboot.8 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 17, 2015 +.Dd April 9, 2016 .Dt NEXTBOOT 8 .Os .Sh NAME @@ -32,6 +32,7 @@ .Nd "specify an alternate kernel and boot flags for the next reboot" .Sh SYNOPSIS .Nm +.Op Fl a .Op Fl e Ar variable=value .Op Fl f .Op Fl k Ar kernel @@ -53,6 +54,12 @@ configuration. .Pp The options are as follows: .Bl -tag -width ".Fl o Ar options" +.It Fl a +This option causes +.Nm +to append to an existing configuration in +.Pa /boot/nextboot.conf . +By default any existing configuration is overwritten. .It Fl D Invoking .Nm diff --git a/sbin/reboot/nextboot.sh b/sbin/reboot/nextboot.sh index 655e533..a90fdeb 100644 --- a/sbin/reboot/nextboot.sh +++ b/sbin/reboot/nextboot.sh @@ -26,6 +26,7 @@ # # $FreeBSD$ +append="NO" delete="NO" kenv= force="NO" @@ -48,12 +49,17 @@ add_kenv() } display_usage() { - echo "Usage: nextboot [-e variable=value] [-f] [-k kernel] [-o options]" - echo " nextboot -D" + cat <<-EOF + Usage: nextboot [-e variable=value] [-f] [-k kernel] [-o options] + nextboot -D + EOF } -while getopts "De:fk:o:" argument ; do +while getopts "aDe:fk:o:" argument ; do case "${argument}" in + a) + append="YES" + ;; D) delete="YES" ;; @@ -106,7 +112,19 @@ df -Tn "/boot/" 2>/dev/null | while read _fs _type _other ; do EOF done -cat > ${nextboot_file} << EOF +set -e + +nextboot_tmp=$(mktemp $(dirname ${nextboot_file})/nextboot.XXXXXX) + +if [ ${append} = "YES" -a -f ${nextboot_file} ]; then + cp -f ${nextboot_file} ${nextboot_tmp} +fi + +cat >> ${nextboot_tmp} << EOF nextboot_enable="YES" $kenv EOF + +fsync ${nextboot_tmp} + +mv ${nextboot_tmp} ${nextboot_file} -- cgit v1.1 From 61ede4b2ecba0e7719312562eabb9f52e4d7ecfd Mon Sep 17 00:00:00 2001 From: markj Date: Sun, 10 Apr 2016 01:25:48 +0000 Subject: Implement support for boot-time DTrace. This allows one to enable DTrace probes relatively early during boot, during SI_SUB_DTRACE_ANON, before dtrace(1) can invoked. The desired enabling is created using dtrace -A, which writes a /boot/dtrace.dof file and uses nextboot(8) to ensure that DTrace kernel modules are loaded and that the DOF file describing the enabling is loaded by loader(8) during the subsequent boot. The trace output can then be fetched with dtrace -a. With this commit, boot-time DTrace is only functional on i386 and amd64: on other architectures, the high-resolution timer frequency is initialized during SI_SUB_CLOCKS and is thus not available when the anonymous tracing state is initialized. On x86, the TSC is used and is thus available earlier. MFC after: 1 month Relnotes: yes --- cddl/contrib/opensolaris/cmd/dtrace/dtrace.c | 71 +++++++-- .../contrib/opensolaris/uts/common/dtrace/dtrace.c | 161 ++++++++++++++------- 2 files changed, 167 insertions(+), 65 deletions(-) diff --git a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c index d8bdaa6..d065cdc 100644 --- a/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c +++ b/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c @@ -50,6 +50,9 @@ #ifdef illumos #include #endif +#ifdef __FreeBSD__ +#include +#endif typedef struct dtrace_cmd { void (*dc_func)(struct dtrace_cmd *); /* function to compile arg */ @@ -397,7 +400,41 @@ dof_prune(const char *fname) free(buf); } -#ifdef illumos +#ifdef __FreeBSD__ +/* + * Use nextboot(8) to tell the loader to load DTrace kernel modules during + * the next boot of the system. The nextboot(8) configuration is removed during + * boot, so it will not persist indefinitely. + */ +static void +bootdof_add(void) +{ + char * const nbargv[] = { + "nextboot", "-a", + "-e", "dtraceall_load=\"YES\"", + "-e", "dtrace_dof_load=\"YES\"", + "-e", "dtrace_dof_name=\"/boot/dtrace.dof\"", + "-e", "dtrace_dof_type=\"dtrace_dof\"", + NULL, + }; + pid_t child; + int err, status; + + err = posix_spawnp(&child, "nextboot", NULL, NULL, nbargv, + NULL); + if (err != 0) { + error("failed to execute nextboot: %s", strerror(err)); + exit(E_ERROR); + } + + if (waitpid(child, &status, 0) != child) + fatal("waiting for nextboot"); + if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { + error("nextboot returned with status %d", status); + exit(E_ERROR); + } +} +#else static void etcsystem_prune(void) { @@ -508,7 +545,7 @@ etcsystem_add(void) error("added forceload directives to %s\n", g_ofile); } -#endif /* illumos */ +#endif /* !__FreeBSD__ */ static void print_probe_info(const dtrace_probeinfo_t *p) @@ -643,24 +680,24 @@ anon_prog(const dtrace_cmd_t *dcp, dof_hdr_t *dof, int n) p = (uchar_t *)dof; q = p + dof->dofh_loadsz; -#ifdef illumos - oprintf("dof-data-%d=0x%x", n, *p++); - - while (p < q) - oprintf(",0x%x", *p++); - - oprintf(";\n"); -#else +#ifdef __FreeBSD__ /* - * On FreeBSD, the DOF data is handled as a kernel environment (kenv) - * string. We use two hex characters per DOF byte. + * On FreeBSD, the DOF file is read directly during boot - just write + * two hex characters per byte. */ - oprintf("dof-data-%d=%02x", n, *p++); + oprintf("dof-data-%d=", n); while (p < q) oprintf("%02x", *p++); oprintf("\n"); +#else + oprintf("dof-data-%d=0x%x", n, *p++); + + while (p < q) + oprintf(",0x%x", *p++); + + oprintf(";\n"); #endif dtrace_dof_destroy(g_dtp, dof); @@ -1725,8 +1762,7 @@ main(int argc, char *argv[]) #else /* * On FreeBSD, anonymous DOF data is written to - * the DTrace DOF file that the boot loader will - * read if booting with the DTrace option. + * the DTrace DOF file. */ g_ofile = "/boot/dtrace.dof"; #endif @@ -1765,7 +1801,10 @@ main(int argc, char *argv[]) * that itself contains a #pragma D option quiet. */ error("saved anonymous enabling in %s\n", g_ofile); -#ifdef illumos + +#ifdef __FreeBSD__ + bootdof_add(); +#else etcsystem_add(); error("run update_drv(1M) or reboot to enable changes\n"); #endif diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c index 7ec7dfd..0012975 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c @@ -117,6 +117,7 @@ #include #include #include +#include #include #include #include @@ -11916,6 +11917,21 @@ dtrace_buffer_activate(dtrace_state_t *state) dtrace_interrupt_enable(cookie); } +#ifdef __FreeBSD__ +/* + * Activate the specified per-CPU buffer. This is used instead of + * dtrace_buffer_activate() when APs have not yet started, i.e. when + * activating anonymous state. + */ +static void +dtrace_buffer_activate_cpu(dtrace_state_t *state, int cpu) +{ + + if (state->dts_buffer[cpu].dtb_tomax != NULL) + state->dts_buffer[cpu].dtb_flags &= ~DTRACEBUF_INACTIVE; +} +#endif + static int dtrace_buffer_alloc(dtrace_buffer_t *bufs, size_t size, int flags, processorid_t cpu, int *factor) @@ -12532,9 +12548,15 @@ dtrace_enabling_dump(dtrace_enabling_t *enab) for (i = 0; i < enab->dten_ndesc; i++) { dtrace_probedesc_t *desc = &enab->dten_desc[i]->dted_probe; +#ifdef __FreeBSD__ + printf("dtrace: enabling probe %d (%s:%s:%s:%s)\n", i, + desc->dtpd_provider, desc->dtpd_mod, + desc->dtpd_func, desc->dtpd_name); +#else cmn_err(CE_NOTE, "enabling probe %d (%s:%s:%s:%s)", i, desc->dtpd_provider, desc->dtpd_mod, desc->dtpd_func, desc->dtpd_name); +#endif } } @@ -13185,19 +13207,91 @@ dtrace_dof_char(char c) return (c - 'a' + 10); } /* Should not reach here. */ - return (0); + return (UCHAR_MAX); } #endif /* __FreeBSD__ */ static dof_hdr_t * dtrace_dof_property(const char *name) { +#ifdef __FreeBSD__ + uint8_t *dofbuf; + u_char *data, *eol; + caddr_t doffile; + size_t bytes, len, i; + dof_hdr_t *dof; + u_char c1, c2; + + dof = NULL; + + doffile = preload_search_by_type("dtrace_dof"); + if (doffile == NULL) + return (NULL); + + data = preload_fetch_addr(doffile); + len = preload_fetch_size(doffile); + for (;;) { + /* Look for the end of the line. All lines end in a newline. */ + eol = memchr(data, '\n', len); + if (eol == NULL) + return (NULL); + + if (strncmp(name, data, strlen(name)) == 0) + break; + + eol++; /* skip past the newline */ + len -= eol - data; + data = eol; + } + + /* We've found the data corresponding to the specified key. */ + + data += strlen(name) + 1; /* skip past the '=' */ + len = eol - data; + bytes = len / 2; + + if (bytes < sizeof(dof_hdr_t)) { + dtrace_dof_error(NULL, "truncated header"); + goto doferr; + } + + /* + * Each byte is represented by the two ASCII characters in its hex + * representation. + */ + dofbuf = malloc(bytes, M_SOLARIS, M_WAITOK); + for (i = 0; i < bytes; i++) { + c1 = dtrace_dof_char(data[i * 2]); + c2 = dtrace_dof_char(data[i * 2 + 1]); + if (c1 == UCHAR_MAX || c2 == UCHAR_MAX) { + dtrace_dof_error(NULL, "invalid hex char in DOF"); + goto doferr; + } + dofbuf[i] = c1 * 16 + c2; + } + + dof = (dof_hdr_t *)dofbuf; + if (bytes < dof->dofh_loadsz) { + dtrace_dof_error(NULL, "truncated DOF"); + goto doferr; + } + + if (dof->dofh_loadsz >= dtrace_dof_maxsize) { + dtrace_dof_error(NULL, "oversized DOF"); + goto doferr; + } + + return (dof); + +doferr: + free(dof, M_SOLARIS); + return (NULL); +#else /* __FreeBSD__ */ uchar_t *buf; uint64_t loadsz; unsigned int len, i; dof_hdr_t *dof; -#ifdef illumos /* * Unfortunately, array of values in .conf files are always (and * only) interpreted to be integer arrays. We must read our DOF @@ -13231,49 +13325,9 @@ dtrace_dof_property(const char *name) dof = kmem_alloc(loadsz, KM_SLEEP); bcopy(buf, dof, loadsz); ddi_prop_free(buf); -#else - char *p; - char *p_env; - - if ((p_env = kern_getenv(name)) == NULL) - return (NULL); - - len = strlen(p_env) / 2; - - buf = kmem_alloc(len, KM_SLEEP); - - dof = (dof_hdr_t *) buf; - - p = p_env; - - for (i = 0; i < len; i++) { - buf[i] = (dtrace_dof_char(p[0]) << 4) | - dtrace_dof_char(p[1]); - p += 2; - } - - freeenv(p_env); - - if (len < sizeof (dof_hdr_t)) { - kmem_free(buf, 0); - dtrace_dof_error(NULL, "truncated header"); - return (NULL); - } - - if (len < (loadsz = dof->dofh_loadsz)) { - kmem_free(buf, 0); - dtrace_dof_error(NULL, "truncated DOF"); - return (NULL); - } - - if (loadsz >= dtrace_dof_maxsize) { - kmem_free(buf, 0); - dtrace_dof_error(NULL, "oversized DOF"); - return (NULL); - } -#endif return (dof); +#endif /* !__FreeBSD__ */ } static void @@ -14332,7 +14386,7 @@ static dtrace_state_t * #ifdef illumos dtrace_state_create(dev_t *devp, cred_t *cr) #else -dtrace_state_create(struct cdev *dev) +dtrace_state_create(struct cdev *dev, struct ucred *cred __unused) #endif { #ifdef illumos @@ -14945,6 +14999,18 @@ dtrace_state_go(dtrace_state_t *state, processorid_t *cpu) if (state->dts_activity == DTRACE_ACTIVITY_WARMUP) state->dts_activity = DTRACE_ACTIVITY_ACTIVE; +#ifdef __FreeBSD__ + /* + * We enable anonymous tracing before APs are started, so we must + * activate buffers using the current CPU. + */ + if (state == dtrace_anon.dta_state) + for (int i = 0; i < NCPU; i++) + dtrace_buffer_activate_cpu(state, i); + else + dtrace_xcall(DTRACE_CPUALL, + (dtrace_xcall_t)dtrace_buffer_activate, state); +#else /* * Regardless of whether or not now we're in ACTIVE or DRAINING, we * want each CPU to transition its principal buffer out of the @@ -14955,6 +15021,7 @@ dtrace_state_go(dtrace_state_t *state, processorid_t *cpu) */ dtrace_xcall(DTRACE_CPUALL, (dtrace_xcall_t)dtrace_buffer_activate, state); +#endif goto out; err: @@ -15316,11 +15383,7 @@ dtrace_anon_property(void) * If we haven't allocated an anonymous state, we'll do so now. */ if ((state = dtrace_anon.dta_state) == NULL) { -#ifdef illumos state = dtrace_state_create(NULL, NULL); -#else - state = dtrace_state_create(NULL); -#endif dtrace_anon.dta_state = state; if (state == NULL) { @@ -17001,7 +17064,7 @@ dtrace_open(struct cdev *dev, int oflags, int devtype, struct thread *td) state = dtrace_state_create(devp, cred_p); #else - state = dtrace_state_create(dev); + state = dtrace_state_create(dev, NULL); devfs_set_cdevpriv(state, dtrace_dtr); #endif -- cgit v1.1 From c65888410c284063c5d056d94b782a0526be9c55 Mon Sep 17 00:00:00 2001 From: adrian Date: Sun, 10 Apr 2016 03:35:17 +0000 Subject: [net80211] unconditionally do A-MPDU RX aging. It's 2016 and vendors (including us!) still have 802.11n TX/RX sequence handling bugs. It's suboptimal, but I'd rather see us default to handling things in a sensible way. So, just delete the #ifdef'ed code for now. I'll leave the option in so it doesn't break existing configurations. This all started because I've started getting reports about urtwn not working after I enabled 802.11n support, and it's because the ARM kernel configs don't include A-MPDU RX aging. --- sys/net80211/ieee80211_ht.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index 7f322fd..9d33beb 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -136,12 +136,10 @@ const struct ieee80211_mcs_rates ieee80211_htrates[IEEE80211_HTRATE_MAXSIZE] = { { 429, 477, 891, 990 }, /* MCS 76 */ }; -#ifdef IEEE80211_AMPDU_AGE static int ieee80211_ampdu_age = -1; /* threshold for ampdu reorder q (ms) */ SYSCTL_PROC(_net_wlan, OID_AUTO, ampdu_age, CTLTYPE_INT | CTLFLAG_RW, &ieee80211_ampdu_age, 0, ieee80211_sysctl_msecs_ticks, "I", "AMPDU max reorder age (ms)"); -#endif static int ieee80211_recv_bar_ena = 1; SYSCTL_INT(_net_wlan, OID_AUTO, recv_bar, CTLFLAG_RW, &ieee80211_recv_bar_ena, @@ -178,9 +176,7 @@ ieee80211_ht_init(void) /* * Setup HT parameters that depends on the clock frequency. */ -#ifdef IEEE80211_AMPDU_AGE ieee80211_ampdu_age = msecs_to_ticks(500); -#endif ieee80211_addba_timeout = msecs_to_ticks(250); ieee80211_addba_backoff = msecs_to_ticks(10*1000); ieee80211_bar_timeout = msecs_to_ticks(250); @@ -671,7 +667,6 @@ ampdu_rx_dispatch(struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni) vap->iv_stats.is_ampdu_rx_oor += i; } -#ifdef IEEE80211_AMPDU_AGE /* * Dispatch all frames in the A-MPDU re-order queue. */ @@ -696,7 +691,6 @@ ampdu_rx_flush(struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap) break; } } -#endif /* IEEE80211_AMPDU_AGE */ /* * Dispatch all frames in the A-MPDU re-order queue @@ -864,7 +858,7 @@ again: * Common case (hopefully): in the BA window. * Sec 9.10.7.6.2 a) (p.137) */ -#ifdef IEEE80211_AMPDU_AGE + /* * Check for frames sitting too long in the reorder queue. * This should only ever happen if frames are not delivered @@ -903,7 +897,7 @@ again: */ rap->rxa_age = ticks; } -#endif /* IEEE80211_AMPDU_AGE */ + /* save packet */ if (rap->rxa_m[off] == NULL) { rap->rxa_m[off] = m; @@ -1125,14 +1119,11 @@ ieee80211_ht_node_cleanup(struct ieee80211_node *ni) void ieee80211_ht_node_age(struct ieee80211_node *ni) { -#ifdef IEEE80211_AMPDU_AGE struct ieee80211vap *vap = ni->ni_vap; uint8_t tid; -#endif KASSERT(ni->ni_flags & IEEE80211_NODE_HT, ("not an HT sta")); -#ifdef IEEE80211_AMPDU_AGE for (tid = 0; tid < WME_NUM_TID; tid++) { struct ieee80211_rx_ampdu *rap; @@ -1155,7 +1146,6 @@ ieee80211_ht_node_age(struct ieee80211_node *ni) ampdu_rx_flush(ni, rap); } } -#endif /* IEEE80211_AMPDU_AGE */ } static struct ieee80211_channel * -- cgit v1.1 From 9bbe38f3d836f416727670a4ffeefa0cd12ab67f Mon Sep 17 00:00:00 2001 From: adrian Date: Sun, 10 Apr 2016 04:16:34 +0000 Subject: [net80211] correctly (i hope, wow) do a ticks comparison to limit A-MPDU attempts I was seeing the stack constantly attempt to renegotiate A-MPDU TX even after 3 failures. My hunch is that the direct ticks comparison is failing around the ticks wrap-around point. This failure shouldn't /really/ happen normally, but it turns out being the IBSS master node on FreeBSD doesn't quite setup 11n right, so negotiating A-MPDU TX fails. --- sys/net80211/ieee80211_ht.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index 9d33beb..cf78e88 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -2157,7 +2157,7 @@ ieee80211_ampdu_enable(struct ieee80211_node *ni, return 0; /* XXX check rssi? */ if (tap->txa_attempts >= ieee80211_addba_maxtries && - ticks < tap->txa_nextrequest) { + ieee80211_time_after(ticks, tap->txa_nextrequest)) { /* * Don't retry too often; txa_nextrequest is set * to the minimum interval we'll retry after -- cgit v1.1 From 454f6ff2fd8c2ff7725a0bba51e5d2fbb562298b Mon Sep 17 00:00:00 2001 From: jhb Date: Sun, 10 Apr 2016 05:05:02 +0000 Subject: Add a function to lookup a device_t object by name. This just walks the global list of devices looking for one with the requested name. The one use case outside of devctl2's implementation is for DDB commands that wish to lookup devices by name. --- sys/kern/subr_bus.c | 22 ++++++++++++++++------ sys/sys/bus.h | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index caf9202..81be368 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -5125,6 +5125,18 @@ bus_free_resource(device_t dev, int type, struct resource *r) return (bus_release_resource(dev, type, rman_get_rid(r), r)); } +device_t +device_lookup_by_name(const char *name) +{ + device_t dev; + + TAILQ_FOREACH(dev, &bus_data_devices, devlink) { + if (dev->nameunit != NULL && strcmp(dev->nameunit, name) == 0) + return (dev); + } + return (NULL); +} + /* * /dev/devctl2 implementation. The existing /dev/devctl device has * implicit semantics on open, so it could not be reused for this. @@ -5145,12 +5157,10 @@ find_device(struct devreq *req, device_t *devp) * Second, try to find an attached device whose name matches * 'name'. */ - TAILQ_FOREACH(dev, &bus_data_devices, devlink) { - if (dev->nameunit != NULL && - strcmp(dev->nameunit, req->dr_name) == 0) { - *devp = dev; - return (0); - } + dev = device_lookup_by_name(req->dr_name); + if (dev != NULL) { + *devp = dev; + return (0); } /* Finally, give device enumerators a chance. */ diff --git a/sys/sys/bus.h b/sys/sys/bus.h index e0297cc..01b98f5 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -524,6 +524,7 @@ int device_is_attached(device_t dev); /* did attach succeed? */ int device_is_enabled(device_t dev); int device_is_suspended(device_t dev); int device_is_quiet(device_t dev); +device_t device_lookup_by_name(const char *name); int device_print_prettyname(device_t dev); int device_printf(device_t dev, const char *, ...) __printflike(2, 3); int device_probe(device_t dev); -- cgit v1.1 From 28641629e2c5d8c48ff001cd890033f51d365508 Mon Sep 17 00:00:00 2001 From: jhb Date: Sun, 10 Apr 2016 05:06:58 +0000 Subject: Add a 'show t4 tcb ' command to dump a TCB from DDB. This allows the contents of a TCB to be extracted from a T4/T5 card in DDB after a panic. --- sys/dev/cxgbe/t4_main.c | 85 +++++++++++++++++++++++++++++++++++++ sys/dev/cxgbe/tom/t4_ddp.c | 25 ----------- sys/modules/cxgbe/if_cxgbe/Makefile | 1 + 3 files changed, 86 insertions(+), 25 deletions(-) diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index 11d4253..6975745 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -28,6 +28,7 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_ddb.h" #include "opt_inet.h" #include "opt_inet6.h" #include "opt_rss.h" @@ -63,6 +64,10 @@ __FBSDID("$FreeBSD$"); #include #include #endif +#ifdef DDB +#include +#include +#endif #include "common/common.h" #include "common/t4_msg.h" @@ -9163,6 +9168,86 @@ tweak_tunables(void) t4_intr_types &= INTR_MSIX | INTR_MSI | INTR_INTX; } +#ifdef DDB +static void +t4_dump_tcb(struct adapter *sc, int tid) +{ + uint32_t base, i, j, off, pf, reg, save, tcb_addr, win_pos; + + reg = PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 2); + save = t4_read_reg(sc, reg); + base = sc->memwin[2].mw_base; + + /* Dump TCB for the tid */ + tcb_addr = t4_read_reg(sc, A_TP_CMM_TCB_BASE); + tcb_addr += tid * TCB_SIZE; + + if (is_t4(sc)) { + pf = 0; + win_pos = tcb_addr & ~0xf; /* start must be 16B aligned */ + } else { + pf = V_PFNUM(sc->pf); + win_pos = tcb_addr & ~0x7f; /* start must be 128B aligned */ + } + t4_write_reg(sc, reg, win_pos | pf); + t4_read_reg(sc, reg); + + off = tcb_addr - win_pos; + for (i = 0; i < 4; i++) { + uint32_t buf[8]; + for (j = 0; j < 8; j++, off += 4) + buf[j] = htonl(t4_read_reg(sc, base + off)); + + db_printf("%08x %08x %08x %08x %08x %08x %08x %08x\n", + buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], + buf[7]); + } + + t4_write_reg(sc, reg, save); + t4_read_reg(sc, reg); +} + +static struct command_table db_t4_table = LIST_HEAD_INITIALIZER(db_t4_table); +_DB_SET(_show, t4, NULL, db_show_table, 0, &db_t4_table); + +DB_FUNC(tcb, db_show_t4tcb, db_t4_table, CS_OWN, NULL) +{ + device_t dev; + int radix, tid, t; + bool valid; + + valid = false; + radix = db_radix; + db_radix = 10; + t = db_read_token(); + if (t == tIDENT) { + dev = device_lookup_by_name(db_tok_string); + t = db_read_token(); + if (t == tNUMBER) { + tid = db_tok_number; + valid = true; + } + } + db_radix = radix; + db_skip_to_eol(); + if (!valid) { + db_printf("usage: show t4 tcb \n"); + return; + } + + if (dev == NULL) { + db_printf("device not found\n"); + return; + } + if (tid < 0) { + db_printf("invalid tid\n"); + return; + } + + t4_dump_tcb(device_get_softc(dev), tid); +} +#endif + static struct sx mlu; /* mod load unload */ SX_SYSINIT(cxgbe_mlu, &mlu, "cxgbe mod load/unload"); diff --git a/sys/dev/cxgbe/tom/t4_ddp.c b/sys/dev/cxgbe/tom/t4_ddp.c index 2df02577..2aa774d 100644 --- a/sys/dev/cxgbe/tom/t4_ddp.c +++ b/sys/dev/cxgbe/tom/t4_ddp.c @@ -80,31 +80,6 @@ static struct mbuf *get_ddp_mbuf(int len); /* XXX: must match A_ULP_RX_TDDP_PSZ */ static int t4_ddp_pgsz[] = {4096, 4096 << 2, 4096 << 4, 4096 << 6}; -#if 0 -static void -t4_dump_tcb(struct adapter *sc, int tid) -{ - uint32_t tcb_base, off, i, j; - - /* Dump TCB for the tid */ - tcb_base = t4_read_reg(sc, A_TP_CMM_TCB_BASE); - t4_write_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 2), - tcb_base + tid * TCB_SIZE); - t4_read_reg(sc, PCIE_MEM_ACCESS_REG(A_PCIE_MEM_ACCESS_OFFSET, 2)); - off = 0; - printf("\n"); - for (i = 0; i < 4; i++) { - uint32_t buf[8]; - for (j = 0; j < 8; j++, off += 4) - buf[j] = htonl(t4_read_reg(sc, MEMWIN2_BASE + off)); - - printf("%08x %08x %08x %08x %08x %08x %08x %08x\n", - buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], - buf[7]); - } -} -#endif - #define MAX_DDP_BUFFER_SIZE (M_TCB_RX_DDP_BUF0_LEN) static int alloc_ppods(struct tom_data *td, int n, u_int *ppod_addr) diff --git a/sys/modules/cxgbe/if_cxgbe/Makefile b/sys/modules/cxgbe/if_cxgbe/Makefile index df343b2..967683b 100644 --- a/sys/modules/cxgbe/if_cxgbe/Makefile +++ b/sys/modules/cxgbe/if_cxgbe/Makefile @@ -8,6 +8,7 @@ CXGBE= ${.CURDIR}/../../../dev/cxgbe KMOD= if_cxgbe SRCS= bus_if.h SRCS+= device_if.h +SRCS+= opt_ddb.h SRCS+= opt_inet.h SRCS+= opt_inet6.h SRCS+= opt_ofed.h -- cgit v1.1 From 7356f0ddafc2f59d2b3a663316ee44dde8c50f35 Mon Sep 17 00:00:00 2001 From: grehan Date: Sun, 10 Apr 2016 05:58:19 +0000 Subject: Allow the location of the kernel source tree to be overridden. This makes it easier for the bhyve executable to be built out of the tree. --- usr.sbin/bhyve/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/usr.sbin/bhyve/Makefile b/usr.sbin/bhyve/Makefile index 0e1a85e..37e1c67 100644 --- a/usr.sbin/bhyve/Makefile +++ b/usr.sbin/bhyve/Makefile @@ -8,6 +8,8 @@ DEBUG_FLAGS= -g -O0 MAN= bhyve.8 +SYSDIR?=${.CURDIR}/../.. + SRCS= \ atkbdc.c \ acpi.c \ @@ -42,7 +44,7 @@ SRCS= \ xmsr.c \ spinup_ap.c -.PATH: ${.CURDIR}/../../sys/amd64/vmm +.PATH: ${SYSDIR}/sys/amd64/vmm SRCS+= vmm_instruction_emul.c LIBADD= vmmapi md pthread -- cgit v1.1 From f04f5692d14c5ca5d0ca7d4c875c6e1eca28c5d4 Mon Sep 17 00:00:00 2001 From: jhb Date: Sun, 10 Apr 2016 06:19:26 +0000 Subject: Add a 'show t4 devlog ' DDB command. This command displays the adapter's firmware device log similar to the dev..misc.devlog sysctl. Sponsored by: Chelsio Communications --- sys/dev/cxgbe/t4_main.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index 6975745..777e4d1 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -9207,9 +9207,102 @@ t4_dump_tcb(struct adapter *sc, int tid) t4_read_reg(sc, reg); } +static void +t4_dump_devlog(struct adapter *sc) +{ + struct devlog_params *dparams = &sc->params.devlog; + struct fw_devlog_e e; + int i, first, j, m, nentries, rc; + uint64_t ftstamp = UINT64_MAX; + + if (dparams->start == 0) { + db_printf("devlog params not valid\n"); + return; + } + + nentries = dparams->size / sizeof(struct fw_devlog_e); + m = fwmtype_to_hwmtype(dparams->memtype); + + /* Find the first entry. */ + first = -1; + for (i = 0; i < nentries && !db_pager_quit; i++) { + rc = -t4_mem_read(sc, m, dparams->start + i * sizeof(e), + sizeof(e), (void *)&e); + if (rc != 0) + break; + + if (e.timestamp == 0) + break; + + e.timestamp = be64toh(e.timestamp); + if (e.timestamp < ftstamp) { + ftstamp = e.timestamp; + first = i; + } + } + + if (first == -1) + return; + + i = first; + do { + rc = -t4_mem_read(sc, m, dparams->start + i * sizeof(e), + sizeof(e), (void *)&e); + if (rc != 0) + return; + + if (e.timestamp == 0) + return; + + e.timestamp = be64toh(e.timestamp); + e.seqno = be32toh(e.seqno); + for (j = 0; j < 8; j++) + e.params[j] = be32toh(e.params[j]); + + db_printf("%10d %15ju %8s %8s ", + e.seqno, e.timestamp, + (e.level < nitems(devlog_level_strings) ? + devlog_level_strings[e.level] : "UNKNOWN"), + (e.facility < nitems(devlog_facility_strings) ? + devlog_facility_strings[e.facility] : "UNKNOWN")); + db_printf(e.fmt, e.params[0], e.params[1], e.params[2], + e.params[3], e.params[4], e.params[5], e.params[6], + e.params[7]); + + if (++i == nentries) + i = 0; + } while (i != first && !db_pager_quit); +} + static struct command_table db_t4_table = LIST_HEAD_INITIALIZER(db_t4_table); _DB_SET(_show, t4, NULL, db_show_table, 0, &db_t4_table); +DB_FUNC(devlog, db_show_devlog, db_t4_table, CS_OWN, NULL) +{ + device_t dev; + int t; + bool valid; + + valid = false; + t = db_read_token(); + if (t == tIDENT) { + dev = device_lookup_by_name(db_tok_string); + valid = true; + } + db_skip_to_eol(); + if (!valid) { + db_printf("usage: show t4 devlog \n"); + return; + } + + if (dev == NULL) { + db_printf("device not found\n"); + return; + } + + t4_dump_devlog(device_get_softc(dev)); +} + DB_FUNC(tcb, db_show_t4tcb, db_t4_table, CS_OWN, NULL) { device_t dev; -- cgit v1.1 From aac70308f6035bbde1587853967f26e436371d63 Mon Sep 17 00:00:00 2001 From: dchagin Date: Sun, 10 Apr 2016 07:11:29 +0000 Subject: More complete implementation of /proc/self/limits. Fix the way the code accesses process limits struct - pointed out by mjg@. PR: 207386 Reviewed by: no objection form des@ MFC after: 3 weeks --- sys/compat/linprocfs/linprocfs.c | 111 ++++++++++++++++++++++++--------------- sys/compat/linux/linux_misc.h | 7 +++ 2 files changed, 76 insertions(+), 42 deletions(-) diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index 86c4b05..12bc3c46a 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -1370,65 +1370,92 @@ linprocfs_dofdescfs(PFS_FILL_ARGS) /* * Filler function for proc/pid/limits */ - -#define RLIM_NONE -1 - -static const struct limit_info { +static const struct linux_rlimit_ident { const char *desc; const char *unit; - unsigned long long rlim_id; -} limits_info[] = { - { "Max cpu time", "seconds", RLIMIT_CPU }, - { "Max file size", "bytes", RLIMIT_FSIZE }, - { "Max data size", "bytes", RLIMIT_DATA }, - { "Max stack size", "bytes", RLIMIT_STACK }, - { "Max core file size", "bytes", RLIMIT_CORE }, - { "Max resident set", "bytes", RLIMIT_RSS }, - { "Max processes", "processes", RLIMIT_NPROC }, - { "Max open files", "files", RLIMIT_NOFILE }, - { "Max locked memory", "bytes", RLIMIT_MEMLOCK }, - { "Max address space", "bytes", RLIMIT_AS }, - { "Max file locks", "locks", RLIM_INFINITY }, - { "Max pending signals", "signals", RLIM_INFINITY }, - { "Max msgqueue size", "bytes", RLIM_NONE }, - { "Max nice priority", "", RLIM_NONE }, - { "Max realtime priority", "", RLIM_NONE }, - { "Max realtime timeout", "us", RLIM_INFINITY }, + unsigned int rlim_id; +} linux_rlimits_ident[] = { + { "Max cpu time", "seconds", RLIMIT_CPU }, + { "Max file size", "bytes", RLIMIT_FSIZE }, + { "Max data size", "bytes", RLIMIT_DATA }, + { "Max stack size", "bytes", RLIMIT_STACK }, + { "Max core file size", "bytes", RLIMIT_CORE }, + { "Max resident set", "bytes", RLIMIT_RSS }, + { "Max processes", "processes", RLIMIT_NPROC }, + { "Max open files", "files", RLIMIT_NOFILE }, + { "Max locked memory", "bytes", RLIMIT_MEMLOCK }, + { "Max address space", "bytes", RLIMIT_AS }, + { "Max file locks", "locks", LINUX_RLIMIT_LOCKS }, + { "Max pending signals", "signals", LINUX_RLIMIT_SIGPENDING }, + { "Max msgqueue size", "bytes", LINUX_RLIMIT_MSGQUEUE }, + { "Max nice priority", "", LINUX_RLIMIT_NICE }, + { "Max realtime priority", "", LINUX_RLIMIT_RTPRIO }, + { "Max realtime timeout", "us", LINUX_RLIMIT_RTTIME }, { 0, 0, 0 } }; static int linprocfs_doproclimits(PFS_FILL_ARGS) { - const struct limit_info *li; - struct rlimit li_rlimits; - struct plimit *cur_proc_lim; + const struct linux_rlimit_ident *li; + struct plimit *limp; + struct rlimit rl; + ssize_t size; + int res, error; - cur_proc_lim = lim_alloc(); - lim_copy(cur_proc_lim, p->p_limit); - sbuf_printf(sb, "%-26s%-21s%-21s%-10s\n", "Limit", "Soft Limit", + PROC_LOCK(p); + limp = lim_hold(p->p_limit); + PROC_UNLOCK(p); + size = sizeof(res); + sbuf_printf(sb, "%-26s%-21s%-21s%-21s\n", "Limit", "Soft Limit", "Hard Limit", "Units"); - for (li = limits_info; li->desc != NULL; ++li) { - if (li->rlim_id != RLIM_INFINITY && li->rlim_id != RLIM_NONE) - li_rlimits = cur_proc_lim->pl_rlimit[li->rlim_id]; - else { - li_rlimits.rlim_cur = 0; - li_rlimits.rlim_max = 0; + for (li = linux_rlimits_ident; li->desc != NULL; ++li) { + switch (li->rlim_id) + { + case LINUX_RLIMIT_LOCKS: + /* FALLTHROUGH */ + case LINUX_RLIMIT_RTTIME: + rl.rlim_cur = RLIM_INFINITY; + break; + case LINUX_RLIMIT_SIGPENDING: + error = kernel_sysctlbyname(td, + "kern.sigqueue.max_pending_per_proc", + &res, &size, 0, 0, 0, 0); + if (error != 0) + break; + rl.rlim_cur = res; + rl.rlim_max = res; + break; + case LINUX_RLIMIT_MSGQUEUE: + error = kernel_sysctlbyname(td, + "kern.ipc.msgmnb", &res, &size, 0, 0, 0, 0); + if (error != 0) + break; + rl.rlim_cur = res; + rl.rlim_max = res; + break; + case LINUX_RLIMIT_NICE: + /* FALLTHROUGH */ + case LINUX_RLIMIT_RTPRIO: + rl.rlim_cur = 0; + rl.rlim_max = 0; + break; + default: + rl = limp->pl_rlimit[li->rlim_id]; + break; } - if (li->rlim_id == RLIM_INFINITY || - li_rlimits.rlim_cur == RLIM_INFINITY) + if (rl.rlim_cur == RLIM_INFINITY) sbuf_printf(sb, "%-26s%-21s%-21s%-10s\n", li->desc, "unlimited", "unlimited", li->unit); else - sbuf_printf(sb, "%-26s%-21ld%-21ld%-10s\n", - li->desc, (long)li_rlimits.rlim_cur, - (long)li_rlimits.rlim_max, li->unit); + sbuf_printf(sb, "%-26s%-21llu%-21llu%-10s\n", + li->desc, (unsigned long long)rl.rlim_cur, + (unsigned long long)rl.rlim_max, li->unit); } - lim_free(cur_proc_lim); - return (0); + lim_free(limp); + return (error); } - /* * Filler function for proc/sys/kernel/random/uuid */ diff --git a/sys/compat/linux/linux_misc.h b/sys/compat/linux/linux_misc.h index 08bc85f..0d2d86c 100644 --- a/sys/compat/linux/linux_misc.h +++ b/sys/compat/linux/linux_misc.h @@ -143,6 +143,13 @@ extern int stclohz; #define LINUX_P_PID 1 #define LINUX_P_PGID 2 +#define LINUX_RLIMIT_LOCKS RLIM_NLIMITS + 1 +#define LINUX_RLIMIT_SIGPENDING RLIM_NLIMITS + 2 +#define LINUX_RLIMIT_MSGQUEUE RLIM_NLIMITS + 3 +#define LINUX_RLIMIT_NICE RLIM_NLIMITS + 4 +#define LINUX_RLIMIT_RTPRIO RLIM_NLIMITS + 5 +#define LINUX_RLIMIT_RTTIME RLIM_NLIMITS + 6 + #define LINUX_RLIM_INFINITY (~0UL) int linux_common_wait(struct thread *td, int pid, int *status, -- cgit v1.1 From 19c7765e37f00e2171f79cbe90f99eeda55e07c9 Mon Sep 17 00:00:00 2001 From: jhibbits Date: Sun, 10 Apr 2016 15:48:09 +0000 Subject: Restructure device mappings for Book-E. Summary: There is currently a 1GB hole between user and kernel address spaces into which direct (1:1 PA:VA) device mappings go. This appears to go largely unused, leaving all devices to contend with the 128MB block at the end of the 32-bit space (0xf8000000-0xffffffff). This easily fills up, and needs to be densely packed. However, dense packing wastes precious TLB1 space, of which there are only 16 (e500v2) or 64(e5500) entries available. Change this by using the 1GB space for all device mappings, and allow the kernel to use the entire upper 1GB for KVA. This also allows us to use sparse device mappings, freeing up TLB entries. Test Plan: Boot tested on p5020. Differential Revision: https://reviews.freebsd.org/D5832 --- sys/powerpc/booke/pmap.c | 35 ++++++++++++++++++----------------- sys/powerpc/include/vmparam.h | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index 54f215a..fd04ab4 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -96,6 +96,7 @@ __FBSDID("$FreeBSD$"); #include "mmu_if.h" +#define SPARSE_MAPDEV #ifdef DEBUG #define debugf(fmt, args...) printf(fmt, ##args) #else @@ -191,7 +192,7 @@ static tlb_entry_t tlb1[TLB1_MAXENTRIES]; /* Next free entry in the TLB1 */ static unsigned int tlb1_idx; -static vm_offset_t tlb1_map_base = VM_MAX_KERNEL_ADDRESS; +static vm_offset_t tlb1_map_base = VM_MAXUSER_ADDRESS; static tlbtid_t tid_alloc(struct pmap *); static void tid_flush(tlbtid_t tid); @@ -2796,7 +2797,7 @@ static void * mmu_booke_mapdev_attr(mmu_t mmu, vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) { void *res; - uintptr_t va; + uintptr_t va, tmpva; vm_size_t sz; int i; @@ -2819,22 +2820,22 @@ mmu_booke_mapdev_attr(mmu_t mmu, vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) size = roundup(size, PAGE_SIZE); /* - * We leave a hole for device direct mapping between the maximum user - * address (0x8000000) and the minimum KVA address (0xc0000000). If - * devices are in there, just map them 1:1. If not, map them to the - * device mapping area about VM_MAX_KERNEL_ADDRESS. These mapped - * addresses should be pulled from an allocator, but since we do not - * ever free TLB1 entries, it is safe just to increment a counter. - * Note that there isn't a lot of address space here (128 MB) and it - * is not at all difficult to imagine running out, since that is a 4:1 - * compression from the 0xc0000000 - 0xf0000000 address space that gets - * mapped there. + * The device mapping area is between VM_MAXUSER_ADDRESS and + * VM_MIN_KERNEL_ADDRESS. This gives 1GB of device addressing. */ - if (pa >= (VM_MAXUSER_ADDRESS + PAGE_SIZE) && - (pa + size - 1) < VM_MIN_KERNEL_ADDRESS) - va = pa; - else - va = atomic_fetchadd_int(&tlb1_map_base, size); +#ifdef SPARSE_MAPDEV + /* + * With a sparse mapdev, align to the largest starting region. This + * could feasibly be optimized for a 'best-fit' alignment, but that + * calculation could be very costly. + */ + do { + tmpva = tlb1_map_base; + va = roundup(tlb1_map_base, 1 << flsl(size)); + } while (!atomic_cmpset_int(&tlb1_map_base, tmpva, va + size)); +#else + va = atomic_fetchadd_int(&tlb1_map_base, size); +#endif res = (void *)va; do { diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h index 0dd74c9..d7368ec 100644 --- a/sys/powerpc/include/vmparam.h +++ b/sys/powerpc/include/vmparam.h @@ -111,7 +111,7 @@ #define KERNBASE 0xc0000000 /* start of kernel virtual */ #define VM_MIN_KERNEL_ADDRESS KERNBASE -#define VM_MAX_KERNEL_ADDRESS 0xf7ffffff +#define VM_MAX_KERNEL_ADDRESS 0xffffffff #define VM_MAX_SAFE_KERNEL_ADDRESS VM_MAX_KERNEL_ADDRESS #endif /* AIM/E500 */ -- cgit v1.1 From 6db53037b7cb66dfa64c4503b32d55a70737e114 Mon Sep 17 00:00:00 2001 From: jhibbits Date: Sun, 10 Apr 2016 15:50:45 +0000 Subject: VM_MAXUSER_ADDRESS is highest page start, not highest address. In case a single page mapping is requested first, which might overlap the user address space, fix the device map block to the next page. --- sys/powerpc/booke/pmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index fd04ab4..42eb631 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -192,7 +192,7 @@ static tlb_entry_t tlb1[TLB1_MAXENTRIES]; /* Next free entry in the TLB1 */ static unsigned int tlb1_idx; -static vm_offset_t tlb1_map_base = VM_MAXUSER_ADDRESS; +static vm_offset_t tlb1_map_base = VM_MAXUSER_ADDRESS + PAGE_SIZE; static tlbtid_t tid_alloc(struct pmap *); static void tid_flush(tlbtid_t tid); -- cgit v1.1 From 1485828b0840fbefcb7789ae54df9650c16fda61 Mon Sep 17 00:00:00 2001 From: bofh Date: Sun, 10 Apr 2016 16:48:21 +0000 Subject: Add bofh@ in calendar.freebsd --- usr.bin/calendar/calendars/calendar.freebsd | 1 + 1 file changed, 1 insertion(+) diff --git a/usr.bin/calendar/calendars/calendar.freebsd b/usr.bin/calendar/calendars/calendar.freebsd index 091edb3..1a5c67b 100644 --- a/usr.bin/calendar/calendars/calendar.freebsd +++ b/usr.bin/calendar/calendars/calendar.freebsd @@ -373,6 +373,7 @@ 12/15 Timur I. Bakeyev born in Kazan, Republic of Tatarstan, USSR, 1974 12/18 Chris Timmons born in Ellensburg, Washington, United States, 1964 12/18 Dag-Erling Smorgrav born in Brussels, Belgium, 1977 +12/18 Muhammad Moinur Rahman born in Dhaka, Bangladesh, 1983 12/18 Semen Ustimenko born in Novosibirsk, Russian Federation, 1979 12/19 Stephen Hurd born in Estevan, Saskatchewan, Canada, 1975 12/21 Rong-En Fan born in Taipei, Taiwan, Republic of China, 1982 -- cgit v1.1 From 6e91d78151e10ed31c475cafe6a1e1f11950c1d9 Mon Sep 17 00:00:00 2001 From: pfg Date: Sun, 10 Apr 2016 19:33:58 +0000 Subject: libc: replace 0 with NULL for pointers. While here also cleanup some surrounding code; particularly drop some malloc() casts. Found with devel/coccinelle. Reviewed by: bde (previous version - all new bugs are mine) --- lib/libc/db/hash/hash.c | 2 +- lib/libc/db/hash/hash_buf.c | 4 ++-- lib/libc/gen/err.c | 8 ++++---- lib/libc/gen/getmntinfo.c | 2 +- lib/libc/gen/opendir.c | 2 +- lib/libc/gen/tls.c | 4 ++-- lib/libc/locale/xlocale_private.h | 11 +++++------ lib/libc/net/base64.c | 2 +- lib/libc/net/getifaddrs.c | 3 ++- lib/libc/net/getservent.c | 4 ++-- lib/libc/net/rcmd.c | 2 +- lib/libc/posix1e/acl_support_nfs4.c | 2 +- lib/libc/resolv/mtctxres.c | 11 ++++------- lib/libc/resolv/res_init.c | 4 ++-- lib/libc/resolv/res_mkupdate.c | 4 ++-- lib/libc/rpc/auth_none.c | 6 +++--- lib/libc/rpc/clnt_perror.c | 8 ++++---- lib/libc/rpc/mt_misc.c | 2 +- lib/libc/rpc/rpcdname.c | 10 +++++----- lib/libc/softfloat/timesoftfloat.c | 6 +++--- lib/libc/uuid/uuid_to_string.c | 2 +- lib/libc/xdr/xdr_mem.c | 2 +- 22 files changed, 49 insertions(+), 52 deletions(-) diff --git a/lib/libc/db/hash/hash.c b/lib/libc/db/hash/hash.c index fc4e50e..f7b1427 100644 --- a/lib/libc/db/hash/hash.c +++ b/lib/libc/db/hash/hash.c @@ -771,7 +771,7 @@ next_bucket: if (__big_keydata(hashp, bufp, key, data, 1)) return (ERROR); } else { - if (hashp->cpage == 0) + if (hashp->cpage == NULL) return (ERROR); key->data = (u_char *)hashp->cpage->page + bp[ndx]; key->size = (ndx > 1 ? bp[ndx - 1] : hashp->BSIZE) - bp[ndx]; diff --git a/lib/libc/db/hash/hash_buf.c b/lib/libc/db/hash/hash_buf.c index e79e7b3..5c62a2c 100644 --- a/lib/libc/db/hash/hash_buf.c +++ b/lib/libc/db/hash/hash_buf.c @@ -245,7 +245,7 @@ newbuf(HTAB *hashp, u_int32_t addr, BUFHEAD *prev_bp) */ for (xbp = bp; xbp->ovfl;) { next_xbp = xbp->ovfl; - xbp->ovfl = 0; + xbp->ovfl = NULL; xbp = next_xbp; /* Check that ovfl pointer is up date. */ @@ -350,7 +350,7 @@ __buf_free(HTAB *hashp, int do_free, int to_disk) void __reclaim_buf(HTAB *hashp, BUFHEAD *bp) { - bp->ovfl = 0; + bp->ovfl = NULL; bp->addr = 0; bp->flags = 0; BUF_REMOVE(bp); diff --git a/lib/libc/gen/err.c b/lib/libc/gen/err.c index a536e5a..3b32c3d 100644 --- a/lib/libc/gen/err.c +++ b/lib/libc/gen/err.c @@ -96,7 +96,7 @@ errc(int eval, int code, const char *fmt, ...) void verrc(int eval, int code, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) { @@ -121,7 +121,7 @@ errx(int eval, const char *fmt, ...) void verrx(int eval, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) @@ -161,7 +161,7 @@ warnc(int code, const char *fmt, ...) void vwarnc(int code, const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) { @@ -183,7 +183,7 @@ warnx(const char *fmt, ...) void vwarnx(const char *fmt, va_list ap) { - if (err_file == 0) + if (err_file == NULL) err_set_file((FILE *)0); fprintf(err_file, "%s: ", _getprogname()); if (fmt != NULL) diff --git a/lib/libc/gen/getmntinfo.c b/lib/libc/gen/getmntinfo.c index 99f82aa..606fea7 100644 --- a/lib/libc/gen/getmntinfo.c +++ b/lib/libc/gen/getmntinfo.c @@ -56,7 +56,7 @@ getmntinfo(struct statfs **mntbufp, int flags) if (mntbuf) free(mntbuf); bufsize = (mntsize + 1) * sizeof(struct statfs); - if ((mntbuf = (struct statfs *)malloc(bufsize)) == 0) + if ((mntbuf = malloc(bufsize)) == NULL) return (0); if ((mntsize = getfsstat(mntbuf, bufsize, flags)) < 0) return (0); diff --git a/lib/libc/gen/opendir.c b/lib/libc/gen/opendir.c index 54928e7..bf4dea3 100644 --- a/lib/libc/gen/opendir.c +++ b/lib/libc/gen/opendir.c @@ -209,7 +209,7 @@ _filldir(DIR *dirp, bool use_current_pos) * On the second pass, save pointers to each one. * Then sort the pointers and remove duplicate names. */ - for (dpv = 0;;) { + for (dpv = NULL;;) { n = 0; ddptr = buf; while (ddptr < ddeptr) { diff --git a/lib/libc/gen/tls.c b/lib/libc/gen/tls.c index 7932055..dd1e7df 100644 --- a/lib/libc/gen/tls.c +++ b/lib/libc/gen/tls.c @@ -285,7 +285,7 @@ _init_tls(void) while (*sp++ != 0) ; aux = (Elf_Auxinfo *) sp; - phdr = 0; + phdr = NULL; phent = phnum = 0; for (auxp = aux; auxp->a_type != AT_NULL; auxp++) { switch (auxp->a_type) { @@ -302,7 +302,7 @@ _init_tls(void) break; } } - if (phdr == 0 || phent != sizeof(Elf_Phdr) || phnum == 0) + if (phdr == NULL || phent != sizeof(Elf_Phdr) || phnum == 0) return; for (i = 0; (unsigned) i < phnum; i++) { diff --git a/lib/libc/locale/xlocale_private.h b/lib/libc/locale/xlocale_private.h index 502b548..77b9ff4 100644 --- a/lib/libc/locale/xlocale_private.h +++ b/lib/libc/locale/xlocale_private.h @@ -155,12 +155,11 @@ __attribute__((unused)) static void xlocale_release(void *val) { struct xlocale_refcounted *obj = val; - long count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1; - if (count < 0) { - if (0 != obj->destructor) { - obj->destructor(obj); - } - } + long count; + + count = atomic_fetchadd_long(&(obj->retain_count), -1) - 1; + if (count < 0 && obj->destructor != NULL) + obj->destructor(obj); } /** diff --git a/lib/libc/net/base64.c b/lib/libc/net/base64.c index 8a9c59e..2c4cfe3 100644 --- a/lib/libc/net/base64.c +++ b/lib/libc/net/base64.c @@ -210,7 +210,7 @@ b64_pton(const char *src, u_char *target, size_t targsize) break; pos = strchr(Base64, ch); - if (pos == 0) /* A non-base64 character. */ + if (pos == NULL) /* A non-base64 character. */ return (-1); switch (state) { diff --git a/lib/libc/net/getifaddrs.c b/lib/libc/net/getifaddrs.c index f8633d5..4c04e9e 100644 --- a/lib/libc/net/getifaddrs.c +++ b/lib/libc/net/getifaddrs.c @@ -85,7 +85,7 @@ getifaddrs(struct ifaddrs **pif) size_t needed; char *buf; char *next; - struct ifaddrs *cif = 0; + struct ifaddrs *cif; char *p, *p0; struct rt_msghdr *rtm; struct if_msghdrl *ifm; @@ -214,6 +214,7 @@ getifaddrs(struct ifaddrs **pif) ift = ifa; idx = 0; + cif = NULL; for (next = buf; next < buf + needed; next += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)(void *)next; if (rtm->rtm_version != RTM_VERSION) diff --git a/lib/libc/net/getservent.c b/lib/libc/net/getservent.c index 6a68ef5..45a5355 100644 --- a/lib/libc/net/getservent.c +++ b/lib/libc/net/getservent.c @@ -406,14 +406,14 @@ files_servent(void *retval, void *mdata, va_list ap) continue; gotname: - if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + if (proto == NULL || strcmp(serv->s_proto, proto) == 0) rv = NS_SUCCESS; break; case nss_lt_id: if (port != serv->s_port) continue; - if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + if (proto == NULL || strcmp(serv->s_proto, proto) == 0) rv = NS_SUCCESS; break; case nss_lt_all: diff --git a/lib/libc/net/rcmd.c b/lib/libc/net/rcmd.c index c7ca870..7b92f08 100644 --- a/lib/libc/net/rcmd.c +++ b/lib/libc/net/rcmd.c @@ -207,7 +207,7 @@ rcmd_af(char **ahost, int rport, const char *locuser, const char *remuser, } } lport--; - if (fd2p == 0) { + if (fd2p == NULL) { _write(s, "", 1); lport = 0; } else { diff --git a/lib/libc/posix1e/acl_support_nfs4.c b/lib/libc/posix1e/acl_support_nfs4.c index 1eece98..7dd7f04 100644 --- a/lib/libc/posix1e/acl_support_nfs4.c +++ b/lib/libc/posix1e/acl_support_nfs4.c @@ -81,7 +81,7 @@ static const char * format_flag(uint32_t *var, const struct flagnames_struct *flags) { - for (; flags->name != 0; flags++) { + for (; flags->name != NULL; flags++) { if ((flags->flag & *var) == 0) continue; diff --git a/lib/libc/resolv/mtctxres.c b/lib/libc/resolv/mtctxres.c index f02a7f5..c2aea38 100644 --- a/lib/libc/resolv/mtctxres.c +++ b/lib/libc/resolv/mtctxres.c @@ -75,7 +75,7 @@ __res_init_ctx(void) { return (0); } - if ((mt = malloc(sizeof (mtctxres_t))) == 0) { + if ((mt = malloc(sizeof(mtctxres_t))) == NULL) { errno = ENOMEM; return (-1); } @@ -94,10 +94,7 @@ __res_init_ctx(void) { static void __res_destroy_ctx(void *value) { - mtctxres_t *mt = (mtctxres_t *)value; - - if (mt != 0) - free(mt); + free(value); } #endif @@ -130,9 +127,9 @@ ___mtctxres(void) { * that fails return a global context. */ if (mt_key_initialized) { - if (((mt = pthread_getspecific(key)) != 0) || + if (((mt = pthread_getspecific(key)) != NULL) || (__res_init_ctx() == 0 && - (mt = pthread_getspecific(key)) != 0)) { + (mt = pthread_getspecific(key)) != NULL)) { return (mt); } } diff --git a/lib/libc/resolv/res_init.c b/lib/libc/resolv/res_init.c index 8832342..9856322 100644 --- a/lib/libc/resolv/res_init.c +++ b/lib/libc/resolv/res_init.c @@ -315,7 +315,7 @@ __res_vinit(res_state statp, int preinit) { while (*cp != '\0' && *cp != ' ' && *cp != '\t' && *cp != '\n') cp++; *cp = '\0'; - *pp++ = 0; + *pp++ = NULL; } #define MATCH(line, name) \ @@ -391,7 +391,7 @@ __res_vinit(res_state statp, int preinit) { while (*cp != '\0' && *cp != ' ' && *cp != '\t') cp++; *cp = '\0'; - *pp++ = 0; + *pp++ = NULL; havesearch = 1; continue; } diff --git a/lib/libc/resolv/res_mkupdate.c b/lib/libc/resolv/res_mkupdate.c index c076c1e5..3ebb242 100644 --- a/lib/libc/resolv/res_mkupdate.c +++ b/lib/libc/resolv/res_mkupdate.c @@ -1175,7 +1175,7 @@ res_protocolname(int num) { if (protolist == (struct valuelist *)0) res_buildprotolist(); pp = cgetprotobynumber(num); - if (pp == 0) { + if (pp == NULL) { (void) sprintf(number, "%d", num); return (number); } @@ -1190,7 +1190,7 @@ res_servicename(u_int16_t port, const char *proto) { /*%< Host byte order. */ if (servicelist == (struct valuelist *)0) res_buildservicelist(); ss = cgetservbyport(htons(port), proto); - if (ss == 0) { + if (ss == NULL) { (void) sprintf(number, "%d", port); return (number); } diff --git a/lib/libc/rpc/auth_none.c b/lib/libc/rpc/auth_none.c index 0b846eb..32bebeb 100644 --- a/lib/libc/rpc/auth_none.c +++ b/lib/libc/rpc/auth_none.c @@ -83,9 +83,9 @@ authnone_create(void) XDR *xdrs; mutex_lock(&authnone_lock); - if (ap == 0) { - ap = (struct authnone_private *)calloc(1, sizeof (*ap)); - if (ap == 0) { + if (ap == NULL) { + ap = calloc(1, sizeof (*ap)); + if (ap == NULL) { mutex_unlock(&authnone_lock); return (0); } diff --git a/lib/libc/rpc/clnt_perror.c b/lib/libc/rpc/clnt_perror.c index 15d7280..d674fbb 100644 --- a/lib/libc/rpc/clnt_perror.c +++ b/lib/libc/rpc/clnt_perror.c @@ -64,8 +64,8 @@ static char * _buf(void) { - if (buf == 0) - buf = (char *)malloc(CLNT_PERROR_BUFLEN); + if (buf == NULL) + buf = malloc(CLNT_PERROR_BUFLEN); return (buf); } @@ -85,7 +85,7 @@ clnt_sperror(CLIENT *rpch, const char *s) assert(s != NULL); str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */ - if (str == 0) + if (str == NULL) return (0); len = CLNT_PERROR_BUFLEN; strstart = str; @@ -240,7 +240,7 @@ clnt_spcreateerror(const char *s) assert(s != NULL); str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */ - if (str == 0) + if (str == NULL) return(0); len = CLNT_PERROR_BUFLEN; i = snprintf(str, len, "%s: ", s); diff --git a/lib/libc/rpc/mt_misc.c b/lib/libc/rpc/mt_misc.c index 0ec4d8a..a1b8057 100644 --- a/lib/libc/rpc/mt_misc.c +++ b/lib/libc/rpc/mt_misc.c @@ -95,7 +95,7 @@ rce_key_init(void) struct rpc_createerr * __rpc_createerr(void) { - struct rpc_createerr *rce_addr = 0; + struct rpc_createerr *rce_addr = NULL; if (thr_main()) return (&rpc_createerr); diff --git a/lib/libc/rpc/rpcdname.c b/lib/libc/rpc/rpcdname.c index f214b21..08b5d7d 100644 --- a/lib/libc/rpc/rpcdname.c +++ b/lib/libc/rpc/rpcdname.c @@ -43,20 +43,20 @@ __FBSDID("$FreeBSD$"); #include #include "un-namespace.h" -static char *default_domain = 0; +static char *default_domain; static char * get_default_domain(void) { char temp[256]; - if (default_domain) + if (default_domain != NULL) return (default_domain); if (getdomainname(temp, sizeof(temp)) < 0) return (0); if ((int) strlen(temp) > 0) { - default_domain = (char *)malloc((strlen(temp)+(unsigned)1)); - if (default_domain == 0) + default_domain = malloc((strlen(temp) + (unsigned)1)); + if (default_domain == NULL) return (0); (void) strcpy(default_domain, temp); return (default_domain); @@ -73,7 +73,7 @@ get_default_domain(void) int __rpc_get_default_domain(char **domain) { - if ((*domain = get_default_domain()) != 0) + if ((*domain = get_default_domain()) != NULL) return (0); return (-1); } diff --git a/lib/libc/softfloat/timesoftfloat.c b/lib/libc/softfloat/timesoftfloat.c index 98b6ba2..b97c8b0 100644 --- a/lib/libc/softfloat/timesoftfloat.c +++ b/lib/libc/softfloat/timesoftfloat.c @@ -2068,14 +2068,14 @@ static void roundingPrecisionName = "80"; } else { - roundingPrecisionName = 0; + roundingPrecisionName = NULL; } #ifdef FLOATX80 floatx80_rounding_precision = roundingPrecision; #endif switch ( roundingMode ) { case 0: - roundingModeName = 0; + roundingModeName = NULL; roundingCode = float_round_nearest_even; break; case ROUND_NEAREST_EVEN: @@ -2098,7 +2098,7 @@ static void float_rounding_mode = roundingCode; switch ( tininessMode ) { case 0: - tininessModeName = 0; + tininessModeName = NULL; tininessCode = float_tininess_after_rounding; break; case TININESS_BEFORE_ROUNDING: diff --git a/lib/libc/uuid/uuid_to_string.c b/lib/libc/uuid/uuid_to_string.c index f816391..35f8581 100644 --- a/lib/libc/uuid/uuid_to_string.c +++ b/lib/libc/uuid/uuid_to_string.c @@ -49,7 +49,7 @@ uuid_to_string(const uuid_t *u, char **s, uint32_t *status) *status = uuid_s_ok; /* Why allow a NULL-pointer here? */ - if (s == 0) + if (s == NULL) return; if (u == NULL) { diff --git a/lib/libc/xdr/xdr_mem.c b/lib/libc/xdr/xdr_mem.c index 0455a5a..ecefb2e 100644 --- a/lib/libc/xdr/xdr_mem.c +++ b/lib/libc/xdr/xdr_mem.c @@ -215,7 +215,7 @@ xdrmem_setpos(XDR *xdrs, u_int pos) static int32_t * xdrmem_inline_aligned(XDR *xdrs, u_int len) { - int32_t *buf = 0; + int32_t *buf = NULL; if (xdrs->x_handy >= len) { xdrs->x_handy -= len; -- cgit v1.1 From 858f336801b9b036dd48c5e5d8f38c3441aa5686 Mon Sep 17 00:00:00 2001 From: pfg Date: Sun, 10 Apr 2016 21:48:11 +0000 Subject: ufs: replace 0 with NULL for pointers. While here also do late initialization of the variables we are changing. Found with devel/coccinelle. Reviewed by: mckusick MFC after: 2 weeks --- sys/ufs/ffs/ffs_alloc.c | 11 +++++++---- sys/ufs/ffs/ffs_snapshot.c | 4 ++-- sys/ufs/ffs/ffs_softdep.c | 33 ++++++++++++++++++--------------- sys/ufs/ufs/ufs_lookup.c | 3 ++- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index 799efe3..feaa14f 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -259,7 +259,6 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp) static int curfail; int64_t delta; - *bpp = 0; vp = ITOV(ip); fs = ip->i_fs; bp = NULL; @@ -319,6 +318,7 @@ retry: /* * Check for extension in the existing location. */ + *bpp = NULL; cg = dtog(fs, bprev); UFS_LOCK(ump); bno = ffs_fragextend(ip, cg, bprev, osize, nsize); @@ -518,7 +518,7 @@ ffs_reallocblks_ufs1(ap) struct inode *ip; struct vnode *vp; struct buf *sbp, *ebp; - ufs1_daddr_t *bap, *sbap, *ebap = 0; + ufs1_daddr_t *bap, *sbap, *ebap; struct cluster_save *buflist; struct ufsmount *ump; ufs_lbn_t start_lbn, end_lbn; @@ -598,6 +598,7 @@ ffs_reallocblks_ufs1(ap) /* * If the block range spans two block maps, get the second map. */ + ebap = NULL; if (end_lvl == 0 || (idp = &end_ap[end_lvl - 1])->in_off + 1 >= len) { ssize = len; } else { @@ -767,7 +768,7 @@ ffs_reallocblks_ufs2(ap) struct inode *ip; struct vnode *vp; struct buf *sbp, *ebp; - ufs2_daddr_t *bap, *sbap, *ebap = 0; + ufs2_daddr_t *bap, *sbap, *ebap; struct cluster_save *buflist; struct ufsmount *ump; ufs_lbn_t start_lbn, end_lbn; @@ -846,6 +847,7 @@ ffs_reallocblks_ufs2(ap) /* * If the block range spans two block maps, get the second map. */ + ebap = NULL; if (end_lvl == 0 || (idp = &end_ap[end_lvl - 1])->in_off + 1 >= len) { ssize = len; } else { @@ -2784,7 +2786,8 @@ sysctl_ffs_fsck(SYSCTL_HANDLER_ARGS) return (EINVAL); } vn_start_write(vp, &mp, V_WAIT); - if (mp == 0 || strncmp(mp->mnt_stat.f_fstypename, "ufs", MFSNAMELEN)) { + if (mp == NULL || + strncmp(mp->mnt_stat.f_fstypename, "ufs", MFSNAMELEN)) { vn_finished_write(mp); fdrop(fp, td); return (EINVAL); diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 099faeb..59ae322 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -1896,7 +1896,7 @@ retry: * dopersistence sysctl-setable flag to decide on the * persistence needed for file content data. */ - if (savedcbp != 0) { + if (savedcbp != NULL) { bcopy(savedcbp->b_data, cbp->b_data, fs->fs_bsize); bawrite(cbp); if ((vtype == VDIR || dopersistence) && @@ -2388,7 +2388,7 @@ ffs_copyonwrite(devvp, bp) * dopersistence sysctl-setable flag to decide on the * persistence needed for file content data. */ - if (savedcbp != 0) { + if (savedcbp != NULL) { bcopy(savedcbp->b_data, cbp->b_data, fs->fs_bsize); bawrite(cbp); if ((devvp == bp->b_vp || bp->b_vp->v_type == VDIR || diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index bc0693a..5b25b9e 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -1869,7 +1869,7 @@ softdep_move_dependencies(oldbp, newbp) if (wk->wk_type == D_BMSAFEMAP && bmsafemap_backgroundwrite(WK_BMSAFEMAP(wk), newbp)) dirty = 1; - if (wktail == 0) + if (wktail == NULL) LIST_INSERT_HEAD(&newbp->b_dep, wk, wk_list); else LIST_INSERT_AFTER(wktail, wk, wk_list); @@ -6675,7 +6675,7 @@ softdep_journal_freeblocks(ip, cred, length, flags) } } if ((flags & IO_EXT) != 0) - while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != 0) + while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != NULL) cancel_allocdirect(&inodedep->id_extupdt, adp, freeblks); /* @@ -6928,14 +6928,14 @@ softdep_setup_freeblocks(ip, length, flags) if (flags & IO_NORMAL) { merge_inode_lists(&inodedep->id_newinoupdt, &inodedep->id_inoupdt); - while ((adp = TAILQ_FIRST(&inodedep->id_inoupdt)) != 0) + while ((adp = TAILQ_FIRST(&inodedep->id_inoupdt)) != NULL) cancel_allocdirect(&inodedep->id_inoupdt, adp, freeblks); } if (flags & IO_EXT) { merge_inode_lists(&inodedep->id_newextupdt, &inodedep->id_extupdt); - while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != 0) + while ((adp = TAILQ_FIRST(&inodedep->id_extupdt)) != NULL) cancel_allocdirect(&inodedep->id_extupdt, adp, freeblks); } @@ -8050,8 +8050,8 @@ indir_trunc(freework, dbn, lbn) struct fs *fs; struct indirdep *indirdep; struct ufsmount *ump; - ufs1_daddr_t *bap1 = 0; - ufs2_daddr_t nb, nnb, *bap2 = 0; + ufs1_daddr_t *bap1; + ufs2_daddr_t nb, nnb, *bap2; ufs_lbn_t lbnadd, nlbn; int i, nblocks, ufs1fmt; int freedblocks; @@ -8134,10 +8134,12 @@ indir_trunc(freework, dbn, lbn) bap1 = (ufs1_daddr_t *)bp->b_data; nb = bap1[freework->fw_off]; ufs1fmt = 1; + bap2 = NULL; } else { bap2 = (ufs2_daddr_t *)bp->b_data; nb = bap2[freework->fw_off]; ufs1fmt = 0; + bap1 = NULL; } level = lbn_level(lbn); needj = MOUNTEDSUJ(UFSTOVFS(ump)) != 0; @@ -8312,7 +8314,7 @@ setup_newdir(dap, newinum, dinum, newdirbp, mkdirp) struct newblk *newblk; struct pagedep *pagedep; struct inodedep *inodedep; - struct newdirblk *newdirblk = 0; + struct newdirblk *newdirblk; struct mkdir *mkdir1, *mkdir2; struct worklist *wk; struct jaddref *jaddref; @@ -8439,7 +8441,7 @@ softdep_setup_directory_add(bp, dp, diroffset, newinum, newdirbp, isnewblk) struct newblk *newblk; struct pagedep *pagedep; struct inodedep *inodedep; - struct newdirblk *newdirblk = 0; + struct newdirblk *newdirblk; struct mkdir *mkdir1, *mkdir2; struct jaddref *jaddref; struct ufsmount *ump; @@ -8471,6 +8473,7 @@ softdep_setup_directory_add(bp, dp, diroffset, newinum, newdirbp, isnewblk) dap->da_state = ATTACHED; LIST_INIT(&dap->da_jwork); isindir = bp->b_lblkno >= NDADDR; + newdirblk = NULL; if (isnewblk && (isindir ? blkoff(fs, diroffset) : fragoff(fs, diroffset)) == 0) { newdirblk = malloc(sizeof(struct newdirblk), @@ -8561,7 +8564,7 @@ softdep_setup_directory_add(bp, dp, diroffset, newinum, newdirbp, isnewblk) inodedep->id_mkdiradd = dap; } else if (inodedep->id_mkdiradd) merge_diradd(inodedep, dap); - if (newdirblk) { + if (newdirblk != NULL) { /* * There is nothing to do if we are already tracking * this block. @@ -10538,13 +10541,13 @@ cancel_indirdep(indirdep, bp, freeblks) * Pass in bp for blocks still have journal writes * pending so we can cancel them on their own. */ - while ((aip = LIST_FIRST(&indirdep->ir_deplisthd)) != 0) + while ((aip = LIST_FIRST(&indirdep->ir_deplisthd)) != NULL) cancel_allocindir(aip, bp, freeblks, 0); - while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != 0) + while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != NULL) cancel_allocindir(aip, NULL, freeblks, 0); - while ((aip = LIST_FIRST(&indirdep->ir_writehd)) != 0) + while ((aip = LIST_FIRST(&indirdep->ir_writehd)) != NULL) cancel_allocindir(aip, NULL, freeblks, 0); - while ((aip = LIST_FIRST(&indirdep->ir_completehd)) != 0) + while ((aip = LIST_FIRST(&indirdep->ir_completehd)) != NULL) cancel_allocindir(aip, NULL, freeblks, 0); /* * If there are pending partial truncations we need to keep the @@ -11574,7 +11577,7 @@ handle_written_indirdep(indirdep, bp, bpp) * the indirdep's pointer is not yet written. Otherwise * free them here. */ - while ((aip = LIST_FIRST(&indirdep->ir_writehd)) != 0) { + while ((aip = LIST_FIRST(&indirdep->ir_writehd)) != NULL) { LIST_REMOVE(aip, ai_next); if ((indirdep->ir_state & DEPCOMPLETE) == 0) { LIST_INSERT_HEAD(&indirdep->ir_completehd, aip, @@ -11589,7 +11592,7 @@ handle_written_indirdep(indirdep, bp, bpp) * the done list to the write list after updating the pointers. */ if (TAILQ_EMPTY(&indirdep->ir_trunc)) { - while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != 0) { + while ((aip = LIST_FIRST(&indirdep->ir_donehd)) != NULL) { handle_allocindir_partdone(aip); if (aip == LIST_FIRST(&indirdep->ir_donehd)) panic("disk_write_complete: not gone"); diff --git a/sys/ufs/ufs/ufs_lookup.c b/sys/ufs/ufs/ufs_lookup.c index 408349e..972cee1 100644 --- a/sys/ufs/ufs/ufs_lookup.c +++ b/sys/ufs/ufs/ufs_lookup.c @@ -1256,7 +1256,8 @@ out: * drop its snapshot reference so that it will be reclaimed * when last open reference goes away. */ - if (ip != 0 && (ip->i_flags & SF_SNAPSHOT) != 0 && ip->i_effnlink == 0) + if (ip != NULL && (ip->i_flags & SF_SNAPSHOT) != 0 && + ip->i_effnlink == 0) UFS_SNAPGONE(ip); return (error); } -- cgit v1.1 From badebc350a608060082d5f1b86f3038714a7d433 Mon Sep 17 00:00:00 2001 From: marius Date: Sun, 10 Apr 2016 22:43:36 +0000 Subject: Since r296250 it is no longer possible for devices to use bus space addresses exceeding 32 bit, so bump BUS_SPACE_MAXADDR to 64 bit. The whole situation is sub par, though; prior to r296250 and despite what their names imply, BUS_SPACE_MAX* were primarily, even almost exclusively used for bus_dma(9). Now these macros also have a vital role for bus_space(9). However, it does not necessarily hold that both bus DMA and space addresses universally have the same limits per platform. As for sparc64, 64 bit clearly is beyond what can be addressed via the various IOMMUs. With this change in place, we now rely on the parent bus DMA tags of the host-to-foo drivers causing the child tags to be capped as necessary. PR: 207998 --- sys/sparc64/include/bus.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/sparc64/include/bus.h b/sys/sparc64/include/bus.h index 9cdd208..6ff8c7c 100644 --- a/sys/sparc64/include/bus.h +++ b/sys/sparc64/include/bus.h @@ -98,7 +98,7 @@ extern const int bus_stream_asi[]; #define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFF #define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF -#define BUS_SPACE_MAXADDR 0xFFFFFFFF +#define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFF #define BUS_SPACE_UNRESTRICTED (~0) -- cgit v1.1 From b63211eed5e20b9ad1b7649373ab39eff72e2521 Mon Sep 17 00:00:00 2001 From: pfg Date: Sun, 10 Apr 2016 23:07:00 +0000 Subject: Cleanup unnecessary semicolons from the kernel. Found with devel/coccinelle. --- sys/arm/altera/socfpga/socfpga_rstmgr.c | 2 +- sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c | 2 +- sys/arm/arm/disassem.c | 2 +- sys/arm/arm/vm_machdep.c | 2 +- sys/arm/freescale/imx/imx6_sdma.c | 2 +- sys/arm/freescale/imx/imx6_ssi.c | 2 +- sys/arm/freescale/vybrid/vf_ccm.c | 10 +- sys/arm/freescale/vybrid/vf_edma.c | 6 +- sys/arm/freescale/vybrid/vf_port.c | 2 +- sys/arm/freescale/vybrid/vf_sai.c | 12 +- sys/arm/mv/mv_pci.c | 2 +- sys/arm/samsung/exynos/chrome_ec.c | 4 +- sys/arm/samsung/exynos/chrome_ec_spi.c | 4 +- sys/arm/samsung/exynos/chrome_kb.c | 14 +- sys/arm/samsung/exynos/exynos5_i2c.c | 6 +- sys/arm/samsung/exynos/exynos5_pad.c | 8 +- sys/arm64/cavium/thunder_pcie_pem.c | 2 +- sys/boot/arm/at91/libat91/sd-card.c | 2 +- sys/boot/common/part.c | 2 +- sys/boot/userboot/test/test.c | 2 +- sys/boot/userboot/userboot/elf64_freebsd.c | 2 +- sys/cam/ctl/ctl_ha.c | 2 +- sys/compat/linprocfs/linprocfs.c | 2 +- sys/dev/aac/aac.c | 2 +- sys/dev/aacraid/aacraid.c | 4 +- sys/dev/ahci/ahci_pci.c | 2 +- sys/dev/ata/chipsets/ata-intel.c | 2 +- sys/dev/ath/ath_hal/ar5416/ar5416_radar.c | 2 +- sys/dev/ath/if_ath.c | 1 - sys/dev/bhnd/bcma/bcma_erom.c | 4 +- sys/dev/bhnd/bhndb/bhndb_pci.c | 2 +- sys/dev/bhnd/cores/chipc/chipc.c | 2 +- sys/dev/bhnd/siba/siba.c | 2 +- sys/dev/bktr/bktr_core.c | 4 +- sys/dev/bktr/bktr_os.c | 2 +- sys/dev/bxe/bxe.c | 2 +- sys/dev/cxgbe/iw_cxgbe/mem.c | 2 +- sys/dev/cxgbe/t4_main.c | 2 +- sys/dev/drm2/radeon/radeon_bios.c | 2 +- sys/dev/etherswitch/arswitch/arswitch.c | 2 +- sys/dev/etherswitch/arswitch/arswitch_8327.c | 2 +- sys/dev/etherswitch/ip17x/ip175c.c | 2 +- sys/dev/etherswitch/ip17x/ip175d.c | 2 +- sys/dev/hwpmc/hwpmc_mips.c | 4 +- sys/dev/hyperv/utilities/hv_heartbeat.c | 2 +- sys/dev/hyperv/utilities/hv_kvp.c | 2 +- sys/dev/hyperv/utilities/hv_shutdown.c | 2 +- sys/dev/ie/if_ie_isa.c | 2 +- sys/dev/ixgbe/if_ix.c | 2 +- sys/dev/ixgbe/ixgbe_common.c | 4 +- sys/dev/mii/mii_physubr.c | 2 +- sys/dev/mmc/host/dwmmc.c | 2 +- sys/dev/mvs/mvs.c | 2 +- sys/dev/nand/nand.c | 2 +- sys/dev/nand/nandsim_chip.c | 2 +- sys/dev/ncr/ncr.c | 150 ++++++++++----------- sys/dev/nfe/if_nfe.c | 2 +- sys/dev/oce/oce_mbox.c | 4 +- sys/dev/oce/oce_sysctl.c | 2 +- sys/dev/ow/ow.c | 2 +- sys/dev/patm/if_patm_attach.c | 2 +- sys/dev/pcf/pcf.c | 2 +- sys/dev/pdq/pdq.c | 2 +- sys/dev/qlxgbe/ql_hw.c | 4 +- sys/dev/ral/rt2860.c | 2 +- sys/dev/rt/if_rt.c | 2 +- sys/dev/sound/midi/midi.c | 4 +- sys/dev/sound/pci/hda/hdaa.c | 8 +- sys/dev/sym/sym_hipd.c | 64 ++++----- sys/dev/tdfx/tdfx_pci.c | 2 +- sys/dev/ti/if_ti.c | 6 +- sys/dev/uart/uart_dev_msm.c | 2 +- sys/dev/usb/net/if_mos.c | 2 +- sys/dev/usb/net/if_ure.c | 2 +- sys/dev/vt/vt_core.c | 2 +- sys/fs/nandfs/nandfs_segment.c | 6 +- sys/fs/nfs/nfs_commonacl.c | 4 +- sys/fs/nfs/nfs_commonport.c | 2 +- sys/fs/nfs/nfs_commonsubs.c | 10 +- sys/fs/nfsclient/nfs_clbio.c | 4 +- sys/fs/nfsclient/nfs_clport.c | 2 +- sys/fs/nfsclient/nfs_clrpcops.c | 6 +- sys/fs/nfsclient/nfs_clstate.c | 4 +- sys/fs/nfsclient/nfs_clvnops.c | 2 +- sys/fs/nfsserver/nfs_nfsdport.c | 8 +- sys/fs/nfsserver/nfs_nfsdserv.c | 28 ++-- sys/fs/nfsserver/nfs_nfsdsocket.c | 2 +- sys/fs/nfsserver/nfs_nfsdsubs.c | 2 +- sys/fs/smbfs/smbfs_io.c | 2 +- sys/fs/smbfs/smbfs_subr.c | 1 - sys/fs/smbfs/smbfs_vnops.c | 2 +- sys/fs/tmpfs/tmpfs_subr.c | 2 +- sys/fs/unionfs/union_subr.c | 4 +- sys/geom/raid/md_promise.c | 2 +- sys/geom/sched/g_sched.c | 2 +- sys/kern/vfs_vnops.c | 2 +- sys/kgssapi/gss_impl.c | 2 +- sys/mips/mips/db_disasm.c | 6 +- sys/mips/mips/db_trace.c | 4 +- sys/net/if_gif.c | 2 +- sys/net/if_gre.c | 4 +- sys/netgraph/netflow/ng_netflow.c | 2 +- sys/netgraph/ng_base.c | 2 +- sys/netgraph/ng_ipfw.c | 4 +- sys/netgraph/ng_nat.c | 2 +- sys/netpfil/ipfw/ip_fw_sockopt.c | 2 +- sys/netsmb/smb_subr.c | 2 +- .../drivers/infiniband/hw/mthca/mthca_provider.c | 2 +- sys/ofed/drivers/net/mlx4/cmd.c | 2 +- sys/ofed/drivers/net/mlx4/eq.c | 2 +- sys/pc98/cbus/olpt.c | 2 +- sys/powerpc/powermac/fcu.c | 2 +- sys/powerpc/powermac/pmu.c | 2 +- sys/powerpc/powermac/smu.c | 2 +- sys/rpc/clnt_bck.c | 2 +- sys/sparc64/sparc64/db_disasm.c | 4 +- sys/x86/cpufreq/smist.c | 2 +- 117 files changed, 291 insertions(+), 293 deletions(-) diff --git a/sys/arm/altera/socfpga/socfpga_rstmgr.c b/sys/arm/altera/socfpga/socfpga_rstmgr.c index 36a1d75..49db05e 100644 --- a/sys/arm/altera/socfpga/socfpga_rstmgr.c +++ b/sys/arm/altera/socfpga/socfpga_rstmgr.c @@ -145,7 +145,7 @@ rstmgr_sysctl(SYSCTL_HANDLER_ARGS) break; default: return (1); - }; + } reg = READ4(sc, RSTMGR_BRGMODRST); enable = reg & bit ? 0 : 1; diff --git a/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c b/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c index 3daa99f..75825fb 100644 --- a/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c +++ b/sys/arm/amlogic/aml8726/aml8726_sdxc-m8.c @@ -621,7 +621,7 @@ spurious: stop = 1; if ((sndr & AML_SDXC_SEND_RESP_136) != 0) { start = 1; - stop = start + 4;; + stop = start + 4; } for (i = start; i < stop; i++) { pdmar = CSR_READ_4(sc, AML_SDXC_PDMA_REG); diff --git a/sys/arm/arm/disassem.c b/sys/arm/arm/disassem.c index dbe533a..b7aa099 100644 --- a/sys/arm/arm/disassem.c +++ b/sys/arm/arm/disassem.c @@ -523,7 +523,7 @@ disasm(const disasm_interface_t *di, vm_offset_t loc, int altfmt) else di->di_printf(", "); } - }; + } di->di_printf("\n"); diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c index fdab1c6..fec2ca0 100644 --- a/sys/arm/arm/vm_machdep.c +++ b/sys/arm/arm/vm_machdep.c @@ -148,7 +148,7 @@ cpu_fork(register struct thread *td1, register struct proc *p2, /* Setup to release spin count in fork_exit(). */ td2->td_md.md_spinlock_count = 1; - td2->td_md.md_saved_cspr = PSR_SVC32_MODE;; + td2->td_md.md_saved_cspr = PSR_SVC32_MODE; #if __ARM_ARCH >= 6 td2->td_md.md_tp = td1->td_md.md_tp; #else diff --git a/sys/arm/freescale/imx/imx6_sdma.c b/sys/arm/freescale/imx/imx6_sdma.c index ae9a339..4839270 100644 --- a/sys/arm/freescale/imx/imx6_sdma.c +++ b/sys/arm/freescale/imx/imx6_sdma.c @@ -444,7 +444,7 @@ boot_firmware(struct sdma_softc *sc) if (timeout-- <= 0) break; DELAY(10); - }; + } if (ret == 0) { device_printf(sc->dev, "SDMA failed to boot\n"); diff --git a/sys/arm/freescale/imx/imx6_ssi.c b/sys/arm/freescale/imx/imx6_ssi.c index 184de2a..9387aa3 100644 --- a/sys/arm/freescale/imx/imx6_ssi.c +++ b/sys/arm/freescale/imx/imx6_ssi.c @@ -463,7 +463,7 @@ find_sdma_controller(struct sc_info *sc) if (sdma_sc == NULL) { device_printf(sc->dev, "No sDMA found. Can't operate\n"); return (ENXIO); - }; + } sc->sdma_sc = sdma_sc; diff --git a/sys/arm/freescale/vybrid/vf_ccm.c b/sys/arm/freescale/vybrid/vf_ccm.c index 8f8a3f0..82284d5 100644 --- a/sys/arm/freescale/vybrid/vf_ccm.c +++ b/sys/arm/freescale/vybrid/vf_ccm.c @@ -379,15 +379,15 @@ set_clock(struct ccm_softc *sc, char *name) reg &= ~(clk->sel_mask << clk->sel_shift); reg |= (clk->sel_val << clk->sel_shift); WRITE4(sc, clk->sel_reg, reg); - }; + } reg = READ4(sc, clk->reg); reg |= clk->enable_reg; reg &= ~(clk->div_mask << clk->div_shift); reg |= (clk->div_val << clk->div_shift); WRITE4(sc, clk->reg, reg); - }; - }; + } + } return (0); } @@ -425,8 +425,8 @@ ccm_fdt_set(struct ccm_softc *sc) fdt_config += strlen(name) + 1; len -= strlen(name) + 1; set_clock(sc, name); - }; - }; + } + } if (OF_peer(child) == 0) { /* No more siblings. */ diff --git a/sys/arm/freescale/vybrid/vf_edma.c b/sys/arm/freescale/vybrid/vf_edma.c index ed12072..9317921 100644 --- a/sys/arm/freescale/vybrid/vf_edma.c +++ b/sys/arm/freescale/vybrid/vf_edma.c @@ -161,7 +161,7 @@ channel_configure(struct edma_softc *sc, int mux_grp, int mux_src) } else { channel_first = 0; mux_num = sc->device_id * 2; - }; + } /* Take first unused eDMA channel */ ch = NULL; @@ -171,12 +171,12 @@ channel_configure(struct edma_softc *sc, int mux_grp, int mux_src) break; } ch = NULL; - }; + } if (ch == NULL) { /* Can't find free channel */ return (-1); - }; + } chnum = i; diff --git a/sys/arm/freescale/vybrid/vf_port.c b/sys/arm/freescale/vybrid/vf_port.c index 943ca88..6ff8bfc 100644 --- a/sys/arm/freescale/vybrid/vf_port.c +++ b/sys/arm/freescale/vybrid/vf_port.c @@ -171,7 +171,7 @@ port_setup(int pnum, enum ev_type pevt, void (*ih)(void *), void *ih_user) break; default: return (-1); - }; + } reg = READ4(sc, PORT_PCR(pnum)); reg &= ~(PCR_IRQC_M << PCR_IRQC_S); diff --git a/sys/arm/freescale/vybrid/vf_sai.c b/sys/arm/freescale/vybrid/vf_sai.c index 309d95e..83f689f 100644 --- a/sys/arm/freescale/vybrid/vf_sai.c +++ b/sys/arm/freescale/vybrid/vf_sai.c @@ -433,7 +433,7 @@ find_edma_controller(struct sc_info *sc) if ((len = OF_getproplen(edma_node, "device-id")) <= 0) { return (ENXIO); - }; + } OF_getprop(edma_node, "device-id", &dts_value, len); edma_device_id = fdt32_to_cpu(dts_value); @@ -447,16 +447,16 @@ find_edma_controller(struct sc_info *sc) if (edma_sc->device_id == edma_device_id) { /* found */ break; - }; + } edma_sc = NULL; - }; - }; + } + } if (edma_sc == NULL) { device_printf(sc->dev, "no eDMA. can't operate\n"); return (ENXIO); - }; + } sc->edma_sc = edma_sc; @@ -465,7 +465,7 @@ find_edma_controller(struct sc_info *sc) if (sc->edma_chnum < 0) { /* cant setup eDMA */ return (ENXIO); - }; + } return (0); }; diff --git a/sys/arm/mv/mv_pci.c b/sys/arm/mv/mv_pci.c index dc8b890..2ef6604 100644 --- a/sys/arm/mv/mv_pci.c +++ b/sys/arm/mv/mv_pci.c @@ -842,7 +842,7 @@ mv_pcib_alloc_resource(device_t dev, device_t child, int type, int *rid, default: return (BUS_ALLOC_RESOURCE(device_get_parent(dev), dev, type, rid, start, end, count, flags)); - }; + } if (RMAN_IS_DEFAULT_RANGE(start, end)) { start = sc->sc_mem_base; diff --git a/sys/arm/samsung/exynos/chrome_ec.c b/sys/arm/samsung/exynos/chrome_ec.c index 2c88414..8f794b7 100644 --- a/sys/arm/samsung/exynos/chrome_ec.c +++ b/sys/arm/samsung/exynos/chrome_ec.c @@ -176,7 +176,7 @@ ec_command(uint8_t cmd, uint8_t *dout, uint8_t dout_len, for (i = 0; i < dout_len; i++) { msg_dout[i + 3] = dout[i]; - }; + } fill_checksum(msg_dout, dout_len + 3); @@ -195,7 +195,7 @@ ec_command(uint8_t cmd, uint8_t *dout, uint8_t dout_len, for (i = 0; i < dinp_len; i++) { dinp[i] = msg_dinp[i + 2]; - }; + } free(msg_dout, M_DEVBUF); free(msg_dinp, M_DEVBUF); diff --git a/sys/arm/samsung/exynos/chrome_ec_spi.c b/sys/arm/samsung/exynos/chrome_ec_spi.c index a018afa..9e54969 100644 --- a/sys/arm/samsung/exynos/chrome_ec_spi.c +++ b/sys/arm/samsung/exynos/chrome_ec_spi.c @@ -143,7 +143,7 @@ ec_command(uint8_t cmd, uint8_t *dout, uint8_t dout_len, for (i = 0; i < dout_len; i++) { msg_dout[i + 3] = dout[i]; - }; + } fill_checksum(msg_dout, dout_len + 3); @@ -177,7 +177,7 @@ ec_command(uint8_t cmd, uint8_t *dout, uint8_t dout_len, for (i = 0; i < dinp_len; i++) { dinp[i] = msg_dinp[i + 2]; - }; + } free(msg_dout, M_DEVBUF); free(msg_dinp, M_DEVBUF); diff --git a/sys/arm/samsung/exynos/chrome_kb.c b/sys/arm/samsung/exynos/chrome_kb.c index b10a5ac..6965d3c 100644 --- a/sys/arm/samsung/exynos/chrome_kb.c +++ b/sys/arm/samsung/exynos/chrome_kb.c @@ -255,12 +255,12 @@ ckb_check(keyboard_t *kbd) if (sc->sc_flags & CKB_FLAG_POLLING) { return (1); - }; + } for (i = 0; i < sc->cols; i++) if (sc->scan_local[i] != sc->scan[i]) { return (1); - }; + } if (sc->sc_repeating) return (1); @@ -356,7 +356,7 @@ ckb_read_char_locked(keyboard_t *kbd, int wait) callout_reset(&sc->sc_repeat_callout, hz / 10, ckb_repeat, sc); return (sc->sc_repeat_key); - }; + } if (sc->sc_flags & CKB_FLAG_POLLING) { for (;;) { @@ -374,7 +374,7 @@ ckb_read_char_locked(keyboard_t *kbd, int wait) } DELAY(1000); } - }; + } for (i = 0; i < sc->cols; i++) { for (j = 0; j < sc->rows; j++) { @@ -387,7 +387,7 @@ ckb_read_char_locked(keyboard_t *kbd, int wait) key = keymap_read(sc, i, j); if (key == 0) { continue; - }; + } if (newbit > 0) { /* key pressed */ @@ -841,7 +841,7 @@ chrome_kb_attach(device_t dev) for (i = 0; i < sc->cols; i++) { sc->scan_local[i] = 0; sc->scan[i] = 0; - }; + } kbd_init_struct(kbd, KBD_DRIVER_NAME, KB_OTHER, device_get_unit(dev), 0, 0, 0); @@ -866,7 +866,7 @@ chrome_kb_attach(device_t dev) if (kbd_register(kbd) < 0) { return (ENXIO); - }; + } KBD_CONFIG_DONE(kbd); return (0); diff --git a/sys/arm/samsung/exynos/exynos5_i2c.c b/sys/arm/samsung/exynos/exynos5_i2c.c index d879138..756a27d 100644 --- a/sys/arm/samsung/exynos/exynos5_i2c.c +++ b/sys/arm/samsung/exynos/exynos5_i2c.c @@ -292,7 +292,7 @@ i2c_start(device_t dev, u_char slave, int timeout) mtx_unlock(&sc->mutex); return (IIC_ENOACK); - }; + } mtx_unlock(&sc->mutex); return (IIC_NOERR); @@ -387,7 +387,7 @@ i2c_read(device_t dev, char *buf, int len, reg = READ1(sc, I2CCON); reg &= ~(ACKGEN); WRITE1(sc, I2CCON, reg); - }; + } clear_ipend(sc); @@ -444,7 +444,7 @@ i2c_write(device_t dev, const char *buf, int len, int *sent, int timeout) DPRINTF("cant i2c write: no ack\n"); mtx_unlock(&sc->mutex); return (IIC_ENOACK); - }; + } (*sent)++; } diff --git a/sys/arm/samsung/exynos/exynos5_pad.c b/sys/arm/samsung/exynos/exynos5_pad.c index ea07f5d..27d0d53 100644 --- a/sys/arm/samsung/exynos/exynos5_pad.c +++ b/sys/arm/samsung/exynos/exynos5_pad.c @@ -330,10 +330,10 @@ get_bank(struct pad_softc *sc, int gpio_number, *bank = sc->gpio_map[i]; *pin_shift = (gpio_number - n); return (0); - }; + } n += ngpio; - }; + } return (-1); } @@ -516,7 +516,7 @@ pad_attach(device_t dev) break; default: goto fail; - }; + } if (bus_alloc_resources(dev, sc->pad_spec, sc->res)) { device_printf(dev, "could not allocate resources\n"); @@ -528,7 +528,7 @@ pad_attach(device_t dev) for (i = 0; i < sc->nports; i++) { sc->bst[i] = rman_get_bustag(sc->res[i]); sc->bsh[i] = rman_get_bushandle(sc->res[i]); - }; + } sc->dev = dev; diff --git a/sys/arm64/cavium/thunder_pcie_pem.c b/sys/arm64/cavium/thunder_pcie_pem.c index 8679850..09ea206 100644 --- a/sys/arm64/cavium/thunder_pcie_pem.c +++ b/sys/arm64/cavium/thunder_pcie_pem.c @@ -530,7 +530,7 @@ thunder_pem_alloc_resource(device_t dev, device_t child, int type, int *rid, parent_dev = device_get_parent(device_get_parent(dev)); return (BUS_ALLOC_RESOURCE(parent_dev, dev, type, rid, start, end, count, flags)); - }; + } if (!RMAN_IS_DEFAULT_RANGE(start, end)) { diff --git a/sys/boot/arm/at91/libat91/sd-card.c b/sys/boot/arm/at91/libat91/sd-card.c index 803d782..d173399 100644 --- a/sys/boot/arm/at91/libat91/sd-card.c +++ b/sys/boot/arm/at91/libat91/sd-card.c @@ -187,7 +187,7 @@ MCI_StartReadBlock(unsigned blknum, void *dataBuffer) // (PDC) Receiver Transfer Enable AT91C_BASE_PDC_MCI->PDC_PTCR = (AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS); AT91C_BASE_PDC_MCI->PDC_RPR = (unsigned int)dataBuffer; - AT91C_BASE_PDC_MCI->PDC_RCR = SD_BLOCK_SIZE / 4;; + AT91C_BASE_PDC_MCI->PDC_RCR = SD_BLOCK_SIZE / 4; AT91C_BASE_PDC_MCI->PDC_PTCR = AT91C_PDC_RXTEN; // SDHC wants block offset, non-HC wants byte offset. diff --git a/sys/boot/common/part.c b/sys/boot/common/part.c index 3fad5dd..b349e96 100644 --- a/sys/boot/common/part.c +++ b/sys/boot/common/part.c @@ -514,7 +514,7 @@ vtoc8_parttype(uint16_t type) return (PART_FREEBSD_VINUM); case VTOC_TAG_FREEBSD_ZFS: return (PART_FREEBSD_ZFS); - }; + } return (PART_UNKNOWN); } diff --git a/sys/boot/userboot/test/test.c b/sys/boot/userboot/test/test.c index d5707de..bf64e90 100644 --- a/sys/boot/userboot/test/test.c +++ b/sys/boot/userboot/test/test.c @@ -273,7 +273,7 @@ test_diskioctl(void *arg, int unit, u_long cmd, void *data) break; default: return (ENOTTY); - }; + } return (0); } diff --git a/sys/boot/userboot/userboot/elf64_freebsd.c b/sys/boot/userboot/userboot/elf64_freebsd.c index 36129ef..19d369d 100644 --- a/sys/boot/userboot/userboot/elf64_freebsd.c +++ b/sys/boot/userboot/userboot/elf64_freebsd.c @@ -141,7 +141,7 @@ elf64_exec(struct preloaded_file *fp) dev_cleanup(); - stack[0] = 0; /* return address */; + stack[0] = 0; /* return address */ stack[1] = modulep; stack[2] = kernend; CALLBACK(copyin, stack, 0x1000, sizeof(stack)); diff --git a/sys/cam/ctl/ctl_ha.c b/sys/cam/ctl/ctl_ha.c index 57466ec..f1f5b8c 100644 --- a/sys/cam/ctl/ctl_ha.c +++ b/sys/cam/ctl/ctl_ha.c @@ -356,7 +356,7 @@ ctl_ha_send(struct ha_softc *softc) printf("%s: sosend() error %d\n", __func__, error); return; } - }; + } } static void diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index 12bc3c46a..395c94f 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -640,7 +640,7 @@ linprocfs_doprocstat(PFS_FILL_ARGS) } else { startcode = 0; startdata = 0; - }; + } sbuf_printf(sb, "%d", p->p_pid); #define PS_ADD(name, fmt, arg) sbuf_printf(sb, " " fmt, arg) PS_ADD("comm", "(%s)", p->p_comm); diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c index decacb9..4028cb4 100644 --- a/sys/dev/aac/aac.c +++ b/sys/dev/aac/aac.c @@ -3762,7 +3762,7 @@ aac_get_bus_info(struct aac_softc *sc) device_printf(sc->aac_dev, "No memory to add passthrough bus %d\n", i); break; - }; + } child = device_add_child(sc->aac_dev, "aacp", -1); if (child == NULL) { diff --git a/sys/dev/aacraid/aacraid.c b/sys/dev/aacraid/aacraid.c index 26b2296..879d466 100644 --- a/sys/dev/aacraid/aacraid.c +++ b/sys/dev/aacraid/aacraid.c @@ -3550,7 +3550,7 @@ aac_container_bus(struct aac_softc *sc) device_printf(sc->aac_dev, "No memory to add container bus\n"); panic("Out of memory?!"); - }; + } child = device_add_child(sc->aac_dev, "aacraidp", -1); if (child == NULL) { device_printf(sc->aac_dev, @@ -3662,7 +3662,7 @@ aac_get_bus_info(struct aac_softc *sc) device_printf(sc->aac_dev, "No memory to add passthrough bus %d\n", i); break; - }; + } child = device_add_child(sc->aac_dev, "aacraidp", -1); if (child == NULL) { diff --git a/sys/dev/ahci/ahci_pci.c b/sys/dev/ahci/ahci_pci.c index 57f7ea9..b6a961f 100644 --- a/sys/dev/ahci/ahci_pci.c +++ b/sys/dev/ahci/ahci_pci.c @@ -491,7 +491,7 @@ ahci_pci_attach(device_t dev) if ((error = ahci_pci_ctlr_reset(dev)) != 0) { ahci_free_mem(dev); return (error); - }; + } /* Setup interrupts. */ diff --git a/sys/dev/ata/chipsets/ata-intel.c b/sys/dev/ata/chipsets/ata-intel.c index 46d0055..502a859 100644 --- a/sys/dev/ata/chipsets/ata-intel.c +++ b/sys/dev/ata/chipsets/ata-intel.c @@ -380,7 +380,7 @@ ata_intel_ch_attach(device_t dev) } else if (ata_intel_sata_sidpr_test(dev)) { ch->hw.pm_read = ata_intel_sata_sidpr_read; ch->hw.pm_write = ata_intel_sata_sidpr_write; - }; + } } if (ch->hw.pm_write != NULL) { ch->flags |= ATA_PERIODIC_POLL; diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_radar.c b/sys/dev/ath/ath_hal/ar5416/ar5416_radar.c index edac235..9759b74 100644 --- a/sys/dev/ath/ath_hal/ar5416/ar5416_radar.c +++ b/sys/dev/ath/ath_hal/ar5416/ar5416_radar.c @@ -365,7 +365,7 @@ ar5416ProcessRadarEvent(struct ath_hal *ah, struct ath_rx_status *rxs, /* Cannot use ctrl channel RSSI if ext channel is stronger */ if (ext_rssi >= (rssi + 3)) { rssi = 0; - }; + } break; case EXT_CH_RADAR_FOUND: /* Radar in extended channel */ diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index 8b1580a..e2dc250 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -1073,7 +1073,6 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) | IEEE80211_HTCAP_MAXAMSDU_3839 /* max A-MSDU length */ | IEEE80211_HTCAP_SMPS_OFF; /* SM power save off */ - ; /* * Enable short-GI for HT20 only if the hardware diff --git a/sys/dev/bhnd/bcma/bcma_erom.c b/sys/dev/bhnd/bcma/bcma_erom.c index 2fd3275..3f9abf9 100644 --- a/sys/dev/bhnd/bcma/bcma_erom.c +++ b/sys/dev/bhnd/bcma/bcma_erom.c @@ -567,7 +567,7 @@ bcma_erom_get_core_info(struct bcma_erom *erom, for (u_int j = 0; j < i; j++) { if (buffer[i].vendor == buffer[j].vendor && buffer[i].device == buffer[j].device) - buffer[i].unit++;; + buffer[i].unit++; } } @@ -625,7 +625,7 @@ erom_corecfg_fill_port_regions(struct bcma_erom *erom, EROM_LOG(erom, "unsupported region type %hhx\n", region_type); return (EINVAL); - }; + } /* Fetch the list to be populated */ sports = bcma_corecfg_get_port_list(corecfg, port_type); diff --git a/sys/dev/bhnd/bhndb/bhndb_pci.c b/sys/dev/bhnd/bhndb/bhndb_pci.c index 03a0996..ac5409a 100644 --- a/sys/dev/bhnd/bhndb/bhndb_pci.c +++ b/sys/dev/bhnd/bhndb/bhndb_pci.c @@ -1007,7 +1007,7 @@ bhndb_pci_discover_quirks(struct bhndb_pci_softc *sc, for (qt = id->quirks; qt->quirks != 0; qt++) { if (bhnd_hwrev_matches(hwrev, &qt->hwrev)) quirks |= qt->quirks; - }; + } } diff --git a/sys/dev/bhnd/cores/chipc/chipc.c b/sys/dev/bhnd/cores/chipc/chipc.c index f47a8f2..e03ddfe 100644 --- a/sys/dev/bhnd/cores/chipc/chipc.c +++ b/sys/dev/bhnd/cores/chipc/chipc.c @@ -160,7 +160,7 @@ chipc_attach(device_t dev) for (dq = chipc_quirks; dq->quirks != 0; dq++) { if (bhnd_hwrev_matches(bhnd_get_hwrev(dev), &dq->hwrev)) sc->quirks |= dq->quirks; - }; + } // TODO switch (bhnd_chipc_nvram_src(dev)) { diff --git a/sys/dev/bhnd/siba/siba.c b/sys/dev/bhnd/siba/siba.c index 5f1410d..9e837e3f 100644 --- a/sys/dev/bhnd/siba/siba.c +++ b/sys/dev/bhnd/siba/siba.c @@ -126,7 +126,7 @@ siba_attach(device_t dev) error = ENXIO; goto cleanup; } - }; + } } cleanup: diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c index c38afe5..764eda5 100644 --- a/sys/dev/bktr/bktr_core.c +++ b/sys/dev/bktr/bktr_core.c @@ -590,7 +590,7 @@ bktr_store_address(unit, BKTR_MEM_BUF, buf); bktr->id = BROOKTREE_879; break; } - }; + } bktr->clr_on_start = FALSE; @@ -3046,7 +3046,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace ) /* sync vro */ *dma_prog++ = OP_SYNC | BKTR_GEN_IRQ | BKTR_RESYNC | BKTR_VRO; *dma_prog++ = 0; /* NULL WORD */ - *dma_prog++ = OP_JUMP; ; + *dma_prog++ = OP_JUMP; *dma_prog = (uint32_t ) vtophys(bktr->odd_dma_prog); break; } diff --git a/sys/dev/bktr/bktr_os.c b/sys/dev/bktr/bktr_os.c index e5ea53b..e8c0f7b 100644 --- a/sys/dev/bktr/bktr_os.c +++ b/sys/dev/bktr/bktr_os.c @@ -304,7 +304,7 @@ bktr_probe( device_t dev ) device_set_desc(dev, "BrookTree 879"); return BUS_PROBE_DEFAULT; } - }; + } return ENXIO; } diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c index 53d8e97..91a5bf3 100644 --- a/sys/dev/bxe/bxe.c +++ b/sys/dev/bxe/bxe.c @@ -1620,7 +1620,7 @@ bxe_read_dmae(struct bxe_softc *sc, /* issue the command and wait for completion */ if ((rc = bxe_issue_dmae_with_comp(sc, &dmae)) != 0) { bxe_panic(sc, ("DMAE failed (%d)\n", rc)); - }; + } } void diff --git a/sys/dev/cxgbe/iw_cxgbe/mem.c b/sys/dev/cxgbe/iw_cxgbe/mem.c index e42aa1a..f7e90a5 100644 --- a/sys/dev/cxgbe/iw_cxgbe/mem.c +++ b/sys/dev/cxgbe/iw_cxgbe/mem.c @@ -796,7 +796,7 @@ struct ib_fast_reg_page_list *c4iw_alloc_fastreg_pbl(struct ib_device *device, if (c4pl) dma_addr = vtophys(c4pl); else - return ERR_PTR(-ENOMEM);; + return ERR_PTR(-ENOMEM); pci_unmap_addr_set(c4pl, mapping, dma_addr); c4pl->dma_addr = dma_addr; diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index 777e4d1..e3b64b0 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -2128,7 +2128,7 @@ rw_via_memwin(struct adapter *sc, int idx, uint32_t addr, uint32_t *val, } else { v = *val++; t4_write_reg(sc, mw->mw_base + addr - - mw->mw_curpos, htole32(v));; + mw->mw_curpos, htole32(v)); } addr += 4; len -= 4; diff --git a/sys/dev/drm2/radeon/radeon_bios.c b/sys/dev/drm2/radeon/radeon_bios.c index ffb3756..78416bb 100644 --- a/sys/dev/drm2/radeon/radeon_bios.c +++ b/sys/dev/drm2/radeon/radeon_bios.c @@ -676,7 +676,7 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev) vhdr->DeviceID != rdev->ddev->pci_device) { DRM_INFO("ACPI VFCT table is not for this card\n"); goto out_unmap; - }; + } if (vfct->VBIOSImageOffset + sizeof(VFCT_IMAGE_HEADER) + vhdr->ImageLength > tbl_size) { DRM_ERROR("ACPI VFCT image truncated\n"); diff --git a/sys/dev/etherswitch/arswitch/arswitch.c b/sys/dev/etherswitch/arswitch/arswitch.c index 4388819..8396f8a 100644 --- a/sys/dev/etherswitch/arswitch/arswitch.c +++ b/sys/dev/etherswitch/arswitch/arswitch.c @@ -225,7 +225,7 @@ arswitch_set_vlan_mode(struct arswitch_softc *sc, uint32_t mode) break; default: sc->vlan_mode = 0; - }; + } /* Reset VLANs. */ sc->hal.arswitch_vlan_init_hw(sc); diff --git a/sys/dev/etherswitch/arswitch/arswitch_8327.c b/sys/dev/etherswitch/arswitch/arswitch_8327.c index 6e221a8..92e44fc 100644 --- a/sys/dev/etherswitch/arswitch/arswitch_8327.c +++ b/sys/dev/etherswitch/arswitch/arswitch_8327.c @@ -662,7 +662,7 @@ ar8327_hw_setup(struct arswitch_softc *sc) /* start PHY autonegotiation? */ /* XXX is this done as part of the normal PHY setup? */ - }; + } /* Let things settle */ DELAY(1000); diff --git a/sys/dev/etherswitch/ip17x/ip175c.c b/sys/dev/etherswitch/ip17x/ip175c.c index f787052..30614a4 100644 --- a/sys/dev/etherswitch/ip17x/ip175c.c +++ b/sys/dev/etherswitch/ip17x/ip175c.c @@ -210,7 +210,7 @@ ip175c_set_vlan_mode(struct ip17x_softc *sc, uint32_t mode) ip17x_updatephy(sc->sc_dev, 30, 9, 0x80, 0); sc->vlan_mode = ETHERSWITCH_VLAN_PORT; break; - }; + } /* Reset vlans. */ ip17x_reset_vlans(sc, sc->vlan_mode); diff --git a/sys/dev/etherswitch/ip17x/ip175d.c b/sys/dev/etherswitch/ip17x/ip175d.c index 4962ac2..5d43641 100644 --- a/sys/dev/etherswitch/ip17x/ip175d.c +++ b/sys/dev/etherswitch/ip17x/ip175d.c @@ -167,7 +167,7 @@ ip175d_set_vlan_mode(struct ip17x_softc *sc, uint32_t mode) ip17x_updatephy(sc->sc_dev, 22, 0, 0xbfff, 0x8000); sc->vlan_mode = 0; break; - }; + } if (sc->vlan_mode != 0) { /* diff --git a/sys/dev/hwpmc/hwpmc_mips.c b/sys/dev/hwpmc/hwpmc_mips.c index 72f8e89..d9c26af 100644 --- a/sys/dev/hwpmc/hwpmc_mips.c +++ b/sys/dev/hwpmc/hwpmc_mips.c @@ -543,7 +543,7 @@ pmc_next_frame(register_t *pc, register_t *sp) case OP_SYSCALL: case OP_BREAK: more = 1; /* stop now */ - }; + } break; case OP_BCOND: @@ -564,7 +564,7 @@ pmc_next_frame(register_t *pc, register_t *sp) case OP_BCx: case OP_BCy: more = 2; /* stop after next instruction */ - }; + } break; case OP_SW: diff --git a/sys/dev/hyperv/utilities/hv_heartbeat.c b/sys/dev/hyperv/utilities/hv_heartbeat.c index 09bd28b..62de10b 100644 --- a/sys/dev/hyperv/utilities/hv_heartbeat.c +++ b/sys/dev/hyperv/utilities/hv_heartbeat.c @@ -59,7 +59,7 @@ hv_heartbeat_cb(void *context) hv_util_sc *softc; softc = (hv_util_sc*)context; - buf = softc->receive_buffer;; + buf = softc->receive_buffer; channel = softc->hv_dev->channel; ret = hv_vmbus_channel_recv_packet(channel, buf, PAGE_SIZE, &recvlen, diff --git a/sys/dev/hyperv/utilities/hv_kvp.c b/sys/dev/hyperv/utilities/hv_kvp.c index d71310b..50563c4 100644 --- a/sys/dev/hyperv/utilities/hv_kvp.c +++ b/sys/dev/hyperv/utilities/hv_kvp.c @@ -619,7 +619,7 @@ hv_kvp_process_request(void *context, int pending) hv_kvp_log_info("%s: entering hv_kvp_process_request\n", __func__); sc = (hv_kvp_sc*)context; - kvp_buf = sc->util_sc.receive_buffer;; + kvp_buf = sc->util_sc.receive_buffer; channel = sc->util_sc.hv_dev->channel; ret = hv_vmbus_channel_recv_packet(channel, kvp_buf, 2 * PAGE_SIZE, diff --git a/sys/dev/hyperv/utilities/hv_shutdown.c b/sys/dev/hyperv/utilities/hv_shutdown.c index 0beed5a..b0802af 100644 --- a/sys/dev/hyperv/utilities/hv_shutdown.c +++ b/sys/dev/hyperv/utilities/hv_shutdown.c @@ -63,7 +63,7 @@ hv_shutdown_cb(void *context) hv_util_sc *softc; softc = (hv_util_sc*)context; - buf = softc->receive_buffer;; + buf = softc->receive_buffer; channel = softc->hv_dev->channel; ret = hv_vmbus_channel_recv_packet(channel, buf, PAGE_SIZE, &recv_len, &request_id); diff --git a/sys/dev/ie/if_ie_isa.c b/sys/dev/ie/if_ie_isa.c index c0403b1..73151b4 100644 --- a/sys/dev/ie/if_ie_isa.c +++ b/sys/dev/ie/if_ie_isa.c @@ -881,7 +881,7 @@ ie_modevent (mod, what, arg) break; default: break; - }; + } return (0); } diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index 5e16fbd..ddee699 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -2122,7 +2122,7 @@ ixgbe_mc_array_itr(struct ixgbe_hw *hw, u8 **update_ptr, u32 *vmdq) mta = (struct ixgbe_mc_addr *)*update_ptr; *vmdq = mta->vmdq; - *update_ptr = (u8*)(mta + 1);; + *update_ptr = (u8*)(mta + 1); return (mta->addr); } diff --git a/sys/dev/ixgbe/ixgbe_common.c b/sys/dev/ixgbe/ixgbe_common.c index feb74f6..c302071 100644 --- a/sys/dev/ixgbe/ixgbe_common.c +++ b/sys/dev/ixgbe/ixgbe_common.c @@ -1902,7 +1902,7 @@ static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw) usec_delay(5); ixgbe_standby_eeprom(hw); - }; + } /* * On some parts, SPI write time could vary from 0-20mSec on 3.3V @@ -1988,7 +1988,7 @@ static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data, * EEPROM */ mask = mask >> 1; - }; + } /* We leave the "DI" bit set to "0" when we leave this routine. */ eec &= ~IXGBE_EEC_DI; diff --git a/sys/dev/mii/mii_physubr.c b/sys/dev/mii/mii_physubr.c index 84f4f44..4233159 100644 --- a/sys/dev/mii/mii_physubr.c +++ b/sys/dev/mii/mii_physubr.c @@ -154,7 +154,7 @@ mii_phy_setmedia(struct mii_softc *sc) case (IFM_FDX | IFM_FLOW): index = MII_MEDIA_10_T_FDX; break; - }; + } break; case IFM_100_TX: diff --git a/sys/dev/mmc/host/dwmmc.c b/sys/dev/mmc/host/dwmmc.c index 5b24a6d..f55d3e6 100644 --- a/sys/dev/mmc/host/dwmmc.c +++ b/sys/dev/mmc/host/dwmmc.c @@ -191,7 +191,7 @@ dwmmc_ctrl_reset(struct dwmmc_softc *sc, int reset_bits) if (!(READ4(sc, SDMMC_CTRL) & reset_bits)) return (0); DELAY(10); - }; + } device_printf(sc->dev, "Reset failed\n"); diff --git a/sys/dev/mvs/mvs.c b/sys/dev/mvs/mvs.c index b89db41..bdadf39 100644 --- a/sys/dev/mvs/mvs.c +++ b/sys/dev/mvs/mvs.c @@ -506,7 +506,7 @@ mvs_set_edma_mode(device_t dev, enum mvs_edma_mode mode) device_printf(dev, "stopping EDMA engine failed\n"); break; } - }; + } } ch->curr_mode = mode; ch->fbs_enabled = 0; diff --git a/sys/dev/nand/nand.c b/sys/dev/nand/nand.c index 113953e..ae64121 100644 --- a/sys/dev/nand/nand.c +++ b/sys/dev/nand/nand.c @@ -811,7 +811,7 @@ nand_erase_blocks(struct nand_chip *chip, off_t offset, size_t len) err = ENXIO; block++; - }; + } NANDBUS_UNLOCK(nandbus); diff --git a/sys/dev/nand/nandsim_chip.c b/sys/dev/nand/nandsim_chip.c index 3241e1a..5b568ab 100644 --- a/sys/dev/nand/nandsim_chip.c +++ b/sys/dev/nand/nandsim_chip.c @@ -309,7 +309,7 @@ nandsim_loop(void *arg) links); destroy_event(ev); wakeup(ev); - }; + } NANDSIM_CHIP_UNLOCK(chip); nandsim_log(chip, NANDSIM_LOG_SM, "destroyed\n"); mtx_destroy(&chip->ns_lock); diff --git a/sys/dev/ncr/ncr.c b/sys/dev/ncr/ncr.c index 111cd69..8cf142f 100644 --- a/sys/dev/ncr/ncr.c +++ b/sys/dev/ncr/ncr.c @@ -2906,7 +2906,7 @@ static void ncr_script_fill (struct script * scr, struct scripth * scrh) *p++ =RADDR (dsa); *p++ =SCR_CALL; *p++ =PADDR (trysel); - }; + } *p++ =SCR_JUMP; *p++ =PADDRH(tryloop); @@ -2927,7 +2927,7 @@ static void ncr_script_fill (struct script * scr, struct scripth * scrh) *p++ =PADDR (checkatn); *p++ =SCR_MOVE_TBL ^ SCR_DATA_IN; *p++ =offsetof (struct dsb, data[i]); - }; + } *p++ =SCR_CALL; *p++ =PADDR (checkatn); @@ -2951,7 +2951,7 @@ static void ncr_script_fill (struct script * scr, struct scripth * scrh) *p++ =PADDR (dispatch); *p++ =SCR_MOVE_TBL ^ SCR_DATA_OUT; *p++ =offsetof (struct dsb, data[i]); - }; + } *p++ =SCR_CALL; *p++ =PADDR (dispatch); @@ -2997,7 +2997,7 @@ static void ncr_script_copy_and_bind (ncb_p np, ncrcmd *src, ncrcmd *dst, int le device_printf(np->dev, "ERROR0 IN SCRIPT at %d.\n", (int)(src - start - 1)); DELAY (1000000); - }; + } if (DEBUG_FLAGS & DEBUG_SCRIPT) printf ("%p: <%x>\n", @@ -3062,7 +3062,7 @@ static void ncr_script_copy_and_bind (ncb_p np, ncrcmd *src, ncrcmd *dst, int le default: relocs = 0; break; - }; + } if (relocs) { while (relocs--) { @@ -3110,7 +3110,7 @@ static void ncr_script_copy_and_bind (ncb_p np, ncrcmd *src, ncrcmd *dst, int le offset += 4; } - }; + } } /*========================================================== @@ -3614,7 +3614,7 @@ ncr_attach (device_t dev) usrsync = np->maxsync; if (usrsync < np->minsync) usrsync = np->minsync; - }; + } usrwide = (SCSI_NCR_MAX_WIDE); if (usrwide > np->maxwide) usrwide=np->maxwide; @@ -3719,7 +3719,7 @@ ncr_attach (device_t dev) if (ncr_snooptest (np)) { printf ("CACHE INCORRECTLY CONFIGURED.\n"); return EINVAL; - }; + } /* ** Install the interrupt handler. @@ -3817,7 +3817,7 @@ ncr_intr_locked(ncb_p np) } while (INB(nc_istat) & (INTF|SIP|DIP)); np->ticks = 100; - }; + } if (DEBUG_FLAGS & DEBUG_TINY) printf ("]\n"); } @@ -3892,7 +3892,7 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) ccb->ccb_h.status = CAM_RESRC_UNAVAIL; xpt_done(ccb); return; - }; + } cp->ccb = ccb; @@ -3923,8 +3923,8 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) != tp->tinfo.goal.offset)) { tp->nego_cp = cp; nego = NS_SYNC; - }; - }; + } + } /*--------------------------------------------------- ** @@ -3950,11 +3950,11 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) if (DEBUG_FLAGS & DEBUG_TAGS) { PRINT_ADDR(ccb); printf ("using tag #%d.\n", cp->tag); - }; - }; + } + } } else { cp->tag=0; - }; + } /*---------------------------------------------------- ** @@ -4001,7 +4001,7 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) printf (".\n"); }; break; - }; + } /*---------------------------------------------------- ** @@ -4435,7 +4435,7 @@ ncr_complete (ncb_p np, nccb_p cp) */ tp->tinfo.goal.period = 0; tp->tinfo.goal.offset = 0; - }; + } /* ** Check for extended errors. @@ -4453,10 +4453,10 @@ ncr_complete (ncb_p np, nccb_p cp) default: printf ("extended error %d.\n", cp->xerr_status); break; - }; + } if (cp->host_status==HS_COMPLETE) cp->host_status = HS_FAIL; - }; + } /* ** Check the status. @@ -4579,9 +4579,9 @@ ncr_wakeup (ncb_p np, u_long code) default: ncr_complete (np, cp); break; - }; + } cp = cp -> link_nccb; - }; + } } static void @@ -4959,7 +4959,7 @@ ncr_setsync(ncb_p np, nccb_p cp, u_char scntl3, u_char sxfer, u_char period) if (cp->ccb->ccb_h.target_id != target) continue; cp->sync_status = sxfer; cp->wide_status = scntl3; - }; + } } /*========================================================== @@ -5038,7 +5038,7 @@ static void ncr_setwide (ncb_p np, nccb_p cp, u_char wide, u_char ack) if (cp->ccb->ccb_h.target_id != target) continue; cp->sync_status = sxfer; cp->wide_status = scntl3; - }; + } } /*========================================================== @@ -5092,7 +5092,7 @@ ncr_timeout (void *arg) ** Let's try to wake it up. */ OUTB (nc_istat, SIGP); - }; + } /*---------------------------------------------------- ** @@ -5120,7 +5120,7 @@ ncr_timeout (void *arg) "timeout nccb=%p (skip)\n", cp); cp->phys.header.launch.l_paddr = NCB_SCRIPT_PHYS (np, skip); - }; + } switch (cp->host_status) { @@ -5129,14 +5129,14 @@ ncr_timeout (void *arg) /* FALLTHROUGH */ case HS_DISCONNECT: cp->host_status=HS_TIMEOUT; - }; + } cp->tag = 0; /* ** wakeup this nccb. */ ncr_complete (np, cp); - }; + } } callout_reset(&np->timer, step ? step : 1, ncr_timeout, np); @@ -5150,7 +5150,7 @@ ncr_timeout (void *arg) if (DEBUG_FLAGS & DEBUG_TINY) printf ("{"); ncr_exception (np); if (DEBUG_FLAGS & DEBUG_TINY) printf ("}"); - }; + } } /*========================================================== @@ -5255,7 +5255,7 @@ static void ncr_exception (ncb_p np) OUTB (nc_istat, INTF); np->profile.num_fly++; ncr_wakeup (np, 0); - }; + } if (!(istat & (SIP|DIP))) { return; } @@ -5291,7 +5291,7 @@ static void ncr_exception (ncb_p np) if (sist & RST) { ncr_init (np, bootverbose ? "scsi reset" : NULL, HS_RESET); return; - }; + } /*------------------------------------------- ** selection timeout @@ -5306,7 +5306,7 @@ static void ncr_exception (ncb_p np) !(dstat & (MDPE|BF|ABRT|SIR))) { ncr_int_sto (np); return; - }; + } /*------------------------------------------- ** Phase mismatch. @@ -5318,7 +5318,7 @@ static void ncr_exception (ncb_p np) !(dstat & (MDPE|BF|ABRT|SIR|IID))) { ncr_int_ma (np, dstat); return; - }; + } /*---------------------------------------- ** move command with length 0 @@ -5335,7 +5335,7 @@ static void ncr_exception (ncb_p np) */ OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, no_data)); return; - }; + } /*------------------------------------------- ** Programmed interrupt @@ -5348,7 +5348,7 @@ static void ncr_exception (ncb_p np) (INB(nc_dsps) <= SIR_MAX)) { ncr_int_sir (np); return; - }; + } /*======================================== ** log message for real hard errors @@ -5369,7 +5369,7 @@ static void ncr_exception (ncb_p np) ((volatile char*)&np->regdump)[i] = INB_OFF(i); np->regdump.nc_dstat = dstat; np->regdump.nc_sist = sist; - }; + } /*---------------------------------------- @@ -5413,7 +5413,7 @@ static void ncr_exception (ncb_p np) OUTB (nc_scr0, HS_UNEXPECTED); OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, cleanup)); return; - }; + } /*---------------------------------------- ** cannot disconnect @@ -5438,7 +5438,7 @@ static void ncr_exception (ncb_p np) */ device_printf(np->dev, "INFO: LDSC while IID.\n"); return; - }; + } device_printf(np->dev, "target %d doesn't release the bus.\n", INB (nc_sdid)&0x0f); /* @@ -5446,7 +5446,7 @@ static void ncr_exception (ncb_p np) ** timeout will do the real work. */ return; - }; + } /*---------------------------------------- ** single step @@ -5458,7 +5458,7 @@ static void ncr_exception (ncb_p np) !(dstat & (MDPE|BF|ABRT|SIR|IID))) { OUTB (nc_dcntl, np->rv_dcntl | STD); return; - }; + } /* ** @RECOVER@ HTH, SGE, ABRT. @@ -5491,11 +5491,11 @@ static void ncr_exception (ncb_p np) case 12: printf (" "); break; - }; + } val = bus_read_1(np->reg_res, i); printf (" %x%x", val/16, val%16); if (i%16==15) printf (".\n"); - }; + } callout_stop(&np->timer); @@ -5505,7 +5505,7 @@ static void ncr_exception (ncb_p np) */ OUTB (nc_istat, SRST); return; - }; + } #ifdef NCR_FREEZE /* @@ -5556,7 +5556,7 @@ static void ncr_int_sto (ncb_p np) if (cp) { cp-> host_status = HS_SEL_TIMEOUT; ncr_complete (np, cp); - }; + } /* ** repair start queue @@ -5571,7 +5571,7 @@ static void ncr_int_sto (ncb_p np) WRITESCRIPT(startpos[0], scratcha); OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, start)); return; - }; + } ncr_init (np, "selection timeout", HS_FAIL); } @@ -5634,7 +5634,7 @@ static void ncr_int_ma (ncb_p np, u_char dstat) if (INB(nc_scntl3) & EWS) { if (ss2 & OLF1) rest++; if (ss2 & ORF1) rest++; - }; + } OUTB (nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo */ OUTB (nc_stest3, TE|CSF); /* clear scsi fifo */ @@ -5682,7 +5682,7 @@ static void ncr_int_ma (ncb_p np, u_char dstat) vdsp_base = np->scripth; vdsp_off = dsp - np->p_scripth - 8; nxtdsp = dsp; - }; + } /* ** log the information @@ -5691,13 +5691,13 @@ static void ncr_int_ma (ncb_p np, u_char dstat) printf ("P%x%x ",cmd&7, sbcl&7); printf ("RL=%d D=%d SS0=%x ", (unsigned) rest, (unsigned) delta, ss0); - }; + } if (DEBUG_FLAGS & DEBUG_PHASE) { printf ("\nCP=%p CP2=%p DSP=%x NXT=%x VDSP=%p CMD=%x ", cp, np->header.cp, dsp, nxtdsp, (volatile char*)vdsp_base+vdsp_off, cmd); - }; + } /* ** get old startaddress and old length. @@ -5712,7 +5712,7 @@ static void ncr_int_ma (ncb_p np, u_char dstat) } else { tblp = (u_int32_t *) 0; olen = READSCRIPT_OFF(vdsp_base, vdsp_off) & 0xffffff; - }; + } if (DEBUG_FLAGS & DEBUG_PHASE) { printf ("OCMD=%x\nTBLP=%p OLEN=%lx OADR=%lx\n", @@ -5720,7 +5720,7 @@ static void ncr_int_ma (ncb_p np, u_char dstat) (void *) tblp, (u_long) olen, (u_long) oadr); - }; + } /* ** if old phase not dataphase, leave here. @@ -5742,7 +5742,7 @@ static void ncr_int_ma (ncb_p np, u_char dstat) OUTB (nc_dcntl, np->rv_dcntl | STD); return; - }; + } /* ** choose the correct patch area. @@ -5799,12 +5799,12 @@ static int ncr_show_msg (u_char * msg) for (i=1;i<8;i++) { if (i-1>msg[1]) break; printf ("-%x",msg[i]); - }; + } return (i+1); } else if ((*msg & 0xf0) == 0x20) { printf ("-%x",msg[1]); return (2); - }; + } return (1); } @@ -5873,7 +5873,7 @@ static void ncr_int_sir (ncb_p np) break; if (DEBUG_FLAGS & DEBUG_RESTART) printf ("- (remove)"); tp->hold_cp = cp = (nccb_p) 0; - }; + } if (cp) { if (DEBUG_FLAGS & DEBUG_RESTART) @@ -5881,7 +5881,7 @@ static void ncr_int_sir (ncb_p np) OUTL (nc_dsa, CCB_PHYS (cp, phys)); OUTL (nc_dsp, NCB_SCRIPTH_PHYS (np, getcc)); return; - }; + } /* ** no job, resume normal processing @@ -6001,7 +6001,7 @@ static void ncr_int_sir (ncb_p np) PRINT_ADDR(cp->ccb); printf ("negotiation failed sir=%x status=%x.\n", num, cp->nego_status); - }; + } /* ** any error in negotiation: @@ -6017,7 +6017,7 @@ static void ncr_int_sir (ncb_p np) ncr_setwide (np, cp, 0, 0); break; - }; + } np->msgin [0] = MSG_NOOP; np->msgout[0] = MSG_NOOP; cp->nego_status = 0; @@ -6034,7 +6034,7 @@ static void ncr_int_sir (ncb_p np) printf ("sync msgin: "); (void) ncr_show_msg (np->msgin); printf (".\n"); - }; + } /* ** get requested values. @@ -6100,14 +6100,14 @@ static void ncr_int_sir (ncb_p np) */ ncr_setsync (np,cp,scntl3,(fak<<5)|ofs, per); OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, clrack)); - }; + } return; case NS_WIDE: ncr_setwide (np, cp, 0, 0); break; - }; - }; + } + } /* ** It was a request. Set value and @@ -6148,7 +6148,7 @@ static void ncr_int_sir (ncb_p np) printf ("wide msgin: "); (void) ncr_show_msg (np->msgin); printf (".\n"); - }; + } /* ** get requested values. @@ -6189,14 +6189,14 @@ static void ncr_int_sir (ncb_p np) */ ncr_setwide (np, cp, wide, 1); OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, clrack)); - }; + } return; case NS_SYNC: ncr_setsync (np, cp, 0, 0xe0, 0); break; - }; - }; + } + } /* ** It was a request, set value and @@ -6338,7 +6338,7 @@ static void ncr_int_sir (ncb_p np) */ OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, reselect)); return; - }; + } /* ** else remove the interrupt. @@ -6347,7 +6347,7 @@ static void ncr_int_sir (ncb_p np) device_printf(np->dev, "queue empty.\n"); WRITESCRIPT(start1[0], SCR_INT ^ IFFALSE (0)); break; - }; + } out: OUTB (nc_dcntl, np->rv_dcntl | STD); @@ -6643,7 +6643,7 @@ static int ncr_scatter csize -= size; datalen -= size; paddr = vtophys (vaddr); - }; + } if(DEBUG_FLAGS & DEBUG_SCATTER) printf ("\tseg #%d addr=%x size=%d (rest=%d).\n", @@ -6661,7 +6661,7 @@ static int ncr_scatter printf("ncr?: scatter/gather failed (residue=%d).\n", (unsigned) datalen); return (-1); - }; + } return (segment); } @@ -6697,7 +6697,7 @@ static int ncr_regtest (struct ncb* np) printf ("CACHE TEST FAILED: reg dstat-sstat2 readback %x.\n", (unsigned) data); return (0x10); - }; + } return (0); } #endif @@ -6753,7 +6753,7 @@ static int ncr_snooptest (struct ncb* np) if (i>=NCR_SNOOP_TIMEOUT) { printf ("CACHE TEST FAILED: timeout.\n"); return (0x20); - }; + } /* ** Check termination position. */ @@ -6763,7 +6763,7 @@ static int ncr_snooptest (struct ncb* np) (u_long) NCB_SCRIPTH_PHYS (np, snooptest), (u_long) pc, (u_long) NCB_SCRIPTH_PHYS (np, snoopend) +8); return (0x40); - }; + } /* ** Show results. */ @@ -6771,17 +6771,17 @@ static int ncr_snooptest (struct ncb* np) printf ("CACHE TEST FAILED: host wrote %d, ncr read %d.\n", (int) host_wr, (int) ncr_rd); err |= 1; - }; + } if (host_rd != ncr_wr) { printf ("CACHE TEST FAILED: ncr wrote %d, host read %d.\n", (int) ncr_wr, (int) host_rd); err |= 2; - }; + } if (ncr_bk != ncr_wr) { printf ("CACHE TEST FAILED: ncr wrote %d, read back %d.\n", (int) ncr_wr, (int) ncr_bk); err |= 4; - }; + } return (err); } diff --git a/sys/dev/nfe/if_nfe.c b/sys/dev/nfe/if_nfe.c index 0a37079..58fee0b 100644 --- a/sys/dev/nfe/if_nfe.c +++ b/sys/dev/nfe/if_nfe.c @@ -2590,7 +2590,7 @@ nfe_setmulti(struct nfe_softc *sc) bzero(addr, ETHER_ADDR_LEN); bzero(mask, ETHER_ADDR_LEN); goto done; - }; + } if_multiaddr_array(ifp, mta, &mcnt, mc_count); diff --git a/sys/dev/oce/oce_mbox.c b/sys/dev/oce/oce_mbox.c index 01bd4cf..cb2ae81 100644 --- a/sys/dev/oce/oce_mbox.c +++ b/sys/dev/oce/oce_mbox.c @@ -2113,7 +2113,7 @@ oce_get_profile_config(POCE_SOFTC sc, uint32_t max_rss) sc->nrssqs = MIN(sc->nrssqs, max_rss); else sc->nrssqs = max_rss; - sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */; + sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */ } error: @@ -2213,7 +2213,7 @@ oce_get_func_config(POCE_SOFTC sc) sc->nrssqs = MIN(sc->nrssqs, max_rss); else sc->nrssqs = max_rss; - sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */; + sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */ } error: oce_dma_free(sc, &dma); diff --git a/sys/dev/oce/oce_sysctl.c b/sys/dev/oce/oce_sysctl.c index 3df7d0d..61adf93 100644 --- a/sys/dev/oce/oce_sysctl.c +++ b/sys/dev/oce/oce_sysctl.c @@ -331,7 +331,7 @@ static void oce_fill_flash_img_data(POCE_SOFTC sc, const struct flash_sec_info * case IMG_PXEBIOS: pimg->optype = 3; if (IS_BE3(sc)) { - pimg->img_offset = 13107200;; + pimg->img_offset = 13107200; pimg->img_size = 524288; } break; diff --git a/sys/dev/ow/ow.c b/sys/dev/ow/ow.c index ea78890..f5b5c6b 100644 --- a/sys/dev/ow/ow.c +++ b/sys/dev/ow/ow.c @@ -413,7 +413,7 @@ again: foundfp(dev, probed); last_mask = probed; prior = last; - }; + } ow_release_bus(dev, dev); return (0); diff --git a/sys/dev/patm/if_patm_attach.c b/sys/dev/patm/if_patm_attach.c index ed48bda..29a2a87 100644 --- a/sys/dev/patm/if_patm_attach.c +++ b/sys/dev/patm/if_patm_attach.c @@ -189,7 +189,7 @@ patm_attach(device_t dev) IFP2IFATM(sc->ifp)->mib.hw_version = 0; IFP2IFATM(sc->ifp)->mib.sw_version = 0; IFP2IFATM(sc->ifp)->mib.vpi_bits = PATM_VPI_BITS; - IFP2IFATM(sc->ifp)->mib.vci_bits = 0; /* set below */; + IFP2IFATM(sc->ifp)->mib.vci_bits = 0; /* set below */ IFP2IFATM(sc->ifp)->mib.max_vpcs = 0; IFP2IFATM(sc->ifp)->mib.max_vccs = 0; /* set below */ IFP2IFATM(sc->ifp)->mib.media = IFM_ATM_UNKNOWN; diff --git a/sys/dev/pcf/pcf.c b/sys/dev/pcf/pcf.c index f9252b5..cf2b65d 100644 --- a/sys/dev/pcf/pcf.c +++ b/sys/dev/pcf/pcf.c @@ -466,7 +466,7 @@ pcf_read(device_t dev, char *buf, int len, int *read, int last, len --; bytes ++; - }; + } error: *read = bytes; diff --git a/sys/dev/pdq/pdq.c b/sys/dev/pdq/pdq.c index 2f44439..4fb98db 100644 --- a/sys/dev/pdq/pdq.c +++ b/sys/dev/pdq/pdq.c @@ -1291,7 +1291,7 @@ pdq_stop( pdq->pdq_intrmask = 0; /* PDQ_HOST_INT_STATE_CHANGE |PDQ_HOST_INT_FATAL_ERROR|PDQ_HOST_INT_CMD_RSP_ENABLE - |PDQ_HOST_INT_UNSOL_ENABLE */; + |PDQ_HOST_INT_UNSOL_ENABLE */ PDQ_CSR_WRITE(csrs, csr_host_int_enable, pdq->pdq_intrmask); /* diff --git a/sys/dev/qlxgbe/ql_hw.c b/sys/dev/qlxgbe/ql_hw.c index 3ae3f38..bbe774b 100644 --- a/sys/dev/qlxgbe/ql_hw.c +++ b/sys/dev/qlxgbe/ql_hw.c @@ -3434,7 +3434,7 @@ qla_iscsi_pdu(qla_host_t *ha, struct mbuf *mp) offset = hdrlen + 4; if (mp->m_len >= offset) { - th = (struct tcphdr *)(mp->m_data + hdrlen);; + th = (struct tcphdr *)(mp->m_data + hdrlen); } else { m_copydata(mp, hdrlen, 4, buf); th = (struct tcphdr *)buf; @@ -3458,7 +3458,7 @@ qla_iscsi_pdu(qla_host_t *ha, struct mbuf *mp) offset = hdrlen + 4; if (mp->m_len >= offset) { - th = (struct tcphdr *)(mp->m_data + hdrlen);; + th = (struct tcphdr *)(mp->m_data + hdrlen); } else { m_copydata(mp, hdrlen, 4, buf); th = (struct tcphdr *)buf; diff --git a/sys/dev/ral/rt2860.c b/sys/dev/ral/rt2860.c index 8bfb00d..c50c14d 100644 --- a/sys/dev/ral/rt2860.c +++ b/sys/dev/ral/rt2860.c @@ -3448,7 +3448,7 @@ rt2860_read_eeprom(struct rt2860_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN]) sc->ext_5ghz_lna = (val >> 3) & 1; sc->ext_2ghz_lna = (val >> 2) & 1; /* check if RF supports automatic Tx access gain control */ - sc->calib_2ghz = sc->calib_5ghz = 0; /* XXX (val >> 1) & 1 */; + sc->calib_2ghz = sc->calib_5ghz = 0; /* XXX (val >> 1) & 1 */ /* check if we have a hardware radio switch */ sc->rfswitch = val & 1; } diff --git a/sys/dev/rt/if_rt.c b/sys/dev/rt/if_rt.c index ff08748..fd042fe 100644 --- a/sys/dev/rt/if_rt.c +++ b/sys/dev/rt/if_rt.c @@ -460,7 +460,7 @@ rt_attach(device_t dev) sc->rx_drx_idx[0]=PDMA_BASE+RX_DRX_IDX0; sc->int_rx_done_mask=INT_RX_DONE; sc->int_tx_done_mask=INT_TXQ0_DONE; - }; + } /* allocate Tx and Rx rings */ for (i = 0; i < RT_SOFTC_TX_RING_COUNT; i++) { diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c index e741dd0d..71f7772 100644 --- a/sys/dev/sound/midi/midi.c +++ b/sys/dev/sound/midi/midi.c @@ -669,7 +669,7 @@ midi_open(struct cdev *i_dev, int flags, int mode, struct thread *td) * from a previous session */ MIDIQ_CLEAR(m->inq); - }; + } if (flags & FWRITE) m->flags |= M_TX; @@ -1126,7 +1126,7 @@ midisynth_open(void *n, void *arg, int flags) */ MIDIQ_CLEAR(m->inq); m->rchan = 0; - }; + } if (flags & FWRITE) { m->flags |= M_TX; diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c index a1b9f7c..b4c021b 100644 --- a/sys/dev/sound/pci/hda/hdaa.c +++ b/sys/dev/sound/pci/hda/hdaa.c @@ -779,7 +779,7 @@ hdaa_sense_init(struct hdaa_devinfo *devinfo) (w->unsol < 0) ? "polling" : "unsolicited responses"); ); - }; + } } hdaa_presence_handler(w); if (!HDA_PARAM_PIN_CAP_DP(w->wclass.pin.cap) && @@ -847,7 +847,7 @@ hdaa_widget_pin_patch(uint32_t config, const char *str) if (bad[0] == 0) { config |= ((ival << HDA_CONFIG_DEFAULTCONF_COLOR_SHIFT) & HDA_CONFIG_DEFAULTCONF_COLOR_MASK); - }; + } for (i = 0; i < 16; i++) { if (strcasecmp(HDA_COLORS[i], value) == 0) { config |= (i << HDA_CONFIG_DEFAULTCONF_COLOR_SHIFT); @@ -872,7 +872,7 @@ hdaa_widget_pin_patch(uint32_t config, const char *str) config |= ((ival << HDA_CONFIG_DEFAULTCONF_DEVICE_SHIFT) & HDA_CONFIG_DEFAULTCONF_DEVICE_MASK); continue; - }; + } for (i = 0; i < 16; i++) { if (strcasecmp(HDA_DEVS[i], value) == 0) { config |= (i << HDA_CONFIG_DEFAULTCONF_DEVICE_SHIFT); @@ -898,7 +898,7 @@ hdaa_widget_pin_patch(uint32_t config, const char *str) config |= ((ival << HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_SHIFT) & HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK); continue; - }; + } for (i = 0; i < 4; i++) { if (strcasecmp(HDA_CONNS[i], value) == 0) { config |= (i << HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_SHIFT); diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c index 491aa54..43a0e9d 100644 --- a/sys/dev/sym/sym_hipd.c +++ b/sys/dev/sym/sym_hipd.c @@ -2025,7 +2025,7 @@ static void sym_fw_bind_script (hcb_p np, u32 *start, int len) MDELAY (10000); ++cur; continue; - }; + } /* * We use the bogus value 0xf00ff00f ;-) @@ -2114,7 +2114,7 @@ static void sym_fw_bind_script (hcb_p np, u32 *start, int len) default: relocs = 0; break; - }; + } /* * Scriptify:) the opcode. @@ -2170,7 +2170,7 @@ static void sym_fw_bind_script (hcb_p np, u32 *start, int len) *cur++ = cpu_to_scr(new); } - }; + } } /*---------------------------------------------------------------------------*/ @@ -2867,7 +2867,7 @@ static int sym_prepare_nego(hcb_p np, ccb_p cp, int nego, u_char *msgptr) msgptr[msglen++] = tp->tinfo.goal.width; msgptr[msglen++] = tp->tinfo.goal.options & PPR_OPT_DT; break; - }; + } cp->nego_status = nego; @@ -2877,8 +2877,8 @@ static int sym_prepare_nego(hcb_p np, ccb_p cp, int nego, u_char *msgptr) sym_print_msg(cp, nego == NS_SYNC ? "sync msgout" : nego == NS_WIDE ? "wide msgout" : "ppr msgout", msgptr); - }; - }; + } + } return msglen; } @@ -3827,7 +3827,7 @@ static void sym_intr1 (hcb_p np) istat = INB (nc_istat); /* DUMMY READ */ if (DEBUG_FLAGS & DEBUG_TINY) printf ("F "); (void)sym_wakeup_done (np); - }; + } if (!(istat & (SIP|DIP))) return; @@ -3892,7 +3892,7 @@ static void sym_intr1 (hcb_p np) else if (dstat & SSI) OUTONB_STD (); else goto unknown_int; return; - }; + } /* * Now, interrupts that donnot happen in normal @@ -3910,7 +3910,7 @@ static void sym_intr1 (hcb_p np) printf("SCSI BUS reset detected.\n"); sym_init (np, 1); return; - }; + } OUTB (nc_ctest3, np->rv_ctest3 | CLF); /* clear dma fifo */ OUTB (nc_stest3, TE|CSF); /* clear scsi fifo */ @@ -3922,7 +3922,7 @@ static void sym_intr1 (hcb_p np) else if (sist & UDC) sym_int_udc (np); else goto unknown_int; return; - }; + } /* * Now, interrupts we are not able to recover cleanly. @@ -3937,7 +3937,7 @@ static void sym_intr1 (hcb_p np) (dstat & (MDPE|BF|ABRT|IID))) { sym_start_reset(np); return; - }; + } unknown_int: /* @@ -4274,7 +4274,7 @@ static void sym_int_ma (hcb_p np) if (ss2 & OLF1) rest++; if (!(np->features & FE_C10)) if (ss2 & ORF1) rest++; - }; + } /* * Clear fifos. @@ -4313,7 +4313,7 @@ static void sym_int_ma (hcb_p np) if (DEBUG_FLAGS & DEBUG_PHASE) { printf ("\nCP=%p DSP=%x NXT=%x VDSP=%p CMD=%x ", cp, (unsigned)dsp, (unsigned)nxtdsp, vdsp, cmd); - }; + } if (!vdsp) { printf ("%s: interrupted SCRIPT address not found.\n", @@ -4339,7 +4339,7 @@ static void sym_int_ma (hcb_p np) } else { tblp = (u32 *) 0; olen = scr_to_cpu(vdsp[0]) & 0xffffff; - }; + } if (DEBUG_FLAGS & DEBUG_PHASE) { printf ("OCMD=%x\nTBLP=%p OLEN=%x OADR=%x\n", @@ -4347,7 +4347,7 @@ static void sym_int_ma (hcb_p np) tblp, (unsigned) olen, (unsigned) oadr); - }; + } /* * check cmd against assumed interrupted script command. @@ -4360,7 +4360,7 @@ static void sym_int_ma (hcb_p np) (unsigned)cmd, (unsigned)scr_to_cpu(vdsp[0]) >> 24); goto reset_all; - }; + } /* * if old phase not dataphase, leave here. @@ -4371,7 +4371,7 @@ static void sym_int_ma (hcb_p np) cmd&7, INB(nc_sbcl)&7, (unsigned)olen, (unsigned)oadr, (unsigned)rest); goto unexpected_phase; - }; + } /* * Choose the correct PM save area. @@ -5541,12 +5541,12 @@ static int sym_show_msg (u_char * msg) for (i=1;i<8;i++) { if (i-1>msg[1]) break; printf ("-%x",msg[i]); - }; + } return (i+1); } else if ((*msg & 0xf0) == 0x20) { printf ("-%x",msg[1]); return (2); - }; + } return (1); } @@ -5607,7 +5607,7 @@ static void sym_sync_nego(hcb_p np, tcb_p tp, ccb_p cp) */ if (DEBUG_FLAGS & DEBUG_NEGO) { sym_print_msg(cp, "sync msgin", np->msgin); - }; + } /* * request or answer ? @@ -5708,7 +5708,7 @@ static void sym_ppr_nego(hcb_p np, tcb_p tp, ccb_p cp) */ if (DEBUG_FLAGS & DEBUG_NEGO) { sym_print_msg(cp, "ppr msgin", np->msgin); - }; + } /* * get requested values. @@ -5847,7 +5847,7 @@ static void sym_wide_nego(hcb_p np, tcb_p tp, ccb_p cp) */ if (DEBUG_FLAGS & DEBUG_NEGO) { sym_print_msg(cp, "wide msgin", np->msgin); - }; + } /* * Is it a request from the device? @@ -5912,7 +5912,7 @@ static void sym_wide_nego(hcb_p np, tcb_p tp, ccb_p cp) OUTL_DSP (SCRIPTA_BA (np, clrack)); return; - }; + } /* * It was a request, set value and @@ -5972,7 +5972,7 @@ static void sym_nego_default(hcb_p np, tcb_p tp, ccb_p cp) case NS_WIDE: sym_setwide (np, cp, 0); break; - }; + } np->msgin [0] = M_NOOP; np->msgout[0] = M_NOOP; cp->nego_status = 0; @@ -6237,7 +6237,7 @@ static void sym_int_sir (hcb_p np) case SIR_NEGO_PROTO: sym_nego_default(np, tp, cp); goto out; - }; + } out: OUTONB_STD (); @@ -6719,7 +6719,7 @@ static int sym_regtest (hcb_p np) printf ("CACHE TEST FAILED: reg dstat-sstat2 readback %x.\n", (unsigned) data); return (0x10); - }; + } return (0); } #endif @@ -6763,7 +6763,7 @@ restart_test: if (i>=SYM_SNOOP_TIMEOUT) { printf ("CACHE TEST FAILED: timeout.\n"); return (0x20); - }; + } /* * Check for fatal DMA errors. */ @@ -6801,7 +6801,7 @@ restart_test: (u_long) SCRIPTB0_BA (np, snooptest), (u_long) pc, (u_long) SCRIPTB0_BA (np, snoopend) +8); return (0x40); - }; + } /* * Show results. */ @@ -6809,17 +6809,17 @@ restart_test: printf ("CACHE TEST FAILED: host wrote %d, chip read %d.\n", (int) host_wr, (int) sym_rd); err |= 1; - }; + } if (host_rd != sym_wr) { printf ("CACHE TEST FAILED: chip wrote %d, host read %d.\n", (int) sym_wr, (int) host_rd); err |= 2; - }; + } if (sym_bk != sym_wr) { printf ("CACHE TEST FAILED: chip wrote %d, read back %d.\n", (int) sym_wr, (int) sym_bk); err |= 4; - }; + } return (err); } @@ -8734,7 +8734,7 @@ sym_pci_attach(device_t dev) if (sym_snooptest (np)) { device_printf(dev, "CACHE INCORRECTLY CONFIGURED.\n"); goto attach_failed; - }; + } /* * Now deal with CAM. diff --git a/sys/dev/tdfx/tdfx_pci.c b/sys/dev/tdfx/tdfx_pci.c index 918857a..be42375 100644 --- a/sys/dev/tdfx/tdfx_pci.c +++ b/sys/dev/tdfx/tdfx_pci.c @@ -127,7 +127,7 @@ tdfx_probe(device_t dev) case PCI_DEVICE_3DFX_VOODOO1: device_set_desc(dev, "3DFX Voodoo Graphics 3D Accelerator"); return BUS_PROBE_DEFAULT; - }; + } return ENXIO; } diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c index eba7f7b..23ed50b 100644 --- a/sys/dev/ti/if_ti.c +++ b/sys/dev/ti/if_ti.c @@ -1720,7 +1720,7 @@ ti_init_rx_ring_std(struct ti_softc *sc) for (i = 0; i < TI_STD_RX_RING_CNT; i++) { if (ti_newbuf_std(sc, i) != 0) return (ENOBUFS); - }; + } sc->ti_std = TI_STD_RX_RING_CNT - 1; TI_UPDATE_STDPROD(sc, TI_STD_RX_RING_CNT - 1); @@ -1758,7 +1758,7 @@ ti_init_rx_ring_jumbo(struct ti_softc *sc) for (i = 0; i < TI_JUMBO_RX_RING_CNT; i++) { if (ti_newbuf_jumbo(sc, i, NULL) != 0) return (ENOBUFS); - }; + } sc->ti_jumbo = TI_JUMBO_RX_RING_CNT - 1; TI_UPDATE_JUMBOPROD(sc, TI_JUMBO_RX_RING_CNT - 1); @@ -1795,7 +1795,7 @@ ti_init_rx_ring_mini(struct ti_softc *sc) for (i = 0; i < TI_MINI_RX_RING_CNT; i++) { if (ti_newbuf_mini(sc, i) != 0) return (ENOBUFS); - }; + } sc->ti_mini = TI_MINI_RX_RING_CNT - 1; TI_UPDATE_MINIPROD(sc, TI_MINI_RX_RING_CNT - 1); diff --git a/sys/dev/uart/uart_dev_msm.c b/sys/dev/uart/uart_dev_msm.c index 7ba46ac..cfd2330 100644 --- a/sys/dev/uart/uart_dev_msm.c +++ b/sys/dev/uart/uart_dev_msm.c @@ -123,7 +123,7 @@ msm_uart_param(struct uart_bas *bas, int baudrate, int databits, } uart_setreg(bas, UART_DM_MR2, ulcon); - /* Set 115200 for both TX and RX. */; + /* Set 115200 for both TX and RX. */ uart_setreg(bas, UART_DM_CSR, UART_DM_CSR_115200); uart_barrier(bas); diff --git a/sys/dev/usb/net/if_mos.c b/sys/dev/usb/net/if_mos.c index 1f92629..3a65ec6 100644 --- a/sys/dev/usb/net/if_mos.c +++ b/sys/dev/usb/net/if_mos.c @@ -608,7 +608,7 @@ mos_setmulti(struct usb_ether *ue) if (ifma->ifma_addr->sa_family != AF_LINK) { allmulti = 1; continue; - }; + } h = ether_crc32_be(LLADDR((struct sockaddr_dl *) ifma->ifma_addr), ETHER_ADDR_LEN) >> 26; hashtbl[h / 8] |= 1 << (h % 8); diff --git a/sys/dev/usb/net/if_ure.c b/sys/dev/usb/net/if_ure.c index 4d215f8..9d7f47a 100644 --- a/sys/dev/usb/net/if_ure.c +++ b/sys/dev/usb/net/if_ure.c @@ -419,7 +419,7 @@ ure_probe(device_t dev) { struct usb_attach_arg *uaa; - uaa = device_get_ivars(dev);; + uaa = device_get_ivars(dev); if (uaa->usb_mode != USB_MODE_HOST) return (ENXIO); if (uaa->info.bConfigIndex != URE_CONFIG_IDX) diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c index 40be782..2884c57 100644 --- a/sys/dev/vt/vt_core.c +++ b/sys/dev/vt/vt_core.c @@ -709,7 +709,7 @@ vt_machine_kbdevent(int c) /* Suspend machine. */ power_pm_suspend(POWER_SLEEP_STATE_SUSPEND); return (1); - }; + } return (0); } diff --git a/sys/fs/nandfs/nandfs_segment.c b/sys/fs/nandfs/nandfs_segment.c index 22fb7cd..38019ef 100644 --- a/sys/fs/nandfs/nandfs_segment.c +++ b/sys/fs/nandfs/nandfs_segment.c @@ -199,7 +199,7 @@ delete_segment(struct nandfs_seginfo *seginfo) TAILQ_REMOVE(&seg->segsum, bp, b_cluster.cluster_entry); bp->b_flags &= ~B_MANAGED; brelse(bp); - }; + } LIST_REMOVE(seg, seg_link); free(seg, M_DEVBUF); @@ -752,7 +752,7 @@ nandfs_clean_segblocks(struct nandfs_segment *seg, uint8_t unlock) TAILQ_FOREACH_SAFE(bp, &seg->segsum, b_cluster.cluster_entry, tbp) { TAILQ_REMOVE(&seg->segsum, bp, b_cluster.cluster_entry); nandfs_clean_buf(fsdev, bp); - }; + } TAILQ_FOREACH_SAFE(bp, &seg->data, b_cluster.cluster_entry, tbp) { TAILQ_REMOVE(&seg->data, bp, b_cluster.cluster_entry); @@ -807,7 +807,7 @@ nandfs_save_segblocks(struct nandfs_segment *seg, uint8_t unlock) goto out; } i++; - }; + } i = 0; TAILQ_FOREACH_SAFE(bp, &seg->data, b_cluster.cluster_entry, tbp) { diff --git a/sys/fs/nfs/nfs_commonacl.c b/sys/fs/nfs/nfs_commonacl.c index 0201e2d..d6ba742 100644 --- a/sys/fs/nfs/nfs_commonacl.c +++ b/sys/fs/nfs/nfs_commonacl.c @@ -436,7 +436,7 @@ nfsrv_buildacl(struct nfsrv_descript *nd, NFSACL_T *aclp, enum vtype type, break; default: continue; - }; + } retlen += nfsrv_buildace(nd, name, namelen, type, isgroup, isowner, &aclp->acl_entry[i]); entrycnt++; @@ -505,7 +505,7 @@ nfsrv_compareacl(NFSACL_T *aclp1, NFSACL_T *aclp2) case ACL_OTHER: if (acep1->ae_perm != acep2->ae_perm) return (1); - }; + } acep1++; acep2++; } diff --git a/sys/fs/nfs/nfs_commonport.c b/sys/fs/nfs/nfs_commonport.c index a22b38c..a62a222 100644 --- a/sys/fs/nfs/nfs_commonport.c +++ b/sys/fs/nfs/nfs_commonport.c @@ -337,7 +337,7 @@ nfsvno_pathconf(struct vnode *vp, int flag, register_t *retf, */ *retf = 0; printf("nfsrvd pathconf flag=%d not supp\n", flag); - }; + } error = 0; } NFSEXITCODE(error); diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c index 16d91af..0d46d95 100644 --- a/sys/fs/nfs/nfs_commonsubs.c +++ b/sys/fs/nfs/nfs_commonsubs.c @@ -507,7 +507,7 @@ nfsm_fhtom(struct nfsrv_descript *nd, u_int8_t *fhp, int size, int set_true) } (void) nfsm_strtom(nd, fhp, size); break; - }; + } return (bytesize); } @@ -544,7 +544,7 @@ nfsaddr_match(int family, union nethostaddr *haddr, NFSSOCKADDR_T nam) } break; #endif - }; + } return (0); } @@ -581,7 +581,7 @@ nfsaddr2_match(NFSSOCKADDR_T nam1, NFSSOCKADDR_T nam2) } break; #endif - }; + } return (0); } @@ -1774,7 +1774,7 @@ nfsv4_loadattr(struct nfsrv_descript *nd, vnode_t vp, */ bitpos = NFSATTRBIT_MAX; break; - }; + } } /* @@ -2508,7 +2508,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp, break; default: printf("EEK! Bad V4 attribute bitpos=%d\n", bitpos); - }; + } } } if (naclp != NULL) diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c index 3498dc0..567e326 100644 --- a/sys/fs/nfsclient/nfs_clbio.c +++ b/sys/fs/nfsclient/nfs_clbio.c @@ -681,7 +681,7 @@ ncl_bioread(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *cred) ncl_printf(" ncl_bioread: type %x unexpected\n", vp->v_type); bp = NULL; break; - }; + } if (n > 0) { error = vn_io_fault_uiomove(bp->b_data + on, (int)n, uio); @@ -1664,7 +1664,7 @@ ncl_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td, default: ncl_printf("ncl_doio: type %x unexpected\n", vp->v_type); break; - }; + } if (error) { bp->b_ioflags |= BIO_ERROR; bp->b_error = error; diff --git a/sys/fs/nfsclient/nfs_clport.c b/sys/fs/nfsclient/nfs_clport.c index eaa445b..c063de1 100644 --- a/sys/fs/nfsclient/nfs_clport.c +++ b/sys/fs/nfsclient/nfs_clport.c @@ -925,7 +925,7 @@ nfscl_fillsattr(struct nfsrv_descript *nd, struct vattr *vap, (void) nfsv4_fillattr(nd, vp->v_mount, vp, NULL, vap, NULL, 0, &attrbits, NULL, NULL, 0, 0, 0, 0, (uint64_t)0); break; - }; + } } /* diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c index a7d47f0..cd12fba 100644 --- a/sys/fs/nfsclient/nfs_clrpcops.c +++ b/sys/fs/nfsclient/nfs_clrpcops.c @@ -487,7 +487,7 @@ nfsrpc_openrpc(struct nfsmount *nmp, vnode_t vp, u_int8_t *nfhp, int fhlen, default: error = NFSERR_BADXDR; goto nfsmout; - }; + } } else { ndp->nfsdl_flags = NFSCLDL_READ; } @@ -2086,7 +2086,7 @@ nfsrpc_createv4(vnode_t dvp, char *name, int namelen, struct vattr *vap, default: error = NFSERR_BADXDR; goto nfsmout; - }; + } } else { dp->nfsdl_flags = NFSCLDL_READ; } @@ -3698,7 +3698,7 @@ nfsrpc_advlock(vnode_t vp, off_t size, int op, struct flock *fl, break; default: return (EINVAL); - }; + } if (start < 0) return (EINVAL); if (fl->l_len != 0) { diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index 2600b80..a49e93f 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -1297,7 +1297,7 @@ nfscl_checkwritelocked(vnode_t vp, struct flock *fl, break; default: return (1); - }; + } if (fl->l_len != 0) { end = off + fl->l_len; if (end < off) @@ -3507,7 +3507,7 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p) error = NFSERR_NOTSUPP; } break; - }; + } if (error) { if (error == EBADRPC || error == NFSERR_BADXDR) { nd->nd_repstat = NFSERR_BADXDR; diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index 6aee675..4487b2a 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -974,7 +974,7 @@ nfs_setattr(struct vop_setattr_args *ap) mtx_lock(&np->n_mtx); np->n_vattr.na_size = np->n_size = vap->va_size; mtx_unlock(&np->n_mtx); - }; + } } else { mtx_lock(&np->n_mtx); if ((vap->va_mtime.tv_sec != VNOVAL || vap->va_atime.tv_sec != VNOVAL) && diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c index edbcb35..44ae88e 100644 --- a/sys/fs/nfsserver/nfs_nfsdport.c +++ b/sys/fs/nfsserver/nfs_nfsdport.c @@ -2370,7 +2370,7 @@ nfsrv_sattr(struct nfsrv_descript *nd, vnode_t vp, struct nfsvattr *nvap, vfs_timestamp(&nvap->na_atime); nvap->na_vaflags |= VA_UTIMES_NULL; break; - }; + } NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); switch (fxdr_unsigned(int, *tl)) { case NFSV3SATTRTIME_TOCLIENT: @@ -2383,11 +2383,11 @@ nfsrv_sattr(struct nfsrv_descript *nd, vnode_t vp, struct nfsvattr *nvap, if (!toclient) nvap->na_vaflags |= VA_UTIMES_NULL; break; - }; + } break; case ND_NFSV4: error = nfsv4_sattr(nd, vp, nvap, attrbitp, aclp, p); - }; + } nfsmout: NFSEXITCODE2(error, nd); return (error); @@ -2585,7 +2585,7 @@ nfsv4_sattr(struct nfsrv_descript *nd, vnode_t vp, struct nfsvattr *nvap, */ bitpos = NFSATTRBIT_MAX; break; - }; + } } /* diff --git a/sys/fs/nfsserver/nfs_nfsdserv.c b/sys/fs/nfsserver/nfs_nfsdserv.c index bd054c4..2a0c9cf 100644 --- a/sys/fs/nfsserver/nfs_nfsdserv.c +++ b/sys/fs/nfsserver/nfs_nfsdserv.c @@ -1024,7 +1024,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram, break; default: break; - }; + } } else { NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED); how = fxdr_unsigned(int, *tl); @@ -1041,7 +1041,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram, cverf[1] = *tl; exclusive_flag = 1; break; - }; + } NFSVNO_SETATTRVAL(&nva, type, VREG); } } @@ -1088,7 +1088,7 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram, if (named.ni_vp == NULL) NFSVNO_SETATTRVAL(&nva, mode, 0); break; - }; + } } /* @@ -2206,7 +2206,7 @@ nfsrvd_lock(struct nfsrv_descript *nd, __unused int isdgram, default: nd->nd_repstat = NFSERR_BADXDR; goto nfsmout; - }; + } if (*tl++ == newnfs_true) flags |= NFSLCK_RECLAIM; offset = fxdr_hyper(tl); @@ -2400,7 +2400,7 @@ nfsrvd_lockt(struct nfsrv_descript *nd, __unused int isdgram, default: nd->nd_repstat = NFSERR_BADXDR; goto nfsmout; - }; + } lo.lo_first = fxdr_hyper(tl); tl += 2; len = fxdr_hyper(tl); @@ -2509,7 +2509,7 @@ nfsrvd_locku(struct nfsrv_descript *nd, __unused int isdgram, free(stp, M_NFSDSTATE); free(lop, M_NFSDLOCK); goto nfsmout; - }; + } stp->ls_ownerlen = 0; stp->ls_uid = nd->nd_cred->cr_uid; stp->ls_seq = fxdr_unsigned(int, *tl++); @@ -2645,7 +2645,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, default: /* nd_repstat will be set to NFSERR_INVAL below. */ break; - }; + } } switch (i) { case NFSV4OPEN_ACCESSREAD: @@ -2659,7 +2659,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, break; default: nd->nd_repstat = NFSERR_INVAL; - }; + } i = fxdr_unsigned(int, *tl++); switch (i) { case NFSV4OPEN_DENYNONE: @@ -2675,7 +2675,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, break; default: nd->nd_repstat = NFSERR_INVAL; - }; + } clientid.lval[0] = *tl++; clientid.lval[1] = *tl; if ((nd->nd_flag & ND_IMPLIEDCLID) != 0) { @@ -2750,7 +2750,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, default: nd->nd_repstat = NFSERR_BADXDR; goto nfsmout; - }; + } } else if (create != NFSV4OPEN_NOCREATE) { nd->nd_repstat = NFSERR_BADXDR; goto nfsmout; @@ -2832,7 +2832,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, case NFSCREATE_EXCLUSIVE41: exclusive_flag = 1; break; - }; + } } nfsvno_open(nd, &named, clientid, &stateid, stp, &exclusive_flag, &nva, cverf, create, aclp, &attrbits, @@ -2853,7 +2853,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram, default: nd->nd_repstat = NFSERR_BADXDR; goto nfsmout; - }; + } stp->ls_flags |= NFSLCK_RECLAIM; } else { /* CLAIM_NULL_FH */ @@ -3247,7 +3247,7 @@ nfsrvd_opendowngrade(struct nfsrv_descript *nd, __unused int isdgram, break; default: nd->nd_repstat = NFSERR_BADXDR; - }; + } i = fxdr_unsigned(int, *tl); switch (i) { case NFSV4OPEN_DENYNONE: @@ -3263,7 +3263,7 @@ nfsrvd_opendowngrade(struct nfsrv_descript *nd, __unused int isdgram, break; default: nd->nd_repstat = NFSERR_BADXDR; - }; + } clientid.lval[0] = stp->ls_stateid.other[0]; clientid.lval[1] = stp->ls_stateid.other[1]; diff --git a/sys/fs/nfsserver/nfs_nfsdsocket.c b/sys/fs/nfsserver/nfs_nfsdsocket.c index 4497161..4e995c1 100644 --- a/sys/fs/nfsserver/nfs_nfsdsocket.c +++ b/sys/fs/nfsserver/nfs_nfsdsocket.c @@ -992,7 +992,7 @@ nfsrvd_compound(struct nfsrv_descript *nd, int isdgram, u_char *tag, NULL, p, &vpnes); } } - }; + } if (error) { if (error == EBADRPC || error == NFSERR_BADXDR) { nd->nd_repstat = NFSERR_BADXDR; diff --git a/sys/fs/nfsserver/nfs_nfsdsubs.c b/sys/fs/nfsserver/nfs_nfsdsubs.c index c0421e3..c177f45 100644 --- a/sys/fs/nfsserver/nfs_nfsdsubs.c +++ b/sys/fs/nfsserver/nfs_nfsdsubs.c @@ -1814,7 +1814,7 @@ nfsrv_putreferralattr(struct nfsrv_descript *nd, nfsattrbit_t *retbitp, break; default: printf("EEK! Bad V4 refattr bitpos=%d\n", bitpos); - }; + } } } *retnump = txdr_unsigned(retnum); diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c index 4de3827..f549160 100644 --- a/sys/fs/smbfs/smbfs_io.c +++ b/sys/fs/smbfs/smbfs_io.c @@ -342,7 +342,7 @@ smbfs_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td default: printf("smbfs_doio: type %x unexpected\n",vp->v_type); break; - }; + } if (error) { bp->b_error = error; bp->b_ioflags |= BIO_ERROR; diff --git a/sys/fs/smbfs/smbfs_subr.c b/sys/fs/smbfs/smbfs_subr.c index 4e9f77d..a97fb80 100644 --- a/sys/fs/smbfs/smbfs_subr.c +++ b/sys/fs/smbfs/smbfs_subr.c @@ -59,7 +59,6 @@ void smb_time_server2local(u_long seconds, int tzoff, struct timespec *tsp) { tsp->tv_sec = seconds + tzoff * 60; - /*+ tz_minuteswest * 60 + (wall_cmos_clock ? adjkerntz : 0)*/; } /* diff --git a/sys/fs/smbfs/smbfs_vnops.c b/sys/fs/smbfs/smbfs_vnops.c index c78ceb2..1c762b0 100644 --- a/sys/fs/smbfs/smbfs_vnops.c +++ b/sys/fs/smbfs/smbfs_vnops.c @@ -341,7 +341,7 @@ smbfs_setattr(ap) default: error = EINVAL; goto out; - }; + } if (isreadonly) { error = EROFS; goto out; diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c index fcc8782..72e8792 100644 --- a/sys/fs/tmpfs/tmpfs_subr.c +++ b/sys/fs/tmpfs/tmpfs_subr.c @@ -945,7 +945,7 @@ tmpfs_dir_attach_dup(struct tmpfs_node *dnode, LIST_INSERT_BEFORE(de, nde, uh.td_dup.index_entries); LIST_INSERT_HEAD(duphead, nde, uh.td_dup.entries); return; - }; + } } /* diff --git a/sys/fs/unionfs/union_subr.c b/sys/fs/unionfs/union_subr.c index 951d775..6f53473 100644 --- a/sys/fs/unionfs/union_subr.c +++ b/sys/fs/unionfs/union_subr.c @@ -1238,7 +1238,7 @@ unionfs_checkuppervp(struct vnode *vp, char *fil, int lno) "unionfs_checkuppervp: on non-unionfs-node.\n"); #endif panic("unionfs_checkuppervp"); - }; + } #endif return (unp->un_uppervp); } @@ -1258,7 +1258,7 @@ unionfs_checklowervp(struct vnode *vp, char *fil, int lno) "unionfs_checklowervp: on non-unionfs-node.\n"); #endif panic("unionfs_checklowervp"); - }; + } #endif return (unp->un_lowervp); } diff --git a/sys/geom/raid/md_promise.c b/sys/geom/raid/md_promise.c index 2d161e7..42ae947 100644 --- a/sys/geom/raid/md_promise.c +++ b/sys/geom/raid/md_promise.c @@ -290,7 +290,7 @@ promise_meta_unused_range(struct promise_raid_conf **metaarr, int nsd, metaarr[i]->disk_sectors; csize = sectors - coff; i++; - }; + } return ((*size > 0) ? 1 : 0); } diff --git a/sys/geom/sched/g_sched.c b/sys/geom/sched/g_sched.c index d4e3ca0..192f5c5 100644 --- a/sys/geom/sched/g_sched.c +++ b/sys/geom/sched/g_sched.c @@ -742,7 +742,7 @@ g_gsched_modevent(module_t mod, int cmd, void *arg) G_SCHED_DEBUG(0, "Unloaded module %s error %d.", gsp->gs_name, error); break; - }; + } return (error); } diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 4320b14..a0f624e 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -1420,7 +1420,7 @@ vn_stat(vp, sb, active_cred, file_cred, td) break; default: return (EBADF); - }; + } sb->st_mode = mode; sb->st_nlink = vap->va_nlink; sb->st_uid = vap->va_uid; diff --git a/sys/kgssapi/gss_impl.c b/sys/kgssapi/gss_impl.c index 3a427a5..38930d7 100644 --- a/sys/kgssapi/gss_impl.c +++ b/sys/kgssapi/gss_impl.c @@ -323,7 +323,7 @@ kgssapi_modevent(module_t mod, int type, void *data) /* FALLTHROUGH */ default: error = EOPNOTSUPP; - }; + } return (error); } static moduledata_t kgssapi_mod = { diff --git a/sys/mips/mips/db_disasm.c b/sys/mips/mips/db_disasm.c index 14788ed..108c9dd 100644 --- a/sys/mips/mips/db_disasm.c +++ b/sys/mips/mips/db_disasm.c @@ -226,7 +226,7 @@ md_printins(int ins, int mdbdot) default: db_printf("\t%s,%s,%s", reg_name[i.RType.rd], reg_name[i.RType.rs], reg_name[i.RType.rt]); - }; + } break; case OP_BCOND: @@ -288,7 +288,7 @@ md_printins(int ins, int mdbdot) default: db_printf("%s", c0_opname[i.FRType.func]); - }; + } break; case OP_COP1: @@ -323,7 +323,7 @@ md_printins(int ins, int mdbdot) db_printf("%s.%s\tf%d,f%d,f%d", cop1_name[i.FRType.func], fmt_name[i.FRType.fmt], i.FRType.fd, i.FRType.fs, i.FRType.ft); - }; + } break; case OP_J: diff --git a/sys/mips/mips/db_trace.c b/sys/mips/mips/db_trace.c index 445600c..1359a53 100644 --- a/sys/mips/mips/db_trace.c +++ b/sys/mips/mips/db_trace.c @@ -260,7 +260,7 @@ loop: case OP_SYSCALL: case OP_BREAK: more = 1; /* stop now */ - }; + } break; case OP_BCOND: @@ -281,7 +281,7 @@ loop: case OP_BCx: case OP_BCy: more = 2; /* stop after next instruction */ - }; + } break; case OP_SW: diff --git a/sys/net/if_gif.c b/sys/net/if_gif.c index 1607af9..cfa4650 100644 --- a/sys/net/if_gif.c +++ b/sys/net/if_gif.c @@ -1023,7 +1023,7 @@ gif_set_tunnel(struct ifnet *ifp, struct sockaddr *src, struct sockaddr *dst) #endif default: return (EAFNOSUPPORT); - }; + } if (sc->gif_family != src->sa_family) gif_detach(sc); diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c index 9d4a976..425df8e 100644 --- a/sys/net/if_gre.c +++ b/sys/net/if_gre.c @@ -353,7 +353,7 @@ gre_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) if (error != 0) goto end; #endif - }; + } error = gre_set_tunnel(ifp, src, dst); break; case SIOCDIFPHYADDR: @@ -960,7 +960,7 @@ gre_transmit(struct ifnet *ifp, struct mbuf *m) default: m_freem(m); error = ENETDOWN; - }; + } drop: if (error) if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); diff --git a/sys/netgraph/netflow/ng_netflow.c b/sys/netgraph/netflow/ng_netflow.c index 4f9f953c..a142903 100644 --- a/sys/netgraph/netflow/ng_netflow.c +++ b/sys/netgraph/netflow/ng_netflow.c @@ -609,7 +609,7 @@ ng_netflow_rcvdata (hook_p hook, item_p item) */ log(LOG_ERR, "ng_netflow: incoming data on export hook!\n"); ERROUT(EINVAL); - }; + } if (hook == iface->hook) { if ((iface->info.conf & NG_NETFLOW_CONF_INGRESS) == 0) diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c index 0f48e12..af8505c 100644 --- a/sys/netgraph/ng_base.c +++ b/sys/netgraph/ng_base.c @@ -2056,7 +2056,7 @@ ng_acquire_read(node_p node, item_p item) return (item); } cpu_spinwait(); - }; + } /* Queue the request for later. */ ng_queue_rw(node, item, NGQRW_R); diff --git a/sys/netgraph/ng_ipfw.c b/sys/netgraph/ng_ipfw.c index 092a041..066c31f 100644 --- a/sys/netgraph/ng_ipfw.c +++ b/sys/netgraph/ng_ipfw.c @@ -117,7 +117,7 @@ ng_ipfw_mod_event(module_t mod, int event, void *data) != 0) { log(LOG_ERR, "%s: can't create ng_ipfw node", __func__); break; - }; + } /* Try to name node */ if (ng_name_node(fw_node, "ipfw") != 0) @@ -240,7 +240,7 @@ ng_ipfw_rcvdata(hook_p hook, item_p item) if (tag == NULL) { NG_FREE_M(m); return (EINVAL); /* XXX: find smth better */ - }; + } if (m->m_len < sizeof(struct ip) && (m = m_pullup(m, sizeof(struct ip))) == NULL) diff --git a/sys/netgraph/ng_nat.c b/sys/netgraph/ng_nat.c index 71419d6..cdec6e0 100644 --- a/sys/netgraph/ng_nat.c +++ b/sys/netgraph/ng_nat.c @@ -838,7 +838,7 @@ ng_nat_shutdown(node_p node) struct ng_nat_rdr_lst *entry = STAILQ_FIRST(&priv->redirhead); STAILQ_REMOVE_HEAD(&priv->redirhead, entries); free(entry, M_NETGRAPH); - }; + } /* Final free. */ LibAliasUninit(priv->lib); diff --git a/sys/netpfil/ipfw/ip_fw_sockopt.c b/sys/netpfil/ipfw/ip_fw_sockopt.c index 25ac16e..857b465 100644 --- a/sys/netpfil/ipfw/ip_fw_sockopt.c +++ b/sys/netpfil/ipfw/ip_fw_sockopt.c @@ -230,7 +230,7 @@ ipfw_find_rule(struct ip_fw_chain *chain, uint32_t key, uint32_t id) lo = i + 1; /* continue from the next one */ else /* r->id >= id */ hi = i; /* this might be good */ - }; + } return hi; } diff --git a/sys/netsmb/smb_subr.c b/sys/netsmb/smb_subr.c index 3846b75..2992f99 100644 --- a/sys/netsmb/smb_subr.c +++ b/sys/netsmb/smb_subr.c @@ -209,7 +209,7 @@ m_dumpm(struct mbuf *m) { printf("%02x ",((int)*(p++)) & 0xff); } m=m->m_next; - }; + } printf("\n"); } #endif diff --git a/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c b/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c index 3fed07c..adc24aa 100644 --- a/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c @@ -1045,7 +1045,7 @@ static struct ib_mr *mthca_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, shift = ffs(mr->umem->page_size) - 1; - n = mr->umem->nmap;; + n = mr->umem->nmap; mr->mtt = mthca_alloc_mtt(dev, n); if (IS_ERR(mr->mtt)) { err = PTR_ERR(mr->mtt); diff --git a/sys/ofed/drivers/net/mlx4/cmd.c b/sys/ofed/drivers/net/mlx4/cmd.c index f0805e8..9d51779 100644 --- a/sys/ofed/drivers/net/mlx4/cmd.c +++ b/sys/ofed/drivers/net/mlx4/cmd.c @@ -2572,7 +2572,7 @@ int mlx4_set_vf_link_state(struct mlx4_dev *dev, int port, int vf, int link_stat mlx4_warn(dev, "unknown value for link_state %02x on slave %d port %d\n", link_state, slave, port); return -EINVAL; - }; + } /* update the admin & oper state on the link state */ s_info = &priv->mfunc.master.vf_admin[slave].vport[port]; vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; diff --git a/sys/ofed/drivers/net/mlx4/eq.c b/sys/ofed/drivers/net/mlx4/eq.c index 31fafbe..145b9bc 100644 --- a/sys/ofed/drivers/net/mlx4/eq.c +++ b/sys/ofed/drivers/net/mlx4/eq.c @@ -754,7 +754,7 @@ static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq) !!(eqe->owner & 0x80) ^ !!(eq->cons_index & eq->nent) ? "HW" : "SW"); break; - }; + } ++eq->cons_index; eqes_found = 1; diff --git a/sys/pc98/cbus/olpt.c b/sys/pc98/cbus/olpt.c index 9aa8212..983ec07 100644 --- a/sys/pc98/cbus/olpt.c +++ b/sys/pc98/cbus/olpt.c @@ -420,7 +420,7 @@ lptopen (struct cdev *dev, int flags, int fmt, struct thread *td) lprintf(("irq %x\n", sc->sc_irq)); if (sc->sc_irq & LP_USE_IRQ) { sc->sc_state |= TOUT; - sc->sc_backoff = hz / LPTOUTINITIAL;; + sc->sc_backoff = hz / LPTOUTINITIAL; callout_reset(&sc->timer, sc->sc_backoff, lptout, sc); } diff --git a/sys/powerpc/powermac/fcu.c b/sys/powerpc/powermac/fcu.c index 3d5e79f..324fd1f 100644 --- a/sys/powerpc/powermac/fcu.c +++ b/sys/powerpc/powermac/fcu.c @@ -553,7 +553,7 @@ fcu_fanrpm_sysctl(SYSCTL_HANDLER_ARGS) default: /* This should never happen */ return (EINVAL); - }; + } } /* We can only read the RPM from a PWM controlled fan, so return. */ diff --git a/sys/powerpc/powermac/pmu.c b/sys/powerpc/powermac/pmu.c index 9df83cb..8080c21 100644 --- a/sys/powerpc/powermac/pmu.c +++ b/sys/powerpc/powermac/pmu.c @@ -1064,7 +1064,7 @@ pmu_battquery_sysctl(SYSCTL_HANDLER_ARGS) default: /* This should never happen */ result = -1; - }; + } error = sysctl_handle_int(oidp, &result, 0, req); diff --git a/sys/powerpc/powermac/smu.c b/sys/powerpc/powermac/smu.c index bc8ea43..cbc0e35 100644 --- a/sys/powerpc/powermac/smu.c +++ b/sys/powerpc/powermac/smu.c @@ -888,7 +888,7 @@ smu_fanrpm_sysctl(SYSCTL_HANDLER_ARGS) default: /* This should never happen */ return (EINVAL); - }; + } } /* We can only read the RPM from a PWM controlled fan, so return. */ if ((arg2 & 0xff00) == SMU_PWM_SYSCTL_RPM) diff --git a/sys/rpc/clnt_bck.c b/sys/rpc/clnt_bck.c index b63b2b1..477b276 100644 --- a/sys/rpc/clnt_bck.c +++ b/sys/rpc/clnt_bck.c @@ -381,7 +381,7 @@ printf("emsgsize\n"); break; default: stat = RPC_CANTRECV; - }; + } errp->re_status = stat; goto out; } else { diff --git a/sys/sparc64/sparc64/db_disasm.c b/sys/sparc64/sparc64/db_disasm.c index 55e2109..453aea6 100644 --- a/sys/sparc64/sparc64/db_disasm.c +++ b/sys/sparc64/sparc64/db_disasm.c @@ -867,7 +867,7 @@ db_disasm(db_addr_t loc, bool altfmt) break; } i_ptr++; - }; + } if (!matchp) { db_printf("undefined\n"); @@ -1023,7 +1023,7 @@ db_disasm(db_addr_t loc, bool altfmt) } if (*(++f_ptr)) db_printf(", "); - }; + } db_printf("\n"); diff --git a/sys/x86/cpufreq/smist.c b/sys/x86/cpufreq/smist.c index 5cfd72b..6116d94 100644 --- a/sys/x86/cpufreq/smist.c +++ b/sys/x86/cpufreq/smist.c @@ -223,7 +223,7 @@ set_ownership(device_t dev) bus_dma_tag_destroy(tag); device_printf(dev, "can't load mem\n"); return (ENXIO); - }; + } DPRINT(dev, "taking ownership over BIOS return %d\n", cb_data.result); bus_dmamap_unload(tag, map); bus_dmamem_free(tag, cb_data.buf, map); -- cgit v1.1 From ce50ae85600dfc2edaa4815cdc55e178003f3249 Mon Sep 17 00:00:00 2001 From: gonzo Date: Sun, 10 Apr 2016 23:17:06 +0000 Subject: Fix IIC "how" argument dereferencing on big-endian platforms "how" argument is passed as value of int* pointer to callback function but dereferenced as char* so only one byte taken into into account. On little-endian systems it happens to work because first byte is LSB that contains actual value, on big-endian it's MSB and in this case it's always equal zero PR: 207786 Submitted by: chadf@triularity.org --- sys/dev/gpio/gpioiic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/gpio/gpioiic.c b/sys/dev/gpio/gpioiic.c index 15f8f18..d365eea 100644 --- a/sys/dev/gpio/gpioiic.c +++ b/sys/dev/gpio/gpioiic.c @@ -157,7 +157,7 @@ gpioiic_callback(device_t dev, int index, caddr_t data) int error, how; how = GPIOBUS_DONTWAIT; - if (data != NULL && (int)*data == IIC_WAIT) + if (data != NULL && *(int*)data == IIC_WAIT) how = GPIOBUS_WAIT; error = 0; switch (index) { -- cgit v1.1 From d2d72fe957c58fe44c5f184f8a84dd8d2cea6db8 Mon Sep 17 00:00:00 2001 From: pfg Date: Sun, 10 Apr 2016 23:47:40 +0000 Subject: lpr: replace 0 with NULL for pointers. Found with devel/coccinelle. Reviewed by: gad --- usr.sbin/lpr/chkprintcap/chkprintcap.c | 8 ++++---- usr.sbin/lpr/common_source/common.c | 4 ++-- usr.sbin/lpr/common_source/net.c | 2 +- usr.sbin/lpr/common_source/printcap.c | 8 ++++---- usr.sbin/lpr/common_source/request.c | 4 ++-- usr.sbin/lpr/common_source/rmjob.c | 2 +- usr.sbin/lpr/lpc/lpc.c | 12 ++++++------ usr.sbin/lpr/lpd/printjob.c | 6 +++--- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/usr.sbin/lpr/chkprintcap/chkprintcap.c b/usr.sbin/lpr/chkprintcap/chkprintcap.c index 91e8299..96fe489 100644 --- a/usr.sbin/lpr/chkprintcap/chkprintcap.c +++ b/usr.sbin/lpr/chkprintcap/chkprintcap.c @@ -222,7 +222,7 @@ note_spool_dir(const struct printer *pp, const struct stat *st) struct dirlist *dp, *dp2, *last; dp = malloc(sizeof *dp); - if (dp == 0) + if (dp == NULL) err(++problems, "malloc(%lu)", (u_long)sizeof *dp); dp->stab = *st; @@ -233,7 +233,7 @@ note_spool_dir(const struct printer *pp, const struct stat *st) if (dp->path == 0) err(++problems, "malloc(%lu)", strlen(pp->spool_dir) + 1UL); - last = 0; + last = NULL; LIST_FOREACH(dp2, &dirlist, link) { if(!lessp(dp, dp2)) break; @@ -255,7 +255,7 @@ check_spool_dirs(void) for (dp = LIST_FIRST(&dirlist); dp; dp = dp2) { dp2 = LIST_NEXT(dp, link); - if (dp2 != 0 && equal(dp, dp2)) { + if (dp2 != NULL && equal(dp, dp2)) { ++problems; if (strcmp(dp->path, dp2->path) == 0) { warnx("%s and %s share the same spool, %s", @@ -289,7 +289,7 @@ make_spool_dir(const struct printer *pp) return; } gr = getgrnam("daemon"); - if (gr == 0) + if (gr == NULL) errx(++problems, "cannot locate daemon group"); if (chown(sd, pp->daemon_user, gr->gr_gid) < 0) { diff --git a/usr.sbin/lpr/common_source/common.c b/usr.sbin/lpr/common_source/common.c index 52d6c9f..ce0ba7c 100644 --- a/usr.sbin/lpr/common_source/common.c +++ b/usr.sbin/lpr/common_source/common.c @@ -282,7 +282,7 @@ lock_file_name(const struct printer *pp, char *buf, size_t len) { static char staticbuf[MAXPATHLEN]; - if (buf == 0) + if (buf == NULL) buf = staticbuf; if (len == 0) len = MAXPATHLEN; @@ -300,7 +300,7 @@ status_file_name(const struct printer *pp, char *buf, size_t len) { static char staticbuf[MAXPATHLEN]; - if (buf == 0) + if (buf == NULL) buf = staticbuf; if (len == 0) len = MAXPATHLEN; diff --git a/usr.sbin/lpr/common_source/net.c b/usr.sbin/lpr/common_source/net.c index ab6fa16..c495bbb 100644 --- a/usr.sbin/lpr/common_source/net.c +++ b/usr.sbin/lpr/common_source/net.c @@ -280,7 +280,7 @@ writel(int strm, ...) if (n > NIOV) { iovp = malloc(n * sizeof *iovp); - if (iovp == 0) + if (iovp == NULL) return -1; } diff --git a/usr.sbin/lpr/common_source/printcap.c b/usr.sbin/lpr/common_source/printcap.c index 0d3644b..707b7b8 100644 --- a/usr.sbin/lpr/common_source/printcap.c +++ b/usr.sbin/lpr/common_source/printcap.c @@ -220,7 +220,7 @@ getprintcap_int(char *bp, struct printer *pp) char *rp_name; int error; - if ((pp->printer = capdb_canonical_name(bp)) == 0) + if ((pp->printer = capdb_canonical_name(bp)) == NULL) return PCAPERR_OSERR; #define CHK(x) do {if ((x) == PCAPERR_OSERR) return PCAPERR_OSERR;}while(0) @@ -386,7 +386,7 @@ capdb_getaltstr(char *bp, const char *shrt, const char *lng, return status; if (dflt) { *result = strdup(dflt); - if (*result == 0) + if (*result == NULL) return PCAPERR_OSERR; return strlen(*result); } @@ -439,9 +439,9 @@ capdb_canonical_name(const char *bp) const char *nameend; nameend = strpbrk(bp, "|:"); - if (nameend == 0) + if (nameend == NULL) nameend = bp + 1; - if ((retval = malloc(nameend - bp + 1)) != 0) { + if ((retval = malloc(nameend - bp + 1)) != NULL) { retval[0] = '\0'; strncat(retval, bp, nameend - bp); } diff --git a/usr.sbin/lpr/common_source/request.c b/usr.sbin/lpr/common_source/request.c index b650e5c..0c68fe9 100644 --- a/usr.sbin/lpr/common_source/request.c +++ b/usr.sbin/lpr/common_source/request.c @@ -69,11 +69,11 @@ free_request(struct request *rp) free(rp->prettyname); if (rp->authinfo) free(rp->authinfo); - while ((ru = TAILQ_FIRST(&rp->users)) != 0) { + while ((ru = TAILQ_FIRST(&rp->users)) != NULL) { TAILQ_REMOVE(&rp->users, ru, ru_link); free(ru); } - while ((rj = TAILQ_FIRST(&rp->jobids)) != 0) { + while ((rj = TAILQ_FIRST(&rp->jobids)) != NULL) { TAILQ_REMOVE(&rp->jobids, rj, rj_link); free(rj); } diff --git a/usr.sbin/lpr/common_source/rmjob.c b/usr.sbin/lpr/common_source/rmjob.c index c89a6f0..96f20be 100644 --- a/usr.sbin/lpr/common_source/rmjob.c +++ b/usr.sbin/lpr/common_source/rmjob.c @@ -332,7 +332,7 @@ rmremote(const struct printer *pp) else niov = 4 + requests + 1; iov = malloc(niov * sizeof *iov); - if (iov == 0) + if (iov == NULL) fatal(pp, "out of memory in rmremote()"); iov[0].iov_base = "\5"; iov[1].iov_base = pp->remote_queue; diff --git a/usr.sbin/lpr/lpc/lpc.c b/usr.sbin/lpr/lpc/lpc.c index cc58bd9..5b5ec78 100644 --- a/usr.sbin/lpr/lpc/lpc.c +++ b/usr.sbin/lpr/lpc/lpc.c @@ -103,7 +103,7 @@ main(int argc, char *argv[]) printf("?Ambiguous command\n"); exit(1); } - if (c == 0) { + if (c == NULL) { printf("?Invalid command\n"); exit(1); } @@ -112,7 +112,7 @@ main(int argc, char *argv[]) printf("?Privileged command\n"); exit(1); } - if (c->c_generic != 0) + if (c->c_generic != NULL) generic(c->c_generic, c->c_opts, c->c_handler, argc, argv); else @@ -205,7 +205,7 @@ cmdscanner(void) printf("?Ambiguous command\n"); continue; } - if (c == 0) { + if (c == NULL) { printf("?Invalid command\n"); continue; } @@ -222,7 +222,7 @@ cmdscanner(void) * routine might also be set on a generic routine for * initial parameter processing. */ - if (c->c_generic != 0) + if (c->c_generic != NULL) generic(c->c_generic, c->c_opts, c->c_handler, margc, margv); else @@ -239,7 +239,7 @@ getcmd(const char *name) longest = 0; nmatches = 0; - found = 0; + found = NULL; for (c = cmdtab; (p = c->c_name); c++) { for (q = name; *q == *p++; q++) if (*q == 0) /* exact match? */ @@ -283,7 +283,7 @@ makeargv(void) break; *cp++ = '\0'; } - *argp++ = 0; + *argp++ = NULL; } #define HELPINDENT (sizeof ("directory")) diff --git a/usr.sbin/lpr/lpd/printjob.c b/usr.sbin/lpr/lpd/printjob.c index 06ea1b0..b388b96 100644 --- a/usr.sbin/lpr/lpd/printjob.c +++ b/usr.sbin/lpr/lpd/printjob.c @@ -673,7 +673,7 @@ print(struct printer *pp, int format, char *file) av[i++] = "-L"; av[i++] = *locale ? locale : "C"; av[i++] = "-F"; - av[i] = 0; + av[i] = NULL; fo = ofd; goto start; } @@ -795,7 +795,7 @@ print(struct printer *pp, int format, char *file) av[n++] = "-h"; av[n++] = origin_host; av[n++] = pp->acct_file; - av[n] = 0; + av[n] = NULL; fo = pfd; if (of_pid > 0) { /* stop output filter */ write(ofd, "\031\1", 2); @@ -1737,7 +1737,7 @@ init(struct printer *pp) sprintf(&length[2], "%ld", pp->page_length); sprintf(&pxwidth[2], "%ld", pp->page_pwidth); sprintf(&pxlength[2], "%ld", pp->page_plength); - if ((s = checkremote(pp)) != 0) { + if ((s = checkremote(pp)) != NULL) { syslog(LOG_WARNING, "%s", s); free(s); } -- cgit v1.1 From eb1815a4cda5963ecf056852ce459c32d06709f6 Mon Sep 17 00:00:00 2001 From: pfg Date: Mon, 11 Apr 2016 00:12:24 +0000 Subject: ext2fs: replace 0 with NULL for pointers. While here do late initialization of ebap, similar as was done in UFS. Found with devel/coccinelle. MFC after: 2 weeks --- sys/fs/ext2fs/ext2_alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/fs/ext2fs/ext2_alloc.c b/sys/fs/ext2fs/ext2_alloc.c index 9d5417c..c3bd29b 100644 --- a/sys/fs/ext2fs/ext2_alloc.c +++ b/sys/fs/ext2fs/ext2_alloc.c @@ -161,7 +161,7 @@ ext2_reallocblks(struct vop_reallocblks_args *ap) struct inode *ip; struct vnode *vp; struct buf *sbp, *ebp; - uint32_t *bap, *sbap, *ebap = 0; + uint32_t *bap, *sbap, *ebap; struct ext2mount *ump; struct cluster_save *buflist; struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp; @@ -231,6 +231,7 @@ ext2_reallocblks(struct vop_reallocblks_args *ap) /* * If the block range spans two block maps, get the second map. */ + ebap = NULL; if (end_lvl == 0 || (idp = &end_ap[end_lvl - 1])->in_off + 1 >= len) { ssize = len; } else { -- cgit v1.1 From 65b4f5af73a6ade981e85b0c2246303c5ba9b137 Mon Sep 17 00:00:00 2001 From: np Date: Mon, 11 Apr 2016 02:18:59 +0000 Subject: cxgbe(4): Provide an explicit value for nqpcq in the firmware configuration file. --- sys/dev/cxgbe/firmware/t5fw_cfg.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/dev/cxgbe/firmware/t5fw_cfg.txt b/sys/dev/cxgbe/firmware/t5fw_cfg.txt index 9e16da5..721ff37 100644 --- a/sys/dev/cxgbe/firmware/t5fw_cfg.txt +++ b/sys/dev/cxgbe/firmware/t5fw_cfg.txt @@ -151,6 +151,7 @@ niqflint = 512 nethctrl = 1024 neq = 2048 + nqpcq = 8192 nexactf = 456 cmask = all pmask = all @@ -289,7 +290,7 @@ [fini] version = 0x1 - checksum = 0x2d7417e5 + checksum = 0x89c83d98 # # $FreeBSD$ # -- cgit v1.1 From 1cae14fc17208fc1f7c1250539d02a07136ec002 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 03:07:35 +0000 Subject: hyperv/vmbus: Nuke unused function MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 12 ------------ sys/dev/hyperv/vmbus/hv_vmbus_priv.h | 1 - 2 files changed, 13 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index a423328..b6795b6 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -70,18 +70,6 @@ hv_get_timecount(struct timecounter *tc) } /** - * @brief Query the cpuid for presence of windows hypervisor - */ -int -hv_vmbus_query_hypervisor_presence(void) -{ - if (vm_guest != VM_GUEST_HV) - return (0); - - return (hv_high >= HV_X64_CPUID_MIN && hv_high <= HV_X64_CPUID_MAX); -} - -/** * @brief Get version of the windows hypervisor */ static int diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h index bc625a0..9cee4a6 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h +++ b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h @@ -704,7 +704,6 @@ uint16_t hv_vmbus_post_msg_via_msg_ipc( uint16_t hv_vmbus_signal_event(void *con_id); void hv_vmbus_synic_init(void *irq_arg); void hv_vmbus_synic_cleanup(void *arg); -int hv_vmbus_query_hypervisor_presence(void); struct hv_device* hv_vmbus_child_device_create( hv_guid device_type, -- cgit v1.1 From 43950de88e5f22790360783b053e31c28f4359bf Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 03:14:28 +0000 Subject: hyperv/vmbus: Get rid of max_leaf detection; this is actually not used. It will be replaced by a new one. MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index b6795b6..c22beac 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -70,35 +70,6 @@ hv_get_timecount(struct timecounter *tc) } /** - * @brief Get version of the windows hypervisor - */ -static int -hv_vmbus_get_hypervisor_version(void) -{ - u_int regs[4]; - unsigned int maxLeaf; - unsigned int op; - - /* - * Its assumed that this is called after confirming that - * Viridian is present - * Query id and revision. - */ - op = HV_CPU_ID_FUNCTION_HV_VENDOR_AND_MAX_FUNCTION; - do_cpuid(op, regs); - - maxLeaf = regs[0]; - op = HV_CPU_ID_FUNCTION_HV_INTERFACE; - do_cpuid(op, regs); - - if (maxLeaf >= HV_CPU_ID_FUNCTION_MS_HV_VERSION) { - op = HV_CPU_ID_FUNCTION_MS_HV_VERSION; - do_cpuid(op, regs); - } - return (maxLeaf); -} - -/** * @brief Invoke the specified hypercall */ static uint64_t @@ -147,7 +118,6 @@ hv_vmbus_do_hypercall(uint64_t control, void* input, void* output) int hv_vmbus_init(void) { - int max_leaf; hv_vmbus_x64_msr_hypercall_contents hypercall_msr; void* virt_addr = 0; @@ -164,8 +134,6 @@ hv_vmbus_init(void) if (vm_guest != VM_GUEST_HV) goto cleanup; - max_leaf = hv_vmbus_get_hypervisor_version(); - /* * Write our OS info */ -- cgit v1.1 From 297e2d2f528a41d9a9614e9b34049801f6935b31 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 03:28:17 +0000 Subject: hyperv: Identify Hyper-V features and recommends properly Features bits will be used to detect devices, e.g. timers, which do not have corresponding event channels. Submitted by: Jun Su Reviewed by: sephe, Dexuan Cui Rearranged by: sephe MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 89 ++++++++++++++++++++++++++++++++++++ sys/dev/hyperv/vmbus/hv_vmbus_priv.h | 11 ++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index c22beac..21ed04e 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -50,6 +51,9 @@ __FBSDID("$FreeBSD$"); static u_int hv_get_timecount(struct timecounter *tc); +u_int hyperv_features; +u_int hyperv_recommends; + /** * Globals */ @@ -393,3 +397,88 @@ void hv_vmbus_synic_cleanup(void *arg) wrmsr(HV_X64_MSR_SIEFP, siefp.as_uint64_t); } +static bool +hyperv_identify(void) +{ + u_int regs[4]; + unsigned int maxLeaf; + unsigned int op; + + if (vm_guest != VM_GUEST_HV) + return (false); + + op = HV_CPU_ID_FUNCTION_HV_VENDOR_AND_MAX_FUNCTION; + do_cpuid(op, regs); + maxLeaf = regs[0]; + if (maxLeaf < HV_CPU_ID_FUNCTION_MS_HV_IMPLEMENTATION_LIMITS) + return (false); + + op = HV_CPU_ID_FUNCTION_HV_INTERFACE; + do_cpuid(op, regs); + if (regs[0] != 0x31237648 /* HV#1 */) + return (false); + + op = HV_CPU_ID_FUNCTION_MS_HV_FEATURES; + do_cpuid(op, regs); + if ((regs[0] & HV_FEATURE_MSR_HYPERCALL) == 0) { + /* + * Hyper-V w/o Hypercall is impossible; someone + * is faking Hyper-V. + */ + return (false); + } + hyperv_features = regs[0]; + + op = HV_CPU_ID_FUNCTION_MS_HV_VERSION; + do_cpuid(op, regs); + printf("Hyper-V Version: %d.%d.%d [SP%d]\n", + regs[1] >> 16, regs[1] & 0xffff, regs[0], regs[2]); + + printf(" Features: 0x%b\n", hyperv_features, + "\020" + "\001VPRUNTIME" + "\002TMREFCNT" + "\003SYNCIC" + "\004SYNCTM" + "\005APIC" + "\006HYERCALL" + "\007VPINDEX" + "\010RESET" + "\011STATS" + "\012REFTSC" + "\013IDLE" + "\014TMFREQ" + "\015DEBUG"); + + op = HV_CPU_ID_FUNCTION_MS_HV_ENLIGHTENMENT_INFORMATION; + do_cpuid(op, regs); + hyperv_recommends = regs[0]; + if (bootverbose) + printf(" Recommends: %08x %08x\n", regs[0], regs[1]); + + op = HV_CPU_ID_FUNCTION_MS_HV_IMPLEMENTATION_LIMITS; + do_cpuid(op, regs); + if (bootverbose) { + printf(" Limits: Vcpu:%d Lcpu:%d Int:%d\n", + regs[0], regs[1], regs[2]); + } + + if (maxLeaf >= HV_CPU_ID_FUNCTION_MS_HV_HARDWARE_FEATURE) { + op = HV_CPU_ID_FUNCTION_MS_HV_HARDWARE_FEATURE; + do_cpuid(op, regs); + if (bootverbose) { + printf(" HW Features: %08x AMD: %08x\n", + regs[0], regs[3]); + } + } + + return (true); +} + +static void +hyperv_init(void *dummy __unused) +{ + if (!hyperv_identify()) + return; +} +SYSINIT(hyperv_initialize, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hyperv_init, NULL); diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h index 9cee4a6..042deec 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h +++ b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h @@ -471,10 +471,17 @@ typedef enum { HV_CPU_ID_FUNCTION_MS_HV_VERSION = 0x40000002, HV_CPU_ID_FUNCTION_MS_HV_FEATURES = 0x40000003, HV_CPU_ID_FUNCTION_MS_HV_ENLIGHTENMENT_INFORMATION = 0x40000004, - HV_CPU_ID_FUNCTION_MS_HV_IMPLEMENTATION_LIMITS = 0x40000005 - + HV_CPU_ID_FUNCTION_MS_HV_IMPLEMENTATION_LIMITS = 0x40000005, + HV_CPU_ID_FUNCTION_MS_HV_HARDWARE_FEATURE = 0x40000006 } hv_vmbus_cpuid_function; +#define HV_FEATURE_MSR_TIME_REFCNT (1 << 1) +#define HV_FEATURE_MSR_SYNCIC (1 << 2) +#define HV_FEATURE_MSR_STIMER (1 << 3) +#define HV_FEATURE_MSR_APIC (1 << 4) +#define HV_FEATURE_MSR_HYPERCALL (1 << 5) +#define HV_FEATURE_MSR_GUEST_IDLE (1 << 10) + /* * Define the format of the SIMP register */ -- cgit v1.1 From 28d2243294e521bd34a063a402382b21ad03b262 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 03:36:07 +0000 Subject: hyperv: Resurrect r297481 This time we make sure that the TIME_REF_COUNT MSR exists. Submitted by: Jun Su Reviewed by: sephe, Dexuan Cui MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index 21ed04e..0e7bb76 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -167,8 +167,6 @@ hv_vmbus_init(void) hv_vmbus_g_context.hypercall_page = virt_addr; - tc_init(&hv_timecounter); /* register virtual timecount */ - hv_et_init(); return (0); @@ -480,5 +478,10 @@ hyperv_init(void *dummy __unused) { if (!hyperv_identify()) return; + + if (hyperv_features & HV_FEATURE_MSR_TIME_REFCNT) { + /* Register virtual timecount */ + tc_init(&hv_timecounter); + } } SYSINIT(hyperv_initialize, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hyperv_init, NULL); -- cgit v1.1 From dbf747e96c50495258170a73aa5a6ab288b8b958 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 04:49:21 +0000 Subject: hyperv: Declare hyperv_{features,recommends} properly MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_vmbus_priv.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h index 042deec..8461ae0 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h +++ b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h @@ -635,6 +635,9 @@ typedef enum { extern hv_vmbus_context hv_vmbus_g_context; extern hv_vmbus_connection hv_vmbus_g_connection; +extern u_int hyperv_features; +extern u_int hyperv_recommends; + typedef void (*vmbus_msg_handler)(hv_vmbus_channel_msg_header *msg); typedef struct hv_vmbus_channel_msg_table_entry { -- cgit v1.1 From 7e6f8b31670ae92494f9510a48d7d589492dec6a Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 04:56:23 +0000 Subject: hyperv: Break long line MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index 0e7bb76..1efac1c 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -484,4 +484,5 @@ hyperv_init(void *dummy __unused) tc_init(&hv_timecounter); } } -SYSINIT(hyperv_initialize, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hyperv_init, NULL); +SYSINIT(hyperv_initialize, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hyperv_init, + NULL); -- cgit v1.1 From 3d3fd1fdc947b21f5c141f4fe17f9e26b0bcd592 Mon Sep 17 00:00:00 2001 From: anish Date: Mon, 11 Apr 2016 05:09:43 +0000 Subject: Allow guest writes to AMD microcode update[0xc0010020] MSR without updating actual hardware MSR. This allows guest microcode update to go through which otherwise failing because wrmsr() was returning EINVAL. Submitted by:Yamagi Burmeister Approved by:grehan MFC after:2 weeks --- sys/amd64/vmm/amd/svm_msr.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/amd64/vmm/amd/svm_msr.c b/sys/amd64/vmm/amd/svm_msr.c index 088751a..49208a3 100644 --- a/sys/amd64/vmm/amd/svm_msr.c +++ b/sys/amd64/vmm/amd/svm_msr.c @@ -156,6 +156,11 @@ svm_wrmsr(struct svm_softc *sc, int vcpu, u_int num, uint64_t val, bool *retu) * Ignore writes to the "Interrupt Pending Message" MSR. */ break; + case MSR_K8_UCODE_UPDATE: + /* + * Ignore writes to microcode update register. + */ + break; default: error = EINVAL; break; -- cgit v1.1 From ed18aa785e35157f85eb7c3276aef49a7f9acf5e Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 06:15:40 +0000 Subject: hyperv: Print more features And add comment about the MSR features. MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 54 ++++++++++++++++++++++++++---------- sys/dev/hyperv/vmbus/hv_vmbus_priv.h | 23 +++++++++++---- 2 files changed, 57 insertions(+), 20 deletions(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index 1efac1c..f23896d 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -54,6 +54,9 @@ static u_int hv_get_timecount(struct timecounter *tc); u_int hyperv_features; u_int hyperv_recommends; +static u_int hyperv_pm_features; +static u_int hyperv_features3; + /** * Globals */ @@ -426,27 +429,50 @@ hyperv_identify(void) return (false); } hyperv_features = regs[0]; + hyperv_pm_features = regs[2]; + hyperv_features3 = regs[3]; op = HV_CPU_ID_FUNCTION_MS_HV_VERSION; do_cpuid(op, regs); printf("Hyper-V Version: %d.%d.%d [SP%d]\n", regs[1] >> 16, regs[1] & 0xffff, regs[0], regs[2]); - printf(" Features: 0x%b\n", hyperv_features, + printf(" Features=0x%b\n", hyperv_features, + "\020" + "\001VPRUNTIME" /* MSR_VP_RUNTIME */ + "\002TMREFCNT" /* MSR_TIME_REF_COUNT */ + "\003SYNIC" /* MSRs for SynIC */ + "\004SYNTM" /* MSRs for SynTimer */ + "\005APIC" /* MSR_{EOI,ICR,TPR} */ + "\006HYERCALL" /* MSR_{GUEST_OS_ID,HYPERCALL} */ + "\007VPINDEX" /* MSR_VP_INDEX */ + "\010RESET" /* MSR_RESET */ + "\011STATS" /* MSR_STATS_ */ + "\012REFTSC" /* MSR_REFERENCE_TSC */ + "\013IDLE" /* MSR_GUEST_IDLE */ + "\014TMFREQ" /* MSR_{TSC,APIC}_FREQUENCY */ + "\015DEBUG"); /* MSR_SYNTH_DEBUG_ */ + printf(" PM Features=max C%u, 0x%b\n", + HV_PM_FEATURE_CSTATE(hyperv_pm_features), + (hyperv_pm_features & ~HV_PM_FEATURE_CSTATE_MASK), + "\020" + "\005C3HPET"); /* HPET is required for C3 state */ + printf(" Features3=0x%b\n", hyperv_features3, "\020" - "\001VPRUNTIME" - "\002TMREFCNT" - "\003SYNCIC" - "\004SYNCTM" - "\005APIC" - "\006HYERCALL" - "\007VPINDEX" - "\010RESET" - "\011STATS" - "\012REFTSC" - "\013IDLE" - "\014TMFREQ" - "\015DEBUG"); + "\001MWAIT" /* MWAIT */ + "\002DEBUG" /* guest debug support */ + "\003PERFMON" /* performance monitor */ + "\004PCPUDPE" /* physical CPU dynamic partition event */ + "\005XMMHC" /* hypercall input through XMM regs */ + "\006IDLE" /* guest idle support */ + "\007SLEEP" /* hypervisor sleep support */ + "\010NUMA" /* NUMA distance query support */ + "\011TMFREQ" /* timer frequency query (TSC, LAPIC) */ + "\012SYNCMC" /* inject synthetic machine checks */ + "\013CRASH" /* MSRs for guest crash */ + "\014DEBUGMSR" /* MSRs for guest debug */ + "\015NPIEP" /* NPIEP */ + "\016HVDIS"); /* disabling hypervisor */ op = HV_CPU_ID_FUNCTION_MS_HV_ENLIGHTENMENT_INFORMATION; do_cpuid(op, regs); diff --git a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h index 8461ae0..8410494 100644 --- a/sys/dev/hyperv/vmbus/hv_vmbus_priv.h +++ b/sys/dev/hyperv/vmbus/hv_vmbus_priv.h @@ -475,12 +475,23 @@ typedef enum { HV_CPU_ID_FUNCTION_MS_HV_HARDWARE_FEATURE = 0x40000006 } hv_vmbus_cpuid_function; -#define HV_FEATURE_MSR_TIME_REFCNT (1 << 1) -#define HV_FEATURE_MSR_SYNCIC (1 << 2) -#define HV_FEATURE_MSR_STIMER (1 << 3) -#define HV_FEATURE_MSR_APIC (1 << 4) -#define HV_FEATURE_MSR_HYPERCALL (1 << 5) -#define HV_FEATURE_MSR_GUEST_IDLE (1 << 10) +#define HV_FEATURE_MSR_TIME_REFCNT 0x0002 /* MSR_TIME_REF_COUNT */ +#define HV_FEATURE_MSR_SYNIC 0x0004 /* MSRs for SynIC */ +#define HV_FEATURE_MSR_SYNTIMER 0x0008 /* MSRs for SynTimer */ +#define HV_FEATURE_MSR_APIC 0x0010 /* MSR_{EOI,ICR,TPR} */ +#define HV_FEATURE_MSR_HYPERCALL 0x0020 /* MSR_{GUEST_OS_ID,HYPERCALL} */ +#define HV_FEATURE_MSR_GUEST_IDLE 0x0400 /* MSR_GUEST_IDLE */ + +#define HV_PM_FEATURE_CSTATE_MASK 0x000f +#define HV_PM_FEATURE_C3_HPET 0x0010 /* C3 requires HPET */ +#define HV_PM_FEATURE_CSTATE(f) ((f) & HV_PM_FEATURE_CSTATE_MASK) + +#define HV_FEATURE3_MWAIT 0x0001 /* MWAIT */ +#define HV_FEATURE3_XMM_HYPERCALL 0x0010 /* hypercall input through XMM regs */ +#define HV_FEATURE3_GUEST_IDLE 0x0020 /* guest idle support */ +#define HV_FEATURE3_NUMA 0x0080 /* NUMA distance query support */ +#define HV_FEATURE3_TIME_FREQ 0x0100 /* timer frequency query (TSC, LAPIC) */ +#define HV_FEATURE3_MSR_CRASH 0x0400 /* MSRs for guest crash */ /* * Define the format of the SIMP register -- cgit v1.1 From 710f9bdd7a9e9726409854be3cc2246048cd3c74 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 06:22:26 +0000 Subject: hyperv: Define macro for Hyper-V interface Suggested by: rpokala MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index f23896d..a6e5881 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #define HV_NANOSECONDS_PER_SEC 1000000000L +#define HYPERV_INTERFACE 0x31237648 /* HV#1 */ static u_int hv_get_timecount(struct timecounter *tc); @@ -416,7 +417,7 @@ hyperv_identify(void) op = HV_CPU_ID_FUNCTION_HV_INTERFACE; do_cpuid(op, regs); - if (regs[0] != 0x31237648 /* HV#1 */) + if (regs[0] != HYPERV_INTERFACE) return (false); op = HV_CPU_ID_FUNCTION_MS_HV_FEATURES; -- cgit v1.1 From c49d153732add588250197d631d76ec1539965e4 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 06:31:52 +0000 Subject: hyperv/hn: Cap default # of rings to 8. 8 gives the best performance in both Azure and local Hyper-V on both 10Ge and 40Ge. More rings are still allowed by manual configuration. Reviewed by: Dexuan Cui MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5879 --- sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c index acc49b4..fb0e8e5 100644 --- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c +++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c @@ -136,6 +136,8 @@ __FBSDID("$FreeBSD$"); #define HN_LROENT_CNT_DEF 128 +#define HN_RING_CNT_DEF_MAX 8 + #define HN_RNDIS_MSG_LEN \ (sizeof(rndis_msg) + \ RNDIS_HASH_PPI_SIZE + \ @@ -460,8 +462,14 @@ netvsc_attach(device_t dev) * The # of RX rings to use is same as the # of channels to use. */ ring_cnt = hn_chan_cnt; - if (ring_cnt <= 0 || ring_cnt > mp_ncpus) + if (ring_cnt <= 0) { + /* Default */ + ring_cnt = mp_ncpus; + if (ring_cnt > HN_RING_CNT_DEF_MAX) + ring_cnt = HN_RING_CNT_DEF_MAX; + } else if (ring_cnt > mp_ncpus) { ring_cnt = mp_ncpus; + } tx_ring_cnt = hn_tx_ring_cnt; if (tx_ring_cnt <= 0 || tx_ring_cnt > ring_cnt) -- cgit v1.1 From 07c17a9d10ed0669b7e63d2f72e49d7bde32b10b Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 06:37:50 +0000 Subject: hyperv/hn: By default enable multiple TX/RX rings, aka vRSS. Reviewed by: Dexuan Cui MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5880 --- sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c index fb0e8e5..68c301a 100644 --- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c +++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c @@ -282,12 +282,12 @@ static int hn_use_if_start = 0; SYSCTL_INT(_hw_hn, OID_AUTO, use_if_start, CTLFLAG_RDTUN, &hn_use_if_start, 0, "Use if_start TX method"); -static int hn_chan_cnt = 1; +static int hn_chan_cnt = 0; SYSCTL_INT(_hw_hn, OID_AUTO, chan_cnt, CTLFLAG_RDTUN, &hn_chan_cnt, 0, "# of channels to use; each channel has one RX ring and one TX ring"); -static int hn_tx_ring_cnt = 1; +static int hn_tx_ring_cnt = 0; SYSCTL_INT(_hw_hn, OID_AUTO, tx_ring_cnt, CTLFLAG_RDTUN, &hn_tx_ring_cnt, 0, "# of TX rings to use"); -- cgit v1.1 From 5aac05162c339436db8f586aef69d4c6c4d5d889 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 06:59:13 +0000 Subject: hyperv/hn: Remove unnecessary NULL checks Submitted by: Jun Su Reviewed by: sephe MFC after: 1 week Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5905 --- sys/dev/hyperv/netvsc/hv_net_vsc.c | 6 ++---- sys/dev/hyperv/netvsc/hv_rndis_filter.c | 9 +++------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/sys/dev/hyperv/netvsc/hv_net_vsc.c b/sys/dev/hyperv/netvsc/hv_net_vsc.c index f6d7d9e..11b3435 100644 --- a/sys/dev/hyperv/netvsc/hv_net_vsc.c +++ b/sys/dev/hyperv/netvsc/hv_net_vsc.c @@ -742,10 +742,8 @@ cleanup: * Free the packet buffers on the netvsc device packet queue. * Release other resources. */ - if (net_dev) { - sema_destroy(&net_dev->channel_init_sema); - free(net_dev, M_NETVSC); - } + sema_destroy(&net_dev->channel_init_sema); + free(net_dev, M_NETVSC); return (NULL); } diff --git a/sys/dev/hyperv/netvsc/hv_rndis_filter.c b/sys/dev/hyperv/netvsc/hv_rndis_filter.c index 1eb24fa..19da7e5 100644 --- a/sys/dev/hyperv/netvsc/hv_rndis_filter.c +++ b/sys/dev/hyperv/netvsc/hv_rndis_filter.c @@ -405,8 +405,7 @@ hv_rf_send_offload_request(struct hv_device *device, } cleanup: - if (request) - hv_put_rndis_request(rndis_dev, request); + hv_put_rndis_request(rndis_dev, request); return (ret); } @@ -907,10 +906,8 @@ hv_rf_halt_device(rndis_device *device) } device->state = RNDIS_DEV_UNINITIALIZED; - - if (request != NULL) { - hv_put_rndis_request(device, request); - } + + hv_put_rndis_request(device, request); return (0); } -- cgit v1.1 From 05bba575e35cd17f6254ead7db5a026674d07c68 Mon Sep 17 00:00:00 2001 From: avg Date: Mon, 11 Apr 2016 07:11:20 +0000 Subject: zio: align use of "no dump" flag between use_uma and !use_uma cases At the moment no ZFS buffers are included into a crash dump unless ZFS_DEBUG (or INVARIANTS) kernel option is enabled. That's not very helpful for debugging of ZFS problems, because important information often resides in metadata buffers. This change switches the dumping behavior when UMA is used from the illumos behavior to a more useful behavior that we have on FreeBSD when ZFS buffers are allocated via malloc. Reviewed by: smh, mav MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D5892 --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c index 05e16ba..6dc0ad3 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c @@ -128,11 +128,13 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, sync_pass_rewrite, CTLFLAG_RDTUN, boolean_t zio_requeue_io_start_cut_in_line = B_TRUE; +#ifdef illumos #ifdef ZFS_DEBUG int zio_buf_debug_limit = 16384; #else int zio_buf_debug_limit = 0; #endif +#endif void zio_init(void) @@ -154,7 +156,7 @@ zio_init(void) size_t size = (c + 1) << SPA_MINBLOCKSHIFT; size_t p2 = size; size_t align = 0; - size_t cflags = (size > zio_buf_debug_limit) ? KMC_NODEBUG : 0; + int cflags = zio_exclude_metadata ? KMC_NODEBUG : 0; while (!ISP2(p2)) p2 &= p2 - 1; -- cgit v1.1 From d86049c572ce6a7e9e7f091df5c238255330e31a Mon Sep 17 00:00:00 2001 From: smh Date: Mon, 11 Apr 2016 08:57:54 +0000 Subject: Only include sysctl in kernel build Only include sysctl in kernel builds fixing warning about implicit declaration of function 'sysctl_handle_int'. Sponsored by: Multiplay --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c index 30a0710..95e741f 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c @@ -48,7 +48,7 @@ #include #include -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) && defined(_KERNEL) #include #include #endif @@ -132,7 +132,7 @@ int zfs_delay_min_dirty_percent = 60; uint64_t zfs_delay_scale = 1000 * 1000 * 1000 / 2000; -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) && defined(_KERNEL) extern int zfs_vdev_async_write_active_max_dirty_percent; -- cgit v1.1 From 8fa5339871c1aa1a5659de14cb349fec0cae50d2 Mon Sep 17 00:00:00 2001 From: sephe Date: Mon, 11 Apr 2016 09:52:24 +0000 Subject: hyperv: Typo Noticed by: kib MFC after: 1 week Sponsored by: Microsoft OSTC --- sys/dev/hyperv/vmbus/hv_hv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/hyperv/vmbus/hv_hv.c b/sys/dev/hyperv/vmbus/hv_hv.c index a6e5881..b835a34 100644 --- a/sys/dev/hyperv/vmbus/hv_hv.c +++ b/sys/dev/hyperv/vmbus/hv_hv.c @@ -445,7 +445,7 @@ hyperv_identify(void) "\003SYNIC" /* MSRs for SynIC */ "\004SYNTM" /* MSRs for SynTimer */ "\005APIC" /* MSR_{EOI,ICR,TPR} */ - "\006HYERCALL" /* MSR_{GUEST_OS_ID,HYPERCALL} */ + "\006HYPERCALL" /* MSR_{GUEST_OS_ID,HYPERCALL} */ "\007VPINDEX" /* MSR_VP_INDEX */ "\010RESET" /* MSR_RESET */ "\011STATS" /* MSR_STATS_ */ -- cgit v1.1 From 146f54f44d1f0decdbae4e4abcff3ad6457c0ae2 Mon Sep 17 00:00:00 2001 From: bz Date: Mon, 11 Apr 2016 10:00:38 +0000 Subject: During if_vmove() we call if_detach_internal() which in turn calls the event handler notifying about interface departure and one of the consumers will detach if_bpf. There is no way for us to re-attach this easily as the DLT and hdrlen are only given on interface creation. Add a function to allow us to query the DLT and hdrlen from a current BPF attachment and after if_attach_internal() manually re-add the if_bpf attachment using these values. Found by panics triggered by nd6 packets running past BPF_MTAP() with no proper if_bpf pointer on the interface. Also add a basic DDB show function to investigate the if_bpf attachment of an interface. Reviewed by: gnn MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D5896 --- sys/net/bpf.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sys/net/bpf.h | 3 +++ sys/net/if.c | 11 +++++++++++ 3 files changed, 76 insertions(+) diff --git a/sys/net/bpf.c b/sys/net/bpf.c index 54dd184..5f2ef71 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$"); #include "opt_bpf.h" #include "opt_compat.h" +#include "opt_ddb.h" #include "opt_netgraph.h" #include @@ -67,6 +68,10 @@ __FBSDID("$FreeBSD$"); #include +#ifdef DDB +#include +#endif + #include #include #include @@ -2569,6 +2574,32 @@ bpfattach2(struct ifnet *ifp, u_int dlt, u_int hdrlen, struct bpf_if **driverp) if_printf(ifp, "bpf attached\n"); } +#ifdef VIMAGE +/* + * When moving interfaces between vnet instances we need a way to + * query the dlt and hdrlen before detach so we can re-attch the if_bpf + * after the vmove. We unfortunately have no device driver infrastructure + * to query the interface for these values after creation/attach, thus + * add this as a workaround. + */ +int +bpf_get_bp_params(struct bpf_if *bp, u_int *bif_dlt, u_int *bif_hdrlen) +{ + + if (bp == NULL) + return (ENXIO); + if (bif_dlt == NULL && bif_hdrlen == NULL) + return (0); + + if (bif_dlt != NULL) + *bif_dlt = bp->bif_dlt; + if (bif_hdrlen != NULL) + *bif_hdrlen = bp->bif_hdrlen; + + return (0); +} +#endif + /* * Detach bpf from an interface. This involves detaching each descriptor * associated with the interface. Notify each descriptor as it's detached @@ -2977,3 +3008,34 @@ bpf_validate(const struct bpf_insn *f, int len) } #endif /* !DEV_BPF && !NETGRAPH_BPF */ + +#ifdef DDB +static void +bpf_show_bpf_if(struct bpf_if *bpf_if) +{ + + if (bpf_if == NULL) + return; + db_printf("%p:\n", bpf_if); +#define BPF_DB_PRINTF(f, e) db_printf(" %s = " f "\n", #e, bpf_if->e); + /* bif_ext.bif_next */ + /* bif_ext.bif_dlist */ + BPF_DB_PRINTF("%#x", bif_dlt); + BPF_DB_PRINTF("%u", bif_hdrlen); + BPF_DB_PRINTF("%p", bif_ifp); + /* bif_lock */ + /* bif_wlist */ + BPF_DB_PRINTF("%#x", bif_flags); +} + +DB_SHOW_COMMAND(bpf_if, db_show_bpf_if) +{ + + if (!have_addr) { + db_printf("usage: show bpf_if \n"); + return; + } + + bpf_show_bpf_if((struct bpf_if *)addr); +} +#endif diff --git a/sys/net/bpf.h b/sys/net/bpf.h index a74b521..0ffc15ac 100644 --- a/sys/net/bpf.h +++ b/sys/net/bpf.h @@ -1469,6 +1469,9 @@ void bpf_mtap2(struct bpf_if *, void *, u_int, struct mbuf *); void bpfattach(struct ifnet *, u_int, u_int); void bpfattach2(struct ifnet *, u_int, u_int, struct bpf_if **); void bpfdetach(struct ifnet *); +#ifdef VIMAGE +int bpf_get_bp_params(struct bpf_if *, u_int *, u_int *); +#endif void bpfilterattach(int); u_int bpf_filter(const struct bpf_insn *, u_char *, u_int, u_int); diff --git a/sys/net/if.c b/sys/net/if.c index b9e524c..2c44c87 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1021,8 +1021,16 @@ void if_vmove(struct ifnet *ifp, struct vnet *new_vnet) { struct if_clone *ifc; + u_int bif_dlt, bif_hdrlen; int rc; + /* + * if_detach_internal() will call the eventhandler to notify + * interface departure. That will detach if_bpf. We need to + * safe the dlt and hdrlen so we can re-attach it later. + */ + bpf_get_bp_params(ifp->if_bpf, &bif_dlt, &bif_hdrlen); + /* * Detach from current vnet, but preserve LLADDR info, do not * mark as dead etc. so that the ifnet can be reattached later. @@ -1062,6 +1070,9 @@ if_vmove(struct ifnet *ifp, struct vnet *new_vnet) if_attach_internal(ifp, 1, ifc); + if (ifp->if_bpf == NULL) + bpfattach(ifp, bif_dlt, bif_hdrlen); + CURVNET_RESTORE(); } -- cgit v1.1 From 5ad2a44427205630d1fc5b45bc93b09480317a85 Mon Sep 17 00:00:00 2001 From: mav Date: Mon, 11 Apr 2016 10:48:26 +0000 Subject: Polish debugging IOCB dumping. Add few more missing cases, unify byte order. MFC after: 1 month --- sys/dev/isp/isp.c | 63 +++++++++++++++++++++++++++-------------------- sys/dev/isp/isp_library.c | 10 +++++--- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index 5dd47bd..2e69855 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -1972,10 +1972,12 @@ isp_fibre_init(ispsoftc_t *isp) } isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init: fwopt 0x%x xfwopt 0x%x zfwopt 0x%x", icbp->icb_fwoptions, icbp->icb_xfwoptions, icbp->icb_zfwoptions); - if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_bytes(isp, "isp_fibre_init", sizeof (*icbp), icbp); isp_put_icb(isp, icbp, (isp_icb_t *)fcp->isp_scratch); + if (isp->isp_dblev & ISP_LOGDEBUG1) { + isp_print_bytes(isp, "isp_fibre_init", + sizeof(*icbp), fcp->isp_scratch); + } /* * Init the firmware @@ -2240,16 +2242,16 @@ isp_fibre_init_2400(ispsoftc_t *isp) DMA_WD1(isp->isp_rquest_dma), DMA_WD0(isp->isp_rquest_dma), DMA_WD3(isp->isp_result_dma), DMA_WD2(isp->isp_result_dma), DMA_WD1(isp->isp_result_dma), DMA_WD0(isp->isp_result_dma)); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "isp_fibre_init_2400", sizeof (*icbp), icbp); - } - if (FC_SCRATCH_ACQUIRE(isp, 0)) { isp_prt(isp, ISP_LOGERR, sacq); return; } ISP_MEMZERO(fcp->isp_scratch, ISP_FC_SCRLEN); isp_put_icb_2400(isp, icbp, fcp->isp_scratch); + if (isp->isp_dblev & ISP_LOGDEBUG1) { + isp_print_bytes(isp, "isp_fibre_init_2400", + sizeof (*icbp), fcp->isp_scratch); + } /* * Now fill in information about any additional channels @@ -2395,6 +2397,8 @@ isp_fc_enable_vp(ispsoftc_t *isp, int chan) return (EIO); } isp_put_vp_modify(isp, &vp, (vp_modify_t *)reqp); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "IOCB VP_MODIFY", QENTRY_LEN, reqp); ISP_SYNC_REQUEST(isp); if (msleep(resp, &isp->isp_lock, 0, "VP_MODIFY", 5*hz) == EWOULDBLOCK) { isp_prt(isp, ISP_LOGERR, @@ -2402,6 +2406,8 @@ isp_fc_enable_vp(ispsoftc_t *isp, int chan) isp_destroy_handle(isp, vp.vp_mod_hdl); return (EIO); } + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "IOCB VP_MODIFY response", QENTRY_LEN, resp); isp_get_vp_modify(isp, (vp_modify_t *)resp, &vp); if (vp.vp_mod_hdr.rqs_flags != 0 || vp.vp_mod_status != VP_STS_OK) { @@ -2452,6 +2458,8 @@ isp_fc_disable_vp(ispsoftc_t *isp, int chan) return (EIO); } isp_put_vp_ctrl_info(isp, &vp, (vp_ctrl_info_t *)reqp); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "IOCB VP_CTRL", QENTRY_LEN, reqp); ISP_SYNC_REQUEST(isp); if (msleep(resp, &isp->isp_lock, 0, "VP_CTRL", 5*hz) == EWOULDBLOCK) { isp_prt(isp, ISP_LOGERR, @@ -2459,6 +2467,8 @@ isp_fc_disable_vp(ispsoftc_t *isp, int chan) isp_destroy_handle(isp, vp.vp_ctrl_handle); return (EIO); } + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "IOCB VP_CTRL response", QENTRY_LEN, resp); isp_get_vp_ctrl_info(isp, (vp_ctrl_info_t *)resp, &vp); if (vp.vp_ctrl_hdr.rqs_flags != 0 || vp.vp_ctrl_status != 0) { @@ -2602,9 +2612,9 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags isp_destroy_handle(isp, pl.plogx_handle); return (-1); } - if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_bytes(isp, "IOCB LOGX", QENTRY_LEN, &pl); isp_put_plogx(isp, &pl, (isp_plogx_t *)reqp); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_bytes(isp, "IOCB LOGX", QENTRY_LEN, reqp); ISP_SYNC_REQUEST(isp); if (msleep(resp, &isp->isp_lock, 0, "PLOGX", 3 * ICB_LOGIN_TOV * hz) == EWOULDBLOCK) { @@ -2613,9 +2623,9 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags isp_destroy_handle(isp, pl.plogx_handle); return (-1); } - isp_get_plogx(isp, (isp_plogx_t *)resp, &pl); if (isp->isp_dblev & ISP_LOGDEBUG1) - isp_print_bytes(isp, "IOCB LOGX response", QENTRY_LEN, &pl); + isp_print_bytes(isp, "IOCB LOGX response", QENTRY_LEN, resp); + isp_get_plogx(isp, (isp_plogx_t *)resp, &pl); if (pl.plogx_status == PLOGX_STATUS_OK) { return (0); @@ -5155,15 +5165,14 @@ again: * Synchronize our view of this response queue entry. */ MEMORYBARRIER(isp, SYNC_RESULT, oop, QENTRY_LEN, -1); + if (isp->isp_dblev & ISP_LOGDEBUG1) + isp_print_qentry(isp, "Response Queue Entry", oop, hp); isp_get_hdr(isp, hp, &sp->req_header); etype = sp->req_header.rqs_entry_type; if (IS_24XX(isp) && etype == RQSTYPE_RESPONSE) { isp24xx_statusreq_t *sp2 = (isp24xx_statusreq_t *)qe; isp_get_24xx_response(isp, (isp24xx_statusreq_t *)hp, sp2); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, sp2); - } scsi_status = sp2->req_scsi_status; completion_status = sp2->req_completion_status; if ((scsi_status & 0xff) != 0) @@ -5173,9 +5182,6 @@ again: resid = sp2->req_resid; } else if (etype == RQSTYPE_RESPONSE) { isp_get_response(isp, (ispstatusreq_t *) hp, sp); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, sp); - } scsi_status = sp->req_scsi_status; completion_status = sp->req_completion_status; req_status_flags = sp->req_status_flags; @@ -5184,9 +5190,6 @@ again: } else if (etype == RQSTYPE_RIO1) { isp_rio1_t *rio = (isp_rio1_t *) qe; isp_get_rio1(isp, (isp_rio1_t *) hp, rio); - if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "Response Queue Entry", QENTRY_LEN, rio); - } for (i = 0; i < rio->req_header.rqs_seqno; i++) { isp_fastpost_complete(isp, rio->req_handles[i]); } @@ -5250,7 +5253,6 @@ again: */ if (etype != RQSTYPE_REQUEST) { isp_prt(isp, ISP_LOGERR, notresp, etype, oop, optr, nlooked); - isp_print_bytes(isp, "Request Queue Entry", QENTRY_LEN, sp); ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ last_etype = etype; continue; @@ -5265,7 +5267,8 @@ again: if (sp->req_header.rqs_flags & RQSFLAG_MASK) { if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) { - isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp); + isp_print_qentry(isp, "unexpected continuation segment", + oop, hp); last_etype = etype; continue; } @@ -5276,19 +5279,23 @@ again: */ } if (sp->req_header.rqs_flags & RQSFLAG_BADHEADER) { - isp_print_bytes(isp, "bad header flag", QENTRY_LEN, sp); + isp_print_qentry(isp, "bad header flag", + oop, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADPACKET) { - isp_print_bytes(isp, "bad request packet", QENTRY_LEN, sp); + isp_print_qentry(isp, "bad request packet", + oop, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADCOUNT) { - isp_print_bytes(isp, "invalid entry count", QENTRY_LEN, sp); + isp_print_qentry(isp, "invalid entry count", + oop, hp); buddaboom++; } if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) { - isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp); + isp_print_qentry(isp, "invalid IOCB ordering", + oop, hp); last_etype = etype; continue; } @@ -5446,7 +5453,8 @@ again: XS_SAVE_SENSE(xs, snsp, totslen, slen); } else if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff) == SCSI_CHECK && IS_FC(isp)) { isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=0x%x", XS_CDBP(xs)[0] & 0xff); - isp_print_bytes(isp, "CC with no Sense", QENTRY_LEN, qe); + isp_print_qentry(isp, "CC with no Sense", + oop, hp); } isp_prt(isp, ISP_LOGDEBUG2, "asked for %ld got raw resid %ld settled for %ld", (long) XS_XFRLEN(xs), resid, (long) XS_GET_RESID(xs)); break; @@ -5472,7 +5480,8 @@ again: XS_SET_RESID(xs, XS_XFRLEN(xs)); break; default: - isp_print_bytes(isp, "Unhandled Response Type", QENTRY_LEN, qe); + isp_print_qentry(isp, "Unhandled Response Type", + oop, hp); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_BOTCH); } diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c index 987e515..c7bce2d 100644 --- a/sys/dev/isp/isp_library.c +++ b/sys/dev/isp/isp_library.c @@ -180,7 +180,8 @@ isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t to isp_put_cont_req(isp, (ispcontreq_t *)storage, qe1); } if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "additional queue entry", QENTRY_LEN, storage); + isp_print_bytes(isp, "additional queue entry", + QENTRY_LEN, qe1); } nqe++; } @@ -241,7 +242,7 @@ copy_and_sync: return (CMD_COMPLETE); } if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "first queue entry", QENTRY_LEN, fqe); + isp_print_bytes(isp, "first queue entry", QENTRY_LEN, qe0); } ISP_ADD_REQUEST(isp, nxt); return (CMD_QUEUED); @@ -2193,7 +2194,8 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ isp_put_cont_req(isp, (ispcontreq_t *)storage, qe1); } if (isp->isp_dblev & ISP_LOGTDEBUG1) { - isp_print_bytes(isp, "additional queue entry", QENTRY_LEN, storage); + isp_print_bytes(isp, "additional queue entry", + QENTRY_LEN, qe1); } nqe++; } @@ -2230,7 +2232,7 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ return (CMD_COMPLETE); } if (isp->isp_dblev & ISP_LOGTDEBUG1) { - isp_print_bytes(isp, "first queue entry", QENTRY_LEN, fqe); + isp_print_bytes(isp, "first queue entry", QENTRY_LEN, qe0); } ISP_ADD_REQUEST(isp, nxt); return (CMD_QUEUED); -- cgit v1.1 From a0ca006b3715112407bdb8b58700265de0c875b7 Mon Sep 17 00:00:00 2001 From: mav Date: Mon, 11 Apr 2016 10:53:25 +0000 Subject: Update 25xx chips firmware from 7.03.00 to 8.03.00. While the same update is also available for 24xx chips, it seems have a problem with disabling virtual ports -- firmware handles the request, but does not respong on it, causing timeout in driver. MFC after: 1 month --- sys/dev/ispfw/asm_2500.h | 29490 +++++++++++++++++++++++---------------------- 1 file changed, 15003 insertions(+), 14487 deletions(-) diff --git a/sys/dev/ispfw/asm_2500.h b/sys/dev/ispfw/asm_2500.h index 1cc3c9f..92993f2 100644 --- a/sys/dev/ispfw/asm_2500.h +++ b/sys/dev/ispfw/asm_2500.h @@ -30,1158 +30,1197 @@ * * * ******************************************************************** */ /* - * Firmware Version 7.03.00 (Apr 14, 2014) + * Firmware Version 8.03.00 (2015) */ #ifdef ISP_2500 static const uint32_t isp_2500_risc_code[] = { - 0x0501f042, 0x00112000, 0x00100000, 0x0000d32a, - 0x00000007, 0x00000003, 0x00000000, 0x000090d5, + 0x0501f06b, 0x00116000, 0x00100000, 0x0000daa9, + 0x00000008, 0x00000003, 0x00000000, 0x001090d5, 0x00000004, 0x00000000, 0x20434f50, 0x59524947, - 0x48542032, 0x30303720, 0x514c4f47, 0x49432043, + 0x48542032, 0x30313520, 0x514c4f47, 0x49432043, 0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350, 0x32357878, 0x20466972, 0x6d776172, 0x65202020, - 0x56657273, 0x696f6e20, 0x2020372e, 0x30332e30, + 0x56657273, 0x696f6e20, 0x2020382e, 0x30332e30, 0x30202024, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00100000, - 0x0000d32a, 0xffffffff, 0x00112004, 0x00020000, - 0x000011a6, 0xffffffff, 0x001131af, 0x0000c000, - 0x00000aa2, 0x00ffffff, 0x00113c51, 0x00008000, - 0x00000703, 0x00ffffff, 0x00114354, 0x0000a000, - 0x00000621, 0x00ffffff, 0x00114975, 0x0000400e, + 0x0000daa9, 0xffffffff, 0x00116004, 0x00020000, + 0x000011e7, 0xffffffff, 0x001171f0, 0x0000c000, + 0x00000adf, 0x00ffffff, 0x00117ccf, 0x00008000, + 0x0000070b, 0x00ffffff, 0x001183da, 0x0000a000, + 0x0000062a, 0x00ffffff, 0x00118a04, 0x0000400e, 0x00000808, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4203f000, 0x00021fff, - 0x40000000, 0x4203e000, 0x90000100, 0x40000000, - 0x42000800, 0x000211a7, 0x6002f000, 0x608c00e0, - 0x50000000, 0x8c000500, 0x05020003, 0x42000800, - 0x00020000, 0x45780800, 0x80040800, 0x82040580, - 0x00022000, 0x05fe07fc, 0x4178a000, 0x4200a800, - 0x0010d32a, 0x42000800, 0x00111b00, 0x40540000, - 0x8004b480, 0x0569f852, 0x0501ffcd, 0x600c6020, - 0x50304800, 0x8c240500, 0x0500001c, 0x59e00016, - 0x8c000504, 0x05020019, 0x0569f8a9, 0x604808fa, - 0x50041000, 0x82081500, 0xfffffffc, 0x90081d43, - 0x90081540, 0x84244d00, 0x440c0800, 0x44080800, - 0x44246000, 0x64030000, 0x4203e000, 0x70000000, - 0x4203e000, 0xb0300000, 0x603ff84e, 0x59e00016, - 0x8c000504, 0x05020002, 0x05fe47fd, 0x84244d40, - 0x44246000, 0x0569f892, 0x64030000, 0x0501fde5, - 0x4803c856, 0x0509fbf8, 0x6413c020, 0x4203e000, - 0x6000000f, 0x640f70e8, 0x640f78e8, 0x640da8e8, - 0x59e00023, 0x8c000500, 0x0502002b, 0x42002800, - 0x00100022, 0x58140800, 0x4817c857, 0x4807c857, - 0x800409c0, 0x0500000a, 0x58142002, 0x4813c857, - 0x58141003, 0x4c140000, 0x0501ff8c, 0x5c002800, - 0x0502003d, 0x90142c04, 0x05fdf7f3, 0x42002800, - 0x00100022, 0x5814a000, 0x4817c857, 0x4853c857, - 0x8050a1c0, 0x05000014, 0x4c140000, 0x5814a801, - 0x4857c857, 0x40500000, 0x80540480, 0x0500000b, - 0x82540480, 0x0000400e, 0x05020005, 0x9050a404, - 0x0509ff8a, 0x05020028, 0x0501f004, 0x5814b002, - 0x485bc857, 0x0565fff6, 0x5c002800, 0x90142c04, - 0x05fdf7e9, 0x050dfdf3, 0x42001000, 0x7ff481fe, - 0x59e00002, 0x8c00051e, 0x05020003, 0x42001000, - 0x7ff480fe, 0x50081000, 0x480b5092, 0x42002800, - 0x00100022, 0x58140801, 0x4817c857, 0x4807c857, - 0x800409c0, 0x05000023, 0x58142002, 0x4813c857, - 0x58141003, 0x4c140000, 0x82040480, 0x0000400e, - 0x05020004, 0x0509ff94, 0x4803c856, 0x0501f003, - 0x0501ff52, 0x05020004, 0x5c002800, 0x90142c04, - 0x05fdf7ed, 0x4803c856, 0x4a03c020, 0x00004010, - 0x4a03c011, 0x40100011, 0x05006000, 0x4203e000, - 0x40000000, 0x59e00017, 0x60000800, 0x8c00050a, - 0x050a0df0, 0x8d0c0530, 0x050a0de3, 0x050a0de5, - 0x6403c017, 0x4203e000, 0x30000001, 0x0501f000, - 0x4803c856, 0x59e00024, 0x8c000500, 0x050a0f32, - 0x0501ffca, 0x4a03c014, 0x001c001c, 0x4817c857, - 0x0501fff8, 0x42002000, 0x00111b00, 0x0565ffc3, - 0x59a800a1, 0x800001c0, 0x0500000c, 0x59a800ca, - 0x8c000500, 0x05000005, 0x59a8000a, 0x82000480, - 0x0013ffff, 0x05001005, 0x59a820a1, 0x80102000, - 0x59a8280a, 0x0565ffb5, 0x0569f9db, 0x0569fa02, - 0x59a8280a, 0x60000812, 0x60001802, 0x4807503b, - 0x480f529c, 0x60c01000, 0x053dfe68, 0x82040c00, - 0x00111b00, 0x4807500b, 0x600400de, 0x50000000, - 0x8c000502, 0x05000004, 0x59a800ca, 0x84000540, - 0x480350ca, 0x4a03c810, 0x00100000, 0x4a03c811, - 0x0010d32a, 0x0501ff90, 0x6447c829, 0x59e40001, - 0x82000540, 0x0003401f, 0x4803c801, 0x4a03c802, - 0x00000933, 0x59e00003, 0x82000540, 0x00240000, - 0x4803c003, 0x64ffc019, 0x60701000, 0x0501fedf, - 0x4202c000, 0x00111b00, 0x59aab00b, 0x59aaa00b, - 0x59aaa80b, 0x59aac83b, 0x4967509b, 0x496754dd, - 0x59a8000b, 0x4803500c, 0x0501fffe, 0x0549fa90, - 0x0505f807, 0x0505f875, 0x0509ffb5, 0x59a80084, - 0x8c000508, 0x05000004, 0x050dfebf, 0x0525f87d, - 0x050dffef, 0x0505f9b8, 0x0505ffb0, 0x053dfe71, - 0x0501fc55, 0x0515f812, 0x0531fb18, 0x052dfc90, - 0x0539fd03, 0x0509ffe6, 0x0509fe0f, 0x4203e000, - 0xf0000001, 0x0569f9c9, 0x6403c018, 0x4203e000, - 0xa0000001, 0x59a800ca, 0x80000540, 0x05000004, - 0x4203e000, 0x20000551, 0x0501f003, 0x4203e000, - 0x20000511, 0x4203e000, 0x50010000, 0x6403c020, - 0x05027019, 0x59e00020, 0x90000582, 0x05020016, - 0x4a03c020, 0x00004000, 0x4a03c011, 0x40000010, - 0x05006000, 0x4203e000, 0x40000000, 0x4df00000, - 0x4203e000, 0x50000000, 0x59e00017, 0x60000800, - 0x8c00050a, 0x00020892, 0x8d0c0530, 0x050a0d5a, - 0x000209bc, 0x5c03e000, 0x6403c017, 0x4203e000, - 0x30000001, 0x6002d800, 0x4203e000, 0xb0600000, - 0x59a800d5, 0x4003f800, 0x0001f004, 0x4df00000, - 0x4203e000, 0x50000000, 0x416c0000, 0x90000c88, - 0x05021c5e, 0x0c01f803, 0x5c03e000, 0x0001f006, - 0x00100189, 0x0010019a, 0x001002bf, 0x00100188, - 0x001003fa, 0x00100188, 0x00100188, 0x00100592, - 0x0501fc52, 0x42000800, 0x0010dceb, 0x5804001e, - 0x8c000500, 0x0500000c, 0x84000500, 0x4800081e, - 0x6012d800, 0x0501fe6d, 0x49f3c857, 0x5c000800, - 0x5c000000, 0x82000540, 0x00007e20, 0x4c000000, - 0x4c040000, 0x1c01f000, 0x41780000, 0x800001c0, - 0x05020039, 0x59c4000d, 0x8c00051e, 0x0502001f, - 0x59a800a7, 0x8c000500, 0x05000012, 0x60300830, - 0x050dfc0d, 0x90040560, 0x60300830, 0x4c000000, - 0x050dfc0e, 0x6041d04e, 0x0539fe5b, 0x5c000000, - 0x8400050a, 0x60300830, 0x050dfc08, 0x6191d000, - 0x0539fe55, 0x59c4000d, 0x8c00051e, 0x0502000b, - 0x59c40005, 0x8c000500, 0x05020008, 0x050dff96, - 0x640b50b4, 0x64075075, 0x6012d800, 0x42000000, - 0x0010e4be, 0x0565f622, 0x0501fe39, 0x052dfeef, - 0x0500000f, 0x052dfeff, 0x05020032, 0x5994002d, - 0x82000580, 0x001051ae, 0x05020004, 0x5994002c, - 0x800001c0, 0x0502002b, 0x59c40006, 0x82000540, - 0x000000c0, 0x48038806, 0x0501f026, 0x052dfe62, - 0x916c0581, 0x050200c5, 0x59a8003f, 0x90000589, - 0x050200c2, 0x497b503d, 0x42000800, 0xffffd815, - 0x0511fcf2, 0x42024800, 0x0010e512, 0x497a4805, - 0x64078893, 0x4a038805, 0x000000f0, 0x052dfedb, - 0x59c41006, 0x05020006, 0x82081540, 0x000000f1, - 0x82081500, 0xbbffffff, 0x0501f003, 0x82081540, - 0x440000f1, 0x480b8806, 0x0539fe23, 0x0541fb6d, - 0x0501f8ab, 0x050000a9, 0x42000000, 0x0010e39b, - 0x0565fdec, 0x60c01100, 0x497b50b2, 0x0501f036, - 0x0525f9b0, 0x59c400a4, 0x9000050f, 0x90000487, - 0x0502109e, 0x0539fe14, 0x59c400a3, 0x82000500, - 0xffefffff, 0x480388a3, 0x59a800bd, 0x800001c0, - 0x05020003, 0x0525ff01, 0x0501f094, 0x59a80043, - 0x84000546, 0x48035043, 0x052dfeae, 0x59c41006, - 0x05020006, 0x82081540, 0x44000001, 0x82081500, - 0xffffff0f, 0x0501f003, 0x82081540, 0x440000f1, - 0x480b8806, 0x497b9005, 0x0501f885, 0x05000083, - 0x60000000, 0x052dfc3b, 0x4a038802, 0x0000ffff, - 0x4a0378e4, 0x00003000, 0x42007000, 0x0010e060, - 0x58380401, 0x8c000508, 0x05020003, 0x4a01a8e4, - 0x0000c000, 0x42000000, 0x0010e392, 0x0565fdb9, - 0x59a8103d, 0x600c0800, 0x0541fb1b, 0x60401100, - 0x59a81809, 0x0521fdb3, 0x59a804cc, 0x82000500, - 0xffffff40, 0x480354cc, 0x59a80249, 0x84000518, - 0x48035249, 0x59c40001, 0x82000500, 0x00018000, - 0x82000580, 0x00018000, 0x59c400a3, 0x05020004, - 0x82000540, 0x00001000, 0x0501f003, 0x82000500, - 0xffffefff, 0x480388a3, 0x59c80015, 0x84000548, - 0x48039015, 0x050dfacb, 0x59a81008, 0x84081500, - 0x480b5008, 0x850e1d0a, 0x0529fd8a, 0x052dfe67, - 0x05000007, 0x8d0c0506, 0x05000005, 0x640750b2, - 0x850e1d0e, 0x0525fa79, 0x0501f048, 0x0529fe89, - 0x05000005, 0x59c41002, 0x8408150c, 0x480b8802, - 0x0501f017, 0x052dfe59, 0x05020005, 0x59a80046, - 0x80000540, 0x05540e1d, 0x0501f011, 0x0555fe1b, - 0x59a80249, 0x8c000506, 0x0502000d, 0x59a80046, - 0x80000540, 0x05020007, 0x59a81c49, 0x820c0580, - 0x0000ffff, 0x05000006, 0x8c0c0508, 0x05000004, - 0x4a035449, 0x0000ffff, 0x0525ffb4, 0x497b504b, - 0x497b504a, 0x497b50b3, 0x052dfe40, 0x59a81249, - 0x05020009, 0x050df8bd, 0x80001580, 0x59a8004d, - 0x82000500, 0xffff0000, 0x80040d40, 0x4807504d, - 0x0501f005, 0x59a8004d, 0x82000500, 0xffff0000, - 0x4803504d, 0x599c0017, 0x8c00050a, 0x05000002, - 0x84081544, 0x480b5249, 0x052dfe2c, 0x05000003, - 0x050df8aa, 0x48078880, 0x60141000, 0x0541ffae, - 0x497b504b, 0x497b5044, 0x4a035045, 0x0000ffff, - 0x4a01a8e4, 0x000000c0, 0x600ad800, 0x052dfe1f, - 0x05000005, 0x59a80249, 0x9000050c, 0x90000584, - 0x05000002, 0x0511fa30, 0x1c01f000, 0x0521fe7f, - 0x05020026, 0x599c0019, 0x82000500, 0x0000e000, - 0x82000580, 0x00004000, 0x05020020, 0x59c40001, - 0x82000d00, 0x00018000, 0x82040580, 0x00010000, - 0x05000004, 0x82040580, 0x00008000, 0x05020017, - 0x59a800a6, 0x90000483, 0x05001003, 0x90000541, - 0x0501f012, 0x050dfe6f, 0x64075075, 0x4a035076, - 0xaabbccdd, 0x64135069, 0x6403506a, 0x6012d800, - 0x59a800a6, 0x80000000, 0x480350a6, 0x59a800a5, - 0x82000500, 0xfffffff8, 0x90000544, 0x480350a5, - 0x0501fd42, 0x80000580, 0x1c01f000, 0x0525f854, - 0x05000051, 0x59a80249, 0x90000523, 0x900005a3, - 0x0502004d, 0x0525f853, 0x0500004b, 0x4a038802, - 0x0000ffbf, 0x59a804cc, 0x8c00050c, 0x0502012e, - 0x8c000506, 0x0502000b, 0x8c000508, 0x0502012a, - 0x84000548, 0x480354cc, 0x0525f84b, 0x05000004, - 0x417a5800, 0x0559fcae, 0x0501f123, 0x0501f0ea, - 0x8c00050a, 0x05020038, 0x8400054a, 0x480354cc, - 0x497b504b, 0x497b504a, 0x497b5044, 0x4a035045, - 0x0000ffff, 0x59a80249, 0x82000500, 0xffffff7c, - 0x48035249, 0x42024800, 0x0010e512, 0x59240200, - 0x82000500, 0xffffff1f, 0x48024a00, 0x59a802cc, - 0x5924100b, 0x82081500, 0x00001fff, 0x80080580, - 0x05000012, 0x4d3c0000, 0x4d300000, 0x4d400000, - 0x60aa8000, 0x417a6000, 0x600a7800, 0x41780800, - 0x0511fc4a, 0x5c028000, 0x5c026000, 0x5c027800, - 0x59a802cc, 0x5924080b, 0x82040d00, 0xffffe000, - 0x80040540, 0x4802480b, 0x4d300000, 0x417a6000, - 0x0511fbeb, 0x5c026000, 0x4803c856, 0x5924000c, - 0x800001c0, 0x05020006, 0x0001f817, 0x050000ee, - 0x492e480c, 0x5924000b, 0x48025802, 0x0511f9b6, - 0x0501f0e9, 0x59a80045, 0x82000580, 0x0000ffff, - 0x05000003, 0x0511f9b0, 0x0501f0e3, 0x0565fdfe, - 0x05000017, 0x0565fe01, 0x05000008, 0x052dfd93, - 0x05000006, 0x59a80249, 0x8c000506, 0x0500004e, - 0x0529fdb8, 0x050200d8, 0x80000580, 0x0509ff61, - 0x600ed800, 0x4a035045, 0x0000ffff, 0x4a01a8e4, - 0x00000080, 0x4a038802, 0x0000ffff, 0x850e1d02, - 0x0541fd6a, 0x0501fcb8, 0x0501f0cb, 0x59a80249, - 0x8c00050a, 0x05020003, 0x8c000506, 0x05000037, - 0x8c000500, 0x05000035, 0x4a038802, 0x0000ffbf, - 0x8c000502, 0x05000031, 0x0521ffde, 0x05020004, - 0x599c0018, 0x8c000516, 0x05020029, 0x59a8004a, - 0x82000580, 0x0000ffff, 0x05000020, 0x0521ffd5, - 0x05000006, 0x59a804cc, 0x8c000500, 0x05000003, - 0x0511fc27, 0x0501f008, 0x41781800, 0x0565fddb, - 0x05000002, 0x60401800, 0x59a80249, 0x8c00050a, - 0x05120a8a, 0x42024800, 0x0010e512, 0x417a4000, - 0x59240200, 0x82000500, 0x000000e0, 0x82000580, - 0x000000e0, 0x050200a0, 0x050dff2c, 0x59a80249, - 0x8c000504, 0x0502009c, 0x600c1000, 0x417a5800, - 0x050dff4b, 0x0501f098, 0x59a80249, 0x8c00051c, - 0x05020003, 0x8c000504, 0x05fc07f8, 0x59a8004b, - 0x80000540, 0x05020090, 0x59a80249, 0x8c000508, - 0x05020017, 0x59a80044, 0x80000540, 0x0502008a, - 0x59a80249, 0x8c00050e, 0x0500000c, 0x8c000502, - 0x0502000a, 0x052dfd39, 0x05000083, 0x82000500, - 0xffffff77, 0x48035249, 0x4a035045, 0x0000ffff, - 0x0511f949, 0x0501f07c, 0x0565fda8, 0x0500000c, - 0x0511fcc7, 0x05020078, 0x0501f009, 0x599c1819, - 0x8c0c0510, 0x05000004, 0x8c000502, 0x0502001d, - 0x0501f071, 0x8c000516, 0x0500006f, 0x0529fd4d, - 0x0502006d, 0x0521ff8b, 0x05020004, 0x599c0018, - 0x8c000516, 0x05020003, 0x052df90d, 0x05020066, - 0x59a80006, 0x8c00051c, 0x05020004, 0x599c0017, - 0x8c00050a, 0x0500000b, 0x61c0b00f, 0x417a8800, - 0x0001fb00, 0x05020004, 0x59340200, 0x8c00051a, - 0x05020059, 0x81468800, 0x8058b040, 0x05fe07f9, - 0x0565fda3, 0x05000004, 0x4a038802, 0x0000ffbf, - 0x0501f003, 0x4a038802, 0x0000ffff, 0x42001800, - 0x0010dd46, 0x0501fd73, 0x42001800, 0x0010dd53, - 0x0501fd70, 0x850e1d02, 0x4a01a8e4, 0x00000080, - 0x600ed800, 0x4a035045, 0x0000ffff, 0x0501fc2e, - 0x80000580, 0x0509fecb, 0x497b50a6, 0x64075078, - 0x0521ff5c, 0x0502000b, 0x599c0018, 0x8c000516, - 0x05000008, 0x59a804cc, 0x8c00050e, 0x05020036, - 0x8400054e, 0x480354cc, 0x0521fcda, 0x0501f016, - 0x59a81a49, 0x59a82041, 0x82102580, 0x0000aaaa, - 0x05000004, 0x8c0c0506, 0x05020002, 0x480f5449, - 0x8c0c0508, 0x05000007, 0x599c1819, 0x8c0c0510, - 0x05000004, 0x61f8180f, 0x60102000, 0x0501f003, - 0x61fc19ff, 0x60182000, 0x60003000, 0x417a4000, - 0x0521fc6c, 0x052dfce3, 0x0500000a, 0x59c40006, - 0x052dfcce, 0x05000004, 0x82000500, 0xffffff0f, - 0x0501f003, 0x82000500, 0xfbffffff, 0x48038806, - 0x0521ff30, 0x0500000a, 0x59a804cc, 0x8c000500, - 0x05000007, 0x59c40801, 0x82040d40, 0x00004000, - 0x48078801, 0x64c378e4, 0x0501f006, 0x59c40801, - 0x82040d00, 0xffffbfff, 0x48078801, 0x648378e4, - 0x0541fc9e, 0x1c01f000, 0x4c040000, 0x4c080000, - 0x4c100000, 0x59a8006a, 0x90000c84, 0x050219db, - 0x0c01f805, 0x5c002000, 0x5c001000, 0x5c000800, - 0x1c01f000, 0x00100409, 0x001004a3, 0x001004c8, - 0x00100576, 0x60380938, 0x050df9a7, 0x90040550, - 0x82000500, 0xfffffff7, 0x60380938, 0x050df9a7, - 0x59c410a3, 0x84081518, 0x480b88a3, 0x0521fd03, - 0x05020021, 0x599c0019, 0x82000500, 0x0000e000, - 0x82000580, 0x00004000, 0x0502001b, 0x59a808a5, - 0x90040d07, 0x90040580, 0x0502000b, 0x59a80069, - 0x90000582, 0x05000011, 0x050df8ea, 0x497b5068, - 0x050dfce9, 0x640f5076, 0x640b5069, 0x64075075, - 0x0501f00a, 0x90040584, 0x05020008, 0x497b2804, - 0x497b2805, 0x050dfcef, 0x64075075, 0x4a035076, - 0xaabbccdd, 0x64135069, 0x59a800a5, 0x80000000, - 0x480350a5, 0x60000001, 0x0509fe4e, 0x0539fbd6, - 0x59c408a3, 0x82040d00, 0xfffffff7, 0x480788a3, - 0x052dfc78, 0x0500000d, 0x052dfc82, 0x0500000b, - 0x052dfc7a, 0x05020999, 0x59c400a3, 0x84000532, - 0x84000570, 0x480388a3, 0x052dffa3, 0x4a038808, - 0x00000208, 0x0501f012, 0x59c400a3, 0x84000530, - 0x82000500, 0xbf7fffff, 0x480388a3, 0x61e00801, - 0x0525fd72, 0x59c400a3, 0x82000540, 0x00018000, - 0x8400051c, 0x480388a3, 0x82000500, 0xfffeffff, - 0x480388a3, 0x4a038808, 0x00000200, 0x59c40006, - 0x82000500, 0xfbffff0e, 0x48038806, 0x497b282c, - 0x497b282d, 0x61d00803, 0x42001000, 0x00100590, - 0x0539fa3c, 0x59c40805, 0x64078805, 0x0509fefb, - 0x05020006, 0x60040000, 0x050df8db, 0x60040000, - 0x050df8a9, 0x0501f01e, 0x0509fefa, 0x05020006, - 0x41780000, 0x050df8d4, 0x41780000, 0x050df8a2, - 0x0501f017, 0x0509fef9, 0x05020006, 0x60080000, - 0x050df8cd, 0x60080000, 0x050df89b, 0x0501f010, - 0x0509fef8, 0x05020006, 0x600c0000, 0x050df8c6, - 0x600c0000, 0x050df894, 0x0501f009, 0x0509fef7, - 0x05020956, 0x59a80075, 0x800001c0, 0x05000004, - 0x0509fef7, 0x6407506a, 0x0501f018, 0x050df914, - 0x6407506a, 0x052dfc27, 0x05000008, 0x052dfc31, - 0x05000006, 0x052dfc29, 0x05020948, 0x64075042, - 0x052dfb9d, 0x0501f00d, 0x59c400a4, 0x9000050f, - 0x90000588, 0x05000003, 0x4a038805, 0x04000000, - 0x59c400a3, 0x82000540, 0x0001c000, 0x480388a3, - 0x84000520, 0x480388a3, 0x1c01f000, 0x0501f8e9, - 0x05020003, 0x640f506a, 0x0501f021, 0x0509fed3, - 0x0502000d, 0x59a80075, 0x800001c0, 0x0500000a, - 0x0509fed3, 0x59a80074, 0x8c00051e, 0x05000018, - 0x052dfc0a, 0x05020006, 0x64075042, 0x052dfb7e, - 0x0501f003, 0x050df8be, 0x05020011, 0x050df855, - 0x640b506a, 0x497b5075, 0x59c400a3, 0x84000520, - 0x480388a3, 0x052dfbfd, 0x05000009, 0x0521fc57, - 0x05000007, 0x497b282c, 0x497b282d, 0x60b40800, - 0x42001000, 0x00100590, 0x0539f9da, 0x1c01f000, - 0x0501f8c4, 0x05020003, 0x640f506a, 0x0501f0a9, - 0x4a038805, 0x000000f0, 0x050df8a5, 0x050200a0, - 0x050dfab0, 0x05000017, 0x050dfa95, 0x05020015, - 0x050dfa9e, 0x0502000a, 0x59a80076, 0x90000584, - 0x05fc07f2, 0x0509fe9b, 0x0502000e, 0x59a80076, - 0x82000580, 0xaabbccdd, 0x05fc07ec, 0x59a80076, - 0x90000580, 0x05fc07e9, 0x0509fe80, 0x05020005, - 0x59a80076, 0x82000580, 0xaabbccdd, 0x05fc07e3, - 0x59a800a7, 0x8c000500, 0x0502000b, 0x59a80884, - 0x8c04050c, 0x05020008, 0x60380938, 0x050df8c2, - 0x90040548, 0x82000500, 0xffffffef, 0x60380938, - 0x050df8c2, 0x050dfa8b, 0x05000032, 0x0521fe5a, - 0x0500000c, 0x4a03c014, 0x00200020, 0x59c40001, - 0x82000500, 0x00018000, 0x82000580, 0x00018000, - 0x05020026, 0x4a03c013, 0x00200020, 0x0501f025, - 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380, + 0x00000000, 0x00000000, 0x00000009, 0x0000000c, + 0x0000000f, 0x00000012, 0x00000015, 0x00000000, + 0x00000000, 0x0000000f, 0x00000000, 0x00000000, + 0x00000000, 0x00100046, 0x00100045, 0x00000000, + 0x00100046, 0x00000000, 0x00000000, 0x00100046, + 0x00100045, 0x00100042, 0x00100046, 0x00100045, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00100046, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00100046, + 0x00100046, 0x00100046, 0x00000000, 0x00100046, + 0x00000000, 0x00000000, 0x00000000, 0x4203f000, + 0x00021fff, 0x40000000, 0x4203e000, 0x90000100, + 0x40000000, 0x42000800, 0x000211e8, 0x6002f000, + 0x608c00e0, 0x50000000, 0x8c000500, 0x05020003, + 0x42000800, 0x00020000, 0x45780800, 0x80040800, + 0x82040580, 0x00022000, 0x05fe07fc, 0x4178a000, + 0x4200a800, 0x0010daa9, 0x42000800, 0x00115aa4, + 0x40540000, 0x8004b480, 0x0569ffa4, 0x0501ffd3, + 0x600c6020, 0x50304800, 0x8c240500, 0x0500001c, + 0x59e00016, 0x8c000504, 0x05020019, 0x0569fffb, + 0x604808fa, 0x50041000, 0x82081500, 0xfffffffc, + 0x90081d43, 0x90081540, 0x84244d00, 0x440c0800, + 0x44080800, 0x44246000, 0x64030000, 0x4203e000, + 0x70000000, 0x4203e000, 0xb0300000, 0x603ff84e, + 0x59e00016, 0x8c000504, 0x05020002, 0x05fe47fd, + 0x84244d40, 0x44246000, 0x0569ffe4, 0x64030000, + 0x0501fdf7, 0x4803c856, 0x0509fc3e, 0x6413c020, + 0x4203e000, 0x6000000f, 0x640f70e8, 0x640f78e8, + 0x640da8e8, 0x59e00023, 0x8c000500, 0x0502002b, + 0x42002800, 0x00100022, 0x58140800, 0x4817c857, + 0x4807c857, 0x800409c0, 0x0500000a, 0x58142002, + 0x4813c857, 0x58141003, 0x4c140000, 0x0501ff92, + 0x5c002800, 0x0502003d, 0x90142c04, 0x05fdf7f3, + 0x42002800, 0x00100022, 0x5814a000, 0x4817c857, + 0x4853c857, 0x8050a1c0, 0x05000014, 0x4c140000, + 0x5814a801, 0x4857c857, 0x40500000, 0x80540480, + 0x0500000b, 0x82540480, 0x0000400e, 0x05020005, + 0x9050a404, 0x0509ffd2, 0x05020028, 0x0501f004, + 0x5814b002, 0x485bc857, 0x0569ff48, 0x5c002800, + 0x90142c04, 0x05fdf7e9, 0x050dfe4a, 0x42001000, + 0x7ff481fe, 0x59e00002, 0x8c00051e, 0x05020003, + 0x42001000, 0x7ff480fe, 0x50081000, 0x480b5095, + 0x42002800, 0x00100022, 0x58140801, 0x4817c857, + 0x4807c857, 0x800409c0, 0x05000023, 0x58142002, + 0x4813c857, 0x58141003, 0x4c140000, 0x82040480, + 0x0000400e, 0x05020004, 0x0509ffdc, 0x4803c856, + 0x0501f003, 0x0501ff58, 0x05020004, 0x5c002800, + 0x90142c04, 0x05fdf7ed, 0x4803c856, 0x4a03c020, + 0x00004010, 0x4a03c011, 0x40100011, 0x05006000, + 0x4203e000, 0x40000000, 0x59e00017, 0x60000800, + 0x8c00050a, 0x050a0e38, 0x8d0c0530, 0x050a0e2b, + 0x050a0e2d, 0x6403c017, 0x4203e000, 0x30000001, + 0x0501f000, 0x4803c856, 0x59e00024, 0x8c000500, + 0x050a0f7a, 0x59e00024, 0x8c00050e, 0x05000003, + 0x4a020200, 0x00003800, 0x0501ffd3, 0x4a03c014, + 0x001c001c, 0x4817c857, 0x0505f801, 0x42002000, + 0x00115aa4, 0x0569ff10, 0x59a800a4, 0x800001c0, + 0x0500000c, 0x59a800cf, 0x8c000500, 0x05000005, + 0x59a8000a, 0x82000480, 0x0013ffff, 0x05001005, + 0x59a820a4, 0x80102000, 0x59a8280a, 0x0569ff02, + 0x056df92b, 0x056df953, 0x59a8280a, 0x60800812, + 0x60001802, 0x4807503d, 0x480f529f, 0x900d0420, + 0x800404a0, 0x4803543e, 0x60c01000, 0x0541faf0, + 0x82040c00, 0x00115aa4, 0x4807500b, 0x600400de, + 0x50000000, 0x8c000502, 0x05000004, 0x59a800cf, + 0x84000540, 0x480350cf, 0x4a03c810, 0x00100000, + 0x4a03c811, 0x0010daa9, 0x0501ff96, 0x6447c829, + 0x59e40001, 0x82000540, 0x0003401f, 0x4803c801, + 0x4a03c802, 0x00000933, 0x59e00003, 0x82000540, + 0x00240000, 0x4803c003, 0x64ffc019, 0x60701000, + 0x0501fedd, 0x4202c000, 0x00115aa4, 0x42017800, + 0x00115aa4, 0x59aab00b, 0x59aaa00b, 0x59aaa80b, + 0x59aac83d, 0x4967509e, 0x496754e2, 0x59a8000b, + 0x4803500c, 0x0505f802, 0x0549ff51, 0x0505f80b, + 0x0505f898, 0x0509fff9, 0x59a80087, 0x8c000508, + 0x05000004, 0x050dff0c, 0x0525f9f0, 0x0511f83c, + 0x0505f9e7, 0x0509f81c, 0x0541faf7, 0x0501fc59, + 0x0515f887, 0x0531fdd5, 0x052dff41, 0x053df8ea, + 0x050df82a, 0x0509fe4d, 0x4203e000, 0xf0000001, + 0x056df915, 0x6403c018, 0x4203e000, 0xa0000001, + 0x59a800cf, 0x80000540, 0x05000004, 0x4203e000, + 0x20000551, 0x0501f003, 0x4203e000, 0x20000511, + 0x4203e000, 0x50010000, 0x6403c020, 0x05027019, + 0x59e00020, 0x90000582, 0x05020016, 0x4a03c020, + 0x00004000, 0x4a03c011, 0x40000010, 0x05006000, + 0x4203e000, 0x40000000, 0x4df00000, 0x4203e000, + 0x50000000, 0x59e00017, 0x60000800, 0x8c00050a, + 0x0002089a, 0x8d0c0530, 0x050a0d98, 0x000209c4, + 0x5c03e000, 0x6403c017, 0x4203e000, 0x30000001, + 0x6002d800, 0x4203e000, 0xb0600000, 0x59a800da, + 0x4003f800, 0x0001f004, 0x4df00000, 0x4203e000, + 0x50000000, 0x416c0000, 0x90000c88, 0x05021c66, + 0x0c01f803, 0x5c03e000, 0x0001f006, 0x001001bc, + 0x001001cd, 0x001002f2, 0x001001bb, 0x00100431, + 0x001001bb, 0x001001bb, 0x001005c9, 0x0501fc5a, + 0x42000800, 0x00111c71, 0x5804001e, 0x8c000500, + 0x0500000c, 0x84000500, 0x4800081e, 0x6012d800, + 0x0501fe69, 0x49f3c857, 0x5c000800, 0x5c000000, + 0x82000540, 0x00007e20, 0x4c000000, 0x4c040000, + 0x1c01f000, 0x41780000, 0x800001c0, 0x05020039, + 0x59c4000d, 0x8c00051e, 0x0502001f, 0x59a800aa, + 0x8c000500, 0x05000012, 0x60300830, 0x050dfc5a, + 0x90040560, 0x60300830, 0x4c000000, 0x050dfc5b, + 0x6041d04e, 0x053dfa93, 0x5c000000, 0x8400050a, + 0x60300830, 0x050dfc55, 0x6191d000, 0x053dfa8d, + 0x59c4000d, 0x8c00051e, 0x0502000b, 0x59c40005, + 0x8c000500, 0x05020008, 0x050dffe3, 0x640b50b9, + 0x64075078, 0x6012d800, 0x42000000, 0x00112462, + 0x0569f56a, 0x0501fe35, 0x0531f9a6, 0x0500000f, + 0x0531f9b6, 0x05020032, 0x5994002e, 0x82000580, + 0x001053a5, 0x05020004, 0x5994002d, 0x800001c0, + 0x0502002b, 0x59c40006, 0x82000540, 0x000000c0, + 0x48038806, 0x0501f026, 0x0531f913, 0x916c0581, + 0x050200c5, 0x59a80042, 0x90000589, 0x050200c2, + 0x497b5040, 0x42000800, 0xffffd815, 0x0511fd66, + 0x42024800, 0x001124b6, 0x497a4805, 0x64078893, + 0x4a038805, 0x000000f0, 0x0531f992, 0x59c41006, + 0x05020006, 0x82081540, 0x000000f1, 0x82081500, + 0xbbffffff, 0x0501f003, 0x82081540, 0x440000f1, + 0x480b8806, 0x053dfa5b, 0x0541fff8, 0x0501f8ab, + 0x050000a9, 0x42000000, 0x0011233c, 0x0569fd34, + 0x60c01100, 0x497b50b7, 0x0501f036, 0x0525fb72, + 0x59c400a4, 0x9000050f, 0x90000487, 0x0502109e, + 0x053dfa4c, 0x59c400a3, 0x82000500, 0xffefffff, + 0x480388a3, 0x59a800c2, 0x800001c0, 0x05020003, + 0x0529f8c5, 0x0501f094, 0x59a80046, 0x84000546, + 0x48035046, 0x0531f965, 0x59c41006, 0x05020006, + 0x82081540, 0x44000001, 0x82081500, 0xffffff0f, + 0x0501f003, 0x82081540, 0x440000f1, 0x480b8806, + 0x497b9005, 0x0501f885, 0x05000083, 0x60000000, + 0x052dfeec, 0x4a038802, 0x0000ffff, 0x4a0378e4, + 0x00003000, 0x42007000, 0x00111ffa, 0x58380401, + 0x8c000508, 0x05020003, 0x4a01a8e4, 0x0000c000, + 0x42000000, 0x00112333, 0x0569fd01, 0x59a81040, + 0x600c0800, 0x0541ffa6, 0x60401100, 0x59a81809, + 0x0521ff1d, 0x59a804d1, 0x82000500, 0xffffff40, + 0x480354d1, 0x59a8024c, 0x84000518, 0x4803524c, 0x59c40001, 0x82000500, 0x00018000, 0x82000580, - 0x00018000, 0x0502000c, 0x60880801, 0x61d81000, - 0x60201800, 0x0521fe44, 0x050008c8, 0x60880801, - 0x61b81000, 0x60201800, 0x0521fe3f, 0x050008c3, - 0x0501f00b, 0x60880801, 0x61d81000, 0x60201800, - 0x0521fe47, 0x050008bd, 0x60880801, 0x61b81000, - 0x60201800, 0x0521fe42, 0x050008b8, 0x4a03c014, - 0x03800000, 0x0501f003, 0x4a03c013, 0x00200000, - 0x052dfb92, 0x0500003d, 0x59c400a4, 0x9000050f, - 0x90000588, 0x05000021, 0x59c40005, 0x8c000534, - 0x0502001e, 0x5994002e, 0x800001c0, 0x05000007, - 0x0501fae3, 0x90000402, 0x5994082c, 0x80040480, - 0x0502103c, 0x0501f004, 0x5994002c, 0x90000482, - 0x05021038, 0x052dfb83, 0x05020036, 0x4a038805, - 0x000000f0, 0x052dfbad, 0x4a035041, 0x0000aaaa, - 0x64035042, 0x59c408a3, 0x90040d48, 0x480788a3, - 0x6006d800, 0x6403506a, 0x64078805, 0x497b282c, - 0x497b282d, 0x0501f019, 0x052dfb72, 0x05020007, - 0x59a80041, 0x82000580, 0x0000aaaa, 0x05020003, - 0x4a03503d, 0x00ffffff, 0x497b5041, 0x59c40006, - 0x82000540, 0x04000001, 0x48038806, 0x8d0c0506, - 0x05020004, 0x59c408a3, 0x90040d48, 0x480788a3, - 0x6006d800, 0x6403506a, 0x64078805, 0x497b282c, - 0x497b282d, 0x0501f00f, 0x59c40005, 0x82000500, - 0x000000c0, 0x0500000b, 0x59c40006, 0x82000540, - 0x000000f1, 0x48038806, 0x05fdf7f2, 0x0509fe0b, - 0x05020004, 0x59a80075, 0x800001c0, 0x05fe0757, - 0x497b8885, 0x1c01f000, 0x4803c856, 0x0521fb9f, - 0x05020005, 0x050dfbc2, 0x42000000, 0x0010e4bf, - 0x0565fa63, 0x60000001, 0x0509fd06, 0x6403506a, - 0x0509fdfa, 0x05020009, 0x59a80068, 0x800001c0, - 0x05000004, 0x80000040, 0x48035068, 0x05020003, - 0x642b5068, 0x64075075, 0x497b8885, 0x0501f22c, - 0x5994002c, 0x5994082d, 0x80040540, 0x1c01f000, - 0x497b282d, 0x1c01f000, 0x4a038805, 0x000000f0, - 0x1c01f000, 0x641f5093, 0x640f5094, 0x64035095, - 0x4a035096, 0x000090d5, 0x052dfe64, 0x4a035449, - 0x0000ffff, 0x4a03503d, 0x00ffffff, 0x0555fad7, - 0x4a03504d, 0x20200000, 0x4a03504e, 0x88000200, - 0x4a03504f, 0x00ff001f, 0x4a035050, 0x000007d0, - 0x4a035051, 0x80000a00, 0x4a035052, 0xa0000200, - 0x4a035053, 0x00ff0004, 0x4a035054, 0x00010000, - 0x4a035055, 0x80000000, 0x4a035056, 0x00000200, - 0x4a035057, 0x00ff0000, 0x4a035058, 0x00010000, - 0x4a03505f, 0x514c4f47, 0x4a035060, 0x49432020, - 0x1c01f000, 0x4d440000, 0x417a8800, 0x4c5c0000, - 0x4178b800, 0x0001fb00, 0x05020004, 0x0529fc62, - 0x05020002, 0x805cb800, 0x81468800, 0x83440580, - 0x000007f0, 0x05fe07f8, 0x405c0800, 0x5c00b800, - 0x5c028800, 0x1c01f000, 0x4803c857, 0x5c000000, - 0x4c000000, 0x4803c857, 0x0501f808, 0x485fc857, - 0x4203e000, 0x50000000, 0x5c000000, 0x4d780000, - 0x6008b900, 0x0501f005, 0x485fc857, 0x4203e000, - 0x50000000, 0x6008b900, 0x05006000, 0x4c000000, - 0x4c040000, 0x59bc00ea, 0x4803c857, 0x90000507, - 0x90000581, 0x05020003, 0x60000800, 0x053dff51, - 0x59b800ea, 0x4803c857, 0x641370e8, 0x5c000800, - 0x4807c025, 0x80040920, 0x4807c026, 0x5c000000, - 0x4803c023, 0x80000120, 0x4803c024, 0x5c000000, - 0x4803c857, 0x4803c021, 0x80000120, 0x4803c022, - 0x41f80000, 0x4803c029, 0x80000120, 0x4803c02a, - 0x41780800, 0x4807c027, 0x59a800af, 0x8c00050a, - 0x05000005, 0x59e00027, 0x8400054a, 0x4803c857, - 0x4803c027, 0x0565fafa, 0x0500004a, 0x42000800, - 0x001105c8, 0x46000800, 0xfaceface, 0x80040800, - 0x4c080000, 0x4c0c0000, 0x600010f4, 0x58080013, - 0x44000800, 0x80040800, 0x58080022, 0x44000800, - 0x80040800, 0x58080023, 0x44000800, 0x80040800, - 0x58080024, 0x44000800, 0x80040800, 0x58080025, - 0x44000800, 0x80040800, 0x58080028, 0x44000800, - 0x80040800, 0x610010f4, 0x602c1800, 0x50080000, - 0x44000800, 0x80081000, 0x80040800, 0x800c1840, - 0x05fe07fb, 0x600c1800, 0x600010f6, 0x480c1003, - 0x58080005, 0x44000800, 0x80040800, 0x800c1840, - 0x05fe17fb, 0x600010f8, 0x58080002, 0x44000800, - 0x80040800, 0x58080003, 0x44000800, 0x80040800, - 0x58080020, 0x44000800, 0x80040800, 0x58080021, - 0x44000800, 0x80040800, 0x58080022, 0x44000800, - 0x80040800, 0x58080023, 0x44000800, 0x80040800, - 0x600010f6, 0x58080007, 0x44000800, 0x80040800, - 0x5808002b, 0x44000800, 0x80040800, 0x5808007c, - 0x44000800, 0x80040800, 0x5c001800, 0x5c001000, - 0x64030000, 0x485fc020, 0x905cb9c0, 0x905cbd52, - 0x485fc011, 0x4203e000, 0x40000000, 0x6016d800, - 0x59e00017, 0x60000800, 0x8c00050a, 0x050a0875, - 0x8d0c0530, 0x050a0868, 0x050a086a, 0x6403c017, - 0x4203e000, 0x30000001, 0x0501f956, 0x05fdf7ff, - 0x60100000, 0x0501f80c, 0x4a03c855, 0x0001eb5a, - 0x59e40001, 0x82000540, 0xff000700, 0x4803c801, - 0x42000000, 0x0010e4e5, 0x49780003, 0x49780004, - 0x1c01f000, 0x42000800, 0x0010e4e7, 0x44000800, - 0x59e40801, 0x82041500, 0x00f3c0ff, 0x480bc801, - 0x8c040524, 0x0500000b, 0x4c000000, 0x59e41052, - 0x59e40054, 0x800000d4, 0x82000400, 0x00110772, - 0x80081480, 0x480bc853, 0x6503c800, 0x5c000000, - 0x4a03c850, 0x00110772, 0x800000d4, 0x82002400, - 0x00110771, 0x4813c851, 0x4a03c853, 0x00000400, - 0x42000000, 0x00110772, 0x82001400, 0x00001000, - 0x45780000, 0x80000000, 0x80081d80, 0x05fe07fd, - 0x4807c801, 0x1c01f000, 0x42002000, 0x0010e4e5, - 0x59e41801, 0x58100c01, 0x82040500, 0x00003800, - 0x820c1d00, 0xffffc7ff, 0x800c1d40, 0x480fc801, - 0x1c01f000, 0x5c036000, 0x4db00000, 0x49b3c857, - 0x4803c857, 0x1c01f000, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x8d0c052a, 0x0500002f, 0x401c0000, - 0x80040d40, 0x4004b800, 0x400cc000, 0x4018c800, - 0x0501f8d3, 0x41784000, 0x42002800, 0x0010e4e5, - 0x58142017, 0x5814000d, 0x80100400, 0x445c0000, - 0x80102000, 0x80000000, 0x82104d00, 0x000000ff, - 0x050008a9, 0x0500001c, 0x4c000000, 0x0501f890, - 0x5c000000, 0x44080000, 0x80102000, 0x80000000, - 0x82104d00, 0x000000ff, 0x0500089f, 0x05000012, - 0x44600000, 0x80102000, 0x80000000, 0x82104d00, - 0x000000ff, 0x05000898, 0x0500000b, 0x44640000, - 0x80102000, 0x80000000, 0x82104d00, 0x000000ff, - 0x05000891, 0x05000004, 0x48102817, 0x802041c0, - 0x05060d32, 0x5c00c800, 0x5c00c000, 0x5c00b800, + 0x00018000, 0x59c400a3, 0x05020004, 0x82000540, + 0x00001000, 0x0501f003, 0x82000500, 0xffffefff, + 0x480388a3, 0x59c80015, 0x84000548, 0x48039015, + 0x050dfb18, 0x59a81008, 0x84081500, 0x480b5008, + 0x850e1d0a, 0x0529ffc1, 0x0531f91e, 0x05000007, + 0x8d0c0506, 0x05000005, 0x640750b7, 0x850e1d0e, + 0x0525fc3b, 0x0501f048, 0x052df8c8, 0x05000005, + 0x59c41002, 0x8408150c, 0x480b8802, 0x0501f017, + 0x0531f910, 0x05020005, 0x59a80049, 0x80000540, + 0x05580b82, 0x0501f011, 0x0559fb80, 0x59a8024c, + 0x8c000506, 0x0502000d, 0x59a80049, 0x80000540, + 0x05020007, 0x59a81c4c, 0x820c0580, 0x0000ffff, + 0x05000006, 0x8c0c0508, 0x05000004, 0x4a03544c, + 0x0000ffff, 0x0529f978, 0x497b504e, 0x497b504d, + 0x497b50b8, 0x0531f8f7, 0x59a8124c, 0x05020009, + 0x050df90a, 0x80001580, 0x59a80050, 0x82000500, + 0xffff0000, 0x80040d40, 0x48075050, 0x0501f005, + 0x59a80050, 0x82000500, 0xffff0000, 0x48035050, + 0x599c0017, 0x8c00050a, 0x05000002, 0x84081544, + 0x480b524c, 0x0531f8e3, 0x05000003, 0x050df8f7, + 0x48078880, 0x60141000, 0x0545fc39, 0x497b504e, + 0x497b5047, 0x4a035048, 0x0000ffff, 0x4a01a8e4, + 0x000000c0, 0x600ad800, 0x0531f8d6, 0x05000005, + 0x59a8024c, 0x9000050c, 0x90000584, 0x05000002, + 0x0511fa95, 0x1c01f000, 0x0521fff2, 0x05020026, + 0x599c0019, 0x82000500, 0x0000e000, 0x82000580, + 0x00004000, 0x05020020, 0x59c40001, 0x82000d00, + 0x00018000, 0x82040580, 0x00010000, 0x05000004, + 0x82040580, 0x00008000, 0x05020017, 0x59a800a9, + 0x90000483, 0x05001003, 0x90000541, 0x0501f012, + 0x050dfebc, 0x64075078, 0x4a035079, 0xaabbccdd, + 0x6413506c, 0x6403506d, 0x6012d800, 0x59a800a9, + 0x80000000, 0x480350a9, 0x59a800a8, 0x82000500, + 0xfffffff8, 0x90000544, 0x480350a8, 0x0501fd3e, + 0x80000580, 0x1c01f000, 0x0525f9c7, 0x05000051, + 0x59a8024c, 0x90000523, 0x900005a3, 0x0502004d, + 0x0525f9c6, 0x0500004b, 0x4a038802, 0x0000ffbf, + 0x59a804d1, 0x8c00050c, 0x05020132, 0x8c000506, + 0x0502000b, 0x8c000508, 0x0502012e, 0x84000548, + 0x480354d1, 0x0525f9be, 0x05000004, 0x417a5800, + 0x055dfa2c, 0x0501f127, 0x0501f0ee, 0x8c00050a, + 0x05020038, 0x8400054a, 0x480354d1, 0x497b504e, + 0x497b504d, 0x497b5047, 0x4a035048, 0x0000ffff, + 0x59a8024c, 0x82000500, 0xffffff7c, 0x4803524c, + 0x42024800, 0x001124b6, 0x59240200, 0x82000500, + 0xffffff1f, 0x48024a00, 0x59a802d1, 0x5924100b, + 0x82081500, 0x00001fff, 0x80080580, 0x05000012, + 0x4d3c0000, 0x4d300000, 0x4d400000, 0x60aa8000, + 0x417a6000, 0x600a7800, 0x41780800, 0x0511fcbe, + 0x5c028000, 0x5c026000, 0x5c027800, 0x59a802d1, + 0x5924080b, 0x82040d00, 0xffffe000, 0x80040540, + 0x4802480b, 0x4d300000, 0x417a6000, 0x0511fc5f, + 0x5c026000, 0x4803c856, 0x5924000c, 0x800001c0, + 0x05020006, 0x0001f81f, 0x050000f2, 0x492e480c, + 0x5924000b, 0x48025802, 0x0511fa1b, 0x0501f0ed, + 0x59a80048, 0x82000580, 0x0000ffff, 0x05000003, + 0x0511fa15, 0x0501f0e7, 0x0569fd46, 0x05000017, + 0x0569fd49, 0x05000008, 0x0531f84a, 0x05000006, + 0x59a8024c, 0x8c000506, 0x0500004e, 0x0529fff7, + 0x050200dc, 0x80000580, 0x0509ffae, 0x600ed800, + 0x4a035048, 0x0000ffff, 0x4a01a8e4, 0x00000080, + 0x4a038802, 0x0000ffff, 0x850e1d02, 0x0545f9f5, + 0x0501fcb4, 0x0501f0cf, 0x59a8024c, 0x8c00050a, + 0x05020003, 0x8c000506, 0x05000037, 0x8c000500, + 0x05000035, 0x4a038802, 0x0000ffbf, 0x8c000502, + 0x05000031, 0x0525f951, 0x05020004, 0x599c0018, + 0x8c000516, 0x05020029, 0x59a8004d, 0x82000580, + 0x0000ffff, 0x05000020, 0x0525f948, 0x05000006, + 0x59a804d1, 0x8c000500, 0x05000003, 0x0511fc9b, + 0x0501f008, 0x41781800, 0x0569fd23, 0x05000002, + 0x60401800, 0x59a8024c, 0x8c00050a, 0x05120af3, + 0x42024800, 0x001124b6, 0x417a4000, 0x59240200, + 0x82000500, 0x000000e0, 0x82000580, 0x000000e0, + 0x050200a4, 0x050dff8c, 0x59a8024c, 0x8c000504, + 0x050200a0, 0x600c1000, 0x417a5800, 0x050dffab, + 0x0501f09c, 0x59a8024c, 0x8c00051c, 0x05020003, + 0x8c000504, 0x05fc07f8, 0x59a8004e, 0x80000540, + 0x05020094, 0x59a8024c, 0x8c000508, 0x05020017, + 0x59a80047, 0x80000540, 0x0502008e, 0x59a8024c, + 0x8c00050e, 0x0500000c, 0x8c000502, 0x0502000a, + 0x052dfff0, 0x05000087, 0x82000500, 0xffffff77, + 0x4803524c, 0x4a035048, 0x0000ffff, 0x0511f9ae, + 0x0501f080, 0x0569fcf0, 0x0500000c, 0x0511fd3c, + 0x0502007c, 0x0501f009, 0x599c1819, 0x8c0c0510, + 0x05000004, 0x8c000502, 0x05020021, 0x0501f075, + 0x8c000516, 0x05000073, 0x0529ff8c, 0x05020071, + 0x0525f8fe, 0x05020004, 0x599c0018, 0x8c000516, + 0x05020003, 0x052dfbaf, 0x0502006a, 0x59a80006, + 0x8c00051c, 0x05020004, 0x599c0017, 0x8c00050a, + 0x0500000f, 0x59a8b0ac, 0x417a8800, 0x0001fb08, + 0x05020004, 0x59340200, 0x8c00051a, 0x0502005d, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07f5, 0x0569fce7, + 0x05000004, 0x4a038802, 0x0000ffbf, 0x0501f003, + 0x4a038802, 0x0000ffff, 0x42001800, 0x00111ce0, + 0x0501fd73, 0x42001800, 0x00111ced, 0x0501fd70, + 0x850e1d02, 0x4a01a8e4, 0x00000080, 0x600ed800, + 0x4a035048, 0x0000ffff, 0x0501fc26, 0x80000580, + 0x0509ff14, 0x497b50a9, 0x6407507b, 0x0525f8cb, + 0x0502000b, 0x599c0018, 0x8c000516, 0x05000008, + 0x59a804d1, 0x8c00050e, 0x05020036, 0x8400054e, + 0x480354d1, 0x0521fe46, 0x0501f016, 0x59a81a4c, + 0x59a82044, 0x82102580, 0x0000aaaa, 0x05000004, + 0x8c0c0506, 0x05020002, 0x480f544c, 0x8c0c0508, + 0x05000007, 0x599c1819, 0x8c0c0510, 0x05000004, + 0x61f8180f, 0x60102000, 0x0501f003, 0x61fc19ff, + 0x60182000, 0x60003000, 0x417a4000, 0x0521fdd2, + 0x052dff96, 0x0500000a, 0x59c40006, 0x052dff81, + 0x05000004, 0x82000500, 0xffffff0f, 0x0501f003, + 0x82000500, 0xfbffffff, 0x48038806, 0x0525f89f, + 0x0500000a, 0x59a804d1, 0x8c000500, 0x05000007, + 0x59c40801, 0x82040d40, 0x00004000, 0x48078801, + 0x64c378e4, 0x0501f006, 0x59c40801, 0x82040d00, + 0xffffbfff, 0x48078801, 0x648378e4, 0x0545f925, + 0x1c01f000, 0x4c040000, 0x4c080000, 0x4c100000, + 0x59a8006d, 0x90000c84, 0x050219df, 0x0c01f805, + 0x5c002000, 0x5c001000, 0x5c000800, 0x1c01f000, + 0x00100440, 0x001004da, 0x001004ff, 0x001005ad, + 0x60380938, 0x050df9f0, 0x90040550, 0x82000500, + 0xfffffff7, 0x60380938, 0x050df9f0, 0x59c410a3, + 0x84081518, 0x480b88a3, 0x0521fe72, 0x05020021, + 0x599c0019, 0x82000500, 0x0000e000, 0x82000580, + 0x00004000, 0x0502001b, 0x59a808a8, 0x90040d07, + 0x90040580, 0x0502000b, 0x59a8006c, 0x90000582, + 0x05000011, 0x050df933, 0x497b506b, 0x050dfd32, + 0x640f5079, 0x640b506c, 0x64075078, 0x0501f00a, + 0x90040584, 0x05020008, 0x497b2804, 0x497b2805, + 0x050dfd38, 0x64075078, 0x4a035079, 0xaabbccdd, + 0x6413506c, 0x59a800a8, 0x80000000, 0x480350a8, + 0x60000001, 0x0509fe97, 0x053df80a, 0x59c408a3, + 0x82040d00, 0xfffffff7, 0x480788a3, 0x052dff2b, + 0x0500000d, 0x052dff35, 0x0500000b, 0x052dff2d, + 0x0502099d, 0x59c400a3, 0x84000532, 0x84000570, + 0x480388a3, 0x0531fa5c, 0x4a038808, 0x00000208, + 0x0501f012, 0x59c400a3, 0x84000530, 0x82000500, + 0xbf7fffff, 0x480388a3, 0x61e00801, 0x0525ff32, + 0x59c400a3, 0x82000540, 0x00018000, 0x8400051c, + 0x480388a3, 0x82000500, 0xfffeffff, 0x480388a3, + 0x4a038808, 0x00000200, 0x59c40006, 0x82000500, + 0xfbffff0e, 0x48038806, 0x497b282d, 0x497b282e, + 0x61d00803, 0x42001000, 0x001005c7, 0x0539fe1f, + 0x59c40805, 0x64078805, 0x0509ff44, 0x05020006, + 0x60040000, 0x050df924, 0x60040000, 0x050df8f2, + 0x0501f01e, 0x0509ff43, 0x05020006, 0x41780000, + 0x050df91d, 0x41780000, 0x050df8eb, 0x0501f017, + 0x0509ff42, 0x05020006, 0x60080000, 0x050df916, + 0x60080000, 0x050df8e4, 0x0501f010, 0x0509ff41, + 0x05020006, 0x600c0000, 0x050df90f, 0x600c0000, + 0x050df8dd, 0x0501f009, 0x0509ff40, 0x0502095a, + 0x59a80078, 0x800001c0, 0x05000004, 0x0509ff40, + 0x6407506d, 0x0501f018, 0x050df95d, 0x6407506d, + 0x052dfeda, 0x05000008, 0x052dfee4, 0x05000006, + 0x052dfedc, 0x0502094c, 0x64075045, 0x052dfe4a, + 0x0501f00d, 0x59c400a4, 0x9000050f, 0x90000588, + 0x05000003, 0x4a038805, 0x04000000, 0x59c400a3, + 0x82000540, 0x0001c000, 0x480388a3, 0x84000520, + 0x480388a3, 0x1c01f000, 0x0501f8e9, 0x05020003, + 0x640f506d, 0x0501f021, 0x0509ff1c, 0x0502000d, + 0x59a80078, 0x800001c0, 0x0500000a, 0x0509ff1c, + 0x59a80077, 0x8c00051e, 0x05000018, 0x052dfebd, + 0x05020006, 0x64075045, 0x052dfe2b, 0x0501f003, + 0x050df907, 0x05020011, 0x050df89e, 0x640b506d, + 0x497b5078, 0x59c400a3, 0x84000520, 0x480388a3, + 0x052dfeb0, 0x05000009, 0x0521fdc6, 0x05000007, + 0x497b282d, 0x497b282e, 0x60b40800, 0x42001000, + 0x001005c7, 0x0539fdbd, 0x1c01f000, 0x0501f8c4, + 0x05020003, 0x640f506d, 0x0501f0a9, 0x4a038805, + 0x000000f0, 0x050df8ee, 0x050200a0, 0x050dfaf9, + 0x05000017, 0x050dfade, 0x05020015, 0x050dfae7, + 0x0502000a, 0x59a80079, 0x90000584, 0x05fc07f2, + 0x0509fee4, 0x0502000e, 0x59a80079, 0x82000580, + 0xaabbccdd, 0x05fc07ec, 0x59a80079, 0x90000580, + 0x05fc07e9, 0x0509fec9, 0x05020005, 0x59a80079, + 0x82000580, 0xaabbccdd, 0x05fc07e3, 0x59a800aa, + 0x8c000500, 0x0502000b, 0x59a80887, 0x8c04050c, + 0x05020008, 0x60380938, 0x050df90b, 0x90040548, + 0x82000500, 0xffffffef, 0x60380938, 0x050df90b, + 0x050dfad4, 0x05000032, 0x0525f817, 0x0500000c, + 0x4a03c014, 0x00200020, 0x59c40001, 0x82000500, + 0x00018000, 0x82000580, 0x00018000, 0x05020026, + 0x4a03c013, 0x00200020, 0x0501f025, 0x4a03c013, + 0x03800300, 0x4a03c014, 0x03800380, 0x59c40001, + 0x82000500, 0x00018000, 0x82000580, 0x00018000, + 0x0502000c, 0x60880801, 0x61d81000, 0x60201800, + 0x0525f801, 0x050008cc, 0x60880801, 0x61b81000, + 0x60201800, 0x0521fffc, 0x050008c7, 0x0501f00b, + 0x60880801, 0x61d81000, 0x60201800, 0x0525f804, + 0x050008c1, 0x60880801, 0x61b81000, 0x60201800, + 0x0521ffff, 0x050008bc, 0x4a03c014, 0x03800000, + 0x0501f003, 0x4a03c013, 0x00200000, 0x052dfe45, + 0x0500003d, 0x59c400a4, 0x9000050f, 0x90000588, + 0x05000021, 0x59c40005, 0x8c000534, 0x0502001e, + 0x5994002f, 0x800001c0, 0x05000007, 0x0501fadb, + 0x90000402, 0x5994082d, 0x80040480, 0x0502103c, + 0x0501f004, 0x5994002d, 0x90000482, 0x05021038, + 0x052dfe36, 0x05020036, 0x4a038805, 0x000000f0, + 0x052dfe60, 0x4a035044, 0x0000aaaa, 0x64035045, + 0x59c408a3, 0x90040d48, 0x480788a3, 0x6006d800, + 0x6403506d, 0x64078805, 0x497b282d, 0x497b282e, + 0x0501f019, 0x052dfe25, 0x05020007, 0x59a80044, + 0x82000580, 0x0000aaaa, 0x05020003, 0x4a035040, + 0x00ffffff, 0x497b5044, 0x59c40006, 0x82000540, + 0x04000001, 0x48038806, 0x8d0c0506, 0x05020004, + 0x59c408a3, 0x90040d48, 0x480788a3, 0x6006d800, + 0x6403506d, 0x64078805, 0x497b282d, 0x497b282e, + 0x0501f00f, 0x59c40005, 0x82000500, 0x000000c0, + 0x0500000b, 0x59c40006, 0x82000540, 0x000000f1, + 0x48038806, 0x05fdf7f2, 0x0509fe54, 0x05020004, + 0x59a80078, 0x800001c0, 0x05fe0757, 0x497b8885, + 0x1c01f000, 0x4803c856, 0x0521fd0e, 0x05020005, + 0x050dfc0b, 0x42000000, 0x00112463, 0x0569f9a7, + 0x60000001, 0x0509fd4f, 0x6403506d, 0x0509fe43, + 0x05020009, 0x59a8006b, 0x800001c0, 0x05000004, + 0x80000040, 0x4803506b, 0x05020003, 0x642b506b, + 0x64075078, 0x497b8885, 0x0501f224, 0x5994002d, + 0x5994082e, 0x80040540, 0x1c01f000, 0x497b282e, + 0x1c01f000, 0x4a038805, 0x000000f0, 0x1c01f000, + 0x64235096, 0x640f5097, 0x64035098, 0x4a035099, + 0x001090d5, 0x0531f91d, 0x4a03544c, 0x0000ffff, + 0x4a035040, 0x00ffffff, 0x0559f838, 0x4a035050, + 0x20200000, 0x4a035051, 0x88000200, 0x4a035052, + 0x00ff001f, 0x4a035053, 0x000007d0, 0x4a035054, + 0x80000a00, 0x4a035055, 0xa0000200, 0x4a035056, + 0x00ff0004, 0x4a035057, 0x00010000, 0x4a035058, + 0x80000000, 0x4a035059, 0x00000200, 0x4a03505a, + 0x00ff0000, 0x4a03505b, 0x00010000, 0x4a035062, + 0x514c4f47, 0x4a035063, 0x49432020, 0x1c01f000, + 0x4d440000, 0x417a8800, 0x4c5c0000, 0x4178b800, + 0x0001fb08, 0x05020004, 0x0529fef4, 0x05020002, + 0x805cb800, 0x81468800, 0x83440580, 0x000007f0, + 0x05020002, 0x60028810, 0x59a800ad, 0x81440580, + 0x05fe07f4, 0x405c0800, 0x5c00b800, 0x5c028800, + 0x1c01f000, 0x4803c857, 0x5c000000, 0x4c000000, + 0x4803c857, 0x0501f808, 0x485fc857, 0x4203e000, + 0x50000000, 0x5c000000, 0x4d780000, 0x6008b900, + 0x0501f005, 0x485fc857, 0x4203e000, 0x50000000, + 0x6008b900, 0x05006000, 0x4c000000, 0x4c040000, + 0x59bc00ea, 0x4803c857, 0x90000507, 0x90000581, + 0x05020003, 0x60000800, 0x0541fbd4, 0x59b800ea, + 0x4803c857, 0x641370e8, 0x5c000800, 0x4807c025, + 0x80040920, 0x4807c026, 0x5c000000, 0x4803c023, + 0x80000120, 0x4803c024, 0x5c000000, 0x4803c857, + 0x4803c021, 0x80000120, 0x4803c022, 0x41f80000, + 0x4803c029, 0x80000120, 0x4803c02a, 0x41780800, + 0x4807c027, 0x59a800b4, 0x8c00050a, 0x05000005, + 0x59e00027, 0x8400054a, 0x4803c857, 0x4803c027, + 0x0569fa3a, 0x0500004a, 0x42000800, 0x0011456c, + 0x46000800, 0xfaceface, 0x80040800, 0x4c080000, + 0x4c0c0000, 0x600010f4, 0x58080013, 0x44000800, + 0x80040800, 0x58080022, 0x44000800, 0x80040800, + 0x58080023, 0x44000800, 0x80040800, 0x58080024, + 0x44000800, 0x80040800, 0x58080025, 0x44000800, + 0x80040800, 0x58080028, 0x44000800, 0x80040800, + 0x610010f4, 0x602c1800, 0x50080000, 0x44000800, + 0x80081000, 0x80040800, 0x800c1840, 0x05fe07fb, + 0x600c1800, 0x600010f6, 0x480c1003, 0x58080005, + 0x44000800, 0x80040800, 0x800c1840, 0x05fe17fb, + 0x600010f8, 0x58080002, 0x44000800, 0x80040800, + 0x58080003, 0x44000800, 0x80040800, 0x58080020, + 0x44000800, 0x80040800, 0x58080021, 0x44000800, + 0x80040800, 0x58080022, 0x44000800, 0x80040800, + 0x58080023, 0x44000800, 0x80040800, 0x600010f6, + 0x58080007, 0x44000800, 0x80040800, 0x5808002b, + 0x44000800, 0x80040800, 0x5808007c, 0x44000800, + 0x80040800, 0x5c001800, 0x5c001000, 0x64030000, + 0x485fc020, 0x905cb9c0, 0x905cbd52, 0x485fc011, + 0x4203e000, 0x40000000, 0x6016d800, 0x59e00017, + 0x60000800, 0x8c00050a, 0x050a08ab, 0x8d0c0530, + 0x050a089e, 0x050a08a0, 0x6403c017, 0x4203e000, + 0x30000001, 0x0501f94a, 0x05fdf7ff, 0x600c0000, + 0x0501f80c, 0x4a03c855, 0x0001eb5a, 0x59e40001, + 0x82000540, 0xff000700, 0x4803c801, 0x42000000, + 0x00112489, 0x49780003, 0x49780004, 0x1c01f000, + 0x42000800, 0x0011248b, 0x44000800, 0x59e40801, + 0x82041500, 0x00f3c0ff, 0x480bc801, 0x4a03c850, + 0x00114716, 0x800000d4, 0x82002400, 0x00114715, + 0x4813c851, 0x4a03c853, 0x00000400, 0x42000000, + 0x00114716, 0x82001400, 0x00000c00, 0x45780000, + 0x80000000, 0x80081d80, 0x05fe07fd, 0x4807c801, + 0x1c01f000, 0x42002000, 0x00112489, 0x59e41801, + 0x58100c01, 0x82040500, 0x00003800, 0x820c1d00, + 0xffffc7ff, 0x800c1d40, 0x480fc801, 0x1c01f000, + 0x5c036000, 0x4db00000, 0x49b3c857, 0x4803c857, 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000, - 0x42001000, 0x04000000, 0x41ccc800, 0x42002800, - 0x0010e4e5, 0x59a800d0, 0x82000d00, 0x000003ff, - 0x4c000000, 0x58140212, 0x0501f85d, 0x5c000000, - 0x4004b800, 0x4008c000, 0x905cbc06, 0x8c000516, - 0x05000002, 0x905cbc02, 0x0501f016, 0x4c5c0000, - 0x4c600000, 0x4c640000, 0x42002800, 0x0010e4e5, - 0x42001000, 0x03000000, 0x4000c800, 0x821c0500, - 0x00003c00, 0x80000114, 0x821c0d00, 0x000003ff, - 0x4c000000, 0x58140412, 0x0501f845, 0x5c000000, - 0x4004b800, 0x4008c000, 0x805cbc00, 0x805cb840, - 0x825c0480, 0x00000240, 0x05fe1ed0, 0x0501f878, - 0x405c0000, 0x905cbc02, 0x80600d40, 0x42002800, - 0x0010e4e5, 0x41784000, 0x58142017, 0x825c0480, - 0x00000101, 0x05021028, 0x5814000d, 0x80100400, - 0x44040000, 0x80102000, 0x80000000, 0x805cb840, - 0x82104d00, 0x000000ff, 0x05000847, 0x0500001a, - 0x4c000000, 0x0501f82e, 0x5c000000, 0x44080000, + 0x8d0c052a, 0x0500002f, 0x401c0000, 0x80040d40, + 0x4004b800, 0x400cc000, 0x4018c800, 0x0501f8d3, + 0x41784000, 0x42002800, 0x00112489, 0x58142017, + 0x5814000d, 0x80100400, 0x445c0000, 0x80102000, + 0x80000000, 0x82104d00, 0x000000ff, 0x050008a9, + 0x0500001c, 0x4c000000, 0x0501f890, 0x5c000000, + 0x44080000, 0x80102000, 0x80000000, 0x82104d00, + 0x000000ff, 0x0500089f, 0x05000012, 0x44600000, + 0x80102000, 0x80000000, 0x82104d00, 0x000000ff, + 0x05000898, 0x0500000b, 0x44640000, 0x80102000, + 0x80000000, 0x82104d00, 0x000000ff, 0x05000891, + 0x05000004, 0x48102817, 0x802041c0, 0x05060d72, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x4c5c0000, 0x4c600000, 0x4c640000, 0x42001000, + 0x04000000, 0x41ccc800, 0x42002800, 0x00112489, + 0x59a800d5, 0x82000d00, 0x000003ff, 0x4c000000, + 0x58140212, 0x0501f85d, 0x5c000000, 0x4004b800, + 0x4008c000, 0x905cbc06, 0x8c000516, 0x05000002, + 0x905cbc02, 0x0501f016, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x42002800, 0x00112489, 0x42001000, + 0x03000000, 0x4000c800, 0x821c0500, 0x00003c00, + 0x80000114, 0x821c0d00, 0x000003ff, 0x4c000000, + 0x58140412, 0x0501f845, 0x5c000000, 0x4004b800, + 0x4008c000, 0x805cbc00, 0x805cb840, 0x825c0480, + 0x00000240, 0x05fe1edc, 0x0501f878, 0x405c0000, + 0x905cbc02, 0x80600d40, 0x42002800, 0x00112489, + 0x41784000, 0x58142017, 0x825c0480, 0x00000101, + 0x05021028, 0x5814000d, 0x80100400, 0x44040000, 0x80102000, 0x80000000, 0x805cb840, 0x82104d00, - 0x000000ff, 0x0500083c, 0x0500000f, 0x50641800, - 0x440c0000, 0x80000000, 0x80102000, 0x8064c800, - 0x805cb840, 0x05fe07f6, 0x82104d00, 0x000000ff, - 0x05000831, 0x05000004, 0x48102817, 0x802041c0, - 0x05060cd2, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x82100500, 0x000000ff, 0x805c0400, - 0x82000480, 0x00000200, 0x05fc17d4, 0x6108b800, - 0x82600d40, 0x00008040, 0x05fdf7d0, 0x800001c0, - 0x05000006, 0x80041c80, 0x05001004, 0x05000003, - 0x40000800, 0x8408155c, 0x1c01f000, 0x59a800ba, - 0x800018c4, 0x800010ca, 0x800000cc, 0x800c0400, - 0x80081400, 0x59940024, 0x61a01807, 0x800c1c80, - 0x05021002, 0x61a01807, 0x5994002e, 0x800c0400, - 0x82001c80, 0x000007d0, 0x05001002, 0x6140000f, - 0x4c080000, 0x0501f8b6, 0x5c001000, 0x80081400, - 0x1c01f000, 0x4813c857, 0x5c036000, 0x4db00000, - 0x49b3c857, 0x40001800, 0x58140000, 0x8c000502, - 0x05000009, 0x58140821, 0x80040800, 0x48042821, - 0x4807c857, 0x8400054a, 0x48002800, 0x80000580, - 0x0501f00e, 0x82102500, 0x000003ff, 0x80204000, - 0x58140014, 0x80000000, 0x90000503, 0x48002814, - 0x05000003, 0x400c0000, 0x0501f002, 0x5814000d, - 0x80000540, 0x4803c857, 0x1c01f000, 0x42002800, - 0x0010e4e5, 0x58140000, 0x8c00050a, 0x0500002f, - 0x8c000502, 0x0502002d, 0x4c5c0000, 0x5814b821, - 0x49782821, 0x8400050a, 0x48002800, 0x58142017, - 0x4813c857, 0x5814000d, 0x80100400, 0x41784000, - 0x42000800, 0x0b000001, 0x44040000, 0x80000000, - 0x80102000, 0x82104d00, 0x000000ff, 0x05fc0fca, - 0x05fc0e3e, 0x4c000000, 0x05fdffb1, 0x5c000000, - 0x44080000, 0x80000000, 0x80102000, 0x82104d00, - 0x000000ff, 0x05fc0fc0, 0x05fc0e34, 0x445c0000, + 0x000000ff, 0x05000847, 0x0500001a, 0x4c000000, + 0x0501f82e, 0x5c000000, 0x44080000, 0x80102000, + 0x80000000, 0x805cb840, 0x82104d00, 0x000000ff, + 0x0500083c, 0x0500000f, 0x50641800, 0x440c0000, + 0x80000000, 0x80102000, 0x8064c800, 0x805cb840, + 0x05fe07f6, 0x82104d00, 0x000000ff, 0x05000831, + 0x05000004, 0x48102817, 0x802041c0, 0x05060d12, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x82100500, 0x000000ff, 0x805c0400, 0x82000480, + 0x00000200, 0x05fc17d4, 0x6108b800, 0x82600d40, + 0x00008040, 0x05fdf7d0, 0x800001c0, 0x05000006, + 0x80041c80, 0x05001004, 0x05000003, 0x40000800, + 0x8408155c, 0x1c01f000, 0x59a800bf, 0x800018c4, + 0x800010ca, 0x800000cc, 0x800c0400, 0x80081400, + 0x59940024, 0x61a01807, 0x800c1c80, 0x05021002, + 0x61a01807, 0x5994002f, 0x800c0400, 0x82001c80, + 0x000007d0, 0x05001002, 0x6140000f, 0x4c080000, + 0x0501f8b6, 0x5c001000, 0x80081400, 0x1c01f000, + 0x4813c857, 0x5c036000, 0x4db00000, 0x49b3c857, + 0x40001800, 0x58140000, 0x8c000502, 0x05000009, + 0x58140821, 0x80040800, 0x48042821, 0x4807c857, + 0x8400054a, 0x48002800, 0x80000580, 0x0501f00e, + 0x82102500, 0x000003ff, 0x80204000, 0x58140014, + 0x80000000, 0x90000503, 0x48002814, 0x05000003, + 0x400c0000, 0x0501f002, 0x5814000d, 0x80000540, + 0x4803c857, 0x1c01f000, 0x42002800, 0x00112489, + 0x58140000, 0x8c00050a, 0x0500002f, 0x8c000502, + 0x0502002d, 0x4c5c0000, 0x5814b821, 0x49782821, + 0x8400050a, 0x48002800, 0x58142017, 0x4813c857, + 0x5814000d, 0x80100400, 0x41784000, 0x42000800, + 0x0b000001, 0x44040000, 0x80000000, 0x80102000, + 0x82104d00, 0x000000ff, 0x05fc0fca, 0x05fc0e4a, + 0x4c000000, 0x05fdffb1, 0x5c000000, 0x44080000, 0x80000000, 0x80102000, 0x82104d00, 0x000000ff, - 0x05fc0fb9, 0x05fc0e2d, 0x48102817, 0x802041c0, - 0x05060c5a, 0x405c2000, 0x600c1800, 0x60a01100, - 0x0521f828, 0x5c00b800, 0x1c01f000, 0x1c01f000, - 0x59a800b5, 0x8c000530, 0x05fe07fe, 0x4c080000, - 0x60101000, 0x0501f849, 0x5c001000, 0x4201d000, - 0x00028b0a, 0x0539f844, 0x4c080000, 0x60201000, - 0x0501f842, 0x5c001000, 0x4201d000, 0x00028b0a, - 0x0539f83d, 0x4c080000, 0x60401000, 0x0501f83b, - 0x5c001000, 0x4201d000, 0x00028b0a, 0x0539f836, - 0x05fdf7e8, 0x8c00050c, 0x59a808b5, 0x05020003, - 0x84040d30, 0x0501f005, 0x84040d70, 0x480750b5, - 0x60001000, 0x0501f02d, 0x480750b5, 0x916c0507, - 0x0c01f001, 0x00100805, 0x001007f7, 0x001007f7, - 0x001007e5, 0x001007fe, 0x001007f7, 0x001007f7, - 0x001007fe, 0x59c40801, 0x82040d00, 0x00018000, - 0x82040580, 0x00018000, 0x0500000a, 0x82040580, - 0x00010000, 0x05000004, 0x42001000, 0x42004000, - 0x0501f006, 0x42001000, 0x22002000, 0x0501f003, - 0x42001000, 0x12001000, 0x0501f015, 0x59a800b5, - 0x8c000534, 0x05020004, 0x42001000, 0x74057005, - 0x0501f80f, 0x1c01f000, 0x59a800b5, 0x8c000534, - 0x05020004, 0x42001000, 0x74057005, 0x0501f008, - 0x1c01f000, 0x1c01f000, 0x9008151c, 0x82081540, - 0x001c0000, 0x480bc013, 0x1c01f000, 0x59a800b5, - 0x8c000530, 0x05000002, 0x84081570, 0x480b50b5, - 0x8c000530, 0x05020005, 0x82081500, 0x00007000, - 0x80081114, 0x05fdfff1, 0x1c01f000, 0x40001800, - 0x800c18c2, 0x800c0400, 0x800c18c6, 0x800c0400, - 0x800c18c2, 0x800c0400, 0x800c190e, 0x800c0400, - 0x80000112, 0x1c01f000, 0x41780000, 0x50041800, - 0x800c0400, 0x80040800, 0x80102040, 0x05fe07fc, - 0x80080500, 0x80000540, 0x1c01f000, 0x6002f000, - 0x41780000, 0x41780800, 0x41781000, 0x41781800, - 0x41782000, 0x41782800, 0x41783000, 0x41783800, - 0x41784000, 0x41784800, 0x41785000, 0x41785800, - 0x41786000, 0x41786800, 0x41787000, 0x41787800, - 0x41788000, 0x41788800, 0x41789000, 0x41789800, - 0x4178a000, 0x4178a800, 0x4178b000, 0x4178b800, - 0x4178c000, 0x4178c800, 0x4178d000, 0x4178d800, - 0x4178e000, 0x4178e800, 0x4178f000, 0x4178f800, - 0x41790000, 0x41790800, 0x41791000, 0x41791800, - 0x41792000, 0x41792800, 0x41793000, 0x41793800, - 0x41794000, 0x41794800, 0x41795000, 0x41795800, - 0x41796000, 0x41796800, 0x41797000, 0x41797800, - 0x41798000, 0x41798800, 0x41799000, 0x41799800, - 0x4179a000, 0x6001a960, 0x60c9b17e, 0x4179b800, - 0x4179c800, 0x4179c000, 0x4179d000, 0x4179d800, - 0x4179e000, 0x4179e800, 0x4179f000, 0x4179f800, - 0x417a0000, 0x417a0800, 0x417a1000, 0x417a1800, + 0x05fc0fc0, 0x05fc0e40, 0x445c0000, 0x80000000, + 0x80102000, 0x82104d00, 0x000000ff, 0x05fc0fb9, + 0x05fc0e39, 0x48102817, 0x802041c0, 0x05060c9a, + 0x405c2000, 0x600c1800, 0x60a01100, 0x0521f996, + 0x5c00b800, 0x1c01f000, 0x1c01f000, 0x59a800ba, + 0x8c000530, 0x05fe07fe, 0x4c080000, 0x60101000, + 0x0501f849, 0x5c001000, 0x4201d000, 0x00028b0a, + 0x0539fc80, 0x4c080000, 0x60201000, 0x0501f842, + 0x5c001000, 0x4201d000, 0x00028b0a, 0x0539fc79, + 0x4c080000, 0x60401000, 0x0501f83b, 0x5c001000, + 0x4201d000, 0x00028b0a, 0x0539fc72, 0x05fdf7e8, + 0x8c00050c, 0x59a808ba, 0x05020003, 0x84040d30, + 0x0501f005, 0x84040d70, 0x480750ba, 0x60001000, + 0x0501f02d, 0x480750ba, 0x916c0507, 0x0c01f001, + 0x00100834, 0x00100826, 0x00100826, 0x00100814, + 0x0010082d, 0x00100826, 0x00100826, 0x0010082d, + 0x59c40801, 0x82040d00, 0x00018000, 0x82040580, + 0x00018000, 0x0500000a, 0x82040580, 0x00010000, + 0x05000004, 0x42001000, 0x42004000, 0x0501f006, + 0x42001000, 0x22002000, 0x0501f003, 0x42001000, + 0x12001000, 0x0501f015, 0x59a800ba, 0x8c000534, + 0x05020004, 0x42001000, 0x74057005, 0x0501f80f, + 0x1c01f000, 0x59a800ba, 0x8c000534, 0x05020004, + 0x42001000, 0x74057005, 0x0501f008, 0x1c01f000, + 0x1c01f000, 0x9008151c, 0x82081540, 0x001c0000, + 0x480bc013, 0x1c01f000, 0x59a800ba, 0x8c000530, + 0x05000002, 0x84081570, 0x480b50ba, 0x8c000530, + 0x05020005, 0x82081500, 0x00007000, 0x80081114, + 0x05fdfff1, 0x1c01f000, 0x40001800, 0x800c18c2, + 0x800c0400, 0x800c18c6, 0x800c0400, 0x800c18c2, + 0x800c0400, 0x800c190e, 0x800c0400, 0x80000112, + 0x1c01f000, 0x41780000, 0x50041800, 0x800c0400, + 0x80040800, 0x80102040, 0x05fe07fc, 0x80080500, + 0x80000540, 0x1c01f000, 0x6002f000, 0x41780000, + 0x41780800, 0x41781000, 0x41781800, 0x41782000, + 0x41782800, 0x41783000, 0x41783800, 0x41784000, + 0x41784800, 0x41785000, 0x41785800, 0x41786000, + 0x41786800, 0x41787000, 0x41787800, 0x41788000, + 0x41788800, 0x41789000, 0x41789800, 0x4178a000, + 0x4178a800, 0x4178b000, 0x4178b800, 0x4178c000, + 0x4178c800, 0x4178d000, 0x4178d800, 0x4178e000, + 0x4178e800, 0x4178f000, 0x4178f800, 0x41790000, + 0x41790800, 0x41791000, 0x41791800, 0x41792000, + 0x41792800, 0x41793000, 0x41793800, 0x41794000, + 0x41794800, 0x41795000, 0x41795800, 0x41796000, + 0x41796800, 0x41797000, 0x41797800, 0x41798000, + 0x41798800, 0x41799000, 0x41799800, 0x4179a000, + 0x6001a960, 0x60c9b17e, 0x4179b800, 0x4179c800, + 0x4179c000, 0x4179d000, 0x4179d800, 0x4179e000, + 0x4179e800, 0x4179f000, 0x4179f800, 0x42020000, + 0x00111cdc, 0x417a0800, 0x417a1000, 0x417a1800, 0x417a2000, 0x600228c2, 0x417a3000, 0x417a3800, 0x417a4000, 0x417a4800, 0x417a5000, 0x417a5800, 0x417a6000, 0x417a6800, 0x417a7000, 0x417a7800, 0x417a8000, 0x417a8800, 0x417a9000, 0x417a9800, 0x417ae800, 0x417af800, 0x600300f8, 0x42031000, - 0x0010e38c, 0x607f1960, 0x60df2160, 0x42032800, - 0x0010e2f9, 0x42033000, 0x000211b0, 0x42034000, - 0x0010dceb, 0x42033800, 0x0010dd0a, 0x42034800, - 0x0010e063, 0x42035000, 0x0010dc00, 0x42035800, - 0x0010d400, 0x417b6000, 0x600368de, 0x6003c860, - 0x600371fe, 0x6003797e, 0x600380ee, 0x60038880, - 0x600390c0, 0x42039800, 0x001102fe, 0x6003a0ec, - 0x6003a8e8, 0x6003b0e4, 0x6003b8e2, 0x6003c0e0, - 0x6003d000, 0x4203e800, 0x000201e5, 0x417bd800, - 0x1c01f000, 0x6407c830, 0x640fc831, 0x6413c832, - 0x6427c833, 0x6417c834, 0x641bc835, 0x641fc836, - 0x6423c837, 0x6403c838, 0x642bc839, 0x642fc83a, - 0x640bc83b, 0x1c01f000, 0x42002800, 0x00140000, - 0x59a800ca, 0x8c000500, 0x05000003, 0x42002800, - 0x0013a000, 0x46002800, 0xaaaaaaaa, 0x60283000, - 0x80183040, 0x05fe07ff, 0x50140000, 0x82000580, - 0xaaaaaaaa, 0x05020013, 0x41782000, 0x40140800, - 0x82102400, 0x00010000, 0x80042c04, 0x46002800, - 0x55555555, 0x60283000, 0x80183040, 0x05fe07ff, - 0x50140000, 0x82000580, 0x55555555, 0x05020005, - 0x50040000, 0x82000580, 0x55555555, 0x05fe07f1, - 0x59a800ca, 0x8c000500, 0x05000005, 0x82140580, - 0x0013a000, 0x05020005, 0x0501f005, 0x82140580, - 0x00140000, 0x05000002, 0x6407c820, 0x80142840, - 0x4817c857, 0x4817c861, 0x4817500a, 0x1c01f000, - 0x4817c857, 0x4c5c0000, 0x4c600000, 0x0565f814, - 0x05000030, 0x4817c857, 0x606c08f6, 0x50040800, - 0x8c04053e, 0x0500002b, 0x4817c857, 0x850e1d70, - 0x4c040000, 0x4c140000, 0x0505fdc7, 0x5c002800, - 0x5c000800, 0x59e0b81a, 0x8204b500, 0x000007ff, - 0x8058b000, 0x485b50a4, 0x600008f4, 0x58042029, - 0x5804302a, 0x82102500, 0xfffffff8, 0x82183500, - 0xfffffff8, 0x40100000, 0x8018c480, 0x8060c104, - 0x80600417, 0x4803509f, 0x497b50a3, 0x9058b41f, - 0x8058090a, 0x8004c418, 0x8060c040, 0x805cc418, - 0x485f50a0, 0x486350a1, 0x805c2840, 0x59a800ca, - 0x8c000500, 0x05000007, 0x59a8000a, 0x82000580, - 0x00139fff, 0x05020003, 0x4817500a, 0x4817c857, - 0x64030000, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x59a80847, 0x800409c0, 0x05020006, 0x49781c0c, - 0x64081a0c, 0x641c1804, 0x59a8003d, 0x48001805, - 0x4c0c0000, 0x05fdfc94, 0x5c001800, 0x800409c0, - 0x05020002, 0x80040800, 0x48041806, 0x1c01f000, - 0x61fcb001, 0x42024800, 0x0010e512, 0x42000000, - 0x0010f212, 0x48024809, 0x90000410, 0x91264c0d, - 0x8058b040, 0x05fe07fc, 0x1c01f000, 0x59a8080c, - 0x4006d000, 0x6006b800, 0x59a8180a, 0x480fc857, - 0x41783000, 0x90041418, 0x90082418, 0x40100000, - 0x800c0480, 0x05001020, 0x8d0c0530, 0x0500000b, - 0x59a800a1, 0x80000482, 0x05001008, 0x40100000, - 0x59a828a0, 0x80140480, 0x05021004, 0x59a810a1, - 0x80081000, 0x05fdf7f1, 0x801831c0, 0x0502000d, - 0x59a800ca, 0x8c000500, 0x05000006, 0x42000000, - 0x0013a000, 0x80000484, 0x0500100e, 0x0501f005, - 0x42000000, 0x00140000, 0x80000484, 0x05001009, - 0x44080800, 0x40080800, 0x40101000, 0x815eb800, - 0x05fdf7de, 0x45780800, 0x495f5048, 0x1c01f000, - 0x42001000, 0x00140000, 0x59a800ca, 0x8c000500, - 0x05000003, 0x42001000, 0x0013a000, 0x80183040, - 0x05fdf7d2, 0x835c0480, 0x00000104, 0x0500100a, - 0x496bc857, 0x815eb840, 0x416a5800, 0x592ed000, - 0x497a5800, 0x497a5801, 0x497a5808, 0x812e59c0, - 0x1c01f000, 0x42000000, 0x0010e441, 0x0561fe5d, - 0x417a5800, 0x05fdf7fa, 0x815eb840, 0x05001009, - 0x416a5800, 0x492fc857, 0x592ed000, 0x497a5800, + 0x0011232d, 0x607f1960, 0x60df2160, 0x42032800, + 0x00112293, 0x42033000, 0x000211f1, 0x42034000, + 0x00111c71, 0x42033800, 0x00111c90, 0x42034800, + 0x00111ffd, 0x42035000, 0x00111b80, 0x4a0350ac, + 0x000007f0, 0x4a0350ad, 0x00000800, 0x4a03500d, + 0x0010e380, 0x42035800, 0x0010db80, 0x41790000, + 0x417b6000, 0x600368de, 0x6003c860, 0x600371fe, + 0x6003797e, 0x600380ee, 0x60038880, 0x600390c0, + 0x42039800, 0x001142a2, 0x6003a0ec, 0x6003a8e8, + 0x6003b0e4, 0x6003b8e2, 0x6003c0e0, 0x6003d000, + 0x4203e800, 0x000201ed, 0x417bd800, 0x1c01f000, + 0x6407c830, 0x640fc831, 0x6413c832, 0x6427c833, + 0x6417c834, 0x641bc835, 0x641fc836, 0x6423c837, + 0x6403c838, 0x642bc839, 0x642fc83a, 0x640bc83b, + 0x1c01f000, 0x42002800, 0x00140000, 0x59a800cf, + 0x8c000500, 0x05000003, 0x42002800, 0x0013a000, + 0x46002800, 0xaaaaaaaa, 0x60283000, 0x80183040, + 0x05fe07ff, 0x50140000, 0x82000580, 0xaaaaaaaa, + 0x05020013, 0x41782000, 0x40140800, 0x82102400, + 0x00010000, 0x80042c04, 0x46002800, 0x55555555, + 0x60283000, 0x80183040, 0x05fe07ff, 0x50140000, + 0x82000580, 0x55555555, 0x05020005, 0x50040000, + 0x82000580, 0x55555555, 0x05fe07f1, 0x59a800cf, + 0x8c000500, 0x05000005, 0x82140580, 0x0013a000, + 0x05020005, 0x0501f005, 0x82140580, 0x00140000, + 0x05000002, 0x6407c820, 0x80142840, 0x4817c857, + 0x4817c861, 0x4817500a, 0x1c01f000, 0x4817c857, + 0x4c5c0000, 0x4c600000, 0x0565ff58, 0x05000030, + 0x4817c857, 0x606c08f6, 0x50040800, 0x8c04053e, + 0x0500002b, 0x4817c857, 0x850e1d70, 0x4c040000, + 0x4c140000, 0x0505fe01, 0x5c002800, 0x5c000800, + 0x59e0b81a, 0x8204b500, 0x000007ff, 0x8058b000, + 0x485b50a7, 0x600008f4, 0x58042029, 0x5804302a, + 0x82102500, 0xfffffff8, 0x82183500, 0xfffffff8, + 0x40100000, 0x8018c480, 0x8060c104, 0x80600417, + 0x480350a2, 0x497b50a6, 0x9058b41f, 0x8058090a, + 0x8004c418, 0x8060c040, 0x805cc418, 0x485f50a3, + 0x486350a4, 0x805c2840, 0x59a800cf, 0x8c000500, + 0x05000007, 0x59a8000a, 0x82000580, 0x00139fff, + 0x05020003, 0x4817500a, 0x4817c857, 0x64030000, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x59a8084a, + 0x800409c0, 0x05020006, 0x49781c0c, 0x64081a0c, + 0x641c1804, 0x59a80040, 0x48001805, 0x4c0c0000, + 0x05fdfc94, 0x5c001800, 0x800409c0, 0x05020002, + 0x80040800, 0x48041806, 0x1c01f000, 0x61fcb001, + 0x42024800, 0x001124b6, 0x42000000, 0x001131b6, + 0x48024809, 0x90000410, 0x91264c0d, 0x8058b040, + 0x05fe07fc, 0x1c01f000, 0x59a8080c, 0x4006d000, + 0x6006b800, 0x59a8180a, 0x480fc857, 0x41783000, + 0x90041418, 0x90082418, 0x40100000, 0x800c0480, + 0x05001020, 0x8d0c0530, 0x0500000b, 0x59a800a4, + 0x80000482, 0x05001008, 0x40100000, 0x59a828a3, + 0x80140480, 0x05021004, 0x59a810a4, 0x80081000, + 0x05fdf7f1, 0x801831c0, 0x0502000d, 0x59a800cf, + 0x8c000500, 0x05000006, 0x42000000, 0x0013a000, + 0x80000484, 0x0500100e, 0x0501f005, 0x42000000, + 0x00140000, 0x80000484, 0x05001009, 0x44080800, + 0x40080800, 0x40101000, 0x815eb800, 0x05fdf7de, + 0x45780800, 0x495f504b, 0x1c01f000, 0x42001000, + 0x00140000, 0x59a800cf, 0x8c000500, 0x05000003, + 0x42001000, 0x0013a000, 0x80183040, 0x05fdf7d2, + 0x835c0480, 0x00000104, 0x0500100a, 0x496bc857, + 0x815eb840, 0x416a5800, 0x592ed000, 0x497a5800, 0x497a5801, 0x497a5808, 0x812e59c0, 0x1c01f000, - 0x42000000, 0x0010e441, 0x0561fe4e, 0x417ab800, - 0x417a5800, 0x05fdf7f9, 0x492fc857, 0x496a5800, - 0x412ed000, 0x815eb800, 0x59c80000, 0x82000540, - 0x00001200, 0x48039000, 0x1c01f000, 0x492fc857, - 0x812e59c0, 0x05000007, 0x592c0001, 0x497a5801, - 0x4c000000, 0x05fdfff1, 0x5c025800, 0x05fdf7f9, - 0x1c01f000, 0x42000000, 0x0010e441, 0x0561fe38, - 0x80025d80, 0x1c01f000, 0x4807c856, 0x42007000, - 0x000211a7, 0x64007000, 0x59e00003, 0x82000540, - 0x00008080, 0x4803c003, 0x4a03b805, 0x90000001, - 0x59dc0006, 0x4a03b805, 0x70000000, 0x59dc0006, - 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805, - 0x80000000, 0x6100b000, 0x497bb807, 0x8058b040, - 0x05fe07fe, 0x4a03b805, 0x30000000, 0x59dc0006, - 0x4a03b805, 0x60000001, 0x59dc0006, 0x4a03b805, - 0x60000003, 0x59dc0006, 0x4a03b805, 0x60000005, - 0x59dc0006, 0x4a03b805, 0x60000007, 0x59dc0006, - 0x4a03b805, 0x70000001, 0x59dc0006, 0x4a03b805, - 0x30000002, 0x6100b000, 0x497bb807, 0x8058b040, - 0x05fe07fe, 0x4a03b805, 0x30000000, 0x59dc0006, - 0x4a03b805, 0x60000001, 0x4803c856, 0x05fdffa3, - 0x05fc0bfa, 0x42001000, 0x0010e387, 0x452c1000, - 0x64065801, 0x4a025802, 0x00000100, 0x4a025809, - 0x00108adc, 0x497a580a, 0x497a580b, 0x497a580c, - 0x05fdff96, 0x05fc0bed, 0x42001000, 0x0010e388, - 0x452c1000, 0x64025801, 0x4a025802, 0x00000100, - 0x4a025809, 0x001013bc, 0x497a5803, 0x497a5807, - 0x497a5808, 0x497a580a, 0x05fdff88, 0x05fc0bdf, - 0x42001000, 0x0010e389, 0x452c1000, 0x64025801, - 0x4a025802, 0x00000100, 0x4a025809, 0x001013e0, + 0x42000000, 0x001123e2, 0x0565fda1, 0x417a5800, + 0x05fdf7fa, 0x815eb840, 0x05001009, 0x416a5800, + 0x492fc857, 0x592ed000, 0x497a5800, 0x497a5801, + 0x497a5808, 0x812e59c0, 0x1c01f000, 0x42000000, + 0x001123e2, 0x0565fd92, 0x417ab800, 0x417a5800, + 0x05fdf7f9, 0x492fc857, 0x496a5800, 0x412ed000, + 0x815eb800, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x1c01f000, 0x492fc857, 0x812e59c0, + 0x05000007, 0x592c0001, 0x497a5801, 0x4c000000, + 0x05fdfff1, 0x5c025800, 0x05fdf7f9, 0x1c01f000, + 0x42000000, 0x001123e2, 0x0565fd7c, 0x80025d80, + 0x1c01f000, 0x80040840, 0x41783000, 0x90081498, + 0x80040482, 0x05001003, 0x90041401, 0x0501f018, + 0x4c080000, 0x60043000, 0x90081c98, 0x80040483, + 0x05021006, 0x480c1000, 0x49781001, 0x400c1000, + 0x80183000, 0x05fdf7f9, 0xa01abc17, 0x59a8084b, + 0x80180c01, 0x4807504b, 0x4d2c0000, 0x400a5800, + 0x0555f86e, 0x5c025800, 0x05020002, 0x480b500c, + 0x49681000, 0x49781001, 0x5c02d000, 0x1c01f000, + 0x4807c856, 0x42007000, 0x000211e8, 0x64007000, + 0x59e00003, 0x82000540, 0x00008080, 0x4803c003, + 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805, + 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000, + 0x59dc0006, 0x4a03b805, 0x80000000, 0x6100b000, + 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805, + 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001, + 0x59dc0006, 0x4a03b805, 0x60000003, 0x59dc0006, + 0x4a03b805, 0x60000005, 0x59dc0006, 0x4a03b805, + 0x60000007, 0x59dc0006, 0x4a03b805, 0x70000001, + 0x59dc0006, 0x4a03b805, 0x30000002, 0x6100b000, + 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805, + 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001, + 0x4803c856, 0x05fdff84, 0x05fc0bdf, 0x42001000, + 0x00112322, 0x452c1000, 0x64065801, 0x4a025802, + 0x00000100, 0x4a025809, 0x00108f9a, 0x497a580a, + 0x497a580b, 0x497a580c, 0x05fdff77, 0x05fc0bd2, + 0x42001000, 0x00112323, 0x452c1000, 0x64025801, + 0x4a025802, 0x00000100, 0x4a025809, 0x0010142b, 0x497a5803, 0x497a5807, 0x497a5808, 0x497a580a, - 0x05fdff7a, 0x05fc0bd1, 0x497a5806, 0x42001000, - 0x0010dc1a, 0x452c1000, 0x64025801, 0x4a025802, - 0x00000100, 0x4a025809, 0x001078b4, 0x497a5803, - 0x497a5807, 0x497a5808, 0x497a580a, 0x05fdff6b, - 0x05fc0bc2, 0x497a5806, 0x492f500d, 0x64025801, - 0x4a025802, 0x00000100, 0x4a025809, 0x001078bf, + 0x05fdff69, 0x05fc0bc4, 0x42001000, 0x00112324, + 0x452c1000, 0x64025801, 0x4a025802, 0x00000100, + 0x4a025809, 0x0010144f, 0x497a5803, 0x497a5807, + 0x497a5808, 0x497a580a, 0x05fdff5b, 0x05fc0bb6, + 0x497a5806, 0x42001000, 0x00112325, 0x492c1001, + 0x64001000, 0x05fdff54, 0x05fc0baf, 0x497a5806, + 0x42001000, 0x00111b9c, 0x452c1000, 0x64025801, + 0x4a025802, 0x00000100, 0x4a025809, 0x00107d74, 0x497a5803, 0x497a5807, 0x497a5808, 0x497a580a, - 0x497a580b, 0x05fdff5d, 0x05fc0bb4, 0x497a5806, - 0x492f500e, 0x64025801, 0x4a025802, 0x00000100, - 0x4a025809, 0x001078bf, 0x497a5803, 0x497a5807, - 0x497a5808, 0x497a580a, 0x497a580b, 0x1c01f000, - 0x42001000, 0x00020030, 0x0535fc87, 0x0551ff0b, - 0x58380807, 0x60042000, 0x58040801, 0x800409c0, - 0x05000003, 0x80102000, 0x05fdf7fc, 0x0561f8fc, - 0x0502000c, 0x42000000, 0x0010e3a9, 0x0561fd99, - 0x0551ff09, 0x60040800, 0x42001000, 0x00020030, - 0x0535fc4a, 0x42007000, 0x000211a7, 0x0001f039, - 0x4a03b805, 0x30000002, 0x59dc0006, 0x4807b800, - 0x480bb801, 0x42007000, 0x000211a7, 0x65007002, - 0x480c7008, 0x58380007, 0x90000408, 0x48007003, - 0x640c7000, 0x4803b803, 0x0001f05a, 0x58380802, - 0x600011fe, 0x82040480, 0x0000ff00, 0x05021003, - 0x40041000, 0x80000580, 0x48007002, 0x480bb802, - 0x59dc0006, 0x4a03b805, 0x10000000, 0x1c01f000, - 0x4a03b805, 0x30000001, 0x58386001, 0x58301009, - 0x4807c857, 0x4803c857, 0x4833c857, 0x4a006002, - 0x00000200, 0x64007000, 0x800811c0, 0x00000036, - 0x0001f090, 0x4833c857, 0x4807c857, 0x5830080a, - 0x4c040000, 0x4d2c0000, 0x40325800, 0x05fdff18, - 0x5c025800, 0x5c000800, 0x4807c857, 0x0001f092, - 0x59e00017, 0x8c00050c, 0x05020028, 0x59a838a2, - 0xa01c459e, 0x05000025, 0x59a8209f, 0x59a808a3, - 0x59a848a4, 0x40245000, 0x9004051f, 0x81782800, - 0x801428c0, 0x8004010a, 0x80101400, 0x50083000, - 0x80140506, 0x0502000c, 0x80040800, 0x80244840, - 0x05000012, 0x80280581, 0x05000005, 0x80142942, - 0x9004051f, 0x05fe07f7, 0x05fdf7f3, 0x41780800, - 0x05fdf7ee, 0x59a818a0, 0x800400c4, 0x800c1c00, - 0x580c0003, 0x8c000500, 0x05000009, 0x80204040, - 0x05fe07ee, 0x80040800, 0x80280581, 0x05020002, - 0x41780800, 0x480750a3, 0x1c01f000, 0x80142880, - 0x80140506, 0x44001000, 0x80042800, 0x80280585, - 0x05020002, 0x41782800, 0x481750a3, 0x801c3840, - 0x481f50a2, 0x0001f0a3, 0x59a8189f, 0x8004110a, - 0x9004051f, 0x80081c03, 0x81782000, 0x801020c0, - 0x500c0000, 0x80100d00, 0x05020006, 0x80100540, - 0x59a808a2, 0x44001800, 0x80040800, 0x480750a2, - 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x835c0480, 0x00000104, 0x05fe1fb6, 0x5c03e000, - 0x1c01f000, 0x59dc0006, 0x8c000520, 0x05000009, - 0x00044e27, 0x59dc0006, 0x82000500, 0x00006000, - 0x05000004, 0x82000580, 0x00006000, 0x05fe07f9, - 0x1c01f000, 0x41781800, 0x58382005, 0x40300000, - 0x80100580, 0x05000007, 0x40101800, 0x58102000, - 0x801021c0, 0x05fe07fa, 0x4803c856, 0x0501f011, - 0x4833c857, 0x58302000, 0x49786000, 0x800c19c0, - 0x05020008, 0x801021c0, 0x05000003, 0x48107005, - 0x0501f008, 0x49787005, 0x49787004, 0x0501f005, - 0x48101800, 0x801021c0, 0x05020002, 0x480c7004, - 0x1c01f000, 0x4803c856, 0x4dc00000, 0x42007000, - 0x0010e38a, 0x64007400, 0x49787001, 0x600380ee, - 0x60080800, 0x59c00007, 0x4a038006, 0x60000001, - 0x59c00007, 0x4a038006, 0x60000003, 0x59c00007, - 0x4a038006, 0x60000005, 0x59c00007, 0x4a038006, - 0x60000007, 0x59c00007, 0x4a038006, 0x60000009, - 0x59c00007, 0x4a038006, 0x6000000b, 0x59c00007, - 0x4c040000, 0x0501f817, 0x5c000800, 0x4a038009, - 0xf4f60000, 0x91c38420, 0x80040840, 0x05fe07e6, - 0x600380ee, 0x6443c822, 0x640370e8, 0x0501f83c, - 0x4a0370ee, 0x00100000, 0x4a0370ee, 0x00080102, - 0x4a0370e9, 0x00000400, 0x4a0370e9, 0x00003a0f, - 0x640370e8, 0x640770e8, 0x5c038000, 0x1c01f000, - 0x59c00007, 0x4a038006, 0xe0000001, 0x61000800, - 0x497b8005, 0x59c00007, 0x80040840, 0x05fe07fd, - 0x4a038006, 0x30000001, 0x59c00007, 0x8c000508, - 0x05fe07fe, 0x59c00007, 0x4a038006, 0xb0000003, - 0x59c00007, 0x4a038006, 0xb0000005, 0x59c00007, - 0x4a038006, 0xb0000001, 0x59c00007, 0x4a038006, - 0xb0000009, 0x59c00007, 0x4a038006, 0xb0000007, - 0x59c00007, 0x4a038006, 0xb000000b, 0x59c00007, + 0x05fdff45, 0x05fc0ba0, 0x497a5806, 0x492f500f, + 0x64025801, 0x4a025802, 0x00000100, 0x4a025809, + 0x00107d7f, 0x497a5803, 0x497a5807, 0x497a5808, + 0x497a580a, 0x497a580b, 0x05fdff37, 0x05fc0b92, + 0x497a5806, 0x492f5010, 0x64025801, 0x4a025802, + 0x00000100, 0x4a025809, 0x00107d7f, 0x497a5803, + 0x497a5807, 0x497a5808, 0x497a580a, 0x497a580b, + 0x1c01f000, 0x42001000, 0x00020038, 0x0539f844, + 0x59a80c9f, 0x8c040502, 0x05020005, 0x0555fc43, + 0x59a80c9f, 0x84040d42, 0x4807549f, 0x58380807, + 0x60042000, 0x58040801, 0x800409c0, 0x05000003, + 0x80102000, 0x05fdf7fc, 0x0561ffe3, 0x0502000b, + 0x42000000, 0x0011234a, 0x0565fcb1, 0x60040800, + 0x42001000, 0x00020038, 0x0539f802, 0x42007000, + 0x000211e8, 0x0001f041, 0x4a03b805, 0x30000002, + 0x59dc0006, 0x4807b800, 0x480bb801, 0x42007000, + 0x000211e8, 0x65007002, 0x480c7008, 0x58380007, + 0x90000408, 0x48007003, 0x640c7000, 0x4803b803, + 0x0001f062, 0x58380802, 0x600011fe, 0x82040480, + 0x0000ff00, 0x05021003, 0x40041000, 0x80000580, + 0x48007002, 0x480bb802, 0x59dc0006, 0x4a03b805, + 0x10000000, 0x1c01f000, 0x4a03b805, 0x30000001, + 0x58386001, 0x58301009, 0x4807c857, 0x4803c857, + 0x4833c857, 0x4a006002, 0x00000200, 0x64007000, + 0x800811c0, 0x0000003e, 0x0001f098, 0x4833c857, + 0x4807c857, 0x5830080a, 0x4c040000, 0x4d2c0000, + 0x40325800, 0x05fdfeed, 0x5c025800, 0x5c000800, + 0x4807c857, 0x0001f09a, 0x59e00017, 0x8c00050c, + 0x05020028, 0x59a838a5, 0xa01c459e, 0x05000025, + 0x59a820a2, 0x59a808a6, 0x59a848a7, 0x40245000, + 0x9004051f, 0x81782800, 0x801428c0, 0x8004010a, + 0x80101400, 0x50083000, 0x80140506, 0x0502000c, + 0x80040800, 0x80244840, 0x05000012, 0x80280581, + 0x05000005, 0x80142942, 0x9004051f, 0x05fe07f7, + 0x05fdf7f3, 0x41780800, 0x05fdf7ee, 0x59a818a3, + 0x800400c4, 0x800c1c00, 0x580c0003, 0x8c000500, + 0x05000009, 0x80204040, 0x05fe07ee, 0x80040800, + 0x80280581, 0x05020002, 0x41780800, 0x480750a6, + 0x1c01f000, 0x80142880, 0x80140506, 0x44001000, + 0x80042800, 0x80280585, 0x05020002, 0x41782800, + 0x481750a6, 0x801c3840, 0x481f50a5, 0x0001f0ab, + 0x59a818a2, 0x8004110a, 0x9004051f, 0x80081c03, + 0x81782000, 0x801020c0, 0x500c0000, 0x80100d00, + 0x05020006, 0x80100540, 0x59a808a5, 0x44001800, + 0x80040800, 0x480750a5, 0x1c01f000, 0x4df00000, + 0x4203e000, 0x50000000, 0x835c0480, 0x00000104, + 0x05fe1fb6, 0x5c03e000, 0x1c01f000, 0x59dc0006, + 0x8c000520, 0x05000009, 0x00044e5d, 0x59dc0006, + 0x82000500, 0x00006000, 0x05000004, 0x82000580, + 0x00006000, 0x05fe07f9, 0x1c01f000, 0x41781800, + 0x58382005, 0x40300000, 0x80100580, 0x05000007, + 0x40101800, 0x58102000, 0x801021c0, 0x05fe07fa, + 0x4803c856, 0x0501f011, 0x4833c857, 0x58302000, + 0x49786000, 0x800c19c0, 0x05020008, 0x801021c0, + 0x05000003, 0x48107005, 0x0501f008, 0x49787005, + 0x49787004, 0x0501f005, 0x48101800, 0x801021c0, + 0x05020002, 0x480c7004, 0x1c01f000, 0x4803c856, + 0x4dc00000, 0x42007000, 0x0011232b, 0x64007400, + 0x49787001, 0x600380ee, 0x60080800, 0x59c00007, 0x4a038006, 0x60000001, 0x59c00007, 0x4a038006, 0x60000003, 0x59c00007, 0x4a038006, 0x60000005, 0x59c00007, 0x4a038006, 0x60000007, 0x59c00007, - 0x4a038006, 0xe0000000, 0x1c01f000, 0x4c5c0000, - 0x4178b800, 0x0501f809, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x4c5c0000, 0x905cbd41, 0x0501f803, - 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4dc00000, - 0x4c500000, 0x4c580000, 0x4c540000, 0x640370e8, - 0x805cb9c0, 0x05000009, 0x64138807, 0x4a0370f2, - 0x80000000, 0x59b800ea, 0x8c000510, 0x05000003, - 0x59b800e0, 0x05fdf7fc, 0x608380ee, 0x0501fd02, - 0x59c00007, 0x4a038006, 0x20000000, 0x59c00007, - 0x4a038006, 0x8000000a, 0x59c00007, 0x4a038006, - 0x8000000b, 0x59c00007, 0x4a038006, 0x40000001, - 0x83c00580, 0x00007700, 0x05000003, 0x600380ee, - 0x05fdf7ef, 0x608380ee, 0x60000810, 0x59c00007, - 0x8c00051e, 0x05000006, 0x4a038006, 0x90000001, - 0x80040840, 0x05fe07fa, 0x05fdfa4c, 0x83c00580, - 0x00007700, 0x05000003, 0x600380ee, 0x05fdf7f3, - 0x4178a000, 0x805cb9c0, 0x0502000f, 0x6080b000, - 0x91b8ac20, 0x0561fd16, 0x640770fb, 0x4a037020, - 0x001012ac, 0x59a8005e, 0x82000500, 0x0000ffff, - 0x48037021, 0x4a037035, 0x00110202, 0x4a037038, - 0x001012a3, 0x640770fb, 0x6080b000, 0x91b8ac00, - 0x0561fd07, 0x6100b000, 0xb1b8ac00, 0x0561fd04, - 0x805cb9c0, 0x05020006, 0x4a0370e4, 0xaaaaaaaa, - 0x4a0370e5, 0xaaaaaaaa, 0x0501f005, 0x4a0370e4, - 0x82aa2a82, 0x4a0370e5, 0xaaaaa2aa, 0x4a0370e6, - 0xaaaaaaaa, 0x640370fb, 0x4a0370e6, 0xaaaaaaaa, - 0x608380ee, 0x4a038006, 0x90000000, 0x59c00007, - 0x8c00051e, 0x05fe0a19, 0x600380ee, 0x4a038006, - 0x90000000, 0x59c00007, 0x8c00051e, 0x05fe0a13, - 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c038000, - 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000, + 0x4a038006, 0x60000009, 0x59c00007, 0x4a038006, + 0x6000000b, 0x59c00007, 0x4c040000, 0x0501f817, + 0x5c000800, 0x4a038009, 0xf4f60000, 0x91c38420, + 0x80040840, 0x05fe07e6, 0x600380ee, 0x6443c822, + 0x640370e8, 0x0501f83c, 0x4a0370ee, 0x00100000, + 0x4a0370ee, 0x00080102, 0x4a0370e9, 0x00000400, + 0x4a0370e9, 0x00003a0f, 0x640370e8, 0x640770e8, + 0x5c038000, 0x1c01f000, 0x59c00007, 0x4a038006, + 0xe0000001, 0x61000800, 0x497b8005, 0x59c00007, + 0x80040840, 0x05fe07fd, 0x4a038006, 0x30000001, + 0x59c00007, 0x8c000508, 0x05fe07fe, 0x59c00007, + 0x4a038006, 0xb0000003, 0x59c00007, 0x4a038006, + 0xb0000005, 0x59c00007, 0x4a038006, 0xb0000001, + 0x59c00007, 0x4a038006, 0xb0000009, 0x59c00007, + 0x4a038006, 0xb0000007, 0x59c00007, 0x4a038006, + 0xb000000b, 0x59c00007, 0x4a038006, 0x60000001, + 0x59c00007, 0x4a038006, 0x60000003, 0x59c00007, + 0x4a038006, 0x60000005, 0x59c00007, 0x4a038006, + 0x60000007, 0x59c00007, 0x4a038006, 0xe0000000, + 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x0501f809, + 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000, + 0x905cbd41, 0x0501f803, 0x5c00b800, 0x1c01f000, + 0x4803c856, 0x4dc00000, 0x4c500000, 0x4c580000, + 0x4c540000, 0x640370e8, 0x805cb9c0, 0x05000009, + 0x64138807, 0x4a0370f2, 0x80000000, 0x59b800ea, + 0x8c000510, 0x05000003, 0x59b800e0, 0x05fdf7fc, + 0x608380ee, 0x0501fd3e, 0x59c00007, 0x4a038006, + 0x20000000, 0x59c00007, 0x4a038006, 0x8000000a, + 0x59c00007, 0x4a038006, 0x8000000b, 0x59c00007, + 0x4a038006, 0x40000001, 0x83c00580, 0x00007700, + 0x05000003, 0x600380ee, 0x05fdf7ef, 0x608380ee, + 0x60000810, 0x59c00007, 0x8c00051e, 0x05000006, + 0x4a038006, 0x90000001, 0x80040840, 0x05fe07fa, + 0x05fdfa25, 0x83c00580, 0x00007700, 0x05000003, + 0x600380ee, 0x05fdf7f3, 0x4178a000, 0x805cb9c0, + 0x0502000f, 0x6080b000, 0x91b8ac20, 0x0565fc2f, + 0x640770fb, 0x4a037020, 0x0010004b, 0x59a80061, + 0x82000500, 0x0000ffff, 0x48037021, 0x4a037035, + 0x001141a6, 0x4a037038, 0x00100042, 0x640770fb, + 0x6080b000, 0x91b8ac00, 0x0565fc20, 0x6100b000, + 0xb1b8ac00, 0x0565fc1d, 0x805cb9c0, 0x05020006, + 0x4a0370e4, 0xaaaaaaaa, 0x4a0370e5, 0xaaaaaaaa, + 0x0501f005, 0x4a0370e4, 0x82aa2a82, 0x4a0370e5, + 0xaaaaa2aa, 0x4a0370e6, 0xaaaaaaaa, 0x640370fb, + 0x4a0370e6, 0xaaaaaaaa, 0x608380ee, 0x4a038006, + 0x90000000, 0x59c00007, 0x8c00051e, 0x05fe09f2, + 0x600380ee, 0x4a038006, 0x90000000, 0x59c00007, + 0x8c00051e, 0x05fe09ec, 0x5c00a800, 0x5c00b000, + 0x5c00a000, 0x5c038000, 0x1c01f000, 0x4d300000, + 0x4d2c0000, 0x4d340000, 0x4d400000, 0x4cfc0000, + 0x4d380000, 0x4d3c0000, 0x4d440000, 0x4d4c0000, + 0x4d480000, 0x4c5c0000, 0x4c600000, 0x4c640000, + 0x4d040000, 0x4cf40000, 0x4cf80000, 0x0001f8d0, + 0x5c01f000, 0x5c01e800, 0x5c020800, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800, + 0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800, + 0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000, + 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, + 0x4c540000, 0x4c500000, 0x4d240000, 0x4d200000, + 0x4d1c0000, 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000, 0x4cf40000, - 0x4cf80000, 0x0001f8c8, 0x5c01f000, 0x5c01e800, - 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x5c029000, 0x5c029800, 0x5c028800, 0x5c027800, - 0x5c027000, 0x5c01f800, 0x5c028000, 0x5c026800, - 0x5c025800, 0x5c026000, 0x1c01f000, 0x493bc857, - 0x0001f0f5, 0x83300500, 0x000000ff, 0x90000c88, - 0x05fe19e6, 0x0c01f023, 0x1c01f000, 0x82000d00, - 0xc2000038, 0x05fe09da, 0x05fdf9e0, 0x00000000, - 0x00000048, 0x00000054, 0x00000053, 0x00100c17, - 0x00100c42, 0x00100c30, 0x00100c5c, 0x00100c21, - 0x00100c2a, 0x00100c33, 0x00100c58, 0x00100ccf, - 0x00100c17, 0x00100cd1, 0x00100c17, 0x00100c17, - 0x00100cd4, 0x00100cd8, 0x00100ce9, 0x00100cfb, - 0x00100c84, 0x00100d02, 0x00100d0c, 0x00100c17, - 0x00100c17, 0x00100c5d, 0x00100c17, 0x05fdf9c3, - 0x00100c20, 0x00100d8d, 0x00100ca1, 0x00100cc1, - 0x00100c20, 0x00100c20, 0x00100c20, 0x001010e6, - 0x05fdf9ba, 0x4803c856, 0x59300004, 0x8c00053e, - 0x05020003, 0x61567000, 0x0009f000, 0x053dfc92, - 0x05fc07fd, 0x1c01f000, 0x4803c856, 0x0501f8e3, - 0x40002800, 0x41782000, 0x615a7000, 0x0009f000, - 0x4803c856, 0x615e7000, 0x0009f000, 0x4803c856, - 0x0531ff4c, 0x4a0370e5, 0x00800000, 0x40000000, - 0x59b800e5, 0x8c00052c, 0x05000007, 0x4a0370e5, + 0x4cf80000, 0x4c580000, 0x0001f86e, 0x5c00b000, + 0x5c01f000, 0x5c01e800, 0x5c020800, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800, + 0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800, + 0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000, + 0x5c023800, 0x5c024000, 0x5c024800, 0x5c00a000, + 0x5c00a800, 0x1c01f000, 0x493bc857, 0x0001f0fd, + 0x83300500, 0x000000ff, 0x90000c88, 0x05fe198e, + 0x0c01f026, 0x1c01f000, 0x82000d00, 0xc2000038, + 0x05fe0982, 0x05fdf988, 0x00000000, 0x00000048, + 0x00000054, 0x00000053, 0x00100cad, 0x00100cd8, + 0x00100cc6, 0x00100cf2, 0x00100cb7, 0x00100cc0, + 0x00100cc9, 0x00100cee, 0x00100d6b, 0x00100cad, + 0x00100d6d, 0x00100cad, 0x00100cad, 0x00100d70, + 0x00100d74, 0x00100d85, 0x00100d97, 0x00100d20, + 0x00100d9e, 0x00100da8, 0x00100cad, 0x00100cad, + 0x00100cf3, 0x00100cad, 0x00100cad, 0x00100d1a, + 0x00100cad, 0x05fdf968, 0x00100cb6, 0x00100e29, + 0x00100d3d, 0x00100d5d, 0x00100cb6, 0x00100cb6, + 0x00100cb6, 0x00101181, 0x05fdf95f, 0x4803c856, + 0x59300004, 0x8c00053e, 0x05020003, 0x61567000, + 0x0009f039, 0x0541f8ba, 0x05fc07fd, 0x1c01f000, + 0x4803c856, 0x0501f8e9, 0x40002800, 0x41782000, + 0x615a7000, 0x0009f039, 0x4803c856, 0x615e7000, + 0x0009f039, 0x4803c856, 0x0535faa6, 0x4a0370e5, 0x00800000, 0x40000000, 0x59b800e5, 0x8c00052c, - 0x05fe099a, 0x1c01f000, 0x4803c856, 0x59325809, - 0x812e59c0, 0x05000012, 0x59300008, 0x8c00051a, - 0x0502000b, 0x592c040c, 0x8c00051c, 0x05020003, - 0x4a026013, 0xffffffff, 0x59300004, 0x8c00053e, - 0x05020005, 0x61227000, 0x0009f000, 0x641e5a0a, - 0x05fdf7f8, 0x053dfc64, 0x05fc07fb, 0x1c01f000, - 0x4803c856, 0x83300500, 0x00ffffff, 0x0539f306, - 0x1c01f000, 0x4178b800, 0x59300817, 0x82040580, - 0xdeaddead, 0x05000011, 0x82040580, 0x00110228, - 0x05000009, 0x48066009, 0x497a6017, 0x0001f945, - 0x59300008, 0x60840800, 0x80040540, 0x48026008, - 0x0501f014, 0x48066009, 0x42026000, 0x00111ad0, - 0x0001f945, 0x0501f00f, 0x59a800de, 0x80000d40, - 0x4807c857, 0x05fc0965, 0x58041000, 0x49780800, - 0x59a800df, 0x80040580, 0x05020004, 0x497b50de, - 0x497b50df, 0x0501f002, 0x480b50de, 0x05fdf7ee, - 0x6503900d, 0x642370e5, 0x64126203, 0x1c01f000, - 0x4803c856, 0x813261c0, 0x05fc0954, 0x0551f842, + 0x05000007, 0x4a0370e5, 0x00800000, 0x40000000, + 0x59b800e5, 0x8c00052c, 0x05fe093f, 0x1c01f000, + 0x4803c856, 0x59325809, 0x812e59c0, 0x05000012, + 0x59300008, 0x8c00051a, 0x0502000b, 0x592c040c, + 0x8c00051c, 0x05020003, 0x4a026013, 0xffffffff, + 0x59300004, 0x8c00053e, 0x05020005, 0x61227000, + 0x0009f039, 0x641e5a0a, 0x05fdf7f8, 0x0541f88c, + 0x05fc07fb, 0x1c01f000, 0x4803c856, 0x83300500, + 0x00ffffff, 0x0539f724, 0x1c01f000, 0x4178b800, + 0x59300817, 0x82040580, 0xdeaddead, 0x05000011, + 0x82040580, 0x001141cc, 0x05000009, 0x48066009, + 0x497a6017, 0x0001f94d, 0x59300008, 0x60840800, + 0x80040540, 0x48026008, 0x0501f014, 0x48066009, + 0x42026000, 0x00115a74, 0x0001f94d, 0x0501f00f, + 0x59a800e3, 0x80000d40, 0x4807c857, 0x05fc090a, + 0x58041000, 0x49780800, 0x59a800e4, 0x80040580, + 0x05020004, 0x497b50e3, 0x497b50e4, 0x0501f002, + 0x480b50e3, 0x05fdf7ee, 0x6503900d, 0x642370e5, + 0x64126203, 0x1c01f000, 0x42000000, 0x0011235f, + 0x0565fa3e, 0x42000000, 0x00112484, 0x0565f238, + 0x4803c856, 0x813261c0, 0x05fc08f3, 0x0551fd2f, 0x0500000b, 0x59325809, 0x592c020c, 0x84000552, - 0x48025a0c, 0x0505f8a4, 0x59300004, 0x8c00053e, - 0x05020004, 0x417a7800, 0x054dfb83, 0x1c01f000, - 0x053dfc25, 0x05fc07fc, 0x1c01f000, 0x4c040000, + 0x48025a0c, 0x0505f87a, 0x59300004, 0x8c00053e, + 0x05020004, 0x417a7800, 0x0551f859, 0x1c01f000, + 0x0541f847, 0x05fc07fc, 0x1c01f000, 0x4c040000, 0x59b808ea, 0x90040d07, 0x90040583, 0x05000004, 0x42000000, 0x60000000, 0x0501f894, 0x5c000800, 0x1c01f000, 0x0501f8d7, 0x05000015, 0x59325809, 0x812e59c0, 0x05000012, 0x592c0208, 0x82000500, 0x000000ff, 0x90000da9, 0x0502000d, 0x59300203, 0x90000583, 0x05000008, 0x59300808, 0x84040d26, - 0x48066008, 0x0001f945, 0x6503900d, 0x642370e5, - 0x1c01f000, 0x053dfc04, 0x05fc07f8, 0x42000000, - 0x0010e44c, 0x0561fb23, 0x59880151, 0x80000000, - 0x48031151, 0x6503900d, 0x42000000, 0xc0000000, - 0x0001f13a, 0x4c5c0000, 0x4c600000, 0x4c640000, - 0x4200c800, 0x00110209, 0x6000b860, 0x6014c002, - 0x0531ffed, 0x4a0370e4, 0x02000000, 0x5c00c800, + 0x48066008, 0x0001f94d, 0x6503900d, 0x642370e5, + 0x1c01f000, 0x0541f826, 0x05fc07f8, 0x42000000, + 0x001123f0, 0x0565fa02, 0x59880154, 0x80000000, + 0x48031154, 0x6503900d, 0x42000000, 0xc0000000, + 0x0001f142, 0x4c5c0000, 0x4c600000, 0x4c640000, + 0x4200c800, 0x001141ad, 0x6000b860, 0x6014c002, + 0x0535fb41, 0x4a0370e4, 0x02000000, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4933c857, - 0x0005f7dc, 0x4933c857, 0x0501fbab, 0x1c01f000, - 0x41300800, 0x800409c0, 0x05fe0904, 0x05fdf8fc, - 0x42000000, 0x0010e44c, 0x0561fb02, 0x4933c857, - 0x813261c0, 0x05fc08fd, 0x0501f830, 0x40002800, - 0x0561fa66, 0x0501f88e, 0x05000006, 0x5932680a, - 0x59340200, 0x8c00050e, 0x59300416, 0x05520ad7, - 0x1c01f000, 0x42000000, 0x0010e44c, 0x0561faf1, - 0x4933c857, 0x813261c0, 0x05fc08ec, 0x0501f880, - 0x0500000a, 0x054dffd8, 0x05000008, 0x59325809, + 0x0009f010, 0x4933c857, 0x0501fbad, 0x1c01f000, + 0x41300800, 0x800409c0, 0x05fe08a3, 0x05fdf89b, + 0x42000000, 0x001123f0, 0x0565f9e1, 0x4933c857, + 0x813261c0, 0x05fc089c, 0x0501f830, 0x40002800, + 0x0565f942, 0x0501f88e, 0x05000006, 0x5932680a, + 0x59340200, 0x8c00050e, 0x59300416, 0x05520fd3, + 0x1c01f000, 0x42000000, 0x001123f0, 0x0565f9d0, + 0x4933c857, 0x813261c0, 0x05fc088b, 0x0501f880, + 0x0500000a, 0x0551fcc5, 0x05000008, 0x59325809, 0x592c020c, 0x84000544, 0x8400054e, 0x48025a0c, - 0x417a7800, 0x054dfb1c, 0x1c01f000, 0x485fc857, + 0x417a7800, 0x054dfff2, 0x1c01f000, 0x485fc857, 0x5c000000, 0x4d780000, 0x4203e000, 0x50000000, - 0x6014b900, 0x05fdf0dd, 0x4933c857, 0x913004a0, - 0x05fe18d6, 0x83300c00, 0x0010e4c1, 0x50040000, + 0x6014b900, 0x05fdf07c, 0x4933c857, 0x913004a0, + 0x05fe1875, 0x83300c00, 0x00112465, 0x50040000, 0x80000000, 0x05001002, 0x44000800, 0x1c01f000, 0x4933c857, 0x05fdf7f6, 0x4807c856, 0x59b800ea, 0x8c000510, 0x05fc07fd, 0x59b800e0, 0x4803c857, 0x1c01f000, 0x4803c856, 0x42000000, 0x10000000, - 0x41300800, 0x0501f019, 0x8c000510, 0x00000140, + 0x41300800, 0x0501f019, 0x8c000510, 0x00000148, 0x4c040000, 0x0501f808, 0x5c000800, 0x90100488, - 0x00001140, 0x4c040000, 0x05fdfeab, 0x5c000800, - 0x0001f140, 0x59b800e2, 0x59b820e2, 0x80100580, + 0x00001148, 0x4c040000, 0x05fdfe71, 0x5c000800, + 0x0001f148, 0x59b800e2, 0x59b820e2, 0x80100580, 0x05fe07fd, 0x80102114, 0x0501f001, 0x40101800, 0x800c190a, 0x9010051f, 0x900c1d1f, 0x800c2480, 0x9010251f, 0x1c01f000, 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857, - 0x42001000, 0x0010e38b, 0x50080000, 0x80000540, + 0x42001000, 0x0011232c, 0x50080000, 0x80000540, 0x05020004, 0x640f70e5, 0x4a0370e4, 0x00000300, 0x80000000, 0x44001000, 0x60001008, 0x59b800ea, 0x8c000510, 0x0500000b, 0x05fdffdf, 0x90100488, - 0x05001007, 0x4c040000, 0x4c080000, 0x05fdfe82, + 0x05001007, 0x4c040000, 0x4c080000, 0x05fdfe48, 0x5c001000, 0x5c000800, 0x0501f01c, 0x59b800ea, 0x8c000516, 0x05020019, 0x4a0370e4, 0x00300000, 0x480770e1, 0x600011fe, 0x80081040, 0x05000010, 0x59b808e4, 0x8c040528, 0x05fe07fc, 0x42001000, - 0x0010e38b, 0x50080000, 0x80000040, 0x05020004, - 0x640b70e5, 0x4a0370e4, 0x00000200, 0x05fc1877, + 0x0011232c, 0x50080000, 0x80000040, 0x05020004, + 0x640b70e5, 0x4a0370e4, 0x00000200, 0x05fc1816, 0x44001000, 0x8c04052c, 0x1c01f000, 0x41f80000, - 0x50000000, 0x05fdf871, 0x80081040, 0x05fe07d8, - 0x41f80000, 0x50000000, 0x05fdf86c, 0x4d380000, + 0x50000000, 0x05fdf810, 0x80081040, 0x05fe07d8, + 0x41f80000, 0x50000000, 0x05fdf80b, 0x4d380000, 0x59300c07, 0x90040589, 0x05020004, 0x611e7000, - 0x0009f800, 0x80000580, 0x5c027000, 0x1c01f000, - 0x4c500000, 0x59a80249, 0x8c000518, 0x05000006, + 0x0009f839, 0x80000580, 0x5c027000, 0x1c01f000, + 0x4c500000, 0x59a8024c, 0x8c000518, 0x05000006, 0x640b900d, 0x59c8a020, 0x640f900d, 0x59c80820, 0x0501f005, 0x6407900d, 0x59c8a020, 0x640b900d, 0x59c80820, 0x8c50052e, 0x05000002, 0x900409c0, - 0x82040d00, 0x0000ffff, 0x0531fd12, 0x5c00a000, - 0x1c01f000, 0x42000000, 0x0010e43e, 0x0561fa4d, - 0x05fdffe8, 0x05000052, 0x4933c857, 0x59300407, - 0x90000580, 0x0500004e, 0x59c82021, 0x6407900d, + 0x82040d00, 0x0000ffff, 0x0535f864, 0x5c00a000, + 0x1c01f000, 0x42000000, 0x001123df, 0x0565f92c, + 0x05fdffe8, 0x05000054, 0x4933c857, 0x59300407, + 0x90000580, 0x05000050, 0x59c82021, 0x6407900d, 0x59c82821, 0x82142d00, 0x0000ffff, 0x59325809, - 0x812e59c0, 0x05000046, 0x59300008, 0x8c000536, - 0x05020043, 0x5932680a, 0x0525fb16, 0x05520a03, - 0x599c0019, 0x8c00050c, 0x0502001e, 0x0525fb11, - 0x0502001c, 0x59300813, 0x4807c857, 0x592c040c, - 0x8c00051c, 0x05020015, 0x8400055c, 0x48025c0c, - 0x42000000, 0x0010e3ba, 0x0561fa2a, 0x592c0a08, - 0x82040d00, 0x000000ff, 0xb0040588, 0x05000007, - 0x90040598, 0x05000005, 0xb00405a8, 0x05000003, - 0xb00405aa, 0x05020005, 0x59300013, 0x0555f8fb, - 0x80000d40, 0x48065806, 0x4a026013, 0x7fffffff, - 0x59300008, 0x8c000516, 0x0502001d, 0x48166015, - 0x0525faf0, 0x05000004, 0x59300416, 0x8c00051c, - 0x05000004, 0x599c0019, 0x8c00050c, 0x05000014, - 0x0501fcfc, 0x05020012, 0x0501fa0b, 0x40280000, - 0x4802600f, 0x05000005, 0x4832600d, 0x50200000, - 0x4802600c, 0x4822600e, 0x59300416, 0x8c00051c, - 0x05020004, 0x599c0019, 0x8c00050c, 0x05020871, - 0x6503900d, 0x642370e5, 0x1c01f000, 0x42000000, - 0x0010e44c, 0x0561f9f7, 0x59880153, 0x80000000, - 0x48031153, 0x6503900d, 0x42000000, 0xc0000000, - 0x0001f13a, 0x4cf80000, 0x58f40000, 0x8001f540, - 0x0501f81e, 0x41781800, 0x0501f903, 0x05020013, - 0x44140800, 0x0501f826, 0x05000010, 0x40043800, - 0x60041800, 0x40142000, 0x0501f8fb, 0x0502000b, - 0x801c3800, 0x501c0000, 0x44000800, 0x0501f80f, - 0x801c0580, 0x05000004, 0x44103800, 0x801c3840, - 0x44143800, 0x0501f816, 0x5c01f000, 0x1c01f000, - 0x80f9f1c0, 0x05020003, 0x58f41202, 0x0501f002, - 0x601c1000, 0x1c01f000, 0x80f9f1c0, 0x05020005, - 0x58f40401, 0x90000482, 0x80f40400, 0x0501f004, - 0x58f80401, 0x90000482, 0x80f80400, 0x50002800, - 0x80000000, 0x50002000, 0x1c01f000, 0x80f9f1c0, - 0x05020006, 0x58f40401, 0x90000482, 0x05f81fbb, - 0x4801ec01, 0x0501f008, 0x58f80401, 0x90000482, - 0x05f81fb6, 0x4801f401, 0x90000582, 0x05020002, - 0x0501f817, 0x58f40202, 0x80000040, 0x4801ea02, - 0x05f80fae, 0x90000581, 0x1c01f000, 0x82f40580, - 0xffffffff, 0x0500000d, 0x58f40201, 0x82000580, - 0x0000dcb3, 0x05fa0fa5, 0x58f40000, 0x8001f540, - 0x05000005, 0x58f80201, 0x82000580, 0x0000ddb9, - 0x05fa0f9e, 0x0501f809, 0x1c01f000, 0x4d2c0000, - 0x40fa5800, 0x05fdfb51, 0x4979e800, 0x4179f000, - 0x5c025800, 0x1c01f000, 0x80f5e9c0, 0x05000008, - 0x80f9f1c0, 0x05fe0ff6, 0x4d2c0000, 0x40f65800, - 0x05fdfb46, 0x4179e800, 0x5c025800, 0x1c01f000, - 0x4cf40000, 0x0525fa67, 0x0502002e, 0x59300808, - 0x82040500, 0x00003000, 0x0502002a, 0x8c040522, - 0x0500002a, 0x5930002b, 0x8001ed40, 0x05f80f7f, - 0x82000580, 0xffffffff, 0x05000022, 0x58f40201, - 0x82000580, 0x0000dcb3, 0x05fa0f78, 0x58f40a02, - 0x82040500, 0x0000fffe, 0x05000003, 0x05fdff86, - 0x58f40a02, 0x9004048f, 0x0502107a, 0x80040800, - 0x4805ea02, 0x90040588, 0x0500007d, 0x90040488, - 0x05001008, 0x58f40000, 0x8001ed40, 0x05f80f67, - 0x58f40201, 0x82000580, 0x0000ddb9, 0x05fa0f63, - 0x58f40401, 0x90000c02, 0x4805ec01, 0x80f40400, - 0x59300814, 0x44040000, 0x80000000, 0x45780000, - 0x5c01e800, 0x1c01f000, 0x60001020, 0x4203e000, - 0xb0800000, 0x4203f800, 0x0c000000, 0x40000000, - 0x80081040, 0x05f80f51, 0x05ffb7fb, 0x59300808, - 0x84040d62, 0x48066008, 0x4203f800, 0x08000000, - 0x4d2c0000, 0x05fdfae0, 0x0500004e, 0x492e602b, - 0x4a025a01, 0x0000dcb3, 0x59300009, 0x80001d40, - 0x05f80f42, 0x580c0813, 0x48065803, 0x580c0208, - 0x82000500, 0x000000ff, 0xb00005a8, 0x05000007, - 0x90000582, 0x05000005, 0x90000598, 0x05000003, - 0x90000588, 0x0502002b, 0x580c1801, 0x800c19c0, - 0x05f80f32, 0x580c0c09, 0x90040d03, 0x90040582, - 0x05020003, 0x592c0803, 0x0501f022, 0x580c2a0a, - 0x580c000b, 0x59301813, 0x800c0580, 0x05000021, - 0x90040580, 0x0500000e, 0x40140000, 0x4c080000, - 0x400c1000, 0x41780800, 0x0539f8d4, 0x800409c0, - 0x05fa0f1e, 0x90140c08, 0x0539f8b4, 0x5c001000, - 0x40041800, 0x592c0803, 0x0501f015, 0x90140408, - 0x4c080000, 0x400c1000, 0x41780800, 0x0539f8c7, - 0x800409c0, 0x05fa0f11, 0x40140800, 0x0539f8a7, - 0x5c001000, 0x40041800, 0x592c0803, 0x0501f008, - 0x59301813, 0x40040000, 0x800c0580, 0x05020004, - 0x497a5a02, 0x64125c01, 0x0501f007, 0x64065a02, - 0x641a5c01, 0x497a5804, 0x400c0000, 0x80040480, - 0x48025805, 0x412de800, 0x5c025800, 0x05fdf789, - 0x5c025800, 0x4a02602b, 0xffffffff, 0x05fdf79d, - 0x4d2c0000, 0x58f65800, 0x05fdfaac, 0x40f65800, - 0x05fdfaaa, 0x5c025800, 0x05fdf7f7, 0x4d2c0000, - 0x05fdfa85, 0x05fc07fa, 0x4a025a01, 0x0000ddb9, - 0x640a5c01, 0x492de800, 0x412de800, 0x5c025800, - 0x05fdf784, 0x05fdff13, 0x90f40404, 0x800c0400, - 0x40000800, 0x50040000, 0x80100580, 0x05000012, - 0x90040c02, 0x80081040, 0x05fe07fb, 0x80f9f1c0, - 0x0500000e, 0x58f41202, 0x90081487, 0x90f80402, - 0x800c0400, 0x40000800, 0x50040000, 0x80100580, - 0x05000005, 0x90040c02, 0x80081040, 0x05fe07fb, - 0x0501f002, 0x1c01f000, 0x90000541, 0x05fdf7fe, - 0x4cf40000, 0x4cf80000, 0x4001e800, 0x812e59c0, - 0x05000021, 0x592c0a0a, 0x800409c0, 0x0502001e, - 0x82f40580, 0xffffffff, 0x05000019, 0x58f40201, - 0x82000580, 0x0000dcb3, 0x05fa0ebc, 0x58f40000, - 0x8001f540, 0x05000005, 0x58f80201, 0x82000580, - 0x0000ddb9, 0x05fa0eb5, 0x41783800, 0x58f44003, - 0x0501f833, 0x05020009, 0x05fdff1c, 0x497a602b, - 0x59300808, 0x84040d22, 0x48066008, 0x5c01f000, - 0x5c01e800, 0x1c01f000, 0x05fdff14, 0x64465a0a, - 0x05fdf7f7, 0x05fdfefa, 0x05fdf7f5, 0x4cf40000, - 0x4cf80000, 0x4001e800, 0x90040581, 0x0502001c, - 0x82f40580, 0xffffffff, 0x05000017, 0x58f40201, - 0x82000580, 0x0000dcb3, 0x05fa0e98, 0x58f40000, - 0x8001f540, 0x05000005, 0x58f80201, 0x82000580, - 0x0000ddb9, 0x05fa0e91, 0x41783800, 0x58f44003, - 0x0501f80f, 0x05020007, 0x05fdfef8, 0x60040800, - 0x497a602b, 0x5c01f000, 0x5c01e800, 0x1c01f000, - 0x05fdfef2, 0x60440800, 0x05fdf7fa, 0x4c040000, - 0x05fdfed7, 0x5c000800, 0x05fdf7f6, 0x4803c856, - 0x401c2000, 0x41781800, 0x4c200000, 0x05fdff96, - 0x5c004000, 0x05020022, 0x40202000, 0x60041800, - 0x05fdff91, 0x0502001e, 0x05fdfea2, 0x40082800, - 0x90f43404, 0x50182000, 0x40100000, 0x801c0580, - 0x05000004, 0x60041800, 0x05fdff87, 0x05020014, - 0x90183402, 0x80142840, 0x05fe07f7, 0x80f9f1c0, - 0x0500000e, 0x58f42a02, 0x90142c87, 0x90f83402, - 0x50182000, 0x40100000, 0x801c0580, 0x05000004, - 0x60041800, 0x05fdff78, 0x05020005, 0x90183402, - 0x80142840, 0x05fe07f7, 0x1c01f000, 0x90000541, - 0x05fdf7fe, 0x05f9fe55, 0x592c020e, 0x8c000502, - 0x05fc07fd, 0x497a6014, 0x0501fdbe, 0x412c7000, - 0x59300008, 0x84000556, 0x48026008, 0x9004050f, - 0x82000c00, 0x001012ac, 0x50044000, 0x80204000, - 0x50200000, 0x80187c00, 0x583c2800, 0x583c2001, - 0x583c1002, 0x58380a0b, 0x40187000, 0x5818300b, - 0x59303808, 0x497a6015, 0x0001f183, 0x592c040e, - 0x8c000500, 0x05f80e39, 0x592c0011, 0x48026014, - 0x05fdf7e6, 0x592c040c, 0x8c000502, 0x05fc07de, - 0x592c040d, 0x80000540, 0x05fc07db, 0x90000c82, - 0x0500100e, 0x58380001, 0x80007540, 0x05f80e2b, - 0x58380208, 0x9000050f, 0x82000400, 0x001012ac, - 0x50004000, 0x40040000, 0x800409c0, 0x05000004, - 0x90040c85, 0x05fe17f4, 0x80204400, 0x50200000, - 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002, - 0x592c0a0b, 0x592c3011, 0x59303808, 0x497a6014, - 0x497a6015, 0x48166010, 0x48126011, 0x480a6012, - 0x481a6013, 0x80040840, 0x4806600f, 0x0000018a, - 0x80204000, 0x50201800, 0x800c19c0, 0x0502000a, - 0x58380001, 0x80007540, 0x05f80e08, 0x58380208, - 0x9000050f, 0x82000400, 0x001012ac, 0x50004000, - 0x50201800, 0x483a600d, 0x480e600c, 0x4822600e, - 0x0001f18a, 0x4803c856, 0x592c020c, 0x8c00051e, - 0x05020016, 0x50200000, 0x80306c00, 0x40240000, - 0x0c01f001, 0x00100ff5, 0x00100ff5, 0x00100ffd, - 0x00100ff5, 0x00100ff5, 0x00100ff5, 0x00100ff5, - 0x00100ff5, 0x00100ffd, 0x00100ff5, 0x00100ffd, - 0x00100ff5, 0x00100ff5, 0x00100ffd, 0x00100ff5, - 0x00100ff5, 0x05f9fde5, 0x8400051e, 0x48025a0c, - 0x50200000, 0x80306c00, 0x58343801, 0x481e6011, - 0x0501f007, 0x58341802, 0x58342800, 0x58343801, - 0x480e6012, 0x48166010, 0x481e6011, 0x0501f289, - 0x4933c857, 0x5931f809, 0x59301006, 0x800811c0, - 0x05000009, 0x41780800, 0x60280000, 0x0535ff83, - 0x80080102, 0x05020002, 0x84001542, 0x80081040, - 0x4809fc0a, 0x640a6006, 0x592c040d, 0x90000508, - 0x05000008, 0x0501f834, 0x59300203, 0x90000584, - 0x05020003, 0x61227000, 0x0009f800, 0x1c01f000, - 0x4cfc0000, 0x58fc0208, 0x82000500, 0x000000ff, - 0xb0000588, 0x05000003, 0x900005a2, 0x05020009, - 0x58fc040c, 0x8c000500, 0x05000006, 0x58fc080f, - 0x8c040516, 0x0500001c, 0x58fc000b, 0x0501f00a, - 0x58fc040c, 0x8c000512, 0x05020019, 0x58fc0c0d, - 0x8c040516, 0x05020003, 0x5c01f800, 0x1c01f000, - 0x58fc000e, 0x4c000000, 0x4d2c0000, 0x40fe5800, - 0x59300013, 0x0551fe81, 0x5c025800, 0x80000d40, - 0x5c000000, 0x80040580, 0x05020007, 0x59300008, - 0x84000500, 0x48026008, 0x61227000, 0x5c01f800, - 0x0009f000, 0x5c01f800, 0x1c01f000, 0x58fdf80d, - 0x05fdf7e7, 0x5c000000, 0x4c000000, 0x4803c857, - 0x4933c857, 0x59b808ea, 0x90040d07, 0x90040580, - 0x05000021, 0x90040583, 0x0500001f, 0x59300407, - 0x4c000000, 0x64026407, 0x61043000, 0x4a0370e5, - 0x00003000, 0x42000000, 0x50000000, 0x41300800, - 0x4c180000, 0x05fdfcd5, 0x5c003000, 0x0500000d, - 0x60780000, 0x80000040, 0x05fe07ff, 0x80183040, - 0x05fe07f5, 0x42000000, 0x40000000, 0x41300800, - 0x05fdfcca, 0x5988014d, 0x80000000, 0x4803114d, - 0x4a0370e5, 0x00002000, 0x5c000000, 0x48026407, - 0x1c01f000, 0x59300008, 0x84000500, 0x48026008, - 0x05fdf7fc, 0x59c00007, 0x4a038006, 0x30000000, - 0x40000000, 0x59c00007, 0x8c00050a, 0x05fe07fe, - 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, - 0x4dc00000, 0x640370e8, 0x608380ee, 0x05fdfff2, - 0x600380ee, 0x05fdfff0, 0x0529f828, 0x05020011, - 0x4a038891, 0x0000ffff, 0x497b8880, 0x4ce80000, - 0x6059d000, 0x0531ff78, 0x497b8892, 0x6059d000, - 0x0531ff75, 0x5c01d000, 0x42000000, 0x0010e497, - 0x055dff48, 0x0501f810, 0x5c038000, 0x0529f102, - 0x0501f81f, 0x4c080000, 0x4c140000, 0x42000000, - 0x0010e498, 0x055dff3f, 0x0501f807, 0x5c002800, + 0x812e59c0, 0x05000048, 0x59300008, 0x8c000536, + 0x05020045, 0x5932680a, 0x0525fcec, 0x05520eff, + 0x0565fa96, 0x0502001e, 0x0525fce8, 0x0502001c, + 0x59300813, 0x4807c857, 0x592c040c, 0x8c00051c, + 0x05020015, 0x8400055c, 0x48025c0c, 0x42000000, + 0x0011235b, 0x0565f90a, 0x592c0a08, 0x82040d00, + 0x000000ff, 0xb0040588, 0x05000007, 0x90040598, + 0x05000005, 0xb00405a8, 0x05000003, 0xb00405aa, + 0x05020005, 0x59300013, 0x0555fe06, 0x80000d40, + 0x48065806, 0x4a026013, 0x7fffffff, 0x59300014, + 0x80000540, 0x05000004, 0x59300008, 0x8c000516, + 0x0502001d, 0x48166015, 0x0525fcc4, 0x05000004, + 0x59300416, 0x8c00051c, 0x05000005, 0x0565fa6b, + 0x05000015, 0x0525fcbd, 0x05020013, 0x0501fcd0, + 0x05020011, 0x0501fa0a, 0x40280000, 0x4802600f, + 0x05000005, 0x4832600d, 0x50200000, 0x4802600c, + 0x4822600e, 0x59300416, 0x8c00051c, 0x05020003, + 0x0565fa5a, 0x05020871, 0x6503900d, 0x642370e5, + 0x1c01f000, 0x42000000, 0x001123f0, 0x0565f8d4, + 0x59880156, 0x80000000, 0x48031156, 0x6503900d, + 0x42000000, 0xc0000000, 0x0001f142, 0x4cf80000, + 0x58f40000, 0x8001f540, 0x0501f81e, 0x41781800, + 0x0501f903, 0x05020013, 0x44140800, 0x0501f826, + 0x05000010, 0x40043800, 0x60041800, 0x40142000, + 0x0501f8fb, 0x0502000b, 0x801c3800, 0x501c0000, + 0x44000800, 0x0501f80f, 0x801c0580, 0x05000004, + 0x44103800, 0x801c3840, 0x44143800, 0x0501f816, + 0x5c01f000, 0x1c01f000, 0x80f9f1c0, 0x05020003, + 0x58f41202, 0x0501f002, 0x601c1000, 0x1c01f000, + 0x80f9f1c0, 0x05020005, 0x58f40401, 0x90000482, + 0x80f40400, 0x0501f004, 0x58f80401, 0x90000482, + 0x80f80400, 0x50002800, 0x80000000, 0x50002000, + 0x1c01f000, 0x80f9f1c0, 0x05020006, 0x58f40401, + 0x90000482, 0x05f81f58, 0x4801ec01, 0x0501f008, + 0x58f80401, 0x90000482, 0x05f81f53, 0x4801f401, + 0x90000582, 0x05020002, 0x0501f817, 0x58f40202, + 0x80000040, 0x4801ea02, 0x05f80f4b, 0x90000581, + 0x1c01f000, 0x82f40580, 0xffffffff, 0x0500000d, + 0x58f40201, 0x82000580, 0x0000dcb3, 0x05fa0f42, + 0x58f40000, 0x8001f540, 0x05000005, 0x58f80201, + 0x82000580, 0x0000ddb9, 0x05fa0f3b, 0x0501f809, + 0x1c01f000, 0x4d2c0000, 0x40fa5800, 0x05fdfaea, + 0x4979e800, 0x4179f000, 0x5c025800, 0x1c01f000, + 0x80f5e9c0, 0x05000008, 0x80f9f1c0, 0x05fe0ff6, + 0x4d2c0000, 0x40f65800, 0x05fdfadf, 0x4179e800, + 0x5c025800, 0x1c01f000, 0x4cf40000, 0x0525fc3b, + 0x0502002e, 0x59300808, 0x82040500, 0x00003000, + 0x0502002a, 0x8c040522, 0x0500002a, 0x5930002b, + 0x8001ed40, 0x05f80f1c, 0x82000580, 0xffffffff, + 0x05000022, 0x58f40201, 0x82000580, 0x0000dcb3, + 0x05fa0f15, 0x58f40a02, 0x82040500, 0x0000fffe, + 0x05000003, 0x05fdff86, 0x58f40a02, 0x9004048f, + 0x0502107a, 0x80040800, 0x4805ea02, 0x90040588, + 0x0500007d, 0x90040488, 0x05001008, 0x58f40000, + 0x8001ed40, 0x05f80f04, 0x58f40201, 0x82000580, + 0x0000ddb9, 0x05fa0f00, 0x58f40401, 0x90000c02, + 0x4805ec01, 0x80f40400, 0x59300814, 0x44040000, + 0x80000000, 0x45780000, 0x5c01e800, 0x1c01f000, + 0x60001020, 0x4203e000, 0xb0800000, 0x4203f800, + 0x0c000000, 0x40000000, 0x80081040, 0x05f80eee, + 0x05ffb7fb, 0x59300808, 0x84040d62, 0x48066008, + 0x4203f800, 0x08000000, 0x4d2c0000, 0x05fdfa79, + 0x0500004e, 0x492e602b, 0x4a025a01, 0x0000dcb3, + 0x59300009, 0x80001d40, 0x05f80edf, 0x580c0813, + 0x48065803, 0x580c0208, 0x82000500, 0x000000ff, + 0xb00005a8, 0x05000007, 0x90000582, 0x05000005, + 0x90000598, 0x05000003, 0x90000588, 0x0502002b, + 0x580c1801, 0x800c19c0, 0x05f80ecf, 0x580c0c09, + 0x90040d03, 0x90040582, 0x05020003, 0x592c0803, + 0x0501f022, 0x580c2a0a, 0x580c000b, 0x59301813, + 0x800c0580, 0x05000021, 0x90040580, 0x0500000e, + 0x40140000, 0x4c080000, 0x400c1000, 0x41780800, + 0x0539fcef, 0x800409c0, 0x05fa0ebb, 0x90140c08, + 0x0539fccf, 0x5c001000, 0x40041800, 0x592c0803, + 0x0501f015, 0x90140408, 0x4c080000, 0x400c1000, + 0x41780800, 0x0539fce2, 0x800409c0, 0x05fa0eae, + 0x40140800, 0x0539fcc2, 0x5c001000, 0x40041800, + 0x592c0803, 0x0501f008, 0x59301813, 0x40040000, + 0x800c0580, 0x05020004, 0x497a5a02, 0x64125c01, + 0x0501f007, 0x64065a02, 0x641a5c01, 0x497a5804, + 0x400c0000, 0x80040480, 0x48025805, 0x412de800, + 0x5c025800, 0x05fdf789, 0x5c025800, 0x4a02602b, + 0xffffffff, 0x05fdf79d, 0x4d2c0000, 0x58f65800, + 0x05fdfa45, 0x40f65800, 0x05fdfa43, 0x5c025800, + 0x05fdf7f7, 0x4d2c0000, 0x05fdfa1e, 0x05fc07fa, + 0x4a025a01, 0x0000ddb9, 0x640a5c01, 0x492de800, + 0x412de800, 0x5c025800, 0x05fdf784, 0x05fdff13, + 0x90f40404, 0x800c0400, 0x40000800, 0x50040000, + 0x80100580, 0x05000012, 0x90040c02, 0x80081040, + 0x05fe07fb, 0x80f9f1c0, 0x0500000e, 0x58f41202, + 0x90081487, 0x90f80402, 0x800c0400, 0x40000800, + 0x50040000, 0x80100580, 0x05000005, 0x90040c02, + 0x80081040, 0x05fe07fb, 0x0501f002, 0x1c01f000, + 0x90000541, 0x05fdf7fe, 0x4cf40000, 0x4cf80000, + 0x4001e800, 0x812e59c0, 0x05000021, 0x592c0a0a, + 0x800409c0, 0x0502001e, 0x82f40580, 0xffffffff, + 0x05000019, 0x58f40201, 0x82000580, 0x0000dcb3, + 0x05fa0e59, 0x58f40000, 0x8001f540, 0x05000005, + 0x58f80201, 0x82000580, 0x0000ddb9, 0x05fa0e52, + 0x41783800, 0x58f44003, 0x0501f833, 0x05020009, + 0x05fdff1c, 0x497a602b, 0x59300808, 0x84040d22, + 0x48066008, 0x5c01f000, 0x5c01e800, 0x1c01f000, + 0x05fdff14, 0x64465a0a, 0x05fdf7f7, 0x05fdfefa, + 0x05fdf7f5, 0x4cf40000, 0x4cf80000, 0x4001e800, + 0x90040581, 0x0502001c, 0x82f40580, 0xffffffff, + 0x05000017, 0x58f40201, 0x82000580, 0x0000dcb3, + 0x05fa0e35, 0x58f40000, 0x8001f540, 0x05000005, + 0x58f80201, 0x82000580, 0x0000ddb9, 0x05fa0e2e, + 0x41783800, 0x58f44003, 0x0501f80f, 0x05020007, + 0x05fdfef8, 0x60040800, 0x497a602b, 0x5c01f000, + 0x5c01e800, 0x1c01f000, 0x05fdfef2, 0x60440800, + 0x05fdf7fa, 0x4c040000, 0x05fdfed7, 0x5c000800, + 0x05fdf7f6, 0x4803c856, 0x401c2000, 0x41781800, + 0x4c200000, 0x05fdff96, 0x5c004000, 0x05020022, + 0x40202000, 0x60041800, 0x05fdff91, 0x0502001e, + 0x05fdfea2, 0x40082800, 0x90f43404, 0x50182000, + 0x40100000, 0x801c0580, 0x05000004, 0x60041800, + 0x05fdff87, 0x05020014, 0x90183402, 0x80142840, + 0x05fe07f7, 0x80f9f1c0, 0x0500000e, 0x58f42a02, + 0x90142c87, 0x90f83402, 0x50182000, 0x40100000, + 0x801c0580, 0x05000004, 0x60041800, 0x05fdff78, + 0x05020005, 0x90183402, 0x80142840, 0x05fe07f7, + 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x05f9fdf2, + 0x592c020e, 0x8c000502, 0x05fc07fd, 0x497a6014, + 0x0501fd92, 0x412c7000, 0x59300008, 0x84000556, + 0x48026008, 0x9004050f, 0x82000c00, 0x0010004b, + 0x50044000, 0x80204000, 0x50200000, 0x80187c00, + 0x583c2800, 0x583c2001, 0x583c1002, 0x58380a0b, + 0x40187000, 0x5818300b, 0x59303808, 0x497a6015, + 0x0001f18b, 0x592c040e, 0x8c000500, 0x05f80dd6, + 0x592c0011, 0x48026014, 0x05fdf7e6, 0x592c040c, + 0x8c000502, 0x05fc07de, 0x592c040d, 0x80000540, + 0x05fc07db, 0x90000c82, 0x0500100e, 0x58380001, + 0x80007540, 0x05f80dc8, 0x58380208, 0x9000050f, + 0x82000400, 0x0010004b, 0x50004000, 0x40040000, + 0x800409c0, 0x05000004, 0x90040c85, 0x05fe17f4, + 0x80204400, 0x50200000, 0x80387c00, 0x583c2800, + 0x583c2001, 0x583c1002, 0x592c0a0b, 0x592c3011, + 0x59303808, 0x497a6014, 0x497a6015, 0x48166010, + 0x48126011, 0x480a6012, 0x481a6013, 0x80040840, + 0x4806600f, 0x00000192, 0x80204000, 0x50201800, + 0x800c19c0, 0x0502000a, 0x58380001, 0x80007540, + 0x05f80da5, 0x58380208, 0x9000050f, 0x82000400, + 0x0010004b, 0x50004000, 0x50201800, 0x483a600d, + 0x480e600c, 0x4822600e, 0x0001f192, 0x4803c856, + 0x592c020c, 0x8c00051e, 0x05020016, 0x50200000, + 0x80306c00, 0x40240000, 0x0c01f001, 0x00101093, + 0x00101093, 0x0010109b, 0x00101093, 0x00101093, + 0x00101093, 0x00101093, 0x00101093, 0x0010109b, + 0x00101093, 0x0010109b, 0x00101093, 0x00101093, + 0x0010109b, 0x00101093, 0x00101093, 0x05f9fd82, + 0x8400051e, 0x48025a0c, 0x50200000, 0x80306c00, + 0x58343801, 0x481e6011, 0x0501f007, 0x58341802, + 0x58342800, 0x58343801, 0x480e6012, 0x48166010, + 0x481e6011, 0x0501f287, 0x4933c857, 0x5931f809, + 0x59301006, 0x800811c0, 0x05000009, 0x41780800, + 0x60280000, 0x0539fb9e, 0x80080102, 0x05020002, + 0x84001542, 0x80081040, 0x4809fc0a, 0x640a6006, + 0x592c040d, 0x90000508, 0x05000008, 0x0501f834, + 0x59300203, 0x90000584, 0x05020003, 0x61227000, + 0x0009f839, 0x1c01f000, 0x4cfc0000, 0x58fc0208, + 0x82000500, 0x000000ff, 0xb0000588, 0x05000003, + 0x900005a2, 0x05020009, 0x58fc040c, 0x8c000500, + 0x05000006, 0x58fc080f, 0x8c040516, 0x0500001c, + 0x58fc000b, 0x0501f00a, 0x58fc040c, 0x8c000512, + 0x05020019, 0x58fc0c0d, 0x8c040516, 0x05020003, + 0x5c01f800, 0x1c01f000, 0x58fc000e, 0x4c000000, + 0x4d2c0000, 0x40fe5800, 0x59300013, 0x0555fb89, + 0x5c025800, 0x80000d40, 0x5c000000, 0x80040580, + 0x05020007, 0x59300008, 0x84000500, 0x48026008, + 0x61227000, 0x5c01f800, 0x0009f039, 0x5c01f800, + 0x1c01f000, 0x58fdf80d, 0x05fdf7e7, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4933c857, 0x59b808ea, + 0x90040d07, 0x90040580, 0x05000021, 0x90040583, + 0x0500001f, 0x59300407, 0x4c000000, 0x64026407, + 0x61043000, 0x4a0370e5, 0x00003000, 0x42000000, + 0x50000000, 0x41300800, 0x4c180000, 0x05fdfcd3, + 0x5c003000, 0x0500000d, 0x60780000, 0x80000040, + 0x05fe07ff, 0x80183040, 0x05fe07f5, 0x42000000, + 0x40000000, 0x41300800, 0x05fdfcc8, 0x59880150, + 0x80000000, 0x48031150, 0x4a0370e5, 0x00002000, + 0x5c000000, 0x48026407, 0x1c01f000, 0x59300008, + 0x84000500, 0x48026008, 0x05fdf7fc, 0x59c00007, + 0x4a038006, 0x30000000, 0x40000000, 0x59c00007, + 0x8c00050a, 0x05fe07fe, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4dc00000, 0x640370e8, + 0x608380ee, 0x05fdfff2, 0x600380ee, 0x05fdfff0, + 0x0529fa74, 0x05020012, 0x4a038891, 0x0000ffff, + 0x497b8880, 0x4ce80000, 0x6059d000, 0x0535fb45, + 0x497b8892, 0x6059d000, 0x0535fb42, 0x5c01d000, + 0x42000000, 0x0011243b, 0x0561fe25, 0x61fc19ff, + 0x0501f811, 0x5c038000, 0x0529f34d, 0x0501f81b, + 0x4c080000, 0x4c140000, 0x42000000, 0x0011243c, + 0x0561fe1b, 0x61fc19ff, 0x0501f807, 0x5c002800, 0x5c001000, 0x48178892, 0x480b8880, 0x5c038000, - 0x1c01f000, 0x496fc857, 0x916c0583, 0x05020008, - 0x4c080000, 0x4c0c0000, 0x61201100, 0x61fc19ff, - 0x0519ff30, 0x5c001800, 0x5c001000, 0x60f00800, - 0x0501ff46, 0x4a038891, 0x0000ffff, 0x6503900d, - 0x05fdfaa8, 0x640770e8, 0x1c01f000, 0x5c000000, - 0x4c000000, 0x4803c857, 0x59c41080, 0x497b8880, - 0x4ce80000, 0x6059d000, 0x4c080000, 0x0531ff46, - 0x5c001000, 0x5c01d000, 0x59c42892, 0x497b8892, - 0x0525ffea, 0x05020002, 0x1c01f000, 0x61802004, - 0x59c418a4, 0x900c1d0f, 0x900c0580, 0x0500000c, - 0x59c41805, 0x900c1d01, 0x0502000b, 0x59c418a4, - 0x900c1d0f, 0x900c0487, 0x05001003, 0x900c048c, - 0x05001003, 0x80102040, 0x05fe07f2, 0x497b8891, - 0x1c01f000, 0x4c100000, 0x60642000, 0x64078805, - 0x0505fccf, 0x59c41805, 0x900c1d01, 0x05000005, - 0x80102040, 0x05fe07fa, 0x5c002000, 0x05fdf7f4, - 0x5c002000, 0x05fdf7f0, 0x60080020, 0x46000000, - 0x0162c58b, 0x59c8080b, 0x4807c857, 0x59c8103f, - 0x480bc857, 0x05f9fced, 0x4803c856, 0x1c01f000, - 0x00101100, 0x00101100, 0x00101100, 0x00101114, - 0x00101100, 0x00101100, 0x00101100, 0x00101100, - 0x00101100, 0x00101114, 0x00101100, 0x00101101, - 0x00101100, 0x00101100, 0x00101100, 0x00101100, - 0x05f9fcda, 0x900405bb, 0x05fa0cd8, 0x592c020e, - 0x8c000500, 0x0500008d, 0x592c1a0b, 0x9004050f, - 0x82000400, 0x001012ac, 0x50001000, 0x50080000, - 0x59302015, 0x4802600c, 0x492e600d, 0x480a600e, - 0x480e600f, 0x48126014, 0x5c025800, 0x1c01f000, - 0x9004050f, 0x82000400, 0x001012ac, 0x50001000, - 0x50080000, 0x592c1a0b, 0x4802600c, 0x492e600d, - 0x480a600e, 0x480e600f, 0x497a6014, 0x05fdf7f3, - 0x8c040500, 0x05020071, 0x82040d00, 0x00000080, - 0x0500006e, 0x0001f19b, 0x0501fc22, 0x843c7d4e, - 0x0001f1a8, 0x59307804, 0x823c7d00, 0x01880080, - 0x823c7d40, 0x80000005, 0x59300013, 0x82000500, - 0xffff0000, 0x05000002, 0x843c7d6a, 0x59300015, - 0x59301014, 0x80080580, 0x0502000b, 0x800811c0, - 0x05020004, 0x8c3c050e, 0x05000055, 0x0501f004, - 0x592c120c, 0x8c08051e, 0x05020051, 0x843c7d4a, - 0x0501f04f, 0x480bc857, 0x59300804, 0x82040500, - 0x00008080, 0x82000580, 0x00008080, 0x05020016, - 0x592c6001, 0x58300409, 0x90000503, 0x90000581, - 0x05020011, 0x84040d1e, 0x48066004, 0x59302015, - 0x5930001c, 0x80101480, 0x0500100b, 0x5830020a, - 0x41780800, 0x0535fe39, 0x800810c6, 0x59301814, - 0x800c0482, 0x80100580, 0x05020003, 0x48126014, - 0x05fdf7db, 0x42000000, 0x0010e43f, 0x055dfe7d, - 0x59302015, 0x59300416, 0x4803c857, 0x8c000514, - 0x0502000f, 0x599c1819, 0x8c0c0512, 0x0500000a, - 0x592c0813, 0x59300017, 0x80040c80, 0x05000005, - 0x05001004, 0x80040000, 0x80140480, 0x05001008, - 0x0541fac4, 0x900c1d41, 0x0501f01f, 0x84000514, - 0x48026416, 0x48126017, 0x4813c857, 0x4c3c0000, - 0x0501f954, 0x5c007800, 0x05020017, 0x5930500f, - 0x592c020c, 0x4803c857, 0x8c00051e, 0x05020004, - 0x903c7d60, 0x5930400e, 0x0501f004, 0x8400051e, - 0x48025a0c, 0x0501f907, 0x50201800, 0x480e600c, - 0x4832600d, 0x4822600e, 0x482a600f, 0x480fc857, - 0x4833c857, 0x4823c857, 0x482bc857, 0x80000580, - 0x483e6004, 0x1c01f000, 0x05f9fc48, 0x4933c857, - 0x4d2c0000, 0x59900005, 0x81300580, 0x05fa0c43, - 0x054dfb31, 0x05f80c41, 0x59325809, 0x4d3c0000, - 0x4d400000, 0x59300004, 0x4803c857, 0x4c000000, - 0x0539fda9, 0x0539faab, 0x5c000000, 0x8c000516, - 0x05000014, 0x82000d00, 0x01000080, 0x05020004, - 0x592c0a0e, 0x8c040506, 0x0502000e, 0x592c0013, - 0x4803c857, 0x4802580b, 0x41780800, 0x600a8000, - 0x0525fc7b, 0x4a025c0a, 0x0000ffff, 0x492fc857, - 0x0001fb82, 0x0551fcfc, 0x0541fa1a, 0x0501f01b, - 0x640a6203, 0x592c020c, 0x8c000512, 0x05020004, - 0x592c020c, 0x8400054e, 0x48025a0c, 0x59300407, - 0x90000586, 0x0502000f, 0x592c0811, 0x59140001, - 0x82000500, 0xffff0000, 0x05000004, 0x811800ca, - 0x81c80c00, 0x58040939, 0x48066017, 0x592c0011, - 0x80040480, 0x592c0813, 0x80040480, 0x4802580f, - 0x417a7800, 0x0549fe44, 0x5c028000, 0x5c027800, - 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000, - 0x59900005, 0x81300580, 0x05fa0c00, 0x054dfaee, - 0x05f80bfe, 0x59325809, 0x592c020c, 0x84000540, - 0x48025a0c, 0x05fdf7ba, 0x491bc857, 0x4dd00000, + 0x1c01f000, 0x496fc857, 0x916c0583, 0x05020003, + 0x61201100, 0x051df830, 0x60f00800, 0x0501ff1c, + 0x4a038891, 0x0000ffff, 0x6503900d, 0x05fdfa6f, + 0x640770e8, 0x1c01f000, 0x5c000000, 0x4c000000, + 0x4803c857, 0x59c41080, 0x497b8880, 0x4ce80000, + 0x6059d000, 0x4c080000, 0x0535fb16, 0x5c001000, + 0x5c01d000, 0x59c42892, 0x497b8892, 0x0529fa39, + 0x05020002, 0x1c01f000, 0x61802004, 0x59c418a4, + 0x900c1d0f, 0x900c0580, 0x0500000c, 0x59c41805, + 0x900c1d01, 0x0502000b, 0x59c418a4, 0x900c1d0f, + 0x900c0487, 0x05001003, 0x900c048c, 0x05001003, + 0x80102040, 0x05fe07f2, 0x497b8891, 0x1c01f000, + 0x4c100000, 0x60642000, 0x64078805, 0x0505fcb4, + 0x59c41805, 0x900c1d01, 0x05000005, 0x80102040, + 0x05fe07fa, 0x5c002000, 0x05fdf7f4, 0x5c002000, + 0x05fdf7f0, 0x60080020, 0x46000000, 0x0162c58b, + 0x59c8080b, 0x4807c857, 0x59c8103f, 0x480bc857, + 0x42000000, 0x00112438, 0x0561fdcd, 0x05fdff90, + 0x1c01f000, 0x4803c856, 0x1c01f000, 0x0010119f, + 0x0010119f, 0x0010119f, 0x001011b3, 0x0010119f, + 0x0010119f, 0x0010119f, 0x0010119f, 0x0010119f, + 0x001011b3, 0x0010119f, 0x001011a0, 0x0010119f, + 0x0010119f, 0x0010119f, 0x0010119f, 0x05f9fc76, + 0x900405bb, 0x05fa0c74, 0x592c020e, 0x8c000500, + 0x0500008d, 0x592c1a0b, 0x9004050f, 0x82000400, + 0x0010004b, 0x50001000, 0x50080000, 0x59302015, + 0x4802600c, 0x492e600d, 0x480a600e, 0x480e600f, + 0x48126014, 0x5c025800, 0x1c01f000, 0x9004050f, + 0x82000400, 0x0010004b, 0x50001000, 0x50080000, + 0x592c1a0b, 0x4802600c, 0x492e600d, 0x480a600e, + 0x480e600f, 0x497a6014, 0x05fdf7f3, 0x8c040500, + 0x05020071, 0x82040d00, 0x00000080, 0x0500006e, + 0x0001f1a3, 0x0501fbf5, 0x843c7d4e, 0x0001f1b0, + 0x59307804, 0x823c7d00, 0x01880080, 0x823c7d40, + 0x80000005, 0x59300013, 0x82000500, 0xffff0000, + 0x05000002, 0x843c7d6a, 0x59300015, 0x59301014, + 0x80080580, 0x0502000b, 0x800811c0, 0x05020004, + 0x8c3c050e, 0x05000055, 0x0501f004, 0x592c120c, + 0x8c08051e, 0x05020051, 0x843c7d4a, 0x0501f04f, + 0x480bc857, 0x59300804, 0x82040500, 0x00008080, + 0x82000580, 0x00008080, 0x05020016, 0x592c6001, + 0x58300409, 0x90000503, 0x90000581, 0x05020011, + 0x84040d1e, 0x48066004, 0x59302015, 0x5930001c, + 0x80101480, 0x0500100b, 0x5830020a, 0x41780800, + 0x0539fa53, 0x800810c6, 0x59301814, 0x800c0482, + 0x80100580, 0x05020003, 0x48126014, 0x05fdf7db, + 0x42000000, 0x001123e0, 0x0561fd59, 0x59302015, + 0x59300416, 0x4803c857, 0x8c000514, 0x0502000f, + 0x599c1819, 0x8c0c0512, 0x0500000a, 0x592c0813, + 0x59300017, 0x80040c80, 0x05000005, 0x05001004, + 0x80040000, 0x80140480, 0x05001008, 0x0541ff57, + 0x900c1d41, 0x0501f01f, 0x84000514, 0x48026416, + 0x48126017, 0x4813c857, 0x4c3c0000, 0x0501f928, + 0x5c007800, 0x05020017, 0x5930500f, 0x592c020c, + 0x4803c857, 0x8c00051e, 0x05020004, 0x903c7d60, + 0x5930400e, 0x0501f004, 0x8400051e, 0x48025a0c, + 0x0501f904, 0x50201800, 0x480e600c, 0x4832600d, + 0x4822600e, 0x482a600f, 0x480fc857, 0x4833c857, + 0x4823c857, 0x482bc857, 0x80000580, 0x483e6004, + 0x1c01f000, 0x05f9fbe4, 0x4933c857, 0x4d2c0000, + 0x59900005, 0x81300580, 0x05fa0bdf, 0x0551f81b, + 0x05f80bdd, 0x59325809, 0x4d3c0000, 0x4d400000, + 0x59300004, 0x4803c857, 0x4c000000, 0x053df9c8, + 0x0539feca, 0x5c000000, 0x8c000516, 0x05000014, + 0x82000d00, 0x01000080, 0x05020004, 0x592c0a0e, + 0x8c040506, 0x0502000e, 0x592c0013, 0x4803c857, + 0x4802580b, 0x41780800, 0x600a8000, 0x0525fec0, + 0x4a025c0a, 0x0000ffff, 0x492fc857, 0x0001fba8, + 0x0555fa03, 0x0541fe90, 0x0501f01b, 0x640a6203, + 0x592c020c, 0x8c000512, 0x05020004, 0x592c020c, + 0x8400054e, 0x48025a0c, 0x59300407, 0x90000586, + 0x0502000f, 0x592c0811, 0x59140001, 0x82000500, + 0xffff0000, 0x05000004, 0x811800ca, 0x81c80c00, + 0x58040939, 0x48066017, 0x592c0011, 0x80040480, + 0x592c0813, 0x80040480, 0x4802580f, 0x417a7800, + 0x054dfb17, 0x5c028000, 0x5c027800, 0x5c025800, + 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x054dffdb, + 0x05f80b9d, 0x59325809, 0x592c020c, 0x84000540, + 0x48025a0c, 0x05fdf7bd, 0x491bc857, 0x4dd00000, 0x4c580000, 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005, 0x80000002, 0x05024004, - 0x4c040000, 0x00044e27, 0x5c000800, 0x59d01006, + 0x4c040000, 0x00044e5d, 0x5c000800, 0x59d01006, 0x82080500, 0x00006000, 0x82000580, 0x00006000, 0x05000007, 0x8c08051e, 0x05fc07f5, 0x59d01006, 0x82080500, 0x00006000, 0x05fe07f1, 0x91d3a420, @@ -1202,20 +1241,20 @@ static const uint32_t isp_2500_risc_code[] = { 0x480c2822, 0x59d0000f, 0x59d00810, 0x59d01011, 0x59d01812, 0x48002c23, 0x48042824, 0x48082825, 0x480c2826, 0x6401b006, 0x4a03a005, 0x30000000, - 0x59d00006, 0x1c01f000, 0x42000000, 0x0010e4e1, - 0x055dfd98, 0x600008ec, 0x580410a2, 0x41780800, + 0x59d00006, 0x1c01f000, 0x42000000, 0x00112485, + 0x0561fc77, 0x600008ec, 0x580410a2, 0x41780800, 0x9008050f, 0x8c000506, 0x05020003, 0x81180580, 0x05000006, 0x80040800, 0x80081108, 0x90040587, - 0x05fe07f8, 0x05f9fb89, 0x4a039040, 0x04000000, + 0x05fe07f8, 0x05f9fb28, 0x4a039040, 0x04000000, 0x59c80040, 0x8c000532, 0x05fe07fe, 0x59d0000d, 0x800000e0, 0x59d0100c, 0x82081500, 0x0000ffff, 0x80081540, 0x480b9028, 0x4d2c0000, 0x59325809, - 0x054dfa69, 0x05f80b79, 0x59d02004, 0x592c0208, + 0x054dff56, 0x05f80b18, 0x59d02004, 0x592c0208, 0x82001500, 0x000000ff, 0x9000050f, 0x90000582, 0x05000003, 0xb00805ba, 0x05020004, 0x592c0011, - 0x80102480, 0x05f81b6d, 0x5c025800, 0x9010250f, - 0x90102588, 0x05fa0b69, 0x59c80047, 0x8c000530, - 0x05fa0b66, 0x59d0000b, 0x48039029, 0x800400d6, + 0x80102480, 0x05f81b0c, 0x5c025800, 0x9010250f, + 0x90102588, 0x05fa0b08, 0x59c80047, 0x8c000530, + 0x05fa0b05, 0x59d0000b, 0x48039029, 0x800400d6, 0x40001000, 0x800400dc, 0x80081400, 0x82081540, 0x0400002f, 0x480b9047, 0x59c80047, 0x8c000532, 0x05fe07fe, 0x64079048, 0x59c80048, 0x8c000500, @@ -1224,546 +1263,539 @@ static const uint32_t isp_2500_risc_code[] = { 0x4803c856, 0x80204000, 0x50200000, 0x80000540, 0x05000003, 0x80285040, 0x1c01f000, 0x58300001, 0x80000540, 0x0500000c, 0x4802600d, 0x40006000, - 0x58300208, 0x9000050f, 0x82000400, 0x001012ac, - 0x50004000, 0x802041c0, 0x05f80b3c, 0x80285040, - 0x1c01f000, 0x40005000, 0x1c01f000, 0x00000009, - 0x0000000c, 0x0000000f, 0x00000012, 0x00000015, - 0x00000000, 0x00000000, 0x0000000f, 0x00000000, - 0x00000000, 0x00000000, 0x001012a7, 0x001012a6, - 0x00000000, 0x001012a7, 0x00000000, 0x00000000, - 0x001012a7, 0x001012a6, 0x001012a3, 0x001012a7, - 0x001012a6, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x001012a7, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001012a7, 0x001012a7, 0x001012a7, 0x00000000, - 0x001012a7, 0x00000000, 0x00000000, 0x00000000, - 0x4813c857, 0x492fc857, 0x4933c857, 0x48126014, - 0x592c520b, 0x802851c0, 0x05000076, 0x59300008, - 0x8c000516, 0x0500001e, 0x592c0208, 0x82001500, - 0x000000ff, 0x9000050f, 0x90000582, 0x05000003, - 0xb00805ba, 0x05020003, 0x592c0011, 0x80102480, - 0x801021c0, 0x41781000, 0x0500000e, 0x592c6001, - 0x58300409, 0x58300a0a, 0x90000503, 0x90000580, - 0x05000002, 0x90040c08, 0x40040000, 0x40101000, - 0x41780800, 0x0535fca1, 0x800409c0, 0x05020059, - 0x0501fa86, 0x0500004f, 0x0501f056, 0x59300004, - 0x8c00050e, 0x0500000d, 0x0501fb13, 0x05020051, - 0x592c6001, 0x42004000, 0x001012a4, 0x58300409, - 0x8c000510, 0x0500000f, 0x5830540d, 0x42004000, - 0x001012a5, 0x0501f00b, 0x412c6000, 0x0501f847, - 0x05000008, 0x90240582, 0x05020003, 0x58300011, - 0x80102480, 0x50200000, 0x80004540, 0x0500003d, - 0x50200000, 0x80000540, 0x0500000b, 0x80301400, - 0x58080002, 0x80102480, 0x0500101d, 0x801021c0, - 0x05000009, 0x80285040, 0x05000032, 0x80204000, - 0x05fdf7f4, 0x58300001, 0x80006540, 0x0500002d, - 0x05fdf7e7, 0x80285040, 0x0500002a, 0x80204000, - 0x50200000, 0x80000540, 0x05020009, 0x58300001, - 0x80006540, 0x05000023, 0x58300208, 0x90004d0f, - 0x82244400, 0x001012ac, 0x50204000, 0x592c020c, - 0x8400051e, 0x48025a0c, 0x0501f012, 0x80102080, - 0x80102000, 0x48126012, 0x4813c857, 0x58080802, - 0x40100000, 0x80042480, 0x05f81aa4, 0x58080000, - 0x58081801, 0x80102400, 0x48126010, 0x480e6011, - 0x4813c857, 0x592c020c, 0x8400055e, 0x48025a0c, - 0x4833c857, 0x4823c857, 0x482bc857, 0x4832600d, - 0x4822600e, 0x482a600f, 0x80000580, 0x0501f002, - 0x90000541, 0x1c01f000, 0x58300208, 0x90004d0f, - 0x82244400, 0x001012ac, 0x82000500, 0x000000ff, - 0x900005a9, 0x05020016, 0x50204000, 0x592c040d, - 0x80000540, 0x05f80a85, 0x90000c82, 0x0500100e, - 0x58300001, 0x80006540, 0x05f80a80, 0x58300208, - 0x9000050f, 0x82000400, 0x001012ac, 0x50004000, - 0x40040000, 0x800409c0, 0x05000005, 0x90040c85, - 0x05fe17f4, 0x80204400, 0x80000580, 0x1c01f000, - 0x4c5c0000, 0x59e4b800, 0x485fc857, 0x905c051f, - 0x05fa0a6e, 0x825c0500, 0x000000e0, 0x05f80a6b, - 0x8c5c050e, 0x05020807, 0x8c5c050c, 0x05020809, - 0x8c5c050a, 0x05020900, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x4a03c800, 0x00000080, 0x1c01f000, - 0x4d2c0000, 0x42007800, 0x0010e4e5, 0x583c0003, - 0x583c0804, 0x80040540, 0x05000037, 0x42000800, - 0x0010e388, 0x50065800, 0x592c0002, 0x90000580, - 0x05000031, 0x59e40050, 0x59e40852, 0x80040480, - 0x82000500, 0xfffffc00, 0x05020005, 0x59e40050, - 0x59e40851, 0x80040800, 0x80040480, 0x82000c80, - 0x00000400, 0x59e40050, 0x80041400, 0x480bc857, - 0x50080000, 0x58080801, 0x80040540, 0x0500001e, - 0x480bc857, 0x480a5803, 0x583c1009, 0x583c000a, - 0x80080580, 0x05020005, 0x583c0000, 0x84000550, - 0x48007800, 0x41781000, 0x82080400, 0x00001000, - 0x4803c857, 0x48007809, 0x583c0003, 0x80081400, - 0x480bc857, 0x583c0804, 0x64025801, 0x4a025809, - 0x001013bc, 0x480a5807, 0x48065808, 0x59e40053, - 0x800000c4, 0x48025805, 0x412c1000, 0x492fc857, - 0x0001f821, 0x5c025800, 0x6503c800, 0x1c01f000, - 0x42007800, 0x0010e388, 0x503c7800, 0x4a007802, - 0x00000100, 0x42007800, 0x0010e4e5, 0x583c0000, - 0x84000552, 0x48007800, 0x583c100c, 0x480bc857, - 0x80081000, 0x4808780c, 0x583c180b, 0x800c19c0, - 0x05000013, 0x90080503, 0x05020011, 0x583c0007, - 0x4803c857, 0x583c2008, 0x4813c857, 0x80102000, - 0x80100580, 0x05020002, 0x41782000, 0x48107808, - 0x400c0000, 0x80080580, 0x05020005, 0x4978780c, - 0x60041800, 0x60a01100, 0x0519fbfe, 0x1c01f000, - 0x42007800, 0x0010e4e5, 0x4d2c0000, 0x4c5c0000, - 0x4c600000, 0x4030b800, 0x583cc000, 0x4a00b802, - 0x00000100, 0x583c2015, 0x80100800, 0x583c0013, - 0x80040580, 0x05020003, 0x8460c554, 0x41780800, - 0x48047815, 0x8c600502, 0x05f809e8, 0x8460c502, - 0x48607800, 0x42000000, 0x0010e389, 0x50000000, - 0x80300580, 0x05fa09e1, 0x583c081e, 0x800409c0, - 0x05000008, 0x583c001f, 0x80040580, 0x05020005, - 0x4978781f, 0x60081800, 0x60a01100, 0x0519fbd9, - 0x8c600508, 0x050e0c69, 0x5c00c000, 0x5c00b800, - 0x5c025800, 0x1c01f000, 0x4d2c0000, 0x4c5c0000, - 0x4c600000, 0x4c640000, 0x42000800, 0x0010e389, - 0x50065800, 0x4a025809, 0x001013e0, 0x6000c002, - 0x4200b800, 0x0010e4e5, 0x585cc800, 0x4867c857, - 0x8d0c052a, 0x0502000f, 0x40ee5800, 0x492fc857, - 0x4a025802, 0x00000100, 0x585c0014, 0x80000000, - 0x90000503, 0x4800b814, 0x4a025809, 0x0010306e, - 0x585cc017, 0x8260c500, 0x000000ff, 0x05f809b3, - 0x4c580000, 0x61e8b001, 0x8058b040, 0x05f809af, - 0x8c640502, 0x0500000b, 0x8d0c052a, 0x05fa09ab, - 0x4c580000, 0x4c600000, 0x0001f9b8, 0x585cc800, - 0x5c00c000, 0x5c00b000, 0x485bc857, 0x05fdf7f3, - 0x5c00b000, 0x4200b800, 0x0010e4e5, 0x8464cd42, - 0x4864b800, 0x592c0002, 0x90000580, 0x05f8099b, - 0x585c100d, 0x585c0018, 0x80081400, 0x80600400, - 0x4800b818, 0x585c0014, 0x800001c0, 0x05020002, - 0x4978b818, 0x8060c0c4, 0x492fc857, 0x480bc857, - 0x4863c857, 0x480a5803, 0x585c001d, 0x4803c857, - 0x585c180e, 0x800c1400, 0x480a5807, 0x4808b81b, - 0x80600400, 0x4800b81d, 0x4803c857, 0x800c0400, - 0x4800b819, 0x585c0810, 0x4807c857, 0x4803c857, - 0x80040d80, 0x05020004, 0x4978b81d, 0x585c080e, - 0x4804b819, 0x585c080e, 0x80040580, 0x82000500, - 0x000003ff, 0x05020004, 0x585c001f, 0x80000000, - 0x4800b81f, 0x585c080f, 0x48065808, 0x4807c857, - 0x64025801, 0x48625805, 0x412c1000, 0x0001f821, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c025800, - 0x1c01f000, 0x6483c800, 0x055dfb5f, 0x59e40000, - 0x1c01f000, 0x60001020, 0x80081040, 0x05000022, - 0x055dfc83, 0x05fc07fd, 0x59800801, 0x82040d00, - 0xfff006ff, 0x82040d40, 0x000ff900, 0x48070001, - 0x59e00002, 0x8c00051e, 0x05020016, 0x605c00f4, - 0x50001000, 0x82081500, 0x03f00000, 0x82080580, - 0x00800000, 0x0500000f, 0x61901000, 0x80081040, - 0x0500000c, 0x59800881, 0x8c040514, 0x05fc07fc, - 0x82040500, 0x00000180, 0x82000580, 0x00000180, - 0x05020004, 0x59800080, 0x84000540, 0x48030080, - 0x90000541, 0x64030000, 0x1c01f000, 0x61880809, - 0x055dfc68, 0x05020003, 0x4803c856, 0x055dfc6c, - 0x59800802, 0x4807c857, 0x8c040520, 0x05000007, - 0x64030000, 0x60101020, 0x50080000, 0x8400054c, - 0x44001000, 0x0501f000, 0x82040500, 0x00001084, - 0x05fa092a, 0x8c040510, 0x05000006, 0x42000000, - 0x0010e4e2, 0x055dfb27, 0x4a030002, 0x00000100, - 0x8c040522, 0x0500002d, 0x59e00002, 0x8c00051e, - 0x0502002a, 0x601c20f6, 0x50102800, 0x4817c857, - 0x605c00f4, 0x50003000, 0x82180500, 0x000f0000, - 0x40003800, 0x40144000, 0x821c0580, 0x00020000, - 0x05020002, 0x902041c0, 0x8c18050c, 0x05000002, - 0x842041c0, 0x82204500, 0x000000ff, 0x90204401, - 0x8c200510, 0x05000005, 0x42000000, 0x0010e4e3, - 0x055dfb08, 0x61fc4001, 0x42001800, 0xffffff00, - 0x8c18050c, 0x05000003, 0x840c19c0, 0x842041c0, - 0x821c0580, 0x00020000, 0x05020003, 0x900c19c0, - 0x902041c0, 0x800c0505, 0x80200540, 0x44002000, - 0x4a030002, 0x00020000, 0x64030000, 0x1c01f000, - 0x4d2c0000, 0x64007000, 0x82040d00, 0x43200f80, - 0x05fa08ee, 0x58380008, 0x4803c00f, 0x583a5807, - 0x592c0801, 0x800409c0, 0x0500000e, 0x592c0000, - 0x48000800, 0x58380006, 0x812c0580, 0x05020002, - 0x48047006, 0x48047007, 0x60042000, 0x0559fe40, - 0x05f808de, 0x05f9fc95, 0x5c025800, 0x05f9f54d, - 0x4a0370e4, 0x00003000, 0x054dfc4b, 0x583a5807, - 0x592c0000, 0x48007007, 0x800001c0, 0x05020002, - 0x49787006, 0x05f9fc89, 0x5c025800, 0x42007000, - 0x000211a7, 0x0001f036, 0x4803c856, 0x4c3c0000, - 0x4d2c0000, 0x4d300000, 0x5830000a, 0x80025d40, - 0x0500001a, 0x592e600c, 0x4c300000, 0x054dfc4b, - 0x5c006000, 0x05f808c1, 0x58300002, 0x82000580, - 0x00000100, 0x05000003, 0x640a5a0a, 0x492fc857, - 0x4c300000, 0x0001fb82, 0x5c025800, 0x05f9fc6f, - 0x0005ffdc, 0x59c80000, 0x82000540, 0x00001200, - 0x48039000, 0x850e1d1c, 0x5c026000, 0x5c025800, - 0x5c007800, 0x1c01f000, 0x40325800, 0x05f9fc63, - 0x05fdf7fa, 0x59300025, 0x48025814, 0x59300026, - 0x48025815, 0x59300a23, 0x8c04050c, 0x05020007, - 0x59300020, 0x59300a21, 0x800408e0, 0x80040540, - 0x5930081f, 0x0501f006, 0x59300820, 0x59300221, - 0x800408e0, 0x80040d40, 0x5930001f, 0x9c0001c0, - 0x9c0409c0, 0x48025816, 0x48065817, 0x1c01f000, - 0x592c0001, 0x80003540, 0x05f80890, 0x58180a08, - 0x82040d00, 0x000000ff, 0xb004058a, 0x05fa088b, - 0x592c1015, 0x592c1a16, 0x58182209, 0x592c2c16, - 0x592c0017, 0x800000e0, 0x80142d40, 0x592c0017, - 0x80003920, 0x58184409, 0x5818020a, 0x8c20050e, - 0x05fa087e, 0x800048e0, 0x80244d40, 0x5818000b, - 0x4802602c, 0x8c20050c, 0x05020009, 0x901c51c0, - 0x841401c0, 0x82003d00, 0x0000ffff, 0x80140120, - 0x80280540, 0x9c0029c0, 0x0501f003, 0x9c1429c0, - 0x841c39c0, 0x480a601f, 0x480e6020, 0x48126421, - 0x48126221, 0x48166022, 0x481e6423, 0x48226223, - 0x48266024, 0x1c01f000, 0x4c5c0000, 0x592c0001, - 0x80006540, 0x05f80861, 0x58300a08, 0x82040d00, - 0x000000ff, 0xb004058a, 0x05fa085c, 0x58302c09, - 0x8c140506, 0x58300209, 0x05000002, 0x80080400, - 0x48026421, 0x48026221, 0x5830020a, 0x800008e0, - 0x80040540, 0x48026024, 0x8c14050a, 0x05020004, - 0x592c0015, 0x80080400, 0x4802601f, 0x5830320a, - 0x8c140510, 0x0502000c, 0x90142d03, 0x90140582, - 0x0500000e, 0x90140581, 0x05000007, 0x40080800, - 0x90180408, 0x40001000, 0x0535f9d8, 0x40042000, - 0x0501f006, 0x40080800, 0x40181000, 0x4004b800, - 0x0535f9d2, 0x40042000, 0x4c100000, 0x05fdfda7, - 0x05f80836, 0x5c002000, 0x50200000, 0x80004540, - 0x0500005e, 0x58300a08, 0x82040d00, 0x000000ff, - 0xb004058a, 0x05020006, 0x80204000, 0x58300409, - 0x8c000510, 0x05000002, 0x80204000, 0x50200000, + 0x58300208, 0x9000050f, 0x82000400, 0x0010004b, + 0x50004000, 0x802041c0, 0x05f80adb, 0x80285040, + 0x1c01f000, 0x40005000, 0x1c01f000, 0x4813c857, + 0x492fc857, 0x4933c857, 0x48126014, 0x592c520b, + 0x802851c0, 0x05000076, 0x59300008, 0x8c000516, + 0x0500001e, 0x592c0208, 0x82001500, 0x000000ff, + 0x9000050f, 0x90000582, 0x05000003, 0xb00805ba, + 0x05020003, 0x592c0011, 0x80102480, 0x801021c0, + 0x41781000, 0x0500000e, 0x592c6001, 0x58300409, + 0x58300a0a, 0x90000503, 0x90000580, 0x05000002, + 0x90040c08, 0x40040000, 0x40101000, 0x41780800, + 0x0539f8e7, 0x800409c0, 0x05020059, 0x0501fa85, + 0x0500004f, 0x0501f056, 0x59300004, 0x8c00050e, + 0x0500000d, 0x0501fb11, 0x05020051, 0x592c6001, + 0x42004000, 0x00100043, 0x58300409, 0x8c000510, + 0x0500000f, 0x5830540d, 0x42004000, 0x00100044, + 0x0501f00b, 0x412c6000, 0x0501f847, 0x05000008, + 0x90240582, 0x05020003, 0x58300011, 0x80102480, + 0x50200000, 0x80004540, 0x0500003d, 0x50200000, 0x80000540, 0x0500000b, 0x80301400, 0x58080002, 0x80102480, 0x0500101d, 0x801021c0, 0x05000009, - 0x80285040, 0x05000049, 0x80204000, 0x05fdf7f4, - 0x58300001, 0x80006540, 0x05000044, 0x05fdf7df, - 0x80285040, 0x05000041, 0x80204000, 0x50200000, + 0x80285040, 0x05000032, 0x80204000, 0x05fdf7f4, + 0x58300001, 0x80006540, 0x0500002d, 0x05fdf7e7, + 0x80285040, 0x0500002a, 0x80204000, 0x50200000, 0x80000540, 0x05020009, 0x58300001, 0x80006540, - 0x0500003a, 0x58300208, 0x90004d0f, 0x82244400, - 0x001012ac, 0x50204000, 0x592c020c, 0x8400051e, - 0x48025a0c, 0x0501f010, 0x80102080, 0x80102000, + 0x05000023, 0x58300208, 0x90004d0f, 0x82244400, + 0x0010004b, 0x50204000, 0x592c020c, 0x8400051e, + 0x48025a0c, 0x0501f012, 0x80102080, 0x80102000, 0x48126012, 0x4813c857, 0x58080802, 0x40100000, - 0x80042480, 0x05f41ffd, 0x58080000, 0x80102400, - 0x48126010, 0x4813c857, 0x592c020c, 0x8400055e, - 0x48025a0c, 0x59300008, 0x8400052c, 0x48026008, - 0x592c1001, 0x58080409, 0x90000503, 0x90000581, - 0x05020012, 0x599c0019, 0x8c00050c, 0x0502000f, - 0x90280581, 0x05020003, 0x59300812, 0x0501f007, - 0x80280840, 0x5808020a, 0x40001000, 0x0535f97b, - 0x59300012, 0x80040c00, 0x48066013, 0x59300008, - 0x8400056c, 0x48026008, 0x592c1001, 0x58080409, - 0x8c000510, 0x05000003, 0x0501f822, 0x05000003, - 0x80000580, 0x0501f002, 0x90000541, 0x5c00b800, - 0x1c01f000, 0x592c6801, 0x803469c0, 0x05000017, - 0x58347805, 0x58347409, 0x90380503, 0x8c380510, - 0x0c020006, 0x0c01f001, 0x0010161d, 0x0010161a, - 0x00101620, 0x00101622, 0x00101622, 0x00101622, - 0x0010161d, 0x0010161d, 0x803c00c6, 0x80102400, - 0x0501f004, 0x803c00c6, 0x80102480, 0x05001003, - 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000, - 0x4c040000, 0x4c080000, 0x4c600000, 0x592c0208, - 0x82000500, 0x000000ff, 0xb00005a8, 0x05000007, - 0x90000582, 0x05000005, 0x90000598, 0x05000003, - 0x90000588, 0x05020037, 0x592c6801, 0x803469c0, - 0x05000034, 0x58340208, 0x82000500, 0x000000ff, - 0xb000058a, 0x0502002f, 0x5834740d, 0x592cc20b, - 0x40380000, 0x8060c480, 0x42007800, 0x001012a5, - 0x0501f82a, 0x05fe07ff, 0x40607000, 0x503c0000, - 0x80341400, 0x805c00c6, 0x58088002, 0x80408480, - 0x0500101b, 0x0500001a, 0x58088800, 0x80448c00, - 0x58089001, 0x90489440, 0x59300827, 0x800409c0, - 0x05000018, 0x4844080d, 0x4848080e, 0x4840080f, - 0x4978080c, 0x80380040, 0x05000003, 0x05020813, - 0x4838080c, 0x59300827, 0x4834080a, 0x483c080b, - 0x503c0000, 0x48000809, 0x90000541, 0x5c00c000, - 0x5c001000, 0x5c000800, 0x1c01f000, 0x58088002, - 0x80400106, 0x805cbc80, 0x0501f804, 0x05fe07dc, - 0x80000580, 0x05fdf7f6, 0x4803c856, 0x803c7800, - 0x503c0000, 0x80000540, 0x05000003, 0x80387040, - 0x1c01f000, 0x58340001, 0x80006d40, 0x0500000a, - 0x58340208, 0x9000050f, 0x82000400, 0x001012ac, - 0x50007800, 0x803c79c0, 0x05f40f60, 0x80387040, - 0x1c01f000, 0x40007000, 0x1c01f000, 0x802850c6, - 0x59306827, 0x58340009, 0x5834100a, 0x5834180b, - 0x5834200c, 0x58344810, 0x80087c00, 0x583c0002, - 0x80284480, 0x0500100f, 0x80102040, 0x0500001f, - 0x80244c80, 0x0500001d, 0x40205000, 0x800c1800, - 0x500c0000, 0x80000d40, 0x05fe07f4, 0x58081001, - 0x42001800, 0x001012a3, 0x60240000, 0x05fdf7ef, - 0x80204080, 0x80204000, 0x4810680c, 0x583c0000, - 0x80282c00, 0x583c3001, 0x90183440, 0x500c0800, - 0x48046809, 0x4808680a, 0x480c680b, 0x4810680c, - 0x4814680d, 0x4818680e, 0x4820680f, 0x48246810, - 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000, - 0x4d2c0000, 0x0001f817, 0x05f40f2c, 0x412c1000, - 0x5c025800, 0x4a001009, 0x000201cd, 0x9008040a, - 0x48001003, 0x0001f1c3, 0x4d2c0000, 0x40325800, - 0x05f9fadb, 0x5c025800, 0x1c01f000, 0x4807c857, - 0x05f5ff1e, 0x42001000, 0x001105e7, 0x4a001003, - 0x001105f1, 0x4a001009, 0x000201cd, 0x4978100a, - 0x1c01f000, 0x59e00017, 0x8c000500, 0x1c01f000, - 0x0001f9d6, 0x4d040000, 0x4c640000, 0x4c600000, - 0x40120800, 0x400cc800, 0x4014c000, 0x0501f01a, - 0x59e00017, 0x8c00050c, 0x05020005, 0x59a808a0, - 0x58040003, 0x8c000500, 0x0500000d, 0x4c080000, - 0x59a8109f, 0x50080000, 0x84000542, 0x44001000, - 0x5c001000, 0x59e00017, 0x8c00050c, 0x05fe07fe, - 0x58040003, 0x8c000500, 0x05fe07fb, 0x4d040000, - 0x4c640000, 0x4c600000, 0x5804c800, 0x58060801, - 0x5804c002, 0x4a03b805, 0x20000000, 0x59dc0006, + 0x80042480, 0x05f81a6c, 0x58080000, 0x58081801, + 0x80102400, 0x48126010, 0x480e6011, 0x4813c857, + 0x592c020c, 0x8400055e, 0x48025a0c, 0x4833c857, + 0x4823c857, 0x482bc857, 0x4832600d, 0x4822600e, + 0x482a600f, 0x80000580, 0x0501f002, 0x90000541, + 0x1c01f000, 0x58300208, 0x90004d0f, 0x82244400, + 0x0010004b, 0x82000500, 0x000000ff, 0x900005a9, + 0x05020016, 0x50204000, 0x592c040d, 0x80000540, + 0x05f80a4d, 0x90000c82, 0x0500100e, 0x58300001, + 0x80006540, 0x05f80a48, 0x58300208, 0x9000050f, + 0x82000400, 0x0010004b, 0x50004000, 0x40040000, + 0x800409c0, 0x05000005, 0x90040c85, 0x05fe17f4, + 0x80204400, 0x80000580, 0x1c01f000, 0x4c5c0000, + 0x59e4b800, 0x485fc857, 0x905c051f, 0x05fa0a36, + 0x825c0500, 0x000000e0, 0x05f80a33, 0x8c5c050e, + 0x05020807, 0x8c5c050c, 0x05020809, 0x8c5c050a, + 0x050208fc, 0x5c00b800, 0x1c01f000, 0x4803c856, + 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000, + 0x42007800, 0x00112489, 0x583c0003, 0x583c0804, + 0x80040540, 0x05000033, 0x42000800, 0x00112323, + 0x50065800, 0x592c0002, 0x90000580, 0x0500002d, + 0x59e40050, 0x59e40852, 0x80040480, 0x82000500, + 0xfffffc00, 0x05020005, 0x59e40050, 0x59e40851, + 0x80040800, 0x80040480, 0x82000c80, 0x00000400, + 0x59e40050, 0x80041400, 0x480bc857, 0x480bc857, + 0x480a5803, 0x583c1009, 0x583c000a, 0x80080580, + 0x05020005, 0x583c0000, 0x84000550, 0x48007800, + 0x41781000, 0x82080400, 0x00001000, 0x4803c857, + 0x48007809, 0x583c0003, 0x80081400, 0x480bc857, + 0x583c0804, 0x64025801, 0x4a025809, 0x0010142b, + 0x480a5807, 0x48065808, 0x59e40053, 0x800000c4, + 0x48025805, 0x412c1000, 0x492fc857, 0x0001f829, + 0x5c025800, 0x6503c800, 0x1c01f000, 0x42007800, + 0x00112323, 0x503c7800, 0x4a007802, 0x00000100, + 0x42007800, 0x00112489, 0x583c0000, 0x84000552, + 0x48007800, 0x583c100c, 0x480bc857, 0x80081000, + 0x4808780c, 0x583c180b, 0x800c19c0, 0x05000013, + 0x90080503, 0x05020011, 0x583c0007, 0x4803c857, + 0x583c2008, 0x4813c857, 0x80102000, 0x80100580, + 0x05020002, 0x41782000, 0x48107808, 0x400c0000, + 0x80080580, 0x05020005, 0x4978780c, 0x60041800, + 0x60a01100, 0x0519fd2c, 0x1c01f000, 0x42007800, + 0x00112489, 0x4d2c0000, 0x4c5c0000, 0x4c600000, + 0x4030b800, 0x583cc000, 0x4a00b802, 0x00000100, + 0x583c2015, 0x80100800, 0x583c0013, 0x80040580, + 0x05020003, 0x8460c554, 0x41780800, 0x48047815, + 0x8c600502, 0x05f809b4, 0x8460c502, 0x48607800, + 0x42000000, 0x00112324, 0x50000000, 0x80300580, + 0x05fa09ad, 0x583c081e, 0x800409c0, 0x05000008, + 0x583c001f, 0x80040580, 0x05020005, 0x4978781f, + 0x60081800, 0x60a01100, 0x0519fd07, 0x8c600508, + 0x050e0ca2, 0x5c00c000, 0x5c00b800, 0x5c025800, + 0x1c01f000, 0x4d2c0000, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x42000800, 0x00112324, 0x50065800, + 0x4a025809, 0x0010144f, 0x6000c002, 0x4200b800, + 0x00112489, 0x585cc800, 0x4867c857, 0x8d0c052a, + 0x0502000f, 0x40ee5800, 0x492fc857, 0x4a025802, + 0x00000100, 0x585c0014, 0x80000000, 0x90000503, + 0x4800b814, 0x4a025809, 0x00103116, 0x585cc017, + 0x8260c500, 0x000000ff, 0x05f8097f, 0x4c580000, + 0x61e8b001, 0x8058b040, 0x05f8097b, 0x8c640502, + 0x0500000b, 0x8d0c052a, 0x05fa0977, 0x4c580000, + 0x4c600000, 0x0001f9c0, 0x585cc800, 0x5c00c000, + 0x5c00b000, 0x485bc857, 0x05fdf7f3, 0x5c00b000, + 0x4200b800, 0x00112489, 0x8464cd42, 0x4864b800, + 0x592c0002, 0x90000580, 0x05f80967, 0x585c100d, + 0x585c0018, 0x80081400, 0x80600400, 0x4800b818, + 0x585c0014, 0x800001c0, 0x05020002, 0x4978b818, + 0x8060c0c4, 0x492fc857, 0x480bc857, 0x4863c857, + 0x480a5803, 0x585c001d, 0x4803c857, 0x585c180e, + 0x800c1400, 0x480a5807, 0x4808b81b, 0x80600400, + 0x4800b81d, 0x4803c857, 0x800c0400, 0x4800b819, + 0x585c0810, 0x4807c857, 0x4803c857, 0x80040d80, + 0x05020004, 0x4978b81d, 0x585c080e, 0x4804b819, + 0x585c080e, 0x80040580, 0x82000500, 0x000003ff, + 0x05020004, 0x585c001f, 0x80000000, 0x4800b81f, + 0x585c080f, 0x48065808, 0x4807c857, 0x64025801, + 0x48625805, 0x412c1000, 0x0001f829, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x5c025800, 0x1c01f000, + 0x6483c800, 0x0561fa6b, 0x59e40000, 0x1c01f000, + 0x60001020, 0x80081040, 0x05000022, 0x0561fb8f, + 0x05fc07fd, 0x59800801, 0x82040d00, 0xfff006ff, + 0x82040d40, 0x000ff900, 0x48070001, 0x59e00002, + 0x8c00051e, 0x05020016, 0x605c00f4, 0x50001000, + 0x82081500, 0x03f00000, 0x82080580, 0x00800000, + 0x0500000f, 0x61901000, 0x80081040, 0x0500000c, + 0x59800881, 0x8c040514, 0x05fc07fc, 0x82040500, + 0x00000180, 0x82000580, 0x00000180, 0x05020004, + 0x59800080, 0x84000540, 0x48030080, 0x90000541, + 0x64030000, 0x1c01f000, 0x61880809, 0x0561fb74, + 0x05020003, 0x4803c856, 0x0561fb78, 0x59800802, + 0x4807c857, 0x8c040520, 0x05000007, 0x64030000, + 0x60101020, 0x50080000, 0x8400054c, 0x44001000, + 0x0501f000, 0x82040500, 0x00001084, 0x05fa08f6, + 0x8c040510, 0x05000006, 0x42000000, 0x00112486, + 0x0561fa33, 0x4a030002, 0x00000100, 0x8c040522, + 0x0500002d, 0x59e00002, 0x8c00051e, 0x0502002a, + 0x601c20f6, 0x50102800, 0x4817c857, 0x605c00f4, + 0x50003000, 0x82180500, 0x000f0000, 0x40003800, + 0x40144000, 0x821c0580, 0x00020000, 0x05020002, + 0x902041c0, 0x8c18050c, 0x05000002, 0x842041c0, + 0x82204500, 0x000000ff, 0x90204401, 0x8c200510, + 0x05000005, 0x42000000, 0x00112487, 0x0561fa14, + 0x61fc4001, 0x42001800, 0xffffff00, 0x8c18050c, + 0x05000003, 0x840c19c0, 0x842041c0, 0x821c0580, + 0x00020000, 0x05020003, 0x900c19c0, 0x902041c0, + 0x800c0505, 0x80200540, 0x44002000, 0x4a030002, + 0x00020000, 0x64030000, 0x1c01f000, 0x4d2c0000, + 0x64007000, 0x82040d00, 0x43200f80, 0x05fa08ba, + 0x58380008, 0x4803c00f, 0x583a5807, 0x592c0801, + 0x800409c0, 0x0500000e, 0x592c0000, 0x48000800, + 0x58380006, 0x812c0580, 0x05020002, 0x48047006, + 0x48047007, 0x60042000, 0x055dfd1b, 0x05f808aa, + 0x05f9fc5d, 0x5c025800, 0x05f9f540, 0x4a0370e4, + 0x00003000, 0x0551f978, 0x59a8049f, 0x84000502, + 0x4803549f, 0x583a5807, 0x592c0000, 0x48007007, + 0x800001c0, 0x05020002, 0x49787006, 0x05f9fc4e, + 0x5c025800, 0x42007000, 0x000211e8, 0x0001f03e, + 0x4803c856, 0x4c3c0000, 0x4d2c0000, 0x4d300000, + 0x5830000a, 0x80025d40, 0x0500001a, 0x592e600c, + 0x4c300000, 0x0551f975, 0x5c006000, 0x05f8088a, + 0x58300002, 0x82000580, 0x00000100, 0x05000003, + 0x640a5a0a, 0x492fc857, 0x4c300000, 0x0001fba8, + 0x5c025800, 0x05f9fc34, 0x0009f810, 0x59c80000, + 0x82000540, 0x00001200, 0x48039000, 0x850e1d1c, + 0x5c026000, 0x5c025800, 0x5c007800, 0x1c01f000, + 0x40325800, 0x05f9fc28, 0x05fdf7fa, 0x59300025, + 0x48025814, 0x59300026, 0x48025815, 0x59300a23, + 0x8c04050c, 0x05020007, 0x59300020, 0x59300a21, + 0x800408e0, 0x80040540, 0x5930081f, 0x0501f006, + 0x59300820, 0x59300221, 0x800408e0, 0x80040d40, + 0x5930001f, 0x9c0001c0, 0x9c0409c0, 0x48025816, + 0x48065817, 0x1c01f000, 0x592c0001, 0x80003540, + 0x05f80859, 0x58180a08, 0x82040d00, 0x000000ff, + 0xb004058a, 0x05fa0854, 0x592c1015, 0x592c1a16, + 0x58182209, 0x592c2c16, 0x592c0017, 0x800000e0, + 0x80142d40, 0x592c0017, 0x80003920, 0x58184409, + 0x5818020a, 0x8c20050e, 0x05fa0847, 0x800048e0, + 0x80244d40, 0x5818000b, 0x4802602c, 0x8c20050c, + 0x05020009, 0x901c51c0, 0x841401c0, 0x82003d00, + 0x0000ffff, 0x80140120, 0x80280540, 0x9c0029c0, + 0x0501f003, 0x9c1429c0, 0x841c39c0, 0x480a601f, + 0x480e6020, 0x48126421, 0x48126221, 0x48166022, + 0x481e6423, 0x48226223, 0x48266024, 0x1c01f000, + 0x4c5c0000, 0x592c0001, 0x80006540, 0x05f8082a, + 0x58300a08, 0x82040d00, 0x000000ff, 0xb004058a, + 0x05fa0825, 0x58302c09, 0x8c140506, 0x58300209, + 0x05000002, 0x80080400, 0x48026421, 0x48026221, + 0x5830020a, 0x800008e0, 0x80040540, 0x48026024, + 0x8c14050a, 0x05020004, 0x592c0015, 0x80080400, + 0x4802601f, 0x5830320a, 0x8c140510, 0x0502000c, + 0x90142d03, 0x90140582, 0x0500000e, 0x90140581, + 0x05000007, 0x40080800, 0x90180408, 0x40001000, + 0x0535fe1f, 0x40042000, 0x0501f006, 0x40080800, + 0x40181000, 0x4004b800, 0x0535fe19, 0x40042000, + 0x4c100000, 0x05fdfda8, 0x05f40fff, 0x5c002000, + 0x50200000, 0x80004540, 0x0500005d, 0x58300a08, + 0x82040d00, 0x000000ff, 0xb004058a, 0x05020006, + 0x80204000, 0x58300409, 0x8c000510, 0x05000002, + 0x80204000, 0x50200000, 0x80000540, 0x0500000b, + 0x80301400, 0x58080002, 0x80102480, 0x0500101d, + 0x801021c0, 0x05000009, 0x80285040, 0x05000048, + 0x80204000, 0x05fdf7f4, 0x58300001, 0x80006540, + 0x05000043, 0x05fdf7df, 0x80285040, 0x05000040, + 0x80204000, 0x50200000, 0x80000540, 0x05020009, + 0x58300001, 0x80006540, 0x05000039, 0x58300208, + 0x90004d0f, 0x82244400, 0x0010004b, 0x50204000, + 0x592c020c, 0x8400051e, 0x48025a0c, 0x0501f010, + 0x80102080, 0x80102000, 0x48126012, 0x4813c857, + 0x58080802, 0x40100000, 0x80042480, 0x05f41fc6, + 0x58080000, 0x80102400, 0x48126010, 0x4813c857, + 0x592c020c, 0x8400055e, 0x48025a0c, 0x59300008, + 0x8400052c, 0x48026008, 0x592c1001, 0x58080409, + 0x90000503, 0x90000581, 0x05020011, 0x0561fa77, + 0x0502000f, 0x90280581, 0x05020003, 0x59300812, + 0x0501f007, 0x80280840, 0x5808020a, 0x40001000, + 0x0535fdc3, 0x59300012, 0x80040c00, 0x48066013, + 0x59300008, 0x8400056c, 0x48026008, 0x592c1001, + 0x58080409, 0x8c000510, 0x05000003, 0x0501f822, + 0x05000003, 0x80000580, 0x0501f002, 0x90000541, + 0x5c00b800, 0x1c01f000, 0x592c6801, 0x803469c0, + 0x05000017, 0x58347805, 0x58347409, 0x90380503, + 0x8c380510, 0x0c020006, 0x0c01f001, 0x0010168e, + 0x0010168b, 0x00101691, 0x00101693, 0x00101693, + 0x00101693, 0x0010168e, 0x0010168e, 0x803c00c6, + 0x80102400, 0x0501f004, 0x803c00c6, 0x80102480, + 0x05001003, 0x80000580, 0x1c01f000, 0x90000541, + 0x1c01f000, 0x4c040000, 0x4c080000, 0x4c600000, + 0x592c0208, 0x82000500, 0x000000ff, 0xb00005a8, + 0x05000007, 0x90000582, 0x05000005, 0x90000598, + 0x05000003, 0x90000588, 0x05020037, 0x592c6801, + 0x803469c0, 0x05000034, 0x58340208, 0x82000500, + 0x000000ff, 0xb000058a, 0x0502002f, 0x5834740d, + 0x592cc20b, 0x40380000, 0x8060c480, 0x42007800, + 0x00100044, 0x0501f82a, 0x05fe07ff, 0x40607000, + 0x503c0000, 0x80341400, 0x805c00c6, 0x58088002, + 0x80408480, 0x0500101b, 0x0500001a, 0x58088800, + 0x80448c00, 0x58089001, 0x90489440, 0x59300827, + 0x800409c0, 0x05000018, 0x4844080d, 0x4848080e, + 0x4840080f, 0x4978080c, 0x80380040, 0x05000003, + 0x05020813, 0x4838080c, 0x59300827, 0x4834080a, + 0x483c080b, 0x503c0000, 0x48000809, 0x90000541, + 0x5c00c000, 0x5c001000, 0x5c000800, 0x1c01f000, + 0x58088002, 0x80400106, 0x805cbc80, 0x0501f804, + 0x05fe07dc, 0x80000580, 0x05fdf7f6, 0x4803c856, + 0x803c7800, 0x503c0000, 0x80000540, 0x05000003, + 0x80387040, 0x1c01f000, 0x58340001, 0x80006d40, + 0x0500000a, 0x58340208, 0x9000050f, 0x82000400, + 0x0010004b, 0x50007800, 0x803c79c0, 0x05f40f2a, + 0x80387040, 0x1c01f000, 0x40007000, 0x1c01f000, + 0x802850c6, 0x59306827, 0x58340009, 0x5834100a, + 0x5834180b, 0x5834200c, 0x58344810, 0x80087c00, + 0x583c0002, 0x80284480, 0x0500100f, 0x80102040, + 0x0500001f, 0x80244c80, 0x0500001d, 0x40205000, + 0x800c1800, 0x500c0000, 0x80000d40, 0x05fe07f4, + 0x58081001, 0x42001800, 0x00100042, 0x60240000, + 0x05fdf7ef, 0x80204080, 0x80204000, 0x4810680c, + 0x583c0000, 0x80282c00, 0x583c3001, 0x90183440, + 0x500c0800, 0x48046809, 0x4808680a, 0x480c680b, + 0x4810680c, 0x4814680d, 0x4818680e, 0x4820680f, + 0x48246810, 0x80000580, 0x1c01f000, 0x90000541, + 0x1c01f000, 0x4d2c0000, 0x0001f81f, 0x05f40ef6, + 0x412c1000, 0x5c025800, 0x4a001009, 0x000201d5, + 0x9008040a, 0x48001003, 0x0001f1cb, 0x4d2c0000, + 0x40325800, 0x05f9faa1, 0x5c025800, 0x1c01f000, + 0x4807c857, 0x05f5fee8, 0x42001000, 0x0011458b, + 0x4a001003, 0x00114595, 0x4a001009, 0x000201d5, + 0x4978100a, 0x1c01f000, 0x59e00017, 0x8c000500, + 0x1c01f000, 0x0001f9de, 0x4d040000, 0x4c640000, + 0x4c600000, 0x40120800, 0x400cc800, 0x4014c000, + 0x0501f01a, 0x59e00017, 0x8c00050c, 0x05020005, + 0x59a808a3, 0x58040003, 0x8c000500, 0x0500000d, + 0x4c080000, 0x59a810a2, 0x50080000, 0x84000542, + 0x44001000, 0x5c001000, 0x59e00017, 0x8c00050c, + 0x05fe07fe, 0x58040003, 0x8c000500, 0x05fe07fb, + 0x4d040000, 0x4c640000, 0x4c600000, 0x5804c800, + 0x58060801, 0x5804c002, 0x4a03b805, 0x20000000, + 0x59dc0006, 0x4a03b805, 0x30000000, 0x59dc0006, + 0x4a03b805, 0x70000000, 0x59dc0006, 0x4867b800, + 0x4907b801, 0x6413b802, 0x601c00e2, 0x44600000, 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805, - 0x70000000, 0x59dc0006, 0x4867b800, 0x4907b801, - 0x6413b802, 0x601c00e2, 0x44600000, 0x4a03b805, - 0x30000000, 0x59dc0006, 0x4a03b805, 0x10000003, - 0x59dc0006, 0x8c00053e, 0x05fc07fe, 0x4a03b805, - 0x20000000, 0x59dc0006, 0x5c00c000, 0x5c00c800, - 0x5c020800, 0x1c01f000, 0x4803c856, 0x055dfa08, - 0x0001f1df, 0x59300c03, 0xb0040592, 0x05020037, - 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x850e1d1c, 0x4d2c0000, 0x59325809, 0x42007000, - 0x000211a7, 0x58380800, 0x90040582, 0x0502000c, - 0x58386001, 0x58300009, 0x82000580, 0x0010150e, - 0x05020007, 0x5830000a, 0x812c0580, 0x05020004, - 0x4933c857, 0x4978600a, 0x0501f01e, 0x58386005, - 0x40305000, 0x803061c0, 0x0500001a, 0x58300009, - 0x82000580, 0x0010150e, 0x05020004, 0x5830000a, - 0x812c0580, 0x05000004, 0x40305000, 0x58306000, - 0x05fdf7f5, 0x4933c856, 0x8030058a, 0x58300000, - 0x05000006, 0x48005000, 0x800001c0, 0x05020007, - 0x48287004, 0x0501f005, 0x800001c0, 0x05020002, - 0x48007004, 0x48007005, 0x40325800, 0x05f9fa53, - 0x5c025800, 0x0501f010, 0x59300a03, 0x90040581, - 0x0502000d, 0x42001000, 0x0010e387, 0x50081000, - 0x58080002, 0x82000580, 0x00000100, 0x05000006, - 0x5808000c, 0x81300580, 0x05020003, 0x4933c856, - 0x4978100c, 0x59300004, 0x84000520, 0x48026004, - 0x1c01f000, 0x4803c856, 0x60f00800, 0x48079000, - 0x59c80000, 0x80040500, 0x05fe07fe, 0x497b9005, - 0x4a039035, 0x00880400, 0x59a8003b, 0x800000e0, - 0x4803900e, 0x64c39011, 0x4a03900f, 0x00111b00, - 0x4a039010, 0x00111b00, 0x65db9015, 0x4a039003, - 0x00001f07, 0x6503900d, 0x4a039000, 0x00001600, - 0x1c01f000, 0x59c80007, 0x8c000508, 0x05020885, - 0x59c80800, 0x8c040516, 0x05020003, 0x90000506, - 0x0c01f004, 0x4807c857, 0x9000050e, 0x0c01f001, - 0x00101789, 0x00101788, 0x00106d20, 0x00101788, - 0x0010178b, 0x00101788, 0x0010178b, 0x0010178b, - 0x00101788, 0x00101788, 0x00101788, 0x00101788, - 0x0010178b, 0x00101788, 0x0010178b, 0x00101788, - 0x05f5fe52, 0x4803c857, 0x1c01f000, 0x59c8080c, - 0x4807c857, 0x82040500, 0x00006000, 0x05000003, - 0x055df808, 0x0501f005, 0x82040500, 0x007f0000, - 0x05000004, 0x0559ffd5, 0x0539f899, 0x0501f02c, - 0x90040514, 0x0500000d, 0x055df82d, 0x916c0583, - 0x05000008, 0x0525f911, 0x05000003, 0x051df94c, - 0x0501f004, 0x64075042, 0x6006d800, 0x0525f88e, - 0x0501f820, 0x0501f01e, 0x82040500, 0x00001c00, - 0x05000004, 0x0559fffd, 0x0501f81a, 0x0501f018, - 0x82040500, 0x00000140, 0x05000004, 0x055df80a, - 0x0501f814, 0x0501f012, 0x82040500, 0x00008000, - 0x0500000f, 0x0525f8f9, 0x0500000b, 0x59c400a4, - 0x9000050f, 0x9000058b, 0x05020007, 0x4c040000, - 0x051df946, 0x60780000, 0x80000040, 0x05fe07ff, - 0x5c000800, 0x0559ffd0, 0x0501f802, 0x1c01f000, - 0x4c0c0000, 0x4c100000, 0x4c140000, 0x05fdf8b6, - 0x5c002800, 0x5c002000, 0x5c001800, 0x1c01f000, - 0x4803c856, 0x59a80804, 0x59a8004e, 0x82000500, - 0xfffff000, 0x80040540, 0x4803504e, 0x59a80052, - 0x82000500, 0xfffff000, 0x80040540, 0x48035052, - 0x59a80056, 0x82000500, 0xfffff000, 0x80040540, - 0x48035056, 0x48078882, 0x82040480, 0x00000204, - 0x05021004, 0x42001000, 0x00240f00, 0x0501f00f, - 0x82040480, 0x00000404, 0x05021004, 0x42001000, - 0x00440800, 0x0501f009, 0x82040480, 0x00000804, - 0x05021004, 0x42001000, 0x00840400, 0x0501f003, - 0x42001000, 0x00880400, 0x480b9035, 0x0501f350, - 0x59c80815, 0x05f5fdde, 0x4807c857, 0xb0040d3c, + 0x10000003, 0x59dc0006, 0x8c00053e, 0x05fc07fe, + 0x4a03b805, 0x20000000, 0x59dc0006, 0x5c00c000, + 0x5c00c800, 0x5c020800, 0x1c01f000, 0x4803c856, + 0x0561f912, 0x0001f1e7, 0x59300c03, 0xb0040592, + 0x05020037, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x850e1d1c, 0x4d2c0000, 0x59325809, + 0x42007000, 0x000211e8, 0x58380800, 0x90040582, + 0x0502000c, 0x58386001, 0x58300009, 0x82000580, + 0x00101580, 0x05020007, 0x5830000a, 0x812c0580, + 0x05020004, 0x4933c857, 0x4978600a, 0x0501f01e, + 0x58386005, 0x40305000, 0x803061c0, 0x0500001a, + 0x58300009, 0x82000580, 0x00101580, 0x05020004, + 0x5830000a, 0x812c0580, 0x05000004, 0x40305000, + 0x58306000, 0x05fdf7f5, 0x4933c856, 0x8030058a, + 0x58300000, 0x05000006, 0x48005000, 0x800001c0, + 0x05020007, 0x48287004, 0x0501f005, 0x800001c0, + 0x05020002, 0x48007004, 0x48007005, 0x40325800, + 0x05f9fa19, 0x5c025800, 0x0501f010, 0x59300a03, + 0x90040581, 0x0502000d, 0x42001000, 0x00112322, + 0x50081000, 0x58080002, 0x82000580, 0x00000100, + 0x05000006, 0x5808000c, 0x81300580, 0x05020003, + 0x4933c856, 0x4978100c, 0x59300004, 0x84000520, + 0x48026004, 0x1c01f000, 0x4803c856, 0x60f00800, 0x48079000, 0x59c80000, 0x80040500, 0x05fe07fe, - 0x8c040504, 0x0500001b, 0x59c80035, 0x48039035, - 0x59a800ca, 0x80000540, 0x05000016, 0x4c300000, - 0x600060de, 0x58300801, 0x82040d00, 0xffc00000, - 0x8004090c, 0x58300000, 0x90000541, 0x48006000, - 0x58300000, 0x8c000500, 0x05fe07fe, 0x82000500, - 0xfc00ffff, 0x80040540, 0x84000574, 0x48006000, - 0x58300000, 0x8c000534, 0x05fe07fe, 0x5c006000, - 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x1c01f000, 0x60100020, 0x50000000, 0x8c000520, - 0x05020006, 0x42006000, 0x7ff4c000, 0x58300003, - 0x8c000502, 0x0502000a, 0x600060de, 0x64686000, - 0x58300000, 0x8c000504, 0x05fe07fe, 0x641c6002, - 0x59a800ca, 0x84000540, 0x480350ca, 0x1c01f000, - 0x600060de, 0x58300801, 0x9004050c, 0x05f60da7, - 0x60f00800, 0x05fdf7c1, 0x4853c857, 0x497b8801, - 0x850e1d1a, 0x5050b000, 0x485bc857, 0x8058b1c0, - 0x0500089d, 0x82580480, 0x00000804, 0x0502189a, - 0x60040000, 0x61000801, 0x0501fd74, 0x40582000, - 0x8050a000, 0x50500000, 0x80102400, 0x9058b483, - 0x8050a000, 0x485bc857, 0x4853c857, 0x50501000, - 0x80082404, 0x60101800, 0x82080500, 0x000000ff, - 0x61000821, 0x0501fd65, 0x80081110, 0x800c1840, - 0x05fe07fa, 0x8050a000, 0x8058b040, 0x05fe07f4, - 0x4803c856, 0x41780000, 0x61000801, 0x0501fd5b, - 0x50501000, 0x80082404, 0x0502087b, 0x4803c856, - 0x1c01f000, 0x4a035076, 0xaabbccdd, 0x600c0000, - 0x0501fcb1, 0x600c0000, 0x0501fcdf, 0x60300868, - 0x0501fd49, 0x90040541, 0x60300868, 0x0501fd4b, - 0x60480888, 0x0501fd44, 0x90040548, 0x60480888, - 0x0501fd46, 0x60180818, 0x0501fd3f, 0x82040540, - 0x00000080, 0x60180818, 0x0501fd40, 0x60480828, - 0x0501fd39, 0x90040541, 0x60480828, 0x0501fd3b, - 0x59a80084, 0x8c00050e, 0x05000006, 0x4803c857, - 0x82000500, 0x0000ff00, 0x80000110, 0x0501f002, - 0x60e00001, 0x60300800, 0x0501fd30, 0x60380940, - 0x0501fd29, 0x82040500, 0xffffff0f, 0x0501fef5, - 0x05020003, 0x90000540, 0x0501f002, 0x90000550, - 0x60380940, 0x0501fd25, 0x60380938, 0x0501fd1e, - 0x90040550, 0x60380938, 0x0501fd20, 0x60800000, - 0x61000859, 0x0501fd1d, 0x61000000, 0x61000851, - 0x0501fd1a, 0x60300000, 0x61800861, 0x0501fd17, - 0x60840000, 0x61800821, 0x0501fd14, 0x59c40001, - 0x84000574, 0x48038801, 0x850e1d5a, 0x61602004, - 0x6029d000, 0x0501f83c, 0x4813c857, 0x61000849, - 0x0501fd05, 0x4807c857, 0x82041500, 0x000000c0, - 0x82081580, 0x000000c0, 0x05000004, 0x80102040, - 0x05000825, 0x05fdf7f3, 0x4803c856, 0x60c82000, - 0x6029d000, 0x0501f82c, 0x60380878, 0x0501fcf6, - 0x90040d01, 0x05020004, 0x80102040, 0x0500081a, - 0x05fdf7f8, 0x4803c856, 0x61702001, 0x6029d000, - 0x052dff41, 0x60380818, 0x0501fceb, 0x90040d10, - 0x05020004, 0x80102040, 0x05f40d10, 0x05fdf7f8, - 0x4803c856, 0x60a02000, 0x6029d000, 0x052dff36, - 0x603808b8, 0x0501fce0, 0x90040d04, 0x05000004, - 0x80102040, 0x05f40d05, 0x05fdf7f8, 0x4803c856, - 0x1c01f000, 0x4803c856, 0x4a03c020, 0x00004010, - 0x4a03c011, 0x40100011, 0x05006000, 0x4203e000, - 0x40000000, 0x4203e000, 0x30000001, 0x4803c856, - 0x0501f000, 0x61201801, 0x800c1840, 0x05fe07ff, - 0x80e9d040, 0x05fe07fc, 0x1c01f000, 0x4803c856, - 0x497b88a9, 0x64078807, 0x497b8807, 0x59c40005, - 0x48038805, 0x0501fde0, 0x0501fe23, 0x0501f9f6, - 0x4a0388a7, 0x0000f7f7, 0x4a0388a3, 0x8000403c, - 0x4a0388ae, 0x000061a8, 0x59c40001, 0x82000500, - 0xfffe7fff, 0x82000540, 0x005fe063, 0x48038801, - 0x4a038810, 0x00410108, 0x4a038811, 0x00520608, - 0x4a038812, 0x00450320, 0x4a038813, 0x00440405, - 0x4a03881c, 0x004132e1, 0x4a038850, 0x80000108, - 0x64238860, 0x64238870, 0x4a038851, 0x80000508, - 0x4a038861, 0x00800000, 0x4a038871, 0x00800000, - 0x4a038852, 0x80000708, 0x4a038862, 0x00800000, - 0x4a038872, 0x00800000, 0x4a038853, 0x80000608, - 0x497b8863, 0x4a038873, 0x00800000, 0x4a038882, - 0x00000840, 0x4a0388a5, 0x000000fe, 0x647b88a6, - 0x4a0388b0, 0x00007530, 0x4a038802, 0x0000ffff, - 0x4a038806, 0xc0e80b00, 0x1c01f000, 0x850e1d4e, - 0x1c01f000, 0x59c40805, 0x59c40006, 0x80040d00, - 0x05f40caa, 0x82040500, 0x00e80b00, 0x05020004, - 0x8c04053e, 0x050208c9, 0x0501f005, 0x82040500, - 0x00880b00, 0x05f60c9a, 0x05f5fca0, 0x4c5c0000, - 0x4c600000, 0x59c4b805, 0x485fc857, 0x59c410a3, - 0x84081518, 0x825c0500, 0x04000000, 0x05020d5c, - 0x59c40006, 0x8c000500, 0x05000003, 0x8c5c0500, - 0x05020080, 0x0521ff65, 0x0500001c, 0x0521ff6f, - 0x0500001a, 0x59c40005, 0x82000500, 0x000000c0, - 0x05000042, 0x0521ff6f, 0x05020040, 0x59c40006, - 0x82000500, 0x000000f0, 0x05020004, 0x4a038805, - 0x000000c0, 0x0501f039, 0x59a80043, 0x84000506, - 0x48035043, 0x42006000, 0xff203fff, 0x42006800, - 0x40000000, 0x051df8f6, 0x60400800, 0x42001000, - 0x001051b3, 0x052dfe99, 0x8c5c0534, 0x0502002b, - 0x4a035041, 0x0000aaaa, 0x59c40005, 0x8c00050c, - 0x0502000f, 0x8c00050e, 0x05020015, 0x8c00050a, - 0x0502001b, 0x8c000508, 0x05000008, 0x59a8003f, - 0x90000589, 0x05020005, 0x42000000, 0x0010e3a4, - 0x0559fe64, 0x0525f8e2, 0x0501f04c, 0x42000000, - 0x0010e3b2, 0x0559fe5f, 0x41781800, 0x60042000, - 0x0501fd13, 0x64035042, 0x0501f00e, 0x42000000, - 0x0010e3b3, 0x0559fe57, 0x41781800, 0x60082000, - 0x0501fd0b, 0x640b5042, 0x0501f006, 0x42000000, - 0x0010e3a6, 0x0559fe4f, 0x0525f873, 0x0501f037, - 0x0525f91f, 0x0501f035, 0x8c5c0534, 0x05000031, - 0x59c40005, 0x8c00053a, 0x05020004, 0x42000000, - 0x0010e39a, 0x0559fe43, 0x4a038805, 0x20000000, - 0x0521ff12, 0x0502000e, 0x4a038805, 0x04000000, - 0x59c418a8, 0x60002000, 0x0501fcf1, 0x0521ff17, - 0x05020005, 0x64075042, 0x6006d800, 0x0521fe8a, - 0x0501f053, 0x41780000, 0x0521fedd, 0x0501fce1, - 0x4000c000, 0x0501fc28, 0x916c1584, 0x0502000b, + 0x497b9005, 0x4a039035, 0x00880400, 0x59a8003d, + 0x800000e0, 0x4803900e, 0x64c39011, 0x4a03900f, + 0x00115aa4, 0x4a039010, 0x00115aa4, 0x65db9015, + 0x4a039003, 0x00001f07, 0x6503900d, 0x4a039000, + 0x00001600, 0x1c01f000, 0x59c80007, 0x8c000508, + 0x05020885, 0x59c80800, 0x8c040516, 0x05020003, + 0x90000506, 0x0c01f004, 0x4807c857, 0x9000050e, + 0x0c01f001, 0x001017fa, 0x001017f9, 0x001070b1, + 0x001017f9, 0x001017fc, 0x001017f9, 0x001017fc, + 0x001017fc, 0x001017f9, 0x001017f9, 0x001017f9, + 0x001017f9, 0x001017fc, 0x001017f9, 0x001017fc, + 0x001017f9, 0x05f5fe1c, 0x4803c857, 0x1c01f000, + 0x59c8080c, 0x4807c857, 0x82040500, 0x00006000, + 0x05000003, 0x055dff12, 0x0501f005, 0x82040500, + 0x007f0000, 0x05000004, 0x055dfedf, 0x0539fce6, + 0x0501f02c, 0x90040514, 0x0500000d, 0x055dff37, + 0x916c0583, 0x05000008, 0x0525fb8a, 0x05000003, + 0x051dfad2, 0x0501f004, 0x64075045, 0x6006d800, + 0x0525fb01, 0x0501f820, 0x0501f01e, 0x82040500, + 0x00001c00, 0x05000004, 0x055dff07, 0x0501f81a, + 0x0501f018, 0x82040500, 0x00000140, 0x05000004, + 0x055dff14, 0x0501f814, 0x0501f012, 0x82040500, + 0x00008000, 0x0500000f, 0x0525fb72, 0x0500000b, + 0x59c400a4, 0x9000050f, 0x9000058b, 0x05020007, + 0x4c040000, 0x051dfacc, 0x60780000, 0x80000040, + 0x05fe07ff, 0x5c000800, 0x055dfeda, 0x0501f802, + 0x1c01f000, 0x4c0c0000, 0x4c100000, 0x4c140000, + 0x05fdf8e3, 0x5c002800, 0x5c002000, 0x5c001800, + 0x1c01f000, 0x4803c856, 0x59a80804, 0x59a80051, + 0x82000500, 0xfffff000, 0x80040540, 0x48035051, + 0x59a80055, 0x82000500, 0xfffff000, 0x80040540, + 0x48035055, 0x59a80059, 0x82000500, 0xfffff000, + 0x80040540, 0x48035059, 0x48078882, 0x82040480, + 0x00000204, 0x05021004, 0x42001000, 0x00240f00, + 0x0501f00f, 0x82040480, 0x00000404, 0x05021004, + 0x42001000, 0x00440800, 0x0501f009, 0x82040480, + 0x00000804, 0x05021004, 0x42001000, 0x00840400, + 0x0501f003, 0x42001000, 0x00880400, 0x480b9035, + 0x0501f35f, 0x59c80815, 0x05f5fda8, 0x4807c857, + 0xb0040d3c, 0x48079000, 0x59c80000, 0x80040500, + 0x05fe07fe, 0x8c040504, 0x0500001b, 0x59c80035, + 0x48039035, 0x59a800cf, 0x80000540, 0x05000016, + 0x4c300000, 0x600060de, 0x58300801, 0x82040d00, + 0xffc00000, 0x8004090c, 0x58300000, 0x90000541, + 0x48006000, 0x58300000, 0x8c000500, 0x05fe07fe, + 0x82000500, 0xfc00ffff, 0x80040540, 0x84000574, + 0x48006000, 0x58300000, 0x8c000534, 0x05fe07fe, + 0x5c006000, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x1c01f000, 0x60100020, 0x50000000, + 0x8c000520, 0x05020006, 0x42006000, 0x7ff4c000, + 0x58300003, 0x8c000502, 0x0502000a, 0x600060de, + 0x64686000, 0x58300000, 0x8c000504, 0x05fe07fe, + 0x641c6002, 0x59a800cf, 0x84000540, 0x480350cf, + 0x1c01f000, 0x600060de, 0x58300801, 0x9004050c, + 0x05f60d71, 0x60f00800, 0x05fdf7c1, 0x4853c857, + 0x497b8801, 0x850e1d1a, 0x5050b000, 0x485bc857, + 0x8058b1c0, 0x050008a3, 0x82580480, 0x00000804, + 0x050218a0, 0x60040000, 0x61000801, 0x0501fd83, + 0x40582000, 0x8050a000, 0x50500000, 0x80102400, + 0x9058b483, 0x8050a000, 0x485bc857, 0x4853c857, + 0x50501000, 0x80082404, 0x60101800, 0x82080500, + 0x000000ff, 0x61000821, 0x0501fd74, 0x80081110, + 0x800c1840, 0x05fe07fa, 0x8050a000, 0x8058b040, + 0x05fe07f4, 0x4803c856, 0x41780000, 0x61000801, + 0x0501fd6a, 0x50501000, 0x80082404, 0x05020881, + 0x4803c856, 0x1c01f000, 0x4a035079, 0xaabbccdd, + 0x600c0000, 0x0501fcc0, 0x600c0000, 0x0501fcee, + 0x60300868, 0x0501fd58, 0x90040541, 0x60300868, + 0x0501fd5a, 0x60480888, 0x0501fd53, 0x90040548, + 0x60480888, 0x0501fd55, 0x60180818, 0x0501fd4e, + 0x82040540, 0x00000080, 0x60180818, 0x0501fd4f, + 0x60480828, 0x0501fd48, 0x90040541, 0x60480828, + 0x0501fd4a, 0x60300830, 0x0501fd43, 0x82040540, + 0x00000080, 0x60300830, 0x0501fd44, 0x59a80087, + 0x8c00050e, 0x05000006, 0x4803c857, 0x82000500, + 0x0000ff00, 0x80000110, 0x0501f002, 0x60e00001, + 0x60300800, 0x0501fd39, 0x60380940, 0x0501fd32, + 0x82040500, 0xffffff0f, 0x0501fefe, 0x05020003, + 0x90000540, 0x0501f002, 0x90000550, 0x60380940, + 0x0501fd2e, 0x60380938, 0x0501fd27, 0x90040550, + 0x60380938, 0x0501fd29, 0x60800000, 0x61000859, + 0x0501fd26, 0x61000000, 0x61000851, 0x0501fd23, + 0x60300000, 0x61800861, 0x0501fd20, 0x60840000, + 0x61800821, 0x0501fd1d, 0x59c40001, 0x84000574, + 0x48038801, 0x850e1d5a, 0x61602004, 0x6029d000, + 0x0501f83c, 0x4813c857, 0x61000849, 0x0501fd0e, + 0x4807c857, 0x82041500, 0x000000c0, 0x82081580, + 0x000000c0, 0x05000004, 0x80102040, 0x05000825, + 0x05fdf7f3, 0x4803c856, 0x60c82000, 0x6029d000, + 0x0501f82c, 0x60380878, 0x0501fcff, 0x90040d01, + 0x05020004, 0x80102040, 0x0500081a, 0x05fdf7f8, + 0x4803c856, 0x61702001, 0x6029d000, 0x0531fb35, + 0x60380818, 0x0501fcf4, 0x90040d10, 0x05020004, + 0x80102040, 0x05f40cd4, 0x05fdf7f8, 0x4803c856, + 0x60a02000, 0x6029d000, 0x0531fb2a, 0x603808b8, + 0x0501fce9, 0x90040d04, 0x05000004, 0x80102040, + 0x05f40cc9, 0x05fdf7f8, 0x4803c856, 0x1c01f000, + 0x4803c856, 0x4a03c020, 0x00004010, 0x4a03c011, + 0x40100011, 0x05006000, 0x4203e000, 0x40000000, + 0x4203e000, 0x30000001, 0x4803c856, 0x0501f000, + 0x61201801, 0x800c1840, 0x05fe07ff, 0x80e9d040, + 0x05fe07fc, 0x1c01f000, 0x4803c856, 0x497b88a9, + 0x64078807, 0x497b8807, 0x59c40005, 0x48038805, + 0x0501fde9, 0x0501fe2c, 0x0501f9ff, 0x4a0388a7, + 0x0000f7f7, 0x4a0388a3, 0x8000403c, 0x4a0388ae, + 0x000061a8, 0x59c40001, 0x82000500, 0xfffe7fff, + 0x82000540, 0x005fe063, 0x48038801, 0x4a038810, + 0x00410108, 0x4a038811, 0x00520608, 0x4a038812, + 0x00450320, 0x4a038813, 0x00440405, 0x4a03881c, + 0x004132e1, 0x4a038850, 0x80000108, 0x64238860, + 0x64238870, 0x4a038851, 0x80000508, 0x4a038861, + 0x00800000, 0x4a038871, 0x00800000, 0x4a038852, + 0x80000708, 0x4a038862, 0x00800000, 0x4a038872, + 0x00800000, 0x4a038853, 0x80000608, 0x497b8863, + 0x4a038873, 0x00800000, 0x4a038882, 0x00000840, + 0x4a0388a5, 0x000000fe, 0x647b88a6, 0x4a0388b0, + 0x00007530, 0x4a038802, 0x0000ffff, 0x4a038806, + 0xc0e80b00, 0x1c01f000, 0x850e1d4e, 0x1c01f000, + 0x59c40805, 0x59c40006, 0x80040d00, 0x05f40c6e, + 0x82040500, 0x00e80b00, 0x05020004, 0x8c04053e, + 0x050208d2, 0x0501f005, 0x82040500, 0x00880b00, + 0x05f60c5e, 0x05f5fc64, 0x4c5c0000, 0x4c600000, + 0x59c4b805, 0x485fc857, 0x59c410a3, 0x84081518, + 0x825c0500, 0x04000000, 0x05020d65, 0x59c40006, + 0x8c000500, 0x05000003, 0x8c5c0500, 0x05020089, + 0x0525f9d8, 0x0500001c, 0x0525f9e2, 0x0500001a, + 0x59c40005, 0x82000500, 0x000000c0, 0x05000042, + 0x0525f9e2, 0x05020040, 0x59c40006, 0x82000500, + 0x000000f0, 0x05020004, 0x4a038805, 0x000000c0, + 0x0501f039, 0x59a80046, 0x84000506, 0x48035046, + 0x42006000, 0xff203fff, 0x42006800, 0x40000000, + 0x051dfa76, 0x60400800, 0x42001000, 0x001053aa, + 0x0531fa8d, 0x8c5c0534, 0x0502002b, 0x4a035044, + 0x0000aaaa, 0x59c40005, 0x8c00050c, 0x0502000f, + 0x8c00050e, 0x05020015, 0x8c00050a, 0x0502001b, + 0x8c000508, 0x05000008, 0x59a80042, 0x90000589, + 0x05020005, 0x42000000, 0x00112345, 0x055dfd68, + 0x0525fb59, 0x0501f055, 0x42000000, 0x00112353, + 0x055dfd63, 0x41781800, 0x60042000, 0x0501fd1c, + 0x64035045, 0x0501f00e, 0x42000000, 0x00112354, + 0x055dfd5b, 0x41781800, 0x60082000, 0x0501fd14, + 0x640b5045, 0x0501f006, 0x42000000, 0x00112347, + 0x055dfd53, 0x0525fae8, 0x0501f040, 0x0525fb97, + 0x0501f03e, 0x8c5c0534, 0x0500003a, 0x59c40005, + 0x8c00053a, 0x05020004, 0x42000000, 0x0011233b, + 0x055dfd47, 0x4a038805, 0x20000000, 0x0525f985, + 0x0502000e, 0x4a038805, 0x04000000, 0x59c418a8, + 0x60002000, 0x0501fcfa, 0x0525f98a, 0x05020005, + 0x64075045, 0x6006d800, 0x0525f8f7, 0x0501f05c, + 0x41780000, 0x0525f94a, 0x0501fcea, 0x4000c000, + 0x59c400a2, 0x82000500, 0x0000ffff, 0x59881023, + 0x80081400, 0x05021002, 0x81781040, 0x480b1023, + 0x0505f8a7, 0x0501fc28, 0x916c1584, 0x0502000b, 0x8c5c0500, 0x05020013, 0x8d0c0506, 0x05020004, 0x59c410a3, 0x90081548, 0x480b88a3, 0x59c41006, 0x84081540, 0x480b8806, 0x4a038805, 0x04000000, - 0x6006d800, 0x497b503e, 0x8d0c0518, 0x05020004, - 0x4803c856, 0x850e1d06, 0x0519ff45, 0x0519f9e1, + 0x6006d800, 0x497b5041, 0x8d0c0518, 0x05020004, + 0x4803c856, 0x850e1d06, 0x051df8bc, 0x0519fb56, 0x8c5c053c, 0x05020852, 0x8c5c0500, 0x05000031, - 0x42000000, 0x0010e4bc, 0x0559fe12, 0x64078805, - 0x6148b006, 0x6191d000, 0x4c580000, 0x052dfe36, + 0x42000000, 0x00112460, 0x055dfd0d, 0x64078805, + 0x6148b006, 0x6191d000, 0x4c580000, 0x0531fa21, 0x0501fba3, 0x5c00b000, 0x05000004, 0x8058b040, 0x05fe07f9, 0x0501f004, 0x485bc857, 0x64078805, 0x0501f020, 0x485bc857, 0x59c40006, 0x84000500, - 0x48038806, 0x0535fe78, 0x497b8880, 0x0501fda1, + 0x48038806, 0x0539fab6, 0x497b8880, 0x0501fda1, 0x05000008, 0x60000818, 0x0501fbcf, 0x8c040500, - 0x05000004, 0x60142000, 0x0525f908, 0x0501f003, - 0x60182000, 0x0525f905, 0x59c400a3, 0x82000500, - 0xfcf8ffff, 0x480388a3, 0x640b50b4, 0x6012d800, - 0x6403506a, 0x64078805, 0x05f5fe0c, 0x0501fb19, - 0x497b5068, 0x64075075, 0x497b50a6, 0x05f5fa03, + 0x05000004, 0x60142000, 0x0525fb78, 0x0501f003, + 0x60182000, 0x0525fb75, 0x59c400a3, 0x82000500, + 0xfcf8ffff, 0x480388a3, 0x640b50b9, 0x6012d800, + 0x6403506d, 0x64078805, 0x05f5fdbb, 0x0501fb19, + 0x497b506b, 0x64075078, 0x497b50a9, 0x05f5f9ba, 0x825cbd00, 0xbbfffffe, 0x485f8805, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4d180000, 0x59c41004, 0x480bc857, 0x8c080500, 0x05000006, 0x4803c856, - 0x4a01a8e5, 0x00000800, 0x0535fefb, 0x0501f007, + 0x4a01a8e5, 0x00000800, 0x0539fb39, 0x0501f007, 0x82080500, 0x000001f0, 0x05000004, 0x4803c856, - 0x0539f820, 0x05360f13, 0x4a038805, 0x80000000, + 0x0539fc5e, 0x053a0b51, 0x4a038805, 0x80000000, 0x5c023000, 0x1c01f000, 0x59c408a3, 0x4807c857, 0x84040d40, 0x480788a3, 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x4a038805, 0x40000000, 0x42000000, 0x0010e3ac, - 0x0559fdbc, 0x0535faf2, 0x59c41004, 0x8c080500, + 0x4a038805, 0x40000000, 0x42000000, 0x0011234d, + 0x055dfcb7, 0x0535ff30, 0x59c41004, 0x8c080500, 0x05000040, 0x598e600b, 0x4a01a8e5, 0x00000800, 0x813261c0, 0x05000024, 0x59300403, 0x900005b2, 0x05020021, 0x5930001e, 0x48038833, 0x4a038807, - 0x00018000, 0x6009d000, 0x052dfdd3, 0x497b8807, - 0x6009d000, 0x052dfdd0, 0x0535fd6c, 0x60c1d0ea, - 0x052dfdcd, 0x59c408a4, 0x90040d0f, 0x90040d80, + 0x00018000, 0x6009d000, 0x0531f9be, 0x497b8807, + 0x6009d000, 0x0531f9bb, 0x0539f9aa, 0x60c1d0ea, + 0x0531f9b8, 0x59c408a4, 0x90040d0f, 0x90040d80, 0x05000004, 0x42000000, 0x00200000, 0x0501fb7c, - 0x0535fa29, 0x59300009, 0x80000540, 0x05f40b97, + 0x0535fe67, 0x59300009, 0x80000540, 0x05f40b52, 0x40025800, 0x4a025a08, 0x00000103, 0x5931d82d, - 0x58ef400b, 0x58ec0009, 0x0801f800, 0x0005ffdc, + 0x58ef400b, 0x58ec0009, 0x0801f800, 0x0009f810, 0x0501f032, 0x598c000d, 0x82001c80, 0x000000c8, 0x0502100c, 0x80000000, 0x4803180d, 0x59c400a4, 0x9000050f, 0x90000582, 0x05020004, 0x42000000, - 0x00200000, 0x0501fb62, 0x052dfd59, 0x0501f023, - 0x4933c857, 0x0535fd45, 0x813261c0, 0x0500001f, - 0x64066203, 0x609e7000, 0x0009f800, 0x0501f01b, - 0x0535ffc8, 0x05000019, 0x0535ffee, 0x052dfd74, + 0x00200000, 0x0501fb62, 0x0531f93d, 0x0501f023, + 0x4933c857, 0x0539f983, 0x813261c0, 0x0500001f, + 0x64066203, 0x609e7000, 0x0009f839, 0x0501f01b, + 0x0539fc06, 0x05000019, 0x0539fc2c, 0x0531f958, 0x59926005, 0x813261c0, 0x0500000d, 0x61201801, - 0x0535ffb7, 0x0502000a, 0x59c400a4, 0x9000050f, + 0x0539fbf5, 0x0502000a, 0x59c400a4, 0x9000050f, 0x90000582, 0x05020004, 0x42000000, 0x00200000, - 0x0501fb47, 0x052dfd44, 0x0501f008, 0x4933c857, - 0x0535fcd1, 0x813261c0, 0x05000004, 0x613e7000, - 0x640e6203, 0x0009f800, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x0535f281, + 0x0501fb47, 0x0531f928, 0x0501f008, 0x4933c857, + 0x0539f90f, 0x813261c0, 0x05000004, 0x613e7000, + 0x640e6203, 0x0009f839, 0x5c01b000, 0x5c022800, + 0x5c034800, 0x5c03a000, 0x5c032000, 0x0535f6bf, 0x810c0d80, 0x8c04050e, 0x05000055, 0x4803c857, - 0x8d0c050e, 0x05000021, 0x850e1d0e, 0x497b50b4, - 0x42000000, 0x0010e393, 0x0559fd4e, 0x0559fdfa, - 0x0001ff09, 0x60441100, 0x497b50a8, 0x59c40001, + 0x8d0c050e, 0x05000021, 0x850e1d0e, 0x497b50b9, + 0x42000000, 0x00112334, 0x055dfc49, 0x055dfcf5, + 0x0001ff2f, 0x60441100, 0x497b50ab, 0x59c40001, 0x82000500, 0x00018000, 0x90001d80, 0x0500000b, 0x82001d80, 0x00008000, 0x0500000a, 0x82001d80, 0x00010000, 0x05000009, 0x82001d80, 0x00018000, - 0x05000008, 0x05f5fb39, 0x60001800, 0x0501f006, + 0x05000008, 0x05f5faf4, 0x60001800, 0x0501f006, 0x60041800, 0x0501f004, 0x600c1800, 0x0501f002, - 0x60101800, 0x0515f533, 0x850e1d4e, 0x59a808b4, + 0x60101800, 0x0515f650, 0x850e1d4e, 0x59a808b9, 0x800409c0, 0x05020006, 0x59c4000d, 0x8c000520, 0x05000003, 0x600c1800, 0x0501f002, 0x40041800, - 0x0559fdbd, 0x4c0c0000, 0x4c0c0000, 0x41782000, + 0x055dfcb8, 0x4c0c0000, 0x4c0c0000, 0x41782000, 0x0501fcc8, 0x0500000f, 0x0501fcad, 0x60042000, 0x0502000c, 0x0501fcb5, 0x05020006, 0x60082000, 0x0501f8b4, 0x05020007, 0x60102000, 0x0501f005, 0x600c2000, 0x0501f89d, 0x05020002, 0x60142000, - 0x5c001800, 0x60481100, 0x5c001800, 0x0515fd11, - 0x05f5fd32, 0x0559fe1f, 0x0502000c, 0x4d200000, + 0x5c001800, 0x60481100, 0x5c001800, 0x0515fe2e, + 0x05f5fce1, 0x055dfd1a, 0x0502000c, 0x4d200000, 0x61fe4001, 0x0501f857, 0x5c024000, 0x4d400000, - 0x4d3c0000, 0x60a28000, 0x60227800, 0x0501fffb, + 0x4d3c0000, 0x60a28000, 0x60227800, 0x0505f80e, 0x5c027800, 0x5c028000, 0x1c01f000, 0x80000540, - 0x05fc07fe, 0x4d3c0000, 0x60067800, 0x054dfb48, + 0x05fc07fe, 0x4d3c0000, 0x60067800, 0x0551f86f, 0x5c027800, 0x1c01f000, 0x4803c857, 0x82000400, - 0x00102853, 0x50000800, 0x82040d00, 0x000000ff, + 0x001028fb, 0x50000800, 0x82040d00, 0x000000ff, 0x1c01f000, 0x4803c856, 0x4c580000, 0x6040b000, 0x497b88ac, 0x497b88ad, 0x8058b040, 0x05fe07fe, 0x5c00b000, 0x1c01f000, 0x4807c857, 0x80041908, - 0x480f88ac, 0x9004250f, 0x82102400, 0x0010d15b, + 0x480f88ac, 0x9004250f, 0x82102400, 0x0010d8d9, 0x50102000, 0x59c400ad, 0x80100540, 0x480f88ac, - 0x480388ad, 0x0559fe18, 0x05000002, 0x4807503d, + 0x480388ad, 0x055dfd13, 0x05000002, 0x48075040, 0x1c01f000, 0x4807c857, 0x80041908, 0x480f88ac, - 0x9004250f, 0x82102400, 0x0010d15b, 0x50102000, + 0x9004250f, 0x82102400, 0x0010d8d9, 0x50102000, 0x59c400ad, 0x80101500, 0x05000004, 0x80100580, 0x480f88ac, 0x480388ad, 0x1c01f000, 0x4803c857, 0x4c080000, 0x4c040000, 0x4c000000, 0x59c40892, @@ -1773,12 +1805,12 @@ static const uint32_t isp_2500_risc_code[] = { 0x48038886, 0x8058b040, 0x05fe07fe, 0x497b8886, 0x5c000000, 0x5c000800, 0x5c001000, 0x1c01f000, 0x4803c856, 0x8d0c0520, 0x05000003, 0x60ba8000, - 0x0555f47d, 0x1c01f000, 0x59a800ca, 0x80000540, - 0x05000008, 0x0521fd7d, 0x60280800, 0x0502000e, + 0x0559f344, 0x1c01f000, 0x59a800cf, 0x80000540, + 0x05000008, 0x0521ffe7, 0x60280800, 0x0502000e, 0x600008de, 0x58040001, 0x8000092c, 0x0501f00a, 0x59c80835, 0x82040d00, 0x00001f00, 0x80040910, - 0x80040800, 0x59a800ca, 0x80000540, 0x05000002, - 0x61680804, 0x4807c857, 0x1c01f000, 0x59a800ca, + 0x80040800, 0x59a800cf, 0x80000540, 0x05000002, + 0x61680804, 0x4807c857, 0x1c01f000, 0x59a800cf, 0x80000540, 0x0500001c, 0x599c1a01, 0x60a80801, 0x820c0480, 0x00000204, 0x0500100a, 0x61680800, 0x820c0480, 0x00000404, 0x05001006, 0x60b80800, @@ -1786,116 +1818,116 @@ static const uint32_t isp_2500_risc_code[] = { 0x4c300000, 0x600060de, 0x58301000, 0x82081500, 0xfc00ffff, 0x800400e0, 0x80080540, 0x84000574, 0x48006000, 0x58300000, 0x8c000534, 0x05fe07fe, - 0x5c006000, 0x1c01f000, 0x4c000000, 0x59a80069, + 0x5c006000, 0x1c01f000, 0x4c000000, 0x59a8006c, 0x4803c857, 0x90000580, 0x5c000000, 0x1c01f000, - 0x4c000000, 0x59a80069, 0x4803c857, 0x90000581, - 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80069, + 0x4c000000, 0x59a8006c, 0x4803c857, 0x90000581, + 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a8006c, 0x4803c857, 0x90000583, 0x5c000000, 0x1c01f000, - 0x4c000000, 0x59a80069, 0x4803c857, 0x90000584, - 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80069, + 0x4c000000, 0x59a8006c, 0x4803c857, 0x90000584, + 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a8006c, 0x90000582, 0x5c000000, 0x1c01f000, 0x4c000000, - 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8006c, - 0x90000c87, 0x05f61a55, 0x0c01f806, 0x5c007000, + 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8006f, + 0x90000c87, 0x05f61a10, 0x0c01f806, 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000, - 0x00101b93, 0x00101ba0, 0x00101bad, 0x00101bae, - 0x00101bcc, 0x00101bcd, 0x00101bce, 0x4803c856, - 0x6403506e, 0x600c0000, 0x0501f9af, 0x600c0000, - 0x0501f97d, 0x0501fa06, 0x4803c856, 0x641b506c, - 0x60740800, 0x42001000, 0x00101bcf, 0x052df449, - 0x497b5071, 0x64db5066, 0x64ab5065, 0x4803c856, - 0x6407506e, 0x600c0000, 0x0501f96f, 0x4803c856, - 0x641b506c, 0x60740800, 0x42001000, 0x00101bcf, - 0x052df43c, 0x05f5fa2d, 0x64db5066, 0x4803c856, - 0x640f506e, 0x60000800, 0x0501f9ff, 0x90040d1c, + 0x00101c13, 0x00101c20, 0x00101c2d, 0x00101c2e, + 0x00101c4c, 0x00101c4d, 0x00101c4e, 0x4803c856, + 0x64035071, 0x600c0000, 0x0501f9af, 0x600c0000, + 0x0501f97d, 0x0501fa06, 0x4803c856, 0x641b506f, + 0x60740800, 0x42001000, 0x00101c4f, 0x0531f02d, + 0x497b5074, 0x64db5069, 0x64ab5068, 0x4803c856, + 0x64075071, 0x600c0000, 0x0501f96f, 0x4803c856, + 0x641b506f, 0x60740800, 0x42001000, 0x00101c4f, + 0x0531f020, 0x05f5f9e8, 0x64db5069, 0x4803c856, + 0x640f5071, 0x60000800, 0x0501f9ff, 0x90040d1c, 0x9004059c, 0x05000008, 0x90040598, 0x05000008, 0x90040594, 0x05000008, 0x90040590, 0x05000008, - 0x05f5fa1e, 0x60040000, 0x0501f006, 0x60000000, + 0x05f5f9d9, 0x60040000, 0x0501f006, 0x60000000, 0x0501f004, 0x60080000, 0x0501f002, 0x600c0000, - 0x0501f951, 0x497b5072, 0x4803c856, 0x641b506c, - 0x60740800, 0x42001000, 0x00101bcf, 0x052df41d, - 0x05f5fa0e, 0x05f5fa0d, 0x1c01f000, 0x4c000000, - 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8006e, - 0x90000c87, 0x05f61a05, 0x0c01f806, 0x5c007000, + 0x0501f951, 0x497b5075, 0x4803c856, 0x641b506f, + 0x60740800, 0x42001000, 0x00101c4f, 0x0531f001, + 0x05f5f9c9, 0x05f5f9c8, 0x1c01f000, 0x4c000000, + 0x4c040000, 0x4c080000, 0x4c380000, 0x59a80071, + 0x90000c87, 0x05f619c0, 0x0c01f806, 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000, - 0x00101be3, 0x00101bff, 0x00101c50, 0x00101c65, - 0x00101c79, 0x00101c82, 0x00101c83, 0x0501f990, - 0x05020018, 0x59a81074, 0x60000800, 0x0501f9ca, + 0x00101c63, 0x00101c7f, 0x00101cd0, 0x00101ce5, + 0x00101cf9, 0x00101d02, 0x00101d03, 0x0501f990, + 0x05020018, 0x59a81077, 0x60000800, 0x0501f9ca, 0x90040d1c, 0x9004059c, 0x05000008, 0x90040598, 0x05000008, 0x90040594, 0x05000008, 0x90040590, - 0x05000008, 0x05f5f9e9, 0x84081540, 0x0501f006, + 0x05000008, 0x05f5f9a4, 0x84081540, 0x0501f006, 0x84081542, 0x0501f004, 0x84081544, 0x0501f002, - 0x84081546, 0x480b5074, 0x6407506c, 0x0501f003, + 0x84081546, 0x480b5077, 0x6407506f, 0x0501f003, 0x0501f8be, 0x05fdff9d, 0x1c01f000, 0x0501f885, 0x0500004f, 0x0501f972, 0x05020029, 0x60000800, 0x0501f9ad, 0x59c41001, 0x82081500, 0x00018000, 0x90040d1c, 0x90040590, 0x05000042, 0x90040594, 0x05000006, 0x90040598, 0x0500000a, 0x9004059c, - 0x0500000a, 0x05f5f9c9, 0x90080580, 0x05000039, + 0x0500000a, 0x05f5f984, 0x90080580, 0x05000039, 0x82080580, 0x00008000, 0x05000036, 0x0501f003, 0x90080580, 0x05000033, 0x60000800, 0x0501f996, - 0x59a80074, 0x90040d1c, 0x90041594, 0x05000006, + 0x59a80077, 0x90040d1c, 0x90041594, 0x05000006, 0x90041598, 0x05000006, 0x9004159c, 0x05000006, - 0x05f609b6, 0x84000544, 0x0501f004, 0x84000542, - 0x0501f002, 0x84000540, 0x48035074, 0x59a80071, - 0x80000000, 0x48035071, 0x90000585, 0x05000003, - 0x0501f859, 0x0501f01d, 0x497b5071, 0x59c40801, + 0x05f60971, 0x84000544, 0x0501f004, 0x84000542, + 0x0501f002, 0x84000540, 0x48035077, 0x59a80074, + 0x80000000, 0x48035074, 0x90000585, 0x05000003, + 0x0501f859, 0x0501f01d, 0x497b5074, 0x59c40801, 0x82040d00, 0x00018000, 0x90040580, 0x0500000b, 0x82040580, 0x00008000, 0x0500000a, 0x82040580, 0x00010000, 0x05000009, 0x82040580, 0x00018000, - 0x05000008, 0x05f5f999, 0x60040000, 0x0501f006, + 0x05000008, 0x05f5f954, 0x60040000, 0x0501f006, 0x60000000, 0x0501f004, 0x60080000, 0x0501f002, - 0x600c0000, 0x0501f8fc, 0x640b506e, 0x0501f003, - 0x640f506c, 0x0501f002, 0x05fdff59, 0x1c01f000, - 0x0501f834, 0x05000013, 0x59a80065, 0x80000040, - 0x48035065, 0x0501f91e, 0x05020004, 0x640f506c, - 0x497b506d, 0x0501f00b, 0x59a80065, 0x80000540, + 0x600c0000, 0x0501f8fc, 0x640b5071, 0x0501f003, + 0x640f506f, 0x0501f002, 0x05fdff59, 0x1c01f000, + 0x0501f834, 0x05000013, 0x59a80068, 0x80000040, + 0x48035068, 0x0501f91e, 0x05020004, 0x640f506f, + 0x497b5070, 0x0501f00b, 0x59a80068, 0x80000540, 0x05020003, 0x0501f891, 0x0501f002, 0x0501f841, - 0x0501f829, 0x497b5071, 0x6407506e, 0x05fdff44, + 0x0501f829, 0x497b5074, 0x64075071, 0x05fdff44, 0x1c01f000, 0x0501f81f, 0x05000012, 0x0501f90c, - 0x0502000d, 0x59a80072, 0x80000000, 0x48035072, - 0x90000587, 0x0502000a, 0x642b5068, 0x497b5075, - 0x59a80074, 0x8400055e, 0x48035074, 0x4803c857, - 0x0501f004, 0x0501f814, 0x6413506e, 0x05fdff4f, + 0x0502000d, 0x59a80075, 0x80000000, 0x48035075, + 0x90000587, 0x0502000a, 0x642b506b, 0x497b5078, + 0x59a80077, 0x8400055e, 0x48035077, 0x4803c857, + 0x0501f004, 0x0501f814, 0x64135071, 0x05fdff4f, 0x1c01f000, 0x0501f80b, 0x05000007, 0x0501f8f8, 0x05020003, 0x05fdff32, 0x0501f003, 0x0501f80a, - 0x05fdff46, 0x1c01f000, 0x05f5f958, 0x05f5f957, - 0x59a80066, 0x80000040, 0x48035066, 0x05000885, + 0x05fdff46, 0x1c01f000, 0x05f5f913, 0x05f5f912, + 0x59a80069, 0x80000040, 0x48035069, 0x05000885, 0x1c01f000, 0x4c040000, 0x60000800, 0x0501f926, 0x90040d1c, 0x9004059c, 0x05000008, 0x90040598, 0x0500000a, 0x90040594, 0x0500000a, 0x90040590, - 0x05000004, 0x05f5f945, 0x600c0000, 0x0501f006, + 0x05000004, 0x05f5f900, 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004, 0x60040000, 0x0501f002, 0x60000000, 0x0501f8a8, 0x5c000800, 0x1c01f000, 0x4c040000, 0x59c40801, 0x82040d00, 0x00018000, 0x90040580, 0x0500000b, 0x82040580, 0x00008000, 0x0500000c, 0x82040580, 0x00010000, 0x0500000b, - 0x82040580, 0x00018000, 0x05000004, 0x05f5f92b, + 0x82040580, 0x00018000, 0x05000004, 0x05f5f8e6, 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004, 0x60040000, 0x0501f002, 0x60000000, 0x0501f85e, - 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a80071, - 0x80000000, 0x48035071, 0x90000585, 0x05020019, - 0x497b5071, 0x59c40801, 0x82040d00, 0x00018000, + 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a80074, + 0x80000000, 0x48035074, 0x90000585, 0x05020019, + 0x497b5074, 0x59c40801, 0x82040d00, 0x00018000, 0x90040580, 0x0500000b, 0x82040580, 0x00008000, 0x0500000c, 0x82040580, 0x00010000, 0x0500000b, - 0x82040580, 0x00018000, 0x05000004, 0x05f5f90b, + 0x82040580, 0x00018000, 0x05000004, 0x05f5f8c6, 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004, 0x60040000, 0x0501f002, 0x60000000, 0x0501f83e, 0x60000800, 0x0501f8d8, 0x90040d1c, 0x9004059c, 0x05000008, 0x90040598, 0x0500000a, 0x90040594, - 0x0500000a, 0x90040590, 0x05000004, 0x05f5f8f7, + 0x0500000a, 0x90040590, 0x05000004, 0x05f5f8b2, 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004, 0x60040000, 0x0501f002, 0x60000000, 0x0501f85a, - 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80074, - 0x82000500, 0x00007fff, 0x05f408e8, 0x59a84073, - 0x80204102, 0x05f418e5, 0x48235073, 0x80204500, + 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80077, + 0x82000500, 0x00007fff, 0x05f408a3, 0x59a84076, + 0x80204102, 0x05f418a0, 0x48235076, 0x80204500, 0x05fc07fb, 0x8c000506, 0x05020008, 0x8c000504, 0x05020008, 0x8c000502, 0x05020008, 0x8c000500, - 0x05020008, 0x05f5f8d9, 0x600c0000, 0x0501f006, + 0x05020008, 0x05f5f894, 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004, 0x60000000, 0x0501f002, 0x60040000, 0x0501f80c, 0x5c004000, 0x1c01f000, - 0x05011000, 0x4a03c840, 0x0010dc6c, 0x6427c842, - 0x40000000, 0x05fd17ff, 0x64235073, 0x6403506a, - 0x1c01f000, 0x4c000000, 0x59a800a7, 0x8c000500, + 0x05011000, 0x4a03c840, 0x00111bef, 0x6427c842, + 0x40000000, 0x05fd17ff, 0x64235076, 0x6403506d, + 0x1c01f000, 0x4c000000, 0x59a800aa, 0x8c000500, 0x05020002, 0x0501f960, 0x5c000000, 0x0501fa6b, 0x60080800, 0x0501f894, 0x82041500, 0xffffffe3, 0x59c41801, 0x820c1d00, 0xfffe7fff, 0x800001c0, @@ -1904,8 +1936,8 @@ static const uint32_t isp_2500_risc_code[] = { 0x820c1d40, 0x00008000, 0x840c1d32, 0x0501f00d, 0x90000d82, 0x05020006, 0x90080554, 0x820c1d40, 0x00010000, 0x840c1d32, 0x0501f006, 0x90000d83, - 0x05f608a2, 0x90080550, 0x820c1d40, 0x02018000, - 0x60080800, 0x0501f879, 0x480f8801, 0x59a800a7, + 0x05f6085d, 0x90080550, 0x820c1d40, 0x02018000, + 0x60080800, 0x0501f879, 0x480f8801, 0x59a800aa, 0x8c000500, 0x05020002, 0x0501f13c, 0x1c01f000, 0x1c01f000, 0x4c000000, 0x0501f92e, 0x5c000000, 0x0501fa3e, 0x60000800, 0x0501f867, 0x82041500, @@ -1913,7 +1945,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x90000d81, 0x05020007, 0x9008055c, 0x840c1d30, 0x0501f00d, 0x90080558, 0x840c1d30, 0x0501f00a, 0x90000d82, 0x05020004, 0x90080554, 0x840c1d30, - 0x0501f005, 0x90000d83, 0x05f6087c, 0x90080550, + 0x0501f005, 0x90000d83, 0x05f60837, 0x90080550, 0x840c1d70, 0x480f8801, 0x60000800, 0x0501f853, 0x0501fa1c, 0x0500000d, 0x4a03c014, 0x00200020, 0x60000800, 0x0501f848, 0x90040d1c, 0x90040590, @@ -1944,18 +1976,18 @@ static const uint32_t isp_2500_risc_code[] = { 0x480388a3, 0x480788a3, 0x1c01f000, 0x59c400a3, 0x84000556, 0x480388a3, 0x84000516, 0x480388a3, 0x1c01f000, 0x485fc857, 0x4863c857, 0x4c640000, - 0x4d3c0000, 0x4d400000, 0x0535fa7b, 0x48635009, + 0x4d3c0000, 0x4d400000, 0x0535feb9, 0x48635009, 0x40601800, 0x60002000, 0x0501f8b5, 0x42000000, - 0x0010e3b1, 0x0559f9fb, 0x82600500, 0x0000ff00, + 0x00112352, 0x055df8f6, 0x82600500, 0x0000ff00, 0x82000580, 0x0000f700, 0x05020004, 0x42000000, - 0x0010e399, 0x0559f9f3, 0x0559fb02, 0x05020084, + 0x0011233a, 0x055df8ee, 0x055df9fd, 0x05020084, 0x82600d00, 0x0000ff00, 0x61fe41ff, 0x800409c0, 0x0500001b, 0x82041580, 0x0000f700, 0x05000013, 0x82041580, 0x0000f800, 0x05000010, 0x82041580, 0x0000ff00, 0x6000c800, 0x05000029, 0x840439c0, - 0x0505f82c, 0x05020019, 0x83200400, 0x0010d17b, + 0x0505f848, 0x05020019, 0x83200400, 0x0010d8f9, 0x50024800, 0x59240200, 0x8c000500, 0x05000013, - 0x6004c800, 0x0501f01e, 0x42024800, 0x0010e512, + 0x6004c800, 0x0501f01e, 0x42024800, 0x001124b6, 0x59240200, 0x8c000502, 0x0500000c, 0x59c410a3, 0x82081500, 0x00008000, 0x05000008, 0x59c410a7, 0x82081500, 0x0000ff00, 0x82081580, 0x0000ff00, @@ -1965,23 +1997,23 @@ static const uint32_t isp_2500_risc_code[] = { 0x60128000, 0x60227800, 0x0501f004, 0x850e1d40, 0x60128000, 0x417a7800, 0x59a80005, 0x8c000502, 0x05020004, 0x8d0c050a, 0x05020045, 0x850e1d4a, - 0x42000000, 0x0010e398, 0x0559f9ae, 0x59a81809, - 0x604c1100, 0x0515f9ab, 0x83200580, 0x0000ffff, + 0x42000000, 0x00112339, 0x055df8a9, 0x59a81809, + 0x604c1100, 0x0515fac8, 0x83200580, 0x0000ffff, 0x05000018, 0x59240400, 0x8c000508, 0x05000009, - 0x417a7800, 0x4d300000, 0x417a6000, 0x0505f82a, + 0x417a7800, 0x4d300000, 0x417a6000, 0x0505f850, 0x5c026000, 0x59240400, 0x8c00050a, 0x05020030, 0x4d400000, 0x82600500, 0x000000ff, 0x61fe89ff, - 0x40643000, 0x603a8000, 0x0555f960, 0x60040800, - 0x60001002, 0x0531f8fb, 0x5c028000, 0x0501f024, + 0x40643000, 0x603a8000, 0x0559f827, 0x60040800, + 0x60001002, 0x0531fd2f, 0x5c028000, 0x0501f024, 0x8d0c0520, 0x05000018, 0x4c580000, 0x42024800, - 0x0010e512, 0x0559faa3, 0x4d400000, 0x59240200, + 0x001124b6, 0x055df99e, 0x4d400000, 0x59240200, 0x8c000500, 0x05000004, 0x60040800, 0x60001002, - 0x0531f8ec, 0x91264c0d, 0x8058b040, 0x05fe07f8, - 0x603a8000, 0x61fe89ff, 0x40643000, 0x0555f947, + 0x0531fd20, 0x91264c0d, 0x8058b040, 0x05fe07f8, + 0x603a8000, 0x61fe89ff, 0x40643000, 0x0559f80e, 0x5c028000, 0x5c00b000, 0x599c0817, 0x8c04050a, - 0x0502000b, 0x493fc857, 0x4943c857, 0x0501fc6b, + 0x0502000b, 0x493fc857, 0x4943c857, 0x0501fc7e, 0x0501f007, 0x8d0c0520, 0x05000005, 0x603e8000, - 0x61fe89ff, 0x60003000, 0x0555f93b, 0x497b8880, + 0x61fe89ff, 0x60003000, 0x0559f802, 0x497b8880, 0x5c028000, 0x5c027800, 0x5c00c800, 0x1c01f000, 0x60000800, 0x05fdff3c, 0x90040542, 0x60000800, 0x05fdf73e, 0x60080800, 0x05fdff37, 0x90040542, @@ -1993,20 +2025,20 @@ static const uint32_t isp_2500_risc_code[] = { 0x80040d80, 0x05fe07fb, 0x1c01f000, 0x59a80005, 0x8c000500, 0x05000008, 0x59a80008, 0x8c000500, 0x05020005, 0x84000540, 0x48035008, 0x60581100, - 0x0515f940, 0x1c01f000, 0x1c01f000, 0x59c40801, + 0x0515fa5d, 0x1c01f000, 0x1c01f000, 0x59c40801, 0x82040d00, 0x00018000, 0x82040d80, 0x00018000, 0x05000002, 0x84081518, 0x480b88a3, 0x1c01f000, 0x42000800, 0x7ff4818e, 0x59e00002, 0x8c00051e, 0x05020003, 0x42000800, 0x7ff4808e, 0x58041800, - 0x480f5084, 0x8c0c0500, 0x05020007, 0x8c0c0502, + 0x480f5087, 0x8c0c0500, 0x05020007, 0x8c0c0502, 0x05000005, 0x58044001, 0x58042002, 0x58041003, 0x0501f007, 0x42004000, 0x0003c014, 0x42002000, - 0x0003c014, 0x42001000, 0x0002e014, 0x480b507e, - 0x4813507f, 0x48235080, 0x8c0c0500, 0x05020007, + 0x0003c014, 0x42001000, 0x0002e014, 0x480b5081, + 0x48135082, 0x48235083, 0x8c0c0500, 0x05020007, 0x8c0c0504, 0x05000005, 0x58044004, 0x58042005, 0x58041006, 0x0501f004, 0x60c8400d, 0x60c8200d, - 0x60c8100d, 0x480b5081, 0x48135082, 0x48235083, - 0x1c01f000, 0x59a81081, 0x59a82082, 0x59a84083, + 0x60c8100d, 0x480b5084, 0x48135085, 0x48235086, + 0x1c01f000, 0x59a81084, 0x59a82085, 0x59a84086, 0x60380840, 0x05fdfedc, 0x82040d00, 0xffffffc0, 0x82200500, 0x003f0000, 0x80000120, 0x80040540, 0x60380840, 0x05fdfed9, 0x60380848, 0x05fdfed2, @@ -2023,7 +2055,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x0000fc00, 0x80000114, 0x60380920, 0x05fdfeab, 0x82080500, 0x000003e0, 0x8000010a, 0x603808e8, 0x05fdfea6, 0x9008051f, 0x60380900, 0x05fdfea3, - 0x1c01f000, 0x59a8107e, 0x59a8207f, 0x59a84080, + 0x1c01f000, 0x59a81081, 0x59a82082, 0x59a84083, 0x9020051f, 0x800000c2, 0x84000540, 0x60480800, 0x05fdfe9a, 0x82200500, 0x000001e0, 0x80000908, 0x84040d40, 0x82200500, 0x00000600, 0x80000106, @@ -2044,32 +2076,32 @@ static const uint32_t isp_2500_risc_code[] = { 0x82080500, 0x00001800, 0x80000916, 0x82080500, 0x0003e000, 0x80000114, 0x84000544, 0x80040540, 0x60480858, 0x05fdfe51, 0x1c01f000, 0x4c000000, - 0x0515fbe9, 0x05000007, 0x0515f99d, 0x05020003, + 0x0515fd5d, 0x05000007, 0x0515fac3, 0x05020003, 0x90000541, 0x0501f003, 0x59e00013, 0x8c00050e, 0x5c000000, 0x1c01f000, 0x4c140000, 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380, 0x60800801, - 0x60281000, 0x0509faf3, 0x05000002, 0x8c14050c, + 0x60281000, 0x0509fb25, 0x05000002, 0x8c14050c, 0x4a03c014, 0x03800000, 0x5c002800, 0x1c01f000, - 0x4c000000, 0x59a80084, 0x90000510, 0x90000590, + 0x4c000000, 0x59a80087, 0x90000510, 0x90000590, 0x5c000000, 0x1c01f000, 0x4c5c0000, 0x4000b800, - 0x59a80076, 0x82000d80, 0xaabbccdd, 0x0500000f, - 0x90000c85, 0x05f21e4d, 0x4c000000, 0x0515f95b, + 0x59a80079, 0x82000d80, 0xaabbccdd, 0x0500000f, + 0x90000c85, 0x05f21e08, 0x4c000000, 0x0515fa81, 0x5c000000, 0x05020003, 0x0c01f81a, 0x0501f016, - 0x4c000000, 0x0515f96c, 0x5c000000, 0x05fc07fb, + 0x4c000000, 0x0515fa92, 0x5c000000, 0x05fc07fb, 0x0c01f819, 0x0501f010, 0x05fdffe6, 0x0500000e, 0x8d0c051a, 0x0500000c, 0x05fdffc9, 0x0502000a, 0x05fdffd2, 0x05020005, 0x905c0d83, 0x05020006, 0x6008b800, 0x0501f004, 0x905c0d81, 0x05020002, 0x600cb800, 0x405c0000, 0x5c00b800, 0x1c01f000, - 0x00101fb6, 0x00101fb7, 0x00101fb8, 0x00101fb9, - 0x00101fbd, 0x00101fbe, 0x00101fc0, 0x00101fd0, - 0x00101fde, 0x00101fee, 0x1c01f000, 0x1c01f000, + 0x00102036, 0x00102037, 0x00102038, 0x00102039, + 0x0010203d, 0x0010203e, 0x00102040, 0x00102050, + 0x0010205e, 0x0010206e, 0x1c01f000, 0x1c01f000, 0x1c01f000, 0x905c0d83, 0x05020002, 0x6008b800, 0x1c01f000, 0x1c01f000, 0x6004b800, 0x1c01f000, 0x05fdffc0, 0x05000007, 0x05fdffa5, 0x05020005, 0x05fdffae, 0x05000003, 0x6000b800, 0x0501f008, 0x905c0d83, 0x05020003, 0x6000b800, 0x0501f004, - 0x905c0d82, 0x05020002, 0x05f1fe0c, 0x1c01f000, + 0x905c0d82, 0x05020002, 0x05f1fdc7, 0x1c01f000, 0x05fdffb0, 0x0500000c, 0x05fdff95, 0x0502000a, 0x05fdff9e, 0x05020005, 0x905c0d83, 0x05020006, 0x6008b800, 0x0501f004, 0x905c0d81, 0x05020002, @@ -2081,31 +2113,31 @@ static const uint32_t isp_2500_risc_code[] = { 0x05fdff77, 0x05020004, 0x05fdff80, 0x05020002, 0x0501f004, 0x905c0d81, 0x05020002, 0x600cb800, 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x4c580000, 0x497b5086, 0x4200c000, - 0x7ff52000, 0x0515f906, 0x05020031, 0x4803c856, - 0x0515f91b, 0x05020029, 0x4803c856, 0x4a03c014, + 0x4c640000, 0x4c580000, 0x497b5089, 0x4200c000, + 0x7ff52000, 0x0515fa2c, 0x05020031, 0x4803c856, + 0x0515fa41, 0x05020029, 0x4803c856, 0x4a03c014, 0x07030701, 0x0501f965, 0x4a03c013, 0x07010701, 0x0501f9ef, 0x0501fa1f, 0x0501f981, 0x4201d000, - 0x000f4240, 0x0529fff4, 0x0501f95c, 0x0501f9e8, + 0x000f4240, 0x052dfbdf, 0x0501f95c, 0x0501f9e8, 0x0501fa23, 0x61800801, 0x600c1000, 0x60801801, - 0x0509fa1e, 0x05f00dc1, 0x61800801, 0x60001000, - 0x0509fa50, 0x05f00dbd, 0x4817c857, 0x90141d50, - 0x61800801, 0x60041000, 0x0509fa14, 0x05f00db7, - 0x0501f9df, 0x6140b801, 0x0509fa37, 0x05f00db3, + 0x0509fa4e, 0x05f00d7c, 0x61800801, 0x60001000, + 0x0509fa82, 0x05f00d78, 0x4817c857, 0x90141d50, + 0x61800801, 0x60041000, 0x0509fa44, 0x05f00d72, + 0x0501f9df, 0x6140b801, 0x0509fa68, 0x05f00d6e, 0x4867c857, 0x4c640000, 0x0501f96b, 0x0501f964, 0x5c00c800, 0x0501f01c, 0x4a03c014, 0x07e30000, - 0x59e0c813, 0x0501f8be, 0x0501f017, 0x59a80092, + 0x59e0c813, 0x0501f8be, 0x0501f017, 0x59a80095, 0x82000d80, 0x3261103c, 0x05000004, 0x82000d80, 0x338e103c, 0x050200b1, 0x4803c856, 0x42000800, 0x7ff481e6, 0x59e06802, 0x8c34051e, 0x05020003, 0x42000800, 0x7ff480e6, 0x50040000, 0x4803c857, - 0x4803508d, 0x8c00051e, 0x050000a4, 0x8200cd00, - 0x000000ff, 0x4867c857, 0x48675087, 0x50600800, - 0x48075088, 0x4807c857, 0x82040d80, 0x53434651, - 0x05020098, 0x8060c000, 0x50600800, 0x48075089, - 0x8060c000, 0x50600800, 0x4807508a, 0x8060c000, - 0x50600800, 0x4807508b, 0x8060c000, 0x50600800, - 0x82040d00, 0x0000ffff, 0x4807508c, 0x4200c000, + 0x48035090, 0x8c00051e, 0x050000a4, 0x8200cd00, + 0x000000ff, 0x4867c857, 0x4867508a, 0x50600800, + 0x4807508b, 0x4807c857, 0x82040d80, 0x53434651, + 0x05020098, 0x8060c000, 0x50600800, 0x4807508c, + 0x8060c000, 0x50600800, 0x4807508d, 0x8060c000, + 0x50600800, 0x4807508e, 0x8060c000, 0x50600800, + 0x82040d00, 0x0000ffff, 0x4807508f, 0x4200c000, 0x7ff52002, 0x5060b800, 0x825cbd00, 0xffff0000, 0x805cb920, 0x805cb800, 0x05001082, 0x8c5c051e, 0x05020080, 0x59e06802, 0x8c34051e, 0x0502006a, @@ -2115,23 +2147,23 @@ static const uint32_t isp_2500_risc_code[] = { 0xffff0000, 0x80000120, 0x82100d00, 0x0000ffff, 0x4803c857, 0x4807c857, 0x4c180000, 0x05fdfd37, 0x5c003000, 0x80183040, 0x05fe07f3, 0x41780800, - 0x40641000, 0x60100000, 0x052dff08, 0x59e06802, + 0x40641000, 0x60100000, 0x0531fb41, 0x59e06802, 0x8c34051e, 0x05020057, 0x4200c000, 0x7ff52005, 0x8008c418, 0x5060c800, 0x800409c0, 0x0500000a, 0x90041581, 0x05020003, 0x8064c910, 0x0501f006, 0x90041582, 0x05020003, 0x8064c920, 0x0501f002, 0x8064c930, 0x8264cd00, 0x000000ff, 0x4867c857, - 0x4867508e, 0x42001000, 0x7ff52002, 0x50080000, + 0x48675091, 0x42001000, 0x7ff52002, 0x50080000, 0x82000500, 0x0000ffff, 0x4803c857, 0x8c00051e, 0x05020044, 0x80640480, 0x05021042, 0x40640800, - 0x405c1000, 0x052dfec9, 0x4803c857, 0x800001c0, + 0x405c1000, 0x0531fb02, 0x4803c857, 0x800001c0, 0x0502003c, 0x59e06802, 0x8c34051e, 0x05020034, 0x4200c000, 0x7ff52045, 0x805cc418, 0x8004c418, 0x05001034, 0x05000033, 0x4863c857, 0x50600000, - 0x82000500, 0x0000ffff, 0x4803508f, 0x8c00051e, + 0x82000500, 0x0000ffff, 0x48035092, 0x8c00051e, 0x0502002c, 0x4803c857, 0x80000c97, 0x05021029, - 0x40601000, 0x80081000, 0x50080800, 0x48075090, - 0x80081000, 0x50080800, 0x48075091, 0x4000b800, + 0x40601000, 0x80081000, 0x50080800, 0x48075093, + 0x80081000, 0x50080800, 0x48075094, 0x4000b800, 0x8060c000, 0x50602000, 0x82100500, 0xffff0000, 0x80000120, 0x82100d00, 0x0000ffff, 0x4803c857, 0x4807c857, 0x05fdfce5, 0x805cb840, 0x05fe07f5, @@ -2140,7 +2172,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x8258c400, 0x7ff52000, 0xb060c400, 0x05fdf790, 0x8258c400, 0x7ff52000, 0x05fdf7aa, 0x8258c400, 0x7ff52000, 0xb060c400, 0x805cc418, 0x05fdf7cc, - 0x4a035086, 0xdeaddead, 0x5c00b000, 0x5c00c800, + 0x4a035089, 0xdeaddead, 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4867c857, 0x90640d20, 0x8004690a, 0x82640d00, 0x00000400, 0x80040912, 0x80046d4d, 0x90640d01, 0x800408c4, @@ -2149,307 +2181,314 @@ static const uint32_t isp_2500_risc_code[] = { 0x82640d00, 0x00000080, 0x80040904, 0x80046d4d, 0xb0640d00, 0x80046d4d, 0x82640d00, 0x00000200, 0x80040904, 0x80046d4d, 0x8234cd00, 0x000000ff, - 0x1c01f000, 0x0515f809, 0x0502000d, 0x4803c856, + 0x1c01f000, 0x0515f92f, 0x0502000d, 0x4803c856, 0x4a03c014, 0x18001800, 0x4a03c013, 0x18000800, 0x05fdfc97, 0x4a03c013, 0x18000000, 0x61a1d007, - 0x0529feed, 0x4a03c013, 0x18000800, 0x1c01f000, - 0x0511fffa, 0x0502000d, 0x4803c856, 0x4a03c014, + 0x052dfad8, 0x4a03c013, 0x18000800, 0x1c01f000, + 0x0515f920, 0x0502000d, 0x4803c856, 0x4a03c014, 0x18001800, 0x4a03c013, 0x18001800, 0x05fdfc88, - 0x4a03c013, 0x18001000, 0x61a1d007, 0x0529fede, - 0x4a03c013, 0x18001800, 0x1c01f000, 0x0511ffeb, + 0x4a03c013, 0x18001000, 0x61a1d007, 0x052dfac9, + 0x4a03c013, 0x18001800, 0x1c01f000, 0x0515f911, 0x0502000e, 0x0501f831, 0x60041800, 0x42001000, - 0x0010dc87, 0x60900800, 0x60002180, 0x50080000, - 0x82000500, 0x000000ff, 0x4803c857, 0x0515f8cb, - 0x05f00ca2, 0x0501f82d, 0x1c01f000, 0x0501f823, + 0x00111c0a, 0x60900800, 0x60002180, 0x50080000, + 0x82000500, 0x000000ff, 0x4803c857, 0x0515f9f1, + 0x05f00c5d, 0x0501f82d, 0x1c01f000, 0x0501f823, 0x59e00802, 0x8c04051e, 0x05000004, 0x4807c856, 0x60a00800, 0x0501f002, 0x609c0800, 0x4807c857, - 0x60041800, 0x42001000, 0x0010dc85, 0x60002180, - 0x64041000, 0x0515f8b9, 0x05f00c90, 0x0501f81b, - 0x1c01f000, 0x0511ffc9, 0x0502000f, 0x59c40001, + 0x60041800, 0x42001000, 0x00111c08, 0x60002180, + 0x64041000, 0x0515f9df, 0x05f00c4b, 0x0501f81b, + 0x1c01f000, 0x0515f8ef, 0x0502000f, 0x59c40001, 0x82000500, 0x00018000, 0x82000d80, 0x00008000, 0x05000006, 0x82000d80, 0x00010000, 0x05000003, - 0x497b50a6, 0x0501f004, 0x59a800a6, 0x90000c82, + 0x497b50a9, 0x0501f004, 0x59a800a9, 0x90000c82, 0x05fc17fc, 0x1c01f000, 0x42000800, 0x00895440, - 0x0555ff9f, 0x05020004, 0x80040840, 0x05fe07fd, - 0x0555ffab, 0x1c01f000, 0x64030000, 0x1c01f000, + 0x0559fe9a, 0x05020004, 0x80040840, 0x05fe07fd, + 0x0559fea6, 0x1c01f000, 0x64030000, 0x1c01f000, 0x4c5c0000, 0x59e0b802, 0x8c5c051e, 0x05000001, 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x6110b813, 0x4a03c016, 0x00010001, 0x59e00016, 0x8c000500, 0x05000010, 0x8c00051e, 0x05020002, 0x0501f014, 0x4a03c016, 0x00010000, 0x6140c00f, - 0x61a1d007, 0x0529fe88, 0x59e00016, 0x8c00051e, + 0x61a1d007, 0x052dfa73, 0x59e00016, 0x8c00051e, 0x05fc07f1, 0x8060c040, 0x05fe07fa, 0x4a03c016, - 0x80000000, 0x61a1d007, 0x0529fe7f, 0x805cb840, + 0x80000000, 0x61a1d007, 0x052dfa6a, 0x805cb840, 0x05fe07e9, 0x4803c856, 0x4a03c016, 0x80008000, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4a03c013, 0x04010401, 0x4a03c016, 0x80010000, 0x05fdfc18, 0x1c01f000, 0x60800801, 0x61d0100d, 0x8408157e, - 0x0509f8d4, 0x05f00c41, 0x48175079, 0x4817c857, - 0x60800801, 0x61c0100d, 0x8408157e, 0x0509f8cd, - 0x05f00c3a, 0x4817507a, 0x4817c857, 0x60800801, - 0x61e0100d, 0x8408157e, 0x0509f8c6, 0x05f00c33, - 0x4817507b, 0x4817c857, 0x641f507c, 0x617c1800, + 0x0509f906, 0x05f00bfc, 0x4817507c, 0x4817c857, + 0x60800801, 0x61c0100d, 0x8408157e, 0x0509f8ff, + 0x05f00bf5, 0x4817507d, 0x4817c857, 0x60800801, + 0x61e0100d, 0x8408157e, 0x0509f8f8, 0x05f00bee, + 0x4817507e, 0x4817c857, 0x641f507f, 0x617c1800, 0x0501f833, 0x0501f84e, 0x60600801, 0x60001000, - 0x0509f8bc, 0x05020004, 0x0501f859, 0x60600801, - 0x05f1fc1f, 0x0501f864, 0x4817c857, 0x59a8207c, - 0x59a80079, 0x80140480, 0x0502101c, 0x59a8007a, - 0x80140480, 0x05021012, 0x59a8007b, 0x80140480, + 0x0509f8ee, 0x05020004, 0x0501f859, 0x60600801, + 0x05f1fbda, 0x0501f864, 0x4817c857, 0x59a8207f, + 0x59a8007c, 0x80140480, 0x0502101c, 0x59a8007d, + 0x80140480, 0x05021012, 0x59a8007e, 0x80140480, 0x05021008, 0x601c1800, 0x90100583, 0x05020014, - 0x90142c05, 0x59a8007b, 0x80140480, 0x05001010, + 0x90142c05, 0x59a8007e, 0x80140480, 0x05001010, 0x600c1800, 0x90100582, 0x0502000d, 0x90142c05, - 0x59a8007a, 0x80140480, 0x05001009, 0x60081800, - 0x90100580, 0x05020006, 0x90142c05, 0x59a80079, + 0x59a8007d, 0x80140480, 0x05001009, 0x60081800, + 0x90100580, 0x05020006, 0x90142c05, 0x59a8007c, 0x80140480, 0x05001002, 0x60001800, 0x80102583, - 0x480f507c, 0x480fc857, 0x05000003, 0xb00c1d58, - 0x0501f803, 0x65935078, 0x1c01f000, 0x59a80a77, + 0x480f507f, 0x480fc857, 0x05000003, 0xb00c1d58, + 0x0501f803, 0x6593507b, 0x1c01f000, 0x59a80a7a, 0x8c040500, 0x05000003, 0x820c1d00, 0xfffffff7, - 0x0501f817, 0x61800801, 0x60041000, 0x0509f84f, - 0x05f00bf2, 0x1c01f000, 0x4c580000, 0x0501f810, - 0x6140b00f, 0x61800801, 0x60001000, 0x0509f87d, - 0x05f00bea, 0x4817c857, 0x82140d00, 0x000000a0, + 0x0501f817, 0x61800801, 0x60041000, 0x0509f87f, + 0x05f00bad, 0x1c01f000, 0x4c580000, 0x0501f810, + 0x6140b00f, 0x61800801, 0x60001000, 0x0509f8af, + 0x05f00ba5, 0x4817c857, 0x82140d00, 0x000000a0, 0x90040da0, 0x05000004, 0x8058b040, 0x05fe07f6, 0x90000541, 0x5c00b000, 0x1c01f000, 0x05fdff6d, 0x05000004, 0x4a03c013, 0x04010401, 0x0501f003, 0x4a03c013, 0x04010400, 0x05fdf3a9, 0x05fdff65, 0x05000004, 0x4a03c013, 0x04010001, 0x0501f003, - 0x4a03c013, 0x04010000, 0x05fdf3a1, 0x59a80a77, - 0x84040d40, 0x4807c857, 0x48075277, 0x61800801, - 0x60001000, 0x0509f85b, 0x05f00bc8, 0x4817c857, + 0x4a03c013, 0x04010000, 0x05fdf3a1, 0x59a80a7a, + 0x84040d40, 0x4807c857, 0x4807527a, 0x61800801, + 0x60001000, 0x0509f88d, 0x05f00b83, 0x4817c857, 0x82142d00, 0xfffffff7, 0xb0142d40, 0x40141800, - 0x05fdf7c7, 0xb0142c80, 0x05001010, 0x59a80084, - 0x8c000520, 0x0500000a, 0x59a8087d, 0x9004050f, + 0x05fdf7c7, 0xb0142c80, 0x05001010, 0x59a80087, + 0x8c000520, 0x0500000a, 0x59a80880, 0x9004050f, 0x05020007, 0x80040910, 0x82040d00, 0x000000ff, 0x4807c857, 0x80142c01, 0x0501f002, 0x90142c05, 0x4817c857, 0x1c01f000, 0x41782800, 0x05fdf7fd, - 0x60600801, 0x60241000, 0x60101800, 0x0509f807, - 0x05f00baa, 0x60600801, 0x60281000, 0x601c1800, - 0x0509f802, 0x05f00ba5, 0x1c01f000, 0x42000800, + 0x60600801, 0x60241000, 0x60101800, 0x0509f837, + 0x05f00b65, 0x60600801, 0x60281000, 0x601c1800, + 0x0509f832, 0x05f00b60, 0x1c01f000, 0x42000800, 0x7ff481f4, 0x59e00002, 0x8c00051e, 0x05020003, 0x42000800, 0x7ff480f4, 0x4807c857, 0x50040000, - 0x4803c857, 0x4803507d, 0x1c01f000, 0x59c468a4, + 0x4803c857, 0x48035080, 0x1c01f000, 0x59c468a4, + 0x90346d0f, 0x90346d8a, 0x1c01f000, 0x59c468a4, 0x90346d0f, 0x90346d82, 0x1c01f000, 0x59c468a4, 0x90346d0f, 0x90346d81, 0x1c01f000, 0x59c468a4, - 0x90346d0f, 0x90346d80, 0x1c01f000, 0x59a80006, - 0x8c00051c, 0x05020016, 0x4937c857, 0x0539f9b0, - 0x05000013, 0x4926601d, 0x4936600a, 0x0545fe38, - 0x64066407, 0x417a7800, 0x0519fa89, 0x59a80044, - 0x80000000, 0x48035044, 0x60127000, 0x599c0019, - 0x8c00050e, 0x05000002, 0x60027000, 0x599c0208, - 0x48026c12, 0x0009f800, 0x90000541, 0x1c01f000, - 0x4937c857, 0x0539f99a, 0x0500001b, 0x4926601d, - 0x4936600a, 0x59340403, 0x82000580, 0x000007fe, - 0x05000005, 0x4d3c0000, 0x417a7800, 0x0501f8b9, - 0x5c027800, 0x0545fe1a, 0x64066407, 0x417a7800, - 0x0519fa6b, 0x600c0800, 0x0519fa73, 0x0555fe9a, - 0x05020004, 0x59a80044, 0x80000000, 0x48035044, - 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f800, - 0x90000541, 0x1c01f000, 0x4803c856, 0x59a80006, - 0x8c00051e, 0x05020008, 0x61f2880f, 0x42003000, - 0x00fffffc, 0x0519fa87, 0x05020007, 0x0501f808, - 0x05000005, 0x4a03504a, 0x0000ffff, 0x90000541, - 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4937c857, - 0x0539f96b, 0x05000011, 0x4926601d, 0x4936600a, - 0x0545fdf3, 0x64066407, 0x417a7800, 0x0519fa44, - 0x600c0800, 0x0519fa4c, 0x59a8004b, 0x80000000, - 0x4803504b, 0x599c0208, 0x48026c12, 0x600a7000, - 0x0009f800, 0x90000541, 0x1c01f000, 0x480bc857, - 0x492fc857, 0x4923c857, 0x4927c857, 0x4c5c0000, - 0x4008b800, 0x61f6880f, 0x42003000, 0x00fffffd, - 0x0519fa60, 0x0502001b, 0x5934000a, 0x84000544, - 0x4802680a, 0x0539f94a, 0x05000016, 0x4926601d, - 0x4936600a, 0x812e59c0, 0x05000006, 0x592c0408, - 0x8c00051e, 0x05000003, 0x48ee602d, 0x0501f004, - 0x59a80249, 0x8400055c, 0x48035249, 0x492e6009, - 0x64066407, 0x485e601e, 0x0545fdc5, 0x608a7000, - 0x0009f800, 0x90000541, 0x5c00b800, 0x1c01f000, - 0x80000580, 0x05fdf7fd, 0x5c000000, 0x4c000000, - 0x4803c857, 0x4943c857, 0x493fc857, 0x4d340000, - 0x4d440000, 0x4c580000, 0x4d2c0000, 0x4c5c0000, - 0x0531fa37, 0x4df00000, 0x833c0500, 0x00001800, - 0x05000003, 0x8d3c0516, 0x052c0f54, 0x0531f81d, - 0x0531f8a9, 0x052dfd9f, 0x053dfcb0, 0x5c03e000, - 0x05300a1c, 0x61c0b00f, 0x417a8800, 0x0001fb00, - 0x05020025, 0x8d3c0506, 0x05000004, 0x59340200, - 0x8c00050e, 0x05020020, 0x0519fccf, 0x497a6c0b, - 0x8d3c0518, 0x05000017, 0x5934b80f, 0x805cb9c0, - 0x0500000a, 0x405e5800, 0x49425a0a, 0x492fc857, - 0x592cb800, 0x0001fb82, 0x805cb9c0, 0x05fe07fa, - 0x497a680f, 0x497a6810, 0x4937c857, 0x4a026c00, - 0x00000707, 0x497a6a03, 0x497a6811, 0x59340402, - 0x82000500, 0x000000ff, 0x48026c02, 0x0501f006, - 0x4937c857, 0x4a026c00, 0x00000707, 0x8d0c0520, - 0x05140f78, 0x81468800, 0x8058b040, 0x05fe07d8, - 0x8d3c0502, 0x05000011, 0x497b5046, 0x61c2880f, - 0x6040b000, 0x0001fb00, 0x05020009, 0x4937c857, - 0x5934b80f, 0x5934000c, 0x4a026c00, 0x00000707, - 0x805c0540, 0x05020002, 0x0515ff66, 0x81468800, - 0x8058b040, 0x05fe07f4, 0x5c00b800, 0x5c025800, - 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000, - 0x5c000000, 0x4c000000, 0x4803c857, 0x4933c857, - 0x493fc857, 0x4927c857, 0x4d340000, 0x4d400000, - 0x4d440000, 0x4d2c0000, 0x4c5c0000, 0x0531f9dc, - 0x4df00000, 0x5932680a, 0x813669c0, 0x05000030, - 0x59368c03, 0x60a68000, 0x833c0500, 0x00001800, - 0x05000003, 0x8d3c0516, 0x052c0f03, 0x0531f808, - 0x0531f851, 0x052dfdd7, 0x0551fb2b, 0x4937c857, + 0x90346d0f, 0x90346d80, 0x1c01f000, 0x59c40007, + 0x84000568, 0x48038807, 0x1c01f000, 0x42006000, + 0xfc18ffff, 0x42006800, 0x01000000, 0x0519f973, + 0x05fdfb4f, 0x59c408a4, 0x90040d0f, 0x90040d8c, + 0x052208f8, 0x1c01f000, 0x59a80006, 0x8c00051c, + 0x05020016, 0x4937c857, 0x0539fe32, 0x05000013, + 0x4926601d, 0x4936600a, 0x0549fb3d, 0x64066407, + 0x417a7800, 0x0519fc09, 0x59a80047, 0x80000000, + 0x48035047, 0x60127000, 0x599c0019, 0x8c00050e, + 0x05000002, 0x60027000, 0x599c0208, 0x48026c12, + 0x0009f839, 0x90000541, 0x1c01f000, 0x4937c857, + 0x0539fe1c, 0x0500001b, 0x4926601d, 0x4936600a, + 0x59340403, 0x82000580, 0x000007fe, 0x05000005, + 0x4d3c0000, 0x417a7800, 0x0501f8bd, 0x5c027800, + 0x0549fb1f, 0x64066407, 0x417a7800, 0x0519fbeb, + 0x600c0800, 0x0519fbf3, 0x0559fd82, 0x05020004, + 0x59a80047, 0x80000000, 0x48035047, 0x599c0208, + 0x48026c12, 0x600a7000, 0x0009f839, 0x90000541, + 0x1c01f000, 0x4803c856, 0x59a80006, 0x8c00051e, + 0x05020008, 0x61f2880f, 0x42003000, 0x00fffffc, + 0x0519fc0f, 0x05020007, 0x0501f808, 0x05000005, + 0x4a03504d, 0x0000ffff, 0x90000541, 0x1c01f000, + 0x80000580, 0x05fdf7fe, 0x4937c857, 0x0539fded, + 0x05000011, 0x4926601d, 0x4936600a, 0x0549faf8, + 0x64066407, 0x417a7800, 0x0519fbc4, 0x600c0800, + 0x0519fbcc, 0x59a8004e, 0x80000000, 0x4803504e, + 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f839, + 0x90000541, 0x1c01f000, 0x480bc857, 0x492fc857, + 0x4923c857, 0x4927c857, 0x4c5c0000, 0x4008b800, + 0x61f6880f, 0x42003000, 0x00fffffd, 0x0519fbe8, + 0x0502001b, 0x5934000a, 0x84000544, 0x4802680a, + 0x0539fdcc, 0x05000016, 0x4926601d, 0x4936600a, + 0x812e59c0, 0x05000006, 0x592c0408, 0x8c00051e, + 0x05000003, 0x48ee602d, 0x0501f004, 0x59a8024c, + 0x8400055c, 0x4803524c, 0x492e6009, 0x64066407, + 0x485e601e, 0x0549faca, 0x608a7000, 0x0009f839, + 0x90000541, 0x5c00b800, 0x1c01f000, 0x80000580, + 0x05fdf7fd, 0x5c000000, 0x4c000000, 0x4803c857, + 0x4943c857, 0x493fc857, 0x4d340000, 0x4d440000, + 0x4c580000, 0x4d2c0000, 0x4c5c0000, 0x0531fe62, + 0x4df00000, 0x833c0500, 0x00001800, 0x05000003, + 0x8d3c0516, 0x05300b7a, 0x0531fc49, 0x0531fcd5, + 0x0531f9c5, 0x0541f964, 0x5c03e000, 0x05300e47, + 0x59a8b0ac, 0x417a8800, 0x0001fb08, 0x05020025, 0x8d3c0506, 0x05000004, 0x59340200, 0x8c00050e, - 0x0502001f, 0x0519fc74, 0x497a6c0b, 0x8d3c0518, + 0x05020020, 0x0519fea6, 0x497a6c0b, 0x8d3c0518, 0x05000017, 0x5934b80f, 0x805cb9c0, 0x0500000a, 0x405e5800, 0x49425a0a, 0x492fc857, 0x592cb800, - 0x0001fb82, 0x805cb9c0, 0x05fe07fa, 0x497a680f, + 0x0001fba8, 0x805cb9c0, 0x05fe07fa, 0x497a680f, 0x497a6810, 0x4937c857, 0x4a026c00, 0x00000707, 0x497a6a03, 0x497a6811, 0x59340402, 0x82000500, - 0x000000ff, 0x48026c02, 0x0501f005, 0x4a026c00, - 0x00000707, 0x8d0c0520, 0x05140f1e, 0x5c03e000, - 0x05300998, 0x5c00b800, 0x5c025800, 0x5c028800, - 0x5c028000, 0x5c026800, 0x1c01f000, 0x4933c857, - 0x59a80249, 0x8c000508, 0x05020013, 0x5930500a, - 0x482bc857, 0x916c0582, 0x0502000f, 0x0501f81a, - 0x0502000d, 0x58280403, 0x82004d80, 0x000007fc, - 0x0500000a, 0x82004d80, 0x000007fd, 0x05000006, - 0x59a80044, 0x80000040, 0x4803c857, 0x05f01a53, - 0x48035044, 0x1c01f000, 0x59300429, 0x90004da1, - 0x05fc07f8, 0xb0000591, 0x05fc07fb, 0x59a8004b, - 0x80000040, 0x4803c857, 0x05fc17f7, 0x4803504b, - 0x1c01f000, 0x59300009, 0x800001c0, 0x05020007, - 0x59300403, 0x90000581, 0x05020003, 0x90000541, - 0x0501f002, 0x80000580, 0x1c01f000, 0x4937c857, - 0x59340200, 0x84000502, 0x48026a00, 0x1c01f000, - 0x4933c857, 0x493fc857, 0x4947c857, 0x4927c857, - 0x4d400000, 0x4d340000, 0x4d440000, 0x4c580000, - 0x0531f967, 0x4df00000, 0x8060c1c0, 0x05020003, - 0x6004b000, 0x0501f003, 0x61c0b00f, 0x417a8800, - 0x41440000, 0x81ac0400, 0x50000000, 0x80026d40, - 0x05000018, 0x59245005, 0x59340013, 0x82000500, + 0x000000ff, 0x48026c02, 0x0501f006, 0x4937c857, + 0x4a026c00, 0x00000707, 0x8d0c0520, 0x051808dc, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07d4, 0x8d3c0502, + 0x05000011, 0x497b5049, 0x61c2880f, 0x6040b000, + 0x0001fb08, 0x05020009, 0x4937c857, 0x5934b80f, + 0x5934000c, 0x4a026c00, 0x00000707, 0x805c0540, + 0x05020002, 0x0519f8c6, 0x81468800, 0x8058b040, + 0x05fe07f4, 0x5c00b800, 0x5c025800, 0x5c00b000, + 0x5c028800, 0x5c026800, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4933c857, 0x493fc857, + 0x4927c857, 0x4d340000, 0x4d400000, 0x4d440000, + 0x4d2c0000, 0x4c5c0000, 0x0531fe03, 0x4df00000, + 0x5932680a, 0x813669c0, 0x05000030, 0x59368c03, + 0x60a68000, 0x833c0500, 0x00001800, 0x05000003, + 0x8d3c0516, 0x05300b25, 0x0531fc30, 0x0531fc79, + 0x0531f9f9, 0x0555f9ab, 0x4937c857, 0x8d3c0506, + 0x05000004, 0x59340200, 0x8c00050e, 0x0502001f, + 0x0519fe47, 0x497a6c0b, 0x8d3c0518, 0x05000017, + 0x5934b80f, 0x805cb9c0, 0x0500000a, 0x405e5800, + 0x49425a0a, 0x492fc857, 0x592cb800, 0x0001fba8, + 0x805cb9c0, 0x05fe07fa, 0x497a680f, 0x497a6810, + 0x4937c857, 0x4a026c00, 0x00000707, 0x497a6a03, + 0x497a6811, 0x59340402, 0x82000500, 0x000000ff, + 0x48026c02, 0x0501f005, 0x4a026c00, 0x00000707, + 0x8d0c0520, 0x0518087e, 0x5c03e000, 0x05300dbf, + 0x5c00b800, 0x5c025800, 0x5c028800, 0x5c028000, + 0x5c026800, 0x1c01f000, 0x4933c857, 0x59a8024c, + 0x8c000508, 0x05020013, 0x5930500a, 0x482bc857, + 0x916c0582, 0x0502000f, 0x0501f81a, 0x0502000d, + 0x58280403, 0x82004d80, 0x000007fc, 0x0500000a, + 0x82004d80, 0x000007fd, 0x05000006, 0x59a80047, + 0x80000040, 0x4803c857, 0x05f019f7, 0x48035047, + 0x1c01f000, 0x59300429, 0x90004da1, 0x05fc07f8, + 0xb0000591, 0x05fc07fb, 0x59a8004e, 0x80000040, + 0x4803c857, 0x05fc17f7, 0x4803504e, 0x1c01f000, + 0x59300009, 0x800001c0, 0x05020007, 0x59300403, + 0x90000581, 0x05020003, 0x90000541, 0x0501f002, + 0x80000580, 0x1c01f000, 0x4937c857, 0x59340200, + 0x84000502, 0x48026a00, 0x1c01f000, 0x4933c857, + 0x493fc857, 0x4947c857, 0x4927c857, 0x4d400000, + 0x4d340000, 0x4d440000, 0x4c580000, 0x0531fd8e, + 0x4df00000, 0x8060c1c0, 0x05020003, 0x6004b000, + 0x0501f003, 0x59a8b0ac, 0x417a8800, 0x0001fb08, + 0x05020018, 0x59245005, 0x59340013, 0x82000500, 0x00ffffff, 0x80280580, 0x05020012, 0x4d3c0000, - 0x60067800, 0x0519fd32, 0x5c027800, 0x60a68000, - 0x052dff87, 0x052dffd0, 0x052dfd56, 0x0519fe5e, + 0x60067800, 0x0519ff10, 0x5c027800, 0x60a68000, + 0x0531fbb2, 0x0531fbfb, 0x0531f97b, 0x051df893, 0x05020005, 0x4937c857, 0x4a026c00, 0x00000404, - 0x0501f002, 0x0519fe83, 0x0551faa3, 0x0519fbf2, - 0x81468800, 0x8058b040, 0x05fe07e2, 0x5c03e000, - 0x05300930, 0x5c00b000, 0x5c028800, 0x5c026800, + 0x0501f002, 0x051df8b8, 0x0555f926, 0x0519fdc8, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07e1, 0x5c03e000, + 0x05300d56, 0x5c00b000, 0x5c028800, 0x5c026800, 0x5c028000, 0x1c01f000, 0x4937c857, 0x4947c857, - 0x4c5c0000, 0x4c600000, 0x4c640000, 0x59a800b2, + 0x4c5c0000, 0x4c600000, 0x4c640000, 0x59a800b7, 0x8c000500, 0x0500001d, 0x599c0017, 0x8c00050a, 0x0502001a, 0x5934ba02, 0x825cbd00, 0x000000ff, 0x485fc857, 0x4178c000, 0x4178c800, 0x82600400, - 0x00110258, 0x50002000, 0x8060c1c0, 0x05000008, + 0x001141fc, 0x50002000, 0x8060c1c0, 0x05000008, 0x82100500, 0x000000ff, 0x82002d80, 0x000000ff, 0x0500000a, 0x805c0580, 0x0500000a, 0x80102110, 0x8064c800, 0x90640584, 0x05fe07f6, 0x8060c000, 0x906005a0, 0x05fe07ed, 0x4813c857, 0x90000541, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x59a80249, 0x8c000512, 0x05f20a9b, 0x1c01f000, + 0x59a8024c, 0x8c000512, 0x05f20a32, 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c500000, - 0x6004b000, 0x42024800, 0x0010e512, 0x417a4000, - 0x61fa880f, 0x0555fd04, 0x05000020, 0x0555fce1, - 0x5924ba00, 0x8c5c0500, 0x0500007c, 0x59a8a249, + 0x6004b000, 0x42024800, 0x001124b6, 0x417a4000, + 0x61fa880f, 0x0559fbe7, 0x05000020, 0x0559fbc4, + 0x5924ba00, 0x8c5c0500, 0x0500007c, 0x59a8a24c, 0x8c500506, 0x0500000d, 0x825c0500, 0x000000e0, 0x82000580, 0x000000e0, 0x05000074, 0x0501f881, - 0x59a80044, 0x4923c857, 0x4803c857, 0x80000000, - 0x48035044, 0x0501f06d, 0x8c5c051e, 0x0500006b, + 0x59a80047, 0x4923c857, 0x4803c857, 0x80000000, + 0x48035047, 0x0501f06d, 0x8c5c051e, 0x0500006b, 0x4927c856, 0x6004b000, 0x825c0500, 0x000000e1, 0x48024a00, 0x485fc857, 0x825cc500, 0x000000e0, - 0x0502001f, 0x0501f018, 0x051dfc7c, 0x05000002, - 0x0555fcc4, 0x5924ba00, 0x8c5c0500, 0x0500005b, - 0x0555fcdd, 0x05000005, 0x59a80249, 0x8c00050e, - 0x05020013, 0x0501f004, 0x83240d80, 0x0010e512, + 0x0502001f, 0x0501f018, 0x051dfece, 0x05000002, + 0x0559fba7, 0x5924ba00, 0x8c5c0500, 0x0500005b, + 0x0559fbc0, 0x05000005, 0x59a8024c, 0x8c00050e, + 0x05020013, 0x0501f004, 0x83240d80, 0x001124b6, 0x0502000f, 0x825cc500, 0x000000e0, 0x0502000c, - 0x051dfc6a, 0x05000004, 0x42000800, 0xffffff1d, - 0x0501fa82, 0x59a80249, 0x82000500, 0xffffdafc, - 0x8400054e, 0x48035249, 0x0501f006, 0x82600580, + 0x051dfebc, 0x05000004, 0x42000800, 0xffffff1d, + 0x0501fa91, 0x59a8024c, 0x82000500, 0xffffdafc, + 0x8400054e, 0x4803524c, 0x0501f006, 0x82600580, 0x000000e0, 0x0502004a, 0x8c5c050e, 0x0502003f, 0x5924c809, 0x9064040e, 0x50000000, 0x4803c857, - 0x80026d40, 0x05000011, 0x051dfc54, 0x05000013, + 0x80026d40, 0x05000011, 0x051dfea6, 0x05000013, 0x59340200, 0x8c00051a, 0x05020034, 0x59240805, - 0x80040910, 0x0500000d, 0x59a80046, 0x4803c857, + 0x80040910, 0x0500000d, 0x59a80049, 0x4803c857, 0x4807c857, 0x80040580, 0x05000008, 0x4a026806, 0xdeaddead, 0x0501f005, 0x42003000, 0x00fffffe, - 0x0519f8a8, 0x0502002e, 0x0535ff95, 0x0500002c, + 0x0519fa2b, 0x0502002e, 0x0539fc12, 0x0500002c, 0x4936600a, 0x4926601d, 0x64066407, 0x417a7800, - 0x0519f86f, 0x05fdff2a, 0x600c0800, 0x0519f876, - 0x0545fc17, 0x49235045, 0x4923c857, 0x59240005, + 0x0519f9ea, 0x05fdff29, 0x600c0800, 0x0519f9f1, + 0x0549f917, 0x49235048, 0x4923c857, 0x59240005, 0x82000500, 0x000000ff, 0x48024805, 0x916c0583, - 0x05000004, 0x59a80044, 0x80000000, 0x48035044, - 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f800, + 0x05000004, 0x59a80047, 0x80000000, 0x48035047, + 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f839, 0x59240200, 0x82000500, 0xffffff9d, 0x8400054e, - 0x8400055e, 0x59a80ccc, 0x8c04050a, 0x05000002, + 0x8400055e, 0x59a80cd1, 0x8c04050a, 0x05000002, 0x8400055e, 0x48024a00, 0x81224000, 0x91264c0d, - 0x8058b040, 0x05000004, 0x0555fc7f, 0x05fe077d, - 0x05fdf79d, 0x4a035045, 0x0000ffff, 0x5c00a000, + 0x8058b040, 0x05000004, 0x0559fb62, 0x05fe077d, + 0x05fdf79d, 0x4a035048, 0x0000ffff, 0x5c00a000, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4d300000, 0x4d440000, 0x4d340000, 0x61fa880f, - 0x42003000, 0x00fffffe, 0x0519f86e, 0x0502001c, - 0x0535ff5b, 0x0500001a, 0x4927c857, 0x4923c857, + 0x42003000, 0x00fffffe, 0x0519f9f1, 0x0502001c, + 0x0539fbd8, 0x0500001a, 0x4927c857, 0x4923c857, 0x497a6009, 0x4936600a, 0x4926601d, 0x64066407, - 0x600c0800, 0x0519f83c, 0x599c0208, 0x48026c12, - 0x600a7000, 0x0009f800, 0x59a80a49, 0x8c040506, + 0x600c0800, 0x0519f9b7, 0x599c0208, 0x48026c12, + 0x600a7000, 0x0009f839, 0x59a80a4c, 0x8c040506, 0x05020002, 0x497a4805, 0x59240200, 0x82000500, 0xffffff9d, 0x8400054e, 0x48024a00, 0x5c026800, 0x5c028800, 0x5c026000, 0x1c01f000, 0x80000580, 0x05fdf7fb, 0x4d200000, 0x4d240000, 0x4c580000, 0x4d340000, 0x4d300000, 0x4d3c0000, 0x4d380000, - 0x4d440000, 0x0519fc0b, 0x05020009, 0x051dfbdf, - 0x05000004, 0x59a81249, 0x8c080506, 0x05000003, + 0x4d440000, 0x0519fde5, 0x05020009, 0x051dfe31, + 0x05000004, 0x59a8124c, 0x8c080506, 0x05000003, 0x05fdff34, 0x0501f002, 0x0501f80a, 0x5c028800, 0x5c027000, 0x5c027800, 0x5c026000, 0x5c026800, 0x5c00b000, 0x5c024800, 0x5c024000, 0x1c01f000, - 0x4803c856, 0x4c600000, 0x0555fc16, 0x4200c000, - 0x0010e510, 0x50600000, 0x82024580, 0x0000ffff, - 0x05020004, 0x42024800, 0x0010e512, 0x0501f008, + 0x4803c856, 0x4c600000, 0x0559faf9, 0x4200c000, + 0x001124b4, 0x50600000, 0x82024580, 0x0000ffff, + 0x05020004, 0x42024800, 0x001124b6, 0x0501f008, 0x8058b480, 0x05000026, 0x05001025, 0x40024000, - 0x82000400, 0x0010d17b, 0x50024800, 0x4520c000, + 0x82000400, 0x0010d8f9, 0x50024800, 0x4520c000, 0x59240005, 0x82000500, 0x000000ff, 0x48024805, 0x59240200, 0x90000503, 0x90000583, 0x0502000e, - 0x59240400, 0x8c000508, 0x0500000b, 0x59a800b2, + 0x59240400, 0x8c000508, 0x0500000b, 0x59a800b7, 0x8c000500, 0x05000003, 0x0501f813, 0x0501f002, - 0x0501f85e, 0x59a80045, 0x82000580, 0x0000ffff, + 0x0501f85e, 0x59a80048, 0x82000580, 0x0000ffff, 0x0502000b, 0x81224000, 0x91264c0d, 0x8058b040, 0x05fe07e7, 0x599c0019, 0x8c00050e, 0x05020004, - 0x59a800b2, 0x8c000500, 0x05020881, 0x5c00c000, + 0x59a800b7, 0x8c000500, 0x05020881, 0x5c00c000, 0x1c01f000, 0x4927c857, 0x4923c857, 0x4c580000, 0x4c100000, 0x4c0c0000, 0x4c080000, 0x4c040000, - 0x4d240000, 0x59243c08, 0x59a81845, 0x820c1580, + 0x4d240000, 0x59243c08, 0x59a81848, 0x820c1580, 0x0000ffff, 0x05020002, 0x60041800, 0x800c1104, - 0x82082400, 0x00110258, 0x50102000, 0x900c0503, - 0x0c01f001, 0x0010252d, 0x0010252f, 0x00102531, - 0x00102533, 0x40101000, 0x0501f006, 0x80101110, + 0x82082400, 0x001141fc, 0x50102000, 0x900c0503, + 0x0c01f001, 0x001025c5, 0x001025c7, 0x001025c9, + 0x001025cb, 0x40101000, 0x0501f006, 0x80101110, 0x0501f004, 0x80101120, 0x0501f002, 0x80101130, 0x4c0c0000, 0x82080500, 0x000000ff, 0x801c0d80, 0x05000019, 0x800001c0, 0x05000017, 0x40000800, - 0x82000580, 0x000000ff, 0x05000017, 0x0501f916, - 0x05000011, 0x40040000, 0x0525fb8c, 0x0502001c, - 0x0519f84b, 0x05000004, 0x05fdfd09, 0x05000018, + 0x82000580, 0x000000ff, 0x05000017, 0x0501f924, + 0x05000011, 0x40040000, 0x0525fea0, 0x0502001c, + 0x0519f9f0, 0x05000004, 0x05fdfd04, 0x05000018, 0x0501f009, 0x599c0019, 0x8c00050e, 0x05020006, - 0x0515ffc8, 0x05020012, 0x05fdfe51, 0x05fdfd19, - 0x0500000f, 0x5c001800, 0x480f5045, 0x800c1800, - 0x05fdf7cf, 0x5c001800, 0x4a035045, 0x0000ffff, + 0x0519f94b, 0x05020012, 0x05fdfe50, 0x05fdfd14, + 0x0500000f, 0x5c001800, 0x480f5048, 0x800c1800, + 0x05fdf7cf, 0x5c001800, 0x4a035048, 0x0000ffff, 0x5c024800, 0x5c000800, 0x5c001000, 0x5c001800, 0x5c002000, 0x5c00b000, 0x1c01f000, 0x5c001800, - 0x480f5045, 0x05fdf7f7, 0x4927c857, 0x4c5c0000, + 0x480f5048, 0x05fdf7f7, 0x4927c857, 0x4c5c0000, 0x4c580000, 0x4c540000, 0x61f8b000, 0x59243c08, - 0x59a80045, 0x82001580, 0x0000ffff, 0x05020003, + 0x59a80048, 0x82001580, 0x0000ffff, 0x05020003, 0x4178a800, 0x0501f004, 0x8058b480, 0x0500101e, - 0x4000a800, 0x48575045, 0x8254bc00, 0x00102853, + 0x4000a800, 0x48575048, 0x8254bc00, 0x001028fb, 0x505cb800, 0x825cbd00, 0x000000ff, 0x405c0800, - 0x0501f8dd, 0x05000011, 0x405c0000, 0x0525fb53, - 0x05020013, 0x0519f812, 0x05000004, 0x05fdfcd0, + 0x0501f8eb, 0x05000011, 0x405c0000, 0x0525fe67, + 0x05020013, 0x0519f9b7, 0x05000004, 0x05fdfccb, 0x0500000f, 0x0501f009, 0x599c0019, 0x8c00050e, - 0x05020006, 0x0515ff8f, 0x05020009, 0x05fdfe18, - 0x05fdfce0, 0x05000006, 0x8054a800, 0x8058b040, - 0x05fe07e5, 0x4a035045, 0x0000ffff, 0x5c00a800, + 0x05020006, 0x0519f912, 0x05020009, 0x05fdfe17, + 0x05fdfcdb, 0x05000006, 0x8054a800, 0x8058b040, + 0x05fe07e5, 0x4a035048, 0x0000ffff, 0x5c00a800, 0x5c00b000, 0x5c00b800, 0x1c01f000, 0x4c580000, - 0x4d440000, 0x61c0b00f, 0x80028d80, 0x0001fb00, + 0x4d440000, 0x59a8b0ac, 0x80028d80, 0x0001fb08, 0x05020018, 0x05fdfe41, 0x05000016, 0x4937c857, - 0x0519fcd5, 0x42026000, 0x00111a70, 0x4936600a, - 0x497a6009, 0x4926601d, 0x417a7800, 0x05fdfd89, - 0x42000000, 0x0010e454, 0x0555fa36, 0x59240400, + 0x0519ff06, 0x42026000, 0x00115a14, 0x4936600a, + 0x497a6009, 0x4926601d, 0x417a7800, 0x05fdfd88, + 0x42000000, 0x001123f8, 0x0559f919, 0x59240400, 0x8c00050a, 0x05020007, 0x41782800, 0x60203000, - 0x4d400000, 0x60a68000, 0x0551f9f8, 0x5c028000, - 0x81468800, 0x8058b040, 0x05fe07e5, 0x5c028800, + 0x4d400000, 0x60a68000, 0x0555f8a7, 0x5c028000, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07e1, 0x5c028800, 0x5c00b000, 0x1c01f000, 0x4927c857, 0x4c5c0000, 0x400cb800, 0x4d200000, 0x4d240000, 0x4c580000, - 0x0555fb38, 0x417a4000, 0x42024800, 0x0010e512, + 0x0559fa17, 0x417a4000, 0x42024800, 0x001124b6, 0x59240200, 0x8c000500, 0x0500000f, 0x8c5c0508, 0x05000004, 0x8400055a, 0x48024a00, 0x0501f00a, 0x82000500, 0x000000e0, 0x82000580, 0x000000e0, @@ -2458,10 +2497,10 @@ static const uint32_t isp_2500_risc_code[] = { 0x05fe07ec, 0x5c00b000, 0x5c024800, 0x5c024000, 0x5c00b800, 0x1c01f000, 0x4d200000, 0x4d240000, 0x4c580000, 0x4c5c0000, 0x400cb800, 0x485fc857, - 0x0555fb14, 0x8058b040, 0x0500001f, 0x60064000, - 0x42024800, 0x0010e51f, 0x59a80249, 0x8c000514, + 0x0559f9f3, 0x8058b040, 0x0500001f, 0x60064000, + 0x42024800, 0x001124c3, 0x59a8024c, 0x8c000514, 0x0500001e, 0x59241200, 0x8c080510, 0x05020012, - 0x8c080500, 0x05000010, 0x59a80acc, 0x5924000b, + 0x8c080500, 0x05000010, 0x59a80ad1, 0x5924000b, 0x82000500, 0x00001fff, 0x80040580, 0x0502000a, 0x8c08051e, 0x05020008, 0x8c5c0508, 0x05000004, 0x8408155a, 0x480a4a00, 0x0501f003, 0x0501f813, @@ -2470,149 +2509,152 @@ static const uint32_t isp_2500_risc_code[] = { 0x5c024000, 0x1c01f000, 0x497a4805, 0x59240200, 0x90000501, 0x48024a00, 0x91264c0d, 0x8058b040, 0x05fe07fa, 0x05fdf7f4, 0x4927c857, 0x4923c857, - 0x59a80249, 0x8c000514, 0x05000003, 0x0501f9e6, + 0x59a8024c, 0x8c000514, 0x05000003, 0x0501f9f1, 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4c580000, - 0x0555fadc, 0x417a4000, 0x42000800, 0x0010e512, + 0x0559f9bb, 0x417a4000, 0x42000800, 0x001124b6, 0x5930001d, 0x80040580, 0x05000006, 0x81224000, - 0x90040c0d, 0x8058b040, 0x05fe07fa, 0x05edffb7, + 0x90040c0d, 0x8058b040, 0x05fe07fa, 0x05edff56, 0x4933c857, 0x4923c857, 0x5c00b000, 0x1c01f000, - 0x4c580000, 0x0555facb, 0x417a4000, 0x42024800, - 0x0010e512, 0x59a81249, 0x8c080508, 0x0500000a, - 0x821c0d80, 0x00fffffe, 0x05000020, 0x8c08050c, - 0x0500001e, 0x59240005, 0x801c0580, 0x0500001b, - 0x0501f017, 0x90080528, 0x05020005, 0x59240005, - 0x82000500, 0x000000ff, 0x0501f008, 0x821c0580, - 0x00fffff0, 0x05000011, 0x59240200, 0x8c000500, - 0x05000004, 0x59240005, 0x801c0580, 0x0500000b, - 0x81224000, 0x91264c0d, 0x8058b040, 0x05000004, - 0x90080528, 0x05fe07f2, 0x05fdf7ed, 0x61fe41ff, - 0x90000541, 0x481fc856, 0x4923c857, 0x5c00b000, - 0x1c01f000, 0x4807c857, 0x4c580000, 0x0555fa9d, - 0x42006800, 0x0010e512, 0x58340005, 0x82000500, - 0x000000ff, 0x80040580, 0x05000005, 0x90346c0d, - 0x8058b040, 0x05fe07f9, 0x90000541, 0x5c00b000, - 0x1c01f000, 0x4923c857, 0x493fc857, 0x4c580000, - 0x4d400000, 0x4d440000, 0x4d340000, 0x4c5c0000, - 0x052dfea7, 0x4df00000, 0x61c0b00f, 0x417a8800, - 0x83440400, 0x0010d400, 0x50000000, 0x80026d40, - 0x0500001f, 0x59340013, 0x80000130, 0x81200580, - 0x0502001b, 0x60a68000, 0x833c0500, 0x00004000, - 0x052e0bc9, 0x052dfcce, 0x052dfd17, 0x052dfa9d, - 0x054dfff1, 0x8d3c051c, 0x05000004, 0x41240800, - 0x0519fc0c, 0x0501f00e, 0x8d3c0506, 0x05000004, - 0x59340200, 0x8c00050e, 0x05020009, 0x4937c857, - 0x0519f935, 0x497a6c0b, 0x4a026c00, 0x00000707, - 0x59240400, 0x8c00050a, 0x05160bf6, 0x81468800, - 0x8058b040, 0x05fe07db, 0x8d3c0502, 0x0500001f, - 0x6040b000, 0x5924b809, 0x505c0000, 0x80026d40, - 0x05000017, 0x59368c03, 0x833c0500, 0x00004000, - 0x052e0ba5, 0x052dfcaa, 0x052dfcf3, 0x052dfa79, - 0x054dffcd, 0x8d3c051c, 0x0502000b, 0x83440580, - 0x000007fe, 0x05020006, 0x59340813, 0x82040d00, - 0xff000000, 0x48066813, 0x0501f005, 0x0515fbd9, - 0x0501f003, 0x41240800, 0x0519fbde, 0x805cb800, - 0x8058b040, 0x05fe07e5, 0x4d300000, 0x61fe89ff, - 0x42026000, 0x00111a70, 0x4a02600a, 0x00110210, - 0x0519feee, 0x4926601d, 0x60a68000, 0x052dfc8c, - 0x054dffb1, 0x5c026000, 0x5c03e000, 0x052c0e41, - 0x5c00b800, 0x5c026800, 0x5c028800, 0x5c028000, - 0x5c00b000, 0x1c01f000, 0x4807c857, 0x4c580000, - 0x0555fa28, 0x42001000, 0x0010e512, 0x58080200, - 0x80040500, 0x48001200, 0x9008140d, 0x8058b040, - 0x05fe07fb, 0x5c00b000, 0x1c01f000, 0x4803c856, - 0x4d440000, 0x4d340000, 0x4c580000, 0x4c5c0000, - 0x6040b000, 0x61c2880f, 0x5924b809, 0x83440580, - 0x000007fe, 0x05000005, 0x505e6800, 0x813669c0, - 0x05000002, 0x0515fba3, 0x81468800, 0x805cb800, - 0x8058b040, 0x05fe07f6, 0x5c00b800, 0x5c00b000, - 0x5c026800, 0x5c028800, 0x1c01f000, 0x5c000000, - 0x4c000000, 0x4803c857, 0x4c5c0000, 0x4c600000, - 0x4c580000, 0x4d240000, 0x4d200000, 0x4178c000, - 0x59a804cc, 0x4803c857, 0x8c00050c, 0x0502001c, - 0x0555f9f8, 0x417a4000, 0x42024800, 0x0010e512, - 0x5924b80b, 0x825cbd00, 0x00001fff, 0x805cb9c0, - 0x0500000f, 0x405c1000, 0x0501f827, 0x05000017, - 0x916c0583, 0x0502000a, 0x59240200, 0x8c000500, - 0x05000007, 0x8c000502, 0x05020005, 0x8c00051e, - 0x05000003, 0x41780800, 0x0501f87f, 0x81224000, - 0x91264c0d, 0x8058b040, 0x05fe07ea, 0x8060c1c0, - 0x5c024000, 0x5c024800, 0x5c00b000, 0x5c00c000, - 0x5c00b800, 0x1c01f000, 0x405c1000, 0x480bc856, - 0x4d3c0000, 0x4d400000, 0x60aa8000, 0x600a7800, - 0x41780800, 0x813261c0, 0x05000002, 0x60400800, - 0x0501f81a, 0x5c028000, 0x5c027800, 0x8060c000, - 0x05fdf7e7, 0x5c000000, 0x4c000000, 0x4803c857, - 0x480bc857, 0x41780800, 0x60800000, 0x052df85b, - 0x4807c857, 0x607c1800, 0x40040000, 0x800c0480, - 0x82000c00, 0x0010d15b, 0x50040800, 0x4807c857, - 0x82080400, 0x00110672, 0x50000000, 0x4803c857, - 0x80040500, 0x1c01f000, 0x480bc857, 0x4d200000, - 0x4d240000, 0x4c580000, 0x4c5c0000, 0x4c600000, - 0x4008c000, 0x4004b800, 0x0555f9aa, 0x417a4000, - 0x42024800, 0x0010e512, 0x5924000b, 0x82000500, - 0x00001fff, 0x80600580, 0x05020013, 0x8c5c0506, - 0x0502000a, 0x05fdff10, 0x497a4805, 0x8c5c0508, - 0x0500000d, 0x60643000, 0x61fc19ff, 0x601c2000, - 0x0511f8ec, 0x0501f008, 0x8c640502, 0x05020005, - 0x05fdff05, 0x497a4805, 0x497a480b, 0x0501f002, - 0x0521fa84, 0x81224000, 0x91264c0d, 0x8058b040, - 0x05fe07e6, 0x5c00c000, 0x5c00b800, 0x5c00b000, - 0x5c024800, 0x5c024000, 0x1c01f000, 0x4803c856, - 0x4c580000, 0x4d240000, 0x4d200000, 0x59a804cc, - 0x8c00050c, 0x05020018, 0x0555f97e, 0x8058b040, - 0x05000015, 0x60064000, 0x42024800, 0x0010e51f, - 0x59240200, 0x8c00051e, 0x0500000b, 0x8c00050e, - 0x05020009, 0x59a802cc, 0x5924080b, 0x82040d00, - 0x00001fff, 0x80040580, 0x05000003, 0x41780800, - 0x0501f809, 0x91264c0d, 0x81224000, 0x8058b040, - 0x05fe07f0, 0x5c024000, 0x5c024800, 0x5c00b000, - 0x1c01f000, 0x4d300000, 0x4d440000, 0x4c040000, - 0x61fa880f, 0x42003000, 0x00fffffe, 0x0515fd7d, - 0x05020018, 0x0535fc6a, 0x05000016, 0x5c000800, - 0x48066009, 0x4936600a, 0x4926601d, 0x64066407, - 0x600c0800, 0x0515fd4c, 0x599c0208, 0x48026c12, - 0x600a7000, 0x0009f800, 0x497a4805, 0x59240200, - 0x82000500, 0xffffff9d, 0x82000540, 0x00008080, - 0x48024a00, 0x5c028800, 0x5c026000, 0x1c01f000, - 0x5c000800, 0x05fdf7fc, 0x480bc857, 0x4c5c0000, - 0x4c580000, 0x4d200000, 0x4d240000, 0x0555f93d, - 0x8058b040, 0x0500001c, 0x4008b800, 0x60064000, - 0x42024800, 0x0010e51f, 0x59240200, 0x8c000500, - 0x05000011, 0x82000500, 0x00008100, 0x0502000e, - 0x5924000b, 0x82000500, 0x00001fff, 0x05000005, - 0x805c0580, 0x05020008, 0x0501f82f, 0x0501f006, - 0x42001000, 0x0010e512, 0x5808000b, 0x4802480b, - 0x0501f829, 0x81224000, 0x91264c0d, 0x8058b040, - 0x05fe07ea, 0x5c024800, 0x5c024000, 0x5c00b000, - 0x5c00b800, 0x1c01f000, 0x480bc857, 0x4c580000, - 0x4c600000, 0x4008c000, 0x0555f916, 0x42001800, - 0x0010e512, 0x580c000b, 0x82000500, 0x00001fff, - 0x80600580, 0x0502000e, 0x81240583, 0x0500000c, - 0x580c0a00, 0x90040503, 0x90000583, 0x05020008, - 0x82040d40, 0x000080e0, 0x48041a00, 0x5924080c, - 0x497a480c, 0x4804180c, 0x0501f004, 0x900c1c0d, - 0x8058b040, 0x05fe07ec, 0x5c00c000, 0x5c00b000, - 0x1c01f000, 0x4923c857, 0x61fa880f, 0x42003000, - 0x00fffffe, 0x0515fd17, 0x05020011, 0x599c0208, - 0x48026c12, 0x4d2c0000, 0x417a5800, 0x0545fa54, - 0x5c025800, 0x0500000a, 0x59a800bb, 0x80000000, - 0x480350bb, 0x59240200, 0x84000550, 0x84000512, + 0x4c580000, 0x0559f9aa, 0x417a4000, 0x42024800, + 0x001124b6, 0x59a8124c, 0x8c080508, 0x05000013, + 0x821c0d80, 0x00fffffe, 0x0502000a, 0x0559f9c1, + 0x05000028, 0x60040900, 0x0501fa0b, 0x05000022, + 0x40124800, 0x40164000, 0x80000580, 0x0501f021, + 0x8c08050c, 0x0500001f, 0x59240005, 0x801c0580, + 0x0500001c, 0x0501f018, 0x90080528, 0x05020005, + 0x59240005, 0x82000500, 0x000000ff, 0x0501f009, + 0x821c0580, 0x00fffff0, 0x05000012, 0x59240200, + 0x90000503, 0x90000583, 0x05020004, 0x59240005, + 0x801c0580, 0x0500000b, 0x81224000, 0x91264c0d, + 0x8058b040, 0x05000004, 0x90080528, 0x05fe07f1, + 0x05fdf7ec, 0x61fe41ff, 0x90000541, 0x481fc856, + 0x4923c857, 0x5c00b000, 0x1c01f000, 0x4807c857, + 0x4c580000, 0x0559f972, 0x42006800, 0x001124b6, + 0x58340005, 0x82000500, 0x000000ff, 0x80040580, + 0x05000005, 0x90346c0d, 0x8058b040, 0x05fe07f9, + 0x90000541, 0x5c00b000, 0x1c01f000, 0x4923c857, + 0x493fc857, 0x4c580000, 0x4d400000, 0x4d440000, + 0x4d340000, 0x4c5c0000, 0x0531fabf, 0x4df00000, + 0x59a8b0ac, 0x417a8800, 0x0001fb08, 0x0502001f, + 0x59340013, 0x80000130, 0x81200580, 0x0502001b, + 0x60a68000, 0x833c0500, 0x00004000, 0x052e0fdf, + 0x0531f8ea, 0x0531f933, 0x052dfeb3, 0x0551fe65, + 0x8d3c051c, 0x05000004, 0x41240800, 0x0519fe38, + 0x0501f00e, 0x8d3c0506, 0x05000004, 0x59340200, + 0x8c00050e, 0x05020009, 0x4937c857, 0x0519fafc, + 0x497a6c0b, 0x4a026c00, 0x00000707, 0x59240400, + 0x8c00050a, 0x05160d4a, 0x81468800, 0x83440580, + 0x000007f0, 0x05020002, 0x60028810, 0x8058b040, + 0x05fe07da, 0x8d3c0502, 0x0500001f, 0x6040b000, + 0x5924b809, 0x505c0000, 0x80026d40, 0x05000017, + 0x59368c03, 0x833c0500, 0x00004000, 0x052e0fb7, + 0x0531f8c2, 0x0531f90b, 0x052dfe8b, 0x0551fe3d, + 0x8d3c051c, 0x0502000b, 0x83440580, 0x000007fe, + 0x05020006, 0x59340813, 0x82040d00, 0xff000000, + 0x48066813, 0x0501f005, 0x0515fd29, 0x0501f003, + 0x41240800, 0x0519fe06, 0x805cb800, 0x8058b040, + 0x05fe07e5, 0x4d300000, 0x61fe89ff, 0x42026000, + 0x00115a14, 0x4a02600a, 0x001141b4, 0x051df91c, + 0x4926601d, 0x60a68000, 0x0531f8a4, 0x0551fe21, + 0x5c026000, 0x5c03e000, 0x05300a58, 0x5c00b800, + 0x5c026800, 0x5c028800, 0x5c028000, 0x5c00b000, + 0x1c01f000, 0x4807c857, 0x4c580000, 0x0559f8fc, + 0x42001000, 0x001124b6, 0x58080200, 0x80040500, + 0x48001200, 0x9008140d, 0x8058b040, 0x05fe07fb, + 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4d440000, + 0x4d340000, 0x4c580000, 0x4c5c0000, 0x6040b000, + 0x61c2880f, 0x5924b809, 0x83440580, 0x000007fe, + 0x05000005, 0x505e6800, 0x813669c0, 0x05000002, + 0x0515fcf3, 0x81468800, 0x805cb800, 0x8058b040, + 0x05fe07f6, 0x5c00b800, 0x5c00b000, 0x5c026800, + 0x5c028800, 0x1c01f000, 0x5c000000, 0x4c000000, + 0x4803c857, 0x4c5c0000, 0x4c600000, 0x4c580000, + 0x4d240000, 0x4d200000, 0x4178c000, 0x59a804d1, + 0x4803c857, 0x8c00050c, 0x0502001c, 0x0559f8cc, + 0x417a4000, 0x42024800, 0x001124b6, 0x5924b80b, + 0x825cbd00, 0x00001fff, 0x805cb9c0, 0x0500000f, + 0x405c1000, 0x0501f827, 0x05000017, 0x916c0583, + 0x0502000a, 0x59240200, 0x8c000500, 0x05000007, + 0x8c000502, 0x05020005, 0x8c00051e, 0x05000003, + 0x41780800, 0x0501f87f, 0x81224000, 0x91264c0d, + 0x8058b040, 0x05fe07ea, 0x8060c1c0, 0x5c024000, + 0x5c024800, 0x5c00b000, 0x5c00c000, 0x5c00b800, + 0x1c01f000, 0x405c1000, 0x480bc856, 0x4d3c0000, + 0x4d400000, 0x60aa8000, 0x600a7800, 0x41780800, + 0x813261c0, 0x05000002, 0x60400800, 0x0501f81a, + 0x5c028000, 0x5c027800, 0x8060c000, 0x05fdf7e7, + 0x5c000000, 0x4c000000, 0x4803c857, 0x480bc857, + 0x41780800, 0x60800000, 0x052dfc6d, 0x4807c857, + 0x607c1800, 0x40040000, 0x800c0480, 0x82000c00, + 0x0010d8d9, 0x50040800, 0x4807c857, 0x82080400, + 0x00114616, 0x50000000, 0x4803c857, 0x80040500, + 0x1c01f000, 0x480bc857, 0x4d200000, 0x4d240000, + 0x4c580000, 0x4c5c0000, 0x4c600000, 0x4008c000, + 0x4004b800, 0x0559f87e, 0x417a4000, 0x42024800, + 0x001124b6, 0x5924000b, 0x82000500, 0x00001fff, + 0x80600580, 0x05020013, 0x8c5c0506, 0x0502000a, + 0x05fdff0f, 0x497a4805, 0x8c5c0508, 0x0500000d, + 0x60643000, 0x61fc19ff, 0x601c2000, 0x0511f9e2, + 0x0501f008, 0x8c640502, 0x05020005, 0x05fdff04, + 0x497a4805, 0x497a480b, 0x0501f002, 0x0521fd19, + 0x81224000, 0x91264c0d, 0x8058b040, 0x05fe07e6, + 0x5c00c000, 0x5c00b800, 0x5c00b000, 0x5c024800, + 0x5c024000, 0x1c01f000, 0x4803c856, 0x4c580000, + 0x4d240000, 0x4d200000, 0x59a804d1, 0x8c00050c, + 0x05020018, 0x0559f852, 0x8058b040, 0x05000015, + 0x60064000, 0x42024800, 0x001124c3, 0x59240200, + 0x8c00051e, 0x0500000b, 0x8c00050e, 0x05020009, + 0x59a802d1, 0x5924080b, 0x82040d00, 0x00001fff, + 0x80040580, 0x05000003, 0x41780800, 0x0501f809, + 0x91264c0d, 0x81224000, 0x8058b040, 0x05fe07f0, + 0x5c024000, 0x5c024800, 0x5c00b000, 0x1c01f000, + 0x4d300000, 0x4d440000, 0x4c040000, 0x61fa880f, + 0x42003000, 0x00fffffe, 0x0515fef1, 0x05020018, + 0x0539f8d8, 0x05000016, 0x5c000800, 0x48066009, + 0x4936600a, 0x4926601d, 0x64066407, 0x600c0800, + 0x0515feb8, 0x599c0208, 0x48026c12, 0x600a7000, + 0x0009f839, 0x497a4805, 0x59240200, 0x82000500, + 0xffffff9d, 0x82000540, 0x00008080, 0x48024a00, + 0x5c028800, 0x5c026000, 0x1c01f000, 0x5c000800, + 0x05fdf7fc, 0x480bc857, 0x4c5c0000, 0x4c580000, + 0x4d200000, 0x4d240000, 0x0559f811, 0x8058b040, + 0x0500001c, 0x4008b800, 0x60064000, 0x42024800, + 0x001124c3, 0x59240200, 0x8c000500, 0x05000011, + 0x82000500, 0x00008100, 0x0502000e, 0x5924000b, + 0x82000500, 0x00001fff, 0x05000005, 0x805c0580, + 0x05020008, 0x0501f82f, 0x0501f006, 0x42001000, + 0x001124b6, 0x5808000b, 0x4802480b, 0x0501f829, + 0x81224000, 0x91264c0d, 0x8058b040, 0x05fe07ea, + 0x5c024800, 0x5c024000, 0x5c00b000, 0x5c00b800, + 0x1c01f000, 0x480bc857, 0x4c580000, 0x4c600000, + 0x4008c000, 0x0555ffea, 0x42001800, 0x001124b6, + 0x580c000b, 0x82000500, 0x00001fff, 0x80600580, + 0x0502000e, 0x81240583, 0x0500000c, 0x580c0a00, + 0x90040503, 0x90000583, 0x05020008, 0x82040d40, + 0x000080e0, 0x48041a00, 0x5924080c, 0x497a480c, + 0x4804180c, 0x0501f004, 0x900c1c0d, 0x8058b040, + 0x05fe07ec, 0x5c00c000, 0x5c00b000, 0x1c01f000, + 0x4923c857, 0x61fa880f, 0x42003000, 0x00fffffe, + 0x0515fe8b, 0x05020012, 0x599c0208, 0x48026c12, + 0x4d2c0000, 0x417a5800, 0x0545ff4c, 0x5c025800, + 0x0500000b, 0x59a800c0, 0x80000000, 0x480350c0, + 0x59240200, 0x82000500, 0xfffffd1d, 0x84000550, 0x48024a00, 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4923c857, 0x4d300000, 0x4d440000, - 0x61fa880f, 0x42003000, 0x00fffffe, 0x0515fcfd, - 0x0502001b, 0x0535fbea, 0x05000019, 0x497a6009, + 0x61fa880f, 0x42003000, 0x00fffffe, 0x0515fe70, + 0x0502001b, 0x0539f857, 0x05000019, 0x497a6009, 0x4936600a, 0x4926601d, 0x64066407, 0x600c0800, - 0x0515fccd, 0x599c0208, 0x48026c12, 0x600a7000, - 0x0009f800, 0x59240200, 0x4927c857, 0x82000500, - 0xffffff9d, 0x8400054e, 0x48024a00, 0x59a80249, - 0x82000500, 0xffffdafc, 0x8400054e, 0x48035249, + 0x0515fe38, 0x599c0208, 0x48026c12, 0x600a7000, + 0x0009f839, 0x59240200, 0x4927c857, 0x82000500, + 0xffffff9d, 0x8400054e, 0x48024a00, 0x59a8024c, + 0x82000500, 0xffffdafc, 0x8400054e, 0x4803524c, 0x5c028800, 0x5c026000, 0x1c01f000, 0x80000580, - 0x05fdf7fc, 0x4c580000, 0x4807c857, 0x0555f8bd, - 0x41782800, 0x42002000, 0x0010e512, 0x58100200, + 0x05fdf7fc, 0x4c580000, 0x4807c857, 0x0555ff90, + 0x41782800, 0x42002000, 0x001124b6, 0x58100200, 0x80040500, 0x80040580, 0x05000007, 0x80142800, 0x9010240d, 0x8058b040, 0x05fe07f9, 0x5c00b000, 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4c580000, - 0x0555f8ac, 0x42001000, 0x0010e512, 0x58080200, + 0x0555ff7f, 0x42001000, 0x001124b6, 0x58080200, 0x8c00051a, 0x05020004, 0x9008140d, 0x8058b040, 0x05fe07fb, 0x5c00b000, 0x1c01f000, 0x00007eef, 0x00007de8, 0x00007ce4, 0x000080e2, 0x00007be1, @@ -2678,74 +2720,74 @@ static const uint32_t isp_2500_risc_code[] = { 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, 0x00008000, - 0x00008000, 0x00008000, 0x00008000, 0x05f1f81e, - 0x05ec0c86, 0x492f4017, 0x1c01f000, 0x91a0ac07, - 0x83a00580, 0x0010dceb, 0x05000008, 0x492fc857, - 0x812e59c0, 0x05ec0c7d, 0x912ca40a, 0x6034b000, - 0x0551ff47, 0x0501f00d, 0x6040b000, 0x91e0a420, + 0x00008000, 0x00008000, 0x00008000, 0x05edffad, + 0x05ec0c19, 0x492f4017, 0x1c01f000, 0x91a0ac07, + 0x83a00580, 0x00111c71, 0x05000008, 0x492fc857, + 0x812e59c0, 0x05ec0c10, 0x912ca40a, 0x6034b000, + 0x0555fe1a, 0x0501f00d, 0x6040b000, 0x91e0a420, 0x50500000, 0x8050a000, 0x50500800, 0x900409c0, 0x80040540, 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07f7, 0x1c01f000, 0x42000000, - 0x0010e3bc, 0x0551fe6e, 0x59a00207, 0xb0000cbf, - 0x050210ba, 0x0c01f001, 0x001029f8, 0x00102a2e, - 0x00102a2e, 0x00102a7a, 0x00102a8f, 0x00102a2e, - 0x001029f8, 0x00102aa6, 0x00102ab7, 0x00102a2e, - 0x00102a2e, 0x00102ad0, 0x00102aef, 0x00102b0e, - 0x00102a2e, 0x00102b2b, 0x00102a2e, 0x00102a2e, - 0x00102b4b, 0x00102a2e, 0x00102c08, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102c2f, - 0x00102c8a, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102cd8, 0x00102cf9, 0x00102f40, 0x00102a2e, - 0x00102f8d, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102f92, 0x00103094, 0x00102a2e, - 0x0010309b, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x0010309c, 0x0010315f, - 0x00103360, 0x0010336c, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x0010337f, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x001033a8, 0x001033ea, - 0x00103432, 0x00103449, 0x00103461, 0x001036ae, - 0x00103a28, 0x00102a2e, 0x00103f5d, 0x00103b98, - 0x00103bcd, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00103be8, 0x00103c39, 0x00102a2e, - 0x00102a2e, 0x00103c8d, 0x00102a2e, 0x00103d05, - 0x00103dba, 0x00103e61, 0x00102a2e, 0x00103e8f, - 0x00103f19, 0x00102a2e, 0x00103f5d, 0x001042c2, - 0x00102a2e, 0x001042d1, 0x0010434b, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x001043a8, - 0x001043c2, 0x001043db, 0x00102a2e, 0x0010444d, - 0x00102a2e, 0x00102a2e, 0x00104491, 0x00102a2e, - 0x001044b5, 0x00102a2e, 0x00102a2e, 0x0010450c, - 0x00104639, 0x00102a2e, 0x00102a2e, 0x00102a2e, - 0x00102a2e, 0x00102a2e, 0x0010467b, 0x001046fa, - 0x00102a2e, 0x48efc857, 0x0509fc65, 0x0500003b, - 0x48efc857, 0x4a034207, 0x00004000, 0x050dfdb6, - 0x83a00580, 0x0010dceb, 0x0500000b, 0x58ee580a, - 0x4d2c0000, 0x0501f852, 0x41a25800, 0x05edff8f, - 0x40ee5800, 0x05edff8d, 0x5c025800, 0x492fc857, - 0x0001f382, 0x05026007, 0x59a0001e, 0x84000542, - 0x4803401e, 0x4a01d809, 0x00102a09, 0x1c01f000, + 0x0011235d, 0x0555fd41, 0x59a00207, 0xb0000cbf, + 0x050210ba, 0x0c01f001, 0x00102aa0, 0x00102ad6, + 0x00102ad6, 0x00102b22, 0x00102b37, 0x00102ad6, + 0x00102aa0, 0x00102b4e, 0x00102b5f, 0x00102ad6, + 0x00102ad6, 0x00102b79, 0x00102b98, 0x00102bb7, + 0x00102ad6, 0x00102bd4, 0x00102ad6, 0x00102ad6, + 0x00102bf4, 0x00102ad6, 0x00102cb0, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x00102ad6, 0x00102cd7, + 0x00102d32, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102d80, 0x00102da1, 0x00102feb, 0x00102ad6, + 0x00103038, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x0010303d, 0x0010313c, 0x00102ad6, + 0x00103143, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x00103144, 0x00103207, + 0x0010348c, 0x00103498, 0x00104cec, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x001034ab, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x001034f5, 0x00103537, + 0x0010357f, 0x00103594, 0x001035ac, 0x001037f9, + 0x00103b9b, 0x00102ad6, 0x001040d3, 0x00103d0b, + 0x00103d40, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x00103d5b, 0x00103dac, 0x00102ad6, + 0x00102ad6, 0x00103e00, 0x00102ad6, 0x00103e78, + 0x00103f2d, 0x00103fd7, 0x00102ad6, 0x00104005, + 0x0010408f, 0x00102ad6, 0x001040d3, 0x00104441, + 0x00102ad6, 0x00104450, 0x001044cc, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x00102ad6, 0x0010452c, + 0x00104546, 0x0010455f, 0x00102ad6, 0x001045d1, + 0x00102ad6, 0x00102ad6, 0x00104621, 0x00102ad6, + 0x00104645, 0x00102ad6, 0x00102ad6, 0x0010469c, + 0x001047db, 0x00102ad6, 0x00102ad6, 0x00102ad6, + 0x00102ad6, 0x00102ad6, 0x0010481d, 0x0010489c, + 0x00102ad6, 0x48efc857, 0x0509fd33, 0x0500003b, + 0x48efc857, 0x4a034207, 0x00004000, 0x050dfeb0, + 0x83a00580, 0x00111c71, 0x0500000b, 0x58ee580a, + 0x4d2c0000, 0x0501f852, 0x41a25800, 0x05edff1e, + 0x40ee5800, 0x05edff1c, 0x5c025800, 0x492fc857, + 0x0001f3a8, 0x05026007, 0x59a0001e, 0x84000542, + 0x4803401e, 0x4a01d809, 0x00102ab1, 0x1c01f000, 0x59a00207, 0x82000d80, 0x00004000, 0x05000005, 0x900001c0, 0x90000551, 0x4803c011, 0x0501f004, 0x900001c0, 0x90000550, 0x4803c011, 0x0501f846, - 0x59e00017, 0x8c00050a, 0x60000800, 0x00020892, - 0x8d0c0530, 0x05f60ca4, 0x000209bc, 0x6403c017, + 0x59e00017, 0x8c00050a, 0x60000800, 0x0002089a, + 0x8d0c0530, 0x05f60c6d, 0x000209c4, 0x6403c017, 0x4203e000, 0x30000001, 0x4203e000, 0x40000000, - 0x40ee5800, 0x05edff69, 0x59a0001e, 0x84000504, + 0x40ee5800, 0x05edfef8, 0x59a0001e, 0x84000504, 0x4803401e, 0x1c01f000, 0x4803c856, 0x4a034207, 0x00004001, 0x05fdf7ca, 0x4803c856, 0x4a034207, 0x00004002, 0x05fdf7c6, 0x4803c856, 0x4a034207, - 0x00004003, 0x05fdf7c2, 0x05f9ff55, 0x4803c856, - 0x4a034207, 0x00004005, 0x05fdf7bd, 0x05f9ff50, + 0x00004003, 0x05fdf7c2, 0x05f9ff2d, 0x4803c856, + 0x4a034207, 0x00004005, 0x05fdf7bd, 0x05f9ff28, 0x4803c856, 0x4a034207, 0x00004006, 0x05fdf7b8, 0x4803c856, 0x4a034207, 0x0000400b, 0x05fdf7b4, 0x4803c856, 0x4a034207, 0x0000400c, 0x05fdf7b0, 0x4803c856, 0x4a034207, 0x0000400c, 0x05fdf7ac, 0x4a034207, 0x00004020, 0x05fdf7a9, 0x4c580000, 0x4c500000, 0x4c540000, 0x58eca80a, 0x8054a9c0, - 0x05ec0b82, 0x91a0a407, 0x9054ac0a, 0x6034b000, - 0x0551fe4b, 0x5c00a800, 0x5c00a000, 0x5c00b000, + 0x05ec0b15, 0x91a0a407, 0x9054ac0a, 0x6034b000, + 0x0555fd1e, 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000, 0x4c580000, 0x4c500000, 0x4c540000, 0x59a00007, 0x4803c857, 0x59a00008, 0x4803c857, 0x59a00009, 0x4803c857, 0x91e0ac20, 0x91a0a407, @@ -2755,11 +2797,11 @@ static const uint32_t isp_2500_risc_code[] = { 0x5c00b000, 0x1c01f000, 0x59a00407, 0x800000c2, 0x59a00a08, 0x900409c0, 0x80040540, 0x84000540, 0x59a00c08, 0x8c040500, 0x0500000b, 0x4c000000, - 0x0551fe7b, 0x5c000000, 0x05000004, 0x48030004, + 0x0555fd4e, 0x5c000000, 0x05000004, 0x48030004, 0x64030000, 0x05fdf76f, 0x64030000, 0x64134407, 0x05fc07af, 0x4803880e, 0x05fdf76a, 0x59a00407, 0x800000c2, 0x59a00c08, 0x8c040500, 0x0500000d, - 0x4c000000, 0x0551fe6a, 0x5c000000, 0x05000006, + 0x4c000000, 0x0555fd3d, 0x5c000000, 0x05000006, 0x48030004, 0x59800805, 0x48074407, 0x64030000, 0x05fdf75c, 0x64030000, 0x64134407, 0x05fc079c, 0x4803880e, 0x59c4080f, 0x48074407, 0x900409c0, @@ -2767,103 +2809,103 @@ static const uint32_t isp_2500_risc_code[] = { 0x900c19c0, 0x800c1d40, 0x580c0803, 0x80000580, 0x500c1000, 0x80080400, 0x800c1800, 0x80040840, 0x05fe07fc, 0x48034407, 0x900001c0, 0x48034208, - 0x800001c0, 0x05fc0743, 0x05fdf780, 0x641f4407, + 0x800001c0, 0x05fc0743, 0x05fdf780, 0x64234407, 0x640f4208, 0x64034408, 0x59a8000a, 0x82000c80, 0x00140000, 0x05021004, 0x42000000, 0x0013ffff, - 0x0501f006, 0x59a808ca, 0x8c040500, 0x05000003, + 0x0501f006, 0x59a808cf, 0x8c040500, 0x05000003, 0x82000400, 0x00006000, 0x48034209, 0x900001c0, - 0x48034409, 0x61540121, 0x4803420a, 0x900001c0, - 0x4803440e, 0x60000000, 0x4803400f, 0x05fdf729, + 0x48034409, 0x42000000, 0x001090d5, 0x4803420a, + 0x900001c0, 0x4803440e, 0x60000000, 0x4803400f, + 0x05fdf728, 0x59a00408, 0x59a01208, 0x900811c0, + 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, + 0x800c1d40, 0x59a00a09, 0x59a00409, 0x900409c0, + 0x80040d40, 0x59a0020b, 0x59a02407, 0x900001c0, + 0x80100540, 0x82002480, 0x00100000, 0x05fc175d, + 0x59a8280a, 0x80142480, 0x050e15d3, 0x42002800, + 0x7fefffff, 0x80142480, 0x05fe1756, 0x42002800, + 0x7ffd0000, 0x80142480, 0x05fc1752, 0x050df5ca, 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a00a09, 0x59a00409, 0x900409c0, 0x80040d40, 0x59a0020b, 0x59a02407, 0x900001c0, 0x80100540, - 0x82002480, 0x00100000, 0x05fc175e, 0x59a8280a, - 0x80142480, 0x050e14da, 0x42002800, 0x7fefffff, - 0x80142480, 0x05fe1757, 0x42002800, 0x7ffd0000, - 0x80142480, 0x05fc1753, 0x050df4d1, 0x59a00408, - 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, - 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a00a09, - 0x59a00409, 0x900409c0, 0x80040d40, 0x59a0020b, - 0x59a02407, 0x900001c0, 0x80100540, 0x82002480, - 0x00100000, 0x05fc173f, 0x59a8280a, 0x80142480, - 0x050e14c4, 0x42002800, 0x7fefffff, 0x80142480, - 0x05fe1738, 0x42002800, 0x7ffd0000, 0x80142480, - 0x05fc1734, 0x050df4bb, 0x59a02408, 0x59a00208, - 0x901021c0, 0x80102540, 0x59a01a0b, 0x59a00407, - 0x900c19c0, 0x800c1d40, 0x41781000, 0x820c0580, - 0x00007c00, 0x0500000a, 0x820c0480, 0x00007a00, - 0x05001007, 0x820c0480, 0x00007cff, 0x05021004, - 0x0551fddf, 0x05000007, 0x80081000, 0x44101800, - 0x800811c0, 0x05fc06d3, 0x64030000, 0x05fdf6d1, - 0x64030000, 0x64134407, 0x05fdf711, 0x59a01a0b, + 0x82002480, 0x00100000, 0x05fc173e, 0x59a8280a, + 0x80142480, 0x050e15bd, 0x42002800, 0x7fefffff, + 0x80142480, 0x05fe1737, 0x42002800, 0x7ffd0000, + 0x80142480, 0x05fc1733, 0x050df5b4, 0x59a02408, + 0x59a00208, 0x901021c0, 0x80102540, 0x59a01a0b, 0x59a00407, 0x900c19c0, 0x800c1d40, 0x41781000, 0x820c0580, 0x00007c00, 0x0500000a, 0x820c0480, 0x00007a00, 0x05001007, 0x820c0480, 0x00007cff, - 0x05021004, 0x0551fdc6, 0x0500000e, 0x80081000, - 0x500c0000, 0x82000d00, 0x0000ffff, 0x48074208, - 0x82000d00, 0xffff0000, 0x900409c0, 0x48074408, - 0x800811c0, 0x05fc06b3, 0x64030000, 0x05fdf6b1, - 0x64030000, 0x64134407, 0x05fdf6f1, 0x4d2c0000, - 0x4d340000, 0x4d300000, 0x4d440000, 0x050dfd36, - 0x05020006, 0x4923c857, 0x4927c857, 0x59a28c07, - 0x0515ff25, 0x05000006, 0x5c028800, 0x5c026000, - 0x5c026800, 0x5c025800, 0x05fdf6e6, 0x4937c857, - 0x59a04408, 0x59a00208, 0x900001c0, 0x80204540, - 0x4823c857, 0x59a04a0b, 0x0501f877, 0x05000008, - 0x64074209, 0x4a034407, 0x0000ffff, 0x4a034208, - 0x0000ffff, 0x497b4408, 0x0501f03d, 0x497b4407, - 0x0501f87e, 0x0500003f, 0x59300402, 0x48034407, - 0x59300202, 0x48034208, 0x59300006, 0x48034408, - 0x59a0020c, 0x8c000500, 0x05000030, 0x4933c857, - 0x0515feb9, 0x05000003, 0x64274407, 0x0501f031, - 0x8d0c050e, 0x05000003, 0x64074407, 0x0501f02d, - 0x916c0583, 0x05000003, 0x641f4407, 0x0501f029, - 0x59340200, 0x8c00050e, 0x05000003, 0x64834407, - 0x0501f024, 0x59300407, 0x90000d83, 0x05020007, - 0x59300804, 0x9004051f, 0x90000584, 0x05020003, - 0x8c04053e, 0x05020015, 0x050dfc0d, 0x05020003, - 0x640b4407, 0x0501f017, 0x492fc857, 0x4a025c08, - 0x00008000, 0x497a5a08, 0x497a5809, 0x0545fb53, - 0x05020003, 0x640f4407, 0x0501f00e, 0x4a01d809, - 0x00102bb1, 0x5c028800, 0x5c026000, 0x5c026800, - 0x5c025800, 0x1c01f000, 0x640b4209, 0x5c028800, - 0x5c026000, 0x5c026800, 0x5c025800, 0x05fdf64d, + 0x05021004, 0x0555fcb1, 0x05000007, 0x80081000, + 0x44101800, 0x800811c0, 0x05fc06d2, 0x64030000, + 0x05fdf6d0, 0x64030000, 0x64134407, 0x05fdf710, + 0x59a01a0b, 0x59a00407, 0x900c19c0, 0x800c1d40, + 0x41781000, 0x820c0580, 0x00007c00, 0x0500000a, + 0x820c0480, 0x00007a00, 0x05001007, 0x820c0480, + 0x00007cff, 0x05021004, 0x0555fc98, 0x0500000e, + 0x80081000, 0x500c0000, 0x82000d00, 0x0000ffff, + 0x48074208, 0x82000d00, 0xffff0000, 0x900409c0, + 0x48074408, 0x800811c0, 0x05fc06b2, 0x64030000, + 0x05fdf6b0, 0x64030000, 0x64134407, 0x05fdf6f0, + 0x4d2c0000, 0x4d340000, 0x4d300000, 0x4d440000, + 0x050dfe2a, 0x05020006, 0x4923c857, 0x4927c857, + 0x59a28c07, 0x0519f945, 0x05000006, 0x5c028800, + 0x5c026000, 0x5c026800, 0x5c025800, 0x05fdf6e5, + 0x4937c857, 0x59a04408, 0x59a00208, 0x900001c0, + 0x80204540, 0x4823c857, 0x59a04a0b, 0x0501f877, + 0x05000008, 0x64074209, 0x4a034407, 0x0000ffff, + 0x4a034208, 0x0000ffff, 0x497b4408, 0x0501f03d, + 0x497b4407, 0x0501f87e, 0x0500003f, 0x59300402, + 0x48034407, 0x59300202, 0x48034208, 0x59300006, + 0x48034408, 0x59a0020c, 0x8c000500, 0x05000030, + 0x4933c857, 0x0519f8d9, 0x05000003, 0x64274407, + 0x0501f031, 0x8d0c050e, 0x05000003, 0x64074407, + 0x0501f02d, 0x916c0583, 0x05000003, 0x641f4407, + 0x0501f029, 0x59340200, 0x8c00050e, 0x05000003, + 0x64834407, 0x0501f024, 0x59300407, 0x90000d83, + 0x05020007, 0x59300804, 0x9004051f, 0x90000584, + 0x05020003, 0x8c04053e, 0x05020015, 0x050dfd06, + 0x05020003, 0x640b4407, 0x0501f017, 0x492fc857, + 0x4a025c08, 0x00008000, 0x497a5a08, 0x497a5809, + 0x0549f85b, 0x05020003, 0x640f4407, 0x0501f00e, + 0x4a01d809, 0x00102c5a, 0x5c028800, 0x5c026000, + 0x5c026800, 0x5c025800, 0x1c01f000, 0x640b4209, 0x5c028800, 0x5c026000, 0x5c026800, 0x5c025800, - 0x05fdf68b, 0x492fc857, 0x4933c857, 0x497a602a, - 0x592c0009, 0x82000580, 0x01000000, 0x05020003, - 0x64134407, 0x05fdf682, 0x4d2c0000, 0x912e5c0a, - 0x592c0000, 0x82000580, 0x02000000, 0x05020011, - 0x4803c856, 0x64134209, 0x592c0804, 0x82040500, - 0x0000ffff, 0x48034409, 0x80040920, 0x4807420a, - 0x592c0805, 0x82040500, 0x0000ffff, 0x4803440a, - 0x80040920, 0x4807420b, 0x5c025800, 0x05fdf629, - 0x4803c856, 0x64174209, 0x592c0801, 0x82040500, - 0x0000ffff, 0x48034409, 0x80040920, 0x4807420a, - 0x05fdf7f6, 0x4937c857, 0x4823c857, 0x4827c857, - 0x5934000f, 0x80001d40, 0x05000009, 0x580c0009, - 0x80200580, 0x05020007, 0x580c0003, 0x58000211, - 0x80240580, 0x05020003, 0x81780000, 0x1c01f000, - 0x580c0000, 0x05fdf7f4, 0x4823c857, 0x4d2c0000, - 0x42026000, 0x00111b00, 0x59300407, 0x90000d83, + 0x05fdf64c, 0x5c028800, 0x5c026000, 0x5c026800, + 0x5c025800, 0x05fdf68a, 0x492fc857, 0x4933c857, + 0x497a602a, 0x592c0009, 0x82000580, 0x01000000, + 0x05020003, 0x64134407, 0x05fdf681, 0x4d2c0000, + 0x912e5c0a, 0x592c0000, 0x82000580, 0x02000000, + 0x05020011, 0x4803c856, 0x64134209, 0x592c0804, + 0x82040500, 0x0000ffff, 0x48034409, 0x80040920, + 0x4807420a, 0x592c0805, 0x82040500, 0x0000ffff, + 0x4803440a, 0x80040920, 0x4807420b, 0x5c025800, + 0x05fdf628, 0x4803c856, 0x64174209, 0x592c0801, + 0x82040500, 0x0000ffff, 0x48034409, 0x80040920, + 0x4807420a, 0x05fdf7f6, 0x4937c857, 0x4823c857, + 0x4827c857, 0x5934000f, 0x80001d40, 0x05000009, + 0x580c0009, 0x80200580, 0x05020007, 0x580c0003, + 0x58000211, 0x80240580, 0x05020003, 0x81780000, + 0x1c01f000, 0x580c0000, 0x05fdf7f4, 0x4823c857, + 0x4d2c0000, 0x40be6000, 0x59300407, 0x90000d83, 0x05000003, 0x90000d86, 0x0502000b, 0x59325809, 0x812e59c0, 0x05000008, 0x592c0003, 0x58000211, 0x80240580, 0x05020004, 0x592c0009, 0x80200580, 0x05000009, 0x91326430, 0x59a8000b, 0x81300480, 0x05fc17ee, 0x417a6000, 0x80000580, 0x5c025800, 0x1c01f000, 0x90000541, 0x5c025800, 0x1c01f000, - 0x83a00580, 0x0010dceb, 0x050e076a, 0x64030000, + 0x83a00580, 0x00111c71, 0x051200b6, 0x64030000, 0x4a034207, 0x00004000, 0x4a03c011, 0x40000010, 0x05fdfe51, 0x59e00017, 0x8c00050a, 0x60000800, - 0x00020892, 0x8d0c0530, 0x05f60aaf, 0x000209bc, + 0x0002089a, 0x8d0c0530, 0x05f60a78, 0x000209c4, 0x6403c017, 0x4203e000, 0x30000001, 0x4203e000, 0x40000000, 0x4203e000, 0xb0100000, 0x41fc0000, - 0x8c00050a, 0x05fc07fc, 0x0551fcdd, 0x05fc07ff, + 0x8c00050a, 0x05fc07fc, 0x0555fbb0, 0x05fc07ff, 0x59800802, 0x8c040520, 0x05020003, 0x64030000, 0x05fdf7f5, 0x60101020, 0x50080000, 0x8400054c, 0x44001000, 0x64030000, 0x0501f000, 0x59a00c07, 0x800409c0, 0x05000005, 0x916c0580, 0x05000003, - 0x646b4407, 0x05fdf606, 0x42007000, 0x0010e060, + 0x646b4407, 0x05fdf606, 0x42007000, 0x00111ffa, 0x58381c01, 0x58382201, 0x58383202, 0x8c040500, 0x0500000b, 0x59a01208, 0x82080500, 0x0000f003, 0x05fe0600, 0x82080480, 0x00000841, 0x05fe15fd, @@ -2878,15 +2920,15 @@ static const uint32_t isp_2500_risc_code[] = { 0xd0000000, 0x40040000, 0x800c0540, 0x48007401, 0x8c040500, 0x05000002, 0x48087201, 0x8c04050a, 0x0500001a, 0x481c7202, 0x4c0c0000, 0x4c100000, - 0x4c180000, 0x052df8a2, 0x4df00000, 0x58383a02, + 0x4c180000, 0x052dfcb8, 0x4df00000, 0x58383a02, 0x481fc857, 0x41780000, 0x801c3840, 0x800010c8, 0x82081400, 0x0000b037, 0x64001002, 0x801c1c80, 0x05021002, 0x64081002, 0x80000000, 0x90001c85, - 0x05fc17f7, 0x5c03e000, 0x052c0882, 0x5c003000, + 0x05fc17f7, 0x5c03e000, 0x052c0c98, 0x5c003000, 0x5c002000, 0x5c001800, 0x480f4407, 0x48134208, 0x481b4408, 0x05fdf56f, 0x4d440000, 0x4d340000, - 0x59a28c07, 0x050dfbf8, 0x05020009, 0x0515fdea, - 0x05020007, 0x0515fda0, 0x05000008, 0x64274407, + 0x59a28c07, 0x050dfced, 0x05020009, 0x0519f80b, + 0x05020007, 0x0515ffc1, 0x05000008, 0x64274407, 0x5c026800, 0x5c028800, 0x05fdf5a5, 0x5c026800, 0x5c028800, 0x05fdf5a7, 0x59a01208, 0x59a01c08, 0x5934400a, 0x82203d00, 0x0002e000, 0x801c391a, @@ -2896,7 +2938,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x05000005, 0x90040585, 0x05000003, 0x4937c857, 0x60100800, 0x82204500, 0xfffd1fff, 0x800400da, 0x80200540, 0x4802680a, 0x4c080000, 0x4c1c0000, - 0x052df85b, 0x0519f815, 0x052df84a, 0x5c003800, + 0x052dfc71, 0x0519fa42, 0x052dfc60, 0x5c003800, 0x5c001000, 0x481f4408, 0x5934400a, 0x82203d00, 0x0f000000, 0x801c3930, 0x8c080504, 0x05020011, 0x8c080502, 0x0500000b, 0x4823c857, 0x82204500, @@ -2906,234 +2948,234 @@ static const uint32_t isp_2500_risc_code[] = { 0x82204500, 0xf07fffff, 0x4822680a, 0x05fdf7f9, 0x59a02c07, 0x8c140502, 0x05020005, 0x59a00a09, 0x82040480, 0x00000100, 0x05021019, 0x82041400, - 0x0010de60, 0x50080000, 0x80025d40, 0x05000014, + 0x00111dfa, 0x50080000, 0x80025d40, 0x05000014, 0x4178b000, 0x592c0005, 0x80000d40, 0x05000004, 0x8058b000, 0x58040000, 0x05fdf7fc, 0x485b4209, 0x592c1408, 0x592c0c09, 0x58080100, 0x80040c80, 0x05021003, 0x592c0208, 0x80040c00, 0x48074407, 0x497b4408, 0x497b4208, 0x05fdf502, 0x64774407, - 0x05fdf543, 0x916c2d80, 0x050c0678, 0x83a00580, - 0x0010dceb, 0x050e0677, 0x59a02c07, 0x4817c857, + 0x05fdf543, 0x916c2d80, 0x050c07c4, 0x83a00580, + 0x00111c71, 0x050e07c3, 0x59a02c07, 0x4817c857, 0x8c140516, 0x0502003a, 0x82140500, 0x00000408, 0x050200a3, 0x8c140500, 0x050200af, 0x8d0c0516, 0x05000003, 0x64874407, 0x05fdf531, 0x59a00a09, - 0x82040480, 0x00000100, 0x050211a2, 0x8c140502, - 0x05020004, 0x82041400, 0x0010dd60, 0x0501f007, + 0x82040480, 0x00000100, 0x050211a4, 0x8c140502, + 0x05020004, 0x82041400, 0x00111cfa, 0x0501f007, 0x59a0020e, 0x82000480, 0x00000100, 0x05fe1529, - 0x82041400, 0x0010de60, 0x50080000, 0x80000540, - 0x05020192, 0x4c040000, 0x4c080000, 0x05edfc52, - 0x5c001000, 0x5c000800, 0x0500018a, 0x05011000, + 0x82041400, 0x00111dfa, 0x50080000, 0x80000540, + 0x05020194, 0x4c040000, 0x4c080000, 0x05edfbe1, + 0x5c001000, 0x5c000800, 0x0500018c, 0x05011000, 0x492fc840, 0x6463c842, 0x05011000, 0x8c140502, - 0x05020007, 0x4c080000, 0x0501f9a4, 0x5c001000, + 0x05020007, 0x4c080000, 0x0501f9a7, 0x5c001000, 0x05fe050f, 0x452c1000, 0x05fdf4ca, 0x4c080000, - 0x0501f9d7, 0x5c001000, 0x05fe0509, 0x452c1000, + 0x0501f9da, 0x5c001000, 0x05fe0509, 0x452c1000, 0x05fdf4c4, 0x592c000e, 0x48034407, 0x80000120, 0x48034208, 0x497a580e, 0x05fdf4be, 0x59a00a09, - 0x82040480, 0x00000100, 0x05021172, 0x8d0c0516, + 0x82040480, 0x00000100, 0x05021174, 0x8d0c0516, 0x05000003, 0x64874407, 0x05fdf4f9, 0x8c140502, - 0x0502002e, 0x82041400, 0x0010dd60, 0x50080000, - 0x80025d40, 0x05000167, 0x592c1a00, 0x580c0000, - 0x592c1a0c, 0x800c0580, 0x05020160, 0x91701d82, - 0x0500015e, 0x412c1800, 0x59980002, 0x90000482, + 0x0502002e, 0x82041400, 0x00111cfa, 0x50080000, + 0x80025d40, 0x05000169, 0x592c1a00, 0x580c0000, + 0x592c1a0c, 0x800c0580, 0x05020162, 0x91701d82, + 0x05000160, 0x412c1800, 0x59980002, 0x90000482, 0x05021004, 0x4a03b004, 0x10000000, 0x0501f005, - 0x4c0c0000, 0x80f01d83, 0x05180f10, 0x5c001800, + 0x4c0c0000, 0x80f01d83, 0x051c0958, 0x5c001800, 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540, 0x48001808, 0x59a0120a, 0x800810e0, 0x59a0040a, 0x80080540, 0x48001809, 0x59a00a09, 0x59a0140b, 0x82040400, 0x00005c00, 0x48080100, 0x480a5a0c, 0x59980002, 0x90000482, 0x05fe148a, 0x4a03b004, - 0x10000001, 0x05fdf487, 0x82041400, 0x0010de60, - 0x50080000, 0x80025d40, 0x0500013a, 0x592c0005, - 0x80000540, 0x05020135, 0x592c1c08, 0x592c0409, - 0x580c0900, 0x80040580, 0x05020130, 0x412c1800, + 0x10000001, 0x05fdf487, 0x82041400, 0x00111dfa, + 0x50080000, 0x80025d40, 0x0500013c, 0x592c0005, + 0x80000540, 0x05020137, 0x592c1c08, 0x592c0409, + 0x580c0900, 0x80040580, 0x05020132, 0x412c1800, 0x412c0000, 0x81740580, 0x0502000f, 0x59d80106, - 0x80000540, 0x05020129, 0x8d0c0524, 0x05020127, + 0x80000540, 0x0502012b, 0x8d0c0524, 0x05020129, 0x59980008, 0x90000482, 0x05021004, 0x4a03b104, - 0x10000000, 0x0501f004, 0x4c0c0000, 0x0519f8bb, + 0x10000000, 0x0501f004, 0x4c0c0000, 0x0519faf7, 0x5c001800, 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540, 0x48001806, 0x59a0120a, 0x800810e0, 0x59a0040a, 0x80080540, 0x48001807, 0x59a00a09, 0x59a0120b, 0x82040400, 0x00005e00, 0x48080000, 0x48081c09, 0x59980008, 0x90000482, 0x05fe1455, 0x4a03b104, 0x10000001, 0x05fdf452, 0x59a00a09, - 0x82040480, 0x00000100, 0x05021106, 0x82041400, - 0x0010dd60, 0x50080000, 0x80025d40, 0x05000101, - 0x8c140514, 0x05fe0784, 0x41780000, 0x0501f8ff, + 0x82040480, 0x00000100, 0x05021108, 0x82041400, + 0x00111cfa, 0x50080000, 0x80025d40, 0x05000103, + 0x8c140514, 0x05fe0784, 0x41780000, 0x0501f901, 0x05fdf444, 0x8c140512, 0x05000003, 0x8d0c0520, - 0x050200f8, 0x59a00a09, 0x82040480, 0x00000100, - 0x050210f4, 0x800409c0, 0x050000f2, 0x8c140502, - 0x05020087, 0x82041400, 0x0010dd60, 0x50080000, - 0x80025d40, 0x050000eb, 0x592c1a00, 0x580c0000, - 0x592c1a0c, 0x800c0580, 0x05000003, 0x0501f96c, - 0x050200e2, 0x592c1a00, 0x580c0000, 0x48025a0c, - 0x4d340000, 0x4d440000, 0x4c080000, 0x61c2880f, - 0x59a04a09, 0x41440000, 0x81ac0400, 0x50026800, - 0x813669c0, 0x05000020, 0x5934000f, 0x40002000, - 0x80001d40, 0x0500001c, 0x580c0003, 0x58000211, - 0x80240580, 0x05000004, 0x580c0000, 0x400c2000, - 0x05fdf7f8, 0x4937c857, 0x4947c857, 0x480fc857, - 0x0501f94f, 0x0502001c, 0x4d2c0000, 0x400e5800, - 0x592c0800, 0x05edfbae, 0x5c025800, 0x40040000, - 0x5934100f, 0x800c1582, 0x0500000b, 0x4807c857, - 0x4813c857, 0x48042000, 0x800409c0, 0x05fe07e5, - 0x48126810, 0x814689c0, 0x0500000f, 0x81468840, - 0x05fdf7d9, 0x800409c0, 0x05020004, 0x497a680f, - 0x497a6810, 0x05fdf7f8, 0x4806680f, 0x40042000, - 0x05fdf7d8, 0x5c001000, 0x5c028800, 0x5c026800, - 0x0501f0a6, 0x5c001000, 0x5c028800, 0x5c026800, - 0x4d300000, 0x4d2c0000, 0x42026000, 0x00111b00, - 0x59325809, 0x812e59c0, 0x05000018, 0x592c0003, - 0x58000211, 0x80240580, 0x05020014, 0x0501f920, - 0x0502000f, 0x492fc857, 0x4d2c0000, 0x4c140000, - 0x4c080000, 0x053df9f8, 0x5c001000, 0x5c002800, - 0x5c025800, 0x05020009, 0x4c080000, 0x0005ffdc, - 0x05edfb77, 0x5c001000, 0x0501f004, 0x5c025800, - 0x5c026000, 0x0501f085, 0x91326430, 0x59a8000b, - 0x81300480, 0x05fc17e3, 0x5c025800, 0x5c026000, - 0x59980802, 0x80040840, 0x48073002, 0x45781000, - 0x59a00a09, 0x4807c857, 0x40f01000, 0x58080801, - 0x412c0000, 0x80040580, 0x05000004, 0x40041000, - 0x58040801, 0x05fdf7fb, 0x58040801, 0x48041001, - 0x4d2c0000, 0x412c0000, 0x80f00580, 0x05180e27, - 0x5c025800, 0x05edfb4d, 0x05fdf3b2, 0x82041400, - 0x0010de60, 0x50080000, 0x80025d40, 0x05000065, - 0x592c0005, 0x80000540, 0x05000012, 0x0501f8e8, - 0x0502005e, 0x592c0805, 0x4d2c0000, 0x40065800, - 0x58040000, 0x4c080000, 0x4c000000, 0x05edfb44, - 0x5c000000, 0x5c001000, 0x80000d40, 0x05fe07f8, - 0x5c025800, 0x48025804, 0x48025805, 0x850e1d26, - 0x592c1c08, 0x592c0409, 0x580c0900, 0x80040580, - 0x05000003, 0x0501f8d2, 0x05020048, 0x412c0000, - 0x81740580, 0x05020019, 0x59d80106, 0x80000540, - 0x05000011, 0x0501f8ca, 0x05020040, 0x42000800, - 0x000fffff, 0x59d80106, 0x80000540, 0x0500000a, - 0x0502e005, 0x59da5908, 0x4c080000, 0x05edfb1b, - 0x5c001000, 0x80040840, 0x05fe07f7, 0x4803c857, - 0x0501f032, 0x8d0c0524, 0x05000004, 0x0501f8b8, - 0x0502002e, 0x850e1d24, 0x60000802, 0x80040840, - 0x0500100a, 0x82040400, 0x0010dd60, 0x50000000, - 0x80000540, 0x05fc07fa, 0x58000012, 0x812c0580, - 0x05000010, 0x05fdf7f6, 0x59980808, 0x80040840, - 0x48073008, 0x45781000, 0x59a00a09, 0x4807c857, - 0x41741000, 0x58080800, 0x412c0000, 0x80040580, - 0x05000006, 0x40041000, 0x58040800, 0x05fdf7fb, - 0x492fc857, 0x0501f011, 0x58040800, 0x48041000, - 0x4d2c0000, 0x412c0000, 0x81740580, 0x05140fa7, - 0x5c025800, 0x592c0209, 0xb000053f, 0x82000400, - 0x0010df60, 0x45780000, 0x05edfae8, 0x05fdf34d, - 0x640b4407, 0x05fdf38e, 0x647b4407, 0x05fdf38c, - 0x64774407, 0x05fdf38a, 0x59a00c07, 0x8c040510, - 0x0500000a, 0x64065a0a, 0x59a0020d, 0x48025c11, - 0x0001ff16, 0x42000000, 0x00102ecb, 0x50000000, - 0x48025a10, 0x1c01f000, 0x59a00a0d, 0x90040486, - 0x05001002, 0x60040800, 0x82040c00, 0x00102ec8, - 0x50040000, 0x48025a10, 0x64025a0a, 0x1c01f000, - 0x00000002, 0x00000002, 0x00000005, 0x0000000a, - 0x00000014, 0x000000ff, 0x8c14050e, 0x05020008, - 0x59a0020c, 0x82000400, 0x0010de60, 0x50000000, - 0x80000540, 0x0500002d, 0x48025812, 0x48065a11, - 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540, - 0x48025808, 0x59a0120a, 0x800810e0, 0x59a0040a, - 0x80080540, 0x48025809, 0x59a00409, 0x48025c0a, - 0x64065c10, 0x59980002, 0x80000000, 0x48033002, - 0x58f01001, 0x492de001, 0x480a5801, 0x82040400, - 0x00005c00, 0x59a0140b, 0x48080100, 0x480a5a0c, - 0x48025a00, 0x05fdffc1, 0x59a0140d, 0x8c140508, - 0x05000002, 0x8408157e, 0x8c14050a, 0x05000002, - 0x8408157c, 0x8c140504, 0x05000003, 0x82081540, - 0x20000000, 0x480a580b, 0x59a0040c, 0x48025c0c, - 0x80000580, 0x1c01f000, 0x45781000, 0x05edfa8f, - 0x647f4407, 0x90000541, 0x1c01f000, 0x4a025803, - 0xffff0000, 0x48065a02, 0x59a0020e, 0x48025a09, - 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540, - 0x48025806, 0x59a0120a, 0x800810e0, 0x59a0040a, - 0x80080540, 0x48025807, 0x59a00409, 0x48025a08, - 0x59980008, 0x80000000, 0x48033008, 0x59741000, - 0x492ee800, 0x480a5800, 0x82040400, 0x00005e00, - 0x59a0120b, 0x48080000, 0x480a5c09, 0x48025c08, - 0x59a00c07, 0x59a0140d, 0x8c040508, 0x05000002, - 0x8408157e, 0x8c04050a, 0x05000002, 0x8408157c, - 0x8c040504, 0x05000003, 0x82081540, 0x20000000, - 0x480a5801, 0x59a0020e, 0x82000400, 0x0010df60, - 0x44080000, 0x80000580, 0x1c01f000, 0x8c140512, - 0x05000005, 0x8d0c0520, 0x05020003, 0x80000580, - 0x0501f002, 0x90000541, 0x4803c857, 0x1c01f000, - 0x8d0c050e, 0x05000003, 0x64074407, 0x05fdf2f8, - 0x916c0583, 0x05020014, 0x050df93f, 0x05fe02f9, - 0x59240200, 0x8c000502, 0x05000041, 0x59240005, - 0x497b4407, 0x0519f961, 0x0500000e, 0x82000d00, - 0x00ffff00, 0x0502000b, 0x82000c00, 0x00102853, - 0x50040800, 0x80040910, 0x82041580, 0x00000080, - 0x05020003, 0x641f4407, 0x05fdf2e1, 0x48074407, - 0x82000d00, 0x0000ffff, 0x48074208, 0x80000120, - 0x48034408, 0x59a80249, 0x82001500, 0x00003500, - 0x480b440a, 0x5924100b, 0x82081500, 0x00001fff, - 0x480b420b, 0x480b420b, 0x8c000502, 0x05000016, - 0x8c000506, 0x05000006, 0x90000d0a, 0x90040d8a, - 0x05020003, 0x6407420a, 0x0501f018, 0x8c00050a, - 0x05000006, 0x90000d22, 0x90040da2, 0x05020003, - 0x640f420a, 0x0501f011, 0x8c000508, 0x05000006, - 0x90000d12, 0x90040d92, 0x05020003, 0x640b420a, - 0x0501f00a, 0x0519f92d, 0x05020003, 0x6413420a, - 0x05fdf274, 0x8c000506, 0x05000003, 0x64174407, - 0x05fdf2b3, 0x6403420a, 0x05fdf26e, 0x646f4407, - 0x05fdf2af, 0x59a8005c, 0x48034408, 0x59a8005d, - 0x4803420a, 0x05fdf267, 0x42007800, 0x0010e4e5, - 0x59a00407, 0x4803c857, 0x90000c8c, 0x05fe12a9, - 0x0c01f001, 0x0010300c, 0x00102fac, 0x00102fb9, - 0x00102fc9, 0x00102fe8, 0x0010300d, 0x00102fa5, - 0x00102fa5, 0x00103019, 0x00103054, 0x00102fa6, - 0x00103067, 0x05fdf29b, 0x59a00208, 0x48007c01, - 0x59a00408, 0x48007a01, 0x05e9feec, 0x0501f061, - 0x916c0580, 0x05fc028e, 0x59a00a08, 0x59a00408, - 0x900001c0, 0x80040d40, 0x4807c857, 0x59a00a09, - 0x59a00409, 0x900001c0, 0x80040d40, 0x4807c857, - 0x0501f054, 0x916c0580, 0x05fc0281, 0x59a00408, - 0x59a01208, 0x900001c0, 0x80081540, 0x59a00409, - 0x59a01a09, 0x900001c0, 0x800c1d40, 0x42000000, - 0x00110772, 0x480fc857, 0x480bc857, 0x60000820, - 0x050df000, 0x59a00a08, 0x59a00408, 0x900001c0, - 0x80041d40, 0x820c0c80, 0x0010d32a, 0x05fe1271, - 0x820c0c80, 0x00100000, 0x05fc126e, 0x480fc857, - 0x903c7c22, 0x503c0800, 0x800409c0, 0x05000005, - 0x903c05a6, 0x05fc0267, 0x803c7800, 0x05fdf7fa, - 0x59e41001, 0x82080d00, 0xfffeffcf, 0x4807c801, - 0x440c7800, 0x46001800, 0x0201f800, 0x800c1800, - 0x46001800, 0x001005ce, 0x480bc801, 0x0501f025, - 0x59a01a08, 0x59a00408, 0x900001c0, 0x800c1d40, - 0x480c7803, 0x59a02209, 0x59a00409, 0x900001c0, - 0x80102540, 0x48107804, 0x59a0020a, 0x40001000, - 0x48007807, 0x80000040, 0x05fc124a, 0x48007808, - 0x60000880, 0x0525ff79, 0x80000540, 0x05000002, - 0x05fdf244, 0x40040000, 0x800c1c00, 0x05fc1241, - 0x4800780a, 0x480c7805, 0x48107806, 0x4978780c, - 0x59a0040a, 0x800000c4, 0x4800780b, 0x59e40001, - 0x4803c857, 0x82000540, 0x00040000, 0x4803c801, - 0x05fdf1ec, 0x49787803, 0x49787804, 0x49787808, - 0x49787807, 0x49787803, 0x49787805, 0x49787806, - 0x4978780c, 0x4978780b, 0x59e40001, 0x84000524, - 0x05fdf7f3, 0x4978781f, 0x49787814, 0x49787815, - 0x4978781d, 0x49787817, 0x49787818, 0x59a01a08, - 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c780e, - 0x480c7819, 0x480c781b, 0x59a02209, 0x59a00409, - 0x900001c0, 0x80102540, 0x4810780f, 0x4810781a, - 0x4810781c, 0x59a0020a, 0x80000540, 0x05fc0211, - 0x48007813, 0x60000808, 0x40001000, 0x0525ff3f, - 0x80000540, 0x05fe020b, 0x40040000, 0x800c1c00, - 0x05fc1208, 0x480c7810, 0x48107811, 0x4a03420a, - 0x00000400, 0x59a0040a, 0x4800781e, 0x850e1d6a, - 0x59a0040b, 0x48007a12, 0x59a0020c, 0x48007c12, - 0x600c0000, 0x05e9fe2c, 0x80102000, 0x4810780d, - 0x48134209, 0x901021c0, 0x48134409, 0x59e40052, - 0x4803c857, 0x4a007816, 0x00000400, 0x903c0416, + 0x050200fa, 0x59a00a09, 0x82040480, 0x00000100, + 0x050210f6, 0x800409c0, 0x050000f4, 0x8c140502, + 0x05020089, 0x82041400, 0x00111cfa, 0x50080000, + 0x80025d40, 0x050000ed, 0x592c1a00, 0x580c0000, + 0x592c1a0c, 0x800c0580, 0x05000003, 0x0501f96f, + 0x050200e4, 0x592c1a00, 0x580c0000, 0x48025a0c, + 0x4d340000, 0x4d440000, 0x4c080000, 0x59aa88ac, + 0x81468840, 0x59a04a09, 0x0001fb08, 0x05020020, + 0x5934000f, 0x40002000, 0x80001d40, 0x0500001c, + 0x580c0003, 0x58000211, 0x80240580, 0x05000004, + 0x580c0000, 0x400c2000, 0x05fdf7f8, 0x4937c857, + 0x4947c857, 0x480fc857, 0x0501f954, 0x05020020, + 0x4d2c0000, 0x400e5800, 0x592c0800, 0x05edfb3f, + 0x5c025800, 0x40040000, 0x5934100f, 0x800c1582, + 0x0500000f, 0x4807c857, 0x4813c857, 0x48042000, + 0x800409c0, 0x05fe07e5, 0x48126810, 0x814689c0, + 0x05000013, 0x81468840, 0x83440580, 0x000007ff, + 0x05fe07da, 0x61be887f, 0x05fdf7d8, 0x800409c0, + 0x05020004, 0x497a680f, 0x497a6810, 0x05fdf7f4, + 0x4806680f, 0x40042000, 0x05fdf7d4, 0x5c001000, + 0x5c028800, 0x5c026800, 0x0501f0a6, 0x5c001000, + 0x5c028800, 0x5c026800, 0x4d300000, 0x4d2c0000, + 0x42026000, 0x00115aa4, 0x59325809, 0x812e59c0, + 0x05000018, 0x592c0003, 0x58000211, 0x80240580, + 0x05020014, 0x0501f921, 0x0502000f, 0x492fc857, + 0x4d2c0000, 0x4c140000, 0x4c080000, 0x053dfec0, + 0x5c001000, 0x5c002800, 0x5c025800, 0x05020009, + 0x4c080000, 0x0009f810, 0x05edfb04, 0x5c001000, + 0x0501f004, 0x5c025800, 0x5c026000, 0x0501f085, + 0x91326430, 0x59a8000b, 0x81300480, 0x05fc17e3, + 0x5c025800, 0x5c026000, 0x59980802, 0x80040840, + 0x48073002, 0x45781000, 0x59a00a09, 0x4807c857, + 0x40f01000, 0x58080801, 0x412c0000, 0x80040580, + 0x05000004, 0x40041000, 0x58040801, 0x05fdf7fb, + 0x58040801, 0x48041001, 0x4d2c0000, 0x412c0000, + 0x80f00580, 0x051c086d, 0x5c025800, 0x05edfada, + 0x05fdf3b0, 0x82041400, 0x00111dfa, 0x50080000, + 0x80025d40, 0x05000065, 0x592c0005, 0x80000540, + 0x05000012, 0x0501f8e9, 0x0502005e, 0x592c0805, + 0x4d2c0000, 0x40065800, 0x58040000, 0x4c080000, + 0x4c000000, 0x05edfad1, 0x5c000000, 0x5c001000, + 0x80000d40, 0x05fe07f8, 0x5c025800, 0x48025804, + 0x48025805, 0x850e1d26, 0x592c1c08, 0x592c0409, + 0x580c0900, 0x80040580, 0x05000003, 0x0501f8d3, + 0x05020048, 0x412c0000, 0x81740580, 0x05020019, + 0x59d80106, 0x80000540, 0x05000011, 0x0501f8cb, + 0x05020040, 0x42000800, 0x000fffff, 0x59d80106, + 0x80000540, 0x0500000a, 0x0502e005, 0x59da5908, + 0x4c080000, 0x05edfaa8, 0x5c001000, 0x80040840, + 0x05fe07f7, 0x4803c857, 0x0501f032, 0x8d0c0524, + 0x05000004, 0x0501f8b9, 0x0502002e, 0x850e1d24, + 0x60000802, 0x80040840, 0x0500100a, 0x82040400, + 0x00111cfa, 0x50000000, 0x80000540, 0x05fc07fa, + 0x58000012, 0x812c0580, 0x05000010, 0x05fdf7f6, + 0x59980808, 0x80040840, 0x48073008, 0x45781000, + 0x59a00a09, 0x4807c857, 0x41741000, 0x58080800, + 0x412c0000, 0x80040580, 0x05000006, 0x40041000, + 0x58040800, 0x05fdf7fb, 0x492fc857, 0x0501f011, + 0x58040800, 0x48041000, 0x4d2c0000, 0x412c0000, + 0x81740580, 0x051809e1, 0x5c025800, 0x592c0209, + 0xb000053f, 0x82000400, 0x00111efa, 0x45780000, + 0x05edfa75, 0x05fdf34b, 0x640b4407, 0x05fdf38c, + 0x647b4407, 0x05fdf38a, 0x64774407, 0x05fdf388, + 0x59a00c07, 0x8c040510, 0x0500000b, 0x64065a0a, + 0x497a580d, 0x59a0020d, 0x48025c11, 0x0001ff3c, + 0x42000000, 0x00102f76, 0x50000000, 0x48025a10, + 0x1c01f000, 0x59a00a0d, 0x90040486, 0x05001002, + 0x60040800, 0x82040c00, 0x00102f73, 0x50040000, + 0x48025a10, 0x64025a0a, 0x1c01f000, 0x00000002, + 0x00000002, 0x00000005, 0x0000000a, 0x00000014, + 0x000000ff, 0x8c14050e, 0x05020008, 0x59a0020c, + 0x82000400, 0x00111dfa, 0x50000000, 0x80000540, + 0x0500002d, 0x48025812, 0x48065a11, 0x59a01208, + 0x800810e0, 0x59a00408, 0x80080540, 0x48025808, + 0x59a0120a, 0x800810e0, 0x59a0040a, 0x80080540, + 0x48025809, 0x59a00409, 0x48025c0a, 0x64065c10, + 0x59980002, 0x80000000, 0x48033002, 0x58f01001, + 0x492de001, 0x480a5801, 0x82040400, 0x00005c00, + 0x59a0140b, 0x48080100, 0x480a5a0c, 0x48025a00, + 0x05fdffc0, 0x59a0140d, 0x8c140508, 0x05000002, + 0x8408157e, 0x8c14050a, 0x05000002, 0x8408157c, + 0x8c140504, 0x05000003, 0x82081540, 0x20000000, + 0x480a580b, 0x59a0040c, 0x48025c0c, 0x80000580, + 0x1c01f000, 0x45781000, 0x05edfa1b, 0x647f4407, + 0x90000541, 0x1c01f000, 0x4a025803, 0xffff0000, + 0x48065a02, 0x59a0020e, 0x48025a09, 0x59a01208, + 0x800810e0, 0x59a00408, 0x80080540, 0x48025806, + 0x59a0120a, 0x800810e0, 0x59a0040a, 0x80080540, + 0x48025807, 0x59a00409, 0x48025a08, 0x59980008, + 0x80000000, 0x48033008, 0x59741000, 0x492ee800, + 0x480a5800, 0x82040400, 0x00005e00, 0x59a0120b, + 0x48080000, 0x480a5c09, 0x48025c08, 0x59a00c07, + 0x59a0140d, 0x8c040508, 0x05000002, 0x8408157e, + 0x8c04050a, 0x05000002, 0x8408157c, 0x8c040504, + 0x05000003, 0x82081540, 0x20000000, 0x480a5801, + 0x59a0020e, 0x82000400, 0x00111efa, 0x44080000, + 0x80000580, 0x1c01f000, 0x8c140512, 0x05000005, + 0x8d0c0520, 0x05020003, 0x80000580, 0x0501f002, + 0x90000541, 0x4803c857, 0x1c01f000, 0x8d0c050e, + 0x05000003, 0x64074407, 0x05fdf2f5, 0x916c0583, + 0x05020014, 0x050dfa31, 0x05fe02f6, 0x59240200, + 0x8c000502, 0x05000041, 0x59240005, 0x497b4407, + 0x0519fba0, 0x0500000e, 0x82000d00, 0x00ffff00, + 0x0502000b, 0x82000c00, 0x001028fb, 0x50040800, + 0x80040910, 0x82041580, 0x00000080, 0x05020003, + 0x641f4407, 0x05fdf2de, 0x48074407, 0x82000d00, + 0x0000ffff, 0x48074208, 0x80000120, 0x48034408, + 0x59a8024c, 0x82001500, 0x00003500, 0x480b440a, + 0x5924100b, 0x82081500, 0x00001fff, 0x480b420b, + 0x480b420b, 0x8c000502, 0x05000016, 0x8c000506, + 0x05000006, 0x90000d0a, 0x90040d8a, 0x05020003, + 0x6407420a, 0x0501f018, 0x8c00050a, 0x05000006, + 0x90000d22, 0x90040da2, 0x05020003, 0x640f420a, + 0x0501f011, 0x8c000508, 0x05000006, 0x90000d12, + 0x90040d92, 0x05020003, 0x640b420a, 0x0501f00a, + 0x0519fb6c, 0x05020003, 0x6413420a, 0x05fdf271, + 0x8c000506, 0x05000003, 0x64174407, 0x05fdf2b0, + 0x6403420a, 0x05fdf26b, 0x646f4407, 0x05fdf2ac, + 0x59a8005f, 0x48034408, 0x59a80060, 0x4803420a, + 0x05fdf264, 0x42007800, 0x00112489, 0x59a00407, + 0x4803c857, 0x90000c8c, 0x05fe12a6, 0x0c01f001, + 0x001030b7, 0x00103057, 0x00103064, 0x00103074, + 0x00103093, 0x001030b8, 0x00103050, 0x00103050, + 0x001030c4, 0x001030fc, 0x00103051, 0x0010310f, + 0x05fdf298, 0x59a00208, 0x48007c01, 0x59a00408, + 0x48007a01, 0x05e9fe70, 0x0501f061, 0x916c0580, + 0x05fc028b, 0x59a00a08, 0x59a00408, 0x900001c0, + 0x80040d40, 0x4807c857, 0x59a00a09, 0x59a00409, + 0x900001c0, 0x80040d40, 0x4807c857, 0x0501f054, + 0x916c0580, 0x05fc027e, 0x59a00408, 0x59a01208, + 0x900001c0, 0x80081540, 0x59a00409, 0x59a01a09, + 0x900001c0, 0x800c1d40, 0x42000000, 0x00114716, + 0x480fc857, 0x480bc857, 0x60000820, 0x050df0f7, + 0x59a00a08, 0x59a00408, 0x900001c0, 0x80041d40, + 0x820c0c80, 0x0010daa9, 0x05fe126e, 0x820c0c80, + 0x00100000, 0x05fc126b, 0x480fc857, 0x903c7c22, + 0x503c0800, 0x800409c0, 0x05000005, 0x903c05a6, + 0x05fc0264, 0x803c7800, 0x05fdf7fa, 0x59e41001, + 0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800, + 0x46001800, 0x0201f800, 0x800c1800, 0x46001800, + 0x00100609, 0x480bc801, 0x0501f025, 0x59a01a08, + 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c7803, + 0x59a02209, 0x59a00409, 0x900001c0, 0x80102540, + 0x48107804, 0x59a0020a, 0x40001000, 0x48007807, + 0x80000040, 0x05fc1247, 0x48007808, 0x60000880, + 0x0529fb87, 0x80000540, 0x05000002, 0x05fdf241, + 0x40040000, 0x800c1c00, 0x05fc123e, 0x4800780a, + 0x480c7805, 0x48107806, 0x4978780c, 0x59a0040a, + 0x800000c4, 0x4800780b, 0x59e40001, 0x4803c857, + 0x82000540, 0x00040000, 0x4803c801, 0x05fdf1e9, + 0x49787803, 0x49787804, 0x49787808, 0x49787807, + 0x49787803, 0x49787805, 0x49787806, 0x4978780c, + 0x4978780b, 0x59e40001, 0x84000524, 0x05fdf7f3, + 0x4978781f, 0x49787814, 0x49787815, 0x4978781d, + 0x49787817, 0x49787818, 0x59a01a08, 0x59a00408, + 0x900001c0, 0x800c1d40, 0x480c780e, 0x480c7819, + 0x480c781b, 0x59a02209, 0x59a00409, 0x900001c0, + 0x80102540, 0x4810780f, 0x4810781a, 0x4810781c, + 0x59a0020a, 0x80000540, 0x05fc020e, 0x48007813, + 0x60000808, 0x40001000, 0x0529fb4d, 0x80000540, + 0x05fe0208, 0x40040000, 0x800c1c00, 0x05fc1205, + 0x480c7810, 0x48107811, 0x4a03420a, 0x00000400, + 0x59a0040a, 0x4800781e, 0x850e1d6a, 0x59a0040b, + 0x48007a12, 0x59a0020c, 0x48007c12, 0x59e42051, + 0x80102000, 0x4810780d, 0x48134209, 0x901021c0, + 0x48134409, 0x4a007816, 0x00000400, 0x903c0416, 0x48034208, 0x900001c0, 0x48034408, 0x05fdf1a5, 0x583c0800, 0x830e1d00, 0xffcfffff, 0x48ec7820, 0x4a01d802, 0x00000100, 0x583c0017, 0x82000500, 0x000000ff, 0x05020008, 0x4807c857, 0x8c040502, 0x05000004, 0x84040d48, 0x48047800, 0x1c01f000, - 0x0501f00a, 0x05f1fba5, 0x1c01f000, 0x916c0580, - 0x05fc01d3, 0x05e9fee6, 0x900801c0, 0x480b4407, - 0x48034208, 0x05fdf18b, 0x42007800, 0x0010e4e5, + 0x0501f00a, 0x05f1fb6c, 0x1c01f000, 0x916c0580, + 0x05fc01d3, 0x05e9fe6d, 0x900801c0, 0x480b4407, + 0x48034208, 0x05fdf18b, 0x42007800, 0x00112489, 0x583dd820, 0x58ef400b, 0x40ec6000, 0x583c0000, 0x48efc857, 0x49a3c857, 0x4803c857, 0x82000500, 0x0000ffc0, 0x48007800, 0x583c001d, 0x4803c857, @@ -3144,2901 +3186,3044 @@ static const uint32_t isp_2500_risc_code[] = { 0x4807440b, 0x49787818, 0x583c0017, 0x49787817, 0x82000500, 0x000000ff, 0x05fe0163, 0x05fdf165, 0x59a80005, 0x48034407, 0x59a80006, 0x48034208, - 0x59a80007, 0x48034408, 0x05fdf15e, 0x05e9fd3f, + 0x59a80007, 0x48034408, 0x05fdf15e, 0x05e9fcd2, 0x4803c856, 0x59a0020c, 0x4803c857, 0x8c00051e, - 0x050e00de, 0x8c00051a, 0x05000005, 0x050df87c, - 0x05000018, 0x65034407, 0x05fdf195, 0x05f5fed9, - 0x05000003, 0x05f5febe, 0x05000003, 0x648b4407, + 0x050e01dc, 0x8c00051a, 0x05000005, 0x050df97a, + 0x05000018, 0x65034407, 0x05fdf195, 0x05f5feb1, + 0x05000003, 0x05f5fe96, 0x05000003, 0x648b4407, 0x05fdf18f, 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580, 0x000000a0, 0x05000004, 0x82040580, 0x000000a2, 0x0502001e, 0x59a0140b, 0x82080480, 0x00000100, 0x0502101a, - 0x050df869, 0x05fe0183, 0x59a0020c, 0x8c000500, + 0x050df967, 0x05fe0183, 0x59a0020c, 0x8c000500, 0x0502001b, 0x59a00a0b, 0x800409c0, 0x05000012, - 0xb0040481, 0x05021010, 0x0509fed9, 0x0500000a, + 0xb0040481, 0x05021010, 0x0509ffd3, 0x0500000a, 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0, - 0x59a00a0b, 0x0509fef4, 0x4a01d809, 0x001030d8, + 0x59a00a0b, 0x0509ffee, 0x4a01d809, 0x00103180, 0x1c01f000, 0x640b4407, 0x4a03c014, 0x03800000, 0x05fdf167, 0x4a03c014, 0x03800000, 0x05fdf169, - 0x0505fd83, 0x05fc0159, 0x58ee580d, 0x59a00c07, + 0x0505fe51, 0x05fc0159, 0x58ee580d, 0x59a00c07, 0x59a0140b, 0x59a0020c, 0x8c000500, 0x0502004e, - 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x050df853, - 0x05000009, 0x05f9f889, 0x05f9f904, 0x05000003, - 0x65074407, 0x05fdf151, 0x05f9f919, 0x59a00c07, + 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x050df951, + 0x05000009, 0x05f9f861, 0x05f9f8dc, 0x05000003, + 0x65074407, 0x05fdf151, 0x05f9f8f1, 0x59a00c07, 0x59a0140b, 0x40600000, 0x812c0400, 0x5000c800, 0x82641d00, 0x000000ff, 0x4c040000, 0x4c080000, - 0x050df842, 0x05000002, 0x8408157e, 0x0501f93f, + 0x050df940, 0x05000002, 0x8408157e, 0x0501f947, 0x5c001000, 0x5c000800, 0x0500005f, 0x805cb840, 0x05000058, 0x80081000, 0x82641d00, 0x0000ff00, - 0x800c1910, 0x4c040000, 0x4c080000, 0x050df833, - 0x05000002, 0x8408157e, 0x0501f930, 0x5c001000, + 0x800c1910, 0x4c040000, 0x4c080000, 0x050df931, + 0x05000002, 0x8408157e, 0x0501f938, 0x5c001000, 0x5c000800, 0x05000050, 0x805cb840, 0x05000049, 0x80081000, 0x82641d00, 0x00ff0000, 0x800c1920, - 0x4c040000, 0x4c080000, 0x050df824, 0x05000002, - 0x8408157e, 0x0501f921, 0x5c001000, 0x5c000800, + 0x4c040000, 0x4c080000, 0x050df922, 0x05000002, + 0x8408157e, 0x0501f929, 0x5c001000, 0x5c000800, 0x05000041, 0x805cb840, 0x0500003a, 0x80081000, 0x82641d00, 0xff000000, 0x800c1930, 0x4c040000, - 0x4c080000, 0x050df815, 0x05000002, 0x8408157e, - 0x0501f912, 0x5c001000, 0x5c000800, 0x05000032, + 0x4c080000, 0x050df913, 0x05000002, 0x8408157e, + 0x0501f91a, 0x5c001000, 0x5c000800, 0x05000032, 0x805cb840, 0x0500002b, 0x80081000, 0x8060c000, 0x05fdf7c1, 0x59a0020b, 0x82000500, 0x000000ff, - 0x40001800, 0x050df805, 0x05000020, 0x4c0c0000, - 0x05f9f83a, 0x5c001800, 0x05f9f8c5, 0x59a00c07, + 0x40001800, 0x050df903, 0x05000020, 0x4c0c0000, + 0x05f9f812, 0x5c001800, 0x05f9f89d, 0x59a00c07, 0x59a0140b, 0x82040580, 0x000000e0, 0x05000013, - 0x05f9f8c7, 0x82040580, 0x000000a0, 0x05000007, + 0x05f9f89f, 0x82040580, 0x000000a0, 0x05000007, 0x82040580, 0x000000d0, 0x05fe00fd, 0x4807c857, - 0x8408157c, 0x0501f009, 0x05f9f8a4, 0x05000003, - 0x65074407, 0x05fdf0f1, 0x05f9f8b9, 0x59a00c07, - 0x59a0140b, 0x8408157e, 0x0501f8e8, 0x0500000a, - 0x4817c857, 0x0501f003, 0x0501f8e4, 0x05000006, - 0x0509ffe2, 0x05fa083a, 0x4a03c014, 0x03800000, - 0x05fdf0a0, 0x0509ffdd, 0x05fa0835, 0x4a03c014, + 0x8408157c, 0x0501f009, 0x05f9f87c, 0x05000003, + 0x65074407, 0x05fdf0f1, 0x05f9f891, 0x59a00c07, + 0x59a0140b, 0x8408157e, 0x0501f8f0, 0x0500000a, + 0x4817c857, 0x0501f003, 0x0501f8ec, 0x05000006, + 0x050df8e0, 0x05fa0812, 0x4a03c014, 0x03800000, + 0x05fdf0a0, 0x050df8db, 0x05fa080d, 0x4a03c014, 0x03800000, 0x64134407, 0x05fdf0dd, 0x4803c856, - 0x59a0020c, 0x4803c857, 0x8c00051e, 0x050a07d6, - 0x8c00051a, 0x05000005, 0x0509ffb9, 0x05000018, - 0x65034407, 0x05fdf0d2, 0x05f5fe16, 0x05000003, - 0x05f5fdfb, 0x05000003, 0x648b4407, 0x05fdf0cc, + 0x59a0020c, 0x4803c857, 0x8c00051e, 0x050e00d4, + 0x8c00051a, 0x05000005, 0x050df8b7, 0x05000018, + 0x65034407, 0x05fdf0d2, 0x05f5fdee, 0x05000003, + 0x05f5fdd3, 0x05000003, 0x648b4407, 0x05fdf0cc, 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580, 0x000000a0, 0x05000004, - 0x82040580, 0x000000a2, 0x050200b9, 0x59a0140b, - 0x82080480, 0x00000100, 0x050210b5, 0x0509ffa6, + 0x82040580, 0x000000a2, 0x050200c1, 0x59a0140b, + 0x82080480, 0x00000100, 0x050210bd, 0x050df8a4, 0x05fe00c0, 0x59a00c07, 0x59a0140b, 0x4807c857, - 0x480bc857, 0x59a0020c, 0x8c000500, 0x05020068, - 0x59a01a0b, 0x800c19c0, 0x050000a9, 0xb00c0481, - 0x050210a7, 0x0509fe12, 0x05020006, 0x640b4407, + 0x480bc857, 0x59a0020c, 0x8c000500, 0x05020070, + 0x59a01a0b, 0x800c19c0, 0x050000b1, 0xb00c0481, + 0x050210af, 0x0509ff0c, 0x05020006, 0x640b4407, 0x4a03c014, 0x03800000, 0x4803c857, 0x05fdf0a8, - 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x0509ff9f, - 0x05000007, 0x05f5ffd5, 0x05f9f850, 0x05000003, - 0x65074407, 0x05fdf09d, 0x05f9f865, 0x59a00c07, + 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x59a0020c, + 0x8c00051a, 0x05020006, 0x8c000502, 0x0500000e, + 0x0501f8ff, 0x0502004f, 0x0501f097, 0x050df895, + 0x05000007, 0x05f5ffa5, 0x05f9f820, 0x05000003, + 0x65074407, 0x05fdf095, 0x05f9f835, 0x59a00c07, 0x59a0140b, 0x4803c857, 0x40600000, 0x812c0400, - 0x4000c800, 0x4c040000, 0x4c080000, 0x0509ff8f, - 0x05000002, 0x8408157e, 0x0501f8c2, 0x5c001000, + 0x4000c800, 0x4c040000, 0x4c080000, 0x050df885, + 0x05000002, 0x8408157e, 0x0501f8c4, 0x5c001000, 0x5c000800, 0x05000080, 0x4414c800, 0x805cb840, 0x05000034, 0x80081000, 0x4c040000, 0x4c080000, - 0x0509ff82, 0x05000002, 0x8408157e, 0x0501f8b5, + 0x050df878, 0x05000002, 0x8408157e, 0x0501f8b7, 0x5c001000, 0x5c000800, 0x05000073, 0x50640000, 0x801428d0, 0x80140540, 0x4400c800, 0x805cb840, 0x05000024, 0x80081000, 0x4c040000, 0x4c080000, - 0x0509ff72, 0x05000002, 0x8408157e, 0x0501f8a5, + 0x050df868, 0x05000002, 0x8408157e, 0x0501f8a7, 0x5c001000, 0x5c000800, 0x05000063, 0x50640000, 0x801428e0, 0x80140540, 0x4400c800, 0x805cb840, 0x05000014, 0x80081000, 0x4c040000, 0x4c080000, - 0x0509ff62, 0x05000002, 0x8408157e, 0x0501f895, + 0x050df858, 0x05000002, 0x8408157e, 0x0501f897, 0x5c001000, 0x5c000800, 0x05000053, 0x50640000, 0x801428f0, 0x80140540, 0x4400c800, 0x805cb840, 0x05000004, 0x80081000, 0x8060c000, 0x05fdf7be, - 0x0509ff52, 0x05f60faa, 0x59a00a0b, 0x59a01008, + 0x050df848, 0x05f60f7a, 0x59a00a0b, 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0, 0x4a03c014, - 0x03800000, 0x412c0000, 0x0509f5d5, 0x4803c857, - 0x0509ff46, 0x05000036, 0x05f5ff7c, 0x05f9f808, + 0x03800000, 0x412c0000, 0x0509f6c7, 0x4803c857, + 0x050df83c, 0x05000036, 0x05f5ff4c, 0x05f5ffd8, 0x59a00c07, 0x59a0140b, 0x82040580, 0x00000098, - 0x0502000d, 0x59a80084, 0x8c000520, 0x05000006, - 0x59a8287d, 0x9014050f, 0x05020003, 0x8c140508, + 0x0502000d, 0x59a80087, 0x8c000520, 0x05000006, + 0x59a82880, 0x9014050f, 0x05020003, 0x8c140508, 0x0500001c, 0x90080581, 0x0502001a, 0x60001000, 0x0501f018, 0x82040580, 0x000000e0, 0x05000015, - 0x05f5fffb, 0x82040580, 0x000000a0, 0x05000009, - 0x82040580, 0x000000d0, 0x05fe0031, 0x4807c857, - 0x6140b801, 0x0501f84c, 0x40642800, 0x0501f011, - 0x05f5ffd6, 0x05000003, 0x65074407, 0x05fdf023, - 0x05f5ffeb, 0x59a00c07, 0x59a0140b, 0x8408157e, - 0x0501f850, 0x05020003, 0x65074407, 0x05fdf01b, - 0x59a00c07, 0x82040580, 0x00000098, 0x05f40ff6, - 0x4817c857, 0x05f5ff6a, 0x0501f003, 0x0501f845, + 0x05f5ffcb, 0x82040580, 0x000000a0, 0x05000009, + 0x82040580, 0x000000d0, 0x05fe0029, 0x4807c857, + 0x6140b801, 0x0501f84d, 0x40642800, 0x0501f011, + 0x05f5ffa6, 0x05000003, 0x65074407, 0x05fdf01b, + 0x05f5ffbb, 0x59a00c07, 0x59a0140b, 0x8408157e, + 0x0501f852, 0x05020003, 0x65074407, 0x05fdf013, + 0x59a00c07, 0x82040580, 0x00000098, 0x05f40fc6, + 0x4817c857, 0x05f5ff3a, 0x0501f003, 0x0501f847, 0x05000005, 0x48174407, 0x4a03c014, 0x03800000, - 0x05f9f7cc, 0x0509ff09, 0x05f60f61, 0x4a03c014, - 0x03800000, 0x64134407, 0x05fdf009, 0x4a03c014, - 0x03800000, 0x05fdf00b, 0x4c5c0000, 0x4c600000, + 0x05f9f7c4, 0x0509ffff, 0x05f60f31, 0x4a03c014, + 0x03800000, 0x64134407, 0x05fdf001, 0x4a03c014, + 0x03800000, 0x05fdf003, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4004b800, 0x4008c000, 0x400cc800, - 0x0501f877, 0x05000019, 0x0501f8a3, 0x0502001b, + 0x0501f8e7, 0x05000019, 0x0501f913, 0x0502001b, 0x8c60053c, 0x0502000c, 0x8c60053e, 0x05000007, 0x4060b800, 0x825cbd00, 0x0000ff00, 0x805cb910, - 0x0501f899, 0x05020011, 0x4060b800, 0x0501f896, - 0x0502000e, 0x4064b800, 0x0501f893, 0x0502000b, - 0x0501f882, 0x4ce80000, 0x6021d027, 0x0521fdb2, + 0x0501f909, 0x05020011, 0x4060b800, 0x0501f906, + 0x0502000e, 0x4064b800, 0x0501f903, 0x0502000b, + 0x0501f8f2, 0x4ce80000, 0x6021d027, 0x0525f96d, 0x5c01d000, 0x90000541, 0x5c00c800, 0x5c00c000, - 0x5c00b800, 0x1c01f000, 0x0501f878, 0x80000580, - 0x05fdf7fa, 0x4c5c0000, 0x0501f855, 0x05000008, - 0x905cbd41, 0x0501f880, 0x05020007, 0x0501f8ba, - 0x0501f8ec, 0x0501f86d, 0x90000541, 0x5c00b800, - 0x1c01f000, 0x0501f869, 0x80000580, 0x05fdf7fc, - 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4004b800, - 0x4008c000, 0x0501f842, 0x05000016, 0x0501f86e, - 0x05020019, 0x8c60053e, 0x05000009, 0x4c5c0000, - 0x4060b800, 0x825cbd00, 0x0000ff00, 0x805cb910, - 0x0501f865, 0x5c00b800, 0x0502000f, 0x4c5c0000, - 0x4060b800, 0x0501f860, 0x5c00b800, 0x0502000a, - 0x05fdffd9, 0x05000003, 0x0501f84c, 0x90000541, - 0x40642800, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x0501f845, 0x80000580, 0x05fdf7f9, - 0x4ce80000, 0x4c580000, 0x4803c856, 0x6030b000, - 0x6029d000, 0x0521fd70, 0x4a03c013, 0x02000200, - 0x6029d000, 0x0521fd6c, 0x4a03c013, 0x02000000, - 0x8058b040, 0x05fe07f7, 0x61a00807, 0x4a03c013, - 0x03800300, 0x80040840, 0x0500000f, 0x4a03c014, - 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380, - 0x82000500, 0x00000300, 0x82000580, 0x00000300, - 0x05fe07f3, 0x90000541, 0x5c00b000, 0x5c01d000, - 0x1c01f000, 0x80000580, 0x05fdf7fc, 0x4ce80000, + 0x5c00b800, 0x1c01f000, 0x0501f8e8, 0x80000580, + 0x4803c856, 0x05fdf7f9, 0x4c5c0000, 0x0501f8c4, + 0x05000008, 0x905cbd41, 0x0501f8ef, 0x05020007, + 0x0501f929, 0x0501f959, 0x0501f8dc, 0x90000541, + 0x5c00b800, 0x1c01f000, 0x0501f8d8, 0x80000580, + 0x485fc857, 0x05fdf7fb, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x4004b800, 0x4008c000, 0x0501f8b0, + 0x05000016, 0x0501f8dc, 0x05020019, 0x8c60053e, + 0x05000009, 0x4c5c0000, 0x4060b800, 0x825cbd00, + 0x0000ff00, 0x805cb910, 0x0501f8d3, 0x5c00b800, + 0x0502000f, 0x4c5c0000, 0x4060b800, 0x0501f8ce, + 0x5c00b800, 0x0502000a, 0x05fdffd8, 0x05000003, + 0x0501f8ba, 0x90000541, 0x40642800, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0501f8b3, + 0x80000580, 0x4867c857, 0x05fdf7f8, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x4d040000, 0x4c500000, + 0x4c540000, 0x4c580000, 0x4004a000, 0x4008a800, + 0x400cb000, 0x412e0800, 0x40500800, 0x40541000, + 0x4004b800, 0x4008c000, 0x0501f881, 0x0500004f, + 0x0501f8ad, 0x05020056, 0x8c60053e, 0x05000009, + 0x4c5c0000, 0x4060b800, 0x825cbd00, 0x0000ff00, + 0x805cb910, 0x0501f8a4, 0x5c00b800, 0x0502004c, + 0x4c5c0000, 0x4060b800, 0x0501f89f, 0x5c00b800, + 0x05020047, 0x0501f86e, 0x0500003c, 0x905cbd41, + 0x0501f899, 0x05020042, 0x40581800, 0x900c1c88, + 0x05001004, 0x400cb000, 0x6020b800, 0x0501f003, + 0x4058b800, 0x4178b000, 0x0501f8cb, 0x82642d00, + 0x000000ff, 0x805cb840, 0x05000020, 0x0501f906, + 0x0501f8c5, 0x8064c8d0, 0x82640500, 0x0000ff00, + 0x80142d40, 0x805cb840, 0x05000018, 0x0501f8fe, + 0x0501f8bd, 0x8064c8e0, 0x82640500, 0x00ff0000, + 0x80142d40, 0x805cb840, 0x05000010, 0x0501f8f6, + 0x0501f8b5, 0x8064c8f0, 0x82640500, 0xff000000, + 0x80142d40, 0x805cb840, 0x05000008, 0x0501f8ee, + 0x44160800, 0x81060800, 0x40541800, 0x900c1c04, + 0x400ca800, 0x05fdf7dd, 0x44160800, 0x0501f8d7, + 0x0501f85a, 0x40581800, 0x90000541, 0x800c19c0, + 0x05000006, 0x81060800, 0x40541800, 0x900c1c04, + 0x400ca800, 0x05fdf7ad, 0x90000541, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c020800, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0501f847, + 0x80000580, 0x4867c857, 0x05fdf7f5, 0x4ce80000, + 0x4c580000, 0x4803c856, 0x6030b000, 0x6029d000, + 0x0525f8bc, 0x4a03c013, 0x02000200, 0x6029d000, + 0x0525f8b8, 0x4a03c013, 0x02000000, 0x8058b040, + 0x05fe07f7, 0x61a00807, 0x4a03c013, 0x03800300, + 0x80040840, 0x0500000f, 0x4a03c014, 0x03800000, + 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500, + 0x00000300, 0x82000580, 0x00000300, 0x05fe07f3, + 0x90000541, 0x5c00b000, 0x5c01d000, 0x1c01f000, + 0x4803c856, 0x80000580, 0x05fdf7fb, 0x4ce80000, 0x61a00807, 0x4a03c013, 0x03800300, 0x80040840, 0x05000016, 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500, 0x00000300, - 0x82000580, 0x00000300, 0x05fe07f3, 0x6029d000, - 0x0521fd41, 0x4a03c013, 0x01000000, 0x6029d000, - 0x0521fd3d, 0x4a03c013, 0x02000000, 0x90000541, - 0x5c01d000, 0x1c01f000, 0x4803c857, 0x05fdffc1, + 0x82000580, 0x00000300, 0x05fe07f3, 0x6055d000, + 0x0525f88c, 0x4a03c013, 0x01000000, 0x6029d000, + 0x0525f888, 0x4a03c013, 0x02000000, 0x90000541, + 0x5c01d000, 0x1c01f000, 0x4803c856, 0x05fdffc0, 0x05fe07f3, 0x05fdf7fb, 0x4a03c013, 0x01000000, - 0x4ce80000, 0x6029d000, 0x0521fd2f, 0x5c01d000, + 0x4ce80000, 0x6029d000, 0x0525f87a, 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000, - 0x0521fd29, 0x5c01d000, 0x4a03c013, 0x01000100, + 0x0525f874, 0x5c01d000, 0x4a03c013, 0x01000100, 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x6020c000, 0x825c0500, 0x00000080, 0x800000c2, 0x82000540, 0x01000000, 0x4803c013, 0x4ce80000, 0x6029d000, - 0x0521fd19, 0x5c01d000, 0x4a03c013, 0x02000200, - 0x4ce80000, 0x6029d000, 0x0521fd13, 0x5c01d000, + 0x0525f864, 0x5c01d000, 0x4a03c013, 0x02000200, + 0x4ce80000, 0x6029d000, 0x0525f85e, 0x5c01d000, 0x4a03c013, 0x02000000, 0x805cb8c2, 0x8060c040, 0x05fe07ec, 0x4a03c013, 0x01000100, 0x4ce80000, - 0x6029d000, 0x0521fd08, 0x5c01d000, 0x4a03c013, - 0x02000200, 0x4ce80000, 0x6029d000, 0x0521fd02, + 0x6029d000, 0x0525f853, 0x5c01d000, 0x4a03c013, + 0x02000200, 0x4ce80000, 0x6029d000, 0x0525f84d, 0x5c01d000, 0x4a03c014, 0x03800000, 0x61a00807, 0x59e0b813, 0x825cbd00, 0x00000100, 0x80040840, 0x05000004, 0x405c0000, 0x80000540, 0x05fe07f9, 0x4a03c014, 0x03800380, 0x4a03c013, 0x02000000, - 0x4ce80000, 0x6029d000, 0x0521fcef, 0x5c01d000, + 0x4ce80000, 0x6029d000, 0x0525f83a, 0x5c01d000, 0x405c0000, 0x80000540, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x4c600000, 0x4803c856, 0x4a03c013, - 0x01000100, 0x6020c000, 0x61a0c807, 0x4ce80000, - 0x6029d000, 0x0521fce0, 0x5c01d000, 0x4a03c013, - 0x02000200, 0x4a03c014, 0x03800000, 0x59e00013, - 0x4a03c014, 0x03800380, 0x82000500, 0x00000200, - 0x05020003, 0x8064c840, 0x05fe07f7, 0x4178c800, - 0x0501f007, 0x4ce80000, 0x6029d000, 0x0521fcce, - 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000, - 0x6029d000, 0x0521fcc8, 0x5c01d000, 0x4a03c014, - 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380, - 0x82000500, 0x00000100, 0x80000110, 0x8064c8c2, - 0x8064cd40, 0x4a03c013, 0x02000000, 0x8060c040, - 0x05fe07e9, 0x4867c857, 0x5c00c000, 0x1c01f000, - 0x4803c856, 0x4a03c013, 0x01000100, 0x4ce80000, - 0x6029d000, 0x0521fcb0, 0x5c01d000, 0x4a03c013, - 0x02000200, 0x4ce80000, 0x6029d000, 0x0521fcaa, + 0x1c01f000, 0x4c600000, 0x4a03c013, 0x01000100, + 0x6020c000, 0x61a0c807, 0x4ce80000, 0x6029d000, + 0x0525f82c, 0x5c01d000, 0x4a03c013, 0x02000200, + 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014, + 0x03800380, 0x82000500, 0x00000200, 0x05020003, + 0x8064c840, 0x05fe07f7, 0x4178c800, 0x0501f007, + 0x4ce80000, 0x6029d000, 0x0525f81a, 0x5c01d000, + 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000, + 0x0525f814, 0x5c01d000, 0x4a03c014, 0x03800000, + 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500, + 0x00000100, 0x80000110, 0x8064c8c2, 0x8064cd40, + 0x4a03c013, 0x02000000, 0x8060c040, 0x05fe07e9, + 0x5c00c000, 0x1c01f000, 0x4a03c013, 0x01000100, + 0x4ce80000, 0x6029d000, 0x0521fffe, 0x5c01d000, + 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000, + 0x0521fff8, 0x5c01d000, 0x4a03c013, 0x02000000, + 0x1c01f000, 0x4a03c013, 0x01000000, 0x4ce80000, + 0x6029d000, 0x0521ffef, 0x5c01d000, 0x4a03c013, + 0x02000200, 0x4ce80000, 0x6029d000, 0x0521ffe9, 0x5c01d000, 0x4a03c013, 0x02000000, 0x1c01f000, - 0x59a00408, 0x59a8085c, 0x4803505c, 0x48074408, - 0x59a00a0a, 0x90040494, 0x05021002, 0x6140080f, - 0x59a8005d, 0x4807505d, 0x4803420a, 0x05f9f68d, + 0x59a00408, 0x59a8085f, 0x4803505f, 0x48074408, + 0x59a00a0a, 0x90040494, 0x05021002, 0x60500800, + 0x59a80060, 0x48075060, 0x4803420a, 0x05f9f609, 0x59a00407, 0x59a00a08, 0x900409c0, 0x80040d40, 0x59a00408, 0x59a01209, 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a0040a, 0x59a0220b, 0x901021c0, 0x80102540, - 0x054dfeff, 0x05f8067b, 0x05f9f6d2, 0x916c0580, + 0x0551fd51, 0x05f805f7, 0x05f9f64e, 0x916c0580, 0x0500000a, 0x59a80005, 0x59a00c07, 0x80041580, - 0xb0081500, 0x05f80673, 0x80080580, 0x48035005, - 0x05e9fc49, 0x05f9f66f, 0x59a00407, 0x59a80805, + 0xb0081500, 0x05f805ef, 0x80080580, 0x48035005, + 0x05e9fb4c, 0x05f9f5eb, 0x59a00407, 0x59a80805, 0x48035005, 0x80040d80, 0x8c040512, 0x05000004, 0x59c40001, 0x84000544, 0x48038801, 0x8c04050c, - 0x05ea0c3d, 0x59a00208, 0x599c0818, 0x8c040510, - 0x05000002, 0x8400054a, 0x48035006, 0x59a00408, - 0x8c00051a, 0x05000009, 0x600018ec, 0x60140800, - 0x580c1006, 0x4a001805, 0x70000005, 0x900c1c20, - 0x80040840, 0x05fe07fb, 0x48035007, 0x05f9f651, - 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f690, - 0x0515fd02, 0x05020003, 0x645b4407, 0x05f9f68c, - 0x916c0583, 0x05000003, 0x641f4407, 0x05f9f688, - 0x59a00c07, 0x82040500, 0xffffff00, 0x05fa0689, - 0x82041580, 0x000000ff, 0x05020007, 0x59a8003d, - 0x82000500, 0x000000ff, 0x82001540, 0x0000ff00, - 0x0501f00f, 0x82040400, 0x00102853, 0x50000000, - 0x80000110, 0x82000580, 0x00000080, 0x05f80679, - 0x59a8003d, 0x82000500, 0x000000ff, 0x80041580, - 0x05f80674, 0x840409c0, 0x80041540, 0x4c080000, - 0x0531f833, 0x5c001000, 0x05020003, 0x640f4407, - 0x05f9f667, 0x48ee602d, 0x480a621e, 0x4a02641e, - 0x0000bc09, 0x64066407, 0x0509fbc5, 0x05020004, - 0x0005ffdc, 0x640b4407, 0x05f9f65d, 0x497a5a08, - 0x4a02601d, 0x0010e512, 0x497a5809, 0x4a025c08, - 0x00008000, 0x4a01d809, 0x0010342c, 0x492e6009, - 0x60ca7000, 0x0009f000, 0x8d0c050e, 0x05000003, - 0x64074407, 0x05f9f64e, 0x0515fcc0, 0x05020003, - 0x645b4407, 0x05f9f64a, 0x916c0583, 0x05000003, - 0x641f4407, 0x05f9f646, 0x59a00c07, 0x82040500, - 0xffffff00, 0x05fa0647, 0x82041580, 0x000000ff, - 0x05020007, 0x59a8003d, 0x82000500, 0x000000ff, - 0x82001540, 0x0000ff00, 0x0501f00f, 0x82040400, - 0x00102853, 0x50000000, 0x80000110, 0x82000580, - 0x00000080, 0x05f80637, 0x59a8003d, 0x82000500, - 0x000000ff, 0x80041580, 0x05f80632, 0x840409c0, - 0x80041540, 0x4c080000, 0x052dfff1, 0x5c001000, - 0x05020003, 0x640f4407, 0x05f9f625, 0x48ee602d, - 0x480a621e, 0x4a02641e, 0x0000bc05, 0x64066407, - 0x0509fb83, 0x05020004, 0x0005ffdc, 0x640b4407, - 0x05f9f61b, 0x497a5a08, 0x4a02601d, 0x0010e512, - 0x497a5809, 0x4a025c08, 0x00008000, 0x4a01d809, - 0x0010342c, 0x492e6009, 0x60ca7000, 0x0009f000, - 0x592c0009, 0x82000580, 0x01000000, 0x05fa05c9, - 0x64134407, 0x05f9f60a, 0x497b4407, 0x497b4208, - 0x8d0c0520, 0x05000008, 0x59a80098, 0x59a80899, - 0x80040480, 0x59a8089a, 0x48074407, 0x80041480, - 0x480b4208, 0x0509fc8f, 0x48034408, 0x59a8103b, - 0x59a8029c, 0x80080480, 0x4803420a, 0x495f440a, - 0x59a80048, 0x4803420c, 0x4a03440c, 0x000000fe, - 0x05f9f5b0, 0x8d0c050e, 0x05000003, 0x64074407, - 0x05f9f5ef, 0x59a00407, 0x8c000500, 0x0502000d, - 0x59a8009b, 0x81640480, 0x05001008, 0x59a8000b, - 0x81500580, 0x05000007, 0x59a80099, 0x59a81098, - 0x80080580, 0x05000003, 0x64634407, 0x05f9f5e0, - 0x850e1d58, 0x4803c856, 0x850e1d46, 0x050df867, - 0x05f9f598, 0x4803c856, 0x8d0c050e, 0x05fa05e1, - 0x59a00407, 0x8c00051e, 0x05000007, 0x4803c856, - 0x59a0020c, 0x82000480, 0x00000800, 0x0500100f, - 0x05f9f5d4, 0x4803c856, 0x59a0020c, 0x599c0a01, - 0x80040480, 0x05021002, 0x05f9f5ce, 0x59a8003b, - 0x81640580, 0x05000005, 0x64634407, 0x05f9f5c4, - 0x64174407, 0x05f9f5c2, 0x59a80249, 0x8c00050a, - 0x05fc07fc, 0x59a00407, 0x8c00051e, 0x05000033, - 0x052dff83, 0x05020003, 0x640f4407, 0x05f9f5b8, - 0x0509fb1b, 0x05020004, 0x0005ffdc, 0x640b4407, - 0x05f9f5b3, 0x497a5a08, 0x59a00407, 0x4802620c, - 0x59a0020a, 0x4802640c, 0x59a0040a, 0x4802620d, - 0x59a0020e, 0x4802620e, 0x59a0040e, 0x4802640e, - 0x59a0020f, 0x4802620f, 0x59a0040f, 0x4802640f, - 0x59a00211, 0x48026210, 0x59a00411, 0x48026410, - 0x59a0020c, 0x4802640d, 0x0501f9f9, 0x05fc07e7, - 0x48ee602d, 0x58ee580d, 0x59300210, 0x59301c10, - 0x900c19c0, 0x800c1d40, 0x5930020e, 0x5930140e, - 0x900811c0, 0x80081540, 0x592c0a09, 0x912c040a, - 0x0509fb15, 0x4a01d809, 0x00103637, 0x64074000, - 0x49334001, 0x1c01f000, 0x0509fe75, 0x05fa0595, - 0x0529f85f, 0x598e600b, 0x0529fb5a, 0x0529f85c, - 0x417a3000, 0x0529fd9b, 0x59926005, 0x813261c0, - 0x05000007, 0x0529fa8c, 0x0529f825, 0x0529f82a, - 0x60027820, 0x60ba8000, 0x0525fede, 0x811a3000, - 0x91180485, 0x05fc17f4, 0x05e9ffd1, 0x0501f88f, - 0x497b50be, 0x64034408, 0x4201d000, 0x003d0900, - 0x0521fb63, 0x59c40880, 0x4c040000, 0x59c408a3, - 0x4c040000, 0x497b4002, 0x0501f892, 0x0501f8ac, - 0x4a03a005, 0x10000000, 0x4a038805, 0x000000f0, - 0x0501f8c6, 0x0501f916, 0x0500006c, 0x59dc0806, - 0x82040500, 0x43200f80, 0x05000007, 0x82040500, - 0x80000000, 0x05000004, 0x4a034408, 0x0000dddd, - 0x0501f062, 0x59d00806, 0x82040500, 0x43dc0700, - 0x05000007, 0x82040500, 0x80000000, 0x05000004, - 0x4a034408, 0x0000dddd, 0x0501f058, 0x59c80001, - 0x800001c0, 0x05fc07e8, 0x59c80018, 0x82000500, - 0xf0000000, 0x59c00808, 0x82040d00, 0x0fffffff, - 0x80040540, 0x48038008, 0x05edfb7b, 0x59c00006, - 0x4a038006, 0x10000000, 0x59c00009, 0x82000d00, - 0x00e00000, 0x05020020, 0x6403900d, 0x59c80020, - 0x82000500, 0xff000000, 0x82000580, 0x32000000, - 0x05020019, 0x6407900d, 0x59c80020, 0x82000500, - 0xff000000, 0x82000580, 0xe1000000, 0x05020012, - 0x6403900d, 0x59c80020, 0x82000500, 0x00ffffff, - 0x6403900d, 0x59c80821, 0x82040d00, 0x00ffffff, - 0x80040580, 0x05020008, 0x59a8003d, 0x80040580, - 0x05020005, 0x59c40005, 0x82000500, 0x000000f0, - 0x05000005, 0x4803c856, 0x0501f8da, 0x640750be, - 0x0501f002, 0x0501f8e5, 0x61900000, 0x80000040, - 0x0502001a, 0x05f5f84a, 0x0502000c, 0x59c40005, - 0x82000500, 0x000000f0, 0x0502000b, 0x0501f8c0, - 0x0500000c, 0x59c00007, 0x82000500, 0x000501c0, - 0x0502000b, 0x497b4408, 0x4a034408, 0x0000aaaa, - 0x0501f00e, 0x4a034408, 0x0000bbbb, 0x0501f00b, - 0x4a034408, 0x0000cccc, 0x0501f008, 0x4a034408, - 0x0000dddd, 0x0501f005, 0x59c00807, 0x90040d0c, - 0x05fc07e3, 0x0501f002, 0x640750be, 0x0501f8c8, - 0x0509fdf6, 0x0529fb4d, 0x0501f813, 0x4201d000, - 0x000186a0, 0x0521fae2, 0x5c000800, 0x480788a3, - 0x5c000800, 0x48078880, 0x59a800be, 0x800001c0, - 0x05f804a4, 0x05f9f4f3, 0x599c0201, 0x480350bf, - 0x41780800, 0x60401076, 0x0525fa34, 0x480b50c0, - 0x1c01f000, 0x0525ffa7, 0x59b800ea, 0x90000507, - 0x90000583, 0x05020002, 0x640770e8, 0x1c01f000, - 0x600380ee, 0x4a038006, 0x30000000, 0x59c00007, - 0x8c00050a, 0x05fe07fe, 0x59c00006, 0x59a0020a, - 0x59a00c0a, 0x900409c0, 0x80040d40, 0x48078001, - 0x59a0020f, 0x59a00c0f, 0x900409c0, 0x80040d40, - 0x48078000, 0x59a0020c, 0x48038002, 0x48038003, - 0x48038005, 0x497b9009, 0x59e00003, 0x82000540, - 0x00008060, 0x4803c003, 0x1c01f000, 0x41780800, - 0x8007a0ca, 0x83d3a400, 0x00007600, 0x61000800, - 0x05f1fa72, 0x6407a00a, 0x4a03a005, 0x20000000, - 0x59d00006, 0x4a03a005, 0x30000000, 0x59d00006, - 0x8c00050a, 0x05fe07fe, 0x59d00005, 0x59a00211, - 0x59a00c11, 0x900409c0, 0x80040d40, 0x4807a001, - 0x59a0020e, 0x59a00c0e, 0x900409c0, 0x80040d40, - 0x4807a000, 0x59a0020c, 0x4803a003, 0x4803a002, - 0x4803a008, 0x1c01f000, 0x59a00002, 0x4803c857, - 0x800001c0, 0x0502004d, 0x59a800ca, 0x8c000500, - 0x05020003, 0x59a800c0, 0x48038880, 0x59c400a3, - 0x82000540, 0x00002008, 0x8400053a, 0x480388a3, - 0x59c40008, 0x82000500, 0xffffffe1, 0x82000540, - 0x00000280, 0x48038808, 0x59c80040, 0x84000534, - 0x48039040, 0x0501f8f6, 0x05020012, 0x59a8003d, - 0x800000d0, 0x90000551, 0x48039120, 0x59a8003d, - 0x82000500, 0x00ffffff, 0x82000540, 0x32000000, - 0x48039121, 0x4a039123, 0xe1290008, 0x59a8003d, - 0x82000500, 0x00ffffff, 0x48039122, 0x0501f015, - 0x59a8003d, 0x82000500, 0x000000ff, 0x900009c0, - 0x840001c0, 0x80040540, 0x90000540, 0x48039120, - 0x59a8003d, 0x82000500, 0x000000ff, 0x82000540, - 0x01000000, 0x48039121, 0x4a039123, 0x08210008, - 0x59a8003d, 0x82000500, 0x000000ff, 0x48039122, - 0x497b9124, 0x59a80cc1, 0x80040800, 0x480754c1, - 0x900409c0, 0x82040540, 0x0000aaaa, 0x48039125, - 0x497b9126, 0x497b9127, 0x59c80101, 0x0501f8c4, - 0x05020004, 0x4a039100, 0x0000e980, 0x0501f003, - 0x4a039100, 0x0000e9a0, 0x1c01f000, 0x90000541, - 0x0502500b, 0x4203e000, 0x80000000, 0x40e81000, - 0x41780800, 0x61900000, 0x0525f998, 0x5994002e, - 0x80080400, 0x4803282e, 0x80000580, 0x1c01f000, - 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, - 0x4cd80000, 0x417a3000, 0x0529fc52, 0x0529f946, - 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, - 0x5c032000, 0x1c01f000, 0x59c80007, 0x8c000500, - 0x05000002, 0x64c3900d, 0x1c01f000, 0x4a038805, - 0x00020000, 0x60f00800, 0x05f1f9e4, 0x4a038891, - 0x0000ffff, 0x59c80035, 0x48039035, 0x6503900d, - 0x600380ee, 0x05edfa5c, 0x4a038006, 0x20000000, - 0x608380ee, 0x05edfa58, 0x4a038006, 0x20000000, - 0x4a03a005, 0x20000000, 0x59d00006, 0x4a03a005, - 0x30000000, 0x59a00207, 0xb0000585, 0x05020004, - 0x59a0000d, 0x800001c0, 0x05000009, 0x4a03b805, - 0x30000001, 0x59dc0006, 0x4a03b805, 0x20000000, - 0x59dc0806, 0x8c04050a, 0x05fe07fe, 0x59d00806, - 0x8c04050a, 0x05fe07fe, 0x1c01f000, 0x0505f824, - 0x05f803fa, 0x58ee580d, 0x4d300000, 0x59a26001, - 0x59a00000, 0x4000b000, 0x80000000, 0x48034000, - 0x592c0001, 0x80000540, 0x0500001a, 0x40025800, - 0x8058b040, 0x05fe07fb, 0x58ec1007, 0x58ec1808, - 0x592c0a09, 0x4d2c0000, 0x58ec000d, 0x40025800, - 0x592c0208, 0x5c025800, 0x82000580, 0x00000103, - 0x05000006, 0x912c040a, 0x0509f96f, 0x4a01d809, - 0x00103637, 0x0501f005, 0x912c040a, 0x0509f96c, - 0x4a01d809, 0x00103637, 0x5c026000, 0x1c01f000, - 0x58ec000d, 0x40025800, 0x592c0208, 0x82000580, - 0x00000103, 0x05020004, 0x0005ffdc, 0x5c026000, - 0x05f9f394, 0x58ec000d, 0x40025800, 0x592c0408, - 0x8400055e, 0x48025c08, 0x61f6880f, 0x42003000, - 0x00fffffd, 0x050dfea7, 0x59a26001, 0x05000005, - 0x0005ffdc, 0x497b4407, 0x5c026000, 0x05f9f3c8, - 0x053dfa6a, 0x05fc07fb, 0x4a01d809, 0x00103679, - 0x05fdf7e2, 0x592c0009, 0x82000580, 0x01000000, - 0x05000013, 0x4d300000, 0x59a26001, 0x5930020d, - 0x59301c0c, 0x900001c0, 0x800c1d40, 0x5930040f, - 0x5930120f, 0x900001c0, 0x80081540, 0x592c0a09, - 0x912c040a, 0x0509f93a, 0x4a01d809, 0x00103637, - 0x64074000, 0x5c026000, 0x1c01f000, 0x4d300000, - 0x59a26001, 0x4a034408, 0x0000cccc, 0x4933c857, - 0x052dfd3c, 0x5c026000, 0x05f9f3b2, 0x4933c857, - 0x4c300000, 0x5930040d, 0x90000cb8, 0x05001003, - 0x64e25a09, 0x0501f003, 0x48025a09, 0x0501f009, - 0x800409c0, 0x05000007, 0x4c040000, 0x0509f8fc, - 0x5c000800, 0x05000004, 0x40040000, 0x05fdf7f3, - 0x90000541, 0x5c006000, 0x1c01f000, 0x59a00207, - 0xb0000584, 0x1c01f000, 0x490fc857, 0x8d0c050e, - 0x05000007, 0x05f1fcc9, 0x05020005, 0x600c0000, - 0x05f1fe91, 0x600c0000, 0x05f1fe5f, 0x59a00407, - 0x90000507, 0x0c01f001, 0x001036c3, 0x001036ca, - 0x001036e2, 0x001036c2, 0x001036c2, 0x001036c2, - 0x001036c2, 0x001036c2, 0x05f9f37e, 0x0509fcb3, - 0x60080810, 0x05f1feec, 0x90040542, 0x60080810, - 0x05f1feee, 0x0501f00e, 0x0509fcac, 0x60080810, - 0x05f1fee5, 0x90040541, 0x60080810, 0x05f1fee7, - 0x60300848, 0x05f1fee0, 0x82040540, 0x00000080, - 0x60300848, 0x05f1fee1, 0x0501f001, 0x59c80040, - 0x4c000000, 0x59a8003d, 0x4c000000, 0x59c400a3, - 0x4c000000, 0x59c40008, 0x4c000000, 0x0501f929, - 0x0500003a, 0x05e5fef9, 0x8d0c050e, 0x05000023, - 0x59c40006, 0x84000500, 0x48038806, 0x0529f96e, - 0x497b8880, 0x59c400a3, 0x82000500, 0xfcf8ffff, - 0x480388a3, 0x6012d800, 0x64078805, 0x05e9f90f, - 0x05f1fe1c, 0x497b5068, 0x64075075, 0x59a800a7, - 0x84000540, 0x480350a7, 0x4803c857, 0x4a01d809, - 0x001036fb, 0x64535078, 0x1c01f000, 0x42000000, - 0x0010dd09, 0x50000800, 0x84040d08, 0x44040000, - 0x59a800a7, 0x84000500, 0x480350a7, 0x4803c857, - 0x8d0c050e, 0x05fa033f, 0x0515f9a8, 0x05020003, - 0x645b4407, 0x05f9f332, 0x916c0583, 0x05fa0339, - 0x59c408a4, 0x90040d0f, 0x90040580, 0x05fa0335, - 0x0509fc17, 0x05fa033b, 0x59c80040, 0x4c000000, - 0x59a8003d, 0x4c000000, 0x59c400a3, 0x4c000000, - 0x59c40008, 0x4c000000, 0x59c40080, 0x4c000000, - 0x59a00210, 0x59a0bc10, 0x905cb9c0, 0x805cbd40, - 0x41784800, 0x41785000, 0x41785800, 0x41789000, - 0x41789800, 0x05fdfe31, 0x64034408, 0x0525fdec, - 0x598e600b, 0x0529f8e7, 0x0525fde9, 0x417a3000, - 0x0529fb28, 0x59926005, 0x813261c0, 0x05000007, - 0x0529f819, 0x0525fdb2, 0x0525fdb7, 0x60027820, - 0x60ba8000, 0x0525fc6b, 0x811a3000, 0x91180485, - 0x05fc17f4, 0x05e9fd5e, 0x4178c000, 0x497b4002, - 0x0501f936, 0x59a00408, 0x82000580, 0x0000dddd, - 0x05000072, 0x0501f976, 0x59a00408, 0x82000580, - 0x0000dddd, 0x0500006d, 0x59a0020d, 0x59a00c0d, - 0x80040d40, 0x05000002, 0x0501f9b8, 0x0501f9b7, - 0x05fdfe52, 0x8060c1c0, 0x05020014, 0x0501fa49, - 0x59a00408, 0x82000580, 0x0000dddd, 0x0500005f, - 0x05fdfe9b, 0x0502000a, 0x05f1fe1d, 0x05020006, - 0x645f4407, 0x05f9fae2, 0x4203e000, 0x50000000, - 0x0501f000, 0x60a85955, 0x0501f059, 0x59c80001, - 0x800001c0, 0x05fc07ee, 0x59c80801, 0x800409c0, - 0x05000006, 0x0501fa21, 0x40240000, 0x80280540, - 0x802c0540, 0x0502004e, 0x59a00002, 0x82000580, - 0xfeedbeef, 0x05000004, 0x42008800, 0x10000000, - 0x0501f003, 0x42008800, 0x10000004, 0x0501f9cf, - 0x4a034002, 0xfeedbeef, 0x0501fa22, 0x59a00408, - 0x82000580, 0x0000dddd, 0x05000038, 0x0501fa4e, - 0x59a00408, 0x82000580, 0x0000dddd, 0x05000033, - 0x05fdfe8a, 0x59c40005, 0x8c000534, 0x05000003, - 0x60ec5977, 0x0501f032, 0x05fdfe69, 0x05020006, - 0x61305999, 0x485f4210, 0x905cb9c0, 0x485f4410, - 0x0501f02b, 0x59a0040d, 0x800001c0, 0x0500000e, - 0x59a26000, 0x5930000f, 0x800001c0, 0x05fe07b8, - 0x59a26001, 0x5930080f, 0x800409c0, 0x05fe07b4, - 0x804891c0, 0x05fe07b2, 0x804c99c0, 0x05fe07b0, - 0x0501f85f, 0x805cb840, 0x05000005, 0x40240000, - 0x80280540, 0x802c0540, 0x05020015, 0x42000000, - 0x00030d40, 0x80000040, 0x0502000e, 0x59c00007, - 0x82000500, 0x000501c0, 0x05020008, 0x05f1fdc8, - 0x05020006, 0x645f4407, 0x05f9fa8d, 0x4203e000, - 0x50000000, 0x0501f000, 0x617459bb, 0x0501f004, - 0x59c00807, 0x90040d0c, 0x05fc07ef, 0x05fdfe45, - 0x59a0040d, 0x800001c0, 0x05000002, 0x0501f840, - 0x05fdfe53, 0x40240000, 0x80280540, 0x802c0540, - 0x05020003, 0x805cb9c0, 0x05fe0778, 0x0509fb7b, - 0x0529f8d2, 0x05fdfd98, 0x4201d000, 0x000186a0, - 0x0521f867, 0x5c000800, 0x48078880, 0x5c000800, - 0x48078808, 0x5c000800, 0x480788a3, 0x5c000800, - 0x4807503d, 0x5c000800, 0x48079040, 0x05e9fb22, - 0x59a00407, 0x90000503, 0x90000582, 0x0500001c, - 0x60080810, 0x05f1fdd8, 0x82040500, 0xfffffffc, - 0x60080810, 0x05f1fdd9, 0x60300848, 0x05f1fdd2, - 0x82040500, 0xffffff7f, 0x60300848, 0x05f1fdd3, - 0x0515f8d6, 0x05020003, 0x0515fc70, 0x0501f00c, - 0x4a0388a7, 0x0000f7f7, 0x42006000, 0xbeffffff, - 0x42006800, 0x80018000, 0x050dfa69, 0x42006000, - 0xfffeffff, 0x41786800, 0x050dfa65, 0x402c0000, - 0x80280540, 0x80240540, 0x05f80202, 0x48274407, - 0x482b4208, 0x482f4408, 0x05f9f252, 0x59a26000, - 0x813261c0, 0x0500000a, 0x59325809, 0x812e59c0, - 0x05000007, 0x0005ffdc, 0x05e9f999, 0x59a26001, - 0x59325809, 0x0005ffdc, 0x05e9f995, 0x1c01f000, - 0x61bc0801, 0x05f1fae9, 0x4a03503d, 0x000000ef, - 0x59c400a3, 0x8400055a, 0x8400053a, 0x480388a3, - 0x05f1fb52, 0x05020006, 0x60040000, 0x05f1fd32, - 0x60040000, 0x05f1fd00, 0x0501f013, 0x05f1fb51, - 0x05020006, 0x60000000, 0x05f1fd2b, 0x60000000, - 0x05f1fcf9, 0x0501f00c, 0x05f1fb50, 0x05020006, - 0x60080000, 0x05f1fd24, 0x60080000, 0x05f1fcf2, - 0x0501f005, 0x600c0000, 0x05f1fd1f, 0x600c0000, - 0x05f1fced, 0x6051d000, 0x051dffdb, 0x59c40008, + 0x05ea0b40, 0x59a00208, 0x599c0818, 0x8c040510, + 0x05000002, 0x8400054a, 0x48035006, 0x59a8103f, + 0x4c000000, 0x8c000510, 0x0502000e, 0x800811c0, + 0x0500001b, 0x497b503f, 0x497b523e, 0x42017800, + 0x00115aa4, 0x40bec000, 0x59a80a9f, 0x90050420, + 0x59a8003d, 0x8006cc00, 0x4967503d, 0x0501f010, + 0x800811c0, 0x0502000e, 0x59a80a9f, 0x4807523e, + 0x4a03503f, 0x00115aa4, 0x60c01000, 0x0525ff4c, + 0x82057c00, 0x00115aa4, 0x40bec000, 0x60810000, + 0x59aacc3e, 0x9166cc20, 0x4967503d, 0x5c000000, + 0x59a00408, 0x8c00051a, 0x05000009, 0x600018ec, + 0x60140800, 0x580c1006, 0x4a001805, 0x70000005, + 0x900c1c20, 0x80040840, 0x05fe07fb, 0x48035007, + 0x05f9f5ac, 0x8d0c050e, 0x05000003, 0x64074407, + 0x05f9f5eb, 0x0515fe9f, 0x05020003, 0x645b4407, + 0x05f9f5e7, 0x916c0583, 0x05000003, 0x641f4407, + 0x05f9f5e3, 0x59a00c07, 0x82040500, 0xffffff00, + 0x05fa05e4, 0x82041580, 0x000000ff, 0x05020007, + 0x59a80040, 0x82000500, 0x000000ff, 0x82001540, + 0x0000ff00, 0x0501f00f, 0x82040400, 0x001028fb, + 0x50000000, 0x80000110, 0x82000580, 0x00000080, + 0x05f805d4, 0x59a80040, 0x82000500, 0x000000ff, + 0x80041580, 0x05f805cf, 0x840409c0, 0x80041540, + 0x4c080000, 0x0531fbfb, 0x5c001000, 0x05020003, + 0x640f4407, 0x05f9f5c2, 0x48ee602d, 0x480a621e, + 0x4a02641e, 0x0000bc09, 0x64066407, 0x0509fc1a, + 0x05020004, 0x0009f810, 0x640b4407, 0x05f9f5b8, + 0x497a5a08, 0x4a02601d, 0x001124b6, 0x497a5809, + 0x4a025c08, 0x00008000, 0x4a01d809, 0x00103579, + 0x492e6009, 0x60ca7000, 0x0009f039, 0x8d0c050e, + 0x05000003, 0x64074407, 0x05f9f5a9, 0x0515fe5d, + 0x05020003, 0x645b4407, 0x05f9f5a5, 0x916c0583, + 0x05000003, 0x641f4407, 0x05f9f5a1, 0x59a00c07, + 0x82040500, 0xffffff00, 0x05fa05a2, 0x82041580, + 0x000000ff, 0x05020007, 0x59a80040, 0x82000500, + 0x000000ff, 0x82001540, 0x0000ff00, 0x0501f00f, + 0x82040400, 0x001028fb, 0x50000000, 0x80000110, + 0x82000580, 0x00000080, 0x05f80592, 0x59a80040, + 0x82000500, 0x000000ff, 0x80041580, 0x05f8058d, + 0x840409c0, 0x80041540, 0x4c080000, 0x0531fbb9, + 0x5c001000, 0x05020003, 0x640f4407, 0x05f9f580, + 0x48ee602d, 0x480a621e, 0x4a02641e, 0x0000bc05, + 0x64066407, 0x0509fbd8, 0x05020004, 0x0009f810, + 0x640b4407, 0x05f9f576, 0x497a5a08, 0x4a02601d, + 0x001124b6, 0x497a5809, 0x4a025c08, 0x00008000, + 0x4a01d809, 0x00103579, 0x492e6009, 0x60ca7000, + 0x0009f039, 0x592c0009, 0x82000580, 0x01000000, + 0x05fa0524, 0x64134407, 0x05f9f565, 0x497b4407, + 0x497b4208, 0x8d0c0520, 0x05000008, 0x59a8009b, + 0x59a8089c, 0x80040480, 0x59a8089d, 0x48074407, + 0x80041480, 0x480b4208, 0x0509fce5, 0x48034408, + 0x59a8043e, 0x4803420a, 0x495f440a, 0x59a8004b, + 0x4803420c, 0x4a03440c, 0x000000fe, 0x05f9f50d, + 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f54c, + 0x59a00407, 0x8c000500, 0x0502000d, 0x59a8009e, + 0x81640480, 0x05001008, 0x59a8000b, 0x81500580, + 0x05000007, 0x59a8009c, 0x59a8109b, 0x80080580, + 0x05000003, 0x64634407, 0x05f9f53d, 0x850e1d58, + 0x4803c856, 0x850e1d46, 0x050df911, 0x05f9f4f5, + 0x4803c856, 0x8d0c050e, 0x05fa053e, 0x59a00407, + 0x8c00051e, 0x05000007, 0x4803c856, 0x59a0020c, + 0x82000480, 0x00000800, 0x0500100f, 0x05f9f531, + 0x4803c856, 0x59a0020c, 0x599c0a01, 0x80040480, + 0x05021002, 0x05f9f52b, 0x59a8003d, 0x81640580, + 0x05000005, 0x64634407, 0x05f9f521, 0x64174407, + 0x05f9f51f, 0x59a8024c, 0x8c00050a, 0x05fc07fc, + 0x59a00407, 0x8c00051e, 0x05000033, 0x0531fb4d, + 0x05020003, 0x640f4407, 0x05f9f515, 0x0509fb72, + 0x05020004, 0x0009f810, 0x640b4407, 0x05f9f510, + 0x497a5a08, 0x59a00407, 0x4802620c, 0x59a0020a, + 0x4802640c, 0x59a0040a, 0x4802620d, 0x59a0020e, + 0x4802620e, 0x59a0040e, 0x4802640e, 0x59a0020f, + 0x4802620f, 0x59a0040f, 0x4802640f, 0x59a00211, + 0x48026210, 0x59a00411, 0x48026410, 0x59a0020c, + 0x4802640d, 0x0501f9f9, 0x05fc07e7, 0x48ee602d, + 0x58ee580d, 0x59300210, 0x59301c10, 0x900c19c0, + 0x800c1d40, 0x5930020e, 0x5930140e, 0x900811c0, + 0x80081540, 0x592c0a09, 0x912c040a, 0x0509fb6c, + 0x4a01d809, 0x00103782, 0x64074000, 0x49334001, + 0x1c01f000, 0x0509fecd, 0x05fa04f2, 0x0529fbd2, + 0x598e600b, 0x0529fecd, 0x0529fbcf, 0x417a3000, + 0x052df90e, 0x59926005, 0x813261c0, 0x05000007, + 0x0529fdff, 0x0529fb98, 0x0529fb9d, 0x60027820, + 0x60ba8000, 0x0529fa52, 0x811a3000, 0x91180485, + 0x05fc17f4, 0x05e9ff22, 0x0501f88f, 0x497b50c3, + 0x64034408, 0x4201d000, 0x003d0900, 0x0521fe83, + 0x59c40880, 0x4c040000, 0x59c408a3, 0x4c040000, + 0x497b4002, 0x0501f892, 0x0501f8ac, 0x4a03a005, + 0x10000000, 0x4a038805, 0x000000f0, 0x0501f8c6, + 0x0501f916, 0x0500006c, 0x59dc0806, 0x82040500, + 0x43200f80, 0x05000007, 0x82040500, 0x80000000, + 0x05000004, 0x4a034408, 0x0000dddd, 0x0501f062, + 0x59d00806, 0x82040500, 0x43dc0700, 0x05000007, + 0x82040500, 0x80000000, 0x05000004, 0x4a034408, + 0x0000dddd, 0x0501f058, 0x59c80001, 0x800001c0, + 0x05fc07e8, 0x59c80018, 0x82000500, 0xf0000000, + 0x59c00808, 0x82040d00, 0x0fffffff, 0x80040540, + 0x48038008, 0x05edface, 0x59c00006, 0x4a038006, + 0x10000000, 0x59c00009, 0x82000d00, 0x00e00000, + 0x05020020, 0x6403900d, 0x59c80020, 0x82000500, + 0xff000000, 0x82000580, 0x32000000, 0x05020019, + 0x6407900d, 0x59c80020, 0x82000500, 0xff000000, + 0x82000580, 0xe1000000, 0x05020012, 0x6403900d, + 0x59c80020, 0x82000500, 0x00ffffff, 0x6403900d, + 0x59c80821, 0x82040d00, 0x00ffffff, 0x80040580, + 0x05020008, 0x59a80040, 0x80040580, 0x05020005, + 0x59c40005, 0x82000500, 0x000000f0, 0x05000005, + 0x4803c856, 0x0501f8da, 0x640750c3, 0x0501f002, + 0x0501f8e5, 0x61900000, 0x80000040, 0x0502001a, + 0x05f1ff7f, 0x0502000c, 0x59c40005, 0x82000500, + 0x000000f0, 0x0502000b, 0x0501f8c0, 0x0500000c, + 0x59c00007, 0x82000500, 0x000501c0, 0x0502000b, + 0x497b4408, 0x4a034408, 0x0000aaaa, 0x0501f00e, + 0x4a034408, 0x0000bbbb, 0x0501f00b, 0x4a034408, + 0x0000cccc, 0x0501f008, 0x4a034408, 0x0000dddd, + 0x0501f005, 0x59c00807, 0x90040d0c, 0x05fc07e3, + 0x0501f002, 0x640750c3, 0x0501f8c8, 0x0509fe4e, + 0x0529fec0, 0x0501f813, 0x4201d000, 0x000186a0, + 0x0521fe02, 0x5c000800, 0x480788a3, 0x5c000800, + 0x48078880, 0x59a800c3, 0x800001c0, 0x05f80401, + 0x05f9f450, 0x599c0201, 0x480350c4, 0x41780800, + 0x60401076, 0x0525fda2, 0x480b50c5, 0x1c01f000, + 0x0529fb1a, 0x59b800ea, 0x90000507, 0x90000583, + 0x05020002, 0x640770e8, 0x1c01f000, 0x600380ee, + 0x4a038006, 0x30000000, 0x59c00007, 0x8c00050a, + 0x05fe07fe, 0x59c00006, 0x59a0020a, 0x59a00c0a, + 0x900409c0, 0x80040d40, 0x48078001, 0x59a0020f, + 0x59a00c0f, 0x900409c0, 0x80040d40, 0x48078000, + 0x59a0020c, 0x48038002, 0x48038003, 0x48038005, + 0x497b9009, 0x59e00003, 0x82000540, 0x00008060, + 0x4803c003, 0x1c01f000, 0x41780800, 0x8007a0ca, + 0x83d3a400, 0x00007600, 0x61000800, 0x05f1f998, + 0x6407a00a, 0x4a03a005, 0x20000000, 0x59d00006, + 0x4a03a005, 0x30000000, 0x59d00006, 0x8c00050a, + 0x05fe07fe, 0x59d00005, 0x59a00211, 0x59a00c11, + 0x900409c0, 0x80040d40, 0x4807a001, 0x59a0020e, + 0x59a00c0e, 0x900409c0, 0x80040d40, 0x4807a000, + 0x59a0020c, 0x4803a003, 0x4803a002, 0x4803a008, + 0x1c01f000, 0x59a00002, 0x4803c857, 0x800001c0, + 0x0502004d, 0x59a800cf, 0x8c000500, 0x05020003, + 0x59a800c5, 0x48038880, 0x59c400a3, 0x82000540, + 0x00002008, 0x8400053a, 0x480388a3, 0x59c40008, 0x82000500, 0xffffffe1, 0x82000540, 0x00000280, - 0x48038808, 0x4a0388a7, 0x0000f8f7, 0x4a038805, - 0x04000001, 0x42006000, 0xbe20bfff, 0x42006800, - 0x80018000, 0x050dfa1e, 0x42006000, 0xfffeffff, - 0x41786800, 0x050dfa1a, 0x6020b027, 0x6051d000, - 0x4c580000, 0x051dffc4, 0x05f1fd31, 0x5c00b000, - 0x05000004, 0x8058b040, 0x05fe07f9, 0x0501f029, - 0x59c40005, 0x8c000534, 0x05020005, 0x59c400a4, - 0x9000050f, 0x90000588, 0x05020022, 0x42006000, - 0x00020000, 0x050dfa0b, 0x6191d000, 0x051dffb2, - 0x42006000, 0xfeffffff, 0x42006800, 0x02000000, - 0x050df9ff, 0x42006000, 0xfdffffff, 0x41786800, - 0x050df9fb, 0x59c40001, 0x82000500, 0x00018000, - 0x82000580, 0x00018000, 0x59c400a3, 0x05020004, - 0x82000540, 0x00001000, 0x0501f003, 0x82000500, - 0xffffefff, 0x480388a3, 0x4a038805, 0x04000001, - 0x59c400a4, 0x9000050f, 0x90000580, 0x05000002, - 0x90000541, 0x1c01f000, 0x4803c856, 0x600380ee, - 0x05edf801, 0x59c00006, 0x59a0040d, 0x800001c0, - 0x05000037, 0x59a03c0d, 0x59a0020a, 0x59a01c0a, - 0x900c19c0, 0x800c1d40, 0x59a0020f, 0x59a0240f, - 0x901021c0, 0x80102540, 0x59a0020c, 0x82000500, - 0x0000fffc, 0x59a0140c, 0x900811c0, 0x80081540, - 0x480b8003, 0x052dfb7a, 0x05e40d50, 0x49334000, - 0x05e9f8f6, 0x64625a08, 0x4a025809, 0x00abcdef, - 0x492e6009, 0x492e600d, 0x481e600f, 0x6412600e, - 0x912c0415, 0x4802600c, 0x60301000, 0x901c0d81, - 0x05000008, 0x801c3840, 0x0501f963, 0x59a00408, - 0x82000580, 0x0000dddd, 0x05000011, 0x0501f004, - 0x41783800, 0x0501f95c, 0x0501f00d, 0x901c0c85, - 0x05001004, 0x40043800, 0x60f01000, 0x0501f005, - 0x80001580, 0x9008140c, 0x801c3840, 0x05fe07fe, - 0x912c0409, 0x0501f950, 0x05fe07f5, 0x497b9009, - 0x59e00003, 0x82000540, 0x00008060, 0x4803c003, - 0x4a038009, 0x00e00000, 0x1c01f000, 0x4803c856, - 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600, - 0x61000800, 0x05edff39, 0x6407a00a, 0x4a03a005, + 0x48038808, 0x59c80040, 0x84000534, 0x48039040, + 0x0501f8f6, 0x05020012, 0x59a80040, 0x800000d0, + 0x90000551, 0x48039120, 0x59a80040, 0x82000500, + 0x00ffffff, 0x82000540, 0x32000000, 0x48039121, + 0x4a039123, 0xe1290008, 0x59a80040, 0x82000500, + 0x00ffffff, 0x48039122, 0x0501f015, 0x59a80040, + 0x82000500, 0x000000ff, 0x900009c0, 0x840001c0, + 0x80040540, 0x90000540, 0x48039120, 0x59a80040, + 0x82000500, 0x000000ff, 0x82000540, 0x01000000, + 0x48039121, 0x4a039123, 0x08210008, 0x59a80040, + 0x82000500, 0x000000ff, 0x48039122, 0x497b9124, + 0x59a80cc6, 0x80040800, 0x480754c6, 0x900409c0, + 0x82040540, 0x0000aaaa, 0x48039125, 0x497b9126, + 0x497b9127, 0x59c80101, 0x0501f8c4, 0x05020004, + 0x4a039100, 0x0000e980, 0x0501f003, 0x4a039100, + 0x0000e9a0, 0x1c01f000, 0x90000541, 0x0502500b, + 0x4203e000, 0x80000000, 0x40e81000, 0x41780800, + 0x61900000, 0x0525fd06, 0x5994002f, 0x80080400, + 0x4803282f, 0x80000580, 0x1c01f000, 0x4d900000, + 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, + 0x417a3000, 0x0529ffc5, 0x0529fcb9, 0x5c01b000, + 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, + 0x1c01f000, 0x59c80007, 0x8c000500, 0x05000002, + 0x64c3900d, 0x1c01f000, 0x4a038805, 0x00020000, + 0x60f00800, 0x05f1f90a, 0x4a038891, 0x0000ffff, + 0x59c80035, 0x48039035, 0x6503900d, 0x600380ee, + 0x05edf9af, 0x4a038006, 0x20000000, 0x608380ee, + 0x05edf9ab, 0x4a038006, 0x20000000, 0x4a03a005, 0x20000000, 0x59d00006, 0x4a03a005, 0x30000000, - 0x59d00006, 0x8c00050a, 0x05fe07fe, 0x59d00005, - 0x59a0020d, 0x800001c0, 0x05000037, 0x59a03a0d, - 0x59a00211, 0x59a01c11, 0x900c19c0, 0x800c1d40, - 0x59a0020e, 0x59a0240e, 0x901021c0, 0x80102540, - 0x59a0120c, 0x82081500, 0x0000fffc, 0x59a0040c, - 0x900001c0, 0x80081540, 0x480ba003, 0x052dfb28, - 0x05e40cfe, 0x49334001, 0x05e9f8a4, 0x64625a08, - 0x4a025809, 0x00abcdef, 0x492e6009, 0x492e600d, - 0x481e600f, 0x6412600e, 0x912c0415, 0x4802600c, - 0x60301000, 0x901c0d81, 0x05000008, 0x801c3840, - 0x0501f911, 0x59a00408, 0x82000580, 0x0000dddd, - 0x05000011, 0x0501f004, 0x41783800, 0x0501f90a, - 0x0501f00d, 0x901c0c85, 0x05001004, 0x40043800, - 0x60f01000, 0x0501f005, 0x80001580, 0x9008140c, - 0x801c3840, 0x05fe07fe, 0x912c0409, 0x0501f8fe, - 0x05fe07f5, 0x1c01f000, 0x4803c856, 0x59a0020d, - 0x800001c0, 0x05000020, 0x904c0582, 0x0500003a, - 0x59a26001, 0x5930380f, 0x801c39c0, 0x05000036, - 0x801c3840, 0x481e600f, 0x5932580d, 0x5930080c, - 0x50042000, 0x58041801, 0x58041002, 0x82081500, - 0xfffffffc, 0x5930000e, 0x80000000, 0x90000d85, - 0x05020008, 0x497a600e, 0x592e5801, 0x812e59c0, - 0x05000018, 0x492e600d, 0x912c0c09, 0x0501f004, - 0x4802600e, 0x5930080c, 0x90040c03, 0x4806600c, - 0x0501f010, 0x59a0120c, 0x82081500, 0x0000fffc, + 0x59a00207, 0xb0000585, 0x05020004, 0x59a0000d, + 0x800001c0, 0x05000009, 0x4a03b805, 0x30000001, + 0x59dc0006, 0x4a03b805, 0x20000000, 0x59dc0806, + 0x8c04050a, 0x05fe07fe, 0x59d00806, 0x8c04050a, + 0x05fe07fe, 0x1c01f000, 0x0505f84f, 0x05f80357, + 0x58ee580d, 0x4d300000, 0x59a26001, 0x59a00000, + 0x4000b000, 0x80000000, 0x48034000, 0x592c0001, + 0x80000540, 0x0500001a, 0x40025800, 0x8058b040, + 0x05fe07fb, 0x58ec1007, 0x58ec1808, 0x592c0a09, + 0x4d2c0000, 0x58ec000d, 0x40025800, 0x592c0208, + 0x5c025800, 0x82000580, 0x00000103, 0x05000006, + 0x912c040a, 0x0509f9c6, 0x4a01d809, 0x00103782, + 0x0501f005, 0x912c040a, 0x0509f9c3, 0x4a01d809, + 0x00103782, 0x5c026000, 0x1c01f000, 0x58ec000d, + 0x40025800, 0x592c0208, 0x82000580, 0x00000103, + 0x05020004, 0x0009f810, 0x5c026000, 0x05f9f2f1, + 0x58ec000d, 0x40025800, 0x592c0408, 0x8400055e, + 0x48025c08, 0x61f6880f, 0x42003000, 0x00fffffd, + 0x050dff77, 0x59a26001, 0x05000005, 0x0009f810, + 0x497b4407, 0x5c026000, 0x05f9f325, 0x053dfeb7, + 0x05fc07fb, 0x4a01d809, 0x001037c4, 0x05fdf7e2, + 0x592c0009, 0x82000580, 0x01000000, 0x05000013, + 0x4d300000, 0x59a26001, 0x5930020d, 0x59301c0c, + 0x900001c0, 0x800c1d40, 0x5930040f, 0x5930120f, + 0x900001c0, 0x80081540, 0x592c0a09, 0x912c040a, + 0x0509f991, 0x4a01d809, 0x00103782, 0x64074000, + 0x5c026000, 0x1c01f000, 0x4d300000, 0x59a26001, + 0x4a034408, 0x0000cccc, 0x4933c857, 0x0531f906, + 0x5c026000, 0x05f9f30f, 0x4933c857, 0x4c300000, + 0x5930040d, 0x90000cb8, 0x05001003, 0x64e25a09, + 0x0501f003, 0x48025a09, 0x0501f009, 0x800409c0, + 0x05000007, 0x4c040000, 0x0509f953, 0x5c000800, + 0x05000004, 0x40040000, 0x05fdf7f3, 0x90000541, + 0x5c006000, 0x1c01f000, 0x59a00207, 0xb0000584, + 0x1c01f000, 0x490fc857, 0x8d0c050e, 0x05000007, + 0x05f1fbfe, 0x05020005, 0x600c0000, 0x05f1fdc6, + 0x600c0000, 0x05f1fd94, 0x59a00407, 0x90000507, + 0x0c01f001, 0x0010380e, 0x00103815, 0x0010383c, + 0x0010380d, 0x0010380d, 0x0010380d, 0x0010380d, + 0x0010380d, 0x05f9f2db, 0x0509fd5c, 0x60080810, + 0x05f1fe21, 0x90040542, 0x60080810, 0x05f1fe23, + 0x0501f00d, 0x60080810, 0x05f1fe1b, 0x90040541, + 0x60080810, 0x05f1fe1d, 0x60300848, 0x05f1fe16, + 0x82040540, 0x00000080, 0x60300848, 0x05f1fe17, + 0x0501f001, 0x0509fd49, 0x59c80040, 0x4c000000, + 0x59a80040, 0x4c000000, 0x59c400a3, 0x4c000000, + 0x59c40008, 0x4c000000, 0x0501f948, 0x05000049, + 0x0515fbac, 0x42006000, 0xfeffffff, 0x42006800, + 0x02000000, 0x050dfc1d, 0x42006000, 0xfdffffff, + 0x41786800, 0x050dfc19, 0x05f1fdf5, 0x59c408a4, + 0x90040d0f, 0x90040d80, 0x0500003a, 0x05e5fdda, + 0x8d0c050e, 0x05000023, 0x59c40006, 0x84000500, + 0x48038806, 0x0529fcd2, 0x497b8880, 0x59c400a3, + 0x82000500, 0xfcf8ffff, 0x480388a3, 0x6012d800, + 0x64078805, 0x05e5ffe4, 0x05f1fd42, 0x497b506b, + 0x64075078, 0x59a800aa, 0x84000540, 0x480350aa, + 0x4803c857, 0x4a01d809, 0x00103855, 0x6453507b, + 0x1c01f000, 0x42000000, 0x00111c8f, 0x50000800, + 0x84040d08, 0x44040000, 0x59a800aa, 0x84000500, + 0x480350aa, 0x4803c857, 0x8d0c050e, 0x05fa028d, + 0x0515fb38, 0x05020003, 0x645b4407, 0x05f9f280, + 0x916c0583, 0x05fa0287, 0x59c408a4, 0x90040d0f, + 0x90040580, 0x05fa0283, 0x0509fc60, 0x05fa0289, + 0x59c80040, 0x4c000000, 0x59a80040, 0x4c000000, + 0x59c400a3, 0x4c000000, 0x59c40008, 0x4c000000, + 0x59c40080, 0x4c000000, 0x59a00210, 0x59a0bc10, + 0x905cb9c0, 0x805cbd40, 0x41784800, 0x41785000, + 0x41785800, 0x41789000, 0x41789800, 0x05fdfe22, + 0x64034408, 0x0529f950, 0x598e600b, 0x0529fc4b, + 0x0529f94d, 0x417a3000, 0x0529fe8c, 0x59926005, + 0x813261c0, 0x05000007, 0x0529fb7d, 0x0529f916, + 0x0529f91b, 0x60027820, 0x60ba8000, 0x0525ffd0, + 0x811a3000, 0x91180485, 0x05fc17f4, 0x05e9fca0, + 0x4178c000, 0x497b4002, 0x0501f94d, 0x59a00408, + 0x82000580, 0x0000dddd, 0x05000082, 0x0501f98d, + 0x59a00408, 0x82000580, 0x0000dddd, 0x0500007d, + 0x59a0020d, 0x59a00c0d, 0x80040d40, 0x05000002, + 0x0501f9cf, 0x0501f9ce, 0x05fdfe43, 0x8060c1c0, + 0x0502001c, 0x0501fa62, 0x59a00408, 0x82000580, + 0x0000dddd, 0x0500006f, 0x05fdfe8c, 0x05020012, + 0x05f1fd43, 0x0502000e, 0x59c40004, 0x48034409, + 0x59c400a4, 0x4803420a, 0x59c40005, 0x4803440a, + 0x4a034209, 0x00000555, 0x645f4407, 0x05f9fa28, + 0x4203e000, 0x50000000, 0x0501f000, 0x60a85955, + 0x0501f061, 0x59c80001, 0x800001c0, 0x05fc07e6, + 0x59c80801, 0x800409c0, 0x05000006, 0x0501fa32, + 0x40240000, 0x80280540, 0x802c0540, 0x05020056, + 0x59a00002, 0x82000580, 0xfeedbeef, 0x05000004, + 0x42008800, 0x10000000, 0x0501f003, 0x42008800, + 0x10000004, 0x0501f9df, 0x4a034002, 0xfeedbeef, + 0x0501fa33, 0x59a00408, 0x82000580, 0x0000dddd, + 0x05000040, 0x0501fa5f, 0x59a00408, 0x82000580, + 0x0000dddd, 0x0500003b, 0x05fdfe73, 0x59c40005, + 0x8c000534, 0x05000003, 0x60ec5977, 0x0501f03a, + 0x05fdfe52, 0x05020006, 0x61305999, 0x485f4210, + 0x905cb9c0, 0x485f4410, 0x0501f033, 0x59a0040d, + 0x800001c0, 0x0500000e, 0x59a26000, 0x5930000f, + 0x800001c0, 0x05fe07b0, 0x59a26001, 0x5930080f, + 0x800409c0, 0x05fe07ac, 0x804891c0, 0x05fe07aa, + 0x804c99c0, 0x05fe07a8, 0x0501f867, 0x805cb840, + 0x05000005, 0x40240000, 0x80280540, 0x802c0540, + 0x0502001d, 0x42000000, 0x00030d40, 0x80000040, + 0x05020016, 0x59c00007, 0x82000500, 0x000501c0, + 0x05020010, 0x05f1fce6, 0x0502000e, 0x59c40004, + 0x48034409, 0x59c400a4, 0x4803420a, 0x59c40005, + 0x4803440a, 0x4a034209, 0x00000666, 0x645f4407, + 0x05f9f9cb, 0x4203e000, 0x50000000, 0x0501f000, + 0x617459bb, 0x0501f004, 0x59c00807, 0x90040d0c, + 0x05fc07e7, 0x05fdfe26, 0x59a0040d, 0x800001c0, + 0x05000002, 0x0501f840, 0x05fdfe34, 0x40240000, + 0x80280540, 0x802c0540, 0x05020003, 0x805cb9c0, + 0x05fe0768, 0x0509fbb4, 0x0529fc26, 0x05fdfd79, + 0x4201d000, 0x000186a0, 0x0521fb68, 0x5c000800, + 0x48078880, 0x5c000800, 0x48078808, 0x5c000800, + 0x480788a3, 0x5c000800, 0x48075040, 0x5c000800, + 0x48079040, 0x05e9fa1a, 0x59a00407, 0x90000503, + 0x90000582, 0x0500001c, 0x60080810, 0x05f1fcee, + 0x82040500, 0xfffffffc, 0x60080810, 0x05f1fcef, + 0x60300848, 0x05f1fce8, 0x82040500, 0xffffff7f, + 0x60300848, 0x05f1fce9, 0x0515fa56, 0x05020003, + 0x0515fdf6, 0x0501f00c, 0x4a0388a7, 0x0000f7f7, + 0x42006000, 0xbeffffff, 0x42006800, 0x80018000, + 0x050dfaf6, 0x42006000, 0xfffeffff, 0x41786800, + 0x050dfaf2, 0x402c0000, 0x80280540, 0x80240540, + 0x05f80140, 0x48274407, 0x482b4208, 0x482f4408, + 0x05f9f190, 0x59a26000, 0x813261c0, 0x0500000a, + 0x59325809, 0x812e59c0, 0x05000007, 0x0009f810, + 0x05e9f866, 0x59a26001, 0x59325809, 0x0009f810, + 0x05e9f862, 0x1c01f000, 0x61bc0801, 0x05f1f9ff, + 0x4a035040, 0x000000ef, 0x59c400a3, 0x8400055a, + 0x8400053a, 0x480388a3, 0x05f1fa68, 0x05020006, + 0x60040000, 0x05f1fc48, 0x60040000, 0x05f1fc16, + 0x0501f013, 0x05f1fa67, 0x05020006, 0x60000000, + 0x05f1fc41, 0x60000000, 0x05f1fc0f, 0x0501f00c, + 0x05f1fa66, 0x05020006, 0x60080000, 0x05f1fc3a, + 0x60080000, 0x05f1fc08, 0x0501f005, 0x600c0000, + 0x05f1fc35, 0x600c0000, 0x05f1fc03, 0x6051d000, + 0x0521fadc, 0x59c40008, 0x82000500, 0xffffffe1, + 0x82000540, 0x00000280, 0x48038808, 0x4a0388a7, + 0x0000f8f7, 0x4a038805, 0x04000001, 0x42006000, + 0xbe20bfff, 0x42006800, 0x80018000, 0x050dfaab, + 0x42006000, 0xfffeffff, 0x41786800, 0x050dfaa7, + 0x6020b027, 0x6051d000, 0x4c580000, 0x0521fac5, + 0x05f1fc47, 0x5c00b000, 0x05000006, 0x8058b040, + 0x05fe07f9, 0x4a034209, 0x00000111, 0x0501f02e, + 0x59c40005, 0x8c000534, 0x05020008, 0x4a034209, + 0x00000222, 0x59c400a4, 0x9000050f, 0x90000588, + 0x05020025, 0x497b4209, 0x42006000, 0x00020000, + 0x050dfa93, 0x6191d000, 0x0521faae, 0x42006000, + 0xfeffffff, 0x42006800, 0x02000000, 0x050dfa87, + 0x42006000, 0xfdffffff, 0x41786800, 0x050dfa83, + 0x59c40001, 0x82000500, 0x00018000, 0x82000580, + 0x00018000, 0x59c400a3, 0x05020004, 0x82000540, + 0x00001000, 0x0501f003, 0x82000500, 0xffffefff, + 0x480388a3, 0x4a038805, 0x04000001, 0x59c400a4, + 0x9000050f, 0x90000580, 0x05000004, 0x4a034209, + 0x00000333, 0x90000541, 0x1c01f000, 0x4803c856, + 0x600380ee, 0x05e9ff2e, 0x59c00006, 0x59a0040d, + 0x800001c0, 0x05000037, 0x59a03c0d, 0x59a0020a, + 0x59a01c0a, 0x900c19c0, 0x800c1d40, 0x59a0020f, + 0x59a0240f, 0x901021c0, 0x80102540, 0x59a0020c, + 0x82000500, 0x0000fffc, 0x59a0140c, 0x900811c0, + 0x80081540, 0x480b8003, 0x052dff1e, 0x05e40c1a, + 0x49334000, 0x05e5ffbc, 0x64625a08, 0x4a025809, + 0x00abcdef, 0x492e6009, 0x492e600d, 0x481e600f, + 0x6412600e, 0x912c0415, 0x4802600c, 0x60301000, + 0x901c0d81, 0x05000008, 0x801c3840, 0x0501f965, + 0x59a00408, 0x82000580, 0x0000dddd, 0x05000011, + 0x0501f004, 0x41783800, 0x0501f95e, 0x0501f00d, + 0x901c0c85, 0x05001004, 0x40043800, 0x60f01000, + 0x0501f005, 0x80001580, 0x9008140c, 0x801c3840, + 0x05fe07fe, 0x912c0409, 0x0501f952, 0x05fe07f5, + 0x497b9009, 0x59e00003, 0x82000540, 0x00008060, + 0x4803c003, 0x4a038009, 0x00e00000, 0x1c01f000, + 0x4803c856, 0x41780800, 0x8007a0ca, 0x83d3a400, + 0x00007600, 0x61000800, 0x05edfe39, 0x6407a00a, + 0x4a03a005, 0x20000000, 0x59d00006, 0x4a03a005, + 0x30000000, 0x59d00006, 0x8c00050a, 0x05fe07fe, + 0x59d00005, 0x59a0020d, 0x800001c0, 0x05000037, + 0x59a03a0d, 0x59a00211, 0x59a01c11, 0x900c19c0, + 0x800c1d40, 0x59a0020e, 0x59a0240e, 0x901021c0, + 0x80102540, 0x59a0120c, 0x82081500, 0x0000fffc, 0x59a0040c, 0x900001c0, 0x80081540, 0x480ba003, - 0x59a0020e, 0x59a0240e, 0x901021c0, 0x80102540, - 0x59a00211, 0x59a01c11, 0x900c19c0, 0x800c1d40, - 0x6061d075, 0x051dfefa, 0x6423a00a, 0x480ba002, - 0x59a800bf, 0x4803a008, 0x4813a000, 0x480fa001, - 0x4a03a005, 0x10000000, 0x05e45c9c, 0x804c9800, - 0x90000541, 0x1c01f000, 0x4847c857, 0x59a0040d, - 0x800001c0, 0x05000020, 0x90480582, 0x0500003e, - 0x59a26000, 0x5930380f, 0x801c39c0, 0x0500003a, - 0x801c3840, 0x481e600f, 0x5932580d, 0x5930080c, - 0x50042000, 0x58041801, 0x58041002, 0x82081500, - 0xfffffffc, 0x5930000e, 0x80000000, 0x90000d85, - 0x05020008, 0x497a600e, 0x592e5801, 0x812e59c0, - 0x0500001b, 0x492e600d, 0x912c0c09, 0x0501f004, - 0x4802600e, 0x5930080c, 0x90040c03, 0x4806600c, - 0x0501f013, 0x82440580, 0x10000000, 0x0502001e, - 0x59a0020f, 0x59a0240f, 0x901021c0, 0x80102540, - 0x59a0020a, 0x59a01c0a, 0x900c19c0, 0x800c1d40, - 0x59a0020c, 0x82000500, 0x0000fffc, 0x59a0140c, - 0x900811c0, 0x80081540, 0x480b8003, 0x48138000, - 0x480f8001, 0x480b8002, 0x59c80018, 0x82000500, - 0xf0000000, 0x59c02008, 0x82102500, 0x0fffffff, - 0x80100540, 0x48038008, 0x48478006, 0x80489000, - 0x9060c541, 0x1c01f000, 0x59c00009, 0x4803c857, - 0x82000d00, 0x00e00000, 0x0500000d, 0x485f4210, - 0x905cb9c0, 0x485f4410, 0x8c00052e, 0x05000002, - 0x80285000, 0x8c00052c, 0x05000002, 0x80244800, - 0x8c00052a, 0x05000002, 0x802c5800, 0x1c01f000, - 0x59d00806, 0x82040500, 0x43dc0700, 0x05000007, + 0x052dfecc, 0x05e40bc8, 0x49334001, 0x05e5ff6a, + 0x64625a08, 0x4a025809, 0x00abcdef, 0x492e6009, + 0x492e600d, 0x481e600f, 0x6412600e, 0x912c0415, + 0x4802600c, 0x60301000, 0x901c0d81, 0x05000008, + 0x801c3840, 0x0501f913, 0x59a00408, 0x82000580, + 0x0000dddd, 0x05000011, 0x0501f004, 0x41783800, + 0x0501f90c, 0x0501f00d, 0x901c0c85, 0x05001004, + 0x40043800, 0x60f01000, 0x0501f005, 0x80001580, + 0x9008140c, 0x801c3840, 0x05fe07fe, 0x912c0409, + 0x0501f900, 0x05fe07f5, 0x1c01f000, 0x4803c856, + 0x59a0020d, 0x800001c0, 0x05000020, 0x904c0582, + 0x0500003b, 0x59a26001, 0x5930380f, 0x801c39c0, + 0x05000037, 0x801c3840, 0x481e600f, 0x5932580d, + 0x5930080c, 0x50042000, 0x58041801, 0x58041002, + 0x82081500, 0xfffffffc, 0x5930000e, 0x80000000, + 0x90000d85, 0x05020008, 0x497a600e, 0x592e5801, + 0x812e59c0, 0x05000018, 0x492e600d, 0x912c0c09, + 0x0501f004, 0x4802600e, 0x5930080c, 0x90040c03, + 0x4806600c, 0x0501f010, 0x59a0120c, 0x82081500, + 0x0000fffc, 0x59a0040c, 0x900001c0, 0x80081540, + 0x480ba003, 0x59a0020e, 0x59a0240e, 0x901021c0, + 0x80102540, 0x59a00211, 0x59a01c11, 0x900c19c0, + 0x800c1d40, 0x6061d075, 0x0521f9f4, 0x6423a00a, + 0x480ba002, 0x59a800c4, 0x4803a008, 0x4813a000, + 0x480fa001, 0x59d00805, 0x4a03a005, 0x10000000, + 0x05e45b65, 0x804c9800, 0x90000541, 0x1c01f000, + 0x4847c857, 0x59a0040d, 0x800001c0, 0x05000020, + 0x90480582, 0x0500003f, 0x59a26000, 0x5930380f, + 0x801c39c0, 0x0500003b, 0x801c3840, 0x481e600f, + 0x5932580d, 0x5930080c, 0x50042000, 0x58041801, + 0x58041002, 0x82081500, 0xfffffffc, 0x5930000e, + 0x80000000, 0x90000d85, 0x05020008, 0x497a600e, + 0x592e5801, 0x812e59c0, 0x0500001b, 0x492e600d, + 0x912c0c09, 0x0501f004, 0x4802600e, 0x5930080c, + 0x90040c03, 0x4806600c, 0x0501f013, 0x82440580, + 0x10000000, 0x0502001f, 0x59a0020f, 0x59a0240f, + 0x901021c0, 0x80102540, 0x59a0020a, 0x59a01c0a, + 0x900c19c0, 0x800c1d40, 0x59a0020c, 0x82000500, + 0x0000fffc, 0x59a0140c, 0x900811c0, 0x80081540, + 0x480b8003, 0x48138000, 0x480f8001, 0x480b8002, + 0x59c80018, 0x82000500, 0xf0000000, 0x59c02008, + 0x82102500, 0x0fffffff, 0x80100540, 0x48038008, + 0x59c00806, 0x48478006, 0x80489000, 0x9060c541, + 0x1c01f000, 0x59c00009, 0x4803c857, 0x82000d00, + 0x00e00000, 0x0500000d, 0x485f4210, 0x905cb9c0, + 0x485f4410, 0x8c00052e, 0x05000002, 0x80285000, + 0x8c00052c, 0x05000002, 0x80244800, 0x8c00052a, + 0x05000002, 0x802c5800, 0x1c01f000, 0x59d00806, + 0x82040500, 0x43dc0700, 0x05000007, 0x82040500, + 0x80000000, 0x05000004, 0x4a034408, 0x0000dddd, + 0x0501f027, 0x59a0020d, 0x800001c0, 0x05000024, + 0x59d00806, 0x4807c857, 0x8c04053e, 0x05000020, + 0x8c040504, 0x0500001e, 0x4a03a005, 0x20000000, + 0x82040d00, 0x43dc0700, 0x05000004, 0x4a034408, + 0x0000dddd, 0x0501f016, 0x904c0483, 0x05e61aee, + 0x404c0000, 0x0c01f001, 0x00103b2d, 0x00103b2e, + 0x00103b34, 0x05e5fae8, 0x80000040, 0x40009800, + 0x05fdff43, 0x0500000a, 0x05fdff41, 0x0501f008, + 0x80000040, 0x40009800, 0x59d00806, 0x4807c857, + 0x8c04053e, 0x05fe07e5, 0x05fdff39, 0x1c01f000, + 0x59c00807, 0x82040500, 0x00f507c0, 0x05000007, 0x82040500, 0x80000000, 0x05000004, 0x4a034408, - 0x0000dddd, 0x0501f027, 0x59a0020d, 0x800001c0, - 0x05000024, 0x59d00806, 0x4807c857, 0x8c04053e, - 0x05000020, 0x8c040504, 0x0500001e, 0x4a03a005, - 0x20000000, 0x82040d00, 0x43dc0700, 0x05000004, - 0x4a034408, 0x0000dddd, 0x0501f016, 0x904c0483, - 0x05e61c26, 0x404c0000, 0x0c01f001, 0x001039ba, - 0x001039bb, 0x001039c1, 0x05e5fc20, 0x80000040, - 0x40009800, 0x05fdff45, 0x0500000a, 0x05fdff43, - 0x0501f008, 0x80000040, 0x40009800, 0x59d00806, - 0x4807c857, 0x8c04053e, 0x05fe07e5, 0x05fdff3b, - 0x1c01f000, 0x59c00807, 0x82040500, 0x00f507c0, - 0x05000007, 0x82040500, 0x80000000, 0x05000004, - 0x4a034408, 0x0000dddd, 0x0501f02a, 0x59a0040d, - 0x800001c0, 0x05000027, 0x59c00807, 0x4807c857, - 0x8c04053e, 0x05000023, 0x59c00807, 0x4a038006, - 0x20000000, 0x82040d00, 0x00f507c0, 0x05000004, - 0x4a034408, 0x0000dddd, 0x0501f01a, 0x90480483, - 0x05e61bf6, 0x40480000, 0x0c01f001, 0x001039ea, - 0x001039eb, 0x001039f3, 0x05e5fbf0, 0x80000040, - 0x40009000, 0x42008800, 0x10000004, 0x05fdff53, - 0x0500000c, 0x05fdff51, 0x0501f00a, 0x80000040, - 0x40009000, 0x59c00807, 0x4807c857, 0x8c04053e, - 0x05fe07e2, 0x42008800, 0x10000004, 0x05fdff47, - 0x1c01f000, 0x492fc857, 0x4000a800, 0x4a03b805, - 0x20000000, 0x59dc0006, 0x4a03b805, 0x30000000, - 0x4813b800, 0x480fb801, 0x480bb802, 0x4857b803, - 0x4a03b805, 0x30000002, 0x59dc0006, 0x4a03b805, - 0x70000001, 0x59dc0006, 0x4a03b805, 0x10000000, - 0x59dc0006, 0x8c00053e, 0x05fc07fe, 0x4a03b805, - 0x20000000, 0x59dc0006, 0x82000500, 0x43200f80, - 0x05000005, 0x4a034408, 0x0000dddd, 0x80000580, - 0x0501f00b, 0x59dc2000, 0x59dc1801, 0x801c39c0, - 0x05000007, 0x4d2c0000, 0x05e5ff60, 0x5c000800, - 0x05e40bb6, 0x642a5a08, 0x492c0801, 0x1c01f000, - 0x49cbc857, 0x59c80003, 0x82000500, 0xffffe0ff, - 0x48039003, 0x61f00800, 0x05edfdc8, 0x4a03902c, - 0x00200000, 0x61d0b003, 0x59c8002c, 0x8c00052c, - 0x05000006, 0x8058b040, 0x05fe07fc, 0x600c0080, - 0x41781000, 0x0501f148, 0x640b50c8, 0x42006000, - 0x00103b96, 0x50301000, 0x480bc857, 0x41784800, - 0x4a03902d, 0x00008000, 0x61d0b003, 0x59c8002c, - 0x8c000534, 0x05000006, 0x8058b040, 0x05fe07fc, - 0x600c0080, 0x41781000, 0x0501f137, 0x0501f8ab, - 0x80244800, 0x82081400, 0x02020202, 0x82240580, - 0x000003b1, 0x05fe07fa, 0x0501f93f, 0x41784800, - 0x50301000, 0x0501f8cc, 0x80244800, 0x82081400, - 0x02020202, 0x82240580, 0x000003b1, 0x05fe07fa, - 0x80306000, 0x82300580, 0x00103b98, 0x05fe07de, - 0x59a808c7, 0x800409c0, 0x05000005, 0x60100080, - 0x60081000, 0x59a818c6, 0x0501f11b, 0x42006000, - 0x00103b96, 0x644350c8, 0x50301000, 0x480bc857, - 0x41784800, 0x4a03902d, 0x00000800, 0x0501f887, - 0x80244800, 0x82081400, 0x02020202, 0x90240598, - 0x05fe07fb, 0x0501f91c, 0x41784800, 0x50301000, - 0x0501f8a9, 0x80244800, 0x82081400, 0x02020202, - 0x90240598, 0x05fe07fb, 0x80306000, 0x82300580, - 0x00103b98, 0x05fe07e9, 0x59a808c7, 0x800409c0, - 0x05000005, 0x60100080, 0x60401000, 0x59a818c6, - 0x0501f0f9, 0x42006000, 0x00103b96, 0x642350c8, - 0x50301000, 0x480bc857, 0x41784800, 0x4a03902d, - 0x00000400, 0x0501f865, 0x80244800, 0x82081400, - 0x03030303, 0x82240580, 0x00000088, 0x05fe07fa, - 0x0501f8f9, 0x41784800, 0x50301000, 0x0501f886, - 0x80244800, 0x82081400, 0x03030303, 0x82240580, - 0x00000088, 0x05fe07fa, 0x80306000, 0x82300580, - 0x00103b98, 0x05fe07e7, 0x59a808c7, 0x800409c0, - 0x05000005, 0x60100080, 0x60201000, 0x59a818c6, - 0x0501f0d5, 0x42006000, 0x00103b96, 0x648350c8, + 0x0000dddd, 0x0501f02a, 0x59a0040d, 0x800001c0, + 0x05000027, 0x59c00807, 0x4807c857, 0x8c04053e, + 0x05000023, 0x59c00807, 0x4a038006, 0x20000000, + 0x82040d00, 0x00f507c0, 0x05000004, 0x4a034408, + 0x0000dddd, 0x0501f01a, 0x90480483, 0x05e61abe, + 0x40480000, 0x0c01f001, 0x00103b5d, 0x00103b5e, + 0x00103b66, 0x05e5fab8, 0x80000040, 0x40009000, + 0x42008800, 0x10000004, 0x05fdff52, 0x0500000c, + 0x05fdff50, 0x0501f00a, 0x80000040, 0x40009000, + 0x59c00807, 0x4807c857, 0x8c04053e, 0x05fe07e2, + 0x42008800, 0x10000004, 0x05fdff46, 0x1c01f000, + 0x492fc857, 0x4000a800, 0x4a03b805, 0x20000000, + 0x59dc0006, 0x4a03b805, 0x30000000, 0x4813b800, + 0x480fb801, 0x480bb802, 0x4857b803, 0x4a03b805, + 0x30000002, 0x59dc0006, 0x4a03b805, 0x70000001, + 0x59dc0006, 0x4a03b805, 0x10000000, 0x59dc0006, + 0x8c00053e, 0x05fc07fe, 0x4a03b805, 0x20000000, + 0x59dc0006, 0x82000500, 0x43200f80, 0x05000005, + 0x4a034408, 0x0000dddd, 0x80000580, 0x0501f00b, + 0x59dc2000, 0x59dc1801, 0x801c39c0, 0x05000007, + 0x4d2c0000, 0x05e5fe24, 0x5c000800, 0x05e40a7e, + 0x642a5a08, 0x492c0801, 0x1c01f000, 0x49cbc857, + 0x59c80003, 0x82000500, 0xffffe0ff, 0x48039003, + 0x61f00800, 0x05edfcc6, 0x4a03902c, 0x00200000, + 0x61d0b003, 0x59c8002c, 0x8c00052c, 0x05000006, + 0x8058b040, 0x05fe07fc, 0x600c0080, 0x41781000, + 0x0501f148, 0x640b50cd, 0x42006000, 0x00103d09, 0x50301000, 0x480bc857, 0x41784800, 0x4a03902d, - 0x00002000, 0x61d0b003, 0x59c8002c, 0x8c000530, + 0x00008000, 0x61d0b003, 0x59c8002c, 0x8c000534, 0x05000006, 0x8058b040, 0x05fe07fc, 0x600c0080, - 0x41781000, 0x0501f0c4, 0x59c8002c, 0x82000500, - 0xffe0ffff, 0x82080d00, 0x001f0000, 0x80040540, - 0x4803902c, 0x0501f831, 0x80244800, 0x82081400, - 0x02020202, 0x82240580, 0x00000110, 0x05fe07fa, - 0x0501f8c5, 0x41784800, 0x50301000, 0x0501f852, - 0x59c80034, 0x82080d00, 0x001f0000, 0x82000500, - 0x001f0000, 0x80040580, 0x05000006, 0x59a800c7, - 0x80000000, 0x480350c7, 0x40240000, 0x480350c6, - 0x80244800, 0x82081400, 0x02020202, 0x82240580, - 0x00000110, 0x05fe07ee, 0x80306000, 0x82300580, - 0x00103b98, 0x05fe07cb, 0x59a808c7, 0x800409c0, - 0x05000004, 0x60100080, 0x60801000, 0x59a818c6, - 0x59c80803, 0x82040d40, 0x00001f00, 0x48079003, - 0x59c8002c, 0x8400052a, 0x4803902c, 0x61f00800, - 0x05edfd02, 0x05f5f703, 0x59c8002c, 0x82000500, - 0xffff0000, 0x82080d00, 0x0000ffff, 0x80040540, - 0x4803902c, 0x480b9028, 0x480b9029, 0x59a800c8, - 0x90004584, 0x05000007, 0x90000590, 0x05020003, - 0x80080920, 0x4807903a, 0x480b902a, 0x480b902b, - 0x59c8002d, 0x82000500, 0xfffffc00, 0x80240540, - 0x4803902d, 0x61d0b003, 0x59c8002c, 0x82000500, - 0x18000000, 0x05000006, 0x8058b040, 0x05fe07fb, - 0x600c0080, 0x41781000, 0x0501f06b, 0x6407902e, - 0x61d0b003, 0x59c8002e, 0x8c000500, 0x05000005, - 0x8058b040, 0x05fe07fc, 0x600c0080, 0x0501f062, - 0x1c01f000, 0x41783800, 0x59c8002d, 0x82000500, - 0xfffffc00, 0x80240d40, 0x4807902d, 0x61d0b003, - 0x59c8002c, 0x82000500, 0x18000000, 0x05000006, - 0x8058b040, 0x05fe07fb, 0x600c0080, 0x41781000, - 0x0501f051, 0x59c81830, 0x59c80030, 0x800c0d80, - 0x05fe07fd, 0x80080d80, 0x05000005, 0x4803c857, - 0x480bc857, 0x4827c857, 0x801c3800, 0x59c82031, - 0x59c80031, 0x80100d80, 0x05fe07fd, 0x80080d80, - 0x05000005, 0x4803c857, 0x480bc857, 0x4827c857, - 0x801c3800, 0x59a800c8, 0x90004584, 0x05000027, - 0x61fc41ff, 0x90000590, 0x05020003, 0x42004000, - 0x7f7f7f7f, 0x59c82832, 0x59c80032, 0x80140d80, - 0x05fe07fd, 0x80080d80, 0x05000005, 0x4803c857, - 0x480bc857, 0x4827c857, 0x801c3800, 0x59c83033, - 0x59c80033, 0x80180d80, 0x05fe07fd, 0x80080d80, + 0x41781000, 0x0501f137, 0x0501f8ab, 0x80244800, + 0x82081400, 0x02020202, 0x82240580, 0x000003b1, + 0x05fe07fa, 0x0501f93f, 0x41784800, 0x50301000, + 0x0501f8cc, 0x80244800, 0x82081400, 0x02020202, + 0x82240580, 0x000003b1, 0x05fe07fa, 0x80306000, + 0x82300580, 0x00103d0b, 0x05fe07de, 0x59a808cc, + 0x800409c0, 0x05000005, 0x60100080, 0x60081000, + 0x59a818cb, 0x0501f11b, 0x42006000, 0x00103d09, + 0x644350cd, 0x50301000, 0x480bc857, 0x41784800, + 0x4a03902d, 0x00000800, 0x0501f887, 0x80244800, + 0x82081400, 0x02020202, 0x90240598, 0x05fe07fb, + 0x0501f91c, 0x41784800, 0x50301000, 0x0501f8a9, + 0x80244800, 0x82081400, 0x02020202, 0x90240598, + 0x05fe07fb, 0x80306000, 0x82300580, 0x00103d0b, + 0x05fe07e9, 0x59a808cc, 0x800409c0, 0x05000005, + 0x60100080, 0x60401000, 0x59a818cb, 0x0501f0f9, + 0x42006000, 0x00103d09, 0x642350cd, 0x50301000, + 0x480bc857, 0x41784800, 0x4a03902d, 0x00000400, + 0x0501f865, 0x80244800, 0x82081400, 0x03030303, + 0x82240580, 0x00000088, 0x05fe07fa, 0x0501f8f9, + 0x41784800, 0x50301000, 0x0501f886, 0x80244800, + 0x82081400, 0x03030303, 0x82240580, 0x00000088, + 0x05fe07fa, 0x80306000, 0x82300580, 0x00103d0b, + 0x05fe07e7, 0x59a808cc, 0x800409c0, 0x05000005, + 0x60100080, 0x60201000, 0x59a818cb, 0x0501f0d5, + 0x42006000, 0x00103d09, 0x648350cd, 0x50301000, + 0x480bc857, 0x41784800, 0x4a03902d, 0x00002000, + 0x61d0b003, 0x59c8002c, 0x8c000530, 0x05000006, + 0x8058b040, 0x05fe07fc, 0x600c0080, 0x41781000, + 0x0501f0c4, 0x59c8002c, 0x82000500, 0xffe0ffff, + 0x82080d00, 0x001f0000, 0x80040540, 0x4803902c, + 0x0501f831, 0x80244800, 0x82081400, 0x02020202, + 0x82240580, 0x00000110, 0x05fe07fa, 0x0501f8c5, + 0x41784800, 0x50301000, 0x0501f852, 0x59c80034, + 0x82080d00, 0x001f0000, 0x82000500, 0x001f0000, + 0x80040580, 0x05000006, 0x59a800cc, 0x80000000, + 0x480350cc, 0x40240000, 0x480350cb, 0x80244800, + 0x82081400, 0x02020202, 0x82240580, 0x00000110, + 0x05fe07ee, 0x80306000, 0x82300580, 0x00103d0b, + 0x05fe07cb, 0x59a808cc, 0x800409c0, 0x05000004, + 0x60100080, 0x60801000, 0x59a818cb, 0x59c80803, + 0x82040d40, 0x00001f00, 0x48079003, 0x59c8002c, + 0x8400052a, 0x4803902c, 0x61f00800, 0x05edfc00, + 0x05f5f638, 0x59c8002c, 0x82000500, 0xffff0000, + 0x82080d00, 0x0000ffff, 0x80040540, 0x4803902c, + 0x480b9028, 0x480b9029, 0x59a800cd, 0x90004584, + 0x05000007, 0x90000590, 0x05020003, 0x80080920, + 0x4807903a, 0x480b902a, 0x480b902b, 0x59c8002d, + 0x82000500, 0xfffffc00, 0x80240540, 0x4803902d, + 0x61d0b003, 0x59c8002c, 0x82000500, 0x18000000, + 0x05000006, 0x8058b040, 0x05fe07fb, 0x600c0080, + 0x41781000, 0x0501f06b, 0x6407902e, 0x61d0b003, + 0x59c8002e, 0x8c000500, 0x05000005, 0x8058b040, + 0x05fe07fc, 0x600c0080, 0x0501f062, 0x1c01f000, + 0x41783800, 0x59c8002d, 0x82000500, 0xfffffc00, + 0x80240d40, 0x4807902d, 0x61d0b003, 0x59c8002c, + 0x82000500, 0x18000000, 0x05000006, 0x8058b040, + 0x05fe07fb, 0x600c0080, 0x41781000, 0x0501f051, + 0x59c81830, 0x59c80030, 0x800c0d80, 0x05fe07fd, + 0x80080d80, 0x05000005, 0x4803c857, 0x480bc857, + 0x4827c857, 0x801c3800, 0x59c82031, 0x59c80031, + 0x80100d80, 0x05fe07fd, 0x80080d80, 0x05000005, + 0x4803c857, 0x480bc857, 0x4827c857, 0x801c3800, + 0x59a800cd, 0x90004584, 0x05000027, 0x61fc41ff, + 0x90000590, 0x05020003, 0x42004000, 0x7f7f7f7f, + 0x59c82832, 0x59c80032, 0x80140d80, 0x05fe07fd, + 0x80080d80, 0x05000005, 0x4803c857, 0x480bc857, + 0x4827c857, 0x801c3800, 0x59c83033, 0x59c80033, + 0x80180d80, 0x05fe07fd, 0x80080d80, 0x05000005, + 0x4803c857, 0x480bc857, 0x4827c857, 0x801c3800, + 0x59c80034, 0x59c80834, 0x80040d80, 0x05fe07fd, + 0x80080d80, 0x40200000, 0x80040d00, 0x05000012, + 0x4803c857, 0x480bc857, 0x4827c857, 0x801c3800, + 0x0501f00d, 0x59c80034, 0x59c80834, 0x80040d80, + 0x05fe07fd, 0x80080d80, 0x82040d00, 0x000000ff, 0x05000005, 0x4803c857, 0x480bc857, 0x4827c857, - 0x801c3800, 0x59c80034, 0x59c80834, 0x80040d80, - 0x05fe07fd, 0x80080d80, 0x40200000, 0x80040d00, - 0x05000012, 0x4803c857, 0x480bc857, 0x4827c857, - 0x801c3800, 0x0501f00d, 0x59c80034, 0x59c80834, - 0x80040d80, 0x05fe07fd, 0x80080d80, 0x82040d00, - 0x000000ff, 0x05000005, 0x4803c857, 0x480bc857, - 0x4827c857, 0x801c3800, 0x801c39c0, 0x05000005, - 0x59a800c7, 0x801c0400, 0x480350c7, 0x482750c6, - 0x1c01f000, 0x48034207, 0x48074407, 0x480b4208, - 0x480f4408, 0x48134209, 0x48174409, 0x59c80003, - 0x82000540, 0x00001f00, 0x48039003, 0x59c8002c, - 0x8400052a, 0x4803902c, 0x61f00800, 0x05edfc67, - 0x05f5f66b, 0x42000000, 0x00600000, 0x80000040, - 0x05fe07ff, 0x1c01f000, 0x11121111, 0x44454442, - 0x0505fc07, 0x05020003, 0x640b4407, 0x05f5f6a0, - 0x42005000, 0x0010e511, 0x50285000, 0x482b4000, - 0x4200a000, 0x0010e512, 0x59a00408, 0x59a01208, - 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, - 0x900c19c0, 0x800c1d40, 0x42024800, 0x0010e512, - 0x912cac08, 0x6018b000, 0x9050040d, 0x48034001, - 0x0549fcf7, 0x60180800, 0x800400c4, 0x80080c00, - 0x48074002, 0x900c0c40, 0x48074003, 0x60180800, - 0x912c0408, 0x0505fc0f, 0x4a01d809, 0x00103bbd, - 0x1c01f000, 0x0501fa9e, 0x05f40674, 0x59a0a001, - 0x59a01000, 0x80081040, 0x480b4000, 0x05000005, - 0x59a01002, 0x59a01803, 0x58ee580d, 0x05fdf7e5, - 0x42000800, 0x0010e511, 0x50040800, 0x48074407, - 0x05f5f62c, 0x0505fbd2, 0x05020003, 0x640b4407, - 0x05f5f66b, 0x59a00c0b, 0x42000000, 0x0010e511, - 0x50000000, 0x80040480, 0x05f6166a, 0x8204a400, - 0x0010d17b, 0x5050a000, 0x912cac08, 0x6018b000, - 0x0549fccb, 0x59a00408, 0x59a01208, 0x900811c0, + 0x801c3800, 0x801c39c0, 0x05000005, 0x59a800cc, + 0x801c0400, 0x480350cc, 0x482750cb, 0x1c01f000, + 0x48034207, 0x48074407, 0x480b4208, 0x480f4408, + 0x48134209, 0x48174409, 0x59c80003, 0x82000540, + 0x00001f00, 0x48039003, 0x59c8002c, 0x8400052a, + 0x4803902c, 0x61f00800, 0x05edfb65, 0x05f5f5a0, + 0x42000000, 0x00600000, 0x80000040, 0x05fe07ff, + 0x1c01f000, 0x11121111, 0x44454442, 0x0505fc36, + 0x05020003, 0x640b4407, 0x05f5f5d5, 0x42005000, + 0x001124b5, 0x50285000, 0x482b4000, 0x4200a000, + 0x001124b6, 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, - 0x800c1d40, 0x60180800, 0x912c0408, 0x0505f3e1, - 0x59a00c0b, 0x800409c0, 0x05f40656, 0x900404a1, - 0x05f61654, 0x90040491, 0x05001002, 0x60400800, + 0x800c1d40, 0x42024800, 0x001124b6, 0x912cac08, + 0x6018b000, 0x9050040d, 0x48034001, 0x054dfaff, + 0x60180800, 0x800400c4, 0x80080c00, 0x48074002, + 0x900c0c40, 0x48074003, 0x60180800, 0x912c0408, + 0x0505fc3e, 0x4a01d809, 0x00103d30, 0x1c01f000, + 0x0501faa1, 0x05f405a9, 0x59a0a001, 0x59a01000, + 0x80081040, 0x480b4000, 0x05000005, 0x59a01002, + 0x59a01803, 0x58ee580d, 0x05fdf7e5, 0x42000800, + 0x001124b5, 0x50040800, 0x48074407, 0x05f5f561, + 0x0505fc01, 0x05020003, 0x640b4407, 0x05f5f5a0, + 0x59a00c0b, 0x42000000, 0x001124b5, 0x50000000, + 0x80040480, 0x05f6159f, 0x8204a400, 0x0010d8f9, + 0x5050a000, 0x912cac08, 0x6018b000, 0x054dfad3, + 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540, + 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40, + 0x60180800, 0x912c0408, 0x0505f410, 0x59a00c0b, + 0x800409c0, 0x05f4058b, 0x900404a1, 0x05f61589, + 0x90040491, 0x05001002, 0x60400800, 0x59a00209, + 0x59a01408, 0x900811c0, 0x80081540, 0x59a00208, + 0x59a01c07, 0x900c19c0, 0x800c1d40, 0x0505fbd6, + 0x05000005, 0x0505fbf4, 0x4a01d809, 0x00103d73, + 0x1c01f000, 0x640b4407, 0x05f5f571, 0x0501fa5e, + 0x05f40566, 0x59a00c0b, 0x90040491, 0x05001002, + 0x60400800, 0x59a0040c, 0x59a0120c, 0x900811c0, + 0x80081540, 0x59a0020a, 0x59a01c09, 0x900c19c0, + 0x800c1d40, 0x58ec0003, 0x0505fbe8, 0x4a01d809, + 0x00103d86, 0x1c01f000, 0x0501fa4b, 0x05f40553, + 0x59a00c0b, 0x90040491, 0x05f41516, 0x90040c90, 0x59a00209, 0x59a01408, 0x900811c0, 0x80081540, 0x59a00208, 0x59a01c07, 0x900c19c0, 0x800c1d40, - 0x0505fba7, 0x05000005, 0x0505fbc5, 0x4a01d809, - 0x00103c00, 0x1c01f000, 0x640b4407, 0x05f5f63c, - 0x0501fa5b, 0x05f40631, 0x59a00c0b, 0x90040491, - 0x05001002, 0x60400800, 0x59a0040c, 0x59a0120c, + 0xb0081400, 0x58ec0003, 0x0505fbcb, 0x4a01d809, + 0x00103d9a, 0x1c01f000, 0x0501fa37, 0x05f4053f, + 0x59a0040b, 0x90000c90, 0x59a0040c, 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a, 0x59a01c09, - 0x900c19c0, 0x800c1d40, 0x58ec0003, 0x0505fbb9, - 0x4a01d809, 0x00103c13, 0x1c01f000, 0x0501fa48, - 0x05f4061e, 0x59a00c0b, 0x90040491, 0x05f415e1, - 0x90040c90, 0x59a00209, 0x59a01408, 0x900811c0, - 0x80081540, 0x59a00208, 0x59a01c07, 0x900c19c0, - 0x800c1d40, 0xb0081400, 0x58ec0003, 0x0505fb9c, - 0x4a01d809, 0x00103c27, 0x1c01f000, 0x0501fa34, - 0x05f4060a, 0x59a0040b, 0x90000c90, 0x59a0040c, - 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a, - 0x59a01c09, 0x900c19c0, 0x800c1d40, 0xb0081400, - 0x58ec0003, 0x0505fb93, 0x4a01d809, 0x001029f5, - 0x1c01f000, 0x48efc857, 0x59a00208, 0x59a01408, - 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, - 0x900001c0, 0x800c1d40, 0x59a00407, 0x48034000, - 0x480b4001, 0x480f4002, 0x0505fb59, 0x05020003, - 0x640b4407, 0x05f5f5f2, 0x60400800, 0x0505fb74, - 0x4a01d809, 0x00103c4f, 0x1c01f000, 0x0501fa0c, - 0x05f405e2, 0x58ee580d, 0x48efc857, 0x49a3c857, - 0x492fc857, 0x592c0a08, 0x80040910, 0x05020003, - 0x64674407, 0x05f5f5e2, 0x4805d80c, 0x0501f005, - 0x0501f9ff, 0x05f405d5, 0x48efc857, 0x49a3c857, - 0x48efc857, 0x49a3c857, 0x58ec000c, 0x80000040, - 0x0500000d, 0x4801d80c, 0x0505fb39, 0x05020003, - 0x640b4407, 0x05f5f5d2, 0x60400800, 0x58ec1007, - 0x58ec1808, 0x0505fb52, 0x4a01d809, 0x00103c5c, - 0x1c01f000, 0x58ee580d, 0x48efc857, 0x49a3c857, - 0x492fc857, 0x492f3000, 0x592c0408, 0x8400055e, - 0x48025c08, 0x4a01d809, 0x00103c7c, 0x1c01f000, - 0x4d2c0000, 0x58ee580d, 0x48efc857, 0x49a3c857, - 0x492fc857, 0x592c0408, 0x8400051e, 0x48025c08, - 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400, - 0x900c1c40, 0x912c0408, 0x60400800, 0x5c025800, - 0x0505f33c, 0x8d0c050e, 0x05000003, 0x64074407, - 0x05f5f5ab, 0x916c0583, 0x05000003, 0x641f4407, - 0x05f5f5a7, 0x59a0320c, 0x82183500, 0x000000ff, - 0x59a28c07, 0x0505fbec, 0x05f605a6, 0x050dfdde, - 0x05f605a4, 0x83440580, 0x000007fd, 0x05000005, - 0x050dfd85, 0x05000003, 0x64274407, 0x05f5f598, - 0x0505fafb, 0x05020003, 0x640b4407, 0x05f5f594, - 0x801831c0, 0x05000007, 0x412c0800, 0x0505faf4, - 0x05020003, 0x640b4407, 0x05f5f58d, 0x40065800, - 0x4a025c08, 0x00008000, 0x497a5a08, 0x0539f8cf, - 0x05020003, 0x640f4407, 0x05f5f585, 0x4a01d809, - 0x00103cba, 0x1c01f000, 0x592c0009, 0x82000580, - 0x01000000, 0x05020003, 0x64134407, 0x05f5f57c, - 0x592c040a, 0x82002d00, 0x0000ff00, 0x82000500, - 0x000000ff, 0x80000904, 0x80040800, 0x90040486, - 0x05001002, 0x60140800, 0x4c500000, 0x4c540000, - 0x4c580000, 0x912ca40a, 0x4050a800, 0x4004b000, - 0x0549fc12, 0x59a00408, 0x59a01208, 0x900811c0, - 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, - 0x800c1d40, 0x912c040a, 0x4c140000, 0x0505faed, - 0x5c002800, 0x801429c0, 0x05000003, 0x4a01d809, - 0x00103ce5, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x1c01f000, 0x0501f976, 0x05f4054c, 0x58ee580d, - 0x812e59c0, 0x05e408f1, 0x592c000a, 0x82000500, - 0xff000000, 0x80000904, 0x800409c0, 0x05f40509, - 0x4807c857, 0x9004048e, 0x05001002, 0x60340800, - 0x592e5801, 0x812e59c0, 0x05e408e4, 0x4c500000, - 0x4c540000, 0x4c580000, 0x912ca409, 0x4050a800, - 0x4004b000, 0x0549fbe5, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x58ec1007, 0x58ec1808, 0x912c0409, - 0x0505f2c4, 0x0505fa9a, 0x05020003, 0x640b4407, - 0x05f5f533, 0x59a00c07, 0x82040500, 0x0000ff00, - 0x840001c0, 0x9000148e, 0x05f61532, 0x0c01f001, - 0x00103d1e, 0x00103d24, 0x00103d2a, 0x00103d2b, - 0x00103d2f, 0x00103d49, 0x00103d4d, 0x00103d36, - 0x00103d3b, 0x00103d41, 0x00103d2a, 0x00103d2a, - 0x00103d2a, 0x00103d2a, 0x60340800, 0x42003800, - 0x00103d76, 0x4a034000, 0x0010dd46, 0x0501f02d, - 0x60340800, 0x42003800, 0x00103d76, 0x4a034000, - 0x0010dd53, 0x0501f027, 0x05f5f516, 0x0505fc9e, - 0x05f60514, 0x497b501c, 0x05f5f4ca, 0x0505fc9a, - 0x05f60510, 0x59a8101b, 0x800811c0, 0x05f404c5, - 0x480b501c, 0x05f5f4c3, 0x0505fc93, 0x05f60509, - 0x497b500f, 0x497b5010, 0x05f5f4be, 0x0505fc8e, - 0x05f60504, 0x6403500f, 0x4a035010, 0x000927c0, - 0x05f5f4b8, 0x59a00c07, 0x82040d00, 0x000000ff, - 0x05f404fc, 0x48074000, 0x42003800, 0x00103d57, - 0x0501f008, 0x60200800, 0x42003800, 0x00103d7f, - 0x0501f004, 0x60100800, 0x42003800, 0x00103db0, - 0x0501f902, 0x912c0409, 0x4c1c0000, 0x0505fa6c, - 0x5c003800, 0x481dd809, 0x1c01f000, 0x0501f904, - 0x05f404da, 0x58ee580d, 0x59a0b000, 0x912ca409, - 0x50500800, 0x82040580, 0x00110307, 0x0502000f, - 0x82041500, 0x000000ff, 0x90080488, 0x0502100b, - 0x4200a800, 0x0010dc14, 0x80081840, 0x8050a000, - 0x50500000, 0x4400a800, 0x8054a800, 0x800c1840, - 0x05fe07fb, 0x0501f005, 0x48074407, 0x900409c0, - 0x48074208, 0x05f5f4cf, 0x8050a000, 0x8058b482, - 0x05fe07e8, 0x05f5f483, 0x0501f8e5, 0x05f404bb, - 0x58ee580d, 0x64075047, 0x6034b000, 0x59a0a800, - 0x912ca409, 0x0549fb65, 0x05f5f47a, 0x0501f8dc, - 0x05f404b2, 0x58ee580d, 0x912ca409, 0x50500000, - 0x82001500, 0x000c0016, 0x05f604ba, 0x90500c03, - 0x50040000, 0x90001501, 0x05f604b6, 0x50500000, - 0x90001528, 0x05000015, 0x900815a8, 0x05f604b1, - 0x80500800, 0x50040000, 0x90001513, 0x90081593, - 0x05f604ac, 0x80040800, 0x50040000, 0x82001500, - 0x00050000, 0x82081580, 0x00050000, 0x05f604a5, - 0x916c0580, 0x0500000e, 0x599c0019, 0x8c00050e, - 0x0502000b, 0x05f5f49f, 0x80500800, 0x50040000, - 0x90001513, 0x05f6049b, 0x80040800, 0x50040000, - 0x82001500, 0x00050000, 0x05f60496, 0x6020b000, - 0x4200a800, 0x0010dd3e, 0x0549faf9, 0x05f5f449, - 0x0501f8ab, 0x05f40481, 0x58ee580d, 0x6010b000, - 0x4200a800, 0x0010e50c, 0x912ca409, 0x0549faf0, - 0x850e1d50, 0x05f5f43f, 0x0505f9e5, 0x05020003, - 0x640b4407, 0x05f5f47e, 0x912cac09, 0x59a00c07, - 0x82040500, 0x0000ff00, 0x840001c0, 0x9000148e, - 0x05f6147c, 0x0c01f001, 0x00103dd4, 0x00103dd7, - 0x00103dda, 0x00103ddb, 0x00103dee, 0x00103e10, - 0x00103dda, 0x00103e16, 0x00103df5, 0x00103e06, - 0x00103dda, 0x00103dda, 0x00103dda, 0x00103dda, - 0x4200a000, 0x0010dd46, 0x0501f06e, 0x4200a000, - 0x0010dd53, 0x0501f06b, 0x05f5f466, 0x0505fbee, - 0x05f60464, 0x59a8041d, 0x48034407, 0x59a8021d, - 0x48034208, 0x59a8041e, 0x48034408, 0x59a8021e, - 0x4803420a, 0x59a8041b, 0x4803440a, 0x59a8021b, - 0x4803420b, 0x59a8041c, 0x4803440b, 0x59a8021c, - 0x4803420c, 0x05f5f40b, 0x0505fbdb, 0x05f60451, - 0x0501f862, 0x60600800, 0x42000000, 0x0010dc23, - 0x0505f1d4, 0x0505fbd4, 0x05000002, 0x05f5f449, - 0x59a80411, 0x48034407, 0x59a80211, 0x48034208, - 0x59a80412, 0x48034408, 0x59a80212, 0x4803420a, - 0x6403440a, 0x6403420b, 0x6427440b, 0x4a03420c, - 0x000027c0, 0x05f5f3f3, 0x0505fbc3, 0x05000002, - 0x05f40438, 0x0501f849, 0x61ec0801, 0x800400c4, - 0x48034407, 0x42000000, 0x00107dd1, 0x0505f1b9, - 0x6020b000, 0x40580800, 0x4200a000, 0x0010dd3e, - 0x0549fa93, 0x0501f032, 0x59a00a0b, 0x6473420b, - 0x9004049c, 0x05f41427, 0x603cb000, 0x4178a000, - 0x0549fa93, 0x912cac09, 0x6010b000, 0xb1a8a40d, - 0x0549fa87, 0x916c0580, 0x05000004, 0x6010b000, - 0x91a8a400, 0x0549fa82, 0x912cac15, 0x600cb000, - 0xb1a8a411, 0x0549fa7e, 0x492f4000, 0x0505f974, - 0x05020003, 0x640b4407, 0x05f5f40d, 0x912cac09, - 0x603cb000, 0x4178a000, 0x0549fa7d, 0x912cac09, - 0x6004b000, 0xb1a8a414, 0x0549fa71, 0x912cac0a, - 0x6010b000, 0xb1a8a415, 0x0549fa6d, 0x0501f817, - 0x492f4001, 0x59a25800, 0x912c0409, 0x603c0800, - 0x0505f988, 0x4a01d809, 0x00103e4a, 0x1c01f000, - 0x6034b000, 0x40580800, 0x0549fa9c, 0x0501f80b, - 0x912c0409, 0x0505f17f, 0x0501f811, 0x05f403e7, - 0x59a25801, 0x58ec1007, 0x58ec1808, 0x912c0409, - 0x60340800, 0x0505f177, 0x59a00208, 0x59a01408, - 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, - 0x900001c0, 0x800c1d40, 0x1c01f000, 0x4031d800, - 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200, - 0x1c01f000, 0x59a00407, 0x80000d40, 0x05020003, - 0x48072832, 0x05f5f393, 0x8d0c050e, 0x05020007, - 0x4c000000, 0x0511fa45, 0x5c000000, 0x05000003, - 0x645b4407, 0x05f5f3ce, 0x82000c80, 0x00001000, - 0x05f613d0, 0x90000c82, 0x05f413ce, 0x800008c6, - 0x80040c00, 0x80040c00, 0x48072832, 0x59a800af, - 0x84000500, 0x59a00a08, 0x8c040500, 0x05000002, - 0x84000540, 0x480350af, 0x05f5f37a, 0x8d0c050e, - 0x05020003, 0x0511fa2d, 0x0502000c, 0x59a800af, - 0x8c000500, 0x05020005, 0x4a03c014, 0x00400040, - 0x4a03c013, 0x00400040, 0x59a800af, 0x8400054a, - 0x480350af, 0x05e1ff4d, 0x1c01f000, 0x916c0580, - 0x05020003, 0x641f4407, 0x05f5f3a9, 0x59a01407, - 0x800811c0, 0x0502002a, 0x497b4208, 0x05f1f8e9, - 0x05000011, 0x05f1f8ce, 0x64074208, 0x0502000e, - 0x4c080000, 0x05f1f8d5, 0x5c001000, 0x05020006, - 0x640b4208, 0x05edfcd3, 0x05020007, 0x64134208, - 0x0501f005, 0x640f4208, 0x05edfcbc, 0x05020002, - 0x64174208, 0x59c40801, 0x82040d00, 0x00018000, - 0x90040580, 0x05020003, 0x64034407, 0x0501f069, - 0x82040580, 0x00008000, 0x05020003, 0x64074407, - 0x0501f064, 0x82040580, 0x00010000, 0x05020003, - 0x640f4407, 0x0501f05f, 0x82040580, 0x00018000, - 0x05e20f1e, 0x64134407, 0x0501f05a, 0x59a800d1, - 0x8c000502, 0x05000004, 0x60080000, 0x40000800, - 0x0501f012, 0x59a00208, 0x4c000000, 0x0505fa23, - 0x5c000000, 0x05000005, 0x4c000000, 0x0505fa36, - 0x5c000000, 0x05020007, 0x90000d84, 0x05000003, - 0x90000d82, 0x05020003, 0x600c0000, 0x600c1000, - 0x48034002, 0x59a80869, 0x48035069, 0x599c7819, - 0x823c7d00, 0xffff1fff, 0x800000da, 0x803c7d40, - 0x483f3819, 0x497b4208, 0x05f1f8a2, 0x05000013, - 0x05f1f887, 0x64074208, 0x05020010, 0x4c040000, - 0x4c080000, 0x05f1f88d, 0x5c001000, 0x5c000800, - 0x05020006, 0x640b4208, 0x05edfc8a, 0x05020007, - 0x64134208, 0x0501f005, 0x640f4208, 0x05edfc73, - 0x05020002, 0x64174208, 0x05edfc88, 0x0500000b, - 0x05edfc6e, 0x05000009, 0x05edfc72, 0x05000007, - 0x05edfc76, 0x05000005, 0x05edfc7a, 0x05000003, - 0x48075069, 0x05f5f343, 0x90080583, 0x05020005, - 0x59a00002, 0x48035076, 0x640b5069, 0x0501f005, - 0x4a035076, 0xaabbccdd, 0x90080582, 0x05020011, - 0x59c40006, 0x84000500, 0x48038806, 0x0525f94a, - 0x497b8880, 0x42000000, 0x0010e4bc, 0x0549f8cd, - 0x4803c856, 0x850e1d48, 0x4a038808, 0x00000200, - 0x6012d800, 0x64078805, 0x64075075, 0x05e5f8e7, - 0x05f5f2e0, 0x8d0c050e, 0x05000003, 0x64074407, - 0x05f5f31f, 0x916c0583, 0x05000003, 0x641f4407, - 0x05f5f31b, 0x59a28c07, 0x59a0320c, 0x82183500, - 0x000000ff, 0x0505f960, 0x05f6031a, 0x050dfb52, - 0x05f60318, 0x83440580, 0x000007fd, 0x05000005, - 0x050dfaf9, 0x05000003, 0x60240800, 0x05f5f30c, - 0x0505f86f, 0x05020003, 0x640b4407, 0x05f5f308, - 0x497a5a08, 0x4a025c08, 0x00008000, 0x0535fe5e, - 0x05020003, 0x640f4407, 0x05f5f301, 0x4a01d809, - 0x00103f3e, 0x1c01f000, 0x592c0009, 0x82000d00, - 0x0000ffff, 0x82000500, 0xffff0000, 0x82000580, - 0x01000000, 0x05020003, 0x64134407, 0x05f5f2f4, - 0x80040904, 0x4c500000, 0x4c540000, 0x4c580000, - 0x912ca409, 0x4050a800, 0x4004b000, 0x0549f993, - 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x59a00208, - 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, - 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0409, - 0x0505f06c, 0x60000020, 0x50000000, 0x82000480, - 0x25320001, 0x0502000a, 0x599c1019, 0x8c08053c, - 0x05020005, 0x4a03c014, 0x00400040, 0x4a03c013, - 0x00400000, 0x6041d04e, 0x051df89b, 0x496fc857, - 0x916c0580, 0x05000003, 0x646b4407, 0x05f5f2cc, - 0x0511f93e, 0x050a0996, 0x60800800, 0x59a00408, - 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, - 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000, - 0x49a3c857, 0x0505f842, 0x4a01d809, 0x00103f81, - 0x1c01f000, 0x4833c857, 0x05fdfed9, 0x05f402af, - 0x59a00407, 0x8c000500, 0x05000061, 0x59a0020e, - 0x80000104, 0x05f402b7, 0x90000c95, 0x05f612b5, - 0x40000800, 0x59a0040c, 0x59a0120c, 0x900811c0, - 0x80081540, 0x59a0040d, 0x59a01a0d, 0x900c19c0, - 0x800c1d40, 0x42000000, 0x0010dd2a, 0x49a3c857, - 0x0505f827, 0x4a01d809, 0x00103f9c, 0x1c01f000, - 0x05fdfebf, 0x05f40295, 0x42000800, 0x0010dd2a, - 0x58040200, 0x800001c0, 0x05f4029e, 0x599c0017, - 0x8c000508, 0x05000042, 0x58040204, 0x8c000500, - 0x0500003f, 0x599c0202, 0x800001c0, 0x05f40295, - 0x599c141e, 0x80000000, 0x80080480, 0x05f61291, - 0x42001000, 0x00110228, 0x4a001008, 0x00000112, - 0x6428120b, 0x4978140b, 0x49781011, 0x4a00140e, - 0x00000101, 0x58040005, 0x48001015, 0x4a00120a, - 0x0000ffff, 0x4a00100d, 0x00111ad0, 0x58040006, - 0x48001016, 0x58040007, 0x48001017, 0x4a001013, - 0xdeadbeff, 0x4a001001, 0x00110240, 0x42001000, - 0x00110240, 0x48081000, 0x48081001, 0x64281208, - 0x58040005, 0x48001009, 0x4800100c, 0x4800100f, - 0x48001012, 0x48001015, 0x58040006, 0x4800100a, - 0x4800100d, 0x48001010, 0x48001013, 0x48001016, - 0x58040007, 0x4800100b, 0x4800100e, 0x48001011, - 0x48001014, 0x48001017, 0x42001000, 0x00111ad0, - 0x4a001009, 0x00110228, 0x4a001013, 0xdeadbeff, - 0x64841008, 0x64101203, 0x64181407, 0x599c0200, - 0x800001c0, 0x05f40257, 0x59a800d1, 0x8c000502, - 0x05000011, 0x599c0017, 0x84000508, 0x48033817, - 0x599c0019, 0x82000500, 0xffff1fff, 0x82000540, - 0x00004000, 0x48033819, 0x599c0018, 0x84000510, - 0x84000516, 0x82000500, 0xffffffcf, 0x90000560, - 0x0501f004, 0x8c000504, 0x05000004, 0x599c0018, - 0x84000514, 0x48033818, 0x0539fd97, 0x850e1d20, - 0x599c0017, 0x8c000508, 0x05000003, 0x850e1d60, - 0x0501f006, 0x8c00050a, 0x05f60236, 0x59a80806, - 0x8c040516, 0x05f60233, 0x42024800, 0x0010e512, - 0x64124a00, 0x42000800, 0x0010e511, 0x64040800, - 0x42000800, 0x0010e510, 0x46000800, 0x0000ffff, - 0x59240c00, 0x84040d46, 0x599c1017, 0x8c08050a, - 0x05020002, 0x84040d48, 0x8c080508, 0x05020002, - 0x84040d4a, 0x84040d4c, 0x48064c00, 0x59240a00, - 0x84040d40, 0x48064a00, 0x0505faed, 0x05000017, - 0x59c40801, 0x82040d40, 0x00004000, 0x48078801, - 0x64c378e4, 0x640752cd, 0x640752cc, 0x640b50ce, - 0x4a02480b, 0x0f000001, 0x4c000000, 0x4c500000, - 0x60000001, 0x4200a000, 0x001105f2, 0x4600a000, - 0xffffffff, 0x8050a000, 0x80000040, 0x05fe07fc, - 0x5c00a000, 0x5c000000, 0x4803c857, 0x8c000504, - 0x05020004, 0x59c408a3, 0x84040d7a, 0x480788a3, - 0x8c000502, 0x05020004, 0x59c408a3, 0x84040d08, - 0x480788a3, 0x599c0c02, 0x8c000500, 0x0502000b, - 0x8c000516, 0x0500001f, 0x4c000000, 0x59240400, - 0x84000542, 0x840411c0, 0x80081540, 0x480a4c00, - 0x5c000000, 0x0501f008, 0x4c000000, 0x59240400, - 0x84000540, 0x840411c0, 0x80081540, 0x480a4c00, - 0x5c000000, 0xb00414bf, 0x05f611e2, 0x82041400, - 0x00102853, 0x50081000, 0x82081500, 0x000000ff, - 0x48064a08, 0x480a4805, 0x480a4c08, 0x8c000500, - 0x05020004, 0x480b503d, 0x600c0800, 0x0521fcd6, - 0x0501ffeb, 0x05000004, 0x59240400, 0x84000544, - 0x48024c00, 0x599c0019, 0x8c000506, 0x05000003, - 0x4a03b805, 0x90000000, 0x8c00050e, 0x05020005, - 0x4c000000, 0x0505fad0, 0x5c000000, 0x05f601c5, - 0x90000530, 0x05000003, 0x80000108, 0x0501f002, - 0x60080000, 0x48039040, 0x60080800, 0x82000400, - 0x001042be, 0x50001000, 0x0521fcbb, 0x599c0201, - 0x82000c80, 0x00000100, 0x05f411b6, 0x82000c80, - 0x00000841, 0x05f611b3, 0x90000507, 0x05f601b1, - 0x599c0401, 0x80000540, 0x05f401ae, 0x59a808d1, - 0x8c040502, 0x05000005, 0x90000c90, 0x05001003, - 0x60400000, 0x48033c01, 0x850e1d52, 0x82000580, - 0x0000ffff, 0x05000002, 0x850e1d12, 0x599c0409, - 0x599c0c07, 0x80040c80, 0x05f6119e, 0x80000040, - 0x05f4019c, 0x599c0209, 0x599c0a07, 0x80040c80, - 0x05f61198, 0x80000040, 0x05f40196, 0xb1a81411, - 0x599c0818, 0x8c040510, 0x05020005, 0x50080000, - 0x8400053e, 0x44001000, 0x0501f00b, 0x59a80006, - 0x8400054a, 0x48035006, 0x4a0370e4, 0x0000c000, - 0x4c040000, 0x59c408a3, 0x84040d3a, 0x480788a3, - 0x5c000800, 0x8c040512, 0x05020009, 0x50080000, - 0x82000500, 0xfffff5ff, 0x44001000, 0x80081000, - 0x50080000, 0x8400053e, 0x44001000, 0x59e00002, - 0x84000568, 0x4803c002, 0x05e5f8a7, 0x42000000, - 0x0010dd60, 0x452c0000, 0x64073002, 0x412de000, - 0x492fc840, 0x644fc842, 0x05011000, 0x599c0018, - 0x8c00052e, 0x05000012, 0x850e1d16, 0x59a810d2, - 0x90081493, 0x0500100c, 0x0500000b, 0x480b50d2, - 0x480b50d3, 0x59a810d4, 0x9008148a, 0x05001004, - 0x05000003, 0x480b50d4, 0x0501f005, 0x60041000, - 0x05fdf7fd, 0x60041000, 0x05fdf7f5, 0x600000b8, - 0x599c1407, 0x48080100, 0x480a5a0c, 0x48025a00, - 0x492e5801, 0x599c000b, 0x48025808, 0x599c000c, - 0x48025809, 0x64065c10, 0x599c0409, 0x48025c0a, - 0x05e5f87d, 0x42000000, 0x0010de60, 0x452c0000, - 0x64073008, 0x492fc840, 0x642bc842, 0x05011000, - 0x412ee800, 0x492e5800, 0x492de012, 0x4a025803, - 0xffff0000, 0x60040000, 0x8d0c0516, 0x05020006, - 0x599c0211, 0x82001480, 0x00000100, 0x05f61139, - 0x599c1018, 0x48025a09, 0x600000bc, 0x599c1207, - 0x48080000, 0x480a5c09, 0x48025c08, 0x599c000d, - 0x48025806, 0x599c000e, 0x48025807, 0x599c0209, - 0x48025a08, 0x599c0818, 0x8c040532, 0x05000009, - 0x6405e20a, 0x599c021a, 0x4801e411, 0x42000000, - 0x00102ecb, 0x50000000, 0x4801e210, 0x0501f009, - 0x599c0a1a, 0x90040486, 0x05001002, 0x60040800, - 0x82040c00, 0x00102ec8, 0x50040000, 0x4801e210, - 0x599c0818, 0x599c141a, 0x8c040526, 0x05000002, - 0x8408157e, 0x8c040524, 0x05000002, 0x8408157c, - 0x8c040528, 0x05000003, 0x82081540, 0x20000000, - 0x4809e00b, 0x480a5801, 0x480bb01f, 0x480bb11f, - 0x599c0211, 0x82000400, 0x0010df60, 0x44080000, - 0x42000000, 0x0010e389, 0x50000000, 0x48080006, - 0x42000000, 0x0010e388, 0x50000000, 0x48080006, - 0x0511fb2e, 0x050dfca4, 0x599c0201, 0x48035004, - 0x05e9fe84, 0x599c020a, 0x800001c0, 0x05000003, - 0x48035063, 0x0501f003, 0x4a035063, 0x000000c8, - 0x8d0c0520, 0x05000006, 0x599c0413, 0x90000c82, - 0x05f410ec, 0x051dfd7e, 0x417a5000, 0x599c0003, - 0x599c0804, 0x9c0001c0, 0x9c0409c0, 0x48024801, - 0x48064802, 0x48035002, 0x48075003, 0x599c1017, - 0x8c08051c, 0x05000006, 0x599c0005, 0x599c0806, - 0x9c0001c0, 0x9c0409c0, 0x0501f003, 0x82000500, - 0xf0ffffff, 0x48024803, 0x48064804, 0x48035000, - 0x48075001, 0x42001000, 0x0010dd46, 0x48001000, - 0x48041001, 0x42001000, 0x0010dd53, 0x48001000, - 0x48041001, 0x59a00207, 0xb0000588, 0x050200b0, - 0x0501fe27, 0x05020003, 0x640b4407, 0x05f5f0c0, - 0x60400800, 0x59a00208, 0x59a01408, 0x900001c0, + 0x900c19c0, 0x800c1d40, 0xb0081400, 0x58ec0003, + 0x0505fbc2, 0x4a01d809, 0x00102a9d, 0x1c01f000, + 0x48efc857, 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0, - 0x800c1d40, 0x82081400, 0x00000080, 0xb0083400, - 0x481b4002, 0x900c3440, 0x481b4003, 0x912c0408, - 0x0501fe33, 0x4a01d809, 0x00104190, 0x1c01f000, - 0x05fdfccb, 0x05f400a1, 0x58ee580d, 0x592c1008, - 0x480bc857, 0x80080120, 0x42024800, 0x0010e512, - 0x48024c06, 0x82081500, 0x0000ffff, 0x599c0818, - 0x90040d30, 0x90040580, 0x05020004, 0xb00804be, - 0x05f610a0, 0x0501f001, 0x0545ff73, 0x05000014, - 0x82080480, 0x00000100, 0x05f6109a, 0x42000000, - 0x0010e511, 0x44080000, 0x800811c0, 0x05f40095, - 0x40080800, 0x42024800, 0x0010e512, 0x912e5c09, - 0x592c0400, 0x8c000506, 0x05020012, 0x59240200, - 0x84000500, 0x48024a00, 0x0501f00e, 0x82080480, - 0x000000ff, 0x05f61087, 0x80080800, 0x42000000, - 0x0010e511, 0x44040000, 0x800811c0, 0x05000068, - 0x42024800, 0x0010e51f, 0x80040840, 0x912e5c09, - 0x600c4000, 0x592c0400, 0x8c000506, 0x05000012, - 0x59a810d1, 0x90081506, 0x05f60076, 0x8c00050a, - 0x05020003, 0x8d0c0520, 0x05f40072, 0x64164a00, - 0x90001503, 0x05000006, 0x840011c0, 0x82081500, - 0x000000ff, 0x480a4a08, 0x0501f003, 0x82000500, - 0x000000ff, 0x48024c00, 0x592c0001, 0x592c1002, - 0x9c0001c0, 0x9c0811c0, 0x48024801, 0x480a4802, - 0x599c1817, 0x8c0c051c, 0x05000006, 0x592c0003, - 0x592c1004, 0x9c0001c0, 0x9c0811c0, 0x0501f003, - 0x82000500, 0xf0ffffff, 0x48024803, 0x480a4804, - 0x912e5c05, 0x91264c0d, 0x80040840, 0x05000019, - 0x80204040, 0x05fe07d4, 0x48074000, 0x49274001, - 0x603c0800, 0x59a01002, 0x59a01803, 0x9008343c, - 0x481b4002, 0x900c3440, 0x481b4003, 0x58ee580d, - 0x912c0408, 0x0501fdc2, 0x4a01d809, 0x00104201, - 0x1c01f000, 0x05fdfc5a, 0x05f40030, 0x58ee580d, - 0x912e5c08, 0x59a00800, 0x59a24801, 0x05fdf7bd, - 0x0545ff0d, 0x05000010, 0x42006800, 0x0010e512, - 0x4200b000, 0x0010e511, 0x5058b000, 0x58340400, - 0x8c000506, 0x05000005, 0x58340200, 0x8400055e, - 0x48006a00, 0x0501f004, 0x90346c0d, 0x8058b040, - 0x05fe07f7, 0x42006800, 0x0010e512, 0x4200b000, - 0x0010e511, 0x5058b000, 0x8058b040, 0x05000008, - 0x42024800, 0x0010e51f, 0x58340206, 0x48024a06, - 0x91264c0d, 0x8058b040, 0x05fe07fc, 0x599c1019, - 0x82081500, 0x0000e000, 0x497b4208, 0x05edfd55, - 0x05000012, 0x05edfd3a, 0x64074208, 0x0502000f, - 0x4c080000, 0x05edfd41, 0x5c001000, 0x05020007, - 0x640b4208, 0x82080580, 0x00008000, 0x05020007, - 0x64134208, 0x0501f005, 0x640f4208, 0x90080580, - 0x05020002, 0x64174208, 0x90080580, 0x05020007, - 0x64035069, 0x60040000, 0x05edfb03, 0x60040000, - 0x05edfad1, 0x0501f02b, 0x82080580, 0x00002000, - 0x05020008, 0x64075069, 0x60000000, 0x05edfafa, - 0x60000000, 0x05edfac8, 0x05edfebf, 0x0501f021, - 0x82080580, 0x00004000, 0x05020004, 0x640b5069, - 0x64075075, 0x05fdf7f9, 0x82080580, 0x00006000, - 0x0502000f, 0x59a80892, 0x82040d80, 0x01391077, - 0x05020004, 0x59e00813, 0x8c040500, 0x05f207e1, - 0x640f5069, 0x60080000, 0x05edfae3, 0x60080000, - 0x05edfab1, 0x05fdf7e9, 0x0501f00a, 0x82080580, - 0x00008000, 0x05f207d7, 0x05edfeb2, 0x64135069, - 0x600c0000, 0x05edfad8, 0x600c0000, 0x05edfaa6, - 0x599c1019, 0x82081500, 0x0000e000, 0x4c080000, - 0x0501fea2, 0x5c001000, 0x05020004, 0x82080580, - 0x00004000, 0x0500000b, 0x0501fe70, 0x05000003, - 0x0501fe85, 0x05020009, 0x82080580, 0x00008000, - 0x05000004, 0x82080580, 0x00004000, 0x05020003, - 0x600010c0, 0x0501f004, 0x599c0019, 0x8c000518, - 0x05000005, 0x8008111a, 0x480b5076, 0x640b5069, - 0x64075075, 0x599c0019, 0x8c000520, 0x05000001, - 0x4a035041, 0x0000aaaa, 0x599c1018, 0x90081530, - 0x90080d80, 0x05000005, 0x90080d90, 0x05000008, - 0x90080da0, 0x05020002, 0x48075041, 0x0501fdb7, - 0x05000007, 0x4803c856, 0x850e1d46, 0x05edf88f, - 0x59a8004d, 0x80040540, 0x4803504d, 0x49f3c857, - 0x42001000, 0x00106004, 0x0519fc0f, 0x42001000, - 0x00105ff7, 0x0519fd4d, 0x4a038805, 0xffffffff, - 0x0501fe5b, 0x05000008, 0x599c1019, 0x8c08053c, - 0x05020005, 0x4a03c014, 0x00400040, 0x4a03c013, - 0x00400000, 0x59a0001e, 0x84000540, 0x4803401e, - 0x49f3c857, 0x59a802dd, 0x48034209, 0x59a804dd, - 0x48034409, 0x05f1f73b, 0x00000018, 0x0000000c, - 0x00000018, 0x00000020, 0x916c0580, 0x05020003, - 0x601c0800, 0x05f1f776, 0x60800800, 0x59a00408, - 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, - 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000, - 0x0501f4f8, 0x8d0c050e, 0x05000003, 0x64074407, - 0x05f1f767, 0x050dfdd9, 0x05020003, 0x645b4407, - 0x05f1f763, 0x59a800b2, 0x8c000500, 0x0500000e, - 0x64034407, 0x60800800, 0x59a00408, 0x59a01208, - 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, - 0x900c19c0, 0x800c1d40, 0x42000000, 0x00110258, - 0x0501f4e0, 0x64074407, 0x6080b000, 0x4200a800, - 0x00110258, 0x4200a000, 0xffffffff, 0x4450a800, - 0x8054a800, 0x8058b040, 0x05fe07fd, 0x4d440000, - 0x4d340000, 0x42028800, 0xffffffff, 0x42002000, - 0xffffffff, 0x60043000, 0x60043800, 0x42001800, - 0x00110258, 0x59a8103d, 0x82081500, 0x000000ff, - 0x40180000, 0x0c01f001, 0x00104306, 0x00104309, - 0x0010430d, 0x00104311, 0x82102500, 0xffffff00, - 0x0501f014, 0x82102500, 0xffff00ff, 0x840811c0, - 0x0501f010, 0x82102500, 0xff00ffff, 0x900811c0, - 0x0501f00c, 0x82102500, 0x00ffffff, 0x9c0801c0, - 0x80102540, 0x44101800, 0x42003000, 0xffffffff, - 0x42002000, 0xffffffff, 0x800c1800, 0x0501f003, - 0x40080000, 0x80102540, 0x81468800, 0xb1442cbf, - 0x05021012, 0x4c080000, 0x4c0c0000, 0x4c180000, - 0x4c1c0000, 0x0001fb00, 0x5c003800, 0x5c003000, - 0x5c001800, 0x5c001000, 0x05fe07f4, 0x0509ff06, - 0x05fe07f2, 0x80183000, 0x801c3800, 0x59341202, - 0x40180000, 0x0c01f7d1, 0x82100580, 0xffffffff, - 0x05000002, 0x44101800, 0x42001800, 0x00110258, - 0x500c0000, 0x82000500, 0xffffff00, 0x801c0540, - 0x44001800, 0x5c026800, 0x5c028800, 0x60800800, + 0x800c1d40, 0x59a00407, 0x48034000, 0x480b4001, + 0x480f4002, 0x0505fb88, 0x05020003, 0x640b4407, + 0x05f5f527, 0x60400800, 0x0505fba3, 0x4a01d809, + 0x00103dc2, 0x1c01f000, 0x0501fa0f, 0x05f40517, + 0x58ee580d, 0x48efc857, 0x49a3c857, 0x492fc857, + 0x592c0a08, 0x80040910, 0x05020003, 0x64674407, + 0x05f5f517, 0x4805d80c, 0x0501f005, 0x0501fa02, + 0x05f4050a, 0x48efc857, 0x49a3c857, 0x48efc857, + 0x49a3c857, 0x58ec000c, 0x80000040, 0x0500000d, + 0x4801d80c, 0x0505fb68, 0x05020003, 0x640b4407, + 0x05f5f507, 0x60400800, 0x58ec1007, 0x58ec1808, + 0x0505fb81, 0x4a01d809, 0x00103dcf, 0x1c01f000, + 0x58ee580d, 0x48efc857, 0x49a3c857, 0x492fc857, + 0x492f3000, 0x592c0408, 0x8400055e, 0x48025c08, + 0x4a01d809, 0x00103def, 0x1c01f000, 0x4d2c0000, + 0x58ee580d, 0x48efc857, 0x49a3c857, 0x492fc857, + 0x592c0408, 0x8400051e, 0x48025c08, 0x59a00000, + 0x59a01001, 0x59a01802, 0x80081400, 0x900c1c40, + 0x912c0408, 0x60400800, 0x5c025800, 0x0505f36b, + 0x8d0c050e, 0x05000003, 0x64074407, 0x05f5f4e0, + 0x916c0583, 0x05000003, 0x641f4407, 0x05f5f4dc, + 0x59a0320c, 0x82183500, 0x000000ff, 0x59a28c07, + 0x0505fc16, 0x05f604db, 0x050dff34, 0x05f604d9, + 0x83440580, 0x000007fd, 0x05000005, 0x050dfedb, + 0x05000003, 0x64274407, 0x05f5f4cd, 0x0505fb2a, + 0x05020003, 0x640b4407, 0x05f5f4c9, 0x801831c0, + 0x05000007, 0x412c0800, 0x0505fb23, 0x05020003, + 0x640b4407, 0x05f5f4c2, 0x40065800, 0x4a025c08, + 0x00008000, 0x497a5a08, 0x0539fcf5, 0x05020003, + 0x640f4407, 0x05f5f4ba, 0x4a01d809, 0x00103e2d, + 0x1c01f000, 0x592c0009, 0x82000580, 0x01000000, + 0x05020003, 0x64134407, 0x05f5f4b1, 0x592c040a, + 0x82002d00, 0x0000ff00, 0x82000500, 0x000000ff, + 0x80000904, 0x80040800, 0x90040486, 0x05001002, + 0x60140800, 0x4c500000, 0x4c540000, 0x4c580000, + 0x912ca40a, 0x4050a800, 0x4004b000, 0x054dfa1a, 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40, - 0x42000000, 0x00110258, 0x0501f47e, 0x59a28c07, - 0x0501fd39, 0x05f206f3, 0x59a0020c, 0x8c000500, - 0x0500000c, 0x59a01209, 0x59a00409, 0x82000500, - 0x000000ff, 0x900001c0, 0x80081540, 0x41784000, - 0x0509fdb5, 0x05000005, 0x48034407, 0x05f1f6e5, - 0x0509ff1d, 0x05f206e3, 0x0501fc41, 0x05020003, - 0x640b4407, 0x05f1f6da, 0x59a0020c, 0x8c000500, - 0x05000003, 0x0509fecc, 0x050204f6, 0x59a0020c, - 0x8c000502, 0x05000015, 0x83440480, 0x000007f0, - 0x05021012, 0x0509fecd, 0x05020010, 0x497a5a08, - 0x4a025c08, 0x00008000, 0x59a24805, 0x0535f9f8, - 0x05020003, 0x640f4407, 0x05f1f6c5, 0x4a01d809, - 0x0010437a, 0x1c01f000, 0x59a28c07, 0x59a2440b, - 0x0509fefd, 0x05f206c3, 0x4c580000, 0x4c500000, + 0x912c040a, 0x4c140000, 0x0505fb1c, 0x5c002800, + 0x801429c0, 0x05000003, 0x4a01d809, 0x00103e58, + 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000, + 0x0501f979, 0x05f40481, 0x58ee580d, 0x812e59c0, + 0x05e00fb9, 0x592c000a, 0x82000500, 0xff000000, + 0x80000904, 0x800409c0, 0x05f4043e, 0x4807c857, + 0x9004048e, 0x05001002, 0x60340800, 0x592e5801, + 0x812e59c0, 0x05e00fac, 0x4c500000, 0x4c540000, + 0x4c580000, 0x912ca409, 0x4050a800, 0x4004b000, + 0x054df9ed, 0x5c00b000, 0x5c00a800, 0x5c00a000, + 0x58ec1007, 0x58ec1808, 0x912c0409, 0x0505f2f3, + 0x0505fac9, 0x05020003, 0x640b4407, 0x05f5f468, + 0x59a00c07, 0x82040500, 0x0000ff00, 0x840001c0, + 0x9000148e, 0x05f61467, 0x0c01f001, 0x00103e91, + 0x00103e97, 0x00103e9d, 0x00103e9e, 0x00103ea2, + 0x00103ebc, 0x00103ec0, 0x00103ea9, 0x00103eae, + 0x00103eb4, 0x00103e9d, 0x00103e9d, 0x00103e9d, + 0x00103e9d, 0x60340800, 0x42003800, 0x00103ee9, + 0x4a034000, 0x00111ce0, 0x0501f02d, 0x60340800, + 0x42003800, 0x00103ee9, 0x4a034000, 0x00111ced, + 0x0501f027, 0x05f5f44b, 0x0505fcd1, 0x05f60449, + 0x497b501e, 0x05f5f3ff, 0x0505fccd, 0x05f60445, + 0x59a8101d, 0x800811c0, 0x05f403fa, 0x480b501e, + 0x05f5f3f8, 0x0505fcc6, 0x05f6043e, 0x497b5011, + 0x497b5012, 0x05f5f3f3, 0x0505fcc1, 0x05f60439, + 0x64035011, 0x4a035012, 0x000927c0, 0x05f5f3ed, + 0x59a00c07, 0x82040d00, 0x000000ff, 0x05f40431, + 0x48074000, 0x42003800, 0x00103eca, 0x0501f008, + 0x60200800, 0x42003800, 0x00103ef2, 0x0501f004, + 0x60100800, 0x42003800, 0x00103f23, 0x0501f905, + 0x912c0409, 0x4c1c0000, 0x0505fa9b, 0x5c003800, + 0x481dd809, 0x1c01f000, 0x0501f907, 0x05f4040f, + 0x58ee580d, 0x59a0b000, 0x912ca409, 0x50500800, + 0x82040580, 0x00110307, 0x0502000f, 0x82041500, + 0x000000ff, 0x90080488, 0x0502100b, 0x4200a800, + 0x00111b96, 0x80081840, 0x8050a000, 0x50500000, + 0x4400a800, 0x8054a800, 0x800c1840, 0x05fe07fb, + 0x0501f005, 0x48074407, 0x900409c0, 0x48074208, + 0x05f5f404, 0x8050a000, 0x8058b482, 0x05fe07e8, + 0x05f5f3b8, 0x0501f8e8, 0x05f403f0, 0x58ee580d, + 0x6407504a, 0x6034b000, 0x59a0a800, 0x912ca409, + 0x054df96d, 0x05f5f3af, 0x0501f8df, 0x05f403e7, + 0x58ee580d, 0x912ca409, 0x50500000, 0x82001500, + 0x000c0016, 0x05f603ef, 0x90500c03, 0x50040000, + 0x90001501, 0x05f603eb, 0x50500000, 0x90001528, + 0x05000015, 0x900815a8, 0x05f603e6, 0x80500800, + 0x50040000, 0x90001513, 0x90081593, 0x05f603e1, + 0x80040800, 0x50040000, 0x82001500, 0x00050000, + 0x82081580, 0x00050000, 0x05f603da, 0x916c0580, + 0x0500000e, 0x599c0019, 0x8c00050e, 0x0502000b, + 0x05f5f3d4, 0x80500800, 0x50040000, 0x90001513, + 0x05f603d0, 0x80040800, 0x50040000, 0x82001500, + 0x00050000, 0x05f603cb, 0x6020b000, 0x4200a800, + 0x00111cc4, 0x054df901, 0x05f5f37e, 0x0501f8ae, + 0x05f403b6, 0x58ee580d, 0x6010b000, 0x4200a800, + 0x001124b0, 0x912ca409, 0x054df8f8, 0x850e1d50, + 0x05f5f374, 0x0505fa14, 0x05020003, 0x640b4407, + 0x05f5f3b3, 0x912cac09, 0x59a00c07, 0x82040500, + 0x0000ff00, 0x840001c0, 0x9000148e, 0x05f613b1, + 0x0c01f001, 0x00103f47, 0x00103f4a, 0x00103f4d, + 0x00103f4e, 0x00103f61, 0x00103f83, 0x00103f4d, + 0x00103f89, 0x00103f68, 0x00103f79, 0x00103f4d, + 0x00103f4d, 0x00103f4d, 0x00103f4d, 0x4200a000, + 0x00111ce0, 0x0501f071, 0x4200a000, 0x00111ced, + 0x0501f06e, 0x05f5f39b, 0x0505fc21, 0x05f60399, + 0x59a8041f, 0x48034407, 0x59a8021f, 0x48034208, + 0x59a80420, 0x48034408, 0x59a80220, 0x4803420a, + 0x59a8041d, 0x4803440a, 0x59a8021d, 0x4803420b, + 0x59a8041e, 0x4803440b, 0x59a8021e, 0x4803420c, + 0x05f5f340, 0x0505fc0e, 0x05f60386, 0x0501f865, + 0x60600800, 0x42000000, 0x00111ba5, 0x0505f203, + 0x0505fc07, 0x05000002, 0x05f5f37e, 0x59a80413, + 0x48034407, 0x59a80213, 0x48034208, 0x59a80414, + 0x48034408, 0x59a80214, 0x4803420a, 0x6403440a, + 0x6403420b, 0x6427440b, 0x4a03420c, 0x000027c0, + 0x05f5f328, 0x0505fbf6, 0x05000002, 0x05f4036d, + 0x0501f84c, 0x61ec0801, 0x800400c4, 0x48034407, + 0x42000000, 0x00108288, 0x0505f1e8, 0x6020b000, + 0x40580800, 0x4200a000, 0x00111cc4, 0x054df89b, + 0x0501f035, 0x59a00a0b, 0x6473420b, 0x9004049c, + 0x05f4135c, 0x603cb000, 0x4178a000, 0x054df89b, + 0x912cac09, 0x6010b000, 0xb1a8a410, 0x054df88f, + 0x916c0580, 0x05000007, 0x6008b000, 0x91a8a402, + 0x054df88a, 0x6008b000, 0x91a8a400, 0x054df887, + 0x912cac15, 0x600cb000, 0xb1a8a414, 0x054df883, + 0x492f4000, 0x0505f9a0, 0x05020003, 0x640b4407, + 0x05f5f33f, 0x912cac09, 0x603cb000, 0x4178a000, + 0x054df882, 0x912cac09, 0x6004b000, 0xb1a8a417, + 0x054df876, 0x912cac0a, 0x6010b000, 0xb1a8a418, + 0x054df872, 0x0501f817, 0x492f4001, 0x59a25800, + 0x912c0409, 0x603c0800, 0x0505f9b4, 0x4a01d809, + 0x00103fc0, 0x1c01f000, 0x6034b000, 0x40580800, + 0x054df8a1, 0x0501f80b, 0x912c0409, 0x0505f1ab, + 0x0501f811, 0x05f40319, 0x59a25801, 0x58ec1007, + 0x58ec1808, 0x912c0409, 0x60340800, 0x0505f1a3, + 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540, + 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40, + 0x1c01f000, 0x4031d800, 0x58ef400b, 0x58ec0002, + 0x82000580, 0x00000200, 0x1c01f000, 0x59a00407, + 0x80000d40, 0x05020003, 0x48072833, 0x05f5f2c5, + 0x8d0c050e, 0x05020007, 0x4c000000, 0x0511fbb9, + 0x5c000000, 0x05000003, 0x645b4407, 0x05f5f300, + 0x82000c80, 0x00001000, 0x05f61302, 0x90000c82, + 0x05f41300, 0x800008c6, 0x80040c00, 0x80040c00, + 0x48072833, 0x59a800b4, 0x84000500, 0x59a00a08, + 0x8c040500, 0x05000002, 0x84000540, 0x480350b4, + 0x05f5f2ac, 0x8d0c050e, 0x05020003, 0x0511fba1, + 0x0502000c, 0x59a800b4, 0x8c000500, 0x05020005, + 0x4a03c014, 0x00400040, 0x4a03c013, 0x00400040, + 0x59a800b4, 0x8400054a, 0x480350b4, 0x05e1fe12, + 0x1c01f000, 0x916c0580, 0x05020003, 0x641f4407, + 0x05f5f2db, 0x59a01407, 0x800811c0, 0x0502002a, + 0x497b4208, 0x05edfff3, 0x05000011, 0x05edffd8, + 0x64074208, 0x0502000e, 0x4c080000, 0x05edffdf, + 0x5c001000, 0x05020006, 0x640b4208, 0x05edfbdd, + 0x05020007, 0x64134208, 0x0501f005, 0x640f4208, + 0x05edfbc6, 0x05020002, 0x64174208, 0x59c40801, + 0x82040d00, 0x00018000, 0x90040580, 0x05020003, + 0x64034407, 0x0501f069, 0x82040580, 0x00008000, + 0x05020003, 0x64074407, 0x0501f064, 0x82040580, + 0x00010000, 0x05020003, 0x640f4407, 0x0501f05f, + 0x82040580, 0x00018000, 0x05e20de3, 0x64134407, + 0x0501f05a, 0x59a800d6, 0x8c000502, 0x05000004, + 0x60080000, 0x40000800, 0x0501f012, 0x59a00208, + 0x4c000000, 0x0505fa53, 0x5c000000, 0x05000005, + 0x4c000000, 0x0505fa66, 0x5c000000, 0x05020007, + 0x90000d84, 0x05000003, 0x90000d82, 0x05020003, + 0x600c0000, 0x600c1000, 0x48034002, 0x59a8086c, + 0x4803506c, 0x599c7819, 0x823c7d00, 0xffff1fff, + 0x800000da, 0x803c7d40, 0x483f3819, 0x497b4208, + 0x05edffac, 0x05000013, 0x05edff91, 0x64074208, + 0x05020010, 0x4c040000, 0x4c080000, 0x05edff97, + 0x5c001000, 0x5c000800, 0x05020006, 0x640b4208, + 0x05edfb94, 0x05020007, 0x64134208, 0x0501f005, + 0x640f4208, 0x05edfb7d, 0x05020002, 0x64174208, + 0x05edfb92, 0x0500000b, 0x05edfb78, 0x05000009, + 0x05edfb7c, 0x05000007, 0x05edfb80, 0x05000005, + 0x05edfb84, 0x05000003, 0x4807506c, 0x05f5f275, + 0x90080583, 0x05020005, 0x59a00002, 0x48035079, + 0x640b506c, 0x0501f005, 0x4a035079, 0xaabbccdd, + 0x90080582, 0x05020011, 0x59c40006, 0x84000500, + 0x48038806, 0x0525fc92, 0x497b8880, 0x42000000, + 0x00112460, 0x0549fed2, 0x4803c856, 0x850e1d48, + 0x4a038808, 0x00000200, 0x6012d800, 0x64078805, + 0x64075078, 0x05e1ffa0, 0x05f5f212, 0x8d0c050e, + 0x05000003, 0x64074407, 0x05f5f251, 0x916c0583, + 0x05000003, 0x641f4407, 0x05f5f24d, 0x59a28c07, + 0x59a0320c, 0x82183500, 0x000000ff, 0x0505f987, + 0x05f6024c, 0x050dfca5, 0x05f6024a, 0x83440580, + 0x000007fd, 0x05000005, 0x050dfc4c, 0x05000003, + 0x60240800, 0x05f5f23e, 0x0505f89b, 0x05020003, + 0x640b4407, 0x05f5f23a, 0x497a5a08, 0x4a025c08, + 0x00008000, 0x0539fa81, 0x05020003, 0x640f4407, + 0x05f5f233, 0x4a01d809, 0x001040b4, 0x1c01f000, + 0x592c0009, 0x82000d00, 0x0000ffff, 0x82000500, + 0xffff0000, 0x82000580, 0x01000000, 0x05020003, + 0x64134407, 0x05f5f226, 0x80040904, 0x4c500000, + 0x4c540000, 0x4c580000, 0x912ca409, 0x4050a800, + 0x4004b000, 0x0549ff98, 0x5c00b000, 0x5c00a800, + 0x5c00a000, 0x59a00208, 0x59a01408, 0x900001c0, + 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0, + 0x800c1d40, 0x912c0409, 0x0505f098, 0x60000020, + 0x50000000, 0x82000480, 0x25320001, 0x0502000a, + 0x599c1019, 0x8c08053c, 0x05020005, 0x4a03c014, + 0x00400040, 0x4a03c013, 0x00400000, 0x6041d04e, + 0x051dfb90, 0x496fc857, 0x916c0580, 0x05000003, + 0x646b4407, 0x05f5f1fe, 0x0511fab2, 0x050a0a17, + 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0, + 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, + 0x800c1d40, 0x419c0000, 0x49a3c857, 0x0505f86e, + 0x4a01d809, 0x001040f7, 0x1c01f000, 0x4833c857, + 0x05fdfed9, 0x05f401e1, 0x59a00407, 0x8c000500, + 0x05000061, 0x59a0020e, 0x80000104, 0x05f401e9, + 0x90000c95, 0x05f611e7, 0x40000800, 0x59a0040c, + 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0040d, + 0x59a01a0d, 0x900c19c0, 0x800c1d40, 0x42000000, + 0x00111cb0, 0x49a3c857, 0x0505f853, 0x4a01d809, + 0x00104112, 0x1c01f000, 0x05fdfebf, 0x05f401c7, + 0x42000800, 0x00111cb0, 0x58040200, 0x800001c0, + 0x05f401d0, 0x599c0017, 0x8c000508, 0x05000042, + 0x58040204, 0x8c000500, 0x0500003f, 0x599c0202, + 0x800001c0, 0x05f401c7, 0x599c141e, 0x80000000, + 0x80080480, 0x05f611c3, 0x42001000, 0x001141cc, + 0x4a001008, 0x00000112, 0x6428120b, 0x4978140b, + 0x49781011, 0x4a00140e, 0x00000101, 0x58040005, + 0x48001015, 0x4a00120a, 0x0000ffff, 0x4a00100d, + 0x00115a74, 0x58040006, 0x48001016, 0x58040007, + 0x48001017, 0x4a001013, 0xdeadbeff, 0x4a001001, + 0x001141e4, 0x42001000, 0x001141e4, 0x48081000, + 0x48081001, 0x64281208, 0x58040005, 0x48001009, + 0x4800100c, 0x4800100f, 0x48001012, 0x48001015, + 0x58040006, 0x4800100a, 0x4800100d, 0x48001010, + 0x48001013, 0x48001016, 0x58040007, 0x4800100b, + 0x4800100e, 0x48001011, 0x48001014, 0x48001017, + 0x42001000, 0x00115a74, 0x4a001009, 0x001141cc, + 0x4a001013, 0xdeadbeff, 0x64841008, 0x64101203, + 0x64181407, 0x599c0200, 0x800001c0, 0x05f40189, + 0x59a800d6, 0x8c000502, 0x05000011, 0x599c0017, + 0x84000508, 0x48033817, 0x599c0019, 0x82000500, + 0xffff1fff, 0x82000540, 0x00004000, 0x48033819, + 0x599c0018, 0x84000510, 0x84000516, 0x82000500, + 0xffffffcf, 0x90000560, 0x0501f004, 0x8c000504, + 0x05000004, 0x599c0018, 0x84000514, 0x48033818, + 0x053df9c8, 0x850e1d20, 0x599c0017, 0x8c000508, + 0x05000003, 0x850e1d60, 0x0501f006, 0x8c00050a, + 0x05f60168, 0x59a80806, 0x8c040516, 0x05f60165, + 0x42024800, 0x001124b6, 0x64124a00, 0x42000800, + 0x001124b5, 0x64040800, 0x42000800, 0x001124b4, + 0x46000800, 0x0000ffff, 0x59240c00, 0x84040d46, + 0x599c1017, 0x8c08050a, 0x05020002, 0x84040d48, + 0x8c080508, 0x05020002, 0x84040d4a, 0x84040d4c, + 0x48064c00, 0x59240a00, 0x84040d40, 0x48064a00, + 0x0505fb1d, 0x05000017, 0x59c40801, 0x82040d40, + 0x00004000, 0x48078801, 0x64c378e4, 0x640752d2, + 0x640752d1, 0x640b50d3, 0x4a02480b, 0x0f000001, + 0x4c000000, 0x4c500000, 0x60000001, 0x4200a000, + 0x00114596, 0x4600a000, 0xffffffff, 0x8050a000, + 0x80000040, 0x05fe07fc, 0x5c00a000, 0x5c000000, + 0x4803c857, 0x8c000504, 0x05020004, 0x59c408a3, + 0x84040d7a, 0x480788a3, 0x8c000502, 0x05020004, + 0x59c408a3, 0x84040d08, 0x480788a3, 0x599c0c02, + 0x8c000500, 0x0502000b, 0x8c000516, 0x0500001f, + 0x4c000000, 0x59240400, 0x84000542, 0x840411c0, + 0x80081540, 0x480a4c00, 0x5c000000, 0x0501f008, + 0x4c000000, 0x59240400, 0x84000540, 0x840411c0, + 0x80081540, 0x480a4c00, 0x5c000000, 0xb00414bf, + 0x05f61114, 0x82041400, 0x001028fb, 0x50081000, + 0x82081500, 0x000000ff, 0x48064a08, 0x480a4805, + 0x480a4c08, 0x8c000500, 0x05020004, 0x480b5040, + 0x600c0800, 0x0525f81e, 0x0505f812, 0x05000004, + 0x59240400, 0x84000544, 0x48024c00, 0x599c0019, + 0x8c000506, 0x05000003, 0x4a03b805, 0x90000000, + 0x8c00050e, 0x05020005, 0x4c000000, 0x0505fb4e, + 0x5c000000, 0x05f600f7, 0x90000530, 0x05000003, + 0x80000108, 0x0501f002, 0x60080000, 0x48039040, + 0x60080800, 0x82000400, 0x0010443d, 0x50001000, + 0x0525f803, 0x599c0201, 0x82000c80, 0x00000100, + 0x05f410e8, 0x82000c80, 0x00000841, 0x05f610e5, + 0x90000507, 0x05f600e3, 0x599c0401, 0x80000540, + 0x05f400e0, 0x59a808d6, 0x8c040502, 0x05000005, + 0x90000c90, 0x05001003, 0x60400000, 0x48033c01, + 0x850e1d52, 0x82000580, 0x0000ffff, 0x05000002, + 0x850e1d12, 0x599c0409, 0x599c0c07, 0x80040c80, + 0x05f610d0, 0x80000040, 0x05f400ce, 0x599c0209, + 0x599c0a07, 0x80040c80, 0x05f610ca, 0x80000040, + 0x05f400c8, 0xb1a81414, 0x599c0818, 0x8c040510, + 0x05020005, 0x50080000, 0x8400053e, 0x44001000, + 0x0501f00b, 0x59a80006, 0x8400054a, 0x48035006, + 0x4a0370e4, 0x0000c000, 0x4c040000, 0x59c408a3, + 0x84040d3a, 0x480788a3, 0x5c000800, 0x8c040512, + 0x05020009, 0x50080000, 0x82000500, 0xfffff5ff, + 0x44001000, 0x80081000, 0x50080000, 0x8400053e, + 0x44001000, 0x59e00002, 0x84000568, 0x4803c002, + 0x05e1ff68, 0x42000000, 0x00111cfa, 0x452c0000, + 0x64073002, 0x412de000, 0x492fc840, 0x644fc842, + 0x05011000, 0x599c0018, 0x8c00052e, 0x05000012, + 0x850e1d16, 0x59a810d7, 0x90081493, 0x0500100c, + 0x0500000b, 0x480b50d7, 0x480b50d8, 0x59a810d9, + 0x9008148a, 0x05001004, 0x05000003, 0x480b50d9, + 0x0501f005, 0x60041000, 0x05fdf7fd, 0x60041000, + 0x05fdf7f5, 0x600000b8, 0x599c1407, 0x48080100, + 0x480a5a0c, 0x48025a00, 0x492e5801, 0x599c100b, + 0x480a5808, 0x599c180c, 0x480e5809, 0x64065c10, + 0x599c0c09, 0x48065c0a, 0x05e1ff3e, 0x42000000, + 0x00111dfa, 0x452c0000, 0x64073008, 0x492fc840, + 0x642bc842, 0x05011000, 0x412ee800, 0x492e5800, + 0x492de012, 0x4a025803, 0xffff0000, 0x60040000, + 0x8d0c0516, 0x05020006, 0x599c0211, 0x82001480, + 0x00000100, 0x05f6106b, 0x599c1018, 0x48025a09, + 0x600000bc, 0x599c1207, 0x48080000, 0x480a5c09, + 0x48025c08, 0x599c100d, 0x480a5806, 0x599c180e, + 0x480e5807, 0x599c0a09, 0x48065a08, 0x599c0818, + 0x8c040532, 0x05000009, 0x6405e20a, 0x599c021a, + 0x4801e411, 0x42000000, 0x00102f76, 0x50000000, + 0x4801e210, 0x0501f009, 0x599c0a1a, 0x90040486, + 0x05001002, 0x60040800, 0x82040c00, 0x00102f73, + 0x50040000, 0x4801e210, 0x599c0818, 0x599c141a, + 0x8c040526, 0x05000002, 0x8408157e, 0x8c040524, + 0x05000002, 0x8408157c, 0x8c040528, 0x05000003, + 0x82081540, 0x20000000, 0x4809e00b, 0x480a5801, + 0x480bb01f, 0x480bb11f, 0x599c0211, 0x82000400, + 0x00111efa, 0x44080000, 0x42000000, 0x00112324, + 0x50000000, 0x48080006, 0x42000000, 0x00112323, + 0x50000000, 0x48080006, 0x0511fca8, 0x050dfe12, + 0x599c0201, 0x48035004, 0x05e9fd7f, 0x599c020a, + 0x800001c0, 0x05000003, 0x48035066, 0x0501f003, + 0x4a035066, 0x000000c8, 0x8d0c0520, 0x05000006, + 0x599c0413, 0x90000c82, 0x05f4101e, 0x0521f8bf, + 0x417a5000, 0x599c0003, 0x599c0804, 0x9c0001c0, + 0x9c0409c0, 0x48024801, 0x48064802, 0x48035002, + 0x48075003, 0x599c1017, 0x8c08051c, 0x05000006, + 0x599c0005, 0x599c0806, 0x9c0001c0, 0x9c0409c0, + 0x0501f003, 0x82000500, 0xf0ffffff, 0x48024803, + 0x48064804, 0x48035000, 0x48075001, 0x42001000, + 0x00111ce0, 0x48001000, 0x48041001, 0x42001000, + 0x00111ced, 0x48001000, 0x48041001, 0x59a00207, + 0xb0000588, 0x050200b0, 0x0501fe53, 0x05020003, + 0x640b4407, 0x05f1f7f2, 0x60400800, 0x59a00208, + 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, + 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x82081400, + 0x00000080, 0xb0083400, 0x481b4002, 0x900c3440, + 0x481b4003, 0x912c0408, 0x0501fe5f, 0x4a01d809, + 0x00104306, 0x1c01f000, 0x05fdfccb, 0x05f007d3, + 0x58ee580d, 0x592c1008, 0x480bc857, 0x80080120, + 0x42024800, 0x001124b6, 0x48024c06, 0x82081500, + 0x0000ffff, 0x599c0818, 0x90040d30, 0x90040580, + 0x05020004, 0xb00804be, 0x05f217d2, 0x0501f001, + 0x0549fd78, 0x05000014, 0x82080480, 0x00000100, + 0x05f217cc, 0x42000000, 0x001124b5, 0x44080000, + 0x800811c0, 0x05f007c7, 0x40080800, 0x42024800, + 0x001124b6, 0x912e5c09, 0x592c0400, 0x8c000506, + 0x05020012, 0x59240200, 0x84000500, 0x48024a00, + 0x0501f00e, 0x82080480, 0x000000ff, 0x05f217b9, + 0x80080800, 0x42000000, 0x001124b5, 0x44040000, + 0x800811c0, 0x05000068, 0x42024800, 0x001124c3, + 0x80040840, 0x912e5c09, 0x600c4000, 0x592c0400, + 0x8c000506, 0x05000012, 0x59a810d6, 0x90081506, + 0x05f207a8, 0x8c00050a, 0x05020003, 0x8d0c0520, + 0x05f007a4, 0x64164a00, 0x90001503, 0x05000006, + 0x840011c0, 0x82081500, 0x000000ff, 0x480a4a08, + 0x0501f003, 0x82000500, 0x000000ff, 0x48024c00, + 0x592c0001, 0x592c1002, 0x9c0001c0, 0x9c0811c0, + 0x48024801, 0x480a4802, 0x599c1817, 0x8c0c051c, + 0x05000006, 0x592c0003, 0x592c1004, 0x9c0001c0, + 0x9c0811c0, 0x0501f003, 0x82000500, 0xf0ffffff, + 0x48024803, 0x480a4804, 0x912e5c05, 0x91264c0d, + 0x80040840, 0x05000019, 0x80204040, 0x05fe07d4, + 0x48074000, 0x49274001, 0x603c0800, 0x59a01002, + 0x59a01803, 0x9008343c, 0x481b4002, 0x900c3440, + 0x481b4003, 0x58ee580d, 0x912c0408, 0x0501fdee, + 0x4a01d809, 0x00104377, 0x1c01f000, 0x05fdfc5a, + 0x05f00762, 0x58ee580d, 0x912e5c08, 0x59a00800, + 0x59a24801, 0x05fdf7bd, 0x0549fd12, 0x05000010, + 0x42006800, 0x001124b6, 0x4200b000, 0x001124b5, + 0x5058b000, 0x58340400, 0x8c000506, 0x05000005, + 0x58340200, 0x8400055e, 0x48006a00, 0x0501f004, + 0x90346c0d, 0x8058b040, 0x05fe07f7, 0x42006800, + 0x001124b6, 0x4200b000, 0x001124b5, 0x5058b000, + 0x8058b040, 0x05000008, 0x42024800, 0x001124c3, + 0x58340206, 0x48024a06, 0x91264c0d, 0x8058b040, + 0x05fe07fc, 0x599c1019, 0x82081500, 0x0000e000, + 0x497b4208, 0x05edfc5f, 0x05000012, 0x05edfc44, + 0x64074208, 0x0502000f, 0x4c080000, 0x05edfc4b, + 0x5c001000, 0x05020007, 0x640b4208, 0x82080580, + 0x00008000, 0x05020007, 0x64134208, 0x0501f005, + 0x640f4208, 0x90080580, 0x05020002, 0x64174208, + 0x90080580, 0x05020007, 0x6403506c, 0x60040000, + 0x05edfa0d, 0x60040000, 0x05edf9db, 0x0501f02b, + 0x82080580, 0x00002000, 0x05020008, 0x6407506c, + 0x60000000, 0x05edfa04, 0x60000000, 0x05edf9d2, + 0x05edfdc9, 0x0501f021, 0x82080580, 0x00004000, + 0x05020004, 0x640b506c, 0x64075078, 0x05fdf7f9, + 0x82080580, 0x00006000, 0x0502000f, 0x59a80895, + 0x82040d80, 0x01391077, 0x05020004, 0x59e00813, + 0x8c040500, 0x05f20713, 0x640f506c, 0x60080000, + 0x05edf9ed, 0x60080000, 0x05edf9bb, 0x05fdf7e9, + 0x0501f00a, 0x82080580, 0x00008000, 0x05f20709, + 0x05edfdbc, 0x6413506c, 0x600c0000, 0x05edf9e2, + 0x600c0000, 0x05edf9b0, 0x599c1019, 0x82081500, + 0x0000e000, 0x4c080000, 0x0501fed2, 0x5c001000, + 0x05020004, 0x82080580, 0x00004000, 0x0500000b, + 0x0501fea0, 0x05000003, 0x0501feb5, 0x05020009, + 0x82080580, 0x00008000, 0x05000004, 0x82080580, + 0x00004000, 0x05020003, 0x600010c0, 0x0501f004, + 0x599c0019, 0x8c000518, 0x05000005, 0x8008111a, + 0x480b5079, 0x640b506c, 0x64075078, 0x599c0019, + 0x8c000520, 0x05000001, 0x4a035044, 0x0000aaaa, + 0x599c1018, 0x90081530, 0x90080d80, 0x05000005, + 0x90080d90, 0x05000008, 0x90080da0, 0x05020002, + 0x48075044, 0x0501fdde, 0x05000007, 0x4803c856, + 0x850e1d46, 0x05e9ff99, 0x59a80050, 0x80040540, + 0x48035050, 0x49f3c857, 0x42001000, 0x001062e8, + 0x0519feb3, 0x42001000, 0x001062db, 0x051df83b, + 0x4a038805, 0xffffffff, 0x0501fe8b, 0x05000008, + 0x599c1019, 0x8c08053c, 0x05020005, 0x4a03c014, + 0x00400040, 0x4a03c013, 0x00400000, 0x59a0001e, + 0x84000540, 0x4803401e, 0x8d0c0538, 0x05020008, + 0x42000800, 0x0010e380, 0x82041400, 0x00003800, + 0x05e1fdad, 0x480b500d, 0x481b500e, 0x49f3c857, + 0x59a802e2, 0x48034209, 0x59a804e2, 0x48034409, + 0x05f1f664, 0x00000018, 0x0000000c, 0x00000018, + 0x00000020, 0x916c0580, 0x05020003, 0x601c0800, + 0x05f1f69f, 0x60800800, 0x59a00408, 0x59a01208, + 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, + 0x900c19c0, 0x800c1d40, 0x419c0000, 0x0501f51b, + 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f690, + 0x050dff44, 0x05020003, 0x645b4407, 0x05f1f68c, + 0x59a800b7, 0x8c000500, 0x0500000e, 0x64034407, + 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0, + 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, + 0x800c1d40, 0x42000000, 0x001141fc, 0x0501f503, + 0x64074407, 0x6080b000, 0x4200a800, 0x001141fc, + 0x4200a000, 0xffffffff, 0x4450a800, 0x8054a800, + 0x8058b040, 0x05fe07fd, 0x4d440000, 0x4d340000, + 0x42028800, 0xffffffff, 0x42002000, 0xffffffff, + 0x60043000, 0x60043800, 0x42001800, 0x001141fc, + 0x59a81040, 0x82081500, 0x000000ff, 0x40180000, + 0x0c01f001, 0x00104485, 0x00104488, 0x0010448c, + 0x00104490, 0x82102500, 0xffffff00, 0x0501f014, + 0x82102500, 0xffff00ff, 0x840811c0, 0x0501f010, + 0x82102500, 0xff00ffff, 0x900811c0, 0x0501f00c, + 0x82102500, 0x00ffffff, 0x9c0801c0, 0x80102540, + 0x44101800, 0x42003000, 0xffffffff, 0x42002000, + 0xffffffff, 0x800c1800, 0x0501f003, 0x40080000, + 0x80102540, 0x81468800, 0xb1442cbf, 0x05021014, + 0x4c100000, 0x4c080000, 0x4c0c0000, 0x4c180000, + 0x4c1c0000, 0x0001fb08, 0x5c003800, 0x5c003000, + 0x5c001800, 0x5c001000, 0x5c002000, 0x05fe07f2, + 0x050df84e, 0x05fe07f0, 0x80183000, 0x801c3800, + 0x59341202, 0x40180000, 0x0c01f7cf, 0x82100580, + 0xffffffff, 0x05000002, 0x44101800, 0x42001800, + 0x001141fc, 0x500c0000, 0x82000500, 0xffffff00, + 0x801c0540, 0x44001800, 0x5c026800, 0x5c028800, + 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0, + 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, + 0x800c1d40, 0x42000000, 0x001141fc, 0x0501f49f, + 0x59a28c07, 0x0501fd55, 0x05f2061a, 0x59a0020c, + 0x8c000500, 0x0500000c, 0x59a01209, 0x59a00409, + 0x82000500, 0x000000ff, 0x900001c0, 0x80081540, + 0x41784000, 0x0509fea6, 0x05000005, 0x48034407, + 0x05f1f60c, 0x050df865, 0x05f2060a, 0x0501fc62, + 0x05020003, 0x640b4407, 0x05f1f601, 0x59a0020c, + 0x8c000500, 0x05000003, 0x050df814, 0x05020512, + 0x59a0020c, 0x8c000502, 0x05000018, 0x83440480, + 0x000007f0, 0x05001004, 0x83440480, 0x00000800, + 0x05001012, 0x050df812, 0x05020010, 0x497a5a08, + 0x4a025c08, 0x00008000, 0x59a24805, 0x0535fe0d, + 0x05020003, 0x640f4407, 0x05f1f5e9, 0x4a01d809, + 0x001044fe, 0x1c01f000, 0x59a28c07, 0x59a2440b, + 0x050df842, 0x05f205e7, 0x4c580000, 0x4c500000, 0x4c540000, 0x6028b000, 0x4134a000, 0x912e5c05, - 0x412ca800, 0x0545fd22, 0x912cac06, 0x4054a000, - 0x6010b000, 0x0545fd59, 0x5c00a800, 0x5c00a000, + 0x412ca800, 0x0549fb19, 0x912cac06, 0x4054a000, + 0x6010b000, 0x0549fb50, 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x592c0802, 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540, 0x48025802, 0x592c0801, 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540, 0x48025801, 0x60280800, 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a, - 0x900c19c0, 0x800c1d40, 0x412c0000, 0x0501f421, - 0x496fc857, 0x496f4407, 0x497b4208, 0x05edfbd5, - 0x05000015, 0x05edfbba, 0x64074208, 0x05020012, - 0x4c080000, 0x05edfbc1, 0x5c001000, 0x05020008, - 0x640b4208, 0x916c0580, 0x0500000b, 0x05e9ffbd, + 0x900c19c0, 0x800c1d40, 0x412c0000, 0x0501f43f, + 0x496fc857, 0x496f4407, 0x497b4208, 0x05edfad1, + 0x05000015, 0x05edfab6, 0x64074208, 0x05020012, + 0x4c080000, 0x05edfabd, 0x5c001000, 0x05020008, + 0x640b4208, 0x916c0580, 0x0500000b, 0x05e9feb9, 0x05020009, 0x64134208, 0x0501f007, 0x640f4208, - 0x916c0580, 0x05000004, 0x05e9ffa4, 0x05020002, - 0x64174208, 0x05f1f637, 0x59a28c07, 0x0501fcc2, - 0x05f2067c, 0x0509feb4, 0x05f2067a, 0x916c0583, - 0x05000003, 0x641f4407, 0x05f1f671, 0x91340c06, + 0x916c0580, 0x05000004, 0x05e9fea0, 0x05020002, + 0x64174208, 0x05f1f55b, 0x59a28c07, 0x0501fcdb, + 0x05f205a0, 0x0509fff9, 0x05f2059e, 0x916c0583, + 0x05000003, 0x641f4407, 0x05f1f595, 0x91340c06, 0x59a0020c, 0x8c000500, 0x05000002, 0x91340c08, 0x58040001, 0x4803440a, 0x900001c0, 0x4803420a, 0x50040000, 0x48034408, 0x900001c0, 0x48034208, - 0x59340200, 0x48034407, 0x05f1f61e, 0x8d0c050e, - 0x05000003, 0x64074407, 0x05f1f65d, 0x59a0220c, + 0x59340200, 0x48034407, 0x05f1f542, 0x8d0c050e, + 0x05000003, 0x64074407, 0x05f1f581, 0x59a0220c, 0x8c100500, 0x05020021, 0x8c100506, 0x05020004, - 0x59a03209, 0x90180483, 0x05f2165a, 0x59a28c07, - 0x0001fb00, 0x05f20657, 0x0509fe3b, 0x05000003, - 0x64274407, 0x05f1f64e, 0x0501fbb1, 0x05020003, - 0x640b4407, 0x05f1f64a, 0x59a0220c, 0x8c100506, + 0x59a03209, 0x90180483, 0x05f2157e, 0x59a28c07, + 0x0001fb08, 0x05f2057b, 0x0509ff80, 0x05000003, + 0x64274407, 0x05f1f572, 0x0501fbcf, 0x05020003, + 0x640b4407, 0x05f1f56e, 0x59a0220c, 0x8c100506, 0x05000004, 0x59343002, 0x82183500, 0x00ffffff, - 0x497a5a08, 0x4a025c08, 0x00008000, 0x0535f938, - 0x05020003, 0x640f4407, 0x05f1f63d, 0x4a01d809, - 0x0010443c, 0x1c01f000, 0x59a28c07, 0x0001fb00, - 0x05f2063c, 0x0509fe20, 0x05000003, 0x64274407, - 0x05f1f633, 0x0501fb96, 0x05020003, 0x640b4407, - 0x05f1f62f, 0x497a5a08, 0x4a025c08, 0x00008000, - 0x0501fb8f, 0x05020003, 0x640b4407, 0x05f1f628, - 0x592e5800, 0x0535f931, 0x05020003, 0x640f4407, - 0x05f1f623, 0x4a01d809, 0x0010441c, 0x1c01f000, + 0x497a5a08, 0x4a025c08, 0x00008000, 0x0535fd4d, + 0x05020003, 0x640f4407, 0x05f1f561, 0x4a01d809, + 0x001045c0, 0x1c01f000, 0x59a28c07, 0x0001fb08, + 0x05f20560, 0x0509ff65, 0x05000003, 0x64274407, + 0x05f1f557, 0x0501fbb4, 0x05020003, 0x640b4407, + 0x05f1f553, 0x497a5a08, 0x4a025c08, 0x00008000, + 0x0501fbad, 0x05020003, 0x640b4407, 0x05f1f54c, + 0x592e5800, 0x0535fd46, 0x05020003, 0x640f4407, + 0x05f1f547, 0x4a01d809, 0x001045a0, 0x1c01f000, 0x592c2809, 0x82140d80, 0x01000000, 0x05020003, - 0x64134407, 0x05f1f61a, 0x60200800, 0x59a00208, + 0x64134407, 0x05f1f53e, 0x60200800, 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0409, - 0x0501fb9c, 0x8c140500, 0x05000003, 0x4a01d809, - 0x00104432, 0x1c01f000, 0x05fdfa29, 0x05f005ff, - 0x58ee580e, 0x812e59c0, 0x05e009a4, 0x60200800, - 0x912c0409, 0x58ec1007, 0x58ec1808, 0x0501f38d, + 0x0501fbba, 0x8c140500, 0x05000003, 0x4a01d809, + 0x001045b6, 0x1c01f000, 0x05fdfa1b, 0x05f00523, + 0x58ee580e, 0x812e59c0, 0x05e0085b, 0x60200800, + 0x912c0409, 0x58ec1007, 0x58ec1808, 0x0501f3ab, 0x592c0009, 0x82000580, 0x01000000, 0x05020003, - 0x64134407, 0x05f1f5fa, 0x59a00208, 0x59a01408, + 0x64134407, 0x05f1f51e, 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x60180800, 0x912c040a, - 0x0501f37c, 0x59a00a0b, 0x800409c0, 0x05f005f1, + 0x0501f39a, 0x59a00a0b, 0x800409c0, 0x05f00515, 0x82040480, 0x00000081, 0x05001002, 0x60000801, 0x59c40085, 0x59881004, 0x80081400, 0x480b1004, - 0x497b8885, 0x59c400b1, 0x59a810a9, 0x80080400, - 0x48031022, 0x59c400b2, 0x59a810aa, 0x80080400, + 0x497b8885, 0x59c400b1, 0x59a810ae, 0x80080400, + 0x48031022, 0x59c400b2, 0x59a810af, 0x80080400, 0x48031021, 0x59c400a2, 0x82000500, 0x0000ffff, - 0x48031023, 0x598810bc, 0x598800bd, 0x80081400, - 0x598800be, 0x80081400, 0x598800bf, 0x80081400, - 0x59880122, 0x80081400, 0x598800c0, 0x80081400, - 0x5988013c, 0x80081400, 0x5988013a, 0x80081400, - 0x59880139, 0x80081400, 0x480b1024, 0x59a00208, + 0x59881023, 0x80080400, 0x05021002, 0x81780040, + 0x48031023, 0x598810bf, 0x598800c0, 0x80081400, + 0x598800c1, 0x80081400, 0x598800c2, 0x80081400, + 0x59880125, 0x80081400, 0x598800c3, 0x80081400, + 0x59880145, 0x80081400, 0x5988014b, 0x80081400, + 0x59880157, 0x80081400, 0x5988014e, 0x80081400, + 0x5988013f, 0x80081400, 0x5988013d, 0x80081400, + 0x5988013c, 0x80081400, 0x480b1024, 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x91880400, - 0x0501fb48, 0x4a01d809, 0x00104484, 0x1c01f000, - 0x05fdf9d7, 0x05f005ad, 0x59a0020c, 0x8c000500, + 0x0501fb5a, 0x4a01d809, 0x00104614, 0x1c01f000, + 0x05fdf9bd, 0x05f004c5, 0x59a0020c, 0x8c000500, 0x05000006, 0x91880400, 0x4803c840, 0x641bc842, 0x05011000, 0x497b8885, 0x4a034208, 0x00000080, - 0x05f1f568, 0x8d0c050e, 0x05000003, 0x64074407, - 0x05f1f5a7, 0x0501fbf0, 0x05f205aa, 0x0501fb08, - 0x05020003, 0x640b4407, 0x05f1f5a1, 0x497a5a08, + 0x05f1f480, 0x8d0c050e, 0x05000003, 0x64074407, + 0x05f1f4bf, 0x0501fbfd, 0x05f204c2, 0x0501fb1a, + 0x05020003, 0x640b4407, 0x05f1f4b9, 0x497a5a08, 0x4a025c08, 0x00008000, 0x59a00407, 0x800001c0, - 0x05f005a0, 0x82001580, 0x000000ff, 0x05000003, - 0x90001484, 0x05f2159b, 0x40001000, 0x59a24805, - 0x05edfe03, 0x05020003, 0x640f4407, 0x05f1f590, - 0x4a01d809, 0x001044af, 0x1c01f000, 0x592c0009, - 0x82000580, 0x01000000, 0x05f20546, 0x64134407, - 0x05f1f587, 0x59a01407, 0x8c080508, 0x05020005, - 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f580, - 0x59a01c08, 0x820c0480, 0x00001000, 0x05f21581, + 0x05f004b8, 0x82001580, 0x000000ff, 0x05000003, + 0x90001484, 0x05f214b3, 0x40001000, 0x59a24805, + 0x05edfd06, 0x05020003, 0x640f4407, 0x05f1f4a8, + 0x4a01d809, 0x0010463f, 0x1c01f000, 0x592c0009, + 0x82000580, 0x01000000, 0x05f2045e, 0x64134407, + 0x05f1f49f, 0x59a01407, 0x8c080508, 0x05020005, + 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f498, + 0x59a01c08, 0x820c0480, 0x00001000, 0x05f21499, 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827, - 0x497b2829, 0x497b282a, 0x497b282c, 0x497b282d, + 0x497b282a, 0x497b282b, 0x497b282d, 0x497b282e, 0x4803c856, 0x850e1d06, 0x8c080500, 0x05000004, 0x4803c856, 0x910e1d51, 0x0501f004, 0x8c080506, 0x05000002, 0x850e1d42, 0x850e1d0a, 0x6006d800, 0x82081500, 0x000000e0, 0x8008010a, 0x0c02002d, - 0x050dfbd6, 0x05020008, 0x64075042, 0x4a035041, - 0x0000aaaa, 0x050dfb54, 0x0501f01b, 0x64035042, - 0x05fdf7fb, 0x050dfbd9, 0x05fc07f8, 0x0505fc24, - 0x0521fb71, 0x050dfbc9, 0x05020003, 0x60000000, - 0x050dfb9f, 0x59a00a08, 0x480788a7, 0x59c400a3, + 0x050dfd30, 0x05020008, 0x64075045, 0x4a035044, + 0x0000aaaa, 0x050dfca8, 0x0501f01b, 0x64035045, + 0x05fdf7fb, 0x050dfd33, 0x05fc07f8, 0x0505fc8b, + 0x0521fe9f, 0x050dfd23, 0x05020003, 0x60000000, + 0x050dfcf3, 0x59a00a08, 0x480788a7, 0x59c400a3, 0x82000500, 0xfeffffff, 0x82000540, 0x80018000, 0x40000800, 0x84040d20, 0x480388a3, 0x480788a3, - 0x497b5064, 0x60b40800, 0x42001000, 0x00105184, - 0x0519f991, 0x59a00408, 0x800000c2, 0x800008c4, - 0x8005d400, 0x61fc01ff, 0x050dfbb0, 0x05000003, - 0x59a00208, 0x80000110, 0x0501fb98, 0x05f1f4f5, - 0x001044d8, 0x001044da, 0x001044e1, 0x00102a40, - 0x001044df, 0x00102a40, 0x00102a40, 0x00102a40, - 0x916c0583, 0x05000003, 0x641f4407, 0x05f1f52c, - 0x0501fb75, 0x05f2052f, 0x59a00408, 0x59a00a08, + 0x497b5067, 0x60b40800, 0x42001000, 0x0010537b, + 0x0519fc1b, 0x59a00408, 0x800000c2, 0x800008c4, + 0x8005d400, 0x61fc01ff, 0x050dfd0a, 0x05000003, + 0x59a00208, 0x80000110, 0x0501fba5, 0x05f1f40d, + 0x00104668, 0x0010466a, 0x00104671, 0x00102ae8, + 0x0010466f, 0x00102ae8, 0x00102ae8, 0x00102ae8, + 0x916c0583, 0x05000003, 0x641f4407, 0x05f1f444, + 0x0501fb82, 0x05f20447, 0x59a00408, 0x59a00a08, 0x900409c0, 0x80040d40, 0x4805d807, 0x59a0040a, 0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d808, - 0x6401d801, 0x0501fa82, 0x05020003, 0x640b4407, - 0x05f1f51b, 0x417a8800, 0x497b4001, 0x912c0409, - 0x48034002, 0x59a00407, 0x8c000504, 0x05020088, + 0x6401d801, 0x0501fa94, 0x05020003, 0x640b4407, + 0x05f1f433, 0x417a8800, 0x497b4001, 0x912c0409, + 0x48034002, 0x59a00407, 0x8c000504, 0x05020091, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4178b800, - 0x59a0c407, 0x59a0c802, 0x59a2440b, 0x0509fd4a, - 0x05020027, 0x0509fcf4, 0x05000003, 0x0509fb8f, + 0x59a0c407, 0x59a0c802, 0x59a2440b, 0x0509fe83, + 0x05020027, 0x0509fe2d, 0x05000003, 0x0509fc71, 0x05020023, 0x8c60053e, 0x05020020, 0x8c600500, 0x05000008, 0x59340009, 0x4400c800, 0x8064c800, 0x59340008, 0x4400c800, 0x8064c800, 0x0501f007, 0x59340007, 0x4400c800, 0x8064c800, 0x59340006, 0x4400c800, 0x8064c800, 0x83440580, 0x000007fe, 0x0500000b, 0x83440580, 0x000007fc, 0x05000008, - 0x0509fce5, 0x05000003, 0x85468d5e, 0x0501f004, - 0x0509fa7b, 0x05020002, 0x85468d5e, 0x4544c800, + 0x0509fe1e, 0x05000003, 0x85468d5e, 0x0501f004, + 0x0509fb55, 0x05020002, 0x85468d5e, 0x4544c800, 0x85468d1e, 0x8064c800, 0x905cbc0c, 0x81468800, - 0x83440480, 0x000007f0, 0x0500100c, 0x8c600506, - 0x05000025, 0x83440580, 0x000007f0, 0x05020003, - 0x61fa880f, 0x0501f005, 0x83440580, 0x000007ff, - 0x0502001d, 0x61f2880f, 0x905c05bc, 0x05fe07c8, + 0x83440480, 0x000007f0, 0x05001015, 0x83440480, + 0x00000800, 0x05001005, 0x59a800ad, 0x81440480, + 0x0500100f, 0x0501f029, 0x8c600506, 0x05000009, + 0x83440580, 0x000007f0, 0x05020003, 0x61fa880f, + 0x0501f007, 0x83440580, 0x000007ff, 0x05000003, + 0x60028810, 0x0501f002, 0x61f2880f, 0x905c05bc, + 0x05fe07bf, 0x59a00001, 0x805c0400, 0x48034001, + 0x8c60053e, 0x05020007, 0x59a00a0b, 0x800409c0, + 0x05000006, 0x80040480, 0x05021004, 0x8460c57e, + 0x4178b800, 0x05fdf7b2, 0x49474000, 0x485dd805, + 0x59a00002, 0x4801d803, 0x40ec1000, 0x0001f829, + 0x4a01d809, 0x00104744, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x8c60053e, 0x05020019, + 0x805cb9c0, 0x05000021, 0x59a00001, 0x805c0400, + 0x48034001, 0x59a00a0b, 0x800409c0, 0x05000005, + 0x80040480, 0x05021003, 0x4178b800, 0x0501f00d, + 0x59a00801, 0x48074407, 0x485dd805, 0x59a00002, + 0x4801d803, 0x4a01d809, 0x00102a9d, 0x40ec1000, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0001f029, + 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480, + 0x48034208, 0x642b4407, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x05f1f3a6, 0x59a00801, 0x48074407, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x05f1f35d, + 0x05fdf88d, 0x05f00395, 0x59a28800, 0x05fdf771, + 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4178b800, + 0x59a0c407, 0x59a0c802, 0x59a2440b, 0x0509fdf3, + 0x05020029, 0x0509fd9d, 0x05000003, 0x0509fbe1, + 0x05020025, 0x8c60053e, 0x05020022, 0x83440580, + 0x000007fe, 0x0500000f, 0x83440580, 0x000007fc, + 0x0500000c, 0x0509fd9d, 0x05000005, 0x59340403, + 0x8400055e, 0x48026c03, 0x0501f006, 0x0509fad2, + 0x05020004, 0x59340403, 0x8400055e, 0x48026c03, + 0x4134a000, 0x4064a800, 0x6018b000, 0x0549f8b7, + 0x59340007, 0x4400a800, 0x59340006, 0x4800a801, + 0x59340009, 0x4800a802, 0x59340008, 0x4800a803, + 0x59340403, 0x8400051e, 0x48026c03, 0x9064cc0a, + 0x905cbc28, 0x81468800, 0x83440480, 0x000007f0, + 0x05001015, 0x83440480, 0x00000800, 0x05001005, + 0x59a800ad, 0x81440480, 0x0500100f, 0x0501f02a, + 0x8c600506, 0x05000009, 0x83440580, 0x000007f0, + 0x05020003, 0x61fa880f, 0x0501f007, 0x83440580, + 0x000007ff, 0x05000003, 0x60028810, 0x0501f002, + 0x61f2880f, 0x905c05a8, 0x05000002, 0x05fdf7bb, 0x59a00001, 0x805c0400, 0x48034001, 0x8c60053e, 0x05020007, 0x59a00a0b, 0x800409c0, 0x05000006, 0x80040480, 0x05021004, 0x8460c57e, 0x4178b800, - 0x05fdf7bb, 0x49474000, 0x485dd805, 0x59a00002, - 0x4801d803, 0x40ec1000, 0x0001f821, 0x4a01d809, - 0x001045ab, 0x5c00c800, 0x5c00c000, 0x5c00b800, + 0x05fdf7ae, 0x49474000, 0x485dd805, 0x59a00002, + 0x4801d803, 0x40ec1000, 0x0001f829, 0x4a01d809, + 0x001047d7, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c60053e, 0x05020019, 0x805cb9c0, 0x05000021, 0x59a00001, 0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0, 0x05000005, 0x80040480, 0x05021003, 0x4178b800, 0x0501f00d, 0x59a00801, 0x48074407, 0x485dd805, 0x59a00002, 0x4801d803, - 0x4a01d809, 0x001029f5, 0x40ec1000, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x0001f021, 0x59a00001, + 0x4a01d809, 0x00102a9d, 0x40ec1000, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x0001f029, 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208, 0x642b4407, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x05f1f497, 0x59a00801, 0x48074407, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x05f1f44e, 0x05fdf8b0, - 0x05f00486, 0x59a28800, 0x05fdf77a, 0x4c5c0000, - 0x4c600000, 0x4c640000, 0x4178b800, 0x59a0c407, - 0x59a0c802, 0x59a2440b, 0x0509fcc3, 0x05020029, - 0x0509fc6d, 0x05000003, 0x0509fb08, 0x05020025, - 0x8c60053e, 0x05020022, 0x83440580, 0x000007fe, - 0x0500000f, 0x83440580, 0x000007fc, 0x0500000c, - 0x0509fc6d, 0x05000005, 0x59340403, 0x8400055e, - 0x48026c03, 0x0501f006, 0x0509fa01, 0x05020004, - 0x59340403, 0x8400055e, 0x48026c03, 0x4134a000, - 0x4064a800, 0x6018b000, 0x0545fad5, 0x59340007, - 0x4400a800, 0x59340006, 0x4800a801, 0x59340009, - 0x4800a802, 0x59340008, 0x4800a803, 0x59340403, - 0x8400051e, 0x48026c03, 0x9064cc0a, 0x905cbc28, - 0x81468800, 0x83440480, 0x000007f0, 0x0500100c, - 0x8c600506, 0x05000026, 0x83440580, 0x000007f0, - 0x05020003, 0x61fa880f, 0x0501f005, 0x83440580, - 0x000007ff, 0x0502001e, 0x61f2880f, 0x905c05a8, - 0x05000002, 0x05fdf7c4, 0x59a00001, 0x805c0400, - 0x48034001, 0x8c60053e, 0x05020007, 0x59a00a0b, - 0x800409c0, 0x05000006, 0x80040480, 0x05021004, - 0x8460c57e, 0x4178b800, 0x05fdf7b7, 0x49474000, - 0x485dd805, 0x59a00002, 0x4801d803, 0x40ec1000, - 0x0001f821, 0x4a01d809, 0x00104635, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c60053e, - 0x05020019, 0x805cb9c0, 0x05000021, 0x59a00001, - 0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0, - 0x05000005, 0x80040480, 0x05021003, 0x4178b800, - 0x0501f00d, 0x59a00801, 0x48074407, 0x485dd805, - 0x59a00002, 0x4801d803, 0x4a01d809, 0x001029f5, + 0x05f1f313, 0x59a00801, 0x48074407, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x05f1f2ca, 0x05f9fffa, + 0x05f00302, 0x59a28800, 0x05fdf76e, 0x61f82800, + 0x59a00c07, 0x59a01208, 0x59a01c08, 0x59a0220a, + 0x82040500, 0x0000ff00, 0x840001c0, 0x900034a0, + 0x05f01304, 0x80140480, 0x05f01302, 0x82040500, + 0x000000ff, 0x900034a0, 0x05f012fe, 0x80140480, + 0x05f012fc, 0x82080500, 0x0000ff00, 0x840001c0, + 0x900034a0, 0x05f012f7, 0x80140480, 0x05f012f5, + 0x82080500, 0x000000ff, 0x900034a0, 0x05f012f1, + 0x80140480, 0x05f012ef, 0x820c0500, 0x0000ff00, + 0x840001c0, 0x900034a0, 0x05f012ea, 0x80140480, + 0x05f012e8, 0x820c0500, 0x000000ff, 0x900034a0, + 0x05f012e4, 0x80140480, 0x05f012e2, 0x82100500, + 0x0000ff00, 0x840001c0, 0x900034a0, 0x05f012dd, + 0x80140480, 0x05f012db, 0x82100500, 0x000000ff, + 0x900034a0, 0x05f012d7, 0x80140480, 0x05f012d5, + 0x900401c0, 0x80080d40, 0x900c01c0, 0x80101d40, + 0xb1a83422, 0x44043000, 0x80183000, 0x440c3000, + 0x05f1f284, 0x916c0583, 0x05000003, 0x641f4407, + 0x05f1f2c3, 0x0501fa01, 0x05f202c6, 0x49234003, + 0x59a00408, 0x59a00a08, 0x900409c0, 0x80040d40, + 0x4805d807, 0x59a0040a, 0x59a00a0a, 0x900409c0, + 0x80040d40, 0x4805d808, 0x6401d801, 0x0501f912, + 0x05020003, 0x640b4407, 0x05f1f2b1, 0x417a8800, + 0x497b4001, 0x912c0408, 0x48034002, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x4178b800, 0x4178c800, + 0x59a0c002, 0x0509fd05, 0x0502000a, 0x0509fcaf, + 0x05020008, 0x8c64053e, 0x05020005, 0x59340002, + 0x4800c000, 0x4944c001, 0x9060c402, 0x905cbc08, + 0x81468800, 0x59a800ad, 0x81440480, 0x0502101f, + 0xb05c0480, 0x05021002, 0x05fdf7ef, 0x59a00001, + 0x805c0400, 0x48034001, 0x8c64053e, 0x05000003, + 0x4178b800, 0x05fdf7e8, 0x59a00a0b, 0x800409c0, + 0x05000006, 0x80040480, 0x05021004, 0x4178b800, + 0x8464cd7e, 0x05fdf7e0, 0x49474000, 0x485dd805, + 0x59a00002, 0x4801d803, 0x40ec1000, 0x0001f829, + 0x4a01d809, 0x00104896, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x8c64053e, 0x0502001a, + 0x805cb9c0, 0x05000022, 0x59a00001, 0x805c0400, + 0x48034001, 0x59a00a0b, 0x800409c0, 0x05000005, + 0x80040480, 0x05021003, 0x4178b800, 0x0501f00e, + 0x59a00801, 0x80040906, 0x48074407, 0x485dd805, + 0x59a00002, 0x4801d803, 0x4a01d809, 0x00102a9d, 0x40ec1000, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x0001f021, 0x59a00001, 0x805c0c00, 0x59a0020b, + 0x0001f029, 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208, 0x642b4407, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x05f1f40d, 0x59a00801, - 0x48074407, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x05f1f3c4, 0x05fdf826, 0x05f003fc, 0x59a28800, - 0x05fdf777, 0x61f82800, 0x59a00c07, 0x59a01208, - 0x59a01c08, 0x59a0220a, 0x82040500, 0x0000ff00, - 0x840001c0, 0x900034a0, 0x05f013fe, 0x80140480, - 0x05f013fc, 0x82040500, 0x000000ff, 0x900034a0, - 0x05f013f8, 0x80140480, 0x05f013f6, 0x82080500, - 0x0000ff00, 0x840001c0, 0x900034a0, 0x05f013f1, - 0x80140480, 0x05f013ef, 0x82080500, 0x000000ff, - 0x900034a0, 0x05f013eb, 0x80140480, 0x05f013e9, - 0x820c0500, 0x0000ff00, 0x840001c0, 0x900034a0, - 0x05f013e4, 0x80140480, 0x05f013e2, 0x820c0500, - 0x000000ff, 0x900034a0, 0x05f013de, 0x80140480, - 0x05f013dc, 0x82100500, 0x0000ff00, 0x840001c0, - 0x900034a0, 0x05f013d7, 0x80140480, 0x05f013d5, - 0x82100500, 0x000000ff, 0x900034a0, 0x05f013d1, - 0x80140480, 0x05f013cf, 0x900401c0, 0x80080d40, - 0x900c01c0, 0x80101d40, 0xb1a8341f, 0x44043000, - 0x80183000, 0x440c3000, 0x05f1f37e, 0x916c0583, - 0x05000003, 0x641f4407, 0x05f1f3bd, 0x0501fa06, - 0x05f203c0, 0x49234003, 0x59a00408, 0x59a00a08, - 0x900409c0, 0x80040d40, 0x4805d807, 0x59a0040a, - 0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d808, - 0x6401d801, 0x0501f912, 0x05020003, 0x640b4407, - 0x05f1f3ab, 0x417a8800, 0x497b4001, 0x912c0408, - 0x48034002, 0x4c5c0000, 0x4c600000, 0x4c640000, - 0x4178b800, 0x4178c800, 0x59a0c002, 0x0509fbde, - 0x0502000a, 0x0509fb88, 0x05020008, 0x8c64053e, - 0x05020005, 0x59340002, 0x4800c000, 0x4944c001, - 0x9060c402, 0x905cbc08, 0x81468800, 0x83440480, - 0x00000800, 0x0502101f, 0xb05c0480, 0x05021002, - 0x05fdf7ef, 0x59a00001, 0x805c0400, 0x48034001, - 0x8c64053e, 0x05000003, 0x4178b800, 0x05fdf7e8, - 0x59a00a0b, 0x800409c0, 0x05000006, 0x80040480, - 0x05021004, 0x4178b800, 0x8464cd7e, 0x05fdf7e0, - 0x49474000, 0x485dd805, 0x59a00002, 0x4801d803, - 0x40ec1000, 0x0001f821, 0x4a01d809, 0x001046f4, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x8c64053e, 0x0502001a, 0x805cb9c0, 0x05000022, - 0x59a00001, 0x805c0400, 0x48034001, 0x59a00a0b, - 0x800409c0, 0x05000005, 0x80040480, 0x05021003, - 0x4178b800, 0x0501f00e, 0x59a00801, 0x80040906, - 0x48074407, 0x485dd805, 0x59a00002, 0x4801d803, - 0x4a01d809, 0x001029f5, 0x40ec1000, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x0001f021, 0x59a00001, - 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208, - 0x642b4407, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x05f1f34f, 0x59a00801, 0x80040906, 0x48074407, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x05f1f305, - 0x05f9ff67, 0x05f0033d, 0x59a28800, 0x59a24003, - 0x59a24805, 0x05fdf79c, 0x8d0c050e, 0x05000003, - 0x64074407, 0x05f1f33e, 0x59a80249, 0x8c00050a, - 0x05020005, 0x8c000506, 0x05020003, 0x645b4407, - 0x05f1f337, 0x0501f980, 0x05f2033a, 0x0501f898, - 0x05020003, 0x640b4407, 0x05f1f331, 0x59a00c07, - 0x80040902, 0x59a00408, 0x59a01208, 0x900811c0, - 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0, - 0x800c1d40, 0x912c0409, 0x0501f8a9, 0x4a01d809, - 0x0010471a, 0x1c01f000, 0x05f9ff41, 0x05f00317, - 0x58ee580d, 0x592c000d, 0x59a8383d, 0x0515f9af, - 0x05040df4, 0x05f2031f, 0x49474001, 0x481a6802, - 0x592c000e, 0x82001d80, 0x70000000, 0x05020005, - 0x0501f877, 0x0502000c, 0x640b4407, 0x05f1f310, - 0x82001d80, 0x72000000, 0x05f20312, 0x0501f870, - 0x0502086f, 0x0502086e, 0x05020003, 0x640b4407, - 0x05f1f307, 0x58ee580d, 0x4a025c08, 0x00008000, - 0x497a5a08, 0x592c320c, 0x80183102, 0x592c1801, - 0x4a001809, 0x01000000, 0x0531fe1a, 0x05020003, - 0x640f4407, 0x05f1f2fa, 0x4a01d809, 0x00104745, - 0x1c01f000, 0x592c4000, 0x592c0009, 0x82000580, - 0x01000000, 0x05020003, 0x64134407, 0x05f1f2f0, - 0x4c580000, 0x4c500000, 0x4c540000, 0x912c3c09, - 0x401ca000, 0x401ca800, 0x5820280e, 0x6008b000, - 0x82143580, 0x70000000, 0x05000002, 0x603cb000, - 0x0545f98a, 0x5c00a800, 0x5c00a000, 0x5c00b000, - 0x401c0000, 0x5820100a, 0x5820180b, 0x58202209, - 0x80102102, 0x82143580, 0x70000000, 0x05020005, - 0x90103482, 0x05f012db, 0x60080800, 0x0501f061, - 0x82143580, 0x72000000, 0x05f202d6, 0x901034aa, - 0x05f012d4, 0x603c0800, 0x0501f85a, 0x4a01d809, - 0x00104772, 0x1c01f000, 0x05f9fee9, 0x05f002bf, - 0x58ee580e, 0x592e5800, 0x912c0c09, 0x4c580000, - 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800, - 0x603cb000, 0x0545f965, 0x5c00a800, 0x5c00a000, - 0x5c00b000, 0x40ec1000, 0x64001001, 0x64f01005, - 0x48041003, 0x0001f821, 0x4a01d809, 0x00104789, - 0x1c01f000, 0x05f9fed2, 0x05f002a8, 0x58ee580e, + 0x5c00c000, 0x5c00b800, 0x05f1f255, 0x59a00801, + 0x80040906, 0x48074407, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x05f1f20b, 0x05f9ff3b, 0x05f00243, + 0x59a28800, 0x59a24003, 0x59a24805, 0x05fdf79c, + 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f244, + 0x59a8024c, 0x8c00050a, 0x05020005, 0x8c000506, + 0x05020003, 0x645b4407, 0x05f1f23d, 0x0501f97b, + 0x05f20240, 0x0501f898, 0x05020003, 0x640b4407, + 0x05f1f237, 0x59a00c07, 0x80040902, 0x59a00408, + 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a, + 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x912c0409, + 0x0501f8a9, 0x4a01d809, 0x001048bc, 0x1c01f000, + 0x05f9ff15, 0x05f0021d, 0x58ee580d, 0x592c000d, + 0x59a83840, 0x0515fbb9, 0x05040e6d, 0x05f20225, + 0x49474001, 0x481a6802, 0x592c000e, 0x82001d80, + 0x70000000, 0x05020005, 0x0501f877, 0x0502000c, + 0x640b4407, 0x05f1f216, 0x82001d80, 0x72000000, + 0x05f20218, 0x0501f870, 0x0502086f, 0x0502086e, + 0x05020003, 0x640b4407, 0x05f1f20d, 0x58ee580d, + 0x4a025c08, 0x00008000, 0x497a5a08, 0x592c320c, + 0x80183102, 0x592c1801, 0x4a001809, 0x01000000, + 0x0535fa11, 0x05020003, 0x640f4407, 0x05f1f200, + 0x4a01d809, 0x001048e7, 0x1c01f000, 0x592c4000, + 0x592c0009, 0x82000580, 0x01000000, 0x05020003, + 0x64134407, 0x05f1f1f6, 0x4c580000, 0x4c500000, + 0x4c540000, 0x912c3c09, 0x401ca000, 0x401ca800, + 0x5820280e, 0x6008b000, 0x82143580, 0x70000000, + 0x05000002, 0x603cb000, 0x0545ff63, 0x5c00a800, + 0x5c00a000, 0x5c00b000, 0x401c0000, 0x5820100a, + 0x5820180b, 0x58202209, 0x80102102, 0x82143580, + 0x70000000, 0x05020005, 0x90103482, 0x05f011e1, + 0x60080800, 0x0501f061, 0x82143580, 0x72000000, + 0x05f201dc, 0x901034aa, 0x05f011da, 0x603c0800, + 0x0501f85a, 0x4a01d809, 0x00104914, 0x1c01f000, + 0x05f9febd, 0x05f001c5, 0x58ee580e, 0x592e5800, 0x912c0c09, 0x4c580000, 0x4c500000, 0x4c540000, - 0x4004a000, 0x4004a800, 0x6030b000, 0x0545f94f, + 0x4004a000, 0x4004a800, 0x603cb000, 0x0545ff3e, 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x40ec1000, - 0x64001001, 0x64c01005, 0x48041003, 0x0001f821, - 0x4a01d809, 0x001029f5, 0x1c01f000, 0x05e1f9e3, - 0x0500000e, 0x497a5800, 0x58ec000d, 0x80000540, - 0x05020004, 0x492dd80d, 0x492dd80e, 0x0501f006, - 0x58ec000e, 0x48025800, 0x90000401, 0x452c0000, - 0x492dd80e, 0x912c0408, 0x492fc857, 0x4803c857, - 0x1c01f000, 0x4d2c0000, 0x58ec400d, 0x802041c0, - 0x05000007, 0x4823c857, 0x40225800, 0x592c4001, - 0x497a5801, 0x05e1f9d9, 0x05fdf7f9, 0x4979d80d, - 0x4979d80e, 0x5c025800, 0x1c01f000, 0x60043000, - 0x0501f009, 0x60043000, 0x0501f008, 0x60003000, - 0x0501f006, 0x60003000, 0x800408c4, 0x0501f00b, - 0x60003000, 0x800408c4, 0x800409c0, 0x05dc0e0f, - 0x4803c857, 0x4807c857, 0x480bc857, 0x480fc857, - 0x481bc857, 0x48efc857, 0x4819d801, 0x4801d803, - 0x4809d807, 0x480dd808, 0x4805d805, 0x40ec1000, - 0x0001f821, 0x4a01d809, 0x001029f5, 0x1c01f000, - 0x80002d80, 0x480bc857, 0x480fc857, 0x4813c857, - 0x4817c857, 0x0001fab3, 0x0542004b, 0x4d2c0000, - 0x4da00000, 0x42034000, 0x0010dceb, 0x59a00018, - 0x800001c0, 0x05020014, 0x05006013, 0x480bc020, - 0x480fc021, 0x4813c022, 0x4817c023, 0x900811c0, - 0x90081552, 0x480bc011, 0x59e00017, 0x8c00050a, - 0x60000800, 0x00020892, 0x8d0c0530, 0x05e60ece, - 0x000209bc, 0x6403c017, 0x4203e000, 0x30000001, - 0x0501f049, 0x4c040000, 0x4c1c0000, 0x80000800, - 0x48074018, 0x59a0381b, 0x481fc857, 0x801c39c0, - 0x05020023, 0x9000048c, 0x0502100e, 0x59a00019, - 0x80000000, 0x48034019, 0x59a0021a, 0x90000402, - 0x90000c97, 0x4803421a, 0x05001003, 0x497b421a, - 0x41780000, 0x59a03817, 0x801c3c00, 0x0501f02c, - 0x4803c856, 0x05e1f96d, 0x05000007, 0x492f401b, - 0x492f401c, 0x412c3800, 0x497b421d, 0x497a5817, - 0x0501f023, 0x5988001e, 0x80000000, 0x4803101e, - 0x59a00018, 0x80000040, 0x48034018, 0x59a0021a, - 0x59a03817, 0x801c3c00, 0x0501f019, 0x59a0021d, - 0x90000402, 0x90000c96, 0x05021004, 0x4803421d, - 0x801c3c00, 0x0501f012, 0x05e1f954, 0x0502000b, - 0x5988001e, 0x80000000, 0x4803101e, 0x59a00018, - 0x80000040, 0x48034018, 0x4803c857, 0x59a0021d, - 0x801c3c00, 0x0501f006, 0x492f401b, 0x492c3817, - 0x412c3800, 0x497b421d, 0x497a5817, 0x48083c00, - 0x480c3a00, 0x48103c01, 0x48143a01, 0x5c003800, - 0x5c000800, 0x5c034000, 0x5c025800, 0x1c01f000, - 0x480fc857, 0x4813c857, 0x481bc857, 0x42000000, - 0x0010e40c, 0x0541ff8f, 0x801800d0, 0x81202d40, - 0x60501100, 0x05fdf78c, 0x4c000000, 0x599c0017, - 0x8c000512, 0x5c000000, 0x1c01f000, 0x4c000000, - 0x599c0018, 0x8c00050e, 0x5c000000, 0x1c01f000, - 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f1dc, - 0x916c0583, 0x05000003, 0x641f4407, 0x05f1f1d8, - 0x59a24805, 0x59240400, 0x8c000508, 0x05020003, - 0x64234407, 0x05f1f1d2, 0x59340405, 0x8c000508, - 0x05020003, 0x8c00050a, 0x05fe02f9, 0x497a5a08, - 0x497a5809, 0x4a025c08, 0x00008000, 0x0531fd79, - 0x05020003, 0x640f4407, 0x05f1f1c5, 0x4a01d809, - 0x0010487a, 0x1c01f000, 0x592c0009, 0x82000580, - 0x01000000, 0x05020003, 0x64134407, 0x05f1f1bc, - 0x59a28c07, 0x59a2440b, 0x0509f9f7, 0x05f201bd, - 0x05fdf2e3, 0x4c040000, 0x59a2440b, 0x42000000, - 0x0010e511, 0x50000000, 0x81200480, 0x0502100d, - 0x83200c00, 0x0010d17b, 0x50064800, 0x812649c0, - 0x05000008, 0x59240200, 0x8c000500, 0x05000005, - 0x49274005, 0x80000580, 0x5c000800, 0x1c01f000, - 0x90000541, 0x05fdf7fd, 0x61be880f, 0x0001fb00, - 0x05140e31, 0x81468840, 0x05fe17fd, 0x1c01f000, - 0x4803c856, 0x4c0c0000, 0x4d340000, 0x4d440000, - 0x61fa880f, 0x60024000, 0x0509f9d3, 0x0502000a, - 0x5934180a, 0x900c1d01, 0x900c1d81, 0x60002000, - 0x0501fa6c, 0x05000002, 0x60042000, 0x606c1100, - 0x05fdff2c, 0x5c028800, 0x5c026800, 0x5c001800, - 0x1c01f000, 0x48efc857, 0x05011000, 0x48efc840, - 0x6443c842, 0x40000000, 0x05fd17ff, 0x42000000, - 0x0010dd60, 0x50000000, 0x80000540, 0x05000003, - 0x5800000b, 0x4801d806, 0x4a01d80f, 0xbeefbeef, - 0x1c01f000, 0x497b4000, 0x497b4001, 0x497b4002, - 0x497b4003, 0x497b4004, 0x497b4005, 0x1c01f000, - 0x42002000, 0x00111b00, 0x41580000, 0x41781000, + 0x64001001, 0x64f01005, 0x48041003, 0x0001f829, + 0x4a01d809, 0x0010492b, 0x1c01f000, 0x05f9fea6, + 0x05f001ae, 0x58ee580e, 0x912c0c09, 0x4c580000, + 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800, + 0x6030b000, 0x0545ff28, 0x5c00a800, 0x5c00a000, + 0x5c00b000, 0x40ec1000, 0x64001001, 0x64c01005, + 0x48041003, 0x0001f829, 0x4a01d809, 0x00102a9d, + 0x1c01f000, 0x05e1f878, 0x0500000e, 0x497a5800, + 0x58ec000d, 0x80000540, 0x05020004, 0x492dd80d, + 0x492dd80e, 0x0501f006, 0x58ec000e, 0x48025800, + 0x90000401, 0x452c0000, 0x492dd80e, 0x912c0408, + 0x492fc857, 0x4803c857, 0x1c01f000, 0x4d2c0000, + 0x58ec400d, 0x802041c0, 0x05000007, 0x4823c857, + 0x40225800, 0x592c4001, 0x497a5801, 0x05e1f86e, + 0x05fdf7f9, 0x4979d80d, 0x4979d80e, 0x5c025800, + 0x1c01f000, 0x60043000, 0x0501f009, 0x60043000, + 0x0501f008, 0x60003000, 0x0501f006, 0x60003000, + 0x800408c4, 0x0501f006, 0x60003000, 0x800408c4, + 0x800409c0, 0x05dc0ca8, 0x4803c857, 0x4819d801, + 0x4801d803, 0x4809d807, 0x480dd808, 0x4805d805, + 0x40ec1000, 0x0001f829, 0x4a01d809, 0x00102a9d, + 0x1c01f000, 0x80002d80, 0x480bc857, 0x480fc857, + 0x4813c857, 0x4817c857, 0x0001fabb, 0x054205f8, + 0x4d2c0000, 0x4da00000, 0x42034000, 0x00111c71, + 0x59a00018, 0x800001c0, 0x05020014, 0x05006013, + 0x480bc020, 0x480fc021, 0x4813c022, 0x4817c023, + 0x900811c0, 0x90081552, 0x480bc011, 0x59e00017, + 0x8c00050a, 0x60000800, 0x0002089a, 0x8d0c0530, + 0x05e60da2, 0x000209c4, 0x6403c017, 0x4203e000, + 0x30000001, 0x0501f049, 0x4c040000, 0x4c1c0000, + 0x80000800, 0x48074018, 0x59a0381b, 0x481fc857, + 0x801c39c0, 0x05020023, 0x9000048c, 0x0502100e, + 0x59a00019, 0x80000000, 0x48034019, 0x59a0021a, + 0x90000402, 0x90000c97, 0x4803421a, 0x05001003, + 0x497b421a, 0x41780000, 0x59a03817, 0x801c3c00, + 0x0501f02c, 0x4803c856, 0x05e1f807, 0x05000007, + 0x492f401b, 0x492f401c, 0x412c3800, 0x497b421d, + 0x497a5817, 0x0501f023, 0x5988001e, 0x80000000, + 0x4803101e, 0x59a00018, 0x80000040, 0x48034018, + 0x59a0021a, 0x59a03817, 0x801c3c00, 0x0501f019, + 0x59a0021d, 0x90000402, 0x90000c96, 0x05021004, + 0x4803421d, 0x801c3c00, 0x0501f012, 0x05ddffee, + 0x0502000b, 0x5988001e, 0x80000000, 0x4803101e, + 0x59a00018, 0x80000040, 0x48034018, 0x4803c857, + 0x59a0021d, 0x801c3c00, 0x0501f006, 0x492f401b, + 0x492c3817, 0x412c3800, 0x497b421d, 0x497a5817, + 0x48083c00, 0x480c3a00, 0x48103c01, 0x48143a01, + 0x5c003800, 0x5c000800, 0x5c034000, 0x5c025800, + 0x1c01f000, 0x480fc857, 0x4813c857, 0x481bc857, + 0x42000000, 0x001123ad, 0x0545fd6d, 0x801800d0, + 0x81202d40, 0x60501100, 0x05fdf78c, 0x4c000000, + 0x599c0017, 0x8c000512, 0x5c000000, 0x1c01f000, + 0x4c000000, 0x599c0018, 0x8c00050e, 0x5c000000, + 0x1c01f000, 0x8d0c050e, 0x05000003, 0x64074407, + 0x05f1f0e7, 0x916c0583, 0x05000003, 0x641f4407, + 0x05f1f0e3, 0x59a24805, 0x59240400, 0x8c000508, + 0x05020003, 0x64234407, 0x05f1f0dd, 0x59340405, + 0x8c000508, 0x05020003, 0x8c00050a, 0x05fe02dd, + 0x497a5a08, 0x497a5809, 0x4a025c08, 0x00008000, + 0x0535f975, 0x05020003, 0x640f4407, 0x05f1f0d0, + 0x4a01d809, 0x00104a17, 0x1c01f000, 0x592c0009, + 0x82000580, 0x01000000, 0x05020003, 0x64134407, + 0x05f1f0c7, 0x59a28c07, 0x59a2440b, 0x0509fb23, + 0x05f200c8, 0x05fdf2c7, 0x4c040000, 0x59a2440b, + 0x42000000, 0x001124b5, 0x50000000, 0x81200480, + 0x0502100d, 0x83200c00, 0x0010d8f9, 0x50064800, + 0x812649c0, 0x05000008, 0x59240200, 0x8c000500, + 0x05000005, 0x49274005, 0x80000580, 0x5c000800, + 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x59a800ad, + 0x80000040, 0x40028800, 0x0001fb08, 0x051808ac, + 0x83440580, 0x00000800, 0x05020002, 0x61c2880f, + 0x81468840, 0x05fe17f9, 0x1c01f000, 0x4803c856, + 0x4c0c0000, 0x4d340000, 0x4d440000, 0x61fa880f, + 0x60024000, 0x0509faf9, 0x0502000a, 0x5934180a, + 0x900c1d01, 0x900c1d81, 0x60002000, 0x0501fa6f, + 0x05000002, 0x60042000, 0x606c1100, 0x05fdff26, + 0x5c028800, 0x5c026800, 0x5c001800, 0x1c01f000, + 0x48efc857, 0x05011000, 0x48efc840, 0x6443c842, + 0x40000000, 0x05fd17ff, 0x42000000, 0x00111cfa, + 0x50000000, 0x80000540, 0x05000003, 0x5800000b, + 0x4801d806, 0x4a01d80f, 0xbeefbeef, 0x1c01f000, + 0x497b4000, 0x497b4001, 0x497b4002, 0x497b4003, + 0x497b4004, 0x497b4005, 0x1c01f000, 0x0501fb27, + 0x05000004, 0x916404a0, 0x0502101d, 0x0501f01b, + 0x42002000, 0x00115aa4, 0x41580000, 0x41781000, 0x58100c07, 0x800409c0, 0x0500000c, 0x90041d83, 0x0500000a, 0x90041c86, 0x05001007, 0x90041d8a, 0x05000005, 0x90041c8f, 0x05001004, 0x90041c92, 0x05021002, 0x80081000, 0x90102430, 0x80100c80, - 0x05fc17f0, 0x40080000, 0x59a8129c, 0x80080480, - 0x05021002, 0x41780000, 0x81640480, 0x05021002, - 0x41780000, 0x1c01f000, 0x05e9fe96, 0x05020015, - 0x59a86892, 0x82346d80, 0x3261103c, 0x05020011, - 0x0545f80f, 0x0500000d, 0x605c70f4, 0x50386800, - 0x82347500, 0x03f00000, 0x82387580, 0x00400000, - 0x05020007, 0x82347500, 0x000f0000, 0x82387580, - 0x00010000, 0x05000002, 0x90000541, 0x64030000, - 0x1c01f000, 0x05e9fe7f, 0x05020004, 0x59a86892, - 0x82347580, 0x01651077, 0x1c01f000, 0x05e9fe79, - 0x0502000d, 0x59a86892, 0x82347580, 0x01751077, - 0x05000009, 0x82347580, 0x01661077, 0x05000006, - 0x82347580, 0x01681077, 0x05000003, 0x82347580, - 0x01761077, 0x1c01f000, 0x05e9fe6a, 0x05020007, - 0x59a86892, 0x82347580, 0x01681077, 0x05000003, - 0x82347580, 0x01761077, 0x1c01f000, 0x05e9fe61, - 0x05020004, 0x59a86892, 0x82347580, 0x01751077, - 0x1c01f000, 0x05fdfffa, 0x05000003, 0x80000580, - 0x0501f00d, 0x59a00c07, 0x82040580, 0x000000a0, - 0x05000009, 0x82040580, 0x000000e0, 0x05000006, - 0x82040580, 0x000000d0, 0x05000003, 0x82040580, - 0x00000098, 0x1c01f000, 0x59a0020c, 0x8c00051a, - 0x1c01f000, 0x4803c856, 0x05fdffdc, 0x05000005, - 0x0501f88d, 0x05000003, 0x65034407, 0x05f1f0fc, - 0x59a0020b, 0x4803c857, 0x800001c0, 0x05f000fd, - 0xb0000485, 0x05f210fb, 0x59a0220c, 0x8c100500, - 0x0502001d, 0x4803c856, 0x05fdfe55, 0x05020004, - 0x640b4407, 0x4803c856, 0x05f1f0ed, 0x05edf80f, - 0x59a00c0b, 0x59a01a0b, 0x59a0220c, 0x59a02c07, - 0x912e5c05, 0x412cc800, 0x4807c857, 0x480fc857, - 0x4813c857, 0x4817c857, 0x4867c857, 0x0501f916, - 0x64030000, 0x0500001f, 0x59a00a0b, 0x59a01008, - 0x900811c0, 0x59a0180a, 0x900c19c0, 0x412c0000, - 0x05fdf65f, 0x4807c856, 0x59a00c0b, 0x59a01a0b, - 0x900c0581, 0x05f200d7, 0x4c040000, 0x4c0c0000, - 0x4c100000, 0x05e9fff1, 0x5c002000, 0x5c001800, - 0x5c000800, 0x59a02c07, 0x91a0cc07, 0x4807c857, - 0x4813c857, 0x4817c857, 0x0501f8fb, 0x64030000, - 0x05000004, 0x59a00a07, 0x48074407, 0x05f1f07d, - 0x64134407, 0x05f1f0be, 0x59a0220c, 0x4813c857, - 0x05fdff96, 0x05000005, 0x0501f847, 0x05000003, - 0x65034407, 0x05f1f0b6, 0x59a00c0b, 0x4807c857, - 0x8c100500, 0x05020017, 0x05fdfe15, 0x05020003, - 0x640b4407, 0x05f1f0ae, 0x59a00a0b, 0xb0040485, - 0x05f210b0, 0x59a01008, 0x900811c0, 0x59a0180a, - 0x900c19c0, 0x912c0405, 0x05fdfe2b, 0x4a01d809, - 0x0010499a, 0x1c01f000, 0x05f9fcc1, 0x05f00097, - 0x58ee580d, 0x912c1405, 0x59a01a0b, 0x0501f003, - 0x91a0140b, 0x60041800, 0x4c080000, 0x4c0c0000, - 0x05e9ffba, 0x5c001800, 0x5c001000, 0x59a00c0b, - 0x59a0220c, 0x59a02c07, 0x4807c857, 0x480bc857, - 0x50080000, 0x82000500, 0x000000ff, 0x4803c857, - 0x480fc857, 0x4813c857, 0x4817c857, 0x0501f84f, - 0x64030000, 0x05f20043, 0x64134407, 0x05f1f084, - 0x05fdff5e, 0x05000003, 0x0501f80f, 0x0502000d, - 0x4803c856, 0x61c0083f, 0x61c4103f, 0x64000800, - 0x46001000, 0x000001a7, 0x64040800, 0x64041000, - 0x64080800, 0x50080000, 0x8400054e, 0x44001000, - 0x1c01f000, 0x59a80092, 0x82000580, 0x338e103c, - 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x64103000, - 0x4200b800, 0x000f4240, 0x05e9fbd9, 0x805cb840, - 0x05000005, 0x501c6800, 0x90346d02, 0x05fe07fb, - 0x90346d41, 0x485fc857, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x4c5c0000, 0x64103000, 0x4200b800, - 0x000f4240, 0x05e9fbca, 0x805cb840, 0x05000006, - 0x501c6800, 0x82346d00, 0x00000082, 0x05fe07fa, - 0x90346d41, 0x485fc857, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x4c5c0000, 0x4c600000, 0x6000b8f8, - 0x4200c000, 0x000f4240, 0x6404b800, 0x40000000, - 0x8060c040, 0x05000004, 0x505c0000, 0x8c000500, - 0x05fc07fa, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x4c5c0000, 0x6000b8f8, 0x4578b800, - 0x5c00b800, 0x1c01f000, 0x4803c856, 0x05fdffe9, - 0x0500006a, 0x4c5c0000, 0x61c0303f, 0x61c4383f, - 0x64103000, 0x4200b800, 0x000f4240, 0x805cb840, - 0x60080000, 0x0500004f, 0x501c0000, 0x8c00050c, - 0x05fe07fb, 0x640c3000, 0x4817c857, 0x05fdffb6, - 0x05000002, 0x60802801, 0x44143800, 0x64103000, - 0x46003800, 0x00000090, 0x05fdffc2, 0x05000054, - 0x8c10051c, 0x05000008, 0x640c3000, 0x4807c857, - 0x44043800, 0x64103000, 0x64403800, 0x05fdffb9, - 0x0500004b, 0x800c19c0, 0x05000033, 0x640c3000, - 0x5008b800, 0x445c3800, 0x485fc857, 0x480fc857, - 0x800c1840, 0x05000028, 0x64103000, 0x64403800, - 0x05fdffac, 0x0500003e, 0x640c3000, 0x805cb910, - 0x445c3800, 0x485fc857, 0x480fc857, 0x800c1840, - 0x0500001d, 0x64103000, 0x64403800, 0x05fdffa1, - 0x05000033, 0x640c3000, 0x805cb910, 0x445c3800, - 0x485fc857, 0x480fc857, 0x800c1840, 0x05000012, - 0x64103000, 0x64403800, 0x05fdff96, 0x05000028, + 0x05fc17f0, 0x80800482, 0x05021002, 0x41780000, + 0x81640480, 0x05021002, 0x41780000, 0x1c01f000, + 0x05e9fd70, 0x05020015, 0x59a86895, 0x82346d80, + 0x3261103c, 0x05020011, 0x0545fde4, 0x0500000d, + 0x605c70f4, 0x50386800, 0x82347500, 0x03f00000, + 0x82387580, 0x00400000, 0x05020007, 0x82347500, + 0x000f0000, 0x82387580, 0x00010000, 0x05000002, + 0x90000541, 0x64030000, 0x1c01f000, 0x05e9fd59, + 0x05020004, 0x59a86895, 0x82347580, 0x01651077, + 0x1c01f000, 0x05e9fd53, 0x0502000d, 0x59a86895, + 0x82347580, 0x01751077, 0x05000009, 0x82347580, + 0x01661077, 0x05000006, 0x82347580, 0x01681077, + 0x05000003, 0x82347580, 0x01761077, 0x1c01f000, + 0x05e9fd44, 0x05020007, 0x59a86895, 0x82347580, + 0x01681077, 0x05000003, 0x82347580, 0x01761077, + 0x1c01f000, 0x05e9fd3b, 0x05020004, 0x59a86895, + 0x82347580, 0x01751077, 0x1c01f000, 0x05fdfffa, + 0x05000003, 0x80000580, 0x0501f00d, 0x59a00c07, + 0x82040580, 0x000000a0, 0x05000009, 0x82040580, + 0x000000e0, 0x05000006, 0x82040580, 0x000000d0, + 0x05000003, 0x82040580, 0x00000098, 0x1c01f000, + 0x59a0020c, 0x8c00051a, 0x1c01f000, 0x4803c856, + 0x05fdffdc, 0x05000005, 0x0501f88d, 0x05000003, + 0x65034407, 0x05edf7fe, 0x59a0020b, 0x4803c857, + 0x800001c0, 0x05ec07ff, 0xb0000485, 0x05ee17fd, + 0x59a0220c, 0x8c100500, 0x0502001d, 0x4803c856, + 0x05fdfe51, 0x05020004, 0x640b4407, 0x4803c856, + 0x05edf7ef, 0x05e9fee9, 0x59a00c0b, 0x59a01a0b, + 0x59a0220c, 0x59a02c07, 0x912e5c05, 0x412cc800, + 0x4807c857, 0x480fc857, 0x4813c857, 0x4817c857, + 0x4867c857, 0x0501f916, 0x64030000, 0x0500001f, + 0x59a00a0b, 0x59a01008, 0x900811c0, 0x59a0180a, + 0x900c19c0, 0x412c0000, 0x05fdf65b, 0x4807c856, + 0x59a00c0b, 0x59a01a0b, 0x900c0581, 0x05ee07d9, + 0x4c040000, 0x4c0c0000, 0x4c100000, 0x05e9fecb, + 0x5c002000, 0x5c001800, 0x5c000800, 0x59a02c07, + 0x91a0cc07, 0x4807c857, 0x4813c857, 0x4817c857, + 0x0501f8fb, 0x64030000, 0x05000004, 0x59a00a07, + 0x48074407, 0x05edf77f, 0x64134407, 0x05edf7c0, + 0x59a0220c, 0x4813c857, 0x05fdff96, 0x05000005, + 0x0501f847, 0x05000003, 0x65034407, 0x05edf7b8, + 0x59a00c0b, 0x4807c857, 0x8c100500, 0x05020017, + 0x05fdfe11, 0x05020003, 0x640b4407, 0x05edf7b0, + 0x59a00a0b, 0xb0040485, 0x05ee17b2, 0x59a01008, + 0x900811c0, 0x59a0180a, 0x900c19c0, 0x912c0405, + 0x05fdfe27, 0x4a01d809, 0x00104b40, 0x1c01f000, + 0x05f9fc91, 0x05ec0799, 0x58ee580d, 0x912c1405, + 0x59a01a0b, 0x0501f003, 0x91a0140b, 0x60041800, + 0x4c080000, 0x4c0c0000, 0x05e9fe94, 0x5c001800, + 0x5c001000, 0x59a00c0b, 0x59a0220c, 0x59a02c07, + 0x4807c857, 0x480bc857, 0x50080000, 0x82000500, + 0x000000ff, 0x4803c857, 0x480fc857, 0x4813c857, + 0x4817c857, 0x0501f84f, 0x64030000, 0x05ee0745, + 0x64134407, 0x05edf786, 0x05fdff5e, 0x05000003, + 0x0501f80f, 0x0502000d, 0x4803c856, 0x61c0083f, + 0x61c4103f, 0x64000800, 0x46001000, 0x000001a7, + 0x64040800, 0x64041000, 0x64080800, 0x50080000, + 0x8400054e, 0x44001000, 0x1c01f000, 0x59a80095, + 0x82000580, 0x338e103c, 0x1c01f000, 0x4803c856, + 0x4c5c0000, 0x64103000, 0x4200b800, 0x000f4240, + 0x05e9fab3, 0x805cb840, 0x05000005, 0x501c6800, + 0x90346d02, 0x05fe07fb, 0x90346d41, 0x485fc857, + 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000, + 0x64103000, 0x4200b800, 0x000f4240, 0x05e9faa4, + 0x805cb840, 0x05000006, 0x501c6800, 0x82346d00, + 0x00000082, 0x05fe07fa, 0x90346d41, 0x485fc857, + 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000, + 0x4c600000, 0x6000b8f8, 0x4200c000, 0x000f4240, + 0x6404b800, 0x40000000, 0x8060c040, 0x05000004, + 0x505c0000, 0x8c000500, 0x05fc07fa, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000, + 0x6000b8f8, 0x4578b800, 0x5c00b800, 0x1c01f000, + 0x4803c856, 0x05fdffe9, 0x0500006a, 0x4c5c0000, + 0x61c0303f, 0x61c4383f, 0x64103000, 0x4200b800, + 0x000f4240, 0x805cb840, 0x60080000, 0x0500004f, + 0x501c0000, 0x8c00050c, 0x05fe07fb, 0x640c3000, + 0x4817c857, 0x05fdffb6, 0x05000002, 0x60802801, + 0x44143800, 0x64103000, 0x46003800, 0x00000090, + 0x05fdffc2, 0x05000054, 0x8c10051c, 0x05000008, + 0x640c3000, 0x4807c857, 0x44043800, 0x64103000, + 0x64403800, 0x05fdffb9, 0x0500004b, 0x800c19c0, + 0x05000033, 0x640c3000, 0x5008b800, 0x445c3800, + 0x485fc857, 0x480fc857, 0x800c1840, 0x05000028, + 0x64103000, 0x64403800, 0x05fdffac, 0x0500003e, 0x640c3000, 0x805cb910, 0x445c3800, 0x485fc857, - 0x480fc857, 0x800c1840, 0x05000007, 0x64103000, - 0x64403800, 0x05fdff8b, 0x0500001d, 0x80081000, - 0x05fdf7d3, 0x64103000, 0x65403800, 0x05fdff85, - 0x05000017, 0x90000541, 0x4803c856, 0x0501f011, - 0x4803c857, 0x64103000, 0x65403800, 0x05fdff7d, + 0x480fc857, 0x800c1840, 0x0500001d, 0x64103000, + 0x64403800, 0x05fdffa1, 0x05000033, 0x640c3000, + 0x805cb910, 0x445c3800, 0x485fc857, 0x480fc857, + 0x800c1840, 0x05000012, 0x64103000, 0x64403800, + 0x05fdff96, 0x05000028, 0x640c3000, 0x805cb910, + 0x445c3800, 0x485fc857, 0x480fc857, 0x800c1840, + 0x05000007, 0x64103000, 0x64403800, 0x05fdff8b, + 0x0500001d, 0x80081000, 0x05fdf7d3, 0x64103000, + 0x65403800, 0x05fdff85, 0x05000017, 0x90000541, + 0x4803c856, 0x0501f011, 0x4803c857, 0x64103000, + 0x65403800, 0x05fdff7d, 0x64103000, 0x4200b800, + 0x000f4240, 0x805cb840, 0x05000005, 0x501c0000, + 0x8c00050c, 0x05fe07fc, 0x05fdf7a9, 0x4803c857, + 0x05ddfa05, 0x4803c856, 0x5c00b800, 0x05fdff8f, + 0x1c01f000, 0x600c0000, 0x05fdf7fb, 0x4803c856, + 0x05fdff7a, 0x60040000, 0x0500009c, 0x4c5c0000, + 0x4c600000, 0x400c6000, 0x61c0303f, 0x61c4383f, 0x64103000, 0x4200b800, 0x000f4240, 0x805cb840, - 0x05000005, 0x501c0000, 0x8c00050c, 0x05fe07fc, - 0x05fdf7a9, 0x4803c857, 0x05ddfb70, 0x4803c856, - 0x5c00b800, 0x05fdff8f, 0x1c01f000, 0x600c0000, - 0x05fdf7fb, 0x4803c856, 0x05fdff7a, 0x60040000, - 0x0500009c, 0x4c5c0000, 0x4c600000, 0x400c6000, - 0x61c0303f, 0x61c4383f, 0x64103000, 0x4200b800, - 0x000f4240, 0x805cb840, 0x60080000, 0x0500008e, - 0x501c0000, 0x4803c857, 0x8c00050c, 0x05fe07fa, - 0x8c10051c, 0x05000017, 0x640c3000, 0x50180000, - 0x4803c857, 0x501c0000, 0x4803c857, 0x4817c857, - 0x05fdff3d, 0x05000002, 0x60802801, 0x44143800, - 0x64103000, 0x46003800, 0x00000090, 0x05fdff49, - 0x0500007d, 0x640c3000, 0x4807c857, 0x44043800, - 0x64103000, 0x64403800, 0x05fdff42, 0x05000076, - 0x640c3000, 0x80142800, 0x05fdff2b, 0x05000002, - 0x60842801, 0x44143800, 0x64103000, 0x46003800, - 0x00000090, 0x05fdff37, 0x0500006b, 0x800c19c0, - 0x05dc0b32, 0x4178b800, 0x900c1581, 0x05000040, - 0x64103000, 0x64803800, 0x05fdff1f, 0x05000062, - 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0, - 0x8004bd57, 0x485fc857, 0x480fc857, 0x805cb910, - 0x800c1840, 0x900c1581, 0x05000031, 0x64103000, - 0x64803800, 0x05fdff10, 0x05000053, 0x640c3000, - 0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57, - 0x485fc857, 0x480fc857, 0x805cb910, 0x800c1840, - 0x900c1581, 0x05000022, 0x64103000, 0x64803800, - 0x05fdff01, 0x05000044, 0x640c3000, 0x501c0800, + 0x60080000, 0x0500008e, 0x501c0000, 0x4803c857, + 0x8c00050c, 0x05fe07fa, 0x8c10051c, 0x05000017, + 0x640c3000, 0x50180000, 0x4803c857, 0x501c0000, + 0x4803c857, 0x4817c857, 0x05fdff3d, 0x05000002, + 0x60802801, 0x44143800, 0x64103000, 0x46003800, + 0x00000090, 0x05fdff49, 0x0500007d, 0x640c3000, + 0x4807c857, 0x44043800, 0x64103000, 0x64403800, + 0x05fdff42, 0x05000076, 0x640c3000, 0x80142800, + 0x05fdff2b, 0x05000002, 0x60842801, 0x44143800, + 0x64103000, 0x46003800, 0x00000090, 0x05fdff37, + 0x0500006b, 0x800c19c0, 0x05dc09c7, 0x4178b800, + 0x900c1581, 0x05000040, 0x64103000, 0x64803800, + 0x05fdff1f, 0x05000062, 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57, 0x485fc857, 0x480fc857, 0x805cb910, 0x800c1840, 0x900c1581, - 0x05000013, 0x64103000, 0x64803800, 0x05fdfef2, - 0x05000035, 0x640c3000, 0x501c0800, 0x4807c857, + 0x05000031, 0x64103000, 0x64803800, 0x05fdff10, + 0x05000053, 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57, 0x485fc857, 0x480fc857, - 0x445cc800, 0x8064c800, 0x4178b800, 0x800c1840, - 0x900c1581, 0x05000002, 0x05fdf7c2, 0x64103000, - 0x65a03800, 0x05fdfee0, 0x05000023, 0x640c3000, - 0x501c0800, 0x4807c857, 0x82040d00, 0x000000ff, - 0x9c0409c0, 0x8004bd57, 0x4807c857, 0x485fc857, - 0x4863c857, 0x4867c857, 0x480fc857, 0x40301000, - 0x41780800, 0x60100000, 0x0519fc90, 0x4807c857, - 0x800409c0, 0x05000006, 0x60100000, 0x80000c81, - 0x805cb910, 0x80040840, 0x05fe07fe, 0x445cc800, - 0x485fc857, 0x4863c857, 0x4867c857, 0x90000541, - 0x4803c856, 0x5c00c000, 0x5c00b800, 0x05fdfeed, - 0x1c01f000, 0x600c0000, 0x05fdf7fb, 0x4c000000, - 0x599c0018, 0x8c000514, 0x5c000000, 0x1c01f000, - 0x05fdfffb, 0x05000003, 0x59a80249, 0x8c000518, - 0x1c01f000, 0x599c0018, 0x8c000516, 0x05020003, - 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe, - 0x59a0020c, 0x8c000518, 0x1c01f000, 0x60003020, - 0x80183040, 0x05000010, 0x0541fdd5, 0x05fc07fd, - 0x05ddffa1, 0x605430f4, 0x50183800, 0x821c0500, - 0x00007000, 0x05000006, 0x480350d8, 0x821c0500, - 0xffff8fff, 0x44003000, 0x80000580, 0x64030000, - 0x1c01f000, 0x4803c856, 0x4a034408, 0x0000cccc, - 0x90000541, 0x05fdf7fa, 0x0541fdc1, 0x05fc07ff, - 0x600008f4, 0x58040015, 0x82000500, 0xffff8fff, - 0x59a810d8, 0x80080540, 0x48000815, 0x64030000, - 0x1c01f000, 0x59a80005, 0x8c000514, 0x05000005, - 0x42000000, 0x0010dd3e, 0x50000000, 0x90000528, - 0x1c01f000, 0x59a80092, 0x82000580, 0x041e1014, + 0x805cb910, 0x800c1840, 0x900c1581, 0x05000022, + 0x64103000, 0x64803800, 0x05fdff01, 0x05000044, + 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0, + 0x8004bd57, 0x485fc857, 0x480fc857, 0x805cb910, + 0x800c1840, 0x900c1581, 0x05000013, 0x64103000, + 0x64803800, 0x05fdfef2, 0x05000035, 0x640c3000, + 0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57, + 0x485fc857, 0x480fc857, 0x445cc800, 0x8064c800, + 0x4178b800, 0x800c1840, 0x900c1581, 0x05000002, + 0x05fdf7c2, 0x64103000, 0x65a03800, 0x05fdfee0, + 0x05000023, 0x640c3000, 0x501c0800, 0x4807c857, + 0x82040d00, 0x000000ff, 0x9c0409c0, 0x8004bd57, + 0x4807c857, 0x485fc857, 0x4863c857, 0x4867c857, + 0x480fc857, 0x40301000, 0x41780800, 0x60100000, + 0x0519ffa3, 0x4807c857, 0x800409c0, 0x05000006, + 0x60100000, 0x80000c81, 0x805cb910, 0x80040840, + 0x05fe07fe, 0x445cc800, 0x485fc857, 0x4863c857, + 0x4867c857, 0x90000541, 0x4803c856, 0x5c00c000, + 0x5c00b800, 0x05fdfeed, 0x1c01f000, 0x600c0000, + 0x05fdf7fb, 0x4c000000, 0x599c0018, 0x8c000514, + 0x5c000000, 0x1c01f000, 0x05fdfffb, 0x05000003, + 0x59a8024c, 0x8c000518, 0x1c01f000, 0x599c0018, + 0x8c000516, 0x05020003, 0x90000541, 0x1c01f000, + 0x80000580, 0x05fdf7fe, 0x60003020, 0x80183040, + 0x05000010, 0x0545fbad, 0x05fc07fd, 0x05ddfe60, + 0x605430f4, 0x50183800, 0x821c0500, 0x00007000, + 0x05000006, 0x480350dd, 0x821c0500, 0xffff8fff, + 0x44003000, 0x80000580, 0x64030000, 0x1c01f000, + 0x4803c856, 0x4a034408, 0x0000cccc, 0x90000541, + 0x05fdf7fa, 0x0545fb99, 0x05fc07ff, 0x600008f4, + 0x58040015, 0x82000500, 0xffff8fff, 0x59a810dd, + 0x80080540, 0x48000815, 0x64030000, 0x1c01f000, + 0x59a00c07, 0x90040588, 0x05000004, 0x90040589, + 0x05000016, 0x05edf5f7, 0x59000200, 0x80000540, + 0x05000043, 0x59001001, 0x59001802, 0x59002803, + 0x900811c0, 0x900c19c0, 0x901429c0, 0x61702000, + 0x8d0c0538, 0x05000002, 0x8410255e, 0x59000800, + 0x480b4008, 0x48134209, 0x480f400a, 0x4817400b, + 0x4807400c, 0x05edf59b, 0x916c0580, 0x0502002e, + 0x8d0c0538, 0x05020030, 0x59000200, 0x80001d40, + 0x0500002b, 0x59a0100b, 0x800811c0, 0x05ec05d9, + 0x900811c0, 0x41780800, 0x61700000, 0x4c0c0000, + 0x0519ff33, 0x5c001800, 0x800409c0, 0x05ee05d1, + 0x400c0000, 0x80080480, 0x05001002, 0x400c1000, + 0x480a0400, 0x82080400, 0x00000800, 0x480350ad, + 0x82080400, 0x000007f0, 0x480350ac, 0x82080c00, + 0x0010e380, 0x42001000, 0x00111b80, 0x05ddfcba, + 0x480b500d, 0x481b500e, 0x59a0280b, 0x59a01008, + 0x59a0180a, 0x900801c0, 0x48020001, 0x900c01c0, + 0x48020002, 0x901401c0, 0x48020003, 0x850e1d78, + 0x05fdf7c7, 0x60c00800, 0x0501f004, 0x60c40800, + 0x0501f002, 0x60c80800, 0x4807c857, 0x48074407, + 0x05edf5a7, 0x59a80005, 0x8c000514, 0x05000005, + 0x42000000, 0x00111cc4, 0x50000000, 0x90000528, + 0x1c01f000, 0x59a80095, 0x82000580, 0x041e1014, 0x1c01f000, 0x4807c857, 0x480bc857, 0x480fc857, - 0x4c040000, 0x4c080000, 0x4c0c0000, 0x05f1ff11, + 0x4c040000, 0x4c080000, 0x4c0c0000, 0x05f1fdcf, 0x5c001800, 0x5c001000, 0x5c000800, 0x05000003, - 0x80141d43, 0x05f1fed5, 0x1c01f000, 0x4807c857, + 0x80141d43, 0x05f1fd91, 0x1c01f000, 0x4807c857, 0x480bc857, 0x480fc857, 0x4c040000, 0x4c080000, - 0x4c0c0000, 0x05f1ff03, 0x5c001800, 0x5c001000, + 0x4c0c0000, 0x05f1fdc1, 0x5c001800, 0x5c001000, 0x5c000800, 0x05000004, 0x800c1880, 0x80141d03, - 0x05f1fec6, 0x1c01f000, 0x641f4407, 0x05edf6c8, - 0x64eb4407, 0x05edf6c6, 0x051dfcdf, 0x497b8880, + 0x05f1fd82, 0x1c01f000, 0x641f4407, 0x05edf57c, + 0x64eb4407, 0x05edf57a, 0x051dffa9, 0x497b8880, 0x59c400a3, 0x82000500, 0xfcf8ffff, 0x480388a3, - 0x05e9fecb, 0x05020003, 0x600dd000, 0x0515fc86, - 0x4d3c0000, 0x60067800, 0x0535faa5, 0x5c027800, - 0x05e9fec3, 0x0502000b, 0x59c408a3, 0x84040d72, - 0x480788a3, 0x6009d000, 0x0515fc7b, 0x05e9fec0, - 0x05de0a4e, 0x59c408a3, 0x84040d32, 0x480788a3, - 0x05e9feb3, 0x05020012, 0x42000000, 0x00200000, - 0x05e9fa27, 0x600dd000, 0x0515fc6f, 0x05e9feb4, - 0x0500000b, 0x59c408a3, 0x84040d72, 0x480788a3, - 0x6009d000, 0x0515fc68, 0x05e9fead, 0x05de0a3b, - 0x59c408a3, 0x84040d32, 0x480788a3, 0x1c01f000, - 0x59c400a4, 0x4c580000, 0x4c500000, 0x4c540000, - 0x9000050f, 0x90000487, 0x05001008, 0x90006c87, - 0x05de1a2e, 0x0c01f807, 0x5c00a800, 0x5c00a000, - 0x5c00b000, 0x1c01f000, 0x0501f8e9, 0x05fdf7fb, - 0x00104bbb, 0x00104bc1, 0x00104be5, 0x00104bff, - 0x00104ca1, 0x00104bba, 0x1c01f000, 0x59c40806, - 0x8c040500, 0x05020003, 0x84040d40, 0x48078806, - 0x1c01f000, 0x59c40005, 0x8c000534, 0x050206b2, - 0x4a038805, 0xffffffff, 0x42006000, 0x00020000, - 0x0501fe94, 0x59a80043, 0x82000500, 0xfffffffa, - 0x84000542, 0x48035043, 0x497b5249, 0x42000800, - 0x00110258, 0x45780800, 0x497b50b2, 0x42000000, - 0x0010e510, 0x46000000, 0x0000ffff, 0x42006000, - 0xffefffff, 0x42006800, 0x40000000, 0x0501fe7c, + 0x05e9fd5b, 0x05020003, 0x600dd000, 0x0515fefd, + 0x4d3c0000, 0x60067800, 0x0535fe58, 0x5c027800, + 0x05e9fd53, 0x05020009, 0x59c408a3, 0x84040d72, + 0x480788a3, 0x6009d000, 0x0515fef2, 0x59c408a3, + 0x84040d32, 0x480788a3, 0x05e9fd45, 0x05020010, + 0x42000000, 0x00200000, 0x05e9f8b5, 0x600dd000, + 0x0515fee8, 0x05e9fd46, 0x05000009, 0x59c408a3, + 0x84040d72, 0x480788a3, 0x6009d000, 0x0515fee1, + 0x59c408a3, 0x84040d32, 0x480788a3, 0x05e9fd30, + 0x05fc07f7, 0x1c01f000, 0x59a80006, 0x8c000510, + 0x1c01f000, 0x59c400a4, 0x4c580000, 0x4c500000, + 0x4c540000, 0x9000050f, 0x90000487, 0x05001008, + 0x90006c87, 0x05de1874, 0x0c01f807, 0x5c00a800, + 0x5c00a000, 0x5c00b000, 0x1c01f000, 0x0501f8e9, + 0x05fdf7fb, 0x00104db0, 0x00104db6, 0x00104dda, + 0x00104df4, 0x00104e96, 0x00104daf, 0x1c01f000, + 0x59c40806, 0x8c040500, 0x05020003, 0x84040d40, + 0x48078806, 0x1c01f000, 0x59c40005, 0x8c000534, + 0x050206b4, 0x4a038805, 0xffffffff, 0x42006000, + 0x00020000, 0x0501fe96, 0x59a80046, 0x82000500, + 0xfffffffa, 0x84000542, 0x48035046, 0x497b524c, + 0x42000800, 0x001141fc, 0x45780800, 0x497b50b7, + 0x42000000, 0x001124b4, 0x46000000, 0x0000ffff, + 0x42006000, 0xffefffff, 0x42006800, 0x40000000, + 0x0501fe7e, 0x59c40006, 0x82000500, 0xffffff0f, + 0x48038806, 0x60400800, 0x42001000, 0x001053a5, + 0x0515fce2, 0x0501f001, 0x42006000, 0xffffffff, + 0x42006800, 0x00800000, 0x0501fe70, 0x6120b001, + 0x59c400a4, 0x9000050f, 0x9000058a, 0x0500000d, + 0x8058b040, 0x05fe07fb, 0x497b5041, 0x42006000, + 0xbf7fffff, 0x42006800, 0x00018000, 0x0501fe63, + 0x42006000, 0xfffeffff, 0x41786800, 0x0501f65f, + 0x497b5041, 0x640350b6, 0x80000580, 0x0501f667, + 0x4a038805, 0xffffffff, 0x59a800b6, 0x90000c84, + 0x05de181d, 0x0c01f001, 0x00104dfd, 0x00104e23, + 0x00104e8f, 0x4803c856, 0x59c400a3, 0x8400051e, + 0x480388a3, 0x640750b6, 0x59c40008, 0x82000540, + 0x00000280, 0x48038808, 0x0501fe32, 0x42007800, + 0x00112005, 0x4a007806, 0x11010000, 0x4200a000, + 0x001124b7, 0x4200a800, 0x0011200c, 0x6008b000, + 0x0545fa12, 0x59c40802, 0x84040d0c, 0x48078802, + 0x600c0800, 0x497b50c1, 0x0501fd11, 0x640750c1, + 0x497b50bb, 0x0501fe47, 0x42006000, 0xffffffff, + 0x42006800, 0x00080000, 0x0501fe30, 0x42006000, + 0xfff7ffff, 0x41786800, 0x0501f62c, 0x59a800bb, + 0x497b50bb, 0x80002540, 0x0500005e, 0x59c40004, + 0x90000503, 0x05020065, 0x59a80846, 0x8c040502, + 0x05000049, 0x9010058c, 0x0502004c, 0x90100418, + 0x8000b104, 0x41cc1000, 0x42001800, 0x00112005, + 0x50080800, 0x500c0000, 0x80040580, 0x05020019, + 0x80081000, 0x800c1800, 0x8058b040, 0x05fe07f9, + 0x0501fe24, 0x59c80015, 0x84000508, 0x48039015, + 0x42006000, 0xffffffff, 0x42006800, 0x00500000, + 0x0501fe0a, 0x640b50b6, 0x640b5041, 0x05e5fd22, + 0x6140080f, 0x42001000, 0x00105303, 0x0515fe01, + 0x59a80046, 0x84000506, 0x48035046, 0x0501f5e9, + 0x59cc0806, 0x82040d80, 0x11010000, 0x05020027, + 0x59cc0800, 0x82040500, 0x00ffffff, 0x05000018, + 0x82000580, 0x000000ef, 0x05020015, 0x59cc0801, + 0x82040500, 0x00ffffff, 0x82000580, 0x000000ef, + 0x0502000f, 0x91cca407, 0x4200a800, 0x001124b7, + 0x6008b000, 0x50500800, 0x50540000, 0x80040480, + 0x05001007, 0x05020011, 0x8050a000, 0x8054a800, + 0x8058b040, 0x05fe07f8, 0x0501f00c, 0x59a80046, + 0x84000502, 0x48035046, 0x59c80015, 0x84000508, + 0x48039015, 0x41cca000, 0x4200a800, 0x00112005, + 0x6024b000, 0x0545f9a9, 0x0501fde6, 0x42006000, + 0xffffffff, 0x42006800, 0x00080000, 0x0501fdcf, + 0x42006000, 0xfff7ffff, 0x41786800, 0x0501fdcb, + 0x42006000, 0xffffffff, 0x60006880, 0x0501fdc7, + 0x59c40004, 0x90000503, 0x05020004, 0x497b50bb, + 0x600c0800, 0x0501f49a, 0x1c01f000, 0x1c01f000, + 0x59a80041, 0x90006d8f, 0x05000003, 0x9000059b, + 0x05020c65, 0x1c01f000, 0x59a80046, 0x84000506, + 0x48035046, 0x497b50c1, 0x59a80041, 0x90000c9e, + 0x05da1f79, 0x0c01f001, 0x00104ecd, 0x00104edd, + 0x00104eff, 0x00104f1a, 0x00104f38, 0x00104f3b, + 0x00104f3e, 0x00104f41, 0x00104f44, 0x00104f58, + 0x00104f5b, 0x00104faf, 0x00104fb2, 0x00104fbf, + 0x00104fc2, 0x00104fd4, 0x00104fd9, 0x00105029, + 0x00105050, 0x001050c8, 0x001050ef, 0x0010513e, + 0x00105184, 0x001051d3, 0x001051f1, 0x00105233, + 0x00105251, 0x00105261, 0x00105262, 0x4803c856, + 0x601ed800, 0x0509fcdb, 0x05000006, 0x42006000, + 0xffffffd7, 0x41786800, 0x0501fd8c, 0x0501f009, 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806, - 0x60400800, 0x42001000, 0x001051ae, 0x0515fabd, - 0x0501f001, 0x42006000, 0xffffffff, 0x42006800, - 0x00800000, 0x0501fe6e, 0x6120b001, 0x59c400a4, - 0x9000050f, 0x9000058a, 0x0500000d, 0x8058b040, - 0x05fe07fb, 0x497b503e, 0x42006000, 0xbf7fffff, - 0x42006800, 0x00018000, 0x0501fe61, 0x42006000, - 0xfffeffff, 0x41786800, 0x0501f65d, 0x497b503e, - 0x640350b1, 0x80000580, 0x0501f665, 0x4a038805, - 0xffffffff, 0x59a800b1, 0x90000c84, 0x05de19d7, - 0x0c01f001, 0x00104c08, 0x00104c2e, 0x00104c9a, - 0x4803c856, 0x59c400a3, 0x8400051e, 0x480388a3, - 0x640750b1, 0x59c40008, 0x82000540, 0x00000280, - 0x48038808, 0x0501fe30, 0x42007800, 0x0010e06b, - 0x4a007806, 0x11010000, 0x4200a000, 0x0010e513, - 0x4200a800, 0x0010e072, 0x6008b000, 0x0541fc8c, - 0x59c40802, 0x84040d0c, 0x48078802, 0x600c0800, - 0x497b50bc, 0x0501fd0f, 0x640750bc, 0x497b50b6, - 0x0501fe45, 0x42006000, 0xffffffff, 0x42006800, - 0x00080000, 0x0501fe2e, 0x42006000, 0xfff7ffff, - 0x41786800, 0x0501f62a, 0x59a800b6, 0x497b50b6, - 0x80002540, 0x0500005e, 0x59c40004, 0x90000503, - 0x05020065, 0x59a80843, 0x8c040502, 0x05000049, - 0x9010058c, 0x0502004c, 0x90100418, 0x8000b104, - 0x41cc1000, 0x42001800, 0x0010e06b, 0x50080800, - 0x500c0000, 0x80040580, 0x05020019, 0x80081000, - 0x800c1800, 0x8058b040, 0x05fe07f9, 0x0501fe22, - 0x59c80015, 0x84000508, 0x48039015, 0x42006000, - 0xffffffff, 0x42006800, 0x00500000, 0x0501fe08, - 0x640b50b1, 0x640b503e, 0x05e5fe97, 0x6140080f, - 0x42001000, 0x0010510c, 0x0515fb92, 0x59a80043, - 0x84000506, 0x48035043, 0x0501f5e7, 0x59cc0806, - 0x82040d80, 0x11010000, 0x05020027, 0x59cc0800, - 0x82040500, 0x00ffffff, 0x05000018, 0x82000580, - 0x000000ef, 0x05020015, 0x59cc0801, 0x82040500, - 0x00ffffff, 0x82000580, 0x000000ef, 0x0502000f, - 0x91cca407, 0x4200a800, 0x0010e513, 0x6008b000, - 0x50500800, 0x50540000, 0x80040480, 0x05001007, - 0x05020011, 0x8050a000, 0x8054a800, 0x8058b040, - 0x05fe07f8, 0x0501f00c, 0x59a80043, 0x84000502, - 0x48035043, 0x59c80015, 0x84000508, 0x48039015, - 0x41cca000, 0x4200a800, 0x0010e06b, 0x6024b000, - 0x0541fc23, 0x0501fde4, 0x42006000, 0xffffffff, - 0x42006800, 0x00080000, 0x0501fdcd, 0x42006000, - 0xfff7ffff, 0x41786800, 0x0501fdc9, 0x42006000, - 0xffffffff, 0x60006880, 0x0501fdc5, 0x59c40004, - 0x90000503, 0x05020004, 0x497b50b6, 0x600c0800, - 0x0501f498, 0x1c01f000, 0x1c01f000, 0x59a8003e, - 0x90006d8f, 0x05000003, 0x9000059b, 0x05020c63, - 0x1c01f000, 0x59a80043, 0x84000506, 0x48035043, - 0x497b50bc, 0x59a8003e, 0x90000c9e, 0x05de1933, - 0x0c01f001, 0x00104cd8, 0x00104ce8, 0x00104d0a, - 0x00104d24, 0x00104d42, 0x00104d45, 0x00104d48, - 0x00104d4b, 0x00104d4e, 0x00104d62, 0x00104d65, - 0x00104db9, 0x00104dbc, 0x00104dc9, 0x00104dcc, - 0x00104dde, 0x00104de3, 0x00104e32, 0x00104e59, - 0x00104ed1, 0x00104ef8, 0x00104f47, 0x00104f8d, - 0x00104fdc, 0x00104ffa, 0x0010503c, 0x0010505a, - 0x0010506a, 0x0010506b, 0x4803c856, 0x601ed800, - 0x0509fbe6, 0x05000006, 0x42006000, 0xffffffd7, - 0x41786800, 0x0501fd8a, 0x0501f009, 0x59c40006, - 0x82000500, 0xffffff0f, 0x48038806, 0x4a038805, - 0x000000f0, 0x0509ff22, 0x0509fb52, 0x1c01f000, - 0x4803c856, 0x42006000, 0xbf7fffff, 0x42006800, - 0x00400000, 0x0501fd7a, 0x05e5fe0b, 0x6407503e, - 0x42001000, 0x001051ae, 0x0515f9e3, 0x0501fcd4, - 0x6140080f, 0x42001000, 0x0010510c, 0x0515f301, - 0x59a800b6, 0x90000594, 0x0502001e, 0x4803c857, - 0x42006000, 0xffbfffff, 0x41786800, 0x0501fd68, - 0x59c40004, 0x90000503, 0x05020016, 0x42001000, - 0x0010510c, 0x0515f9c0, 0x59cc1006, 0x82081580, - 0x11020000, 0x05020010, 0x59cc1007, 0x8c08053e, - 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007, - 0x42000000, 0x0010e39d, 0x0541fada, 0x59a80043, - 0x84000544, 0x48035043, 0x6443503e, 0x0501f0dc, - 0x1c01f000, 0x0501f3f9, 0x4803c856, 0x640f503e, - 0x42006000, 0xbf3fffff, 0x42006800, 0x00100000, - 0x0501fd47, 0x42001000, 0x001051ae, 0x0515f9b2, - 0x0501fca3, 0x42001000, 0x0010510c, 0x0515f99e, - 0x59a80449, 0x90000528, 0x05000004, 0x42000800, - 0xffffd815, 0x05edf9ad, 0x42007800, 0x0010e071, - 0x46007800, 0x11020000, 0x60140800, 0x0501f40d, - 0x59a800b6, 0x80000540, 0x0500001a, 0x4803c857, - 0x42001000, 0x0010510c, 0x0515f98b, 0x59a800b6, - 0x90000594, 0x05020014, 0x59cc1006, 0x82081580, - 0x11020000, 0x05020010, 0x59cc1007, 0x8c08053e, - 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007, - 0x42000000, 0x0010e39d, 0x0541faa2, 0x59a80043, - 0x84000544, 0x48035043, 0x6413503e, 0x0501f003, - 0x1c01f000, 0x0501f3c1, 0x4803c856, 0x6417503e, - 0x0501f117, 0x4c5c0000, 0x6004b800, 0x0501f0ed, - 0x4803c856, 0x641f503e, 0x0501f1b0, 0x4c5c0000, - 0x6004b800, 0x0501f186, 0x4803c856, 0x6427503e, - 0x91cca406, 0x4200a800, 0x0010e071, 0x6014b000, - 0x0541fb53, 0x42007800, 0x0010e071, 0x46007800, - 0x11050100, 0x8d0c0506, 0x05000243, 0x60140800, - 0x0501fbd4, 0x4d3c0000, 0x60067800, 0x0535f8c8, - 0x5c027800, 0x1c01f000, 0x4c5c0000, 0x6004b800, - 0x0501f1e5, 0x4803c856, 0x642f503e, 0x42001000, - 0x0010e072, 0x4008a800, 0x6080b000, 0x4600a800, - 0xffffffff, 0x8054a800, 0x8058b040, 0x05fe07fc, - 0x42007800, 0x0010e071, 0x46007800, 0x11060000, - 0x8d0c0506, 0x05000005, 0x50080000, 0x46001000, - 0x00ffffff, 0x0501f03e, 0x42024800, 0x0010e512, - 0x0541fb7c, 0x40083000, 0x41782800, 0x41781800, - 0x41782000, 0x59240200, 0x8c000500, 0x05000012, - 0x8c000502, 0x05000010, 0x801429c0, 0x05020002, - 0x800c1800, 0x80142800, 0x59244408, 0x82204500, - 0x000000ff, 0x400c0000, 0x50182000, 0x0c01f810, - 0x80102540, 0x44103000, 0x800c19c0, 0x05020002, - 0x80183000, 0x91264c0d, 0x8058b040, 0x05fe07ea, - 0x50080000, 0x82000500, 0x00ffffff, 0x801428f0, - 0x80140540, 0x44001000, 0x0501f019, 0x00104da3, - 0x00104da8, 0x00104dad, 0x00104db2, 0x802000f0, - 0x82102500, 0x00ffffff, 0x800c1800, 0x1c01f000, - 0x802000e0, 0x82102500, 0xff00ffff, 0x800c1800, - 0x1c01f000, 0x802000d0, 0x82102500, 0xffff00ff, - 0x800c1800, 0x1c01f000, 0x40200000, 0x82102500, - 0xffffff00, 0x41781800, 0x1c01f000, 0x60840800, - 0x0501f378, 0x4c5c0000, 0x6004b800, 0x0501f223, - 0x4803c856, 0x6437503e, 0x91cca406, 0x4200a800, - 0x0010e071, 0x6084b000, 0x0541fae5, 0x42007800, - 0x0010e071, 0x46007800, 0x11070000, 0x60840800, - 0x0501f368, 0x4c5c0000, 0x6004b800, 0x0501f273, - 0x4803c856, 0x90040d41, 0x0501fc95, 0x643f503e, - 0x497b50b6, 0x42006000, 0xffffffff, 0x42006800, - 0x00300000, 0x0501fc82, 0x42006000, 0xffdfffff, - 0x41786800, 0x0501fc7e, 0x6140080f, 0x42001000, - 0x0010510c, 0x0515f0ac, 0x4803c856, 0x59a800b6, - 0x80000540, 0x05020321, 0x1c01f000, 0x4803c856, - 0x6447503e, 0x91cca406, 0x4200a800, 0x0010e071, - 0x6014b000, 0x0541fabe, 0x4200a800, 0x0010e071, - 0x4600a800, 0x11020000, 0x8d0c0506, 0x05020041, - 0x59a80c49, 0x82040580, 0x0000ffff, 0x0500003d, - 0x90040d30, 0x05000005, 0x42000800, 0xffffd815, - 0x05edf8d2, 0x0501f037, 0x59cc0007, 0x8c00053c, - 0x05000034, 0x42024800, 0x0010e512, 0x0541faf9, - 0x59240200, 0xb0000d23, 0xb0040da3, 0x05020021, - 0x59240a08, 0x42001000, 0x0010e072, 0x0501fab6, - 0x05000009, 0x59240c08, 0x05e5fcf7, 0x59240200, - 0x84000502, 0x84000518, 0x84000544, 0x48024a00, - 0x0501f014, 0x59240200, 0x82000540, 0x00001006, - 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00, - 0x00102853, 0x50142800, 0x82142d00, 0x000000ff, - 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00, - 0x80140d40, 0x48064805, 0x40140800, 0x05e5fccf, - 0x91264c0d, 0x8058b040, 0x05fe07da, 0x42024800, - 0x0010e512, 0x59242a00, 0x8c140502, 0x05000005, - 0x8c140500, 0x05000003, 0x59242c08, 0x4817503d, - 0x60140800, 0x0501f2ff, 0x4c5c0000, 0x4178b800, - 0x59a800b6, 0x80000540, 0x05000021, 0x4803c857, - 0x42001000, 0x0010510c, 0x0515f87b, 0x59a800b6, - 0x90000594, 0x05020019, 0x59cc1006, 0x82081580, - 0x11030000, 0x05020015, 0x59cc1007, 0x8c08053e, - 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007, - 0x42000000, 0x0010e39d, 0x0541f992, 0x59a80043, - 0x84000544, 0x48035043, 0x805cb9c0, 0x05000004, - 0x641b503e, 0x05fdfef7, 0x0501f005, 0x644b503e, - 0x0501f805, 0x0501f002, 0x0501faac, 0x5c00b800, - 0x1c01f000, 0x4803c856, 0x644f503e, 0x91cca407, - 0x4200a800, 0x0010e072, 0x6010b000, 0x0541fa48, - 0x4200a800, 0x0010e071, 0x4600a800, 0x11030000, - 0x8d0c0506, 0x0502006a, 0x42024800, 0x0010e512, - 0x0541fa90, 0x4c600000, 0x4178c000, 0x59a80249, - 0x82000500, 0xfffffffc, 0x48035249, 0x59240200, - 0x40000800, 0x82040d00, 0xfffffb17, 0x48064a00, - 0x8c000500, 0x05000048, 0x8c000518, 0x05020046, - 0x8c000502, 0x05020004, 0x59240400, 0x8c000502, - 0x05000041, 0x59240a08, 0x42001000, 0x0010e072, - 0x0501fa3d, 0x0500002b, 0x59240005, 0x82000500, - 0x00ffff00, 0x48024805, 0x59240200, 0x8c000502, - 0x05000019, 0x59240207, 0x82000500, 0x0000ffff, - 0x05000015, 0x8060c000, 0x59240c08, 0x05e5fc72, - 0x4c640000, 0x4c580000, 0x4d2c0000, 0x5924c809, - 0x6040b000, 0x50640000, 0x800001c0, 0x05000004, - 0x4578c800, 0x40025800, 0x05ddfaf8, 0x8064c800, - 0x8058b040, 0x05fe07f8, 0x5c025800, 0x5c00b000, - 0x5c00c800, 0x59240200, 0x84000502, 0x84000544, - 0x48024a00, 0x59240400, 0x8c000504, 0x05000016, - 0x59240200, 0x84000546, 0x48024a00, 0x0501f012, - 0x59240200, 0x90000546, 0x84000506, 0x48024a00, - 0x82042c00, 0x00102853, 0x50142800, 0x82142d00, - 0x000000ff, 0x48164c08, 0x59240005, 0x82000500, - 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800, - 0x05e5fc36, 0x59240200, 0x84000518, 0x48024a00, - 0x91264c0d, 0x8058b040, 0x05fe07ad, 0x8060c1c0, - 0x05020b0b, 0x5c00c000, 0x42024800, 0x0010e512, - 0x59242a00, 0x8c140502, 0x05000005, 0x8c140500, - 0x05000003, 0x59242c08, 0x4817503d, 0x60140800, - 0x0501f260, 0x4c5c0000, 0x4178b800, 0x59a800b6, + 0x4a038805, 0x000000f0, 0x050df81d, 0x0509fc41, + 0x1c01f000, 0x4803c856, 0x42006000, 0xbf7fffff, + 0x42006800, 0x00400000, 0x0501fd7c, 0x05e5fc96, + 0x64075041, 0x42001000, 0x001053a5, 0x0515fc08, + 0x0501fcd6, 0x6140080f, 0x42001000, 0x00105303, + 0x0515f570, 0x59a800bb, 0x90000594, 0x0502001e, + 0x4803c857, 0x42006000, 0xffbfffff, 0x41786800, + 0x0501fd6a, 0x59c40004, 0x90000503, 0x05020016, + 0x42001000, 0x00105303, 0x0515fbe5, 0x59cc1006, + 0x82081580, 0x11020000, 0x05020010, 0x59cc1007, + 0x8c08053e, 0x0500000a, 0x59a80046, 0x8c000504, + 0x05020007, 0x42000000, 0x0011233e, 0x0545f860, + 0x59a80046, 0x84000544, 0x48035046, 0x64435041, + 0x0501f0dd, 0x1c01f000, 0x0501f3fb, 0x4803c856, + 0x640f5041, 0x42006000, 0xbf3fffff, 0x42006800, + 0x00100000, 0x0501fd49, 0x42001000, 0x001053a5, + 0x0515fbd7, 0x0501fca5, 0x42001000, 0x00105303, + 0x0515fbc3, 0x59a8044c, 0x90000528, 0x05000004, + 0x42000800, 0xffffd815, 0x05edf85f, 0x05e9fbc0, + 0x42007800, 0x0011200b, 0x46007800, 0x11020000, + 0x60140800, 0x0501f40e, 0x59a800bb, 0x80000540, + 0x0500001a, 0x4803c857, 0x42001000, 0x00105303, + 0x0515fbaf, 0x59a800bb, 0x90000594, 0x05020014, + 0x59cc1006, 0x82081580, 0x11020000, 0x05020010, + 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80046, + 0x8c000504, 0x05020007, 0x42000000, 0x0011233e, + 0x0545f827, 0x59a80046, 0x84000544, 0x48035046, + 0x64135041, 0x0501f003, 0x1c01f000, 0x0501f3c2, + 0x4803c856, 0x64175041, 0x0501f118, 0x4c5c0000, + 0x6004b800, 0x0501f0ee, 0x4803c856, 0x641f5041, + 0x0501f1b1, 0x4c5c0000, 0x6004b800, 0x0501f187, + 0x4803c856, 0x64275041, 0x91cca406, 0x4200a800, + 0x0011200b, 0x6014b000, 0x0545f8d8, 0x42007800, + 0x0011200b, 0x46007800, 0x11050100, 0x8d0c0506, + 0x05000244, 0x60140800, 0x0501fbd5, 0x4d3c0000, + 0x60067800, 0x0535fc79, 0x5c027800, 0x1c01f000, + 0x4c5c0000, 0x6004b800, 0x0501f1e6, 0x4803c856, + 0x642f5041, 0x42001000, 0x0011200c, 0x4008a800, + 0x6080b000, 0x4600a800, 0xffffffff, 0x8054a800, + 0x8058b040, 0x05fe07fc, 0x42007800, 0x0011200b, + 0x46007800, 0x11060000, 0x8d0c0506, 0x05000005, + 0x50080000, 0x46001000, 0x00ffffff, 0x0501f03e, + 0x42024800, 0x001124b6, 0x0545f901, 0x40083000, + 0x41782800, 0x41781800, 0x41782000, 0x59240200, + 0x8c000500, 0x05000012, 0x8c000502, 0x05000010, + 0x801429c0, 0x05020002, 0x800c1800, 0x80142800, + 0x59244408, 0x82204500, 0x000000ff, 0x400c0000, + 0x50182000, 0x0c01f810, 0x80102540, 0x44103000, + 0x800c19c0, 0x05020002, 0x80183000, 0x91264c0d, + 0x8058b040, 0x05fe07ea, 0x50080000, 0x82000500, + 0x00ffffff, 0x801428f0, 0x80140540, 0x44001000, + 0x0501f019, 0x00104f99, 0x00104f9e, 0x00104fa3, + 0x00104fa8, 0x802000f0, 0x82102500, 0x00ffffff, + 0x800c1800, 0x1c01f000, 0x802000e0, 0x82102500, + 0xff00ffff, 0x800c1800, 0x1c01f000, 0x802000d0, + 0x82102500, 0xffff00ff, 0x800c1800, 0x1c01f000, + 0x40200000, 0x82102500, 0xffffff00, 0x41781800, + 0x1c01f000, 0x60840800, 0x0501f379, 0x4c5c0000, + 0x6004b800, 0x0501f224, 0x4803c856, 0x64375041, + 0x91cca406, 0x4200a800, 0x0011200b, 0x6084b000, + 0x0545f86a, 0x42007800, 0x0011200b, 0x46007800, + 0x11070000, 0x60840800, 0x0501f369, 0x4c5c0000, + 0x6004b800, 0x0501f274, 0x4803c856, 0x90040d41, + 0x0501fc96, 0x643f5041, 0x497b50bb, 0x42006000, + 0xffffffff, 0x42006800, 0x00300000, 0x0501fc83, + 0x42006000, 0xffdfffff, 0x41786800, 0x0501fc7f, + 0x6140080f, 0x42001000, 0x00105303, 0x0515f2d0, + 0x4803c856, 0x59a800bb, 0x80000540, 0x05020322, + 0x1c01f000, 0x4803c856, 0x64475041, 0x91cca406, + 0x4200a800, 0x0011200b, 0x6014b000, 0x0545f843, + 0x4200a800, 0x0011200b, 0x4600a800, 0x11020000, + 0x8d0c0506, 0x05020041, 0x59a80c4c, 0x82040580, + 0x0000ffff, 0x0500003d, 0x90040d30, 0x05000005, + 0x42000800, 0xffffd815, 0x05e9ff83, 0x0501f037, + 0x59cc0007, 0x8c00053c, 0x05000034, 0x42024800, + 0x001124b6, 0x0545f87e, 0x59240200, 0xb0000d23, + 0xb0040da3, 0x05020021, 0x59240a08, 0x42001000, + 0x0011200c, 0x0501fab7, 0x05000009, 0x59240c08, + 0x05e5fb81, 0x59240200, 0x84000502, 0x84000518, + 0x84000544, 0x48024a00, 0x0501f014, 0x59240200, + 0x82000540, 0x00001006, 0x84000506, 0x48024a00, + 0x48064a08, 0x82042c00, 0x001028fb, 0x50142800, + 0x82142d00, 0x000000ff, 0x48164c08, 0x59240005, + 0x82000500, 0x00ffff00, 0x80140d40, 0x48064805, + 0x40140800, 0x05e5fb59, 0x91264c0d, 0x8058b040, + 0x05fe07da, 0x42024800, 0x001124b6, 0x59242a00, + 0x8c140502, 0x05000005, 0x8c140500, 0x05000003, + 0x59242c08, 0x48175040, 0x05e9faad, 0x60140800, + 0x0501f2ff, 0x4c5c0000, 0x4178b800, 0x59a800bb, 0x80000540, 0x05000021, 0x4803c857, 0x42001000, - 0x0010510c, 0x0511ffdc, 0x59a800b6, 0x90000594, - 0x05020019, 0x59cc1006, 0x82081580, 0x11040000, + 0x00105303, 0x0515fa9e, 0x59a800bb, 0x90000594, + 0x05020019, 0x59cc1006, 0x82081580, 0x11030000, 0x05020015, 0x59cc1007, 0x8c08053e, 0x0500000a, - 0x59a80043, 0x8c000504, 0x05020007, 0x42000000, - 0x0010e39d, 0x0541f8f3, 0x59a80043, 0x84000544, - 0x48035043, 0x805cb9c0, 0x05000004, 0x6423503e, - 0x05fdfe5e, 0x0501f005, 0x6453503e, 0x0501f805, - 0x0501f002, 0x0501fa0d, 0x5c00b800, 0x1c01f000, - 0x4803c856, 0x6457503e, 0x91cca407, 0x4200a800, - 0x0010e072, 0x6010b000, 0x0541f9a9, 0x4200a800, - 0x0010e071, 0x4600a800, 0x11040000, 0x8d0c0506, - 0x05020041, 0x42024800, 0x0010e512, 0x0541f9f1, - 0x59240400, 0x8c000500, 0x0500002f, 0x59240200, - 0x8c000500, 0x0500002c, 0x8c000502, 0x0502002a, - 0x59240c00, 0x80040910, 0x82040d00, 0x000000ff, - 0x42001000, 0x0010e072, 0x0501f9a7, 0x05000010, + 0x59a80046, 0x8c000504, 0x05020007, 0x42000000, + 0x0011233e, 0x0541ff16, 0x59a80046, 0x84000544, + 0x48035046, 0x805cb9c0, 0x05000004, 0x641b5041, + 0x05fdfef6, 0x0501f005, 0x644b5041, 0x0501f805, + 0x0501f002, 0x0501faac, 0x5c00b800, 0x1c01f000, + 0x4803c856, 0x644f5041, 0x91cca407, 0x4200a800, + 0x0011200c, 0x6010b000, 0x0541ffcc, 0x4200a800, + 0x0011200b, 0x4600a800, 0x11030000, 0x8d0c0506, + 0x0502006a, 0x42024800, 0x001124b6, 0x0545f814, + 0x4c600000, 0x4178c000, 0x59a8024c, 0x82000500, + 0xfffffffc, 0x4803524c, 0x59240200, 0x40000800, + 0x82040d00, 0xfffffb17, 0x48064a00, 0x8c000500, + 0x05000048, 0x8c000518, 0x05020046, 0x8c000502, + 0x05020004, 0x59240400, 0x8c000502, 0x05000041, + 0x59240a08, 0x42001000, 0x0011200c, 0x0501fa3d, + 0x0500002b, 0x59240005, 0x82000500, 0x00ffff00, + 0x48024805, 0x59240200, 0x8c000502, 0x05000019, + 0x59240207, 0x82000500, 0x0000ffff, 0x05000015, + 0x8060c000, 0x59240c08, 0x05e5fafb, 0x4c640000, + 0x4c580000, 0x4d2c0000, 0x5924c809, 0x6040b000, + 0x50640000, 0x800001c0, 0x05000004, 0x4578c800, + 0x40025800, 0x05ddf938, 0x8064c800, 0x8058b040, + 0x05fe07f8, 0x5c025800, 0x5c00b000, 0x5c00c800, + 0x59240200, 0x84000502, 0x84000544, 0x48024a00, + 0x59240400, 0x8c000504, 0x05000016, 0x59240200, + 0x84000546, 0x48024a00, 0x0501f012, 0x59240200, + 0x90000546, 0x84000506, 0x48024a00, 0x82042c00, + 0x001028fb, 0x50142800, 0x82142d00, 0x000000ff, + 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00, + 0x80140d40, 0x48064805, 0x40140800, 0x05e5fabf, + 0x59240200, 0x84000518, 0x48024a00, 0x91264c0d, + 0x8058b040, 0x05fe07ad, 0x8060c1c0, 0x05020b0b, + 0x5c00c000, 0x42024800, 0x001124b6, 0x59242a00, + 0x8c140502, 0x05000005, 0x8c140500, 0x05000003, + 0x59242c08, 0x48175040, 0x60140800, 0x0501f260, + 0x4c5c0000, 0x4178b800, 0x59a800bb, 0x80000540, + 0x05000021, 0x4803c857, 0x42001000, 0x00105303, + 0x0515f9ff, 0x59a800bb, 0x90000594, 0x05020019, + 0x59cc1006, 0x82081580, 0x11040000, 0x05020015, + 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80046, + 0x8c000504, 0x05020007, 0x42000000, 0x0011233e, + 0x0541fe77, 0x59a80046, 0x84000544, 0x48035046, + 0x805cb9c0, 0x05000004, 0x64235041, 0x05fdfe5d, + 0x0501f005, 0x64535041, 0x0501f805, 0x0501f002, + 0x0501fa0d, 0x5c00b800, 0x1c01f000, 0x4803c856, + 0x64575041, 0x91cca407, 0x4200a800, 0x0011200c, + 0x6010b000, 0x0541ff2d, 0x4200a800, 0x0011200b, + 0x4600a800, 0x11040000, 0x8d0c0506, 0x05020041, + 0x42024800, 0x001124b6, 0x0541ff75, 0x59240400, + 0x8c000500, 0x0500002f, 0x59240200, 0x8c000500, + 0x0500002c, 0x8c000502, 0x0502002a, 0x59240c00, + 0x80040910, 0x82040d00, 0x000000ff, 0x42001000, + 0x0011200c, 0x0501f9a7, 0x05000010, 0x59240005, + 0x82000500, 0x00ffff00, 0x48024805, 0x59240200, + 0x84000502, 0x48024a00, 0x59242400, 0x8c100504, + 0x05000018, 0x84000546, 0x84000544, 0x48024a00, + 0x8060c000, 0x0501f013, 0x59240200, 0x90000546, + 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00, + 0x001028fb, 0x50142800, 0x82142d00, 0x000000ff, + 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00, + 0x80140d40, 0x48064805, 0x40140800, 0x05e5fa43, + 0x91264c0d, 0x8058b040, 0x05fe07cd, 0x42024800, + 0x001124b6, 0x59242a00, 0x8c140502, 0x05000005, + 0x8c140500, 0x05000003, 0x59242c08, 0x48175040, + 0x60140800, 0x0501f1ea, 0x4c5c0000, 0x4178b800, + 0x59a800bb, 0x80000540, 0x05000040, 0x4803c857, + 0x42001000, 0x00105303, 0x0515f989, 0x59a800bb, + 0x90000594, 0x05020038, 0x59cc1006, 0x82080500, + 0x11050000, 0x82000580, 0x11050000, 0x05020032, + 0x8c080510, 0x05000013, 0x0501fb08, 0x59cc1007, + 0x8c08053e, 0x0500000a, 0x59a80046, 0x8c000504, + 0x05020007, 0x42000000, 0x0011233e, 0x0541fdfc, + 0x59a80046, 0x84000544, 0x48035046, 0x805cb9c0, + 0x05000014, 0x642b5041, 0x05fdfdf9, 0x0501f01f, + 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80046, + 0x8c000504, 0x05020007, 0x42000000, 0x0011233e, + 0x0541fdeb, 0x59a80046, 0x84000544, 0x48035046, + 0x90000541, 0x0501fae9, 0x497b50b7, 0x0501f002, + 0x640750b7, 0x59cc1007, 0x8c08053c, 0x05000002, + 0x6423524c, 0x805cb9c0, 0x05020004, 0x645b5041, + 0x0501f808, 0x0501f005, 0x643b5041, 0x05fdfe43, + 0x0501f002, 0x0501f978, 0x5c00b800, 0x1c01f000, + 0x4803c856, 0x91cca406, 0x4200a800, 0x0011200b, + 0x6014b000, 0x0541fe99, 0x645f5041, 0x59a800b7, + 0x8c000500, 0x05000006, 0x42001000, 0x0011200b, + 0x46001000, 0x11050100, 0x0501f002, 0x646f5041, + 0x8d0c0506, 0x05020037, 0x42024800, 0x001124b6, + 0x0541fedb, 0x59240200, 0x8c000500, 0x05000025, + 0x8c000502, 0x05020023, 0x8c000506, 0x05020021, + 0x4c580000, 0x0501f8c2, 0x5c00b000, 0x0502000b, 0x59240005, 0x82000500, 0x00ffff00, 0x48024805, - 0x59240200, 0x84000502, 0x48024a00, 0x59242400, - 0x8c100504, 0x05000018, 0x84000546, 0x84000544, - 0x48024a00, 0x8060c000, 0x0501f013, 0x59240200, - 0x90000546, 0x84000506, 0x48024a00, 0x48064a08, - 0x82042c00, 0x00102853, 0x50142800, 0x82142d00, - 0x000000ff, 0x48164c08, 0x59240005, 0x82000500, - 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800, - 0x05e5fbba, 0x91264c0d, 0x8058b040, 0x05fe07cd, - 0x42024800, 0x0010e512, 0x59242a00, 0x8c140502, - 0x05000005, 0x8c140500, 0x05000003, 0x59242c08, - 0x4817503d, 0x60140800, 0x0501f1ea, 0x4c5c0000, - 0x4178b800, 0x59a800b6, 0x80000540, 0x05000040, - 0x4803c857, 0x42001000, 0x0010510c, 0x0511ff66, - 0x59a800b6, 0x90000594, 0x05020038, 0x59cc1006, - 0x82080500, 0x11050000, 0x82000580, 0x11050000, - 0x05020032, 0x8c080510, 0x05000013, 0x0501fb08, - 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80043, - 0x8c000504, 0x05020007, 0x42000000, 0x0010e39d, - 0x0541f878, 0x59a80043, 0x84000544, 0x48035043, - 0x805cb9c0, 0x05000014, 0x642b503e, 0x05fdfdfa, - 0x0501f01f, 0x59cc1007, 0x8c08053e, 0x0500000a, - 0x59a80043, 0x8c000504, 0x05020007, 0x42000000, - 0x0010e39d, 0x0541f867, 0x59a80043, 0x84000544, - 0x48035043, 0x90000541, 0x0501fae9, 0x497b50b2, - 0x0501f002, 0x640750b2, 0x59cc1007, 0x8c08053c, - 0x05000002, 0x64235249, 0x805cb9c0, 0x05020004, - 0x645b503e, 0x0501f808, 0x0501f005, 0x643b503e, - 0x05fdfe44, 0x0501f002, 0x0501f978, 0x5c00b800, - 0x1c01f000, 0x4803c856, 0x91cca406, 0x4200a800, - 0x0010e071, 0x6014b000, 0x0541f915, 0x645f503e, - 0x59a800b2, 0x8c000500, 0x05000006, 0x42001000, - 0x0010e071, 0x46001000, 0x11050100, 0x0501f002, - 0x646f503e, 0x8d0c0506, 0x05020037, 0x42024800, - 0x0010e512, 0x0541f957, 0x59240200, 0x8c000500, - 0x05000025, 0x8c000502, 0x05020023, 0x8c000506, - 0x05020021, 0x4c580000, 0x0501f8c2, 0x5c00b000, - 0x0502000b, 0x59240005, 0x82000500, 0x00ffff00, - 0x48024805, 0x59240200, 0x84000502, 0x84000546, - 0x84000544, 0x48024a00, 0x0501f013, 0x59240200, - 0x90000546, 0x84000506, 0x48024a00, 0x48064a08, - 0x82042c00, 0x00102853, 0x50142800, 0x82142d00, - 0x000000ff, 0x48164c08, 0x59240005, 0x82000500, - 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800, - 0x05e5fb2a, 0x91264c0d, 0x8058b040, 0x05fe07d7, - 0x42024800, 0x0010e512, 0x59242a00, 0x8c140502, - 0x05000005, 0x8c140500, 0x05000003, 0x59242c08, - 0x4817503d, 0x60140800, 0x0501f95a, 0x4d3c0000, - 0x60067800, 0x0531fe4e, 0x5c027800, 0x1c01f000, - 0x4c5c0000, 0x4178b800, 0x59a800b6, 0x80000540, - 0x05000018, 0x4803c857, 0x42001000, 0x0010510c, - 0x0511fed1, 0x59a800b6, 0x82000580, 0x00000084, - 0x0502000f, 0x59cc1006, 0x82081580, 0x11060000, - 0x0502000b, 0x80000580, 0x0501fa75, 0x805cb9c0, - 0x05000004, 0x6433503e, 0x05fdfdca, 0x0501f005, - 0x6463503e, 0x0501f805, 0x0501f002, 0x0501f90b, - 0x5c00b800, 0x1c01f000, 0x4803c856, 0x6467503e, - 0x91cca406, 0x4200a800, 0x0010e071, 0x6084b000, - 0x0541f8a7, 0x42003800, 0x0010e072, 0x42024800, - 0x0010e512, 0x4200b000, 0x0010e511, 0x5058b000, - 0x59240200, 0x8c000500, 0x05000019, 0x8c000502, - 0x05000017, 0x401c2800, 0x50141000, 0x80080130, - 0x80000000, 0x40001800, 0x82081500, 0x00ffffff, - 0x800000f0, 0x80080540, 0x44002800, 0x59244408, - 0x82204500, 0x000000ff, 0x400c1000, 0x80081104, - 0x82083400, 0x0010e072, 0x50181000, 0x900c0503, - 0x0c01f808, 0x80081540, 0x44083000, 0x91264c0d, - 0x8058b040, 0x05fe07e3, 0x60840800, 0x0501f109, - 0x0010502c, 0x00105030, 0x00105034, 0x00105038, - 0x802000f0, 0x82081500, 0x00ffffff, 0x1c01f000, - 0x802000e0, 0x82081500, 0xff00ffff, 0x1c01f000, - 0x802000d0, 0x82081500, 0xffff00ff, 0x1c01f000, - 0x40200000, 0x82081500, 0xffffff00, 0x1c01f000, - 0x4c5c0000, 0x4178b800, 0x59a800b6, 0x80000540, - 0x05000018, 0x4803c857, 0x42001000, 0x0010510c, - 0x0511fe71, 0x59a800b6, 0x82000580, 0x00000084, - 0x0502000f, 0x59cc1006, 0x82081580, 0x11070000, - 0x0502000b, 0x640750b2, 0x0501f897, 0x805cb9c0, - 0x05000004, 0x643b503e, 0x05fdfd7a, 0x0501f005, - 0x646b503e, 0x0501f805, 0x0501f002, 0x0501f8ab, - 0x5c00b800, 0x1c01f000, 0x90000541, 0x0501fa08, - 0x646f503e, 0x91cca406, 0x4200a800, 0x0010e071, - 0x59a820b6, 0x40100000, 0x8000b104, 0x40580800, - 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040, - 0x05fe07fc, 0x0501f0c7, 0x1c01f000, 0x1c01f000, - 0x4803c856, 0x60103000, 0x42004000, 0x0010e072, - 0x599c2817, 0x8c140514, 0x0502001c, 0x600c1000, - 0x40200000, 0x80080400, 0x50000800, 0x82042580, - 0xffffffff, 0x05020005, 0x80081040, 0x80183040, - 0x05fe07f8, 0x0501f03f, 0x800811c0, 0x05020006, - 0x82042580, 0x3fffffff, 0x05000039, 0x82040d40, - 0xc0000000, 0x6080b000, 0x60041800, 0x40042000, - 0x80102102, 0x0502101f, 0x800c18c2, 0x8058b040, - 0x05fe07fc, 0x0501f02e, 0x41781000, 0x40200000, + 0x59240200, 0x84000502, 0x84000546, 0x84000544, + 0x48024a00, 0x0501f013, 0x59240200, 0x90000546, + 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00, + 0x001028fb, 0x50142800, 0x82142d00, 0x000000ff, + 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00, + 0x80140d40, 0x48064805, 0x40140800, 0x05e5f9b3, + 0x91264c0d, 0x8058b040, 0x05fe07d7, 0x42024800, + 0x001124b6, 0x59242a00, 0x8c140502, 0x05000005, + 0x8c140500, 0x05000003, 0x59242c08, 0x48175040, + 0x60140800, 0x0501f95a, 0x4d3c0000, 0x60067800, + 0x0535f9fe, 0x5c027800, 0x1c01f000, 0x4c5c0000, + 0x4178b800, 0x59a800bb, 0x80000540, 0x05000018, + 0x4803c857, 0x42001000, 0x00105303, 0x0515f8f4, + 0x59a800bb, 0x82000580, 0x00000084, 0x0502000f, + 0x59cc1006, 0x82081580, 0x11060000, 0x0502000b, + 0x80000580, 0x0501fa75, 0x805cb9c0, 0x05000004, + 0x64335041, 0x05fdfdc9, 0x0501f005, 0x64635041, + 0x0501f805, 0x0501f002, 0x0501f90b, 0x5c00b800, + 0x1c01f000, 0x4803c856, 0x64675041, 0x91cca406, + 0x4200a800, 0x0011200b, 0x6084b000, 0x0541fe2b, + 0x42003800, 0x0011200c, 0x42024800, 0x001124b6, + 0x4200b000, 0x001124b5, 0x5058b000, 0x59240200, + 0x8c000500, 0x05000019, 0x8c000502, 0x05000017, + 0x401c2800, 0x50141000, 0x80080130, 0x80000000, + 0x40001800, 0x82081500, 0x00ffffff, 0x800000f0, + 0x80080540, 0x44002800, 0x59244408, 0x82204500, + 0x000000ff, 0x400c1000, 0x80081104, 0x82083400, + 0x0011200c, 0x50181000, 0x900c0503, 0x0c01f808, + 0x80081540, 0x44083000, 0x91264c0d, 0x8058b040, + 0x05fe07e3, 0x60840800, 0x0501f109, 0x00105223, + 0x00105227, 0x0010522b, 0x0010522f, 0x802000f0, + 0x82081500, 0x00ffffff, 0x1c01f000, 0x802000e0, + 0x82081500, 0xff00ffff, 0x1c01f000, 0x802000d0, + 0x82081500, 0xffff00ff, 0x1c01f000, 0x40200000, + 0x82081500, 0xffffff00, 0x1c01f000, 0x4c5c0000, + 0x4178b800, 0x59a800bb, 0x80000540, 0x05000018, + 0x4803c857, 0x42001000, 0x00105303, 0x0515f894, + 0x59a800bb, 0x82000580, 0x00000084, 0x0502000f, + 0x59cc1006, 0x82081580, 0x11070000, 0x0502000b, + 0x640750b7, 0x0501f897, 0x805cb9c0, 0x05000004, + 0x643b5041, 0x05fdfd79, 0x0501f005, 0x646b5041, + 0x0501f805, 0x0501f002, 0x0501f8ab, 0x5c00b800, + 0x1c01f000, 0x90000541, 0x0501fa08, 0x646f5041, + 0x91cca406, 0x4200a800, 0x0011200b, 0x59a820bb, + 0x40100000, 0x8000b104, 0x40580800, 0x5450a800, + 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07fc, + 0x0501f0c7, 0x1c01f000, 0x1c01f000, 0x4803c856, + 0x60103000, 0x42004000, 0x0011200c, 0x599c2817, + 0x8c140514, 0x0502001c, 0x600c1000, 0x40200000, 0x80080400, 0x50000800, 0x82042580, 0xffffffff, - 0x05020005, 0x80081000, 0x80183040, 0x05fe07f8, - 0x0501f023, 0x800811c0, 0x05020003, 0x82040d40, - 0xc0000000, 0x6004b000, 0x42001800, 0x80000000, - 0x40042000, 0x801020c2, 0x05021006, 0x800c1902, - 0x8058b000, 0x905804a1, 0x05fc17fb, 0x0501f014, - 0x40200000, 0x80082400, 0x50100000, 0x800c0540, - 0x44002000, 0x59a80043, 0x84000540, 0x48035043, - 0x40580000, 0x60802800, 0x80142c80, 0x40080000, - 0x600c3800, 0x801c0480, 0x800000ca, 0x80142d40, - 0x40140800, 0x90000541, 0x0501f002, 0x80000580, - 0x1c01f000, 0x4807c857, 0x480bc857, 0x40041800, - 0x41782000, 0x600c0000, 0x900c1ca0, 0x05001004, - 0x80102000, 0x80000040, 0x05fdf7fc, 0x40041800, - 0x801021c0, 0x05000004, 0x900c1ca0, 0x80102040, - 0x05fe07fe, 0x60042000, 0x800c19c0, 0x05000004, - 0x801020c2, 0x800c1840, 0x05fe07fe, 0x80083c00, - 0x401c2800, 0x50140000, 0x80102d00, 0x05020007, - 0x80100540, 0x44003800, 0x59a80043, 0x84000540, - 0x48035043, 0x80000580, 0x1c01f000, 0x4807c856, - 0x605c1100, 0x59a81864, 0x053dff04, 0x05f9fef9, - 0x1c01f000, 0x4807c856, 0x6080b000, 0x91cca407, - 0x4200a800, 0x00110258, 0x053df7f8, 0x4807c856, - 0x0519ff69, 0x61dc0801, 0x0501f8d4, 0x497b2804, - 0x497b2805, 0x497b2826, 0x497b2827, 0x6006d800, - 0x42006000, 0xbe7fffff, 0x42006800, 0x00018000, - 0x0501f95f, 0x42006000, 0xfffeffff, 0x41786800, - 0x0501f95b, 0x497b5064, 0x60b40800, 0x42001000, - 0x00105184, 0x0511f588, 0x4807c856, 0x05fdffe8, - 0x497b503e, 0x497b50b6, 0x1c01f000, 0x4807c856, - 0x42006000, 0xffffffff, 0x60a06800, 0x0501f14c, - 0x4807c856, 0x05fdffd2, 0x0519fc05, 0x4df00000, - 0x0519fe92, 0x5c03e000, 0x05180bf2, 0x59c400a4, - 0x9000050f, 0x90000582, 0x0502000a, 0x42006000, - 0xffffffff, 0x42006800, 0x00200000, 0x0501f93c, - 0x42006000, 0xffdfffff, 0x41786800, 0x0501f938, - 0x497b503e, 0x61dc0801, 0x0501f8a0, 0x59c400a3, - 0x82000500, 0xbf20bfff, 0x82000540, 0x0001c000, - 0x480388a3, 0x84000520, 0x480388a3, 0x497b5064, - 0x60b40800, 0x42001000, 0x00105184, 0x0511f55a, - 0x497b50b6, 0x59b400f5, 0x8c000500, 0x05020003, - 0x90000541, 0x480368f5, 0x800400c4, 0x82000400, - 0x00002000, 0x4803910a, 0x59b400f6, 0x90000518, - 0x05fe07fe, 0x4a0368f0, 0x0010e06a, 0x42000000, - 0x0010e071, 0x4c040000, 0x40043800, 0x50000800, - 0x82040d80, 0x11010000, 0x0500000c, 0x50000800, - 0x4807c857, 0x8d0c052a, 0x05000008, 0x4c000000, - 0x821c3d40, 0x0000dc00, 0x42000000, 0x0010e06b, - 0x05d9fda3, 0x5c000000, 0x5c000800, 0x480368f1, - 0x82040400, 0x0000dc00, 0x480368f3, 0x59c408a4, - 0x90040d0f, 0x90040588, 0x05020013, 0x4c5c0000, - 0x4c600000, 0x59c4b805, 0x8c5c053a, 0x05020004, - 0x42000000, 0x0010e39a, 0x053dfe7a, 0x4a038805, - 0x20000000, 0x05e5fd27, 0x4000c000, 0x05e5fc6e, - 0x6006d800, 0x497b503e, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x9004058c, 0x05000015, 0x59c8010b, - 0x8c000502, 0x05fc07e6, 0x90040d8b, 0x05020005, - 0x59a8083e, 0x82040d40, 0x00002000, 0x0501f004, - 0x59a808b1, 0x82040d40, 0x00001000, 0x48075064, - 0x59a808bc, 0x800409c0, 0x05020005, 0x6140080f, - 0x42001000, 0x0010510c, 0x0511fe66, 0x1c01f000, - 0x4807c856, 0x05fdff5a, 0x0519fb8d, 0x4df00000, - 0x0519fe1a, 0x5c03e000, 0x05180b7a, 0x59c400a4, - 0x9000050f, 0x90000582, 0x0502000a, 0x42006000, - 0xffffffff, 0x42006800, 0x00200000, 0x0501f8c4, - 0x42006000, 0xffdfffff, 0x41786800, 0x0501f8c0, - 0x0505ff1c, 0x05000010, 0x0505ff26, 0x0502000e, - 0x4a035041, 0x0000aaaa, 0x4c040000, 0x05e5f98f, - 0x59a8004d, 0x82000500, 0xffff0000, 0x80040540, - 0x4803504d, 0x5c000800, 0x64035042, 0x0505fe8a, - 0x0501f005, 0x641750b4, 0x60000001, 0x05e5f8d9, - 0x05fdff3f, 0x1c01f000, 0x0501f809, 0x42006000, - 0xbf7f7fff, 0x41786800, 0x0501f0a5, 0x42006000, - 0xbf7f7fff, 0x41786800, 0x0501f0a1, 0x0505ff09, - 0x05020009, 0x59c40006, 0x82000540, 0x000000f0, - 0x48038806, 0x42006000, 0xbfffffff, 0x41786800, - 0x0501f897, 0x1c01f000, 0x800408d0, 0x59a80043, - 0x8c000506, 0x05000006, 0x59a8003d, 0x82000500, - 0x000000ff, 0x80040540, 0x0501f003, 0x82040540, - 0x000000f7, 0x480388a7, 0x1c01f000, 0x4807c856, - 0x42000000, 0x0010e432, 0x053dfe0a, 0x60143000, - 0x4d3c0000, 0x4c180000, 0x60343000, 0x600a7800, - 0x0501f04f, 0x4807c856, 0x42000000, 0x0010e45c, - 0x053dfe00, 0x60003000, 0x4d3c0000, 0x4c180000, - 0x603c3000, 0x61fc19ff, 0x601c2000, 0x05f9fe65, - 0x5c003000, 0x59240200, 0x84000556, 0x48024a00, - 0x4d400000, 0x60aa8000, 0x59240400, 0x8c00050a, - 0x05380dbd, 0x600a7800, 0x05e9fc77, 0x5c028000, - 0x5c027800, 0x0005f7dc, 0x4807c856, 0x053dff38, - 0x0500000b, 0x4d400000, 0x4d200000, 0x05e9fc20, - 0x60068000, 0x60001802, 0x600c2800, 0x60040000, - 0x0505fc54, 0x5c024000, 0x5c028000, 0x42000000, - 0x0010e45a, 0x053dfddb, 0x600c3000, 0x4d3c0000, - 0x4c180000, 0x60383000, 0x600a7804, 0x0501f020, - 0x4807c856, 0x053dff22, 0x0500000b, 0x4d400000, - 0x4d200000, 0x05e9fc0a, 0x60068000, 0x60001802, - 0x60402800, 0x60040000, 0x0505fc3e, 0x5c024000, - 0x5c028000, 0x42000000, 0x0010e459, 0x053dfdc5, - 0x60103000, 0x4d3c0000, 0x4c180000, 0x60403000, - 0x600a7804, 0x0501f00a, 0x4807c856, 0x42000000, - 0x0010e39c, 0x053dfdbb, 0x60043000, 0x4d3c0000, - 0x4c180000, 0x60303000, 0x600a7800, 0x61fc19ff, - 0x601c2000, 0x4d200000, 0x417a4000, 0x05f9fe1d, - 0x5c024000, 0x5c003000, 0x4d400000, 0x053dfb65, - 0x60aa8000, 0x05e9f8a1, 0x4c580000, 0x053dfec5, - 0x42000800, 0x0010e512, 0x58040005, 0x82000500, - 0x000000ff, 0x48000805, 0x90040c0d, 0x8058b040, - 0x05fe07fa, 0x5c00b000, 0x5c028000, 0x5c027800, - 0x1c01f000, 0x4807c856, 0x05011000, 0x4a03c840, - 0x0010e06a, 0x6503c842, 0x40000000, 0x05fd17ff, - 0x42007800, 0x0010e06a, 0x64447800, 0x803c7800, - 0x4a007800, 0x220000ef, 0x4a007801, 0x000000ef, - 0x4a007802, 0x01380000, 0x64007803, 0x4a007804, - 0xffffffff, 0x64007805, 0x1c01f000, 0x59c400a3, - 0x80300500, 0x80340540, 0x480388a3, 0x1c01f000, - 0x4833c857, 0x59c400a3, 0x80300540, 0x480388a3, - 0x80300580, 0x480388a3, 0x1c01f000, 0x4803c856, - 0x05000003, 0x640750bd, 0x0501f002, 0x497b50bd, - 0x1c01f000, 0x59c80002, 0x80000540, 0x05000009, - 0x80000040, 0x05000007, 0x4a039005, 0x00000140, - 0x60300000, 0x80000040, 0x05fe07ff, 0x05fdf7f6, - 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x59c4b805, - 0x485fc856, 0x8c5c053a, 0x05020004, 0x42000000, - 0x0010e39a, 0x053dfd5f, 0x4a038805, 0x20000000, - 0x05e5fc0c, 0x4000c000, 0x05e5fb53, 0x4a038805, - 0x04000000, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x497a6a00, 0x0501faf4, 0x4a026c00, 0x00000707, - 0x497a6801, 0x497a6808, 0x497a6809, 0x497a6806, - 0x497a6807, 0x497a6c0b, 0x497a680c, 0x59240400, - 0x8c00050a, 0x05000005, 0x5934080f, 0x59340010, - 0x80040540, 0x05da0b41, 0x4a026a04, 0x00000100, - 0x497a6a03, 0x59340402, 0x82000500, 0x000000ff, - 0x48026c02, 0x497a6c04, 0x497a6a05, 0x497a6c05, - 0x497a6811, 0x4d2c0000, 0x5934000d, 0x49466c03, - 0x80025d40, 0x05000003, 0x05d9fef1, 0x497a680d, - 0x5c025800, 0x599c0401, 0x48026a0b, 0x599c0208, - 0x48026c12, 0x4a02680a, 0x00008000, 0x0505f1fb, - 0x60140000, 0x80000d80, 0x0501f024, 0x0501ff90, - 0x05020013, 0x59a80249, 0x8c00050a, 0x0502000d, - 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857, - 0x05000008, 0x59340a00, 0x8c04051e, 0x000002be, - 0x60a40000, 0x60000820, 0x492fc857, 0x0501f013, - 0x492fc857, 0x60a00000, 0x0501f00e, 0x8d0c0502, - 0x05020003, 0x8d0c0500, 0x05000003, 0x60100000, - 0x0501f008, 0x60a40000, 0x59340a00, 0x8c04051e, - 0x05000004, 0x492fc857, 0x60000820, 0x0501f003, - 0x492fc857, 0x80000d80, 0x4803c857, 0x80028540, - 0x1c01f000, 0x490fc857, 0x8d0c0500, 0x05fe07f0, - 0x0501ff45, 0x05fe07ea, 0x59340200, 0x8c00050e, - 0x05fc07e7, 0x0001f2be, 0x4d480000, 0x4d4c0000, - 0x592e900c, 0x592e980d, 0x0501fc9f, 0x5c029800, - 0x5c029000, 0x05fc07c7, 0x0001f2c1, 0x492fc857, - 0x592e8c0a, 0x83440d80, 0x000007fc, 0x05000004, - 0x83440480, 0x000007f0, 0x05021018, 0x592e440b, - 0x050df861, 0x05000f80, 0x05020014, 0x0509ff48, - 0x05020012, 0x0501ff34, 0x05020012, 0x0521f904, - 0x05000019, 0x83200400, 0x0010d17b, 0x50024800, - 0x4926601d, 0x59340002, 0x4802600b, 0x4936600a, - 0x492e6009, 0x642a6407, 0x61027000, 0x0009f800, - 0x80000580, 0x0501f00b, 0x60a00000, 0x0501f008, - 0x0501ff37, 0x05fc07fd, 0x910c0d03, 0x05000003, - 0x60100000, 0x0501f002, 0x60a40000, 0x80000540, - 0x1c01f000, 0x60b00000, 0x05fdf7fd, 0x492fc857, - 0x592e440b, 0x4923c857, 0x050df83b, 0x592c420b, - 0x0500000a, 0x60380000, 0x59240a00, 0x8c040500, - 0x05000198, 0x90200d0f, 0x90040d88, 0x05020195, - 0x90200d30, 0x05000193, 0x592e8c0a, 0x4947c857, - 0x83440c80, 0x00000800, 0x60280000, 0x0502118d, - 0x4823c857, 0x9020050f, 0x0c01f001, 0x00105346, - 0x001053d9, 0x00105428, 0x00105430, 0x00105438, - 0x00105343, 0x00105343, 0x00105343, 0x00105442, - 0x0010549f, 0x001054bb, 0x00105343, 0x00105343, - 0x00105343, 0x00105343, 0x00105343, 0x4803c857, - 0x60300000, 0x0501f177, 0x592c100c, 0x82081500, - 0x00ffffff, 0x0501fdc4, 0x0500002d, 0x4803c857, - 0x90004d9d, 0x05020016, 0x0509fcb5, 0x59340405, - 0x4c000000, 0x0501fed4, 0x5c000000, 0x05000004, - 0x8c20050a, 0x05000022, 0x80000580, 0x44002800, - 0x59340008, 0x48002802, 0x59340009, 0x48002801, - 0x59340006, 0x48002804, 0x59340007, 0x48002803, - 0x6014b000, 0x052dffb9, 0x0501f17d, 0x4803c857, - 0x90004d9a, 0x05020003, 0x40101000, 0x0501f15a, - 0x4803c857, 0x90004d9b, 0x05020003, 0x40181000, - 0x0501f155, 0x4803c857, 0x90004d9f, 0x05000156, - 0x90004d9c, 0x05000154, 0x90004d99, 0x60280000, - 0x05000148, 0x60280000, 0x05020159, 0x59a800d1, - 0x8c000502, 0x05000016, 0x0501feab, 0x05000014, - 0x59340212, 0x82000500, 0x0000ff00, 0x60401000, - 0x0502000b, 0x60201000, 0x59a80249, 0x8c000506, - 0x05020008, 0x59340002, 0x82000500, 0x00ff0000, - 0x82000580, 0x00ff0000, 0x05000005, 0x0505f924, - 0x60700000, 0x40181000, 0x05020133, 0x0521f874, - 0x0500013b, 0x82200500, 0x00000100, 0x0501fe3e, - 0x4926601d, 0x4936600a, 0x052dfcf9, 0x492e6009, - 0x64066407, 0x8c20050a, 0x05000004, 0x592c0408, - 0x8400055c, 0x48025c08, 0x4c200000, 0x4d3c0000, - 0x60027830, 0x05e5ff8b, 0x5c027800, 0x5c004000, - 0x592c100c, 0x82081500, 0x00ffffff, 0x59240005, - 0x80081d80, 0x0502001c, 0x4a026c00, 0x00000404, - 0x497a6a05, 0x497a6c05, 0x8c20050a, 0x05020006, - 0x4a026c00, 0x00000606, 0x4a026a05, 0x00002000, - 0x648a6c05, 0x59240001, 0x59240802, 0x48026806, - 0x48066807, 0x59240003, 0x59240804, 0x48026808, - 0x48066809, 0x59a80004, 0x48026a04, 0x0505f90f, - 0x0005ffdc, 0x592c0408, 0x8400051c, 0x48025c08, - 0x0501f11b, 0x8c200512, 0x0500000b, 0x599c0018, + 0x05020005, 0x80081040, 0x80183040, 0x05fe07f8, + 0x0501f03f, 0x800811c0, 0x05020006, 0x82042580, + 0x3fffffff, 0x05000039, 0x82040d40, 0xc0000000, + 0x6080b000, 0x60041800, 0x40042000, 0x80102102, + 0x0502101f, 0x800c18c2, 0x8058b040, 0x05fe07fc, + 0x0501f02e, 0x41781000, 0x40200000, 0x80080400, + 0x50000800, 0x82042580, 0xffffffff, 0x05020005, + 0x80081000, 0x80183040, 0x05fe07f8, 0x0501f023, + 0x800811c0, 0x05020003, 0x82040d40, 0xc0000000, + 0x6004b000, 0x42001800, 0x80000000, 0x40042000, + 0x801020c2, 0x05021006, 0x800c1902, 0x8058b000, + 0x905804a1, 0x05fc17fb, 0x0501f014, 0x40200000, + 0x80082400, 0x50100000, 0x800c0540, 0x44002000, + 0x59a80046, 0x84000540, 0x48035046, 0x40580000, + 0x60802800, 0x80142c80, 0x40080000, 0x600c3800, + 0x801c0480, 0x800000ca, 0x80142d40, 0x40140800, + 0x90000541, 0x0501f002, 0x80000580, 0x1c01f000, + 0x4807c857, 0x480bc857, 0x40041800, 0x41782000, + 0x600c0000, 0x900c1ca0, 0x05001004, 0x80102000, + 0x80000040, 0x05fdf7fc, 0x40041800, 0x801021c0, + 0x05000004, 0x900c1ca0, 0x80102040, 0x05fe07fe, + 0x60042000, 0x800c19c0, 0x05000004, 0x801020c2, + 0x800c1840, 0x05fe07fe, 0x80083c00, 0x401c2800, + 0x50140000, 0x80102d00, 0x05020007, 0x80100540, + 0x44003800, 0x59a80046, 0x84000540, 0x48035046, + 0x80000580, 0x1c01f000, 0x4807c856, 0x605c1100, + 0x59a81867, 0x0541fc88, 0x05f9fe9f, 0x1c01f000, + 0x4807c856, 0x6080b000, 0x91cca407, 0x4200a800, + 0x001141fc, 0x0541f57c, 0x4807c856, 0x051dfa30, + 0x61dc0801, 0x0501f8d4, 0x497b2804, 0x497b2805, + 0x497b2826, 0x497b2827, 0x6006d800, 0x42006000, + 0xbe7fffff, 0x42006800, 0x00018000, 0x0501f95f, + 0x42006000, 0xfffeffff, 0x41786800, 0x0501f95b, + 0x497b5067, 0x60b40800, 0x42001000, 0x0010537b, + 0x0511f7ab, 0x4807c856, 0x05fdffe8, 0x497b5041, + 0x497b50bb, 0x1c01f000, 0x4807c856, 0x42006000, + 0xffffffff, 0x60a06800, 0x0501f14c, 0x4807c856, + 0x05fdffd2, 0x0519fecc, 0x4df00000, 0x051df959, + 0x5c03e000, 0x05180eb9, 0x59c400a4, 0x9000050f, + 0x90000582, 0x0502000a, 0x42006000, 0xffffffff, + 0x42006800, 0x00200000, 0x0501f93c, 0x42006000, + 0xffdfffff, 0x41786800, 0x0501f938, 0x497b5041, + 0x61dc0801, 0x0501f8a0, 0x59c400a3, 0x82000500, + 0xbf20bfff, 0x82000540, 0x0001c000, 0x480388a3, + 0x84000520, 0x480388a3, 0x497b5067, 0x60b40800, + 0x42001000, 0x0010537b, 0x0511f77d, 0x497b50bb, + 0x59b400f5, 0x8c000500, 0x05020003, 0x90000541, + 0x480368f5, 0x800400c4, 0x82000400, 0x00002000, + 0x4803910a, 0x59b400f6, 0x90000518, 0x05fe07fe, + 0x4a0368f0, 0x00112004, 0x42000000, 0x0011200b, + 0x4c040000, 0x40043800, 0x50000800, 0x82040d80, + 0x11010000, 0x0500000c, 0x50000800, 0x4807c857, + 0x8d0c052a, 0x05000008, 0x4c000000, 0x821c3d40, + 0x0000dc00, 0x42000000, 0x00112005, 0x05d9fbdb, + 0x5c000000, 0x5c000800, 0x480368f1, 0x82040400, + 0x0000dc00, 0x480368f3, 0x59c408a4, 0x90040d0f, + 0x90040588, 0x05020013, 0x4c5c0000, 0x4c600000, + 0x59c4b805, 0x8c5c053a, 0x05020004, 0x42000000, + 0x0011233b, 0x0541fbfe, 0x4a038805, 0x20000000, + 0x05e5fbb0, 0x4000c000, 0x05e5faf7, 0x6006d800, + 0x497b5041, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x9004058c, 0x05000015, 0x59c8010b, 0x8c000502, + 0x05fc07e6, 0x90040d8b, 0x05020005, 0x59a80841, + 0x82040d40, 0x00002000, 0x0501f004, 0x59a808b6, + 0x82040d40, 0x00001000, 0x48075067, 0x59a808c1, + 0x800409c0, 0x05020005, 0x6140080f, 0x42001000, + 0x00105303, 0x0515f8d3, 0x1c01f000, 0x4807c856, + 0x05fdff5a, 0x0519fe54, 0x4df00000, 0x051df8e1, + 0x5c03e000, 0x05180e41, 0x59c400a4, 0x9000050f, + 0x90000582, 0x0502000a, 0x42006000, 0xffffffff, + 0x42006800, 0x00200000, 0x0501f8c4, 0x42006000, + 0xffdfffff, 0x41786800, 0x0501f8c0, 0x0509f80f, + 0x05000010, 0x0509f819, 0x0502000e, 0x4a035044, + 0x0000aaaa, 0x4c040000, 0x05e5f818, 0x59a80050, + 0x82000500, 0xffff0000, 0x80040540, 0x48035050, + 0x5c000800, 0x64035045, 0x0505ff77, 0x0501f005, + 0x641750b9, 0x60000001, 0x05e1ff62, 0x05fdff3f, + 0x1c01f000, 0x0501f809, 0x42006000, 0xbf7f7fff, + 0x41786800, 0x0501f0a5, 0x42006000, 0xbf7f7fff, + 0x41786800, 0x0501f0a1, 0x0505fffc, 0x05020009, + 0x59c40006, 0x82000540, 0x000000f0, 0x48038806, + 0x42006000, 0xbfffffff, 0x41786800, 0x0501f897, + 0x1c01f000, 0x800408d0, 0x59a80046, 0x8c000506, + 0x05000006, 0x59a80040, 0x82000500, 0x000000ff, + 0x80040540, 0x0501f003, 0x82040540, 0x000000f7, + 0x480388a7, 0x1c01f000, 0x4807c856, 0x42000000, + 0x001123d3, 0x0541fb8e, 0x60143000, 0x4d3c0000, + 0x4c180000, 0x60343000, 0x600a7800, 0x0501f04f, + 0x4807c856, 0x42000000, 0x00112400, 0x0541fb84, + 0x60003000, 0x4d3c0000, 0x4c180000, 0x603c3000, + 0x61fc19ff, 0x601c2000, 0x05f9fe0b, 0x5c003000, + 0x59240200, 0x84000556, 0x48024a00, 0x4d400000, + 0x60aa8000, 0x59240400, 0x8c00050a, 0x053c0b0d, + 0x600a7800, 0x05e9fb26, 0x5c028000, 0x5c027800, + 0x0009f010, 0x4807c856, 0x0541fcbc, 0x0500000b, + 0x4d400000, 0x4d200000, 0x05e9fac5, 0x60068000, + 0x60001802, 0x600c2800, 0x60040000, 0x0505fd41, + 0x5c024000, 0x5c028000, 0x42000000, 0x001123fe, + 0x0541fb5f, 0x600c3000, 0x4d3c0000, 0x4c180000, + 0x60383000, 0x600a7804, 0x0501f020, 0x4807c856, + 0x0541fca6, 0x0500000b, 0x4d400000, 0x4d200000, + 0x05e9faaf, 0x60068000, 0x60001802, 0x60402800, + 0x60040000, 0x0505fd2b, 0x5c024000, 0x5c028000, + 0x42000000, 0x001123fd, 0x0541fb49, 0x60103000, + 0x4d3c0000, 0x4c180000, 0x60403000, 0x600a7804, + 0x0501f00a, 0x4807c856, 0x42000000, 0x0011233d, + 0x0541fb3f, 0x60043000, 0x4d3c0000, 0x4c180000, + 0x60303000, 0x600a7800, 0x61fc19ff, 0x601c2000, + 0x4d200000, 0x417a4000, 0x05f9fdc3, 0x5c024000, + 0x5c003000, 0x4d400000, 0x0541f8cb, 0x60aa8000, + 0x05e5ff3d, 0x4c580000, 0x0541fc49, 0x42000800, + 0x001124b6, 0x58040005, 0x82000500, 0x000000ff, + 0x48000805, 0x90040c0d, 0x8058b040, 0x05fe07fa, + 0x5c00b000, 0x5c028000, 0x5c027800, 0x1c01f000, + 0x4807c856, 0x05011000, 0x4a03c840, 0x00112004, + 0x6503c842, 0x40000000, 0x05fd17ff, 0x42007800, + 0x00112004, 0x64447800, 0x803c7800, 0x4a007800, + 0x220000ef, 0x4a007801, 0x000000ef, 0x4a007802, + 0x01380000, 0x64007803, 0x4a007804, 0xffffffff, + 0x64007805, 0x1c01f000, 0x59c400a3, 0x80300500, + 0x80340540, 0x480388a3, 0x1c01f000, 0x4833c857, + 0x59c400a3, 0x80300540, 0x480388a3, 0x80300580, + 0x480388a3, 0x1c01f000, 0x4803c856, 0x05000003, + 0x640750c2, 0x0501f002, 0x497b50c2, 0x1c01f000, + 0x59c80002, 0x80000540, 0x05000009, 0x80000040, + 0x05000007, 0x4a039005, 0x00000140, 0x60300000, + 0x80000040, 0x05fe07ff, 0x05fdf7f6, 0x1c01f000, + 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x485fc856, + 0x8c5c053a, 0x05020004, 0x42000000, 0x0011233b, + 0x0541fae3, 0x4a038805, 0x20000000, 0x05e5fa95, + 0x4000c000, 0x05e5f9dc, 0x4a038805, 0x04000000, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x497a6a00, + 0x0501fb37, 0x4a026c00, 0x00000707, 0x497a6801, + 0x497a6808, 0x497a6809, 0x497a6806, 0x497a6807, + 0x497a6c0b, 0x497a680c, 0x59240400, 0x8c00050a, + 0x05000005, 0x5934080f, 0x59340010, 0x80040540, + 0x05da0985, 0x4a026a04, 0x00000100, 0x497a6a03, + 0x59340402, 0x82000500, 0x000000ff, 0x48026c02, + 0x497a6c04, 0x497a6a05, 0x497a6c05, 0x497a6811, + 0x4d2c0000, 0x5934000d, 0x49466c03, 0x80025d40, + 0x05000003, 0x05d9fd31, 0x497a680d, 0x5c025800, + 0x599c0401, 0x48026a0b, 0x599c0208, 0x48026c12, + 0x4a02680a, 0x00008000, 0x0505f2d9, 0x60140000, + 0x80000d80, 0x0501f024, 0x0505f862, 0x05020013, + 0x59a8024c, 0x8c00050a, 0x0502000d, 0x59340212, + 0x82000500, 0x0000ff00, 0x4803c857, 0x05000008, + 0x59340a00, 0x8c04051e, 0x000002c6, 0x60a40000, + 0x60000820, 0x492fc857, 0x0501f013, 0x492fc857, + 0x60a00000, 0x0501f00e, 0x8d0c0502, 0x05020003, + 0x8d0c0500, 0x05000003, 0x60100000, 0x0501f008, + 0x60a40000, 0x59340a00, 0x8c04051e, 0x05000004, + 0x492fc857, 0x60000820, 0x0501f003, 0x492fc857, + 0x80000d80, 0x4803c857, 0x80028540, 0x1c01f000, + 0x490fc857, 0x8d0c0500, 0x05fe07f0, 0x0505f817, + 0x05fe07ea, 0x59340200, 0x8c00050e, 0x05fc07e7, + 0x0001f2c6, 0x4d480000, 0x4d4c0000, 0x592e900c, + 0x592e980d, 0x0501fd12, 0x5c029800, 0x5c029000, + 0x05fc07c7, 0x0001f2c9, 0x492fc857, 0x592e8c0a, + 0x83440d80, 0x000007fc, 0x0500000c, 0x83440480, + 0x000007f0, 0x05001009, 0x83440480, 0x00000800, + 0x0500101d, 0x8d0c0538, 0x0500001b, 0x59a800ad, + 0x81440480, 0x05021018, 0x592e440b, 0x050df9ca, + 0x0504084a, 0x05020014, 0x050df8b1, 0x05020012, + 0x0501fffe, 0x05020012, 0x0521fc1a, 0x05000019, + 0x83200400, 0x0010d8f9, 0x50024800, 0x4926601d, + 0x59340002, 0x4802600b, 0x4936600a, 0x492e6009, + 0x642a6407, 0x61027000, 0x0009f839, 0x80000580, + 0x0501f00b, 0x60a00000, 0x0501f008, 0x0505f801, + 0x05fc07fd, 0x910c0d03, 0x05000003, 0x60100000, + 0x0501f002, 0x60a40000, 0x80000540, 0x1c01f000, + 0x60b00000, 0x05fdf7fd, 0x492fc857, 0x592e440b, + 0x4923c857, 0x050df9a4, 0x592c420b, 0x0500000a, + 0x60380000, 0x59240a00, 0x8c040500, 0x050001a8, + 0x90200d0f, 0x90040d88, 0x050201a5, 0x90200d30, + 0x050001a3, 0x592e8c0a, 0x4947c857, 0x59a800ad, + 0x81440480, 0x60280000, 0x0502119d, 0x4823c857, + 0x9020050f, 0x0c01f001, 0x00105545, 0x001055e1, + 0x00105635, 0x0010563d, 0x00105645, 0x00105542, + 0x00105542, 0x00105542, 0x0010564f, 0x001056ae, + 0x001056ca, 0x00105542, 0x00105542, 0x00105542, + 0x00105542, 0x00105542, 0x4803c857, 0x60300000, + 0x0501f187, 0x592c100c, 0x82081500, 0x00ffffff, + 0x0501fe37, 0x0500002f, 0x4803c857, 0x90004d9d, + 0x05020016, 0x0509fdc9, 0x59340405, 0x4c000000, + 0x0501ff9e, 0x5c000000, 0x05000004, 0x8c20050a, + 0x05000024, 0x80000580, 0x44002800, 0x59340008, + 0x48002802, 0x59340009, 0x48002801, 0x59340006, + 0x48002804, 0x59340007, 0x48002803, 0x6014b000, + 0x0531fb60, 0x0501f191, 0x4803c857, 0x90004d9a, + 0x05020003, 0x40101000, 0x0501f16e, 0x4803c857, + 0x90004d9b, 0x05020003, 0x40181000, 0x0501f169, + 0x4803c857, 0x90004da0, 0x0500016a, 0x90004d9f, + 0x05000168, 0x90004d9c, 0x05000166, 0x90004d99, + 0x60280000, 0x05000156, 0x60280000, 0x0502016b, + 0x59a800d6, 0x8c000502, 0x05000016, 0x0501ff73, + 0x05000014, 0x59340212, 0x82000500, 0x0000ff00, + 0x60401000, 0x0502000b, 0x60201000, 0x59a8024c, + 0x8c000506, 0x05020008, 0x59340002, 0x82000500, + 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000005, + 0x0505f9f8, 0x60700000, 0x40181000, 0x05020141, + 0x0521fb88, 0x0500014d, 0x82200500, 0x00000100, + 0x0501ff02, 0x4926601d, 0x4936600a, 0x0531f890, + 0x492e6009, 0x64066407, 0x8c20050a, 0x05000004, + 0x592c0408, 0x8400055c, 0x48025c08, 0x4c200000, + 0x4d3c0000, 0x60027830, 0x05e5fe21, 0x5c027800, + 0x5c004000, 0x592c100c, 0x82081500, 0x00ffffff, + 0x59240005, 0x80081d80, 0x0502001c, 0x4a026c00, + 0x00000404, 0x497a6a05, 0x497a6c05, 0x8c20050a, + 0x05020006, 0x4a026c00, 0x00000606, 0x4a026a05, + 0x00002000, 0x648a6c05, 0x59240001, 0x59240802, + 0x48026806, 0x48066807, 0x59240003, 0x59240804, + 0x48026808, 0x48066809, 0x59a80004, 0x48026a04, + 0x0505f9e3, 0x0009f810, 0x592c0408, 0x8400051c, + 0x48025c08, 0x0501f12d, 0x8c20050a, 0x05020006, + 0x8c200514, 0x05000004, 0x48226216, 0x592c0a0d, + 0x4806601e, 0x8c200512, 0x0500000b, 0x599c0018, 0x8c000518, 0x05000008, 0x592c000d, 0x82000500, 0x00000380, 0x5934080a, 0x80040d40, 0x84040d54, - 0x4806680a, 0x417a7800, 0x0501f911, 0x600c0800, - 0x0501f919, 0x600a7000, 0x0009f800, 0x80000580, - 0x0501f10a, 0x0501fea0, 0x050200f5, 0x0501fe50, - 0x05000009, 0x0501fe48, 0x050200f5, 0x4c600000, - 0x4178c000, 0x60027830, 0x417a6000, 0x05e5ffc1, + 0x4806680a, 0x417a7800, 0x0501f91c, 0x600c0800, + 0x0501f924, 0x600a7000, 0x0009f839, 0x80000580, + 0x0501f115, 0x0501ff61, 0x05020100, 0x0501ff11, + 0x05000009, 0x0501ff09, 0x05020100, 0x4c600000, + 0x4178c000, 0x60027830, 0x417a6000, 0x05e5fe50, 0x5c00c000, 0x592c100c, 0x82081500, 0x00ffffff, 0x59240005, 0x80084d80, 0x05020007, 0x4a026c00, 0x00000606, 0x4a026a05, 0x00002000, 0x648a6c05, - 0x0501f0ef, 0x59a800d1, 0x8c000502, 0x05000016, - 0x0501fe31, 0x05000014, 0x59340212, 0x82000500, + 0x0501f0fa, 0x59a800d6, 0x8c000502, 0x05000016, + 0x0501fef2, 0x05000014, 0x59340212, 0x82000500, 0x0000ff00, 0x60401000, 0x0502000b, 0x60201000, - 0x59a80249, 0x8c000506, 0x05020008, 0x59340002, + 0x59a8024c, 0x8c000506, 0x05020008, 0x59340002, 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000, - 0x05000005, 0x0505f8aa, 0x60700000, 0x40181000, - 0x050200b9, 0x051dfffa, 0x050000c1, 0x5934080a, + 0x05000005, 0x0505f977, 0x60700000, 0x40181000, + 0x050200c0, 0x0521fb07, 0x050000cc, 0x5934080a, 0x8c200512, 0x0500000c, 0x599c0018, 0x8c000518, 0x05000009, 0x592c000d, 0x82000500, 0x00000380, 0x82041500, 0xfffffc7f, 0x80080d40, 0x84040d54, 0x0501f002, 0x84040d14, 0x4806680a, 0x4926601d, - 0x4936600a, 0x052dfc72, 0x492e6009, 0x64066407, - 0x417a7800, 0x0501f8c2, 0x60140800, 0x0501f8ca, - 0x600e7000, 0x0009f800, 0x80000580, 0x0501f0bb, - 0x0501fe51, 0x050200a6, 0x0501fe10, 0x050200a8, - 0x052dfe17, 0x0500009e, 0x80000580, 0x0501f0b3, - 0x0501fe49, 0x0502009e, 0x0501fe08, 0x050200a0, - 0x052df937, 0x05000096, 0x80000580, 0x0501f0ab, - 0x0501fe41, 0x05020096, 0x83444d80, 0x000007fe, - 0x60280000, 0x0502007f, 0x052dfe19, 0x0500008c, - 0x80000580, 0x0501f0a1, 0xb0200530, 0x05020004, - 0x8c20050e, 0x60300000, 0x05020076, 0x8c20050a, - 0x0500000f, 0x4d3c0000, 0x600278a0, 0x8c20050e, - 0x05020003, 0x853e7d56, 0x853e7d1c, 0x82200500, - 0x000004a0, 0x42026000, 0x00111a70, 0x492e6009, - 0x0501fda3, 0x5c027800, 0x0501f089, 0x8c200508, - 0x0502001a, 0x592c100c, 0x82081500, 0x00ffffff, - 0x0501fcb1, 0x05000027, 0x4803c857, 0x90004d9a, - 0x05020003, 0x40101000, 0x0501f05f, 0x4803c857, - 0x90004d9b, 0x05020003, 0x40181000, 0x0501f05a, - 0x4803c857, 0x90004d9f, 0x0500005b, 0x90004d9c, - 0x05000059, 0x90004d99, 0x60280000, 0x0500004d, - 0x60280000, 0x0501f05e, 0x0501fe07, 0x0502005c, - 0x4d3c0000, 0x600278a0, 0x8c20050e, 0x05020003, - 0x853e7d56, 0x853e7d1c, 0x82200500, 0x00000090, - 0x42026000, 0x00111a70, 0x492e6009, 0x0501fd60, - 0x5c027800, 0x60280000, 0x0502003a, 0x0501f05c, - 0x592c100c, 0x82081500, 0x00ffffff, 0x59240005, - 0x80084d80, 0x05020003, 0x84204548, 0x05fdf7e9, - 0x916c0583, 0x601c0800, 0x05020005, 0x052dfd6c, - 0x05000009, 0x80000580, 0x0501f050, 0x42026000, - 0x00111a70, 0x492e6009, 0x0501fdc8, 0x05000045, - 0x0501f047, 0x42026000, 0x00111a70, 0x492e6009, - 0x0501fdc2, 0x0500002e, 0x0501f041, 0x0501fdda, - 0x0502002f, 0x916c0583, 0x05020036, 0x8c200508, - 0x05000008, 0x4c600000, 0x4178c000, 0x60027830, - 0x417a6000, 0x05e5fefb, 0x5c00c000, 0x0501f034, - 0x0501fd7f, 0x05000009, 0x0501fd77, 0x05020024, + 0x4936600a, 0x0531f802, 0x8c200514, 0x05000004, + 0x48226216, 0x592c0a0d, 0x4806601e, 0x492e6009, + 0x64066407, 0x417a7800, 0x0501f8c8, 0x60140800, + 0x0501f8d0, 0x600e7000, 0x0009f839, 0x80000580, + 0x0501f0c1, 0x0501ff0d, 0x050200ac, 0x0501fecc, + 0x050200ae, 0x0531f9a9, 0x050000a4, 0x80000580, + 0x0501f0b9, 0x0501ff05, 0x050200a4, 0x0501fec4, + 0x050200a6, 0x052dfcc3, 0x0500009c, 0x80000580, + 0x0501f0b1, 0x0501fefd, 0x0502009c, 0x83444d80, + 0x000007fe, 0x60280000, 0x05020081, 0x0531f9ab, + 0x05000092, 0x80000580, 0x0501f0a7, 0xb0200530, + 0x05020004, 0x8c20050e, 0x60300000, 0x05020078, + 0x8c20050a, 0x0500000f, 0x4d3c0000, 0x600278a0, + 0x8c20050e, 0x05020003, 0x853e7d56, 0x853e7d1c, + 0x82200500, 0x000004a0, 0x42026000, 0x00115a14, + 0x492e6009, 0x0501fe5b, 0x5c027800, 0x0501f08f, + 0x8c200508, 0x0502001c, 0x592c100c, 0x82081500, + 0x00ffffff, 0x0501fd16, 0x05000029, 0x4803c857, + 0x90004d9a, 0x05020003, 0x40101000, 0x0501f061, + 0x4803c857, 0x90004d9b, 0x05020003, 0x40181000, + 0x0501f05c, 0x4803c857, 0x90004da0, 0x05000061, + 0x90004d9f, 0x0500005f, 0x90004d9c, 0x0500005d, + 0x90004d99, 0x60280000, 0x0500004d, 0x60280000, + 0x0501f062, 0x0501fec1, 0x05020060, 0x4d3c0000, + 0x600278a0, 0x8c20050e, 0x05020003, 0x853e7d56, + 0x853e7d1c, 0x82200500, 0x00000090, 0x42026000, + 0x00115a14, 0x492e6009, 0x0501fe16, 0x5c027800, + 0x60280000, 0x0502003a, 0x0501f060, 0x592c100c, + 0x82081500, 0x00ffffff, 0x59240005, 0x80084d80, + 0x05020003, 0x84204548, 0x05fdf7e9, 0x916c0583, + 0x601c0800, 0x05020005, 0x0531f8fc, 0x05000009, + 0x80000580, 0x0501f054, 0x42026000, 0x00115a14, + 0x492e6009, 0x0501fe82, 0x05000049, 0x0501f04b, + 0x42026000, 0x00115a14, 0x492e6009, 0x0501fe7c, + 0x05000032, 0x0501f045, 0x0501fe94, 0x05020033, + 0x916c0583, 0x0502003a, 0x8c200508, 0x05000008, 0x4c600000, 0x4178c000, 0x60027830, 0x417a6000, - 0x05e5fef0, 0x5c00c000, 0x480bc856, 0x052dfbea, - 0x05000013, 0x80000580, 0x0501f028, 0x05fdf7e4, - 0x480bc857, 0x60640800, 0x40001000, 0x6008b000, - 0x0501f008, 0x480bc857, 0x40000800, 0x6008b000, - 0x0501f004, 0x480bc857, 0x40000800, 0x6004b000, - 0x480bc857, 0x60c68000, 0x0501f017, 0x480bc857, - 0x600c0800, 0x6004b000, 0x05fdf7fa, 0x480bc857, - 0x60280800, 0x6004b000, 0x05fdf7f6, 0x480bc857, - 0x60240800, 0x40001000, 0x6008b000, 0x05fdf7f1, - 0x480bc857, 0x601c0800, 0x6004b000, 0x05fdf7ed, - 0x480bc857, 0x6004b000, 0x05fdf7ea, 0x80028580, - 0x4178b000, 0x90000541, 0x1c01f000, 0x4937c857, - 0x5932680a, 0x59341200, 0x813e79c0, 0x05000003, - 0x84081540, 0x0501f002, 0x84081500, 0x480a6a00, - 0x1c01f000, 0x5932680a, 0x5c000000, 0x4c000000, - 0x4803c857, 0x4937c857, 0x83340580, 0x00110210, - 0x0500001f, 0x90040586, 0x05020003, 0x6018000c, - 0x0501f014, 0x90040584, 0x05020003, 0x60100008, - 0x0501f010, 0x90040587, 0x601c000e, 0x0500000d, - 0x90040583, 0x600c000e, 0x0500000a, 0x90040585, - 0x60140008, 0x05000007, 0x90040589, 0x60240008, - 0x05000004, 0x9004058b, 0x602c000e, 0x05da08cf, - 0x4803c857, 0x48026c00, 0x90040d86, 0x05020004, - 0x59341404, 0x800811c0, 0x05d808c8, 0x1c01f000, - 0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857, - 0x481bc857, 0x83440480, 0x00000800, 0x0502105f, - 0x83200400, 0x0010d17b, 0x50024800, 0x59240009, - 0x83441480, 0x000007f0, 0x05001003, 0x80081400, - 0x0501f003, 0x83441400, 0x0010d400, 0x50080000, + 0x05e5fd83, 0x5c00c000, 0x0501f038, 0x0501fe39, + 0x05000009, 0x0501fe31, 0x05020028, 0x4c600000, + 0x4178c000, 0x60027830, 0x417a6000, 0x05e5fd78, + 0x5c00c000, 0x480bc856, 0x052dff73, 0x05000017, + 0x80000580, 0x0501f02c, 0x05fdf7e4, 0x480bc857, + 0x60640800, 0x40001000, 0x6008b000, 0x0501f00c, + 0x480bc857, 0x40000800, 0x6008b000, 0x0501f008, + 0x480fc857, 0x40000800, 0x600cb000, 0x0501f004, + 0x480bc857, 0x40000800, 0x6004b000, 0x480bc857, + 0x60c68000, 0x0501f017, 0x480bc857, 0x600c0800, + 0x6004b000, 0x05fdf7fa, 0x480bc857, 0x60280800, + 0x6004b000, 0x05fdf7f6, 0x480bc857, 0x60240800, + 0x40001000, 0x6008b000, 0x05fdf7f1, 0x480bc857, + 0x601c0800, 0x6004b000, 0x05fdf7ed, 0x480bc857, + 0x6004b000, 0x05fdf7ea, 0x80028580, 0x4178b000, + 0x90000541, 0x1c01f000, 0x4937c857, 0x5932680a, + 0x59341200, 0x813e79c0, 0x05000003, 0x84081540, + 0x0501f002, 0x84081500, 0x480a6a00, 0x1c01f000, + 0x5932680a, 0x5c000000, 0x4c000000, 0x4803c857, + 0x4937c857, 0x83340580, 0x001141b4, 0x0500001f, + 0x90040586, 0x05020003, 0x6018000c, 0x0501f014, + 0x90040584, 0x05020003, 0x60100008, 0x0501f010, + 0x90040587, 0x601c000e, 0x0500000d, 0x90040583, + 0x600c000e, 0x0500000a, 0x90040585, 0x60140008, + 0x05000007, 0x90040589, 0x60240008, 0x05000004, + 0x9004058b, 0x602c000e, 0x05d60ef7, 0x4803c857, + 0x48026c00, 0x90040d86, 0x05020004, 0x59341404, + 0x800811c0, 0x05d40ef0, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4947c857, 0x481bc857, + 0x42001800, 0x80000000, 0x0501f007, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4947c857, 0x481bc857, + 0x41781800, 0x59a800ad, 0x81440480, 0x0502107d, + 0x83200400, 0x0010d8f9, 0x50024800, 0x59240009, + 0x83441480, 0x000007f0, 0x0500100f, 0x83440c80, + 0x00000800, 0x0500100a, 0x83441400, 0x0010db80, + 0x4c080000, 0x4c0c0000, 0x0001fb08, 0x5c001800, + 0x5c001000, 0x0502000d, 0x0501f008, 0x80081400, + 0x0501f003, 0x83441400, 0x0010db80, 0x50080000, 0x80026d40, 0x05000005, 0x59340013, 0x80000130, - 0x81200580, 0x0500001e, 0x4c180000, 0x4d2c0000, - 0x05d9fc41, 0x412e6800, 0x5c025800, 0x5c003000, - 0x05000046, 0x59242005, 0x812000f0, 0x80102540, + 0x81200580, 0x05000030, 0x4c180000, 0x4d2c0000, + 0x800c19c0, 0x05000003, 0x05d9fa5f, 0x0501f002, + 0x05d9fa4c, 0x412e6800, 0x5c025800, 0x5c003000, + 0x05000054, 0x59242005, 0x812000f0, 0x80102540, 0x48126813, 0x5924200b, 0x82100500, 0x00001fff, 0x800000c2, 0x82102500, 0xffffe000, 0x80100540, 0x48026814, 0x59242207, 0x80102000, 0x48124a07, - 0x45341000, 0x497a680d, 0x497a6810, 0x497a680f, - 0x4c180000, 0x05fdfd3f, 0x5c003000, 0x59340a12, - 0x4c040000, 0x0505fb61, 0x5c000800, 0x05000009, - 0x82180500, 0x00ffff00, 0x05000008, 0x59a8103d, - 0x82081500, 0x00ffff00, 0x80080580, 0x05000003, - 0x80000580, 0x0501f004, 0x82180500, 0x000000ff, - 0x800000d0, 0x80040d80, 0x05000003, 0x4803c857, - 0x48026a12, 0x59340813, 0x59242005, 0x801021c0, - 0x05000008, 0x812000f0, 0x80102540, 0x40040000, - 0x80100580, 0x05000003, 0x4813c857, 0x48126813, - 0x83440580, 0x000007fe, 0x05020004, 0x4a026802, - 0x00fffffe, 0x0501f006, 0x59340002, 0x80180580, - 0x05000003, 0x481bc857, 0x481a6802, 0x0501f806, - 0x80000580, 0x1c01f000, 0x4803c856, 0x90000541, - 0x05fdf7fd, 0x59341200, 0x84081508, 0x5934000a, - 0x8c00050c, 0x0502000b, 0x599c0018, 0x8c000510, - 0x05000009, 0x59a80006, 0x8c00050a, 0x05000005, - 0x59340c03, 0x82040480, 0x000007f0, 0x05001002, - 0x84081548, 0x480a6a00, 0x1c01f000, 0x4947c857, - 0x83440480, 0x00000800, 0x05021018, 0x83200400, - 0x0010d17b, 0x50024800, 0x59240009, 0x83441480, - 0x000007f0, 0x05001003, 0x80081400, 0x0501f003, - 0x83441400, 0x0010d400, 0x50080000, 0x80026d40, - 0x05000009, 0x0501fc84, 0x05020008, 0x8d0c0502, - 0x05000004, 0x59340200, 0x8c00050e, 0x05000003, - 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe, - 0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857, - 0x4d2c0000, 0x4d300000, 0x83440580, 0x0000ffff, - 0x0500001c, 0x83440480, 0x00000800, 0x0502101d, - 0x83441400, 0x0010d400, 0x50080000, 0x80026d40, - 0x05000014, 0x45781000, 0x5934000d, 0x80025d40, - 0x05da0bdb, 0x59366011, 0x813261c0, 0x0500000a, - 0x4c640000, 0x5930c800, 0x59325809, 0x0529ff02, - 0x05da0bd3, 0x0005ffdc, 0x90666540, 0x05fe07fa, - 0x5c00c800, 0x0501fee1, 0x41365800, 0x05d9fbc4, - 0x80000580, 0x5c026000, 0x5c025800, 0x1c01f000, - 0x90000541, 0x05fdf7fc, 0x4c580000, 0x59cc0001, - 0x4937c857, 0x82000500, 0x00ffffff, 0x48026802, - 0x497a6c01, 0x497a6a01, 0x59340200, 0x82000500, - 0xffffdffd, 0x48026a00, 0x4004b000, 0x0505facb, - 0x05020012, 0x59340403, 0x82000580, 0x000007fe, - 0x05000005, 0x59a80249, 0x8c00050a, 0x0502000b, - 0x0501f008, 0x59cc0408, 0x8c000518, 0x05000007, - 0x59cc0009, 0x4803505a, 0x59cc000a, 0x4803505b, - 0x8058b1c0, 0x05020001, 0x59cc0a09, 0x90040d10, - 0x59cc0408, 0x90000520, 0x05000005, 0x84040d40, - 0x59a81249, 0x8408155a, 0x480b5249, 0x5934000a, - 0x82000500, 0xffffffee, 0x80040540, 0x4802680a, - 0x91cca40b, 0x9134ac06, 0x6008b000, 0x053dfaa0, - 0x91cca40d, 0x9134ac08, 0x6008b000, 0x053dfa9c, - 0x59a820d0, 0x82100d00, 0x0000f000, 0x82040d80, - 0x00003000, 0x05020017, 0x59cc0013, 0x8c00053e, - 0x05000014, 0x59cc0414, 0x599c0818, 0x8c040512, - 0x0500000e, 0x8c00051e, 0x05000005, 0x59340200, - 0x84000546, 0x84000544, 0x48026a00, 0x59cc0213, - 0x8c000516, 0x05000005, 0x59340200, 0x8400054c, - 0x84000544, 0x48026a00, 0x59cc0a14, 0x0501f005, - 0x59340200, 0x84000508, 0x48026a00, 0x59cc0a18, - 0x59a80006, 0x8c00050c, 0x05020013, 0x82040480, - 0x00000800, 0x0502100a, 0x82040480, 0x00000400, - 0x05001003, 0x60000808, 0x0501f005, 0x82040480, - 0x00000200, 0x05001002, 0x60000804, 0x42001000, - 0x0010e060, 0x58080201, 0x80041480, 0x05001002, - 0x40000800, 0x48066a04, 0x59340403, 0x82000580, - 0x000007fe, 0x05020003, 0x59cc0a08, 0x48066a04, - 0x0501fe86, 0x5c00b000, 0x1c01f000, 0x4937c857, - 0x59cc0207, 0x4803c857, 0x48026a05, 0x59cc020a, - 0x4803c857, 0x48026c05, 0x59cc2006, 0x59341200, - 0x599c0818, 0x5934180a, 0x4807c857, 0x480bc857, - 0x480fc857, 0x82102500, 0xff000000, 0x82102580, - 0x02000000, 0x05000007, 0x8c00050e, 0x05000009, - 0x8c0c0514, 0x05000003, 0x8c0c050e, 0x05000005, - 0x8c040518, 0x05000003, 0x8408154a, 0x0501f002, - 0x8408150a, 0x8c000510, 0x05000009, 0x8c0c0514, - 0x05000003, 0x8c0c0510, 0x05000005, 0x8c040518, - 0x05000003, 0x8408154e, 0x0501f002, 0x8408150e, - 0x8c000512, 0x05000009, 0x8c0c0514, 0x05000003, - 0x8c0c0512, 0x05000005, 0x8c040518, 0x05000003, - 0x8408155c, 0x0501f002, 0x8408151c, 0x480a6a00, - 0x8c000500, 0x05000005, 0x053dfab1, 0x05000003, - 0x840c1d4a, 0x0501f002, 0x840c1d0a, 0x480e680a, - 0x59a80249, 0x8c000508, 0x05000007, 0x84000556, - 0x4803c857, 0x48035249, 0x42001000, 0x0010582b, - 0x0511f825, 0x1c01f000, 0x592c0015, 0x4803c857, - 0x48026805, 0x80000120, 0x42002000, 0x02000000, - 0x05fdf7bb, 0x4803c856, 0x4c5c0000, 0x4d2c0000, - 0x4c580000, 0x5934000d, 0x80025d40, 0x05000023, - 0x592c0006, 0x90000488, 0x0500100a, 0x412cb800, - 0x592c0001, 0x80025d40, 0x05fe07fa, 0x05d9fadb, - 0x0500002e, 0x492fc857, 0x492cb801, 0x0501f01b, - 0x912c0c07, 0x6020b000, 0x50040000, 0x82000580, - 0xffffffff, 0x05020006, 0x80041000, 0x50080000, - 0x82000580, 0xffffffff, 0x05000005, 0x90040c02, - 0x8058b040, 0x05fe07f5, 0x05d5ff20, 0x45480800, - 0x454c1000, 0x592c1806, 0x800c1800, 0x480e5806, - 0x480fc857, 0x0501f010, 0x05d9fac0, 0x05000013, - 0x492fc857, 0x492e680d, 0x497a5805, 0x64065806, - 0x494a5807, 0x494e5808, 0x912c0c09, 0x6038b000, - 0x46000800, 0xffffffff, 0x80040800, 0x8058b040, - 0x05fe07fc, 0x90000541, 0x5c00b000, 0x5c025800, - 0x5c00b800, 0x1c01f000, 0x80000580, 0x05fdf7fb, - 0x4803c856, 0x4d3c0000, 0x4d2c0000, 0x5934000d, - 0x80025d40, 0x0500001c, 0x592c0005, 0x80000540, - 0x0502001c, 0x412e7800, 0x0501f8a7, 0x05020019, - 0x46000800, 0xffffffff, 0x46001000, 0xffffffff, - 0x4813c857, 0x480fc857, 0x580c0006, 0x90000c82, - 0x05021012, 0x480fc857, 0x400c0000, 0x812c0580, - 0x05020004, 0x580c0001, 0x4802680d, 0x0501f003, - 0x580c0001, 0x48002001, 0x400e5800, 0x05d9fa9b, - 0x90000541, 0x5c025800, 0x5c027800, 0x1c01f000, - 0x80000580, 0x05fdf7fc, 0x80000040, 0x48001806, - 0x4803c857, 0x05fdf7f7, 0x64225a0a, 0x0001f382, - 0x64a65a0a, 0x0001f382, 0x64aa5a0a, 0x0001f382, - 0x64a25a0a, 0x0001f382, 0x643a5a0a, 0x0001f382, - 0x4943c857, 0x4d440000, 0x4d340000, 0x4d2c0000, - 0x4c580000, 0x61c0b00f, 0x417a8800, 0x0001fb00, - 0x05020007, 0x8d3c0506, 0x05000004, 0x59340200, - 0x8c00050e, 0x05020002, 0x0501f811, 0x81468800, - 0x8058b040, 0x05fe07f6, 0x83440480, 0x00000800, - 0x05021006, 0x8d3c0502, 0x05000004, 0x61c2880f, - 0x6040b000, 0x05fdf7ee, 0x5c00b000, 0x5c025800, - 0x5c026800, 0x5c028800, 0x1c01f000, 0x4d2c0000, - 0x4c600000, 0x4c5c0000, 0x4178b800, 0x5936580f, - 0x812e59c0, 0x0500002c, 0x592c0208, 0x82000500, - 0x000000ff, 0x90000592, 0x05000024, 0xb00005a0, - 0x05000022, 0x90000588, 0x05000020, 0x8d3c0500, - 0x05000003, 0x0501f846, 0x0502001c, 0x592cc000, - 0x497a5800, 0x805cb9c0, 0x05020009, 0x59340010, - 0x812c0580, 0x05020004, 0x497a680f, 0x497a6810, - 0x0501f008, 0x4862680f, 0x0501f006, 0x4860b800, - 0x59340010, 0x812c0580, 0x05020002, 0x485e6810, - 0x0005f9f3, 0x0509fcb7, 0x4a025a08, 0x00000103, - 0x49425a0a, 0x497a580d, 0x0529fece, 0x0001fb82, - 0x40625800, 0x05fdf7d7, 0x412cb800, 0x592e5800, - 0x05fdf7d4, 0x5c00b800, 0x5c00c000, 0x5c025800, - 0x1c01f000, 0x4803c856, 0x41781800, 0x5934000f, - 0x80025d40, 0x05000018, 0x592c0009, 0x80200580, - 0x592c0000, 0x05000003, 0x412c1800, 0x05fdf7f9, - 0x592c0a08, 0x82040d00, 0x000000ff, 0x90040d92, - 0x05fc07fa, 0xb0040da0, 0x05fc07f8, 0x90040d88, - 0x05fc07f6, 0x497a5800, 0x800c19c0, 0x05000007, - 0x48001800, 0x80000540, 0x05020003, 0x480e6810, - 0x90000541, 0x1c01f000, 0x4802680f, 0x80000540, - 0x05fe07fd, 0x497a6810, 0x05fdf7fa, 0x592c000c, - 0x81480580, 0x05020003, 0x592c000d, 0x814c0580, - 0x1c01f000, 0x4803c856, 0x4c580000, 0x413c1800, - 0x400c2000, 0x593c0005, 0x80000540, 0x05020014, - 0x6020b000, 0x900c0c07, 0x50040000, 0x81480580, - 0x05020005, 0x80041000, 0x50080000, 0x814c0580, - 0x0500000b, 0x90040c02, 0x8058b040, 0x05fe07f7, - 0x400c2000, 0x580c0001, 0x80001d40, 0x05fe07f1, - 0x90000541, 0x5c00b000, 0x1c01f000, 0x80000580, - 0x05fdf7fd, 0x4937c857, 0x4c580000, 0x4d2c0000, - 0x5934000d, 0x80025d40, 0x05020011, 0x05d9f9d7, - 0x0500000c, 0x492e680d, 0x64065805, 0x497a5806, - 0x912c0c07, 0x6040b000, 0x46000800, 0xffffffff, + 0x41340000, 0x83440d00, 0xfffffff0, 0x82040d80, + 0x000007f0, 0x05000009, 0x83440c80, 0x00000800, + 0x05001006, 0x4a026815, 0x00020000, 0x497a6816, + 0x82000540, 0x20000000, 0x44001000, 0x497a680d, + 0x497a6810, 0x497a680f, 0x4c180000, 0x05fdfcfc, + 0x5c003000, 0x59340a12, 0x4c040000, 0x0505fc11, + 0x5c000800, 0x05000009, 0x82180500, 0x00ffff00, + 0x05000008, 0x59a81040, 0x82081500, 0x00ffff00, + 0x80080580, 0x05000003, 0x80000580, 0x0501f004, + 0x82180500, 0x000000ff, 0x800000d0, 0x80040d80, + 0x05000003, 0x4803c857, 0x48026a12, 0x59340813, + 0x59242005, 0x801021c0, 0x05000008, 0x812000f0, + 0x80102540, 0x40040000, 0x80100580, 0x05000003, + 0x4813c857, 0x48126813, 0x83440580, 0x000007fe, + 0x05020004, 0x4a026802, 0x00fffffe, 0x0501f006, + 0x59340002, 0x80180580, 0x05000003, 0x481bc857, + 0x481a6802, 0x0501f806, 0x80000580, 0x1c01f000, + 0x4803c856, 0x90000541, 0x05fdf7fd, 0x59341200, + 0x84081508, 0x5934000a, 0x8c00050c, 0x0502000e, + 0x599c0018, 0x8c000510, 0x0500000c, 0x59a80006, + 0x8c00050a, 0x05000008, 0x59340c03, 0x82040480, + 0x000007f0, 0x05001005, 0x82040480, 0x00000800, + 0x05021002, 0x84081548, 0x480a6a00, 0x1c01f000, + 0x4947c857, 0x59a800ad, 0x81440480, 0x0502101e, + 0x83200400, 0x0010d8f9, 0x50024800, 0x59240009, + 0x83441480, 0x000007f0, 0x05001009, 0x83440c80, + 0x00000800, 0x05001004, 0x0001fb08, 0x05020011, + 0x0501f008, 0x80081400, 0x0501f003, 0x83441400, + 0x0010db80, 0x50080000, 0x80026d40, 0x05000009, + 0x0501fd0a, 0x05020008, 0x8d0c0502, 0x05000004, + 0x59340200, 0x8c00050e, 0x05000003, 0x90000541, + 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4947c857, 0x4d2c0000, + 0x4d300000, 0x83440580, 0x0000ffff, 0x0500001e, + 0x59a800ad, 0x81440480, 0x0502101f, 0x83441400, + 0x0010db80, 0x50080000, 0x82000500, 0x00ffffff, + 0x80026d40, 0x05000014, 0x45781000, 0x5934000d, + 0x80025d40, 0x05da09cd, 0x59366011, 0x813261c0, + 0x0500000a, 0x4c640000, 0x5930c800, 0x59325809, + 0x052dfa46, 0x05da09c5, 0x0009f810, 0x90666540, + 0x05fe07fa, 0x5c00c800, 0x0501ff71, 0x41365800, + 0x05d9f9b6, 0x80000580, 0x5c026000, 0x5c025800, + 0x1c01f000, 0x90000541, 0x05fdf7fc, 0x4d2c0000, + 0x4d340000, 0x4947c857, 0x05d9f98a, 0x0500001a, + 0x412e6800, 0x497a6816, 0x0531ff4c, 0x83440400, + 0x0010db80, 0x50000000, 0x82000d00, 0xe0000000, + 0x82040d80, 0x20000000, 0x05000007, 0x8c000538, + 0x0502000a, 0x59e00004, 0x8c00050e, 0x05da0c22, + 0x05fdf7f3, 0x82000500, 0x00ffffff, 0x40006800, + 0x80000580, 0x4803c857, 0x5c026800, 0x5c025800, + 0x1c01f000, 0x4803c857, 0x90000541, 0x05fdf7fb, + 0x4c580000, 0x59cc0001, 0x4937c857, 0x82000500, + 0x00ffffff, 0x48026802, 0x497a6c01, 0x497a6a01, + 0x59340200, 0x82000500, 0xffffdffd, 0x48026a00, + 0x4004b000, 0x0505fb4f, 0x05020012, 0x59340403, + 0x82000580, 0x000007fe, 0x05000005, 0x59a8024c, + 0x8c00050a, 0x0502000b, 0x0501f008, 0x59cc0408, + 0x8c000518, 0x05000007, 0x59cc0009, 0x4803505d, + 0x59cc000a, 0x4803505e, 0x8058b1c0, 0x05020001, + 0x59cc0a09, 0x90040d10, 0x59cc0408, 0x90000520, + 0x05000005, 0x84040d40, 0x59a8124c, 0x8408155a, + 0x480b524c, 0x5934000a, 0x82000500, 0xffffffee, + 0x80040540, 0x4802680a, 0x91cca40b, 0x9134ac06, + 0x6008b000, 0x053dffb5, 0x91cca40d, 0x9134ac08, + 0x6008b000, 0x053dffb1, 0x59a820d5, 0x82100d00, + 0x0000f000, 0x82040d80, 0x00003000, 0x05020017, + 0x59cc0013, 0x8c00053e, 0x05000014, 0x59cc0414, + 0x599c0818, 0x8c040512, 0x0500000e, 0x8c00051e, + 0x05000005, 0x59340200, 0x84000546, 0x84000544, + 0x48026a00, 0x59cc0213, 0x8c000516, 0x05000005, + 0x59340200, 0x8400054c, 0x84000544, 0x48026a00, + 0x59cc0a14, 0x0501f005, 0x59340200, 0x84000508, + 0x48026a00, 0x59cc0a18, 0x59a80006, 0x8c00050c, + 0x05020013, 0x82040480, 0x00000800, 0x0502100a, + 0x82040480, 0x00000400, 0x05001003, 0x60000808, + 0x0501f005, 0x82040480, 0x00000200, 0x05001002, + 0x60000804, 0x42001000, 0x00111ffa, 0x58080201, + 0x80041480, 0x05001002, 0x40000800, 0x48066a04, + 0x59340403, 0x82000580, 0x000007fe, 0x05020003, + 0x59cc0a08, 0x48066a04, 0x0501fef5, 0x5c00b000, + 0x1c01f000, 0x4937c857, 0x59cc0207, 0x4803c857, + 0x48026a05, 0x59cc020a, 0x4803c857, 0x48026c05, + 0x59cc2006, 0x59341200, 0x599c0818, 0x5934180a, + 0x4807c857, 0x480bc857, 0x480fc857, 0x82102500, + 0xff000000, 0x82102580, 0x02000000, 0x05000007, + 0x8c00050e, 0x05000009, 0x8c0c0514, 0x05000003, + 0x8c0c050e, 0x05000005, 0x8c040518, 0x05000003, + 0x8408154a, 0x0501f002, 0x8408150a, 0x8c000510, + 0x05000009, 0x8c0c0514, 0x05000003, 0x8c0c0510, + 0x05000005, 0x8c040518, 0x05000003, 0x8408154e, + 0x0501f002, 0x8408150e, 0x8c000512, 0x05000009, + 0x8c0c0514, 0x05000003, 0x8c0c0512, 0x05000005, + 0x8c040518, 0x05000003, 0x8408155c, 0x0501f002, + 0x8408151c, 0x480a6a00, 0x8c000500, 0x05000005, + 0x053dffc6, 0x05000003, 0x840c1d4a, 0x0501f002, + 0x840c1d0a, 0x480e680a, 0x59a8024c, 0x8c000508, + 0x05000007, 0x84000556, 0x4803c857, 0x4803524c, + 0x42001000, 0x00105a99, 0x0511f9d9, 0x1c01f000, + 0x592c0015, 0x4803c857, 0x48026805, 0x80000120, + 0x42002000, 0x02000000, 0x05fdf7bb, 0x4803c856, + 0x4c5c0000, 0x4d2c0000, 0x4c580000, 0x5934000d, + 0x80025d40, 0x05000023, 0x592c0006, 0x90000488, + 0x0500100a, 0x412cb800, 0x592c0001, 0x80025d40, + 0x05fe07fa, 0x05d9f8ac, 0x0500002e, 0x492fc857, + 0x492cb801, 0x0501f01b, 0x912c0c07, 0x6020b000, + 0x50040000, 0x82000580, 0xffffffff, 0x05020006, + 0x80041000, 0x50080000, 0x82000580, 0xffffffff, + 0x05000005, 0x90040c02, 0x8058b040, 0x05fe07f5, + 0x05d5fcf5, 0x45480800, 0x454c1000, 0x592c1806, + 0x800c1800, 0x480e5806, 0x480fc857, 0x0501f010, + 0x05d9f891, 0x05000013, 0x492fc857, 0x492e680d, + 0x497a5805, 0x64065806, 0x494a5807, 0x494e5808, + 0x912c0c09, 0x6038b000, 0x46000800, 0xffffffff, 0x80040800, 0x8058b040, 0x05fe07fc, 0x90000541, - 0x5c025800, 0x5c00b000, 0x1c01f000, 0x4d2c0000, - 0x592e5801, 0x05d9f9de, 0x5c025800, 0x497a5801, - 0x05fdf7ee, 0x4d2c0000, 0x5936580d, 0x812e59c0, - 0x05000005, 0x4937c857, 0x497a680d, 0x05d9f9d4, - 0x90000541, 0x5c025800, 0x1c01f000, 0x59340405, - 0x4937c857, 0x4803c857, 0x8c000508, 0x1c01f000, - 0x4803c856, 0x0505f8dd, 0x05000043, 0x59a80843, - 0x8c040504, 0x0502001b, 0x59a80a49, 0x8c040506, - 0x05000018, 0x053df91b, 0x42024800, 0x0010e512, - 0x61fa880f, 0x59240809, 0x83440480, 0x000007f0, - 0x80040400, 0x50026800, 0x813669c0, 0x0500000a, - 0x59240200, 0x90000503, 0x90000583, 0x05020006, - 0x0501fa49, 0x05020004, 0x59340200, 0x8400055a, - 0x48026a00, 0x91264c0d, 0x8058b040, 0x05fe07ee, - 0x59a80006, 0x8c00051c, 0x05020003, 0x8d0c0520, - 0x05000013, 0x61c0b00f, 0x417a8800, 0x0001fb00, - 0x0502000c, 0x0501fa38, 0x0502000a, 0x59a8003d, - 0x59340802, 0x80040580, 0x82000500, 0x00ffff00, - 0x05020004, 0x59340200, 0x8400055a, 0x48026a00, - 0x81468800, 0x8058b040, 0x05fe07f1, 0x0501f8d1, - 0x05000003, 0x59a8085b, 0x0501f007, 0x6140080f, - 0x59a80006, 0x8c00051c, 0x05020003, 0x8d0c0520, - 0x05000004, 0x42001000, 0x0010582b, 0x050dffd5, - 0x1c01f000, 0x053df8df, 0x42024800, 0x0010e512, - 0x61fa880f, 0x59240809, 0x83440480, 0x000007f0, - 0x80040400, 0x50026800, 0x813669c0, 0x05000008, - 0x59240200, 0x90000503, 0x90000583, 0x05020004, - 0x59340200, 0x8400051a, 0x48026a00, 0x91264c0d, - 0x8058b040, 0x05fe07f0, 0x05fdf7c6, 0x4d300000, - 0x4d340000, 0x4d440000, 0x4d3c0000, 0x4c580000, - 0x4d200000, 0x4d240000, 0x42001000, 0x0010582b, - 0x050dfe81, 0x59a80a49, 0x4807c857, 0x8c040508, - 0x0502002e, 0x8c04050a, 0x05020003, 0x8c040506, - 0x05000042, 0x053df8b7, 0x42024800, 0x0010e512, - 0x41781000, 0x61fa880f, 0x59240809, 0x83440480, - 0x000007f0, 0x80040400, 0x50026800, 0x813669c0, - 0x0500000b, 0x59240200, 0x90000503, 0x90000583, - 0x05020007, 0x59340200, 0x8c00051a, 0x05000004, - 0x8400051a, 0x48026a00, 0x80081000, 0x91264c0d, - 0x8058b040, 0x05fe07ed, 0x59a80a49, 0x8c04050a, - 0x05020026, 0x800811c0, 0x0500004b, 0x59a80a49, - 0x8c04050a, 0x05020021, 0x8d0c0520, 0x05000005, - 0x6140080f, 0x42001000, 0x0010582b, 0x050dff85, - 0x05e5fc61, 0x0501f040, 0x59a80249, 0x4803c857, - 0x8c000516, 0x0502003c, 0x59aa68c2, 0x813669c0, - 0x05000039, 0x59340400, 0x82000580, 0x00000404, - 0x05020035, 0x051dfb92, 0x05d40d68, 0x4933c857, - 0x64066407, 0x4936600a, 0x4926601d, 0x417a7800, - 0x05fdfc6b, 0x60140800, 0x05fdfc73, 0x600e7000, - 0x0009f800, 0x0501f028, 0x61c0b00f, 0x80028d80, - 0x0001fb00, 0x05020021, 0x59340200, 0x8c00051a, - 0x0500001e, 0x59368c03, 0x417a7800, 0x60a68000, - 0x0501f9e9, 0x59240400, 0x8c00050a, 0x05020003, - 0x41783000, 0x0535ff19, 0x59340200, 0x84000558, - 0x8400051a, 0x48026a00, 0x4937c857, 0x4a026c00, - 0x00000707, 0x05fdff2c, 0x60a68000, 0x0515fc7c, - 0x4df00000, 0x417a6000, 0x0515f9ab, 0x0515fab0, - 0x0515faf9, 0x417a7800, 0x0515f87e, 0x0535fdd2, - 0x5c03e000, 0x05140c63, 0x81468800, 0x8058b040, - 0x05fe07dc, 0x5c024800, 0x5c024000, 0x5c00b000, - 0x5c027800, 0x5c028800, 0x5c026800, 0x5c026000, - 0x1c01f000, 0x4933c857, 0x5930380a, 0x581c0200, - 0x8400051a, 0x48003a00, 0x1c01f000, 0x4933c857, - 0x5930000a, 0x50000000, 0x8c000508, 0x1c01f000, - 0x5930000a, 0x50000000, 0x4933c857, 0x4803c857, - 0x8c00050e, 0x1c01f000, 0x5930000a, 0x50000000, - 0x8c00050a, 0x1c01f000, 0x4933c856, 0x0501f96e, - 0x05000005, 0x59340400, 0x82000d00, 0x000000ff, - 0x90041585, 0x1c01f000, 0x4803c856, 0x59a80a49, - 0x8c040506, 0x0500000a, 0x5930081d, 0x58040200, - 0x8c000500, 0x05000006, 0x58040009, 0x9000040e, - 0x50000800, 0x58040200, 0x8c00051a, 0x1c01f000, - 0x4d340000, 0x4c580000, 0x59a80a49, 0x8c040506, - 0x05000014, 0x053df817, 0x42000800, 0x0010e512, - 0x58041009, 0x9008040e, 0x50026800, 0x813669c0, - 0x05000008, 0x58040200, 0x90000503, 0x90000583, - 0x05020004, 0x59340200, 0x8c00051a, 0x05020005, - 0x90040c0d, 0x8058b040, 0x05fe07f2, 0x80000580, - 0x5c00b000, 0x5c026800, 0x1c01f000, 0x4937c857, - 0x493fc857, 0x59341200, 0x813e79c0, 0x05000003, - 0x8408155e, 0x0501f002, 0x8408151e, 0x480a6a00, - 0x1c01f000, 0x4937c857, 0x05e5fb06, 0x05000005, - 0x59a8085a, 0x42001000, 0x00105905, 0x050dfee5, - 0x1c01f000, 0x4937c857, 0x42001000, 0x00105905, - 0x050dfdad, 0x59a81249, 0x84081512, 0x480b5249, - 0x1c01f000, 0x4c380000, 0x4c340000, 0x4c240000, - 0x4c600000, 0x4008c000, 0x83440480, 0x00000800, - 0x05021065, 0x80002d80, 0x41442000, 0x83447400, - 0x0010d400, 0x61c0b00f, 0x83444c80, 0x000007f0, - 0x05021005, 0x82600480, 0x00fffffc, 0x05001005, - 0x0501f059, 0x6040b000, 0x59240009, 0x80247400, - 0x50380000, 0x80000540, 0x05020030, 0x41440000, - 0x80100580, 0x05020060, 0x40102800, 0x82104c80, - 0x000007f0, 0x05001027, 0x59a80249, 0x8c00050a, + 0x5c00b000, 0x5c025800, 0x5c00b800, 0x1c01f000, + 0x80000580, 0x05fdf7fb, 0x4803c856, 0x4d3c0000, + 0x4d2c0000, 0x5934000d, 0x80025d40, 0x0500001c, + 0x592c0005, 0x80000540, 0x0502001c, 0x412e7800, + 0x0501f8ab, 0x05020019, 0x46000800, 0xffffffff, + 0x46001000, 0xffffffff, 0x4813c857, 0x480fc857, + 0x580c0006, 0x90000c82, 0x05021012, 0x480fc857, + 0x400c0000, 0x812c0580, 0x05020004, 0x580c0001, + 0x4802680d, 0x0501f003, 0x580c0001, 0x48002001, + 0x400e5800, 0x05d9f86c, 0x90000541, 0x5c025800, + 0x5c027800, 0x1c01f000, 0x80000580, 0x05fdf7fc, + 0x80000040, 0x48001806, 0x4803c857, 0x05fdf7f7, + 0x64225a0a, 0x0001f3a8, 0x64a65a0a, 0x0001f3a8, + 0x64aa5a0a, 0x0001f3a8, 0x64a25a0a, 0x0001f3a8, + 0x643a5a0a, 0x0001f3a8, 0x4943c857, 0x4d440000, + 0x4d340000, 0x4d2c0000, 0x4c580000, 0x59a8b0ac, + 0x8d3c0502, 0x05000002, 0x59a8b0ad, 0x417a8800, + 0x0001fb08, 0x05020007, 0x8d3c0506, 0x05000004, + 0x59340200, 0x8c00050e, 0x05020002, 0x0501f812, + 0x81468800, 0x83440580, 0x000007f0, 0x05020004, + 0x8d3c0502, 0x05020002, 0x60028810, 0x8058b040, + 0x05fe07f0, 0x59a800ad, 0x81440480, 0x05021001, + 0x5c00b000, 0x5c025800, 0x5c026800, 0x5c028800, + 0x1c01f000, 0x4d2c0000, 0x4c600000, 0x4c5c0000, + 0x4178b800, 0x5936580f, 0x812e59c0, 0x0500002c, + 0x592c0208, 0x82000500, 0x000000ff, 0x90000592, + 0x05000024, 0xb00005a0, 0x05000022, 0x90000588, + 0x05000020, 0x8d3c0500, 0x05000003, 0x0501f846, + 0x0502001c, 0x592cc000, 0x497a5800, 0x805cb9c0, + 0x05020009, 0x59340010, 0x812c0580, 0x05020004, + 0x497a680f, 0x497a6810, 0x0501f008, 0x4862680f, + 0x0501f006, 0x4860b800, 0x59340010, 0x812c0580, + 0x05020002, 0x485e6810, 0x0005fa1a, 0x0509fdd5, + 0x4a025a08, 0x00000103, 0x49425a0a, 0x497a580d, + 0x052df9fd, 0x0001fba8, 0x40625800, 0x05fdf7d7, + 0x412cb800, 0x592e5800, 0x05fdf7d4, 0x5c00b800, + 0x5c00c000, 0x5c025800, 0x1c01f000, 0x4803c856, + 0x41781800, 0x5934000f, 0x80025d40, 0x05000018, + 0x592c0009, 0x80200580, 0x592c0000, 0x05000003, + 0x412c1800, 0x05fdf7f9, 0x592c0a08, 0x82040d00, + 0x000000ff, 0x90040d92, 0x05fc07fa, 0xb0040da0, + 0x05fc07f8, 0x90040d88, 0x05fc07f6, 0x497a5800, + 0x800c19c0, 0x05000007, 0x48001800, 0x80000540, + 0x05020003, 0x480e6810, 0x90000541, 0x1c01f000, + 0x4802680f, 0x80000540, 0x05fe07fd, 0x497a6810, + 0x05fdf7fa, 0x592c000c, 0x81480580, 0x05020003, + 0x592c000d, 0x814c0580, 0x1c01f000, 0x4803c856, + 0x4c580000, 0x413c1800, 0x400c2000, 0x593c0005, + 0x80000540, 0x05020014, 0x6020b000, 0x900c0c07, + 0x50040000, 0x81480580, 0x05020005, 0x80041000, + 0x50080000, 0x814c0580, 0x0500000b, 0x90040c02, + 0x8058b040, 0x05fe07f7, 0x400c2000, 0x580c0001, + 0x80001d40, 0x05fe07f1, 0x90000541, 0x5c00b000, + 0x1c01f000, 0x80000580, 0x05fdf7fd, 0x4937c857, + 0x4c580000, 0x4d2c0000, 0x5934000d, 0x80025d40, + 0x05020011, 0x05d5ffa4, 0x0500000c, 0x492e680d, + 0x64065805, 0x497a5806, 0x912c0c07, 0x6040b000, + 0x46000800, 0xffffffff, 0x80040800, 0x8058b040, + 0x05fe07fc, 0x90000541, 0x5c025800, 0x5c00b000, + 0x1c01f000, 0x4d2c0000, 0x592e5801, 0x05d5ffab, + 0x5c025800, 0x497a5801, 0x05fdf7ee, 0x4d2c0000, + 0x5936580d, 0x812e59c0, 0x05000005, 0x4937c857, + 0x497a680d, 0x05d5ffa1, 0x90000541, 0x5c025800, + 0x1c01f000, 0x59340405, 0x4937c857, 0x4803c857, + 0x8c000508, 0x1c01f000, 0x4803c856, 0x0505f95d, + 0x05000047, 0x59a80846, 0x8c040504, 0x0502001b, + 0x59a80a4c, 0x8c040506, 0x05000018, 0x053dfe2c, + 0x42024800, 0x001124b6, 0x61fa880f, 0x59240809, + 0x83440480, 0x000007f0, 0x80040400, 0x50026800, + 0x813669c0, 0x0500000a, 0x59240200, 0x90000503, + 0x90000583, 0x05020006, 0x0501faa8, 0x05020004, + 0x59340200, 0x8400055a, 0x48026a00, 0x91264c0d, + 0x8058b040, 0x05fe07ee, 0x59a80006, 0x8c00051c, + 0x05020003, 0x8d0c0520, 0x05000017, 0x59a8b0ac, + 0x417a8800, 0x0001fb08, 0x0502000c, 0x0501fa97, + 0x0502000a, 0x59a80040, 0x59340802, 0x80040580, + 0x82000500, 0x00ffff00, 0x05020004, 0x59340200, + 0x8400055a, 0x48026a00, 0x81468800, 0x83440580, + 0x000007f0, 0x05020002, 0x60028810, 0x8058b040, + 0x05fe07ed, 0x0501f8d5, 0x05000003, 0x59a8085e, + 0x0501f007, 0x6140080f, 0x59a80006, 0x8c00051c, + 0x05020003, 0x8d0c0520, 0x05000004, 0x42001000, + 0x00105a99, 0x0511f9cb, 0x1c01f000, 0x053dfdec, + 0x42024800, 0x001124b6, 0x61fa880f, 0x59240809, + 0x83440480, 0x000007f0, 0x80040400, 0x50026800, + 0x813669c0, 0x05000008, 0x59240200, 0x90000503, + 0x90000583, 0x05020004, 0x59340200, 0x8400051a, + 0x48026a00, 0x91264c0d, 0x8058b040, 0x05fe07f0, + 0x05fdf7c2, 0x4d300000, 0x4d340000, 0x4d440000, + 0x4d3c0000, 0x4c580000, 0x4d200000, 0x4d240000, + 0x42001000, 0x00105a99, 0x0511f82d, 0x59a80a4c, + 0x4807c857, 0x8c040508, 0x0502002e, 0x8c04050a, + 0x05020003, 0x8c040506, 0x05000042, 0x053dfdc4, + 0x42024800, 0x001124b6, 0x41781000, 0x61fa880f, + 0x59240809, 0x83440480, 0x000007f0, 0x80040400, + 0x50026800, 0x813669c0, 0x0500000b, 0x59240200, + 0x90000503, 0x90000583, 0x05020007, 0x59340200, + 0x8c00051a, 0x05000004, 0x8400051a, 0x48026a00, + 0x80081000, 0x91264c0d, 0x8058b040, 0x05fe07ed, + 0x59a80a4c, 0x8c04050a, 0x05020026, 0x800811c0, + 0x0500004f, 0x59a80a4c, 0x8c04050a, 0x05020021, + 0x8d0c0520, 0x05000005, 0x6140080f, 0x42001000, + 0x00105a99, 0x0511f97b, 0x05e5fa8b, 0x0501f044, + 0x59a8024c, 0x4803c857, 0x8c000516, 0x05020040, + 0x59aa68c7, 0x813669c0, 0x0500003d, 0x59340400, + 0x82000580, 0x00000404, 0x05020039, 0x051dfe39, + 0x05d40b35, 0x4933c857, 0x64066407, 0x4936600a, + 0x4926601d, 0x417a7800, 0x05fdfc10, 0x60140800, + 0x05fdfc18, 0x600e7000, 0x0009f839, 0x0501f02c, + 0x59a8b0ac, 0x80028d80, 0x0001fb08, 0x05020021, + 0x59340200, 0x8c00051a, 0x0500001e, 0x59368c03, + 0x417a7800, 0x60a68000, 0x0501fa44, 0x59240400, + 0x8c00050a, 0x05020003, 0x41783000, 0x0539fbf2, + 0x59340200, 0x84000558, 0x8400051a, 0x48026a00, + 0x4937c857, 0x4a026c00, 0x00000707, 0x05fdff28, + 0x60a68000, 0x0515fecc, 0x4df00000, 0x417a6000, + 0x0515fbf6, 0x0515fd01, 0x0515fd4a, 0x417a7800, + 0x0515fac9, 0x0539fa7b, 0x5c03e000, 0x05140eb3, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07d8, 0x5c024800, + 0x5c024000, 0x5c00b000, 0x5c027800, 0x5c028800, + 0x5c026800, 0x5c026000, 0x1c01f000, 0x4933c857, + 0x5930380a, 0x581c0200, 0x8400051a, 0x48003a00, + 0x1c01f000, 0x4933c857, 0x5930000a, 0x50000000, + 0x8c000508, 0x1c01f000, 0x5930000a, 0x50000000, + 0x4933c857, 0x4803c857, 0x8c00050e, 0x1c01f000, + 0x5930000a, 0x50000000, 0x8c00050a, 0x1c01f000, + 0x4933c856, 0x0501f9c5, 0x05000005, 0x59340400, + 0x82000d00, 0x000000ff, 0x90041585, 0x1c01f000, + 0x4803c856, 0x59a80a4c, 0x8c040506, 0x0500000a, + 0x5930081d, 0x58040200, 0x8c000500, 0x05000006, + 0x58040009, 0x9000040e, 0x50000800, 0x58040200, + 0x8c00051a, 0x1c01f000, 0x4d340000, 0x4c580000, + 0x59a80a4c, 0x8c040506, 0x05000014, 0x053dfd20, + 0x42000800, 0x001124b6, 0x58041009, 0x9008040e, + 0x50026800, 0x813669c0, 0x05000008, 0x58040200, + 0x90000503, 0x90000583, 0x05020004, 0x59340200, + 0x8c00051a, 0x05020005, 0x90040c0d, 0x8058b040, + 0x05fe07f2, 0x80000580, 0x5c00b000, 0x5c026800, + 0x1c01f000, 0x4937c857, 0x493fc857, 0x59341200, + 0x813e79c0, 0x05000003, 0x8408155e, 0x0501f002, + 0x8408151e, 0x480a6a00, 0x1c01f000, 0x4937c857, + 0x05e5f92c, 0x05000005, 0x59a8085d, 0x42001000, + 0x00105b77, 0x0511f8d7, 0x1c01f000, 0x4937c857, + 0x42001000, 0x00105b77, 0x050dff55, 0x59a8124c, + 0x84081512, 0x480b524c, 0x1c01f000, 0x4c380000, + 0x4c340000, 0x4c240000, 0x4c600000, 0x4008c000, + 0x59a800ad, 0x81440480, 0x050210a9, 0x80002d80, + 0x41442000, 0x83447400, 0x0010db80, 0x59a8b0ac, + 0x83444c80, 0x000007f0, 0x05001004, 0x83441c80, + 0x00000800, 0x05001005, 0x82600480, 0x00fffffc, + 0x05001005, 0x0501f09a, 0x6040b000, 0x59240009, + 0x80247400, 0x50380000, 0x80000540, 0x05020033, + 0x41440000, 0x80100580, 0x050200a4, 0x40102800, + 0x82104c80, 0x000007f0, 0x0500102a, 0x82104c80, + 0x00000800, 0x05021027, 0x59a8024c, 0x8c00050a, 0x0500000d, 0x82104d80, 0x000007fe, 0x05020005, - 0x82604d80, 0x00fffffe, 0x05020043, 0x0501f01d, + 0x82604d80, 0x00fffffe, 0x05020081, 0x0501f01d, 0x59240200, 0x82000500, 0x00000220, 0x05020005, - 0x0501f04a, 0x59240200, 0x8c00050a, 0x05000047, + 0x0501f08b, 0x59240200, 0x8c00050a, 0x05000088, 0x82104d80, 0x000007fc, 0x05020005, 0x82604d80, - 0x00fffffc, 0x05020034, 0x0501f00e, 0x82104d80, + 0x00fffffc, 0x05020072, 0x0501f00e, 0x82104d80, 0x000007fd, 0x05020005, 0x82604d80, 0x00fffffd, - 0x0502002d, 0x0501f007, 0x82104d80, 0x000007ff, - 0x05020029, 0x82604d80, 0x00ffffff, 0x05020026, - 0x84142d5e, 0x0501f034, 0x40006800, 0x58343002, - 0x82183500, 0x00ffffff, 0x40180000, 0x80600580, - 0x05020022, 0x58340813, 0x80040130, 0x81200580, - 0x0502001e, 0x82040500, 0x00ffffff, 0x59240805, + 0x0502006b, 0x0501f007, 0x82104d80, 0x000007ff, + 0x05020067, 0x82604d80, 0x00ffffff, 0x05020064, + 0x84142d5e, 0x0501f075, 0x82000d00, 0xe0000000, + 0x05000025, 0x8d0c0538, 0x05020003, 0x60800000, + 0x0501f0b2, 0x82000500, 0x00ffffff, 0x8c04053c, + 0x05000013, 0x40003000, 0x80600580, 0x05000021, + 0x40100000, 0x81440580, 0x05020064, 0x4c200000, + 0x4c180000, 0x4c100000, 0x4d440000, 0x40128800, + 0x05fdfc37, 0x5c028800, 0x5c002000, 0x5c003000, + 0x5c004000, 0x05020077, 0x0501f04e, 0x82041d80, + 0x20000000, 0x05000008, 0x82041d80, 0xa0000000, + 0x05000005, 0x82041d80, 0x80000000, 0x05d60a22, + 0x84040d7a, 0x40006800, 0x58343002, 0x82183500, + 0x00ffffff, 0x40180000, 0x80600580, 0x05020039, + 0x800409c0, 0x05000014, 0x82041d80, 0x20000000, + 0x05000011, 0x82041d80, 0xa0000000, 0x05020005, + 0x50380000, 0x82000540, 0xa0000000, 0x44007000, + 0x4c200000, 0x4c100000, 0x4d440000, 0x40128800, + 0x05fdfc0f, 0x5c028800, 0x5c002000, 0x5c004000, + 0x05020050, 0x58340813, 0x80040130, 0x81200580, + 0x05020020, 0x82040500, 0x00ffffff, 0x59240805, 0x80040580, 0x05000004, 0x812000f0, 0x80040d40, 0x48046813, 0x40100000, 0x81440580, 0x05020009, - 0x40366800, 0x8c200508, 0x05000052, 0x05fdff53, - 0x05020050, 0x4947c857, 0x60740000, 0x0501f04e, - 0x4947c857, 0x480bc857, 0x4823c857, 0x60680000, - 0x0501f049, 0x4947c857, 0x4863c857, 0x4813c857, - 0x60640000, 0x0501f044, 0x40100000, 0x81440580, - 0x05020009, 0x58343002, 0x4947c857, 0x481bc857, - 0x606c0000, 0x0501f03c, 0x4947c857, 0x607c0000, - 0x0501f039, 0x80102000, 0x80387000, 0x83444c80, - 0x000007f0, 0x05001007, 0x82104d80, 0x00000800, - 0x0502000a, 0x59247009, 0x61c0200f, 0x0501f007, - 0x82104d80, 0x000007f0, 0x05020004, 0x41782000, - 0x42007000, 0x0010d400, 0x8058b040, 0x05fe0789, - 0x801429c0, 0x05020005, 0x05d5fc3c, 0x4947c857, - 0x60280000, 0x0501f020, 0x4d2c0000, 0x4c180000, - 0x40603000, 0x05fdfb6f, 0x4947c857, 0x4937c857, - 0x5c003000, 0x5c025800, 0x05fe07f5, 0x497a6a12, - 0x59a80249, 0x8c00050a, 0x0502000d, 0x82600500, - 0x00ffff00, 0x05000006, 0x59a8483d, 0x82244d00, - 0x00ffff00, 0x80240580, 0x05020005, 0x82600500, - 0x000000ff, 0x800000d0, 0x48026a12, 0x48626802, - 0x59244805, 0x812000f0, 0x80244d40, 0x48266813, - 0x80000580, 0x80000540, 0x5c00c000, 0x5c004800, - 0x5c006800, 0x5c007000, 0x1c01f000, 0x5934000f, - 0x8d0c0512, 0x05020005, 0x5934140b, 0x80081040, - 0x05001002, 0x480a6c0b, 0x80000540, 0x00020b0d, - 0x1c01f000, 0x59340a00, 0x84040d08, 0x80000540, - 0x05000005, 0x5934000a, 0x8400054c, 0x4802680a, - 0x0501f004, 0x599c0018, 0x8c000510, 0x05000002, - 0x84040d48, 0x48066a00, 0x1c01f000, 0x4803c857, - 0x4947c857, 0x4c300000, 0x90006530, 0x05000005, - 0x4c000000, 0x0529ff89, 0x5c000000, 0x0502000e, - 0x8c00050e, 0x05000009, 0x0501f88f, 0x0502000a, - 0x4937c857, 0x592c020b, 0x8c00051c, 0x05020003, - 0x41240800, 0x0501f89f, 0x80000580, 0x5c006000, - 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4803c857, - 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80, - 0x61c0b00f, 0x4c040000, 0x40068800, 0x4c080000, - 0x40080000, 0x05fdffe0, 0x5c001000, 0x5c000800, - 0x80040800, 0x8058b040, 0x05fe07f7, 0x8c080514, - 0x05000005, 0x84081514, 0x6004b000, 0x61f0080f, - 0x05fdf7f1, 0x4d300000, 0x4d400000, 0x4d240000, - 0x0501fb9a, 0x61fe89ff, 0x42026000, 0x00111a70, - 0x4a02600a, 0x00110210, 0x417a4800, 0x4926601d, - 0x60a68000, 0x0515fafa, 0x4df00000, 0x0515f930, - 0x0535fc55, 0x5c03e000, 0x05140ae6, 0x5c024800, - 0x5c028000, 0x5c026000, 0x5c028800, 0x5c00b000, - 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80, + 0x40366800, 0x8c200508, 0x05000063, 0x05fdff11, + 0x05020061, 0x4947c857, 0x60740000, 0x0501f05f, + 0x4947c857, 0x4863c857, 0x4823c857, 0x58341813, + 0x800c1930, 0x60680000, 0x0501f058, 0x4947c857, + 0x4863c857, 0x4813c857, 0x60640000, 0x0501f053, + 0x40100000, 0x81440580, 0x0502000c, 0x58343002, + 0x58341813, 0x800c1930, 0x4947c857, 0x481bc857, + 0x480fc857, 0x606c0000, 0x0501f048, 0x4947c857, + 0x607c0000, 0x0501f045, 0x80102000, 0x80387000, + 0x82104d80, 0x000007f0, 0x0500000a, 0x59a800ad, + 0x80100580, 0x0500000f, 0x82104d80, 0x00000800, + 0x0502000f, 0x59247009, 0x61c0200f, 0x0501f00c, + 0x59a800ad, 0x82000580, 0x00000800, 0x05000005, + 0x60002010, 0x42007000, 0x0010e380, 0x0501f004, + 0x41782000, 0x42007000, 0x0010db80, 0x8058b040, + 0x05fe073d, 0x801429c0, 0x05020005, 0x05d5f9b6, + 0x4947c857, 0x60280000, 0x0501f024, 0x4d2c0000, + 0x4c180000, 0x40603000, 0x8c20053e, 0x05000003, + 0x05fdfabf, 0x0501f002, 0x05fdfac5, 0x4947c857, + 0x4937c857, 0x5c003000, 0x5c025800, 0x05fe07f1, + 0x497a6a12, 0x59a8024c, 0x8c00050a, 0x0502000d, + 0x82600500, 0x00ffff00, 0x05000006, 0x59a84840, + 0x82244d00, 0x00ffff00, 0x80240580, 0x05020005, + 0x82600500, 0x000000ff, 0x800000d0, 0x48026a12, + 0x48626802, 0x59244805, 0x812000f0, 0x80244d40, + 0x48266813, 0x80000580, 0x80000540, 0x5c00c000, + 0x5c004800, 0x5c006800, 0x5c007000, 0x1c01f000, + 0x5934000f, 0x8d0c0512, 0x05020005, 0x5934140b, + 0x80081040, 0x05001002, 0x480a6c0b, 0x80000540, + 0x00020b33, 0x1c01f000, 0x59340a00, 0x84040d08, + 0x80000540, 0x05000005, 0x5934000a, 0x8400054c, + 0x4802680a, 0x0501f004, 0x599c0018, 0x8c000510, + 0x05000002, 0x84040d48, 0x48066a00, 0x1c01f000, + 0x4803c857, 0x4947c857, 0x4c300000, 0x90006530, + 0x05000005, 0x4c000000, 0x052dfa60, 0x5c000000, + 0x0502000e, 0x8c00050e, 0x05000009, 0x0501f893, + 0x0502000a, 0x4937c857, 0x592c020b, 0x8c00051c, + 0x05020003, 0x41240800, 0x0501f8a9, 0x80000580, + 0x5c006000, 0x1c01f000, 0x90000541, 0x05fdf7fd, + 0x4803c857, 0x4c580000, 0x4d440000, 0x40001000, + 0x80000d80, 0x59a8b0ac, 0x4c040000, 0x40068800, + 0x4c080000, 0x40080000, 0x05fdffe0, 0x5c001000, + 0x5c000800, 0x80040800, 0x82040580, 0x000007f0, + 0x05020002, 0x60000810, 0x8058b040, 0x05fe07f3, + 0x8c080514, 0x05000005, 0x84081514, 0x6004b000, + 0x61f0080f, 0x05fdf7ed, 0x4d300000, 0x4d400000, + 0x4d240000, 0x0501fba6, 0x61fe89ff, 0x42026000, + 0x00115a14, 0x4a02600a, 0x001141b4, 0x417a4800, + 0x4926601d, 0x60a68000, 0x0515fcef, 0x4df00000, + 0x0515fb26, 0x0539f8a3, 0x5c03e000, 0x05140cdb, + 0x5c024800, 0x5c028000, 0x5c026000, 0x5c028800, + 0x5c00b000, 0x1c01f000, 0x4c5c0000, 0x59340400, + 0x8200bd80, 0x00000606, 0x5c00b800, 0x1c01f000, + 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000404, + 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x59340400, + 0x8200bd80, 0x00000404, 0x05000003, 0x8200bd80, 0x00000606, 0x5c00b800, 0x1c01f000, 0x4c5c0000, - 0x59340400, 0x8200bd80, 0x00000404, 0x5c00b800, - 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80, - 0x00000404, 0x05000003, 0x8200bd80, 0x00000606, - 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x4c600000, - 0x59340400, 0x8200bd00, 0x0000ff00, 0x825cc580, - 0x00000400, 0x05000003, 0x825cc580, 0x00000600, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4c5c0000, - 0x59340400, 0x82000500, 0x000000ff, 0x9000bd83, - 0x05000002, 0x9000bd85, 0x5c00b800, 0x1c01f000, - 0x5c000000, 0x4c000000, 0x4803c857, 0x4c5c0000, - 0x59340400, 0x82000500, 0x0000ff00, 0x8400b9c0, - 0x805c0580, 0x4937c857, 0x4803c857, 0x48026c00, - 0x5c00b800, 0x1c01f000, 0x4c040000, 0x4c080000, - 0x592c020b, 0x8c00050c, 0x0500000d, 0x592e8c0a, - 0x82000500, 0x00000080, 0x84000548, 0x4d3c0000, - 0x60027820, 0x05fdff76, 0x5c027800, 0x90000541, - 0x5c001000, 0x5c000800, 0x1c01f000, 0x80000580, - 0x05fdf7fc, 0x59340013, 0x80024130, 0x83224c00, - 0x0010d17b, 0x51264800, 0x812649c0, 0x05d40b63, - 0x1c01f000, 0x83440c80, 0x00000800, 0x05021013, - 0x83200400, 0x0010d17b, 0x50024800, 0x59240009, - 0x83440c80, 0x000007f0, 0x05001003, 0x80040c00, - 0x0501f003, 0x83440c00, 0x0010d400, 0x50040000, - 0x80026d40, 0x05000005, 0x59340013, 0x80000130, - 0x81200580, 0x1c01f000, 0x90000541, 0x05fdf7fe, - 0x4937c857, 0x4c580000, 0x4d440000, 0x59368c03, - 0x83440580, 0x0000ffff, 0x05000010, 0x83441480, - 0x000007f0, 0x05021003, 0x05fdfb12, 0x0501f00b, - 0x58040009, 0x80080c00, 0x50040000, 0x81340580, - 0x05d60b3a, 0x4d2c0000, 0x45780800, 0x41365800, - 0x05d5feee, 0x5c025800, 0x80000580, 0x5c028800, - 0x5c00b000, 0x1c01f000, 0x592c040f, 0x82000500, - 0x0000e000, 0x82000580, 0x00006000, 0x0500001e, - 0x916c0583, 0x05000011, 0x916c0582, 0x05020100, - 0x59a80249, 0x90000d38, 0x05020005, 0x59a80841, - 0x800409c0, 0x05000009, 0x0501f0f9, 0x90000d03, - 0x90040d83, 0x050200f6, 0x90000d28, 0x05020003, - 0x8c00050c, 0x050000f2, 0x592e440b, 0x83224500, - 0x000000ff, 0x0509f894, 0x050200cf, 0x592c100e, - 0x82081500, 0x00ffffff, 0x59240005, 0x80080580, - 0x050000d3, 0x592c0c0f, 0x82040d00, 0x0000e000, - 0x82040480, 0x00008000, 0x050210cf, 0x592e8c0a, - 0x83440480, 0x00000800, 0x05001015, 0x83440580, - 0x0000ffff, 0x050200ba, 0x800409c0, 0x050200f0, - 0x592c240d, 0x82100500, 0xffffff00, 0x050200be, - 0x480bc857, 0x4813c857, 0x592c0011, 0x82000480, - 0x00000841, 0x050210be, 0x614e7000, 0x0501fac3, - 0x42026800, 0x00110210, 0x0501f093, 0x800409c0, - 0x050200df, 0x41784000, 0x05fdfe1f, 0x050200cc, - 0x592c240f, 0x8c100514, 0x0500000d, 0x592c240d, - 0x82100500, 0xffffff00, 0x050200a7, 0x901005a0, - 0x050200a9, 0x05fdff32, 0x050200b4, 0x05fdfb97, - 0x60180800, 0x05fdf9f5, 0x0501f0bb, 0x59342204, - 0x592c0011, 0x80100480, 0x050010a1, 0x614e7000, - 0x592c240d, 0x82100500, 0xffffff00, 0x05020096, - 0x4813c857, 0x592c040b, 0x82000500, 0x0000f000, - 0x82000580, 0x00003000, 0x05020006, 0x59340200, - 0x8c000508, 0x05020003, 0x90100583, 0x05020084, - 0x592c0010, 0x800001c0, 0x05000065, 0x90100584, - 0x05000083, 0xb0100591, 0x05000081, 0x90100583, - 0x0500000f, 0x901005a0, 0x05000039, 0x901005a4, - 0x05000033, 0x901005a1, 0x05000033, 0xb0100590, - 0x0500002b, 0xb0100592, 0x05000027, 0x90100585, - 0x05020055, 0x60067000, 0x0501f018, 0x600a7000, - 0x59a800d1, 0x8c000502, 0x05000014, 0x05fdfef6, - 0x05000012, 0x59340212, 0x82000500, 0x0000ff00, - 0x60401000, 0x0502000b, 0x59a80249, 0x8c000506, - 0x0502005b, 0x60201000, 0x59340002, 0x82000500, - 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000003, - 0x0501f96f, 0x05020052, 0x051df8c1, 0x05000066, - 0x64426407, 0x4926601d, 0x4936600a, 0x600c0800, - 0x91380582, 0x05000002, 0x602c0800, 0x05fdf9a2, - 0x0501f036, 0x60027000, 0x0501f002, 0x60127000, - 0x05fdfeea, 0x0502005d, 0x0501f02b, 0x60ce7000, - 0x0501f004, 0x60167000, 0x0501f002, 0x600e7000, - 0x05fdfed9, 0x05020055, 0x59a800d1, 0x8c000502, - 0x05000014, 0x05fdfec8, 0x05000012, 0x59340212, - 0x82000500, 0x0000ff00, 0x60401000, 0x0502000b, - 0x59a80249, 0x8c000506, 0x0502002d, 0x60201000, - 0x59340002, 0x82000500, 0x00ff0000, 0x82000580, - 0x00ff0000, 0x05000003, 0x0501f941, 0x05020024, - 0x051df893, 0x05000038, 0x64426407, 0x4926601d, - 0x4936600a, 0x60140800, 0x91380583, 0x05000002, - 0x60240800, 0x05fdf974, 0x0501f008, 0x90102591, - 0x05020029, 0x051df886, 0x0500002b, 0x64426407, - 0x4926601d, 0x4936600a, 0x0529ffe8, 0x492e6009, - 0x4932580c, 0x83340580, 0x00110210, 0x05000007, - 0x592c0c0f, 0x8c040518, 0x05000004, 0x59340200, - 0x84000514, 0x48026a00, 0x0009f800, 0x80000580, - 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x60281000, - 0x0501f012, 0x60381000, 0x0501f010, 0x603c1000, - 0x0501f00e, 0x60401000, 0x0501f00c, 0x60581000, - 0x0501f00a, 0x605c1000, 0x0501f008, 0x60601000, - 0x0501f006, 0x60781000, 0x0501f004, 0x60901000, - 0x0501f002, 0x60801000, 0x60640800, 0x60c68000, - 0x05fdf7e9, 0x600c0800, 0x0501f002, 0x60280800, - 0x41781000, 0x05fdf7fa, 0x60240800, 0x59341400, - 0x05fdf7f7, 0x60228000, 0x0501f004, 0x601c0800, - 0x416c1000, 0x05fdf7f2, 0x41780800, 0x41781000, - 0x05fdf7d9, 0x60028000, 0x05fdf7fc, 0x90004d9d, - 0x05d40a1e, 0x90004d9a, 0x05020004, 0x40101000, - 0x40000800, 0x05fdf7e6, 0x90004d9b, 0x05020003, - 0x40181000, 0x05fdf7fb, 0x90004d9c, 0x05fc07f9, - 0x90004d99, 0x05fc07ca, 0x05fdf7e1, 0x592e600c, - 0x0529fd96, 0x05fc07cc, 0x59300c07, 0x90040591, - 0x05fe07e1, 0x592c0c0f, 0x82041500, 0x0000e000, - 0x82080580, 0x00006000, 0x05000021, 0x83440580, - 0x0000ffff, 0x05020007, 0x5932680a, 0x83340580, - 0x00110210, 0x05fe07d4, 0x61000810, 0x0501f00f, - 0x592c100e, 0x82081500, 0x00ffffff, 0x41784000, - 0x05fdfd29, 0x05fe07d6, 0x5930000a, 0x82000d80, - 0x00110210, 0x05000003, 0x81340580, 0x05fe07c6, - 0x4936600a, 0x59340a04, 0x592c0011, 0x80040480, - 0x05fc17b3, 0x59300a03, 0x90040587, 0x05fe07be, - 0x492e6009, 0x61527000, 0x05fdf78f, 0x0539f92f, - 0x05fc07c1, 0x05fdf7b8, 0x492fc857, 0x592e600c, - 0x83300580, 0xffffffff, 0x05020041, 0x592c020b, - 0x8c000500, 0x0502006c, 0x8d0c050e, 0x05020059, - 0x592e8c0a, 0x83440480, 0x00000800, 0x05021036, - 0x592c380e, 0x821c3d00, 0x00ffffff, 0x05e5fa1d, - 0x05020039, 0x49265805, 0x41784000, 0x592c100d, - 0x82081500, 0x00ffffff, 0x05fdfcfb, 0x0502004b, - 0x592e6017, 0x4933c857, 0x83300580, 0xffffffff, - 0x05000018, 0x0529fd49, 0x0500002d, 0x591c1407, - 0x800811c0, 0x05000013, 0x592c0411, 0x591c0a02, - 0x80040580, 0x0502000f, 0x591c000a, 0x800001c0, - 0x05020007, 0x591c082a, 0x59340002, 0x80040580, - 0x82000500, 0x00ffffff, 0x0501f002, 0x81340580, - 0x05020004, 0x90080587, 0x0502002c, 0x64923c03, - 0x59240005, 0x592c080d, 0x82041500, 0x00ffffff, - 0x80081580, 0x0500000c, 0x80040932, 0xb0040582, - 0x0502000b, 0x49365806, 0x0501f8d5, 0x80000580, - 0x1c01f000, 0x60281000, 0x0501f00a, 0x60401000, - 0x0501f008, 0x60501000, 0x0501f006, 0x605c1000, - 0x0501f004, 0x60601000, 0x0501f002, 0x60f01000, - 0x492fc857, 0x480bc857, 0x60640800, 0x60c68000, - 0x90000541, 0x05fdf7ef, 0x492fc857, 0x4803c857, - 0x480bc857, 0x40000800, 0x05fdf7f9, 0x492fc857, - 0x60280800, 0x41781000, 0x05fdf7f5, 0x41780800, - 0x41781000, 0x05fdf7f3, 0x60780800, 0x05fdf7fa, - 0x60040800, 0x05fdf7f8, 0x90004d9d, 0x05d4097b, - 0x90004d9a, 0x05020003, 0x40101000, 0x05fdf7eb, - 0x90004d9b, 0x05020003, 0x40181000, 0x05fdf7e7, - 0x90004d9c, 0x05fc07e5, 0x90004d99, 0x05fc07e3, - 0x05fdf7e7, 0x0539f98e, 0x60028000, 0x05fdf7e8, - 0x5c000000, 0x4c000000, 0x4803c857, 0x5930200a, - 0x801021c0, 0x05000029, 0x58101400, 0x4813c857, - 0x480bc857, 0x82081d00, 0x000000ff, 0x59300c03, - 0x90040588, 0x05000018, 0x9004058a, 0x05000010, - 0x9004058c, 0x0500000b, 0x90040582, 0x05000012, - 0x90040581, 0x0500000d, 0x90040583, 0x05000008, - 0x90040585, 0x05000003, 0x900405b3, 0x05020013, - 0x900c0589, 0x0500000a, 0x0501f010, 0x900c0585, - 0x05000007, 0x0501f00d, 0x900c058b, 0x05000004, - 0x0501f00a, 0x900c0583, 0x05020008, 0x82081d00, - 0xffffff00, 0x840c01c0, 0x800c0540, 0x4807c857, - 0x4803c857, 0x48002400, 0x1c01f000, 0x599c0017, - 0x8c00050a, 0x05000003, 0x80000580, 0x1c01f000, - 0x59a80249, 0x90000528, 0x05000007, 0x61f6880f, - 0x417a4000, 0x05fdfdd0, 0x05020003, 0x5934000a, - 0x8c000504, 0x1c01f000, 0x1c01f000, 0x4d440000, - 0x4d340000, 0x80000580, 0x40001800, 0x40028800, - 0x90080588, 0x05020002, 0x60041800, 0x0001fb00, - 0x0502000a, 0x05fdfd6c, 0x05020008, 0x800c19c0, - 0x05000004, 0x59340405, 0x8c000508, 0x05000003, - 0x80081040, 0x05000009, 0x81468800, 0x83440480, - 0x00000800, 0x05fc17f2, 0x80000580, 0x5c026800, - 0x5c028800, 0x1c01f000, 0x90000541, 0x5c026800, - 0x5c028800, 0x1c01f000, 0x60200800, 0x58d400e4, - 0x8c00051c, 0x0502002f, 0x59a80249, 0x8c000508, - 0x0502002c, 0x5934100a, 0x82081500, 0x0002e000, - 0x41781800, 0x90080580, 0x0500000a, 0x800c1800, - 0x82080580, 0x00002000, 0x05000006, 0x800c1800, - 0x82080580, 0x00006000, 0x05000002, 0x800c1800, - 0x42007000, 0x0010e060, 0x58380401, 0x8c000504, - 0x05000006, 0x900c2c84, 0x05021016, 0x820c0400, - 0x00105d02, 0x0501f012, 0x41782000, 0x59342a04, - 0x82140480, 0x00000800, 0x05021006, 0x80102000, - 0x82140480, 0x00000400, 0x05021002, 0x80102000, - 0x800c00c2, 0x800c0400, 0x80100400, 0x90002c89, - 0x05021004, 0x82000400, 0x00105d06, 0x50000800, - 0x48066c04, 0x1c01f000, 0x00000002, 0x00000004, - 0x00000008, 0x00000008, 0x00002802, 0x00001402, - 0x00000a02, 0x00001402, 0x00000a02, 0x00000502, - 0x00000a02, 0x00000502, 0x00000504, 0x59a8089e, - 0x800409c0, 0x05020004, 0x492f509d, 0x492f509e, - 0x0519f5b4, 0x492c0800, 0x492f509e, 0x1c01f000, - 0x5934000f, 0x41784000, 0x80001540, 0x05000010, - 0x58080208, 0x82000500, 0x000000ff, 0x90000592, - 0x05000005, 0xb00005a0, 0x05000003, 0x90000588, - 0x05020004, 0x58080210, 0x80040580, 0x05000005, - 0x58080000, 0x40084000, 0x05fdf7f0, 0x90000541, - 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x592e8c0a, - 0x592e440b, 0x83224500, 0x000000ff, 0x592cbc0c, - 0x592cc40b, 0x4947c857, 0x4923c857, 0x485fc857, - 0x4863c857, 0x8260c500, 0x0000f000, 0x82600580, - 0x00003000, 0x05020007, 0x59340200, 0x8c000508, - 0x05020004, 0x599c0018, 0x8c000510, 0x0500001a, - 0x8c5c050a, 0x0500002b, 0x485fc856, 0x812241c0, - 0x05020013, 0x83440580, 0x000007fe, 0x0502000e, - 0x42003000, 0x00fffffe, 0x05f9ffc6, 0x05020017, - 0x4937c857, 0x052dfa32, 0x05000012, 0x80000580, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x90000541, - 0x05fdf7fc, 0x60281000, 0x0501f007, 0x60381000, - 0x0501f005, 0x603c1000, 0x0501f003, 0x60601000, - 0x0501f001, 0x60640800, 0x60c68000, 0x05fdf7f4, - 0x600c0800, 0x0501f002, 0x60280800, 0x41781000, - 0x05fdf7fa, 0x60228000, 0x0501f001, 0x41780800, - 0x41781000, 0x05fdf7ea, 0x60028000, 0x05fdf7fc, - 0x485fc856, 0x812241c0, 0x05fe07e9, 0x83440580, - 0x000007fe, 0x05fe07e4, 0x42003000, 0x00fffffe, - 0x05f9ff9c, 0x05fe07ed, 0x4937c857, 0x592e600e, - 0x0529fbe6, 0x05fc07e2, 0x59300c07, 0x90040591, - 0x05fe07e9, 0x5930000a, 0x800001c0, 0x05000003, - 0x81340580, 0x05fe07e4, 0x4936600a, 0x59300a03, - 0x90040587, 0x05fe07e0, 0x592c0a0d, 0x4807c857, - 0x4806621b, 0x497a641b, 0x492e6009, 0x64126407, - 0x8c5c050e, 0x05020013, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x592cba0b, 0x485f54cd, 0x485f52cc, - 0x592cc80f, 0x4200c000, 0x001106f2, 0x0539f916, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x616a7000, - 0x64066203, 0x493a6403, 0x0511facf, 0x05fdf7b0, - 0x616e7000, 0x592c0010, 0x4802641c, 0x592c0011, - 0x4802621c, 0x05fdf7f7, 0x42000000, 0x00110210, - 0x4a000400, 0x00000707, 0x4a000204, 0x00000840, - 0x4a000403, 0x0000ffff, 0x49780200, 0x1c01f000, - 0x4d340000, 0x4d440000, 0x4c580000, 0x61c0b00f, - 0x4803c856, 0x417a8800, 0x0001fb00, 0x05020006, - 0x59340200, 0x8c00051a, 0x05000003, 0x8400051a, - 0x48026a00, 0x81468800, 0x8058b040, 0x05fe07f7, - 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000, - 0x592c2a08, 0x82142d00, 0x000000ff, 0x90140592, - 0x05000006, 0xb01405b2, 0x05000004, 0xb01405ba, - 0x05000002, 0x90000541, 0x1c01f000, 0x64033003, + 0x4c600000, 0x59340400, 0x8200bd00, 0x0000ff00, + 0x825cc580, 0x00000400, 0x05000003, 0x825cc580, + 0x00000600, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x4c5c0000, 0x59340400, 0x82000500, 0x000000ff, + 0x9000bd83, 0x05000002, 0x9000bd85, 0x5c00b800, + 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, + 0x4c5c0000, 0x59340400, 0x82000500, 0x0000ff00, + 0x8400b9c0, 0x805c0580, 0x4937c857, 0x4803c857, + 0x48026c00, 0x5c00b800, 0x1c01f000, 0x4c040000, + 0x4c080000, 0x592c020b, 0x8c00050c, 0x0500000d, + 0x592e8c0a, 0x82000500, 0x00000080, 0x84000548, + 0x4d3c0000, 0x60027820, 0x05fdff72, 0x5c027800, + 0x90000541, 0x5c001000, 0x5c000800, 0x1c01f000, + 0x80000580, 0x05fdf7fc, 0x59340013, 0x80024130, + 0x83224c00, 0x0010d8f9, 0x51264800, 0x812649c0, + 0x05d408d5, 0x1c01f000, 0x59a800ad, 0x81440480, + 0x05021019, 0x83200400, 0x0010d8f9, 0x50024800, + 0x59240009, 0x83440c80, 0x000007f0, 0x05001009, + 0x83441480, 0x00000800, 0x05001004, 0x0001fb08, + 0x0502000d, 0x0501f008, 0x80040c00, 0x0501f003, + 0x83440c00, 0x0010db80, 0x50040000, 0x80026d40, + 0x05000005, 0x59340013, 0x80000130, 0x81200580, + 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x4937c857, + 0x4c580000, 0x4d440000, 0x59368c03, 0x83440580, + 0x0000ffff, 0x05000013, 0x83441480, 0x000007f0, + 0x05001004, 0x83440480, 0x00000800, 0x05001003, + 0x05fdfa83, 0x0501f00b, 0x58040009, 0x80080c00, + 0x50040000, 0x81340580, 0x05d608a3, 0x4d2c0000, + 0x45780800, 0x41365800, 0x05d5fc53, 0x5c025800, + 0x80000580, 0x5c028800, 0x5c00b000, 0x1c01f000, + 0x592c040f, 0x82000500, 0x0000e000, 0x82000580, + 0x00006000, 0x0500001e, 0x916c0583, 0x05000011, + 0x916c0582, 0x050200ff, 0x59a8024c, 0x90000d38, + 0x05020005, 0x59a80844, 0x800409c0, 0x05000009, + 0x0501f0f8, 0x90000d03, 0x90040d83, 0x050200f5, + 0x90000d28, 0x05020003, 0x8c00050c, 0x050000f1, + 0x592e440b, 0x83224500, 0x000000ff, 0x0509f92a, + 0x050200ce, 0x592c100e, 0x82081500, 0x00ffffff, + 0x59240005, 0x80080580, 0x050000d2, 0x592c0c0f, + 0x82040d00, 0x0000e000, 0x82040480, 0x00008000, + 0x050210ce, 0x592e8c0a, 0x59a800ad, 0x81440480, + 0x05001014, 0x83440580, 0x0000ffff, 0x050200b9, + 0x800409c0, 0x050200f1, 0x592c240d, 0x82100500, + 0xffffff00, 0x050200bd, 0x480bc857, 0x4813c857, + 0x61000810, 0x0501faf8, 0x050200be, 0x614e7000, + 0x0501fac7, 0x42026800, 0x001141b4, 0x0501f093, + 0x800409c0, 0x050200e1, 0x42004000, 0x80000000, + 0x05fdfdbf, 0x050200cb, 0x592c240f, 0x8c100514, + 0x0500000d, 0x592c240d, 0x82100500, 0xffffff00, + 0x050200a6, 0x901005a0, 0x050200a8, 0x05fdff29, + 0x050200b3, 0x05fdfb2b, 0x60180800, 0x05fdf936, + 0x0501f0ba, 0x59340a04, 0x0501fadb, 0x050200a1, + 0x614e7000, 0x592c240d, 0x82100500, 0xffffff00, + 0x05020096, 0x4813c857, 0x592c040b, 0x82000500, + 0x0000f000, 0x82000580, 0x00003000, 0x05020006, + 0x59340200, 0x8c000508, 0x05020003, 0x90100583, + 0x05020084, 0x592c0010, 0x800001c0, 0x05000065, + 0x90100584, 0x05000083, 0xb0100591, 0x05000081, + 0x90100583, 0x0500000f, 0x901005a0, 0x05000039, + 0x901005a4, 0x05000033, 0x901005a1, 0x05000033, + 0xb0100590, 0x0500002b, 0xb0100592, 0x05000027, + 0x90100585, 0x05020055, 0x60067000, 0x0501f018, + 0x600a7000, 0x59a800d6, 0x8c000502, 0x05000014, + 0x05fdfeee, 0x05000012, 0x59340212, 0x82000500, + 0x0000ff00, 0x60401000, 0x0502000b, 0x59a8024c, + 0x8c000506, 0x0502005b, 0x60201000, 0x59340002, + 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000, + 0x05000003, 0x0501f973, 0x05020052, 0x051dfb05, + 0x05000066, 0x64426407, 0x4926601d, 0x4936600a, + 0x600c0800, 0x91380582, 0x05000002, 0x602c0800, + 0x05fdf8e4, 0x0501f036, 0x60027000, 0x0501f002, + 0x60127000, 0x05fdfee2, 0x0502005d, 0x0501f02b, + 0x60ce7000, 0x0501f004, 0x60167000, 0x0501f002, + 0x600e7000, 0x05fdfed1, 0x05020055, 0x59a800d6, + 0x8c000502, 0x05000014, 0x05fdfec0, 0x05000012, + 0x59340212, 0x82000500, 0x0000ff00, 0x60401000, + 0x0502000b, 0x59a8024c, 0x8c000506, 0x0502002d, + 0x60201000, 0x59340002, 0x82000500, 0x00ff0000, + 0x82000580, 0x00ff0000, 0x05000003, 0x0501f945, + 0x05020024, 0x051dfad7, 0x05000038, 0x64426407, + 0x4926601d, 0x4936600a, 0x60140800, 0x91380583, + 0x05000002, 0x60240800, 0x05fdf8b6, 0x0501f008, + 0x90102591, 0x05020029, 0x051dfaca, 0x0500002b, + 0x64426407, 0x4926601d, 0x4936600a, 0x052dfabd, + 0x492e6009, 0x4932580c, 0x83340580, 0x001141b4, + 0x05000007, 0x592c0c0f, 0x8c040518, 0x05000004, + 0x59340200, 0x84000514, 0x48026a00, 0x0009f839, + 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe, + 0x60281000, 0x0501f012, 0x60381000, 0x0501f010, + 0x603c1000, 0x0501f00e, 0x60401000, 0x0501f00c, + 0x60581000, 0x0501f00a, 0x605c1000, 0x0501f008, + 0x60601000, 0x0501f006, 0x60781000, 0x0501f004, + 0x40001000, 0x0501f002, 0x60801000, 0x60640800, + 0x60c68000, 0x05fdf7e9, 0x600c0800, 0x0501f002, + 0x60280800, 0x41781000, 0x05fdf7fa, 0x60240800, + 0x59341400, 0x05fdf7f7, 0x60228000, 0x0501f004, + 0x601c0800, 0x416c1000, 0x05fdf7f2, 0x41780800, + 0x41781000, 0x05fdf7d9, 0x60028000, 0x05fdf7fc, + 0x90004d9d, 0x05d00f88, 0x90004d9a, 0x05020004, + 0x40101000, 0x40000800, 0x05fdf7e6, 0x90004d9b, + 0x05020003, 0x40181000, 0x05fdf7fb, 0x90004d9c, + 0x05fc07f9, 0x90004d99, 0x05fc07ca, 0x90004da0, + 0x05fc07f5, 0x05fdf7df, 0x592e600c, 0x052df85f, + 0x05fc07ca, 0x59300c07, 0x90040591, 0x05fe07df, + 0x592c0c0f, 0x82041500, 0x0000e000, 0x82080580, + 0x00006000, 0x05000021, 0x83440580, 0x0000ffff, + 0x05020007, 0x5932680a, 0x83340580, 0x001141b4, + 0x05fe07d2, 0x61000810, 0x0501f010, 0x592c100e, + 0x82081500, 0x00ffffff, 0x42004000, 0x80000000, + 0x05fdfcc7, 0x05fe07d3, 0x5930000a, 0x82000d80, + 0x001141b4, 0x05000003, 0x81340580, 0x05fe07c3, + 0x4936600a, 0x59340a04, 0x0501f9eb, 0x05fe07b1, + 0x59300a03, 0x90040587, 0x05fe07bc, 0x492e6009, + 0x61527000, 0x05fdf78d, 0x0539fdbf, 0x05fc07bf, + 0x05fdf7b6, 0x492fc857, 0x592e600c, 0x83300580, + 0xffffffff, 0x05020041, 0x592c020b, 0x8c000500, + 0x0502006e, 0x8d0c050e, 0x05020059, 0x592e8c0a, + 0x59a800ad, 0x81440480, 0x05021036, 0x592c380e, + 0x821c3d00, 0x00ffffff, 0x05e1ffe6, 0x05020039, + 0x49265805, 0x41784000, 0x592c100d, 0x82081500, + 0x00ffffff, 0x05fdfc9a, 0x0502004b, 0x592e6017, + 0x4933c857, 0x83300580, 0xffffffff, 0x05000018, + 0x052df812, 0x0500002d, 0x591c1407, 0x800811c0, + 0x05000013, 0x592c0411, 0x591c0a02, 0x80040580, + 0x0502000f, 0x591c000a, 0x800001c0, 0x05020007, + 0x591c082a, 0x59340002, 0x80040580, 0x82000500, + 0x00ffffff, 0x0501f002, 0x81340580, 0x05020004, + 0x90080587, 0x0502002c, 0x64923c03, 0x59240005, + 0x592c080d, 0x82041500, 0x00ffffff, 0x80081580, + 0x0500000c, 0x80040932, 0xb0040582, 0x0502000b, + 0x49365806, 0x0501f8d7, 0x80000580, 0x1c01f000, + 0x60281000, 0x0501f00a, 0x60401000, 0x0501f008, + 0x60501000, 0x0501f006, 0x605c1000, 0x0501f004, + 0x60601000, 0x0501f002, 0x60f01000, 0x492fc857, + 0x480bc857, 0x60640800, 0x60c68000, 0x90000541, + 0x05fdf7ef, 0x492fc857, 0x4803c857, 0x480bc857, + 0x40000800, 0x05fdf7f9, 0x492fc857, 0x60280800, + 0x41781000, 0x05fdf7f5, 0x41780800, 0x41781000, + 0x05fdf7f3, 0x60780800, 0x05fdf7fa, 0x60040800, + 0x05fdf7f8, 0x90004d9d, 0x05d00ee3, 0x90004d9a, + 0x05020003, 0x40101000, 0x05fdf7eb, 0x90004d9b, + 0x05020003, 0x40181000, 0x05fdf7e7, 0x90004d9c, + 0x05fc07e5, 0x90004d99, 0x05fc07e3, 0x90004da0, + 0x05fc07e1, 0x05fdf7e5, 0x0539fe20, 0x60028000, + 0x05fdf7e6, 0x5c000000, 0x4c000000, 0x4803c857, + 0x5930200a, 0x801021c0, 0x05000029, 0x58101400, + 0x4813c857, 0x480bc857, 0x82081d00, 0x000000ff, + 0x59300c03, 0x90040588, 0x05000018, 0x9004058a, + 0x05000010, 0x9004058c, 0x0500000b, 0x90040582, + 0x05000012, 0x90040581, 0x0500000d, 0x90040583, + 0x05000008, 0x90040585, 0x05000003, 0x900405b3, + 0x05020013, 0x900c0589, 0x0500000a, 0x0501f010, + 0x900c0585, 0x05000007, 0x0501f00d, 0x900c058b, + 0x05000004, 0x0501f00a, 0x900c0583, 0x05020008, + 0x82081d00, 0xffffff00, 0x840c01c0, 0x800c0540, + 0x4807c857, 0x4803c857, 0x48002400, 0x1c01f000, + 0x599c0017, 0x8c00050a, 0x05000003, 0x80000580, + 0x1c01f000, 0x59a8024c, 0x90000528, 0x05000007, + 0x61f6880f, 0x417a4000, 0x05fdfdc4, 0x05020003, + 0x5934000a, 0x8c000504, 0x1c01f000, 0x1c01f000, + 0x4d440000, 0x4d340000, 0x80000580, 0x40001800, + 0x40028800, 0x90080588, 0x05020002, 0x60041800, + 0x0001fb08, 0x0502000a, 0x05fdfd60, 0x05020008, + 0x800c19c0, 0x05000004, 0x59340405, 0x8c000508, + 0x05000003, 0x80081040, 0x05000009, 0x81468800, + 0x59a800ad, 0x81440480, 0x05fc17f2, 0x80000580, + 0x5c026800, 0x5c028800, 0x1c01f000, 0x90000541, + 0x5c026800, 0x5c028800, 0x1c01f000, 0x60200800, + 0x58d400e4, 0x8c00051c, 0x0502002f, 0x59a8024c, + 0x8c000508, 0x0502002c, 0x5934100a, 0x82081500, + 0x0002e000, 0x41781800, 0x90080580, 0x0500000a, + 0x800c1800, 0x82080580, 0x00002000, 0x05000006, + 0x800c1800, 0x82080580, 0x00006000, 0x05000002, + 0x800c1800, 0x42007000, 0x00111ffa, 0x58380401, + 0x8c000504, 0x05000006, 0x900c2c84, 0x05021016, + 0x820c0400, 0x00105fd7, 0x0501f012, 0x41782000, + 0x59342a04, 0x82140480, 0x00000800, 0x05021006, + 0x80102000, 0x82140480, 0x00000400, 0x05021002, + 0x80102000, 0x800c00c2, 0x800c0400, 0x80100400, + 0x90002c89, 0x05021004, 0x82000400, 0x00105fdb, + 0x50000800, 0x48066c04, 0x1c01f000, 0x00000002, + 0x00000004, 0x00000008, 0x00000008, 0x00002802, + 0x00001402, 0x00000a02, 0x00001402, 0x00000a02, + 0x00000502, 0x00000a02, 0x00000502, 0x00000504, + 0x59a808a1, 0x800409c0, 0x05020004, 0x492f50a0, + 0x492f50a1, 0x0519f7d3, 0x492c0800, 0x492f50a1, + 0x1c01f000, 0x5934000f, 0x41784000, 0x80001540, + 0x05000010, 0x58080208, 0x82000500, 0x000000ff, + 0x90000592, 0x05000005, 0xb00005a0, 0x05000003, + 0x90000588, 0x05020004, 0x58080210, 0x80040580, + 0x05000005, 0x58080000, 0x40084000, 0x05fdf7f0, + 0x90000541, 0x1c01f000, 0x4c5c0000, 0x4c600000, + 0x592e8c0a, 0x592e440b, 0x83224500, 0x000000ff, + 0x592cbc0c, 0x592cc40b, 0x4947c857, 0x4923c857, + 0x485fc857, 0x4863c857, 0x8260c500, 0x0000f000, + 0x82600580, 0x00003000, 0x05020007, 0x59340200, + 0x8c000508, 0x05020004, 0x599c0018, 0x8c000510, + 0x0500001a, 0x8c5c050a, 0x0500002b, 0x485fc856, + 0x812241c0, 0x05020013, 0x83440580, 0x000007fe, + 0x0502000e, 0x42003000, 0x00fffffe, 0x05f9ff0c, + 0x05020017, 0x4937c857, 0x052dfd0e, 0x05000012, + 0x80000580, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x90000541, 0x05fdf7fc, 0x60281000, 0x0501f007, + 0x60381000, 0x0501f005, 0x603c1000, 0x0501f003, + 0x60601000, 0x0501f001, 0x60640800, 0x60c68000, + 0x05fdf7f4, 0x600c0800, 0x0501f002, 0x60280800, + 0x41781000, 0x05fdf7fa, 0x60228000, 0x0501f001, + 0x41780800, 0x41781000, 0x05fdf7ea, 0x60028000, + 0x05fdf7fc, 0x485fc856, 0x812241c0, 0x05fe07e9, + 0x83440580, 0x000007fe, 0x05fe07e4, 0x42003000, + 0x00fffffe, 0x05f9fee2, 0x05fe07ed, 0x4937c857, + 0x592e600e, 0x0529fead, 0x05fc07e2, 0x59300c07, + 0x90040591, 0x05fe07e9, 0x5930000a, 0x800001c0, + 0x05000003, 0x81340580, 0x05fe07e4, 0x4936600a, + 0x59300a03, 0x90040587, 0x05fe07e0, 0x592c0a0d, + 0x4807c857, 0x4806621b, 0x497a641b, 0x492e6009, + 0x64126407, 0x8c5c050e, 0x05020013, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x592cba0b, 0x485f54d2, + 0x485f52d1, 0x592cc80f, 0x4200c000, 0x00114696, + 0x0539fda8, 0x5c00c800, 0x5c00c000, 0x5c00b800, + 0x616a7000, 0x64066203, 0x493a6403, 0x0511fcb3, + 0x05fdf7b0, 0x616e7000, 0x592c0010, 0x4802641c, + 0x592c0011, 0x4802621c, 0x05fdf7f7, 0x42000000, + 0x001141b4, 0x4a000400, 0x00000707, 0x4a000204, + 0x00000840, 0x4a000403, 0x0000ffff, 0x49780200, + 0x1c01f000, 0x4d340000, 0x4d440000, 0x4c580000, + 0x59a8b0ac, 0x4803c856, 0x417a8800, 0x0001fb08, + 0x05020006, 0x59340200, 0x8c00051a, 0x05000003, + 0x8400051a, 0x48026a00, 0x8058b040, 0x05000007, + 0x81468800, 0x83440580, 0x000007f0, 0x05fe07f4, + 0x60028810, 0x05fdf7f2, 0x5c00b000, 0x5c028800, + 0x5c026800, 0x1c01f000, 0x592c2a08, 0x82142d00, + 0x000000ff, 0x90140592, 0x05000006, 0xb01405b2, + 0x05000004, 0xb01405ba, 0x05000002, 0x90000541, + 0x1c01f000, 0x592c0011, 0x800001c0, 0x05000005, + 0x80040480, 0x05001003, 0x80000580, 0x1c01f000, + 0x60900000, 0x80000540, 0x1c01f000, 0x64033003, 0x4a03b104, 0x80000000, 0x59d80105, 0x4a03b104, 0x60000001, 0x1c01f000, 0x599c0018, 0x4803c856, 0x497b3006, 0x497b3007, 0x9000050f, 0x48033004, @@ -6057,36 +6242,36 @@ static const uint32_t isp_2500_risc_code[] = { 0x640f3003, 0x05fdf7f8, 0x8d0c0520, 0x05020003, 0x64133003, 0x05fdf7f4, 0x64173003, 0x05fdf7f2, 0x592c0208, 0x492fc857, 0x80000540, 0x05000007, - 0x42034000, 0x0010dceb, 0x59a1d806, 0x80edd9c0, - 0x05d00fba, 0x0501f005, 0x052df885, 0x05d20fb7, + 0x42034000, 0x00111c71, 0x59a1d806, 0x80edd9c0, + 0x05d00d11, 0x0501f005, 0x052dfb47, 0x05d20d0e, 0x5931d82d, 0x58ef400b, 0x58ec0009, 0x800001c0, - 0x05d00fb2, 0x0801f800, 0x1c01f000, 0x5c000000, + 0x05d00d09, 0x0801f800, 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, 0x492fc857, 0x4943c857, - 0x4807c857, 0x4c040000, 0x0005f9f3, 0x5c000800, - 0x4c040000, 0x0505fdd3, 0x5c000800, 0x4a025a08, + 0x4807c857, 0x4c040000, 0x0005fa1a, 0x5c000800, + 0x4c040000, 0x0505fe77, 0x5c000800, 0x4a025a08, 0x00000103, 0x49425a0a, 0x48065a0c, 0x4a025c0a, 0x0000ffff, 0x813261c0, 0x05000003, 0x59300402, 0x48025c0a, 0x592c020c, 0x8c000512, 0x05020006, 0x912c040d, 0x05011000, 0x4803c840, 0x642fc842, - 0x05011000, 0x1c01f000, 0x59765800, 0x0001fdfd, - 0x592c1005, 0x800811c0, 0x000205e2, 0x1c01f000, + 0x05011000, 0x1c01f000, 0x59765800, 0x0001fe23, + 0x592c1005, 0x800811c0, 0x00020608, 0x1c01f000, 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4d2c0000, - 0x4c600000, 0x400cc000, 0x4000b800, 0x0539fa9d, - 0x4178a800, 0x05d5fb18, 0x050000c8, 0x05011000, + 0x4c600000, 0x400cc000, 0x4000b800, 0x0539ff34, + 0x4178a800, 0x05d5f87c, 0x050000c8, 0x05011000, 0x485fc857, 0x912c0408, 0x4803c840, 0x6443c842, 0x40000000, 0x05fd17ff, 0x412c7000, 0x4a025808, - 0x00000132, 0x497a5809, 0x42000000, 0x0010de60, + 0x00000132, 0x497a5809, 0x42000000, 0x00111dfa, 0x50000000, 0x48025802, 0x805cb9c0, 0x05020060, - 0x912e5c0b, 0x417a4000, 0x42024800, 0x0010e512, + 0x912e5c0b, 0x417a4000, 0x42024800, 0x001124b6, 0x41786800, 0x59240a00, 0x9004050f, 0x0c01f001, - 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d, - 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e84, - 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d, - 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d, + 0x00106171, 0x00106171, 0x00106171, 0x00106171, + 0x00106171, 0x00106171, 0x00106171, 0x00106168, + 0x00106171, 0x00106171, 0x00106171, 0x00106171, + 0x00106171, 0x00106171, 0x00106171, 0x00106171, 0x8054a800, 0x812241c0, 0x05020007, 0x59240805, 0x805c00f0, 0x80040d40, 0x48065800, 0x812e5800, - 0x0501f030, 0x90340503, 0x0c01f001, 0x00105e93, - 0x00105e9b, 0x00105ea4, 0x00105ead, 0x91200581, + 0x0501f030, 0x90340503, 0x0c01f001, 0x00106177, + 0x0010617f, 0x00106188, 0x00106191, 0x91200581, 0x05020003, 0x60042000, 0x0501f020, 0x912004a0, 0x0500101d, 0x80346800, 0x0501f01b, 0x912005a1, 0x05020004, 0x812e5800, 0x60042000, 0x0501f017, @@ -6098,371 +6283,374 @@ static const uint32_t isp_2500_risc_code[] = { 0x80346800, 0x801020c2, 0x90040507, 0x90000587, 0x05020004, 0x592c0000, 0x80100540, 0x48025800, 0x91264c0d, 0x81224000, 0x8058b040, 0x05fe07b2, - 0x8054a9c0, 0x403a5800, 0x0500005f, 0x0539fa31, - 0x0539fa51, 0x05020002, 0x8058b040, 0x805800d0, + 0x8054a9c0, 0x403a5800, 0x0500005f, 0x0539fec8, + 0x0539fee8, 0x05020002, 0x8058b040, 0x805800d0, 0x80540540, 0x48025a0a, 0x0501f050, 0x4943c857, 0x4923c857, 0x91400581, 0x05020004, 0x48165a0c, 0x90140583, 0x0500004d, 0x83400d00, 0x000000ff, 0x90040584, 0x05000049, 0x90040586, 0x05000047, 0x83400d00, 0x0000ff00, 0x05000003, 0x81400110, 0x48025810, 0x814000d0, 0x81200540, 0x48025c0a, - 0x0539fa35, 0x05020002, 0x8058b040, 0x805800d0, + 0x0539fecc, 0x05020002, 0x8058b040, 0x805800d0, 0x90000541, 0x48025a0a, 0x59240805, 0x805c00f0, 0x80040d40, 0x4806580b, 0x5924000b, 0x4802580f, 0x592c020c, 0x80600540, 0x48025a0c, 0x91400d81, 0x0500002a, 0x4d340000, 0x4d440000, 0x61fa880f, - 0x05fdfb85, 0x05d20ee5, 0x592c020c, 0x8400055a, + 0x05fdfb6a, 0x05d20c3c, 0x592c020c, 0x8400055a, 0x48025a0c, 0x59340006, 0x9c0001c0, 0x48025812, 0x59340007, 0x9c0001c0, 0x48025813, 0x59340008, 0x9c0001c0, 0x48025814, 0x59340009, 0x9c0001c0, - 0x48025815, 0x0501f9a9, 0x05020006, 0x59a80249, + 0x48025815, 0x0501f9af, 0x05020006, 0x59a8024c, 0x8c000508, 0x05020005, 0x6000080c, 0x0501f007, 0x60000804, 0x0501f005, 0x592c020c, 0x84000558, 0x48025a0c, 0x60000808, 0x592c020c, 0x82000500, 0x0000f1ff, 0x80040540, 0x4803c857, 0x48025a0c, - 0x5c028800, 0x5c026800, 0x0539fa16, 0x0502000d, - 0x0001fb82, 0x0501f005, 0x59cc0007, 0x48025810, - 0x05fdf7bd, 0x05d5fa71, 0x5c00c000, 0x5c025800, + 0x5c028800, 0x5c026800, 0x0539fead, 0x0502000d, + 0x0001fba8, 0x0501f005, 0x59cc0007, 0x48025810, + 0x05fdf7bd, 0x05d1ffc4, 0x5c00c000, 0x5c025800, 0x5c00b800, 0x5c00b000, 0x5c00a800, 0x1c01f000, - 0x0535fdb1, 0x05fdf7f9, 0x59a8003f, 0x90000c8a, - 0x05d21eae, 0x0c01f808, 0x4a038805, 0x000000f0, - 0x59c400a3, 0x82000500, 0x02870000, 0x05d20ea7, - 0x1c01f000, 0x00105fb3, 0x00105f40, 0x00105f58, - 0x00105f82, 0x00105fa6, 0x001005da, 0x001005da, - 0x00105f58, 0x001005da, 0x00105f3f, 0x1c01f000, - 0x600c2000, 0x0501fbad, 0x4a038808, 0x00000204, - 0x0501fba1, 0x59c40805, 0x8c04050e, 0x05020010, + 0x0539fa2a, 0x05fdf7f9, 0x59a80042, 0x90000c8a, + 0x05d21c05, 0x0c01f808, 0x4a038805, 0x000000f0, + 0x59c400a3, 0x82000500, 0x02870000, 0x05d20bfe, + 0x1c01f000, 0x00106297, 0x00106224, 0x0010623c, + 0x00106266, 0x0010628a, 0x00100615, 0x00100615, + 0x0010623c, 0x00100615, 0x00106223, 0x1c01f000, + 0x600c2000, 0x0501fbb9, 0x4a038808, 0x00000204, + 0x0501fbac, 0x59c40805, 0x8c04050e, 0x05020010, 0x8c04050a, 0x05020009, 0x8c04050c, 0x05020005, - 0x8c040508, 0x0500000a, 0x640f503f, 0x0501f007, - 0x6403503f, 0x0501f005, 0x42000000, 0x0010e3a4, - 0x0539f888, 0x640b503f, 0x0501f898, 0x1c01f000, - 0x497b50a8, 0x60002000, 0x0501fb94, 0x4a038808, + 0x8c040508, 0x0500000a, 0x640f5042, 0x0501f007, + 0x64035042, 0x0501f005, 0x42000000, 0x00112345, + 0x0539fd1f, 0x640b5042, 0x0501f898, 0x1c01f000, + 0x497b50ab, 0x60002000, 0x0501fba0, 0x4a038808, 0x00000202, 0x59c40805, 0x8c040508, 0x05020020, 0x8c04050c, 0x0502001c, 0x8c04050e, 0x05020018, - 0x82040500, 0x000000f0, 0x0502001b, 0x0501fb7e, + 0x82040500, 0x000000f0, 0x0502001b, 0x0501fb89, 0x4a038808, 0x00000280, 0x59c40002, 0x8400050c, - 0x48038802, 0x0501f959, 0x4d3c0000, 0x60067800, - 0x0529feb7, 0x5c027800, 0x59c410a3, 0x84081518, - 0x05ddff2b, 0x4a038808, 0x00000280, 0x60082000, - 0x0501fb76, 0x6427503f, 0x0501f007, 0x6407503f, - 0x0501f004, 0x6403503f, 0x0501f002, 0x640f503f, - 0x0501f86e, 0x1c01f000, 0x60042000, 0x0501fb6b, - 0x59c410a3, 0x84081518, 0x05ddff19, 0x4a038808, + 0x48038802, 0x0501f95f, 0x4d3c0000, 0x60067800, + 0x052df97a, 0x5c027800, 0x59c410a3, 0x84081518, + 0x05ddfcc7, 0x4a038808, 0x00000280, 0x60082000, + 0x0501fb82, 0x64275042, 0x0501f007, 0x64075042, + 0x0501f004, 0x64035042, 0x0501f002, 0x640f5042, + 0x0501f86e, 0x1c01f000, 0x60042000, 0x0501fb77, + 0x59c410a3, 0x84081518, 0x05ddfcb5, 0x4a038808, 0x00000280, 0x59c40805, 0x8c04050a, 0x05020018, 0x8c04050c, 0x05020014, 0x8c04050e, 0x05020010, 0x82040500, 0x000000f0, 0x05020013, 0x59c40002, - 0x8400050c, 0x48038802, 0x0501f930, 0x4d3c0000, - 0x60067800, 0x0529fe8e, 0x5c027800, 0x60082000, - 0x0501fb52, 0x6427503f, 0x0501f007, 0x6407503f, - 0x0501f004, 0x6403503f, 0x0501f002, 0x640b503f, - 0x0501f84a, 0x1c01f000, 0x0501fc43, 0x4a038808, + 0x8400050c, 0x48038802, 0x0501f936, 0x4d3c0000, + 0x60067800, 0x052df951, 0x5c027800, 0x60082000, + 0x0501fb5e, 0x64275042, 0x0501f007, 0x64075042, + 0x0501f004, 0x64035042, 0x0501f002, 0x640b5042, + 0x0501f84a, 0x1c01f000, 0x0501fc4f, 0x4a038808, 0x00000208, 0x59c40805, 0x8c04050c, 0x05020005, - 0x8c04050e, 0x05000005, 0x6407503f, 0x0501f002, - 0x6403503f, 0x0501f83d, 0x1c01f000, 0x60102000, - 0x0501fb3a, 0x0501f873, 0x59c40805, 0x8c04050c, + 0x8c04050e, 0x05000005, 0x64075042, 0x0501f002, + 0x64035042, 0x0501f83d, 0x1c01f000, 0x60102000, + 0x0501fb46, 0x0501f873, 0x59c40805, 0x8c04050c, 0x05020009, 0x8c04050a, 0x05020005, 0x8c04050e, - 0x05000005, 0x6407503f, 0x0501f002, 0x640b503f, - 0x0501f82e, 0x1c01f000, 0x0501f8ec, 0x05d20e17, - 0x0501fc6b, 0x601c2000, 0x0501fb28, 0x8d0c050c, - 0x05000010, 0x850e1d0c, 0x64438805, 0x05ddfde0, + 0x05000005, 0x64075042, 0x0501f002, 0x640b5042, + 0x0501f82e, 0x1c01f000, 0x0501f8f2, 0x05d20b6e, + 0x0501fc77, 0x601c2000, 0x0501fb34, 0x8d0c050c, + 0x05000010, 0x850e1d0c, 0x64438805, 0x05ddfb7c, 0x59c40005, 0x8c000508, 0x05000006, 0x4a038808, - 0x00000208, 0x64075042, 0x6006d800, 0x0501f01a, + 0x00000208, 0x64075045, 0x6006d800, 0x0501f01a, 0x59c40006, 0x84000548, 0x48038806, 0x0501f016, - 0x59a8003f, 0x90000581, 0x05020012, 0x42000000, - 0x0010e3a4, 0x0535ffff, 0x4ce80000, 0x61a1d007, - 0x050df825, 0x59c40005, 0x90000530, 0x05000008, - 0x8c00050a, 0x05000004, 0x60002000, 0x0501fb07, - 0x0501f003, 0x60042000, 0x0501fb04, 0x5c01d000, - 0x6413503f, 0x1c01f000, 0x4c040000, 0x4c080000, - 0x61900800, 0x42001000, 0x00105ff7, 0x0509fffc, + 0x59a80042, 0x90000581, 0x05020012, 0x42000000, + 0x00112345, 0x0539fc96, 0x4ce80000, 0x61a1d007, + 0x050df9ac, 0x59c40005, 0x90000530, 0x05000008, + 0x8c00050a, 0x05000004, 0x60002000, 0x0501fb13, + 0x0501f003, 0x60042000, 0x0501fb10, 0x5c01d000, + 0x64135042, 0x1c01f000, 0x4c040000, 0x4c080000, + 0x61900800, 0x42001000, 0x001062db, 0x050df97c, 0x5c001000, 0x5c000800, 0x1c01f000, 0x4803c856, - 0x4c040000, 0x0511fd1a, 0x4df00000, 0x0511ffa7, - 0x5c03e000, 0x05100d07, 0x42000000, 0x0010e3a3, - 0x0535ffdc, 0x05fdffc1, 0x5c000800, 0x1c01f000, - 0x4803c856, 0x4c040000, 0x4c080000, 0x0511fd0c, - 0x4df00000, 0x0511ff99, 0x5c03e000, 0x05100cf9, - 0x59c40006, 0x84000500, 0x48038806, 0x0515f846, - 0x497b8880, 0x42000000, 0x0010e3a2, 0x0535ffc9, - 0x05ddfcf8, 0x641350b4, 0x6012d800, 0x64078805, - 0x42001000, 0x00105ff7, 0x0509ffdc, 0x05d1ffe3, - 0x0501f89e, 0x05000005, 0x42006000, 0xfeffffff, - 0x41786800, 0x05f9fa36, 0x05d1fbd8, 0x60000001, - 0x05ddfa60, 0x5c001000, 0x5c000800, 0x1c01f000, + 0x4c040000, 0x0511fef4, 0x4df00000, 0x0515f981, + 0x5c03e000, 0x05100ee1, 0x42000000, 0x00112344, + 0x0539fc73, 0x05fdffc1, 0x5c000800, 0x1c01f000, + 0x4803c856, 0x4c040000, 0x4c080000, 0x0511fee6, + 0x4df00000, 0x0515f973, 0x5c03e000, 0x05100ed3, + 0x59c40006, 0x84000500, 0x48038806, 0x0515fa20, + 0x497b8880, 0x42000000, 0x00112343, 0x0539fc60, + 0x05ddfa94, 0x641350b9, 0x6012d800, 0x64078805, + 0x42001000, 0x001062db, 0x050df95c, 0x05d1fd2e, + 0x0501f8a4, 0x05000005, 0x42006000, 0xfeffffff, + 0x41786800, 0x05f9f949, 0x05d1f92b, 0x60000001, + 0x05d9fffc, 0x5c001000, 0x5c000800, 0x1c01f000, 0x59c40008, 0x82000580, 0x00000210, 0x05000005, - 0x4a038808, 0x00000210, 0x6021d027, 0x0509ffd6, - 0x1c01f000, 0x4c040000, 0x59a80842, 0x90040580, + 0x4a038808, 0x00000210, 0x6021d027, 0x050df95d, + 0x1c01f000, 0x4c040000, 0x59a80845, 0x90040580, 0x05000008, 0x90040581, 0x05000008, 0x90040582, 0x05000008, 0x90040583, 0x05000008, 0x0501f043, - 0x6403503f, 0x0501f006, 0x6413503f, 0x0501f004, - 0x6407503f, 0x0501f002, 0x641f503f, 0x497b8880, - 0x64078893, 0x41780000, 0x05ddfac9, 0x0515f80e, + 0x64035042, 0x0501f006, 0x64135042, 0x0501f004, + 0x64075042, 0x0501f002, 0x641f5042, 0x497b8880, + 0x64078893, 0x41780000, 0x05ddf865, 0x0515f9e8, 0x916c0d84, 0x05000008, 0x59c40006, 0x82000500, 0xffffff0f, 0x82000540, 0x04000001, 0x48038806, 0x0501f007, 0x59c40006, 0x82000500, 0xffffff0f, - 0x82000540, 0x04000000, 0x48038806, 0x0501f863, + 0x82000540, 0x04000000, 0x48038806, 0x0501f869, 0x05020005, 0x59c40806, 0x82040d00, 0xfbffff0f, 0x48078806, 0x59c40005, 0x8c000534, 0x05020026, 0x42006000, 0xfc18ffff, 0x42006800, 0x01000000, - 0x05f9f9f3, 0x05ddfd46, 0x59c408a4, 0x90040d0f, - 0x90040d8c, 0x05020885, 0x0501f850, 0x05000005, - 0x42006000, 0xfeffffff, 0x41786800, 0x05f9f9e8, - 0x916c0d84, 0x0500000c, 0x05fdff7c, 0x5994102e, - 0x41780800, 0x60280000, 0x050dff18, 0x40080000, - 0x59a80863, 0x80040c00, 0x42001000, 0x00106004, - 0x0509ff6c, 0x64135042, 0x05fdfeac, 0x0501f83b, + 0x05f9f906, 0x05ddfae2, 0x59c408a4, 0x90040d0f, + 0x90040d8c, 0x0502088b, 0x0501f856, 0x05000005, + 0x42006000, 0xfeffffff, 0x41786800, 0x05f9f8fb, + 0x916c0d84, 0x0500000c, 0x05fdff7c, 0x5994102f, + 0x41780800, 0x60280000, 0x0511f8ed, 0x40080000, + 0x59a80866, 0x80040c00, 0x42001000, 0x001062e8, + 0x050df8ec, 0x64135045, 0x05fdfeac, 0x0501f841, 0x05020005, 0x59c408a4, 0x90040d0f, 0x9004058c, - 0x05d20d56, 0x5c000800, 0x1c01f000, 0x4803c856, - 0x4c000000, 0x0509ff84, 0x4a03503d, 0x00ffffff, - 0x497b5041, 0x59a8004d, 0x82000500, 0xffff0000, - 0x4803504d, 0x497b8880, 0x497b8893, 0x41780000, - 0x05ddfa7b, 0x59c40001, 0x82000500, 0xfffffcff, + 0x05d20aad, 0x5c000800, 0x1c01f000, 0x4803c856, + 0x4c000000, 0x050df90b, 0x4a035040, 0x00ffffff, + 0x497b5044, 0x59a80050, 0x82000500, 0xffff0000, + 0x48035050, 0x497b8880, 0x497b8893, 0x41780000, + 0x05ddf817, 0x59c40001, 0x82000500, 0xfffffcff, 0x48038801, 0x42006000, 0xfc18ffff, 0x41786800, - 0x05f9f9bb, 0x59c410a3, 0x84081518, 0x05ddfe00, + 0x05f9f8ce, 0x59c410a3, 0x84081518, 0x05ddfb9c, 0x4a038808, 0x00000200, 0x5c000000, 0x800001c0, - 0x05fa0847, 0x4a038805, 0x040000f0, 0x59c40006, + 0x05f60f5a, 0x4a038805, 0x040000f0, 0x59c40006, 0x82000500, 0xffffffcf, 0x82000540, 0x440000c1, - 0x48038806, 0x1c01f000, 0x4c5c0000, 0x59a8b841, - 0x825cbd80, 0x0000aaaa, 0x5c00b800, 0x1c01f000, - 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbd80, + 0x4c000000, 0x0501f80d, 0x5c000000, 0x05020003, + 0x82000500, 0xffffff0f, 0x48038806, 0x1c01f000, + 0x4c5c0000, 0x59a8b844, 0x825cbd80, 0x0000aaaa, 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x599cb818, - 0x905cbd30, 0x905cbd90, 0x5c00b800, 0x1c01f000, - 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbda0, - 0x5c00b800, 0x1c01f000, 0x490fc857, 0x910c0d13, - 0x0500001d, 0x599c1017, 0x4d3c0000, 0x910c0511, - 0x05000005, 0x417a7800, 0x8d0c0520, 0x05020007, - 0x0501f00f, 0x60227800, 0x8d0c0520, 0x0500000c, - 0x600c3000, 0x0501f002, 0x60103000, 0x603a8000, - 0x4d200000, 0x61fe4001, 0x0531fecf, 0x5c024000, - 0x599c1017, 0x8c08050a, 0x05020005, 0x60128000, - 0x05e1f9f2, 0x4803c856, 0x850e1d08, 0x5c027800, - 0x0501f009, 0x8d0c0520, 0x05000007, 0x603e8000, - 0x60043000, 0x4d200000, 0x61fe4001, 0x0531febe, - 0x5c024000, 0x1c01f000, 0x4803c856, 0x4c580000, - 0x42000000, 0x0010e4bd, 0x0535feea, 0x42000800, - 0x00110516, 0x59c40003, 0x44000800, 0x59c40004, - 0x48000801, 0x59c4000b, 0x48000802, 0x59c4008e, - 0x48000803, 0x59c4008f, 0x48000804, 0x59c40090, - 0x48000805, 0x59c40091, 0x48000806, 0x59c40092, - 0x48000807, 0x59c40093, 0x48000808, 0x59c40099, - 0x48000809, 0x59c4009e, 0x4800080a, 0x59c400aa, - 0x4800080b, 0x90040c0f, 0x41c41800, 0x60c0b000, - 0x580c0050, 0x44000800, 0x80040800, 0x800c1800, - 0x8058b040, 0x05fe07fb, 0x41c41800, 0x6080b000, - 0x580c0010, 0x44000800, 0x80040800, 0x800c1800, - 0x8058b040, 0x05fe07fb, 0x497b8830, 0x6100b000, - 0x59c40031, 0x44000800, 0x80040800, 0x8058b040, - 0x05fe07fc, 0x497b88ac, 0x6040b000, 0x59c400ad, - 0x44000800, 0x80040800, 0x8058b040, 0x05fe07fc, - 0x59a800a9, 0x59c410b1, 0x80080400, 0x480350a9, - 0x59a800aa, 0x59c410b2, 0x80080400, 0x480350aa, - 0x59c41001, 0x4c080000, 0x8408150c, 0x480b8801, - 0x4a0370e4, 0x00000300, 0x4a0370e5, 0xb0000000, - 0x60000810, 0x80040840, 0x05d00c9c, 0x59b800e5, - 0x8c000538, 0x05fe07fc, 0x4a0370e4, 0x00000200, - 0x42006000, 0xffffffff, 0x42006800, 0x80000000, - 0x05f9f90f, 0x64078807, 0x497b8807, 0x0501faac, - 0x4a038808, 0x00000210, 0x42006000, 0xfcf8ffff, - 0x42006800, 0x01000000, 0x05f9f905, 0x5c001000, - 0x480b8801, 0x42000800, 0x00110516, 0x50040000, - 0x48038803, 0x58040001, 0x48038804, 0x58040002, - 0x4803880b, 0x58040003, 0x4803888e, 0x58040004, - 0x4803888f, 0x58040005, 0x48038890, 0x58040006, - 0x48038891, 0x58040007, 0x48038892, 0x58040008, - 0x48038893, 0x58040009, 0x48038899, 0x5804000a, - 0x4803889e, 0x5804000b, 0x480388aa, 0x90040c0f, - 0x41c41800, 0x60c0b000, 0x50040000, 0x48001850, + 0x905cbd30, 0x905cbd80, 0x5c00b800, 0x1c01f000, + 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbd90, + 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x599cb818, + 0x905cbd30, 0x905cbda0, 0x5c00b800, 0x1c01f000, + 0x490fc857, 0x910c0d13, 0x0500001d, 0x599c1017, + 0x4d3c0000, 0x910c0511, 0x05000005, 0x417a7800, + 0x8d0c0520, 0x05020007, 0x0501f00f, 0x60227800, + 0x8d0c0520, 0x0500000c, 0x600c3000, 0x0501f002, + 0x60103000, 0x603a8000, 0x4d200000, 0x61fe4001, + 0x0535fb2c, 0x5c024000, 0x599c1017, 0x8c08050a, + 0x05020005, 0x60128000, 0x05ddff9b, 0x4803c856, + 0x850e1d08, 0x5c027800, 0x0501f009, 0x8d0c0520, + 0x05000007, 0x603e8000, 0x60043000, 0x4d200000, + 0x61fe4001, 0x0535fb1b, 0x5c024000, 0x1c01f000, + 0x4803c856, 0x4c580000, 0x42000000, 0x00112461, + 0x0539fb7b, 0x42000800, 0x001144ba, 0x59c40003, + 0x44000800, 0x59c40004, 0x48000801, 0x59c4000b, + 0x48000802, 0x59c4008e, 0x48000803, 0x59c4008f, + 0x48000804, 0x59c40090, 0x48000805, 0x59c40091, + 0x48000806, 0x59c40092, 0x48000807, 0x59c40093, + 0x48000808, 0x59c40099, 0x48000809, 0x59c4009e, + 0x4800080a, 0x59c400aa, 0x4800080b, 0x90040c0f, + 0x41c41800, 0x60c0b000, 0x580c0050, 0x44000800, 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb, - 0x41c41800, 0x6080b000, 0x50040000, 0x48001810, + 0x41c41800, 0x6080b000, 0x580c0010, 0x44000800, 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb, - 0x497b8830, 0x6100b000, 0x50040000, 0x48038831, + 0x497b8830, 0x6100b000, 0x59c40031, 0x44000800, 0x80040800, 0x8058b040, 0x05fe07fc, 0x497b88ac, - 0x6040b000, 0x50040000, 0x480388ad, 0x80040800, - 0x8058b040, 0x05fe07fc, 0x497b8880, 0x41780000, - 0x05ddf97f, 0x59c408a4, 0x90040d0f, 0x9004058c, - 0x05d20c46, 0x4a038805, 0x04000000, 0x5c00b000, - 0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000, - 0x42000000, 0x0010e3a5, 0x0535fe3e, 0x59c41008, - 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808, - 0x59c40004, 0x82000500, 0x00003e02, 0x05000003, - 0x6051d000, 0x0509fe5c, 0x59c40006, 0x82000500, - 0xffffff0f, 0x48038806, 0x0501fa42, 0x64438805, - 0x4a038808, 0x00000204, 0x6194b000, 0x59c40005, - 0x8c000508, 0x05020013, 0x61a1d007, 0x0509fe4e, - 0x8058b040, 0x05fe07fa, 0x601c2000, 0x0501f933, - 0x0501fa2d, 0x0511fe98, 0x4803c856, 0x59c410a3, - 0x84081518, 0x05ddfcde, 0x4a038808, 0x00000208, - 0x64075042, 0x6006d800, 0x90000541, 0x0501f032, - 0x60042000, 0x0501f925, 0x05d5facd, 0x42000000, - 0x0010e499, 0x0535fe0f, 0x05d5fed7, 0x497b8880, - 0x59a8004d, 0x82000500, 0x0000ffff, 0x4c000000, - 0x05ddf93b, 0x5c000000, 0x48038880, 0x59c410a3, - 0x84081518, 0x05ddfcc6, 0x4a038808, 0x00000200, + 0x6040b000, 0x59c400ad, 0x44000800, 0x80040800, + 0x8058b040, 0x05fe07fc, 0x59a800ae, 0x59c410b1, + 0x80080400, 0x480350ae, 0x59a800af, 0x59c410b2, + 0x80080400, 0x480350af, 0x59c41001, 0x4c080000, + 0x8408150c, 0x480b8801, 0x4a0370e4, 0x00000300, + 0x4a0370e5, 0xb0000000, 0x60000810, 0x80040840, + 0x05d009ed, 0x59b800e5, 0x8c000538, 0x05fe07fc, + 0x4a0370e4, 0x00000200, 0x42006000, 0xffffffff, + 0x42006800, 0x80000000, 0x05f9f81c, 0x64078807, + 0x497b8807, 0x0501fab2, 0x4a038808, 0x00000210, + 0x42006000, 0xfcf8ffff, 0x42006800, 0x01000000, + 0x05f9f812, 0x5c001000, 0x480b8801, 0x42000800, + 0x001144ba, 0x50040000, 0x48038803, 0x58040001, + 0x48038804, 0x58040002, 0x4803880b, 0x58040003, + 0x4803888e, 0x58040004, 0x4803888f, 0x58040005, + 0x48038890, 0x58040006, 0x48038891, 0x58040007, + 0x48038892, 0x58040008, 0x48038893, 0x58040009, + 0x48038899, 0x5804000a, 0x4803889e, 0x5804000b, + 0x480388aa, 0x90040c0f, 0x41c41800, 0x60c0b000, + 0x50040000, 0x48001850, 0x80040800, 0x800c1800, + 0x8058b040, 0x05fe07fb, 0x41c41800, 0x6080b000, + 0x50040000, 0x48001810, 0x80040800, 0x800c1800, + 0x8058b040, 0x05fe07fb, 0x497b8830, 0x6100b000, + 0x50040000, 0x48038831, 0x80040800, 0x8058b040, + 0x05fe07fc, 0x497b88ac, 0x6040b000, 0x50040000, + 0x480388ad, 0x80040800, 0x8058b040, 0x05fe07fc, + 0x497b8880, 0x41780000, 0x05d9ff15, 0x59c408a4, + 0x90040d0f, 0x9004058c, 0x05d20997, 0x4a038805, + 0x04000000, 0x5c00b000, 0x1c01f000, 0x4803c856, + 0x4c580000, 0x4ce80000, 0x42000000, 0x00112346, + 0x0539facf, 0x59c41008, 0x4c080000, 0x82081500, + 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500, + 0x00003e02, 0x05000003, 0x6051d000, 0x0509ffdd, + 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806, + 0x0501fa48, 0x64438805, 0x4a038808, 0x00000204, + 0x6194b000, 0x59c40005, 0x8c000508, 0x05020013, + 0x61a1d007, 0x0509ffcf, 0x8058b040, 0x05fe07fa, + 0x601c2000, 0x0501f939, 0x0501fa33, 0x0515f86c, + 0x4803c856, 0x59c410a3, 0x84081518, 0x05ddfa74, + 0x4a038808, 0x00000208, 0x64075045, 0x6006d800, + 0x90000541, 0x0501f034, 0x60042000, 0x0501f92b, + 0x05d5f87f, 0x42000000, 0x0011243d, 0x0539faa0, + 0x61f819ff, 0x60082000, 0x05d5fc8b, 0x497b8880, + 0x59a80050, 0x82000500, 0x0000ffff, 0x4c000000, + 0x05d9fecf, 0x5c000000, 0x48038880, 0x59c410a3, + 0x84081518, 0x05ddfa5a, 0x4a038808, 0x00000200, 0x64238805, 0x6194b000, 0x4a038805, 0x000000f0, - 0x05ddfbcb, 0x61c00801, 0x59c40005, 0x80040d00, - 0x05000006, 0x61a1d007, 0x0509fe1f, 0x8058b040, - 0x05fe07f6, 0x05fdf7d1, 0x59c410a3, 0x84081558, - 0x05ddfcb3, 0x60082000, 0x0501f900, 0x59c40006, - 0x82000540, 0x000000f0, 0x48038806, 0x59a80040, + 0x05ddf95f, 0x61c00801, 0x59c40005, 0x80040d00, + 0x05000006, 0x61a1d007, 0x0509ff9e, 0x8058b040, + 0x05fe07f6, 0x05fdf7cf, 0x59c410a3, 0x84081558, + 0x05ddfa47, 0x60082000, 0x0501f904, 0x59c40006, + 0x82000540, 0x000000f0, 0x48038806, 0x59a80043, 0x80000540, 0x05020002, 0x80000000, 0x48038893, - 0x80000580, 0x4df00000, 0x05ddfbd5, 0x5c03e000, + 0x80000580, 0x4df00000, 0x05ddf969, 0x5c03e000, 0x5c001000, 0x480b8808, 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000, 0x59c41008, 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500, 0x00003e02, - 0x05000003, 0x6051d000, 0x0509fdf7, 0x05d5fa88, - 0x42000000, 0x0010e49a, 0x0535fdca, 0x05d5fe92, - 0x60002000, 0x0501f8d9, 0x4a038808, 0x00000202, - 0x80000580, 0x48038880, 0x48038893, 0x05ddf8f4, - 0x6010b007, 0x4a038805, 0x000000f0, 0x05ddfb8c, - 0x61c00801, 0x59c40005, 0x80040d00, 0x05000016, - 0x82000500, 0x000000d0, 0x05020015, 0x619dd000, - 0x0509fddd, 0x8058b040, 0x05fe07f3, 0x601c2000, - 0x0501f8c2, 0x0511fe28, 0x0501f9bb, 0x4a038808, - 0x00000208, 0x64075042, 0x6006d800, 0x59c40006, - 0x8400050a, 0x48038806, 0x64838805, 0x90000541, - 0x0501f01b, 0x60082000, 0x0501f8b4, 0x497b8880, - 0x59a80040, 0x80000540, 0x05020002, 0x80000000, - 0x48038893, 0x59a8004d, 0x82000500, 0x0000ffff, - 0x4c000000, 0x05ddf8ca, 0x5c000000, 0x48038880, - 0x59c410a3, 0x84081518, 0x05ddfc55, 0x4a038808, - 0x00000200, 0x6095d000, 0x0509fdb7, 0x59c410a3, - 0x84081558, 0x05ddfc4e, 0x80000580, 0x4df00000, - 0x05ddfb7b, 0x5c03e000, 0x5c001000, 0x480b8808, - 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856, - 0x60042000, 0x0501f891, 0x59c40004, 0x82000500, - 0x00003e02, 0x05000008, 0x0511fdf3, 0x0501f986, - 0x4a038808, 0x00000208, 0x64075042, 0x6006d800, - 0x0501f046, 0x05d5fa2e, 0x42000000, 0x0010e49b, - 0x0535fd70, 0x05d5fe38, 0x59c40006, 0x84000508, - 0x48038806, 0x64438805, 0x850e1d4c, 0x61900800, - 0x42001000, 0x00105ff7, 0x0509fd79, 0x59c410a3, - 0x84081518, 0x05ddfc26, 0x4a038808, 0x00000200, - 0x497b8880, 0x4a038805, 0x000000f0, 0x05ddfb2c, - 0x61c00801, 0x59c40005, 0x80040d00, 0x0500000b, - 0x82000500, 0x000000e0, 0x0502000d, 0x61a1d007, - 0x0509fd7d, 0x0509fbe2, 0x59940004, 0x80000540, - 0x05fe07f1, 0x0501f021, 0x59c410a3, 0x84081558, - 0x05ddfc0f, 0x60082000, 0x0501f85c, 0x4c080000, - 0x42001000, 0x00105ff7, 0x0509fd60, 0x5c001000, - 0x497b8880, 0x59a80040, 0x80000540, 0x05020002, - 0x80000000, 0x48038893, 0x59a8004d, 0x82000500, - 0x0000ffff, 0x4c000000, 0x05ddf86d, 0x5c000000, - 0x48038880, 0x850e1d0c, 0x59c40006, 0x84000548, - 0x48038806, 0x05ddfb26, 0x59c40008, 0x82000540, - 0x00000280, 0x48038808, 0x1c01f000, 0x4803c856, - 0x4d400000, 0x4d3c0000, 0x0511fda3, 0x0535fe39, - 0x0502002b, 0x599c1017, 0x8d0c0500, 0x05020009, - 0x8c08051a, 0x05000026, 0x850e1d42, 0x60128000, - 0x60227800, 0x8d0c0520, 0x05020006, 0x0501f01d, - 0x60128000, 0x417a7800, 0x8d0c0520, 0x05000019, - 0x0535fe30, 0x42024800, 0x0010e512, 0x59240200, - 0x8c000500, 0x05000006, 0x4c580000, 0x60040800, - 0x60001002, 0x050dfc77, 0x5c00b000, 0x91264c0d, - 0x8058b040, 0x05fe07f6, 0x61fe41ff, 0x4d400000, - 0x603a8000, 0x600c3000, 0x61fe89ff, 0x0531fccf, - 0x5c028000, 0x599c0817, 0x8c04050a, 0x05020004, - 0x4943c857, 0x493fc857, 0x05ddfff4, 0x497b8880, - 0x6006d800, 0x05fdfd50, 0x5c027800, 0x5c028000, - 0x1c01f000, 0x05d5f9b2, 0x42000000, 0x0010e49c, - 0x0535fcf4, 0x05d5fdbc, 0x60040000, 0x05ddf824, - 0x64078880, 0x05ddf2e2, 0x42000800, 0x0010dce7, + 0x05000003, 0x6051d000, 0x0509ff76, 0x05d5f838, + 0x42000000, 0x0011243e, 0x0539fa59, 0x61f819ff, + 0x60042000, 0x05d5fc44, 0x60002000, 0x0501f8db, + 0x4a038808, 0x00000202, 0x80000580, 0x48038880, + 0x48038893, 0x05d9fe86, 0x6010b007, 0x4a038805, + 0x000000f0, 0x05ddf91e, 0x61c00801, 0x59c40005, + 0x80040d00, 0x05000016, 0x82000500, 0x000000d0, + 0x05020015, 0x619dd000, 0x0509ff5a, 0x8058b040, + 0x05fe07f3, 0x601c2000, 0x0501f8c4, 0x0511fff8, + 0x0501f9bd, 0x4a038808, 0x00000208, 0x64075045, + 0x6006d800, 0x59c40006, 0x8400050a, 0x48038806, + 0x64838805, 0x90000541, 0x0501f01b, 0x60082000, + 0x0501f8b6, 0x497b8880, 0x59a80043, 0x80000540, + 0x05020002, 0x80000000, 0x48038893, 0x59a80050, + 0x82000500, 0x0000ffff, 0x4c000000, 0x05d9fe5c, + 0x5c000000, 0x48038880, 0x59c410a3, 0x84081518, + 0x05ddf9e7, 0x4a038808, 0x00000200, 0x6095d000, + 0x0509ff34, 0x59c410a3, 0x84081558, 0x05ddf9e0, + 0x80000580, 0x4df00000, 0x05ddf90d, 0x5c03e000, + 0x5c001000, 0x480b8808, 0x5c01d000, 0x5c00b000, + 0x1c01f000, 0x4803c856, 0x60042000, 0x0501f893, + 0x59c40004, 0x82000500, 0x00003e02, 0x05000008, + 0x0511ffc3, 0x0501f988, 0x4a038808, 0x00000208, + 0x64075045, 0x6006d800, 0x0501f047, 0x05d1ffdc, + 0x42000000, 0x0011243f, 0x0539f9fd, 0x61fc19ff, + 0x05d5fbe9, 0x59c40006, 0x84000508, 0x48038806, + 0x64438805, 0x850e1d4c, 0x61900800, 0x42001000, + 0x001062db, 0x0509feee, 0x59c410a3, 0x84081518, + 0x05ddf9b7, 0x4a038808, 0x00000200, 0x497b8880, + 0x4a038805, 0x000000f0, 0x05ddf8bd, 0x61c00801, + 0x59c40005, 0x80040d00, 0x0500000b, 0x82000500, + 0x000000e0, 0x0502000d, 0x61a1d007, 0x0509fef9, + 0x0509fd0d, 0x59940004, 0x80000540, 0x05fe07f1, + 0x0501f021, 0x59c410a3, 0x84081558, 0x05ddf9a0, + 0x60082000, 0x0501f85d, 0x4c080000, 0x42001000, + 0x001062db, 0x0509fed5, 0x5c001000, 0x497b8880, + 0x59a80043, 0x80000540, 0x05020002, 0x80000000, + 0x48038893, 0x59a80050, 0x82000500, 0x0000ffff, + 0x4c000000, 0x05d9fdfe, 0x5c000000, 0x48038880, + 0x850e1d0c, 0x59c40006, 0x84000548, 0x48038806, + 0x05ddf8b7, 0x59c40008, 0x82000540, 0x00000280, + 0x48038808, 0x1c01f000, 0x4803c856, 0x4d400000, + 0x4d3c0000, 0x0511ff72, 0x0539fac5, 0x0502002b, + 0x599c1017, 0x8d0c0500, 0x05020009, 0x8c08051a, + 0x05000026, 0x850e1d42, 0x60128000, 0x60227800, + 0x8d0c0520, 0x05020006, 0x0501f01d, 0x60128000, + 0x417a7800, 0x8d0c0520, 0x05000019, 0x0539fabc, + 0x42024800, 0x001124b6, 0x59240200, 0x8c000500, + 0x05000006, 0x4c580000, 0x60040800, 0x60001002, + 0x050dfe3c, 0x5c00b000, 0x91264c0d, 0x8058b040, + 0x05fe07f6, 0x61fe41ff, 0x4d400000, 0x603a8000, + 0x600c3000, 0x61fe89ff, 0x0535f927, 0x5c028000, + 0x599c0817, 0x8c04050a, 0x05020004, 0x4943c857, + 0x493fc857, 0x05ddfd98, 0x497b8880, 0x6006d800, + 0x05fdfd45, 0x5c027800, 0x5c028000, 0x1c01f000, + 0x05d1ff5f, 0x42000000, 0x00112440, 0x0539f980, + 0x61fc19ff, 0x05d5fb6c, 0x60040000, 0x05d9fdb4, + 0x64078880, 0x05ddf072, 0x42000800, 0x00111c6d, 0x48100802, 0x90101488, 0x05001008, 0x58040001, 0x4803c857, 0x4813c857, 0x58040003, 0x80000000, 0x48000803, 0x60082000, 0x58040001, 0x9000148b, 0x05001007, 0x4803c857, 0x4813c857, 0x58040003, 0x80000000, 0x48000803, 0x60000000, 0x48000800, 0x59c428a4, 0x90142d0f, 0x90142d8c, 0x0c000002, - 0x0501f0fb, 0x00106314, 0x0010632e, 0x00106348, - 0x00106362, 0x0010637c, 0x00106392, 0x001063a1, - 0x001063b4, 0x001063c7, 0x001063da, 0x001063dc, - 0x40100000, 0x0c01f001, 0x0010631e, 0x00106320, - 0x00106322, 0x00106323, 0x00106325, 0x00106327, - 0x0010632a, 0x0010632c, 0x64080801, 0x1c01f000, + 0x0501f0fb, 0x00106604, 0x0010661e, 0x00106638, + 0x00106652, 0x0010666c, 0x00106682, 0x00106691, + 0x001066a4, 0x001066b7, 0x001066ca, 0x001066cc, + 0x40100000, 0x0c01f001, 0x0010660e, 0x00106610, + 0x00106612, 0x00106613, 0x00106615, 0x00106617, + 0x0010661a, 0x0010661c, 0x64080801, 0x1c01f000, 0x640c0801, 0x0501f0bc, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f0ba, 0x64140801, 0x0501f8be, 0x0501f0ba, 0x64140801, 0x0501f0bb, 0x4813c857, 0x1c01f000, 0x40100000, 0x0c01f001, - 0x00106338, 0x0010633a, 0x0010633c, 0x0010633d, - 0x0010633f, 0x00106341, 0x00106344, 0x00106346, + 0x00106628, 0x0010662a, 0x0010662c, 0x0010662d, + 0x0010662f, 0x00106631, 0x00106634, 0x00106636, 0x64080801, 0x1c01f000, 0x640c0801, 0x1c01f000, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f0a0, 0x64140801, 0x0501f8a4, 0x0501f0a0, 0x64140801, 0x1c01f000, 0x64140801, 0x0501f099, - 0x40100000, 0x0c01f001, 0x00106352, 0x00106353, - 0x00106355, 0x00106357, 0x00106359, 0x0010635b, - 0x0010635e, 0x00106360, 0x1c01f000, 0x640c0801, + 0x40100000, 0x0c01f001, 0x00106642, 0x00106643, + 0x00106645, 0x00106647, 0x00106649, 0x0010664b, + 0x0010664e, 0x00106650, 0x1c01f000, 0x640c0801, 0x1c01f000, 0x64000801, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f086, 0x64140801, 0x0501f88a, 0x0501f086, 0x64140801, 0x1c01f000, 0x64140801, 0x0501f07f, 0x40100000, 0x0c01f001, - 0x0010636c, 0x0010636e, 0x0010636f, 0x00106371, - 0x00106373, 0x00106375, 0x00106378, 0x0010637a, + 0x0010665c, 0x0010665e, 0x0010665f, 0x00106661, + 0x00106663, 0x00106665, 0x00106668, 0x0010666a, 0x64080801, 0x1c01f000, 0x1c01f000, 0x64000801, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f06c, 0x64140801, 0x0501f870, 0x0501f06c, 0x64140801, 0x1c01f000, 0x64140801, 0x0501f065, - 0x40100000, 0x0c01f001, 0x00106386, 0x00106388, - 0x00106388, 0x00106389, 0x00106388, 0x0010638b, - 0x0010638e, 0x00106390, 0x64080801, 0x1c01f000, + 0x40100000, 0x0c01f001, 0x00106676, 0x00106678, + 0x00106678, 0x00106679, 0x00106678, 0x0010667b, + 0x0010667e, 0x00106680, 0x64080801, 0x1c01f000, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64140801, 0x0501f85a, 0x0501f056, 0x64140801, 0x1c01f000, 0x64140801, 0x0501f04f, 0x40100000, 0x0c01f001, - 0x001063a0, 0x001063a0, 0x001063a0, 0x0010639c, - 0x0010639e, 0x001063a0, 0x001063a0, 0x001063a0, + 0x00106690, 0x00106690, 0x00106690, 0x0010668c, + 0x0010668e, 0x00106690, 0x00106690, 0x00106690, 0x641c0801, 0x1c01f000, 0x64100801, 0x1c01f000, - 0x1c01f000, 0x40100000, 0x0c01f001, 0x001063ab, - 0x001063ad, 0x001063ad, 0x001063ae, 0x001063b0, - 0x001063b2, 0x001063b2, 0x001063b2, 0x64080801, + 0x1c01f000, 0x40100000, 0x0c01f001, 0x0010669b, + 0x0010669d, 0x0010669d, 0x0010669e, 0x001066a0, + 0x001066a2, 0x001066a2, 0x001066a2, 0x64080801, 0x1c01f000, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f02f, 0x64200801, 0x1c01f000, - 0x40100000, 0x0c01f001, 0x001063be, 0x001063c0, - 0x001063c2, 0x001063c2, 0x001063c3, 0x001063c5, - 0x001063c5, 0x001063c5, 0x64080801, 0x1c01f000, + 0x40100000, 0x0c01f001, 0x001066ae, 0x001066b0, + 0x001066b2, 0x001066b2, 0x001066b3, 0x001066b5, + 0x001066b5, 0x001066b5, 0x64080801, 0x1c01f000, 0x640c0801, 0x1c01f000, 0x1c01f000, 0x64100801, 0x0501f01c, 0x64200801, 0x1c01f000, 0x40100000, - 0x0c01f001, 0x001063d1, 0x001063d1, 0x001063d3, - 0x001063d4, 0x001063d6, 0x001063d3, 0x001063d8, - 0x001063d3, 0x64140801, 0x0501f00b, 0x1c01f000, + 0x0c01f001, 0x001066c1, 0x001066c1, 0x001066c3, + 0x001066c4, 0x001066c6, 0x001066c3, 0x001066c8, + 0x001066c3, 0x64140801, 0x0501f00b, 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801, 0x1c01f000, 0x64200801, 0x1c01f000, 0x64240801, 0x1c01f000, - 0x1c01f000, 0x42000000, 0x0010e38f, 0x0535f3fd, - 0x42000000, 0x0010e38c, 0x0535f3fa, 0x42000000, - 0x0010e38e, 0x0535f3f7, 0x42000000, 0x0010e38d, - 0x0535f3f4, 0x42000800, 0x0010dce7, 0x58040001, + 0x1c01f000, 0x42000000, 0x00112330, 0x0539f088, + 0x42000000, 0x0011232d, 0x0539f085, 0x42000000, + 0x0011232f, 0x0539f082, 0x42000000, 0x0011232e, + 0x0539f07f, 0x42000800, 0x00111c6d, 0x58040001, 0x48000800, 0x64140801, 0x64200802, 0x1c01f000, - 0x42000800, 0x0010dce7, 0x58040001, 0x48000800, + 0x42000800, 0x00111c6d, 0x58040001, 0x48000800, 0x64040801, 0x64280802, 0x1c01f000, 0x42000800, - 0x0010dce7, 0x58040001, 0x48000800, 0x64180801, - 0x64240802, 0x1c01f000, 0x42000800, 0x0010dce7, + 0x00111c6d, 0x58040001, 0x48000800, 0x64180801, + 0x64240802, 0x1c01f000, 0x42000800, 0x00111c6d, 0x64280801, 0x64280800, 0x1c01f000, 0x496fc857, - 0x4813c857, 0x40100000, 0x0c01f001, 0x0010641d, - 0x0010641d, 0x0010641d, 0x0010641d, 0x0010640f, - 0x00106417, 0x0010641b, 0x0010641d, 0x59a80249, + 0x4813c857, 0x40100000, 0x0c01f001, 0x0010670d, + 0x0010670d, 0x0010670d, 0x0010670d, 0x001066ff, + 0x00106707, 0x0010670b, 0x0010670d, 0x59a8024c, 0x8c000506, 0x05000003, 0x8c000502, 0x0500000a, 0x0501f80a, 0x05fe07cb, 0x0501f007, 0x0501f807, 0x05000005, 0x05fdffca, 0x05fdf7cc, 0x0501f803, 0x05fe07ca, 0x1c01f000, 0x496fc857, 0x416c0000, - 0x90000c88, 0x05d219b9, 0x0c01f001, 0x0010642b, - 0x0010642d, 0x0010642d, 0x0010642d, 0x0010642b, - 0x0010642b, 0x0010642b, 0x0010642d, 0x80000580, + 0x90000c88, 0x05ce1f04, 0x0c01f001, 0x0010671b, + 0x0010671d, 0x0010671d, 0x0010671d, 0x0010671b, + 0x0010671b, 0x0010671b, 0x0010671d, 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000, 0x59a80005, 0x8c000506, 0x05020002, 0x1c01f000, 0x41781800, - 0x42000800, 0x0010dce7, 0x58040001, 0x40002000, - 0x0c01f001, 0x0010644d, 0x00106446, 0x00106445, - 0x00106444, 0x0010644e, 0x00106448, 0x00106447, - 0x00106452, 0x00106448, 0x00106445, 0x0010644d, + 0x42000800, 0x00111c6d, 0x58040001, 0x40002000, + 0x0c01f001, 0x0010673d, 0x00106736, 0x00106735, + 0x00106734, 0x0010673e, 0x00106738, 0x00106737, + 0x00106742, 0x00106738, 0x00106735, 0x0010673d, 0x800c1800, 0x800c1800, 0x800c1800, 0x800c1800, - 0x800c1800, 0x60dc1100, 0x05f1fb92, 0x481350a8, - 0x1c01f000, 0x1c01f000, 0x59a800a8, 0x90000584, - 0x05fe07f7, 0x05fdf7fc, 0x59a800a8, 0x90000587, - 0x05fe07f2, 0x05fdf7f8, 0x64075042, 0x4a035041, - 0x0000aaaa, 0x05fdf3d8, 0x6002e000, 0x850e1d56, + 0x800c1800, 0x60dc1100, 0x05f1fa3f, 0x481350ab, + 0x1c01f000, 0x1c01f000, 0x59a800ab, 0x90000584, + 0x05fe07f7, 0x05fdf7fc, 0x59a800ab, 0x90000587, + 0x05fe07f2, 0x05fdf7f8, 0x64075045, 0x4a035044, + 0x0000aaaa, 0x05fdf3cc, 0x6002e000, 0x850e1d56, 0x497b3000, 0x4a03b004, 0x60000001, 0x59d80005, 0x4a03b004, 0x90000001, 0x59d80005, 0x4a03a804, 0x60000001, 0x59d40005, 0x4a03a804, 0x90000001, - 0x0501ff88, 0x0501f774, 0x58f25801, 0x4a03b004, + 0x0505f820, 0x0505f00c, 0x58f25801, 0x4a03b004, 0x10000000, 0x592c4200, 0x58201000, 0x592c220c, - 0x592cba0a, 0x0001f7ca, 0x6413c825, 0x6413c827, + 0x592cba0a, 0x0001f7f1, 0x6413c825, 0x6413c827, 0x599c0409, 0x80000d40, 0x0500001f, 0x599c0407, 0x80000540, 0x05000007, 0x800000cc, 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002, 0x59d80001, @@ -6480,332 +6668,351 @@ static const uint32_t isp_2500_risc_code[] = { 0x4803a803, 0x6423a809, 0x4a03a804, 0x10000001, 0x59e00803, 0x82040d00, 0xfffffbff, 0x82040d40, 0x00008000, 0x4807c003, 0x800409c0, 0x05000004, - 0x6006e000, 0x0004bb27, 0x0004f33b, 0x1c01f000, - 0x05d1f91e, 0x1c01f000, 0x0501f866, 0x5c03e000, - 0x0005f0d6, 0x592c1c08, 0x820c1500, 0x000000ff, - 0x800c1910, 0x820c0c00, 0x0010de60, 0x50040800, - 0x480a5c08, 0x800409c0, 0x000600ca, 0x492fc857, - 0x480fc857, 0x800c19c0, 0x05d0090c, 0x42000800, - 0x0010de60, 0x50040800, 0x48065802, 0x0501f866, - 0x0005f0d3, 0x59980000, 0x80000540, 0x000400bb, - 0x0505f00a, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106532, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00020a36, - 0x00106524, 0x00106524, 0x00106532, 0x00106532, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00020a36, - 0x492fc857, 0x497a5805, 0x42000000, 0x0010e44f, - 0x0535fab4, 0x60000008, 0x0501f015, 0x492fc857, - 0x497a5805, 0x42000000, 0x0010e44e, 0x0535faad, + 0x6006e000, 0x0004bb5d, 0x0004f371, 0x1c01f000, + 0x05cdfe69, 0x1c01f000, 0x0501f866, 0x5c03e000, + 0x0005f0fd, 0x592c1c08, 0x820c1500, 0x000000ff, + 0x800c1910, 0x820c0c00, 0x00111dfa, 0x50040800, + 0x480a5c08, 0x800409c0, 0x000600f1, 0x492fc857, + 0x480fc857, 0x800c19c0, 0x05cc0e57, 0x42000800, + 0x00111dfa, 0x50040800, 0x48065802, 0x0501f866, + 0x0005f0fa, 0x59980000, 0x80000540, 0x000400e2, + 0x0505f0a2, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106822, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00020a6c, + 0x00106814, 0x00106814, 0x00106822, 0x00106822, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00020a6c, + 0x492fc857, 0x497a5805, 0x42000000, 0x001123f3, + 0x0535ff3f, 0x60000008, 0x0501f015, 0x492fc857, + 0x497a5805, 0x42000000, 0x001123f2, 0x0535ff38, 0x60000020, 0x0501f00e, 0x492fc857, 0x497a5805, - 0x42000000, 0x0010e44d, 0x0535faa6, 0x60000040, - 0x0501f007, 0x492fc857, 0x42000000, 0x0010e450, - 0x0535faa0, 0x60000010, 0x0501f001, 0x4803c857, + 0x42000000, 0x001123f1, 0x0535ff31, 0x60000040, + 0x0501f007, 0x492fc857, 0x42000000, 0x001123f4, + 0x0535ff2b, 0x60000010, 0x0501f001, 0x4803c857, 0x592c0c08, 0x82040d00, 0xffff80ff, 0x80040540, 0x59980801, 0x800409c0, 0x05000002, 0x8400051e, - 0x48025c08, 0x0005f9f3, 0x0501febe, 0x0001fb82, + 0x48025c08, 0x0005fa1a, 0x0501ff56, 0x0001fba8, 0x91700583, 0x6006e000, 0x05000002, 0x1c01f000, - 0x58f25802, 0x812e59c0, 0x05fe07e0, 0x05d1f887, + 0x58f25802, 0x812e59c0, 0x05fe07e0, 0x05cdfdd2, 0x60081000, 0x60000801, 0x60401800, 0x0501f004, 0x600c1000, 0x41780800, 0x60181800, 0x492fc857, 0x480bc857, 0x592c0208, 0x82000500, 0x000000ff, - 0xb00005aa, 0x05000004, 0x480e5a0a, 0x0001fb82, + 0xb00005aa, 0x05000004, 0x480e5a0a, 0x0001fba8, 0x0501f00a, 0x4d400000, 0x4c300000, 0x497a5c0c, - 0x497a5c0d, 0x400a8000, 0x05fdf8c1, 0x0001fb82, + 0x497a5c0d, 0x400a8000, 0x05fdf8b5, 0x0001fba8, 0x5c006000, 0x5c028000, 0x6006e000, 0x4a006002, - 0x00000100, 0x5832580a, 0x4978600a, 0x05d1fc1f, + 0x00000100, 0x5832580a, 0x4978600a, 0x05d1f966, 0x5c025800, 0x1c01f000, 0x492fc857, 0x80140110, - 0x05fc07b3, 0x80000040, 0x05000026, 0x4a01e007, - 0x001065a0, 0x0005f0df, 0x492fc857, 0x0535fb6d, - 0x00060220, 0x492fc856, 0x83440400, 0x0010d400, - 0x50000000, 0x80026d40, 0x0500000b, 0x592e4414, - 0x81224110, 0x59340013, 0x80000130, 0x81200580, - 0x05020005, 0x4937c857, 0x59340200, 0x8c00050e, - 0x00060220, 0x60a28000, 0x41780800, 0x417a6000, - 0x05fdf897, 0x0525f88f, 0x0001f382, 0x82000500, - 0x0f000000, 0x8000012a, 0x592c0c0e, 0x82040d00, - 0x0000ff87, 0x80040540, 0x48025c0e, 0x0005f233, - 0x492fc857, 0x592c040c, 0x80000540, 0x05fe0796, - 0x8d0c050e, 0x05020008, 0x592c020b, 0x80000540, - 0x05fc0791, 0x497a5a0a, 0x05f5fd45, 0x05020003, - 0x1c01f000, 0x60a00000, 0x48025a0a, 0x0001f382, - 0x592e8a0a, 0x592c040a, 0x4947c857, 0x4803c857, - 0x82000500, 0x000000ff, 0x6004b800, 0x90000d81, - 0x0500000e, 0x417a8800, 0x61c0b80f, 0x90000d82, - 0x0500000a, 0x80000540, 0x00020382, 0x592e8a0a, - 0x0001fb00, 0x00020382, 0x592e900c, 0x592e980d, - 0x05f9f914, 0x0001f382, 0x850e1d00, 0x0001fb00, - 0x05f809f9, 0x81468800, 0x805cb840, 0x05fe07fc, - 0x0001f382, 0x592c0a0c, 0x4807c857, 0x592e4414, - 0x81224110, 0x9004058e, 0x0500006e, 0x900405aa, - 0x05000022, 0x9004058f, 0x05000624, 0x900405ae, - 0x05000622, 0xb0040589, 0x05000620, 0x4c040000, - 0x0501fd7d, 0x5c000800, 0x05020620, 0xb0040586, - 0x0500007f, 0xb0040585, 0x0500002c, 0x900405a9, - 0x0502061a, 0x592e8a0a, 0x42026800, 0x00110210, - 0x83440580, 0x0000ffff, 0x05000006, 0x05f9fc8e, - 0x0502060e, 0x59340200, 0x84000518, 0x48026a00, - 0x592e600d, 0x4933c857, 0x83300580, 0xffffffff, - 0x05020070, 0x0501f605, 0x83200580, 0x000000ff, - 0x05000008, 0x83200400, 0x0010d17b, 0x50024800, - 0x59240a00, 0x84040d16, 0x48064a00, 0x0501f5fb, - 0x42024800, 0x0010e512, 0x0535faf2, 0x59240200, - 0x8c000500, 0x05000004, 0x59240200, 0x84000516, - 0x48024a00, 0x91264c0d, 0x8058b040, 0x05fe07f8, - 0x850e1d04, 0x0501f5ed, 0x592c140b, 0x480bc857, - 0x0525fb49, 0x411e6000, 0x05020003, 0x4803c856, - 0x0501f5ea, 0x59300c07, 0x90040584, 0x05000003, - 0x4803c856, 0x0501f5e5, 0x592c020b, 0x8c000506, - 0x05000009, 0x050dfef6, 0x4df00000, 0x050dfdf7, - 0x050dfbc0, 0x5c03e000, 0x050c0ee2, 0x0515fdad, - 0x0501f5d6, 0x592e380d, 0x591c1416, 0x8c080516, - 0x050005d6, 0x59300009, 0x800001c0, 0x05ce0faf, - 0x84081554, 0x480a3c16, 0x64ea6403, 0x592c040f, - 0x80000540, 0x05000006, 0x64ee6403, 0x592c0415, - 0x4802641c, 0x592c0215, 0x4802621c, 0x64066203, - 0x42000800, 0x80000040, 0x0501fdcb, 0x05000003, - 0x492e6009, 0x0005f6ab, 0x0005feab, 0x0501f5bb, - 0x83200d80, 0x000000ff, 0x05000010, 0x42000000, - 0x0010e511, 0x50000000, 0x81200480, 0x050211c1, - 0x83200400, 0x0010d17b, 0x50024800, 0x59240200, - 0x8c000500, 0x050001bb, 0x59240206, 0x84000510, - 0x48024a06, 0x0501f5a9, 0x42024800, 0x0010e512, - 0x0535faa0, 0x59240200, 0x8c000500, 0x05000004, - 0x59240206, 0x84000510, 0x48024a06, 0x91264c0d, - 0x8058b040, 0x05fe07f8, 0x0501f59c, 0x592c120b, - 0x8c080500, 0x05020599, 0x592e8a0a, 0x592e600d, - 0x0525fafe, 0x05020003, 0x4803c856, 0x0501f597, + 0x05fc07b3, 0x80000040, 0x05000023, 0x4a01e007, + 0x0010688d, 0x0005f106, 0x492fc857, 0x0535fff8, + 0x00060249, 0x492fc856, 0x0001fb08, 0x0502000b, + 0x592e4414, 0x81224110, 0x59340013, 0x80000130, + 0x81200580, 0x05020005, 0x4937c857, 0x59340200, + 0x8c00050e, 0x00060249, 0x60a28000, 0x41780800, + 0x417a6000, 0x05fdf88e, 0x0525fb3b, 0x0001f3a8, + 0x82000500, 0x0f000000, 0x8000012a, 0x592c0c0e, + 0x82040d00, 0x0000ff87, 0x80040540, 0x48025c0e, + 0x0005f25f, 0x492fc857, 0x592c040c, 0x80000540, + 0x05fe0799, 0x8d0c050e, 0x05020008, 0x592c020b, + 0x80000540, 0x05fc0794, 0x497a5a0a, 0x05f5fc4f, + 0x05020003, 0x1c01f000, 0x60a00000, 0x48025a0a, + 0x0001f3a8, 0x592e8a0a, 0x592c040a, 0x4947c857, + 0x4803c857, 0x82000500, 0x000000ff, 0x6004b800, + 0x90000d81, 0x0500000e, 0x417a8800, 0x59a8b8ac, + 0x90000d82, 0x0500000a, 0x80000540, 0x000203a8, + 0x592e8a0a, 0x0001fb08, 0x000203a8, 0x592e900c, + 0x592e980d, 0x05f9f88d, 0x0001f3a8, 0x850e1d00, + 0x0001fb08, 0x05f80976, 0x81468800, 0x83440580, + 0x000007f0, 0x05020002, 0x60028810, 0x805cb840, + 0x05fe07f8, 0x0001f3a8, 0x592c0a0c, 0x4807c857, + 0x592e4414, 0x81224110, 0x9004058e, 0x05000074, + 0x900405aa, 0x05000028, 0x9004058f, 0x050006bb, + 0x900405ae, 0x050006b9, 0xb0040589, 0x050006b7, + 0x4c040000, 0x0501fdf4, 0x5c000800, 0x05000007, + 0x812649c0, 0x050006b5, 0x592c020a, 0x82000580, + 0x000007fe, 0x050206b1, 0xb0040586, 0x0500007f, + 0xb0040585, 0x0500002c, 0x900405a9, 0x050206ab, + 0x592e8a0a, 0x42026800, 0x001141b4, 0x83440580, + 0x0000ffff, 0x05000006, 0x05f9fc60, 0x0502069f, + 0x59340200, 0x84000518, 0x48026a00, 0x592e600d, + 0x4933c857, 0x83300580, 0xffffffff, 0x05020070, + 0x0501f696, 0x83200580, 0x000000ff, 0x05000008, + 0x83200400, 0x0010d8f9, 0x50024800, 0x59240a00, + 0x84040d16, 0x48064a00, 0x0501f68c, 0x42024800, + 0x001124b6, 0x0535ff76, 0x59240200, 0x8c000500, + 0x05000004, 0x59240200, 0x84000516, 0x48024a00, + 0x91264c0d, 0x8058b040, 0x05fe07f8, 0x850e1d04, + 0x0501f67e, 0x592c140b, 0x480bc857, 0x0525fdee, + 0x411e6000, 0x05020003, 0x4803c856, 0x0501f67b, 0x59300c07, 0x90040584, 0x05000003, 0x4803c856, - 0x0501f592, 0x59300a03, 0x90040587, 0x05000003, - 0x4803c856, 0x0501f58d, 0x59300c03, 0x90040581, - 0x0500001b, 0x90040582, 0x0500000e, 0x90040588, - 0x05000010, 0x9004058a, 0x05000005, 0x9004058c, - 0x05020021, 0x60240800, 0x0501f01e, 0x5932680a, - 0x05f9fbba, 0x0502001c, 0x60140800, 0x0501f019, - 0x417a7800, 0x05ddfca7, 0x64066407, 0x0501f006, - 0x592c120b, 0x8c08050e, 0x05000003, 0x0535facb, - 0x05020018, 0x600c0800, 0x0501f00e, 0x83340580, - 0x00110210, 0x05020007, 0x5930000a, 0x82000580, - 0x00110210, 0x05020569, 0x64066407, 0x0501f006, - 0x417a7800, 0x05ddfc93, 0x64066407, 0x602c0800, - 0x05f5fe51, 0x64066203, 0x0501fd67, 0x05000003, - 0x492e6009, 0x050df1d0, 0x050df9cf, 0x0501f557, - 0x64266403, 0x592c0215, 0x4802621c, 0x592c0415, - 0x4802641c, 0x05fdf7f4, 0x59300416, 0x8c000518, - 0x053203ff, 0x0501f097, 0x40000800, 0x58040000, - 0x80000540, 0x05fe07fd, 0x492c0800, 0x1c01f000, - 0x492fc857, 0x59300c07, 0x90040586, 0x0502008a, - 0x59340400, 0x82000580, 0x00000606, 0x05020004, - 0x59340200, 0x8c00051a, 0x000402b8, 0x59340200, - 0x8c00050e, 0x05000080, 0x59300203, 0x60067800, - 0x90000587, 0x000602b8, 0x640a6203, 0x0005f2b8, - 0x600a8000, 0x64526006, 0x4d2c0000, 0x052dfe56, + 0x0501f676, 0x592c020b, 0x8c000506, 0x05000009, + 0x0511f8bd, 0x4df00000, 0x050dffbd, 0x050dfd82, + 0x5c03e000, 0x051008a9, 0x0515ffcb, 0x0501f667, + 0x592e380d, 0x591c1416, 0x8c080516, 0x05000667, + 0x59300009, 0x800001c0, 0x05ce0cf3, 0x84081554, + 0x480a3c16, 0x64ea6403, 0x592c040f, 0x80000540, + 0x05000006, 0x64ee6403, 0x592c0415, 0x4802641c, + 0x592c0215, 0x4802621c, 0x64066203, 0x42000800, + 0x80000040, 0x0501fe5c, 0x05000003, 0x492e6009, + 0x0005f6e2, 0x0005fee2, 0x0501f64c, 0x83200d80, + 0x000000ff, 0x05000010, 0x42000000, 0x001124b5, + 0x50000000, 0x81200480, 0x050211dd, 0x83200400, + 0x0010d8f9, 0x50024800, 0x59240200, 0x8c000500, + 0x050001d7, 0x59240206, 0x84000510, 0x48024a06, + 0x0501f63a, 0x42024800, 0x001124b6, 0x0535ff24, + 0x59240200, 0x8c000500, 0x05000004, 0x59240206, + 0x84000510, 0x48024a06, 0x91264c0d, 0x8058b040, + 0x05fe07f8, 0x0501f62d, 0x592c120b, 0x8c080500, + 0x0502062a, 0x592e8a0a, 0x592e600d, 0x0525fda3, + 0x05020003, 0x4803c856, 0x0501f628, 0x59300c07, + 0x90040584, 0x05000003, 0x4803c856, 0x0501f623, + 0x59300a03, 0x90040587, 0x05000003, 0x4803c856, + 0x0501f61e, 0x83440580, 0x000007fe, 0x05020007, + 0x59240200, 0x82000500, 0x00000180, 0x05000003, + 0x0009f810, 0x0501f611, 0x59300c03, 0x90040581, + 0x05000021, 0x90040582, 0x05000014, 0x90040588, + 0x05000016, 0x9004058a, 0x05000005, 0x9004058c, + 0x05020027, 0x60240800, 0x0501f024, 0x592c0a0b, + 0x8c040510, 0x05000004, 0x48066216, 0x592c0816, + 0x4806601e, 0x5932680a, 0x05f9fb7d, 0x0502001c, + 0x60140800, 0x0501f019, 0x417a7800, 0x05ddfa38, + 0x64066407, 0x0501f006, 0x592c120b, 0x8c08050e, + 0x05000003, 0x0535ff40, 0x05020018, 0x600c0800, + 0x0501f00e, 0x83340580, 0x001141b4, 0x05020007, + 0x5930000a, 0x82000580, 0x001141b4, 0x050205eb, + 0x64066407, 0x0501f006, 0x417a7800, 0x05ddfa24, + 0x64066407, 0x602c0800, 0x05f5fd5e, 0x64066203, + 0x0501fde9, 0x05000003, 0x492e6009, 0x050df383, + 0x050dfb82, 0x0501f5d9, 0x64266403, 0x592c0215, + 0x4802621c, 0x592c0415, 0x4802641c, 0x05fdf7f4, + 0x59300416, 0x8c000518, 0x05360043, 0x0501f09c, + 0x40000800, 0x58040000, 0x80000540, 0x05fe07fd, + 0x492c0800, 0x1c01f000, 0x492fc857, 0x59300c07, + 0x90040586, 0x0502008f, 0x59340400, 0x82000580, + 0x00000606, 0x05020004, 0x59340200, 0x8c00051a, + 0x000402ed, 0x59340200, 0x8c00050e, 0x05000085, + 0x59300203, 0x60067800, 0x90000587, 0x000602ed, + 0x640a6203, 0x0005f2ed, 0x0501feda, 0x05020068, + 0x600a8000, 0x64526006, 0x4d2c0000, 0x0531fa4b, 0x5c025800, 0x59300c07, 0x4807c857, 0x90040587, - 0x0502005f, 0x492fc857, 0x64065a0a, 0x0001f382, - 0x83300580, 0xffffffff, 0x05020059, 0x592c240e, + 0x05020062, 0x492fc857, 0x64065a0a, 0x0001f3a8, + 0x83300580, 0xffffffff, 0x0502005c, 0x592c240e, 0x492fc857, 0x4813c857, 0x8c10051c, 0x05020017, - 0x8c10051a, 0x05000003, 0x8c10050a, 0x05000065, + 0x8c10051a, 0x05000003, 0x8c10050a, 0x05000068, 0x59340a00, 0x8c04050e, 0x05000003, 0x8c10051e, - 0x05000060, 0x0005ffbf, 0x05000068, 0x592c240e, + 0x05000063, 0x0005fff6, 0x05000098, 0x592c240e, 0x59243a00, 0x592c0210, 0x48026202, 0x4936600a, 0x4926601d, 0x4932580d, 0x4a026007, 0x00068000, - 0x641e6203, 0x0005f2b3, 0x592c0a10, 0x4c040000, - 0x05f9fe24, 0x5c000800, 0x05020073, 0x58080000, + 0x641e6203, 0x0005f2e8, 0x592c0a10, 0x4c040000, + 0x05f9fdf1, 0x5c000800, 0x05020076, 0x58080000, 0x49781000, 0x802041c0, 0x05000006, 0x48004000, 0x80000540, 0x05020007, 0x48226810, 0x0501f005, 0x4802680f, 0x80000540, 0x05020002, 0x497a6810, - 0x4d2c0000, 0x400a5800, 0x640a5a0a, 0x0001fb82, - 0x5c025800, 0x05fdf7c8, 0x8c10051c, 0x000602a4, - 0x0501f020, 0x4c100000, 0x05f9fb6b, 0x5c002000, - 0x0004027a, 0x42000000, 0x0010e511, 0x50000000, - 0x81200480, 0x0502102c, 0x8c10051c, 0x05000015, + 0x4d2c0000, 0x400a5800, 0x640a5a0a, 0x0001fba8, + 0x5c025800, 0x05fdf7c8, 0x8c10051c, 0x000602da, + 0x0501f020, 0x4c100000, 0x05f9fb2c, 0x5c002000, + 0x000402b0, 0x42000000, 0x001124b5, 0x50000000, + 0x81200480, 0x0502102f, 0x8c10051c, 0x05000015, 0x592c020a, 0x82000580, 0x0000ffff, 0x05020011, 0x592e600d, 0x83300580, 0xffffffff, 0x05fc07b2, - 0x0525ff87, 0x0502000e, 0x592c2210, 0x59300202, - 0x80100580, 0x0502000a, 0x59300009, 0x800001c0, - 0x05020004, 0x59300203, 0x90000587, 0x05fc079d, - 0x492fc857, 0x64a65a0a, 0x0001f382, 0x492fc857, - 0x64225a0a, 0x0001f382, 0x4803c857, 0x8c000514, - 0x05000007, 0x42000000, 0x0010e439, 0x0535f8a5, - 0x492fc857, 0x492e6009, 0x1c01f000, 0x492fc857, - 0x65165a0a, 0x0001f382, 0x492fc857, 0x64aa5a0a, - 0x0001f382, 0x492fc857, 0x64a25a0a, 0x0001f382, - 0x492fc857, 0x641a5a0a, 0x0001f382, 0x492fc857, - 0x643a5a0a, 0x0001f382, 0x90040587, 0x05fe07e4, - 0x640a5a0a, 0x0001f382, 0x05f9fe7a, 0x05020006, - 0x42000000, 0x0010e445, 0x0535f88a, 0x0529fb00, - 0x05fe0793, 0x592c040a, 0x800000c2, 0x800008c4, - 0x80040400, 0x48025807, 0x59340010, 0x492e6810, - 0x492fc857, 0x80000d40, 0x05000003, 0x492c0800, - 0x1c01f000, 0x59340203, 0x492e680f, 0x492fc857, - 0x4803c857, 0x80000540, 0x05020002, 0x64066a03, - 0x1c01f000, 0x59a8003b, 0x81640480, 0x05fe1766, - 0x42026000, 0x00111b00, 0x59300407, 0x90000586, - 0x05020007, 0x5930000a, 0x81340580, 0x05020004, - 0x59300202, 0x80040580, 0x05fc0752, 0x91326430, - 0x41580000, 0x81300480, 0x05fc17f4, 0x05fdf756, - 0x492fc857, 0x592e4414, 0x81224110, 0x0501fbda, - 0x05020052, 0x0501fac2, 0x05020050, 0x592c0208, - 0x80000112, 0x05fe05a6, 0x592e8a0a, 0x05f9faf2, - 0x0502004a, 0x05f9fa9c, 0x0502004a, 0x592e780e, - 0x493fc857, 0x8d3c053e, 0x05020005, 0x8d0c050e, - 0x05020042, 0x05f9f83a, 0x05fc05a7, 0x913c1d1f, - 0x05fc05a5, 0x592c020b, 0x82000c80, 0x00001000, - 0x05fe15a1, 0x800000c2, 0x800008c4, 0x8005d400, - 0x592e900c, 0x592e980d, 0x5934080d, 0x800409c0, - 0x05000004, 0x58041805, 0x800c19c0, 0x0502002b, - 0x913c1d1f, 0x81780040, 0x80000000, 0x800c1902, - 0x05fe17fe, 0x05fe0590, 0x0c01f001, 0x001067b0, - 0x001067b2, 0x001067bb, 0x001067bd, 0x001067bf, - 0x0521fd28, 0x0501f019, 0x05f5fff3, 0x0500001d, - 0x80e9d1c0, 0x05060f18, 0x60168000, 0x417a9000, - 0x417a9800, 0x0521fd2b, 0x0501f010, 0x61367000, - 0x0501f004, 0x613a7000, 0x0501f002, 0x614a7000, - 0x5934080d, 0x800409c0, 0x05000006, 0x4d3c0000, - 0x40067800, 0x05f5ffc4, 0x5c027800, 0x05000007, - 0x05f5fed1, 0x05220d49, 0x05000006, 0x8d3c053e, - 0x0502000a, 0x1c01f000, 0x64c25a0a, 0x0501f009, - 0x64b25a0a, 0x0501f007, 0x64a25a0a, 0x0501f005, - 0x64a65a0a, 0x0501f003, 0x497a580d, 0x64025a0a, - 0x4a025a08, 0x00000103, 0x0001f382, 0x492fc857, - 0x80140110, 0x80000040, 0x05000002, 0x05fdf54c, - 0x0501fa6a, 0x0502001e, 0x592c020b, 0x82000500, - 0x00003fff, 0x48025a0b, 0x8c000506, 0x05000003, - 0xb0000530, 0x05020003, 0x8d0c050e, 0x05020014, - 0x4a025a0a, 0x0000dead, 0x592c040c, 0x82000500, - 0x0000f0ff, 0x48025c0c, 0x05f5fb29, 0x05020002, - 0x1c01f000, 0x49425a0a, 0x8058b1c0, 0x05000007, - 0x0525fb22, 0x0501f80a, 0x44042800, 0x90580582, - 0x05020002, 0x48082801, 0x0001f382, 0x60c68000, - 0x60040800, 0x6004b000, 0x05fdf7f3, 0x592c040c, - 0x80000118, 0x912c2c0d, 0x80142c00, 0x1c01f000, - 0x492fc857, 0x641a5a0c, 0x0001f382, 0x492fc857, - 0x64065a0c, 0x0001f382, 0x492fc857, 0x592e7c0a, - 0x833c0500, 0xfffffffe, 0x05020044, 0x592c400b, - 0x42026000, 0x00111b00, 0x41581800, 0x400c0000, - 0x81300480, 0x05021028, 0x59300203, 0x90000580, - 0x0500000c, 0x59300009, 0x80000d40, 0x05000009, - 0x58043003, 0x58183211, 0x592c020c, 0x80180580, - 0x05020004, 0x58040009, 0x80200580, 0x05000003, - 0x91326430, 0x05fdf7ee, 0x58040208, 0x82000500, - 0x000000ff, 0xb0000d93, 0x0500000d, 0xb0000d88, - 0x0500000b, 0x90000d98, 0x05000009, 0x90000da9, - 0x05000007, 0x90000d94, 0x05000005, 0xb00005a8, - 0x05000003, 0x90000582, 0x05fe07ee, 0x4d2c0000, - 0x051dffd9, 0x5c025800, 0x05000018, 0x64025a0a, - 0x0001f382, 0x592e8a0a, 0x83440480, 0x000007f0, - 0x05021012, 0x83440400, 0x0010d400, 0x50000000, - 0x80026d40, 0x0500000d, 0x4d2c0000, 0x05f5ff16, - 0x05000009, 0x60168000, 0x592c0a0c, 0x417a6000, - 0x05f9fddb, 0x0521fdd8, 0x0001fb82, 0x5c025800, - 0x05fdf7eb, 0x5c025800, 0x64c65a0a, 0x0001f382, - 0x492fc857, 0x592c020a, 0x90000586, 0x05000003, - 0x0501f9ee, 0x05020019, 0x4d2c0000, 0x05d1f923, - 0x05000011, 0x492fc857, 0x412f4000, 0x05d1f91f, - 0x0500000b, 0x492fc857, 0x412dd800, 0x05f1f84e, - 0x05f1f85d, 0x49a1d80b, 0x5c025800, 0x492dd80a, - 0x48ef4006, 0x05e1f8ea, 0x05e1f101, 0x41a25800, - 0x05d1f922, 0x5c025800, 0x4a025a0a, 0x00004005, - 0x640a5c0a, 0x0001f382, 0x4a025a0a, 0x00004001, - 0x0001f382, 0x4807c857, 0x485fc857, 0x6004b800, - 0x5c000800, 0x4c5c0000, 0x0501f005, 0x4807c857, - 0x485fc857, 0x5c000800, 0x4d780000, 0x4803c857, - 0x492fc857, 0x8c00050e, 0x05ce0d4d, 0x4203e000, - 0x50000000, 0x600cb900, 0x05cdf554, 0x492fc857, - 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000, - 0x4d2c0000, 0x4d200000, 0x4d240000, 0x4c540000, - 0x4c500000, 0x4c580000, 0x417a4000, 0x59a800d1, - 0x90000506, 0x05020141, 0x0501f9a2, 0x05020143, - 0x916c0580, 0x0500013d, 0x592cca0b, 0x592cc40b, - 0x8060c1c0, 0x0500013d, 0x42000000, 0x0010e511, - 0x50000000, 0x4c000000, 0x0535f86f, 0x5c000000, - 0x05000002, 0x80000000, 0x80600480, 0x05021133, + 0x0529fa25, 0x05020011, 0x592c2210, 0x59300202, + 0x80100580, 0x0502000d, 0x59300009, 0x800001c0, + 0x05020004, 0x59300203, 0x90000587, 0x05fc079b, + 0x492fc857, 0x64a65a0a, 0x0001f3a8, 0x42000000, + 0x001123eb, 0x0535fd1e, 0x492fc857, 0x64225a0a, + 0x0001f3a8, 0x4803c857, 0x8c000514, 0x05000007, + 0x42000000, 0x001123da, 0x0535fd15, 0x492fc857, + 0x492e6009, 0x1c01f000, 0x492fc857, 0x65165a0a, + 0x0001f3a8, 0x492fc857, 0x64aa5a0a, 0x0001f3a8, + 0x492fc857, 0x64a25a0a, 0x0001f3a8, 0x492fc857, + 0x641a5a0a, 0x0001f3a8, 0x492fc857, 0x643a5a0a, + 0x0001f3a8, 0x90040587, 0x05fe07e4, 0x640a5a0a, + 0x0001f3a8, 0x05f9fe49, 0x05020006, 0x42000000, + 0x001123e7, 0x0535fcfa, 0x0529fea8, 0x05fe0790, + 0x592c040a, 0x800000c2, 0x800008c4, 0x80040400, + 0x48025807, 0x59340010, 0x492e6810, 0x492fc857, + 0x80000d40, 0x05000003, 0x492c0800, 0x1c01f000, + 0x59340203, 0x492e680f, 0x492fc857, 0x4803c857, + 0x80000540, 0x05020002, 0x64066a03, 0x1c01f000, + 0x59a8003d, 0x81640480, 0x05fe1763, 0x40be6000, + 0x59300407, 0x90000586, 0x05020007, 0x5930000a, + 0x81340580, 0x05020004, 0x59300202, 0x80040580, + 0x05fc074e, 0x91326430, 0x41580000, 0x81300480, + 0x05fc17f4, 0x05fdf754, 0x05f1fb10, 0x05fe07d2, + 0x59a8029f, 0x80000104, 0x81640480, 0x05fc17ce, + 0x0515fe8c, 0x05fdf762, 0x492fc857, 0x592e4414, + 0x81224110, 0x0501fc30, 0x05020052, 0x0501fb18, + 0x05020050, 0x592c0208, 0x80000112, 0x05fe0584, + 0x592e8a0a, 0x05f9faa9, 0x0502004a, 0x05f9fa53, + 0x0502004a, 0x592e780e, 0x493fc857, 0x8d3c053e, + 0x05020005, 0x8d0c050e, 0x05020042, 0x05f5ff92, + 0x05fc0585, 0x913c1d1f, 0x05fc0583, 0x592c020b, + 0x82000c80, 0x00001000, 0x05fe157f, 0x800000c2, + 0x800008c4, 0x8005d400, 0x592e900c, 0x592e980d, + 0x5934080d, 0x800409c0, 0x05000004, 0x58041805, + 0x800c19c0, 0x0502002b, 0x913c1d1f, 0x81780040, + 0x80000000, 0x800c1902, 0x05fe17fe, 0x05fe056e, + 0x0c01f001, 0x00106ac2, 0x00106ac4, 0x00106acd, + 0x00106acf, 0x00106ad1, 0x0521ffaf, 0x0501f019, + 0x05f5ff4b, 0x0500001d, 0x80e9d1c0, 0x050a0820, + 0x60168000, 0x417a9000, 0x417a9800, 0x0521ffb2, + 0x0501f010, 0x61367000, 0x0501f004, 0x613a7000, + 0x0501f002, 0x614a7000, 0x5934080d, 0x800409c0, + 0x05000006, 0x4d3c0000, 0x40067800, 0x05f5ff1c, + 0x5c027800, 0x05000007, 0x05f5fe25, 0x05220fd0, + 0x05000006, 0x8d3c053e, 0x0502000a, 0x1c01f000, + 0x64c25a0a, 0x0501f009, 0x64b25a0a, 0x0501f007, + 0x64a25a0a, 0x0501f005, 0x64a65a0a, 0x0501f003, + 0x497a580d, 0x64025a0a, 0x4a025a08, 0x00000103, + 0x0001f3a8, 0x492fc857, 0x80140110, 0x80000040, + 0x05000002, 0x05fdf52a, 0x0501fac0, 0x0502001f, + 0x592c020b, 0x82000500, 0x00003fff, 0x48025a0b, + 0x8c000506, 0x05000003, 0xb0000530, 0x05020003, + 0x8d0c050e, 0x05020015, 0x4a025a0a, 0x0000dead, + 0x592c040c, 0x82000500, 0x0000f0ff, 0x48025c0c, + 0x05f5fa16, 0x05020002, 0x1c01f000, 0x49425a0a, + 0x8058b1c0, 0x05000008, 0x0525fdb6, 0x0501f80b, + 0x44042800, 0x8058b040, 0x05000003, 0x48082801, + 0x480c2802, 0x0001f3a8, 0x60c68000, 0x60040800, + 0x6004b000, 0x05fdf7f2, 0x592c040c, 0x80000118, + 0x912c2c0d, 0x80142c00, 0x1c01f000, 0x492fc857, + 0x641a5a0c, 0x0001f3a8, 0x492fc857, 0x64065a0c, + 0x0001f3a8, 0x492fc857, 0x592e7c0a, 0x833c0500, + 0xfffffffe, 0x05020046, 0x592c400b, 0x40be6000, + 0x41581800, 0x400c0000, 0x81300480, 0x0502102a, + 0x59300203, 0x90000580, 0x0500000c, 0x59300009, + 0x80000d40, 0x05000009, 0x58043003, 0x58183211, + 0x592c020c, 0x80180580, 0x05020004, 0x58040009, + 0x80200580, 0x05000003, 0x91326430, 0x05fdf7ee, + 0x58040208, 0x82000500, 0x000000ff, 0xb0000d93, + 0x0500000d, 0xb0000d88, 0x0500000b, 0x90000d98, + 0x05000009, 0x90000da9, 0x05000007, 0x90000d94, + 0x05000005, 0xb00005a8, 0x05000003, 0x90000582, + 0x05fe07ee, 0x050dfe84, 0x4d2c0000, 0x0521fa38, + 0x5c025800, 0x0500001a, 0x050dfe70, 0x64025a0a, + 0x0001f3a8, 0x592e8a0a, 0x83440c80, 0x000007f0, + 0x05001004, 0x83440c80, 0x00000800, 0x05001010, + 0x0001fb08, 0x0502000e, 0x4d2c0000, 0x592c400b, + 0x05f5fe6b, 0x05000009, 0x60168000, 0x592c0a0c, + 0x417a6000, 0x05f9fdaa, 0x0525f85c, 0x0001fba8, + 0x5c025800, 0x05fdf7ea, 0x5c025800, 0x050dfe57, + 0x64c65a0a, 0x0001f3a8, 0x492fc857, 0x592c020a, + 0x90000586, 0x05000003, 0x0501fa40, 0x05020019, + 0x4d2c0000, 0x05cdfe44, 0x05000011, 0x492fc857, + 0x412f4000, 0x05cdfe40, 0x0500000b, 0x492fc857, + 0x412dd800, 0x05edfedb, 0x05edfeea, 0x49a1d80b, + 0x5c025800, 0x492dd80a, 0x48ef4006, 0x05ddfe7c, + 0x05ddf693, 0x41a25800, 0x05cdfe43, 0x5c025800, + 0x4a025a0a, 0x00004005, 0x640a5c0a, 0x0001f3a8, + 0x4a025a0a, 0x00004001, 0x0001f3a8, 0x4807c857, + 0x485fc857, 0x6004b800, 0x5c000800, 0x4c5c0000, + 0x0501f005, 0x4807c857, 0x485fc857, 0x5c000800, + 0x4d780000, 0x4803c857, 0x492fc857, 0x8c00050e, + 0x05ce0a72, 0x4203e000, 0x50000000, 0x600cb900, + 0x05cdf279, 0x492fc857, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x4d040000, 0x4d2c0000, 0x4d200000, + 0x4d240000, 0x4c540000, 0x4c500000, 0x4c580000, + 0x80ddb9c0, 0x0500000d, 0x48dfc857, 0x58dc7802, + 0x58dcb803, 0x58dcc004, 0x58dcc805, 0x4867c857, + 0x58de0806, 0x4907c857, 0x58de4007, 0x58de4808, + 0x4c3c0000, 0x0501f121, 0x417a4000, 0x59a800d6, + 0x90000506, 0x05020159, 0x0501f9e6, 0x0502015b, + 0x916c0580, 0x05000155, 0x592cca0b, 0x592cc40b, + 0x8060c1c0, 0x05000155, 0x42000000, 0x001124b5, + 0x50000000, 0x4c000000, 0x0535fcc6, 0x5c000000, + 0x05000002, 0x80000000, 0x80600480, 0x0502114b, 0x912c7c0c, 0x592c040a, 0x4803c857, 0x8c000500, - 0x05000004, 0x0535f864, 0x0500012c, 0x0501f002, + 0x05000004, 0x0535fcbb, 0x05000144, 0x0501f002, 0x60064000, 0x60060800, 0x4200b800, 0xffffffff, 0x83200580, 0x000000e1, 0x05020003, 0x4200b800, 0x3fffffff, 0x503c0000, 0x805cbd00, 0x05020003, - 0x91224420, 0x0501f00f, 0x805cb902, 0x05021009, - 0x83200400, 0x0010d17b, 0x50024800, 0x90640580, - 0x05000010, 0x8c640506, 0x05020095, 0x0501f113, - 0x81060800, 0x81224000, 0x910404a1, 0x05fc17f3, - 0x803c7800, 0x83200480, 0x00000100, 0x05fc17e2, - 0x61fa4001, 0x8060c1c0, 0x05020108, 0x0501f0df, - 0x59240a00, 0x0535f84d, 0x05000004, 0x8c040500, - 0x05020102, 0x0501f004, 0x90040d03, 0x90040d83, - 0x050000fe, 0x59240c00, 0x8c04050a, 0x05020004, - 0x8d0c0520, 0x050000f9, 0x0501f003, 0x8c040508, - 0x050000f6, 0x4c3c0000, 0x4d3c0000, 0x4d300000, - 0x600a78a0, 0x417a6000, 0x05ddfd77, 0x5c026000, - 0x5c027800, 0x59240206, 0x82000500, 0xfffffcff, - 0x48024a06, 0x60040800, 0x05ddff3f, 0x05020004, - 0x4a024a00, 0x00008005, 0x0501f002, 0x64164a00, - 0x5c007800, 0x05f9ffb1, 0x0502005a, 0x59a80249, - 0x82000500, 0x00000082, 0x82000d80, 0x00000082, - 0x05000050, 0x8c00050e, 0x05020052, 0x916c0583, - 0x05020050, 0x05ddff08, 0x050000cb, 0x0501f04d, - 0x05f1fa07, 0x05000047, 0x592c1214, 0x480bc857, - 0x8c080500, 0x05000043, 0x41780800, 0x8c080504, - 0x05000004, 0x592c0815, 0x82040d00, 0xff000000, - 0x592c0414, 0x4803c857, 0x8c080502, 0x05020003, - 0x82000500, 0x00001fff, 0x80040540, 0x4803c857, - 0x4802480b, 0x82001500, 0x00001fff, 0x05ddfe0a, - 0x60203000, 0x050000b0, 0x592c0414, 0x82000d00, - 0x00001fff, 0x0501fba1, 0x0500002a, 0x8c00050a, - 0x60243000, 0x050200a8, 0x412cb800, 0x05d1f853, - 0x601c3000, 0x050000a4, 0x905ca408, 0x912cac08, - 0x6040b000, 0x0531ff72, 0x592c0408, 0x84000554, - 0x48025c08, 0x81040040, 0x82000c00, 0x0010d15b, - 0x50040800, 0x405c0000, 0x803c0480, 0x05001096, - 0x812c7c00, 0x503c0000, 0x80040580, 0x44007800, - 0x80600040, 0x48025c0b, 0x4d2c0000, 0x05d1f83b, - 0x412c0800, 0x5c025800, 0x601c3000, 0x0500008a, - 0x4806480c, 0x5924000b, 0x48000802, 0x412c0800, - 0x05ddfe41, 0x601c3000, 0x05000083, 0x0501f06f, - 0x4c3c0000, 0x05ddfcb9, 0x5c007800, 0x05000085, - 0x81060800, 0x81224000, 0x8060c040, 0x05fe0767, - 0x05f9ff52, 0x05020059, 0x0501f064, 0x59240a00, - 0x8c040500, 0x0500007d, 0x05f1f9b1, 0x05000014, - 0x592c1214, 0x8c080500, 0x05000011, 0x592c1414, - 0x82081500, 0x00001fff, 0x5924000b, 0x82000500, - 0x00001fff, 0x80080580, 0x60203000, 0x05020066, - 0x8c04051e, 0x05000006, 0x4c040000, 0x05ddfe67, - 0x5c000800, 0x82040d00, 0xffff7f1f, 0x4c3c0000, - 0x4c040000, 0x82040d00, 0xffffdffc, 0x84040d44, - 0x48064a00, 0x0531ff98, 0x05000012, 0x59240200, - 0x8c00051e, 0x0500000f, 0x8400051e, 0x48024a00, - 0x600c0800, 0x05ddfeb0, 0x05000007, 0x4813c857, - 0x4817c857, 0x58100200, 0x8400055e, 0x48002200, - 0x0501f004, 0x59a80249, 0x8400050e, 0x48035249, - 0x5c000800, 0x5c007800, 0x8c640502, 0x05020016, - 0x4c3c0000, 0x59240c08, 0x05d9f96b, 0x4c5c0000, - 0x4d3c0000, 0x600a78a0, 0x4d300000, 0x417a6000, - 0x05ddfcc9, 0x5c026000, 0x5c027800, 0x497a480b, - 0x5c00b800, 0x5c007800, 0x81060800, 0x81224000, - 0x8060c040, 0x05fe071d, 0x90640589, 0x0500000f, - 0x0501f01a, 0x916c0584, 0x05fc07ea, 0x90040d03, - 0x90040d83, 0x05fe07e7, 0x4c3c0000, 0x0501f839, + 0x91224420, 0x0501f010, 0x805cb902, 0x05021009, + 0x83200400, 0x0010d8f9, 0x50024800, 0x90640580, + 0x05000011, 0x8c640506, 0x05020096, 0x0501f12b, + 0x910404a1, 0x05021004, 0x81060800, 0x81224000, + 0x05fdf7f2, 0x803c7800, 0x83200480, 0x00000100, + 0x05fc17e1, 0x61fa4001, 0x8060c1c0, 0x0502011f, + 0x0501f0f6, 0x59240a00, 0x0535fca3, 0x05000004, + 0x8c040500, 0x05020119, 0x0501f004, 0x90040d03, + 0x90040d83, 0x05000115, 0x59240c00, 0x8c04050a, + 0x05020004, 0x8d0c0520, 0x05000110, 0x0501f003, + 0x8c040508, 0x0500010d, 0x4c3c0000, 0x4d3c0000, + 0x4d300000, 0x600a78a0, 0x417a6000, 0x05ddfaf8, + 0x5c026000, 0x5c027800, 0x59240206, 0x82000500, + 0xfffffcff, 0x48024a06, 0x60040800, 0x05ddfcc2, + 0x05020004, 0x4a024a00, 0x00008005, 0x0501f002, + 0x64164a00, 0x5c007800, 0x05f9ff76, 0x0502005a, + 0x59a8024c, 0x82000500, 0x00000082, 0x82000d80, + 0x00000082, 0x05000050, 0x8c00050e, 0x05020052, + 0x916c0583, 0x05020050, 0x05ddfc8b, 0x050000e2, + 0x0501f04d, 0x05f1f888, 0x05000047, 0x592c1214, + 0x480bc857, 0x8c080500, 0x05000043, 0x41780800, + 0x8c080504, 0x05000004, 0x592c0815, 0x82040d00, + 0xff000000, 0x592c0414, 0x4803c857, 0x8c080502, + 0x05020003, 0x82000500, 0x00001fff, 0x80040540, + 0x4803c857, 0x4802480b, 0x82001500, 0x00001fff, + 0x05ddfb8c, 0x60203000, 0x050000c7, 0x592c0414, + 0x82000d00, 0x00001fff, 0x0501fc04, 0x0500002a, + 0x8c00050a, 0x60243000, 0x050200bf, 0x412cb800, + 0x05cdfd65, 0x601c3000, 0x050000bb, 0x905ca408, + 0x912cac08, 0x6040b000, 0x0535fbc8, 0x592c0408, + 0x84000554, 0x48025c08, 0x81040040, 0x82000c00, + 0x0010d8d9, 0x50040800, 0x405c0000, 0x803c0480, + 0x050010ad, 0x812c7c00, 0x503c0000, 0x80040580, + 0x44007800, 0x80600040, 0x48025c0b, 0x4d2c0000, + 0x05cdfd4d, 0x412c0800, 0x5c025800, 0x601c3000, + 0x050000a1, 0x4806480c, 0x5924000b, 0x48000802, + 0x412c0800, 0x05ddfbc3, 0x601c3000, 0x0500009a, + 0x0501f086, 0x4c3c0000, 0x05ddfa30, 0x5c007800, + 0x0500009c, 0x81060800, 0x81224000, 0x8060c040, + 0x05fe0766, 0x05f9ff17, 0x05020070, 0x0501f07b, + 0x59240a00, 0x8c040500, 0x05000094, 0x05f1f832, + 0x05000014, 0x592c1214, 0x8c080500, 0x05000011, + 0x592c1414, 0x82081500, 0x00001fff, 0x5924000b, + 0x82000500, 0x00001fff, 0x80080580, 0x60203000, + 0x0502007d, 0x8c04051e, 0x05000006, 0x4c040000, + 0x05ddfbe9, 0x5c000800, 0x82040d00, 0xffff7f1f, + 0x4c3c0000, 0x4c040000, 0x82040d00, 0xffffdffc, + 0x84040d44, 0x48064a00, 0x0535fbee, 0x05000018, + 0x59240200, 0x8c00051e, 0x05000015, 0x8400051e, + 0x48024a00, 0x600c0800, 0x05ddfc33, 0x05000007, + 0x4813c857, 0x4817c857, 0x58100200, 0x8400055e, + 0x48002200, 0x0501f00a, 0x59a8024c, 0x8400050e, + 0x4803524c, 0x60040800, 0x05ddfc27, 0x05000004, + 0x58100200, 0x8400055e, 0x48002200, 0x5c000800, + 0x5c007800, 0x8c640502, 0x05020016, 0x4c3c0000, + 0x59240c08, 0x05d5fec0, 0x4c5c0000, 0x4d3c0000, + 0x600a78a0, 0x4d300000, 0x417a6000, 0x05ddfa44, + 0x5c026000, 0x5c027800, 0x497a480b, 0x5c00b800, 0x5c007800, 0x81060800, 0x81224000, 0x8060c040, - 0x05fe070e, 0x0501f00d, 0x916c0584, 0x0500000b, - 0x05f9fef6, 0x05020007, 0x4a035041, 0x0000aaaa, - 0x64075042, 0x6006d800, 0x05f9fe73, 0x0501f003, - 0x6006d800, 0x05f1ff2a, 0x5c00b000, 0x5c00a000, + 0x05fe0716, 0x90640589, 0x05000020, 0x0501f02b, + 0x916c0584, 0x05fc07ea, 0x90040d03, 0x90040d83, + 0x05fe07e7, 0x4c3c0000, 0x0501f84a, 0x05020011, + 0x5c007800, 0x492db801, 0x483db802, 0x485db803, + 0x4861b804, 0x4865b805, 0x4905b806, 0x4921b807, + 0x4925b808, 0x5c00b000, 0x5c00a000, 0x5c00a800, + 0x5c024800, 0x5c024000, 0x5c025800, 0x0501f021, + 0x5c007800, 0x81060800, 0x81224000, 0x8060c040, + 0x05fe06f6, 0x0501f00d, 0x916c0584, 0x0500000b, + 0x05f9fea4, 0x05020007, 0x4a035044, 0x0000aaaa, + 0x64075045, 0x6006d800, 0x05f9fe1b, 0x0501f003, + 0x6006d800, 0x05f1fde5, 0x5c00b000, 0x5c00a000, 0x5c00a800, 0x5c024800, 0x5c024000, 0x5c025800, 0x497a5a0a, 0x64025c0a, 0x592c0408, 0x8c000514, - 0x05000003, 0x05cdffc5, 0x0501f002, 0x0001fb82, + 0x05000003, 0x05cdfcc0, 0x0501f002, 0x0001fba8, 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x59240200, 0x82000500, 0xfffffffc, 0x48024a00, 0x0501f006, 0x60143000, 0x0501f004, @@ -6814,43 +7021,54 @@ static const uint32_t isp_2500_risc_code[] = { 0x5c024000, 0x5c025800, 0x481a5c0a, 0x05fdf7e3, 0x4923c857, 0x4d440000, 0x4d300000, 0x4d340000, 0x4c580000, 0x4d400000, 0x4d3c0000, 0x4c5c0000, - 0x60a68000, 0x600a7820, 0x61c0b00f, 0x417a8800, - 0x83440400, 0x0010d400, 0x50000000, 0x80026d40, - 0x05000005, 0x59340013, 0x80000130, 0x81200580, - 0x0500081c, 0x81468800, 0x8058b040, 0x05fe07f5, - 0x61fe89ff, 0x42026800, 0x00110210, 0x0501f815, - 0x9064058b, 0x0502000b, 0x61c2880f, 0x6040b000, - 0x5924b809, 0x505c0000, 0x80026d40, 0x0502080d, - 0x805cb800, 0x81468800, 0x8058b040, 0x05fe07fa, - 0x5c00b800, 0x5c027800, 0x5c028000, 0x5c00b000, - 0x5c026800, 0x5c026000, 0x5c028800, 0x1c01f000, - 0x4937c857, 0x4947c857, 0x050dfaf9, 0x4df00000, - 0x417a6000, 0x050df828, 0x050df92d, 0x050df976, - 0x0509fefc, 0x052dfc50, 0x83440580, 0x0000ffff, - 0x05000015, 0x59340c00, 0x82040580, 0x00000707, - 0x05000011, 0x82000580, 0x0000070b, 0x0500000e, - 0x4d300000, 0x4d380000, 0x0515f9dd, 0x05cc0bab, - 0x64066407, 0x4936600a, 0x4926601d, 0x602c0800, - 0x05f5fab9, 0x60067000, 0x0009f800, 0x5c027000, - 0x5c026000, 0x5c03e000, 0x050c0aca, 0x1c01f000, + 0x60a68000, 0x600a7820, 0x80ddb9c0, 0x0500000e, + 0x58de8809, 0x58dcb00a, 0x58dcb80b, 0x485fc857, + 0x4d2c0000, 0x40de5800, 0x05cdfc93, 0x4179b800, + 0x5c025800, 0x83440480, 0x000007fc, 0x05001004, + 0x0501f01b, 0x59a8b0ac, 0x417a8800, 0x0001fb08, + 0x05020006, 0x59340013, 0x80000130, 0x81200580, + 0x05000831, 0x05000024, 0x81468800, 0x83440580, + 0x000007f0, 0x05020002, 0x60028810, 0x8058b040, + 0x05fe07f3, 0x61fe89ff, 0x42026800, 0x001141b4, + 0x0501f825, 0x05000018, 0x9064058b, 0x0502000d, + 0x61c2880f, 0x6040b000, 0x5924b809, 0x505c0000, + 0x80026d40, 0x05000003, 0x0501f81b, 0x0500000e, + 0x805cb800, 0x81468800, 0x8058b040, 0x05fe07f8, + 0x90000541, 0x5c00b800, 0x5c027800, 0x5c028000, + 0x5c00b000, 0x5c026800, 0x5c026000, 0x5c028800, + 0x1c01f000, 0x4d2c0000, 0x05cdfc4f, 0x05cc08aa, + 0x412db800, 0x5c025800, 0x4a01b800, 0xaaaabbbb, + 0x4945b809, 0x4859b80a, 0x485db80b, 0x80000580, + 0x05fdf7ed, 0x4937c857, 0x4947c857, 0x050dfc5a, + 0x4df00000, 0x417a6000, 0x050df984, 0x050dfa8f, + 0x050dfad8, 0x050df858, 0x0531f80a, 0x83440580, + 0x0000ffff, 0x05000019, 0x59340c00, 0x82040580, + 0x00000707, 0x05000015, 0x82000580, 0x0000070b, + 0x05000012, 0x4d300000, 0x4d380000, 0x0515fb95, + 0x05cc0889, 0x64066407, 0x4936600a, 0x4926601d, + 0x602c0800, 0x05f5f96f, 0x60067000, 0x83440580, + 0x000007fe, 0x05020002, 0x497a6806, 0x0009f839, + 0x5c027000, 0x5c026000, 0x5c03e000, 0x050c0c27, + 0x90000541, 0x1c01f000, 0x5c027000, 0x5c026000, + 0x5c03e000, 0x050c0c21, 0x80000580, 0x1c01f000, 0x599c0018, 0x8c00052a, 0x05000004, 0x592c0003, 0x58000211, 0x80000540, 0x1c01f000, 0x599c0018, 0x8c00052a, 0x05000004, 0x592c0003, 0x5800040c, 0x81200580, 0x1c01f000, 0x599c0018, 0x8c000530, 0x05000004, 0x592c0003, 0x58000211, 0x80000540, - 0x1c01f000, 0x4c640000, 0x4c600000, 0x59a800d1, + 0x1c01f000, 0x4c640000, 0x4c600000, 0x59a800d6, 0x90000506, 0x050200f4, 0x05fdffe6, 0x050200f2, 0x916c0580, 0x050000f0, 0x497a5c0a, 0x592c220b, 0x8210c500, 0x000000ff, 0x80100110, 0x8200cd00, 0x000000ff, 0x050000e2, 0x90640483, 0x050210e0, 0x4d200000, 0x4d240000, 0x4d2c0000, 0x4d040000, 0x417a0800, 0x592c140b, 0x820a4500, 0x000000ff, - 0x4923c857, 0x0531fe87, 0x40580000, 0x81200480, - 0x050210d7, 0x83200400, 0x0010d17b, 0x50024800, - 0x90600583, 0x05020012, 0x59a80249, 0x8c000514, + 0x4923c857, 0x0535fa9a, 0x40580000, 0x81200480, + 0x050210d7, 0x83200400, 0x0010d8f9, 0x50024800, + 0x90600583, 0x05020012, 0x59a8024c, 0x8c000514, 0x0500000c, 0x59240200, 0x82001d00, 0x00002001, 0x820c1d80, 0x00002001, 0x05020006, 0x8c000510, - 0x05020004, 0x41781800, 0x05ddfb8c, 0x0501f0a4, + 0x05020004, 0x41781800, 0x05ddf8c0, 0x0501f0a4, 0x4803c857, 0x60183000, 0x0501f0ca, 0x90600582, 0x05000004, 0x59240200, 0x8c000500, 0x050200b6, 0x592c020c, 0x8c00050a, 0x05020004, 0x8d0c0520, @@ -6862,22 +7080,22 @@ static const uint32_t isp_2500_risc_code[] = { 0x592c0010, 0x9c0001c0, 0x48024804, 0x810609c0, 0x05000002, 0x912e5c85, 0x592c0a0b, 0x8c040500, 0x0500007b, 0x4d3c0000, 0x4d300000, 0x600a78a0, - 0x417a6000, 0x05ddfbb4, 0x5c026000, 0x5c027800, + 0x417a6000, 0x05ddf8f2, 0x5c026000, 0x5c027800, 0x59240206, 0x82000500, 0xfffffcff, 0x48024a06, - 0x60040800, 0x05ddfd7c, 0x05020004, 0x4a024a00, - 0x00008005, 0x0501f002, 0x64164a00, 0x05f9fdef, - 0x05020067, 0x05f1f852, 0x05000057, 0x592c120a, + 0x60040800, 0x05ddfabc, 0x05020004, 0x4a024a00, + 0x00008005, 0x0501f002, 0x64164a00, 0x05f9fd71, + 0x05020067, 0x05edfe90, 0x05000057, 0x592c120a, 0x8c080500, 0x05000054, 0x41780000, 0x8c080504, 0x05000005, 0x592c0017, 0x82000500, 0x0000ff00, 0x800000e0, 0x592c0a16, 0x8c080502, 0x05020003, 0x82040d00, 0x00001fff, 0x80040540, 0x4802480b, - 0x82001500, 0x00001fff, 0x05ddfc57, 0x60203000, + 0x82001500, 0x00001fff, 0x05ddf996, 0x60203000, 0x05000074, 0x592c0a16, 0x82040d00, 0x00001fff, - 0x0501f9ee, 0x0500003c, 0x8c00050a, 0x60243000, - 0x0502006c, 0x412cb800, 0x05cdfea0, 0x601c3000, + 0x0501fa0e, 0x0500003c, 0x8c00050a, 0x60243000, + 0x0502006c, 0x412cb800, 0x05cdfb6f, 0x601c3000, 0x05000068, 0x492fc857, 0x4c540000, 0x4c500000, 0x4c580000, 0x905ca408, 0x912cac08, 0x6040b000, - 0x0531fdbb, 0x5c00b000, 0x5c00a000, 0x5c00a800, + 0x0535f9ce, 0x5c00b000, 0x5c00a000, 0x5c00a800, 0x4a025c08, 0x00000400, 0x592c0a0b, 0x82040d00, 0x000000ff, 0x80640040, 0x800000d0, 0x80040540, 0x48025a0b, 0x4803c857, 0x592c140b, 0x80081110, @@ -6885,119 +7103,127 @@ static const uint32_t isp_2500_risc_code[] = { 0x8d0c0520, 0x05000044, 0x0501f003, 0x8c000508, 0x05000041, 0x48025a0c, 0x592c0012, 0x4802580d, 0x592c0013, 0x4802580e, 0x592c0014, 0x4802580f, - 0x592c0015, 0x48025810, 0x412e0800, 0x05cdfe73, + 0x592c0015, 0x48025810, 0x412e0800, 0x05cdfb42, 0x601c3000, 0x0500003b, 0x492e480c, 0x5924000b, - 0x48025802, 0x41040800, 0x05ddfc7b, 0x05000034, - 0x0501f016, 0x600c0800, 0x05ddfd1b, 0x0502000a, - 0x59a80249, 0x4803c857, 0x8c00050e, 0x05020008, - 0x916c0583, 0x05020006, 0x05ddfcef, 0x05000028, - 0x0501f003, 0x05ddfae9, 0x05000025, 0x8064c840, + 0x48025802, 0x41040800, 0x05ddf9ba, 0x05000034, + 0x0501f016, 0x600c0800, 0x05ddfa5b, 0x0502000a, + 0x59a8024c, 0x4803c857, 0x8c00050e, 0x05020008, + 0x916c0583, 0x05020006, 0x05ddfa2f, 0x05000028, + 0x0501f003, 0x05ddf81d, 0x05000025, 0x8064c840, 0x05000006, 0x592c140b, 0x80081110, 0x81060800, 0x912e5c05, 0x05fdf73d, 0x5c020800, 0x5c025800, 0x5c024800, 0x5c024000, 0x592c0408, 0x8c000514, - 0x05000003, 0x05cdfe5d, 0x0501f020, 0x05f9fd77, + 0x05000003, 0x05cdfb2c, 0x0501f020, 0x05f9fcf9, 0x0500001d, 0x592c0a0b, 0x8c040500, 0x0500001a, - 0x916c0584, 0x05000018, 0x6006d800, 0x05f1fdac, + 0x916c0584, 0x05000018, 0x6006d800, 0x05f1fc3b, 0x0501f015, 0x60043000, 0x0501f00e, 0x60083000, 0x0501f010, 0x600c3000, 0x0501f00a, 0x60103000, 0x0501f008, 0x60143000, 0x0501f00a, 0x60183000, 0x59240200, 0x82000500, 0xfffffffc, 0x48024a00, 0x5c020800, 0x5c025800, 0x5c024800, 0x5c024000, - 0x481a5c0a, 0x0001fb82, 0x5c00c000, 0x5c00c800, - 0x1c01f000, 0x4c580000, 0x0531fd9a, 0x40580000, - 0x81200480, 0x05021009, 0x83200400, 0x0010d17b, + 0x481a5c0a, 0x0001fba8, 0x5c00c000, 0x5c00c800, + 0x1c01f000, 0x4c580000, 0x0535f9ad, 0x40580000, + 0x81200480, 0x05021009, 0x83200400, 0x0010d8f9, 0x50024800, 0x59240200, 0x90000503, 0x90000583, - 0x5c00b000, 0x1c01f000, 0x4923c857, 0x4927c857, - 0x90000541, 0x05fdf7fb, 0x80140110, 0x80000040, - 0x05fe01bf, 0x599c0019, 0x8c000510, 0x0502000b, - 0x05f5ff3a, 0x05020002, 0x1c01f000, 0x49425a0a, - 0x48065811, 0x480a5812, 0x4943c857, 0x4807c857, - 0x480bc857, 0x0001f382, 0x592c040f, 0x82000500, - 0x0000e000, 0x82000580, 0x00006000, 0x05fc07f1, - 0x59a80249, 0x8c000508, 0x05fc07ee, 0x592c040d, - 0x82000500, 0x000000ff, 0x90000583, 0x05fe07e9, - 0x592c120f, 0x592c080e, 0x82040500, 0xff000000, - 0x80040d80, 0x80000110, 0x80081540, 0x05000004, - 0x4806580e, 0x0501f889, 0x05fdf7de, 0x60701000, - 0x60640800, 0x60c68000, 0x05fdf7dd, 0x80140110, - 0x80000040, 0x05fe0192, 0x05f9f860, 0x05020002, - 0x1c01f000, 0x49425a0a, 0x48065815, 0x480a5816, - 0x0001f382, 0x80140110, 0x05fc0189, 0x80000040, + 0x5c00b000, 0x1c01f000, 0x4923c857, 0x417a4800, + 0x90000541, 0x05fdf7fb, 0x492fc857, 0x80140110, + 0x80000040, 0x05fe0146, 0x599c0019, 0x8c000510, + 0x0502000d, 0x05f5fea3, 0x05020002, 0x1c01f000, + 0x49425a0a, 0x48065811, 0x480a5812, 0x480e5813, + 0x4943c857, 0x4807c857, 0x480bc857, 0x480fc857, + 0x0001f3a8, 0x592c040f, 0x82000500, 0x0000e000, + 0x82000580, 0x00006000, 0x05fc07ef, 0x59a8024c, + 0x8c000508, 0x05fc07ec, 0x592c040d, 0x82000500, + 0x000000ff, 0x90000583, 0x05fe07e7, 0x592c120f, + 0x592c080e, 0x82040500, 0xff000000, 0x80040d80, + 0x80000110, 0x80081540, 0x05000004, 0x4806580e, + 0x0501f8a6, 0x05fdf7dc, 0x60701000, 0x60640800, + 0x60c68000, 0x05fdf7db, 0x80140110, 0x80000040, + 0x05fe0117, 0x05f5ffc8, 0x05020002, 0x1c01f000, + 0x49425a0a, 0x48065815, 0x480a5816, 0x480e5813, + 0x0001f3a8, 0x80140110, 0x05fc010d, 0x80000040, 0x0502000a, 0x6006e000, 0x592c020e, 0x8c000504, - 0x00040218, 0x592c020b, 0x82000c80, 0x00001001, - 0x05fe118d, 0x0501f004, 0x4a01e007, 0x00020a18, - 0x0005f0df, 0x592c1017, 0x82080500, 0xffff0003, - 0x05fe0185, 0x600ae000, 0x42000000, 0x001102f1, + 0x00040241, 0x592c020b, 0x82000c80, 0x00001001, + 0x05fe1111, 0x0501f004, 0x4a01e007, 0x00020a41, + 0x0005f106, 0x592c1017, 0x82080500, 0xffff0003, + 0x05fe0109, 0x600ae000, 0x42000000, 0x00114295, 0x50007000, 0x592c0015, 0x592c0816, 0x592c1804, 0x480c7006, 0x48007007, 0x48047008, 0x492c700b, 0x4978700e, 0x4978700c, 0x0501f001, 0x4978700d, 0x82080480, 0x00000180, 0x05001006, 0x4800700f, 0x4a007005, 0x00000180, 0x65807004, 0x0501f005, 0x4978700f, 0x48087005, 0x80081104, 0x48087004, - 0x5838000a, 0x48007003, 0x40381000, 0x0001f021, - 0x4df00000, 0x4203e000, 0x50000000, 0x0001f817, - 0x05000003, 0x58f00004, 0x0801f800, 0x5c03e000, - 0x1c01f000, 0x05cdfd94, 0x05cc09fc, 0x4a02580a, - 0x00110290, 0x42000800, 0x001102f1, 0x452c0800, + 0x5838000a, 0x48007003, 0x40381000, 0x0001f029, + 0x4df00000, 0x4203e000, 0x50000000, 0x0001f81f, + 0x05000005, 0x58f00004, 0x0801f800, 0x5c03e000, + 0x1c01f000, 0x59980000, 0x80006d40, 0x05fc07fc, + 0x58347a08, 0x823c7d00, 0x000000ff, 0x903c6db3, + 0x05000007, 0x903c6d94, 0x05000005, 0xb03c6d92, + 0x05000003, 0x903c6da9, 0x05fe07f1, 0x58f06805, + 0x4c340000, 0x58f06806, 0x4c340000, 0x58f06804, + 0x4c340000, 0x0501f90d, 0x5c006800, 0x4835e004, + 0x5c006800, 0x4835e006, 0x5c006800, 0x4835e005, + 0x05fdf7e3, 0x05cdfa43, 0x05c80eaf, 0x4a02580a, + 0x00114234, 0x42000800, 0x00114295, 0x452c0800, 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e, - 0x497a580f, 0x4a025809, 0x00020b4f, 0x497a5810, + 0x497a580f, 0x4a025809, 0x00020b85, 0x497a5810, 0x4a025802, 0x00000100, 0x64065801, 0x1c01f000, - 0x42000800, 0x001102f2, 0x64040801, 0x4a000802, + 0x42000800, 0x00114296, 0x64040801, 0x4a000802, 0x00000100, 0x64400804, 0x65000805, 0x4a000809, - 0x00020914, 0x1c01f000, 0x0501f808, 0x05fc0410, - 0x64065a0c, 0x0531f0dc, 0x0501f804, 0x05fc0409, - 0x641a5a0c, 0x0531f0d8, 0x59a80005, 0x8c00051a, + 0x0002093b, 0x1c01f000, 0x0501f808, 0x05fc039b, + 0x64065a0c, 0x0531f4b1, 0x0501f804, 0x05fc0394, + 0x641a5a0c, 0x0531f4ad, 0x59a80005, 0x8c00051a, 0x1c01f000, 0x59a80005, 0x8c00051c, 0x1c01f000, 0x592c0208, 0x82000500, 0x000000ff, 0xb00005b5, 0x592c040c, 0x0502000a, 0x84000542, 0x48025c0c, - 0x592c0005, 0x4d2c0000, 0x80025d40, 0x05ce0d7f, + 0x592c0005, 0x4d2c0000, 0x80025d40, 0x05ce0a2e, 0x5c025800, 0x497a5805, 0x1c01f000, 0x84000502, - 0x48025c0c, 0x1c01f000, 0x59a8003d, 0x80080580, + 0x48025c0c, 0x1c01f000, 0x59a80040, 0x80080580, 0x05020002, 0x1c01f000, 0x480bc857, 0x42024800, - 0x0010e512, 0x480a4805, 0x480b503d, 0x497b8830, + 0x001124b6, 0x480a4805, 0x480b5040, 0x497b8830, 0x82080d40, 0x01000000, 0x48078832, 0x59c40002, - 0x8400054c, 0x48038802, 0x600c0800, 0x050df116, - 0x492fc857, 0x80140110, 0x90000581, 0x05fe00fc, + 0x8400054c, 0x48038802, 0x600c0800, 0x050df24c, + 0x492fc857, 0x80140110, 0x90000581, 0x05fe0064, 0x592c040c, 0x4803c857, 0x82000500, 0x000000f0, - 0x80000108, 0x0c01f001, 0x00106cc1, 0x00106c46, - 0x00106c72, 0x00106cc1, 0x00106c72, 0x00106cc1, - 0x00106cc1, 0x00106cc1, 0x00106cae, 0x00106cc1, - 0x00106cc1, 0x00106cc1, 0x00106cc1, 0x00106cc1, - 0x00106cc1, 0x00106cc1, 0x05edfed2, 0x0500006f, + 0x80000108, 0x0c01f001, 0x00107049, 0x00106fce, + 0x00106ffa, 0x00107049, 0x00106ffa, 0x00107049, + 0x00107049, 0x00107049, 0x00107036, 0x00107049, + 0x00107049, 0x00107049, 0x00107049, 0x00107049, + 0x00107049, 0x00107049, 0x05edfcf0, 0x0500006f, 0x592c0817, 0x4807c857, 0x82040580, 0x00000200, - 0x0502007b, 0x4d2c0000, 0x05cdfd23, 0x412c1000, + 0x0502007b, 0x4d2c0000, 0x05cdf9d2, 0x412c1000, 0x5c025800, 0x05000063, 0x480a5801, 0x492c100a, - 0x64001001, 0x4a001009, 0x00106c5f, 0x4a001003, - 0x00110672, 0x48041005, 0x592c0015, 0x48001007, - 0x592c0016, 0x48001008, 0x0001f021, 0x5832580a, - 0x812e59c0, 0x05cc0979, 0x49786001, 0x58300002, - 0x82000580, 0x00000100, 0x05020007, 0x59a80ccd, - 0x48065811, 0x59a808cf, 0x48065810, 0x64025a0a, - 0x0001f382, 0x4803c857, 0x4a006002, 0x00000100, - 0x600a8000, 0x0501f04c, 0x05edfea6, 0x05000043, - 0x05edfea9, 0x05020043, 0x592c020b, 0x4803c857, + 0x64001001, 0x4a001009, 0x00106fe7, 0x4a001003, + 0x00114616, 0x48041005, 0x592c0015, 0x48001007, + 0x592c0016, 0x48001008, 0x0001f029, 0x5832580a, + 0x812e59c0, 0x05c80e2c, 0x49786001, 0x58300002, + 0x82000580, 0x00000100, 0x05020007, 0x59a80cd2, + 0x48065811, 0x59a808d4, 0x48065810, 0x64025a0a, + 0x0001f3a8, 0x4803c857, 0x4a006002, 0x00000100, + 0x600a8000, 0x0501f04c, 0x05edfcc4, 0x05000043, + 0x05edfcc7, 0x05020043, 0x592c020b, 0x4803c857, 0x82000480, 0x00001000, 0x05021045, 0x592c000f, 0x4803c857, 0x800001c0, 0x05000045, 0x90000484, 0x05021043, 0x592c0814, 0x4807c857, 0x82040580, 0x00000200, 0x05020040, 0x592c040c, 0x8c00050a, 0x05000006, 0x592c0017, 0x4803c857, 0x82000580, - 0x00000200, 0x0502003a, 0x4d2c0000, 0x05cdfce2, + 0x00000200, 0x0502003a, 0x4d2c0000, 0x05cdf991, 0x412c1000, 0x5c025800, 0x05000022, 0x480a5801, 0x4978100b, 0x492c100a, 0x64041001, 0x4a001009, - 0x00106ca6, 0x4a001003, 0x001105f2, 0x592c040c, - 0x8c00050a, 0x05020003, 0x4a001003, 0x001106f2, + 0x0010702e, 0x4a001003, 0x00114596, 0x592c040c, + 0x8c00050a, 0x05020003, 0x4a001003, 0x00114696, 0x48041005, 0x592c0012, 0x48001007, 0x592c0013, - 0x48001008, 0x0001f021, 0x5832580a, 0x812e59c0, - 0x05cc0932, 0x49786001, 0x58300002, 0x82000580, - 0x00000100, 0x05fe07c0, 0x05edfe6a, 0x05000007, - 0x497a5a0a, 0x05f9f87c, 0x05020009, 0x1c01f000, + 0x48001008, 0x0001f029, 0x5832580a, 0x812e59c0, + 0x05c80de5, 0x49786001, 0x58300002, 0x82000580, + 0x00000100, 0x05fe07c0, 0x05edfc88, 0x05000007, + 0x497a5a0a, 0x05f5ffc9, 0x05020009, 0x1c01f000, 0x640a5810, 0x0501f004, 0x64c65810, 0x0501f002, 0x64ca5810, 0x60c68000, 0x0501f003, 0x48065810, - 0x480a5811, 0x49425a0a, 0x0001f382, 0x64325811, + 0x480a5811, 0x49425a0a, 0x0001f3a8, 0x64325811, 0x0501f008, 0x644a5811, 0x0501f006, 0x64725811, 0x0501f004, 0x64c25811, 0x0501f002, 0x64f25811, 0x64665810, 0x05fdf7f0, 0x4807c857, 0x4c580000, - 0x0531fc28, 0x42006000, 0x0010e512, 0x58301200, + 0x0535f81b, 0x42006000, 0x001124b6, 0x58301200, 0x8c08051e, 0x0500000b, 0x5830000b, 0x82000500, 0x00001fff, 0x80040580, 0x05020006, 0x82080500, 0x000000e0, 0x82000580, 0x000000e0, 0x0501f005, @@ -7007,432 +7233,458 @@ static const uint32_t isp_2500_risc_code[] = { 0x82140500, 0x000000ff, 0xb0006cbb, 0x05021033, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000, 0x4971e410, 0x4cf00000, 0x4d700000, 0x42007800, - 0x0010dd60, 0x503de000, 0x58f0700b, 0x58f06c10, - 0x483a5804, 0x90347583, 0x05020005, 0x58f0b802, + 0x00111cfa, 0x503de000, 0x58f0700b, 0x58f06c10, + 0x483a5804, 0x90347581, 0x05000005, 0x58f0b802, 0x58f0c003, 0x58f0cc00, 0x58f20807, 0x58f07012, 0x483a5802, 0x48f25803, 0x59980801, 0x4c040000, - 0x497b3001, 0x6006e000, 0x1201f800, 0x0002083d, - 0x91700583, 0x00040a3f, 0x5c000800, 0x48073001, - 0x5c02e000, 0x5c01e000, 0x42000800, 0x0010dd60, - 0x50040800, 0x58046c10, 0x90340583, 0x05020005, + 0x497b3001, 0x6006e000, 0x1201f800, 0x00020864, + 0x91700583, 0x00040a75, 0x5c000800, 0x48073001, + 0x5c02e000, 0x5c01e000, 0x42000800, 0x00111cfa, + 0x50040800, 0x58046c10, 0x90340581, 0x05000005, 0x49040807, 0x48640c00, 0x48600803, 0x485c0802, 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x5c03e000, 0x1c01f000, 0x05fdf806, 0x05fdf7fd, - 0x59c80007, 0x8c000502, 0x05000055, 0x8d0c051c, - 0x050600b2, 0x835c2c80, 0x000000ff, 0x050410af, - 0x59c82817, 0x481750d0, 0x497b9005, 0x82140500, - 0x00e00000, 0x05020046, 0x82140500, 0x000003ff, - 0x8c140516, 0x05000005, 0x90001c08, 0x42002000, - 0x001102fe, 0x0501f003, 0x90001c06, 0x41cc2000, - 0x600030c1, 0xb00c0480, 0x05001004, 0x61001000, - 0xb00c1c80, 0x0501f003, 0x400c1000, 0x41781800, - 0x54182000, 0x80102000, 0x80183000, 0x80081040, - 0x05fe07fc, 0x800c19c0, 0x05000005, 0x59c80005, - 0x80000000, 0x48039005, 0x05fdf7ee, 0x8c140516, - 0x05000003, 0x42039800, 0x00110300, 0x82140500, - 0x000003ff, 0x800018c4, 0x8c140514, 0x05000004, - 0x59cc0002, 0x90000503, 0x800c1c80, 0x480f50b6, - 0x59c40002, 0x8c00050c, 0x05020003, 0x0531fbdb, - 0x05020011, 0x82140500, 0x01f60000, 0x0502000e, - 0x0505f88e, 0x05020007, 0x4a039005, 0x00000140, - 0x82140500, 0x0e000000, 0x80000132, 0x0c01f012, - 0x800001c0, 0x0502000a, 0x4a039005, 0x00000140, - 0x0501f00b, 0x4817c857, 0x82140500, 0x00f60000, - 0x05020003, 0x0501ff76, 0x05fe07ee, 0x0505f89d, - 0x4a039005, 0x00000140, 0x0501f056, 0x4803c856, - 0x1c01f000, 0x00106d86, 0x00107139, 0x00106d81, - 0x00106d81, 0x00106d81, 0x00106d81, 0x00106d81, - 0x00106d81, 0x4803c857, 0x42000000, 0x0010e44b, - 0x0531fa58, 0x1c01f000, 0x8d0c052a, 0x05000004, - 0x4c140000, 0x05cdf954, 0x5c002800, 0x59cc0003, - 0x82000500, 0x00ff0000, 0x0502003a, 0x59cc0400, - 0x82000d00, 0x0000ff00, 0x82041500, 0x0000f000, - 0x840409c0, 0x82080580, 0x0000c000, 0x05020003, - 0x0501fd11, 0x0501f032, 0x82080580, 0x00002000, - 0x05020024, 0x916c0581, 0x05020020, 0x05f9fb0f, - 0x05020014, 0x4c040000, 0x59a8083f, 0x4807c857, - 0x90040589, 0x05000007, 0x90040583, 0x0502000b, - 0x05f9f9da, 0x59a8083f, 0x90040589, 0x05020007, - 0x81780000, 0x05c9fbee, 0x916c0582, 0x05020003, - 0x5c000800, 0x0501f00d, 0x5c000800, 0x0501f018, - 0x59cc0006, 0x82000500, 0xff000000, 0x82000580, - 0x11000000, 0x05ce08e8, 0x05020011, 0x05edfde9, - 0x0505f8af, 0x0501f00e, 0x0501f81d, 0x0501f00c, - 0x82080580, 0x00003000, 0x05020003, 0x0501fa88, - 0x0501f007, 0x82080580, 0x00008000, 0x050003e6, - 0x42000000, 0x0010e44a, 0x0531f212, 0x1c01f000, - 0x4817c857, 0x42000000, 0x0010e44a, 0x0531fa0d, - 0x916c0583, 0x05020009, 0x4c080000, 0x4c0c0000, - 0x61201100, 0x40141800, 0x80142120, 0x05edfa05, - 0x5c001800, 0x5c001000, 0x1c01f000, 0x59cc0002, - 0x82000500, 0xff000000, 0x82001580, 0x01000000, - 0x05000008, 0x82001580, 0x23000000, 0x05000005, - 0x05cdf8bd, 0x0505f85a, 0x050006c0, 0x0501f209, - 0x59a800b6, 0x90000484, 0x05001206, 0x900405a3, - 0x05020046, 0x59cc0004, 0x4803c857, 0x59cc0006, - 0x82000500, 0xff000000, 0x59cc0801, 0x82040d00, - 0x00ffffff, 0x80040540, 0x4803c857, 0x0501fca4, - 0x05cc08a9, 0x050001f7, 0x59300c07, 0x90040590, - 0x0500000a, 0x90040591, 0x05000008, 0x90040581, - 0x05000006, 0x90040584, 0x05000004, 0x90040588, - 0x05ce089d, 0x050201eb, 0x59300004, 0x82000500, - 0x80010000, 0x05000004, 0x050dfaaf, 0x05ce0896, - 0x050201e4, 0x59cc0a04, 0x48066202, 0x59cc0006, - 0x82000500, 0xffff0000, 0x82000d80, 0x02000000, - 0x05020007, 0x60567000, 0x0501fceb, 0x0501fd1d, - 0x05cc0889, 0x050001d7, 0x0009f000, 0x82000d80, - 0x02140000, 0x05fc07f8, 0x82000d80, 0x02100000, - 0x05fc07f5, 0x82000d80, 0x02100000, 0x05fc07f2, - 0x82000d80, 0x01000000, 0x05ce087b, 0x050201c9, - 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ce0876, - 0x050201c4, 0x59a800b6, 0x90000488, 0x050011c1, - 0x605a7000, 0x05fdf7e5, 0x900405a2, 0x05ce086e, - 0x050201bc, 0x59cc0004, 0x4803c857, 0x59cc0006, - 0x4803c857, 0x59cc0001, 0x4803c857, 0x59a800b6, - 0x800001c0, 0x05cc0864, 0x050001b2, 0x59a80249, - 0x8c000508, 0x05000003, 0x8c000502, 0x050001ad, - 0x59a80805, 0x8c040514, 0x05000043, 0x0501f9d0, - 0x05020041, 0x59a80249, 0x8c000518, 0x0500000e, + 0x5c03e000, 0x1c01f000, 0x05f9ff6e, 0x05fdf7fd, + 0x59a80006, 0x8c000508, 0x05000006, 0x592c6c0e, + 0x5930002f, 0x80340580, 0x82000500, 0x00000800, + 0x1c01f000, 0x59c80007, 0x8c000502, 0x0500005f, + 0x8d0c051c, 0x0506013b, 0x835c2c80, 0x000000ff, + 0x05041138, 0x59c82817, 0x481750d5, 0x497b9005, + 0x82140500, 0x00e00000, 0x0502004f, 0x82140500, + 0x000003ff, 0x8c140516, 0x05000005, 0x90001c08, + 0x42002000, 0x001142a2, 0x0501f003, 0x90001c06, + 0x41cc2000, 0x600030c1, 0xb00c0480, 0x05001004, + 0x61001000, 0xb00c1c80, 0x0501f003, 0x400c1000, + 0x41781800, 0x54182000, 0x80102000, 0x80183000, + 0x80081040, 0x05fe07fc, 0x800c19c0, 0x05000005, + 0x59c80005, 0x80000000, 0x48039005, 0x05fdf7ee, + 0x8c140516, 0x05000003, 0x42039800, 0x001142a4, + 0x82140500, 0x000003ff, 0x800018c4, 0x8c140514, + 0x05000004, 0x59cc0002, 0x90000503, 0x800c1c80, + 0x480f50bb, 0x59c40002, 0x8c00050c, 0x05020003, + 0x0531ffc5, 0x0502001a, 0x82140500, 0x01f60000, + 0x05020017, 0x0505f917, 0x05020007, 0x4a039005, + 0x00000140, 0x82140500, 0x0e000000, 0x80000132, + 0x0c01f01c, 0x800001c0, 0x05000005, 0x0505f92f, + 0x4a039005, 0x00000140, 0x1c01f000, 0x42000000, + 0x00112452, 0x0531fe56, 0x60040000, 0x0501f864, + 0x4a039005, 0x00000140, 0x0501f00c, 0x4817c857, + 0x82140500, 0x00f60000, 0x05020003, 0x0501ffcc, + 0x05fe07e5, 0x0505f91d, 0x4a039005, 0x00000140, + 0x41780000, 0x0501f056, 0x4803c856, 0x1c01f000, + 0x00107121, 0x00107518, 0x0010711c, 0x0010711c, + 0x0010711c, 0x0010711c, 0x0010711c, 0x0010711c, + 0x4803c857, 0x42000000, 0x001123ef, 0x0531fe38, + 0x1c01f000, 0x8d0c052a, 0x05000004, 0x4c140000, + 0x05c9fde8, 0x5c002800, 0x59cc0003, 0x82000500, + 0x00ff0000, 0x0502003a, 0x59cc0400, 0x82000d00, + 0x0000ff00, 0x82041500, 0x0000f000, 0x840409c0, + 0x82080580, 0x0000c000, 0x05020003, 0x0501fd67, + 0x0501f032, 0x82080580, 0x00002000, 0x05020024, + 0x916c0581, 0x05020020, 0x05f9fa5e, 0x05020014, + 0x4c040000, 0x59a80842, 0x4807c857, 0x90040589, + 0x05000007, 0x90040583, 0x0502000b, 0x05f9f923, + 0x59a80842, 0x90040589, 0x05020007, 0x81780000, + 0x05c9f886, 0x916c0582, 0x05020003, 0x5c000800, + 0x0501f00d, 0x5c000800, 0x0501f018, 0x59cc0006, + 0x82000500, 0xff000000, 0x82000580, 0x11000000, + 0x05ca0d7c, 0x05020011, 0x05edfc43, 0x0505f92e, + 0x0501f00e, 0x0501f81f, 0x0501f00c, 0x82080580, + 0x00003000, 0x05020003, 0x0501fa96, 0x0501f007, + 0x82080580, 0x00008000, 0x0500042a, 0x42000000, + 0x001123ee, 0x0531f5f2, 0x1c01f000, 0x4817c857, + 0x800001c0, 0x05020004, 0x42000000, 0x001123ee, + 0x0531fdeb, 0x916c0583, 0x05020009, 0x4c080000, + 0x4c0c0000, 0x61201100, 0x40141800, 0x80142120, + 0x05edf805, 0x5c001800, 0x5c001000, 0x1c01f000, + 0x59cc0002, 0x82000500, 0xff000000, 0x82001580, + 0x01000000, 0x05000008, 0x82001580, 0x23000000, + 0x05000005, 0x05c9fd4f, 0x0505f8d7, 0x05000713, + 0x0501f210, 0x59a800bb, 0x90000484, 0x0500120d, + 0x900405a3, 0x05020046, 0x59cc0004, 0x4803c857, + 0x59cc0006, 0x82000500, 0xff000000, 0x59cc0801, + 0x82040d00, 0x00ffffff, 0x80040540, 0x4803c857, + 0x0501fcf5, 0x05c80d3b, 0x050001fe, 0x59300c07, + 0x90040590, 0x0500000a, 0x90040591, 0x05000008, + 0x90040581, 0x05000006, 0x90040584, 0x05000004, + 0x90040588, 0x05ca0d2f, 0x050201f2, 0x59300004, + 0x82000500, 0x80010000, 0x05000004, 0x050dfbd0, + 0x05ca0d28, 0x050201eb, 0x59cc0a04, 0x48066202, 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80, - 0x7f000000, 0x05020008, 0x05edfccb, 0x05020036, - 0x59cc0c07, 0x82040d00, 0x000000ff, 0x90040581, - 0x05020031, 0x0501f9d8, 0x0500002f, 0x61327000, - 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000, - 0x05d9ffc8, 0x5c003800, 0x05000003, 0x05cdf83e, - 0x0501f18c, 0x59cc0001, 0x82000500, 0x00ffffff, - 0x0501ff20, 0x05000006, 0x61fe89ff, 0x42026800, - 0x00110210, 0x05f5ff3d, 0x481a6802, 0x599c0019, - 0x8c000510, 0x05000168, 0x59a80249, 0x8c000508, - 0x05000165, 0x59cc1006, 0x82081500, 0xffff0000, - 0x82081580, 0x03000000, 0x0502015f, 0x91641490, - 0x05001181, 0x8400054c, 0x48035249, 0x59cc1000, - 0x82081500, 0x00ffffff, 0x05fdfd98, 0x59cc0007, - 0x82000500, 0x0000ffff, 0x48038893, 0x48035040, - 0x0501f151, 0x59cc0006, 0x82000500, 0xffff0000, - 0x82000d80, 0x03000000, 0x05020032, 0x59a80249, - 0x8c000508, 0x05000020, 0x8400054c, 0x48035249, - 0x59cc0800, 0x82040d00, 0x00ffffff, 0x42024800, - 0x0010e512, 0x4807c857, 0x48064805, 0x4807503d, - 0x497b8830, 0x84040d70, 0x48078832, 0x59c40802, - 0x84040d4c, 0x48078802, 0x59cc0007, 0x82000500, - 0x0000ffff, 0x48038893, 0x48035040, 0x600c0800, - 0x59a8103d, 0x0509fe98, 0x59cc0006, 0x82000500, - 0x0000ffff, 0x05ca0ff4, 0x05020142, 0x605e7000, - 0x0501f0f3, 0x4c000000, 0x82140500, 0x0000f000, - 0x82000580, 0x00003000, 0x5c000000, 0x05fe07f3, - 0x05f9f9f6, 0x05fe07f1, 0x8c000502, 0x05fe07ef, - 0x60583002, 0x0501fdec, 0x4803c857, 0x0501f131, - 0x82000d80, 0x04000000, 0x05020013, 0x59cc0006, - 0x82000500, 0x0000ffff, 0x05ca0fdb, 0x05020129, - 0x05f9f9e6, 0x05000002, 0x0501f0d8, 0x497b50c2, - 0x42001000, 0x0010582b, 0x0501ffe7, 0x05f5fee5, - 0x59a80249, 0x84000548, 0x48035249, 0x60c27000, - 0x0501f0cf, 0x82000d80, 0x05000000, 0x05020008, - 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ca0fc6, - 0x05020114, 0x60627000, 0x0501f0c5, 0x82000d80, - 0x20100000, 0x05020003, 0x60667000, 0x0501f0c0, - 0x82000d80, 0x21100000, 0x05020003, 0x606a7000, - 0x0501f0bb, 0x82000d80, 0x52000000, 0x05020008, - 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ca0fb2, - 0x05020100, 0x606e7000, 0x0501f0b1, 0x82000d80, - 0x50000000, 0x05020008, 0x59cc0006, 0x82000500, - 0x0000ffff, 0x05ca0fa8, 0x050200f6, 0x60727000, - 0x0501f0a7, 0x82000d80, 0x13000000, 0x05020003, - 0x60d27000, 0x0501f0a2, 0x82000d80, 0x12000000, + 0x02000000, 0x05020007, 0x60567000, 0x0501fd3f, + 0x0501fd70, 0x05c80d1b, 0x050001de, 0x0009f039, + 0x82000d80, 0x02140000, 0x05fc07f8, 0x82000d80, + 0x02100000, 0x05fc07f5, 0x82000d80, 0x02100000, + 0x05fc07f2, 0x82000d80, 0x01000000, 0x05ca0d0d, + 0x050201d0, 0x59cc0006, 0x82000500, 0x0000ffff, + 0x05ca0d08, 0x050201cb, 0x59a800bb, 0x90000488, + 0x050011c8, 0x605a7000, 0x05fdf7e5, 0x900405a2, + 0x05ca0d00, 0x050201c3, 0x59cc0004, 0x4803c857, + 0x59cc0006, 0x4803c857, 0x59cc0001, 0x4803c857, + 0x59a800bb, 0x800001c0, 0x05c80cf6, 0x050001b9, + 0x0531feb4, 0x05000003, 0x0531feb7, 0x050001b5, + 0x59a8024c, 0x8c000508, 0x05000003, 0x8c000502, + 0x050001b0, 0x59a80805, 0x8c040514, 0x05000043, + 0x0501f9d8, 0x05020041, 0x59a8024c, 0x8c000518, + 0x0500000e, 0x59cc0006, 0x82000500, 0xffff0000, + 0x82000d80, 0x7f000000, 0x05020008, 0x05edfad0, + 0x05020036, 0x59cc0c07, 0x82040d00, 0x000000ff, + 0x90040581, 0x05020031, 0x0501f9e0, 0x0500002f, + 0x61327000, 0x59cc3800, 0x821c3d00, 0x00ffffff, + 0x4c1c0000, 0x05d9fcc3, 0x5c003800, 0x05000003, + 0x05c9fccc, 0x0501f18f, 0x59cc0001, 0x82000500, + 0x00ffffff, 0x0501ff6f, 0x05000006, 0x61fe89ff, + 0x42026800, 0x001141b4, 0x05f5fe71, 0x481a6802, + 0x599c0019, 0x8c000510, 0x0500016b, 0x59a8024c, + 0x8c000508, 0x05000168, 0x59cc1006, 0x82081500, + 0xffff0000, 0x82081580, 0x03000000, 0x05020162, + 0x91641490, 0x05001184, 0x8400054c, 0x4803524c, + 0x59cc1000, 0x82081500, 0x00ffffff, 0x05fdfd7f, + 0x59cc0007, 0x82000500, 0x0000ffff, 0x48038893, + 0x48035043, 0x0501f154, 0x59cc0006, 0x82000500, + 0xffff0000, 0x82000d80, 0x03000000, 0x05020032, + 0x59a8024c, 0x8c000508, 0x05000020, 0x8400054c, + 0x4803524c, 0x59cc0800, 0x82040d00, 0x00ffffff, + 0x42024800, 0x001124b6, 0x4807c857, 0x48064805, + 0x48075040, 0x497b8830, 0x84040d70, 0x48078832, + 0x59c40802, 0x84040d4c, 0x48078802, 0x59cc0007, + 0x82000500, 0x0000ffff, 0x48038893, 0x48035043, + 0x600c0800, 0x59a81040, 0x0509ffb5, 0x59cc0006, + 0x82000500, 0x0000ffff, 0x05ca0c82, 0x05020145, + 0x605e7000, 0x0501f0f3, 0x4c000000, 0x82140500, + 0x0000f000, 0x82000580, 0x00003000, 0x5c000000, + 0x05fe07f3, 0x05f9f93f, 0x05fe07f1, 0x8c000502, + 0x05fe07ef, 0x60583002, 0x0501fe3b, 0x4803c857, + 0x0501f134, 0x82000d80, 0x04000000, 0x05020013, + 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ca0c69, + 0x0502012c, 0x05f9f92f, 0x05000002, 0x0501f0d8, + 0x497b50c7, 0x42001000, 0x00105a99, 0x0505f860, + 0x05f5fe19, 0x59a8024c, 0x84000548, 0x4803524c, + 0x60c27000, 0x0501f0cf, 0x82000d80, 0x05000000, + 0x05020008, 0x59cc0006, 0x82000500, 0x0000ffff, + 0x05ca0c54, 0x05020117, 0x60627000, 0x0501f0c5, + 0x82000d80, 0x20100000, 0x05020003, 0x60667000, + 0x0501f0c0, 0x82000d80, 0x21100000, 0x05020003, + 0x606a7000, 0x0501f0bb, 0x82000d80, 0x52000000, 0x05020008, 0x59cc0006, 0x82000500, 0x0000ffff, - 0x05ca0f99, 0x050200e7, 0x60927000, 0x0501f098, - 0x82000d00, 0xff000000, 0x82040d80, 0x24000000, - 0x05020003, 0x60b67000, 0x0501f091, 0x82000d00, - 0xff000000, 0x82040d80, 0x53000000, 0x05020003, - 0x60aa7000, 0x0501f08a, 0x82000d80, 0x0f000000, - 0x05020003, 0x60827000, 0x0501f085, 0x82000d80, - 0x61040000, 0x0502004a, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x4c580000, 0x91ccc406, 0x8060b800, - 0x50600000, 0x82000500, 0x0000ffff, 0x82001480, - 0x00000401, 0x05021037, 0x90001503, 0x05020035, - 0x59a810b6, 0x80081480, 0x05001032, 0x90000484, - 0x8000b104, 0x8058b1c0, 0x0500002e, 0x59cc3800, - 0x821c3d00, 0x00ffffff, 0x4d200000, 0x05d9feed, - 0x05000003, 0x5c024000, 0x0501f026, 0x505cc800, - 0x8264c500, 0x03000000, 0x8060c130, 0x42000000, - 0x0010e410, 0x90602580, 0x05020004, 0x42000000, - 0x0010e40d, 0x0501f00a, 0x90602581, 0x05020004, - 0x42000000, 0x0010e40e, 0x0501f005, 0x90602582, - 0x05020003, 0x42000000, 0x0010e40f, 0x0531f889, - 0x60541100, 0x82642500, 0x0000ffff, 0x80641920, - 0x41202800, 0x05edf884, 0x805cb800, 0x8058b040, - 0x05fe07e3, 0x5c024000, 0x5c00b000, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x608e7000, 0x0501f040, - 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x42000000, 0x0010e448, 0x0531f072, 0x82000d80, - 0x60000000, 0x05020003, 0x60fe7000, 0x0501f034, - 0x82000d80, 0x78000000, 0x05020003, 0x61167000, - 0x0501f02f, 0x82000d80, 0x10000000, 0x05020003, - 0x613a7000, 0x0501f02a, 0x82000d80, 0x63000000, - 0x05020003, 0x612a7000, 0x0501f025, 0x82000d00, - 0xff000000, 0x82040d80, 0x56000000, 0x05020003, - 0x613e7000, 0x0501f01e, 0x82000d00, 0xff000000, - 0x82040d80, 0x57000000, 0x05020003, 0x61427000, - 0x0501f017, 0x82000d80, 0x7d000000, 0x05020003, - 0x615a7000, 0x0501f012, 0x59a80a49, 0x8c040518, - 0x0500000e, 0x82000d80, 0x7f000000, 0x0502000b, - 0x4803c857, 0x61667000, 0x59cc0c07, 0x82040d00, - 0x000000ff, 0x90040581, 0x05000005, 0x4803c857, - 0x61767000, 0x0501f002, 0x60767000, 0x59cc3800, - 0x821c3d00, 0x00ffffff, 0x821c0580, 0x00fffffe, - 0x59cc0001, 0x05020004, 0x40003000, 0x61fa880f, - 0x0501f009, 0x59cc3800, 0x821c3d00, 0x00ffffff, - 0x4c1c0000, 0x0501f91e, 0x5c003800, 0x05ca0eee, - 0x05020041, 0x05d9fe73, 0x0502003a, 0x83440480, - 0x000007f0, 0x05001001, 0x05edfb8f, 0x0500000f, - 0x4c180000, 0x05f5fabc, 0x5c003000, 0x0500000e, - 0x4c180000, 0x0501f856, 0x5c003000, 0x05020007, - 0x05f5fde6, 0x42026800, 0x00110210, 0x481a6802, - 0x61fe89ff, 0x0501f004, 0x05f1fd4f, 0x05ca0ed6, + 0x05ca0c40, 0x05020103, 0x606e7000, 0x0501f0b1, + 0x82000d80, 0x50000000, 0x05020008, 0x59cc0006, + 0x82000500, 0x0000ffff, 0x05ca0c36, 0x050200f9, + 0x60727000, 0x0501f0a7, 0x82000d80, 0x13000000, + 0x05020003, 0x60d27000, 0x0501f0a2, 0x82000d80, + 0x12000000, 0x05020008, 0x59cc0006, 0x82000500, + 0x0000ffff, 0x05ca0c27, 0x050200ea, 0x60927000, + 0x0501f098, 0x82000d00, 0xff000000, 0x82040d80, + 0x24000000, 0x05020003, 0x60b67000, 0x0501f091, + 0x82000d00, 0xff000000, 0x82040d80, 0x53000000, + 0x05020003, 0x60aa7000, 0x0501f08a, 0x82000d80, + 0x0f000000, 0x05020003, 0x60827000, 0x0501f085, + 0x82000d80, 0x61040000, 0x0502004a, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x4c580000, 0x91ccc406, + 0x8060b800, 0x50600000, 0x82000500, 0x0000ffff, + 0x82001480, 0x00000401, 0x05021037, 0x90001503, + 0x05020035, 0x59a810bb, 0x80081480, 0x05001032, + 0x90000484, 0x8000b104, 0x8058b1c0, 0x0500002e, + 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4d200000, + 0x05d9fbe8, 0x05000003, 0x5c024000, 0x0501f026, + 0x505cc800, 0x8264c500, 0x03000000, 0x8060c130, + 0x42000000, 0x001123b1, 0x90602580, 0x05020004, + 0x42000000, 0x001123ae, 0x0501f00a, 0x90602581, + 0x05020004, 0x42000000, 0x001123af, 0x0501f005, + 0x90602582, 0x05020003, 0x42000000, 0x001123b0, + 0x0531fc63, 0x60541100, 0x82642500, 0x0000ffff, + 0x80641920, 0x41202800, 0x05e9fe80, 0x805cb800, + 0x8058b040, 0x05fe07e3, 0x5c024000, 0x5c00b000, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x608e7000, + 0x0501f040, 0x5c00b000, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x42000000, 0x001123ec, 0x0531f44c, + 0x82000d80, 0x60000000, 0x05020003, 0x60fe7000, + 0x0501f034, 0x82000d80, 0x78000000, 0x05020003, + 0x61167000, 0x0501f02f, 0x82000d80, 0x10000000, + 0x05020003, 0x613a7000, 0x0501f02a, 0x82000d80, + 0x63000000, 0x05020003, 0x612a7000, 0x0501f025, + 0x82000d00, 0xff000000, 0x82040d80, 0x56000000, + 0x05020003, 0x613e7000, 0x0501f01e, 0x82000d00, + 0xff000000, 0x82040d80, 0x57000000, 0x05020003, + 0x61427000, 0x0501f017, 0x82000d80, 0x7d000000, + 0x05020003, 0x615a7000, 0x0501f012, 0x59a80a4c, + 0x8c040518, 0x0500000e, 0x82000d80, 0x7f000000, + 0x0502000b, 0x4803c857, 0x61667000, 0x59cc0c07, + 0x82040d00, 0x000000ff, 0x90040581, 0x05000005, + 0x4803c857, 0x61767000, 0x0501f002, 0x60767000, + 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x821c0580, + 0x00fffffe, 0x59cc0001, 0x05020004, 0x40003000, + 0x61fa880f, 0x0501f009, 0x59cc3800, 0x821c3d00, + 0x00ffffff, 0x4c1c0000, 0x0501f929, 0x5c003800, + 0x05ca0b7c, 0x05020044, 0x05d9fb6e, 0x0502003d, + 0x83440480, 0x000007f0, 0x05001004, 0x83440480, + 0x00000800, 0x05001011, 0x05edf9df, 0x0500000f, + 0x4c180000, 0x05f5f9e1, 0x5c003000, 0x0500000e, + 0x4c180000, 0x0501f85b, 0x5c003000, 0x05020007, + 0x05f5fd17, 0x42026800, 0x001141b4, 0x481a6802, + 0x61fe89ff, 0x0501f004, 0x05f1fbc6, 0x05ca0b61, 0x05020024, 0x59340200, 0x8c000514, 0x0500000a, 0x913805b0, 0x05000008, 0x913805bf, 0x05000006, 0x913805b4, 0x05000004, 0x913805a4, 0x05000002, - 0x61327000, 0x0511fc2a, 0x05000023, 0x4926601d, - 0x4936600a, 0x64126407, 0x83340580, 0x00110210, + 0x61327000, 0x0511fdc0, 0x05000023, 0x4926601d, + 0x4936600a, 0x64126407, 0x83340580, 0x001141b4, 0x05020005, 0x59cc0001, 0x82000500, 0x00ffffff, 0x4802602a, 0x59cc0c04, 0x48066202, 0xb138058c, - 0x05020002, 0x64466407, 0x0501fb17, 0x0501fb7a, - 0x05020003, 0x0005ffdc, 0x0501f002, 0x0009f000, - 0x598800bc, 0x4803c857, 0x80000000, 0x480310bc, - 0x1c01f000, 0x05d9fe33, 0x05fe07fa, 0x42000000, - 0x0010e3bd, 0x052dffe3, 0x42026800, 0x00110210, - 0x0501f002, 0x0501fe3d, 0x61241100, 0x59cc1806, - 0x800c1930, 0x05e9ffdb, 0x0511fc09, 0x05c80e9e, - 0x05fc07ec, 0x4926601d, 0x4936600a, 0x83340580, - 0x00110210, 0x05020005, 0x59cc0001, 0x82000500, - 0x00ffffff, 0x4802602a, 0x64126407, 0x59cc0c04, - 0x48066202, 0x64266403, 0x6426641c, 0x4a02621c, - 0x00002900, 0x64066203, 0x0509f05b, 0x59a80249, - 0x4803c857, 0x8c000508, 0x05000013, 0x599c0019, - 0x8c000510, 0x05020010, 0x59cc0006, 0x82000500, - 0xff000000, 0x82000d80, 0x03000000, 0x0500000c, - 0x82000d80, 0x20000000, 0x05000009, 0x82000d80, - 0x05000000, 0x05000006, 0x82000d80, 0x21000000, - 0x05000003, 0x80000580, 0x1c01f000, 0x90000541, - 0x05fdf7fe, 0x59cc2006, 0x82102500, 0xff000000, - 0x9c1021c0, 0x0501f807, 0x820c1c00, 0x0010dd3e, - 0x500c1800, 0x800c0500, 0x4803c857, 0x1c01f000, - 0x40100800, 0x41781800, 0x900404a0, 0x05001004, - 0x800c1800, 0x40000800, 0x05fdf7fc, 0x9004050f, - 0x82000400, 0x0010d15b, 0x50000000, 0x8c040508, - 0x05000002, 0x900001c0, 0x1c01f000, 0x4803c856, - 0x0501fd66, 0x0502000c, 0x05d9fbb6, 0x0502000a, - 0x59cc0002, 0x82000500, 0xff000000, 0x82000d80, - 0x08000000, 0x05000007, 0x42000000, 0x0010e44b, - 0x052df784, 0x42000000, 0x0010e448, 0x052df781, - 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00, - 0x840409c0, 0x900405b3, 0x05020029, 0x0501fa38, - 0x05000067, 0x59cc0a04, 0x48066202, 0x59a800b6, - 0x90000484, 0x05001062, 0x59cc0006, 0x4803c857, - 0x82000500, 0xffff0000, 0x82000d80, 0x02000000, - 0x0502000b, 0x59cc0006, 0x82000500, 0x0000ffff, - 0x05020057, 0x0501fabf, 0x05020003, 0x0005ffdc, - 0x0501f053, 0x60567000, 0x0009f000, 0x82000d80, - 0x01000000, 0x0502004e, 0x59cc0006, 0x82000500, - 0x0000ffff, 0x0502004a, 0x59a800b6, 0x90000488, - 0x05001047, 0x0501faaf, 0x05020003, 0x0005ffdc, - 0x0501f043, 0x605a7000, 0x0009f000, 0x900405b2, - 0x0502003f, 0x59cc0006, 0x82000500, 0xffff0000, - 0x82000d80, 0x14000000, 0x05020039, 0x59a800b6, - 0x90000490, 0x05001036, 0x60e27000, 0x59cc0001, - 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000, - 0x0501f832, 0x5c003800, 0x0502002d, 0x05d9fd89, - 0x0502002b, 0x83440480, 0x000007f0, 0x05001001, - 0x05edfaa5, 0x0500000f, 0x4c180000, 0x05f5f9d2, - 0x5c003000, 0x0500000d, 0x4c180000, 0x05fdff6c, - 0x5c003000, 0x05020007, 0x05f5fcfc, 0x42026800, - 0x00110210, 0x481a6802, 0x61fe89ff, 0x0501f003, - 0x05f1fc60, 0x05020016, 0x0511fb4d, 0x05000d83, + 0x05020002, 0x64466407, 0x0501fb64, 0x0501fbc6, + 0x05020003, 0x0009f810, 0x0501f002, 0x0009f039, + 0x598800bf, 0x4803c857, 0x80000000, 0x480310bf, + 0x1c01f000, 0x05d9fb2b, 0x05fe07fa, 0x42000000, + 0x0011235e, 0x0531fbba, 0x42026800, 0x001141b4, + 0x0501f002, 0x0501feb3, 0x61241100, 0x59cc1806, + 0x800c1930, 0x60082800, 0x83340580, 0x001141b4, + 0x05000002, 0x60042800, 0x05e9fdd0, 0x0511fd75, + 0x05c80b24, 0x05fc07e7, 0x4926601d, 0x4936600a, + 0x83340580, 0x001141b4, 0x05020005, 0x59cc0001, + 0x82000500, 0x00ffffff, 0x4802602a, 0x64126407, + 0x59cc0c04, 0x48066202, 0x64266403, 0x6426641c, + 0x4a02621c, 0x00002900, 0x64066203, 0x0509f16b, + 0x59a8024c, 0x4803c857, 0x8c000508, 0x05000013, + 0x599c0019, 0x8c000510, 0x05020010, 0x59cc0006, + 0x82000500, 0xff000000, 0x82000d80, 0x03000000, + 0x0500000c, 0x82000d80, 0x20000000, 0x05000009, + 0x82000d80, 0x05000000, 0x05000006, 0x82000d80, + 0x21000000, 0x05000003, 0x80000580, 0x1c01f000, + 0x90000541, 0x05fdf7fe, 0x59cc2006, 0x82102500, + 0xff000000, 0x9c1021c0, 0x0501f807, 0x820c1c00, + 0x00111cc4, 0x500c1800, 0x800c0500, 0x4803c857, + 0x1c01f000, 0x40100800, 0x41781800, 0x900404a0, + 0x05001004, 0x800c1800, 0x40000800, 0x05fdf7fc, + 0x9004050f, 0x82000400, 0x0010d8d9, 0x50000000, + 0x8c040508, 0x05000002, 0x900001c0, 0x1c01f000, + 0x4803c856, 0x0501fdd7, 0x0502000c, 0x05d9f8a5, + 0x0502000a, 0x59cc0002, 0x82000500, 0xff000000, + 0x82000d80, 0x08000000, 0x05000007, 0x42000000, + 0x001123ef, 0x0531f356, 0x42000000, 0x001123ec, + 0x0531f353, 0x4803c856, 0x59cc0400, 0x82000d00, + 0x0000ff00, 0x840409c0, 0x900405b3, 0x05020029, + 0x0501fa7d, 0x0500006a, 0x59cc0a04, 0x48066202, + 0x59a800bb, 0x90000484, 0x05001065, 0x59cc0006, + 0x4803c857, 0x82000500, 0xffff0000, 0x82000d80, + 0x02000000, 0x0502000b, 0x59cc0006, 0x82000500, + 0x0000ffff, 0x0502005a, 0x0501fb06, 0x05020003, + 0x0009f810, 0x0501f056, 0x60567000, 0x0009f039, + 0x82000d80, 0x01000000, 0x05020051, 0x59cc0006, + 0x82000500, 0x0000ffff, 0x0502004d, 0x59a800bb, + 0x90000488, 0x0500104a, 0x0501faf6, 0x05020003, + 0x0009f810, 0x0501f046, 0x605a7000, 0x0009f039, + 0x900405b2, 0x05020042, 0x59cc0006, 0x82000500, + 0xffff0000, 0x82000d80, 0x14000000, 0x0502003c, + 0x59a800bb, 0x90000490, 0x05001039, 0x60e27000, + 0x59cc0001, 0x59cc3800, 0x821c3d00, 0x00ffffff, + 0x4c1c0000, 0x0501f835, 0x5c003800, 0x05020030, + 0x05d9fa7c, 0x0502002e, 0x83440480, 0x000007f0, + 0x05001004, 0x83440480, 0x00000800, 0x05001011, + 0x05edf8ed, 0x0500000f, 0x4c180000, 0x05f5f8ef, + 0x5c003000, 0x0500000d, 0x4c180000, 0x05fdff69, + 0x5c003000, 0x05020007, 0x05f5fc25, 0x42026800, + 0x001141b4, 0x481a6802, 0x61fe89ff, 0x0501f003, + 0x05f1facf, 0x05020016, 0x0511fcb6, 0x05000df1, 0x05000013, 0x4926601d, 0x4936600a, 0x83340580, - 0x00110210, 0x05020005, 0x59cc0001, 0x82000500, - 0x00ffffff, 0x4802602a, 0x051dffcd, 0x64126407, - 0x59cc0c04, 0x48066202, 0x0501fa9f, 0x05020003, - 0x0005ffdc, 0x0501f002, 0x0009f000, 0x42000000, - 0x0010e448, 0x052df70f, 0x4803c857, 0x4c580000, + 0x001141b4, 0x05020005, 0x59cc0001, 0x82000500, + 0x00ffffff, 0x4802602a, 0x0521f9b9, 0x64126407, + 0x59cc0c04, 0x48066202, 0x0501fae3, 0x05020003, + 0x0009f810, 0x0501f002, 0x0009f039, 0x42000000, + 0x001123ec, 0x0531f2de, 0x4803c857, 0x4c580000, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x82003500, 0x00ffffff, 0x821c3d00, 0x00ffffff, 0x82181500, 0x00ff0000, 0x82081580, 0x00ff0000, 0x05020013, 0x82181480, 0x00fffffc, 0x05001010, 0x82181580, - 0x00fffffd, 0x05020003, 0x61f6880f, 0x0501f050, + 0x00fffffd, 0x05020003, 0x61f6880f, 0x0501f083, 0x82181580, 0x00fffffe, 0x05020003, 0x61fa880f, - 0x0501f04b, 0x82181580, 0x00fffffc, 0x05020003, - 0x61f2880f, 0x0501f046, 0x41781000, 0x6000b800, - 0x61c0b00f, 0x41acc000, 0x50600000, 0x8000cd40, - 0x05020005, 0x800811c0, 0x05020032, 0x845c155e, - 0x0501f030, 0x58640212, 0x82000500, 0x0000ff00, - 0x05000011, 0x59a8403d, 0x82204500, 0x00ffff00, + 0x0501f07e, 0x82181580, 0x00fffffc, 0x05020003, + 0x61f2880f, 0x0501f079, 0x41781000, 0x6000b800, + 0x4200c000, 0x0010db80, 0x59a8b0ac, 0x50600000, + 0x8000cd40, 0x05020005, 0x800811c0, 0x0502005a, + 0x845c155e, 0x0501f058, 0x82000d00, 0xe0000000, + 0x0500001d, 0x8d0c0538, 0x05000065, 0x8200cd00, + 0x00ffffff, 0x82044580, 0xa0000000, 0x05000016, + 0x82044580, 0x80000000, 0x05020002, 0x0501f012, + 0x8c04053c, 0x0500000d, 0x40640000, 0x80180580, + 0x05020045, 0x4c080000, 0x4c180000, 0x405e8800, + 0x05f1fb5f, 0x4034c800, 0x5c003000, 0x5c001000, + 0x05000005, 0x0501f04e, 0x82040580, 0x20000000, + 0x05ca0951, 0x58640212, 0x82000500, 0x0000ff00, + 0x05000011, 0x59a84040, 0x82204500, 0x00ffff00, 0x82180500, 0x00ffff00, 0x05000002, 0x80200580, - 0x58640002, 0x05020023, 0x82000500, 0x000000ff, - 0x82184500, 0x000000ff, 0x80204580, 0x0502001d, + 0x58640002, 0x0502002c, 0x82000500, 0x000000ff, + 0x82184500, 0x000000ff, 0x80204580, 0x05020026, 0x0501f006, 0x58640002, 0x82000500, 0x00ffffff, - 0x80184580, 0x05020017, 0x4d200000, 0x4c080000, - 0x4c180000, 0x05d9fd13, 0x5c003000, 0x5c001000, - 0x58640813, 0x80040130, 0x81200580, 0x0502000c, - 0x82040500, 0x00ffffff, 0x59240805, 0x80040580, - 0x05000004, 0x812000f0, 0x80040d40, 0x4804c813, - 0x5c024000, 0x405e8800, 0x0501f00d, 0x5c024000, - 0x805cb800, 0x8060c000, 0x8058b040, 0x05fe07c7, - 0x800811c0, 0x05020005, 0x481bc857, 0x481fc857, - 0x90000541, 0x0501f003, 0x840a8d1e, 0x80000580, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c00b000, - 0x1c01f000, 0x59a80249, 0x8c00050e, 0x05000003, - 0x8c000502, 0x05000009, 0x59cc0003, 0x82000500, - 0x00ff0000, 0x05020005, 0x59cc0c00, 0x80040910, - 0x9004050f, 0x0c01f004, 0x42000000, 0x0010e44a, - 0x052df694, 0x00107159, 0x00107159, 0x00107159, - 0x0010747f, 0x00107159, 0x0010715d, 0x00107184, - 0x0010718a, 0x00107159, 0x00107159, 0x00107159, - 0x00107159, 0x00107159, 0x00107159, 0x00107159, - 0x00107159, 0x4803c856, 0x42000000, 0x0010e44a, - 0x052df680, 0x0501f93e, 0x05000021, 0x59a800b6, - 0x9000048c, 0x0500101e, 0x59300407, 0x90000583, - 0x0502001b, 0x59cc0001, 0x5932680a, 0x813669c0, - 0x05000017, 0x59340802, 0x80040580, 0x82000500, - 0x00ffffff, 0x05020012, 0x0501fc6d, 0x05020010, - 0x59cc0a04, 0x59300202, 0x82001580, 0x0000ffff, - 0x05000003, 0x80040580, 0x05020009, 0x48066202, - 0x59300416, 0x8c00051a, 0x05020005, 0x611a7000, - 0x0501f975, 0x05000002, 0x0009f000, 0x59cc0004, - 0x4803c857, 0x42000000, 0x0010e449, 0x052df659, - 0x59cc0004, 0x4803c857, 0x42000000, 0x0010e449, - 0x052dfe54, 0x1c01f000, 0x0501f911, 0x0500001d, - 0x59a800b6, 0x9000048c, 0x0500101a, 0x59300407, - 0x90000583, 0x05020017, 0x59cc0001, 0x82000500, - 0x00ffffff, 0x5932680a, 0x813669c0, 0x05000011, - 0x59340802, 0x82040d00, 0x00ffffff, 0x80040580, - 0x0502000c, 0x0501fc3e, 0x0502000a, 0x59cc0a04, - 0x48066202, 0x59300416, 0x8c00051a, 0x05020005, - 0x61167000, 0x0501f94c, 0x05000002, 0x0009f000, - 0x59cc0004, 0x4803c857, 0x42000000, 0x0010e449, - 0x052df630, 0x59cc0004, 0x4803c857, 0x59cc0000, - 0x82000500, 0xff000000, 0x59cc1001, 0x82081500, - 0x00ffffff, 0x80080540, 0x4803c857, 0x4817c857, - 0x0501fbfa, 0x05ca0ce8, 0x05020011, 0x05d9fa49, - 0x05ca0ce5, 0x0502000e, 0x59cc0002, 0x82000500, - 0xff000000, 0x90000580, 0x05000004, 0x0501fc7c, - 0x050002e2, 0x0501f006, 0x9004050f, 0x90000c86, - 0x05ca1cd9, 0x05021002, 0x0c01f005, 0x4803c856, - 0x42000000, 0x0010e44a, 0x052df60e, 0x001071d5, - 0x001071d9, 0x001071d5, 0x001071d5, 0x00107248, - 0x0010725e, 0x4803c856, 0x42000000, 0x0010e44a, - 0x052df604, 0x59a800b6, 0x800001c0, 0x05ca0cc6, - 0x05fe07f9, 0x59cc0802, 0x4807c857, 0x8c04052e, - 0x05020024, 0x42026000, 0x00111a70, 0x497a6416, - 0x59cc0001, 0x59cc3800, 0x05fdfee8, 0x05020015, - 0x0001fb00, 0x05020013, 0x59cc3800, 0x821c3d00, - 0x00ffffff, 0x05d9fc3b, 0x05fe07e7, 0x4926601d, - 0x051dfe9f, 0x64166407, 0x64226203, 0x4936600a, - 0x60227001, 0x0501f8fc, 0x05c80cab, 0x05fc07de, - 0x42000000, 0x0010e3b9, 0x052dfde2, 0x0009f000, - 0x4803c857, 0x61fe89ff, 0x417a6800, 0x59cc0001, - 0x82000500, 0x00ffffff, 0x4802602a, 0x05fdf7e7, - 0x59cc0001, 0x4803c857, 0x59cc3800, 0x821c3d00, - 0x00ffffff, 0x4c1c0000, 0x05fdfec4, 0x5c003800, - 0x05ca0c95, 0x05fe07c8, 0x05d9fc1a, 0x05ca0c92, - 0x05fe07c5, 0x05f1fb03, 0x05ca0c8f, 0x05fe07c2, - 0x59cc0005, 0x8c000500, 0x05020010, 0x59340200, - 0x8c00050e, 0x05ca0c88, 0x05fe07bb, 0x59a828d0, - 0x82140d00, 0x0000f000, 0x82040580, 0x00003000, - 0x05c80c81, 0x05fc07b4, 0x82040580, 0x00002000, - 0x05c80c7d, 0x05fc07b0, 0x05f5f80b, 0x05020014, - 0x0501f873, 0x05c80c78, 0x05fc07ab, 0x42026000, - 0x00111a70, 0x4926601d, 0x4936600a, 0x497a6416, - 0x051dfe5f, 0x640a6407, 0x64226203, 0x60227001, - 0x0501f8bd, 0x05c80c6c, 0x05fc079f, 0x42000000, - 0x0010e3b9, 0x052dfda3, 0x0009f000, 0x0511f9c8, - 0x05000bfe, 0x05fc0798, 0x4926601d, 0x4936600a, - 0x051dfe4f, 0x64126407, 0x59cc0c04, 0x48066202, - 0x60067000, 0x0501f8ac, 0x000407dc, 0x0009f000, - 0x59cc0802, 0x8c04052e, 0x05020004, 0x0501f84e, - 0x0500000c, 0x0501f007, 0x0501f84d, 0x0500000b, - 0x0501fb6b, 0x05020009, 0x59cc0a04, 0x48066202, - 0x60267001, 0x0501f89c, 0x05000004, 0x0009f000, - 0x0501f81f, 0x05fc07fb, 0x4933c857, 0x42000000, - 0x0010e448, 0x052df57f, 0x59cc0004, 0x4803c857, - 0x59a800b6, 0x90000484, 0x05001011, 0x59cc0802, - 0x8c04052e, 0x05020004, 0x0501f833, 0x0500000c, - 0x0501f007, 0x0501f832, 0x05000009, 0x0501fb50, - 0x05020007, 0x59cc0a04, 0x48066202, 0x602a7001, - 0x0501f881, 0x05000002, 0x0009f000, 0x4933c857, - 0x42000000, 0x0010e448, 0x052df566, 0x4933c857, - 0x59300407, 0x90000585, 0x05020005, 0x59300216, - 0x59cc0a07, 0x80040580, 0x05000019, 0x59cc1407, - 0x41526000, 0x59a80898, 0x59a80099, 0x80040480, - 0x05000013, 0x81300800, 0x41540000, 0x80040480, - 0x0502100f, 0x59300202, 0x80080580, 0x05020007, - 0x5930002a, 0x59cc1001, 0x82081500, 0x00ffffff, - 0x80080580, 0x05000006, 0x91326430, 0x41540000, - 0x81300480, 0x05fc17f4, 0x05c9fb44, 0x4933c857, - 0x1c01f000, 0x59cc0a04, 0x0501f002, 0x59cc0c04, - 0x59a804dd, 0x59a8109a, 0x80080400, 0x80040480, - 0x05021007, 0x800400ca, 0x800408c8, 0x80040c00, - 0x82066400, 0x00111b00, 0x1c01f000, 0x80000580, - 0x05fdf7fe, 0x4803c856, 0x90040507, 0x0c01f001, - 0x001072b4, 0x001072c9, 0x001072de, 0x001072ed, - 0x001072ed, 0x001072ed, 0x001072ed, 0x001072ed, - 0x59cc0802, 0x8c04052e, 0x05000010, 0x05fdffe4, - 0x05000007, 0x59cc0802, 0x90040d30, 0x90040d90, - 0x05000006, 0x61827000, 0x0009f000, 0x42000000, - 0x0010e448, 0x052df51b, 0x59300416, 0x8400055c, - 0x48026416, 0x051df50f, 0x05fdffd3, 0x05fc07f8, - 0x05fdf7f1, 0x59cc0802, 0x8c04052e, 0x05000010, - 0x05fdffcf, 0x05000007, 0x59cc0802, 0x90040d30, - 0x90040d90, 0x05000006, 0x61867000, 0x0009f000, - 0x42000000, 0x0010e448, 0x052df506, 0x59300416, - 0x8400055c, 0x48026416, 0x051df4fa, 0x05fdffbe, - 0x05fc07f8, 0x05fdf7f1, 0x82140500, 0x0000f000, - 0x82000580, 0x00002000, 0x0502000b, 0x59cc0802, - 0x8c04052e, 0x05000008, 0x05fdffb5, 0x05000006, - 0x59300416, 0x8c000510, 0x05000003, 0x618a7000, - 0x0009f000, 0x42000000, 0x0010e448, 0x052dfced, - 0x1c01f000, 0x59a828d0, 0x8c14051a, 0x0500000c, - 0x4803c856, 0x4d300000, 0x5930100a, 0x4c080000, - 0x0511f90b, 0x5c001000, 0x05000003, 0x59cc2a04, - 0x0501f910, 0x5c026000, 0x1c01f000, 0x90000541, - 0x1c01f000, 0x4803c856, 0x4c0c0000, 0x4d340000, - 0x59cc0006, 0x82000500, 0xffff0000, 0x82000580, - 0x01000000, 0x05000028, 0x5932680a, 0x59a81a49, - 0x05f5fda2, 0x05020024, 0x813669c0, 0x0500001b, - 0x83340580, 0x00110210, 0x05000018, 0x59340403, - 0x82000580, 0x000007fe, 0x05020014, 0x59cc0408, - 0x8c000518, 0x05000018, 0x5930001d, 0x82000580, - 0x0010e512, 0x05020014, 0x59a804cc, 0x8c00050a, + 0x80184580, 0x05020020, 0x50600000, 0x82004500, + 0xe0000000, 0x82204580, 0x80000000, 0x05020004, + 0x82000540, 0xa0000000, 0x4400c000, 0x4d200000, + 0x4c080000, 0x4c180000, 0x05d9f9da, 0x5c003000, + 0x5c001000, 0x58640813, 0x80040130, 0x81200580, + 0x0502000c, 0x82040500, 0x00ffffff, 0x59240805, + 0x80040580, 0x05000004, 0x812000f0, 0x80040d40, + 0x4804c813, 0x5c024000, 0x405e8800, 0x0501f017, + 0x5c024000, 0x805cb800, 0x8060c000, 0x825c4580, + 0x000007f0, 0x05020008, 0x59a800ad, 0x82000580, + 0x00000800, 0x05000006, 0x6000b810, 0x4200c000, + 0x0010e380, 0x8058b040, 0x05fe0795, 0x800811c0, + 0x05020005, 0x481bc857, 0x481fc857, 0x90000541, + 0x0501f003, 0x840a8d1e, 0x80000580, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x5c00b000, 0x1c01f000, + 0x59a8024c, 0x8c00050e, 0x05000003, 0x8c000502, + 0x05000009, 0x59cc0003, 0x82000500, 0x00ff0000, + 0x05020005, 0x59cc0c00, 0x80040910, 0x9004050f, + 0x0c01f004, 0x42000000, 0x001123ee, 0x0531f230, + 0x00107538, 0x00107538, 0x00107538, 0x0010786f, + 0x00107538, 0x0010753c, 0x00107563, 0x00107569, + 0x00107538, 0x00107538, 0x00107538, 0x00107538, + 0x00107538, 0x00107538, 0x00107538, 0x00107538, + 0x4803c856, 0x42000000, 0x001123ee, 0x0531f21c, + 0x0501f94d, 0x05000021, 0x59a800bb, 0x9000048c, + 0x0500101e, 0x59300407, 0x90000583, 0x0502001b, + 0x59cc0001, 0x5932680a, 0x813669c0, 0x05000017, + 0x59340802, 0x80040580, 0x82000500, 0x00ffffff, + 0x05020012, 0x0501fca8, 0x05020010, 0x59cc0a04, + 0x59300202, 0x82001580, 0x0000ffff, 0x05000003, + 0x80040580, 0x05020009, 0x48066202, 0x59300416, + 0x8c00051a, 0x05020005, 0x611a7000, 0x0501f987, + 0x05000002, 0x0009f039, 0x59cc0004, 0x4803c857, + 0x42000000, 0x001123ed, 0x0531f1f5, 0x59cc0004, + 0x4803c857, 0x42000000, 0x001123ed, 0x0531f9f0, + 0x1c01f000, 0x0501f920, 0x0500001d, 0x59a800bb, + 0x9000048c, 0x0500101a, 0x59300407, 0x90000583, + 0x05020017, 0x59cc0001, 0x82000500, 0x00ffffff, + 0x5932680a, 0x813669c0, 0x05000011, 0x59340802, + 0x82040d00, 0x00ffffff, 0x80040580, 0x0502000c, + 0x0501fc79, 0x0502000a, 0x59cc0a04, 0x48066202, + 0x59300416, 0x8c00051a, 0x05020005, 0x61167000, + 0x0501f95e, 0x05000002, 0x0009f039, 0x59cc0004, + 0x4803c857, 0x42000000, 0x001123ed, 0x0531f1cc, + 0x59cc0004, 0x4803c857, 0x59cc0000, 0x82000500, + 0xff000000, 0x59cc1001, 0x82081500, 0x00ffffff, + 0x80080540, 0x4803c857, 0x4817c857, 0x0501fc35, + 0x05ca0938, 0x05020011, 0x05d5ff02, 0x05ca0935, + 0x0502000e, 0x59cc0002, 0x82000500, 0xff000000, + 0x90000580, 0x05000004, 0x0501fcb7, 0x050002f3, + 0x0501f006, 0x9004050f, 0x90000c86, 0x05ca1929, + 0x05021002, 0x0c01f005, 0x4803c856, 0x42000000, + 0x001123ee, 0x0531f1aa, 0x001075b4, 0x001075b8, + 0x001075b4, 0x001075b4, 0x00107636, 0x0010764c, + 0x4803c856, 0x42000000, 0x001123ee, 0x0531f1a0, + 0x59a800bb, 0x800001c0, 0x05ca0916, 0x05fe07f9, + 0x59cc0802, 0x4807c857, 0x8c04052e, 0x05020024, + 0x42026000, 0x00115a14, 0x497a6416, 0x59cc0001, + 0x59cc3800, 0x05fdfeb5, 0x05020015, 0x0001fb08, + 0x05020013, 0x59cc3800, 0x821c3d00, 0x00ffffff, + 0x05d9f8f8, 0x05fe07e7, 0x4926601d, 0x0521f858, + 0x64166407, 0x64226203, 0x4936600a, 0x60227001, + 0x0501f90e, 0x05c808fb, 0x05fc07de, 0x42000000, + 0x0011235a, 0x0531f97e, 0x0009f039, 0x4803c857, + 0x61fe89ff, 0x417a6800, 0x59cc0001, 0x82000500, + 0x00ffffff, 0x4802602a, 0x05fdf7e7, 0x59cc0001, + 0x4803c857, 0x59cc3800, 0x821c3d00, 0x00ffffff, + 0x4c1c0000, 0x05fdfe91, 0x5c003800, 0x05ca08e5, + 0x05fe07c8, 0x05d9f8d7, 0x05ca08e2, 0x05fe07c5, + 0x05e9ff4d, 0x05000007, 0x0001fb08, 0x05000008, + 0x05f5fa8b, 0x42026800, 0x001141b4, 0x0501f004, + 0x05f1f937, 0x05ca08d7, 0x05fe07ba, 0x59cc0005, + 0x8c000500, 0x05020010, 0x59340200, 0x8c00050e, + 0x05ca08d0, 0x05fe07b3, 0x59a828d5, 0x82140d00, + 0x0000f000, 0x82040580, 0x00003000, 0x05c808c9, + 0x05fc07ac, 0x82040580, 0x00002000, 0x05c808c5, + 0x05fc07a8, 0x05f1feed, 0x05020014, 0x0501f87a, + 0x05c808c0, 0x05fc07a3, 0x42026000, 0x00115a14, + 0x4926601d, 0x4936600a, 0x497a6416, 0x0521f810, + 0x640a6407, 0x64226203, 0x60227001, 0x0501f8c7, + 0x05c808b4, 0x05fc0797, 0x42000000, 0x0011235a, + 0x0531f937, 0x0009f039, 0x0511faf6, 0x05000c31, + 0x05fc0790, 0x4926601d, 0x4936600a, 0x0521f800, + 0x64126407, 0x59cc0c04, 0x48066202, 0x60067000, + 0x0501f8b6, 0x00080010, 0x83340580, 0x001141b4, + 0x000a0039, 0x59cc0001, 0x82000500, 0x00ffffff, + 0x4802602a, 0x0009f039, 0x59cc0802, 0x8c04052e, + 0x05020004, 0x0501f84e, 0x0500000c, 0x0501f007, + 0x0501f84d, 0x0500000b, 0x0501fb97, 0x05020009, + 0x59cc0a04, 0x48066202, 0x60267001, 0x0501f89f, + 0x05000004, 0x0009f039, 0x0501f81f, 0x05fc07fb, + 0x4933c857, 0x42000000, 0x001123ec, 0x0531f10c, + 0x59cc0004, 0x4803c857, 0x59a800bb, 0x90000484, + 0x05001011, 0x59cc0802, 0x8c04052e, 0x05020004, + 0x0501f833, 0x0500000c, 0x0501f007, 0x0501f832, + 0x05000009, 0x0501fb7c, 0x05020007, 0x59cc0a04, + 0x48066202, 0x602a7001, 0x0501f884, 0x05000002, + 0x0009f039, 0x4933c857, 0x42000000, 0x001123ec, + 0x0531f0f3, 0x4933c857, 0x59300407, 0x90000585, + 0x05020005, 0x59300216, 0x59cc0a07, 0x80040580, + 0x05000019, 0x59cc1407, 0x41526000, 0x59a8089b, + 0x59a8009c, 0x80040480, 0x05000013, 0x81300800, + 0x41540000, 0x80040480, 0x0502100f, 0x59300202, + 0x80080580, 0x05020007, 0x5930002a, 0x59cc1001, + 0x82081500, 0x00ffffff, 0x80080580, 0x05000006, + 0x91326430, 0x41540000, 0x81300480, 0x05fc17f4, + 0x05c5ff91, 0x4933c857, 0x1c01f000, 0x59cc0a04, + 0x0501f002, 0x59cc0c04, 0x0531fa24, 0x59a8003d, + 0x05000002, 0x59a804e2, 0x59a8109d, 0x80080400, + 0x80040480, 0x05021007, 0x800400ca, 0x800408c8, + 0x80040c00, 0x82066400, 0x00115aa4, 0x1c01f000, + 0x80000580, 0x05fdf7fe, 0x4803c856, 0x90040507, + 0x0c01f001, 0x001076a5, 0x001076ba, 0x001076cf, + 0x001076de, 0x001076de, 0x001076de, 0x001076de, + 0x001076de, 0x59cc0802, 0x8c04052e, 0x05000010, + 0x05fdffe1, 0x05000007, 0x59cc0802, 0x90040d30, + 0x90040d90, 0x05000006, 0x61827000, 0x0009f039, + 0x42000000, 0x001123ec, 0x0531f0a5, 0x59300416, + 0x8400055c, 0x48026416, 0x051df6b6, 0x05fdffd0, + 0x05fc07f8, 0x05fdf7f1, 0x59cc0802, 0x8c04052e, + 0x05000010, 0x05fdffcc, 0x05000007, 0x59cc0802, + 0x90040d30, 0x90040d90, 0x05000006, 0x61867000, + 0x0009f039, 0x42000000, 0x001123ec, 0x0531f090, + 0x59300416, 0x8400055c, 0x48026416, 0x051df6a1, + 0x05fdffbb, 0x05fc07f8, 0x05fdf7f1, 0x82140500, + 0x0000f000, 0x82000580, 0x00002000, 0x0502000b, + 0x59cc0802, 0x8c04052e, 0x05000008, 0x05fdffb2, + 0x05000006, 0x59300416, 0x8c000510, 0x05000003, + 0x618a7000, 0x0009f039, 0x42000000, 0x001123ec, + 0x0531f877, 0x1c01f000, 0x59a828d5, 0x8c14051a, + 0x0500000c, 0x4803c856, 0x4d300000, 0x5930100a, + 0x4c080000, 0x0511fa2f, 0x5c001000, 0x05000003, + 0x59cc2a04, 0x0501f90f, 0x5c026000, 0x1c01f000, + 0x90000541, 0x1c01f000, 0x4803c856, 0x4c0c0000, + 0x4d340000, 0x59cc0006, 0x82000500, 0xffff0000, + 0x82000580, 0x01000000, 0x05000027, 0x5932680a, + 0x59a81a4c, 0x05f5fc9b, 0x05020023, 0x813669c0, + 0x0500001a, 0x83340580, 0x001141b4, 0x05000017, + 0x59340403, 0x82000580, 0x000007fe, 0x05020013, + 0x59cc0408, 0x8c000518, 0x05000017, 0x59300403, + 0x90000582, 0x05020014, 0x59a804d1, 0x8c00050a, 0x05020011, 0x59cc0207, 0x80000540, 0x05020002, - 0x60040000, 0x48038893, 0x48035040, 0x84000560, + 0x60040000, 0x48038893, 0x48035043, 0x84000560, 0x480388b3, 0x0501f008, 0x59300403, 0x90000582, 0x05000003, 0x91380597, 0x05020003, 0x8c0c0508, 0x05fe07f1, 0x5c026800, 0x5c001800, 0x1c01f000, - 0x59a828d0, 0x8c14051a, 0x05000018, 0x4803c856, - 0x4d300000, 0x4c5c0000, 0x4130b800, 0x0511f8c8, + 0x59a828d5, 0x8c14051a, 0x05000018, 0x4803c856, + 0x4d300000, 0x4c5c0000, 0x4130b800, 0x0511f9ed, 0x0500000f, 0x485e602a, 0x585c0407, 0x90000581, - 0x05020008, 0x4d300000, 0x405e6000, 0x051dfc86, + 0x05020008, 0x4d300000, 0x405e6000, 0x051dfe2e, 0x5c026000, 0x05000003, 0x4a026416, 0x00000080, 0x585c100a, 0x59cc2a04, 0x0501f8c2, 0x5c00b800, 0x5c026000, 0x1c01f000, 0x90000541, 0x1c01f000, - 0x59a828d0, 0x8c14051a, 0x05000011, 0x4803c856, + 0x59a828d5, 0x8c14051a, 0x05000011, 0x4803c856, 0x4d300000, 0x4c5c0000, 0x4130b800, 0x4a026416, - 0x00000100, 0x0511f8aa, 0x05000006, 0x485e602a, + 0x00000100, 0x0511f9cf, 0x05000006, 0x485e602a, 0x585c2c02, 0x585c100a, 0x405c2000, 0x0501f8b1, 0x5c00b800, 0x5c026000, 0x1c01f000, 0x90000541, - 0x1c01f000, 0x59a828d0, 0x8c14051a, 0x05000017, + 0x1c01f000, 0x59a828d5, 0x8c14051a, 0x05000017, 0x4803c856, 0x4d300000, 0x4c5c0000, 0x4130b800, - 0x4a026416, 0x00000100, 0x0511f895, 0x05000acb, - 0x0500000b, 0x493a6403, 0x485e602a, 0x051dfc56, + 0x4a026416, 0x00000100, 0x0511f9ba, 0x05000af5, + 0x0500000b, 0x493a6403, 0x485e602a, 0x051dfdfe, 0x05000003, 0x4a026416, 0x00000080, 0x585c2c02, 0x585c100a, 0x405c2000, 0x0501f896, 0x5c00b800, 0x5c026000, 0x1c01f000, 0x90000541, 0x1c01f000, 0x4803c856, 0x4c600000, 0x4c640000, 0x4c5c0000, - 0x4d200000, 0x4d240000, 0x4200c000, 0x00110202, + 0x4d200000, 0x4d240000, 0x4200c000, 0x001141a6, 0x5930c80a, 0x8064c9c0, 0x05020015, 0x58603800, - 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x05d9fa99, + 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x05d5ff45, 0x5c003800, 0x05020064, 0x4d340000, 0x58600001, - 0x82000500, 0x00ffffff, 0x0501f9f2, 0x05ca0a43, - 0x4936600a, 0x59341200, 0x5c026800, 0x0501fa25, + 0x82000500, 0x00ffffff, 0x0501f9f2, 0x05c60e8e, + 0x4936600a, 0x59341200, 0x5c026800, 0x0501fa4f, 0x4a026416, 0x00000100, 0x65126403, 0x58601006, 0x82081500, 0x0000f000, 0x82080480, 0x00002000, 0x05001058, 0x42002000, 0xc0000000, 0x5930100a, @@ -7442,7 +7694,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x0500000d, 0x82140580, 0x00002000, 0x05000047, 0x8064c9c0, 0x05000004, 0x58600402, 0x8c000526, 0x05000040, 0x42002000, 0xc1000000, 0x41783000, - 0x0501f002, 0x60043000, 0x4130b800, 0x0511f840, + 0x0501f002, 0x60043000, 0x4130b800, 0x0511f965, 0x05000031, 0x58601804, 0x8064c9c0, 0x05020006, 0x65126403, 0x585c0402, 0x820c1d00, 0xffff0000, 0x800c1d40, 0x58600000, 0x58600801, 0x58601003, @@ -7453,7 +7705,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x80040540, 0x90000561, 0x48026018, 0x585c0416, 0x58600802, 0x585c1407, 0x8c00051c, 0x05020023, 0x48026416, 0x4806601b, 0x480a6407, 0x643e6203, - 0x640e6006, 0x4c100000, 0x050dfd7d, 0x0505fc73, + 0x640e6006, 0x4c100000, 0x050dfe77, 0x0505fd3c, 0x5c002000, 0x82100580, 0xc2000000, 0x05000015, 0x90000541, 0x405e6000, 0x5c024800, 0x5c024000, 0x5c00b800, 0x5c00c800, 0x5c00c000, 0x1c01f000, @@ -7464,7 +7716,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x4803c856, 0x41782000, 0x0501f805, 0x1c01f000, 0x4803c856, 0x0501f802, 0x1c01f000, 0x4813c857, 0x59300416, 0x84000550, 0x48026416, 0x4816621d, - 0x480a600a, 0x82080580, 0x00110210, 0x05020002, + 0x480a600a, 0x82080580, 0x001141b4, 0x05020002, 0x41781000, 0x493a6403, 0x643e6203, 0x59cc0000, 0x82000500, 0x00ffffff, 0x48026019, 0x82000500, 0x000000ff, 0x800000e0, 0x59cc0801, 0x82040d00, @@ -7472,8 +7724,8 @@ static const uint32_t isp_2500_risc_code[] = { 0x800811c0, 0x0500000a, 0x58080a12, 0x0501f002, 0x800408d0, 0x80040540, 0x90000561, 0x4803c857, 0x4807c857, 0x48026018, 0x0501f00e, 0x4c000000, - 0x4c040000, 0x05f5fc75, 0x5c000800, 0x5c000000, - 0x05000007, 0x59a81a49, 0x8c0c0506, 0x05fc07f1, + 0x4c040000, 0x05f5fb6f, 0x5c000800, 0x5c000000, + 0x05000007, 0x59a81a4c, 0x8c0c0506, 0x05fc07f1, 0x90000561, 0x48026018, 0x0501f002, 0x64866018, 0x59cc0404, 0x4802641d, 0x59cc0002, 0x4802601b, 0x59cc0403, 0x4802641c, 0x59cc0203, 0x4802621c, @@ -7483,39 +7735,39 @@ static const uint32_t isp_2500_risc_code[] = { 0x8c000504, 0x0502001c, 0x42002800, 0xc1000000, 0x801021c0, 0x05000002, 0x64082008, 0x40142000, 0x41783000, 0x0501f003, 0x40142000, 0x60043000, - 0x050dfd07, 0x0505fbfd, 0x90000541, 0x1c01f000, + 0x050dfe01, 0x0505fcc6, 0x90000541, 0x1c01f000, 0x42002000, 0xc2000000, 0x42003000, 0x02120000, 0x0501f005, 0x42002000, 0xc2000000, 0x42003000, - 0x01050000, 0x050dfcfa, 0x0505fbf0, 0x80000580, + 0x01050000, 0x050dfdf4, 0x0505fcb9, 0x80000580, 0x05fdf7f3, 0x59cc1002, 0x82081500, 0x00003000, 0x82080580, 0x00001000, 0x05fc07e8, 0x82080580, 0x00002000, 0x05fc07eb, 0x05fdf7dc, 0x59cc0802, - 0x8c04052e, 0x0502001d, 0x05fdfe17, 0x0500001b, + 0x8c04052e, 0x0502001d, 0x05fdfe15, 0x0500001b, 0x59300407, 0x90000586, 0x05020018, 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a, 0x813669c0, 0x05000012, 0x59340802, 0x82040d00, 0x00ffffff, - 0x80040580, 0x0502000d, 0x0501f949, 0x0502000b, - 0x59a800b6, 0x800001c0, 0x05020008, 0x61467000, + 0x80040580, 0x0502000d, 0x0501f973, 0x0502000b, + 0x59a800bb, 0x800001c0, 0x05020008, 0x61467000, 0x59300416, 0x8c00051a, 0x05020004, 0x05fdfeb5, - 0x05000002, 0x0009f000, 0x59cc0004, 0x4803c857, - 0x42000000, 0x0010e449, 0x052df33a, 0x4803c856, + 0x05000002, 0x0009f039, 0x59cc0004, 0x4803c857, + 0x42000000, 0x001123ed, 0x052df6c5, 0x4803c856, 0x60143002, 0x0501f004, 0x601c3004, 0x0501f802, 0x1c01f000, 0x481bc857, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x41ccc800, 0x4014b800, 0x4018c000, 0x0501f805, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c580000, 0x58640400, 0x82000500, 0x0000f000, 0x82000580, 0x0000c000, - 0x05000024, 0x050dff46, 0x05000025, 0x58640001, + 0x05000024, 0x0511f86b, 0x05000025, 0x58640001, 0x58643800, 0x821c3d00, 0x00ffffff, 0x4c1c0000, - 0x05fdfc0a, 0x5c003800, 0x0502001c, 0x05d9f961, - 0x0502001a, 0x05f1f84b, 0x05020018, 0x4936600a, - 0x051dfbc3, 0x05c9fcb5, 0x05000014, 0x4926601d, + 0x05fdfbc6, 0x5c003800, 0x0502001c, 0x05d5fe0d, + 0x0502001a, 0x05edfe76, 0x05020018, 0x4936600a, + 0x051dfd6b, 0x05c9f8fc, 0x05000014, 0x4926601d, 0x492e6019, 0x497a5800, 0x497a5a08, 0x485e5c08, - 0x912cac09, 0x601cb000, 0x4064a000, 0x052dfbd0, - 0x42000000, 0x0010e3b7, 0x052dfb02, 0x4862641c, - 0x64fa6403, 0x64066407, 0x64066203, 0x0505fb92, - 0x5c00b000, 0x1c01f000, 0x0005ffdc, 0x42000000, - 0x0010e448, 0x052dfaf7, 0x05fdf7fa, 0x4803c856, + 0x912cac09, 0x601cb000, 0x4064a000, 0x052dff5b, + 0x42000000, 0x00112358, 0x052dfe8d, 0x4862641c, + 0x64fa6403, 0x64066407, 0x64066203, 0x0505fc5b, + 0x5c00b000, 0x1c01f000, 0x0009f810, 0x42000000, + 0x001123ec, 0x052dfe82, 0x05fdf7fa, 0x4803c856, 0x59cc0000, 0x82000d00, 0x00ffffff, 0x82040580, 0x00fffff0, 0x05000075, 0x59cc0400, 0x82000d00, 0x0000ff00, 0x82040500, 0x0000f000, 0x840409c0, @@ -7525,35 +7777,35 @@ static const uint32_t isp_2500_risc_code[] = { 0x82000500, 0xffff0000, 0x82000d80, 0x04000000, 0x0500005e, 0x82000d80, 0x60000000, 0x0500005b, 0x82000d80, 0x54000000, 0x05000058, 0x82000d80, - 0x03000000, 0x0502001e, 0x59a80a49, 0x8c040508, + 0x03000000, 0x0502001e, 0x59a80a4c, 0x8c040508, 0x05020052, 0x8c040502, 0x05020060, 0x82000d80, 0x03000000, 0x05020008, 0x82140d00, 0x0000f000, - 0x82040d80, 0x00003000, 0x05020003, 0x05f5fb93, - 0x05000046, 0x05f1fbbb, 0x05000046, 0x59a80046, - 0x800000d0, 0x59a8083d, 0x82040d00, 0x000000ff, + 0x82040d80, 0x00003000, 0x05020003, 0x05f5fa8d, + 0x05000046, 0x05f1fa3d, 0x05000046, 0x59a80049, + 0x800000d0, 0x59a80840, 0x82040d00, 0x000000ff, 0x80040540, 0x59cc0800, 0x82040d00, 0x00ffffff, 0x80040580, 0x05020037, 0x0501f038, 0x59c40802, 0x8c04050c, 0x0502001e, 0x82000d80, 0x52000000, 0x05fc07ed, 0x82000d80, 0x05000000, 0x05fc07ea, 0x82000d80, 0x50000000, 0x05fc07e7, 0x0501f029, - 0x900405a3, 0x05020027, 0x05fdfd61, 0x05000025, + 0x900405a3, 0x05020027, 0x05fdfd5f, 0x05000025, 0x59300c03, 0x90040582, 0x05000024, 0xb0040591, - 0x05000022, 0x0501f00a, 0x05fdfd59, 0x0500001d, + 0x05000022, 0x0501f00a, 0x05fdfd57, 0x0500001d, 0x59300403, 0x90000582, 0x0502001a, 0x59300203, - 0x9000058e, 0x05020017, 0x0501f018, 0x59a80249, - 0x8c000514, 0x05fc07f5, 0x4c580000, 0x052dfba5, + 0x9000058e, 0x05020017, 0x0501f018, 0x59a8024c, + 0x8c000514, 0x05fc07f5, 0x4c580000, 0x052dff30, 0xb0582481, 0x5c00b000, 0x0500100e, 0x59cc0800, - 0x82040d00, 0x00ffffff, 0x42001000, 0x0010e852, + 0x82040d00, 0x00ffffff, 0x42001000, 0x001127f6, 0x58080005, 0x80040580, 0x05000008, 0x801021c0, 0x05000004, 0x80102040, 0x9008140d, 0x05fdf7f9, 0x80000580, 0x0501f002, 0x90000541, 0x1c01f000, 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80, 0x03000000, 0x05000004, 0x82000d80, 0x52000000, - 0x05fe07f4, 0x59a80249, 0x90000509, 0x90000588, - 0x05fc07f2, 0x05fdf7ef, 0x59a828d0, 0x82140500, + 0x05fe07f4, 0x59a8024c, 0x90000509, 0x90000588, + 0x05fc07f2, 0x05fdf7ef, 0x59a828d5, 0x82140500, 0x0000f000, 0x82000580, 0x00003000, 0x05fe07eb, - 0x05f5fb36, 0x05fe07e9, 0x59a80046, 0x800000d0, - 0x59a8083d, 0x82040d00, 0x000000ff, 0x80040540, + 0x05f5fa30, 0x05fe07e9, 0x59a80049, 0x800000d0, + 0x59a80840, 0x82040d00, 0x000000ff, 0x80040540, 0x59cc0800, 0x82040d00, 0x00ffffff, 0x80040580, 0x05fc07de, 0x60043002, 0x05fdff23, 0x05fdf7d9, 0x4803c857, 0x4c580000, 0x40003000, 0x61c0200f, @@ -7561,253 +7813,305 @@ static const uint32_t isp_2500_risc_code[] = { 0x05000013, 0x59340002, 0x82000500, 0x00ffffff, 0x80180580, 0x0502000e, 0x59341013, 0x80080130, 0x81200580, 0x0502000a, 0x82080500, 0x00ffffff, - 0x59240805, 0x80040580, 0x05000011, 0x812000f0, - 0x80040d40, 0x48066813, 0x0501f00d, 0x80102000, + 0x59240805, 0x80040580, 0x0500003b, 0x812000f0, + 0x80040d40, 0x48066813, 0x0501f037, 0x80102000, 0x80387000, 0x8058b040, 0x05fe07e8, 0x82100480, - 0x00000800, 0x60002000, 0x61c0b00f, 0x41ac7000, - 0x05fe17e2, 0x90000541, 0x0501f002, 0x40128800, - 0x5c00b000, 0x1c01f000, 0x59a80249, 0x8c00050e, - 0x05000004, 0x8c000502, 0x05000003, 0x80000580, - 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x59300c07, - 0x90040582, 0x05000002, 0x90040585, 0x1c01f000, - 0x60080800, 0x8c080508, 0x05000007, 0x8c08050c, - 0x05000004, 0x8c080504, 0x05020004, 0x90040d44, - 0x48066008, 0x1c01f000, 0x42001800, 0x00110202, - 0x580c1202, 0x82081500, 0x00003000, 0x82080580, - 0x00001000, 0x05fc07f7, 0x82080580, 0x00002000, - 0x05fc07f5, 0x05fdf7f2, 0x59c80000, 0x84000558, - 0x84000512, 0x48039000, 0x1c01f000, 0x59cc0800, - 0x59340013, 0x82000500, 0x00ffffff, 0x80040580, - 0x82000500, 0x00ffffff, 0x0502000b, 0x59a808d0, - 0x8c040516, 0x05000008, 0x42000800, 0x001102fe, - 0x50040800, 0x59340014, 0x80040580, 0x82000500, - 0x00001fff, 0x1c01f000, 0x82140500, 0x0000f000, - 0x05000006, 0x82000c80, 0x00004000, 0x0502100a, - 0x80000580, 0x1c01f000, 0x59cc0400, 0x82000500, - 0x0000ff00, 0x82000580, 0x00008100, 0x05fc07fa, - 0x0501f012, 0x4817c857, 0x82140500, 0x000003ff, - 0x05020007, 0x59cc0400, 0x82000500, 0x0000ff00, - 0x82000580, 0x00008100, 0x05020008, 0x42000000, - 0x0010e4ae, 0x052df9d3, 0x05fdfe99, 0x4803c856, - 0x90000541, 0x05fdf7e8, 0x41780000, 0x05fdf7e6, - 0x05f5fa9e, 0x0500000e, 0x59c400a4, 0x4803c857, - 0x9000050f, 0x9000058a, 0x05020009, 0x497b50b6, - 0x59c400a3, 0x82000540, 0x00080000, 0x480388a3, - 0x82000500, 0xfff7ffff, 0x480388a3, 0x4c140000, - 0x05e9faf6, 0x05020016, 0x916c0583, 0x05000014, - 0x42000000, 0x0010e4c0, 0x052df9b9, 0x59c40006, - 0x84000500, 0x48038806, 0x0509fa2b, 0x497b8880, - 0x59c400a3, 0x82000500, 0xfcf8ffff, 0x480388a3, - 0x6012d800, 0x64078805, 0x05c9f9cc, 0x05d1fed9, - 0x497b5068, 0x64075075, 0x05d5fb17, 0x5c002800, - 0x4817c856, 0x052df0e9, 0x42000000, 0x0010e3b8, - 0x052df9a0, 0x80000580, 0x1c01f000, 0x82140500, - 0x0000f000, 0x82006d80, 0x00003000, 0x05000003, - 0x82006d80, 0x00005000, 0x1c01f000, 0x4a032824, - 0x000003e8, 0x4a032802, 0x00111b00, 0x64032800, - 0x4a032808, 0x001089a9, 0x60140000, 0x91947c09, - 0x49787801, 0x4a007804, 0x00108954, 0x903c7c05, - 0x80000040, 0x05fe07fb, 0x4a032823, 0xffff0000, - 0x497b2832, 0x4a032833, 0x00103e7f, 0x0501fb54, - 0x6191d000, 0x0501f9c2, 0x4201d000, 0x000186a0, - 0x0501f1cf, 0x00000000, 0x00000005, 0x0000000a, - 0x0000000f, 0x00000014, 0x00000002, 0x00000008, - 0x00000020, 0x00000080, 0x00000200, 0x4d300000, - 0x4d2c0000, 0x4d340000, 0x4d400000, 0x4cfc0000, - 0x4d380000, 0x4d3c0000, 0x4d440000, 0x4d4c0000, - 0x4d480000, 0x4c5c0000, 0x4c600000, 0x4c640000, - 0x4d040000, 0x0005fc98, 0x5c020800, 0x5c00c800, - 0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800, - 0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800, - 0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000, - 0x1c01f000, 0x59940004, 0x80000540, 0x05020006, - 0x480b2805, 0x0501f81c, 0x48032804, 0x642b2803, - 0x80000580, 0x1c01f000, 0x59940029, 0x80000540, - 0x0502000b, 0x5994002f, 0x80040400, 0x05c41f43, - 0x5994082e, 0x80040400, 0x05c41f40, 0x48032829, - 0x480b282a, 0x64072828, 0x80000580, 0x1c01f000, - 0x5994002c, 0x80000540, 0x05020006, 0x480b282d, - 0x0501f805, 0x4803282c, 0x642b282b, 0x80000580, - 0x1c01f000, 0x4c0c0000, 0x5994182f, 0x5994002e, - 0x800c0400, 0x05c41f2d, 0x05000004, 0x4c040000, - 0x05c9f967, 0x5c000800, 0x80040400, 0x5c001800, - 0x1c01f000, 0x4c000000, 0x59940005, 0x80080580, - 0x05020003, 0x497b2804, 0x497b2805, 0x5c000000, - 0x1c01f000, 0x4c000000, 0x5994002a, 0x80080580, - 0x05020003, 0x497b2829, 0x497b282a, 0x5c000000, - 0x1c01f000, 0x4c000000, 0x5994002d, 0x80080580, - 0x05020003, 0x497b282c, 0x497b282d, 0x5c000000, - 0x1c01f000, 0x4937c857, 0x48ebc857, 0x59340203, - 0x80e80480, 0x05001002, 0x48ea6a03, 0x1c01f000, - 0x4d440000, 0x60407800, 0x59968801, 0x0001fb00, - 0x0502005e, 0x59341a03, 0x800c1840, 0x05001015, - 0x59940031, 0x800c0480, 0x05000003, 0x48026a03, - 0x05021010, 0x5934000f, 0x497a6a03, 0x80000540, - 0x05000052, 0x5934000b, 0x80001120, 0x82000500, - 0x0000ffff, 0x80080480, 0x05001003, 0x64066a03, - 0x0501f004, 0x4c3c0000, 0x0001fb0d, 0x5c007800, - 0x4d2c0000, 0x41781800, 0x5934000f, 0x80025d40, - 0x05000041, 0x592c0007, 0x80000d40, 0x05000006, - 0x59940031, 0x80040480, 0x48025807, 0x05001007, - 0x05000006, 0x412c1800, 0x592c0000, 0x80025d40, - 0x05000035, 0x05fdf7f4, 0x592c2000, 0x497a5800, - 0x800c19c0, 0x05020009, 0x59340010, 0x812c0580, - 0x05020004, 0x497a680f, 0x497a6810, 0x0501f008, - 0x4812680f, 0x0501f006, 0x48101800, 0x59340010, - 0x812c0580, 0x05020002, 0x480e6810, 0x592c0208, - 0x82000500, 0x000000ff, 0x90000592, 0x05000005, - 0xb00005a0, 0x05000003, 0x90000588, 0x05020003, - 0x642e5a0a, 0x0501f011, 0x4c0c0000, 0x4c100000, - 0x0005f9f3, 0x5c002000, 0x5c001800, 0x4c0c0000, - 0x4c100000, 0x05f9fce3, 0x5c002000, 0x5c001800, - 0x4a025a08, 0x00000103, 0x641a5a0a, 0x497a580d, - 0x4a025c0a, 0x0000ffff, 0x4c0c0000, 0x4c100000, - 0x0001fb82, 0x5c002000, 0x5c001800, 0x40100000, - 0x05fdf7cb, 0x5c025800, 0x81468800, 0x83440480, - 0x00000800, 0x05021007, 0x803c7840, 0x05fe079c, - 0x49472801, 0x5c028800, 0x5c03e000, 0x1c01f000, - 0x640b2800, 0x497b2801, 0x05fdf7fb, 0x60407800, + 0x00000800, 0x60002000, 0x61c0b00f, 0x42007000, + 0x0010db80, 0x05fe17e1, 0x8d0c0538, 0x05000028, + 0x60002010, 0x5900b400, 0x82100400, 0x0010db80, + 0x50000000, 0x80000540, 0x0500001e, 0x82000d00, + 0xe0000000, 0x82026d00, 0x00ffffff, 0x82041d80, + 0x20000000, 0x05000012, 0x82041d80, 0x80000000, + 0x0500000f, 0x82041d80, 0xa0000000, 0x0500000c, + 0x8c04053c, 0x05c40c60, 0x41340000, 0x80180580, + 0x0502000c, 0x4c100000, 0x40128800, 0x05edfe60, + 0x5c002000, 0x0502000a, 0x40366800, 0x59340002, + 0x82000500, 0x00ffffff, 0x80180580, 0x05000006, + 0x80102000, 0x8058b040, 0x05fe07dc, 0x90000541, + 0x0501f002, 0x40128800, 0x5c00b000, 0x1c01f000, + 0x59a8024c, 0x8c00050e, 0x05000004, 0x8c000502, + 0x05000003, 0x80000580, 0x1c01f000, 0x90000541, + 0x05fdf7fe, 0x59300c07, 0x90040582, 0x05000002, + 0x90040585, 0x1c01f000, 0x60080800, 0x8c080508, + 0x05000007, 0x8c08050c, 0x05000004, 0x8c080504, + 0x05020004, 0x90040d44, 0x48066008, 0x1c01f000, + 0x42001800, 0x001141a6, 0x580c1202, 0x82081500, + 0x00003000, 0x82080580, 0x00001000, 0x05fc07f7, + 0x82080580, 0x00002000, 0x05fc07f5, 0x05fdf7f2, + 0x59c80000, 0x84000558, 0x84000512, 0x48039000, + 0x1c01f000, 0x59cc0800, 0x59340013, 0x82000500, + 0x00ffffff, 0x80040580, 0x82000500, 0x00ffffff, + 0x0502000b, 0x59a808d5, 0x8c040516, 0x05000008, + 0x42000800, 0x001142a2, 0x50040800, 0x59340014, + 0x80040580, 0x82000500, 0x00001fff, 0x1c01f000, + 0x82140500, 0x0000f000, 0x05000006, 0x82000c80, + 0x00004000, 0x0502100a, 0x80000580, 0x1c01f000, + 0x59cc0400, 0x82000500, 0x0000ff00, 0x82000580, + 0x00008100, 0x05fc07fa, 0x0501f012, 0x4817c857, + 0x82140500, 0x000003ff, 0x05020007, 0x59cc0400, + 0x82000500, 0x0000ff00, 0x82000580, 0x00008100, + 0x05020008, 0x42000000, 0x00112452, 0x052dfd34, + 0x05fdfe6f, 0x4803c856, 0x90000541, 0x05fdf7e8, + 0x41780000, 0x05fdf7e6, 0x05f5f96e, 0x0500000e, + 0x59c400a4, 0x4803c857, 0x9000050f, 0x9000058a, + 0x05020009, 0x497b50bb, 0x59c400a3, 0x82000540, + 0x00080000, 0x480388a3, 0x82000500, 0xfff7ffff, + 0x480388a3, 0x4c140000, 0x05e9f882, 0x05020016, + 0x916c0583, 0x05000014, 0x42000000, 0x00112464, + 0x052dfd1a, 0x59c40006, 0x84000500, 0x48038806, + 0x0509facf, 0x497b8880, 0x59c400a3, 0x82000500, + 0xfcf8ffff, 0x480388a3, 0x6012d800, 0x64078805, + 0x05c5fde1, 0x05d1fb3f, 0x497b506b, 0x64075078, + 0x05d1ff7d, 0x5c002800, 0x4817c856, 0x052df444, + 0x42000000, 0x00112359, 0x052dfd01, 0x80000580, + 0x1c01f000, 0x82140500, 0x0000f000, 0x82006d80, + 0x00003000, 0x05000003, 0x82006d80, 0x00005000, + 0x1c01f000, 0x4a032824, 0x000003e8, 0x4a032802, + 0x00115aa4, 0x64032800, 0x4a032808, 0x00108e67, + 0x60140000, 0x91947c09, 0x49787801, 0x4a007804, + 0x00108e12, 0x903c7c05, 0x80000040, 0x05fe07fb, + 0x4a032823, 0xffff0000, 0x497b2833, 0x4a032834, + 0x00103ff5, 0x0501fbfa, 0x6191d000, 0x0501fa13, + 0x4201d000, 0x000186a0, 0x0501f220, 0x00000000, + 0x00000005, 0x0000000a, 0x0000000f, 0x00000014, + 0x00000002, 0x00000008, 0x00000020, 0x00000080, + 0x00000200, 0x4d300000, 0x4d2c0000, 0x4d340000, + 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000, + 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x4d040000, 0x0005fcce, + 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800, + 0x5c029000, 0x5c029800, 0x5c028800, 0x5c027800, + 0x5c027000, 0x5c01f800, 0x5c028000, 0x5c026800, + 0x5c025800, 0x5c026000, 0x1c01f000, 0x59940004, + 0x80000540, 0x05020006, 0x480b2805, 0x0501f81c, + 0x48032804, 0x642b2803, 0x80000580, 0x1c01f000, + 0x5994002a, 0x80000540, 0x0502000b, 0x59940030, + 0x80040400, 0x05c41b64, 0x5994082f, 0x80040400, + 0x05c41b61, 0x4803282a, 0x480b282b, 0x64072829, + 0x80000580, 0x1c01f000, 0x5994002d, 0x80000540, + 0x05020006, 0x480b282e, 0x0501f805, 0x4803282d, + 0x642b282c, 0x80000580, 0x1c01f000, 0x4c0c0000, + 0x59941830, 0x5994002f, 0x800c0400, 0x05c41b4e, + 0x05000004, 0x4c040000, 0x05c5fd7c, 0x5c000800, + 0x80040400, 0x5c001800, 0x1c01f000, 0x4c000000, + 0x59940005, 0x80080580, 0x05020003, 0x497b2804, + 0x497b2805, 0x5c000000, 0x1c01f000, 0x4c000000, + 0x5994002b, 0x80080580, 0x05020003, 0x497b282a, + 0x497b282b, 0x5c000000, 0x1c01f000, 0x4c000000, + 0x5994002e, 0x80080580, 0x05020003, 0x497b282d, + 0x497b282e, 0x5c000000, 0x1c01f000, 0x4937c857, + 0x48ebc857, 0x59340203, 0x80e80480, 0x05001002, + 0x48ea6a03, 0x1c01f000, 0x4c600000, 0x4c5c0000, + 0x4178b800, 0x4178c000, 0x4d440000, 0x60407800, + 0x59968801, 0x8d0c0538, 0x05000014, 0x83440480, + 0x00000800, 0x05001011, 0x82600400, 0x00111ccc, + 0x45780000, 0x83441c00, 0x0010db80, 0x500e6800, + 0x83340500, 0xe0000000, 0x82000580, 0x20000000, + 0x05020092, 0x400cb800, 0x83366d00, 0x00ffffff, + 0x05020004, 0x05c5fb0c, 0x0001fb08, 0x0502008b, + 0x59341a03, 0x800c1840, 0x05001015, 0x59940032, + 0x800c0480, 0x05000003, 0x48026a03, 0x05021010, + 0x5934000f, 0x497a6a03, 0x80000540, 0x0500007f, + 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff, + 0x80080480, 0x05001003, 0x64066a03, 0x0501f004, + 0x4c3c0000, 0x0001fb33, 0x5c007800, 0x4d2c0000, + 0x41781800, 0x5934000f, 0x80025d40, 0x05000041, + 0x592c0007, 0x80000d40, 0x05000006, 0x59940032, + 0x80040480, 0x48025807, 0x05001007, 0x05000006, + 0x412c1800, 0x592c0000, 0x80025d40, 0x05000035, + 0x05fdf7f4, 0x592c2000, 0x497a5800, 0x800c19c0, + 0x05020009, 0x59340010, 0x812c0580, 0x05020004, + 0x497a680f, 0x497a6810, 0x0501f008, 0x4812680f, + 0x0501f006, 0x48101800, 0x59340010, 0x812c0580, + 0x05020002, 0x480e6810, 0x592c0208, 0x82000500, + 0x000000ff, 0x90000592, 0x05000005, 0xb00005a0, + 0x05000003, 0x90000588, 0x05020003, 0x642e5a0a, + 0x0501f011, 0x4c0c0000, 0x4c100000, 0x0005fa1a, + 0x5c002000, 0x5c001800, 0x4c0c0000, 0x4c100000, + 0x05f9fc38, 0x5c002000, 0x5c001800, 0x4a025a08, + 0x00000103, 0x641a5a0a, 0x497a580d, 0x4a025c0a, + 0x0000ffff, 0x4c0c0000, 0x4c100000, 0x0001fba8, + 0x5c002000, 0x5c001800, 0x40100000, 0x05fdf7cb, + 0x5c025800, 0x805cb9c0, 0x0500002c, 0x59341c15, + 0x800c1840, 0x05001029, 0x59940032, 0x800c0480, + 0x05000003, 0x48026c15, 0x05021024, 0x495fc857, + 0x835c0480, 0x000003e8, 0x0502101f, 0x5934040b, + 0x4803c857, 0x80000540, 0x0502001b, 0x5934000f, + 0x4803c857, 0x80000540, 0x05020017, 0x5934000c, + 0x4803c857, 0x80000540, 0x05020013, 0x59340215, + 0x4803c857, 0x80000540, 0x0502000f, 0x59341c00, + 0x480fc857, 0x820c0580, 0x00000707, 0x05000003, + 0x05f1f962, 0x05020008, 0x4937c857, 0x497a6c15, + 0x82600400, 0x00111ccc, 0x45340000, 0x8060c000, + 0x0501f002, 0x640a6c15, 0x81468800, 0x59a800ad, + 0x81440480, 0x0502100b, 0x803c7840, 0x05fe075a, + 0x49472801, 0x8060c1c0, 0x0502090c, 0x5c00b800, + 0x5c00c000, 0x5c028800, 0x5c03e000, 0x1c01f000, + 0x640b2800, 0x497b2801, 0x05fdf7f7, 0x60407800, 0x59966002, 0x59300205, 0x80000d40, 0x05000014, - 0x59940031, 0x80040480, 0x48026205, 0x4df00000, - 0x4c040000, 0x051df951, 0x5c000800, 0x05000009, + 0x59940032, 0x80040480, 0x48026205, 0x4df00000, + 0x4c040000, 0x051dfa85, 0x5c000800, 0x05000009, 0x59300205, 0x9000048b, 0x05021006, 0x9004048b, - 0x05001004, 0x4c3c0000, 0x051df87e, 0x5c007800, + 0x05001004, 0x4c3c0000, 0x051df9b2, 0x5c007800, 0x5c03e000, 0x05001027, 0x05000026, 0x59300006, 0x80000d40, 0x05000010, 0x4203e000, 0xb0800000, 0x4203f800, 0x0c000000, 0x40000000, 0x40000000, - 0x40000000, 0x0503b008, 0x59940031, 0x80040480, + 0x40000000, 0x0503b008, 0x59940032, 0x80040480, 0x48026006, 0x4203f800, 0x08000000, 0x05001019, 0x05000018, 0x91326430, 0x49332802, 0x41540000, 0x81300480, 0x05021005, 0x803c7840, 0x05fe07d2, - 0x5c03e000, 0x1c01f000, 0x59940030, 0x48032831, - 0x4a032802, 0x00111b00, 0x497b2830, 0x80000540, + 0x5c03e000, 0x1c01f000, 0x59940031, 0x48032832, + 0x4a032802, 0x00115aa4, 0x497b2831, 0x80000540, 0x0500000c, 0x64072800, 0x5c03e000, 0x1c01f000, - 0x4c3c0000, 0x0519ff4d, 0x5c007800, 0x05fdf7d8, - 0x4c3c0000, 0x0519fa13, 0x5c007800, 0x05fdf7e6, - 0x64032800, 0x5c03e000, 0x1c01f000, 0x59a808b5, + 0x4c3c0000, 0x051df882, 0x5c007800, 0x05fdf7d8, + 0x4c3c0000, 0x0519fb29, 0x5c007800, 0x05fdf7e6, + 0x64032800, 0x5c03e000, 0x1c01f000, 0x59a808ba, 0x8c040530, 0x05020025, 0x8c040532, 0x0500000f, - 0x59a8009b, 0x81640480, 0x05001016, 0x59a8000b, - 0x81500580, 0x05000005, 0x59a80099, 0x59a81098, + 0x59a8009e, 0x81640480, 0x05001016, 0x59a8000b, + 0x81500580, 0x05000005, 0x59a8009c, 0x59a8109b, 0x80080580, 0x0502000f, 0x900411c0, 0x82081500, 0x00007000, 0x0501f00f, 0x9004051f, 0x05000013, - 0x80040840, 0x9004051f, 0x05000003, 0x480750b5, + 0x80040840, 0x9004051f, 0x05000003, 0x480750ba, 0x0501f00e, 0x900401c0, 0x9000051f, 0x80040d40, 0x900401c0, 0x80040580, 0x82001500, 0x00007000, - 0x82040500, 0xffff8fff, 0x80080540, 0x480350b5, - 0x80081114, 0x05c9f855, 0x1c01f000, 0x4a032807, + 0x82040500, 0xffff8fff, 0x80080540, 0x480350ba, + 0x80081114, 0x05c5fc20, 0x1c01f000, 0x4a032807, 0x000007d0, 0x642b2806, 0x4a01a8e5, 0x00000c00, - 0x1c01f000, 0x60100800, 0x91180485, 0x05c61e1f, - 0x91947c09, 0x83180400, 0x00107661, 0x50000000, + 0x1c01f000, 0x60100800, 0x91180485, 0x05c619f6, + 0x91947c09, 0x83180400, 0x00107a7b, 0x50000000, 0x803c7c00, 0x4a007801, 0x000001f4, 0x48047802, - 0x64287800, 0x83180400, 0x00107666, 0x50000000, + 0x64287800, 0x83180400, 0x00107a80, 0x50000000, 0x82000540, 0x00000155, 0x4801a8e5, 0x1c01f000, - 0x91180485, 0x05c61e0d, 0x91947c09, 0x83180400, - 0x00107661, 0x50000000, 0x803c7c00, 0x583c0002, + 0x91180485, 0x05c619e4, 0x91947c09, 0x83180400, + 0x00107a7b, 0x50000000, 0x803c7c00, 0x583c0002, 0x80000040, 0x48007802, 0x05000004, 0x4a007801, 0x000001f4, 0x64287800, 0x1c01f000, 0x91180485, - 0x05c61dfe, 0x91947c09, 0x83180400, 0x00107661, + 0x05c619d5, 0x91947c09, 0x83180400, 0x00107a7b, 0x50000000, 0x803c7c00, 0x49787801, 0x83180400, - 0x00107666, 0x50000000, 0x4801a8e5, 0x1c01f000, - 0x4807c857, 0x480bc857, 0x480b2805, 0x05fdfebe, + 0x00107a80, 0x50000000, 0x4801a8e5, 0x1c01f000, + 0x4807c857, 0x480bc857, 0x480b2805, 0x05fdfe74, 0x48032804, 0x642b2803, 0x1c01f000, 0x4807c857, - 0x480bc857, 0x480b2827, 0x05fdfeb7, 0x48032826, + 0x480bc857, 0x480b2827, 0x05fdfe6d, 0x48032826, 0x642b2825, 0x1c01f000, 0x4c000000, 0x59940027, 0x80080580, 0x05020003, 0x48032826, 0x48032827, 0x5c000000, 0x1c01f000, 0x4807c857, 0x480bc857, - 0x480b282d, 0x05fdfea8, 0x4803282c, 0x642b282b, - 0x1c01f000, 0x80e9d1c0, 0x05000006, 0x0501f828, - 0x00044e27, 0x05fe57ff, 0x4203e000, 0x80000000, - 0x1c01f000, 0x42001000, 0x00106004, 0x05fdfea6, - 0x42001000, 0x00105ff7, 0x05fdffe4, 0x42001000, - 0x0010510c, 0x05fdfea0, 0x42001000, 0x00105184, - 0x05fdfe9d, 0x42001000, 0x001050eb, 0x05fdfe9a, - 0x42001000, 0x001051ae, 0x05fdf6a7, 0x4203e000, - 0x70000000, 0x4203e000, 0xb0300000, 0x40ebf800, - 0x60f00000, 0x05004004, 0x80000040, 0x05fe07fe, - 0x0501f006, 0x4203e000, 0x70000000, 0x42000000, - 0x0010e46f, 0x0529ffaf, 0x1c01f000, 0x4203e000, - 0x80000000, 0x4203e000, 0xb0400000, 0x40ebf800, - 0x60f00000, 0x05005004, 0x80000040, 0x05fe07fe, - 0x0501f006, 0x4203e000, 0x80000000, 0x42000000, - 0x0010e470, 0x0529ff9f, 0x1c01f000, 0x4c5c0000, - 0x4c640000, 0x59a8b81a, 0x585c0002, 0x82000580, - 0x00000100, 0x60100000, 0x05020067, 0x642f5427, - 0x642f542f, 0x642f5437, 0x60080800, 0x4200c800, - 0x0010dc28, 0x60041800, 0x60002080, 0x60602801, - 0x05e9fa21, 0x0500005c, 0x59a80028, 0xb000053f, + 0x480b282b, 0x05fdfe5e, 0x4803282a, 0x642b2828, + 0x1c01f000, 0x4807c857, 0x480bc857, 0x480b282e, + 0x05fdfe57, 0x4803282d, 0x642b282c, 0x1c01f000, + 0x80e9d1c0, 0x05000006, 0x0501f828, 0x00044e5d, + 0x05fe57ff, 0x4203e000, 0x80000000, 0x1c01f000, + 0x42001000, 0x001062e8, 0x05fdfe55, 0x42001000, + 0x001062db, 0x05fdffdd, 0x42001000, 0x00105303, + 0x05fdfe4f, 0x42001000, 0x0010537b, 0x05fdfe4c, + 0x42001000, 0x001052e2, 0x05fdfe49, 0x42001000, + 0x001053a5, 0x05fdf656, 0x4203e000, 0x70000000, + 0x4203e000, 0xb0300000, 0x40ebf800, 0x60f00000, + 0x05004004, 0x80000040, 0x05fe07fe, 0x0501f006, + 0x4203e000, 0x70000000, 0x42000000, 0x00112413, + 0x052dfabf, 0x1c01f000, 0x4203e000, 0x80000000, + 0x4203e000, 0xb0400000, 0x40ebf800, 0x60f00000, + 0x05005004, 0x80000040, 0x05fe07fe, 0x0501f006, + 0x4203e000, 0x80000000, 0x42000000, 0x00112414, + 0x052dfaaf, 0x1c01f000, 0x4c580000, 0x4d440000, + 0x4d340000, 0x4d300000, 0x4863c856, 0x42026000, + 0x00115aa4, 0x0521fcc5, 0x0502101b, 0x5932680a, + 0x813669c0, 0x05000013, 0x59368c03, 0x83440480, + 0x00000800, 0x0500100f, 0x6000b000, 0x82580c00, + 0x00111ccc, 0x50040000, 0x80000540, 0x05000005, + 0x81340580, 0x05020003, 0x45780800, 0x640a6c15, + 0x8058b000, 0x40600000, 0x80580580, 0x05fe07f4, + 0x91326430, 0x41580000, 0x81300480, 0x05fc17e8, + 0x0501f002, 0x41526000, 0x59a8089b, 0x59a8009c, + 0x80040480, 0x0500001b, 0x81300800, 0x41540000, + 0x80040480, 0x05021017, 0x5932680a, 0x813669c0, + 0x05fc07f6, 0x59368c03, 0x83440480, 0x00000800, + 0x05fc17f2, 0x6000b000, 0x82580c00, 0x00111ccc, + 0x50040000, 0x80000540, 0x05000005, 0x81340580, + 0x05020003, 0x45780800, 0x640a6c15, 0x8058b000, + 0x40600000, 0x80580580, 0x05fe07f4, 0x05fdf7e3, + 0x6000b000, 0x82580c00, 0x00111ccc, 0x50040000, + 0x80026d40, 0x05000005, 0x59368c03, 0x4937c857, + 0x4947c857, 0x0521fa69, 0x8058b000, 0x40600000, + 0x80580580, 0x05fe07f4, 0x5c026000, 0x5c026800, + 0x5c028800, 0x5c00b000, 0x1c01f000, 0x4c5c0000, + 0x4c640000, 0x59a8b81c, 0x585c0002, 0x82000580, + 0x00000100, 0x60100000, 0x05020067, 0x642f5429, + 0x642f5431, 0x642f5439, 0x60080800, 0x4200c800, + 0x00111baa, 0x60041800, 0x60002080, 0x60602801, + 0x05e5ff07, 0x0500005c, 0x59a8002a, 0xb000053f, 0x800001c0, 0x0500000b, 0x90002d1e, 0x05000004, - 0x59a80827, 0x84040d64, 0x48075027, 0xb0002d21, - 0x05000004, 0x59a8002f, 0x84000564, 0x4803502f, - 0x60040800, 0x4200c800, 0x0010dc28, 0x60041800, - 0x60002080, 0x60602801, 0x05e9fa0b, 0x05000046, - 0x59a80029, 0x80000000, 0x48035029, 0x60000800, - 0x4200c800, 0x0010dc30, 0x60041800, 0x60002080, - 0x60602801, 0x05e9fa00, 0x0500003b, 0x59a80031, - 0x80000000, 0x48035031, 0x60080800, 0x4200c800, - 0x0010dc38, 0x60041800, 0x60002080, 0x61602801, - 0x05e9f9f5, 0x05000030, 0x59a80038, 0xb0000521, - 0x800001c0, 0x05000004, 0x59a80037, 0x84000564, - 0x48035037, 0x60000800, 0x4200c800, 0x0010dc38, - 0x60041800, 0x60002080, 0x61602801, 0x05e9f9e6, - 0x05000021, 0x59a80039, 0x80000000, 0x48035039, - 0x600cc800, 0x42000800, 0x0010dc23, 0x42001000, - 0xffffffff, 0x601c2000, 0x05c5ff8c, 0x59a8201f, + 0x59a80829, 0x84040d64, 0x48075029, 0xb0002d21, + 0x05000004, 0x59a80031, 0x84000564, 0x48035031, + 0x60040800, 0x4200c800, 0x00111baa, 0x60041800, + 0x60002080, 0x60602801, 0x05e5fef1, 0x05000046, + 0x59a8002b, 0x80000000, 0x4803502b, 0x60000800, + 0x4200c800, 0x00111bb2, 0x60041800, 0x60002080, + 0x60602801, 0x05e5fee6, 0x0500003b, 0x59a80033, + 0x80000000, 0x48035033, 0x60080800, 0x4200c800, + 0x00111bba, 0x60041800, 0x60002080, 0x61602801, + 0x05e5fedb, 0x05000030, 0x59a8003a, 0xb0000521, + 0x800001c0, 0x05000004, 0x59a80039, 0x84000564, + 0x48035039, 0x60000800, 0x4200c800, 0x00111bba, + 0x60041800, 0x60002080, 0x61602801, 0x05e5fecc, + 0x05000021, 0x59a8003b, 0x80000000, 0x4803503b, + 0x600cc800, 0x42000800, 0x00111ba5, 0x42001000, + 0xffffffff, 0x601c2000, 0x05c5fafb, 0x59a82021, 0x80100400, 0x81780480, 0x44000800, 0x80040800, 0x8064c840, 0x05fe07f6, 0x6400b801, 0x6460b804, - 0x6580b805, 0x4a00b803, 0x0010dc23, 0x59a8001d, - 0x4800b807, 0x59a8001e, 0x4800b808, 0x405c1000, - 0x0001f821, 0x90000541, 0x5c00c800, 0x5c00b800, + 0x6580b805, 0x4a00b803, 0x00111ba5, 0x59a8001f, + 0x4800b807, 0x59a80020, 0x4800b808, 0x405c1000, + 0x0001f829, 0x90000541, 0x5c00c800, 0x5c00b800, 0x1c01f000, 0x4803c857, 0x05fdf7fc, 0x4803c857, - 0x61c01100, 0x40001800, 0x05e5ff2b, 0x1c01f000, + 0x61c01100, 0x40001800, 0x05e5fc08, 0x1c01f000, 0x4833c857, 0x58300002, 0x82000580, 0x00000100, 0x05020002, 0x1c01f000, 0x4a006002, 0x00000100, 0x60140000, 0x05fdfff2, 0x05fdf7fb, 0x4833c857, 0x4c580000, 0x58300002, 0x82000580, 0x00000100, 0x05020007, 0x0501fb33, 0x5830020b, 0x4803c857, - 0x9000349c, 0x05c61d11, 0x0c01f005, 0x4a006002, - 0x00000100, 0x60140000, 0x0501f0d9, 0x001078eb, - 0x001078f6, 0x001078fb, 0x001078fd, 0x001078fe, - 0x0010790b, 0x0010790c, 0x00107924, 0x00107925, - 0x00107929, 0x00107934, 0x00107945, 0x00107963, - 0x00107964, 0x00107965, 0x00107966, 0x0010796b, - 0x0010796f, 0x0010797d, 0x0010797e, 0x0010797f, - 0x00107993, 0x00107998, 0x0010799c, 0x001079a3, - 0x00107952, 0x0010795e, 0x001079a3, 0x6404620b, + 0x9000349c, 0x05c6188c, 0x0c01f005, 0x4a006002, + 0x00000100, 0x60140000, 0x0501f0d9, 0x00107dab, + 0x00107db6, 0x00107dbb, 0x00107dbd, 0x00107dbe, + 0x00107dcb, 0x00107dcc, 0x00107de4, 0x00107de5, + 0x00107de9, 0x00107df4, 0x00107e05, 0x00107e23, + 0x00107e24, 0x00107e25, 0x00107e26, 0x00107e2b, + 0x00107e2f, 0x00107e3d, 0x00107e3e, 0x00107e3f, + 0x00107e53, 0x00107e58, 0x00107e5c, 0x00107e63, + 0x00107e12, 0x00107e1e, 0x00107e63, 0x6404620b, 0x64006001, 0x64c46004, 0x4a006005, 0x000000c4, - 0x4a006003, 0x00107ddd, 0x59a80011, 0xb0000430, + 0x4a006003, 0x00108294, 0x59a80013, 0xb0000430, 0x0501f8b5, 0x0501f0ae, 0x6458620b, 0x40301000, 0x60040000, 0x0501fae2, 0x0501f0a9, 0x0501f996, 0x0501f0a7, 0x0501f0a8, 0x643c620b, 0x64006001, 0x4a006004, 0x000000a8, 0x4a006005, 0x000002a0, - 0x4a006003, 0x00107e0e, 0x59a80011, 0x82000400, + 0x4a006003, 0x001082c5, 0x59a80013, 0x82000400, 0x00000134, 0x0501f8a0, 0x0501f099, 0x0501f09a, 0x0501fb41, 0x05020096, 0x5830040b, 0x8c000512, 0x05020008, 0x8c000510, 0x0502000b, 0x84000552, 0x4800640b, 0x6044b000, 0x0501fafa, 0x0501f08c, - 0x84000512, 0x84000550, 0x4800640b, 0x6088b000, + 0x84000512, 0x84000550, 0x4800640b, 0x606cb000, 0x05fdf7fa, 0x84000510, 0x4800640b, 0x6454620b, 0x40301000, 0x60180000, 0x0501fab9, 0x0501f080, - 0x0501f081, 0x59a8600e, 0x6424620b, 0x0501f9d4, + 0x0501f081, 0x59a86010, 0x6424620b, 0x0501f9d4, 0x0501f07b, 0x6428620b, 0x64006001, 0x64506004, - 0x65406005, 0x4a006003, 0x00107eb8, 0x59a80011, + 0x65406005, 0x4a006003, 0x0010836f, 0x59a80013, 0x82000400, 0x0000042c, 0x0501f877, 0x0501f070, 0x642c620b, 0x64006001, 0x64086004, 0x64206005, 0x42001000, 0x7ff38009, 0x50081000, 0x4808600c, - 0x9030140c, 0x48086003, 0x4a00600d, 0x000090d5, - 0x59a80011, 0x82000400, 0x0000047c, 0x0501f866, + 0x9030140c, 0x48086003, 0x4a00600d, 0x001090d5, + 0x59a80013, 0x82000400, 0x0000047c, 0x0501f866, 0x0501f05f, 0x6464620b, 0x64006001, 0x64046004, - 0x64106005, 0x59a81092, 0x4808600c, 0x9030140c, - 0x48086003, 0x59a80011, 0x82000400, 0x00000430, + 0x64106005, 0x59a81095, 0x4808600c, 0x9030140c, + 0x48086003, 0x59a80013, 0x82000400, 0x00000430, 0x0501f859, 0x0501f052, 0x6468620b, 0x64006001, 0x64046004, 0x64106005, 0x4808600c, 0x9030140c, - 0x48086003, 0x59a80011, 0x82000400, 0x00000470, + 0x48086003, 0x59a80013, 0x82000400, 0x00000470, 0x0501f84d, 0x0501f046, 0x6410620b, 0x40301000, 0x60080000, 0x0501fa7a, 0x0501f041, 0x0501f042, 0x0501f041, 0x0501f040, 0x6440620b, 0x40301000, 0x60100000, 0x0501fa72, 0x0501f039, 0x40301000, 0x60440000, 0x0501fa25, 0x0501f035, 0x5830040b, 0x8c000518, 0x05000005, 0x40301000, 0x60000000, - 0x0501fa3e, 0x0501f02e, 0x6403500f, 0x4a035010, + 0x0501fa3e, 0x0501f02e, 0x64035011, 0x4a035012, 0x000927c0, 0x40301000, 0x606c0000, 0x0501fa37, 0x0501f027, 0x0501f028, 0x0501f027, 0x5830040b, 0x8c00051e, 0x05000008, 0x8c000514, 0x05020003, @@ -7820,64 +8124,64 @@ static const uint32_t isp_2500_risc_code[] = { 0x5830040b, 0x8c000518, 0x05fc075d, 0x40301000, 0x60000000, 0x0501fa11, 0x0501f001, 0x5c00b000, 0x1c01f000, 0x82000400, 0x00000100, 0x05fdff08, - 0x05fdf7fb, 0x48006007, 0x59a80012, 0x90000440, - 0x48006008, 0x40301000, 0x0001f021, 0x4803c856, - 0x05e9f819, 0x050200bd, 0x42001000, 0x7ff38000, + 0x05fdf7fb, 0x48006007, 0x59a80014, 0x90000440, + 0x48006008, 0x40301000, 0x0001f029, 0x4803c856, + 0x05e5fcff, 0x050200bd, 0x42001000, 0x7ff38000, 0x50081000, 0x82081580, 0x4f434453, 0x601c0000, 0x050200b7, 0x42000800, 0x7ff38000, 0x42001000, - 0xffffffff, 0x60402000, 0x05c5fe64, 0x60200000, + 0xffffffff, 0x60402000, 0x05c5f9d3, 0x60200000, 0x050200af, 0x42001000, 0x7ff38006, 0x50081000, 0x480bc857, 0x8c080500, 0x050000a0, 0x59e00802, 0x8c04051e, 0x0502009d, 0x42001000, 0x7ff38002, - 0x50081000, 0x480b501d, 0x42001000, 0x7ff38003, - 0x50081000, 0x480b501e, 0x42001000, 0x7ff38007, - 0x50081000, 0x6040084e, 0x0501fd9c, 0x4807501c, - 0x4807501b, 0x42001000, 0x7ff3800a, 0x50081000, + 0x50081000, 0x480b501f, 0x42001000, 0x7ff38003, + 0x50081000, 0x480b5020, 0x42001000, 0x7ff38007, + 0x50081000, 0x6040084e, 0x0501fd95, 0x4807501e, + 0x4807501d, 0x42001000, 0x7ff3800a, 0x50081000, 0x800800e0, 0x42001000, 0x7ff38009, 0x50081000, - 0x82081500, 0x0000ffff, 0x80080540, 0x4803501f, + 0x82081500, 0x0000ffff, 0x80080540, 0x48035021, 0x42001000, 0x7ff38012, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, 0xffffffff, 0x05020002, - 0x61b81000, 0x480b5025, 0x42001000, 0x7ff3801a, + 0x61b81000, 0x480b5027, 0x42001000, 0x7ff3801a, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, - 0xffffffff, 0x05020002, 0x612c1000, 0x480b502d, + 0xffffffff, 0x05020002, 0x612c1000, 0x480b502f, 0x42001000, 0x7ff38022, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, 0xffffffff, 0x05020002, - 0x612c1000, 0x480b5035, 0x42001000, 0x7ff38013, + 0x612c1000, 0x480b5037, 0x42001000, 0x7ff38013, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, - 0xffffffff, 0x05020002, 0x61a41000, 0x480b5026, + 0xffffffff, 0x05020002, 0x61a41000, 0x480b5028, 0x42001000, 0x7ff3801b, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, 0xffffffff, 0x05020002, - 0x61181000, 0x480b502e, 0x42001000, 0x7ff38023, + 0x61181000, 0x480b5030, 0x42001000, 0x7ff38023, 0x50081000, 0x800811c0, 0x05000004, 0x82080580, - 0xffffffff, 0x05020002, 0x61181000, 0x480b5036, - 0x05e5ff98, 0x60240800, 0x42001000, 0x0010dc28, + 0xffffffff, 0x05020002, 0x61181000, 0x480b5038, + 0x05e5fc7e, 0x60240800, 0x42001000, 0x00111baa, 0x64801000, 0x60041800, 0x60002080, 0x60602801, - 0x05e5ffda, 0x05000046, 0x64075023, 0x64075024, - 0x64175227, 0x640f5427, 0x60340800, 0x42001000, - 0x0010dc25, 0x60041800, 0x60002080, 0x60602801, - 0x05e5ffce, 0x0500003a, 0x60640800, 0x42001000, - 0x0010dc25, 0x60041800, 0x60002080, 0x60602801, - 0x05e5ffc6, 0x05000032, 0x6407502b, 0x641f502c, - 0x6417522f, 0x640f542f, 0x602c0800, 0x42001000, - 0x0010dc2d, 0x60041800, 0x60002080, 0x60602801, - 0x05e5ffba, 0x05000026, 0x60800800, 0x42001000, - 0x0010dc2d, 0x60041800, 0x60002080, 0x60602801, - 0x05e5ffb2, 0x0500001e, 0x64075033, 0x641f5034, - 0x64175237, 0x640f5437, 0x60140800, 0x42001000, - 0x0010dc35, 0x60041800, 0x60002080, 0x61602801, - 0x05e5ffa6, 0x05000012, 0x60800800, 0x42001000, - 0x0010dc35, 0x60041800, 0x60002080, 0x61602801, - 0x05e5ff9e, 0x0500000a, 0x42001000, 0x7ff38006, + 0x05e5fcc0, 0x05000046, 0x64075025, 0x64075026, + 0x64175229, 0x640f5429, 0x60340800, 0x42001000, + 0x00111ba7, 0x60041800, 0x60002080, 0x60602801, + 0x05e5fcb4, 0x0500003a, 0x60640800, 0x42001000, + 0x00111ba7, 0x60041800, 0x60002080, 0x60602801, + 0x05e5fcac, 0x05000032, 0x6407502d, 0x641f502e, + 0x64175231, 0x640f5431, 0x602c0800, 0x42001000, + 0x00111baf, 0x60041800, 0x60002080, 0x60602801, + 0x05e5fca0, 0x05000026, 0x60800800, 0x42001000, + 0x00111baf, 0x60041800, 0x60002080, 0x60602801, + 0x05e5fc98, 0x0500001e, 0x64075035, 0x641f5036, + 0x64175239, 0x640f5439, 0x60140800, 0x42001000, + 0x00111bb7, 0x60041800, 0x60002080, 0x61602801, + 0x05e5fc8c, 0x05000012, 0x60800800, 0x42001000, + 0x00111bb7, 0x60041800, 0x60002080, 0x61602801, + 0x05e5fc84, 0x0500000a, 0x42001000, 0x7ff38006, 0x50081000, 0x90081503, 0x60240000, 0x05000004, 0x8c080502, 0x05020806, 0x1c01f000, 0x4803c857, - 0x05fdfe3f, 0x497b501c, 0x05fdf7fc, 0x4803c856, - 0x4c5c0000, 0x59a8b80e, 0x497b500f, 0x497b5010, + 0x05fdfe3f, 0x497b501e, 0x05fdf7fc, 0x4803c856, + 0x4c5c0000, 0x59a8b810, 0x497b5011, 0x497b5012, 0x6400ba0b, 0x4978b80b, 0x42001000, 0x7ff38004, - 0x50081000, 0x480b5011, 0x42001000, 0x7ff38005, - 0x50081000, 0x480b5012, 0x6400b801, 0x6430b804, - 0x64c0b805, 0x4a00b803, 0x00107dd1, 0x59a80011, - 0xb0000400, 0x4800b807, 0x59a80012, 0x90000440, - 0x4800b808, 0x405c1000, 0x0001f821, 0x5c00b800, + 0x50081000, 0x480b5013, 0x42001000, 0x7ff38005, + 0x50081000, 0x480b5014, 0x6400b801, 0x6430b804, + 0x64c0b805, 0x4a00b803, 0x00108288, 0x59a80013, + 0xb0000400, 0x4800b807, 0x59a80014, 0x90000440, + 0x4800b808, 0x405c1000, 0x0001f829, 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c580000, 0x4200b800, 0x7ff48000, 0x4178c000, 0x0501f8b7, 0x8258b580, 0x00000082, @@ -7886,23 +8190,23 @@ static const uint32_t isp_2500_risc_code[] = { 0x905804a8, 0x05000004, 0x05001003, 0x60a0b000, 0x0501f003, 0x80000580, 0x6420ca0b, 0x4c000000, 0x8060c000, 0x4c640000, 0x9064cc0e, 0x0501f8c1, - 0x5c00c800, 0x42000000, 0x00107eb6, 0x50000000, - 0x4800c80c, 0x42000000, 0x00107eb7, 0x50000000, + 0x5c00c800, 0x42000000, 0x0010836d, 0x50000000, + 0x4800c80c, 0x42000000, 0x0010836e, 0x50000000, 0x4800c80d, 0x9058b40b, 0x8258b500, 0xfffffffc, 0x6400c801, 0x4858c805, 0x80580104, 0x4800c804, - 0x9064040c, 0x4800c803, 0x59a80011, 0x82000400, - 0x000003d4, 0x4800c807, 0x59a80012, 0x90000440, + 0x9064040c, 0x4800c803, 0x59a80013, 0x82000400, + 0x000003d4, 0x4800c807, 0x59a80014, 0x90000440, 0x4800c808, 0x40641000, 0x4c5c0000, 0x4c600000, - 0x0001f821, 0x5c00c000, 0x5c00b800, 0x5c000000, + 0x0001f829, 0x5c00c000, 0x5c00b800, 0x5c000000, 0x800001c0, 0x05000020, 0x9000ccb4, 0x05001002, - 0x60c00000, 0x4000b000, 0x59a8c80d, 0x4c640000, + 0x60c00000, 0x4000b000, 0x59a8c80f, 0x4c640000, 0x9064cc0c, 0x0501f897, 0x5c00c800, 0x6420ca0b, 0x4858c805, 0x80580104, 0x4800c804, 0x9058b403, 0x8258b500, 0xfffffffc, 0x6400c801, 0x4858c805, 0x80580104, 0x4800c804, 0x9064040c, 0x4800c803, - 0x59a80011, 0x82000400, 0x00000404, 0x4800c807, - 0x59a80012, 0x90000440, 0x4800c808, 0x40641000, - 0x0001f821, 0x90000541, 0x5c00b000, 0x5c00c800, + 0x59a80013, 0x82000400, 0x00000404, 0x4800c807, + 0x59a80014, 0x90000440, 0x4800c808, 0x40641000, + 0x0001f829, 0x90000541, 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c857, 0x05fdfdb7, 0x80000580, 0x05fdf7f8, 0x4803c856, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c580000, @@ -7921,9 +8225,9 @@ static const uint32_t isp_2500_risc_code[] = { 0x4c640000, 0x9064cc0c, 0x0501f83e, 0x5c00c800, 0x9058b403, 0x8258b500, 0xfffffffc, 0x6400c801, 0x4858c805, 0x80580104, 0x4800c804, 0x9064040c, - 0x4800c803, 0x59a80011, 0x82000400, 0x0000041c, - 0x4800c807, 0x59a80012, 0x90000440, 0x4800c808, - 0x40641000, 0x0001f821, 0x90000541, 0x5c00b000, + 0x4800c803, 0x59a80013, 0x82000400, 0x0000041c, + 0x4800c807, 0x59a80014, 0x90000440, 0x4800c808, + 0x40641000, 0x0001f829, 0x90000541, 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c857, 0x05fdfd62, 0x80000580, 0x05fdf7f8, 0x485fc857, 0x4863c857, 0x505cb000, 0x40600000, @@ -7946,1180 +8250,1184 @@ static const uint32_t isp_2500_risc_code[] = { 0x4c600000, 0x5808b802, 0x825cc580, 0x00000100, 0x05020015, 0x4800120b, 0x5808040b, 0x8400055c, 0x4800140b, 0x64041001, 0x64081004, 0x64201005, - 0x9008040c, 0x48001003, 0x59a80011, 0x90000410, - 0x48001007, 0x59a80012, 0x90000440, 0x48001008, - 0x0001f821, 0x90000541, 0x5c00c000, 0x5c00b800, + 0x9008040c, 0x48001003, 0x59a80013, 0x90000410, + 0x48001007, 0x59a80014, 0x90000440, 0x48001008, + 0x0001f829, 0x90000541, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x60280000, 0x4803c857, 0x05fdfd00, 0x80000580, 0x05fdf7f9, 0x4803c857, 0x4c5c0000, 0x4c600000, 0x5808b802, 0x825cc580, 0x00000100, 0x0502001e, 0x4800120b, 0x800001c0, 0x05000003, 0x42000000, 0xffffffff, 0x4800100c, 0x800001c0, 0x05000004, 0x5808040b, 0x8400055a, 0x4800140b, - 0x64001001, 0x64081004, 0x64201005, 0x59a80013, - 0x4800100d, 0x9008040c, 0x48001003, 0x59a80011, - 0x90000410, 0x48001007, 0x59a80012, 0x90000440, - 0x48001008, 0x0001f821, 0x90000541, 0x5c00c000, + 0x64001001, 0x64081004, 0x64201005, 0x59a80015, + 0x4800100d, 0x9008040c, 0x48001003, 0x59a80013, + 0x90000410, 0x48001007, 0x59a80014, 0x90000440, + 0x48001008, 0x0001f829, 0x90000541, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x60280000, 0x4803c857, 0x05fdfcd7, 0x80000580, 0x05fdf7f9, 0x4803c857, 0x4c5c0000, 0x4c600000, 0x5808b802, 0x825cc580, 0x00000100, 0x05020012, 0x64001001, 0x64041004, 0x64101005, 0x4800100c, 0x9008040c, 0x48001003, - 0x59a80011, 0xb000042c, 0x48001007, 0x59a80012, - 0x90000440, 0x48001008, 0x0001f821, 0x90000541, + 0x59a80013, 0xb000042c, 0x48001007, 0x59a80014, + 0x90000440, 0x48001008, 0x0001f829, 0x90000541, 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x60280000, 0x4803c857, 0x05fdfcba, 0x80000580, 0x05fdf7f9, 0x4833c857, 0x5830040b, 0x84000518, 0x8c00051c, 0x0500000e, 0x82000500, 0xffff3fff, 0x5830080c, 0x82040d80, 0xffffffff, 0x05020002, 0x8400055e, 0x5830080d, 0x8c040520, 0x05000004, 0x84000558, - 0x84040d20, 0x48075013, 0x8c00051a, 0x05000003, + 0x84040d20, 0x48075015, 0x8c00051a, 0x05000003, 0x8400051a, 0x8400055e, 0x4800640b, 0x1c01f000, 0x4833c857, 0x4c5c0000, 0x4c580000, 0x4d2c0000, - 0x05c5fd6e, 0x05000032, 0x492c600a, 0x645a5800, + 0x05c5f8e5, 0x05000032, 0x492c600a, 0x645a5800, 0x4178b800, 0x912cac02, 0x0501f84c, 0x4404a800, 0x8054a800, 0x8058b000, 0x805cb800, 0x80580580, 0x0500000a, 0x912c0418, 0x80540580, 0x05fe07f7, - 0x4d2c0000, 0x05c5fd5d, 0x05000025, 0x5c000000, + 0x4d2c0000, 0x05c5f8d4, 0x05000025, 0x5c000000, 0x492c0001, 0x05fdf7ee, 0x485e5800, 0x5830000a, 0x58000000, 0x64006001, 0x48006004, 0x800000c4, 0x48006005, 0x5830000a, 0x90000402, 0x48006003, - 0x59a80011, 0x82000400, 0x00000484, 0x90580d91, - 0x0500000e, 0xb0000404, 0x90580da2, 0x05000003, - 0x82000400, 0x00000088, 0x59e00802, 0x8c04051e, - 0x05000006, 0x90580da2, 0x05020003, 0xb0000404, - 0x0501f002, 0xb000041c, 0x05fdfd63, 0x5c025800, + 0x59a80013, 0x82000400, 0x00000484, 0x90580d91, + 0x0500000e, 0xb0000404, 0x90580d9b, 0x05000002, + 0xb0000410, 0x59e00802, 0x8c04051e, 0x05000007, + 0x90580d9b, 0x05020003, 0x90000428, 0x0501f003, + 0x82000400, 0x00000080, 0x05fdfd63, 0x5c025800, 0x5c00b000, 0x5c00b800, 0x1c01f000, 0x5c025800, 0x05fdf7de, 0x4833c857, 0x4d2c0000, 0x4c3c0000, - 0x4c300000, 0x5832580a, 0x812e59c0, 0x05c40987, - 0x592c7801, 0x483c600a, 0x05c5fd3c, 0x803c79c0, + 0x4c300000, 0x5832580a, 0x812e59c0, 0x05c00d02, + 0x592c7801, 0x483c600a, 0x05c5f8b3, 0x803c79c0, 0x0500000a, 0x903c0402, 0x48006003, 0x583c0000, 0x48006004, 0x800000c4, 0x48006005, 0x40301000, - 0x0001f821, 0x90000541, 0x5c006000, 0x5c007800, + 0x0001f829, 0x90000541, 0x5c006000, 0x5c007800, 0x5c025800, 0x1c01f000, 0x485bc857, 0x4c5c0000, - 0x40580000, 0x0c01f001, 0x00107ca3, 0x00107cb7, - 0x00107cbb, 0x00107cbd, 0x00107cbf, 0x00107cc1, - 0x00107cc3, 0x00107cc5, 0x00107cc9, 0x00107ccc, - 0x00107ccf, 0x00107cd7, 0x00107ce6, 0x00107cf1, - 0x00107cfc, 0x00107d01, 0x00107d0c, 0x00107ca3, - 0x00107ca6, 0x00107d0f, 0x00107d5c, 0x00107d66, - 0x00107d68, 0x00107d6e, 0x00107d72, 0x00107d76, - 0x00107d7b, 0x00107d7d, 0x00107d7f, 0x00107d81, - 0x00107d83, 0x00107d85, 0x00107d87, 0x00107d8f, - 0x00107cad, 0x00107cb0, 0x00107d3b, 0x00107d50, - 0x00107d52, 0x00107d54, 0x00107d56, 0x00107d58, - 0x00107d5a, 0x00107d60, 0x00107d5e, 0x00107d64, - 0x00107d62, 0x00107d42, 0x00107d6c, 0x00107d6e, - 0x00107d72, 0x00107da4, 0x00107da7, 0x00107da9, - 0x00107dab, 0x00107dad, 0x00107daf, 0x42000800, - 0x44504f4c, 0x0501f10f, 0x60100800, 0x59e00002, - 0x8c00051e, 0x0500010b, 0x82040d40, 0x00000100, - 0x0501f108, 0x42000800, 0x44504f4c, 0x0501f103, - 0x60180800, 0x59e00002, 0x8c00051e, 0x050000ff, - 0x82040d40, 0x00000100, 0x0501f0fc, 0x600c0802, - 0x0501f055, 0x50040800, 0x0501f053, 0x59a80814, - 0x0501f051, 0x59a80815, 0x0501f04f, 0x59a80816, - 0x0501f04d, 0x59a80817, 0x0501f04b, 0x59a80818, - 0x0501f049, 0x59a80819, 0x0501f047, 0x302e3730, - 0x30302e33, 0x42000800, 0x00107cc7, 0x05fdf7ee, - 0x42000800, 0x00107cc8, 0x05fdf7eb, 0x42000000, - 0x7ff0000d, 0x50000000, 0x80000130, 0x0501f8e4, - 0x9c0001c0, 0x40000800, 0x0501f037, 0x42000000, - 0x7ff0000d, 0x50000000, 0x80000120, 0x0501f8dc, - 0x82000500, 0x00ffffff, 0x82000540, 0x2e000000, - 0x9c0001c0, 0x05fdf7f4, 0x32333532, 0x31303030, - 0x32333532, 0x32303030, 0x60000020, 0x50000000, - 0x82000480, 0x25320001, 0x05020004, 0x42000800, - 0x00107ce2, 0x05fdf7cc, 0x42000800, 0x00107ce4, - 0x05fdf7c9, 0x60000020, 0x50000000, 0x82000480, - 0x25320001, 0x05020004, 0x42000800, 0x00107ce3, - 0x05fdf7c1, 0x42000800, 0x00107ce5, 0x05fdf7be, - 0x60c80800, 0x61900000, 0x800000e0, 0x80040d40, - 0x0501f00d, 0x59a8005a, 0x800001c0, 0x05020002, - 0x6140000f, 0x59a8085b, 0x800409c0, 0x05020002, - 0x6140080f, 0x800408e0, 0x80040d40, 0x0501f002, - 0x41780800, 0x60440000, 0x0501f0a7, 0x60080800, - 0x916c0583, 0x0502000e, 0x59a80249, 0x8c000502, - 0x05000004, 0x82040d40, 0x00000300, 0x0501f008, - 0x8c000508, 0x05000004, 0x82040d40, 0x00000200, - 0x0501f003, 0x82040d40, 0x00000100, 0x82040d40, - 0x00080000, 0x59c40001, 0x82000500, 0x00018000, - 0x9000bd80, 0x05020004, 0x82040d40, 0x01000000, - 0x0501f08c, 0x8200bd80, 0x00008000, 0x05020004, - 0x82040d40, 0x02000000, 0x0501f086, 0x8200bd80, - 0x00010000, 0x05020004, 0x82040d40, 0x04000000, - 0x0501f080, 0x8200bd80, 0x00018000, 0x0502007d, - 0x82040d40, 0x08000000, 0x0501f07a, 0x60100800, - 0x59e00002, 0x8c00051e, 0x05000003, 0x82040d40, - 0x00010000, 0x0501f071, 0x41780800, 0x916c0583, - 0x0502006e, 0x59a80249, 0x8c000502, 0x05000003, - 0x90040d43, 0x0501f069, 0x8c000508, 0x05000003, - 0x90040d42, 0x0501f065, 0x90040d41, 0x0501f063, - 0x59a80814, 0x0501f061, 0x59a80815, 0x0501f05f, - 0x59a80816, 0x0501f05d, 0x59a80817, 0x0501f05b, - 0x59a80818, 0x0501f059, 0x59a80819, 0x0501f057, - 0x59a8083d, 0x0501f057, 0x59a80800, 0x0501f053, - 0x59a80801, 0x0501f051, 0x59a80802, 0x0501f04f, - 0x59a80803, 0x0501f04d, 0x59880823, 0x0501f04d, - 0x59880129, 0x5988092a, 0x80040c00, 0x0501f049, - 0x599c0a09, 0x0501f045, 0x59c408b1, 0x59a800a9, - 0x80040c00, 0x0501f043, 0x59c408b2, 0x59a800aa, - 0x80040c00, 0x0501f03f, 0x60040800, 0x916c0583, - 0x0502003c, 0x84040d42, 0x0501f03a, 0x59880800, - 0x0501f038, 0x59880805, 0x0501f036, 0x59880801, - 0x0501f034, 0x59880802, 0x0501f032, 0x59880803, - 0x0501f030, 0x598808c5, 0x0501f02e, 0x59880081, - 0x59880882, 0x80040c00, 0x59880083, 0x80040c00, - 0x59880084, 0x80040c00, 0x0501f026, 0x59880826, - 0x82040d00, 0x000000ff, 0x59880027, 0x82000500, - 0x000000ff, 0x800000d0, 0x80040d40, 0x4c040000, - 0x59880019, 0x5988081a, 0x80040400, 0x82000500, - 0x000000ff, 0x800000e0, 0x5c000800, 0x80040d40, - 0x59880025, 0x800000f0, 0x80040d40, 0x0501f011, - 0x0529fb5b, 0x610008f4, 0x0501f00b, 0x610408f4, - 0x0501f009, 0x610808f4, 0x0501f007, 0x611008f4, - 0x0501f005, 0x611408f4, 0x0501f003, 0x611808f4, - 0x64030000, 0x50040800, 0x60e40000, 0x0501f002, - 0x60880000, 0x5c00b800, 0x1c01f000, 0x4803c857, - 0x4c5c0000, 0x4c600000, 0x82000500, 0x000000ff, - 0x4000b800, 0x4178c000, 0x905c048a, 0x0500100c, - 0x4000b800, 0x8260c400, 0x00000100, 0x82600500, - 0x0000ff00, 0x82000580, 0x00000a00, 0x05020003, - 0x8260c400, 0x0000f600, 0x05fdf7f4, 0x805c0418, - 0x82000400, 0x30303030, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x00000030, 0x00000000, 0x00000000, - 0x000000f4, 0x00000394, 0x00000000, 0x00000000, - 0x00000444, 0x3c000000, 0x00000505, 0x00000707, - 0x00000000, 0x44435442, 0x000d0101, 0x00006283, - 0x52504010, 0x414e444f, 0x6283454d, 0x10100100, - 0x4c524553, 0x004d554e, 0x02006283, 0x43500220, - 0x00444949, 0x62830000, 0x02200300, 0x44494350, - 0x00004449, 0x04006283, 0x43500220, 0x56535349, - 0x62834449, 0x02200500, 0x53494350, 0x44494453, - 0x06006283, 0x57463c10, 0x4e4e4142, 0x62835245, - 0x04200700, 0x4f504346, 0x00535452, 0x08006283, - 0x554e0420, 0x4e55464d, 0x62830043, 0x02200b00, - 0x50514d56, 0x54524f50, 0x0c006283, 0x4d560220, - 0x46505051, 0x62832020, 0x04201300, 0x45494350, - 0x52424e42, 0xe0006283, 0x57460420, 0x52545441, - 0x00004249, 0x00000000, 0x44504f4c, 0x00090103, - 0x12004683, 0x45441810, 0x56524456, 0x46835256, - 0x08101300, 0x46564544, 0x00525657, 0x14004683, - 0x45440810, 0x4f494256, 0x46835256, 0x08101500, - 0x48564544, 0x00525657, 0x16004684, 0x43530220, - 0x4f544953, 0x46840056, 0x02201700, 0x4f545452, - 0x00000056, 0x18004684, 0x41520220, 0x00564f54, - 0x46840000, 0x02201900, 0x4f544445, 0x00000056, - 0x1a004684, 0x52430420, 0x00564f54, 0x00000000, - 0x00000000, 0x44504f4c, 0x00150204, 0x00004883, - 0x4f500120, 0x59545452, 0x48834550, 0x01200100, - 0x54524f50, 0x54415453, 0x03004883, 0x55530120, - 0x54525050, 0x48835053, 0x01200400, 0x5250474e, - 0x44505354, 0x05004883, 0x504e0420, 0x4954524f, - 0x48830044, 0x04200d00, 0x52445852, 0x0053504f, - 0x11004883, 0x58540420, 0x4f525245, 0x48845352, - 0x04201300, 0x52465852, 0x53454d41, 0x15004884, - 0x58540420, 0x4d415246, 0x48835345, 0x04201700, - 0x4b4e494c, 0x54415453, 0x21004884, 0x494c0420, - 0x52454b4e, 0x48840052, 0x04202200, 0x45435243, - 0x00005252, 0x2d004884, 0x4f4c0420, 0x454e5953, - 0x48845252, 0x04202e00, 0x49534f4c, 0x52524547, - 0x2f004884, 0x52500420, 0x52454d49, 0x48840052, - 0x04206f00, 0x4f474f4c, 0x00564352, 0x80004884, - 0x53520420, 0x43524e43, 0x48840056, 0x01208900, - 0x52534f4e, 0x54435643, 0x8a004884, 0x4c4f0120, - 0x554f4353, 0x4884544e, 0x01208b00, 0x4f43524c, - 0x00544e55, 0x8e004884, 0x494c0120, 0x56435250, - 0x00005443, 0x00000000, 0x44504f4c, 0x000f0206, - 0x00004c83, 0x55460220, 0x5954434e, 0x4c834550, - 0x02200100, 0x434e5546, 0x00004449, 0x02004c83, - 0x55461810, 0x4556434e, 0x4c835352, 0x08200800, - 0x4e4e5757, 0x00454d41, 0x09004c83, 0x57570820, - 0x4d414e50, 0x4c830045, 0x04200b00, 0x54524f50, - 0x54415453, 0x0d004c84, 0x43460420, 0x51585245, - 0x4c845a53, 0x04201000, 0x52454346, 0x4d524658, - 0x12004c84, 0x43460420, 0x46585445, 0x4c834d52, - 0x04201600, 0x52524550, 0x00504143, 0x17004c83, - 0x45500420, 0x4e555252, 0x4c834543, 0x04201800, - 0x524f4350, 0x4b414d55, 0x19004c83, 0x45500420, - 0x45435252, 0x4c835252, 0x04201a00, 0x524f4350, - 0x4b53414d, 0x1b004c83, 0x45500420, 0x52415252, - 0x00005243, 0x00000000, 0x44435442, 0x00000001, - 0x25321077, 0x338e103c, 0x474f4c51, 0x43204349, - 0x4f50524f, 0x49544152, 0x20204e4f, 0x50534920, - 0x78783532, 0x72694620, 0x7261776d, 0x20202065, - 0x73726556, 0x206e6f69, 0x2e372020, 0x302e3330, - 0x00202030, 0x00000002, 0x00000001, 0x01000100, - 0x05e5fa53, 0x05020005, 0x4803c856, 0x05d1fa9f, - 0x05d1fadd, 0x05d1fabe, 0x1c01f000, 0x59a8083b, - 0x59a8029c, 0x80040480, 0x599c0a02, 0x800409c0, - 0x05020002, 0x80040800, 0x80041480, 0x05001002, - 0x40000800, 0x4807509a, 0x59a8103b, 0x40040000, - 0x800acc80, 0x4967503b, 0x4967509b, 0x59aaa80b, - 0x41640800, 0x60c01000, 0x0501f88c, 0x8206a400, - 0x00111b00, 0x49535097, 0x4152b000, 0x0529fa48, - 0x0500001f, 0x496752dd, 0x599c041e, 0x4803c857, - 0x59a8089a, 0x4807c857, 0x80041480, 0x05021009, - 0x497b509a, 0x49575097, 0x4152a800, 0x81640c00, - 0x4807c857, 0x480754dd, 0x80040800, 0x0501f00d, - 0x480bc857, 0x480b509a, 0x81640c00, 0x4807c857, - 0x480754dd, 0x80040800, 0x60c01000, 0x0501f86f, - 0x4807c857, 0x8206a400, 0x00111b00, 0x49535097, - 0x4953c857, 0x4a0370e4, 0x30000000, 0x42006000, - 0x00110278, 0x4a006008, 0x0000012c, 0x4a006009, - 0xda10da10, 0x6454600c, 0x4a00600d, 0x00110278, - 0x4a00600e, 0x001012a7, 0x599c0014, 0x48006015, - 0x599c0015, 0x48006016, 0x42006000, 0x00111a10, - 0x64206203, 0x64186407, 0x4a006002, 0xffff0000, - 0x4a006009, 0x00110278, 0x4a006016, 0x00110278, - 0x599c0014, 0x48006017, 0x599c0015, 0x48006018, - 0x599c0413, 0x48006019, 0x4950601a, 0x4954601b, - 0x59a8009a, 0x4800601c, 0x4a00601d, 0x0010dc97, - 0x59a802dd, 0x48006020, 0x59a804dd, 0x48006021, - 0x42000000, 0x00111ad0, 0x48006022, 0x42000000, - 0x00110228, 0x48006023, 0x4a00601e, 0x0010dc98, - 0x4a00601f, 0x0010dc99, 0x42000000, 0xb0000000, - 0x42000800, 0x00111a10, 0x0001f93a, 0x1c01f000, + 0x40580000, 0x0c01f001, 0x00108165, 0x00108179, + 0x0010817d, 0x0010817f, 0x00108181, 0x00108183, + 0x00108185, 0x00108187, 0x0010818b, 0x0010818e, + 0x00108191, 0x00108199, 0x001081a8, 0x001081b3, + 0x001081be, 0x001081c3, 0x001081ce, 0x00108165, + 0x00108168, 0x001081d1, 0x00108219, 0x0010821b, + 0x00108221, 0x00108225, 0x00108229, 0x001081ec, + 0x0010820f, 0x0010816f, 0x00108172, 0x001081ee, + 0x00108203, 0x00108205, 0x00108207, 0x00108209, + 0x0010820b, 0x0010820d, 0x00108213, 0x00108211, + 0x00108217, 0x00108215, 0x001081f5, 0x0010821f, + 0x00108221, 0x00108225, 0x00108259, 0x0010825c, + 0x0010825e, 0x00108260, 0x00108262, 0x00108264, + 0x0010822e, 0x00108230, 0x00108232, 0x00108234, + 0x00108236, 0x00108238, 0x0010823a, 0x0010823c, + 0x00108244, 0x42000800, 0x44504f4c, 0x0501f104, + 0x60100800, 0x59e00002, 0x8c00051e, 0x05000100, + 0x82040d40, 0x00000100, 0x0501f0fd, 0x42000800, + 0x44504f4c, 0x0501f0f8, 0x60180800, 0x59e00002, + 0x8c00051e, 0x050000f4, 0x82040d40, 0x00000100, + 0x0501f0f1, 0x600c0802, 0x0501f055, 0x50040800, + 0x0501f053, 0x59a80816, 0x0501f051, 0x59a80817, + 0x0501f04f, 0x59a80818, 0x0501f04d, 0x59a80819, + 0x0501f04b, 0x59a8081a, 0x0501f049, 0x59a8081b, + 0x0501f047, 0x302e3830, 0x30302e33, 0x42000800, + 0x00108189, 0x05fdf7ee, 0x42000800, 0x0010818a, + 0x05fdf7eb, 0x42000000, 0x7ff0000d, 0x50000000, + 0x80000130, 0x0501f8d9, 0x9c0001c0, 0x40000800, + 0x0501f037, 0x42000000, 0x7ff0000d, 0x50000000, + 0x80000120, 0x0501f8d1, 0x82000500, 0x00ffffff, + 0x82000540, 0x2e000000, 0x9c0001c0, 0x05fdf7f4, + 0x32333532, 0x31303030, 0x32333532, 0x32303030, + 0x60000020, 0x50000000, 0x82000480, 0x25320001, + 0x05020004, 0x42000800, 0x001081a4, 0x05fdf7cc, + 0x42000800, 0x001081a6, 0x05fdf7c9, 0x60000020, + 0x50000000, 0x82000480, 0x25320001, 0x05020004, + 0x42000800, 0x001081a5, 0x05fdf7c1, 0x42000800, + 0x001081a7, 0x05fdf7be, 0x60c80800, 0x61900000, + 0x800000e0, 0x80040d40, 0x0501f00d, 0x59a8005d, + 0x800001c0, 0x05020002, 0x6140000f, 0x59a8085e, + 0x800409c0, 0x05020002, 0x6140080f, 0x800408e0, + 0x80040d40, 0x0501f002, 0x41780800, 0x60440000, + 0x0501f09c, 0x60080800, 0x59c40001, 0x82000500, + 0x00018000, 0x9000bd80, 0x05020004, 0x82040d40, + 0x000a0000, 0x0501f092, 0x8200bd80, 0x00008000, + 0x05020004, 0x82040d40, 0x00140000, 0x0501f08c, + 0x8200bd80, 0x00010000, 0x05020004, 0x82040d40, + 0x00280000, 0x0501f086, 0x8200bd80, 0x00018000, + 0x05020083, 0x82040d40, 0x00500000, 0x0501f080, + 0x61400800, 0x0501f07e, 0x60100800, 0x59e00002, + 0x8c00051e, 0x05000003, 0x82040d40, 0x00010000, + 0x0501f075, 0x41780800, 0x916c0583, 0x05020072, + 0x59a8024c, 0x8c000502, 0x05000003, 0x90040d43, + 0x0501f06d, 0x8c000508, 0x05000003, 0x90040d42, + 0x0501f069, 0x90040d41, 0x0501f067, 0x59a80816, + 0x0501f065, 0x59a80817, 0x0501f063, 0x59a80818, + 0x0501f061, 0x59a80819, 0x0501f05f, 0x59a8081a, + 0x0501f05d, 0x59a8081b, 0x0501f05b, 0x59a80840, + 0x0501f05b, 0x59a80800, 0x0501f057, 0x59a80801, + 0x0501f055, 0x59a80802, 0x0501f053, 0x59a80803, + 0x0501f051, 0x59880823, 0x0501f051, 0x5988012c, + 0x5988092d, 0x80040c00, 0x0501f04d, 0x599c0a09, + 0x0501f049, 0x59c408b1, 0x59a800ae, 0x80040c00, + 0x0501f047, 0x59c408b2, 0x59a800af, 0x80040c00, + 0x0501f043, 0x60040800, 0x916c0583, 0x05020040, + 0x84040d42, 0x0501f03e, 0x59880800, 0x0501f03a, + 0x59880805, 0x0501f038, 0x59880801, 0x0501f036, + 0x59880802, 0x0501f034, 0x59880803, 0x0501f032, + 0x59880927, 0x0501f030, 0x598808c8, 0x0501f02e, + 0x59880081, 0x59880882, 0x80040c00, 0x59880083, + 0x80040c00, 0x59880084, 0x80040c00, 0x0501f026, + 0x59880826, 0x82040d00, 0x000000ff, 0x59880027, + 0x82000500, 0x000000ff, 0x800000d0, 0x80040d40, + 0x4c040000, 0x59880019, 0x5988081a, 0x80040400, + 0x82000500, 0x000000ff, 0x800000e0, 0x5c000800, + 0x80040d40, 0x59880025, 0x800000f0, 0x80040d40, + 0x0501f011, 0x0529fe21, 0x610008f4, 0x0501f00d, + 0x610408f4, 0x0501f00b, 0x610808f4, 0x0501f009, + 0x611008f4, 0x0501f007, 0x611408f4, 0x0501f005, + 0x611808f4, 0x50040800, 0x64030000, 0x0501f002, + 0x50040800, 0x60ec0000, 0x0501f002, 0x606c0000, + 0x5c00b800, 0x1c01f000, 0x4803c857, 0x4c5c0000, + 0x4c600000, 0x82000500, 0x000000ff, 0x4000b800, + 0x4178c000, 0x905c048a, 0x0500100c, 0x4000b800, + 0x8260c400, 0x00000100, 0x82600500, 0x0000ff00, + 0x82000580, 0x00000a00, 0x05020003, 0x8260c400, + 0x0000f600, 0x05fdf7f4, 0x805c0418, 0x82000400, + 0x30303030, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x00000030, 0x00000000, 0x00000000, 0x000000f4, + 0x00000394, 0x00000000, 0x00000000, 0x00000444, + 0x3c000000, 0x00000505, 0x00000707, 0x00000000, + 0x44435442, 0x000d0101, 0x00006283, 0x52504010, + 0x414e444f, 0x6283454d, 0x10100100, 0x4c524553, + 0x004d554e, 0x02006283, 0x43500220, 0x00444949, + 0x62830000, 0x02200300, 0x44494350, 0x00004449, + 0x04006283, 0x43500220, 0x56535349, 0x62834449, + 0x02200500, 0x53494350, 0x44494453, 0x06006283, + 0x57463c10, 0x4e4e4142, 0x62835245, 0x04200700, + 0x454d554e, 0x54524f50, 0x08006283, 0x554e0420, + 0x4e55464d, 0x62830043, 0x02200b00, 0x50514d56, + 0x54524f50, 0x0c006283, 0x4d560220, 0x46505051, + 0x62832020, 0x04201300, 0x45494350, 0x52424e42, + 0xe0006283, 0x57460420, 0x52545441, 0x00004249, + 0x00000000, 0x44504f4c, 0x00090103, 0x12004683, + 0x45441810, 0x56524456, 0x46835256, 0x08101300, + 0x46564544, 0x00525657, 0x14004683, 0x45440810, + 0x4f494256, 0x46835256, 0x08101500, 0x48564544, + 0x00525657, 0x16004684, 0x43530220, 0x4f544953, + 0x46840056, 0x02201700, 0x4f545452, 0x00000056, + 0x18004684, 0x41520220, 0x00564f54, 0x46840000, + 0x02201900, 0x4f544445, 0x00000056, 0x1a004684, + 0x52430420, 0x00564f54, 0x00000000, 0x00000000, + 0x44504f4c, 0x00090204, 0x00004883, 0x4f500220, + 0x59545452, 0x48834550, 0x02200200, 0x54524f50, + 0x44455053, 0x06004883, 0x58520420, 0x504f5244, + 0x48830053, 0x04200e00, 0x52455854, 0x53524f52, + 0x10004884, 0x58520420, 0x4d415246, 0x48845345, + 0x04201200, 0x52465854, 0x53454d41, 0x16004883, + 0x494c0420, 0x54534b4e, 0x48835441, 0x04201a00, + 0x50505553, 0x50535452, 0x1b004883, 0x504e0420, + 0x4954524f, 0x00000044, 0x00000000, 0x44504f4c, + 0x001b0206, 0x00004c83, 0x55460220, 0x5954434e, + 0x4c834550, 0x02200100, 0x434e5546, 0x00004449, + 0x02004c83, 0x55461810, 0x4556434e, 0x4c835352, + 0x08200800, 0x4e4e5757, 0x00454d41, 0x09004c83, + 0x57570820, 0x4d414e50, 0x4c830045, 0x04200b00, + 0x54524f50, 0x54415453, 0x0d004c84, 0x43460420, + 0x51585245, 0x4c845a53, 0x04201000, 0x52454346, + 0x4d524658, 0x12004c84, 0x43460420, 0x46585445, + 0x4c834d52, 0x04201600, 0x52524550, 0x00504143, + 0x17004c83, 0x45500420, 0x4e555252, 0x4c834543, + 0x04201800, 0x524f4350, 0x4b414d55, 0x19004c83, + 0x45500420, 0x45435252, 0x4c835252, 0x04201a00, + 0x524f4350, 0x4b53414d, 0x1b004c83, 0x45500420, + 0x52415252, 0x4c845243, 0x04202500, 0x4b4e494c, + 0x00525245, 0x26004c84, 0x52430420, 0x52524543, + 0x4c840000, 0x04203100, 0x59534f4c, 0x5252454e, + 0x32004c84, 0x4f4c0420, 0x45474953, 0x4c845252, + 0x04203300, 0x4d495250, 0x00525245, 0x34004c84, + 0x49440420, 0x52455053, 0x48840052, 0x04206f00, + 0x4f474f4c, 0x00564352, 0x80004c84, 0x53520420, + 0x43524e43, 0x4c840056, 0x01208900, 0x52534f4e, + 0x54435643, 0x8a004c84, 0x4c4f0120, 0x554f4353, + 0x4c84544e, 0x01208b00, 0x4f43524c, 0x00544e55, + 0x8e004c84, 0x494c0120, 0x56435250, 0x00005443, + 0x00000000, 0x44435442, 0x00000001, 0x25321077, + 0x338e103c, 0x474f4c51, 0x43204349, 0x4f50524f, + 0x49544152, 0x20204e4f, 0x50534920, 0x78783532, + 0x72694620, 0x7261776d, 0x20202065, 0x73726556, + 0x206e6f69, 0x2e382020, 0x302e3330, 0x00202030, + 0x00000002, 0x00000001, 0x01000100, 0x05e1ff42, + 0x05020005, 0x4803c856, 0x05cdfe68, 0x05cdfea6, + 0x05cdfe87, 0x1c01f000, 0x59a8043e, 0x599c0a02, + 0x800409c0, 0x05020002, 0x80040800, 0x80041480, + 0x05001002, 0x40000800, 0x4807509d, 0x59a8103d, + 0x40040000, 0x800acc80, 0x4967503d, 0x4967509e, + 0x59a8143e, 0x80081480, 0x480b543e, 0x59aaa80b, + 0x41640800, 0x60c01000, 0x0501f88d, 0x8006a42f, + 0x4953509a, 0x4152b000, 0x0529fd0c, 0x0500001e, + 0x496752e2, 0x599c041e, 0x4803c857, 0x59a8089d, + 0x4807c857, 0x80041480, 0x05021009, 0x497b509d, + 0x4957509a, 0x4152a800, 0x81640c00, 0x4807c857, + 0x480754e2, 0x80040800, 0x0501f00c, 0x480bc857, + 0x480b509d, 0x81640c00, 0x4807c857, 0x480754e2, + 0x80040800, 0x60c01000, 0x0501f871, 0x4807c857, + 0x8006a42f, 0x4953509a, 0x4953c857, 0x4a0370e4, + 0x30000000, 0x42006000, 0x0011421c, 0x4a006008, + 0x0000012c, 0x4a006009, 0xda10da10, 0x6454600c, + 0x4a00600d, 0x0011421c, 0x4a00600e, 0x00100046, + 0x599c0014, 0x48006015, 0x599c0015, 0x48006016, + 0x42006000, 0x001159b4, 0x64206203, 0x64186407, + 0x4a006002, 0xffff0000, 0x4a006009, 0x0011421c, + 0x4a006016, 0x0011421c, 0x599c0014, 0x48006017, + 0x599c0015, 0x48006018, 0x599c0413, 0x48006019, + 0x4950601a, 0x4954601b, 0x59a8009d, 0x4800601c, + 0x59a802e2, 0x48006020, 0x59a804e2, 0x48006021, + 0x42000000, 0x00115a74, 0x48006022, 0x42000000, + 0x001141cc, 0x48006023, 0x4a00601e, 0x00111c1b, + 0x4a00601f, 0x00111c1c, 0x42000000, 0xb0000000, + 0x42000800, 0x001159b4, 0x0001f942, 0x1c01f000, 0x4807c856, 0x59240206, 0x800409c0, 0x05000003, 0x80080540, 0x0501f002, 0x80080500, 0x48024a06, - 0x1c01f000, 0x492e6017, 0x4d2c0000, 0x05c5fa33, + 0x1c01f000, 0x492e6017, 0x4d2c0000, 0x05c1fdb6, 0x0500000c, 0x4c500000, 0x4c540000, 0x4c580000, - 0x412ca800, 0x5930a017, 0x6060b000, 0x0529f950, + 0x412ca800, 0x5930a017, 0x6060b000, 0x0529fc17, 0x492e6017, 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800, 0x59300202, 0x48025a10, 0x4932580d, - 0x1c01f000, 0x4803c856, 0x4c000000, 0x05f9f96b, - 0x0502000b, 0x05e9fdaf, 0x05c20e74, 0x5c000000, - 0x48026802, 0x0509fc9a, 0x05000006, 0x4936600a, - 0x64066407, 0x60067000, 0x0009f000, 0x5c000000, - 0x1c01f000, 0x05c1fe69, 0x4c0c0000, 0x4c100000, - 0x4c140000, 0x4c180000, 0x80001d80, 0x80002580, - 0x60803000, 0x90040501, 0x05000003, 0x40080000, - 0x800c1c00, 0x400c2800, 0x800c1902, 0x80102102, - 0x90140501, 0x05000003, 0x82102540, 0x80000000, - 0x80040902, 0x80183040, 0x05fe07f3, 0x40100800, - 0x400c0000, 0x5c003000, 0x5c002800, 0x5c002000, - 0x5c001800, 0x1c01f000, 0x4c0c0000, 0x4c580000, - 0x6080b000, 0x80000540, 0x05000019, 0x80041c80, - 0x05021017, 0x800810c2, 0x80040982, 0x05001006, - 0x80041c80, 0x05021005, 0x8058b040, 0x05fe07fa, - 0x0501f006, 0x80041c80, 0x400c0800, 0x80081000, - 0x8058b040, 0x05fe07f4, 0x4c000000, 0x41f00000, - 0x82000500, 0xf7ffffff, 0x4003e000, 0x5c000000, - 0x5c00b000, 0x5c001800, 0x1c01f000, 0x4c000000, - 0x41f00000, 0x82000540, 0x08000000, 0x05fdf7f7, - 0x42007000, 0x0010e060, 0x64147000, 0x64007401, - 0x4a007201, 0x00000840, 0x64147202, 0x6401a8e8, - 0x6443c82b, 0x0501f84e, 0x4a01a8e9, 0x00003a0d, - 0x4a01a8ee, 0x00080202, 0x6405a8e8, 0x640378e8, - 0x6443c821, 0x6413c823, 0x0501f879, 0x4a0378e9, - 0x00003a0d, 0x4a0378ee, 0x00080302, 0x640778e8, - 0x41780800, 0x6003a0ec, 0x42001000, 0x0010e32d, - 0x42001800, 0x0011178d, 0x600c2000, 0x6120297f, - 0x4a03a005, 0xd0000001, 0x59d00006, 0x4a03a005, - 0x90000001, 0x59d00006, 0x4a03a005, 0x60000001, - 0x59d00006, 0x4a03a005, 0x60000003, 0x59d00006, - 0x4a03a005, 0x60000005, 0x59d00006, 0x4a03a005, - 0x60000007, 0x59d00006, 0x4a03a005, 0x60000009, - 0x59d00006, 0x4a03a005, 0x6000000b, 0x64041001, - 0x4a001002, 0x00000100, 0x4a001009, 0x00020f77, - 0x480c100b, 0x4810100d, 0x4814100e, 0x4978120f, - 0x4804140f, 0x49781010, 0x820c1c00, 0x00000080, - 0x480c100c, 0x90081412, 0x801020c4, 0x80142800, - 0x91d3a420, 0x80040800, 0x90040485, 0x05fc17d7, - 0x59e00003, 0x82000500, 0xffffffe0, 0x82000540, - 0x00008000, 0x4803c003, 0x59c40006, 0x82000500, - 0xfffcffff, 0x48038806, 0x1c01f000, 0x4d900000, - 0x4d180000, 0x4c500000, 0x4c580000, 0x4c540000, - 0x4a01a8e7, 0xaaaaaaaa, 0x4a01a8e6, 0xaaaaaaaa, - 0x4a01a8e5, 0xaaaaaaaa, 0x4a01a8e4, 0xaaaaaaaa, - 0x4a01a8ee, 0x00200000, 0x4979a8ee, 0x4a01a8ce, - 0x0010d17b, 0x6000b001, 0x90d4ac00, 0x4178a000, - 0x0529f893, 0x4a01a81d, 0x001012a3, 0x4a01a81b, - 0x001012ac, 0x4a01a81c, 0x001012bc, 0x4a01a81e, - 0x0010e2ff, 0x64031800, 0x600c0800, 0x42001800, - 0x0010e302, 0x417a3000, 0x811b20c8, 0x83932400, - 0x0000b037, 0x48072000, 0x480f2001, 0x64032002, - 0x800408c4, 0x900c1c05, 0x811a3000, 0x91180485, - 0x05fc17f6, 0x5c00a800, 0x5c00b000, 0x5c00a000, - 0x5c023000, 0x5c032000, 0x1c01f000, 0x4cd80000, - 0x4d180000, 0x4a0378e7, 0xaaaaaaaa, 0x4a0378e6, - 0xaaaaaaaa, 0x4a0378e5, 0xaaaaaaaa, 0x4a03781b, - 0x001012ac, 0x4a03781c, 0x001012bc, 0x4a03781d, - 0x0010e063, 0x4a03781e, 0x0010e06a, 0x42000800, - 0x0010e302, 0x417a3000, 0x42001000, 0x0011178d, - 0x8119b0c8, 0x82d9b400, 0x0000bf32, 0x83180400, - 0x00108a67, 0x50000000, 0x4801b002, 0x4809b000, - 0x4809b001, 0x82081400, 0x00000080, 0x90040c05, - 0x811a3000, 0x91180485, 0x05fc17f2, 0x5c023000, - 0x5c01b000, 0x1c01f000, 0x4933c857, 0x42000800, - 0x8000004e, 0x59300416, 0x8c000510, 0x05000002, - 0x84040d52, 0x48066004, 0x58d400ea, 0x8c000516, - 0x05fe07fe, 0x83300400, 0x80000000, 0x4801a8e1, - 0x1c01f000, 0x4933c857, 0x59300804, 0x82040d00, - 0x00000100, 0x82040d40, 0x80000040, 0x59300416, - 0x8c000510, 0x05000002, 0x84040d52, 0x48066004, - 0x497a6000, 0x58d400ea, 0x8c000516, 0x05fe07fe, - 0x83300400, 0x60000000, 0x4801a8e1, 0x1c01f000, - 0x0501fc8f, 0x4df00000, 0x4d300000, 0x4d340000, - 0x4d2c0000, 0x4d180000, 0x4c5c0000, 0x4c600000, + 0x1c01f000, 0x4803c856, 0x4c000000, 0x05f9f863, + 0x05020010, 0x05e9fb16, 0x05c209fb, 0x5c000000, + 0x48026802, 0x0509fcfb, 0x0500000b, 0x42000000, + 0x0011247c, 0x0529fb36, 0x4936600a, 0x64066407, + 0x602c0800, 0x05e9fadb, 0x60067000, 0x0009f039, + 0x5c000000, 0x1c01f000, 0x05c1f9eb, 0x4c0c0000, + 0x4c100000, 0x4c140000, 0x4c180000, 0x80001d80, + 0x80002580, 0x60803000, 0x90040501, 0x05000003, + 0x40080000, 0x800c1c00, 0x400c2800, 0x800c1902, + 0x80102102, 0x90140501, 0x05000003, 0x82102540, + 0x80000000, 0x80040902, 0x80183040, 0x05fe07f3, + 0x40100800, 0x400c0000, 0x5c003000, 0x5c002800, + 0x5c002000, 0x5c001800, 0x1c01f000, 0x4c0c0000, + 0x4c580000, 0x6080b000, 0x80000540, 0x05000019, + 0x80041c80, 0x05021017, 0x800810c2, 0x80040982, + 0x05001006, 0x80041c80, 0x05021005, 0x8058b040, + 0x05fe07fa, 0x0501f006, 0x80041c80, 0x400c0800, + 0x80081000, 0x8058b040, 0x05fe07f4, 0x4c000000, + 0x41f00000, 0x82000500, 0xf7ffffff, 0x4003e000, + 0x5c000000, 0x5c00b000, 0x5c001800, 0x1c01f000, + 0x4c000000, 0x41f00000, 0x82000540, 0x08000000, + 0x05fdf7f7, 0x42007000, 0x00111ffa, 0x64147000, + 0x64007401, 0x4a007201, 0x00000840, 0x64147202, + 0x6401a8e8, 0x6443c82b, 0x0501f84e, 0x4a01a8e9, + 0x00003a0d, 0x4a01a8ee, 0x00080202, 0x6405a8e8, + 0x640378e8, 0x6443c821, 0x6413c823, 0x0501f879, + 0x4a0378e9, 0x00003a0d, 0x4a0378ee, 0x00080302, + 0x640778e8, 0x41780800, 0x6003a0ec, 0x42001000, + 0x001122c8, 0x42001800, 0x00115731, 0x600c2000, + 0x6120297f, 0x4a03a005, 0xd0000001, 0x59d00006, + 0x4a03a005, 0x90000001, 0x59d00006, 0x4a03a005, + 0x60000001, 0x59d00006, 0x4a03a005, 0x60000003, + 0x59d00006, 0x4a03a005, 0x60000005, 0x59d00006, + 0x4a03a005, 0x60000007, 0x59d00006, 0x4a03a005, + 0x60000009, 0x59d00006, 0x4a03a005, 0x6000000b, + 0x64041001, 0x4a001002, 0x00000100, 0x4a001009, + 0x00020fae, 0x480c100b, 0x4810100d, 0x4814100e, + 0x4978120f, 0x4804140f, 0x49781010, 0x820c1c00, + 0x00000080, 0x480c100c, 0x90081412, 0x801020c4, + 0x80142800, 0x91d3a420, 0x80040800, 0x90040485, + 0x05fc17d7, 0x59e00003, 0x82000500, 0xffffffe0, + 0x82000540, 0x00008000, 0x4803c003, 0x59c40006, + 0x82000500, 0xfffcffff, 0x48038806, 0x1c01f000, + 0x4d900000, 0x4d180000, 0x4c500000, 0x4c580000, + 0x4c540000, 0x4a01a8e7, 0xaaaaaaaa, 0x4a01a8e6, + 0xaaaaaaaa, 0x4a01a8e5, 0xaaaaaaaa, 0x4a01a8e4, + 0xaaaaaaaa, 0x4a01a8ee, 0x00200000, 0x4979a8ee, + 0x4a01a8ce, 0x0010d8f9, 0x6000b001, 0x90d4ac00, + 0x4178a000, 0x0529fb55, 0x4a01a81d, 0x00100042, + 0x4a01a81b, 0x0010004b, 0x4a01a81c, 0x0010005b, + 0x4a01a81e, 0x00112299, 0x64031800, 0x600c0800, + 0x42001800, 0x0011229c, 0x417a3000, 0x811b20c8, + 0x83932400, 0x0000b037, 0x48072000, 0x480f2001, + 0x64032002, 0x800408c4, 0x900c1c05, 0x811a3000, + 0x91180485, 0x05fc17f6, 0x5c00a800, 0x5c00b000, + 0x5c00a000, 0x5c023000, 0x5c032000, 0x1c01f000, + 0x4cd80000, 0x4d180000, 0x4a0378e7, 0xaaaaaaaa, + 0x4a0378e6, 0xaaaaaaaa, 0x4a0378e5, 0xaaaaaaaa, + 0x4a03781b, 0x0010004b, 0x4a03781c, 0x0010005b, + 0x4a03781d, 0x00111ffd, 0x4a03781e, 0x00112004, + 0x42000800, 0x0011229c, 0x417a3000, 0x42001000, + 0x00115731, 0x8119b0c8, 0x82d9b400, 0x0000bf32, + 0x83180400, 0x00108f25, 0x50000000, 0x4801b002, + 0x4809b000, 0x4809b001, 0x82081400, 0x00000080, + 0x90040c05, 0x811a3000, 0x91180485, 0x05fc17f2, + 0x5c023000, 0x5c01b000, 0x1c01f000, 0x4933c857, + 0x42000800, 0x8000004e, 0x59300416, 0x8c000510, + 0x05000002, 0x84040d52, 0x48066004, 0x58d400ea, + 0x8c000516, 0x05fe07fe, 0x83300400, 0x80000000, + 0x4801a8e1, 0x1c01f000, 0x4933c857, 0x59300804, + 0x82040d00, 0x00000100, 0x82040d40, 0x80000040, + 0x59300416, 0x8c000510, 0x05000002, 0x84040d52, + 0x48066004, 0x497a6000, 0x58d400ea, 0x8c000516, + 0x05fe07fe, 0x83300400, 0x60000000, 0x4801a8e1, + 0x1c01f000, 0x0501fc94, 0x4df00000, 0x4d300000, + 0x4d340000, 0x4d2c0000, 0x4d180000, 0x4c5c0000, + 0x4c600000, 0x4d900000, 0x4dd00000, 0x4da40000, + 0x4d140000, 0x4cd80000, 0x58d6602f, 0x813261c0, + 0x05000024, 0x41302800, 0x4178c000, 0x59300000, + 0x4c000000, 0x5932680a, 0x5930b801, 0x4c0c0000, + 0x4c140000, 0x0509f9a1, 0x5c002800, 0x5c001800, + 0x05000008, 0x0501f8d1, 0x4c0c0000, 0x4c140000, + 0x0501fb03, 0x5c002800, 0x5c001800, 0x0501f005, + 0x41301800, 0x8060c1c0, 0x05020002, 0x400cc000, + 0x805cb9c0, 0x05000003, 0x405e6000, 0x05fdf7eb, + 0x5c026000, 0x813261c0, 0x05000006, 0x8060c1c0, + 0x05000002, 0x40602800, 0x4178c000, 0x05fdf7e0, + 0x417a3000, 0x0505f9a1, 0x59926005, 0x813261c0, + 0x0500000a, 0x5932680a, 0x4c140000, 0x0509f97f, + 0x5c002800, 0x05000005, 0x0501fe8d, 0x0501fc26, + 0x0501fc2b, 0x0501fae2, 0x811a3000, 0x91180485, + 0x05fc17f1, 0x5c01b000, 0x5c022800, 0x5c034800, + 0x5c03a000, 0x5c032000, 0x5c00c000, 0x5c00b800, + 0x5c023000, 0x5c025800, 0x5c026800, 0x5c026000, + 0x5c03e000, 0x05000c35, 0x1c01f000, 0x4933c857, + 0x0501fc41, 0x4df00000, 0x4d340000, 0x4d180000, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, - 0x4cd80000, 0x58d6602f, 0x813261c0, 0x05000024, - 0x41302800, 0x4178c000, 0x59300000, 0x4c000000, - 0x5932680a, 0x5930b801, 0x4c0c0000, 0x4c140000, - 0x0509f96a, 0x5c002800, 0x5c001800, 0x05000008, - 0x0501f8d1, 0x4c0c0000, 0x4c140000, 0x0501fafd, - 0x5c002800, 0x5c001800, 0x0501f005, 0x41301800, - 0x8060c1c0, 0x05020002, 0x400cc000, 0x805cb9c0, - 0x05000003, 0x405e6000, 0x05fdf7eb, 0x5c026000, - 0x813261c0, 0x05000006, 0x8060c1c0, 0x05000002, - 0x40602800, 0x4178c000, 0x05fdf7e0, 0x417a3000, - 0x0505f99c, 0x59926005, 0x813261c0, 0x0500000a, - 0x5932680a, 0x4c140000, 0x0509f948, 0x5c002800, - 0x05000005, 0x0501fe88, 0x0501fc21, 0x0501fc26, - 0x0501fadc, 0x811a3000, 0x91180485, 0x05fc17f1, - 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, - 0x5c032000, 0x5c00c000, 0x5c00b800, 0x5c023000, - 0x5c025800, 0x5c026800, 0x5c026000, 0x5c03e000, - 0x05000c30, 0x1c01f000, 0x4933c857, 0x0501fc3c, - 0x4df00000, 0x4d340000, 0x4d180000, 0x4d900000, - 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x5932680a, 0x58d4202f, 0x40102800, 0x801021c0, - 0x05000016, 0x41300000, 0x80100580, 0x05000011, - 0x5810000a, 0x81340580, 0x0502000b, 0x40101800, - 0x58102001, 0x41300000, 0x801021c0, 0x0500000b, - 0x80100d80, 0x05000007, 0x40101800, 0x58102001, - 0x05fdf7fa, 0x40102800, 0x58102000, 0x05fdf7ec, - 0x0501f879, 0x0501f00d, 0x417a3000, 0x0505f959, - 0x59900005, 0x81300580, 0x05000005, 0x811a3000, - 0x91180485, 0x05021010, 0x05fdf7f9, 0x0501fe46, - 0x0501fbdf, 0x0501fbe4, 0x5c01b000, 0x5c022800, + 0x4cd80000, 0x5932680a, 0x58d4202f, 0x40102800, + 0x801021c0, 0x05000016, 0x41300000, 0x80100580, + 0x05000011, 0x5810000a, 0x81340580, 0x0502000b, + 0x40101800, 0x58102001, 0x41300000, 0x801021c0, + 0x0500000b, 0x80100d80, 0x05000007, 0x40101800, + 0x58102001, 0x05fdf7fa, 0x40102800, 0x58102000, + 0x05fdf7ec, 0x0501f879, 0x0501f00d, 0x417a3000, + 0x0505f95e, 0x59900005, 0x81300580, 0x05000005, + 0x811a3000, 0x91180485, 0x05021010, 0x05fdf7f9, + 0x0501fe4b, 0x0501fbe4, 0x0501fbe9, 0x5c01b000, + 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, + 0x5c023000, 0x5c026800, 0x5c03e000, 0x05000bfb, + 0x80000580, 0x1c01f000, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c023000, - 0x5c026800, 0x5c03e000, 0x05000bf6, 0x80000580, - 0x1c01f000, 0x5c01b000, 0x5c022800, 0x5c034800, - 0x5c03a000, 0x5c032000, 0x5c023000, 0x5c026800, - 0x5c03e000, 0x05000beb, 0x90000541, 0x1c01f000, - 0x0501fbf7, 0x4df00000, 0x4d300000, 0x4d340000, - 0x4d180000, 0x4d2c0000, 0x4c5c0000, 0x4d900000, - 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x58d6602f, 0x813261c0, 0x05000021, 0x41302800, - 0x5930b800, 0x5932680a, 0x59340403, 0x81440580, - 0x05000006, 0x805cb9c0, 0x05000019, 0x41302800, - 0x405e6000, 0x05fdf7f7, 0x5930001d, 0x81240580, - 0x05fe07f9, 0x5930b801, 0x4c0c0000, 0x4c140000, - 0x0509f8ca, 0x5c002800, 0x5c001800, 0x05000008, - 0x0501f831, 0x4c0c0000, 0x4c140000, 0x0501fa5d, - 0x5c002800, 0x5c001800, 0x0501f002, 0x41301800, - 0x405e6000, 0x813261c0, 0x05fe07ec, 0x417a3000, - 0x0505f908, 0x59926005, 0x813261c0, 0x05000005, - 0x5932680a, 0x59340403, 0x81440580, 0x05000005, - 0x811a3000, 0x91180485, 0x05fc17f6, 0x0501f00d, - 0x5930001d, 0x81240580, 0x05fe07fa, 0x4c140000, - 0x0509f8aa, 0x5c002800, 0x05fc07f6, 0x0501fdea, - 0x0501fb83, 0x0501fb88, 0x0501fa3e, 0x05fdf7f1, - 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, - 0x5c032000, 0x5c00b800, 0x5c025800, 0x5c023000, - 0x5c026800, 0x5c026000, 0x5c03e000, 0x05000b95, - 0x1c01f000, 0x0501fb78, 0x58d4002f, 0x81300580, - 0x0502001c, 0x59300801, 0x800409c0, 0x0500000e, - 0x59300000, 0x800001c0, 0x05020005, 0x4805a82f, - 0x4805a82e, 0x497a6001, 0x1c01f000, 0x59300000, - 0x48000800, 0x4805a82f, 0x497a6000, 0x497a6001, - 0x1c01f000, 0x59300800, 0x800409c0, 0x05020005, - 0x4979a82f, 0x4979a82e, 0x497a680c, 0x1c01f000, - 0x4805a82f, 0x497a6000, 0x497a680c, 0x1c01f000, - 0x58d4002e, 0x81300580, 0x0502000c, 0x59300001, - 0x800001c0, 0x05020005, 0x4815a82e, 0x49782800, - 0x497a680c, 0x1c01f000, 0x4801a82e, 0x48002800, - 0x497a6001, 0x1c01f000, 0x59300000, 0x800001c0, - 0x05020008, 0x59300001, 0x48001801, 0x800001c0, - 0x05020002, 0x480e680c, 0x497a6001, 0x1c01f000, - 0x59300801, 0x800409c0, 0x05020006, 0x59300800, - 0x48042800, 0x497a6000, 0x497a680c, 0x1c01f000, - 0x59300000, 0x48000800, 0x48042800, 0x497a6000, - 0x497a6001, 0x1c01f000, 0x0501fb5d, 0x4df00000, - 0x0501f828, 0x050208ec, 0x05020960, 0x05020005, - 0x5c03e000, 0x05000b47, 0x80000580, 0x1c01f000, - 0x5c03e000, 0x05000b43, 0x90000541, 0x1c01f000, - 0x4d2c0000, 0x4d340000, 0x4d300000, 0x4c5c0000, - 0x4178b800, 0x598e6007, 0x813261c0, 0x0500000e, - 0x0509f83a, 0x05000009, 0x59300000, 0x4c000000, - 0x0501fa46, 0x405c3000, 0x0501f851, 0x0501f9cd, - 0x5c026000, 0x05fdf7f5, 0x4130b800, 0x59326000, - 0x05fdf7f2, 0x0509f8d3, 0x0509f8ee, 0x5c00b800, - 0x5c026000, 0x5c026800, 0x5c025800, 0x1c01f000, - 0x4933c857, 0x4c5c0000, 0x813261c0, 0x05c00bf7, - 0x41300000, 0x598cb807, 0x41783000, 0x805cb9c0, - 0x05000011, 0x805c0d80, 0x05000004, 0x405c3000, - 0x5818b800, 0x05fdf7fa, 0x0501f835, 0x598c000b, - 0x81300580, 0x0504084b, 0x59300403, 0xb0000582, - 0x05020002, 0x497a6008, 0x80000580, 0x5c00b800, - 0x1c01f000, 0x90000541, 0x5c00b800, 0x1c01f000, - 0x0501fb17, 0x4df00000, 0x4d2c0000, 0x4d340000, - 0x4d300000, 0x4c5c0000, 0x4178b800, 0x598e6007, - 0x813261c0, 0x05000015, 0x5932680a, 0x59340403, - 0x81440580, 0x0502000e, 0x5930001d, 0x81240580, - 0x0502000b, 0x0505fff9, 0x05000009, 0x59300000, - 0x4c000000, 0x0501fa05, 0x405c3000, 0x0501f810, - 0x0501f98c, 0x5c026000, 0x05fdf7ee, 0x4130b800, - 0x59326000, 0x05fdf7eb, 0x0509f846, 0x0509f8ad, + 0x5c026800, 0x5c03e000, 0x05000bf0, 0x90000541, + 0x1c01f000, 0x0501fbfc, 0x4df00000, 0x4d300000, + 0x4d340000, 0x4d180000, 0x4d2c0000, 0x4c5c0000, + 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, + 0x4cd80000, 0x58d6602f, 0x813261c0, 0x05000021, + 0x41302800, 0x5930b800, 0x5932680a, 0x59340403, + 0x81440580, 0x05000006, 0x805cb9c0, 0x05000019, + 0x41302800, 0x405e6000, 0x05fdf7f7, 0x5930001d, + 0x81240580, 0x05fe07f9, 0x5930b801, 0x4c0c0000, + 0x4c140000, 0x0509f901, 0x5c002800, 0x5c001800, + 0x05000008, 0x0501f831, 0x4c0c0000, 0x4c140000, + 0x0501fa63, 0x5c002800, 0x5c001800, 0x0501f002, + 0x41301800, 0x405e6000, 0x813261c0, 0x05fe07ec, + 0x417a3000, 0x0505f90d, 0x59926005, 0x813261c0, + 0x05000005, 0x5932680a, 0x59340403, 0x81440580, + 0x05000005, 0x811a3000, 0x91180485, 0x05fc17f6, + 0x0501f00d, 0x5930001d, 0x81240580, 0x05fe07fa, + 0x4c140000, 0x0509f8e1, 0x5c002800, 0x05fc07f6, + 0x0501fdef, 0x0501fb88, 0x0501fb8d, 0x0501fa44, + 0x05fdf7f1, 0x5c01b000, 0x5c022800, 0x5c034800, + 0x5c03a000, 0x5c032000, 0x5c00b800, 0x5c025800, + 0x5c023000, 0x5c026800, 0x5c026000, 0x5c03e000, + 0x05000b9a, 0x1c01f000, 0x0501fb7d, 0x58d4002f, + 0x81300580, 0x0502001c, 0x59300801, 0x800409c0, + 0x0500000e, 0x59300000, 0x800001c0, 0x05020005, + 0x4805a82f, 0x4805a82e, 0x497a6001, 0x1c01f000, + 0x59300000, 0x48000800, 0x4805a82f, 0x497a6000, + 0x497a6001, 0x1c01f000, 0x59300800, 0x800409c0, + 0x05020005, 0x4979a82f, 0x4979a82e, 0x497a680c, + 0x1c01f000, 0x4805a82f, 0x497a6000, 0x497a680c, + 0x1c01f000, 0x58d4002e, 0x81300580, 0x0502000c, + 0x59300001, 0x800001c0, 0x05020005, 0x4815a82e, + 0x49782800, 0x497a680c, 0x1c01f000, 0x4801a82e, + 0x48002800, 0x497a6001, 0x1c01f000, 0x59300000, + 0x800001c0, 0x05020008, 0x59300001, 0x48001801, + 0x800001c0, 0x05020002, 0x480e680c, 0x497a6001, + 0x1c01f000, 0x59300801, 0x800409c0, 0x05020006, + 0x59300800, 0x48042800, 0x497a6000, 0x497a680c, + 0x1c01f000, 0x59300000, 0x48000800, 0x48042800, + 0x497a6000, 0x497a6001, 0x1c01f000, 0x0501fb62, + 0x4df00000, 0x0501f828, 0x050208ec, 0x05020966, + 0x05020005, 0x5c03e000, 0x05000b4c, 0x80000580, + 0x1c01f000, 0x5c03e000, 0x05000b48, 0x90000541, + 0x1c01f000, 0x4d2c0000, 0x4d340000, 0x4d300000, + 0x4c5c0000, 0x4178b800, 0x598e6007, 0x813261c0, + 0x0500000e, 0x0509f871, 0x05000009, 0x59300000, + 0x4c000000, 0x0501fa4a, 0x405c3000, 0x0501f851, + 0x0501f9d3, 0x5c026000, 0x05fdf7f5, 0x4130b800, + 0x59326000, 0x05fdf7f2, 0x0509f90a, 0x0509f929, 0x5c00b800, 0x5c026000, 0x5c026800, 0x5c025800, - 0x5c03e000, 0x05000ae3, 0x1c01f000, 0x59300800, - 0x497a6000, 0x0501fac4, 0x801831c0, 0x05020009, - 0x598c0006, 0x81300580, 0x05020004, 0x48031806, - 0x48031807, 0x0501f008, 0x48071807, 0x0501f006, - 0x48043000, 0x598c0006, 0x81300580, 0x05020002, - 0x481b1806, 0x0501f2c8, 0x4d300000, 0x598e6005, - 0x813261c0, 0x05000008, 0x59300000, 0x4c000000, - 0x0501f9da, 0x0005ffdc, 0x0501fabf, 0x5c026000, - 0x05fdf7f8, 0x497b1805, 0x497b1804, 0x5c026000, - 0x1c01f000, 0x0501face, 0x4df00000, 0x4d300000, - 0x4c5c0000, 0x4c600000, 0x4130c000, 0x4178b800, - 0x598e6005, 0x813261c0, 0x05000036, 0x5930080a, - 0x800409c0, 0x0502000d, 0x4d340000, 0x0001fb00, - 0x41340800, 0x5c026800, 0x0502002b, 0x58040802, - 0x59300019, 0x80040580, 0x82000500, 0x00ffffff, - 0x05000005, 0x0501f024, 0x58040403, 0x81440580, - 0x05020021, 0x5930501a, 0x59340013, 0x82000500, - 0x00ffffff, 0x80280580, 0x0502001b, 0x5930002a, - 0x80600580, 0x05000018, 0x0501f9ac, 0x59302000, - 0x497a6000, 0x805cb9c0, 0x05020009, 0x598c0004, - 0x81300580, 0x05020004, 0x497b1805, 0x497b1804, - 0x0501f008, 0x48131805, 0x0501f006, 0x4810b800, - 0x598c0004, 0x81300580, 0x05020002, 0x485f1804, - 0x4c100000, 0x0005ffdc, 0x0501fa7f, 0x5c026000, - 0x05fdf7cd, 0x4130b800, 0x59326000, 0x05fdf7ca, - 0x5c00c000, 0x5c00b800, 0x5c026000, 0x5c03e000, - 0x05000a7c, 0x1c01f000, 0x4d2c0000, 0x4d300000, - 0x4d340000, 0x4c5c0000, 0x4178b800, 0x598e6009, - 0x813261c0, 0x0500000e, 0x0505ff74, 0x05000009, - 0x0501f982, 0x59300000, 0x4c000000, 0x405c3000, - 0x0501f855, 0x0501f907, 0x5c026000, 0x05fdf7f5, - 0x4130b800, 0x59326000, 0x05fdf7f2, 0x05e9fc6d, - 0x5c00b800, 0x5c026800, 0x5c026000, 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c5c0000, 0x813261c0, - 0x05c00b32, 0x41300000, 0x598cb809, 0x41783000, - 0x805cb9c0, 0x0500000e, 0x805c0d80, 0x05000004, - 0x405c3000, 0x5818b800, 0x05fdf7fa, 0x0501f83a, - 0x598c000b, 0x81300580, 0x05000f86, 0x497a6008, - 0x80000580, 0x5c00b800, 0x1c01f000, 0x90000541, - 0x5c00b800, 0x1c01f000, 0x0501fa55, 0x4df00000, - 0x4d340000, 0x4d300000, 0x4d2c0000, 0x4c5c0000, - 0x83440480, 0x000007f0, 0x05021020, 0x0001fb00, - 0x05c20b12, 0x4178b800, 0x598e6009, 0x813261c0, - 0x05000014, 0x5930000a, 0x81340580, 0x0502000e, - 0x5930001d, 0x81240580, 0x0502000b, 0x0505ff33, - 0x05000009, 0x0501f941, 0x59300000, 0x4c000000, - 0x405c3000, 0x0501f814, 0x0501f8c6, 0x5c026000, - 0x05fdf7ef, 0x4130b800, 0x59326000, 0x05fdf7ec, - 0x8d3c0506, 0x05000004, 0x59340200, 0x8c00050e, - 0x05020002, 0x05e9fc46, 0x5c00b800, 0x5c025800, - 0x5c026000, 0x5c026800, 0x5c03e000, 0x05000a19, - 0x1c01f000, 0x59300800, 0x497a6000, 0x0501f9fa, - 0x801831c0, 0x05020009, 0x598c0008, 0x81300580, - 0x05020004, 0x48031808, 0x48031809, 0x0501f008, - 0x48071809, 0x0501f006, 0x48043000, 0x598c0008, - 0x81300580, 0x05020002, 0x481b1808, 0x0501f1fe, - 0x0501fa13, 0x4df00000, 0x4d300000, 0x4c5c0000, - 0x4178b800, 0x598e6003, 0x813261c0, 0x0500000e, - 0x0505fefe, 0x05000009, 0x0501f90c, 0x59300000, - 0x4c000000, 0x405c3000, 0x0501f86c, 0x0501f891, - 0x5c026000, 0x05fdf7f5, 0x4130b800, 0x59326000, - 0x05fdf7f2, 0x5c00b800, 0x5c026000, 0x5c03e000, - 0x050009ec, 0x1c01f000, 0x4933c857, 0x4c5c0000, - 0x4c600000, 0x813261c0, 0x05c00abc, 0x41300000, - 0x598cb803, 0x405cc000, 0x805cb9c0, 0x05000024, - 0x805c0d80, 0x05000004, 0x405cc000, 0x5860b800, - 0x05fdf7fa, 0x598c000b, 0x81300580, 0x05000f11, - 0x0501f9bd, 0x598c0003, 0x805c0580, 0x05020009, - 0x585c0000, 0x48031803, 0x4978b800, 0x598c0002, - 0x805c0580, 0x0502000d, 0x497b1802, 0x0501f00b, - 0x598c0002, 0x805c0580, 0x05020005, 0x48631802, - 0x4978b800, 0x4978c000, 0x0501f004, 0x585c0000, - 0x4800c000, 0x4978b800, 0x0501f9bb, 0x80000580, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x90000541, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4933c857, - 0x0501f9c7, 0x4df00000, 0x4d2c0000, 0x4d340000, - 0x4d300000, 0x4c5c0000, 0x4178b800, 0x598e6003, - 0x813261c0, 0x0500001e, 0x5932680a, 0x59340403, - 0x81440580, 0x05020017, 0x812649c0, 0x05000004, - 0x5930001d, 0x81240580, 0x05020012, 0x0505fea7, - 0x05000010, 0x0515f968, 0x05000006, 0x0515ffea, - 0x05020004, 0x59300403, 0xb0000583, 0x05140feb, - 0x0501f8ae, 0x59300000, 0x4c000000, 0x405c3000, - 0x0501f80e, 0x0501f833, 0x5c026000, 0x05fdf7e5, - 0x4130b800, 0x59326000, 0x05fdf7e2, 0x5c00b800, - 0x5c026000, 0x5c026800, 0x5c025800, 0x5c03e000, - 0x0500098c, 0x1c01f000, 0x59300800, 0x497a6000, - 0x0501f96d, 0x801831c0, 0x05020009, 0x598c0002, - 0x81300580, 0x05020004, 0x48031802, 0x48031803, - 0x0501f008, 0x48071803, 0x0501f006, 0x48043000, - 0x598c0002, 0x81300580, 0x05020002, 0x481b1802, - 0x0501f171, 0x4943c857, 0x0501f985, 0x4df00000, - 0x05fdfe34, 0x05fdfef9, 0x5c03e000, 0x05000971, - 0x1c01f000, 0x4947c857, 0x0501f97d, 0x4df00000, - 0x4d3c0000, 0x853e7d00, 0x05fdfe62, 0x05fdff23, - 0x5c027800, 0x5c03e000, 0x05000966, 0x1c01f000, - 0x5c000000, 0x4c000000, 0x4803c857, 0x4d340000, - 0x4d2c0000, 0x5932680a, 0x59325809, 0x59300407, - 0x90000c92, 0x05c21a31, 0x4933c857, 0x4943c857, - 0x493fc857, 0x4803c857, 0x0c01f804, 0x5c025800, - 0x5c026800, 0x1c01f000, 0x001083c4, 0x001083c5, - 0x001083cb, 0x001083ed, 0x001083c5, 0x001083d3, - 0x00108401, 0x001083c4, 0x001083c4, 0x001083c4, - 0x00108408, 0x001083c4, 0x001083c4, 0x001083c4, - 0x001083c4, 0x001083c4, 0x0010840e, 0x0010840e, - 0x05c1fa16, 0x0525fa91, 0x0515f9f5, 0x05cc0fac, - 0x0515fcbd, 0x0509fefa, 0x0509f006, 0x0515f8fe, - 0x05000006, 0x49425a0a, 0x0001fb82, 0x59300229, - 0x90000583, 0x051409d7, 0x0505f7fe, 0x83300580, - 0x00111a40, 0x05020015, 0x0515f8f3, 0x05000010, - 0x59a8009d, 0x812c0580, 0x05c20a00, 0x592c0000, - 0x4803509d, 0x800001c0, 0x05020002, 0x4803509e, - 0x592c1208, 0xb0080595, 0x05020003, 0x05c1fdaf, - 0x0501f003, 0x49425a0a, 0x0001fb82, 0x64026203, - 0x497a6009, 0x1c01f000, 0x0515f8df, 0x050407e5, - 0x05c1f9ee, 0x59300008, 0x8c000500, 0x05c60c5a, - 0x0515f8d9, 0x0500000f, 0x592c0208, 0x82000500, - 0x000000ff, 0x90000594, 0x051609b2, 0x0519faba, - 0x05f5f810, 0x4a025a08, 0x00000103, 0x49425a0a, - 0x497a580d, 0x0515fa27, 0x0521ff33, 0x0001fb82, - 0x0505f7d0, 0x59300008, 0x8c000500, 0x05c60c46, - 0x0515f8c5, 0x05220b81, 0x0519faab, 0x0505f7c9, - 0x0515f8c1, 0x05000004, 0x49425a0a, 0x497a5c0d, - 0x0001fb82, 0x0505f7c3, 0x05c9fafb, 0x0515f8ba, - 0x05000003, 0x49425a0a, 0x0001fb82, 0x59325819, - 0x05c1fd87, 0x0505f7bb, 0x598c000b, 0x81300580, - 0x05000003, 0x497a6008, 0x1c01f000, 0x59c40004, - 0x9000050c, 0x05000005, 0x64338804, 0x4a01a8e5, - 0x00000800, 0x0501f008, 0x0501fb80, 0x59300403, - 0xb0000d80, 0x05000003, 0xb0000582, 0x05020002, - 0x497a6008, 0x0501fe13, 0x80000580, 0x1c01f000, - 0x59300804, 0x8c040520, 0x05020003, 0x90000541, - 0x1c01f000, 0x4933c857, 0x59300804, 0x84040d20, - 0x48066004, 0x640a6203, 0x80000580, 0x1c01f000, - 0x4933c857, 0x4d380000, 0x59300804, 0x84040d20, - 0x48066004, 0x61267000, 0x59300203, 0x90000583, - 0x05000002, 0x604e7000, 0x0009f800, 0x80000580, - 0x5c027000, 0x1c01f000, 0x59300019, 0x81480580, - 0x05020003, 0x5930001a, 0x814c0580, 0x1c01f000, - 0x4d2c0000, 0x4d300000, 0x0501f8c5, 0x4df00000, - 0x05f9fb8b, 0x59900002, 0x90000503, 0x0c01f001, - 0x00108464, 0x00108459, 0x00108458, 0x00108458, - 0x05c1f982, 0x59926005, 0x0501f889, 0x813261c0, - 0x05000008, 0x59300004, 0x8c000516, 0x05000004, - 0x59325809, 0x497a580c, 0x497a580d, 0x0501f886, - 0x5c03e000, 0x0500089f, 0x5c026000, 0x5c025800, - 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, - 0x4d300000, 0x4a01a8e5, 0x00000800, 0x0501f8a4, - 0x4df00000, 0x598c0000, 0x90000507, 0x4803c857, - 0x0c01f001, 0x0010849b, 0x0010847e, 0x00108485, - 0x00108488, 0x00108494, 0x0010849b, 0x00108498, - 0x0010847d, 0x05c1f95d, 0x598c000b, 0x80026540, - 0x05000003, 0x0501f81e, 0x05c20958, 0x0501fdb9, - 0x0501f017, 0x0501f829, 0x0501fdb6, 0x0501f014, - 0x598c000b, 0x80026540, 0x05000011, 0x0501f83a, - 0x05000006, 0x0501f847, 0x05000004, 0x0501f810, - 0x05000002, 0x0501f81d, 0x0501fdaa, 0x0501f008, - 0x0501f840, 0x05c20945, 0x0501fda6, 0x0501f004, - 0x0501f82d, 0x05c20941, 0x0501fda2, 0x5c03e000, - 0x05000868, 0x5c026000, 0x1c01f000, 0x598c0007, - 0x81300580, 0x0502000c, 0x0501f85b, 0x0501f846, - 0x59300000, 0x800001c0, 0x05000004, 0x48031807, - 0x497a6000, 0x0501f003, 0x497b1807, 0x497b1806, - 0x80000580, 0x1c01f000, 0x4d2c0000, 0x59300407, - 0x90000583, 0x05020012, 0x598c0009, 0x81300580, - 0x0502000f, 0x0501f848, 0x59325809, 0x497a580c, - 0x497a580d, 0x0501f830, 0x59300000, 0x800001c0, - 0x05000004, 0x48031809, 0x497a6000, 0x0501f003, - 0x497b1808, 0x497b1809, 0x80000580, 0x5c025800, - 0x1c01f000, 0x598c0005, 0x81300580, 0x0502000c, - 0x0501f835, 0x0501f820, 0x59300000, 0x800001c0, - 0x05000004, 0x48031805, 0x497a6000, 0x0501f003, - 0x497b1805, 0x497b1804, 0x80000580, 0x1c01f000, - 0x598c0003, 0x81300580, 0x0502000c, 0x0501f826, - 0x0501f811, 0x59300000, 0x800001c0, 0x05000004, - 0x48031803, 0x497a6000, 0x0501f003, 0x497b1803, - 0x497b1802, 0x80000580, 0x1c01f000, 0x64032002, - 0x497b2005, 0x497b2006, 0x497b2007, 0x4979b003, - 0x1c01f000, 0x4c040000, 0x59300004, 0x8c000516, - 0x05020003, 0x82000500, 0xffd7ffff, 0x82000500, - 0x7ffef7ff, 0x48026004, 0x58d400e4, 0x8c000514, - 0x05000007, 0x58d40011, 0x81300580, 0x05020004, - 0x4979a811, 0x4a01a8e4, 0x00000800, 0x5c000800, - 0x1c01f000, 0x4803c856, 0x598c000a, 0x80000540, - 0x05000003, 0x80000040, 0x4803180a, 0x1c01f000, - 0x58d400ea, 0x90000507, 0x90000583, 0x05020003, - 0x4803c856, 0x6405a8e8, 0x59bc00ea, 0x90000507, - 0x90000583, 0x05020005, 0x4803c856, 0x640778e8, - 0x4a0370e4, 0x00000800, 0x1c01f000, 0x60042800, - 0x58d400ea, 0x90000507, 0x90000581, 0x0502000d, - 0x4803c856, 0x60000800, 0x0501f830, 0x60000820, + 0x05bc0f79, 0x41300000, 0x598cb807, 0x41783000, + 0x805cb9c0, 0x05000011, 0x805c0d80, 0x05000004, + 0x405c3000, 0x5818b800, 0x05fdf7fa, 0x0501f835, + 0x598c000b, 0x81300580, 0x05040850, 0x59300403, + 0xb0000582, 0x05020002, 0x497a6008, 0x80000580, + 0x5c00b800, 0x1c01f000, 0x90000541, 0x5c00b800, + 0x1c01f000, 0x0501fb1c, 0x4df00000, 0x4d2c0000, + 0x4d340000, 0x4d300000, 0x4c5c0000, 0x4178b800, + 0x598e6007, 0x813261c0, 0x05000015, 0x5932680a, + 0x59340403, 0x81440580, 0x0502000e, 0x5930001d, + 0x81240580, 0x0502000b, 0x0509f830, 0x05000009, + 0x59300000, 0x4c000000, 0x0501fa09, 0x405c3000, + 0x0501f810, 0x0501f992, 0x5c026000, 0x05fdf7ee, + 0x4130b800, 0x59326000, 0x05fdf7eb, 0x0509f87d, + 0x0509f8e8, 0x5c00b800, 0x5c026000, 0x5c026800, + 0x5c025800, 0x5c03e000, 0x05000ae8, 0x1c01f000, + 0x59300800, 0x497a6000, 0x0501fac9, 0x801831c0, + 0x05020009, 0x598c0006, 0x81300580, 0x05020004, + 0x48031806, 0x48031807, 0x0501f008, 0x48071807, + 0x0501f006, 0x48043000, 0x598c0006, 0x81300580, + 0x05020002, 0x481b1806, 0x0501f2cd, 0x4d300000, + 0x598e6005, 0x813261c0, 0x05000008, 0x59300000, + 0x4c000000, 0x0501f9de, 0x0009f810, 0x0501fac4, + 0x5c026000, 0x05fdf7f8, 0x497b1805, 0x497b1804, + 0x5c026000, 0x1c01f000, 0x0501fad3, 0x4df00000, + 0x4d300000, 0x4c5c0000, 0x4c600000, 0x4130c000, + 0x4178b800, 0x598e6005, 0x813261c0, 0x05000036, + 0x5930080a, 0x800409c0, 0x0502000d, 0x4d340000, + 0x0001fb08, 0x41340800, 0x5c026800, 0x0502002b, + 0x58040802, 0x59300019, 0x80040580, 0x82000500, + 0x00ffffff, 0x05000005, 0x0501f024, 0x58040403, + 0x81440580, 0x05020021, 0x5930501a, 0x59340013, + 0x82000500, 0x00ffffff, 0x80280580, 0x0502001b, + 0x5930002a, 0x80600580, 0x05000018, 0x0501f9b0, + 0x59302000, 0x497a6000, 0x805cb9c0, 0x05020009, + 0x598c0004, 0x81300580, 0x05020004, 0x497b1805, + 0x497b1804, 0x0501f008, 0x48131805, 0x0501f006, + 0x4810b800, 0x598c0004, 0x81300580, 0x05020002, + 0x485f1804, 0x4c100000, 0x0009f810, 0x0501fa84, + 0x5c026000, 0x05fdf7cd, 0x4130b800, 0x59326000, + 0x05fdf7ca, 0x5c00c000, 0x5c00b800, 0x5c026000, + 0x5c03e000, 0x05000a81, 0x1c01f000, 0x4d2c0000, + 0x4d300000, 0x4d340000, 0x4c5c0000, 0x4178b800, + 0x598e6009, 0x813261c0, 0x0500000e, 0x0505ffab, + 0x05000009, 0x0501f986, 0x59300000, 0x4c000000, + 0x405c3000, 0x0501f85b, 0x0501f90d, 0x5c026000, + 0x05fdf7f5, 0x4130b800, 0x59326000, 0x05fdf7f2, + 0x05e9fa1a, 0x5c00b800, 0x5c026800, 0x5c026000, + 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c5c0000, + 0x813261c0, 0x05bc0eb4, 0x41300000, 0x598cb809, + 0x41783000, 0x805cb9c0, 0x0500000e, 0x805c0d80, + 0x05000004, 0x405c3000, 0x5818b800, 0x05fdf7fa, + 0x0501f840, 0x598c000b, 0x81300580, 0x05000f8b, + 0x497a6008, 0x80000580, 0x5c00b800, 0x1c01f000, + 0x90000541, 0x5c00b800, 0x1c01f000, 0x0501fa5a, + 0x4df00000, 0x4d340000, 0x4d300000, 0x4d2c0000, + 0x4c5c0000, 0x83440480, 0x000007f0, 0x05001004, + 0x83440480, 0x00000800, 0x05001023, 0x83440580, + 0x0000ffff, 0x05000020, 0x0001fb08, 0x05be0e8e, + 0x4178b800, 0x598e6009, 0x813261c0, 0x05000014, + 0x5930000a, 0x81340580, 0x0502000e, 0x5930001d, + 0x81240580, 0x0502000b, 0x0505ff64, 0x05000009, + 0x0501f93f, 0x59300000, 0x4c000000, 0x405c3000, + 0x0501f814, 0x0501f8c6, 0x5c026000, 0x05fdf7ef, + 0x4130b800, 0x59326000, 0x05fdf7ec, 0x8d3c0506, + 0x05000004, 0x59340200, 0x8c00050e, 0x05020002, + 0x05e9f9f1, 0x5c00b800, 0x5c025800, 0x5c026000, + 0x5c026800, 0x5c03e000, 0x05000a18, 0x1c01f000, + 0x59300800, 0x497a6000, 0x0501f9f9, 0x801831c0, + 0x05020009, 0x598c0008, 0x81300580, 0x05020004, + 0x48031808, 0x48031809, 0x0501f008, 0x48071809, + 0x0501f006, 0x48043000, 0x598c0008, 0x81300580, + 0x05020002, 0x481b1808, 0x0501f1fd, 0x0501fa12, + 0x4df00000, 0x4d300000, 0x4c5c0000, 0x4178b800, + 0x598e6003, 0x813261c0, 0x0500000e, 0x0505ff2f, + 0x05000009, 0x0501f90a, 0x59300000, 0x4c000000, + 0x405c3000, 0x0501f86c, 0x0501f891, 0x5c026000, + 0x05fdf7f5, 0x4130b800, 0x59326000, 0x05fdf7f2, + 0x5c00b800, 0x5c026000, 0x5c03e000, 0x050009eb, + 0x1c01f000, 0x4933c857, 0x4c5c0000, 0x4c600000, + 0x813261c0, 0x05bc0e38, 0x41300000, 0x598cb803, + 0x405cc000, 0x805cb9c0, 0x05000024, 0x805c0d80, + 0x05000004, 0x405cc000, 0x5860b800, 0x05fdf7fa, + 0x598c000b, 0x81300580, 0x05000f10, 0x0501f9bc, + 0x598c0003, 0x805c0580, 0x05020009, 0x585c0000, + 0x48031803, 0x4978b800, 0x598c0002, 0x805c0580, + 0x0502000d, 0x497b1802, 0x0501f00b, 0x598c0002, + 0x805c0580, 0x05020005, 0x48631802, 0x4978b800, + 0x4978c000, 0x0501f004, 0x585c0000, 0x4800c000, + 0x4978b800, 0x0501f9ba, 0x80000580, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x90000541, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x4933c857, 0x0501f9c6, + 0x4df00000, 0x4d2c0000, 0x4d340000, 0x4d300000, + 0x4c5c0000, 0x4178b800, 0x598e6003, 0x813261c0, + 0x0500001e, 0x5932680a, 0x59340403, 0x81440580, + 0x05020017, 0x812649c0, 0x05000004, 0x5930001d, + 0x81240580, 0x05020012, 0x0505fed8, 0x05000010, + 0x0515fa32, 0x05000006, 0x0519f8d1, 0x05020004, + 0x59300403, 0xb0000583, 0x051808d2, 0x0501f8ac, + 0x59300000, 0x4c000000, 0x405c3000, 0x0501f80e, + 0x0501f833, 0x5c026000, 0x05fdf7e5, 0x4130b800, + 0x59326000, 0x05fdf7e2, 0x5c00b800, 0x5c026000, + 0x5c026800, 0x5c025800, 0x5c03e000, 0x0500098b, + 0x1c01f000, 0x59300800, 0x497a6000, 0x0501f96c, + 0x801831c0, 0x05020009, 0x598c0002, 0x81300580, + 0x05020004, 0x48031802, 0x48031803, 0x0501f008, + 0x48071803, 0x0501f006, 0x48043000, 0x598c0002, + 0x81300580, 0x05020002, 0x481b1802, 0x0501f170, + 0x4943c857, 0x0501f984, 0x4df00000, 0x05fdfe2e, + 0x05fdfef3, 0x5c03e000, 0x05000970, 0x1c01f000, + 0x4947c857, 0x0501f97c, 0x4df00000, 0x4d3c0000, + 0x853e7d00, 0x05fdfe5c, 0x05fdff1d, 0x5c027800, + 0x5c03e000, 0x05000965, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4d340000, 0x4d2c0000, + 0x5932680a, 0x59325809, 0x59300407, 0x90000c92, + 0x05be1dad, 0x4933c857, 0x4943c857, 0x493fc857, + 0x4803c857, 0x0c01f804, 0x5c025800, 0x5c026800, + 0x1c01f000, 0x00108883, 0x00108884, 0x0010888a, + 0x001088ac, 0x00108884, 0x00108892, 0x001088c0, + 0x00108883, 0x00108883, 0x00108883, 0x001088c7, + 0x00108883, 0x00108883, 0x00108883, 0x00108883, + 0x00108883, 0x001088cd, 0x001088cd, 0x05bdfd92, + 0x0525fd39, 0x0515facf, 0x05cc0b84, 0x0515fd96, + 0x0509ff75, 0x0509f05c, 0x0515f9c8, 0x05000006, + 0x49425a0a, 0x0001fba8, 0x59300229, 0x90000583, + 0x05140ab1, 0x0509f054, 0x83300580, 0x001159e4, + 0x05020015, 0x0515f9bd, 0x05000010, 0x59a800a0, + 0x812c0580, 0x05be0d7c, 0x592c0000, 0x480350a0, + 0x800001c0, 0x05020002, 0x480350a1, 0x592c1208, + 0xb0080595, 0x05020003, 0x05c1f927, 0x0501f003, + 0x49425a0a, 0x0001fba8, 0x64026203, 0x497a6009, + 0x1c01f000, 0x0515f9a9, 0x0508003b, 0x05bdfd6a, + 0x59300008, 0x8c000500, 0x05c60839, 0x0515f9a3, + 0x0500000f, 0x592c0208, 0x82000500, 0x000000ff, + 0x90000594, 0x05160a8c, 0x0519fba1, 0x05f1fed9, + 0x4a025a08, 0x00000103, 0x49425a0a, 0x497a580d, + 0x0515fb01, 0x0525f9be, 0x0001fba8, 0x0509f026, + 0x59300008, 0x8c000500, 0x05c60825, 0x0515f98f, + 0x05220e07, 0x0519fb92, 0x0509f01f, 0x0515f98b, + 0x05000004, 0x49425a0a, 0x497a5c0d, 0x0001fba8, + 0x0509f019, 0x05c5fead, 0x0515f984, 0x05080016, + 0x49425a0a, 0x0001fba8, 0x0509f013, 0x598c000b, + 0x81300580, 0x05000003, 0x497a6008, 0x1c01f000, + 0x59c40004, 0x9000050c, 0x05000005, 0x64338804, + 0x4a01a8e5, 0x00000800, 0x0501f008, 0x0501fb81, + 0x59300403, 0xb0000d80, 0x05000003, 0xb0000582, + 0x05020002, 0x497a6008, 0x0501fe14, 0x80000580, + 0x1c01f000, 0x59300804, 0x4807c857, 0x8c040520, + 0x05020003, 0x90000541, 0x1c01f000, 0x4933c857, + 0x59300804, 0x84040d20, 0x48066004, 0x640a6203, + 0x80000580, 0x1c01f000, 0x4933c857, 0x4d380000, + 0x59300804, 0x84040d20, 0x48066004, 0x61267000, + 0x59300203, 0x90000583, 0x05000002, 0x604e7000, + 0x0009f839, 0x80000580, 0x5c027000, 0x1c01f000, + 0x59300019, 0x81480580, 0x05020003, 0x5930001a, + 0x814c0580, 0x1c01f000, 0x4d2c0000, 0x4d300000, + 0x0501f8c5, 0x4df00000, 0x05f9fb31, 0x59900002, + 0x90000503, 0x0c01f001, 0x00108922, 0x00108917, + 0x00108916, 0x00108916, 0x05bdfcff, 0x59926005, + 0x0501f889, 0x813261c0, 0x05000008, 0x59300004, + 0x8c000516, 0x05000004, 0x59325809, 0x497a580c, + 0x497a580d, 0x0501f886, 0x5c03e000, 0x0500089f, + 0x5c026000, 0x5c025800, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4d300000, 0x4a01a8e5, + 0x00000800, 0x0501f8a4, 0x4df00000, 0x598c0000, + 0x90000507, 0x4803c857, 0x0c01f001, 0x00108959, + 0x0010893c, 0x00108943, 0x00108946, 0x00108952, + 0x00108959, 0x00108956, 0x0010893b, 0x05bdfcda, + 0x598c000b, 0x80026540, 0x05000003, 0x0501f81e, + 0x05be0cd5, 0x0501fdb9, 0x0501f017, 0x0501f829, + 0x0501fdb6, 0x0501f014, 0x598c000b, 0x80026540, + 0x05000011, 0x0501f83a, 0x05000006, 0x0501f847, + 0x05000004, 0x0501f810, 0x05000002, 0x0501f81d, + 0x0501fdaa, 0x0501f008, 0x0501f840, 0x05be0cc2, + 0x0501fda6, 0x0501f004, 0x0501f82d, 0x05be0cbe, + 0x0501fda2, 0x5c03e000, 0x05000868, 0x5c026000, + 0x1c01f000, 0x598c0007, 0x81300580, 0x0502000c, + 0x0501f85b, 0x0501f846, 0x59300000, 0x800001c0, + 0x05000004, 0x48031807, 0x497a6000, 0x0501f003, + 0x497b1807, 0x497b1806, 0x80000580, 0x1c01f000, + 0x4d2c0000, 0x59300407, 0x90000583, 0x05020012, + 0x598c0009, 0x81300580, 0x0502000f, 0x0501f848, + 0x59325809, 0x497a580c, 0x497a580d, 0x0501f830, + 0x59300000, 0x800001c0, 0x05000004, 0x48031809, + 0x497a6000, 0x0501f003, 0x497b1808, 0x497b1809, + 0x80000580, 0x5c025800, 0x1c01f000, 0x598c0005, + 0x81300580, 0x0502000c, 0x0501f835, 0x0501f820, + 0x59300000, 0x800001c0, 0x05000004, 0x48031805, + 0x497a6000, 0x0501f003, 0x497b1805, 0x497b1804, + 0x80000580, 0x1c01f000, 0x598c0003, 0x81300580, + 0x0502000c, 0x0501f826, 0x0501f811, 0x59300000, + 0x800001c0, 0x05000004, 0x48031803, 0x497a6000, + 0x0501f003, 0x497b1803, 0x497b1802, 0x80000580, + 0x1c01f000, 0x64032002, 0x497b2005, 0x497b2006, + 0x497b2007, 0x4979b003, 0x1c01f000, 0x4c040000, + 0x59300004, 0x8c000516, 0x05020003, 0x82000500, + 0xffd7ffff, 0x82000500, 0x7ffef7ff, 0x48026004, + 0x58d400e4, 0x8c000514, 0x05000007, 0x58d40011, + 0x81300580, 0x05020004, 0x4979a811, 0x4a01a8e4, + 0x00000800, 0x5c000800, 0x1c01f000, 0x4803c856, + 0x598c000a, 0x80000540, 0x05000003, 0x80000040, + 0x4803180a, 0x1c01f000, 0x59bc00ea, 0x90000507, + 0x90000583, 0x05020003, 0x4803c856, 0x640778e8, + 0x58d400ea, 0x90000507, 0x90000583, 0x05020005, + 0x4803c856, 0x6405a8e8, 0x4a0370e4, 0x00000800, + 0x1c01f000, 0x60042800, 0x58d400ea, 0x90000507, + 0x90000581, 0x0502000f, 0x4803c856, 0x60000800, + 0x0501f830, 0x4a0370e4, 0x00000c00, 0x60000820, 0x58d400ea, 0x90000507, 0x90000583, 0x05000004, - 0x80040840, 0x05fe07fb, 0x05c1f8b8, 0x41782800, - 0x59bc00ea, 0x90000507, 0x90000581, 0x0502000f, - 0x4803c856, 0x60000800, 0x0501f80e, 0x4a0370e4, - 0x00000c00, 0x42000800, 0x00010000, 0x59bc00ea, - 0x90000507, 0x90000583, 0x05000005, 0x80040840, - 0x05fe07fb, 0x05c1f8a5, 0x801429c0, 0x1c01f000, - 0x59bc00ea, 0x90000507, 0x90000581, 0x05c2089f, - 0x59bc00ea, 0x8c000516, 0x05fe07fe, 0x480778e1, - 0x1c01f000, 0x59bc00ea, 0x8c000516, 0x05fe07fe, - 0x480778e1, 0x59bc00ea, 0x8c000516, 0x05fe07fe, - 0x480b78e1, 0x1c01f000, 0x58d400ea, 0x8c000516, - 0x05fe07fe, 0x4805a8e1, 0x1c01f000, 0x58d400ea, - 0x8c000516, 0x05fe07fe, 0x4805a8e1, 0x58d400ea, - 0x8c000516, 0x05fe07fe, 0x4809a8e1, 0x1c01f000, - 0x4a0378e4, 0x00002000, 0x42007000, 0x0010e060, - 0x58380401, 0x8c000506, 0x05020003, 0x4a01a8e4, - 0x00008000, 0x1c01f000, 0x82000d00, 0x02000018, - 0x05c2086f, 0x05c1f875, 0x001086c7, 0x001086dc, - 0x0010856d, 0x001086c6, 0x0010856c, 0x00108660, - 0x05c1f86e, 0x4d2c0000, 0x4d300000, 0x58d400ea, - 0x8c000510, 0x05fc07fe, 0x58d660e0, 0x813261c0, - 0x05c00866, 0x59300004, 0x8c000520, 0x05000010, - 0x82000500, 0xfffefeff, 0x48026004, 0x59325809, - 0x59301407, 0x90080583, 0x05000006, 0x90080586, - 0x05c2085a, 0x592c0a0a, 0x0005fe45, 0x0501f006, - 0x0001fb82, 0x0005ffdc, 0x0501f003, 0x84000510, - 0x48026004, 0x5c026000, 0x5c025800, 0x1c01f000, - 0x82000d00, 0x82000018, 0x05c20845, 0x05c1f84b, - 0x001085a0, 0x001085a0, 0x001085a0, 0x001085a1, - 0x001085c1, 0x00108642, 0x001085a0, 0x00108695, - 0x001085a0, 0x001086c6, 0x001085e0, 0x00020eff, - 0x00108623, 0x001085a0, 0x001085a0, 0x001085a0, - 0x05c1f83a, 0x4d300000, 0x4d900000, 0x4dd00000, - 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fcad, - 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0, - 0x59300004, 0x8c000520, 0x05000010, 0x82000500, - 0xfffefeff, 0x48026004, 0x05fdff61, 0x05c5fc2f, - 0x05c5fc8e, 0x05c5fc4d, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000, - 0x642378e4, 0x05fdf747, 0x84000510, 0x48026004, - 0x05fdf7f6, 0x4d300000, 0x4d900000, 0x4dd00000, - 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fc8d, - 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0, - 0x59300004, 0x8c000520, 0x0500000f, 0x82000500, - 0xfffefeff, 0x48026004, 0x640e6203, 0x05fdff40, - 0x05c5fbbf, 0x5c01b000, 0x5c022800, 0x5c034800, - 0x5c03a000, 0x5c032000, 0x5c026000, 0x642378e4, - 0x05fdf728, 0x84000510, 0x48026004, 0x05fdf7f6, - 0x4d300000, 0x4d2c0000, 0x4d900000, 0x4dd00000, - 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fc6d, - 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0, - 0x59300004, 0x8c000520, 0x0500001a, 0x82000500, - 0xfffefeff, 0x48026004, 0x640e6203, 0x59325809, - 0x812e59c0, 0x05bc0fe5, 0x42000000, 0x0010e477, - 0x0525f9e4, 0x592c020c, 0x84000552, 0x48025a0c, - 0x05c5ff35, 0x05fdff16, 0x05c5fb95, 0x5c01b000, + 0x80040840, 0x05fe07fb, 0x05bdfc33, 0x41782800, + 0x59bc00ea, 0x90000507, 0x90000581, 0x0502000d, + 0x4803c856, 0x60000800, 0x0501f80c, 0x42000800, + 0x00010000, 0x59bc00ea, 0x90000507, 0x90000583, + 0x05000005, 0x80040840, 0x05fe07fb, 0x05bdfc22, + 0x801429c0, 0x1c01f000, 0x59bc00ea, 0x90000507, + 0x90000581, 0x05be0c1c, 0x59bc00ea, 0x8c000516, + 0x05fe07fe, 0x480778e1, 0x1c01f000, 0x59bc00ea, + 0x8c000516, 0x05fe07fe, 0x480778e1, 0x59bc00ea, + 0x8c000516, 0x05fe07fe, 0x480b78e1, 0x1c01f000, + 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x4805a8e1, + 0x1c01f000, 0x58d400ea, 0x8c000516, 0x05fe07fe, + 0x4805a8e1, 0x58d400ea, 0x8c000516, 0x05fe07fe, + 0x4809a8e1, 0x1c01f000, 0x4a0378e4, 0x00002000, + 0x42007000, 0x00111ffa, 0x58380401, 0x8c000506, + 0x05020003, 0x4a01a8e4, 0x00008000, 0x1c01f000, + 0x82000d00, 0x02000018, 0x05be0bec, 0x05bdfbf2, + 0x00108b85, 0x00108b9a, 0x00108a2b, 0x00108b84, + 0x00108a2a, 0x00108b1e, 0x05bdfbeb, 0x4d2c0000, + 0x4d300000, 0x58d400ea, 0x8c000510, 0x05fc07fe, + 0x58d660e0, 0x813261c0, 0x05bc0be3, 0x59300004, + 0x8c000520, 0x05000010, 0x82000500, 0xfffefeff, + 0x48026004, 0x59325809, 0x59301407, 0x90080583, + 0x05000006, 0x90080586, 0x05be0bd7, 0x592c0a0a, + 0x0005fe7b, 0x0501f006, 0x0001fba8, 0x0009f810, + 0x0501f003, 0x84000510, 0x48026004, 0x5c026000, + 0x5c025800, 0x1c01f000, 0x82000d00, 0x82000018, + 0x05be0bc2, 0x05bdfbc8, 0x00108a5e, 0x00108a5e, + 0x00108a5e, 0x00108a5f, 0x00108a7f, 0x00108b00, + 0x00108a5e, 0x00108b53, 0x00108a5e, 0x00108b84, + 0x00108a9e, 0x00020f36, 0x00108ae1, 0x00108a5e, + 0x00108a5e, 0x00108a5e, 0x05bdfbb7, 0x4d300000, + 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, + 0x4cd80000, 0x0501fcad, 0x59bc00ea, 0x8c000510, + 0x05fc07fe, 0x59be60e0, 0x59300004, 0x8c000520, + 0x05000010, 0x82000500, 0xfffefeff, 0x48026004, + 0x05fdff61, 0x05c5f80d, 0x05c5f86c, 0x05c5f82b, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x5c026000, 0x642378e4, 0x05fdf747, + 0x84000510, 0x48026004, 0x05fdf7f6, 0x4d300000, + 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, + 0x4cd80000, 0x0501fc8d, 0x59bc00ea, 0x8c000510, + 0x05fc07fe, 0x59be60e0, 0x59300004, 0x8c000520, + 0x0500000f, 0x82000500, 0xfffefeff, 0x48026004, + 0x640e6203, 0x05fdff40, 0x05c1ffa0, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, - 0x5c025800, 0x5c026000, 0x642378e4, 0x05fdf6fd, - 0x84000510, 0x48026004, 0x05fdf7f5, 0x42007000, - 0x000211a7, 0x58380000, 0x90000580, 0x0500000d, - 0x58d80805, 0x8c040500, 0x0500000a, 0x83180400, - 0x00020f72, 0x50006000, 0x58380001, 0x80300580, - 0x05000005, 0x4803c856, 0x05c1fcbf, 0x4979b005, - 0x1c01f000, 0x58300010, 0x4803c857, 0x6404620f, - 0x49786010, 0x49787002, 0x1c01f000, 0x4d2c0000, - 0x4d300000, 0x59bc00ea, 0x8c000510, 0x05fc07fe, - 0x59be60e0, 0x813261c0, 0x05bc0fb0, 0x59300004, - 0x8c000520, 0x05000012, 0x82000500, 0xfffefeff, - 0x48026004, 0x59301407, 0x90080583, 0x05be0fa7, - 0x05fdfb82, 0x05be0fa5, 0x59325809, 0x60040800, - 0x600a8000, 0x05e9fff2, 0x0001fb82, 0x0005ffdc, - 0x5c026000, 0x5c025800, 0x1c01f000, 0x84000510, - 0x48026004, 0x05fdf7fb, 0x4d300000, 0x4d900000, - 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x0501fc0c, 0x59bc00ea, 0x8c000510, 0x05fc07fe, - 0x59be60e0, 0x59300004, 0x8c000520, 0x0500000e, - 0x82000500, 0xfffefeff, 0x48026004, 0x05fdfec0, - 0x05c5fb82, 0x5c01b000, 0x5c022800, 0x5c034800, - 0x5c03a000, 0x5c032000, 0x5c026000, 0x642378e4, - 0x05fdf6a8, 0x84000510, 0x48026004, 0x05fdf7f6, - 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4da40000, - 0x4cd00000, 0x4d240000, 0x58d400ea, 0x8c000510, - 0x05fc07fe, 0x58d660e0, 0x813261c0, 0x05bc0f6f, - 0x59300004, 0x8c000520, 0x0500001e, 0x82000500, - 0xfffefeff, 0x48026004, 0x5932680a, 0x42034800, - 0x0010e063, 0x5932481d, 0x05011000, 0x4a03c840, - 0x0010e06a, 0x644bc842, 0x05011000, 0x4a03c840, - 0x0010e07c, 0x4a03c842, 0x000000ff, 0x05011000, - 0x4a03c840, 0x0010e17b, 0x4a03c842, 0x000000ff, - 0x0501fbe8, 0x5c024800, 0x5c01a000, 0x5c034800, - 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000, - 0x84000510, 0x48026004, 0x5c024800, 0x5c01a000, - 0x5c034800, 0x5c026800, 0x5c025800, 0x5c026000, - 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000, - 0x4cd00000, 0x4d240000, 0x4d900000, 0x4dd00000, - 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fbb5, - 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0, - 0x813261c0, 0x05bc0f35, 0x59300004, 0x8c000520, - 0x05000011, 0x82000500, 0xfffefeff, 0x48026004, - 0x5932481d, 0x0505fa76, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c024800, - 0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000, - 0x1c01f000, 0x84000510, 0x48026004, 0x5c01b000, + 0x5c026000, 0x642378e4, 0x05fdf728, 0x84000510, + 0x48026004, 0x05fdf7f6, 0x4d300000, 0x4d2c0000, + 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, + 0x4cd80000, 0x0501fc6d, 0x59bc00ea, 0x8c000510, + 0x05fc07fe, 0x59be60e0, 0x59300004, 0x8c000520, + 0x0500001a, 0x82000500, 0xfffefeff, 0x48026004, + 0x640e6203, 0x59325809, 0x812e59c0, 0x05bc0b62, + 0x42000000, 0x0011241b, 0x0525fca1, 0x592c020c, + 0x84000552, 0x48025a0c, 0x05c5fae9, 0x05fdff16, + 0x05c1ff76, 0x5c01b000, 0x5c022800, 0x5c034800, + 0x5c03a000, 0x5c032000, 0x5c025800, 0x5c026000, + 0x642378e4, 0x05fdf6fd, 0x84000510, 0x48026004, + 0x05fdf7f5, 0x42007000, 0x000211e8, 0x58380000, + 0x90000580, 0x0500000d, 0x58d80805, 0x8c040500, + 0x0500000a, 0x83180400, 0x00020fa9, 0x50006000, + 0x58380001, 0x80300580, 0x05000005, 0x4803c856, + 0x05c1f863, 0x4979b005, 0x1c01f000, 0x58300010, + 0x4803c857, 0x6404620f, 0x49786010, 0x49787002, + 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x59bc00ea, + 0x8c000510, 0x05fc07fe, 0x59be60e0, 0x813261c0, + 0x05bc0b2d, 0x59300004, 0x8c000520, 0x05000012, + 0x82000500, 0xfffefeff, 0x48026004, 0x59301407, + 0x90080583, 0x05be0b24, 0x05fdfb7d, 0x05be0b22, + 0x59325809, 0x60040800, 0x600a8000, 0x05e9fe18, + 0x0001fba8, 0x0009f810, 0x5c026000, 0x5c025800, + 0x1c01f000, 0x84000510, 0x48026004, 0x05fdf7fb, + 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000, + 0x4d140000, 0x4cd80000, 0x0501fc0c, 0x59bc00ea, + 0x8c000510, 0x05fc07fe, 0x59be60e0, 0x59300004, + 0x8c000520, 0x0500000e, 0x82000500, 0xfffefeff, + 0x48026004, 0x05fdfec0, 0x05c1ff63, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, - 0x5c024800, 0x5c01a000, 0x5c026800, 0x5c025800, - 0x5c026000, 0x1c01f000, 0x05bdff14, 0x4d300000, - 0x4d380000, 0x42000000, 0x0010e4b5, 0x0525f911, - 0x05fdfe47, 0x598e600b, 0x59c40004, 0x8c000506, - 0x05000003, 0x0501f8d1, 0x64238804, 0x813261c0, - 0x05000004, 0x0501fb7a, 0x60527000, 0x0009f800, - 0x6409a8e4, 0x5c027000, 0x5c026000, 0x05fdf629, - 0x4d180000, 0x4d300000, 0x4d380000, 0x4d900000, - 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x05fdfe2f, 0x417a3000, 0x59c40804, 0x83180400, - 0x00108a14, 0x50000000, 0x80040500, 0x05000017, - 0x42000000, 0x0010e4b6, 0x0525f8ee, 0x0501fb65, - 0x59926005, 0x0501f858, 0x83180400, 0x00108a14, - 0x50000000, 0x48038804, 0x813261c0, 0x05000007, - 0x59300004, 0x8c00050c, 0x05020002, 0x640e6203, - 0x612a7000, 0x0009f800, 0x59c40004, 0x82000500, - 0x00f80000, 0x05000004, 0x811a3000, 0x91180485, - 0x05fc17e2, 0x6421a8e4, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c027000, - 0x5c026000, 0x5c023000, 0x05fdf5f6, 0x4d2c0000, - 0x4d340000, 0x5932680a, 0x598c0800, 0x90040586, - 0x05020004, 0x918c1405, 0x918c1c04, 0x0501f00f, - 0x90040584, 0x05020004, 0x918c1403, 0x918c1c02, - 0x0501f00a, 0x90040581, 0x05020004, 0x918c1407, - 0x918c1c06, 0x0501f005, 0x90040582, 0x05020024, - 0x918c1409, 0x918c1c08, 0x41306800, 0x58340000, - 0x80007d40, 0x0500001e, 0x583c000a, 0x81340580, - 0x05020006, 0x403c6800, 0x583c0000, 0x80007d40, - 0x05fe07fa, 0x0501f016, 0x4933c857, 0x483fc857, - 0x583c0000, 0x48006800, 0x49307800, 0x443c1000, - 0x500c0000, 0x803c0580, 0x05020002, 0x44341800, - 0x80000580, 0x4803180b, 0x4803180d, 0x598c0000, - 0x90000583, 0x05000002, 0x64031800, 0x80000580, - 0x5c026800, 0x5c025800, 0x1c01f000, 0x90000541, - 0x05fdf7fc, 0x491bc857, 0x59b400f6, 0x90000538, - 0x05fe07fe, 0x59c80840, 0x90040550, 0x48039040, - 0x59c41008, 0x4c040000, 0x4c080000, 0x82081500, - 0xffffff7f, 0x480b8808, 0x0501fa9a, 0x05020006, - 0x0501fa9e, 0x05000020, 0x48038804, 0x05c5fab6, - 0x0501f03d, 0x64238803, 0x59c40003, 0x90000503, - 0x05fc07fe, 0x8c000502, 0x05020006, 0x0501fa93, - 0x05000015, 0x48038804, 0x05c5faab, 0x0501f032, - 0x0501fa9a, 0x05020007, 0x59c80040, 0x8400056a, - 0x48039040, 0x59c80040, 0x8c00052a, 0x05fe07fe, - 0x59c40005, 0x82000500, 0xc0000000, 0x05000006, - 0x59c400a3, 0x84000540, 0x480388a3, 0x4a038805, - 0xc0000000, 0x05c5fa69, 0x4a03a005, 0x30000000, - 0x59d00006, 0x4a03a005, 0x30000000, 0x6401b006, - 0x59d00005, 0x8c000504, 0x05fe07fe, 0x05fdfe88, - 0x6403a014, 0x600008ec, 0x83180540, 0x60000000, - 0x480008a1, 0x811800dc, 0x59c80840, 0x80040540, - 0x48039040, 0x82000540, 0x00003000, 0x48039040, - 0x59c80040, 0x82000500, 0x00003000, 0x05fe07fd, - 0x05c5fa6e, 0x83180400, 0x00108a14, 0x50000000, - 0x48038804, 0x80000580, 0x4df00000, 0x05f9f840, - 0x5c03e000, 0x5c001000, 0x5c000800, 0x480b8808, - 0x48079040, 0x1c01f000, 0x4803c856, 0x59b400f6, - 0x90000538, 0x05fe07fe, 0x59c80840, 0x90040550, - 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000, - 0x82081500, 0xffffff7f, 0x480b8808, 0x59c40004, - 0x90000503, 0x0502000e, 0x59c40004, 0x9000050c, - 0x05000004, 0x64338804, 0x8c000504, 0x0501f022, - 0x59c80040, 0x8400056e, 0x48039040, 0x59c80040, - 0x8c00052e, 0x05fe07fe, 0x0501f01b, 0x64238803, + 0x5c026000, 0x642378e4, 0x05fdf6a8, 0x84000510, + 0x48026004, 0x05fdf7f6, 0x4d300000, 0x4d2c0000, + 0x4d340000, 0x4da40000, 0x4cd00000, 0x4d240000, + 0x58d400ea, 0x8c000510, 0x05fc07fe, 0x58d660e0, + 0x813261c0, 0x05bc0aec, 0x59300004, 0x8c000520, + 0x0500001e, 0x82000500, 0xfffefeff, 0x48026004, + 0x5932680a, 0x42034800, 0x00111ffd, 0x5932481d, + 0x05011000, 0x4a03c840, 0x00112004, 0x644bc842, + 0x05011000, 0x4a03c840, 0x00112016, 0x4a03c842, + 0x000000ff, 0x05011000, 0x4a03c840, 0x00112115, + 0x4a03c842, 0x000000ff, 0x0501fbe8, 0x5c024800, + 0x5c01a000, 0x5c034800, 0x5c026800, 0x5c025800, + 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004, + 0x5c024800, 0x5c01a000, 0x5c034800, 0x5c026800, + 0x5c025800, 0x5c026000, 0x1c01f000, 0x4d300000, + 0x4d2c0000, 0x4d340000, 0x4cd00000, 0x4d240000, + 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, + 0x4cd80000, 0x0501fbb5, 0x59bc00ea, 0x8c000510, + 0x05fc07fe, 0x59be60e0, 0x813261c0, 0x05bc0ab2, + 0x59300004, 0x8c000520, 0x05000011, 0x82000500, + 0xfffefeff, 0x48026004, 0x5932481d, 0x0505faa2, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x5c024800, 0x5c01a000, 0x5c026800, + 0x5c025800, 0x5c026000, 0x1c01f000, 0x84000510, + 0x48026004, 0x5c01b000, 0x5c022800, 0x5c034800, + 0x5c03a000, 0x5c032000, 0x5c024800, 0x5c01a000, + 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000, + 0x05bdfa91, 0x4d300000, 0x4d380000, 0x42000000, + 0x00112459, 0x0525fbce, 0x05fdfe47, 0x598e600b, + 0x59c40004, 0x8c000506, 0x05000003, 0x0501f8d1, + 0x64238804, 0x813261c0, 0x05000004, 0x0501fb7a, + 0x60527000, 0x0009f839, 0x6409a8e4, 0x5c027000, + 0x5c026000, 0x05fdf629, 0x4d180000, 0x4d300000, + 0x4d380000, 0x4d900000, 0x4dd00000, 0x4da40000, + 0x4d140000, 0x4cd80000, 0x05fdfe2f, 0x417a3000, + 0x59c40804, 0x83180400, 0x00108ed2, 0x50000000, + 0x80040500, 0x05000017, 0x42000000, 0x0011245a, + 0x0525fbab, 0x0501fb65, 0x59926005, 0x0501f858, + 0x83180400, 0x00108ed2, 0x50000000, 0x48038804, + 0x813261c0, 0x05000007, 0x59300004, 0x8c00050c, + 0x05020002, 0x640e6203, 0x612a7000, 0x0009f839, + 0x59c40004, 0x82000500, 0x00f80000, 0x05000004, + 0x811a3000, 0x91180485, 0x05fc17e2, 0x6421a8e4, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x5c027000, 0x5c026000, 0x5c023000, + 0x05fdf5f6, 0x4d2c0000, 0x4d340000, 0x5932680a, + 0x598c0800, 0x90040586, 0x05020004, 0x918c1405, + 0x918c1c04, 0x0501f00f, 0x90040584, 0x05020004, + 0x918c1403, 0x918c1c02, 0x0501f00a, 0x90040581, + 0x05020004, 0x918c1407, 0x918c1c06, 0x0501f005, + 0x90040582, 0x05020024, 0x918c1409, 0x918c1c08, + 0x41306800, 0x58340000, 0x80007d40, 0x0500001e, + 0x583c000a, 0x81340580, 0x05020006, 0x403c6800, + 0x583c0000, 0x80007d40, 0x05fe07fa, 0x0501f016, + 0x4933c857, 0x483fc857, 0x583c0000, 0x48006800, + 0x49307800, 0x443c1000, 0x500c0000, 0x803c0580, + 0x05020002, 0x44341800, 0x80000580, 0x4803180b, + 0x4803180d, 0x598c0000, 0x90000583, 0x05000002, + 0x64031800, 0x80000580, 0x5c026800, 0x5c025800, + 0x1c01f000, 0x90000541, 0x05fdf7fc, 0x491bc857, + 0x59b400f6, 0x90000538, 0x05fe07fe, 0x59c80840, + 0x90040550, 0x48039040, 0x59c41008, 0x4c040000, + 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808, + 0x0501fa9a, 0x05020006, 0x0501fa9e, 0x05000020, + 0x48038804, 0x05c1fe94, 0x0501f03d, 0x64238803, 0x59c40003, 0x90000503, 0x05fc07fe, 0x8c000502, - 0x05020005, 0x59c40004, 0x64338804, 0x8c000504, - 0x0501f011, 0x59c80040, 0x8400056a, 0x48039040, - 0x59c80040, 0x8c00052a, 0x05fe07fe, 0x59c40005, - 0x82000500, 0xc0000000, 0x05000007, 0x59c400a3, - 0x84000540, 0x480388a3, 0x4a038805, 0xc0000000, - 0x80000580, 0x4a01a8e5, 0x00000800, 0x5c001000, + 0x05020006, 0x0501fa93, 0x05000015, 0x48038804, + 0x05c1fe89, 0x0501f032, 0x0501fa9a, 0x05020007, + 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040, + 0x8c00052a, 0x05fe07fe, 0x59c40005, 0x82000500, + 0xc0000000, 0x05000006, 0x59c400a3, 0x84000540, + 0x480388a3, 0x4a038805, 0xc0000000, 0x05c1fe47, + 0x4a03a005, 0x30000000, 0x59d00006, 0x4a03a005, + 0x30000000, 0x6401b006, 0x59d00005, 0x8c000504, + 0x05fe07fe, 0x05fdfe88, 0x6403a014, 0x600008ec, + 0x83180540, 0x60000000, 0x480008a1, 0x811800dc, + 0x59c80840, 0x80040540, 0x48039040, 0x82000540, + 0x00003000, 0x48039040, 0x59c80040, 0x82000500, + 0x00003000, 0x05fe07fd, 0x05c1fe4c, 0x83180400, + 0x00108ed2, 0x50000000, 0x48038804, 0x80000580, + 0x4df00000, 0x05f5ffe6, 0x5c03e000, 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040, 0x1c01f000, - 0x5c000000, 0x4c000000, 0x4803c857, 0x491bc857, - 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000, - 0x4d140000, 0x4cd80000, 0x05fdfd29, 0x4df00000, - 0x0501fa68, 0x59900005, 0x800001c0, 0x05000012, - 0x81300580, 0x05020010, 0x59300004, 0x84000520, - 0x48026004, 0x05fdff54, 0x0502000a, 0x5c03e000, - 0x05fc0d0c, 0x80000580, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000, - 0x05fdfc4c, 0x61267000, 0x59300004, 0x84000520, - 0x48026004, 0x8c00050c, 0x000a0800, 0x5c03e000, - 0x05fc0cfc, 0x90000541, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000, - 0x4933c857, 0x05fdfd02, 0x4df00000, 0x598c000b, - 0x80026540, 0x0500000f, 0x59300004, 0x84000520, - 0x48026004, 0x05fdff89, 0x05000011, 0x05fdfc4e, - 0x604e7000, 0x59300004, 0x8c00050c, 0x000a0800, - 0x5c03e000, 0x05fc0ce3, 0x90000541, 0x1c01f000, - 0x916c1581, 0x05fc07fb, 0x916c1584, 0x05fc07f9, - 0x42001000, 0x0010510c, 0x05f5fe8b, 0x5c03e000, - 0x05fc0cd8, 0x80000580, 0x1c01f000, 0x4d300000, - 0x4d180000, 0x4d3c0000, 0x05fdfce1, 0x4df00000, - 0x643da8e4, 0x643f78e4, 0x0501fa06, 0x417a3000, - 0x811808c8, 0x82040c00, 0x0000b037, 0x58066005, - 0x813261c0, 0x0500000b, 0x417a7800, 0x05e9f879, - 0x05000007, 0x59300c07, 0x90040583, 0x05000003, - 0x90040586, 0x05020002, 0x600a7800, 0x050dffce, - 0x811a3000, 0x91180485, 0x05fc17ee, 0x61000800, - 0x05c5ffaa, 0x642b78e4, 0x6429a8e4, 0x5c03e000, - 0x05fc0cb4, 0x5c027800, 0x5c023000, 0x5c026000, - 0x1c01f000, 0x4803c856, 0x4d300000, 0x05fdfcbc, - 0x4df00000, 0x59c80840, 0x84040d74, 0x90040550, - 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000, - 0x82081500, 0xffffff7f, 0x480b8808, 0x600c1000, - 0x0501f9d1, 0x598e600b, 0x813261c0, 0x05fe0fa9, - 0x050009d4, 0x4a01a8e5, 0x00000800, 0x0501f809, - 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040, - 0x5c03e000, 0x05fc0c93, 0x5c026000, 0x1c01f000, - 0x4d380000, 0x4d180000, 0x4d300000, 0x4d900000, + 0x4803c856, 0x59b400f6, 0x90000538, 0x05fe07fe, + 0x59c80840, 0x90040550, 0x48039040, 0x59c41008, + 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f, + 0x480b8808, 0x59c40004, 0x90000503, 0x0502000e, + 0x59c40004, 0x9000050c, 0x05000004, 0x64338804, + 0x8c000504, 0x0501f022, 0x59c80040, 0x8400056e, + 0x48039040, 0x59c80040, 0x8c00052e, 0x05fe07fe, + 0x0501f01b, 0x64238803, 0x59c40003, 0x90000503, + 0x05fc07fe, 0x8c000502, 0x05020005, 0x59c40004, + 0x64338804, 0x8c000504, 0x0501f011, 0x59c80040, + 0x8400056a, 0x48039040, 0x59c80040, 0x8c00052a, + 0x05fe07fe, 0x59c40005, 0x82000500, 0xc0000000, + 0x05000007, 0x59c400a3, 0x84000540, 0x480388a3, + 0x4a038805, 0xc0000000, 0x80000580, 0x4a01a8e5, + 0x00000800, 0x5c001000, 0x5c000800, 0x480b8808, + 0x48079040, 0x1c01f000, 0x5c000000, 0x4c000000, + 0x4803c857, 0x491bc857, 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, - 0x417a3000, 0x05f5ff5e, 0x811a3000, 0x91180585, - 0x05fe07fd, 0x0501f9ab, 0x0502000a, 0x5c01b000, - 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, - 0x5c026000, 0x5c023000, 0x5c027000, 0x1c01f000, - 0x0501f9c8, 0x59926005, 0x4933c857, 0x05fdfeba, - 0x813261c0, 0x05fc07f2, 0x612a7000, 0x640e6203, - 0x0009f800, 0x05fdf7ee, 0x4d300000, 0x4d180000, - 0x4d900000, 0x05fdfc7a, 0x60001000, 0x598c0800, - 0x90040585, 0x05000998, 0x417a3000, 0x811b20c8, - 0x83932400, 0x0000b037, 0x59900002, 0x90000581, - 0x0502000a, 0x60100800, 0x59926005, 0x59300013, - 0x82000500, 0xfff00000, 0x80000540, 0x05000002, - 0x60380800, 0x05f5ff0d, 0x811a3000, 0x91180485, - 0x05fc17ef, 0x59c81040, 0x84081534, 0x480b9040, - 0x05fdfc50, 0x5c032000, 0x5c023000, 0x5c026000, - 0x1c01f000, 0x4933c857, 0x4d900000, 0x4dd00000, - 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d380000, - 0x05fdfc53, 0x4df00000, 0x59300004, 0x8c00053e, - 0x05020005, 0x8c000520, 0x0500001d, 0x05fdfb71, - 0x0501f01b, 0x598c000b, 0x81300580, 0x0500000e, - 0x0511f864, 0x05020020, 0x0501f928, 0x0500001e, - 0x48038804, 0x0501f983, 0x05c5f93f, 0x05fdfb79, - 0x61267000, 0x59300004, 0x8c00050c, 0x0502000b, - 0x0501f00b, 0x59c40004, 0x8c000504, 0x05000012, - 0x64138804, 0x05fdfb8c, 0x604e7000, 0x59300004, - 0x8c00050c, 0x05000002, 0x0009f800, 0x5c03e000, - 0x05fc0c20, 0x5c027000, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x80000580, - 0x1c01f000, 0x5c03e000, 0x05fc0c16, 0x5c027000, + 0x05fdfd29, 0x4df00000, 0x0501fa68, 0x59900005, + 0x800001c0, 0x05000012, 0x81300580, 0x05020010, + 0x59300004, 0x84000520, 0x48026004, 0x05fdff54, + 0x0502000a, 0x5c03e000, 0x05fc0d0c, 0x80000580, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x1c01f000, 0x05fdfc4c, 0x61267000, + 0x59300004, 0x84000520, 0x48026004, 0x8c00050c, + 0x000a0839, 0x5c03e000, 0x05fc0cfc, 0x90000541, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, - 0x5c032000, 0x90000541, 0x1c01f000, 0x59300407, - 0x90000583, 0x05020007, 0x0511fbcf, 0x05000005, - 0x59301009, 0x5808040c, 0x84000550, 0x4800140c, - 0x1c01f000, 0x4a01a8e5, 0x00000800, 0x05fdfc10, - 0x59c400af, 0x800001c0, 0x05020003, 0x05fdfbfd, - 0x05c9f10a, 0x598c000d, 0x90001482, 0x05021006, - 0x80000000, 0x4803180d, 0x80000580, 0x05f5fea4, - 0x0500000e, 0x05fdfeff, 0x0502000c, 0x05fdffe4, - 0x42000000, 0x0010e46d, 0x0521fec6, 0x05fdfdf8, - 0x05000006, 0x0501f936, 0x4d380000, 0x60527000, - 0x0009f800, 0x5c027000, 0x05fdfbe6, 0x05c9f0f3, + 0x5c032000, 0x1c01f000, 0x4933c857, 0x05fdfd02, + 0x4df00000, 0x598c000b, 0x80026540, 0x0500000f, + 0x59300004, 0x84000520, 0x48026004, 0x05fdff89, + 0x05000011, 0x05fdfc4e, 0x604e7000, 0x59300004, + 0x8c00050c, 0x000a0839, 0x5c03e000, 0x05fc0ce3, + 0x90000541, 0x1c01f000, 0x916c1581, 0x05fc07fb, + 0x916c1584, 0x05fc07f9, 0x42001000, 0x00105303, + 0x05f5fde7, 0x5c03e000, 0x05fc0cd8, 0x80000580, + 0x1c01f000, 0x4d300000, 0x4d180000, 0x4d3c0000, + 0x05fdfce1, 0x4df00000, 0x643da8e4, 0x643f78e4, + 0x0501fa06, 0x417a3000, 0x811808c8, 0x82040c00, + 0x0000b037, 0x58066005, 0x813261c0, 0x0500000b, + 0x417a7800, 0x05e5fe2d, 0x05000007, 0x59300c07, + 0x90040583, 0x05000003, 0x90040586, 0x05020002, + 0x600a7800, 0x0511f882, 0x811a3000, 0x91180485, + 0x05fc17ee, 0x61000800, 0x05c5fb5d, 0x642b78e4, + 0x6429a8e4, 0x5c03e000, 0x05fc0cb4, 0x5c027800, + 0x5c023000, 0x5c026000, 0x1c01f000, 0x4803c856, + 0x4d300000, 0x05fdfcbc, 0x4df00000, 0x59c80840, + 0x84040d74, 0x90040550, 0x48039040, 0x59c41008, + 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f, + 0x480b8808, 0x600c1000, 0x0501f9d1, 0x598e600b, + 0x813261c0, 0x05fe0fa9, 0x050009d4, 0x4a01a8e5, + 0x00000800, 0x0501f809, 0x5c001000, 0x5c000800, + 0x480b8808, 0x48079040, 0x5c03e000, 0x05fc0c93, + 0x5c026000, 0x1c01f000, 0x4d380000, 0x4d180000, + 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000, + 0x4d140000, 0x4cd80000, 0x417a3000, 0x05f5ff04, + 0x811a3000, 0x91180585, 0x05fe07fd, 0x0501f9ab, + 0x0502000a, 0x5c01b000, 0x5c022800, 0x5c034800, + 0x5c03a000, 0x5c032000, 0x5c026000, 0x5c023000, + 0x5c027000, 0x1c01f000, 0x0501f9c8, 0x59926005, + 0x4933c857, 0x05fdfeba, 0x813261c0, 0x05fc07f2, + 0x612a7000, 0x640e6203, 0x0009f839, 0x05fdf7ee, + 0x4d300000, 0x4d180000, 0x4d900000, 0x05fdfc7a, + 0x60001000, 0x598c0800, 0x90040585, 0x05000998, + 0x417a3000, 0x811b20c8, 0x83932400, 0x0000b037, + 0x59900002, 0x90000581, 0x0502000a, 0x60100800, + 0x59926005, 0x59300013, 0x82000500, 0xfff00000, + 0x80000540, 0x05000002, 0x60380800, 0x05f5feb3, + 0x811a3000, 0x91180485, 0x05fc17ef, 0x59c81040, + 0x84081534, 0x480b9040, 0x05fdfc50, 0x5c032000, + 0x5c023000, 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, - 0x4cd80000, 0x4d300000, 0x05f5feb5, 0x05fdfbec, - 0x59c400af, 0x800001c0, 0x05000022, 0x0501f929, - 0x59926005, 0x4933c857, 0x59300004, 0x8c000516, - 0x05000009, 0x05fdfeaf, 0x0502001a, 0x05fdfb19, - 0x05fdfbd0, 0x42000800, 0x80000804, 0x0005fe9d, - 0x0501f014, 0x60c018ea, 0x0501f8e9, 0x05020003, - 0x05f5fe7d, 0x0501f00f, 0x05fdfea2, 0x0502000d, - 0x05fdffb7, 0x42000000, 0x0010e46e, 0x0521fe99, - 0x59300004, 0x8c00050c, 0x05020002, 0x640e6203, - 0x4d380000, 0x612a7000, 0x0009f800, 0x5c027000, - 0x05fdfbb8, 0x5c026000, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x05c9f0bf, - 0x4c600000, 0x4d900000, 0x4dd00000, 0x4da40000, - 0x4d140000, 0x4cd80000, 0x4d300000, 0x4d2c0000, - 0x05fdfbb7, 0x0501f8f7, 0x59926005, 0x813261c0, - 0x05000040, 0x05e9ff4d, 0x05020005, 0x4178c000, - 0x0505fa10, 0x05000002, 0x6004c000, 0x05e9ff47, - 0x05020005, 0x8060c1c0, 0x05000003, 0x0505fa30, - 0x0501f034, 0x05f5fe5f, 0x05020032, 0x4933c857, - 0x0501f892, 0x05020015, 0x05f5fe69, 0x813261c0, - 0x0500002c, 0x59325809, 0x812e59c0, 0x05bc0c63, - 0x05e9ff36, 0x0502001c, 0x59c40093, 0x4803c857, - 0x800001c0, 0x05020009, 0x592c020c, 0x84000550, - 0x48025a0c, 0x05edf818, 0x0502001e, 0x592c020c, - 0x84000510, 0x48025a0c, 0x05f5fe33, 0x0501f019, - 0x42000000, 0x0010e46e, 0x0521fe52, 0x05fdfdbe, - 0x592c020c, 0x84000550, 0x48025a0c, 0x4d380000, - 0x612a7000, 0x640e6203, 0x0009f800, 0x5c027000, - 0x0501f00c, 0x59901007, 0x800811c0, 0x05fe07f1, - 0x59c408af, 0x82040480, 0x000003e8, 0x05fe17ed, - 0x80081000, 0x480b2007, 0x05f5fe1b, 0x05e1ff4c, - 0x5c025800, 0x5c026000, 0x5c01b000, 0x5c022800, - 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c00c000, - 0x05fdf35c, 0x4d300000, 0x4d2c0000, 0x05fdfb68, - 0x598e600b, 0x4933c857, 0x813261c0, 0x0500003e, - 0x59c41004, 0x480bc857, 0x8c080500, 0x05000007, - 0x05e9fefa, 0x05020012, 0x05e9ffe3, 0x05020036, - 0x05f5fdfb, 0x0501f034, 0x82080500, 0x000001fe, - 0x05fe07fc, 0x59c8010b, 0x4803c857, 0x8c000500, - 0x05fc07f8, 0x42000000, 0x0010e4b7, 0x0521fe19, - 0x05fdfe4c, 0x05000877, 0x0501f027, 0x598c000d, - 0x80000540, 0x0502000e, 0x59c408af, 0x82040480, - 0x000003e8, 0x0502100a, 0x598c080d, 0x80040800, - 0x4807180d, 0x05f5fde2, 0x42000000, 0x0010e3a7, - 0x0521fe08, 0x05e1ff16, 0x0501f017, 0x42000000, - 0x0010e46d, 0x0521fe03, 0x05fdfdc8, 0x813261c0, - 0x05020003, 0x0501f85f, 0x0501f00f, 0x59300407, - 0x90000583, 0x05020007, 0x59325809, 0x812e59c0, - 0x05000004, 0x592c020c, 0x84000550, 0x48025a0c, - 0x0501f867, 0x4d380000, 0x60527000, 0x0009f800, - 0x5c027000, 0x5c025800, 0x5c026000, 0x05fdf315, - 0x59c40804, 0x83180400, 0x00108a0a, 0x50000000, + 0x4cd80000, 0x4d380000, 0x05fdfc53, 0x4df00000, + 0x59300004, 0x8c00053e, 0x05020005, 0x8c000520, + 0x0500001d, 0x05fdfb71, 0x0501f01b, 0x598c000b, + 0x81300580, 0x0500000e, 0x0511f920, 0x05020020, + 0x0501f928, 0x0500001e, 0x48038804, 0x0501f983, + 0x05c1fd1d, 0x05fdfb79, 0x61267000, 0x59300004, + 0x8c00050c, 0x0502000b, 0x0501f00b, 0x59c40004, + 0x8c000504, 0x05000012, 0x64138804, 0x05fdfb8c, + 0x604e7000, 0x59300004, 0x8c00050c, 0x05000002, + 0x0009f839, 0x5c03e000, 0x05fc0c20, 0x5c027000, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x80000580, 0x1c01f000, 0x5c03e000, + 0x05fc0c16, 0x5c027000, 0x5c01b000, 0x5c022800, + 0x5c034800, 0x5c03a000, 0x5c032000, 0x90000541, + 0x1c01f000, 0x59300407, 0x90000583, 0x05020007, + 0x0511fc9a, 0x05000005, 0x59301009, 0x5808040c, + 0x84000550, 0x4800140c, 0x1c01f000, 0x4a01a8e5, + 0x00000800, 0x05fdfc10, 0x59c400af, 0x800001c0, + 0x05020003, 0x05fdfbfd, 0x05c5f4cc, 0x598c000d, + 0x90001482, 0x05021006, 0x80000000, 0x4803180d, + 0x80000580, 0x05f5fe4a, 0x0500000e, 0x05fdfeff, + 0x0502000c, 0x05fdffe4, 0x42000000, 0x00112411, + 0x0525f983, 0x05fdfdf8, 0x05000006, 0x0501f936, + 0x4d380000, 0x60527000, 0x0009f839, 0x5c027000, + 0x05fdfbe6, 0x05c5f4b5, 0x4d900000, 0x4dd00000, + 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d300000, + 0x05f5fe5b, 0x05fdfbec, 0x59c400af, 0x800001c0, + 0x05000022, 0x0501f929, 0x59926005, 0x4933c857, + 0x59300004, 0x8c000516, 0x05000009, 0x05fdfeaf, + 0x0502001a, 0x05fdfb19, 0x05fdfbd0, 0x42000800, + 0x80000804, 0x0005fed4, 0x0501f014, 0x60c018ea, + 0x0501f8e9, 0x05020003, 0x05f5fe23, 0x0501f00f, + 0x05fdfea2, 0x0502000d, 0x05fdffb7, 0x42000000, + 0x00112412, 0x0525f956, 0x59300004, 0x8c00050c, + 0x05020002, 0x640e6203, 0x4d380000, 0x612a7000, + 0x0009f839, 0x5c027000, 0x05fdfbb8, 0x5c026000, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x05c5f481, 0x4c600000, 0x4d900000, + 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, + 0x4d300000, 0x4d2c0000, 0x05fdfbb7, 0x0501f8f7, + 0x59926005, 0x813261c0, 0x05000040, 0x05e9fd79, + 0x05020005, 0x4178c000, 0x0505fa46, 0x05000002, + 0x6004c000, 0x05e9fd73, 0x05020005, 0x8060c1c0, + 0x05000003, 0x0505fa66, 0x0501f034, 0x05f5fe05, + 0x05020032, 0x4933c857, 0x0501f892, 0x05020015, + 0x05f5fe0f, 0x813261c0, 0x0500002c, 0x59325809, + 0x812e59c0, 0x05b80fe0, 0x05e9fd62, 0x0502001c, + 0x59c40093, 0x4803c857, 0x800001c0, 0x05020009, + 0x592c020c, 0x84000550, 0x48025a0c, 0x05e9fe44, + 0x0502001e, 0x592c020c, 0x84000510, 0x48025a0c, + 0x05f5fdd9, 0x0501f019, 0x42000000, 0x00112412, + 0x0525f90f, 0x05fdfdbe, 0x592c020c, 0x84000550, + 0x48025a0c, 0x4d380000, 0x612a7000, 0x640e6203, + 0x0009f839, 0x5c027000, 0x0501f00c, 0x59901007, + 0x800811c0, 0x05fe07f1, 0x59c408af, 0x82040480, + 0x000003e8, 0x05fe17ed, 0x80081000, 0x480b2007, + 0x05f5fdc1, 0x05e1fc85, 0x5c025800, 0x5c026000, + 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, + 0x5c032000, 0x5c00c000, 0x05fdf35c, 0x4d300000, + 0x4d2c0000, 0x05fdfb68, 0x598e600b, 0x4933c857, + 0x813261c0, 0x0500003e, 0x59c41004, 0x480bc857, + 0x8c080500, 0x05000007, 0x05e9fd26, 0x05020012, + 0x05e9fe0f, 0x05020036, 0x05f5fda1, 0x0501f034, + 0x82080500, 0x000001fe, 0x05fe07fc, 0x59c8010b, + 0x4803c857, 0x8c000500, 0x05fc07f8, 0x42000000, + 0x0011245b, 0x0525f8d6, 0x05fdfe4c, 0x05000877, + 0x0501f027, 0x598c000d, 0x80000540, 0x0502000e, + 0x59c408af, 0x82040480, 0x000003e8, 0x0502100a, + 0x598c080d, 0x80040800, 0x4807180d, 0x05f5fd88, + 0x42000000, 0x00112348, 0x0525f8c5, 0x05e1fc4f, + 0x0501f017, 0x42000000, 0x00112411, 0x0525f8c0, + 0x05fdfdc8, 0x813261c0, 0x05020003, 0x0501f85f, + 0x0501f00f, 0x59300407, 0x90000583, 0x05020007, + 0x59325809, 0x812e59c0, 0x05000004, 0x592c020c, + 0x84000550, 0x48025a0c, 0x0501f867, 0x4d380000, + 0x60527000, 0x0009f839, 0x5c027000, 0x5c025800, + 0x5c026000, 0x05fdf315, 0x59c40804, 0x83180400, + 0x00108ec8, 0x50000000, 0x80040500, 0x1c01f000, + 0x59c40804, 0x83180400, 0x00108ecd, 0x50000000, 0x80040500, 0x1c01f000, 0x59c40804, 0x83180400, - 0x00108a0f, 0x50000000, 0x80040500, 0x1c01f000, - 0x59c40804, 0x83180400, 0x00108a19, 0x50000000, - 0x80040500, 0x1c01f000, 0x59c80840, 0x82040d00, - 0x000e0000, 0x83180400, 0x00108a1e, 0x50000000, - 0x80040580, 0x1c01f000, 0x00000210, 0x00000420, - 0x00000840, 0x00001080, 0x00002100, 0x00004000, - 0x00008000, 0x00010000, 0x00020000, 0x00040000, - 0x00080000, 0x00100000, 0x00200000, 0x00400000, - 0x00800000, 0x00084000, 0x00108000, 0x00210000, - 0x00420000, 0x00840000, 0x00000000, 0x00020000, - 0x00040000, 0x00060000, 0x00080000, 0x59900007, - 0x800c0c80, 0x05021003, 0x90000541, 0x0501f004, - 0x80000000, 0x48032007, 0x80000580, 0x1c01f000, - 0x417a3000, 0x05fdffd5, 0x05000005, 0x811a3000, - 0x91180585, 0x05fe07fc, 0x1c01f000, 0x81780080, - 0x1c01f000, 0x480bc857, 0x05fdfadd, 0x4df00000, - 0x480b1800, 0x5c03e000, 0x05fc0aca, 0x1c01f000, - 0x4803c856, 0x05fdfad6, 0x4df00000, 0x497b180b, - 0x497b1801, 0x497b180c, 0x497b180d, 0x497b180e, - 0x598c0000, 0x90000583, 0x05000006, 0x916c0582, - 0x05020003, 0x64171800, 0x0501f002, 0x64031800, - 0x5c03e000, 0x05fc0ab7, 0x1c01f000, 0x59300004, - 0x8c00050c, 0x05020002, 0x64066203, 0x1c01f000, - 0x91180485, 0x05be1b85, 0x491bc857, 0x811b20c8, - 0x83932400, 0x0000b037, 0x8119b0c8, 0x82d9b400, - 0x0000bf32, 0x811ba0ca, 0x83d3a400, 0x00007600, - 0x83180400, 0x00108a67, 0x50034800, 0x811a28c2, - 0x83162c00, 0x00006100, 0x1c01f000, 0x0010e27c, - 0x0010e295, 0x0010e2ae, 0x0010e2c7, 0x0010e2e0, - 0x4933c857, 0x59300407, 0x90000c92, 0x05021015, - 0x05011000, 0x0c01f001, 0x00108a84, 0x00108b2a, - 0x00108e69, 0x00108ecb, 0x00108b2a, 0x00108e69, - 0x00108ecb, 0x00108a84, 0x00108b2a, 0x00108a84, - 0x00108a84, 0x00108a84, 0x00108a84, 0x00108a84, - 0x00108a84, 0x00108a84, 0x00108a88, 0x00108a88, - 0x4803c857, 0x05fdfa8e, 0x05fdf9e3, 0x05fdf27d, - 0x42001000, 0x0010e387, 0x50081000, 0x4930100c, - 0x58080002, 0x82000580, 0x00000100, 0x0502003d, - 0x59325809, 0x812e59c0, 0x05bc0b48, 0x492fc856, - 0x5932680a, 0x83340580, 0x00110210, 0x05000025, - 0x592c040f, 0x82000500, 0x0000e000, 0x05000003, - 0x0501fbc6, 0x0501f002, 0x0501fbb6, 0x592c040d, - 0x82000500, 0x000000ff, 0x90000583, 0x0500082a, - 0x592c0011, 0x90000503, 0x05000006, 0x90000583, - 0x80000000, 0x58d00802, 0x80040540, 0x4801a002, - 0x42001000, 0x0010e387, 0x50081000, 0x4930100b, - 0x492c100a, 0x90d00406, 0x48001003, 0x592c0004, - 0x48001006, 0x592c0011, 0x48001005, 0x592c0012, - 0x48001007, 0x592c0013, 0x48001008, 0x0001f021, - 0x592c080e, 0x48066802, 0x82040500, 0x00ffff00, - 0x05000007, 0x497a6a12, 0x59a8103d, 0x82081500, - 0x00ffff00, 0x80080580, 0x05fe07d2, 0x82040d00, - 0x000000ff, 0x800408d0, 0x48066a12, 0x05fdf7cd, - 0x1c01f000, 0x59a80249, 0x8c000508, 0x0500000c, - 0x59a8004d, 0x82000500, 0x0000ffff, 0x59c40880, - 0x80040d80, 0x05000006, 0x497b8880, 0x4c000000, - 0x05c9f837, 0x5c000000, 0x48038880, 0x1c01f000, - 0x4d2c0000, 0x4d300000, 0x4c580000, 0x4c540000, - 0x4c500000, 0x5832580a, 0x812e59c0, 0x05bc0af7, - 0x58300002, 0x82000580, 0x00000100, 0x05020021, - 0x5830000b, 0x5832600c, 0x81300d80, 0x05020011, - 0x0501f82d, 0x05020015, 0x592c0811, 0x90040c03, - 0x80040904, 0x4004b000, 0x4200a000, 0x0010e06a, - 0x0501fefa, 0x05000002, 0x9050a402, 0x4050a800, - 0x0521fdea, 0x600011b8, 0x0501fe7f, 0x0501f007, - 0x4803c857, 0x4933c857, 0x813261c0, 0x05000003, - 0x0501f819, 0x05fc0f87, 0x5c00a000, 0x5c00a800, - 0x5c00b000, 0x5c026000, 0x5c025800, 0x1c01f000, - 0x5830000b, 0x5832600c, 0x4a006002, 0x00000100, - 0x4803c857, 0x4933c857, 0x81300d80, 0x05fe07ed, - 0x0501f809, 0x05fe07f1, 0x4803c857, 0x05f9fea3, - 0x05be0ac6, 0x640a5a0a, 0x0001fb82, 0x0505f8b9, - 0x05fdf7ea, 0x05fdf9fa, 0x4df00000, 0x598c000b, - 0x81300580, 0x05020008, 0x598c0003, 0x81300580, - 0x05020005, 0x5c03e000, 0x05fc09e2, 0x80000580, - 0x1c01f000, 0x4803c857, 0x5c03e000, 0x05fc09dd, - 0x90000541, 0x1c01f000, 0x59300403, 0xb0000ca0, - 0x05be1aae, 0x83340d80, 0x00110210, 0x0502000a, - 0x5930082a, 0x48066802, 0x82041500, 0x00ffff00, - 0x05020004, 0x800408d0, 0x48066a12, 0x0501f002, - 0x497a6a12, 0x4803c857, 0x0c01f001, 0x00108c83, - 0x00108c9c, 0x00108cab, 0x00108dd2, 0x00108d99, - 0x00108d9d, 0x00108da9, 0x00108dbf, 0x00108daf, - 0x00108dbf, 0x00108df7, 0x00108dbf, 0x00108e36, - 0x00108dbf, 0x00108e41, 0x00108dbf, 0x00108daf, - 0x00108dbf, 0x00108e45, 0x00108b9b, 0x00108b9b, - 0x00108b9b, 0x00108b9b, 0x00108b9b, 0x00108b9b, - 0x00108b9b, 0x00108b9b, 0x00108b9b, 0x00108b9b, - 0x00108b9b, 0x00108ee4, 0x00108ef9, 0x00108f01, - 0x00108b9b, 0x00108f18, 0x00108da9, 0x00108b9b, - 0x00108da9, 0x00108dbf, 0x00108b9b, 0x00108cab, - 0x00108dd2, 0x00108b9b, 0x00108f60, 0x00108dbf, - 0x00108b9b, 0x00108f6e, 0x00108dbf, 0x00108b9b, - 0x00108daf, 0x00108c76, 0x00108b9c, 0x00108b9b, - 0x00108f8a, 0x00108fc0, 0x00109046, 0x00108b9b, - 0x00109054, 0x00108da7, 0x00109049, 0x00108b9b, - 0x00108f22, 0x00109089, 0x00108b9b, 0x00108b9b, - 0x00108b9b, 0x00108b9b, 0x00108baf, 0x00108c10, - 0x00108c1a, 0x00108b9b, 0x00108b9b, 0x00108b9b, - 0x00108c4c, 0x00108c54, 0x00108b9b, 0x00108b9b, - 0x00108bc0, 0x00108bea, 0x001090be, 0x001090f3, - 0x00109114, 0x00108b9b, 0x00108b9b, 0x00108b9b, - 0x001090e9, 0x0010906b, 0x00108f8a, 0x001092f9, - 0x00108b9b, 0x0010933a, 0x001092ef, 0x00109347, - 0x00108b9b, 0x00109362, 0x001092f5, 0x05bdfa3f, - 0x0501fab8, 0x59325809, 0x592c000d, 0x4801a006, - 0x592c000e, 0x4801a007, 0x592c000f, 0x4801a008, - 0x592c0010, 0x4801a009, 0x592c0011, 0x4801a00a, - 0x4979a00b, 0x592c080d, 0x82040d00, 0x00000fff, - 0x80040904, 0x600011b8, 0x0501f5cb, 0x4a026202, - 0x0000ffff, 0x0501faa3, 0x4d2c0000, 0x4a01a006, - 0x05000000, 0x59325809, 0x592c000d, 0x4801a007, - 0x592c000e, 0x4801a008, 0x592c000f, 0x4801a009, - 0x5c025800, 0x60100800, 0x600011b8, 0x0501f5ba, - 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000, - 0x0501fa90, 0x5930040d, 0x90000503, 0x05000006, - 0x90000583, 0x80000000, 0x58d00802, 0x80040540, - 0x4801a002, 0x59325809, 0x4200a800, 0x0010e06a, - 0x592cb209, 0x9058b403, 0x8058b104, 0x912ca40a, - 0x0521fcd3, 0x40580000, 0x8054ac00, 0x592c0001, - 0x80000540, 0x05000003, 0x40025800, 0x05fdf7f5, - 0x4200a000, 0x0010e06a, 0x4050a800, 0x5930b40d, - 0x9058b403, 0x8058b104, 0x40580800, 0x0521fcff, - 0x600011b8, 0x5c025800, 0x5c00a800, 0x5c00a000, - 0x5c00b000, 0x0501f590, 0x4c580000, 0x4c500000, - 0x4c540000, 0x4d2c0000, 0x42034800, 0x0010e063, - 0x0501fa72, 0x59325809, 0x592c0805, 0x4807c857, - 0x40041000, 0x80040904, 0x90081503, 0x05000007, - 0x80040800, 0x90081583, 0x80081000, 0x58d00002, - 0x80080540, 0x4801a002, 0x4a025809, 0x02000000, - 0x90d0ac06, 0x592cb011, 0x912ca409, 0x0521fca4, - 0x40580000, 0x8054ac00, 0x592e5801, 0x41780000, - 0x812e5d40, 0x05fe07f8, 0x600011b8, 0x5c025800, - 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x0501f56a, - 0x0501fa44, 0x4a01a006, 0x78000000, 0x5930001e, - 0x840001c0, 0x4801a407, 0x4979a207, 0x60080800, - 0x600011b8, 0x0501f560, 0x4c580000, 0x4c540000, - 0x4c500000, 0x0501fa45, 0x4a01a006, 0x02000000, - 0x5932481d, 0x59240001, 0x4801a008, 0x59240002, - 0x4801a009, 0x59240003, 0x4801a00a, 0x59240004, - 0x4801a00b, 0x5930001e, 0x82000d80, 0x0000e000, - 0x0500000e, 0x82000d80, 0x0000df00, 0x05000004, - 0x6441a407, 0x60180800, 0x0501f015, 0x42001800, - 0x0010dd46, 0x05bdfceb, 0x600001be, 0x4200a000, - 0x0010dd46, 0x0501f007, 0x42001800, 0x0010dd53, - 0x05bdfce4, 0x600001c0, 0x4200a000, 0x0010dd53, - 0x90000550, 0x4801a407, 0x64d1a207, 0x6034b000, - 0x90d0ac0c, 0x0521fc62, 0x604c0800, 0x600011b8, - 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x0501f52e, - 0x0501fa08, 0x4a01a006, 0x63000028, 0x5930001e, - 0x4801a007, 0x60080800, 0x600011b8, 0x0501f526, - 0x0501fa0e, 0x41780000, 0x41780800, 0x42002000, - 0x00080000, 0x0c01f80e, 0x80000000, 0x80040800, - 0x60301000, 0x82080540, 0x02000000, 0x4801a006, - 0x800408e0, 0x5930001e, 0x80040540, 0x4801a007, - 0x80080904, 0x600011b8, 0x0501f513, 0x00108c6c, - 0x00108c6e, 0x00108c70, 0x00108c72, 0x00108c74, - 0x4811a008, 0x1c01f000, 0x4811a009, 0x1c01f000, - 0x4811a00a, 0x1c01f000, 0x4811a00b, 0x1c01f000, - 0x4811a00c, 0x1c01f000, 0x4a02600a, 0x00110210, - 0x59a8003d, 0x82000500, 0x000000ff, 0x800000d0, - 0x42026800, 0x00110210, 0x48026a12, 0x0501fa3c, - 0x41780800, 0x600010b8, 0x0501f4f7, 0x0501f9d1, - 0x4a01a006, 0x52000000, 0x4979a007, 0x5932481d, - 0x59240400, 0x90000503, 0x05000005, 0x59240400, - 0x80000110, 0x05c5fe55, 0x4805a007, 0x59240001, - 0x4801a008, 0x59240002, 0x4801a009, 0x59240003, - 0x4801a00a, 0x59240004, 0x4801a00b, 0x59240005, - 0x4801a00c, 0x601c0800, 0x600011b8, 0x0501f4de, - 0x4a026202, 0x0000ffff, 0x0501f9b6, 0x4a01a006, - 0x05000000, 0x5932481d, 0x59240005, 0x4801a007, - 0x59240001, 0x59240802, 0x4801a008, 0x4805a009, - 0x60100800, 0x600011b8, 0x0501f4cf, 0x4a026202, - 0x0000ffff, 0x0501f9a7, 0x4d3c0000, 0x417a7800, - 0x05e5fc43, 0x5c027800, 0x4a01a006, 0x03000000, - 0x59340403, 0x82000580, 0x000007fe, 0x0502008e, - 0x4a01a006, 0x04000000, 0x59a80249, 0x8c000506, - 0x05000004, 0x5930081d, 0x58040408, 0x4801a001, - 0x5934000a, 0x84000500, 0x4802680a, 0x59a80249, - 0x8c000508, 0x05000010, 0x59a8004d, 0x4801a007, - 0x59a8004e, 0x82000500, 0x07deffff, 0x599c0818, - 0x8c040516, 0x05000002, 0x8400056a, 0x4801a008, - 0x4a01a009, 0x00002710, 0x59a80050, 0x4801a00a, - 0x0501f046, 0x59a8004d, 0x59a81249, 0x8c080506, - 0x05000003, 0x82000500, 0xffff0000, 0x4801a007, - 0x05e9fbd2, 0x0502000e, 0x59300c03, 0xb0041591, - 0x0500000b, 0x59a80ccc, 0x8c04050a, 0x05020008, - 0x497b8880, 0x82000500, 0x0000ffff, 0x4c000000, - 0x05c5fe27, 0x5c000000, 0x48038880, 0x59a8004e, - 0x05e9fbc2, 0x05020006, 0x82000500, 0xb7ffffff, - 0x82000540, 0x80000000, 0x0501f003, 0x82000500, - 0x3fffffff, 0x599c0818, 0x8c040516, 0x05000002, - 0x8400056a, 0x05ddfe1a, 0x05000008, 0x59a80ccc, - 0x8c040506, 0x05020005, 0x59a80a49, 0x8c080506, - 0x05020002, 0x8400057c, 0x8d0c0510, 0x05000014, - 0x59300c03, 0xb0041591, 0x05000011, 0x900415b1, - 0x0500000f, 0x4c580000, 0x4c500000, 0x4c540000, - 0x6010b000, 0x4200a000, 0x0010e50c, 0x90d0ac1f, - 0x4c000000, 0x0521fb96, 0x5c000000, 0x5c00a800, - 0x5c00a000, 0x5c00b000, 0x8400057a, 0x4801a008, - 0x4979a009, 0x4979a00a, 0x59240001, 0x59240802, - 0x4801a00b, 0x4805a00c, 0x59240003, 0x59240804, - 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010, - 0x4979a011, 0x4979a012, 0x599c0018, 0x8c000510, - 0x05000011, 0x59a80006, 0x8c00050a, 0x05000004, - 0x59a80249, 0x8c000508, 0x0502000b, 0x59a80051, - 0x84000576, 0x4801a013, 0x59a80052, 0x4801a014, - 0x59a80053, 0x4801a015, 0x59a80054, 0x4801a016, - 0x0501f005, 0x4979a013, 0x4979a014, 0x4979a015, - 0x4979a016, 0x59a80055, 0x84000576, 0x4801a017, - 0x59a80056, 0x4801a018, 0x4979a019, 0x4979a01a, - 0x0501f052, 0x05fdfd88, 0x59a8004d, 0x4801a007, - 0x4c640000, 0x4d2c0000, 0x59a8c84e, 0x050dff7e, - 0x0500000d, 0x0511fe00, 0x0502000b, 0x592c020b, - 0x8c00050e, 0x05000008, 0x8264cd00, 0x0000ffff, - 0x592c000d, 0x82000500, 0xffff0000, 0x8064cd40, - 0x0501f005, 0x59a80a49, 0x90040d30, 0x05000002, - 0x8464cd36, 0x4865a008, 0x5c025800, 0x5c00c800, - 0x59a8004f, 0x4801a009, 0x59a80050, 0x4801a00a, - 0x59240001, 0x59240802, 0x4801a00b, 0x4805a00c, - 0x59240003, 0x59240804, 0x4801a00d, 0x4805a00e, - 0x4979a00f, 0x4979a010, 0x4979a011, 0x4979a012, - 0x59340200, 0x8c000508, 0x05000005, 0x59a80051, - 0x8400057e, 0x48035051, 0x0501f00b, 0x599c0018, + 0x00108ed7, 0x50000000, 0x80040500, 0x1c01f000, + 0x59c80840, 0x82040d00, 0x000e0000, 0x83180400, + 0x00108edc, 0x50000000, 0x80040580, 0x1c01f000, + 0x00000210, 0x00000420, 0x00000840, 0x00001080, + 0x00002100, 0x00004000, 0x00008000, 0x00010000, + 0x00020000, 0x00040000, 0x00080000, 0x00100000, + 0x00200000, 0x00400000, 0x00800000, 0x00084000, + 0x00108000, 0x00210000, 0x00420000, 0x00840000, + 0x00000000, 0x00020000, 0x00040000, 0x00060000, + 0x00080000, 0x59900007, 0x800c0c80, 0x05021003, + 0x90000541, 0x0501f004, 0x80000000, 0x48032007, + 0x80000580, 0x1c01f000, 0x417a3000, 0x05fdffd5, + 0x05000005, 0x811a3000, 0x91180585, 0x05fe07fc, + 0x1c01f000, 0x81780080, 0x1c01f000, 0x480bc857, + 0x05fdfadd, 0x4df00000, 0x480b1800, 0x5c03e000, + 0x05fc0aca, 0x1c01f000, 0x4803c856, 0x05fdfad6, + 0x4df00000, 0x497b180b, 0x497b1801, 0x497b180c, + 0x497b180d, 0x497b180e, 0x598c0000, 0x90000583, + 0x05000006, 0x916c0582, 0x05020003, 0x64171800, + 0x0501f002, 0x64031800, 0x5c03e000, 0x05fc0ab7, + 0x1c01f000, 0x59300004, 0x8c00050c, 0x05020002, + 0x64066203, 0x1c01f000, 0x91180485, 0x05ba1f02, + 0x491bc857, 0x811b20c8, 0x83932400, 0x0000b037, + 0x8119b0c8, 0x82d9b400, 0x0000bf32, 0x811ba0ca, + 0x83d3a400, 0x00007600, 0x83180400, 0x00108f25, + 0x50034800, 0x811a28c2, 0x83162c00, 0x00006100, + 0x1c01f000, 0x00112216, 0x0011222f, 0x00112248, + 0x00112261, 0x0011227a, 0x4933c857, 0x59300407, + 0x90000c92, 0x05021015, 0x05011000, 0x0c01f001, + 0x00108f42, 0x00108fe8, 0x00109341, 0x001093af, + 0x00108fe8, 0x00109341, 0x001093af, 0x00108f42, + 0x00108fe8, 0x00108f42, 0x00108f42, 0x00108f42, + 0x00108f42, 0x00108f42, 0x00108f42, 0x00108f42, + 0x00108f46, 0x00108f46, 0x4803c857, 0x05fdfa8e, + 0x05fdf9e3, 0x05fdf27d, 0x42001000, 0x00112322, + 0x50081000, 0x4930100c, 0x58080002, 0x82000580, + 0x00000100, 0x0502003d, 0x59325809, 0x812e59c0, + 0x05b80ec5, 0x492fc856, 0x5932680a, 0x83340580, + 0x001141b4, 0x05000025, 0x592c040f, 0x82000500, + 0x0000e000, 0x05000003, 0x0501fbe0, 0x0501f002, + 0x0501fbd0, 0x592c040d, 0x82000500, 0x000000ff, + 0x90000583, 0x0500082a, 0x592c0011, 0x90000503, + 0x05000006, 0x90000583, 0x80000000, 0x58d00802, + 0x80040540, 0x4801a002, 0x42001000, 0x00112322, + 0x50081000, 0x4930100b, 0x492c100a, 0x90d00406, + 0x48001003, 0x592c0004, 0x48001006, 0x592c0011, + 0x48001005, 0x592c0012, 0x48001007, 0x592c0013, + 0x48001008, 0x0001f029, 0x592c080e, 0x48066802, + 0x82040500, 0x00ffff00, 0x05000007, 0x497a6a12, + 0x59a81040, 0x82081500, 0x00ffff00, 0x80080580, + 0x05fe07d2, 0x82040d00, 0x000000ff, 0x800408d0, + 0x48066a12, 0x05fdf7cd, 0x1c01f000, 0x59a8024c, + 0x8c000508, 0x0500000c, 0x59a80050, 0x82000500, + 0x0000ffff, 0x59c40880, 0x80040d80, 0x05000006, + 0x497b8880, 0x4c000000, 0x05c5fbf9, 0x5c000000, + 0x48038880, 0x1c01f000, 0x4d2c0000, 0x4d300000, + 0x4c580000, 0x4c540000, 0x4c500000, 0x5832580a, + 0x812e59c0, 0x05b80e74, 0x58300002, 0x82000580, + 0x00000100, 0x05020021, 0x5830000b, 0x5832600c, + 0x81300d80, 0x05020011, 0x0501f82d, 0x05020015, + 0x592c0811, 0x90040c03, 0x80040904, 0x4004b000, + 0x4200a000, 0x00112004, 0x0501ff2c, 0x05000002, + 0x9050a402, 0x4050a800, 0x0525f8a7, 0x600011b8, + 0x0501feb1, 0x0501f007, 0x4803c857, 0x4933c857, + 0x813261c0, 0x05000003, 0x0501f819, 0x05fc0f87, + 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x5c026000, + 0x5c025800, 0x1c01f000, 0x5830000b, 0x5832600c, + 0x4a006002, 0x00000100, 0x4803c857, 0x4933c857, + 0x81300d80, 0x05fe07ed, 0x0501f809, 0x05fe07f1, + 0x4803c857, 0x05f9fe9e, 0x05ba0e43, 0x640a5a0a, + 0x0001fba8, 0x0505f910, 0x05fdf7ea, 0x05fdf9fa, + 0x4df00000, 0x598c000b, 0x81300580, 0x05020008, + 0x598c0003, 0x81300580, 0x05020005, 0x5c03e000, + 0x05fc09e2, 0x80000580, 0x1c01f000, 0x4803c857, + 0x5c03e000, 0x05fc09dd, 0x90000541, 0x1c01f000, + 0x59300403, 0xb0000ca0, 0x05ba1e2b, 0x83340d80, + 0x001141b4, 0x0502000a, 0x5930082a, 0x48066802, + 0x82041500, 0x00ffff00, 0x05020004, 0x800408d0, + 0x48066a12, 0x0501f002, 0x497a6a12, 0x4803c857, + 0x0c01f001, 0x00109148, 0x00109161, 0x00109170, + 0x0010929a, 0x00109261, 0x00109265, 0x00109271, + 0x00109287, 0x00109277, 0x00109287, 0x001092c7, + 0x00109287, 0x0010930e, 0x00109287, 0x00109319, + 0x00109287, 0x00109277, 0x00109287, 0x0010931d, + 0x00109060, 0x00109060, 0x00109060, 0x00109060, + 0x00109060, 0x00109060, 0x00109060, 0x00109060, + 0x00109060, 0x00109060, 0x00109060, 0x001093c8, + 0x001093dd, 0x001093e5, 0x00109060, 0x001093fc, + 0x00109271, 0x00109060, 0x00109271, 0x00109287, + 0x00109060, 0x00109170, 0x0010929a, 0x00109060, + 0x00109444, 0x00109287, 0x00109060, 0x00109452, + 0x00109287, 0x00109060, 0x00109277, 0x0010913b, + 0x00109061, 0x00109060, 0x0010946e, 0x001094a4, + 0x00109530, 0x00109060, 0x0010953e, 0x0010926f, + 0x00109533, 0x00109060, 0x00109406, 0x00109573, + 0x00109060, 0x00109060, 0x00109060, 0x00109060, + 0x00109074, 0x001090d5, 0x001090df, 0x00109060, + 0x00109060, 0x00109060, 0x00109111, 0x00109119, + 0x00109060, 0x00109060, 0x00109085, 0x001090af, + 0x001095a8, 0x001095dd, 0x001095fe, 0x00109060, + 0x00109060, 0x00109060, 0x001095d3, 0x00109555, + 0x0010946e, 0x001097ed, 0x00109060, 0x0010982e, + 0x001097e3, 0x0010983b, 0x00109060, 0x00109856, + 0x001097e9, 0x00109060, 0x00109060, 0x00109060, + 0x00109060, 0x00109060, 0x00109060, 0x00109060, + 0x05b9fdb5, 0x0501facb, 0x59325809, 0x592c000d, + 0x4801a006, 0x592c000e, 0x4801a007, 0x592c000f, + 0x4801a008, 0x592c0010, 0x4801a009, 0x592c0011, + 0x4801a00a, 0x4979a00b, 0x592c080d, 0x82040d00, + 0x00000fff, 0x80040904, 0x600011b8, 0x0501f5f6, + 0x4a026202, 0x0000ffff, 0x0501fab6, 0x4d2c0000, + 0x4a01a006, 0x05000000, 0x59325809, 0x592c000d, + 0x4801a007, 0x592c000e, 0x4801a008, 0x592c000f, + 0x4801a009, 0x5c025800, 0x60100800, 0x600011b8, + 0x0501f5e5, 0x4c580000, 0x4c500000, 0x4c540000, + 0x4d2c0000, 0x0501faa3, 0x5930040d, 0x90000503, + 0x05000006, 0x90000583, 0x80000000, 0x58d00802, + 0x80040540, 0x4801a002, 0x59325809, 0x4200a800, + 0x00112004, 0x592cb209, 0x9058b403, 0x8058b104, + 0x912ca40a, 0x0521ff89, 0x40580000, 0x8054ac00, + 0x592c0001, 0x80000540, 0x05000003, 0x40025800, + 0x05fdf7f5, 0x4200a000, 0x00112004, 0x4050a800, + 0x5930b40d, 0x9058b403, 0x8058b104, 0x40580800, + 0x0521ffb5, 0x600011b8, 0x5c025800, 0x5c00a800, + 0x5c00a000, 0x5c00b000, 0x0501f5bb, 0x4c580000, + 0x4c500000, 0x4c540000, 0x4d2c0000, 0x42034800, + 0x00111ffd, 0x0501fa85, 0x59325809, 0x592c0805, + 0x4807c857, 0x40041000, 0x80040904, 0x90081503, + 0x05000007, 0x80040800, 0x90081583, 0x80081000, + 0x58d00002, 0x80080540, 0x4801a002, 0x4a025809, + 0x02000000, 0x90d0ac06, 0x592cb011, 0x912ca409, + 0x0521ff5a, 0x40580000, 0x8054ac00, 0x592e5801, + 0x41780000, 0x812e5d40, 0x05fe07f8, 0x600011b8, + 0x5c025800, 0x5c00a800, 0x5c00a000, 0x5c00b000, + 0x0501f595, 0x0501fa57, 0x4a01a006, 0x78000000, + 0x5930001e, 0x840001c0, 0x4801a407, 0x4979a207, + 0x60080800, 0x600011b8, 0x0501f58b, 0x4c580000, + 0x4c540000, 0x4c500000, 0x0501fa58, 0x4a01a006, + 0x02000000, 0x5932481d, 0x59240001, 0x4801a008, + 0x59240002, 0x4801a009, 0x59240003, 0x4801a00a, + 0x59240004, 0x4801a00b, 0x5930001e, 0x82000d80, + 0x0000e000, 0x0500000e, 0x82000d80, 0x0000df00, + 0x05000004, 0x6441a407, 0x60180800, 0x0501f015, + 0x42001800, 0x00111ce0, 0x05bdf85d, 0x600001be, + 0x4200a000, 0x00111ce0, 0x0501f007, 0x42001800, + 0x00111ced, 0x05bdf856, 0x600001c0, 0x4200a000, + 0x00111ced, 0x90000550, 0x4801a407, 0x64d1a207, + 0x6034b000, 0x90d0ac0c, 0x0521ff18, 0x604c0800, + 0x600011b8, 0x5c00a000, 0x5c00a800, 0x5c00b000, + 0x0501f559, 0x0501fa1b, 0x4a01a006, 0x63000028, + 0x5930001e, 0x4801a007, 0x60080800, 0x600011b8, + 0x0501f551, 0x0501fa21, 0x41780000, 0x41780800, + 0x42002000, 0x00080000, 0x0c01f80e, 0x80000000, + 0x80040800, 0x60301000, 0x82080540, 0x02000000, + 0x4801a006, 0x800408e0, 0x5930001e, 0x80040540, + 0x4801a007, 0x80080904, 0x600011b8, 0x0501f53e, + 0x00109131, 0x00109133, 0x00109135, 0x00109137, + 0x00109139, 0x4811a008, 0x1c01f000, 0x4811a009, + 0x1c01f000, 0x4811a00a, 0x1c01f000, 0x4811a00b, + 0x1c01f000, 0x4811a00c, 0x1c01f000, 0x4a02600a, + 0x001141b4, 0x59a80040, 0x82000500, 0x000000ff, + 0x800000d0, 0x42026800, 0x001141b4, 0x48026a12, + 0x0501fa5b, 0x41780800, 0x600010b8, 0x0501f522, + 0x0501f9e4, 0x4a01a006, 0x52000000, 0x4979a007, + 0x5932481d, 0x59240400, 0x90000503, 0x05000005, + 0x59240400, 0x80000110, 0x05c5fa10, 0x4805a007, + 0x59240001, 0x4801a008, 0x59240002, 0x4801a009, + 0x59240003, 0x4801a00a, 0x59240004, 0x4801a00b, + 0x59240005, 0x4801a00c, 0x601c0800, 0x600011b8, + 0x0501f509, 0x4a026202, 0x0000ffff, 0x0501f9c9, + 0x4a01a006, 0x05000000, 0x5932481d, 0x59240005, + 0x4801a007, 0x59240001, 0x59240802, 0x4801a008, + 0x4805a009, 0x60100800, 0x600011b8, 0x0501f4fa, + 0x4a026202, 0x0000ffff, 0x0501f9ba, 0x4d3c0000, + 0x417a7800, 0x05e5f9f0, 0x5c027800, 0x4a01a006, + 0x03000000, 0x59340403, 0x82000580, 0x000007fe, + 0x0502008e, 0x4a01a006, 0x04000000, 0x59a8024c, + 0x8c000506, 0x05000004, 0x5930081d, 0x58040408, + 0x4801a001, 0x5934000a, 0x84000500, 0x4802680a, + 0x59a8024c, 0x8c000508, 0x05000010, 0x59a80050, + 0x4801a007, 0x59a80051, 0x82000500, 0x07deffff, + 0x599c0818, 0x8c040516, 0x05000002, 0x8400056a, + 0x4801a008, 0x4a01a009, 0x00002710, 0x59a80053, + 0x4801a00a, 0x0501f046, 0x59a80050, 0x59a8124c, + 0x8c080506, 0x05000003, 0x82000500, 0xffff0000, + 0x4801a007, 0x05e9f9f7, 0x0502000e, 0x59300c03, + 0xb0041591, 0x0500000b, 0x59a80cd1, 0x8c04050a, + 0x05020008, 0x497b8880, 0x82000500, 0x0000ffff, + 0x4c000000, 0x05c5f9e2, 0x5c000000, 0x48038880, + 0x59a80051, 0x05e9f9e7, 0x05020006, 0x82000500, + 0xb7ffffff, 0x82000540, 0x80000000, 0x0501f003, + 0x82000500, 0x3fffffff, 0x599c0818, 0x8c040516, + 0x05000002, 0x8400056a, 0x05ddfafb, 0x05000008, + 0x59a80cd1, 0x8c040506, 0x05020005, 0x59a80a4c, + 0x8c080506, 0x05020002, 0x8400057c, 0x8d0c0510, + 0x05000014, 0x59300c03, 0xb0041591, 0x05000011, + 0x900415b1, 0x0500000f, 0x4c580000, 0x4c500000, + 0x4c540000, 0x6010b000, 0x4200a000, 0x001124b0, + 0x90d0ac1f, 0x4c000000, 0x0521fe4c, 0x5c000000, + 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x8400057a, + 0x4801a008, 0x4979a009, 0x4979a00a, 0x59240001, + 0x59240802, 0x4801a00b, 0x4805a00c, 0x59240003, + 0x59240804, 0x4801a00d, 0x4805a00e, 0x4979a00f, + 0x4979a010, 0x4979a011, 0x4979a012, 0x599c0018, 0x8c000510, 0x05000011, 0x59a80006, 0x8c00050a, - 0x05000005, 0x59340c03, 0x82040480, 0x000007f0, - 0x0500100a, 0x59a80051, 0x4801a013, 0x59a80052, - 0x4801a014, 0x59a80053, 0x4801a015, 0x59a80054, + 0x05000004, 0x59a8024c, 0x8c000508, 0x0502000b, + 0x59a80054, 0x84000576, 0x4801a013, 0x59a80055, + 0x4801a014, 0x59a80056, 0x4801a015, 0x59a80057, 0x4801a016, 0x0501f005, 0x4979a013, 0x4979a014, - 0x4979a015, 0x4979a016, 0x59a80055, 0x4801a017, - 0x59a80056, 0x4801a018, 0x59a80057, 0x4801a019, - 0x59a80058, 0x4801a01a, 0x60740800, 0x600011b8, - 0x0501f3e1, 0x0501f8bb, 0x4a01a006, 0x50000000, - 0x05fdf7a9, 0x0501f8b7, 0x4a01a006, 0x21100014, + 0x4979a015, 0x4979a016, 0x59a80058, 0x84000576, + 0x4801a017, 0x59a80059, 0x4801a018, 0x4979a019, + 0x4979a01a, 0x0501f055, 0x05fdfd81, 0x59a80050, + 0x4801a007, 0x4c640000, 0x4d2c0000, 0x59a8c851, + 0x0511f842, 0x0500000d, 0x0511fee1, 0x0502000b, + 0x592c020b, 0x8c00050e, 0x05000008, 0x8264cd00, + 0x0000ffff, 0x592c000d, 0x82000500, 0xffff0000, + 0x8064cd40, 0x0501f005, 0x59a80a4c, 0x90040d30, + 0x05000002, 0x8464cd36, 0x4865a008, 0x5c025800, + 0x5c00c800, 0x59a80052, 0x4801a009, 0x59a80053, + 0x4801a00a, 0x59240001, 0x59240802, 0x4801a00b, + 0x4805a00c, 0x59240003, 0x59240804, 0x4801a00d, + 0x4805a00e, 0x4979a00f, 0x4979a010, 0x4979a011, + 0x4979a012, 0x59340200, 0x8c000508, 0x05000005, + 0x59a80054, 0x8400057e, 0x48035054, 0x0501f00e, + 0x599c0018, 0x8c000510, 0x05000014, 0x59a80006, + 0x8c00050a, 0x05000008, 0x59340c03, 0x82040480, + 0x000007f0, 0x0500100d, 0x82040480, 0x00000800, + 0x0502100a, 0x59a80054, 0x4801a013, 0x59a80055, + 0x4801a014, 0x59a80056, 0x4801a015, 0x59a80057, + 0x4801a016, 0x0501f005, 0x4979a013, 0x4979a014, + 0x4979a015, 0x4979a016, 0x59a80058, 0x4801a017, + 0x59a80059, 0x4801a018, 0x59a8005a, 0x4801a019, + 0x59a8005b, 0x4801a01a, 0x60740800, 0x600011b8, + 0x0501f409, 0x0501f8cb, 0x4a01a006, 0x50000000, + 0x05fdf7a6, 0x0501f8c7, 0x4a01a006, 0x21100014, 0x4979a007, 0x4979a008, 0x4979a009, 0x4979a00a, - 0x60140800, 0x600011b8, 0x0501f3d3, 0x0501f8b4, - 0x0501f002, 0x0501f8b9, 0x4a01a006, 0x02000000, - 0x60040800, 0x600011b8, 0x0501f3cb, 0x0501f8b3, + 0x60140800, 0x600011b8, 0x0501f3fb, 0x0501f8c4, + 0x0501f002, 0x0501f8c9, 0x4a01a006, 0x02000000, + 0x60040800, 0x600011b8, 0x0501f3f3, 0x0501f8c3, 0x4a01a006, 0x02000000, 0x59300403, 0x900005b1, - 0x05000002, 0x05fdf790, 0x0501fc38, 0x05000004, - 0x4a01a001, 0x00fffffe, 0x05fdf709, 0x81a40800, - 0x4a000801, 0x00fffffe, 0x05fdf705, 0x0501f8a3, + 0x05000002, 0x05fdf78d, 0x0501fc60, 0x05000004, + 0x4a01a001, 0x00fffffe, 0x05fdf706, 0x81a40800, + 0x4a000801, 0x00fffffe, 0x05fdf702, 0x0501f8b3, 0x4a01a006, 0x01000000, 0x5930041c, 0x80000540, 0x05000003, 0x4801a407, 0x0501f002, 0x640da407, 0x5930021c, 0x80000540, 0x05000003, 0x4801a207, 0x0501f003, 0x4a01a207, 0x00002a00, 0x60080800, - 0x600011b8, 0x0501f3a8, 0x4a026202, 0x0000ffff, - 0x0501f880, 0x4a01a406, 0x00002010, 0x6451a206, + 0x600011b8, 0x0501f3d0, 0x4a026202, 0x0000ffff, + 0x0501f890, 0x4a01a406, 0x00002010, 0x6451a206, 0x4a01a407, 0x00000800, 0x4a01a207, 0x00002000, 0x60000008, 0x59a80807, 0x8c04050c, 0x05000002, - 0x80000580, 0x5932481d, 0x59240c00, 0x8c040508, + 0x80000580, 0x59300a16, 0x8c040514, 0x05000006, + 0x5930081e, 0x90040d30, 0x05000003, 0x80040540, + 0x0501f009, 0x5932481d, 0x59240c00, 0x8c040508, 0x05000004, 0x90000560, 0x8c04050a, 0x05020002, 0x90000550, 0x90000542, 0x5934080a, 0x8c040514, 0x05000005, 0x82040d00, 0x00000380, 0x80040540, 0x0501f006, 0x599c0818, 0x8c040518, 0x05000003, - 0x82000540, 0x00000380, 0x0501f03c, 0x0501f86b, + 0x82000540, 0x00000380, 0x0501f044, 0x0501f873, 0x4a01a406, 0x00000210, 0x6451a206, 0x4a01a407, 0x00000800, 0x5934000a, 0x8c000516, 0x05000013, 0x59340c05, 0x90040530, 0x05000013, 0x59340a05, @@ -9129,76 +9437,81 @@ static const uint32_t isp_2500_risc_code[] = { 0x00000400, 0x0501f006, 0x4a01a207, 0x00000700, 0x0501f003, 0x4a01a207, 0x00000800, 0x60000008, 0x59a80807, 0x8c04050c, 0x05000002, 0x80000580, + 0x59300a16, 0x8c040510, 0x05000006, 0x5930081e, + 0x90040d30, 0x05000003, 0x80040540, 0x0501f009, 0x5932481d, 0x59240c00, 0x8c040508, 0x05000004, 0x90000560, 0x8c04050a, 0x05020002, 0x90000550, 0x90000542, 0x59340a00, 0x8c04050e, 0x0500000b, 0x84000550, 0x599c1017, 0x8c08050a, 0x05020004, 0x8c04050a, 0x05000002, 0x8400054e, 0x8c04051c, 0x05000002, 0x84000552, 0x4801a20a, 0x60140800, - 0x600011b8, 0x0501f344, 0x0501f82c, 0x4a01a006, + 0x600011b8, 0x0501f35c, 0x0501f82c, 0x4a01a006, 0x02100014, 0x4a01a007, 0x00000100, 0x4979a008, 0x4979a009, 0x4979a00a, 0x60140800, 0x600011b8, - 0x0501f339, 0x0501f821, 0x4a01a006, 0x02000000, - 0x05fdf642, 0x4933c857, 0x0501f81c, 0x4a01a006, + 0x0501f351, 0x0501f821, 0x4a01a006, 0x02000000, + 0x05fdf62f, 0x4933c857, 0x0501f81c, 0x4a01a006, 0x01000000, 0x642da407, 0x60080800, 0x600011b8, - 0x0501f32d, 0x42005000, 0x32000000, 0x42006000, - 0x08290000, 0x41786800, 0x41787800, 0x0501f2e9, + 0x0501f345, 0x42005000, 0x32000000, 0x42006000, + 0x08290000, 0x41786800, 0x41787800, 0x0501f2fb, 0x42005000, 0x22000000, 0x42006000, 0x01290000, - 0x41786800, 0x41787800, 0x0501f2e2, 0x42005000, + 0x41786800, 0x41787800, 0x0501f2f4, 0x42005000, 0x33000000, 0x42006000, 0x08980000, 0x41786800, - 0x41787800, 0x0501f2db, 0x42005000, 0x23000000, + 0x41787800, 0x0501f2ed, 0x42005000, 0x23000000, 0x42006000, 0x01980000, 0x41786800, 0x41787800, - 0x0501f2d4, 0x59300403, 0x82000c80, 0x00000085, - 0x05b81f6e, 0x82000c80, 0x00000093, 0x05ba1f6b, - 0x82000480, 0x00000085, 0x0c01f001, 0x00108e82, - 0x00108e81, 0x00108e81, 0x00108e81, 0x00108e81, - 0x00108e81, 0x00108e82, 0x00108e81, 0x00108e81, - 0x00108e81, 0x00108e81, 0x00108e81, 0x00108e81, - 0x00108e89, 0x05b9ff59, 0x4933c857, 0x42034800, - 0x0010e063, 0x0501f836, 0x41780800, 0x600010b8, - 0x0501f2f1, 0x4d2c0000, 0x59325809, 0x4933c857, - 0x492fc857, 0x812e59c0, 0x05b80f4c, 0x59340a12, - 0x82040d00, 0x0000ff00, 0x592c000e, 0x82000500, + 0x0501f2e6, 0x59300403, 0x82000c80, 0x00000085, + 0x05b81ad1, 0x82000c80, 0x00000093, 0x05ba1ace, + 0x82000480, 0x00000085, 0x0c01f001, 0x0010935a, + 0x00109359, 0x00109359, 0x00109359, 0x00109359, + 0x00109359, 0x0010935a, 0x00109359, 0x00109359, + 0x00109359, 0x00109359, 0x00109359, 0x00109359, + 0x00109361, 0x05b9fabc, 0x4933c857, 0x42034800, + 0x00111ffd, 0x0501f842, 0x41780800, 0x600010b8, + 0x0501f309, 0x4d2c0000, 0x59325809, 0x4933c857, + 0x492fc857, 0x812e59c0, 0x05b80aaf, 0x41780800, + 0x05e9f830, 0x0500000d, 0x592c180d, 0x820c0500, + 0x00ffff00, 0x05000006, 0x59a81040, 0x82081500, + 0x00ffff00, 0x80080580, 0x05020004, 0x820c0d00, + 0x000000ff, 0x800408d0, 0x592c000e, 0x82000500, 0x000000ff, 0x900001c0, 0x80040540, 0x592c0c0b, 0x82040d00, 0x0000f000, 0x82040d80, 0x00003000, 0x05020003, 0x90000570, 0x0501f002, 0x90000551, - 0x44034800, 0x81a5a000, 0x0501fb4c, 0x05020b51, + 0x44034800, 0x81a5a000, 0x0501fb58, 0x05020b5d, 0x60241000, 0x600c0800, 0x592c000d, 0x82000500, 0xff000000, 0x82001d80, 0x84000000, 0x05000006, - 0x82001d80, 0x85000000, 0x05ba0f2c, 0x601c1000, + 0x82001d80, 0x85000000, 0x05ba0a83, 0x601c1000, 0x60040800, 0x912c1c0d, 0x500c0000, 0x4401a000, 0x800c1800, 0x80d1a000, 0x80081040, 0x05fe07fb, - 0x600011b8, 0x5c025800, 0x0501f2bf, 0x42005000, + 0x600011b8, 0x5c025800, 0x0501f2cb, 0x42005000, 0x81000000, 0x42006000, 0x00090000, 0x41786800, 0x41787800, 0x59301407, 0x90081585, 0x05020003, 0x42006000, 0x00890000, 0x59301416, 0x8c08051a, - 0x05000002, 0x60047800, 0x0501f272, 0x59300403, - 0xb0000c93, 0x05ba1f0d, 0xb000048b, 0x05b81f0b, + 0x05000002, 0x60047800, 0x0501f278, 0x59300403, + 0xb0000c93, 0x05ba1a64, 0xb000048b, 0x05b81a62, 0x5932680a, 0x59368c03, 0x4803c857, 0x0c01f001, - 0x00108f39, 0x00108f41, 0x00108f49, 0x00108f51, - 0x00108edc, 0x00108edc, 0x00108edc, 0x00108f31, - 0x05b9fefe, 0x42005000, 0x06000000, 0x42006000, - 0x08290000, 0x41786800, 0x41787800, 0x0501f259, - 0x4933c857, 0x05fdff6f, 0x4a01a006, 0x12000000, + 0x0010941d, 0x00109425, 0x0010942d, 0x00109435, + 0x001093c0, 0x001093c0, 0x001093c0, 0x00109415, + 0x05b9fa55, 0x42005000, 0x06000000, 0x42006000, + 0x08290000, 0x41786800, 0x41787800, 0x0501f25f, + 0x4933c857, 0x05fdff63, 0x4a01a006, 0x12000000, 0x59300407, 0x90000584, 0x05020003, 0x59340002, 0x0501f003, 0x5932481d, 0x59240005, 0x82000500, 0x00ffffff, 0x4801a007, 0x5930041b, 0x4801a408, 0x5930021b, 0x4801a208, 0x600c0800, 0x600011b8, - 0x0501f281, 0x05fdff5b, 0x4a01a006, 0x0f000000, + 0x0501f28d, 0x05fdff4f, 0x4a01a006, 0x0f000000, 0x5930001e, 0x4801a007, 0x60080800, 0x600011b8, - 0x0501f279, 0x05fdff61, 0x4a01a006, 0x02000000, + 0x0501f285, 0x05fdff55, 0x4a01a006, 0x02000000, 0x59c40085, 0x59880804, 0x80040c00, 0x48071004, 0x497b8885, 0x59880000, 0x4801a007, 0x59880001, 0x4801a008, 0x59880002, 0x4801a009, 0x59880003, 0x4801a00a, 0x59880004, 0x4801a00b, 0x59880005, - 0x4801a00c, 0x601c0800, 0x600011b8, 0x0501f262, - 0x4a026202, 0x0000ffff, 0x05fdff3a, 0x4a01a006, + 0x4801a00c, 0x601c0800, 0x600011b8, 0x0501f26e, + 0x4a026202, 0x0000ffff, 0x05fdff2e, 0x4a01a006, 0x62000000, 0x5930001e, 0x4801a007, 0x60080800, - 0x600011b8, 0x0501f258, 0x05fdff32, 0x59300809, + 0x600011b8, 0x0501f264, 0x05fdff26, 0x59300809, 0x4c500000, 0x4c540000, 0x4c580000, 0x9004a40e, - 0x5930b01e, 0x90d0ac06, 0x0521f97d, 0x5930081e, + 0x5930b01e, 0x90d0ac06, 0x0521fc14, 0x5930081e, 0x600011b8, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x0501f249, 0x05fdffac, 0x59300019, 0x4801a006, + 0x0501f255, 0x05fdffac, 0x59300019, 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008, 0x00001000, 0x0501f020, 0x05fdffa4, 0x59300019, 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008, 0x00004000, @@ -9209,157 +9522,160 @@ static const uint32_t isp_2500_risc_code[] = { 0x0501f008, 0x05fdff8c, 0x59300019, 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008, 0x00000200, 0x4979a009, 0x4979a00a, 0x4979a00b, 0x4979a00c, - 0x4979a00d, 0x60200800, 0x600011b8, 0x0501f21a, - 0x05fdff02, 0x4a01a006, 0x02000014, 0x4979a407, - 0x4979a207, 0x59a8005f, 0x4801a008, 0x59a80060, + 0x4979a00d, 0x60200800, 0x600011b8, 0x0501f226, + 0x05fdfef6, 0x4a01a006, 0x02000014, 0x4979a407, + 0x4979a207, 0x59a80062, 0x4801a008, 0x59a80063, 0x4801a009, 0x4a01a00a, 0x00047878, 0x60140800, - 0x600011b8, 0x0501f20c, 0x05fdfef4, 0x4a01a006, + 0x600011b8, 0x0501f218, 0x05fdfee8, 0x4a01a006, 0x02140018, 0x4a01a407, 0x00000800, 0x5930001e, 0x82000d00, 0xff000000, 0x900409c0, 0x4805a207, 0x82000500, 0x00ffffff, 0x4801a00a, 0x4979a408, 0x4979a208, 0x4979a409, 0x4979a209, 0x59a80006, 0x8c000500, 0x05000005, 0x4a01a006, 0x02100014, 0x60140800, 0x0501f003, 0x4979a00b, 0x60180800, - 0x600011b8, 0x0501f1f0, 0x4933c857, 0x4937c857, - 0x4d1c0000, 0x60d40800, 0x0511f988, 0x05020025, + 0x600011b8, 0x0501f1fc, 0x4933c857, 0x4937c857, + 0x4d1c0000, 0x60d40800, 0x0511fa3c, 0x05020025, 0x59300017, 0x591c0817, 0x80040580, 0x05020021, - 0x05fdfec0, 0x4a01a006, 0x13000000, 0x5932382a, + 0x05fdfeb4, 0x4a01a006, 0x13000000, 0x5932382a, 0x59300403, 0xb0000597, 0x05000004, 0x591c0416, - 0x8c000502, 0x05b80e3d, 0x591c001b, 0x4801a005, + 0x8c000502, 0x05b80994, 0x591c001b, 0x4801a005, 0x591c0407, 0x90000583, 0x05000007, 0x5930080a, 0x58040002, 0x82000500, 0x00ffffff, 0x4801a007, 0x0501f004, 0x5932481d, 0x59240005, 0x4801a007, 0x5930041b, 0x4801a408, 0x5930021b, 0x4801a208, - 0x600c0800, 0x600011b8, 0x5c023800, 0x0501f1c6, - 0x4803c856, 0x05f9fd5e, 0x598c000b, 0x81300580, - 0x05ba0e22, 0x05f9fcb0, 0x59300403, 0xb0000597, - 0x05040b07, 0x0005ffdc, 0x5c023800, 0x05f9f545, + 0x600c0800, 0x600011b8, 0x5c023800, 0x0501f1d2, + 0x4803c856, 0x05f9fd38, 0x598c000b, 0x81300580, + 0x05ba0979, 0x05f9fc8a, 0x59300403, 0xb0000597, + 0x05040b5d, 0x0009f810, 0x5c023800, 0x05f9f51f, 0x4803c856, 0x4d2c0000, 0x4d1c0000, 0x5932382a, - 0x811e39c0, 0x05b80e15, 0x831c0580, 0xffffffff, - 0x05000044, 0x591c0c07, 0x90040586, 0x0500000a, - 0x90040583, 0x05000044, 0x64de6403, 0x640e641c, + 0x811e39c0, 0x05b8096c, 0x831c0580, 0xffffffff, + 0x0500004a, 0x591c0c07, 0x90040586, 0x0500000a, + 0x90040583, 0x0500004a, 0x64de6403, 0x640e641c, 0x4a02621c, 0x00001700, 0x5c023800, 0x5c025800, - 0x0501f072, 0x0501f856, 0x42001000, 0x40000000, - 0x591c0203, 0x591c0804, 0x8c04053e, 0x05020024, - 0x90000c91, 0x0c001002, 0x05b9fdfc, 0x00108ff0, - 0x00108fff, 0x00108ff1, 0x00108fff, 0x00108ff9, - 0x00108ff0, 0x00108fff, 0x00108fff, 0x00108fff, - 0x00108ff0, 0x00108ff0, 0x00108ff0, 0x00108ff0, - 0x00108ff0, 0x00108fff, 0x00108ff0, 0x00108fff, - 0x05b9fdea, 0x591c0416, 0x4803c857, 0x8c000518, - 0x05000003, 0x8c000512, 0x05000007, 0x80001580, - 0x0501f007, 0x80001580, 0x591c0014, 0x4803c857, - 0x0501f00e, 0x42001000, 0x20000000, 0x591c0013, - 0x4803c857, 0x8c00053c, 0x05000003, 0x80000580, - 0x0501f006, 0x591c0014, 0x4803c857, 0x800001c0, - 0x05020002, 0x591c0017, 0x4801a00a, 0x0501f01a, - 0x0501f81f, 0x42001000, 0x40000000, 0x41780000, - 0x05fdf7fa, 0x0501f81a, 0x591e5809, 0x812e59c0, - 0x05b80dc6, 0x592c1013, 0x591c0013, 0x80080480, - 0x4801a00a, 0x591c0203, 0x591c0804, 0x8c04053e, - 0x05020005, 0x90000d82, 0x05000006, 0x90000d84, - 0x05000004, 0x42001000, 0x40000000, 0x0501f002, - 0x80001580, 0x4809a00b, 0x60180800, 0x600011b8, - 0x5c023800, 0x5c025800, 0x0501f14f, 0x4803c856, - 0x05fdfe36, 0x4a01a006, 0x02000000, 0x59300c1b, - 0x4805a407, 0x59300a1b, 0x4805a207, 0x5932481d, - 0x59241005, 0x5930080a, 0x58041802, 0x820c1d00, - 0x00ffffff, 0x5930082a, 0x82040580, 0xffffffff, - 0x05000007, 0x58040407, 0x90000583, 0x05020004, - 0x4809a008, 0x480da009, 0x0501f003, 0x480da008, - 0x4809a009, 0x1c01f000, 0x4803c856, 0x05fdfe1b, - 0x0501f003, 0x4803c856, 0x05fdfe11, 0x4a01a006, - 0x01000000, 0x5930041c, 0x4801a407, 0x5930021c, - 0x4801a207, 0x60080800, 0x600011b8, 0x0501f126, - 0x4803c856, 0x4d1c0000, 0x05fdfdf7, 0x4a01a006, - 0x14000000, 0x5932382a, 0x591c001b, 0x4801a005, - 0x5930041b, 0x4801a407, 0x5930021b, 0x4801a207, - 0x59300017, 0x4801a008, 0x59300218, 0x82000500, - 0x000000ff, 0x840001c0, 0x4801a409, 0x60100800, - 0x600011b8, 0x5c023800, 0x0501f10f, 0x4803c856, - 0x05fdfdf6, 0x4a01a006, 0x02000001, 0x42001000, - 0xe8000000, 0x59c40801, 0x82040d00, 0x00018000, - 0x90040580, 0x60000100, 0x0500000e, 0x82040580, - 0x00008000, 0x60000080, 0x0500000a, 0x82040580, - 0x00010000, 0x60000040, 0x05000006, 0x82040580, - 0x00018000, 0x60000010, 0x05000002, 0x60080000, - 0x80080540, 0x4801a007, 0x60080800, 0x600011b8, - 0x0501f0f1, 0x4803c856, 0x0501f809, 0x5930041c, - 0x900001c0, 0x4801a005, 0x0501f950, 0x41780800, - 0x600010b8, 0x0501f8e8, 0x05f1f721, 0x4803c856, - 0x59300819, 0x90041c09, 0x64874800, 0x58040408, - 0x82000500, 0x0000f000, 0x82000580, 0x00003000, - 0x05000002, 0x65074800, 0x81a5a000, 0x0501f94f, - 0x05000004, 0x4c0c0000, 0x0501f952, 0x5c001800, - 0x580c0001, 0x82000d00, 0x00ffffff, 0x82040d40, - 0xc2000000, 0x4805a000, 0x580c0800, 0x82041500, - 0x00ffffff, 0x82000500, 0xff000000, 0x80080540, - 0x4801a001, 0x580c0002, 0x82000580, 0x00c00000, - 0x82000500, 0x00fd0300, 0x4801a002, 0x580c0003, - 0x4801a003, 0x580c0404, 0x4801a404, 0x580c0204, - 0x4801a204, 0x1c01f000, 0x05fdfda4, 0x5930001e, - 0x800001c0, 0x05000006, 0x4a01a006, 0x01000000, - 0x640da407, 0x60080800, 0x0501f021, 0x4a01a006, - 0x02000000, 0x41780800, 0x916c0584, 0x05020003, - 0x84040d42, 0x0501f00c, 0x05e5ffe0, 0x05020003, - 0x84040d4a, 0x0501f002, 0x84040d48, 0x59a80249, - 0x8c000506, 0x05020003, 0x8c00050a, 0x05000002, - 0x84040d46, 0x4805a207, 0x59c40085, 0x48031004, - 0x4c580000, 0x4c500000, 0x4c540000, 0x6018b000, - 0x9188a400, 0x90d0ac08, 0x051dffc5, 0x5c00a800, - 0x5c00a000, 0x5c00b000, 0x60200800, 0x600011b8, - 0x0501f091, 0x05fdfd6b, 0x4a01a006, 0x56000000, - 0x59340006, 0x4801a007, 0x59340007, 0x4801a008, - 0x600c0800, 0x600011b8, 0x0501f087, 0x4803c856, - 0x05fdfd6e, 0x5930081e, 0x800409c0, 0x0500000b, - 0x82040580, 0x0000ffff, 0x05000003, 0x90040487, - 0x05021006, 0x4a01a006, 0x01000000, 0x640da407, - 0x60080800, 0x0501f011, 0x4a01a006, 0x0200001c, - 0x6405a007, 0x42001000, 0x0010dd4b, 0x50080000, - 0x9c0001c0, 0x4801a009, 0x5932481d, 0x59240005, - 0x4801a00a, 0x59240001, 0x59240802, 0x4801a00b, - 0x4805a00c, 0x601c0800, 0x600011b8, 0x0501f066, - 0x4d2c0000, 0x05fdfd3f, 0x59325809, 0x812e59c0, - 0x05020003, 0x4979a001, 0x0501f005, 0x592c000c, - 0x82000500, 0x00ffffff, 0x4801a001, 0x4a01a006, - 0x51000000, 0x5c025800, 0x05fdf3a1, 0x4803c856, - 0x59325809, 0x5932680a, 0x59300407, 0x4803c857, - 0x90000d8a, 0x05000002, 0x05b9fcb0, 0x42005000, - 0x02000000, 0x42006000, 0x20290000, 0x41786800, - 0x41787800, 0x0501f805, 0x91180d78, 0x60801193, - 0x0501f882, 0x1c01f000, 0x6081a000, 0x59300416, - 0x8c000510, 0x05020008, 0x6001a000, 0x0501f006, - 0x60c1a000, 0x59300416, 0x8c000510, 0x05020002, - 0x6045a000, 0x59340a12, 0x82040d00, 0x0000ff00, - 0x5932481d, 0x59240408, 0x900001c0, 0x80040540, - 0x80d00540, 0x44034800, 0x81a5a000, 0x0501f8a3, - 0x050208a8, 0x59340002, 0x82000500, 0x00ffffff, - 0x59300c03, 0x90040db1, 0x05020002, 0x41780000, - 0x80280540, 0x4801a000, 0x59240005, 0x4801a001, - 0x4831a002, 0x90340540, 0x4801a003, 0x59300402, - 0x4801a404, 0x59300a02, 0x4805a204, 0x8c30052e, - 0x05000009, 0x4805a404, 0x59301416, 0x480bc857, - 0x8c08051c, 0x05000003, 0x59300216, 0x4803c857, - 0x4801a204, 0x483da005, 0x1c01f000, 0x643e6407, + 0x0501f078, 0x0501f85c, 0x42001000, 0x40000000, + 0x591c0203, 0x591c0804, 0x8c04053e, 0x05020027, + 0x90000c91, 0x0c001002, 0x05b9f953, 0x001094d4, + 0x001094e6, 0x001094d5, 0x001094e6, 0x001094dd, + 0x001094d4, 0x001094e6, 0x001094e6, 0x001094e6, + 0x001094d4, 0x001094d4, 0x001094d4, 0x001094d4, + 0x001094d4, 0x001094e6, 0x001094d4, 0x001094e6, + 0x05b9f941, 0x591c0416, 0x4803c857, 0x8c000518, + 0x05000003, 0x8c000512, 0x0500000a, 0x80001580, + 0x0501f00a, 0x80001580, 0x0521fbf8, 0x41780000, + 0x05020014, 0x591c0014, 0x4803c857, 0x0501f011, + 0x42001000, 0x20000000, 0x0521fbf0, 0x41780000, + 0x0502000c, 0x591c0013, 0x4803c857, 0x8c00053c, + 0x05000003, 0x80000580, 0x0501f006, 0x591c0014, + 0x4803c857, 0x800001c0, 0x05020002, 0x591c0017, + 0x4801a00a, 0x0501f01a, 0x0501f81f, 0x42001000, + 0x40000000, 0x41780000, 0x05fdf7fa, 0x0501f81a, + 0x591e5809, 0x812e59c0, 0x05b80917, 0x592c1013, + 0x591c0013, 0x80080480, 0x4801a00a, 0x591c0203, + 0x591c0804, 0x8c04053e, 0x05020005, 0x90000d82, + 0x05000006, 0x90000d84, 0x05000004, 0x42001000, + 0x40000000, 0x0501f002, 0x80001580, 0x4809a00b, + 0x60180800, 0x600011b8, 0x5c023800, 0x5c025800, + 0x0501f155, 0x4803c856, 0x05fdfe24, 0x4a01a006, + 0x02000000, 0x59300c1b, 0x4805a407, 0x59300a1b, + 0x4805a207, 0x5932481d, 0x59241005, 0x5930080a, + 0x58041802, 0x820c1d00, 0x00ffffff, 0x5930082a, + 0x82040580, 0xffffffff, 0x05000007, 0x58040407, + 0x90000583, 0x05020004, 0x4809a008, 0x480da009, + 0x0501f003, 0x480da008, 0x4809a009, 0x1c01f000, + 0x4803c856, 0x05fdfe09, 0x0501f003, 0x4803c856, + 0x05fdfdff, 0x4a01a006, 0x01000000, 0x5930041c, + 0x4801a407, 0x5930021c, 0x4801a207, 0x60080800, + 0x600011b8, 0x0501f12c, 0x4803c856, 0x4d1c0000, + 0x05fdfde5, 0x4a01a006, 0x14000000, 0x5932382a, + 0x591c001b, 0x4801a005, 0x5930041b, 0x4801a407, + 0x5930021b, 0x4801a207, 0x59300017, 0x4801a008, + 0x59300218, 0x82000500, 0x000000ff, 0x840001c0, + 0x4801a409, 0x60100800, 0x600011b8, 0x5c023800, + 0x0501f115, 0x4803c856, 0x05fdfde4, 0x4a01a006, + 0x02000001, 0x42001000, 0xe8000000, 0x59c40801, + 0x82040d00, 0x00018000, 0x90040580, 0x60000100, + 0x0500000e, 0x82040580, 0x00008000, 0x60000080, + 0x0500000a, 0x82040580, 0x00010000, 0x60000040, + 0x05000006, 0x82040580, 0x00018000, 0x60000010, + 0x05000002, 0x60080000, 0x80080540, 0x4801a007, + 0x60080800, 0x600011b8, 0x0501f0f7, 0x4803c856, + 0x0501f809, 0x5930041c, 0x900001c0, 0x4801a005, + 0x0501f956, 0x41780800, 0x600010b8, 0x0501f8ee, + 0x05f1f69b, 0x4803c856, 0x59300819, 0x90041c09, + 0x64874800, 0x58040408, 0x82000500, 0x0000f000, + 0x82000580, 0x00003000, 0x05000002, 0x65074800, + 0x81a5a000, 0x0501f955, 0x05000004, 0x4c0c0000, + 0x0501f958, 0x5c001800, 0x580c0001, 0x82000d00, + 0x00ffffff, 0x82040d40, 0xc2000000, 0x4805a000, + 0x580c0800, 0x82041500, 0x00ffffff, 0x82000500, + 0xff000000, 0x80080540, 0x4801a001, 0x580c0002, + 0x82000580, 0x00c00000, 0x82000500, 0x00fd0300, + 0x4801a002, 0x580c0003, 0x4801a003, 0x580c0404, + 0x4801a404, 0x580c0204, 0x4801a204, 0x1c01f000, + 0x05fdfd92, 0x5930001e, 0x800001c0, 0x05000006, + 0x4a01a006, 0x01000000, 0x640da407, 0x60080800, + 0x0501f021, 0x4a01a006, 0x02000000, 0x41780800, + 0x916c0584, 0x05020003, 0x84040d42, 0x0501f00c, + 0x05e5fde0, 0x05020003, 0x84040d4a, 0x0501f002, + 0x84040d48, 0x59a8024c, 0x8c000506, 0x05020003, + 0x8c00050a, 0x05000002, 0x84040d46, 0x4805a207, + 0x59c40085, 0x48031004, 0x4c580000, 0x4c500000, + 0x4c540000, 0x6018b000, 0x9188a400, 0x90d0ac08, + 0x0521fa56, 0x5c00a800, 0x5c00a000, 0x5c00b000, + 0x60200800, 0x600011b8, 0x0501f097, 0x05fdfd59, + 0x4a01a006, 0x56000000, 0x59340006, 0x4801a007, + 0x59340007, 0x4801a008, 0x600c0800, 0x600011b8, + 0x0501f08d, 0x4803c856, 0x05fdfd5c, 0x5930081e, + 0x800409c0, 0x0500000b, 0x82040580, 0x0000ffff, + 0x05000003, 0x90040487, 0x05021006, 0x4a01a006, + 0x01000000, 0x640da407, 0x60080800, 0x0501f011, + 0x4a01a006, 0x0200001c, 0x6405a007, 0x42001000, + 0x00111ce5, 0x50080000, 0x9c0001c0, 0x4801a009, + 0x5932481d, 0x59240005, 0x4801a00a, 0x59240001, + 0x59240802, 0x4801a00b, 0x4805a00c, 0x601c0800, + 0x600011b8, 0x0501f06c, 0x4d2c0000, 0x05fdfd2d, + 0x59325809, 0x812e59c0, 0x05020003, 0x4979a001, + 0x0501f005, 0x592c000c, 0x82000500, 0x00ffffff, + 0x4801a001, 0x4a01a006, 0x51000000, 0x5c025800, + 0x05fdf37c, 0x4803c856, 0x59325809, 0x5932680a, + 0x59300407, 0x4803c857, 0x90000d8a, 0x05000002, + 0x05b9f801, 0x42005000, 0x02000000, 0x42006000, + 0x20290000, 0x41786800, 0x41787800, 0x0501f805, + 0x91180d78, 0x60801193, 0x0501f888, 0x1c01f000, + 0x6081a000, 0x59300416, 0x8c000510, 0x05020008, + 0x6001a000, 0x0501f006, 0x60c1a000, 0x59300416, + 0x8c000510, 0x05020002, 0x6045a000, 0x59340a12, + 0x82040d00, 0x0000ff00, 0x5932481d, 0x59240408, + 0x900001c0, 0x80040540, 0x80d00540, 0x44034800, + 0x81a5a000, 0x0501f8a9, 0x050208ae, 0x59340002, + 0x82000500, 0x00ffffff, 0x59300c03, 0x90040db1, + 0x05020002, 0x41780000, 0x80280540, 0x4801a000, + 0x59240005, 0x4801a001, 0x4831a002, 0x90340540, + 0x4801a003, 0x59300402, 0x4801a404, 0x59300a02, + 0x4805a204, 0x8c30052e, 0x05000009, 0x4805a404, + 0x59301416, 0x480bc857, 0x8c08051c, 0x05000003, + 0x59300216, 0x4803c857, 0x4801a204, 0x483da005, + 0x1c01f000, 0x82100580, 0xc2000000, 0x05020004, + 0x42000000, 0x00112358, 0x0521f8fd, 0x643e6407, 0x59300819, 0x5930001a, 0x80102540, 0x48126019, 0x4806601a, 0x5930081b, 0x82040d00, 0x00fffff0, 0x82040d80, 0x00c00000, 0x4806601b, 0x481a601e, 0x1c01f000, 0x4807c857, 0x4c040000, 0x0501f857, 0x5c000800, 0x40040000, 0x80081540, 0x800000c4, - 0x82000540, 0x00002000, 0x42000800, 0x0010e06a, - 0x59a824cc, 0x8c100502, 0x05000008, 0x90040c02, + 0x82000540, 0x00002000, 0x42000800, 0x00112004, + 0x59a824d1, 0x8c100502, 0x05000008, 0x90040c02, 0x82000540, 0x00004000, 0x82081500, 0xffffc3ff, 0x82081540, 0x00002400, 0x4803910a, 0x59b400f6, - 0x90000518, 0x05fe07fe, 0x42001800, 0x0010e064, - 0x8c100502, 0x05000003, 0x42001800, 0x0010e066, + 0x90000518, 0x05fe07fe, 0x42001800, 0x00111ffe, + 0x8c100502, 0x05000003, 0x42001800, 0x00112000, 0x580c0004, 0x4803c857, 0x580c0006, 0x4803c857, 0x580c1800, 0x480fc857, 0x8d0c052a, 0x0500000c, 0x820c1d00, 0xf8000000, 0x05000009, 0x4c040000, - 0x4c080000, 0x40083800, 0x42000000, 0x0010e064, - 0x05b9fd4b, 0x5c001000, 0x5c000800, 0x4a0368f0, - 0x0010e063, 0x480768f1, 0x480b68f3, 0x59b400f6, + 0x4c080000, 0x40083800, 0x42000000, 0x00111ffe, + 0x05b9f88a, 0x5c001000, 0x5c000800, 0x4a0368f0, + 0x00111ffd, 0x480768f1, 0x480b68f3, 0x59b400f6, 0x90000538, 0x05fe07fe, 0x4203e000, 0xb0800000, - 0x600bf800, 0x05f1f5fe, 0x4807c857, 0x0501f837, + 0x600bf800, 0x05f1f572, 0x4807c857, 0x0501f837, 0x05000006, 0x82040d00, 0xffffff07, 0xb0040d48, 0x82081540, 0x00001000, 0x59300004, 0x8c000512, 0x05000002, 0x8408154c, 0x480a2800, 0x4c040000, @@ -9368,30 +9684,30 @@ static const uint32_t isp_2500_risc_code[] = { 0x90000538, 0x05fe07fe, 0x4203e000, 0xb0800000, 0x600bf800, 0x1c01f000, 0x61a07007, 0x4203e000, 0xb0800000, 0x600ff800, 0x40000000, 0x40000000, - 0x40000000, 0x0501b004, 0x80387040, 0x05b80bff, + 0x40000000, 0x0501b004, 0x80387040, 0x05b40f4a, 0x05fdf7f9, 0x1c01f000, 0x82000500, 0xffff0000, 0x82000580, 0x01050000, 0x0502000b, 0x599c0818, 0x8c040510, 0x05000008, 0x59a80806, 0x8c04050a, 0x05000005, 0x613c1100, 0x41781800, 0x41782000, - 0x05d9fdf0, 0x1c01f000, 0x05ddf92a, 0x05000004, - 0x59a804cc, 0x4803c857, 0x8c000502, 0x1c01f000, + 0x05d9fa9d, 0x1c01f000, 0x05d9fde0, 0x05000004, + 0x59a804d1, 0x4803c857, 0x8c000502, 0x1c01f000, 0x48d3c857, 0x5924100b, 0x82080500, 0x00001fff, 0x800000c2, 0x82080d00, 0x0000e000, 0x80040540, 0x82000540, 0x50000000, 0x4801a000, 0x82080500, 0xff000000, 0x4801a001, 0x90d1a402, 0x48d3c857, 0x1c01f000, 0x1c01f000, 0x4d340000, 0x59300407, 0x90006c92, 0x05021015, 0x5932680a, 0x0c01f001, - 0x0010925b, 0x00109227, 0x0010921f, 0x00109232, - 0x0010923e, 0x00109240, 0x0010924a, 0x0010925b, - 0x0010925b, 0x0010925b, 0x0010925b, 0x0010925b, - 0x0010925b, 0x0010925b, 0x0010925b, 0x00109256, - 0x0010925b, 0x0010924e, 0x05b9fbbc, 0x8d3c0500, + 0x0010974b, 0x00109717, 0x0010970f, 0x00109722, + 0x0010972e, 0x00109730, 0x0010973a, 0x0010974b, + 0x0010974b, 0x0010974b, 0x0010974b, 0x0010974b, + 0x0010974b, 0x0010974b, 0x0010974b, 0x00109746, + 0x0010974b, 0x0010973e, 0x05b5ff07, 0x8d3c0500, 0x0500003d, 0x59300229, 0x90000583, 0x05020031, - 0x05f9fa22, 0x0502002f, 0x0501f037, 0x8d3c051a, + 0x05f9f9f0, 0x0502002f, 0x0501f037, 0x8d3c051a, 0x0502002c, 0x8d3c0500, 0x0502002a, 0x8d3c0518, - 0x05020032, 0x8d3c0506, 0x0500002f, 0x050dfd9a, + 0x05020032, 0x8d3c0506, 0x0500002f, 0x050dfe42, 0x05000024, 0x0501f02c, 0x8d3c0500, 0x05000003, - 0x05f9fa12, 0x0502001f, 0x8d3c0518, 0x05020027, + 0x05f9f9e0, 0x0502001f, 0x8d3c0518, 0x05020027, 0x8d3c0506, 0x05000024, 0x59340200, 0x8c00050e, 0x05020018, 0x0501f020, 0x8d3c051a, 0x05020015, 0x8d3c0500, 0x05020013, 0x8d3c0518, 0x05000003, @@ -9402,34 +9718,35 @@ static const uint32_t isp_2500_risc_code[] = { 0x80000580, 0x0501f009, 0x833c0500, 0x00001800, 0x05fc07fc, 0x8d3c0516, 0x05fe07fa, 0x8d3c0500, 0x05fe07f8, 0x90000541, 0x5c026800, 0x1c01f000, - 0x59a8009d, 0x800001c0, 0x05000049, 0x4d2c0000, + 0x59a800a0, 0x800001c0, 0x05000049, 0x4d2c0000, 0x4d300000, 0x4c5c0000, 0x4c600000, 0x4c640000, 0x40025800, 0x4000c000, 0x4000c800, 0x42026000, - 0x00111a40, 0x592c040a, 0x81440580, 0x05020031, + 0x001159e4, 0x592c040a, 0x81440580, 0x05020031, 0x83240580, 0xffffffff, 0x05000004, 0x592c0005, 0x81240580, 0x0502002b, 0x592c0208, 0xb0000595, 0x05000005, 0x8d3c0518, 0x05000026, 0x8d3c0516, 0x05020024, 0x40640000, 0x812c0580, 0x05020014, 0x59300203, 0x90000580, 0x0500000d, 0x59300009, - 0x800001c0, 0x0500000a, 0x05f9fa8d, 0x4df00000, - 0x05f9f98e, 0x05f5ff57, 0x05020002, 0x64026203, - 0x5c03e000, 0x05f80a77, 0x497a6009, 0x592cc800, + 0x800001c0, 0x0500000a, 0x05f9fa5b, 0x4df00000, + 0x05f9f95b, 0x05f5ff20, 0x05020002, 0x64026203, + 0x5c03e000, 0x05f80a45, 0x497a6009, 0x592cc800, 0x4064c000, 0x4064b800, 0x0501f003, 0x592cb800, 0x485cc000, 0x497a5800, 0x592c0208, 0x82000580, - 0x00000155, 0x05000003, 0x05b9fef8, 0x0501f003, - 0x49425a0a, 0x0001fb82, 0x405e5800, 0x0501f003, + 0x00000155, 0x05000003, 0x05b9fa3f, 0x0501f003, + 0x49425a0a, 0x0001fba8, 0x405e5800, 0x0501f003, 0x412cc000, 0x592e5800, 0x812e59c0, 0x05fe07ca, - 0x4867509d, 0x4863509e, 0x5c00c800, 0x5c00c000, + 0x486750a0, 0x486350a1, 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c026000, 0x5c025800, 0x1c01f000, 0x4943c857, 0x4d440000, 0x4d340000, 0x4c580000, - 0x4d240000, 0x42024800, 0xffffffff, 0x61c0b00f, - 0x417a8800, 0x0001fb00, 0x05020002, 0x05fdffa9, - 0x81468800, 0x8058b040, 0x05fe07fb, 0x83440480, - 0x00000800, 0x05021006, 0x8d3c0502, 0x05000004, - 0x61c2880f, 0x6040b000, 0x05fdf7f3, 0x5c024800, + 0x4d240000, 0x42024800, 0xffffffff, 0x59a8b0ac, + 0x417a8800, 0x0001fb08, 0x05020002, 0x05fdffa9, + 0x81468800, 0x83440580, 0x000007f0, 0x05020002, + 0x60028810, 0x8058b040, 0x05fe07f7, 0x59a800ad, + 0x81440480, 0x05021006, 0x8d3c0502, 0x05000004, + 0x61c2880f, 0x6040b000, 0x05fdf7ef, 0x5c024800, 0x5c00b000, 0x5c026800, 0x5c028800, 0x1c01f000, - 0x4d300000, 0x59a8109d, 0x800811c0, 0x05000022, - 0x42026000, 0x00111a40, 0x59300203, 0x90000580, + 0x4d300000, 0x59a810a0, 0x800811c0, 0x05000022, + 0x42026000, 0x001159e4, 0x59300203, 0x90000580, 0x0502001d, 0x58080806, 0x58080005, 0x4802601d, 0x4806600a, 0x480a6009, 0x64166407, 0x64066203, 0x4a026403, 0x00000092, 0x41780800, 0x58080208, @@ -9437,927 +9754,947 @@ static const uint32_t isp_2500_risc_code[] = { 0x42000800, 0x80000040, 0x497a6416, 0x5808040b, 0x82000500, 0x0000f000, 0x82000580, 0x00003000, 0x05020004, 0x4a026416, 0x00000100, 0x84040d52, - 0x0005feaf, 0x5c026000, 0x1c01f000, 0x4803c856, - 0x05fdfb72, 0x0501f87a, 0x90d00482, 0x4a000000, - 0x50001ffc, 0x4803c856, 0x05fdfb6c, 0x0501f874, - 0x05fdf553, 0x4803c856, 0x4c580000, 0x4c500000, - 0x4c540000, 0x4d2c0000, 0x05fdfb56, 0x59325809, + 0x0005fee6, 0x5c026000, 0x1c01f000, 0x4803c856, + 0x05fdfb56, 0x0501f87a, 0x90d00482, 0x4a000000, + 0x50001ffc, 0x4803c856, 0x05fdfb50, 0x0501f874, + 0x05fdf549, 0x4803c856, 0x4c580000, 0x4c500000, + 0x4c540000, 0x4d2c0000, 0x05fdfb3a, 0x59325809, 0x4a01a006, 0x7f000000, 0x0501f869, 0x4a01a407, 0x00000101, 0x5930021b, 0x4801a207, 0x59a80002, 0x4801a008, 0x59a80003, 0x4801a009, 0x4a01a20a, 0x00000228, 0x4cd00000, 0x90d1a40b, 0x4a01a400, 0x00000101, 0x6411a200, 0x812e59c0, 0x05020003, - 0x59a800ce, 0x0501f002, 0x592c000f, 0x4801a001, + 0x59a800d3, 0x0501f002, 0x592c000f, 0x4801a001, 0x90d1a402, 0x4a01a400, 0x00000102, 0x6411a200, - 0x4979a401, 0x812e59c0, 0x05020003, 0x59a802cc, + 0x4979a401, 0x812e59c0, 0x05020003, 0x59a802d1, 0x0501f002, 0x592c020b, 0x4801a201, 0x90d1a402, 0x4a01a400, 0x00000103, 0x4a01a200, 0x00000200, - 0x6000b001, 0x4200a000, 0x001105f2, 0x90d0ac01, + 0x6000b001, 0x4200a000, 0x00114596, 0x90d0ac01, 0x50500000, 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07fb, 0x5c01a000, 0x60280801, 0x600011b8, 0x5c025800, 0x5c00a800, 0x5c00a000, - 0x5c00b000, 0x05fdf640, 0x4803c856, 0x4c580000, - 0x4c500000, 0x4c540000, 0x4d2c0000, 0x05fdfb23, + 0x5c00b000, 0x05fdf63c, 0x4803c856, 0x4c580000, + 0x4c500000, 0x4c540000, 0x4d2c0000, 0x05fdfb07, 0x90d00482, 0x4a000000, 0x50001ffc, 0x59325809, 0x4a01a006, 0x02000000, 0x05fdf7bc, 0x4803c856, - 0x4c580000, 0x4c500000, 0x4d2c0000, 0x05fdfb09, + 0x4c580000, 0x4c500000, 0x4d2c0000, 0x05fdfaed, 0x90d00482, 0x4a000000, 0x50001ffc, 0x59325809, 0x4a01a006, 0x7f000000, 0x0501f819, 0x4a01a407, 0x00000102, 0x5930021b, 0x4801a207, 0x59a80002, 0x4801a008, 0x59a80003, 0x4801a009, 0x6451a20a, 0x60140800, 0x600011b8, 0x5c025800, 0x5c00a000, - 0x5c00b000, 0x05fdf618, 0x4803c856, 0x4c580000, - 0x4c500000, 0x4d2c0000, 0x05fdfafc, 0x59325809, + 0x5c00b000, 0x05fdf614, 0x4803c856, 0x4c580000, + 0x4c500000, 0x4d2c0000, 0x05fdfae0, 0x59325809, 0x4a01a006, 0x02000000, 0x05fdf7e8, 0x58d00001, 0x82000500, 0xff000000, 0x800001c0, 0x05020004, 0x82000540, 0x00fffff0, 0x4801a001, 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d180000, 0x4803c856, 0x417a3000, - 0x05f9fed8, 0x59900805, 0x800409c0, 0x05000012, - 0x91947c09, 0x83180400, 0x00107661, 0x50000000, + 0x05f9fea2, 0x59900805, 0x800409c0, 0x05000012, + 0x91947c09, 0x83180400, 0x00107a7b, 0x50000000, 0x803c7c00, 0x583c0003, 0x811808ca, 0x82040c00, 0x00006139, 0x50040800, 0x80040580, 0x05000006, - 0x42000000, 0x0010e4b8, 0x051dfc4e, 0x90000541, + 0x42000000, 0x0011245c, 0x051dfed5, 0x90000541, 0x0501f004, 0x811a3000, 0x91180585, 0x05fe07e9, 0x5c023000, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d180000, 0x4803c856, 0x598c080b, 0x800409c0, - 0x05000002, 0x05f1fc0e, 0x417a3000, 0x05f9fead, + 0x05000002, 0x05f1fb7e, 0x417a3000, 0x05f9fe77, 0x59900805, 0x800409c0, 0x0500000f, 0x91947c09, - 0x83180400, 0x00107661, 0x50000000, 0x803c7c00, + 0x83180400, 0x00107a7b, 0x50000000, 0x803c7c00, 0x811808ca, 0x82040c00, 0x00006139, 0x50040800, 0x48047803, 0x4a007801, 0x000001f4, 0x64287800, 0x64107802, 0x811a3000, 0x91180585, 0x05fe07ec, 0x5c023000, 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000, 0x41781000, - 0x42026000, 0x00111b00, 0x59a8183b, 0x480a6402, + 0x42026000, 0x00115aa4, 0x59a8183d, 0x480a6402, 0x4a026202, 0x0000ffff, 0x80081000, 0x800c1840, 0x05000003, 0x91326430, 0x05fdf7f9, 0x1c01f000, - 0x5c036000, 0x4db00000, 0x49b3c857, 0x4933c857, - 0x813261c0, 0x0500002d, 0x59300203, 0x90000580, - 0x0500002a, 0x59300407, 0x4803c857, 0x90000d84, - 0x0500000c, 0x90000d81, 0x0500000a, 0x90000d83, - 0x05000004, 0x90000d86, 0x05020016, 0x0519ff00, - 0x5930001e, 0x800001c0, 0x05120a1c, 0x0501f011, - 0x5930000a, 0x82000580, 0x00110210, 0x0500000d, - 0x5930082a, 0x4807c857, 0x4d300000, 0x40066000, - 0x0511fab7, 0x5c026000, 0x05020006, 0x5804001e, - 0x4803c857, 0x81300580, 0x05020002, 0x4978081e, - 0x641e6407, 0x497a6009, 0x4a026004, 0x00004000, - 0x59a8005c, 0xb0000c91, 0x05001002, 0x80000102, - 0x48026006, 0x497a6205, 0x1c01f000, 0x91640490, - 0x05021007, 0x42000000, 0x0010e442, 0x051dfbd5, - 0x4967c857, 0x80026580, 0x1c01f000, 0x8166c9c0, - 0x05000018, 0x41626000, 0x41580000, 0x59300a03, - 0x90040d80, 0x05000007, 0x91326430, 0x81300c80, - 0x05fc17fb, 0x42026000, 0x00111b00, 0x05fdf7f8, + 0x83300480, 0x00115aa4, 0x0500100e, 0x05d9fccf, + 0x05b40d4d, 0x457a6000, 0x4a026202, 0x0000ffff, + 0x05011000, 0x91300403, 0x4803c840, 0x64b3c842, + 0x59a8023e, 0x80000000, 0x4803523e, 0x1c01f000, + 0x4933c857, 0x83300580, 0x001159b4, 0x0500000b, + 0x83300580, 0x001159e4, 0x05000008, 0x83300580, + 0x00115a14, 0x05000005, 0x83300580, 0x00115a74, + 0x05000002, 0x05b5fd34, 0x42000000, 0x001123ea, + 0x051df676, 0x5c036000, 0x4db00000, 0x49b3c857, + 0x4933c857, 0x813261c0, 0x0500002d, 0x59300203, + 0x90000580, 0x0500002a, 0x59300407, 0x4803c857, + 0x90000d84, 0x0500000c, 0x90000d81, 0x0500000a, + 0x90000d83, 0x05000004, 0x90000d86, 0x05020016, + 0x051df935, 0x5930001e, 0x800001c0, 0x05120aae, + 0x0501f011, 0x5930000a, 0x82000580, 0x001141b4, + 0x0500000d, 0x5930082a, 0x4807c857, 0x4d300000, + 0x40066000, 0x0511fb48, 0x5c026000, 0x05020006, + 0x5804001e, 0x4803c857, 0x81300580, 0x05020002, + 0x4978081e, 0x641e6407, 0x497a6009, 0x4a026004, + 0x00004000, 0x59a8005f, 0xb0000c91, 0x05001002, + 0x80000102, 0x48026006, 0x497a6205, 0x1c01f000, + 0x91640490, 0x05021007, 0x42000000, 0x001123e4, + 0x051dfe3b, 0x4967c857, 0x80026580, 0x1c01f000, + 0x8166c9c0, 0x05000016, 0x41626000, 0x41580000, + 0x59300a03, 0x90040d80, 0x05000006, 0x91326430, + 0x81300c80, 0x05fc17fb, 0x40be6000, 0x05fdf7f9, 0x4933c857, 0x8166c840, 0x91300c30, 0x80040480, 0x05021005, 0x4006c000, 0x64226203, 0x813261c0, - 0x1c01f000, 0x4202c000, 0x00111b00, 0x05fdf7fb, - 0x42000000, 0x0010e442, 0x051dfbb6, 0x4933c856, - 0x417a6000, 0x05fdf7f6, 0x4933c857, 0x91380593, - 0x05020008, 0x59300004, 0x8c00053e, 0x05000004, - 0x05f9f8e3, 0x05f9f838, 0x05f9f8d2, 0x1c01f000, - 0x4933c857, 0x598800bc, 0x80000000, 0x480310bc, - 0x1c01f000, 0x4933c857, 0x59300203, 0x90003491, - 0x05ba199e, 0x4d2c0000, 0x0c01f803, 0x5c025800, - 0x1c01f000, 0x00109452, 0x00109966, 0x00109af1, - 0x00109452, 0x00109b40, 0x001095ab, 0x00109452, - 0x00109452, 0x001098f9, 0x00109452, 0x00109452, - 0x00109452, 0x00109452, 0x00109452, 0x0010ae4b, - 0x00109452, 0x00109452, 0x05b9f988, 0x4933c857, - 0x59300203, 0x90003491, 0x05ba1984, 0x0c01f001, - 0x00109469, 0x0010a653, 0x00109469, 0x00109469, - 0x00109469, 0x00109469, 0x00109469, 0x00109469, - 0x0010a5f3, 0x0010a672, 0x0010a6f3, 0x0010a672, - 0x0010a6f3, 0x00109469, 0x0010ae71, 0x00109469, - 0x00109469, 0x05b9f971, 0x05b9f970, 0x4933c857, - 0x4d300000, 0x4d1c0000, 0x59300203, 0x9000058f, - 0x05ba096a, 0x91380593, 0x05020025, 0x59300c03, - 0xb0040586, 0x05000015, 0xb0040584, 0x0502000a, - 0x4d300000, 0x5932602a, 0x050dfce8, 0x5c026000, - 0x0500001c, 0x591c0416, 0x8400054a, 0x48023c16, - 0x0501f010, 0x59300019, 0x82000500, 0xff000000, - 0x82000580, 0xc2000000, 0x05020012, 0x5930001e, - 0x05fdfd56, 0x0501f00f, 0x59300416, 0x84000504, - 0x48026416, 0x5930141d, 0x050dfccb, 0x05000009, - 0x411e6000, 0x5930001c, 0x80000540, 0x05000005, - 0x497a601c, 0x0801f800, 0x0501f002, 0x05f5ffd2, - 0x5c023800, 0x5c026000, 0x0005f7dc, 0x4933c857, - 0x4d2c0000, 0x59325809, 0x59300203, 0x90003491, - 0x05ba193a, 0x0c01f803, 0x5c025800, 0x1c01f000, - 0x001094b5, 0x001094b5, 0x001094b5, 0x001094ca, - 0x00109518, 0x001094b5, 0x001094b5, 0x001094b5, - 0x001094b6, 0x001094b5, 0x001094b5, 0x001094b5, - 0x001094b5, 0x001094b5, 0x001094b5, 0x001094b5, - 0x00109502, 0x05b9f925, 0x4933c857, 0xb1380580, - 0x05ba0922, 0x4a026008, 0x00082000, 0x640e6203, - 0x493a6403, 0x64065c0c, 0x592c0011, 0x48026013, - 0x497a6015, 0x592c020c, 0x800000c2, 0x800010c4, - 0x80081400, 0x480a6006, 0x0001f98d, 0x42000800, - 0x80000060, 0x0005f69d, 0x4933c857, 0xb1380490, - 0x05ba190e, 0xb1380489, 0x05b8190c, 0x0c01f001, - 0x001094d8, 0x001094e5, 0x001094d7, 0x001094d7, - 0x001094d7, 0x001094d7, 0x001094eb, 0x05b9f903, - 0x050dfbc6, 0x05000003, 0x64426203, 0x0501f002, - 0x64126203, 0x640a5c0c, 0x592c020b, 0x48025c0d, - 0x592c020d, 0x48025a0b, 0x592c0010, 0x48025811, - 0x1c01f000, 0x05f5ff67, 0x0509ffe3, 0x05000003, - 0x641a5a0a, 0x0001fb82, 0x0005f7dc, 0x05f5ff61, - 0x4d3c0000, 0x417a7800, 0x05c5fe3e, 0x5c027800, - 0x60503000, 0x41782800, 0x60082000, 0x4d400000, - 0x4d440000, 0x59368c03, 0x60a68000, 0x0511f91c, - 0x5c028800, 0x5c028000, 0x42000000, 0x0010e454, - 0x051dfae0, 0x0509ffcc, 0x000407dc, 0x64a65a0a, - 0x0001fb82, 0x0005f7dc, 0x4933c857, 0xb13805a1, - 0x05000006, 0xb13805a0, 0x05020007, 0x59cc0002, - 0x8c000526, 0x05000005, 0xb1380589, 0x05000004, - 0x05b9f8ce, 0x05fdff27, 0x1c01f000, 0x59a8005e, - 0x48026205, 0x64126203, 0x5930001c, 0x80000540, - 0x05000003, 0x497a601c, 0x0801f800, 0x1c01f000, - 0x4933c857, 0xb1380588, 0x05000003, 0xb1380593, - 0x05ba08be, 0x592c020a, 0x90000587, 0x05000008, - 0x59300013, 0x80000540, 0x05000005, 0x592c0810, - 0x80040480, 0x48025810, 0x64565a0a, 0x592c020a, - 0x80000540, 0x05020002, 0x64025a0a, 0x0001fb82, - 0x0005f7dc, 0x4933c857, 0x4d2c0000, 0x4c500000, - 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x4c100000, 0x05b9fc4c, 0x05b808a3, - 0x497a5a0a, 0x59a800d0, 0x82000500, 0x0000f000, - 0x48025c0b, 0x59a808b6, 0x90040c18, 0x48065a0b, - 0x412cb800, 0x4d2c0000, 0x41cca000, 0x6004c000, - 0x60b0c800, 0x900404ad, 0x05021004, 0x912cac0d, - 0x0509fa72, 0x0501f023, 0x40043000, 0x60b00800, - 0x912cac0d, 0x0509fa6d, 0x901834ac, 0x4c180000, - 0x05b9fc32, 0x5c003000, 0x05000012, 0x8060c000, - 0x4a025808, 0x00000110, 0x492cb801, 0x90180cbd, - 0x05021005, 0x40180800, 0x912cac09, 0x0509fa5f, - 0x0501f010, 0x9064cc3c, 0x901834bc, 0x60f00800, - 0x412cb800, 0x912cac09, 0x0509fa58, 0x05fdf7ec, - 0x5c025800, 0x592c020a, 0x8400055e, 0x48025a0a, - 0x592c040b, 0x80640540, 0x48025c0b, 0x0501f002, - 0x5c025800, 0x5c002000, 0x813669c0, 0x05000003, - 0x59343403, 0x0501f002, 0x61fc31ff, 0x4932580c, - 0x481a5c0a, 0xb0100594, 0x0502001a, 0x4a02580c, - 0xffffffff, 0x491e5817, 0x41781000, 0x831c0580, - 0xffffffff, 0x0500000e, 0x591c0009, 0x80000d40, - 0x0500000b, 0x58040208, 0x82000500, 0x000000ff, - 0x90000592, 0x05000005, 0xb00005a0, 0x05000003, - 0x90000588, 0x05020002, 0x58041009, 0x480a5809, - 0x592c040b, 0x81200540, 0x48025c0b, 0x0501f002, - 0x49225c09, 0x846001c0, 0x80100540, 0x48025808, - 0x051dfb9c, 0x05020014, 0x592c0001, 0x497a5801, - 0x4c000000, 0x42000000, 0x0010de60, 0x50000000, - 0x48025802, 0x0001fb82, 0x5c025800, 0x812e59c0, - 0x05fe07f4, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800, - 0x1c01f000, 0x0519ff30, 0x05fdf7f7, 0x4933c857, - 0x91380d95, 0x05020008, 0x050dfaf0, 0x05000005, - 0x5930082a, 0x58040416, 0x8400051a, 0x48000c16, - 0x0005f7dc, 0x91380d96, 0x05ba0824, 0x0005f7dc, - 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000, - 0x4c580000, 0x59325809, 0x91cca406, 0x59cc1806, - 0x820c0580, 0x01000000, 0x05020003, 0x6008b000, - 0x0501f00a, 0x6020b000, 0x912cac09, 0x051dfae0, - 0x8c0c0500, 0x05000007, 0x6020b000, 0x592e5801, - 0x812e59c0, 0x05b8080d, 0x912cac09, 0x051dfad8, - 0x0501f812, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c500000, - 0x4c540000, 0x4c580000, 0x91cca406, 0x5930a809, - 0x9054ac09, 0x601cb000, 0x051dfac9, 0x5c00b000, - 0x5c00a800, 0x5c00a000, 0x4933c857, 0x0509fee6, - 0x000407dc, 0x4d2c0000, 0x050dfd67, 0x05020008, - 0x41780800, 0x4d400000, 0x60028000, 0x050dfb94, - 0x5c028000, 0x5c025800, 0x0005f7dc, 0x5931d82d, - 0x58ef400b, 0x58ee580d, 0x4a025a08, 0x00000103, - 0x58ec0009, 0x0801f800, 0x5c025800, 0x0005f7dc, - 0x4933c857, 0x59cc1806, 0x820c0580, 0x02000000, - 0x0502001f, 0x4a026802, 0x00fffffd, 0x5934000a, - 0x84000504, 0x4802680a, 0x60000000, 0x4c0c0000, - 0x0501f824, 0x5c001800, 0x000407dc, 0x59300c29, - 0x900405a1, 0x05020006, 0x05c9f80d, 0x61fc19ff, - 0x60102000, 0x60483000, 0x05d9fa3a, 0x59300809, - 0x800409c0, 0x000407dc, 0x4a000a08, 0x00000103, - 0x480c0809, 0x5931d82d, 0x58ef400b, 0x58ee580d, - 0x58ec0009, 0x0801f800, 0x0005f7dc, 0x42000000, - 0x0010e45d, 0x051df9bf, 0x60180000, 0x4c0c0000, - 0x0501f808, 0x5c001800, 0x05fc07ed, 0x4c0c0000, - 0x0501f823, 0x5c001800, 0x05fe07e9, 0x1c01f000, - 0x4933c857, 0x4d400000, 0x4d240000, 0x4d200000, - 0x5932481d, 0x40028000, 0x59300429, 0xb0000d91, - 0x05000003, 0x90000da1, 0x05020010, 0x05c5ffe4, - 0x60001802, 0x051dfae0, 0x05020004, 0x59300429, - 0x900005a1, 0x05c40d3a, 0x59300429, 0xb0000591, - 0x05020002, 0x41781800, 0x60040000, 0x05e5f811, - 0x80000580, 0x0501f002, 0x90000541, 0x5c024000, - 0x5c024800, 0x5c028000, 0x1c01f000, 0x4933c857, - 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0502000b, - 0x497a6006, 0x497a6205, 0x050dfa50, 0x05000002, - 0x497a6417, 0x4d380000, 0x608a7000, 0x0501fb0f, - 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000, - 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000, - 0x4c580000, 0x59325809, 0x592e5801, 0x912cac09, - 0x91cca406, 0x59a808d0, 0x82040d00, 0x000003ff, - 0x9004148f, 0x05001011, 0x603cb000, 0x051dfa40, - 0x592e5801, 0x912cac09, 0x90080c8f, 0x05001008, - 0x603cb000, 0x051dfa3a, 0x592e5801, 0x912cac09, - 0x9004148f, 0x05001005, 0x603c1000, 0x4008b000, - 0x051dfa33, 0x0501f003, 0x4004b000, 0x051dfa30, - 0x5931d82d, 0x58ef400b, 0x58ee580d, 0x4a025a08, - 0x00000103, 0x592e5801, 0x58ec0009, 0x0801f800, - 0x0005ffdc, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000, - 0x4c500000, 0x4c540000, 0x4c580000, 0x59cc0006, - 0x82000d80, 0x01000000, 0x05000021, 0x59cc0007, - 0x9000b1c0, 0x8258b500, 0x000000ff, 0x8058b104, - 0x9058b402, 0x90580c87, 0x05001002, 0x6018b000, - 0x91cca406, 0x59301009, 0x800811c0, 0x05b40f3f, - 0x9008ac09, 0x051dfa0a, 0x82000d00, 0xff000000, - 0x800409c0, 0x05000014, 0x8200b500, 0x000000ff, - 0x05000011, 0x8058b104, 0x90580c8e, 0x05001002, - 0x6034b000, 0x58081001, 0x800811c0, 0x05b40f2f, - 0x9008ac09, 0x051df9fa, 0x0501f007, 0x59301009, - 0x800811c0, 0x05b40f29, 0x48001009, 0x59cc0007, - 0x4800100a, 0x05fdff2d, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857, + 0x1c01f000, 0x40bec000, 0x05fdf7fc, 0x42000000, + 0x001123e4, 0x051dfe1e, 0x4933c856, 0x417a6000, + 0x05fdf7f7, 0x59a80006, 0x8c000510, 0x05fc07d9, + 0x59a86a3e, 0x803469c0, 0x05000015, 0x59aa603f, + 0x59300a03, 0x90040d80, 0x0502000b, 0x64226203, + 0x80346840, 0x4837523e, 0x91300c30, 0x800404af, + 0x05001003, 0x83780d40, 0x00115aa4, 0x4807503f, + 0x1c01f000, 0x91326430, 0x81300caf, 0x05fc17f1, + 0x42026000, 0x00115aa4, 0x05fdf7ee, 0x42000000, + 0x001123e3, 0x051dfe01, 0x80026580, 0x1c01f000, + 0x4933c857, 0x91380593, 0x05020008, 0x59300004, + 0x8c00053e, 0x05000004, 0x05f9f86f, 0x05f5ffc4, + 0x05f9f85e, 0x1c01f000, 0x4933c857, 0x598800bf, + 0x80000000, 0x480310bf, 0x1c01f000, 0x4933c857, + 0x59300203, 0x90003491, 0x05b61ca7, 0x4d2c0000, + 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00109984, + 0x00109ea0, 0x0010a02b, 0x00109984, 0x0010a07a, + 0x00109ae1, 0x00109984, 0x00109984, 0x00109e33, + 0x00109984, 0x00109984, 0x00109984, 0x00109984, + 0x00109984, 0x0010b3e4, 0x00109984, 0x00109984, + 0x05b5fc91, 0x4933c857, 0x59300203, 0x90003491, + 0x05b61c8d, 0x0c01f001, 0x0010999b, 0x0010abc5, + 0x0010999b, 0x0010999b, 0x0010999b, 0x0010999b, + 0x0010999b, 0x0010999b, 0x0010ab65, 0x0010abe4, + 0x0010ac65, 0x0010abe4, 0x0010ac65, 0x0010999b, + 0x0010b40a, 0x0010999b, 0x0010999b, 0x05b5fc7a, + 0x05b5fc79, 0x4933c857, 0x4d300000, 0x4d1c0000, + 0x59300203, 0x9000058f, 0x05b60c73, 0x91380593, + 0x05020025, 0x59300c03, 0xb0040586, 0x05000015, + 0xb0040584, 0x0502000a, 0x4d300000, 0x5932602a, + 0x050dfd52, 0x5c026000, 0x0500001c, 0x591c0416, + 0x8400054a, 0x48023c16, 0x0501f010, 0x59300019, + 0x82000500, 0xff000000, 0x82000580, 0xc2000000, + 0x05020012, 0x5930001e, 0x05fdfd14, 0x0501f00f, + 0x59300416, 0x84000504, 0x48026416, 0x5930141d, + 0x050dfd35, 0x05000009, 0x411e6000, 0x5930001c, + 0x80000540, 0x05000005, 0x497a601c, 0x0801f800, + 0x0501f002, 0x05f5ff5e, 0x5c023800, 0x5c026000, + 0x0009f010, 0x4933c857, 0x4d2c0000, 0x59325809, + 0x59300203, 0x90003491, 0x05b61c43, 0x0c01f803, + 0x5c025800, 0x1c01f000, 0x001099e7, 0x001099e7, + 0x001099e7, 0x001099fc, 0x00109a4a, 0x001099e7, + 0x001099e7, 0x001099e7, 0x001099e8, 0x001099e7, + 0x001099e7, 0x001099e7, 0x001099e7, 0x001099e7, + 0x001099e7, 0x001099e7, 0x00109a34, 0x05b5fc2e, + 0x4933c857, 0xb1380580, 0x05b60c2b, 0x4a026008, + 0x00082000, 0x640e6203, 0x493a6403, 0x64065c0c, + 0x592c0011, 0x48026013, 0x497a6015, 0x592c020c, + 0x800000c2, 0x800010c4, 0x80081400, 0x480a6006, + 0x0001f995, 0x42000800, 0x80000060, 0x0005f6d4, + 0x4933c857, 0xb1380490, 0x05b61c17, 0xb1380489, + 0x05b41c15, 0x0c01f001, 0x00109a0a, 0x00109a17, + 0x00109a09, 0x00109a09, 0x00109a09, 0x00109a09, + 0x00109a1d, 0x05b5fc0c, 0x050dfc2c, 0x05000003, + 0x64426203, 0x0501f002, 0x64126203, 0x640a5c0c, + 0x592c020b, 0x48025c0d, 0x592c020d, 0x48025a0b, + 0x592c0010, 0x48025811, 0x1c01f000, 0x05f5fef3, + 0x050df83a, 0x05000003, 0x641a5a0a, 0x0001fba8, + 0x0009f010, 0x05f5feed, 0x4d3c0000, 0x417a7800, + 0x05c5f9a3, 0x5c027800, 0x60503000, 0x41782800, + 0x60082000, 0x4d400000, 0x4d440000, 0x59368c03, + 0x60a68000, 0x0511f991, 0x5c028800, 0x5c028000, + 0x42000000, 0x001123f8, 0x051dfd29, 0x050df823, + 0x00080010, 0x64a65a0a, 0x0001fba8, 0x0009f010, + 0x4933c857, 0xb13805a1, 0x05000006, 0xb13805a0, + 0x05020007, 0x59cc0002, 0x8c000526, 0x05000005, + 0xb1380589, 0x05000004, 0x05b5fbd7, 0x05fdff27, + 0x1c01f000, 0x59a80061, 0x48026205, 0x64126203, + 0x5930001c, 0x80000540, 0x05000003, 0x497a601c, + 0x0801f800, 0x1c01f000, 0x4933c857, 0xb1380588, + 0x05000003, 0xb1380593, 0x05b60bc7, 0x592c020a, + 0x90000587, 0x05000008, 0x59300013, 0x80000540, + 0x05000005, 0x592c0810, 0x80040480, 0x48025810, + 0x64565a0a, 0x592c020a, 0x80000540, 0x05020002, + 0x64025a0a, 0x0001fba8, 0x0009f010, 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000, - 0x6008b000, 0x59cc0806, 0x82040580, 0x01000000, - 0x05000004, 0x8204b500, 0x0000ffff, 0x8058b104, - 0x91cca406, 0x59300009, 0x9000ac09, 0x051df9dc, - 0x05fdff16, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x5c025800, 0x1c01f000, 0x4933c857, 0x4937c857, - 0x4d1c0000, 0x05edfedd, 0x05020020, 0x59cc0001, - 0x82000500, 0x00ffffff, 0x59341002, 0x82081500, - 0x00ffffff, 0x80080580, 0x05020018, 0x497a6205, - 0x60d40800, 0x050dfa35, 0x0502000f, 0x591c001e, - 0x800001c0, 0x0500000c, 0x497a381e, 0x591c0416, - 0x8c000502, 0x05b40ef1, 0x84000502, 0x48023c16, - 0x591c1407, 0x90080583, 0x05000005, 0x90080586, - 0x05000005, 0x05fdfcdf, 0x0501f004, 0x0501f805, - 0x0501f002, 0x0501f8c4, 0x5c023800, 0x1c01f000, - 0x4d2c0000, 0x591e5809, 0x4933c857, 0x491fc857, - 0x493bc857, 0x492fc857, 0x91380595, 0x050000b8, - 0x91380596, 0x050200b4, 0x4d300000, 0x411e6000, - 0x59cc0207, 0x4803c857, 0x82000d00, 0x0000ff00, - 0x82040580, 0x00001700, 0x05000004, 0x82040580, - 0x00000300, 0x05020064, 0x050df990, 0x05000006, - 0x591c0403, 0xb0000590, 0x05020003, 0x05fdfcbd, - 0x0501f09d, 0x591c0203, 0x4803c857, 0x9000058d, - 0x05000040, 0x812e59c0, 0x0500009a, 0x591c0202, - 0x4803c857, 0x82000580, 0x0000ffff, 0x05020081, - 0x050df97e, 0x05000004, 0x591c0203, 0x90000d8e, - 0x0502007c, 0x592c020e, 0x4803c857, 0x90000503, - 0x90000582, 0x05020007, 0x592c0813, 0x591c0013, - 0x4803c857, 0x4807c857, 0x80040580, 0x05020071, - 0x591c0416, 0x4803c857, 0x8c000500, 0x0502006d, - 0x42000000, 0x0010e435, 0x051df8a6, 0x41780800, - 0x591c1006, 0x60280000, 0x05f5f854, 0x592c040a, - 0x4803c857, 0x800001c0, 0x0500000a, 0x80080c80, - 0x05001003, 0x05b60e99, 0x80001040, 0x480a5c0a, - 0x800811c0, 0x05020003, 0x0509fa7b, 0x0501f06a, - 0x0509fe60, 0x591c0819, 0x591c001a, 0x4806580c, - 0x4802580d, 0x592e4414, 0x81224110, 0x59300008, - 0x8c000500, 0x05be08f8, 0x497a3809, 0x0001fab8, - 0x0502004c, 0x411e6000, 0x05fdfc7a, 0x0501f05a, - 0x05fdfcab, 0x05000015, 0x591c0006, 0x48026006, - 0x4926601d, 0x4936600a, 0x050df931, 0x640e6407, - 0x492e6009, 0x591c0819, 0x591c101a, 0x48066019, - 0x480a601a, 0x4d380000, 0x591e7403, 0x4d300000, - 0x411e6000, 0x05fdfc67, 0x5c026000, 0x0009f800, - 0x5c027000, 0x0501f044, 0x59a8005e, 0x48023a05, - 0x0501f041, 0x59cc0407, 0x9000058b, 0x05020026, - 0x59340a00, 0x84040d0e, 0x48066a00, 0x592c0a08, - 0x82040d00, 0x000000ff, 0x90040d94, 0x05000002, - 0x640e6229, 0x59300008, 0x8c000500, 0x05be08ca, - 0x4d400000, 0x497a5c0d, 0x600e8000, 0x592c0a0c, - 0x05e1fea7, 0x051df96c, 0x05020006, 0x0001fb82, - 0x59300a29, 0x90040d83, 0x05080e1e, 0x497a6009, - 0x5c028000, 0x4a026403, 0x00000085, 0x64266203, - 0x640a6407, 0x42000800, 0x80004040, 0x050dff08, - 0x0005feab, 0x4203e000, 0xb0800000, 0x6023f800, - 0x0501f019, 0x59cc0207, 0x82000580, 0x00002a00, - 0x05020004, 0x59a8005e, 0x48023a05, 0x0501f012, - 0x812e59c0, 0x05b40e39, 0x0005f9f3, 0x497a6027, - 0x05e9fc64, 0x4a025a08, 0x00000103, 0x591c0008, - 0x8c000500, 0x05be08a0, 0x591c0402, 0x48025c0a, - 0x640e5a0a, 0x497a5c0d, 0x0001fb82, 0x05fdfc21, - 0x05e1fa17, 0x5c026000, 0x0005ffdc, 0x0501f002, - 0x5c026000, 0x5c025800, 0x1c01f000, 0x0501f813, - 0x05fdf7fd, 0x4933c857, 0x91380595, 0x05020004, - 0x59a8005e, 0x48023a05, 0x0501f009, 0x91380596, - 0x05020009, 0x4d300000, 0x411e6000, 0x0519fb04, - 0x0005fe4e, 0x0005ffdc, 0x5c026000, 0x497a381e, - 0x0005ffdc, 0x1c01f000, 0x4c5c0000, 0x591c0416, - 0x84000540, 0x48023c16, 0x59ccb80b, 0x4933c857, - 0x491fc857, 0x492fc857, 0x4803c857, 0x485fc857, - 0x050df8ca, 0x05020007, 0x8c5c053c, 0x05000005, - 0x59a8005e, 0x48023a05, 0x497a381e, 0x0501f068, - 0x4d300000, 0x411e6000, 0x0509f82e, 0x5c026000, - 0x591c0407, 0x90000580, 0x05000061, 0x591c0403, - 0xb0000590, 0x0502000a, 0x4d300000, 0x411e6000, - 0x64066203, 0x42000800, 0x80000043, 0x0005feab, - 0x5c026000, 0x497a381e, 0x0501f055, 0x591c0203, - 0x9000058d, 0x0500001c, 0x812e59c0, 0x05b40de7, - 0x592c020e, 0x4803c857, 0x8c000500, 0x0502001b, - 0x8c000502, 0x05000014, 0x591c0416, 0x8c00051c, - 0x05020007, 0x591c0013, 0x4803c857, 0x800001c0, - 0x0500000d, 0x591c0014, 0x48023818, 0x4a023814, - 0x0fffffff, 0x592c020c, 0x8400051e, 0x48025a0c, - 0x42000000, 0x0010e437, 0x0519ffd2, 0x64063a16, - 0x0501f01a, 0x42000000, 0x0010e438, 0x0519ffcd, - 0x641e3a16, 0x0501f015, 0x59300017, 0x591c0817, - 0x80040580, 0x0502002e, 0x8c5c053a, 0x05fe07f6, - 0x59cc000a, 0x592c1813, 0x4803c857, 0x480fc857, - 0x800c0580, 0x05fc07f0, 0x59cc000a, 0x4803c857, - 0x48023818, 0x48023817, 0x42000000, 0x0010e436, - 0x0519ffb8, 0x64163a16, 0x050df878, 0x0500001a, - 0x591c0416, 0x8c00051a, 0x05000017, 0x4803c857, - 0x8c00051e, 0x05000016, 0x4130b800, 0x05fdfbd4, - 0x0500000f, 0x4926601d, 0x64066203, 0x647a6403, - 0x585c041b, 0x4802641b, 0x585c021b, 0x4802621b, - 0x591e680a, 0x4936600a, 0x050df855, 0x64066407, - 0x42000800, 0x80000040, 0x0005feab, 0x405e6000, - 0x0501f003, 0x5c00b800, 0x0509f70e, 0x5c00b800, - 0x0005f7dc, 0x4933c857, 0x4d1c0000, 0x05edfd6b, - 0x0502003f, 0x59cc0001, 0x59341002, 0x80080580, - 0x82000500, 0x00ffffff, 0x05020037, 0x5930141b, - 0x050df909, 0x05b40d89, 0x591c1407, 0x90080587, - 0x05000031, 0x90080582, 0x0500002f, 0x90080580, - 0x0500002d, 0x591c0202, 0x82000d80, 0x0000ffff, - 0x05000004, 0x59301a1b, 0x800c0580, 0x05020026, - 0x91380595, 0x05000022, 0x4d300000, 0x4d2c0000, - 0x411e6000, 0x59325809, 0x0509fc63, 0x05b40d73, - 0x592c0208, 0x82000500, 0x000000ff, 0x90000594, - 0x05000002, 0x640e6229, 0x497a5c0d, 0x600e8000, - 0x592c0a0c, 0x05e1fdba, 0x051df87f, 0x05020006, - 0x0001fb82, 0x59300a29, 0x90040d83, 0x05080d31, - 0x497a6009, 0x5c025800, 0x4a026403, 0x00000085, - 0x64266203, 0x640a6407, 0x42000800, 0x80004040, - 0x0005feab, 0x5c026000, 0x0501f003, 0x59a8005e, - 0x48023a05, 0x497a381e, 0x0005ffdc, 0x5c023800, - 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d2c0000, - 0x59325809, 0x59342200, 0x82102500, 0xffffdffd, - 0x48126a00, 0x91383595, 0x05000009, 0x0509fc36, - 0x05000047, 0x050dfab8, 0x05020003, 0x6008b000, - 0x050dfa9f, 0x0501fa2a, 0x0501f059, 0x91cc1408, - 0x6008b000, 0x91341c06, 0x0501ffa9, 0x0502000f, - 0x91cc140a, 0x6008b000, 0x91341c08, 0x0501ffa4, - 0x0502000a, 0x05c5face, 0x59342200, 0x59cc1007, - 0x800811c0, 0x05000003, 0x480a6801, 0x84102542, - 0x48126a00, 0x0501f048, 0x4d3c0000, 0x417a7800, - 0x05c5fa7c, 0x5c027800, 0x42000000, 0x0010e454, - 0x0519ff28, 0x59340200, 0x84000558, 0x48026a00, - 0x4d300000, 0x05fdfb4a, 0x05b40d20, 0x4926601d, - 0x4936600a, 0x497a6009, 0x64066407, 0x64066403, - 0x600c3000, 0x0519fcc2, 0x05c5fd55, 0x59240400, - 0x8c00050a, 0x0502000b, 0x41782800, 0x60043000, - 0x4d400000, 0x60a68000, 0x0515fed5, 0x5c028000, - 0x64126407, 0x641e6203, 0x6406642c, 0x0501f005, - 0x64066203, 0x602c0800, 0x05ddfc1b, 0x05f1ff9e, - 0x5c026000, 0x0509fbf4, 0x0500001d, 0x050dfa76, - 0x0502001d, 0x0501f9ea, 0x0501f019, 0x42000000, - 0x0010e457, 0x0519feff, 0x4d3c0000, 0x417a7800, - 0x05c5fa4c, 0x42000000, 0x0010e454, 0x0519fef9, + 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c100000, + 0x05b5ff51, 0x05b40bac, 0x497a5a0a, 0x59a800d5, + 0x82000500, 0x0000f000, 0x48025c0b, 0x59a808bb, + 0x90040c18, 0x48065a0b, 0x412cb800, 0x4d2c0000, + 0x41cca000, 0x6004c000, 0x60b0c800, 0x900404ad, + 0x05021004, 0x912cac0d, 0x0509fab2, 0x0501f023, + 0x40043000, 0x60b00800, 0x912cac0d, 0x0509faad, + 0x901834ac, 0x4c180000, 0x05b5ff37, 0x5c003000, + 0x05000012, 0x8060c000, 0x4a025808, 0x00000110, + 0x492cb801, 0x90180cbd, 0x05021005, 0x40180800, + 0x912cac09, 0x0509fa9f, 0x0501f010, 0x9064cc3c, + 0x901834bc, 0x60f00800, 0x412cb800, 0x912cac09, + 0x0509fa98, 0x05fdf7ec, 0x5c025800, 0x592c020a, + 0x8400055e, 0x48025a0a, 0x592c040b, 0x80640540, + 0x48025c0b, 0x0501f002, 0x5c025800, 0x5c002000, + 0x813669c0, 0x05000003, 0x59343403, 0x0501f002, + 0x61fc31ff, 0x4932580c, 0x481a5c0a, 0xb0100594, + 0x0502001a, 0x4a02580c, 0xffffffff, 0x491e5817, + 0x41781000, 0x831c0580, 0xffffffff, 0x0500000e, + 0x591c0009, 0x80000d40, 0x0500000b, 0x58040208, + 0x82000500, 0x000000ff, 0x90000592, 0x05000005, + 0xb00005a0, 0x05000003, 0x90000588, 0x05020002, + 0x58041009, 0x480a5809, 0x592c040b, 0x81200540, + 0x48025c0b, 0x0501f002, 0x49225c09, 0x846001c0, + 0x80100540, 0x48025808, 0x051dfde5, 0x05020015, + 0x592c0001, 0x497a5801, 0x4c000000, 0x42000000, + 0x00111dfa, 0x50000000, 0x48025802, 0x0001fba8, + 0x5c025800, 0x812e59c0, 0x05fe07f4, 0x80000580, + 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000, + 0x051df95a, 0x05fc07f7, 0x05b5fef4, 0x81780000, + 0x05fdf7f4, 0x4933c857, 0x91380d95, 0x05020008, + 0x050dfb52, 0x05000005, 0x5930082a, 0x58040416, + 0x8400051a, 0x48000c16, 0x0009f010, 0x91380d96, + 0x05b60b29, 0x0009f010, 0x4933c857, 0x4d2c0000, + 0x4c500000, 0x4c540000, 0x4c580000, 0x59325809, + 0x91cca406, 0x59cc1806, 0x820c0580, 0x01000000, + 0x05020003, 0x6008b000, 0x0501f00a, 0x6020b000, + 0x912cac09, 0x051dfd25, 0x8c0c0500, 0x05000007, + 0x6020b000, 0x592e5801, 0x812e59c0, 0x05b40b12, + 0x912cac09, 0x051dfd1d, 0x0501f812, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000, + 0x4933c857, 0x4c500000, 0x4c540000, 0x4c580000, + 0x91cca406, 0x5930a809, 0x9054ac09, 0x601cb000, + 0x051dfd0e, 0x5c00b000, 0x5c00a800, 0x5c00a000, + 0x4933c857, 0x0509ff39, 0x00080010, 0x4d2c0000, + 0x050dfdd7, 0x05020008, 0x41780800, 0x4d400000, + 0x60028000, 0x050dfbfd, 0x5c028000, 0x5c025800, + 0x0009f010, 0x5931d82d, 0x58ef400b, 0x58ee580d, + 0x4a025a08, 0x00000103, 0x58ec0009, 0x0801f800, + 0x5c025800, 0x0009f010, 0x4933c857, 0x59cc1806, + 0x820c0580, 0x02000000, 0x0502001f, 0x4a026802, + 0x00fffffd, 0x5934000a, 0x84000504, 0x4802680a, + 0x60000000, 0x4c0c0000, 0x0501f824, 0x5c001800, + 0x00080010, 0x59300c29, 0x900405a1, 0x05020006, + 0x05c5fb73, 0x61fc19ff, 0x60102000, 0x60483000, + 0x05d5fea1, 0x59300809, 0x800409c0, 0x00080010, + 0x4a000a08, 0x00000103, 0x480c0809, 0x5931d82d, + 0x58ef400b, 0x58ee580d, 0x58ec0009, 0x0801f800, + 0x0009f010, 0x42000000, 0x00112401, 0x051dfc04, + 0x60180000, 0x4c0c0000, 0x0501f808, 0x5c001800, + 0x05fc07ed, 0x4c0c0000, 0x0501f823, 0x5c001800, + 0x05fe07e9, 0x1c01f000, 0x4933c857, 0x4d400000, + 0x4d240000, 0x4d200000, 0x5932481d, 0x40028000, + 0x59300429, 0xb0000d91, 0x05000003, 0x90000da1, + 0x05020010, 0x05c5fb4a, 0x60001802, 0x051dfd25, + 0x05020004, 0x59300429, 0x900005a1, 0x05c4089b, + 0x59300429, 0xb0000591, 0x05020002, 0x41781800, + 0x60040000, 0x05e1fdbf, 0x80000580, 0x0501f002, + 0x90000541, 0x5c024000, 0x5c024800, 0x5c028000, + 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325809, + 0x812e59c0, 0x0502000b, 0x497a6006, 0x497a6205, + 0x050dfab2, 0x05000002, 0x497a6417, 0x4d380000, + 0x608a7000, 0x0501fb13, 0x5c027000, 0x80000580, + 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000, + 0x4c500000, 0x4c540000, 0x4c580000, 0x59325809, + 0x592e5801, 0x912cac09, 0x91cca406, 0x59a808d5, + 0x82040d00, 0x000003ff, 0x9004148f, 0x05001011, + 0x603cb000, 0x051dfc85, 0x592e5801, 0x912cac09, + 0x90080c8f, 0x05001008, 0x603cb000, 0x051dfc7f, + 0x592e5801, 0x912cac09, 0x9004148f, 0x05001005, + 0x603c1000, 0x4008b000, 0x051dfc78, 0x0501f003, + 0x4004b000, 0x051dfc75, 0x5931d82d, 0x58ef400b, + 0x58ee580d, 0x4a025a08, 0x00000103, 0x592e5801, + 0x58ec0009, 0x0801f800, 0x0009f810, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000, + 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000, + 0x4c580000, 0x59cc0006, 0x82000d80, 0x01000000, + 0x05000021, 0x59cc0007, 0x9000b1c0, 0x8258b500, + 0x000000ff, 0x8058b104, 0x9058b402, 0x90580c87, + 0x05001002, 0x6018b000, 0x91cca406, 0x59301009, + 0x800811c0, 0x05b40a44, 0x9008ac09, 0x051dfc4f, + 0x82000d00, 0xff000000, 0x800409c0, 0x05000014, + 0x8200b500, 0x000000ff, 0x05000011, 0x8058b104, + 0x90580c8e, 0x05001002, 0x6034b000, 0x58081001, + 0x800811c0, 0x05b40a34, 0x9008ac09, 0x051dfc3f, + 0x0501f007, 0x59301009, 0x800811c0, 0x05b40a2e, + 0x48001009, 0x59cc0007, 0x4800100a, 0x05fdff2d, + 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800, + 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000, + 0x4c540000, 0x4c580000, 0x6008b000, 0x59cc0806, + 0x82040580, 0x01000000, 0x05000004, 0x8204b500, + 0x0000ffff, 0x8058b104, 0x91cca406, 0x59300009, + 0x9000ac09, 0x051dfc21, 0x05fdff16, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000, + 0x4933c857, 0x4937c857, 0x4d1c0000, 0x05edfdc1, + 0x05020020, 0x59cc0001, 0x82000500, 0x00ffffff, + 0x59341002, 0x82081500, 0x00ffffff, 0x80080580, + 0x05020018, 0x497a6205, 0x60d40800, 0x050dfa97, + 0x0502000f, 0x591c001e, 0x800001c0, 0x0500000c, + 0x497a381e, 0x591c0416, 0x8c000502, 0x05b409f6, + 0x84000502, 0x48023c16, 0x591c1407, 0x90080583, + 0x05000005, 0x90080586, 0x05000005, 0x05fdfcbe, + 0x0501f004, 0x0501f805, 0x0501f002, 0x0501f8c8, + 0x5c023800, 0x1c01f000, 0x4d2c0000, 0x591e5809, + 0x4933c857, 0x491fc857, 0x493bc857, 0x492fc857, + 0x91380595, 0x050000bc, 0x91380596, 0x050200b8, + 0x4d300000, 0x411e6000, 0x59cc0207, 0x4803c857, + 0x82000d00, 0x0000ff00, 0x82040580, 0x00001700, + 0x05000004, 0x82040580, 0x00000300, 0x05020068, + 0x050df9f2, 0x05000006, 0x591c0403, 0xb0000590, + 0x05020003, 0x05fdfc9c, 0x0501f0a1, 0x591c0203, + 0x4803c857, 0x9000058d, 0x05000044, 0x812e59c0, + 0x0500009e, 0x591c0202, 0x4803c857, 0x82000580, + 0x0000ffff, 0x05020085, 0x050df9e0, 0x05000004, + 0x591c0203, 0x90000d8e, 0x05020080, 0x592c020e, + 0x4803c857, 0x90000503, 0x90000582, 0x0502000b, + 0x592c0813, 0x591c0013, 0x4d300000, 0x411e6000, + 0x050dfffc, 0x5c026000, 0x4803c857, 0x4807c857, + 0x80040580, 0x05020071, 0x591c0416, 0x4803c857, + 0x8c000500, 0x0502006d, 0x42000000, 0x001123d6, + 0x051dfae7, 0x41780800, 0x591c1006, 0x60280000, + 0x05f1ffd3, 0x592c040a, 0x4803c857, 0x800001c0, + 0x0500000a, 0x80080c80, 0x05001003, 0x05b6099a, + 0x80001040, 0x480a5c0a, 0x800811c0, 0x05020003, + 0x0509fabb, 0x0501f06a, 0x0509febf, 0x591c0819, + 0x591c001a, 0x4806580c, 0x4802580d, 0x592e4414, + 0x81224110, 0x59300008, 0x8c000500, 0x05ba0c5c, + 0x497a3809, 0x0001fac0, 0x0502004c, 0x411e6000, + 0x05fdfc55, 0x0501f05a, 0x05fdfc86, 0x05000015, + 0x591c0006, 0x48026006, 0x4926601d, 0x4936600a, + 0x050df98f, 0x640e6407, 0x492e6009, 0x591c0819, + 0x591c101a, 0x48066019, 0x480a601a, 0x4d380000, + 0x591e7403, 0x4d300000, 0x411e6000, 0x05fdfc42, + 0x5c026000, 0x0009f839, 0x5c027000, 0x0501f044, + 0x59a80061, 0x48023a05, 0x0501f041, 0x59cc0407, + 0x9000058b, 0x05020026, 0x59340a00, 0x84040d0e, + 0x48066a00, 0x592c0a08, 0x82040d00, 0x000000ff, + 0x90040d94, 0x05000002, 0x640e6229, 0x59300008, + 0x8c000500, 0x05ba0c2e, 0x4d400000, 0x497a5c0d, + 0x600e8000, 0x592c0a0c, 0x05e1fc51, 0x051dfbad, + 0x05020006, 0x0001fba8, 0x59300a29, 0x90040d83, + 0x05080e7d, 0x497a6009, 0x5c028000, 0x4a026403, + 0x00000085, 0x64266203, 0x640a6407, 0x42000800, + 0x80004040, 0x050dff74, 0x0005fee2, 0x4203e000, + 0xb0800000, 0x6023f800, 0x0501f019, 0x59cc0207, + 0x82000580, 0x00002a00, 0x05020004, 0x59a80061, + 0x48023a05, 0x0501f012, 0x812e59c0, 0x05b4093a, + 0x0005fa1a, 0x497a6027, 0x05e9fab2, 0x4a025a08, + 0x00000103, 0x591c0008, 0x8c000500, 0x05ba0c04, + 0x591c0402, 0x48025c0a, 0x640e5a0a, 0x497a5c0d, + 0x0001fba8, 0x05fdfbfc, 0x05ddffa2, 0x5c026000, + 0x0009f810, 0x0501f002, 0x5c026000, 0x5c025800, + 0x1c01f000, 0x0501f813, 0x05fdf7fd, 0x4933c857, + 0x91380595, 0x05020004, 0x59a80061, 0x48023a05, + 0x0501f009, 0x91380596, 0x05020009, 0x4d300000, + 0x411e6000, 0x0519fd14, 0x0005fe84, 0x0009f810, + 0x5c026000, 0x497a381e, 0x0009f810, 0x1c01f000, + 0x4c5c0000, 0x591c0416, 0x84000540, 0x48023c16, + 0x59ccb80b, 0x4933c857, 0x491fc857, 0x492fc857, + 0x4803c857, 0x485fc857, 0x050df928, 0x05020007, + 0x8c5c053c, 0x05000005, 0x59a80061, 0x48023a05, + 0x497a381e, 0x0501f068, 0x4d300000, 0x411e6000, + 0x0509f866, 0x5c026000, 0x591c0407, 0x90000580, + 0x05000061, 0x591c0403, 0xb0000590, 0x0502000a, + 0x4d300000, 0x411e6000, 0x64066203, 0x42000800, + 0x80000043, 0x0005fee2, 0x5c026000, 0x497a381e, + 0x0501f055, 0x591c0203, 0x9000058d, 0x0500001c, + 0x812e59c0, 0x05b408e8, 0x592c020e, 0x4803c857, + 0x8c000500, 0x0502001b, 0x8c000502, 0x05000014, + 0x591c0416, 0x8c00051c, 0x05020007, 0x591c0013, + 0x4803c857, 0x800001c0, 0x0500000d, 0x591c0014, + 0x48023818, 0x4a023814, 0x0fffffff, 0x592c020c, + 0x8400051e, 0x48025a0c, 0x42000000, 0x001123d8, + 0x051dfa13, 0x64063a16, 0x0501f01a, 0x42000000, + 0x001123d9, 0x051dfa0e, 0x641e3a16, 0x0501f015, + 0x59300017, 0x591c0817, 0x80040580, 0x0502002e, + 0x8c5c053a, 0x05fe07f6, 0x59cc000a, 0x592c1813, + 0x4803c857, 0x480fc857, 0x800c0580, 0x05fc07f0, + 0x59cc000a, 0x4803c857, 0x48023818, 0x48023817, + 0x42000000, 0x001123d7, 0x051df9f9, 0x64163a16, + 0x050df8d6, 0x0500001a, 0x591c0416, 0x8c00051a, + 0x05000017, 0x4803c857, 0x8c00051e, 0x05000016, + 0x4130b800, 0x05fdfbaf, 0x0500000f, 0x4926601d, + 0x64066203, 0x647a6403, 0x585c041b, 0x4802641b, + 0x585c021b, 0x4802621b, 0x591e680a, 0x4936600a, + 0x050df8b3, 0x64066407, 0x42000800, 0x80000040, + 0x0005fee2, 0x405e6000, 0x0501f003, 0x5c00b800, + 0x0509f76d, 0x5c00b800, 0x0009f010, 0x4933c857, + 0x4d1c0000, 0x05edfc4b, 0x0502003f, 0x59cc0001, + 0x59341002, 0x80080580, 0x82000500, 0x00ffffff, + 0x05020037, 0x5930141b, 0x050df96b, 0x05b4088a, + 0x591c1407, 0x90080587, 0x05000031, 0x90080582, + 0x0500002f, 0x90080580, 0x0500002d, 0x591c0202, + 0x82000d80, 0x0000ffff, 0x05000004, 0x59301a1b, + 0x800c0580, 0x05020026, 0x91380595, 0x05000022, + 0x4d300000, 0x4d2c0000, 0x411e6000, 0x59325809, + 0x0509fcb2, 0x05b40874, 0x592c0208, 0x82000500, + 0x000000ff, 0x90000594, 0x05000002, 0x640e6229, + 0x497a5c0d, 0x600e8000, 0x592c0a0c, 0x05e1fb64, + 0x051dfac0, 0x05020006, 0x0001fba8, 0x59300a29, + 0x90040d83, 0x05080d90, 0x497a6009, 0x5c025800, + 0x4a026403, 0x00000085, 0x64266203, 0x640a6407, + 0x42000800, 0x80004040, 0x0005fee2, 0x5c026000, + 0x0501f003, 0x59a80061, 0x48023a05, 0x497a381e, + 0x0009f810, 0x5c023800, 0x1c01f000, 0x4933c857, + 0x4c580000, 0x4d2c0000, 0x59325809, 0x59342200, + 0x82102500, 0xffffdffd, 0x48126a00, 0x91383595, + 0x05000009, 0x0509fc85, 0x05000047, 0x050dfb24, + 0x05020003, 0x6008b000, 0x050dfb0b, 0x0501fa2a, + 0x0501f059, 0x91cc1408, 0x6008b000, 0x91341c06, + 0x0501ffb4, 0x0502000f, 0x91cc140a, 0x6008b000, + 0x91341c08, 0x0501ffaf, 0x0502000a, 0x05c1fe2b, + 0x59342200, 0x59cc1007, 0x800811c0, 0x05000003, + 0x480a6801, 0x84102542, 0x48126a00, 0x0501f048, + 0x4d3c0000, 0x417a7800, 0x05c1fdd9, 0x5c027800, + 0x42000000, 0x001123f8, 0x051df969, 0x59340200, + 0x84000558, 0x48026a00, 0x4d300000, 0x05fdfb25, + 0x05b40821, 0x4926601d, 0x4936600a, 0x497a6009, + 0x64066407, 0x64066403, 0x600c3000, 0x0519fee5, + 0x05c5f8b7, 0x59240400, 0x8c00050a, 0x0502000b, + 0x41782800, 0x60043000, 0x4d400000, 0x60a68000, + 0x0519f8e2, 0x5c028000, 0x64126407, 0x641e6203, + 0x6406642c, 0x0501f005, 0x64066203, 0x602c0800, + 0x05ddf8f4, 0x05f1ff1d, 0x5c026000, 0x0509fc43, + 0x0500001d, 0x050dfae2, 0x0502001d, 0x0501f9ea, + 0x0501f019, 0x42000000, 0x001123fb, 0x051df940, + 0x4d3c0000, 0x417a7800, 0x05c1fda9, 0x42000000, + 0x001123f8, 0x051df93a, 0x59340200, 0x84000558, + 0x48026a00, 0x600c3000, 0x41782800, 0x60142000, + 0x4d400000, 0x4d440000, 0x59368c03, 0x60a68000, + 0x050dfd92, 0x5c028800, 0x5c028000, 0x5c027800, + 0x05c1fdde, 0x0009f810, 0x0501f002, 0x05fdfce9, + 0x5c025800, 0x5c00b000, 0x1c01f000, 0x4933c857, + 0x41380000, 0xb13834a0, 0x05b21fdf, 0x0c01f001, + 0x00109e9c, 0x00109e99, 0x00109e9c, 0x00109e9c, + 0x00109e9c, 0x00109e9c, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e9c, + 0x00109e98, 0x00109e9c, 0x00109e9c, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e9c, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e9c, 0x00109e9c, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e9c, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e9c, + 0x00109e9c, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e9c, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e9c, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e9c, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e9c, 0x00109e98, 0x00109e9c, + 0x00109e9c, 0x00109e98, 0x00109e98, 0x00109e98, + 0x00109e98, 0x00109e98, 0x00109e98, 0x00109e98, + 0x05b1ff7d, 0x64066203, 0x493a6403, 0x05f1f68f, + 0x4933c857, 0x64066203, 0x493a6403, 0x05f1f68b, + 0x59300403, 0xb00034a0, 0x05b21f73, 0x91383593, + 0x05000087, 0x913835a7, 0x05020042, 0x4933c857, + 0x05f5fa7f, 0x0519ff14, 0x0509fcaa, 0x0500000c, + 0x0509fcb7, 0x05000039, 0x59300403, 0x90000da2, + 0x05020033, 0x60140004, 0x05fdfcac, 0x05000030, + 0x05fdfcc9, 0x05000030, 0x0501f030, 0x600c0004, + 0x05fdfca6, 0x0500002a, 0x05c1fd50, 0x601c0800, + 0x05ddf844, 0x0501f940, 0x4d440000, 0x59368c03, + 0x83440580, 0x000007fe, 0x05020007, 0x59a8124c, + 0x84081540, 0x05e1fcd3, 0x05020002, 0x8408154a, + 0x480b524c, 0x60a68000, 0x05f5f834, 0x4d3c0000, + 0x417a7800, 0x05c1fcf6, 0x5c027800, 0x916c0583, + 0x0500000b, 0x5932680a, 0x59340008, 0x800001c0, + 0x05020007, 0x59368c03, 0x4933c857, 0x4937c857, + 0x4947c857, 0x05ddf916, 0x0501f008, 0x42000000, + 0x001123f8, 0x051df87a, 0x60543000, 0x41782800, + 0x600c2000, 0x050dfcd9, 0x5c028800, 0x0509ff3a, + 0x0009f010, 0x1c01f000, 0x0501f917, 0x05fdf7fc, + 0x91380594, 0x0500000c, 0x4933c857, 0xb13805a1, + 0x05000003, 0xb13805a0, 0x05fe07f7, 0x05f5fe88, + 0x05fe0276, 0x59300203, 0x9000058e, 0x050804f1, + 0x05b1ff21, 0x4933c857, 0x05f5fa31, 0x050dff59, + 0x05020005, 0x59300009, 0x800001c0, 0x05020026, + 0x05f1f62e, 0x0519fec0, 0x60082800, 0x59300403, + 0xb0000591, 0x050c07e9, 0x4d3c0000, 0x417a7800, + 0x05c1fcbf, 0x5c027800, 0x60583000, 0x41782800, + 0x4d400000, 0x4d440000, 0x59368c03, 0x60242000, + 0x60a68000, 0x050dfcad, 0x5c028800, 0x5c028000, + 0x42000000, 0x001123f8, 0x051df845, 0x0509fc41, + 0x0502000b, 0x05c1fcf5, 0x0501f8e7, 0x59340c03, + 0x82040580, 0x000007fe, 0x05fe07c9, 0x59a80a4c, + 0x84040d40, 0x4807524c, 0x05fdf7c5, 0x0509fc44, + 0x05020003, 0x0501f8dc, 0x05fdf7c1, 0x59300403, + 0x90000db2, 0x05020003, 0x05c5fbbd, 0x05fdf7bc, + 0x90000da2, 0x050008d4, 0x05fdf7b9, 0x4933c857, + 0x4803c857, 0x0c01f001, 0x00109f8f, 0x00109f8f, + 0x00109f8f, 0x00109f8f, 0x00109f8f, 0x00109f8f, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f94, 0x00109ff5, 0x00109f8e, 0x00109ff5, + 0x00109ff5, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109ff5, 0x00109ff5, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109fa2, 0x00109ff5, 0x00109f8e, 0x00109f9d, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f9d, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109ff5, + 0x00109fa0, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109f8e, 0x00109ff5, 0x00109ff5, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109ff5, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109ff5, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109ff5, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109ff5, + 0x00109f8e, 0x00109ff5, 0x00109faa, 0x00109f8e, + 0x00109f8e, 0x00109f8e, 0x00109f8e, 0x00109f8e, + 0x00109fb0, 0x00109f8e, 0x05b1fe87, 0x640a6203, + 0x0509fea6, 0x05000002, 0x643a6203, 0x0509f434, + 0x64166203, 0x59a80061, 0x48026205, 0x0509fe9f, + 0x05000002, 0x643a6203, 0x59a8005f, 0x48026006, + 0x1c01f000, 0x5930082a, 0x49780a05, 0x0501f056, + 0x0509fe7d, 0x0009f010, 0x05c5fb41, 0x05f5fa2e, + 0x05000003, 0x05f5f982, 0x0009f010, 0x05f5f980, + 0x0009f810, 0x05f5f219, 0x4933c857, 0x640a6203, + 0x0509fe8a, 0x05000002, 0x643a6203, 0x1c01f000, + 0x4933c857, 0x4d300000, 0x4d2c0000, 0x59325809, + 0x812e59c0, 0x0500002e, 0x0509fa9c, 0x05b00e5e, + 0x59a80cd2, 0x48065811, 0x59a808d4, 0x48065810, + 0x64025a0a, 0x592c1001, 0x800811c0, 0x05b00e56, + 0x4930100b, 0x492c100a, 0x64001001, 0x4a001009, + 0x00109fd0, 0x4a001003, 0x00114616, 0x4a001005, + 0x00000200, 0x592c0015, 0x48001007, 0x592c0016, + 0x48001008, 0x5c025800, 0x5c026000, 0x0001f029, + 0x4d300000, 0x4d2c0000, 0x5832600b, 0x813261c0, + 0x05b00e41, 0x5832580a, 0x812e59c0, 0x05b00e3e, + 0x49786001, 0x58300002, 0x82000580, 0x00000100, + 0x05020014, 0x59a80cd2, 0x48065811, 0x59a808d4, + 0x48065810, 0x64025a0a, 0x0001fba8, 0x59a81cd1, + 0x840c1d46, 0x480f54d1, 0x0509fe50, 0x05000005, + 0x05fdf8fd, 0x59a8005f, 0x48026006, 0x0501f002, + 0x0009f810, 0x5c025800, 0x5c026000, 0x1c01f000, + 0x4803c857, 0x4a006002, 0x00000100, 0x600a8000, + 0x05fdf7ee, 0x4933c857, 0x640a6203, 0x0509fe3f, + 0x05000002, 0x643a6203, 0x59a8005f, 0x48026006, + 0x1c01f000, 0x4933c857, 0x0509fa54, 0x0500002b, + 0x4d2c0000, 0x050df8f2, 0x05020007, 0x4d400000, + 0x60c68000, 0x60100800, 0x0509ff18, 0x5c028000, + 0x0501f021, 0x050df8f4, 0x05020005, 0x64c65a0a, + 0x64125810, 0x0001fba8, 0x0501f01b, 0x59300c07, + 0x90040590, 0x05000003, 0x90040591, 0x05020007, + 0x64c65a0a, 0x64125811, 0x4a025812, 0x000000ff, + 0x0001fba8, 0x0501f010, 0x592c0408, 0x8c00051e, + 0x0500000d, 0x4a025a08, 0x00000103, 0x4a025809, + 0x01000000, 0x4da00000, 0x4cec0000, 0x5931d82d, + 0x58ef400b, 0x58ec0009, 0x0801f800, 0x5c01d800, + 0x5c034000, 0x5c025800, 0x1c01f000, 0x4933c857, + 0x83340580, 0x001141b4, 0x05020007, 0x91380d95, + 0x05000003, 0x91380d96, 0x05fe0134, 0x0519fd8c, + 0x0009f010, 0x59340400, 0x82000500, 0x000000ff, + 0x9000348c, 0x05b21ddc, 0x59303403, 0xb0180d8d, + 0x05080647, 0x90180db3, 0x0508060d, 0x90180da8, + 0x0508035a, 0x90180da9, 0x05080365, 0xb0180d97, + 0x050c0487, 0x90180d9f, 0x05fc02c6, 0xb0180d95, + 0x05fc02a6, 0x90180d80, 0x05fc0579, 0x90180da2, + 0x05fc02e2, 0x90180db5, 0x05fc03ba, 0x90180db9, + 0x05fc052f, 0x90180dbd, 0x05fc033c, 0xb0180d84, + 0x05fc0368, 0xb0180d89, 0x05fc039b, 0xb0180d98, + 0x050c050d, 0xb0180d83, 0x05080752, 0xb0180d91, + 0x050807ac, 0x90180d84, 0x05020002, 0x60040000, + 0x91380d95, 0x05000004, 0x91380d96, 0x05fe0103, + 0x0501f1ec, 0x4c000000, 0x0519fd59, 0x5c000000, + 0x4d2c0000, 0x4d3c0000, 0x0c01f804, 0x5c027800, + 0x5c025800, 0x1c01f000, 0x0010a081, 0x0010a085, + 0x0010a081, 0x0010a0d6, 0x0010a081, 0x0010a1d9, + 0x0010a263, 0x0010a081, 0x0010a081, 0x0010a227, + 0x0010a081, 0x0010a232, 0x4933c857, 0x497a6008, + 0x59300809, 0x58040000, 0x4a000a08, 0x00000103, + 0x0009f010, 0x4933c857, 0x40000000, 0x40000000, + 0x1c01f000, 0x4933c857, 0x05ddfa99, 0x59a800bb, + 0xb00005b4, 0x0502003d, 0x0515fcdd, 0x0502000e, + 0x0501f83d, 0x0509f9c5, 0x05000009, 0x050df864, + 0x05020007, 0x41780800, 0x4d400000, 0x60028000, + 0x0509fe8a, 0x5c028000, 0x0501f002, 0x05c1fb73, + 0x0009f010, 0x0509f9b9, 0x05000005, 0x050df858, + 0x05020003, 0x05fdff60, 0x0009f010, 0x417a7800, + 0x05c1fb23, 0x42000000, 0x001123f8, 0x0519feb4, 0x59340200, 0x84000558, 0x48026a00, 0x600c3000, - 0x41782800, 0x60142000, 0x4d400000, 0x4d440000, - 0x59368c03, 0x60a68000, 0x050dfd25, 0x5c028800, - 0x5c028000, 0x5c027800, 0x05c5fa81, 0x0005ffdc, - 0x0501f002, 0x05fdfced, 0x5c025800, 0x5c00b000, - 0x1c01f000, 0x4933c857, 0x41380000, 0xb13834a0, - 0x05b61cde, 0x0c01f001, 0x00109962, 0x0010995f, - 0x00109962, 0x00109962, 0x00109962, 0x00109962, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x00109962, 0x0010995e, 0x00109962, - 0x00109962, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x00109962, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x00109962, 0x00109962, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x00109962, 0x00109962, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962, - 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962, - 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962, - 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962, - 0x0010995e, 0x00109962, 0x00109962, 0x0010995e, - 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e, - 0x0010995e, 0x0010995e, 0x05b5fc7c, 0x64066203, - 0x493a6403, 0x05f1f710, 0x4933c857, 0x64066203, - 0x493a6403, 0x05f1f70c, 0x59300403, 0xb00034a0, - 0x05b61c72, 0x91383593, 0x05000087, 0x913835a7, - 0x05020042, 0x4933c857, 0x05f5fafb, 0x0519fce7, - 0x0509fc4b, 0x0500000c, 0x0509fc58, 0x05000039, - 0x59300403, 0x90000da2, 0x05020033, 0x60140004, - 0x05fdfcb0, 0x05000030, 0x05fdfccd, 0x05000030, - 0x0501f030, 0x600c0004, 0x05fdfcaa, 0x0500002a, - 0x05c5f9f3, 0x601c0800, 0x05ddfb6b, 0x0501f940, - 0x4d440000, 0x59368c03, 0x83440580, 0x000007fe, - 0x05020007, 0x59a81249, 0x84081540, 0x05e1ff23, - 0x05020002, 0x8408154a, 0x480b5249, 0x60a68000, - 0x05f5f8b5, 0x4d3c0000, 0x417a7800, 0x05c5f999, - 0x5c027800, 0x916c0583, 0x0500000b, 0x5932680a, - 0x59340008, 0x800001c0, 0x05020007, 0x59368c03, - 0x4933c857, 0x4937c857, 0x4947c857, 0x05ddfc0d, - 0x0501f008, 0x42000000, 0x0010e454, 0x0519fe39, - 0x60543000, 0x41782800, 0x600c2000, 0x050dfc6c, - 0x5c028800, 0x0509fedc, 0x0005f7dc, 0x1c01f000, - 0x0501f917, 0x05fdf7fc, 0x91380594, 0x0500000c, - 0x4933c857, 0xb13805a1, 0x05000003, 0xb13805a0, - 0x05fe07f7, 0x05f5ff04, 0x05fe027e, 0x59300203, - 0x9000058e, 0x05080492, 0x05b5fc20, 0x4933c857, - 0x05f5faad, 0x050dfee2, 0x05020005, 0x59300009, - 0x800001c0, 0x05020026, 0x05f1f6af, 0x0519fc93, - 0x60082800, 0x59300403, 0xb0000591, 0x050c0772, - 0x4d3c0000, 0x417a7800, 0x05c5f962, 0x5c027800, - 0x60583000, 0x41782800, 0x4d400000, 0x4d440000, - 0x59368c03, 0x60242000, 0x60a68000, 0x050dfc40, - 0x5c028800, 0x5c028000, 0x42000000, 0x0010e454, - 0x0519fe04, 0x0509fbe2, 0x0502000b, 0x05c5f998, - 0x0501f8e7, 0x59340c03, 0x82040580, 0x000007fe, - 0x05fe07c9, 0x59a80a49, 0x84040d40, 0x48075249, - 0x05fdf7c5, 0x0509fbe5, 0x05020003, 0x0501f8dc, - 0x05fdf7c1, 0x59300403, 0x90000db2, 0x05020003, - 0x05c9f84f, 0x05fdf7bc, 0x90000da2, 0x050008d4, - 0x05fdf7b9, 0x4933c857, 0x4803c857, 0x0c01f001, - 0x00109a55, 0x00109a55, 0x00109a55, 0x00109a55, - 0x00109a55, 0x00109a55, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a5a, 0x00109abb, - 0x00109a54, 0x00109abb, 0x00109abb, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109abb, 0x00109abb, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a68, 0x00109abb, - 0x00109a54, 0x00109a63, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a63, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109abb, 0x00109a66, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a54, 0x00109abb, - 0x00109abb, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109abb, 0x00109a54, 0x00109abb, - 0x00109a70, 0x00109a54, 0x00109a54, 0x00109a54, - 0x00109a54, 0x00109a54, 0x00109a76, 0x00109a54, - 0x05b5fb86, 0x640a6203, 0x0509fe48, 0x05000002, - 0x643a6203, 0x0509f3d5, 0x64166203, 0x59a8005e, - 0x48026205, 0x0509fe41, 0x05000002, 0x643a6203, - 0x59a8005c, 0x48026006, 0x1c01f000, 0x5930082a, - 0x49780a05, 0x0501f056, 0x0509fe1f, 0x0005f7dc, - 0x05c5ffd3, 0x05f5faaa, 0x05000003, 0x05f5f9fe, - 0x0005f7dc, 0x05f5f9fc, 0x0005ffdc, 0x05f5f295, - 0x4933c857, 0x640a6203, 0x0509fe2c, 0x05000002, - 0x643a6203, 0x1c01f000, 0x4933c857, 0x4d300000, - 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0500002e, - 0x0509fa4d, 0x05b40b5d, 0x59a80ccd, 0x48065811, - 0x59a808cf, 0x48065810, 0x64025a0a, 0x592c1001, - 0x800811c0, 0x05b40b55, 0x4930100b, 0x492c100a, - 0x64001001, 0x4a001009, 0x00109a96, 0x4a001003, - 0x00110672, 0x4a001005, 0x00000200, 0x592c0015, - 0x48001007, 0x592c0016, 0x48001008, 0x5c025800, - 0x5c026000, 0x0001f021, 0x4d300000, 0x4d2c0000, - 0x5832600b, 0x813261c0, 0x05b40b40, 0x5832580a, - 0x812e59c0, 0x05b40b3d, 0x49786001, 0x58300002, - 0x82000580, 0x00000100, 0x05020014, 0x59a80ccd, - 0x48065811, 0x59a808cf, 0x48065810, 0x64025a0a, - 0x0001fb82, 0x59a81ccc, 0x840c1d46, 0x480f54cc, - 0x0509fdf2, 0x05000005, 0x05fdf922, 0x59a8005c, - 0x48026006, 0x0501f002, 0x0005ffdc, 0x5c025800, - 0x5c026000, 0x1c01f000, 0x4803c857, 0x4a006002, - 0x00000100, 0x600a8000, 0x05fdf7ee, 0x4933c857, - 0x640a6203, 0x0509fde1, 0x05000002, 0x643a6203, - 0x59a8005c, 0x48026006, 0x1c01f000, 0x4933c857, - 0x0509fa05, 0x0500002b, 0x4d2c0000, 0x050df886, - 0x05020007, 0x4d400000, 0x60c68000, 0x60100800, - 0x0509feb3, 0x5c028000, 0x0501f021, 0x050df888, - 0x05020005, 0x64c65a0a, 0x64125810, 0x0001fb82, - 0x0501f01b, 0x59300c07, 0x90040590, 0x05000003, - 0x90040591, 0x05020007, 0x64c65a0a, 0x64125811, - 0x4a025812, 0x000000ff, 0x0001fb82, 0x0501f010, - 0x592c0408, 0x8c00051e, 0x0500000d, 0x4a025a08, - 0x00000103, 0x4a025809, 0x01000000, 0x4da00000, - 0x4cec0000, 0x5931d82d, 0x58ef400b, 0x58ec0009, - 0x0801f800, 0x5c01d800, 0x5c034000, 0x5c025800, - 0x1c01f000, 0x4933c857, 0x83340580, 0x00110210, - 0x05020007, 0x91380d95, 0x05000003, 0x91380d96, - 0x05fe013c, 0x0519fb5f, 0x0005f7dc, 0x59340400, - 0x82000500, 0x000000ff, 0x9000348c, 0x05b61adb, - 0x59303403, 0xb0180d8d, 0x050805e9, 0x90180db3, - 0x050805af, 0x90180da8, 0x050802fb, 0x90180da9, - 0x05080306, 0xb0180d97, 0x050c0410, 0x90180d9f, - 0x05fc02ca, 0xb0180d95, 0x05fc02aa, 0x90180d80, - 0x05fc0579, 0x90180da2, 0x05fc02e6, 0x90180db5, - 0x05fc03be, 0x90180db9, 0x05fc052f, 0x90180dbd, - 0x05fc0340, 0xb0180d84, 0x05fc036c, 0xb0180d89, - 0x05fc039f, 0xb0180d98, 0x050c0496, 0xb0180d83, - 0x050806ed, 0xb0180d91, 0x05080747, 0x90180d84, - 0x05020002, 0x60040000, 0x91380d95, 0x05000004, - 0x91380d96, 0x05fe010b, 0x0501f1ec, 0x4c000000, - 0x0519fb2c, 0x5c000000, 0x4d2c0000, 0x4d3c0000, - 0x0c01f804, 0x5c027800, 0x5c025800, 0x1c01f000, - 0x00109b47, 0x00109b4b, 0x00109b47, 0x00109b9c, - 0x00109b47, 0x00109c9f, 0x00109d29, 0x00109b47, - 0x00109b47, 0x00109ced, 0x00109b47, 0x00109cf8, - 0x4933c857, 0x497a6008, 0x59300809, 0x58040000, - 0x4a000a08, 0x00000103, 0x0005f7dc, 0x4933c857, - 0x40000000, 0x40000000, 0x1c01f000, 0x4933c857, - 0x05ddfd61, 0x59a800b6, 0xb00005b4, 0x0502003d, - 0x0515fb00, 0x0502000e, 0x0501f83d, 0x0509f976, - 0x05000009, 0x0509fff8, 0x05020007, 0x41780800, - 0x4d400000, 0x60028000, 0x0509fe25, 0x5c028000, - 0x0501f002, 0x05c5f816, 0x0005f7dc, 0x0509f96a, - 0x05000005, 0x0509ffec, 0x05020003, 0x05fdff60, - 0x0005f7dc, 0x417a7800, 0x05c1ffc6, 0x42000000, - 0x0010e454, 0x0519fc73, 0x59340200, 0x84000558, - 0x48026a00, 0x600c3000, 0x0519fa15, 0x4d300000, - 0x05fdf893, 0x05b40a69, 0x4926601d, 0x4936600a, - 0x497a6009, 0x64066407, 0x64066403, 0x59240400, - 0x8c00050a, 0x0502000b, 0x64126407, 0x641e6203, - 0x6406642c, 0x60043000, 0x4d400000, 0x60a68000, - 0x41782800, 0x0515fc1e, 0x5c028000, 0x0501f005, - 0x602c0800, 0x05ddf968, 0x64066203, 0x05f1fcea, - 0x5c026000, 0x05fdff3a, 0x05c1ffe9, 0x0005f7dc, - 0x05fdff37, 0x60040000, 0x0501f0d5, 0x4933c857, - 0x59340200, 0x8c000500, 0x05000009, 0x4d3c0000, - 0x417a7800, 0x05ddf94e, 0x5c027800, 0x8d0c0520, - 0x05000003, 0x60180800, 0x05ddf953, 0x1c01f000, - 0x4933c857, 0x59a808b6, 0xb00405b4, 0x0500000e, - 0x4807c857, 0x82040580, 0x00000100, 0x050200ac, - 0x59cc0408, 0x4803c857, 0x8c000500, 0x050000a8, - 0x59341403, 0x82080580, 0x000007fe, 0x05000006, - 0x0501f0a3, 0x59341403, 0x82080580, 0x000007fe, - 0x0502001b, 0x59a80249, 0x8c000506, 0x0500000e, - 0x59cc0000, 0x82000500, 0x000000ff, 0x59240c08, - 0x80040580, 0x05000008, 0x05c1ffb9, 0x0005ffdc, - 0x42000000, 0x0010e440, 0x0519fc1e, 0x6006d800, - 0x05d9f52b, 0x0519fd54, 0x050e05eb, 0x59a80249, - 0x8c000506, 0x05020004, 0x83240580, 0x0010e512, - 0x050e04ea, 0x0501fa74, 0x0501f03b, 0x41780800, - 0x05ddfa0a, 0x59341403, 0x82080580, 0x000007fc, - 0x05020019, 0x4a026802, 0x00fffffc, 0x0509f8f6, - 0x0500000c, 0x0509ff78, 0x0502000a, 0x0501f8a3, - 0x41780800, 0x4d400000, 0x60028000, 0x0509fda4, - 0x5c028000, 0x60100800, 0x05ddf90f, 0x0005f7dc, - 0x60100800, 0x05ddf90c, 0x05c1ff91, 0x59300c29, - 0x900405a1, 0x050c069d, 0xb0040591, 0x000607dc, - 0x050df69a, 0x59a800d1, 0x8c000502, 0x0500000d, - 0x05e1fcc2, 0x60401000, 0x05020008, 0x59340002, - 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000, - 0x05000004, 0x60201000, 0x05e1f8b9, 0x05020058, - 0x0509f8d1, 0x05000059, 0x0509ff53, 0x05020005, - 0x592c0408, 0x8c00051c, 0x05fe07d5, 0x0501f87b, - 0x60140800, 0x05ddf8ec, 0x64066203, 0x640e6403, - 0x05f1f46d, 0x59cc0408, 0x8c000518, 0x05000017, - 0x0509fc51, 0x05e1fca5, 0x05000008, 0x59cc0408, - 0x8c000516, 0x05000005, 0x59300429, 0x900005a1, - 0x05fe07c3, 0x1c01f000, 0x59a80249, 0x8400054a, - 0x48035249, 0x48035449, 0x59a8003d, 0x497b8830, - 0x84000570, 0x48038832, 0x59300429, 0x900005a1, - 0x05fe07b7, 0x1c01f000, 0x59a80249, 0xb0000510, - 0xb0000590, 0x05000009, 0x61bc1001, 0x42024800, - 0x0010e512, 0x480a4805, 0x480b503d, 0x497b8830, - 0x84081570, 0x480b8832, 0x0509fc4c, 0x59a80249, - 0x84000548, 0x48035249, 0x48035449, 0x0515fb47, - 0x05fe07a3, 0x599c0019, 0x8c000510, 0x0502002f, - 0x59a80249, 0x8400054c, 0x48035249, 0x601c0800, - 0x05ddf8b5, 0x417a7800, 0x05ddf8a9, 0x61bc3801, - 0x61a00001, 0x05e9fc91, 0x05dc08d6, 0x05b6099b, - 0x4936600a, 0x05ddfc72, 0x05020002, 0x497a6416, - 0x599c0208, 0x48026c12, 0x59340200, 0x8400051a, - 0x48026a00, 0x600c0800, 0x05ddf8a3, 0x64066407, - 0x64066203, 0x640a6403, 0x05f1f423, 0x05fdfe74, - 0x60040000, 0x0501f012, 0x599c0017, 0x8c00050a, - 0x05fc07ac, 0x60100800, 0x05ddf897, 0x493750c2, - 0x59a80249, 0x8c000508, 0x05000008, 0x599c0018, - 0x8c00051c, 0x05000005, 0x61a00807, 0x42001000, - 0x0010582b, 0x05edfb87, 0x0005f7dc, 0x4933c857, - 0x80003540, 0x05000003, 0x601c0800, 0x05ddf886, - 0x801831c0, 0x0502000f, 0x59302009, 0x801021c0, - 0x05000004, 0x58100408, 0x8c00051e, 0x05020009, - 0x59341c03, 0x60102000, 0x60483000, 0x4d200000, - 0x59364013, 0x81224130, 0x05d5fbd2, 0x5c024000, - 0x05c1fefb, 0x0005f7dc, 0x4c5c0000, 0x4d2c0000, - 0x59325809, 0x05e5fb86, 0x5c025800, 0x59cc0008, - 0x48002805, 0x59cc0009, 0x48002806, 0x49782807, - 0x49782808, 0x49782809, 0x4978280a, 0x59cc0013, - 0x8c00053e, 0x05000009, 0x59cc0414, 0x900001c0, - 0x59ccbc15, 0x805c0540, 0x48002807, 0x59cc0416, - 0x900001c0, 0x48002808, 0x59cc0017, 0x8c00053e, - 0x05000009, 0x59cc0418, 0x900001c0, 0x59ccbc19, - 0x805c0540, 0x48002809, 0x59cc041a, 0x900001c0, - 0x4800280a, 0x5c00b800, 0x1c01f000, 0x4933c857, - 0x59a800b6, 0x90000594, 0x0502003a, 0x59a800d1, - 0x8c000502, 0x05000011, 0x05e1fc08, 0x60401000, + 0x0519fc38, 0x4d300000, 0x05fdf86e, 0x05b00d6a, + 0x4926601d, 0x4936600a, 0x497a6009, 0x64066407, + 0x64066403, 0x59240400, 0x8c00050a, 0x0502000b, + 0x64126407, 0x641e6203, 0x6406642c, 0x60043000, + 0x4d400000, 0x60a68000, 0x41782800, 0x0515fe2b, + 0x5c028000, 0x0501f005, 0x602c0800, 0x05d9fe41, + 0x64066203, 0x05f1fc69, 0x5c026000, 0x05fdff3a, + 0x05c1fb46, 0x0009f010, 0x05fdff37, 0x60040000, + 0x0501f0d5, 0x4933c857, 0x59340200, 0x8c000500, + 0x05000009, 0x4d3c0000, 0x417a7800, 0x05d9fe27, + 0x5c027800, 0x8d0c0520, 0x05000003, 0x60180800, + 0x05d9fe2c, 0x1c01f000, 0x4933c857, 0x59a808bb, + 0xb00405b4, 0x0500000e, 0x4807c857, 0x82040580, + 0x00000100, 0x050200ac, 0x59cc0408, 0x4803c857, + 0x8c000500, 0x050000a8, 0x59341403, 0x82080580, + 0x000007fe, 0x05000006, 0x0501f0a3, 0x59341403, + 0x82080580, 0x000007fe, 0x0502001b, 0x59a8024c, + 0x8c000506, 0x0500000e, 0x59cc0000, 0x82000500, + 0x000000ff, 0x59240c08, 0x80040580, 0x05000008, + 0x05c1fb16, 0x0009f810, 0x42000000, 0x001123e1, + 0x0519fe5f, 0x6006d800, 0x05d9f1e8, 0x0519ff95, + 0x050e075f, 0x59a8024c, 0x8c000506, 0x05020004, + 0x83240580, 0x001124b6, 0x050e0561, 0x0501fa7d, + 0x0501f03b, 0x41780800, 0x05d9ff36, 0x59341403, + 0x82080580, 0x000007fc, 0x05020019, 0x4a026802, + 0x00fffffc, 0x0509f945, 0x0500000c, 0x0509ffe4, + 0x0502000a, 0x0501f8a3, 0x41780800, 0x4d400000, + 0x60028000, 0x0509fe09, 0x5c028000, 0x60100800, + 0x05d9fde8, 0x0009f010, 0x60100800, 0x05d9fde5, + 0x05c1faee, 0x59300c29, 0x900405a1, 0x05100019, + 0xb0040591, 0x000a0010, 0x0511f016, 0x59a800d6, + 0x8c000502, 0x0500000d, 0x05e1fa72, 0x60401000, 0x05020008, 0x59340002, 0x82000500, 0x00ff0000, - 0x82000580, 0x00ff0000, 0x05000008, 0x60201000, - 0x05ddffff, 0x05000005, 0x59a800d1, 0x8400054c, - 0x480350d1, 0x0501f027, 0x916c0583, 0x0502000c, - 0x59300009, 0x80000540, 0x05020009, 0x59341c03, - 0x60182000, 0x604c3000, 0x4d200000, 0x59364013, - 0x81224130, 0x05d5fb87, 0x5c024000, 0x05ddf988, - 0x05fdfecb, 0x0501fab8, 0x05020016, 0x59340404, - 0x80000540, 0x05000013, 0x60180800, 0x05ddf822, - 0x0505fffd, 0x0500000d, 0x0509fe7f, 0x05020007, - 0x41780800, 0x4d400000, 0x60028000, 0x0509fcac, - 0x5c028000, 0x0005f7dc, 0x4a025a08, 0x00000103, - 0x4a025809, 0x02000000, 0x05c1fe99, 0x0005f7dc, - 0x05ddff94, 0x0505ffec, 0x05000005, 0x0509fe6e, - 0x05020003, 0x05fdfde2, 0x0005f7dc, 0x05fdfde0, - 0x0519f974, 0x80000580, 0x59a800d1, 0x8c00050c, - 0x05000004, 0x8400050c, 0x480350d1, 0x90000541, - 0x05fdf777, 0x4933c857, 0x59a800b6, 0x90000594, - 0x05020006, 0x602c0800, 0x05d9fffb, 0x64066203, - 0x64066403, 0x05f1f37c, 0x60040000, 0x05fdf76c, - 0x4933c857, 0x40003000, 0x59a800b6, 0x90000584, - 0x05020018, 0x9018358b, 0x05020015, 0x5930081d, - 0x58040200, 0x8c000500, 0x050c0432, 0x58040200, - 0x8c000508, 0x0500000c, 0x84000508, 0x48000a00, - 0x600c0800, 0x05d9ffe4, 0x5930080a, 0x49780806, - 0x4a026202, 0x0000ffff, 0x64066203, 0x65466403, - 0x05f1f361, 0x601c0800, 0x05d9ffdb, 0x0005f7dc, - 0x60040000, 0x05fdf74e, 0x4803c857, 0x4d2c0000, - 0x4d3c0000, 0x0c01f804, 0x5c027800, 0x5c025800, - 0x1c01f000, 0x00109b47, 0x00109d4c, 0x00109b47, - 0x00109d8f, 0x00109b47, 0x00109df5, 0x00109d29, - 0x00109b47, 0x00109b47, 0x00109e0b, 0x00109b47, - 0x00109e16, 0x4933c857, 0x4d1c0000, 0x59301403, - 0x90080583, 0x0500001d, 0x9008159e, 0x05020019, - 0x91381595, 0x05020016, 0x4d300000, 0x5930141b, - 0x0509fc25, 0x05b408a5, 0x591c1416, 0x8c08051e, - 0x0500000b, 0x05f9feca, 0x05000009, 0x05ddfd36, - 0x4926601d, 0x59340200, 0x8c000508, 0x05000003, - 0x4a026416, 0x00000100, 0x0509fa0e, 0x82081500, - 0xffff1fff, 0x480a3c16, 0x5c026000, 0x0005ffdc, - 0x5c023800, 0x1c01f000, 0x05fdff55, 0x05fdf7fd, - 0x4933c857, 0x42000000, 0x0010e458, 0x0519fa8d, - 0x0519f908, 0x05ddfb5c, 0x0505ff77, 0x05000007, - 0x0509fdf9, 0x05020005, 0x6008b000, 0x0509fde0, - 0x05fdfd6b, 0x0005f7dc, 0x0501f8d3, 0x05020020, - 0x417a7800, 0x05d9ff86, 0x417a7800, 0x05c1fdcd, - 0x42000000, 0x0010e454, 0x0519fa7a, 0x59340200, - 0x84000558, 0x48026a00, 0x640a6403, 0x600c3000, - 0x0519f81b, 0x59240400, 0x8c00050a, 0x0502000b, - 0x4d400000, 0x41782800, 0x60143000, 0x60a68000, - 0x0515fa2f, 0x5c028000, 0x641e6203, 0x64126407, - 0x6406642c, 0x1c01f000, 0x600c0800, 0x05d9ff76, - 0x64066203, 0x05f1faf8, 0x05fdf7fb, 0x59cc0407, - 0x90000589, 0x05020009, 0x59340412, 0x82000500, - 0x000000ff, 0x0500000b, 0x80000040, 0x48026c12, - 0x642a6006, 0x05fdf7f0, 0x59cc0207, 0x82000500, - 0x0000ff00, 0x82000580, 0x00001900, 0x05fc07d3, - 0x05fdfd37, 0x80000580, 0x05fdf6d5, 0x4933c857, - 0x0505ff39, 0x0500000b, 0x0509fdbb, 0x05020009, - 0x4c580000, 0x6008b000, 0x0509fda1, 0x5c00b000, - 0x05fdfd2b, 0x601c0800, 0x05d9ff53, 0x0005f7dc, - 0x59340403, 0x82000580, 0x000007fc, 0x05020007, - 0x60100000, 0x05fdf887, 0x05020031, 0x601c0800, - 0x05d9ff49, 0x0005f7dc, 0x05fdfd1d, 0x59cc3407, - 0x82183500, 0x000000ff, 0x90180585, 0x0500001e, - 0x9018058b, 0x05000015, 0x59cc0207, 0x82000500, - 0x0000ff00, 0x05020003, 0x90180589, 0x05000016, - 0x82000580, 0x00001900, 0x0502000c, 0x90180589, - 0x05000011, 0x59340403, 0x82000580, 0x000007fe, - 0x05000023, 0x60100800, 0x05d9ff2f, 0x05c1fdb4, - 0x0519f898, 0x0005f7dc, 0x59340403, 0x82000580, - 0x000007fe, 0x0500001a, 0x0519f892, 0x60040000, - 0x05fdf69b, 0x0505ff00, 0x59325809, 0x05000008, - 0x592c0208, 0x82000580, 0x00000139, 0x05fc07f7, - 0x592c0408, 0x8c00051e, 0x05fe07f4, 0x59340412, - 0x800001c0, 0x05000006, 0x80000040, 0x48026c12, - 0x642a6006, 0x645a6403, 0x1c01f000, 0x59340403, - 0x82000580, 0x000007fe, 0x0502000b, 0x59a80249, - 0x84000540, 0x48035249, 0x8c000506, 0x05000004, - 0x4a035045, 0x0000ffff, 0x050dfcbb, 0x05d9fc0b, - 0x05fdf7de, 0x0519f86f, 0x417a7800, 0x05c1fd41, - 0x60143000, 0x0515ff96, 0x42000000, 0x0010e454, - 0x0519f9ec, 0x59300429, 0x900005a1, 0x050c048f, - 0x05fdf7d3, 0x4933c857, 0x0501f844, 0x05020006, - 0x60140800, 0x05d9fef4, 0x64066203, 0x640e6403, - 0x05f1f275, 0x60100800, 0x05d9feef, 0x0509fd4e, - 0x05020007, 0x4c580000, 0x6008b000, 0x0509fd34, - 0x5c00b000, 0x05fdfcbe, 0x0005f7dc, 0x05fdfcbc, - 0x0519f850, 0x80000580, 0x05fdf659, 0x4933c857, - 0x0501f82e, 0x05020006, 0x60240800, 0x05d9fede, - 0x64066203, 0x64166403, 0x05f1f25f, 0x0519f845, - 0x60040000, 0x05fdf64e, 0x4933c857, 0x5930081d, - 0x58040200, 0x8c000500, 0x050c031a, 0x0501f81f, - 0x05020006, 0x602c0800, 0x05d9fecf, 0x64066203, - 0x64066403, 0x05f1f250, 0x5930080a, 0x58040403, - 0x82000580, 0x000007fe, 0x05020004, 0x600c2800, - 0x050dfb11, 0x0005f7dc, 0x0519f82e, 0x60040000, - 0x05fdf637, 0x4933c857, 0x59cc0407, 0x90000583, - 0x05020009, 0x59cc0207, 0x82000500, 0x0000ff00, - 0x82000d80, 0x00002a00, 0x05000003, 0x82000d80, - 0x00001e00, 0x1c01f000, 0x4933c857, 0x90000541, - 0x1c01f000, 0x4933c857, 0x4d400000, 0x4c580000, - 0x60028000, 0x05c1ffd6, 0x59a80249, 0x90000543, - 0x48035249, 0x05d5fcce, 0x0500000c, 0x59a81ccc, - 0x8c0c0506, 0x0502000f, 0x840c1d44, 0x480f54cc, - 0x59cc0408, 0x8c00051c, 0x05000004, 0x59a81249, - 0x84081558, 0x480b5249, 0x0501f8c5, 0x05000005, - 0x4d300000, 0x4d340000, 0x4d440000, 0x0501f037, - 0x59cc0408, 0x8c00051c, 0x05000006, 0x59cc0800, - 0x82040d00, 0x00ffffff, 0x800409c0, 0x05000037, - 0x0501f8ec, 0x05000035, 0x4d300000, 0x4d340000, - 0x4d440000, 0x83240580, 0x0010e512, 0x0502002a, - 0x59cc0408, 0x8c00051e, 0x0502000c, 0x42000800, - 0x0010e512, 0x58040406, 0x8c000500, 0x05020007, - 0x59cc0408, 0x8c000518, 0x05000004, 0x59a80249, - 0x84000552, 0x48035249, 0x59240400, 0x8c00050a, - 0x05020005, 0x60aa8000, 0x61fe89ff, 0x60083000, - 0x0515ff18, 0x60aa8000, 0x4d3c0000, 0x05d5fc99, - 0x05000008, 0x600a7800, 0x5924100b, 0x82081500, - 0x00001fff, 0x41780800, 0x05c5f8bc, 0x0501f003, - 0x60027804, 0x05c1fc49, 0x5c027800, 0x42000000, - 0x0010e454, 0x0519f94f, 0x05d5fc8a, 0x05020002, - 0x05c1fe35, 0x05c5f846, 0x600a8000, 0x5c028800, - 0x5c026800, 0x5c026000, 0x050dfbb3, 0x41780800, - 0x59a804cc, 0x8c00050a, 0x05000002, 0x60040800, - 0x05d9ff3a, 0x59cc0800, 0x82040d00, 0x00ffffff, - 0x59240200, 0xb0000566, 0x48024a00, 0x59cc0408, - 0x8c00051c, 0x05000003, 0x800409c0, 0x05000019, - 0x48064805, 0x812000f0, 0x80040540, 0x48026813, - 0x812241c0, 0x0502000f, 0x59cc0408, 0x8c000518, - 0x05020007, 0x599c0019, 0x8c000510, 0x05000009, - 0x59a80249, 0x84000548, 0x48035249, 0x4c040000, - 0x60001802, 0x60040000, 0x05ddff96, 0x5c000800, - 0x4927c857, 0x83240580, 0x0010e512, 0x05020026, - 0x59a81249, 0x59cc0408, 0x8c00051a, 0x05020005, - 0x84081514, 0x4a0370e5, 0x00000800, 0x0501f004, - 0x84081554, 0x4a0370e5, 0x00000c00, 0x480b5249, - 0x4807503d, 0x80040110, 0x48035046, 0x48038881, - 0x59a80a49, 0x84040d50, 0x59cc0013, 0x8c00053e, - 0x05000003, 0x8c000536, 0x05000004, 0x59cc0017, - 0x8c000536, 0x05020002, 0x84040d10, 0x48075249, - 0x48075449, 0x5924100b, 0x82081500, 0x00001fff, - 0x8c040518, 0x05000004, 0x59a804cc, 0x8c00050a, - 0x05000026, 0x59cc0408, 0x8c000518, 0x05000023, - 0x59a80249, 0x8c000506, 0x05000012, 0x916c0583, - 0x05000004, 0x83240580, 0x0010e512, 0x0500001b, - 0x59240400, 0x8c00050c, 0x05020007, 0x4c040000, - 0x60001802, 0x60040000, 0x05ddff5a, 0x5c000800, - 0x0501f012, 0x64866429, 0x0509fc0b, 0x0501f00f, - 0x0519fa2a, 0x0502000d, 0x4c080000, 0x4c040000, - 0x050dfa18, 0x5c000800, 0x5c001000, 0x05020007, - 0x59a80249, 0x8c000514, 0x05000004, 0x4c040000, - 0x05c5f8aa, 0x5c000800, 0xb0040510, 0xb0000590, - 0x05000008, 0x05e1f9a1, 0x05000006, 0x59cc0009, - 0x4803505a, 0x59cc000a, 0x4803505b, 0x0509f946, - 0x5c00b000, 0x5c028000, 0x1c01f000, 0x4933c857, - 0x59a81449, 0x82080580, 0x0000ffff, 0x0500000f, - 0x4c080000, 0x05e1f991, 0x5c001000, 0x05020012, - 0x59cc0408, 0x8c000518, 0x05000009, 0x8c08050a, - 0x05000011, 0x8c00051c, 0x05020008, 0x8c080518, - 0x0502000d, 0x80000580, 0x1c01f000, 0x8c080508, - 0x05fe07fd, 0x0501f008, 0x8c080518, 0x05fe07fa, - 0x0501f005, 0x90080530, 0x05020003, 0x8c080506, - 0x05fe07f5, 0x4a035449, 0x0000ffff, 0x42000000, - 0x0010e39c, 0x0519f8a3, 0x60303000, 0x61fc19ff, - 0x601c2000, 0x4d200000, 0x417a4000, 0x05d5f909, - 0x5c024000, 0x4d400000, 0x4d3c0000, 0x60043000, - 0x0515fe50, 0x60aa8000, 0x60027804, 0x05c1fb8b, - 0x5c028000, 0x5c027800, 0x90000541, 0x1c01f000, - 0x4933c857, 0x4c580000, 0x59cc0408, 0x8c000518, - 0x05020006, 0x59a80449, 0x82000580, 0x0000ffff, - 0x05000027, 0x0501f011, 0x59a80046, 0x4803c857, - 0x800001c0, 0x05000022, 0x59cc1000, 0x59340013, - 0x82000500, 0x00ffffff, 0x0500001d, 0x82081500, - 0x00ffffff, 0x80080580, 0x05000004, 0x42000000, - 0x0010e432, 0x0501f014, 0x59341806, 0x480fc857, - 0x800c19c0, 0x05000012, 0x91cc140b, 0x6008b000, - 0x91341c06, 0x0501f8da, 0x05000004, 0x42000000, - 0x0010e433, 0x0501f008, 0x91cc140d, 0x6008b000, - 0x91341c08, 0x0501f8d2, 0x05000005, 0x42000000, - 0x0010e434, 0x0519f863, 0x90000541, 0x5c00b000, - 0x1c01f000, 0x4933c857, 0x59cc0206, 0x90000594, - 0x05020015, 0x59cc0407, 0x82000580, 0x00000800, - 0x05020011, 0x59cc0207, 0x8c00051a, 0x0500000d, - 0x82000500, 0x00000f00, 0x82000580, 0x00000100, - 0x05020008, 0x59cc020a, 0x8c000508, 0x05020003, - 0x8c00050a, 0x05000003, 0x80000580, 0x1c01f000, - 0x90000541, 0x1c01f000, 0x4933c857, 0x4943c857, - 0x493fc857, 0x4c5c0000, 0x4d300000, 0x4d340000, - 0x4d2c0000, 0x4d380000, 0x4130b800, 0x42026000, - 0x00111b00, 0x59a8003b, 0x81640480, 0x0502108b, - 0x8d3c0512, 0x05000004, 0x405c0000, 0x81300580, - 0x05000081, 0x05f9fa5d, 0x0500007f, 0x59300407, - 0x90000c92, 0x05021015, 0x5932680a, 0x0c01f001, - 0x0010a029, 0x00109fc3, 0x00109fcc, 0x00109fd6, - 0x00109fc3, 0x00109fcc, 0x00109ffc, 0x0010a00a, - 0x00109fc2, 0x00109fc2, 0x0010a010, 0x00109fc2, - 0x00109fc2, 0x00109fc2, 0x00109fc2, 0x0010a019, - 0x0010a01c, 0x0010a01a, 0x05b1fe18, 0x59300403, - 0xb0000583, 0x05080b8d, 0x0515fe90, 0x0505fdf4, - 0x05c00bab, 0x0505fe01, 0x05fc0af9, 0x0501f05a, - 0x59325809, 0x0505fcfc, 0x05000057, 0x49425a0a, - 0x497a5c0d, 0x0001fb82, 0x59300a29, 0x90040d83, - 0x05040dd4, 0x0501f050, 0x813669c0, 0x05b00e03, - 0x050df985, 0x59300008, 0x8c000500, 0x05000003, - 0x05b9f86d, 0x0501f004, 0x59300203, 0x90000584, - 0x05b80869, 0x59325809, 0x0505fce7, 0x05000042, - 0x592c0208, 0x82000500, 0x000000ff, 0x90000594, - 0x05060dc0, 0x0509fec8, 0x0005f9f3, 0x05e5fc1d, - 0x4a025a08, 0x00000103, 0x59300402, 0x48025c0a, - 0x592c040c, 0x8c000512, 0x05000005, 0x4d2c0000, - 0x592e580d, 0x05b5f9a6, 0x5c025800, 0x49425a0a, - 0x497a580d, 0x0509fb64, 0x0001fb82, 0x0501f02a, - 0x59300203, 0x90000584, 0x05b8084b, 0x59325809, - 0x0505fcc9, 0x05000024, 0x49425a0a, 0x813669c0, - 0x05160b2d, 0x0509feac, 0x0005f9f3, 0x0509fb56, - 0x0001fb82, 0x0501f01c, 0x59300203, 0x90000591, - 0x0502001d, 0x59300429, 0x48026203, 0x0501f01a, - 0x59300203, 0x90000584, 0x05b80837, 0x59325809, - 0x0505fcb5, 0x05000010, 0x49425a0a, 0x0001fb82, - 0x0501f00d, 0x0501f00c, 0x59325819, 0x05b5f980, - 0x59300203, 0x90000584, 0x05b8082b, 0x05b9feea, - 0x59325809, 0x0505fca8, 0x05000003, 0x49425a0a, - 0x0001fb82, 0x05f9fbab, 0x8d3c051c, 0x05000002, + 0x82000580, 0x00ff0000, 0x05000004, 0x60201000, + 0x05ddfe54, 0x05020058, 0x0509f920, 0x05000059, + 0x0509ffbf, 0x05020005, 0x592c0408, 0x8c00051c, + 0x05fe07d5, 0x0501f87b, 0x60140800, 0x05d9fdc5, + 0x64066203, 0x640e6403, 0x05f1f3ec, 0x59cc0408, + 0x8c000518, 0x05000017, 0x0509fcaf, 0x05e1fa55, + 0x05000008, 0x59cc0408, 0x8c000516, 0x05000005, + 0x59300429, 0x900005a1, 0x05fe07c3, 0x1c01f000, + 0x59a8024c, 0x8400054a, 0x4803524c, 0x4803544c, + 0x59a80040, 0x497b8830, 0x84000570, 0x48038832, + 0x59300429, 0x900005a1, 0x05fe07b7, 0x1c01f000, + 0x59a8024c, 0xb0000510, 0xb0000590, 0x05000009, + 0x61bc1001, 0x42024800, 0x001124b6, 0x480a4805, + 0x480b5040, 0x497b8830, 0x84081570, 0x480b8832, + 0x0509fcaa, 0x59a8024c, 0x84000548, 0x4803524c, + 0x4803544c, 0x0515fd52, 0x05fe07a3, 0x599c0019, + 0x8c000510, 0x0502002f, 0x59a8024c, 0x8400054c, + 0x4803524c, 0x601c0800, 0x05d9fd8e, 0x417a7800, + 0x05d9fd82, 0x61bc3801, 0x61a00001, 0x05e9fb03, + 0x05d80db7, 0x05b20c9c, 0x4936600a, 0x05ddf9aa, + 0x05020002, 0x497a6416, 0x599c0208, 0x48026c12, + 0x59340200, 0x8400051a, 0x48026a00, 0x600c0800, + 0x05d9fd7c, 0x64066407, 0x64066203, 0x640a6403, + 0x05f1f3a2, 0x05fdfe74, 0x60040000, 0x0501f012, + 0x599c0017, 0x8c00050a, 0x05fc07ac, 0x60100800, + 0x05d9fd70, 0x493750c7, 0x59a8024c, 0x8c000508, + 0x05000008, 0x599c0018, 0x8c00051c, 0x05000005, + 0x61a00807, 0x42001000, 0x00105a99, 0x05edfab1, + 0x0009f010, 0x4933c857, 0x80003540, 0x05000003, + 0x601c0800, 0x05d9fd5f, 0x801831c0, 0x0502000f, + 0x59302009, 0x801021c0, 0x05000004, 0x58100408, + 0x8c00051e, 0x05020009, 0x59341c03, 0x60102000, + 0x60483000, 0x4d200000, 0x59364013, 0x81224130, + 0x05d5f835, 0x5c024000, 0x05c1fa58, 0x0009f010, + 0x4c5c0000, 0x4d2c0000, 0x59325809, 0x05e5f95f, + 0x5c025800, 0x59cc0008, 0x48002805, 0x59cc0009, + 0x48002806, 0x49782807, 0x49782808, 0x49782809, + 0x4978280a, 0x59cc0013, 0x8c00053e, 0x05000009, + 0x59cc0414, 0x900001c0, 0x59ccbc15, 0x805c0540, + 0x48002807, 0x59cc0416, 0x900001c0, 0x48002808, + 0x59cc0017, 0x8c00053e, 0x05000009, 0x59cc0418, + 0x900001c0, 0x59ccbc19, 0x805c0540, 0x48002809, + 0x59cc041a, 0x900001c0, 0x4800280a, 0x5c00b800, + 0x1c01f000, 0x4933c857, 0x59a800bb, 0x90000594, + 0x0502003a, 0x59a800d6, 0x8c000502, 0x05000011, + 0x05e1f9b8, 0x60401000, 0x05020008, 0x59340002, + 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000, + 0x05000008, 0x60201000, 0x05ddfd9a, 0x05000005, + 0x59a800d6, 0x8400054c, 0x480350d6, 0x0501f027, + 0x916c0583, 0x0502000c, 0x59300009, 0x80000540, + 0x05020009, 0x59341c03, 0x60182000, 0x604c3000, + 0x4d200000, 0x59364013, 0x81224130, 0x05d1ffea, + 0x5c024000, 0x05d9feb4, 0x05fdfecb, 0x0501fac5, + 0x05020016, 0x59340404, 0x80000540, 0x05000013, + 0x60180800, 0x05d9fcfb, 0x0509f84c, 0x0500000d, + 0x0509feeb, 0x05020007, 0x41780800, 0x4d400000, + 0x60028000, 0x0509fd11, 0x5c028000, 0x0009f010, + 0x4a025a08, 0x00000103, 0x4a025809, 0x02000000, + 0x05c1f9f6, 0x0009f010, 0x05ddfd2f, 0x0509f83b, + 0x05000005, 0x0509feda, 0x05020003, 0x05fdfde2, + 0x0009f010, 0x05fdfde0, 0x0519fba1, 0x80000580, + 0x59a800d6, 0x8c00050c, 0x05000004, 0x8400050c, + 0x480350d6, 0x90000541, 0x05fdf777, 0x4933c857, + 0x59a800bb, 0x90000594, 0x05020006, 0x602c0800, + 0x05d9fcd4, 0x64066203, 0x64066403, 0x05f1f2fb, + 0x60040000, 0x05fdf76c, 0x4933c857, 0x40003000, + 0x59a800bb, 0x90000584, 0x05020018, 0x9018358b, + 0x05020015, 0x5930081d, 0x58040200, 0x8c000500, + 0x050c04a9, 0x58040200, 0x8c000508, 0x0500000c, + 0x84000508, 0x48000a00, 0x600c0800, 0x05d9fcbd, + 0x5930080a, 0x49780806, 0x4a026202, 0x0000ffff, + 0x64066203, 0x65466403, 0x05f1f2e0, 0x601c0800, + 0x05d9fcb4, 0x0009f010, 0x60040000, 0x05fdf74e, + 0x4803c857, 0x4d2c0000, 0x4d3c0000, 0x0c01f804, + 0x5c027800, 0x5c025800, 0x1c01f000, 0x0010a081, + 0x0010a286, 0x0010a081, 0x0010a2c9, 0x0010a081, + 0x0010a338, 0x0010a263, 0x0010a081, 0x0010a081, + 0x0010a34e, 0x0010a081, 0x0010a359, 0x4933c857, + 0x4d1c0000, 0x59301403, 0x90080583, 0x0500001d, + 0x9008159e, 0x05020019, 0x91381595, 0x05020016, + 0x4d300000, 0x5930141b, 0x0509fc87, 0x05b00ba6, + 0x591c1416, 0x8c08051e, 0x0500000b, 0x05f9fea5, + 0x05000009, 0x05ddfac5, 0x4926601d, 0x59340200, + 0x8c000508, 0x05000003, 0x4a026416, 0x00000100, + 0x0509fa6d, 0x82081500, 0xffff1fff, 0x480a3c16, + 0x5c026000, 0x0009f810, 0x5c023800, 0x1c01f000, + 0x05fdff55, 0x05fdf7fd, 0x4933c857, 0x42000000, + 0x001123fc, 0x0519fcce, 0x0519fb35, 0x05ddf894, + 0x0505ffc6, 0x05000007, 0x0509fe65, 0x05020005, + 0x6008b000, 0x0509fe4c, 0x05fdfd6b, 0x0009f010, + 0x0501f8dc, 0x05020020, 0x417a7800, 0x05d9fc5f, + 0x417a7800, 0x05c1f92a, 0x42000000, 0x001123f8, + 0x0519fcbb, 0x59340200, 0x84000558, 0x48026a00, + 0x640a6403, 0x600c3000, 0x0519fa3e, 0x59240400, + 0x8c00050a, 0x0502000b, 0x4d400000, 0x41782800, + 0x60143000, 0x60a68000, 0x0515fc3c, 0x5c028000, + 0x641e6203, 0x64126407, 0x6406642c, 0x1c01f000, + 0x600c0800, 0x05d9fc4f, 0x64066203, 0x05f1fa77, + 0x05fdf7fb, 0x59cc0407, 0x90000589, 0x05020009, + 0x59340412, 0x82000500, 0x000000ff, 0x0500000b, + 0x80000040, 0x48026c12, 0x642a6006, 0x05fdf7f0, + 0x59cc0207, 0x82000500, 0x0000ff00, 0x82000580, + 0x00001900, 0x05fc07d3, 0x05fdfd37, 0x80000580, + 0x05fdf6d5, 0x4933c857, 0x0505ff88, 0x0500000b, + 0x0509fe27, 0x05020009, 0x4c580000, 0x6008b000, + 0x0509fe0d, 0x5c00b000, 0x05fdfd2b, 0x601c0800, + 0x05d9fc2c, 0x0009f010, 0x59340403, 0x82000580, + 0x000007fc, 0x05020007, 0x60100000, 0x05fdf883, + 0x0502003a, 0x601c0800, 0x05d9fc22, 0x0009f010, + 0x05fdfd1d, 0x59340403, 0x82000580, 0x000007fe, + 0x0500001b, 0x59cc3407, 0x82183500, 0x000000ff, + 0x90180585, 0x05000023, 0x9018058b, 0x05000011, + 0x59cc0207, 0x82000500, 0x0000ff00, 0x05020003, + 0x90180d89, 0x0500001b, 0x82000580, 0x00001900, + 0x05020008, 0x90180589, 0x05000016, 0x60100800, + 0x05d9fc08, 0x05c1f911, 0x0519fac5, 0x0009f010, + 0x0519fac3, 0x60040000, 0x05fdf69f, 0x59cc3407, + 0x82183500, 0x000000ff, 0x9018058b, 0x0500001f, + 0x9018058e, 0x0500001d, 0x59cc0207, 0x82000500, + 0x0000ff00, 0x82000580, 0x00001900, 0x05000017, + 0x0505ff46, 0x59325809, 0x05000008, 0x592c0208, + 0x82000580, 0x00000139, 0x05fc07ea, 0x592c0408, + 0x8c00051e, 0x05fe07e7, 0x59340412, 0x800001c0, + 0x05000006, 0x80000040, 0x48026c12, 0x642a6006, + 0x645a6403, 0x1c01f000, 0x59340403, 0x82000580, + 0x000007fe, 0x0502000b, 0x59a8024c, 0x84000540, + 0x4803524c, 0x8c000506, 0x05000004, 0x4a035048, + 0x0000ffff, 0x050dfe2e, 0x05d9f8bf, 0x05fdf7d1, + 0x0519fa93, 0x417a7800, 0x05c1f895, 0x60143000, + 0x0519f9b0, 0x42000000, 0x001123f8, 0x0519fc24, + 0x59300429, 0x900005a1, 0x050c0602, 0x05fdf7c6, + 0x4933c857, 0x0501f844, 0x05020006, 0x60140800, + 0x05d9fbc4, 0x64066203, 0x640e6403, 0x05f1f1eb, + 0x60100800, 0x05d9fbbf, 0x0509fdb1, 0x05020007, + 0x4c580000, 0x6008b000, 0x0509fd97, 0x5c00b000, + 0x05fdfcb5, 0x0009f010, 0x05fdfcb3, 0x0519fa74, + 0x80000580, 0x05fdf650, 0x4933c857, 0x0501f82e, + 0x05020006, 0x60240800, 0x05d9fbae, 0x64066203, + 0x64166403, 0x05f1f1d5, 0x0519fa69, 0x60040000, + 0x05fdf645, 0x4933c857, 0x5930081d, 0x58040200, + 0x8c000500, 0x050c0388, 0x0501f81f, 0x05020006, + 0x602c0800, 0x05d9fb9f, 0x64066203, 0x64066403, + 0x05f1f1c6, 0x5930080a, 0x58040403, 0x82000580, + 0x000007fe, 0x05020004, 0x600c2800, 0x050dfb7f, + 0x0009f010, 0x0519fa52, 0x60040000, 0x05fdf62e, + 0x4933c857, 0x59cc0407, 0x90000583, 0x05020009, + 0x59cc0207, 0x82000500, 0x0000ff00, 0x82000d80, + 0x00002a00, 0x05000003, 0x82000d80, 0x00001e00, + 0x1c01f000, 0x4933c857, 0x90000541, 0x1c01f000, + 0x4933c857, 0x4d400000, 0x4c580000, 0x60028000, + 0x05c1fb2f, 0x59a8024c, 0x90000543, 0x4803524c, + 0x05d5f931, 0x0500000c, 0x59a81cd1, 0x8c0c0506, + 0x0502000f, 0x840c1d44, 0x480f54d1, 0x59cc0408, + 0x8c00051c, 0x05000004, 0x59a8124c, 0x84081558, + 0x480b524c, 0x0501f8c5, 0x05000005, 0x4d300000, + 0x4d340000, 0x4d440000, 0x0501f037, 0x59cc0408, + 0x8c00051c, 0x05000006, 0x59cc0800, 0x82040d00, + 0x00ffffff, 0x800409c0, 0x05000037, 0x0501f8ec, + 0x05000035, 0x4d300000, 0x4d340000, 0x4d440000, + 0x83240580, 0x001124b6, 0x0502002a, 0x59cc0408, + 0x8c00051e, 0x0502000c, 0x42000800, 0x001124b6, + 0x58040406, 0x8c000500, 0x05020007, 0x59cc0408, + 0x8c000518, 0x05000004, 0x59a8024c, 0x84000552, + 0x4803524c, 0x59240400, 0x8c00050a, 0x05020005, + 0x60aa8000, 0x61fe89ff, 0x60083000, 0x0519f932, + 0x60aa8000, 0x4d3c0000, 0x05d5f8fc, 0x05000008, + 0x600a7800, 0x5924100b, 0x82081500, 0x00001fff, + 0x41780800, 0x05c1fc20, 0x0501f003, 0x60027804, + 0x05bdff99, 0x5c027800, 0x42000000, 0x001123f8, + 0x0519fb87, 0x05d5f8ed, 0x05020002, 0x05c1f98a, + 0x05c1fbaa, 0x600a8000, 0x5c028800, 0x5c026800, + 0x5c026000, 0x050dfd23, 0x41780800, 0x59a804d1, + 0x8c00050a, 0x05000002, 0x60040800, 0x05d9fc5d, + 0x59cc0800, 0x82040d00, 0x00ffffff, 0x59240200, + 0xb0000566, 0x48024a00, 0x59cc0408, 0x8c00051c, + 0x05000003, 0x800409c0, 0x05000019, 0x48064805, + 0x812000f0, 0x80040540, 0x48026813, 0x812241c0, + 0x0502000f, 0x59cc0408, 0x8c000518, 0x05020007, + 0x599c0019, 0x8c000510, 0x05000009, 0x59a8024c, + 0x84000548, 0x4803524c, 0x4c040000, 0x60001802, + 0x60040000, 0x05ddfd37, 0x5c000800, 0x4927c857, + 0x83240580, 0x001124b6, 0x05020026, 0x59a8124c, + 0x59cc0408, 0x8c00051a, 0x05020005, 0x84081514, + 0x4a0370e5, 0x00000800, 0x0501f004, 0x84081554, + 0x4a0370e5, 0x00000c00, 0x480b524c, 0x48075040, + 0x80040110, 0x48035049, 0x48038881, 0x59a80a4c, + 0x84040d50, 0x59cc0013, 0x8c00053e, 0x05000003, + 0x8c000536, 0x05000004, 0x59cc0017, 0x8c000536, + 0x05020002, 0x84040d10, 0x4807524c, 0x4807544c, + 0x5924100b, 0x82081500, 0x00001fff, 0x8c040518, + 0x05000004, 0x59a804d1, 0x8c00050a, 0x05000026, + 0x59cc0408, 0x8c000518, 0x05000023, 0x59a8024c, + 0x8c000506, 0x05000012, 0x916c0583, 0x05000004, + 0x83240580, 0x001124b6, 0x0500001b, 0x59240400, + 0x8c00050c, 0x05020007, 0x4c040000, 0x60001802, + 0x60040000, 0x05ddfcfb, 0x5c000800, 0x0501f012, + 0x64866429, 0x0509fc6e, 0x0501f00f, 0x0519fc62, + 0x0502000d, 0x4c080000, 0x4c040000, 0x050dfa86, + 0x5c000800, 0x5c001000, 0x05020007, 0x59a8024c, + 0x8c000514, 0x05000004, 0x4c040000, 0x05c1fc0e, + 0x5c000800, 0xb0040510, 0xb0000590, 0x05000008, + 0x05ddff48, 0x05000006, 0x59cc0009, 0x4803505d, + 0x59cc000a, 0x4803505e, 0x0509f99b, 0x5c00b000, + 0x5c028000, 0x1c01f000, 0x4933c857, 0x59a8144c, + 0x82080580, 0x0000ffff, 0x0500000f, 0x4c080000, + 0x05ddff38, 0x5c001000, 0x05020012, 0x59cc0408, + 0x8c000518, 0x05000009, 0x8c08050a, 0x05000011, + 0x8c00051c, 0x05020008, 0x8c080518, 0x0502000d, + 0x80000580, 0x1c01f000, 0x8c080508, 0x05fe07fd, + 0x0501f008, 0x8c080518, 0x05fe07fa, 0x0501f005, + 0x90080530, 0x05020003, 0x8c080506, 0x05fe07f5, + 0x4a03544c, 0x0000ffff, 0x42000000, 0x0011233d, + 0x0519fadb, 0x60303000, 0x61fc19ff, 0x601c2000, + 0x4d200000, 0x417a4000, 0x05d1fd63, 0x5c024000, + 0x4d400000, 0x4d3c0000, 0x60043000, 0x0519f86a, + 0x60aa8000, 0x60027804, 0x05bdfedb, 0x5c028000, + 0x5c027800, 0x90000541, 0x1c01f000, 0x4933c857, + 0x4c580000, 0x59cc0408, 0x8c000518, 0x05020006, + 0x59a8044c, 0x82000580, 0x0000ffff, 0x0500002b, + 0x0501f015, 0x59a80049, 0x4803c857, 0x800001c0, + 0x05000026, 0x59341806, 0x480fc857, 0x800c19c0, + 0x05000022, 0x59cc1000, 0x59340013, 0x82000500, + 0x00ffffff, 0x0500001d, 0x82081500, 0x00ffffff, + 0x80080580, 0x05000004, 0x42000000, 0x001123d3, + 0x0501f014, 0x59341806, 0x480fc857, 0x800c19c0, + 0x05000012, 0x91cc140b, 0x6008b000, 0x91341c06, + 0x0501f8d8, 0x05000004, 0x42000000, 0x001123d4, + 0x0501f008, 0x91cc140d, 0x6008b000, 0x91341c08, + 0x0501f8d0, 0x05000005, 0x42000000, 0x001123d5, + 0x0519fa97, 0x90000541, 0x5c00b000, 0x1c01f000, + 0x4933c857, 0x59cc0206, 0x90000594, 0x05020015, + 0x59cc0407, 0x82000580, 0x00000800, 0x05020011, + 0x59cc0207, 0x8c00051a, 0x0500000d, 0x82000500, + 0x00000f00, 0x82000580, 0x00000100, 0x05020008, + 0x59cc020a, 0x8c000508, 0x05020003, 0x8c00050a, + 0x05000003, 0x80000580, 0x1c01f000, 0x90000541, + 0x1c01f000, 0x4933c857, 0x4943c857, 0x493fc857, + 0x4c5c0000, 0x4d300000, 0x4d340000, 0x4d2c0000, + 0x4d380000, 0x4130b800, 0x42026000, 0x00115aa4, + 0x050dfc8e, 0x05021089, 0x8d3c0512, 0x05000004, + 0x405c0000, 0x81300580, 0x0500007f, 0x05f9fa07, + 0x0500007d, 0x59300407, 0x90000c92, 0x05021015, + 0x5932680a, 0x0c01f001, 0x0010a56d, 0x0010a509, + 0x0010a512, 0x0010a51c, 0x0010a509, 0x0010a512, + 0x0010a542, 0x0010a550, 0x0010a508, 0x0010a508, + 0x0010a556, 0x0010a508, 0x0010a508, 0x0010a508, + 0x0010a508, 0x0010a55f, 0x0010a560, 0x0010a560, + 0x05b1f90d, 0x59300403, 0xb0000583, 0x05080bed, + 0x0519f8b1, 0x0505fe47, 0x05bc0efc, 0x0505fe54, + 0x05fc0aed, 0x0501f058, 0x59325809, 0x0505fd3f, + 0x05000055, 0x49425a0a, 0x497a5c0d, 0x0001fba8, + 0x59300a29, 0x90040d83, 0x05040e27, 0x0501f04e, + 0x813669c0, 0x05b008f8, 0x050df9f0, 0x59300008, + 0x8c000500, 0x05000003, 0x05b5fbc5, 0x0501f004, + 0x59300203, 0x90000584, 0x05b40bc1, 0x59325809, + 0x0505fd2a, 0x05000040, 0x592c0208, 0x82000500, + 0x000000ff, 0x90000594, 0x05060e13, 0x0509ff28, + 0x0005fa1a, 0x05e5fa5f, 0x4a025a08, 0x00000103, + 0x59300402, 0x48025c0a, 0x592c040c, 0x8c000512, + 0x05000005, 0x4d2c0000, 0x592e580d, 0x05b1fc97, + 0x5c025800, 0x49425a0a, 0x497a580d, 0x0509fbc4, + 0x0001fba8, 0x0501f028, 0x59300203, 0x90000584, + 0x05b40ba3, 0x59325809, 0x0505fd0c, 0x05000022, + 0x49425a0a, 0x813669c0, 0x05160d31, 0x0509ff0c, + 0x0005fa1a, 0x0509fbb6, 0x0001fba8, 0x0501f01a, + 0x59300203, 0x90000591, 0x0502001b, 0x59300429, + 0x48026203, 0x0501f018, 0x59300203, 0x90000584, + 0x05b40b8f, 0x59325809, 0x0505fcf8, 0x0500000e, + 0x49425a0a, 0x0001fba8, 0x0501f00b, 0x0501f00a, + 0x59300203, 0x90000584, 0x05b40b85, 0x05b9fa17, + 0x59325809, 0x0505fced, 0x05000003, 0x49425a0a, + 0x0001fba8, 0x05f9fb7c, 0x8d3c051c, 0x05000002, 0x497a600a, 0x91326430, 0x41580000, 0x81300480, - 0x05fc1778, 0x0501f002, 0x41526000, 0x8d3c0518, - 0x05000011, 0x59a80898, 0x59a80099, 0x80040480, - 0x0500000d, 0x81300800, 0x41540000, 0x80040480, - 0x05021009, 0x5930000a, 0x800001c0, 0x05fe076e, - 0x59300203, 0x90000588, 0x05fe076b, 0x0515fd6d, - 0x05fdf769, 0x5c027000, 0x5c025800, 0x5c026800, - 0x5c026000, 0x5c00b800, 0x1c01f000, 0x5c000000, - 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857, - 0x485bc857, 0x50080800, 0x500c0000, 0x80042580, - 0x05020007, 0x80081000, 0x800c1800, 0x8058b040, - 0x05fe07f9, 0x80000580, 0x1c01f000, 0x4803c857, - 0x4807c857, 0x480bc857, 0x480fc857, 0x80040480, - 0x05001004, 0x60040000, 0x90040d41, 0x1c01f000, - 0x41780000, 0x05fdf7fd, 0xb1380493, 0x05b21d77, - 0xb138048b, 0x05b01d75, 0x0c01f001, 0x0010a070, - 0x0010a070, 0x0010a070, 0x0010a070, 0x0010a06f, - 0x0010a06f, 0x0010a06f, 0x0010a070, 0x05b1fd6b, - 0x493bc857, 0x64366203, 0x493a6403, 0x42000800, - 0x80000000, 0x0005f6ab, 0x91380593, 0x0502000b, - 0x59300403, 0xb0000590, 0x05b20d60, 0x0509f823, - 0x05000005, 0x643a6203, 0x59a8005e, 0x48026205, - 0x1c01f000, 0x0005f7dc, 0x4933c857, 0x913805a7, - 0x05020027, 0x4933c857, 0x05f1fbe3, 0x4d3c0000, - 0x417a7800, 0x05c1faa3, 0x5c027800, 0x42000000, - 0x0010e454, 0x0515ff4f, 0x4d2c0000, 0x59325809, - 0x0505fc39, 0x492fc857, 0x0500000d, 0x0509fe1e, - 0x05e5fb74, 0x4a025a08, 0x00000103, 0x59300c02, - 0x48065c0a, 0x64a65a0a, 0x497a580d, 0x592c0c0c, - 0x84040d50, 0x48065c0c, 0x0001fb82, 0x5c025800, - 0x60543000, 0x41782800, 0x600c2000, 0x4d400000, - 0x4d440000, 0x59368c03, 0x60a68000, 0x0509fd6c, - 0x5c028800, 0x5c028000, 0x0005f7dc, 0x91380594, - 0x05020009, 0x59300403, 0xb0000c93, 0x05b21d2b, - 0xb0000480, 0x05b01d29, 0x4933c857, 0x4803c857, - 0x0c01f013, 0xb13805a1, 0x05000003, 0xb13805a0, - 0x05020007, 0x05f5f800, 0x05fa037a, 0x59300203, - 0x9000058e, 0x050405c3, 0x1c01f000, 0xb1380593, - 0x05000006, 0xb1380588, 0x05b20d18, 0x59300403, - 0xb0000590, 0x05b20d15, 0x1c01f000, 0x0010a0db, - 0x0010a0da, 0x0010a0da, 0x0010a0da, 0x0010a0da, - 0x0010a0da, 0x0010a0da, 0x0010a0da, 0x0010a0da, - 0x0010a0da, 0x0010a0da, 0x0010a0ed, 0x0010a0ed, - 0x0010a0ed, 0x0010a0ed, 0x0010a0da, 0x0010a0ed, - 0x0010a0da, 0x0010a0ed, 0x05b1fd00, 0x4933c857, - 0x05f1fb8d, 0x0505fbec, 0x000407dc, 0x4d2c0000, - 0x59325809, 0x0509fdd0, 0x05e5fb26, 0x4a025a08, + 0x05fc177a, 0x0501f002, 0x41526000, 0x8d3c0518, + 0x05000012, 0x59a8089b, 0x59a8009c, 0x80040480, + 0x0500000e, 0x81300800, 0x41540000, 0x80040480, + 0x0502100a, 0x5930000a, 0x800001c0, 0x05fe0770, + 0x59300203, 0x90000588, 0x05fe076d, 0x0515ff86, + 0x497a6009, 0x05fdf76a, 0x5c027000, 0x5c025800, + 0x5c026800, 0x5c026000, 0x5c00b800, 0x1c01f000, + 0x5c000000, 0x4c000000, 0x4803c857, 0x480bc857, + 0x480fc857, 0x485bc857, 0x50080800, 0x500c0000, + 0x80042580, 0x05020007, 0x80081000, 0x800c1800, + 0x8058b040, 0x05fe07f9, 0x80000580, 0x1c01f000, + 0x4803c857, 0x4807c857, 0x480bc857, 0x480fc857, + 0x80040480, 0x05001004, 0x60040000, 0x90040d41, + 0x1c01f000, 0x41780000, 0x05fdf7fd, 0xb1380493, + 0x05b2186d, 0xb138048b, 0x05b0186b, 0x0c01f001, + 0x0010a5b5, 0x0010a5b5, 0x0010a5b5, 0x0010a5b5, + 0x0010a5b4, 0x0010a5b4, 0x0010a5b4, 0x0010a5b5, + 0x05b1f861, 0x493bc857, 0x64366203, 0x493a6403, + 0x42000800, 0x80000000, 0x0005f6e2, 0x91380593, + 0x0502000b, 0x59300403, 0xb0000590, 0x05b20856, + 0x0509f876, 0x05000005, 0x643a6203, 0x59a80061, + 0x48026205, 0x1c01f000, 0x0009f010, 0x4933c857, + 0x913805a7, 0x05020027, 0x4933c857, 0x05f1fb5c, + 0x4d3c0000, 0x417a7800, 0x05bdfdf5, 0x5c027800, + 0x42000000, 0x001123f8, 0x0519f985, 0x4d2c0000, + 0x59325809, 0x0505fc7d, 0x492fc857, 0x0500000d, + 0x0509fe7f, 0x05e5f9b7, 0x4a025a08, 0x00000103, + 0x59300c02, 0x48065c0a, 0x64a65a0a, 0x497a580d, + 0x592c0c0c, 0x84040d50, 0x48065c0c, 0x0001fba8, + 0x5c025800, 0x60543000, 0x41782800, 0x600c2000, + 0x4d400000, 0x4d440000, 0x59368c03, 0x60a68000, + 0x0509fdce, 0x5c028800, 0x5c028000, 0x0009f010, + 0x91380594, 0x05020009, 0x59300403, 0xb0000c93, + 0x05b21821, 0xb0000480, 0x05b0181f, 0x4933c857, + 0x4803c857, 0x0c01f012, 0xb13805a1, 0x05000003, + 0xb13805a0, 0x05020007, 0x05f1ff79, 0x05fa0367, + 0x59300203, 0x9000058e, 0x05040617, 0x1c01f000, + 0xb1380586, 0x05000004, 0xb1380585, 0x05000002, + 0x1c01f000, 0x493bc857, 0x05f9f35c, 0x0010a61f, + 0x0010a61e, 0x0010a61e, 0x0010a61e, 0x0010a61e, + 0x0010a61e, 0x0010a61e, 0x0010a61e, 0x0010a61e, + 0x0010a61e, 0x0010a61e, 0x0010a631, 0x0010a631, + 0x0010a631, 0x0010a631, 0x0010a61e, 0x0010a631, + 0x0010a61e, 0x0010a631, 0x05adfff7, 0x4933c857, + 0x05f1fb07, 0x0505fc31, 0x00080010, 0x4d2c0000, + 0x59325809, 0x0509fe32, 0x05e5f96a, 0x4a025a08, 0x00000103, 0x59300402, 0x48025c0a, 0x641a5a0a, - 0x497a580d, 0x0001fb82, 0x5c025800, 0x0505fcbd, - 0x0005f7dc, 0x4933c857, 0x05f1fb7b, 0x0005f7dc, - 0x05b1fcea, 0x59300008, 0x8c000536, 0x05020004, - 0x5930001e, 0x800001c0, 0x050a0d0c, 0x497a6205, - 0x59300004, 0x8c00053e, 0x0502003b, 0x0509fdca, + 0x497a580d, 0x0001fba8, 0x5c025800, 0x0505fd12, + 0x0009f010, 0x4933c857, 0x05f1faf5, 0x0009f010, + 0x05adffe1, 0x59300008, 0x8c000536, 0x05020004, + 0x5930001e, 0x800001c0, 0x050a0d6f, 0x497a6205, + 0x59300004, 0x8c00053e, 0x0502003b, 0x0509fe37, 0x050200f0, 0x59325809, 0x592c0c0c, 0x59cc2808, 0x82141d00, 0x00000c00, 0x05000002, 0x59cc1809, 0x84040d58, 0x48065c0c, 0x82143500, 0x00008fff, 0x05020034, 0x59300008, 0x8c000536, 0x0500000f, 0x60303000, 0x60443800, 0x901409c0, 0x4806580d, - 0x4c5c0000, 0x592cb805, 0x0009f8b5, 0x4d2c0000, - 0x405e5800, 0x05b5f87d, 0x5c025800, 0x497a5805, + 0x4c5c0000, 0x592cb805, 0x0009f8ee, 0x4d2c0000, + 0x405e5800, 0x05b1fb70, 0x5c025800, 0x497a5805, 0x5c00b800, 0x0501f013, 0x59340200, 0x8c00050e, - 0x050200c6, 0x0009f8a5, 0x05020006, 0x64025a0a, - 0x59300013, 0x0509fd99, 0x80000d40, 0x05020a55, + 0x050200c6, 0x0009f8de, 0x05020006, 0x64025a0a, + 0x59300013, 0x0509fdfb, 0x80000d40, 0x05020a55, 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e, 0x901409c0, 0x4806580d, 0x59300c02, 0x48065c0a, - 0x0509fa31, 0x0509fa34, 0x0001fb82, 0x0509fd82, - 0x05ddf897, 0x59cc0008, 0x8c000518, 0x05060594, - 0x0005f7dc, 0x05f1ff84, 0x05fc07c5, 0x4d3c0000, - 0x600a7800, 0x0501fedc, 0x5c027800, 0x05fdf7c0, + 0x0509fa93, 0x0509fa96, 0x0001fba8, 0x0509fde4, + 0x05d9fe18, 0x59cc0008, 0x8c000518, 0x050605e9, + 0x0009f010, 0x05f1fefe, 0x05fc07c5, 0x4d3c0000, + 0x600a7800, 0x0501ff0a, 0x5c027800, 0x05fdf7c0, 0x4817c857, 0x480fc857, 0x82180500, 0x000000ff, 0x0500000d, 0x592c0208, 0x82000500, 0x000000ff, 0xb0000588, 0x05000003, 0x900005a2, 0x05020006, - 0x592c040b, 0x800001c0, 0x05000003, 0x0509fbc6, - 0x0509f3fd, 0x82180d00, 0x00000c00, 0x05000007, + 0x592c040b, 0x800001c0, 0x05000003, 0x0509fc29, + 0x0509f460, 0x82180d00, 0x00000c00, 0x05000007, 0x59300008, 0x8c000536, 0x05020004, 0x59340200, 0x8c00050e, 0x0502007c, 0x64025a0a, 0x41782000, 0x8c180510, 0x05000009, 0x59cc200b, 0x801021c0, @@ -10370,58 +10707,58 @@ static const uint32_t isp_2500_risc_code[] = { 0x05000028, 0x90183403, 0x80183104, 0x901c3c03, 0x801c3904, 0x9018340c, 0x901c3c11, 0x4c5c0000, 0x901401c0, 0x4802580d, 0x480e580e, 0x592cb805, - 0x4c040000, 0x0009f8b5, 0x5c000800, 0x4c500000, - 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe3a, + 0x4c040000, 0x0009f8ee, 0x5c000800, 0x4c500000, + 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe68, 0x5c00a800, 0x5c00a000, 0x4d2c0000, 0x405e5800, - 0x05b5f806, 0x5c025800, 0x497a5805, 0x5c00b800, + 0x05b1faf9, 0x5c025800, 0x497a5805, 0x5c00b800, 0x05fdf79c, 0x59300008, 0x8c000536, 0x05fc078a, 0x480e580e, 0x60303000, 0x60443800, 0x05fdf777, 0x59300008, 0x8c000536, 0x05000020, 0x05fdf7d7, - 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0009f8a5, - 0x05020006, 0x64025a0a, 0x59300013, 0x0509fd17, + 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0009f8de, + 0x05020006, 0x64025a0a, 0x59300013, 0x0509fd79, 0x80000d40, 0x050209d3, 0x5c002800, 0x5c001800, 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e, 0x901409c0, 0x4806580d, 0x5c000800, 0x4c500000, - 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe0e, + 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe3c, 0x5c00a800, 0x5c00a000, 0x59300008, 0x84000534, 0x48026008, 0x05fdf771, 0x4c040000, 0x4c0c0000, - 0x4c140000, 0x0009f8a5, 0x05020006, 0x64025a0a, - 0x59300013, 0x0509fcf9, 0x80000d40, 0x050209b5, + 0x4c140000, 0x0009f8de, 0x05020006, 0x64025a0a, + 0x59300013, 0x0509fd5b, 0x80000d40, 0x050209b5, 0x4806580b, 0x5c002800, 0x5c001800, 0x59301402, 0x480a5c0a, 0x480e580e, 0x901401c0, 0x4802580d, - 0x0509f991, 0x5c000800, 0x0501fda5, 0x0501fdd6, + 0x0509f9f3, 0x5c000800, 0x0501fdd3, 0x0501fe04, 0x05fdf75f, 0x592c020e, 0x8c000502, 0x05fc0783, 0x592c020c, 0x8c00050e, 0x05fe0780, 0x59300013, 0x800c0d80, 0x05fc077d, 0x4803c857, 0x480fc857, - 0x8c180514, 0x05040526, 0x80000540, 0x05fc0777, - 0x4807c856, 0x0505f522, 0x592c020e, 0x8c000502, + 0x8c180514, 0x0504057b, 0x80000540, 0x05fc0777, + 0x4807c856, 0x0505f577, 0x592c020e, 0x8c000502, 0x05fc0739, 0x59300013, 0x800001c0, 0x05fc0738, - 0x592c020c, 0x8c00050e, 0x05fe0735, 0x0505f518, + 0x592c020c, 0x8c00050e, 0x05fe0735, 0x0505f56d, 0x1c01f000, 0x59cc2006, 0x59cc2807, 0x0501f054, 0x0501f053, 0x1c01f000, 0x4933c857, 0x59300004, 0x8c00053e, 0x05020045, 0x59300008, 0x8c000536, - 0x05020004, 0x5930001e, 0x800001c0, 0x050a0c07, + 0x05020004, 0x5930001e, 0x800001c0, 0x050a0c6a, 0x497a6205, 0x59325809, 0x592c0c0c, 0x41782800, 0x41781800, 0x84040d58, 0x48065c0c, 0x41783000, 0x59300008, 0x8c000536, 0x0500000f, 0x901401c0, 0x4802580d, 0x60303000, 0x60443800, 0x4c5c0000, - 0x592cb805, 0x0009f8b5, 0x4d2c0000, 0x405e5800, - 0x05b1ff82, 0x5c025800, 0x497a5805, 0x5c00b800, + 0x592cb805, 0x0009f8ee, 0x4d2c0000, 0x405e5800, + 0x05b1fa75, 0x5c025800, 0x497a5805, 0x5c00b800, 0x0501f015, 0x59340200, 0x8c00050e, 0x05020018, - 0x0009f8a5, 0x05020007, 0x64025a0a, 0x59300013, - 0x0509fc9e, 0x80000d40, 0x4807c857, 0x05020959, + 0x0009f8de, 0x05020007, 0x64025a0a, 0x59300013, + 0x0509fd00, 0x80000d40, 0x4807c857, 0x05020959, 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e, 0x901409c0, 0x4806580d, 0x4933c857, 0x59300c02, - 0x48065c0a, 0x0509f934, 0x0509f937, 0x0001fb82, - 0x0509fc85, 0x05d9ff9a, 0x0005f7dc, 0x592c020e, + 0x48065c0a, 0x0509f996, 0x0509f999, 0x0001fba8, + 0x0509fce7, 0x05d9fd1b, 0x0009f010, 0x592c020e, 0x8c000502, 0x05fc07e7, 0x59300013, 0x4803c857, 0x800001c0, 0x05fc07e5, 0x592c020c, 0x8c00050e, - 0x05fe07e2, 0x0505f4ca, 0x05f1fe7f, 0x05fc07bb, + 0x05fe07e2, 0x0505f51f, 0x05f1fdf9, 0x05fc07bb, 0x4933c857, 0x1c01f000, 0x4933c857, 0x59300008, - 0x8c000536, 0x05b00b99, 0x0501f209, 0x4c5c0000, + 0x8c000536, 0x05ac0e90, 0x0501f209, 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000, 0x59325809, 0x59300008, 0x8c000536, 0x0502000b, 0x5930001e, - 0x800001c0, 0x4c140000, 0x050a0bb4, 0x5c002800, + 0x800001c0, 0x4c140000, 0x050a0c17, 0x5c002800, 0x592c020e, 0x8c000502, 0x05020033, 0x8c000500, 0x05000038, 0x640a6203, 0x650e6403, 0x405c0000, 0x592c0813, 0x80040c80, 0x40600000, 0x80040480, @@ -10430,99 +10767,99 @@ static const uint32_t isp_2500_risc_code[] = { 0x05000007, 0x59300a23, 0x90040503, 0x4c140000, 0x0c01f826, 0x5c002800, 0x05000018, 0x485e6015, 0x48626013, 0x497a6205, 0x5c00c000, 0x5c00b800, - 0x4c140000, 0x0505fe2d, 0x5c002800, 0x05000007, - 0x4816602a, 0x4a02601c, 0x0010a278, 0x1c01f000, - 0x5930282a, 0x497a602a, 0x05b5feaf, 0x0502000c, - 0x59300804, 0x0005f69d, 0x4c140000, 0x05f1fe3a, + 0x4c140000, 0x0505fe81, 0x5c002800, 0x05000007, + 0x4816602a, 0x4a02601c, 0x0010a7bc, 0x1c01f000, + 0x5930282a, 0x497a602a, 0x05b5fa0a, 0x0502000c, + 0x59300804, 0x0005f6d4, 0x4c140000, 0x05f1fdb4, 0x5c002800, 0x05fc07e1, 0x5c00c000, 0x5c00b800, - 0x05f9f1b0, 0x5c00c000, 0x5c00b800, 0x4933c857, + 0x05f9f19e, 0x5c00c000, 0x5c00b800, 0x4933c857, 0x1c01f000, 0x4807c857, 0x4004c000, 0x05fdf7d2, - 0x4803c857, 0x05fdf7f5, 0x0010a292, 0x0010a297, - 0x0010a29c, 0x0010a29c, 0x59300224, 0x480350d7, - 0x90000408, 0x480350d6, 0x0501f00a, 0x59300224, - 0x480350d6, 0x90000408, 0x480350d7, 0x0501f005, - 0x59300224, 0x90000408, 0x480350d6, 0x480350d7, - 0x405c1000, 0x41780800, 0x59a800d6, 0x05edfceb, + 0x4803c857, 0x05fdf7f5, 0x0010a7d6, 0x0010a7db, + 0x0010a7e0, 0x0010a7e0, 0x59300224, 0x480350dc, + 0x90000408, 0x480350db, 0x0501f00a, 0x59300224, + 0x480350db, 0x90000408, 0x480350dc, 0x0501f005, + 0x59300224, 0x90000408, 0x480350db, 0x480350dc, + 0x405c1000, 0x41780800, 0x59a800db, 0x05edfc60, 0x800409c0, 0x05020052, 0x40085000, 0x592c1001, 0x800811c0, 0x0500004e, 0x58080208, 0x82000500, 0x000000ff, 0xb000058a, 0x05020049, 0x48281005, - 0x59a800d6, 0x40601000, 0x41780800, 0x4c280000, - 0x05edfcda, 0x5c005000, 0x800409c0, 0x05020038, - 0x40041800, 0x59a800d7, 0x59300804, 0x8c040530, + 0x59a800db, 0x40601000, 0x41780800, 0x4c280000, + 0x05edfc4f, 0x5c005000, 0x800409c0, 0x05020038, + 0x40041800, 0x59a800dc, 0x59300804, 0x8c040530, 0x05000005, 0x59300827, 0x800800c6, 0x48000806, 0x59300224, 0x800c1c00, 0x80081040, 0x05fe07fe, - 0x480e602c, 0x592c4801, 0x802449c0, 0x05b00b13, + 0x480e602c, 0x592c4801, 0x802449c0, 0x05ac0e0a, 0x58240a09, 0x592c1815, 0x59303023, 0x8c180506, 0x05000003, 0x40280000, 0x80040c00, 0x800400e0, 0x80040540, 0x48026021, 0x8c18050a, 0x05020003, 0x40280000, 0x800c1c00, 0x480e601f, 0x59300804, 0x8c040530, 0x0500000e, 0x4c280000, 0x592c1001, - 0x59306827, 0x592c5a0e, 0x0005f9a1, 0x5c005000, - 0x802851c0, 0x05ba0b9e, 0x05020015, 0x59300827, + 0x59306827, 0x592c5a0e, 0x0005f9c8, 0x5c005000, + 0x802851c0, 0x05b60ecb, 0x05020015, 0x59300827, 0x58040006, 0x49780806, 0x48000810, 0x59300224, 0x59303023, 0x8c18050e, 0x05000002, 0x80000580, 0x48026424, 0x90000541, 0x1c01f000, 0x592c1813, 0x805c0418, 0x800c0580, 0x05fc07c6, 0x4933c857, 0x485fc857, 0x4863c857, 0x480fc857, 0x80000580, 0x1c01f000, 0xb1380498, 0x05021063, 0xb1380480, - 0x05001002, 0x0c01f002, 0x1c01f000, 0x0010a317, - 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a317, - 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a317, - 0x0010a317, 0x0010a318, 0x0010a317, 0x0010a317, - 0x0010a317, 0x0010a317, 0x0010a322, 0x0010a317, - 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a34d, - 0x0010a317, 0x0010a317, 0x0010a317, 0x05b1fac3, - 0x4933c857, 0x05f1fc30, 0x640a6203, 0x59a8005e, + 0x05001002, 0x0c01f002, 0x1c01f000, 0x0010a85b, + 0x0010a85b, 0x0010a85b, 0x0010a85b, 0x0010a85b, + 0x0010a85b, 0x0010a85b, 0x0010a85b, 0x0010a85b, + 0x0010a85b, 0x0010a85c, 0x0010a85b, 0x0010a85b, + 0x0010a85b, 0x0010a85b, 0x0010a866, 0x0010a85b, + 0x0010a85b, 0x0010a85b, 0x0010a85b, 0x0010a891, + 0x0010a85b, 0x0010a85b, 0x0010a85b, 0x05adfdba, + 0x4933c857, 0x05f1fbaa, 0x640a6203, 0x59a80061, 0x48026205, 0x59300013, 0x59300817, 0x80040c80, - 0x48066017, 0x05f1f12b, 0x4933c857, 0x05f1f929, - 0x4d3c0000, 0x417a7800, 0x05c1f806, 0x5c027800, - 0x42000000, 0x0010e454, 0x0515fcb2, 0x0505f99e, - 0x05000010, 0x4d2c0000, 0x59325809, 0x0509fb82, - 0x05e5f8d8, 0x4a025a08, 0x00000103, 0x59300402, + 0x48066017, 0x05f1f0a5, 0x4933c857, 0x05f1f8a3, + 0x4d3c0000, 0x417a7800, 0x05bdfb59, 0x5c027800, + 0x42000000, 0x001123f8, 0x0515fee9, 0x0505f9e3, + 0x05000010, 0x4d2c0000, 0x59325809, 0x0509fbe4, + 0x05e1ff1c, 0x4a025a08, 0x00000103, 0x59300402, 0x48025c0a, 0x64a65a0a, 0x497a580d, 0x592c0c0c, - 0x84040d50, 0x48065c0c, 0x0001fb82, 0x5c025800, + 0x84040d50, 0x48065c0c, 0x0001fba8, 0x5c025800, 0x60503000, 0x41782800, 0x4d400000, 0x4d440000, - 0x59368c03, 0x60082000, 0x60a68000, 0x0509fad0, + 0x59368c03, 0x60082000, 0x60a68000, 0x0509fb33, 0x5c028800, 0x5c028000, 0x59300008, 0x8c000536, - 0x05000004, 0x59300004, 0x8c000516, 0x05f80085, - 0x0005f7dc, 0x4933c857, 0x59cc0a04, 0x48066202, + 0x05000004, 0x59300004, 0x8c000516, 0x05f80056, + 0x0009f010, 0x4933c857, 0x59cc0a04, 0x48066202, 0x59300809, 0x4978080d, 0x4978080e, 0x5804140c, 0x84081558, 0x48080c0c, 0x59300008, 0x8c000536, 0x05000004, 0x5804040c, 0x84000542, 0x48000c0c, - 0x1c01f000, 0xb13805a1, 0x05020014, 0x05f1f9b4, - 0x0501fdd0, 0x0502000c, 0x05f1fe9a, 0x05fc07ff, + 0x1c01f000, 0xb13805a1, 0x05020014, 0x05f1f92e, + 0x0501fe06, 0x0502000c, 0x05f1fe14, 0x05fc07ff, 0x811800ca, 0x81c80c00, 0x58040138, 0x59cc0a03, - 0x80000040, 0x80040580, 0x05020007, 0x05f1fe8b, + 0x80000040, 0x80040580, 0x05020007, 0x05f1fe05, 0x05000005, 0x59300c16, 0x84040d44, 0x48066416, - 0x497a6205, 0x05f1f193, 0xb13805a0, 0x05fe07fe, + 0x497a6205, 0x05f1f10d, 0xb13805a0, 0x05fe07fe, 0x59cc0002, 0x8c000526, 0x05fe07e9, 0x05fdf7fa, 0x4807c857, 0x8c04053e, 0x05020024, 0x497a5a0a, - 0x5930002b, 0x80000540, 0x05000019, 0x0509ff19, + 0x5930002b, 0x80000540, 0x05000019, 0x050df88b, 0x05000021, 0x497a5a0a, 0x4c040000, 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000, 0x40002800, 0x58141003, 0x40040000, 0x80081480, 0x48082803, - 0x40140000, 0x05b5fb83, 0x5c002800, 0x5c002000, + 0x40140000, 0x05b1fedd, 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800, 0x592c020a, 0x80000540, 0x05020008, 0x0501f005, 0x592c040c, 0x8c00051c, 0x05000002, 0x592c0806, 0x4807c857, 0x64565a0a, 0x1c01f000, 0x5930002b, 0x80000540, 0x05000007, 0x64465a0a, 0x5930002b, 0x4c040000, - 0x05b5fb6c, 0x5c000800, 0x05fdf7f7, 0x4807c856, + 0x05b1fec6, 0x5c000800, 0x05fdf7f7, 0x4807c856, 0x641e5a0a, 0x1c01f000, 0xb1380498, 0x05001006, - 0xb13805a1, 0x05000003, 0xb13805a0, 0x05b20a2b, + 0xb13805a1, 0x05000003, 0xb13805a0, 0x05ae0d22, 0x1c01f000, 0xb1380480, 0x05001004, 0x4d2c0000, - 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010a3cf, - 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, - 0x0010a3d1, 0x0010a3d0, 0x0010a3cf, 0x0010a44b, - 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, - 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, - 0x0010a3cf, 0x0010a3cf, 0x0010a52b, 0x0010a55c, - 0x0010a53b, 0x0010a3d0, 0x0010a565, 0x05b1fa0b, - 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a0a2f, + 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010a913, + 0x0010a913, 0x0010a913, 0x0010a913, 0x0010a913, + 0x0010a915, 0x0010a914, 0x0010a913, 0x0010a98f, + 0x0010a913, 0x0010a913, 0x0010a913, 0x0010a913, + 0x0010a913, 0x0010a913, 0x0010a913, 0x0010a913, + 0x0010a913, 0x0010a913, 0x0010aa80, 0x0010aab1, + 0x0010aa90, 0x0010a914, 0x0010aaba, 0x05adfd02, + 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a0a92, 0x59300008, 0x8c00050e, 0x05000074, 0x8c000500, 0x05000066, 0x8c00051c, 0x05000008, 0x84000500, 0x48026008, 0x59325809, 0x592c3c0c, 0x841c3d58, - 0x481e5c0c, 0x0009f03f, 0x59325809, 0x592c3c0c, + 0x481e5c0c, 0x0009f078, 0x59325809, 0x592c3c0c, 0x841c3d58, 0x59300008, 0x8c00051c, 0x05fe07f4, 0x481e5c0c, 0x60140000, 0x40000000, 0x80000040, 0x05fe07fe, 0x59300008, 0x8c00051c, 0x05fe07ec, @@ -10530,751 +10867,772 @@ static const uint32_t isp_2500_risc_code[] = { 0x82000500, 0x000000ff, 0xb0000588, 0x05000003, 0x900005a2, 0x0502000a, 0x497a580f, 0x82040500, 0x000000ff, 0x05000006, 0x592c040b, 0x800001c0, - 0x05000003, 0x0509f910, 0x05b5f402, 0x900421c0, + 0x05000003, 0x0509f973, 0x05b1f75c, 0x900421c0, 0x4812580d, 0x41782000, 0x82040500, 0x00000c00, 0x05000002, 0x59cc2009, 0x82043500, 0x00000fff, 0x0502001e, 0x481e5c0c, 0x64025a0a, 0x801831c0, - 0x05b403f4, 0x41782000, 0x8c180510, 0x05000002, + 0x05b0074e, 0x41782000, 0x8c180510, 0x05000002, 0x59cc200b, 0x48125810, 0x41780000, 0x8c180512, 0x05000002, 0x59cc000a, 0x4802580f, 0x80100c00, - 0x05b019be, 0x05b403e7, 0x9004149d, 0x05021009, + 0x05ac1cb5, 0x05b00741, 0x9004149d, 0x05021009, 0x4c500000, 0x4c540000, 0x91cca40c, 0x912cac11, - 0x0501fb9d, 0x5c00a800, 0x5c00a000, 0x05b5f3dd, - 0x0501fb4b, 0x05b5f3db, 0x412c7800, 0x05b1fd57, - 0x05b009ae, 0x492c780d, 0x841c3d52, 0x481c7c0c, + 0x0501fbcb, 0x5c00a800, 0x5c00a000, 0x05b1f737, + 0x0501fb79, 0x05b1f735, 0x412c7800, 0x05b1f84a, + 0x05ac0ca5, 0x492c780d, 0x841c3d52, 0x481c7c0c, 0x4a025a08, 0x00000103, 0x4812580e, 0x900401c0, 0x4802580d, 0x583c0408, 0x583c1009, 0x583c220c, 0x48025c08, 0x480a5809, 0x48125a0c, 0x583c0002, 0x48025802, 0x05fdf7d0, 0x8c000524, 0x05fc079c, 0x59325809, 0x4c000000, 0x592c040c, 0x8c00051c, 0x5c000000, 0x05020003, 0x4a026013, 0xffffffff, - 0x84000524, 0x05fdf792, 0x1c01f000, 0x59a8005e, + 0x84000524, 0x05fdf792, 0x1c01f000, 0x59a80061, 0x48026205, 0x59325809, 0x640a6203, 0x592c240c, 0x59300808, 0x4933c857, 0x4807c857, 0x592c0208, 0x82000500, 0x000000ff, 0xb0001db5, 0x05020006, 0x592c1a0e, 0x8c0c0506, 0x05000003, 0x64025a0a, 0x0501f00a, 0xb0000588, 0x05000003, 0x900005a2, - 0x05020003, 0x8c100500, 0x050a00e7, 0x64025a0a, - 0x8c04051e, 0x05000044, 0x41780800, 0x497a580d, + 0x05020003, 0x8c100500, 0x050a014a, 0x64025a0a, + 0x8c04051e, 0x05000055, 0x41780800, 0x497a580d, 0x592c1c0d, 0x59300008, 0x8c00052c, 0x05000003, 0x4a026013, 0x7fffffff, 0x8c000536, 0x05000012, 0x41782800, 0x60303000, 0x60443800, 0x4c0c0000, - 0x4c100000, 0x4c5c0000, 0x592cb805, 0x0009f8b5, - 0x4d2c0000, 0x405e5800, 0x05b1fd18, 0x5c025800, + 0x4c100000, 0x4c5c0000, 0x592cb805, 0x0009f8ee, + 0x4d2c0000, 0x405e5800, 0x05b1f80b, 0x5c025800, 0x497a5805, 0x5c00b800, 0x5c002000, 0x5c001800, - 0x0501f017, 0x59300013, 0x59341200, 0x497a6205, - 0x8c08050e, 0x0502006e, 0x4807c857, 0x40041000, - 0x0509fa32, 0x480a580e, 0x80000d40, 0x05fe0eed, - 0x59300402, 0x48025c0a, 0x4806580b, 0x4a025a08, - 0x00000103, 0x4c040000, 0x592c0a0c, 0x8c040512, - 0x05000002, 0x64325a0a, 0x5c000800, 0x4c040000, - 0x4c0c0000, 0x4c100000, 0x0505fec3, 0x0509fa16, - 0x5c002000, 0x5c001800, 0x5c000800, 0x8c100512, - 0x05020017, 0x4c0c0000, 0x0505febf, 0x0001fb82, - 0x05d9fd23, 0x5c001800, 0x8c0c0518, 0x000407dc, - 0x0505f21f, 0x4813c857, 0x8c100518, 0x05000046, - 0x41780800, 0x592c1c0d, 0x820c0580, 0x00001000, - 0x05fc07b9, 0x8c100512, 0x05fc07b7, 0x592c780d, - 0x583c080e, 0x583c1c0d, 0x05fdf7b3, 0x4807c857, - 0x592c780d, 0x59300402, 0x592c1408, 0x8c08051e, - 0x0502000e, 0x592c120a, 0x48007c0a, 0x4804780b, - 0x48087a0a, 0x84102512, 0x48107c0c, 0x4c0c0000, - 0x4c3c0000, 0x05b1fcd6, 0x5c007800, 0x403e5800, - 0x0501fadd, 0x05fdf7db, 0x48025c0a, 0x4806580b, - 0x583c0810, 0x583c000f, 0x80040c00, 0x9004149d, - 0x05001005, 0x583c1001, 0x480a5801, 0x49787801, - 0x60700800, 0x90040c14, 0x4c0c0000, 0x4c500000, - 0x4c540000, 0x903ca40c, 0x912cac0c, 0x4c100000, - 0x4c3c0000, 0x0501fae4, 0x5c007800, 0x5c002000, - 0x5c00a800, 0x5c00a000, 0x84102512, 0x48125c0c, - 0x403e5800, 0x05b1fcb6, 0x0505fe77, 0x42034000, - 0x0010dceb, 0x59a1d806, 0x80edd9c0, 0x05b008ef, - 0x48efc857, 0x58ec0009, 0x4803c857, 0x0801f800, - 0x05fdf7b4, 0x4933c857, 0x1c01f000, 0x59301416, - 0x480bc857, 0x8c08051c, 0x0502000e, 0x80000540, - 0x4803c857, 0x05fc078d, 0x80042c80, 0x05fe178b, - 0x8c080514, 0x05020005, 0x592c0813, 0x4807c857, - 0x80040480, 0x48026018, 0x8408155c, 0x480a6416, - 0x59301008, 0x8408151e, 0x480a6008, 0x4c100000, - 0x4c3c0000, 0x4d400000, 0x592e820a, 0x64065a0a, - 0x0505fe51, 0x49425a0a, 0x5c028000, 0x5c007800, - 0x5c002000, 0x497a580d, 0x8c100512, 0x05000005, - 0x4d2c0000, 0x403e5800, 0x05b1fc85, 0x5c025800, - 0x82102500, 0xffffedff, 0x48125c0c, 0x59301006, - 0x800811c0, 0x050401e6, 0x59a8005e, 0x80080480, - 0x050611e3, 0x0509f990, 0x05e1fee6, 0x4a025a08, - 0x00000103, 0x641a5a0a, 0x497a5c0d, 0x492fc857, - 0x0001fb82, 0x05d9fc9e, 0x0005f7dc, 0x59325809, - 0x592c040c, 0x8c000518, 0x05000003, 0x412df800, - 0x05b5f2ec, 0x592c0208, 0x82000500, 0x000000ff, - 0xb0001db5, 0x05020005, 0x592c1a0e, 0x8c0c0506, - 0x05000002, 0x05fdf712, 0x1c01f000, 0x4933c857, - 0x59325809, 0x497a580d, 0x64025a0a, 0x4a025a08, - 0x00000103, 0x59300813, 0x4807c857, 0x800409c0, - 0x0502000a, 0x4806580b, 0x59300c02, 0x48065c0a, - 0x0505fe15, 0x0509f968, 0x0505fe17, 0x0001fb82, - 0x05d9fc7b, 0x0005f7dc, 0x59340200, 0x8c00050e, - 0x05020007, 0x59300013, 0x0509f968, 0x80000d40, - 0x05fdfe24, 0x4806580b, 0x05fdf7f0, 0x592c020c, - 0x8c00050e, 0x05fe07f8, 0x4933c857, 0x0505f1a8, - 0x4933c857, 0x59325809, 0x812e59c0, 0x05b0087b, - 0x592c020e, 0x8c000502, 0x05b00878, 0x640a6006, - 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a089b, - 0x59300008, 0x4933c857, 0x4803c857, 0x8c00050e, - 0x05000034, 0x8c000500, 0x05000026, 0x8c00051c, - 0x05000009, 0x84000500, 0x48026008, 0x59325809, - 0x592c3c0c, 0x481fc857, 0x841c3d58, 0x481e5c0c, - 0x0009f03f, 0x59325809, 0x592c3c0c, 0x841c3d58, - 0x59300008, 0x8c00051c, 0x05fe07f3, 0x481e5c0c, - 0x60140000, 0x40000000, 0x80000040, 0x05fe07fe, - 0x59300008, 0x8c00051c, 0x05fe07eb, 0x592c0208, - 0x82000500, 0x000000ff, 0xb0000588, 0x05000003, - 0x900005a2, 0x05020003, 0x497a580f, 0x0501f002, - 0x497a580d, 0x481e5c0c, 0x64025a0a, 0x05b5f271, - 0x8c000524, 0x05fc07dc, 0x59325809, 0x4c000000, - 0x592c040c, 0x8c00051c, 0x5c000000, 0x05020003, - 0x4a026013, 0xffffffff, 0x84000524, 0x05fdf7d2, - 0x1c01f000, 0x4933c857, 0x41780800, 0xb1380498, - 0x05021009, 0xb1380480, 0x05001007, 0x4d2c0000, - 0x59325809, 0x812e59c0, 0x0c020805, 0x5c025800, - 0x0005f7dc, 0x493bc857, 0x1c01f000, 0x0010a5c7, - 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, - 0x0010a5c8, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, - 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, - 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, - 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5cb, - 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x05b1f813, - 0x59cc0808, 0x497a580b, 0x4807c857, 0x59300402, - 0x48025c0a, 0x4a025a08, 0x00000103, 0x900401c0, - 0x4802580d, 0x64025a0a, 0x800409c0, 0x00000382, - 0x59cc0009, 0x4802580e, 0x82042500, 0x00000100, - 0x05000002, 0x59cc200b, 0x48125810, 0x82040500, - 0x00000200, 0x05000002, 0x59cc000a, 0x4802580f, - 0x80100c00, 0x05ac1ff9, 0x00000382, 0x9004149d, - 0x05001005, 0x592c0408, 0x8c00051e, 0x0500000a, - 0x60700800, 0x4c500000, 0x4c540000, 0x91cca40c, - 0x912cac11, 0x0501f9d4, 0x5c00a800, 0x5c00a000, - 0x0001f382, 0x0501f982, 0x0501f1b3, 0x83380480, - 0x00000093, 0x05ae1fe5, 0x83380480, 0x00000085, - 0x05ac1fe2, 0x0c01f001, 0x0010a608, 0x0010a607, - 0x0010a607, 0x0010a60d, 0x0010a607, 0x0010a607, - 0x0010a607, 0x0010a607, 0x0010a607, 0x0010a607, - 0x0010a607, 0x0010a607, 0x0010a607, 0x05adffd3, - 0x64066203, 0x493a6403, 0x42000800, 0x80000040, - 0x0005f6ab, 0x83300580, 0x00111a70, 0x05ae0fcb, - 0x4933c857, 0x59cc1404, 0x0505fb47, 0x0500002c, - 0x591c0203, 0x90000580, 0x05000029, 0x591c000a, - 0x81340580, 0x05020026, 0x59cc1204, 0x82080580, - 0x0000ffff, 0x05000007, 0x591c0202, 0x82000d80, - 0x0000ffff, 0x05000003, 0x80080580, 0x0502001c, - 0x4d300000, 0x4d1c0000, 0x411e6000, 0x0501f9e5, - 0x5c023800, 0x5c026000, 0x05000013, 0x59cc0005, - 0x8c000500, 0x05020003, 0x0501f99a, 0x0501f002, - 0x640a3a03, 0x4a026403, 0x00000086, 0x59cc0005, - 0x8c000500, 0x0500000c, 0x591c0416, 0x8400055a, - 0x48023c16, 0x59300416, 0x8400055a, 0x48026416, - 0x0501f005, 0x0501f9c2, 0x05fc07ed, 0x4a026403, - 0x00000087, 0x4d2c0000, 0x0511ff81, 0x05d9fecc, - 0x5c025800, 0x59340200, 0x8c00050e, 0x0500000b, - 0x59cc1404, 0x0505fb10, 0x05000008, 0x591c0416, - 0x8c00051a, 0x05000005, 0x4d300000, 0x411e6000, - 0x0505f8c5, 0x5c026000, 0x1c01f000, 0x91380593, - 0x0502000a, 0x59300403, 0x4803c857, 0x82000d80, - 0x00000086, 0x05000015, 0x82000d80, 0x00000087, - 0x05ae0f7e, 0x0501f011, 0x913805a7, 0x05000003, - 0x91380594, 0x05ae0f79, 0x493bc857, 0x05edfe06, - 0x0501fe65, 0x05f4056b, 0x4d2c0000, 0x59325809, - 0x0001fb82, 0x59300a29, 0x90040d83, 0x05000f3d, - 0x5c025800, 0x05f5f563, 0x4933c857, 0x0505fa2f, - 0x05f60560, 0x0005f7dc, 0x91380593, 0x05020006, - 0x59300403, 0x4803c857, 0x82000480, 0x00000085, - 0x0c01f04c, 0x913805a7, 0x05020040, 0x4933c857, - 0x05edfded, 0x59300416, 0x8c00051a, 0x05020002, - 0x0005f7dc, 0x4d3c0000, 0x417a7800, 0x05bdfca9, - 0x5c027800, 0x60543000, 0x41782800, 0x600c2000, - 0x60a68000, 0x4d400000, 0x4d440000, 0x59368c03, - 0x0505ff87, 0x5c028800, 0x5c028000, 0x42000000, - 0x0010e454, 0x0515f94b, 0x0501fe37, 0x000407dc, - 0x4d2c0000, 0x59325809, 0x592c0208, 0x82000500, - 0x000000ff, 0x90000594, 0x05020f0e, 0x0509f816, - 0x05e1fd6c, 0x4a025a08, 0x00000103, 0x59300402, - 0x48025c0a, 0x497a580d, 0x49425a0a, 0x0001fb82, - 0x5c025800, 0x0005f7dc, 0xb13805a1, 0x05000009, - 0xb13805a0, 0x05000007, 0x83380580, 0x00000089, - 0x05000004, 0x83380580, 0x0000008a, 0x05f60585, - 0x05f1fa09, 0x05f60583, 0x59300a03, 0x9004058e, - 0x050007bd, 0x9004058a, 0x0500003c, 0x9004058c, - 0x0500003a, 0x05adff21, 0x91380594, 0x05fe07eb, - 0x4933c857, 0x05edfdac, 0x59300416, 0x8c00051a, - 0x05020002, 0x0005f7dc, 0x601a8000, 0x05fdf7cf, - 0x0010a6d2, 0x0010a6d1, 0x0010a6d1, 0x0010a6d1, - 0x0010a6d1, 0x0010a6d1, 0x0010a6e2, 0x0010a6d1, - 0x0010a6d1, 0x0010a6d1, 0x0010a6d1, 0x0010a6d1, - 0x0010a6d1, 0x05adff09, 0x4933c857, 0x0505f9cb, - 0x0500000a, 0x643a6203, 0x59a8005e, 0x48026205, - 0x59300416, 0x8c00051a, 0x05020003, 0x59a8005c, - 0x48026006, 0x1c01f000, 0x59a8005c, 0x48026006, - 0x642a6203, 0x1c01f000, 0x4933c857, 0x0505f9bb, - 0x0500000a, 0x643a6203, 0x59a8005e, 0x48026205, - 0x59300416, 0x8c00051a, 0x05020003, 0x59a8005c, - 0x48026006, 0x1c01f000, 0x59a8005c, 0x48026006, - 0x64326203, 0x1c01f000, 0x5932680a, 0x83380580, - 0x00000089, 0x05000007, 0x83380580, 0x0000008a, - 0x0500002c, 0x4933c857, 0x493bc857, 0x05f5f539, - 0x4933c857, 0x59325809, 0x59300416, 0x8c00051a, - 0x0500000b, 0x59300229, 0x90000583, 0x05ae0ed7, - 0x640e6407, 0x59300429, 0x48026203, 0x59340200, - 0x8c00050e, 0x0506000c, 0x1c01f000, 0x59300a29, - 0x90040583, 0x05020007, 0x0501fdbb, 0x0500000d, - 0x0001fb82, 0x05d9fab6, 0x497a6009, 0x0501f009, - 0x59300229, 0x90000581, 0x05020006, 0x59300c18, - 0x900405b9, 0x05000019, 0x900405b5, 0x05000017, - 0x59cc0c07, 0x4806641b, 0x59cc0a07, 0x4806621b, - 0x59300203, 0x48026429, 0x64466203, 0x05f5f4ad, - 0x4933c857, 0x59300416, 0x8c00051a, 0x000607dc, - 0x59300229, 0x90000581, 0x0502003f, 0x59300c18, - 0x900405b5, 0x05000005, 0x9004059e, 0x05000003, - 0x900405b9, 0x05020038, 0x4933c857, 0x4c5c0000, - 0x4c600000, 0x4d1c0000, 0x4130b800, 0x4004c000, - 0x0505f9de, 0x0502002b, 0x906005b5, 0x05020004, - 0x591c0c16, 0x8c040502, 0x05000026, 0x05f5fcc4, - 0x05000024, 0x491fc857, 0x4933c857, 0x906005b5, - 0x05000003, 0x906005b9, 0x05020002, 0x4932381e, - 0x585c081d, 0x4806601d, 0x48626403, 0x64066203, - 0x64066407, 0x585c080a, 0x4807c857, 0x4806600a, - 0x585c0c17, 0x4807c857, 0x48066417, 0x585c0a17, - 0x4807c857, 0x48066217, 0x585c0a18, 0x4807c857, - 0x48066218, 0x585c0c1b, 0x4807c857, 0x4806641b, - 0x585c0a1b, 0x4807c857, 0x4806621b, 0x491e602a, - 0x0505f92f, 0x42000800, 0x80000040, 0x0005feab, - 0x405e6000, 0x5c023800, 0x5c00c000, 0x5c00b800, - 0x0005f7dc, 0x0501fd60, 0x05000008, 0x4d2c0000, - 0x59325809, 0x0001fb82, 0x59300229, 0x90000583, - 0x05d80a57, 0x5c025800, 0x0005f7dc, 0x4803c856, - 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c500000, - 0x4c540000, 0x412cb800, 0x4d2c0000, 0x6004c000, - 0x82040480, 0x00000101, 0x05001002, 0x60000802, - 0x4004c800, 0x60700800, 0x91cca40c, 0x912cac11, - 0x0501f83d, 0x9064cc9c, 0x592e5801, 0x812e59c0, - 0x05b20a13, 0x05b1f9f9, 0x05000011, 0x8060c000, - 0x4a025808, 0x00000110, 0x492cb801, 0x90640cbd, - 0x05021005, 0x40640800, 0x912cac09, 0x0501f82e, - 0x0501f007, 0x9064ccbc, 0x60f00800, 0x412cb800, - 0x912cac09, 0x0501f828, 0x05fdf7ef, 0x5c025800, - 0x8460c1c0, 0x9060c543, 0x48625a08, 0x5c00a800, - 0x5c00a000, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x492fc857, 0x812e59c0, 0x05000012, - 0x592c2802, 0x4d2c0000, 0x4c3c0000, 0x592c7801, - 0x803c79c0, 0x05000009, 0x497a5801, 0x4c140000, - 0x4c3c0000, 0x0001fb82, 0x5c025800, 0x5c002800, - 0x48165802, 0x05fdf7f6, 0x5c007800, 0x0001fb82, - 0x5c025800, 0x1c01f000, 0x4803c856, 0x4c580000, - 0x90040403, 0x8000b104, 0x0515f8e9, 0x5c00b000, - 0x1c01f000, 0x4803c856, 0x4c580000, 0x90040c03, - 0x8004b104, 0x0515f8e2, 0x5c00b000, 0x1c01f000, - 0x591c0c07, 0x90040583, 0x05000005, 0x90040582, - 0x05000003, 0x9004058a, 0x05020022, 0x4d300000, - 0x4d2c0000, 0x411e6000, 0x59325809, 0x0501fcf6, - 0x05000019, 0x59300c07, 0x9004058a, 0x0500001a, - 0x90040583, 0x05020007, 0x592c0a08, 0x82040d00, - 0x000000ff, 0x90040d94, 0x05000002, 0x640e6229, - 0x0501f814, 0x4d400000, 0x604e8000, 0x592c0a0c, - 0x84040d54, 0x05d9fe46, 0x5c028000, 0x0505fb76, - 0x0505fec9, 0x0001fb82, 0x59300229, 0x90000583, - 0x05000dbc, 0x05f5fbe3, 0x5c025800, 0x5c026000, - 0x1c01f000, 0x644e5a0a, 0x642a6229, 0x05fdf7f4, - 0x592c040c, 0x8c000512, 0x05000008, 0x84000512, - 0x48025c0c, 0x4d2c0000, 0x592e580d, 0x05b1f9a0, - 0x5c025800, 0x497a580d, 0x1c01f000, 0x59cc0005, - 0x8c000500, 0x0502000a, 0x591c0407, 0x90000582, - 0x05020007, 0x591c0c03, 0x82040580, 0x00000085, - 0x05000003, 0x82040580, 0x0000008b, 0x1c01f000, - 0x4933c857, 0x4d3c0000, 0x600a7800, 0x59300407, - 0x90000c92, 0x05ae1dc9, 0x0c01f808, 0x5c027800, - 0x1c01f000, 0x4933c857, 0x59300407, 0x90000c92, - 0x05ae1dc2, 0x0c01f001, 0x0010a830, 0x0010a82d, - 0x0010a82d, 0x0010a863, 0x0010a82c, 0x0010a82d, - 0x0010a842, 0x0010a82d, 0x0010a82c, 0x0010a82c, - 0x0010b73f, 0x0010a82d, 0x0010a82d, 0x0010a82c, - 0x0010a82c, 0x0010a82c, 0x0010a94b, 0x0010a82d, - 0x05adfdae, 0x4803c856, 0x80000580, 0x1c01f000, - 0x4803c856, 0x8d3c0502, 0x0502000f, 0x0501fc96, - 0x0500000b, 0x59325809, 0x0505fe7b, 0x41780800, - 0x4d400000, 0x60168000, 0x05d9fdf1, 0x5c028000, - 0x0505fb21, 0x0501fdec, 0x0001fb82, 0x05f5fb91, - 0x90000541, 0x1c01f000, 0x4933c857, 0x0501fc86, - 0x05000008, 0x59300809, 0x5804020c, 0x8c000512, - 0x05000004, 0x4d400000, 0x60328000, 0x0501f00f, - 0x05d9f86c, 0x0500000b, 0x59300416, 0x84000556, - 0x48026416, 0x0501f812, 0x4df00000, 0x59300416, - 0x84000516, 0x48026416, 0x5c03e000, 0x1c01f000, - 0x4d400000, 0x60428000, 0x050dfcc7, 0x641a6407, - 0x641e6203, 0x9140058c, 0x05020003, 0x641a6203, - 0x497a6006, 0x5c028000, 0x1c01f000, 0x4933c857, - 0x05edfcaf, 0x4df00000, 0x0501f8d5, 0x90000c91, - 0x05ae1d72, 0x0c01f001, 0x0010a87c, 0x0010a906, - 0x0010a891, 0x0010a914, 0x0010a903, 0x0010a87b, - 0x0010a87c, 0x0010a87c, 0x0010a87f, 0x0010a87c, - 0x0010a87c, 0x0010a87c, 0x0010a87c, 0x0010a891, - 0x0010a87f, 0x0010a87c, 0x0010a87f, 0x05adfd5f, - 0x5c03e000, 0x05ec0c87, 0x05fdf7af, 0x5c03e000, - 0x05ec0c84, 0x59300407, 0x90000583, 0x05fe07ad, - 0x59300203, 0x9000058d, 0x05fc07aa, 0x59300008, - 0x8c000500, 0x05b20fc0, 0x8d3c0502, 0x05fe07a5, - 0x4d340000, 0x5932680a, 0x05d9f939, 0x5c026800, - 0x05fdf7a0, 0x0509f8cc, 0x59300008, 0x8c000500, - 0x05b20fb5, 0x0505fe06, 0x59300004, 0x8400055c, - 0x48026004, 0x4203e000, 0xb0800000, 0x6023f800, - 0x05edfc68, 0x59300407, 0x90000586, 0x0500005e, - 0x8d3c0502, 0x05020060, 0x497a6229, 0x59300203, - 0x9000058d, 0x05000002, 0x640e6229, 0x0501fc22, - 0x05020004, 0x8d3c0500, 0x05000049, 0x0501f041, - 0x4d2c0000, 0x4d400000, 0x59325809, 0x0501fd7a, - 0x592c040c, 0x8c000512, 0x05000008, 0x4d2c0000, - 0x84000512, 0x48025c0c, 0x592c080d, 0x40065800, - 0x05b1f8e3, 0x5c025800, 0x4d400000, 0x60168000, - 0x592c0a0c, 0x82040500, 0x00000084, 0x0500000c, - 0x600a8000, 0x592c0208, 0x82000500, 0x000000ff, - 0xb80004b5, 0x05020009, 0x8c040504, 0x05000007, - 0x83428540, 0x00000200, 0x0501f004, 0x8c040512, - 0x05000002, 0x60328000, 0x592c0208, 0x82000500, - 0x000000ff, 0xb00005b5, 0x05020005, 0x592c020e, - 0x8c000506, 0x05000002, 0x853e7d40, 0x05d9fd54, - 0x0505fdd9, 0x5c028000, 0x0505fa83, 0x8d3c0500, - 0x05020003, 0x0515f814, 0x05020003, 0x0001fb82, - 0x497a6009, 0x5c028000, 0x5c025800, 0x8d3c0500, - 0x0500000a, 0x59300a29, 0x90040d83, 0x05020005, - 0x4d340000, 0x5932680a, 0x05d9f8dd, 0x5c026800, - 0x05f5fae4, 0x0501f010, 0x0515f803, 0x05020004, - 0x59300a29, 0x90040d83, 0x05000cb6, 0x640a6407, - 0x42000800, 0x80004040, 0x0505fda5, 0x4a026003, - 0x00850009, 0x0005feab, 0x4203e000, 0xb0800000, - 0x6023f800, 0x5c03e000, 0x05ee0c15, 0x90000541, - 0x1c01f000, 0x0505fdb0, 0x05fdf7fb, 0x05edfc01, - 0x05b1ff45, 0x05fdf78c, 0x598c000b, 0x81300580, - 0x05020003, 0x05edff07, 0x05020022, 0x05edf8ab, - 0x05020005, 0x59300c03, 0xb0040580, 0x05fc0770, - 0x05fdf781, 0x05edfb1b, 0x0500001a, 0x05adfcc7, - 0x0501f81c, 0x05020003, 0x05edfeca, 0x05020015, - 0x05e9ffbe, 0x0500000f, 0x05edfb12, 0x05000011, - 0x59300407, 0x90000583, 0x05ae0cbc, 0x59300004, - 0x9000051f, 0x90000585, 0x05ae0cb8, 0x58d400ec, - 0x82000500, 0x00000f00, 0x05fe076b, 0x05adfcb3, - 0x59300c03, 0xb0040580, 0x05fc0755, 0x05fdf766, - 0x59300203, 0x90000c91, 0x05ae1cac, 0x0c01f73b, - 0x417a3000, 0x60df2160, 0x59900005, 0x81300580, - 0x05000006, 0x91932410, 0x811a3000, 0x91180485, - 0x05fc17fa, 0x90000541, 0x1c01f000, 0x59300004, - 0x8c00053e, 0x0500000c, 0x8c00050c, 0x0502000a, - 0x8c000516, 0x05020004, 0x90000d1f, 0x90040585, - 0x05020003, 0x600c0000, 0x0501f004, 0x60040000, - 0x0501f002, 0x59300203, 0x1c01f000, 0x4933c857, - 0x05edfbc7, 0x4df00000, 0x59300203, 0x90000c91, - 0x05ae1c8a, 0x0c01f001, 0x0010a964, 0x0010a975, - 0x0010a967, 0x0010a963, 0x0010a963, 0x0010a963, - 0x0010a963, 0x0010a963, 0x0010a963, 0x0010a963, - 0x0010a963, 0x0010a963, 0x0010a963, 0x0010a963, - 0x0010a967, 0x0010a963, 0x0010a963, 0x05adfc77, - 0x5c03e000, 0x05ec0b9f, 0x05fdf6c7, 0x5c03e000, - 0x05ec0b9c, 0x4d2c0000, 0x05b5fd9f, 0x59325809, - 0x0501fb5d, 0x05ac0c6d, 0x64165a0a, 0x0001fb82, - 0x05d9fb00, 0x05f5fa5f, 0x5c025800, 0x90000541, - 0x1c01f000, 0x598c000b, 0x81300580, 0x05020014, - 0x59300004, 0x8c000520, 0x05000004, 0x84000520, - 0x48026004, 0x0501f014, 0x42001000, 0x0010e387, - 0x50081000, 0x58080002, 0x82000580, 0x00000100, - 0x05000005, 0x05b5fd84, 0x05edf830, 0x05ae0c53, - 0x05fdf7df, 0x05edfe87, 0x0502000a, 0x59300004, - 0x8c000520, 0x05000004, 0x84000520, 0x48026004, - 0x05fdf7d7, 0x05edf825, 0x05fc07d5, 0x05adfc47, - 0x59300203, 0x90000c91, 0x05ae1c44, 0x0c01f7bb, - 0x4d340000, 0x4d240000, 0x5932481d, 0x5932680a, - 0x59300407, 0x4933c857, 0x4803c857, 0x90000c92, - 0x05ae1c3a, 0x0c01f804, 0x5c024800, 0x5c026800, - 0x1c01f000, 0x0010a9ba, 0x0010aab5, 0x0010ac24, - 0x0010a9c1, 0x0010ac09, 0x0010ac20, 0x0010c515, - 0x0010aa99, 0x0010ac05, 0x0010a9b7, 0x0010ac80, - 0x0010a9b7, 0x0010a9b7, 0x0010a9b7, 0x0010a9b7, - 0x00020fdc, 0x0010b4cc, 0x0010b4cc, 0x05adfc23, - 0x0501fc12, 0x05f8010a, 0x1c01f000, 0x05edfb58, - 0x05edfaad, 0x05edfb47, 0x0005f7dc, 0x64066006, - 0x1c01f000, 0x42000000, 0x0010e463, 0x0511fe19, - 0x4d2c0000, 0x4d400000, 0x417a5800, 0x0501fb02, - 0x05000007, 0x0505ff94, 0x59325809, 0x592c020c, - 0x8400054c, 0x48025a0c, 0x601a8000, 0x05edfb44, - 0x05fdff6b, 0x4803c857, 0x90000c91, 0x05ae1c07, - 0x0c01f805, 0x05edfb2f, 0x5c028000, 0x5c025800, - 0x1c01f000, 0x0010aa98, 0x0010a9eb, 0x0010a9f7, - 0x0010aa3a, 0x0010aa68, 0x0010a9ea, 0x0010a9ba, - 0x0010a9ba, 0x0010a9ba, 0x0010a9ea, 0x0010a9ea, - 0x0010a9ea, 0x0010a9ea, 0x0010a9f7, 0x0010a9eb, - 0x0010a9ea, 0x0010aa3a, 0x05adfbf0, 0x598c000b, - 0x4803c857, 0x81300580, 0x05020003, 0x05edfe21, - 0x0502005a, 0x05e9ffc5, 0x0500005d, 0x4803c856, - 0x05edfa38, 0x05000055, 0x05adfbe4, 0x497a6229, - 0x812e59c0, 0x05ac0be1, 0x592c0a08, 0x4807c857, - 0x82040d00, 0x000000ff, 0x90040594, 0x05000018, - 0xb00405b5, 0x05020014, 0x59300008, 0x8c000500, - 0x05020064, 0x592c0a0e, 0x8c040506, 0x0500000e, - 0x592c0c0c, 0x4c040000, 0x592c0a0c, 0x05d9fc20, + 0x0501f019, 0x59300013, 0x0509fa9a, 0x59341200, + 0x497a6205, 0x8c08050e, 0x0502007e, 0x4807c857, + 0x4806580e, 0x80000d40, 0x05fe0eee, 0x592c020a, + 0x90000595, 0x0500001e, 0x59300402, 0x48025c0a, + 0x4806580b, 0x4a025a08, 0x00000103, 0x4c040000, + 0x592c0a0c, 0x8c040512, 0x05000002, 0x64325a0a, + 0x5c000800, 0x4c040000, 0x4c0c0000, 0x4c100000, + 0x0505ff23, 0x0509fa76, 0x5c002000, 0x5c001800, + 0x5c000800, 0x8c100512, 0x05020026, 0x4c0c0000, + 0x0505ff1f, 0x0001fba8, 0x05d9faa2, 0x5c001800, + 0x8c0c0518, 0x00080010, 0x0505f272, 0x0501f907, + 0x05fe07e2, 0x8c100512, 0x05020006, 0x59300221, + 0x48025a0d, 0x84102556, 0x48125c0c, 0x05fdf7db, + 0x592c000d, 0x80006d40, 0x05fc07d8, 0x59300221, + 0x48006a0d, 0x05fdf7f8, 0x4813c857, 0x8c100518, + 0x05000046, 0x41780800, 0x592c1c0d, 0x820c0580, + 0x00001000, 0x05fc07a8, 0x8c100512, 0x05fc07a6, + 0x592c780d, 0x583c080e, 0x583c1c0d, 0x05fdf7a2, + 0x4807c857, 0x592c780d, 0x59300402, 0x592c1408, + 0x8c08051e, 0x0502000e, 0x592c120a, 0x48007c0a, + 0x4804780b, 0x48087a0a, 0x84102512, 0x48107c0c, + 0x4c0c0000, 0x4c3c0000, 0x05adffb8, 0x5c007800, + 0x403e5800, 0x0501fafa, 0x05fdf7cc, 0x48025c0a, + 0x4806580b, 0x583c0810, 0x583c000f, 0x80040c00, + 0x9004149d, 0x05001005, 0x583c1001, 0x480a5801, + 0x49787801, 0x60700800, 0x90040c14, 0x4c0c0000, + 0x4c500000, 0x4c540000, 0x903ca40c, 0x912cac0c, + 0x4c100000, 0x4c3c0000, 0x0501fb01, 0x5c007800, + 0x5c002000, 0x5c00a800, 0x5c00a000, 0x84102512, + 0x48125c0c, 0x403e5800, 0x05adff98, 0x0505fec8, + 0x42034000, 0x00111c71, 0x59a1d806, 0x80edd9c0, + 0x05ac0bd5, 0x48efc857, 0x58ec0009, 0x4803c857, + 0x0801f800, 0x05fdf7a5, 0x4933c857, 0x1c01f000, + 0x59301416, 0x480bc857, 0x8c08051c, 0x0502000e, + 0x80000540, 0x4803c857, 0x05fc077d, 0x80042c80, + 0x05fe177b, 0x8c080514, 0x05020005, 0x592c0813, + 0x4807c857, 0x80040480, 0x48026018, 0x8408155c, + 0x480a6416, 0x59301008, 0x8408151e, 0x480a6008, + 0x4c100000, 0x4c3c0000, 0x4d400000, 0x592e820a, + 0x64065a0a, 0x0505fea2, 0x49425a0a, 0x5c028000, + 0x5c007800, 0x5c002000, 0x497a580d, 0x8c100512, + 0x05000005, 0x4d2c0000, 0x403e5800, 0x05adff67, + 0x5c025800, 0x82102500, 0xffffedff, 0x48125c0c, + 0x59301006, 0x800811c0, 0x0504022a, 0x59a80061, + 0x80080480, 0x05061227, 0x0509f9e1, 0x05e1fd19, + 0x4a025a08, 0x00000103, 0x641a5a0a, 0x497a5c0d, + 0x492fc857, 0x0001fba8, 0x05d9fa0e, 0x0009f010, + 0x59325809, 0x592c040c, 0x8c000518, 0x05000003, + 0x412df800, 0x05b1f635, 0x592c0208, 0x82000500, + 0x000000ff, 0xb0001db5, 0x05020005, 0x592c1a0e, + 0x8c0c0506, 0x05000002, 0x05fdf701, 0x1c01f000, + 0x4933c857, 0x59325809, 0x497a580d, 0x64025a0a, + 0x4a025a08, 0x00000103, 0x59300813, 0x4807c857, + 0x800409c0, 0x0502000a, 0x4806580b, 0x59300c02, + 0x48065c0a, 0x0505fe66, 0x0509f9b9, 0x0505fe68, + 0x0001fba8, 0x05d9f9eb, 0x0009f010, 0x59340200, + 0x8c00050e, 0x05020007, 0x59300013, 0x0509f9b9, + 0x80000d40, 0x05fdfe13, 0x4806580b, 0x05fdf7f0, + 0x592c020c, 0x8c00050e, 0x05fe07f8, 0x4933c857, + 0x0505f1ec, 0x4933c857, 0x59325809, 0x812e59c0, + 0x05ac0b61, 0x592c020e, 0x8c000502, 0x05ac0b5e, + 0x640a6006, 0x1c01f000, 0x5930001e, 0x800001c0, + 0x050a08ed, 0x59300008, 0x4933c857, 0x4803c857, + 0x8c00050e, 0x05000034, 0x8c000500, 0x05000026, + 0x8c00051c, 0x05000009, 0x84000500, 0x48026008, + 0x59325809, 0x592c3c0c, 0x481fc857, 0x841c3d58, + 0x481e5c0c, 0x0009f078, 0x59325809, 0x592c3c0c, + 0x841c3d58, 0x59300008, 0x8c00051c, 0x05fe07f3, + 0x481e5c0c, 0x60140000, 0x40000000, 0x80000040, + 0x05fe07fe, 0x59300008, 0x8c00051c, 0x05fe07eb, + 0x592c0208, 0x82000500, 0x000000ff, 0xb0000588, + 0x05000003, 0x900005a2, 0x05020003, 0x497a580f, + 0x0501f002, 0x497a580d, 0x481e5c0c, 0x64025a0a, + 0x05b1f5ba, 0x8c000524, 0x05fc07dc, 0x59325809, + 0x4c000000, 0x592c040c, 0x8c00051c, 0x5c000000, + 0x05020003, 0x4a026013, 0xffffffff, 0x84000524, + 0x05fdf7d2, 0x1c01f000, 0x59a80007, 0x8c00050a, + 0x05000019, 0x59300008, 0x82000500, 0x04800800, + 0x82000580, 0x00000800, 0x05020013, 0x59300014, + 0x80000540, 0x05000010, 0x59300009, 0x80006d40, + 0x0500000d, 0x58340001, 0x80006d40, 0x0500000a, + 0x58340208, 0x82000500, 0x000000ff, 0xb000058a, + 0x05020005, 0x58340409, 0x90000503, 0x90000580, + 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x4933c857, + 0x41780800, 0xb1380498, 0x05021009, 0xb1380480, + 0x05001007, 0x4d2c0000, 0x59325809, 0x812e59c0, + 0x0c020805, 0x5c025800, 0x0009f010, 0x493bc857, + 0x1c01f000, 0x0010ab39, 0x0010ab39, 0x0010ab39, + 0x0010ab39, 0x0010ab39, 0x0010ab3a, 0x0010ab39, + 0x0010ab39, 0x0010ab39, 0x0010ab39, 0x0010ab39, + 0x0010ab39, 0x0010ab39, 0x0010ab39, 0x0010ab39, + 0x0010ab39, 0x0010ab39, 0x0010ab39, 0x0010ab39, + 0x0010ab39, 0x0010ab3d, 0x0010ab39, 0x0010ab39, + 0x0010ab39, 0x05adfadc, 0x59cc0808, 0x497a580b, + 0x4807c857, 0x59300402, 0x48025c0a, 0x4a025a08, + 0x00000103, 0x900401c0, 0x4802580d, 0x64025a0a, + 0x800409c0, 0x000003a8, 0x59cc0009, 0x4802580e, + 0x82042500, 0x00000100, 0x05000002, 0x59cc200b, + 0x48125810, 0x82040500, 0x00000200, 0x05000002, + 0x59cc000a, 0x4802580f, 0x80100c00, 0x05ac1ac2, + 0x000003a8, 0x9004149d, 0x05001005, 0x592c0408, + 0x8c00051e, 0x0500000a, 0x60700800, 0x4c500000, + 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501f9d4, + 0x5c00a800, 0x5c00a000, 0x0001f3a8, 0x0501f982, + 0x0501f1b3, 0x83380480, 0x00000093, 0x05ae1aae, + 0x83380480, 0x00000085, 0x05ac1aab, 0x0c01f001, + 0x0010ab7a, 0x0010ab79, 0x0010ab79, 0x0010ab7f, + 0x0010ab79, 0x0010ab79, 0x0010ab79, 0x0010ab79, + 0x0010ab79, 0x0010ab79, 0x0010ab79, 0x0010ab79, + 0x0010ab79, 0x05adfa9c, 0x64066203, 0x493a6403, + 0x42000800, 0x80000040, 0x0005f6e2, 0x83300580, + 0x00115a14, 0x05ae0a94, 0x4933c857, 0x59cc1404, + 0x0505fb71, 0x0500002c, 0x591c0203, 0x90000580, + 0x05000029, 0x591c000a, 0x81340580, 0x05020026, + 0x59cc1204, 0x82080580, 0x0000ffff, 0x05000007, + 0x591c0202, 0x82000d80, 0x0000ffff, 0x05000003, + 0x80080580, 0x0502001c, 0x4d300000, 0x4d1c0000, + 0x411e6000, 0x0501f9e5, 0x5c023800, 0x5c026000, + 0x05000013, 0x59cc0005, 0x8c000500, 0x05020003, + 0x0501f99a, 0x0501f002, 0x640a3a03, 0x4a026403, + 0x00000086, 0x59cc0005, 0x8c000500, 0x0500000c, + 0x591c0416, 0x8400055a, 0x48023c16, 0x59300416, + 0x8400055a, 0x48026416, 0x0501f005, 0x0501f9c2, + 0x05fc07ed, 0x4a026403, 0x00000087, 0x4d2c0000, + 0x0515f96e, 0x05d9fc2f, 0x5c025800, 0x59340200, + 0x8c00050e, 0x0500000b, 0x59cc1404, 0x0505fb3a, + 0x05000008, 0x591c0416, 0x8c00051a, 0x05000005, + 0x4d300000, 0x411e6000, 0x0505f8ec, 0x5c026000, + 0x1c01f000, 0x91380593, 0x0502000a, 0x59300403, + 0x4803c857, 0x82000d80, 0x00000086, 0x05000015, + 0x82000d80, 0x00000087, 0x05ae0a47, 0x0501f011, + 0x913805a7, 0x05000003, 0x91380594, 0x05ae0a42, + 0x493bc857, 0x05edfd52, 0x0501fe7c, 0x05f4050e, + 0x4d2c0000, 0x59325809, 0x0001fba8, 0x59300a29, + 0x90040d83, 0x05000f64, 0x5c025800, 0x05f5f506, + 0x4933c857, 0x0505fa55, 0x05f60503, 0x0009f010, + 0x91380593, 0x05020006, 0x59300403, 0x4803c857, + 0x82000480, 0x00000085, 0x0c01f04c, 0x913805a7, + 0x05020040, 0x4933c857, 0x05edfd39, 0x59300416, + 0x8c00051a, 0x05020002, 0x0009f010, 0x4d3c0000, + 0x417a7800, 0x05b9ffce, 0x5c027800, 0x60543000, + 0x41782800, 0x600c2000, 0x60a68000, 0x4d400000, + 0x4d440000, 0x59368c03, 0x0505ffbc, 0x5c028800, + 0x5c028000, 0x42000000, 0x001123f8, 0x0515fb54, + 0x0501fe4e, 0x00080010, 0x4d2c0000, 0x59325809, + 0x592c0208, 0x82000500, 0x000000ff, 0x90000594, + 0x05020f35, 0x0509f84a, 0x05e1fb82, 0x4a025a08, + 0x00000103, 0x59300402, 0x48025c0a, 0x497a580d, + 0x49425a0a, 0x0001fba8, 0x5c025800, 0x0009f010, + 0xb13805a1, 0x05000009, 0xb13805a0, 0x05000007, + 0x83380580, 0x00000089, 0x05000004, 0x83380580, + 0x0000008a, 0x05f60545, 0x05f1f955, 0x05f60543, + 0x59300a03, 0x9004058e, 0x050007e4, 0x9004058a, + 0x0500003c, 0x9004058c, 0x0500003a, 0x05adf9ea, + 0x91380594, 0x05fe07eb, 0x4933c857, 0x05edfcf8, + 0x59300416, 0x8c00051a, 0x05020002, 0x0009f010, + 0x601a8000, 0x05fdf7cf, 0x0010ac44, 0x0010ac43, + 0x0010ac43, 0x0010ac43, 0x0010ac43, 0x0010ac43, + 0x0010ac54, 0x0010ac43, 0x0010ac43, 0x0010ac43, + 0x0010ac43, 0x0010ac43, 0x0010ac43, 0x05adf9d2, + 0x4933c857, 0x0505f9f1, 0x0500000a, 0x643a6203, + 0x59a80061, 0x48026205, 0x59300416, 0x8c00051a, + 0x05020003, 0x59a8005f, 0x48026006, 0x1c01f000, + 0x59a8005f, 0x48026006, 0x642a6203, 0x1c01f000, + 0x4933c857, 0x0505f9e1, 0x0500000a, 0x643a6203, + 0x59a80061, 0x48026205, 0x59300416, 0x8c00051a, + 0x05020003, 0x59a8005f, 0x48026006, 0x1c01f000, + 0x59a8005f, 0x48026006, 0x64326203, 0x1c01f000, + 0x5932680a, 0x83380580, 0x00000089, 0x05000007, + 0x83380580, 0x0000008a, 0x0500002c, 0x4933c857, + 0x493bc857, 0x05f5f4f9, 0x4933c857, 0x59325809, + 0x59300416, 0x8c00051a, 0x0500000b, 0x59300229, + 0x90000583, 0x05ae09a0, 0x640e6407, 0x59300429, + 0x48026203, 0x59340200, 0x8c00050e, 0x05060033, + 0x1c01f000, 0x59300a29, 0x90040583, 0x05020007, + 0x0501fdd2, 0x0500000d, 0x0001fba8, 0x05d9f809, + 0x497a6009, 0x0501f009, 0x59300229, 0x90000581, + 0x05020006, 0x59300c18, 0x900405b9, 0x05000019, + 0x900405b5, 0x05000017, 0x59cc0c07, 0x4806641b, + 0x59cc0a07, 0x4806621b, 0x59300203, 0x48026429, + 0x64466203, 0x05f5f450, 0x4933c857, 0x59300416, + 0x8c00051a, 0x000a0010, 0x59300229, 0x90000581, + 0x0502003f, 0x59300c18, 0x900405b5, 0x05000005, + 0x9004059e, 0x05000003, 0x900405b9, 0x05020038, + 0x4933c857, 0x4c5c0000, 0x4c600000, 0x4d1c0000, + 0x4130b800, 0x4004c000, 0x0505fa04, 0x0502002b, + 0x906005b5, 0x05020004, 0x591c0c16, 0x8c040502, + 0x05000026, 0x05f5fc67, 0x05000024, 0x491fc857, + 0x4933c857, 0x906005b5, 0x05000003, 0x906005b9, + 0x05020002, 0x4932381e, 0x585c081d, 0x4806601d, + 0x48626403, 0x64066203, 0x64066407, 0x585c080a, + 0x4807c857, 0x4806600a, 0x585c0c17, 0x4807c857, + 0x48066417, 0x585c0a17, 0x4807c857, 0x48066217, + 0x585c0a18, 0x4807c857, 0x48066218, 0x585c0c1b, + 0x4807c857, 0x4806641b, 0x585c0a1b, 0x4807c857, + 0x4806621b, 0x491e602a, 0x0505f955, 0x42000800, + 0x80000040, 0x0005fee2, 0x405e6000, 0x5c023800, + 0x5c00c000, 0x5c00b800, 0x0009f010, 0x0501fd77, + 0x05000008, 0x4d2c0000, 0x59325809, 0x0001fba8, + 0x59300229, 0x90000583, 0x05d40faa, 0x5c025800, + 0x0009f010, 0x4803c856, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x4c500000, 0x4c540000, 0x412cb800, + 0x4d2c0000, 0x6004c000, 0x82040480, 0x00000101, + 0x05001002, 0x60000802, 0x4004c800, 0x60700800, + 0x91cca40c, 0x912cac11, 0x0501f83d, 0x9064cc9c, + 0x592e5801, 0x812e59c0, 0x05ae0cd8, 0x05adfcbe, + 0x05000011, 0x8060c000, 0x4a025808, 0x00000110, + 0x492cb801, 0x90640cbd, 0x05021005, 0x40640800, + 0x912cac09, 0x0501f82e, 0x0501f007, 0x9064ccbc, + 0x60f00800, 0x412cb800, 0x912cac09, 0x0501f828, + 0x05fdf7ef, 0x5c025800, 0x8460c1c0, 0x9060c543, + 0x48625a08, 0x5c00a800, 0x5c00a000, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x492fc857, + 0x812e59c0, 0x05000012, 0x592c2802, 0x4d2c0000, + 0x4c3c0000, 0x592c7801, 0x803c79c0, 0x05000009, + 0x497a5801, 0x4c140000, 0x4c3c0000, 0x0001fba8, + 0x5c025800, 0x5c002800, 0x48165802, 0x05fdf7f6, + 0x5c007800, 0x0001fba8, 0x5c025800, 0x1c01f000, + 0x4803c856, 0x4c580000, 0x90040403, 0x8000b104, + 0x0515faf2, 0x5c00b000, 0x1c01f000, 0x4803c856, + 0x4c580000, 0x90040c03, 0x8004b104, 0x0009f9cf, + 0x5c00b000, 0x1c01f000, 0x591c0c07, 0x90040583, + 0x05000005, 0x90040582, 0x05000003, 0x9004058a, + 0x05020022, 0x4d300000, 0x4d2c0000, 0x411e6000, + 0x59325809, 0x0501fd0d, 0x05000019, 0x59300c07, + 0x9004058a, 0x0500001a, 0x90040583, 0x05020007, + 0x592c0a08, 0x82040d00, 0x000000ff, 0x90040d94, + 0x05000002, 0x640e6229, 0x0501f814, 0x4d400000, + 0x604e8000, 0x592c0a0c, 0x84040d54, 0x05d9fbb8, + 0x5c028000, 0x0505fbaa, 0x0505fefd, 0x0001fba8, + 0x59300229, 0x90000583, 0x05000de3, 0x05f5fb86, + 0x5c025800, 0x5c026000, 0x1c01f000, 0x644e5a0a, + 0x642a6229, 0x05fdf7f4, 0x592c040c, 0x8c000512, + 0x05000008, 0x84000512, 0x48025c0c, 0x4d2c0000, + 0x592e580d, 0x05adfc65, 0x5c025800, 0x497a580d, + 0x1c01f000, 0x59cc0005, 0x8c000500, 0x0502000a, + 0x591c0407, 0x90000582, 0x05020007, 0x591c0c03, + 0x82040580, 0x00000085, 0x05000003, 0x82040580, + 0x0000008b, 0x1c01f000, 0x4933c857, 0x4d3c0000, + 0x600a7800, 0x59300407, 0x90000c92, 0x05ae1892, + 0x0c01f808, 0x5c027800, 0x1c01f000, 0x4933c857, + 0x59300407, 0x90000c92, 0x05ae188b, 0x0c01f001, + 0x0010ada2, 0x0010ad9f, 0x0010ad9f, 0x0010add5, + 0x0010ad9f, 0x0010ad9f, 0x0010adb4, 0x0010ad9f, + 0x0010ad9e, 0x0010ad9e, 0x0010bcf0, 0x0010ad9f, + 0x0010ad9f, 0x0010ad9e, 0x0010ad9e, 0x0010ad9e, + 0x0010aec5, 0x0010ad9f, 0x05adf877, 0x4803c856, + 0x80000580, 0x1c01f000, 0x4803c856, 0x8d3c0502, + 0x0502000f, 0x0501fcad, 0x0500000b, 0x59325809, + 0x0505feaf, 0x41780800, 0x4d400000, 0x60168000, + 0x05d9fb63, 0x5c028000, 0x0505fb55, 0x0501fe13, + 0x0001fba8, 0x05f5fb34, 0x90000541, 0x1c01f000, + 0x4933c857, 0x0501fc9d, 0x05000008, 0x59300809, + 0x5804020c, 0x8c000512, 0x05000004, 0x4d400000, + 0x60328000, 0x0501f00f, 0x05d5fd6c, 0x0500000b, + 0x59300416, 0x84000556, 0x48026416, 0x0501f812, + 0x4df00000, 0x59300416, 0x84000516, 0x48026416, + 0x5c03e000, 0x1c01f000, 0x4d400000, 0x60428000, + 0x050dfe52, 0x641a6407, 0x641e6203, 0x9140058c, + 0x05020003, 0x641a6203, 0x497a6006, 0x5c028000, + 0x1c01f000, 0x4933c857, 0x05edfbfb, 0x4df00000, + 0x0501f8dd, 0x90000c91, 0x05ae183b, 0x0c01f001, + 0x0010adee, 0x0010ae78, 0x0010ae03, 0x0010ae86, + 0x0010ae75, 0x0010aded, 0x0010adee, 0x0010adee, + 0x0010adf1, 0x0010adee, 0x0010adee, 0x0010adee, + 0x0010adee, 0x0010ae03, 0x0010adf1, 0x0010adee, + 0x0010adf1, 0x05adf828, 0x5c03e000, 0x05ec0bd3, + 0x05fdf7af, 0x5c03e000, 0x05ec0bd0, 0x59300407, + 0x90000583, 0x05fe07ad, 0x59300203, 0x9000058d, + 0x05fc07aa, 0x59300008, 0x8c000500, 0x05b20aec, + 0x8d3c0502, 0x05fe07a5, 0x4d340000, 0x5932680a, + 0x05d5fe8c, 0x5c026800, 0x05fdf7a0, 0x0509f90b, + 0x59300008, 0x8c000500, 0x05b20ae1, 0x0505fe3a, + 0x59300004, 0x8400055c, 0x48026004, 0x4203e000, + 0xb0800000, 0x6023f800, 0x05edfbb4, 0x8d3c0502, + 0x05020063, 0x59300407, 0x90000586, 0x0500005c, + 0x497a6229, 0x59300203, 0x9000058d, 0x05000002, + 0x640e6229, 0x0501fc39, 0x05020004, 0x8d3c0500, + 0x05000049, 0x0501f041, 0x4d2c0000, 0x4d400000, + 0x59325809, 0x0501fda1, 0x592c040c, 0x8c000512, + 0x05000008, 0x4d2c0000, 0x84000512, 0x48025c0c, + 0x592c080d, 0x40065800, 0x05adfba8, 0x5c025800, + 0x4d400000, 0x60168000, 0x592c0a0c, 0x82040500, + 0x00000084, 0x0500000c, 0x600a8000, 0x592c0208, + 0x82000500, 0x000000ff, 0xb80004b5, 0x05020009, + 0x8c040504, 0x05000007, 0x83428540, 0x00000200, + 0x0501f004, 0x8c040512, 0x05000002, 0x60328000, + 0x592c0208, 0x82000500, 0x000000ff, 0xb00005b5, + 0x05020005, 0x592c020e, 0x8c000506, 0x05000002, + 0x853e7d40, 0x05d9fac6, 0x0505fe0d, 0x5c028000, + 0x0505fab7, 0x8d3c0500, 0x05020003, 0x0515fa1d, + 0x05020003, 0x0001fba8, 0x497a6009, 0x5c028000, + 0x5c025800, 0x8d3c0500, 0x0500000a, 0x59300a29, + 0x90040d83, 0x05020005, 0x4d340000, 0x5932680a, + 0x05d5fe30, 0x5c026800, 0x05f5fa87, 0x0501f010, + 0x0515fa0c, 0x05020004, 0x59300a29, 0x90040d83, + 0x05000cdd, 0x640a6407, 0x42000800, 0x80004040, + 0x0505fdd9, 0x4a026003, 0x00850009, 0x0005fee2, + 0x4203e000, 0xb0800000, 0x6023f800, 0x5c03e000, + 0x05ee0b61, 0x90000541, 0x1c01f000, 0x640a6203, + 0x05fdf7fb, 0x05edfb4d, 0x05b1fa71, 0x05fdf78c, + 0x598c000b, 0x81300580, 0x05020003, 0x05edfe53, + 0x0502002a, 0x05e9fff2, 0x05020005, 0x59300c03, + 0xb0040580, 0x05fc0770, 0x05fdf781, 0x05edfa66, + 0x05000022, 0x05a9ff90, 0x0501f824, 0x05020003, + 0x05edfe16, 0x0502001d, 0x05e9ff05, 0x05000017, + 0x05edfa5d, 0x05000019, 0x59300407, 0x90000583, + 0x05aa0f85, 0x59300004, 0x9000051f, 0x90000585, + 0x05aa0f81, 0x58d400ec, 0x82000500, 0x00000f00, + 0x05fe076b, 0x58d400ec, 0x4803c857, 0x59300000, + 0x4803c857, 0x59300003, 0x4803c857, 0x59300004, + 0x4803c857, 0x05fdf762, 0x59300c03, 0xb0040580, + 0x05fc074d, 0x05fdf75e, 0x59300203, 0x90000c91, + 0x05aa1f6d, 0x0c01f733, 0x417a3000, 0x60df2160, + 0x59900005, 0x81300580, 0x05000006, 0x91932410, + 0x811a3000, 0x91180485, 0x05fc17fa, 0x90000541, + 0x1c01f000, 0x59300004, 0x8c00053e, 0x0500000c, + 0x8c00050c, 0x0502000a, 0x8c000516, 0x05020004, + 0x90000d1f, 0x90040585, 0x05020003, 0x600c0000, + 0x0501f004, 0x60040000, 0x0501f002, 0x59300203, + 0x1c01f000, 0x4933c857, 0x05edfb0b, 0x4df00000, + 0x59300203, 0x90000c91, 0x05aa1f4b, 0x0c01f001, + 0x0010aede, 0x0010aeef, 0x0010aee1, 0x0010aedd, + 0x0010aedd, 0x0010aedd, 0x0010aedd, 0x0010aedd, + 0x0010aedd, 0x0010aedd, 0x0010aedd, 0x0010aedd, + 0x0010aedd, 0x0010aedd, 0x0010aee1, 0x0010aedd, + 0x0010aedd, 0x05a9ff38, 0x5c03e000, 0x05ec0ae3, + 0x05fdf6bf, 0x5c03e000, 0x05ec0ae0, 0x4d2c0000, + 0x05b5f896, 0x59325809, 0x0501fb6c, 0x05a80f2e, + 0x64165a0a, 0x0001fba8, 0x05d9f85b, 0x05f5f9fa, + 0x5c025800, 0x90000541, 0x1c01f000, 0x598c000b, + 0x81300580, 0x05020014, 0x59300004, 0x8c000520, + 0x05000004, 0x84000520, 0x48026004, 0x0501f014, + 0x42001000, 0x00112322, 0x50081000, 0x58080002, + 0x82000580, 0x00000100, 0x05000005, 0x05b5f87b, + 0x05e9ff6f, 0x05aa0f14, 0x05fdf7df, 0x05edfdcb, + 0x0502000a, 0x59300004, 0x8c000520, 0x05000004, + 0x84000520, 0x48026004, 0x05fdf7d7, 0x05e9ff64, + 0x05fc07d5, 0x05a9ff08, 0x59300203, 0x90000c91, + 0x05aa1f05, 0x0c01f7bb, 0x4d340000, 0x4d240000, + 0x5932481d, 0x5932680a, 0x59300407, 0x4933c857, + 0x4803c857, 0x90000c92, 0x05aa1efb, 0x0c01f804, + 0x5c024800, 0x5c026800, 0x1c01f000, 0x0010af34, + 0x0010b032, 0x0010b1ad, 0x0010af3b, 0x0010b192, + 0x0010b1a9, 0x0010cc12, 0x0010b016, 0x0010b18e, + 0x0010af31, 0x0010b209, 0x0010af31, 0x0010af31, + 0x0010af31, 0x0010af31, 0x00021010, 0x0010ba73, + 0x0010ba73, 0x05a9fee4, 0x0501fc31, 0x05f800ca, + 0x1c01f000, 0x05edfa9c, 0x05edf9f1, 0x05edfa8b, + 0x0009f010, 0x64066006, 0x1c01f000, 0x42000000, + 0x00112407, 0x0515f81a, 0x5930001e, 0x800001c0, + 0x05060c69, 0x4d2c0000, 0x4d400000, 0x417a5800, + 0x0501fb0e, 0x05000007, 0x0505ffc8, 0x59325809, + 0x592c020c, 0x8400054c, 0x48025a0c, 0x601a8000, + 0x05edfa85, 0x05fdff68, 0x4803c857, 0x90000c91, + 0x05aa1ec5, 0x0c01f805, 0x05edfa70, 0x5c028000, + 0x5c025800, 0x1c01f000, 0x0010b015, 0x0010af68, + 0x0010af74, 0x0010afb7, 0x0010afe5, 0x0010af67, + 0x0010af34, 0x0010af34, 0x0010af34, 0x0010af67, + 0x0010af67, 0x0010af67, 0x0010af67, 0x0010af74, + 0x0010af68, 0x0010af67, 0x0010afb7, 0x05a9feae, + 0x598c000b, 0x4803c857, 0x81300580, 0x05020003, + 0x05edfd62, 0x0502005a, 0x05e9ff01, 0x0500005d, + 0x4803c856, 0x05edf978, 0x05000055, 0x05a9fea2, + 0x497a6229, 0x812e59c0, 0x05a80e9f, 0x592c0a08, + 0x4807c857, 0x82040d00, 0x000000ff, 0x90040594, + 0x05000018, 0xb00405b5, 0x05020014, 0x59300008, + 0x8c000500, 0x05020064, 0x592c0a0e, 0x8c040506, + 0x0500000e, 0x592c0c0c, 0x4c040000, 0x592c0a0c, + 0x05d9f987, 0x5c000800, 0x8c040510, 0x05000003, + 0x4a025c0c, 0x00000100, 0x0001fba8, 0x0501fbb2, + 0x497a6009, 0x05f5f154, 0x640e6229, 0x0505fcc4, + 0x592c0c0c, 0x4c040000, 0x592c0a0c, 0x05d9f978, 0x5c000800, 0x8c040510, 0x05000003, 0x4a025c0c, - 0x00000100, 0x0001fb82, 0x0501fb96, 0x497a6009, - 0x05f5f1bc, 0x640e6229, 0x0505fc9b, 0x592c0c0c, - 0x4c040000, 0x592c0a0c, 0x05d9fc11, 0x5c000800, - 0x8c040510, 0x05000003, 0x4a025c0c, 0x00000100, - 0x0505f93d, 0x0511fed0, 0x05020006, 0x0001fb82, - 0x59300a29, 0x90040d83, 0x05000b82, 0x497a6009, - 0x4a026403, 0x00000085, 0x64266203, 0x640a6407, - 0x59300804, 0x82040d00, 0x00000100, 0x0505fc6c, - 0x82040d40, 0x80004040, 0x48066004, 0x4203e000, - 0xb0800000, 0x6023f800, 0x05edface, 0x42000800, - 0x80004040, 0x0005f6ab, 0x05fdfef6, 0x05020003, - 0x05edfda4, 0x0502000d, 0x05e9fe98, 0x05000006, - 0x05edf9ec, 0x05000009, 0x59300004, 0x4803c857, - 0x05fdf7b3, 0x59300c03, 0x4807c857, 0xb0040580, - 0x05000007, 0x05fdf7ae, 0x59300203, 0x4803c857, - 0x90000c91, 0x05ae1b8d, 0x0c01f78b, 0x05edfab5, - 0x812e59c0, 0x05000015, 0x0505fc5f, 0x592c0c0c, - 0x4c040000, 0x592c0a0c, 0x05d9fbd5, 0x5c000800, - 0x8c040510, 0x05000003, 0x4a025c0c, 0x00000100, - 0x0505f901, 0x0001fb82, 0x59300203, 0x9000058d, - 0x05000006, 0x05edfaa3, 0x4d340000, 0x5932680a, - 0x05d5ff63, 0x5c026800, 0x05f5f96a, 0x0501f031, - 0x812e59c0, 0x05ac0b71, 0x0501fee9, 0x05020003, - 0x05b1fddd, 0x05fdf78a, 0x05edfa96, 0x592c020c, - 0x8400050c, 0x48025a0c, 0x592c040a, 0x800000c2, - 0x800008c4, 0x80040c00, 0x48066006, 0x42000000, - 0x10000000, 0x41300800, 0x05b1fab8, 0x05000013, - 0x592c020c, 0x8c00051c, 0x05020005, 0x8400055c, - 0x48025a0c, 0x640a6006, 0x0501f016, 0x59c80001, - 0x80000540, 0x05020006, 0x42000000, 0x40000000, - 0x41300800, 0x05b1faa9, 0x0501f004, 0x4d300000, - 0x05b5fd38, 0x5c026000, 0x59300008, 0x8c000536, - 0x05020004, 0x59300203, 0x90000584, 0x05020005, - 0x4d380000, 0x61227000, 0x0009f800, 0x5c027000, - 0x1c01f000, 0x4d340000, 0x4c5c0000, 0x59300203, - 0x90000591, 0x05020014, 0x5932680a, 0x4130b800, - 0x0005ffbf, 0x0500000f, 0x64066203, 0x647a6403, - 0x585c041b, 0x4802641b, 0x585c021b, 0x4802621b, - 0x4936600a, 0x585c001d, 0x4802601d, 0x0501fde4, - 0x64066407, 0x42000800, 0x80000040, 0x0005feab, - 0x405e6000, 0x0005ffdc, 0x5c00b800, 0x5c026800, - 0x1c01f000, 0x42000000, 0x0010e45f, 0x0511fd25, - 0x0511fb9c, 0x59300203, 0x90000c91, 0x05ae1b1f, - 0x4803c857, 0x0c01f001, 0x0010aacf, 0x0010a9bf, - 0x0010aad0, 0x0010aacf, 0x0010aad0, 0x0010aad0, - 0x0010a9bb, 0x0010aacf, 0x0010a9b8, 0x0010aacf, - 0x0010aacf, 0x0010aacf, 0x0010aacf, 0x0010aacf, - 0x0010aad0, 0x0010aacf, 0x0010aacf, 0x05adfb0b, - 0x83340580, 0x00110210, 0x05f400fe, 0x4d2c0000, - 0x59340400, 0x82000500, 0x000000ff, 0x90000c8c, - 0x05ae1b02, 0x4c000000, 0x0505fdc5, 0x5c000000, - 0x0502000a, 0x59300009, 0x800001c0, 0x05020004, - 0x05f5f8f0, 0x0505fdc5, 0x0501f010, 0x05f5ffe0, - 0x05f5f8ec, 0x0501f00d, 0x59303403, 0xb0180d91, - 0x0500000c, 0x90180d84, 0x05020003, 0x60040000, - 0x0501f004, 0x90180d80, 0x05020002, 0x60040000, - 0x4803c857, 0x0c01f823, 0x5c025800, 0x1c01f000, - 0x42000000, 0x0010e45b, 0x0511fce6, 0x05bdfb20, - 0x59340412, 0x82000500, 0x000000ff, 0x05000016, - 0x80000040, 0x48026c12, 0x4d300000, 0x05f5f904, - 0x5c000000, 0x0500000f, 0x641c0407, 0x4a000006, - 0x00000398, 0x49238830, 0x4a038832, 0xffffffff, - 0x4926601d, 0x497a6009, 0x4936600a, 0x64066407, - 0x64066203, 0x65466403, 0x5c025800, 0x05e9f562, - 0x40026000, 0x5c025800, 0x60042800, 0x0505f626, - 0x0010ab20, 0x0010abba, 0x0010ab21, 0x0010ab57, - 0x0010ab21, 0x0010abcf, 0x0010ab21, 0x0010ab28, - 0x0010ab20, 0x0010abcf, 0x0010ab20, 0x0010ab33, - 0x05adfaba, 0x59300403, 0x90000d96, 0x05000032, - 0x90000d84, 0x05000030, 0x90000d82, 0x0500002e, - 0x0501faa2, 0x0500002c, 0x59300403, 0x90000da2, - 0x050000a5, 0x90000db9, 0x050000ac, 0x90000db5, - 0x050000aa, 0x90000d9e, 0x05000024, 0x0501f996, - 0x05000005, 0x0505f818, 0x05020003, 0x05d5ff19, - 0x0501f01d, 0x59300403, 0x90000d81, 0x0502000f, - 0x5930081d, 0x58040200, 0x8c000500, 0x050405f5, - 0x5930080a, 0x58040403, 0x82000580, 0x000007fe, - 0x05020004, 0x60042800, 0x0505fdf3, 0x0005f7dc, - 0x05d5fedd, 0x0500000c, 0x59340403, 0x82000480, - 0x000007f0, 0x05021009, 0x4d3c0000, 0x417a7800, - 0x05b9ffdc, 0x5c027800, 0x42000000, 0x0010e454, - 0x0511fc88, 0x05f5ff6e, 0x05f5f07a, 0x0501f972, - 0x05000003, 0x0501fff4, 0x05000091, 0x59300c03, - 0x90040596, 0x05000058, 0x90040582, 0x05020034, - 0x59a80249, 0x8c000502, 0x0502000f, 0x05d9fd4b, - 0x0502000d, 0x59a80006, 0x8c000506, 0x0502000a, - 0x05d9fd58, 0x05020004, 0x60040000, 0x05d9fd1c, - 0x0501f07f, 0x64075042, 0x6006d800, 0x05d9fcc2, - 0x0501f07b, 0x59340200, 0x8c000508, 0x05000007, - 0x84000508, 0x48026a00, 0x59300416, 0x84000510, - 0x48026416, 0x0501f014, 0x59340412, 0x82000500, + 0x00000100, 0x0505f966, 0x0515f8ce, 0x05020006, + 0x0001fba8, 0x59300a29, 0x90040d83, 0x05000b9e, + 0x497a6009, 0x4a026403, 0x00000085, 0x64266203, + 0x640a6407, 0x59300804, 0x82040d00, 0x00000100, + 0x0505fc95, 0x82040d40, 0x80004040, 0x48066004, + 0x4203e000, 0xb0800000, 0x6023f800, 0x05edfa0f, + 0x42000800, 0x80004040, 0x0005f6e2, 0x05fdfef3, + 0x05020003, 0x05edfce5, 0x0502000d, 0x05e9fdd4, + 0x05000006, 0x05edf92c, 0x05000009, 0x59300004, + 0x4803c857, 0x05fdf7b3, 0x59300c03, 0x4807c857, + 0xb0040580, 0x05000007, 0x05fdf7ae, 0x59300203, + 0x4803c857, 0x90000c91, 0x05aa1e4b, 0x0c01f78b, + 0x05edf9f6, 0x812e59c0, 0x05000015, 0x0505fc88, + 0x592c0c0c, 0x4c040000, 0x592c0a0c, 0x05d9f93c, + 0x5c000800, 0x8c040510, 0x05000003, 0x4a025c0c, + 0x00000100, 0x0505f92a, 0x0001fba8, 0x59300203, + 0x9000058d, 0x05000006, 0x05edf9e4, 0x4d340000, + 0x5932680a, 0x05d5fcab, 0x5c026800, 0x05f5f902, + 0x0501f031, 0x812e59c0, 0x05a80e2f, 0x0501ff08, + 0x05020003, 0x05b1f8fe, 0x05fdf78a, 0x05edf9d7, + 0x592c020c, 0x8400050c, 0x48025a0c, 0x592c040a, + 0x800000c2, 0x800008c4, 0x80040c00, 0x48066006, + 0x42000000, 0x10000000, 0x41300800, 0x05adfdd7, + 0x05000013, 0x592c020c, 0x8c00051c, 0x05020005, + 0x8400055c, 0x48025a0c, 0x640a6006, 0x0501f016, + 0x59c80001, 0x80000540, 0x05020006, 0x42000000, + 0x40000000, 0x41300800, 0x05adfdc8, 0x0501f004, + 0x4d300000, 0x05b5f82c, 0x5c026000, 0x59300008, + 0x8c000536, 0x05020004, 0x59300203, 0x90000584, + 0x05020005, 0x4d380000, 0x61227000, 0x0009f839, + 0x5c027000, 0x1c01f000, 0x4d340000, 0x4c5c0000, + 0x59300203, 0x90000591, 0x05020014, 0x5932680a, + 0x4130b800, 0x0005fff6, 0x0500000f, 0x64066203, + 0x647a6403, 0x585c041b, 0x4802641b, 0x585c021b, + 0x4802621b, 0x4936600a, 0x585c001d, 0x4802601d, + 0x0501fdff, 0x64066407, 0x42000800, 0x80000040, + 0x0005fee2, 0x405e6000, 0x0009f810, 0x5c00b800, + 0x5c026800, 0x1c01f000, 0x42000000, 0x00112403, + 0x0511ff23, 0x0511fd86, 0x59300203, 0x90000c91, + 0x05aa1ddd, 0x4803c857, 0x0c01f001, 0x0010b04c, + 0x0010af39, 0x0010b04d, 0x0010b04c, 0x0010b04d, + 0x0010b04d, 0x0010af35, 0x0010b04c, 0x0010af32, + 0x0010b04c, 0x0010b04c, 0x0010b04c, 0x0010b04c, + 0x0010b04c, 0x0010b04d, 0x0010b04c, 0x0010b04c, + 0x05a9fdc9, 0x83340580, 0x001141b4, 0x05f40096, + 0x4d2c0000, 0x59340400, 0x82000500, 0x000000ff, + 0x90000c8c, 0x05aa1dc0, 0x4c000000, 0x0505fdf9, + 0x5c000000, 0x0502000a, 0x59300009, 0x800001c0, + 0x05020004, 0x05f5f888, 0x0505fdf9, 0x0501f010, + 0x05f5ff9d, 0x05f5f884, 0x0501f00d, 0x59303403, + 0xb0180d91, 0x0500000c, 0x90180d84, 0x05020003, + 0x60040000, 0x0501f004, 0x90180d80, 0x05020002, + 0x60040000, 0x4803c857, 0x0c01f828, 0x5c025800, + 0x1c01f000, 0x42000000, 0x001123ff, 0x0511fee4, + 0x05b9fe3f, 0x600c0800, 0x05bdf867, 0x05020003, + 0x0509f8e4, 0x0501f017, 0x59340412, 0x82000500, 0x000000ff, 0x05000016, 0x80000040, 0x48026c12, - 0x5932481d, 0x59300c29, 0x4c040000, 0x497a6205, - 0x4d300000, 0x05f5f87e, 0x5c000000, 0x5c000800, - 0x0500000a, 0x49780009, 0x641c0407, 0x4a000006, - 0x00000398, 0x4926601d, 0x48066429, 0x4936600a, - 0x64066407, 0x0501f024, 0x40026000, 0x59300403, - 0x90000d82, 0x05020013, 0x59340403, 0x82000580, - 0x000007fe, 0x0502000c, 0x59a80249, 0x84000540, - 0x48035249, 0x05d9fd11, 0x05fc07ca, 0x4a035045, - 0x0000ffff, 0x0505ff00, 0x05d1fe66, 0x05f5ff20, - 0x0501f00f, 0x600c0002, 0x05f5fa82, 0x05f40029, - 0x05f5ff1b, 0x4d3c0000, 0x417a7800, 0x05b9ff81, - 0x5c027800, 0x42000000, 0x0010e454, 0x0511fc2d, - 0x59300429, 0x900005a1, 0x050406d0, 0x05b9ffc0, - 0x05f5f01c, 0x600c0800, 0x05d5f937, 0x64066203, - 0x640a6403, 0x05e9f4b8, 0x0501f90f, 0x05fe079a, - 0x05b9ffb7, 0x4d3c0000, 0x417a7800, 0x05b9ff6d, - 0x5c027800, 0x42000000, 0x0010e454, 0x0511fc19, - 0x60603000, 0x41782800, 0x60002000, 0x4d400000, - 0x4d440000, 0x59368c03, 0x60a68000, 0x0505fa48, - 0x5c028800, 0x5c028000, 0x05f5f002, 0x05d5fe81, - 0x05fdf7d8, 0x42000000, 0x0010e45e, 0x0511fc09, - 0x60140002, 0x05f5fa53, 0x05fc07d2, 0x05f5fa70, - 0x05fe07d0, 0x1c01f000, 0x59300c03, 0x0501fd3b, - 0x000607dc, 0x916c0583, 0x05000003, 0x640a6006, - 0x1c01f000, 0x59300403, 0x48026418, 0x64066229, - 0x4a026403, 0x00000085, 0x64266203, 0x640a6407, - 0x42000800, 0x80000040, 0x0005f6ab, 0x0511fd40, - 0x0500000b, 0x4d400000, 0x4d200000, 0x05bdfa28, - 0x60068000, 0x60001802, 0x60042800, 0x60040000, - 0x05d9fa5c, 0x5c024000, 0x5c028000, 0x05f5fecc, - 0x4d3c0000, 0x417a7800, 0x05b9ff32, 0x5c027800, - 0x42000000, 0x0010e454, 0x0511fbde, 0x497a6009, - 0x641e6407, 0x4a026006, 0x00000398, 0x497a6205, - 0x1c01f000, 0x42000000, 0x0010e465, 0x0511fbd5, - 0x05fdf6ad, 0x59300403, 0x900005b6, 0x05020005, - 0x64066203, 0x42000800, 0x80000040, 0x0005f6ab, - 0x42000000, 0x0010e460, 0x0511fbca, 0x0511fa97, - 0x0502000a, 0x59300009, 0x800001c0, 0x05020004, - 0x05f1ffb8, 0x0505fc8d, 0x0501f003, 0x05f5fea8, - 0x05f1ffb4, 0x1c01f000, 0x0511fa36, 0x05f1f7b1, - 0x42000000, 0x0010e462, 0x0511fbba, 0x1c01f000, - 0x42000000, 0x0010e461, 0x0511fbb6, 0x59300203, - 0x90000c91, 0x05ae19b1, 0x4803c857, 0x0c01f001, - 0x0010ac3d, 0x0010a9bf, 0x0010ac3d, 0x0010ac3d, - 0x0010ac3d, 0x0010ac3d, 0x0010ac3d, 0x0010ac3d, - 0x0010ac3d, 0x0010a9bf, 0x0010ac3e, 0x0010a9bf, - 0x0010ac48, 0x0010ac3d, 0x0010ac3e, 0x0010ac3d, - 0x0010ac3d, 0x05adf99d, 0x59300403, 0x82000580, - 0x0000008b, 0x05000007, 0x4a026403, 0x0000008b, - 0x642e6203, 0x42000800, 0x80004040, 0x0005f6ab, - 0x59300a29, 0x0501f880, 0x0500000b, 0x4d2c0000, - 0x59325809, 0x641a5a0a, 0x497a5c0d, 0x0001fb82, - 0x59300a29, 0x90040d83, 0x05d40d75, 0x5c025800, - 0x497a6009, 0x4d3c0000, 0x417a7800, 0x05b9fed5, - 0x5c027800, 0x60443000, 0x0511f929, 0x42000000, - 0x0010e454, 0x0511fb7f, 0x4c5c0000, 0x4130b800, - 0x05f1ffa3, 0x05000009, 0x4936600a, 0x4926601d, - 0x0501fc2b, 0x4d300000, 0x405e6000, 0x05f1ff69, - 0x5c026000, 0x0501f002, 0x405e6000, 0x5c00b800, - 0x497a6009, 0x64066407, 0x64066403, 0x59240400, - 0x8c00050a, 0x0502000b, 0x64126407, 0x641e6203, - 0x6406642c, 0x60103000, 0x4d400000, 0x60a68000, - 0x41782800, 0x050dfb26, 0x5c028000, 0x1c01f000, - 0x602c0800, 0x05d5f870, 0x64066203, 0x05e9f3f2, - 0x42000000, 0x0010e467, 0x0511fb5a, 0x59300203, - 0x90000c91, 0x05ae1955, 0x4803c857, 0x0c01f001, - 0x0010aca9, 0x0010ac99, 0x0010ac9b, 0x0010acaa, - 0x0010ac9a, 0x0010ac99, 0x0010ac99, 0x0010ac99, - 0x0010ac99, 0x0010ac99, 0x0010ac99, 0x0010ac99, - 0x0010ac99, 0x0010ac99, 0x0010ac99, 0x0010ac99, - 0x0010ac99, 0x05adf941, 0x05b1fbaf, 0x4d2c0000, - 0x59325809, 0x641a5a0a, 0x0001fb82, 0x5c025800, - 0x497a6009, 0x642a6229, 0x4a026403, 0x00000085, - 0x64266203, 0x640a6407, 0x42000800, 0x80004040, - 0x0005f6ab, 0x1c01f000, 0x05edf869, 0x4df00000, - 0x05fdfc84, 0x05020003, 0x05edfb32, 0x05020008, - 0x05e9fc26, 0x05020004, 0x5c03e000, 0x05edf851, - 0x05fdf7e7, 0x05e9ff77, 0x05ae0924, 0x5c03e000, - 0x05edf84c, 0x59300203, 0x90000d83, 0x05ac091f, - 0x90000c91, 0x05ae191d, 0x0c01f7ca, 0x59a8003b, - 0x59a8089a, 0x80040400, 0x80080480, 0x05021003, - 0x90000541, 0x1c01f000, 0x480bc857, 0x80000580, - 0x1c01f000, 0x4c040000, 0x59300809, 0x59a8000c, - 0x80040480, 0x05001007, 0x59a8000a, 0x80040480, - 0x05021004, 0x800409c0, 0x5c000800, 0x1c01f000, - 0x800409c0, 0x05ae0905, 0x4803c856, 0x05fdf7fb, - 0x4803c856, 0x4d300000, 0x0005ffbf, 0x05000007, - 0x0501f825, 0x4d380000, 0x612e7000, 0x0009f800, - 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, - 0x4803c856, 0x4d300000, 0x05f1ff1d, 0x05000016, - 0x0501f819, 0x4d300000, 0x05edf829, 0x4df00000, - 0x05e9fd59, 0x4d3c0000, 0x60027840, 0x05e9fea6, - 0x05e9fc2c, 0x050df980, 0x5c027800, 0x5c03e000, - 0x05ec0810, 0x5c026000, 0x8d3c053e, 0x05020008, - 0x4d380000, 0x61327000, 0x0009f800, 0x5c027000, - 0x90000541, 0x5c026000, 0x1c01f000, 0x0005ffdc, - 0x05fdf7fc, 0x592c040b, 0x497a580c, 0x497a580d, - 0x494a6019, 0x494e601a, 0x4936600a, 0x492e6009, - 0x640e6407, 0x59340802, 0x4806600b, 0x800000c2, - 0x800008c4, 0x80040400, 0x48026006, 0x05d5fd62, - 0x4926601d, 0x0501f37e, 0x493bc857, 0x4d300000, - 0x0005ffbf, 0x0500000a, 0x05fdffeb, 0x4d400000, - 0x60168000, 0x0501f80a, 0x5c028000, 0x8d3c053e, - 0x05020005, 0x0009f800, 0x90000541, 0x5c026000, - 0x1c01f000, 0x0005ffdc, 0x05fdf7fc, 0x4803c856, - 0x05e9ffef, 0x4df00000, 0x4d3c0000, 0x4d440000, - 0x59368c03, 0x60067840, 0x05e9fd94, 0x05e9fcd1, - 0x05e9fbf0, 0x050df944, 0x5c028800, 0x5c027800, - 0x5c03e000, 0x05e807d3, 0x1c01f000, 0x4803c856, - 0x4d300000, 0x05f1fece, 0x0500000e, 0x481a601e, - 0x48ee602d, 0x4936600a, 0x05d5fd37, 0x4926601d, - 0x0501fb53, 0x64066407, 0x492e6009, 0x4d380000, - 0x607e7000, 0x0009f800, 0x5c027000, 0x90000541, - 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000, - 0x05f1febb, 0x0500000d, 0x48ee602d, 0x4936600a, - 0x05d5fd25, 0x4926601d, 0x0501fb41, 0x64066407, - 0x492e6009, 0x4d380000, 0x61567000, 0x0009f800, + 0x4d300000, 0x05f5f897, 0x5c000000, 0x0500000f, + 0x641c0407, 0x4a000006, 0x00000398, 0x49238830, + 0x4a038832, 0xffffffff, 0x4926601d, 0x497a6009, + 0x4936600a, 0x64066407, 0x64066203, 0x65466403, + 0x5c025800, 0x05e9f499, 0x40026000, 0x5c025800, + 0x60042800, 0x0505f655, 0x0010b0a2, 0x0010b143, + 0x0010b0a3, 0x0010b0dc, 0x0010b0a3, 0x0010b158, + 0x0010b0a3, 0x0010b0aa, 0x0010b0a2, 0x0010b158, + 0x0010b0a2, 0x0010b0b5, 0x05a9fd73, 0x59300403, + 0x90000d96, 0x05000035, 0x90000d84, 0x05000033, + 0x90000d82, 0x05000031, 0x0501fab9, 0x0500002f, + 0x59300403, 0x90000da2, 0x050000ac, 0x90000db9, + 0x050000b3, 0x90000db5, 0x050000b1, 0x90000d9e, + 0x05000027, 0x0501f99d, 0x05000005, 0x0505f83c, + 0x05020003, 0x05d5fc60, 0x0501f020, 0x59300403, + 0x90000d81, 0x0502000f, 0x5930081d, 0x58040200, + 0x8c000500, 0x05040624, 0x5930080a, 0x58040403, + 0x82000580, 0x000007fe, 0x05020004, 0x60042800, + 0x0505fe22, 0x0009f010, 0x05d5fc24, 0x0500000f, + 0x59340403, 0x82000c80, 0x000007f0, 0x05001004, + 0x82000c80, 0x00000800, 0x05001009, 0x4d3c0000, + 0x417a7800, 0x05b9faee, 0x5c027800, 0x42000000, + 0x001123f8, 0x0511fe7e, 0x05f5ff23, 0x05f5f00a, + 0x0501f976, 0x05000003, 0x0505f815, 0x05000095, + 0x59300c03, 0x90040596, 0x05000058, 0x90040582, + 0x05020034, 0x59a8024c, 0x8c000502, 0x0502000f, + 0x05d9fab0, 0x0502000d, 0x59a80006, 0x8c000506, + 0x0502000a, 0x05d9fabd, 0x05020004, 0x60040000, + 0x05d9fa7b, 0x0501f083, 0x64075045, 0x6006d800, + 0x05d9fa21, 0x0501f07f, 0x59340200, 0x8c000508, + 0x05000007, 0x84000508, 0x48026a00, 0x59300416, + 0x84000510, 0x48026416, 0x0501f014, 0x59340412, + 0x82000500, 0x000000ff, 0x05000016, 0x80000040, + 0x48026c12, 0x5932481d, 0x59300c29, 0x4c040000, + 0x497a6205, 0x4d300000, 0x05f5f80e, 0x5c000000, + 0x5c000800, 0x0500000a, 0x49780009, 0x641c0407, + 0x4a000006, 0x00000398, 0x4926601d, 0x48066429, + 0x4936600a, 0x64066407, 0x0501f024, 0x40026000, + 0x59300403, 0x90000d82, 0x05020013, 0x59340403, + 0x82000580, 0x000007fe, 0x0502000c, 0x59a8024c, + 0x84000540, 0x4803524c, 0x05d9fa76, 0x05fc07ca, + 0x4a035048, 0x0000ffff, 0x0509f831, 0x05d1fad8, + 0x05f5fed5, 0x0501f00f, 0x600c0002, 0x05f5fa33, + 0x05f007b9, 0x05f5fed0, 0x4d3c0000, 0x417a7800, + 0x05b9fa93, 0x5c027800, 0x42000000, 0x001123f8, + 0x0511fe23, 0x59300429, 0x900005a1, 0x05080001, + 0x05b9fad2, 0x05f1f7ac, 0x600c0800, 0x05d1fdc5, + 0x64066203, 0x640a6403, 0x59300418, 0xb0000591, + 0x05020002, 0x65466403, 0x05e9f3e8, 0x0501f90f, + 0x05fe0796, 0x05b9fac5, 0x4d3c0000, 0x417a7800, + 0x05b9fa7b, 0x5c027800, 0x42000000, 0x001123f8, + 0x0511fe0b, 0x60603000, 0x41782800, 0x60002000, + 0x4d400000, 0x4d440000, 0x59368c03, 0x60a68000, + 0x0505fa66, 0x5c028800, 0x5c028000, 0x05f1f78e, + 0x05d5fbc1, 0x05fdf7d4, 0x42000000, 0x00112402, + 0x0511fdfb, 0x60140002, 0x05f5fa00, 0x05fc07ce, + 0x05f5fa1d, 0x05fe07cc, 0x1c01f000, 0x59300c03, + 0x0501fd4a, 0x000a0010, 0x916c0583, 0x05000003, + 0x640a6006, 0x1c01f000, 0x59300403, 0x48026418, + 0x64066229, 0x4a026403, 0x00000085, 0x64266203, + 0x640a6407, 0x42000800, 0x80000040, 0x0005f6e2, + 0x0511ff32, 0x0500000b, 0x4d400000, 0x4d200000, + 0x05b9fd3b, 0x60068000, 0x60001802, 0x60042800, + 0x60040000, 0x05d5ffb7, 0x5c024000, 0x5c028000, + 0x05f5fe7d, 0x4d3c0000, 0x417a7800, 0x05b9fa40, + 0x5c027800, 0x42000000, 0x001123f8, 0x0511fdd0, + 0x497a6009, 0x641e6407, 0x4a026006, 0x00000398, + 0x497a6205, 0x1c01f000, 0x42000000, 0x00112409, + 0x0511fdc7, 0x05fdf6a1, 0x59300403, 0x900005b6, + 0x05020005, 0x64066203, 0x42000800, 0x80000040, + 0x0005f6e2, 0x42000000, 0x00112404, 0x0511fdbc, + 0x0511fc75, 0x0502000a, 0x59300009, 0x800001c0, + 0x05020004, 0x05f1ff44, 0x0505fcb5, 0x0501f003, + 0x05f5fe59, 0x05f1ff40, 0x1c01f000, 0x0511fc14, + 0x05f1f73d, 0x42000000, 0x00112406, 0x0511fdac, + 0x1c01f000, 0x42000000, 0x00112405, 0x0511fda8, + 0x59300203, 0x90000c91, 0x05aa1c63, 0x4803c857, + 0x0c01f001, 0x0010b1c6, 0x0010af39, 0x0010b1c6, + 0x0010b1c6, 0x0010b1c6, 0x0010b1c6, 0x0010b1c6, + 0x0010b1c6, 0x0010b1c6, 0x0010af39, 0x0010b1c7, + 0x0010af39, 0x0010b1d1, 0x0010b1c6, 0x0010b1c7, + 0x0010b1c6, 0x0010b1c6, 0x05a9fc4f, 0x59300403, + 0x82000580, 0x0000008b, 0x05000007, 0x4a026403, + 0x0000008b, 0x642e6203, 0x42000800, 0x80004040, + 0x0005f6e2, 0x59300a29, 0x0501f880, 0x0500000b, + 0x4d2c0000, 0x59325809, 0x641a5a0a, 0x497a5c0d, + 0x0001fba8, 0x59300a29, 0x90040d83, 0x05d40ab1, + 0x5c025800, 0x497a6009, 0x4d3c0000, 0x417a7800, + 0x05b9f9e3, 0x5c027800, 0x60443000, 0x0511fafd, + 0x42000000, 0x001123f8, 0x0511fd71, 0x4c5c0000, + 0x4130b800, 0x05f1ff2f, 0x05000009, 0x4936600a, + 0x4926601d, 0x0501fc3a, 0x4d300000, 0x405e6000, + 0x05f1fef5, 0x5c026000, 0x0501f002, 0x405e6000, + 0x5c00b800, 0x497a6009, 0x64066407, 0x64066403, + 0x59240400, 0x8c00050a, 0x0502000b, 0x64126407, + 0x641e6203, 0x6406642c, 0x60103000, 0x4d400000, + 0x60a68000, 0x41782800, 0x050dfce4, 0x5c028000, + 0x1c01f000, 0x602c0800, 0x05d1fcfa, 0x64066203, + 0x05e9f322, 0x42000000, 0x0011240b, 0x0511fd4c, + 0x59300203, 0x90000c91, 0x05aa1c07, 0x4803c857, + 0x0c01f001, 0x0010b232, 0x0010b222, 0x0010b224, + 0x0010b233, 0x0010b223, 0x0010b222, 0x0010b222, + 0x0010b222, 0x0010b222, 0x0010b222, 0x0010b222, + 0x0010b222, 0x0010b222, 0x0010b222, 0x0010b222, + 0x0010b222, 0x0010b222, 0x05a9fbf3, 0x05adfec4, + 0x4d2c0000, 0x59325809, 0x641a5a0a, 0x0001fba8, + 0x5c025800, 0x497a6009, 0x642a6229, 0x4a026403, + 0x00000085, 0x64266203, 0x640a6407, 0x42000800, + 0x80004040, 0x0005f6e2, 0x1c01f000, 0x05e9ff9e, + 0x4df00000, 0x05fdfc75, 0x05020003, 0x05edfa67, + 0x05020008, 0x05e9fb56, 0x05020004, 0x5c03e000, + 0x05e9ff86, 0x05fdf7e7, 0x05e9feab, 0x05aa0bd6, + 0x5c03e000, 0x05e9ff81, 0x59300203, 0x90000d83, + 0x05a80bd1, 0x90000c91, 0x05aa1bcf, 0x0c01f7ca, + 0x59a8003d, 0x59a8089d, 0x80040400, 0x80080480, + 0x05021003, 0x90000541, 0x1c01f000, 0x480bc857, + 0x80000580, 0x1c01f000, 0x4c040000, 0x59300809, + 0x59a8000c, 0x80040480, 0x05021006, 0x4d2c0000, + 0x40065800, 0x0501f80d, 0x5c025800, 0x05000007, + 0x59a8000a, 0x80040480, 0x05021004, 0x800409c0, + 0x5c000800, 0x1c01f000, 0x800409c0, 0x05aa0bb2, + 0x4803c856, 0x05fdf7fb, 0x59a8000d, 0x812c0480, + 0x05001004, 0x832c0480, 0x00111b80, 0x05001004, + 0x492fc857, 0x80000580, 0x1c01f000, 0x812e59c0, + 0x1c01f000, 0x4803c856, 0x4d300000, 0x0005fff6, + 0x05000007, 0x0501f825, 0x4d380000, 0x612e7000, + 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, + 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f1fe99, + 0x05000016, 0x0501f819, 0x4d300000, 0x05e9ff4e, + 0x4df00000, 0x05e9fc79, 0x4d3c0000, 0x60027840, + 0x05e9fdcc, 0x05e9fb4c, 0x050dfafe, 0x5c027800, + 0x5c03e000, 0x05e80f35, 0x5c026000, 0x8d3c053e, + 0x05020008, 0x4d380000, 0x61327000, 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, - 0x4803c856, 0x4d300000, 0x05f1fea9, 0x0500000e, - 0x481a601e, 0x48ee602d, 0x4936600a, 0x05d5fd12, - 0x4926601d, 0x0501fb2e, 0x64066407, 0x492e6009, - 0x4d380000, 0x60f67000, 0x0009f800, 0x5c027000, + 0x0009f810, 0x05fdf7fc, 0x592c040b, 0x497a580c, + 0x497a580d, 0x494a6019, 0x494e601a, 0x4936600a, + 0x492e6009, 0x640e6407, 0x59340802, 0x4806600b, + 0x800000c2, 0x800008c4, 0x80040400, 0x48026006, + 0x05d5fa92, 0x4926601d, 0x0501f37d, 0x493bc857, + 0x4d300000, 0x0005fff6, 0x0500000a, 0x05fdffeb, + 0x4d400000, 0x60168000, 0x0501f80a, 0x5c028000, + 0x8d3c053e, 0x05020005, 0x0009f839, 0x90000541, + 0x5c026000, 0x1c01f000, 0x0009f810, 0x05fdf7fc, + 0x4803c856, 0x05e9ff14, 0x4df00000, 0x4d3c0000, + 0x4d440000, 0x59368c03, 0x60067840, 0x05e9fcb4, + 0x05e9fbf1, 0x05e9fb10, 0x050dfac2, 0x5c028800, + 0x5c027800, 0x5c03e000, 0x05e806f8, 0x1c01f000, + 0x4803c856, 0x4d300000, 0x05f1fe4a, 0x0500000e, + 0x481a601e, 0x48ee602d, 0x4936600a, 0x05d5fa67, + 0x4926601d, 0x0501fb52, 0x64066407, 0x492e6009, + 0x4d380000, 0x607e7000, 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, 0x4803c856, - 0x4d300000, 0x05f1fe96, 0x05000012, 0x4926601d, - 0x4936600a, 0x0501fb1e, 0x492fc857, 0x4933c857, - 0x592c0408, 0x8c00051e, 0x05000003, 0x48efc857, - 0x48ee602d, 0x64066407, 0x492e6009, 0x4d380000, - 0x60027000, 0x0009f800, 0x5c027000, 0x90000541, - 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000, - 0x05f1fe7f, 0x0500000e, 0x48ee602d, 0x481a601e, - 0x4936600a, 0x05d5fce8, 0x4926601d, 0x0501fb04, - 0x64066407, 0x492e6009, 0x4d380000, 0x61127000, - 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000, - 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f1fe6c, + 0x4d300000, 0x05f1fe37, 0x0500000d, 0x48ee602d, + 0x4936600a, 0x05d5fa55, 0x4926601d, 0x0501fb40, + 0x64066407, 0x492e6009, 0x4d380000, 0x61567000, + 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, + 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f1fe25, 0x0500000e, 0x481a601e, 0x48ee602d, 0x4936600a, - 0x05d5fcd5, 0x4926601d, 0x0501faf1, 0x64066407, - 0x492e6009, 0x4d380000, 0x61267000, 0x0009f800, + 0x05d5fa42, 0x4926601d, 0x0501fb2d, 0x64066407, + 0x492e6009, 0x4d380000, 0x60f67000, 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, - 0x5930000a, 0x80001540, 0x05ac0830, 0x8d0c0512, - 0x05020007, 0x5808040b, 0x4803c856, 0x80000040, - 0x05001003, 0x4800140b, 0x05020008, 0x58080010, - 0x80000540, 0x05000005, 0x58080203, 0x80000540, - 0x05020002, 0x64041203, 0x1c01f000, 0x4803c856, - 0x59300403, 0x90000d82, 0x0500000b, 0x90000d83, - 0x05000009, 0x90000d84, 0x05000007, 0x599c0819, - 0x8c04050e, 0x05000003, 0x90000d80, 0x05000002, - 0x90000541, 0x1c01f000, 0x4803c856, 0x4c000000, - 0x4d2c0000, 0x59300407, 0x90000584, 0x05000019, - 0x59300009, 0x80025d40, 0x800001c0, 0x05000015, - 0x0501fd79, 0x05000011, 0x0501fd81, 0x0500000f, - 0x59300407, 0x90004590, 0x0500000c, 0x90004591, - 0x0500000a, 0x90004583, 0x0500000a, 0x90004582, - 0x05000008, 0x9000458a, 0x05000006, 0x592c0408, - 0x8c00051e, 0x05000003, 0x80000580, 0x0501f002, - 0x90000541, 0x5c025800, 0x5c000000, 0x1c01f000, - 0x4803c856, 0x4d300000, 0x05f1fe15, 0x05000010, - 0x4926601d, 0x4936600a, 0x0501fa9d, 0x48ee602d, - 0x64066407, 0x492e6009, 0x4d3c0000, 0x417a7800, - 0x05b9fd34, 0x5c027800, 0x4d380000, 0x60a27000, - 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000, - 0x1c01f000, 0x4803c856, 0x91380595, 0x05020009, - 0x59a800b6, 0xb00005b4, 0x05020006, 0x41780800, - 0x05d1ffce, 0x64066203, 0x64a66403, 0x05e9f266, - 0x05f5fcb7, 0x0005f7dc, 0x4803c856, 0x91380596, - 0x05020004, 0x60100800, 0x05d1fedb, 0x05f1f7cf, - 0x91380595, 0x0502000d, 0x59a800b6, 0x90000594, - 0x0502000a, 0x05d5f832, 0x05f9f963, 0x05020007, - 0x59340404, 0x80000540, 0x05000004, 0x60180800, - 0x05d1fecd, 0x05f1f7c1, 0x05f5fca1, 0x0005f7dc, - 0x4803c856, 0x592c020a, 0x90000585, 0x05000002, - 0x1c01f000, 0x4803c856, 0x592c020c, 0x8400054a, - 0x48025a0c, 0x1c01f000, 0x59300809, 0x800409c0, - 0x05000008, 0x58040208, 0x82000580, 0x00000152, - 0x05020004, 0x59a8085c, 0x48066006, 0x1c01f000, - 0x599c0416, 0x800001c0, 0x05000007, 0x90000c84, - 0x05001005, 0x800000c2, 0x800008c4, 0x80040c00, - 0x05fdf7f6, 0x59300403, 0x90000582, 0x05fe07f2, - 0x5930080a, 0x58040403, 0x82000580, 0x000007fe, - 0x05fe07ed, 0x60a00800, 0x05fdf7ec, 0x4803c856, - 0x59300c03, 0xb13805a1, 0x05000019, 0xb13805a0, - 0x05000017, 0xb13805a2, 0x0502001e, 0x497a6205, - 0x90040582, 0x05000006, 0x9004059e, 0x0500000e, - 0x90040584, 0x05020017, 0x0501f003, 0x600c0800, - 0x05d1fe91, 0x59340200, 0x84000508, 0x48026a00, - 0x59300416, 0x84000510, 0x48026416, 0x64066203, - 0x05e9f20d, 0x64166203, 0x0501f00a, 0x59340200, - 0x8c00050e, 0x05020002, 0x497a6205, 0x640a6203, - 0x90040486, 0x05fc17c1, 0x59a8005c, 0x48026006, + 0x4803c856, 0x4d300000, 0x05f1fe12, 0x05000012, + 0x4926601d, 0x4936600a, 0x0501fb1d, 0x492fc857, + 0x4933c857, 0x592c0408, 0x8c00051e, 0x05000003, + 0x48efc857, 0x48ee602d, 0x64066407, 0x492e6009, + 0x4d380000, 0x60027000, 0x0009f839, 0x5c027000, + 0x90000541, 0x5c026000, 0x1c01f000, 0x4803c856, + 0x4d300000, 0x05f1fdfb, 0x0500000e, 0x48ee602d, + 0x481a601e, 0x4936600a, 0x05d5fa18, 0x4926601d, + 0x0501fb03, 0x64066407, 0x492e6009, 0x4d380000, + 0x61127000, 0x0009f839, 0x5c027000, 0x90000541, + 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000, + 0x05f1fde8, 0x0500000e, 0x481a601e, 0x48ee602d, + 0x4936600a, 0x05d5fa05, 0x4926601d, 0x0501faf0, + 0x64066407, 0x492e6009, 0x4d380000, 0x61267000, + 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, + 0x1c01f000, 0x5930000a, 0x80001540, 0x05a80ad2, + 0x8d0c0512, 0x05020007, 0x5808040b, 0x4803c856, + 0x80000040, 0x05001003, 0x4800140b, 0x05020008, + 0x58080010, 0x80000540, 0x05000005, 0x58080203, + 0x80000540, 0x05020002, 0x64041203, 0x1c01f000, + 0x4803c856, 0x59300403, 0x90000d82, 0x0500000b, + 0x90000d83, 0x05000009, 0x90000d84, 0x05000007, + 0x599c0819, 0x8c04050e, 0x05000003, 0x90000d80, + 0x05000002, 0x90000541, 0x1c01f000, 0x4803c856, + 0x4c000000, 0x4d2c0000, 0x59300407, 0x90000584, + 0x05000019, 0x59300009, 0x80025d40, 0x800001c0, + 0x05000015, 0x0501fd86, 0x05000011, 0x0501fd8e, + 0x0500000f, 0x59300407, 0x90004590, 0x0500000c, + 0x90004591, 0x0500000a, 0x90004583, 0x0500000a, + 0x90004582, 0x05000008, 0x9000458a, 0x05000006, + 0x592c0408, 0x8c00051e, 0x05000003, 0x80000580, + 0x0501f002, 0x90000541, 0x5c025800, 0x5c000000, + 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f1fd91, + 0x05000010, 0x4926601d, 0x4936600a, 0x0501fa9c, + 0x48ee602d, 0x64066407, 0x492e6009, 0x4d3c0000, + 0x417a7800, 0x05b9f832, 0x5c027800, 0x4d380000, + 0x60a27000, 0x0009f839, 0x5c027000, 0x90000541, + 0x5c026000, 0x1c01f000, 0x4803c856, 0x91380595, + 0x05020009, 0x59a800bb, 0xb00005b4, 0x05020006, + 0x41780800, 0x05d1fc9b, 0x64066203, 0x64a66403, + 0x05e9f186, 0x05f5fc58, 0x0009f010, 0x4803c856, + 0x91380596, 0x05020004, 0x60100800, 0x05d1fb55, + 0x05f1f76c, 0x91380595, 0x0502000d, 0x59a800bb, + 0x90000594, 0x0502000a, 0x05d1fcff, 0x05f9f911, + 0x05020007, 0x59340404, 0x80000540, 0x05000004, + 0x60180800, 0x05d1fb47, 0x05f1f75e, 0x05f5fc42, + 0x0009f010, 0x4803c856, 0x592c020a, 0x90000585, + 0x05000002, 0x1c01f000, 0x4803c856, 0x592c020c, + 0x8400054a, 0x48025a0c, 0x1c01f000, 0x59300809, + 0x800409c0, 0x05000008, 0x58040208, 0x82000580, + 0x00000152, 0x05020004, 0x59a8085f, 0x48066006, + 0x1c01f000, 0x599c0416, 0x800001c0, 0x05000007, + 0x90000c84, 0x05001005, 0x800000c2, 0x800008c4, + 0x80040c00, 0x05fdf7f6, 0x59300403, 0x90000582, + 0x05fe07f2, 0x5930080a, 0x58040403, 0x82000580, + 0x000007fe, 0x05fe07ed, 0x60a00800, 0x05fdf7ec, + 0x4803c856, 0x59300c03, 0xb13805a1, 0x05000019, + 0xb13805a0, 0x05000017, 0xb13805a2, 0x0502001e, + 0x497a6205, 0x90040582, 0x05000006, 0x9004059e, + 0x0500000e, 0x90040584, 0x05020017, 0x0501f003, + 0x600c0800, 0x05d1fb0b, 0x59340200, 0x84000508, + 0x48026a00, 0x59300416, 0x84000510, 0x48026416, + 0x64066203, 0x05e9f12d, 0x64166203, 0x0501f00a, + 0x59340200, 0x8c00050e, 0x05020002, 0x497a6205, + 0x640a6203, 0x90040486, 0x05fc17c1, 0x59a8005f, + 0x48026006, 0x1c01f000, 0x4803c856, 0xb13805a1, + 0x05000003, 0xb13805a0, 0x0502000a, 0x59303403, + 0x82180580, 0x00000086, 0x05f004d3, 0x82180580, + 0x00000087, 0x05f004d0, 0x497a6205, 0x642a6203, 0x1c01f000, 0x4803c856, 0xb13805a1, 0x05000003, - 0xb13805a0, 0x0502000a, 0x59303403, 0x82180580, - 0x00000086, 0x05f00557, 0x82180580, 0x00000087, - 0x05f00554, 0x497a6205, 0x642a6203, 0x1c01f000, - 0x4803c856, 0xb13805a1, 0x05000003, 0xb13805a0, - 0x05020007, 0x59300403, 0xb0000c91, 0x05aa1f53, - 0xb0000480, 0x05a81f51, 0x0c01f002, 0x1c01f000, - 0x0010ae9e, 0x0010ae9d, 0x0010ae9d, 0x0010aeaa, - 0x0010ae9d, 0x0010ae9d, 0x0010ae9d, 0x0010ae9d, - 0x0010ae9d, 0x0010aeaa, 0x0010ae9d, 0x0010aeab, - 0x0010aeab, 0x0010aeab, 0x0010aeab, 0x0010ae9d, - 0x0010aeae, 0x05a9ff3d, 0x59340200, 0x8c00050e, - 0x05020002, 0x497a6205, 0x59300809, 0x5804020e, - 0x8c000502, 0x05000003, 0x64126203, 0x1c01f000, - 0x640a6203, 0x1c01f000, 0x1c01f000, 0x497a6205, - 0x64366203, 0x1c01f000, 0x0005f7dc, 0x4803c856, - 0xb13805a1, 0x05000006, 0xb13805a0, 0x05020009, - 0x59cc0002, 0x8c000526, 0x05000007, 0x59300403, - 0xb0000d83, 0x05000005, 0xb0000d89, 0x05000003, - 0x05f1fd78, 0x1c01f000, 0x59a8005e, 0x48026205, - 0x640a6203, 0x5930001c, 0x80000540, 0x05000003, - 0x497a601c, 0x0801f800, 0x1c01f000, 0x497a6205, - 0x497a6009, 0x64066203, 0x65426403, 0x42000800, - 0x80000043, 0x0005f6ab, 0x4933c857, 0x4d340000, - 0x5932680a, 0x59340200, 0x8c00050e, 0x05000005, - 0x59300407, 0x90000c92, 0x05021004, 0x0c01f805, - 0x5c026800, 0x1c01f000, 0x05fdfae0, 0x05fdf7fd, - 0x0010a9ba, 0x0010aeee, 0x0010aef2, 0x0010aef5, - 0x0010c96b, 0x0010c983, 0x0010c987, 0x0010a9ba, - 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, - 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, - 0x0010a9ba, 0x0010a9ba, 0x4803c856, 0x40000000, - 0x40000000, 0x1c01f000, 0x40000000, 0x40000000, - 0x1c01f000, 0x59300008, 0x8c000536, 0x0502000b, - 0x5930001e, 0x4803c857, 0x59300416, 0x4933c857, - 0x4803c857, 0x8c000502, 0x05000005, 0x4803c857, - 0x84000540, 0x48026416, 0x1c01f000, 0x42000000, - 0xd0000000, 0x41300800, 0x05adfe2c, 0x0501f80e, - 0x0502000c, 0x59300c16, 0x59300403, 0xb0000580, - 0x05000003, 0x84040d40, 0x0501f004, 0x59a8005c, - 0x9000040a, 0x48026205, 0x84040d42, 0x48066416, - 0x1c01f000, 0x4933c857, 0x4d340000, 0x5932680a, - 0x59340a00, 0x8c04050e, 0x05a80ec0, 0x5930001e, - 0x80000540, 0x05020031, 0x59300403, 0x4803c857, - 0xb0000580, 0x05000003, 0x8d0c050e, 0x05020029, - 0x4d1c0000, 0x41323800, 0x05f1fcdd, 0x05000023, - 0x4932381e, 0x591c0416, 0x84000542, 0x48023c16, - 0x4936600a, 0x05d5fb44, 0x4926601d, 0x0501f960, - 0x591c0407, 0x90000583, 0x05000006, 0x591c0202, - 0x4802641b, 0x591c0402, 0x4802621b, 0x0501f005, - 0x591c0202, 0x4802621b, 0x591c0402, 0x4802641b, - 0x591c0017, 0x48026017, 0x491e602a, 0x64066407, - 0x64d66403, 0x64066203, 0x42000800, 0x80000040, - 0x0005feab, 0x411e6000, 0x5c023800, 0x80000580, - 0x5c026800, 0x1c01f000, 0x411e6000, 0x5c023800, - 0x59a8005e, 0x48026205, 0x90000541, 0x05fdf7f9, - 0x4933c857, 0x4d2c0000, 0x4932381e, 0x4a026202, - 0x0000ffff, 0x591e5809, 0x591c0008, 0x8c00051e, - 0x05000005, 0x8400051e, 0x48023808, 0x497a580d, - 0x0501f016, 0x592c040c, 0x8c000518, 0x05000013, - 0x84000518, 0x48025c0c, 0x4d400000, 0x592e820a, - 0x64065a0a, 0x0501fbf8, 0x49425a0a, 0x5c028000, - 0x497a580d, 0x592c040c, 0x8c000512, 0x05000007, - 0x4d2c0000, 0x84000512, 0x48025c0c, 0x592e580d, - 0x05adfa2b, 0x5c025800, 0x59a8005e, 0x48026205, - 0x591c0216, 0x48026218, 0x90000d81, 0x05000006, - 0x640a3a03, 0x90000585, 0x05000007, 0x497a6017, - 0x0501f01c, 0x591c0008, 0x84000540, 0x48023808, - 0x64123a03, 0x591c0416, 0x4803c857, 0x8400051c, - 0x84000554, 0x48023c16, 0x592c0013, 0x40001000, - 0x591c0818, 0x80040480, 0x05fe17f1, 0x591c0018, - 0x82000500, 0xfffffffc, 0x48026017, 0x48023818, + 0xb13805a0, 0x05020007, 0x59300403, 0xb0000c91, + 0x05aa19f5, 0xb0000480, 0x05a819f3, 0x0c01f002, + 0x1c01f000, 0x0010b437, 0x0010b436, 0x0010b436, + 0x0010b443, 0x0010b436, 0x0010b436, 0x0010b436, + 0x0010b436, 0x0010b436, 0x0010b443, 0x0010b436, + 0x0010b444, 0x0010b444, 0x0010b444, 0x0010b444, + 0x0010b436, 0x0010b447, 0x05a9f9df, 0x59340200, + 0x8c00050e, 0x05020002, 0x497a6205, 0x59300809, + 0x5804020e, 0x8c000502, 0x05000003, 0x64126203, + 0x1c01f000, 0x640a6203, 0x1c01f000, 0x1c01f000, + 0x497a6205, 0x64366203, 0x1c01f000, 0x0009f010, + 0x4803c856, 0xb13805a1, 0x05000006, 0xb13805a0, + 0x05020009, 0x59cc0002, 0x8c000526, 0x05000007, + 0x59300403, 0xb0000d83, 0x05000005, 0xb0000d89, + 0x05000003, 0x05f1fd11, 0x1c01f000, 0x59a80061, + 0x48026205, 0x640a6203, 0x5930001c, 0x80000540, + 0x05000003, 0x497a601c, 0x0801f800, 0x1c01f000, + 0x497a6205, 0x497a6009, 0x4a026003, 0x00500001, + 0x42000800, 0x80000043, 0x0005f6e2, 0x4933c857, + 0x4d340000, 0x5932680a, 0x59340200, 0x8c00050e, + 0x05000005, 0x59300407, 0x90000c92, 0x05021004, + 0x0c01f805, 0x5c026800, 0x1c01f000, 0x05fdfac1, + 0x05fdf7fd, 0x0010af34, 0x0010b487, 0x0010b48b, + 0x0010b48e, 0x0010d0b5, 0x0010d0cd, 0x0010d0d1, + 0x0010af34, 0x0010af34, 0x0010af34, 0x0010af34, + 0x0010af34, 0x0010af34, 0x0010af34, 0x0010af34, + 0x0010af34, 0x0010af34, 0x0010af34, 0x4803c856, + 0x40000000, 0x40000000, 0x1c01f000, 0x40000000, + 0x40000000, 0x1c01f000, 0x59300008, 0x8c000536, + 0x0502000b, 0x5930001e, 0x4803c857, 0x59300416, + 0x4933c857, 0x4803c857, 0x8c000502, 0x05000005, + 0x4803c857, 0x84000540, 0x48026416, 0x1c01f000, + 0x42000000, 0xd0000000, 0x41300800, 0x05adf92f, + 0x0501f80e, 0x0502000c, 0x59300c16, 0x59300403, + 0xb0000580, 0x05000003, 0x84040d40, 0x0501f004, + 0x59a8005f, 0x9000040a, 0x48026205, 0x84040d42, + 0x48066416, 0x1c01f000, 0x4933c857, 0x4d340000, + 0x5932680a, 0x59340a00, 0x8c04050e, 0x05a80962, + 0x5930001e, 0x80000540, 0x05020031, 0x59300403, + 0x4803c857, 0xb0000580, 0x05000003, 0x8d0c050e, + 0x05020029, 0x4d1c0000, 0x41323800, 0x05f1fc59, + 0x05000023, 0x4932381e, 0x591c0416, 0x84000542, + 0x48023c16, 0x4936600a, 0x05d5f874, 0x4926601d, + 0x0501f95f, 0x591c0407, 0x90000583, 0x05000006, + 0x591c0202, 0x4802641b, 0x591c0402, 0x4802621b, + 0x0501f005, 0x591c0202, 0x4802621b, 0x591c0402, + 0x4802641b, 0x591c0017, 0x48026017, 0x491e602a, + 0x64066407, 0x64d66403, 0x64066203, 0x42000800, + 0x80000040, 0x0005fee2, 0x411e6000, 0x5c023800, + 0x80000580, 0x5c026800, 0x1c01f000, 0x411e6000, + 0x5c023800, 0x59a80061, 0x48026205, 0x90000541, + 0x05fdf7f9, 0x4933c857, 0x4d2c0000, 0x4932381e, + 0x4a026202, 0x0000ffff, 0x591e5809, 0x591c0008, + 0x8c00051e, 0x05000005, 0x8400051e, 0x48023808, + 0x497a580d, 0x0501f016, 0x592c040c, 0x8c000518, + 0x05000013, 0x84000518, 0x48025c0c, 0x4d400000, + 0x592e820a, 0x64065a0a, 0x0501fc05, 0x49425a0a, + 0x5c028000, 0x497a580d, 0x592c040c, 0x8c000512, + 0x05000007, 0x4d2c0000, 0x84000512, 0x48025c0c, + 0x592e580d, 0x05a9fcc9, 0x5c025800, 0x59a80061, + 0x48026205, 0x591c0216, 0x48026218, 0x90000d81, + 0x05000006, 0x640a3a03, 0x90000585, 0x05000007, + 0x497a6017, 0x0501f01b, 0x591c0008, 0x84000540, + 0x48023808, 0x64123a03, 0x591c0416, 0x4803c857, + 0x8400051c, 0x84000554, 0x48023c16, 0x592c0013, + 0x40001000, 0x591c0818, 0x80040480, 0x05fe17f1, + 0x82040500, 0xfffffffc, 0x48026017, 0x48023818, 0x591c0a16, 0x4807c857, 0x90040d85, 0x05020005, 0x480bc857, 0x4803c857, 0x4a023814, 0xffffffff, 0x591c0402, 0x4802641b, 0x591c0202, 0x4802621b, 0x591e680a, 0x4936600a, 0x64066407, 0x64e66403, - 0x64066203, 0x42000800, 0x80000040, 0x0005feab, + 0x64066203, 0x42000800, 0x80000040, 0x0005fee2, 0x5c025800, 0x1c01f000, 0x4933c857, 0x59300416, 0x8c000514, 0x05000015, 0x8c00051c, 0x05020012, 0x59300018, 0x80100480, 0x05001006, 0x05000005, @@ -11287,89 +11645,89 @@ static const uint32_t isp_2500_risc_code[] = { 0x1c01f000, 0x59300c03, 0x4933c857, 0x4807c857, 0x900404b4, 0x05001005, 0x900404bc, 0x05021003, 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe, - 0x42000000, 0x0010e3b6, 0x0511f806, 0x4d340000, + 0x42000000, 0x00112357, 0x0511f9e9, 0x4d340000, 0x4d240000, 0x5932481d, 0x5932680a, 0x59300407, 0x90000c92, 0x05021003, 0x4803c857, 0x0c01f804, - 0x5c024800, 0x5c026800, 0x1c01f000, 0x0010aff5, - 0x0010aff7, 0x0010affa, 0x0010b035, 0x0010c948, - 0x0010c915, 0x0010c94c, 0x0010aff6, 0x0010aff5, - 0x0010aff6, 0x0010aff6, 0x0010aff6, 0x0010aff6, - 0x0010aff6, 0x0010aff6, 0x0010aff6, 0x0010aff6, - 0x0010aff6, 0x05a9fde5, 0x1c01f000, 0x40000000, + 0x5c024800, 0x5c026800, 0x1c01f000, 0x0010b58d, + 0x0010b58f, 0x0010b592, 0x0010b5cd, 0x0010d092, + 0x0010d05f, 0x0010d096, 0x0010b58e, 0x0010b58d, + 0x0010b58e, 0x0010b58e, 0x0010b58e, 0x0010b58e, + 0x0010b58e, 0x0010b58e, 0x0010b58e, 0x0010b58e, + 0x0010b58e, 0x05a9f888, 0x1c01f000, 0x40000000, 0x40000000, 0x1c01f000, 0x59300403, 0x82000d80, 0x00000085, 0x05020007, 0x4a026403, 0x0000008b, - 0x642e6203, 0x42000800, 0x80004040, 0x0005f6ab, + 0x642e6203, 0x42000800, 0x80004040, 0x0005f6e2, 0x82000d80, 0x0000008b, 0x0502002e, 0x4d3c0000, - 0x417a7800, 0x05b9fb23, 0x5c027800, 0x42000000, - 0x0010e454, 0x050dffcf, 0x05fdfcbb, 0x0500000e, + 0x417a7800, 0x05b5fe22, 0x5c027800, 0x42000000, + 0x001123f8, 0x0511f9b2, 0x05fdfcac, 0x0500000e, 0x4d2c0000, 0x59325809, 0x4a025a08, 0x00000103, 0x59300402, 0x48025c0a, 0x641a5a0a, 0x497a580d, - 0x0001fb82, 0x59300a29, 0x90040d83, 0x05fc0d8d, - 0x5c025800, 0x60443000, 0x050dfd65, 0x64066403, - 0x497a6009, 0x05b9fdf6, 0x59240400, 0x8c00050a, + 0x0001fba8, 0x59300a29, 0x90040d83, 0x05fc0d8e, + 0x5c025800, 0x60443000, 0x050dff2a, 0x64066403, + 0x497a6009, 0x05b9f8fa, 0x59240400, 0x8c00050a, 0x0502000b, 0x41782800, 0x60103000, 0x4d400000, - 0x60a68000, 0x0509ff76, 0x5c028000, 0x64126407, + 0x60a68000, 0x050df925, 0x5c028000, 0x64126407, 0x641e6203, 0x6406642c, 0x1c01f000, 0x602c0800, - 0x05d1fcbd, 0x64066407, 0x64066203, 0x05e9f03e, + 0x05d1f938, 0x64066407, 0x64066203, 0x05e5f75f, 0x1c01f000, 0x59300416, 0x8c00051a, 0x05020021, 0x5930080a, 0x58040200, 0x8c00050e, 0x05000006, 0x59300a03, 0x90040590, 0x05000003, 0x90040583, - 0x05020018, 0x05f9ffcb, 0x59300203, 0x90000d89, + 0x05020018, 0x05f9ffa5, 0x59300203, 0x90000d89, 0x0500000b, 0x48026429, 0x4a026403, 0x00000085, 0x59300416, 0x8400055a, 0x8400055e, 0x48026416, - 0x64266203, 0x640a6407, 0x640e6229, 0x59a8005d, - 0x48026205, 0x42000800, 0x80004040, 0x0501fe48, - 0x0005feab, 0x4203e000, 0xb0800000, 0x6023f800, - 0x1c01f000, 0x41780800, 0x59a8105a, 0x60c80000, - 0x05e5ff32, 0x800811c0, 0x05020002, 0x60501000, - 0x480b505c, 0x59a8105b, 0x480b5050, 0x41780800, - 0x61900000, 0x05e5ff29, 0x800811c0, 0x05020002, - 0x60501000, 0x480b505d, 0x9008140a, 0x480b505e, - 0x60040800, 0x05e9fce2, 0x42000000, 0x30000000, - 0x40080800, 0x0001f93a, 0x600c0800, 0x59a8103d, - 0x05e9fccd, 0x05d5f088, 0x64a3505c, 0x6453505d, - 0x4a035050, 0x000007d0, 0x60781000, 0x480b505e, - 0x60040800, 0x05e9fcd2, 0x42000000, 0x30000000, - 0x40080800, 0x0001f93a, 0x600c0800, 0x59a8103d, - 0x05e9f4bd, 0x4933c857, 0x4d2c0000, 0x59300403, + 0x64266203, 0x640a6407, 0x640e6229, 0x59a80060, + 0x48026205, 0x42000800, 0x80004040, 0x0501fe56, + 0x0005fee2, 0x4203e000, 0xb0800000, 0x6023f800, + 0x1c01f000, 0x41780800, 0x59a8105d, 0x60c80000, + 0x05e5fe53, 0x800811c0, 0x05020002, 0x60501000, + 0x480b505f, 0x59a8105e, 0x480b5053, 0x41780800, + 0x61900000, 0x05e5fe4a, 0x800811c0, 0x05020002, + 0x60501000, 0x480b5060, 0x9008140a, 0x480b5061, + 0x60040800, 0x05e9fc08, 0x42000000, 0x30000000, + 0x40080800, 0x0001f942, 0x600c0800, 0x59a81040, + 0x05e9fbf3, 0x05d1f562, 0x64a3505f, 0x64535060, + 0x4a035053, 0x000007d0, 0x60781000, 0x480b5061, + 0x60040800, 0x05e9fbf8, 0x42000000, 0x30000000, + 0x40080800, 0x0001f942, 0x600c0800, 0x59a81040, + 0x05e9f3e3, 0x4933c857, 0x4d2c0000, 0x59300403, 0x900005be, 0x05020004, 0x59325819, 0x812e59c0, - 0x05ae0906, 0x5c025800, 0x1c01f000, 0x4933c857, + 0x05aa0ba5, 0x5c025800, 0x1c01f000, 0x4933c857, 0x813669c0, 0x0500000c, 0x59340200, 0x8c000508, 0x05000009, 0x4a026416, 0x00000100, 0x8c00050c, 0x59300008, 0x05000002, 0x84000544, 0x84000542, 0x48026008, 0x1c01f000, 0x59300416, 0x8c000510, - 0x1c01f000, 0x4937c857, 0x4d300000, 0x05f1fb60, + 0x1c01f000, 0x4937c857, 0x4d300000, 0x05f1fadd, 0x0500000d, 0x4926601d, 0x4936600a, 0x05fdffe8, - 0x64066407, 0x492e6009, 0x60240800, 0x05d1fc42, - 0x4d380000, 0x60ce7000, 0x0009f800, 0x5c027000, + 0x64066407, 0x492e6009, 0x60240800, 0x05d1f8bd, + 0x4d380000, 0x60ce7000, 0x0009f839, 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c580000, 0x4d3c0000, 0x59325809, - 0x91380595, 0x0502001d, 0x59a8b0b6, 0x90580c99, - 0x05001002, 0x6060b000, 0x8058b104, 0x0501fa5b, - 0x80000580, 0x0501fa6a, 0x912cac0d, 0x91cca406, - 0x050dffe3, 0x4c600000, 0x6004c000, 0x592c100e, + 0x91380595, 0x0502001d, 0x59a8b0bb, 0x90580c99, + 0x05001002, 0x6060b000, 0x8058b104, 0x0501fa69, + 0x80000580, 0x0501fa78, 0x912cac0d, 0x91cca406, + 0x0511f9c6, 0x4c600000, 0x6004c000, 0x592c100e, 0x8c080518, 0x05020006, 0x59240005, 0x592c1011, 0x80080580, 0x05020006, 0x4178c000, 0x5930100a, - 0x58081403, 0x417a7800, 0x05b9fad2, 0x5c00c000, - 0x05f1fd0e, 0x0501f005, 0x6008b000, 0x0501fa60, - 0x05f5f9eb, 0x0005ffdc, 0x5c027800, 0x5c00b000, + 0x58081403, 0x417a7800, 0x05b5fdd1, 0x5c00c000, + 0x05f1fcac, 0x0501f005, 0x6008b000, 0x0501fa6e, + 0x05f5f98d, 0x0009f810, 0x5c027800, 0x5c00b000, 0x5c025800, 0x1c01f000, 0x4933c856, 0x4a02601d, - 0x0010e512, 0x4936600a, 0x05fdffad, 0x64066407, - 0x492e6009, 0x4d380000, 0x61367000, 0x0009f800, + 0x001124b6, 0x4936600a, 0x05fdffad, 0x64066407, + 0x492e6009, 0x4d380000, 0x61367000, 0x0009f839, 0x5c027000, 0x90000541, 0x1c01f000, 0x4803c856, - 0x4d2c0000, 0x91380595, 0x05020025, 0x59a808b6, + 0x4d2c0000, 0x91380595, 0x05020025, 0x59a808bb, 0x59325809, 0x5930040d, 0x80040580, 0x05020020, 0x4c500000, 0x4c540000, 0x4c580000, 0x91cca406, 0x4050a800, 0x5930b40d, 0x9058b403, 0x8058b104, - 0x050dffe6, 0x91cca406, 0x592cb209, 0x9058b403, - 0x8058b104, 0x912cac0a, 0x050dffa5, 0x592e5801, + 0x0511f9c9, 0x91cca406, 0x592cb209, 0x9058b403, + 0x8058b104, 0x912cac0a, 0x0511f988, 0x592e5801, 0x812e59c0, 0x05fe07f9, 0x5931d82d, 0x58ef400b, 0x58ee580d, 0x4a025a08, 0x00000103, 0x58ec0009, 0x0801f800, 0x59300402, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x5c025800, 0x1c01f000, 0x05f5f9b0, + 0x5c00a000, 0x5c025800, 0x1c01f000, 0x05f5f952, 0x5c025800, 0x1c01f000, 0x4933c857, 0x90040db5, - 0x05000005, 0x5930141b, 0x0501f83f, 0x05000025, - 0x0501f006, 0x4d300000, 0x5932602a, 0x0501f843, + 0x05000005, 0x5930141b, 0x0501f843, 0x05000025, + 0x0501f006, 0x4d300000, 0x5932602a, 0x0501f847, 0x5c026000, 0x0500001e, 0x591c0c07, 0x90040583, 0x05000003, 0x90040586, 0x0502001b, 0x591c0c02, 0x5930041b, 0x80040580, 0x05000009, 0x5930021b, @@ -11378,3242 +11736,3378 @@ static const uint32_t isp_2500_risc_code[] = { 0x82040580, 0x0000ffff, 0x05000005, 0x591c0202, 0x59300a1b, 0x80040580, 0x05020007, 0x591c000a, 0x5930080a, 0x80040580, 0x1c01f000, 0x417a3800, - 0x90000541, 0x1c01f000, 0x4803c856, 0x4203e000, - 0xb0800000, 0x600009fe, 0x4203f800, 0x30000000, - 0x40000000, 0x80040840, 0x05a80c90, 0x05ffb7fb, + 0x90000541, 0x1c01f000, 0x59a80c9f, 0x8c040502, + 0x0502000c, 0x4803c856, 0x4203e000, 0xb0800000, + 0x600009fe, 0x4203f800, 0x30000000, 0x40000000, + 0x80040840, 0x05a40f30, 0x05ffb7fb, 0x80040d81, 0x1c01f000, 0x4803c856, 0x4203e000, 0xb0800000, 0x4203f800, 0x20000000, 0x1c01f000, 0x59300808, 0x8c04051e, 0x592c0c0c, 0x05020002, 0x8c040518, - 0x1c01f000, 0x05fdfb66, 0x05000007, 0x800800ca, - 0x800808c8, 0x80040c00, 0x82063c00, 0x00111b00, - 0x491fc857, 0x1c01f000, 0x0501fd45, 0x05020007, + 0x1c01f000, 0x05fdfb53, 0x05000007, 0x800800ca, + 0x800808c8, 0x80040c00, 0x82063c00, 0x00115aa4, + 0x491fc857, 0x1c01f000, 0x0501fd4f, 0x05020007, 0x59301402, 0x05fdfff4, 0x05000007, 0x411c0000, 0x81300580, 0x05000003, 0x81780500, 0x0501f002, 0x81300540, 0x1c01f000, 0x4d300000, 0x83440480, - 0x000007f0, 0x05001003, 0x05d5f907, 0x0501f002, - 0x0001fb00, 0x05020008, 0x4936600a, 0x05d5f8fa, - 0x4926601d, 0x05b9f9b3, 0x80000580, 0x5c026000, - 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4933c857, - 0x05fdfb49, 0x05a80c59, 0x4d2c0000, 0x4d340000, - 0x4d440000, 0x4c580000, 0x59325809, 0x5932680a, - 0x49425a0a, 0x05d9fe7a, 0x592e8c0a, 0x592c420b, - 0x9020050f, 0x0c01f806, 0x5c00b000, 0x5c028800, - 0x5c026800, 0x5c025800, 0x1c01f000, 0x0010b1a5, - 0x0010b1c6, 0x0010b1cc, 0x0010b1cf, 0x0010b1d7, - 0x0010b1a3, 0x0010b1a3, 0x0010b1a3, 0x0010b1da, - 0x0010b1e6, 0x0010b1e6, 0x0010b1a3, 0x0010b1a3, - 0x0010b1a3, 0x0010b1a3, 0x0010b1a3, 0x4803c857, - 0x05a9fc36, 0x814281c0, 0x05020011, 0x41785800, - 0x592c0408, 0x8c00051c, 0x05020002, 0x59345c05, - 0x442c2800, 0x59340008, 0x48002802, 0x59340009, - 0x48002801, 0x59340006, 0x48002804, 0x59340007, - 0x48002803, 0x602cb000, 0x0501f032, 0x592c020b, - 0x8c00051e, 0x6008b000, 0x0502002e, 0x9004b540, - 0x0500002c, 0x44042800, 0x5932680a, 0x59340400, - 0x48002801, 0x59340200, 0x90000501, 0x48002802, - 0x600cb000, 0x0501f023, 0x814281c0, 0x05fe07f0, - 0x59345c05, 0x442c2800, 0x6004b000, 0x0501f01d, - 0x9140b540, 0x0500001b, 0x0501f024, 0x814281c0, - 0x05020022, 0x59340200, 0x44002800, 0x59340001, - 0x48002801, 0x6008b000, 0x0501f012, 0x9140b540, - 0x0502001a, 0x0501f00f, 0x9140b540, 0x0500000d, - 0x8c20051c, 0x05020015, 0x05d5f880, 0x05000013, - 0x8c20050e, 0x05000002, 0x497a600a, 0x4178b000, - 0x497a5a0a, 0x0501f003, 0x9140b540, 0x0502000b, - 0x592c0408, 0x8400051c, 0x48025c08, 0x592c020b, - 0x82000500, 0x00003fff, 0x48025a0b, 0x0501f92b, - 0x497a6009, 0x0001f382, 0x592c020b, 0x8c00051e, - 0x6008b000, 0x05fe07f3, 0x9004b540, 0x05fc07f1, - 0x44042800, 0x6004b000, 0x05fdf7ee, 0x4937c857, - 0x4d300000, 0x05f1fa06, 0x0500000d, 0x4926601d, - 0x4936600a, 0x05fdfe8e, 0x64066407, 0x492e6009, - 0x602c0800, 0x05d1fae8, 0x4d380000, 0x610e7000, - 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000, - 0x1c01f000, 0x4937c857, 0x4d2c0000, 0x4d200000, - 0x59340013, 0x80024130, 0x59325809, 0x91380595, - 0x05020022, 0x59a800b6, 0x90000584, 0x0502001f, - 0x59240005, 0x592c100d, 0x80080580, 0x05020011, - 0x4d440000, 0x592e8c0a, 0x592c020b, 0x4803c856, - 0x82000500, 0x00000080, 0x84000548, 0x4d3c0000, - 0x60027820, 0x8c00050e, 0x05000002, 0x853e7d5c, - 0x05d1ffb7, 0x5c027800, 0x5c028800, 0x0501f003, - 0x4803c856, 0x05d5f831, 0x05fdfa9b, 0x05000011, - 0x4d400000, 0x60028000, 0x41780800, 0x05fdff4c, - 0x5c028000, 0x0501f00a, 0x05d5f828, 0x05fe07f7, - 0x05fdfa91, 0x05000007, 0x4c580000, 0x6008b000, - 0x0501f8fb, 0x5c00b000, 0x05f5f885, 0x0005ffdc, - 0x5c024000, 0x5c025800, 0x1c01f000, 0x4937c857, - 0x4d300000, 0x05f1f9be, 0x0500000f, 0x4926601d, - 0x4936600a, 0x05fdfe46, 0x64066407, 0x4d3c0000, - 0x4d380000, 0x417a7800, 0x05d1fa95, 0x492e6009, - 0x60127000, 0x0009f800, 0x5c027000, 0x5c027800, - 0x90000541, 0x5c026000, 0x1c01f000, 0x4937c857, - 0x4d300000, 0x05f1f9aa, 0x0500000d, 0x4926601d, - 0x4936600a, 0x05fdfe32, 0x600c0800, 0x05d1fa8e, - 0x64066407, 0x492e6009, 0x4d380000, 0x61467000, - 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000, - 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d240000, - 0x4d200000, 0x4d400000, 0x4d440000, 0x4d3c0000, - 0x5932481d, 0x59240a00, 0x8c040500, 0x0500008b, - 0x05b9fba3, 0x59325809, 0x91383595, 0x05020056, - 0x60100800, 0x05d1fa74, 0x60040800, 0x05d1fb5b, - 0x812e59c0, 0x05020043, 0x59a800bb, 0x80000040, - 0x480350bb, 0x050dfea5, 0x05000004, 0x59240200, - 0x8400051a, 0x48024a00, 0x417a8000, 0x59cc0000, - 0x82000500, 0x00ffffff, 0x59240805, 0x4803c857, - 0x4807c857, 0x800409c0, 0x05000016, 0x80041580, - 0x05000014, 0x4c000000, 0x60aa8000, 0x59240400, + 0x000007f0, 0x05001006, 0x83440480, 0x00000800, + 0x05021003, 0x05d1fe31, 0x0501f002, 0x0001fb08, + 0x05020008, 0x4936600a, 0x05d1fe24, 0x4926601d, + 0x05b5fcab, 0x80000580, 0x5c026000, 0x1c01f000, + 0x90000541, 0x05fdf7fd, 0x4933c857, 0x05fdfb33, + 0x05a40ef5, 0x4d2c0000, 0x4d340000, 0x4d440000, + 0x4c580000, 0x59325809, 0x5932680a, 0x49425a0a, + 0x05d9fbee, 0x592e8c0a, 0x592c420b, 0x9020050f, + 0x0c01f806, 0x5c00b000, 0x5c028800, 0x5c026800, + 0x5c025800, 0x1c01f000, 0x0010b744, 0x0010b765, + 0x0010b76b, 0x0010b76e, 0x0010b776, 0x0010b742, + 0x0010b742, 0x0010b742, 0x0010b779, 0x0010b785, + 0x0010b785, 0x0010b742, 0x0010b742, 0x0010b742, + 0x0010b742, 0x0010b742, 0x4803c857, 0x05a5fed2, + 0x814281c0, 0x05020011, 0x41785800, 0x592c0408, + 0x8c00051c, 0x05020002, 0x59345c05, 0x442c2800, + 0x59340008, 0x48002802, 0x59340009, 0x48002801, + 0x59340006, 0x48002804, 0x59340007, 0x48002803, + 0x602cb000, 0x0501f032, 0x592c020b, 0x8c00051e, + 0x6008b000, 0x0502002e, 0x9004b540, 0x0500002c, + 0x44042800, 0x5932680a, 0x59340400, 0x48002801, + 0x59340200, 0x90000501, 0x48002802, 0x600cb000, + 0x0501f023, 0x814281c0, 0x05fe07f0, 0x59345c05, + 0x442c2800, 0x6004b000, 0x0501f01d, 0x9140b540, + 0x0500001b, 0x0501f024, 0x814281c0, 0x05020022, + 0x59340200, 0x44002800, 0x59340001, 0x48002801, + 0x6008b000, 0x0501f012, 0x9140b540, 0x0502001a, + 0x0501f00f, 0x9140b540, 0x0500000d, 0x8c20051c, + 0x05020015, 0x05d1fdaa, 0x05000013, 0x8c20050e, + 0x05000002, 0x497a600a, 0x4178b000, 0x497a5a0a, + 0x0501f003, 0x9140b540, 0x0502000b, 0x592c0408, + 0x8400051c, 0x48025c08, 0x592c020b, 0x82000500, + 0x00003fff, 0x48025a0b, 0x0501f932, 0x497a6009, + 0x0001f3a8, 0x592c020b, 0x8c00051e, 0x6008b000, + 0x05fe07f3, 0x9004b540, 0x05fc07f1, 0x44042800, + 0x6004b000, 0x05fdf7ee, 0x4937c857, 0x4d300000, + 0x05f1f97c, 0x0500000d, 0x4926601d, 0x4936600a, + 0x05fdfe87, 0x64066407, 0x492e6009, 0x602c0800, + 0x05cdff5c, 0x4d380000, 0x610e7000, 0x0009f839, + 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, + 0x4937c857, 0x4d2c0000, 0x4d200000, 0x59340013, + 0x80024130, 0x59325809, 0x91380595, 0x05020022, + 0x59a800bb, 0x90000584, 0x0502001f, 0x59240005, + 0x592c100d, 0x80080580, 0x05020011, 0x4d440000, + 0x592e8c0a, 0x592c020b, 0x4803c856, 0x82000500, + 0x00000080, 0x84000548, 0x4d3c0000, 0x60027820, + 0x8c00050e, 0x05000002, 0x853e7d5c, 0x05d1fcdd, + 0x5c027800, 0x5c028800, 0x0501f003, 0x4803c856, + 0x05d1fd5b, 0x05fdfa85, 0x05000011, 0x4d400000, + 0x60028000, 0x41780800, 0x05fdff4c, 0x5c028000, + 0x0501f00a, 0x05d1fd52, 0x05fe07f7, 0x05fdfa7b, + 0x05000007, 0x4c580000, 0x6008b000, 0x0501f902, + 0x5c00b000, 0x05f5f820, 0x0009f810, 0x5c024000, + 0x5c025800, 0x1c01f000, 0x4937c857, 0x4d300000, + 0x05f1f934, 0x0500000f, 0x4926601d, 0x4936600a, + 0x05fdfe3f, 0x64066407, 0x4d3c0000, 0x4d380000, + 0x417a7800, 0x05cdff09, 0x492e6009, 0x60127000, + 0x0009f839, 0x5c027000, 0x5c027800, 0x90000541, + 0x5c026000, 0x1c01f000, 0x4937c857, 0x4d300000, + 0x05f1f920, 0x0500000d, 0x4926601d, 0x4936600a, + 0x05fdfe2b, 0x600c0800, 0x05cdff02, 0x64066407, + 0x492e6009, 0x4d380000, 0x61467000, 0x0009f839, + 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000, + 0x4933c857, 0x4c580000, 0x4d240000, 0x4d200000, + 0x4d400000, 0x4d440000, 0x4d3c0000, 0x5932481d, + 0x59240a00, 0x8c040500, 0x05000092, 0x05b5fea0, + 0x59325809, 0x91383595, 0x05020051, 0x60100800, + 0x05cdfee8, 0x812e59c0, 0x0502003e, 0x59a800c0, + 0x80000040, 0x480350c0, 0x0511f883, 0x05000004, + 0x59240200, 0x8400051a, 0x48024a00, 0x417a8000, + 0x05f5fc6b, 0x05000012, 0x60aa8000, 0x59240400, 0x8c00050a, 0x05020004, 0x60083000, 0x61fe89ff, - 0x0509fd0e, 0x417a7800, 0x05b9fbcb, 0x05b9fc3c, + 0x0509fec1, 0x417a7800, 0x05b5fedd, 0x05b5ff4f, 0x600a8000, 0x59cc0c08, 0x8c04051e, 0x05020004, - 0x59240a00, 0x84040d56, 0x48064a00, 0x5c000000, + 0x59240a00, 0x84040d56, 0x48064a00, 0x60040800, + 0x05d1f804, 0x59cc0000, 0x82000500, 0x00ffffff, 0x48024805, 0x40000800, 0x812000f0, 0x80040540, 0x48026813, 0x40040000, 0xb1200c80, 0x05021004, 0x49238830, 0x84000570, 0x48038832, 0x59240200, 0x8400051e, 0x82000540, 0x00000206, 0x48024a00, 0x59240400, 0x8c00050c, 0x05000004, 0x65466429, - 0x0501f84d, 0x0501f045, 0x60040000, 0x41781800, - 0x05d5fb94, 0x0501ff8c, 0x0005ffdc, 0x0501f03f, - 0x592c000c, 0x82000500, 0x00ffffff, 0x05020008, - 0x05d9fd3f, 0x59cc0000, 0x82000500, 0x00ffffff, - 0x44002800, 0x6004b000, 0x0501f850, 0x05f1fb17, - 0x0501f032, 0x812e59c0, 0x0502002d, 0x59340412, - 0x800001c0, 0x05000027, 0x80000040, 0x48026c12, - 0x59cc0c07, 0x82043500, 0x000000ff, 0x481bc857, - 0x90180583, 0x05020017, 0x59cc0207, 0x4803c857, + 0x0501f85b, 0x0501f053, 0x60040000, 0x41781800, + 0x05d5f8e0, 0x0505f8a7, 0x0009f810, 0x0501f04d, + 0x60040800, 0x05cdffe3, 0x592c000c, 0x82000500, + 0x00ffffff, 0x05020008, 0x05d9fab8, 0x59cc0000, + 0x82000500, 0x00ffffff, 0x44002800, 0x6004b000, + 0x0501f85c, 0x05f1fab3, 0x0501f03e, 0x812e59c0, + 0x05020039, 0x600c0800, 0x05b9f873, 0x05020003, + 0x0505f8f0, 0x0501f037, 0x59340412, 0x800001c0, + 0x0500002e, 0x80000040, 0x48026c12, 0x59cc0c07, + 0x82043500, 0x000000ff, 0x481bc857, 0x90180585, + 0x05000020, 0x90180583, 0x05020016, 0x59cc0207, 0x82000d00, 0x0000ff00, 0x4807c857, 0x82040580, 0x00000d00, 0x0502000f, 0x59240805, 0x82040d00, 0x00ffffff, 0x0500000b, 0x59240a00, 0x84040d48, - 0x48064a00, 0x602c0800, 0x05d1fa03, 0x64066407, - 0x64066203, 0x64066403, 0x05e5fd83, 0x0501f00f, - 0x600c0800, 0x05d1f9fc, 0x4a026202, 0x0000ffff, - 0x64066203, 0x65466403, 0x05e5fd7b, 0x0501f007, - 0x600c2800, 0x0501fe40, 0x0501f004, 0x6008b000, - 0x0501f83b, 0x05f1ffc6, 0x5c027800, 0x5c028800, - 0x5c028000, 0x5c024000, 0x5c024800, 0x5c00b000, - 0x1c01f000, 0x4933c857, 0x61f2880f, 0x42003000, - 0x00fffffc, 0x05d1fa0b, 0x05aa0ad0, 0x4936600a, - 0x05fdfd83, 0x417a7800, 0x05d1f9d5, 0x600c0800, - 0x05d1f9dd, 0x497a6c12, 0x59300429, 0x900005a1, - 0x05020003, 0x599c0208, 0x48026c12, 0x64066203, - 0x640a6403, 0x05e5f558, 0x492fc857, 0x4c580000, - 0x4c000000, 0x8058b1c0, 0x0500000a, 0x82580500, - 0xfffffff0, 0x05aa0ab9, 0x8058b0d0, 0x592c040c, - 0x82000500, 0xfffff0ff, 0x80580540, 0x48025c0c, - 0x5c000000, 0x5c00b000, 0x1c01f000, 0x492fc857, - 0x4c000000, 0x4c040000, 0x800000d8, 0x592c0c0c, - 0x82040d00, 0xffff0fff, 0x80040540, 0x48025c0c, - 0x5c000800, 0x5c000000, 0x1c01f000, 0x4933c857, - 0x4d2c0000, 0x59325809, 0x592c020b, 0x8400055e, - 0x48025a0b, 0x4c500000, 0x4c540000, 0x4c580000, - 0x05fdffda, 0x05d9fcc2, 0x64602800, 0x80142800, - 0x8058b040, 0x91cca407, 0x4014a800, 0x050dfd60, - 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800, - 0x1c01f000, 0x59325809, 0x592c0208, 0x82000580, - 0x00000152, 0x1c01f000, 0x59325809, 0x592c020b, - 0x8400055c, 0x48025a0b, 0x1c01f000, 0x59300809, - 0x58040208, 0x82000500, 0x000000ff, 0xb00005b9, - 0x1c01f000, 0x5930002b, 0x80000540, 0x05ae0bb1, - 0x1c01f000, 0x59300008, 0x82000500, 0x04000800, - 0x82000580, 0x04000800, 0x05020003, 0x59300221, - 0x48025c13, 0x1c01f000, 0x592c040b, 0x82000500, - 0x0000f000, 0x82000580, 0x00003000, 0x05020003, - 0x4a026416, 0x00000100, 0x1c01f000, 0x4d2c0000, - 0x59325809, 0x59300203, 0x4933c857, 0x492fc857, - 0x493bc857, 0x4803c857, 0x90003491, 0x05aa1a5f, - 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010b390, - 0x0010b396, 0x0010b3ce, 0x0010b390, 0x0010b390, - 0x0010b390, 0x0010b390, 0x0010b390, 0x0010b391, - 0x0010b390, 0x0010b390, 0x0010b390, 0x0010b390, - 0x0010b390, 0x0010b4a6, 0x0010b390, 0x0010b390, - 0x05a9fa4a, 0xb13834a0, 0x05aa1a48, 0x493a6403, - 0x64066203, 0x05e5f4dc, 0x91380593, 0x05020010, - 0x492fc857, 0x05fdfd05, 0x05000003, 0x643a6203, - 0x0501f005, 0x592c0010, 0x800001c0, 0x05000005, - 0x640a6203, 0x59a8005c, 0x48026006, 0x1c01f000, - 0x64025a0a, 0x0001fb82, 0x0005f7dc, 0x913805a7, - 0x0500001e, 0x91380594, 0x05000018, 0x05fdfcf3, - 0x0500000c, 0xb13805a1, 0x05000004, 0xb13805a0, - 0x05fe07f3, 0x4937c857, 0x05e9fd07, 0x05f20081, - 0x59300203, 0x9000058e, 0x050000f0, 0x05a9fa23, - 0x91380595, 0x05000003, 0x91380596, 0x05aa0a1f, - 0x05e9fcfd, 0x05f20077, 0x59300203, 0x90000582, - 0x05aa0a1a, 0x0501f00d, 0x4937c857, 0x05e9f8a6, - 0x64465812, 0x0501f004, 0x4937c857, 0x05e9f8a2, - 0x64425812, 0x64c65a0a, 0x64125811, 0x0001fb82, - 0x05d5f8a4, 0x05f1f003, 0x59341400, 0x82081d00, - 0x000000ff, 0x59300c03, 0x480bc857, 0x4807c857, - 0xb0040593, 0x05000020, 0x90040582, 0x0500000f, - 0x90040581, 0x05000010, 0x90040583, 0x05000013, - 0x90040585, 0x05000014, 0x900405b3, 0x05000012, - 0x90040580, 0x05000013, 0x90040584, 0x05aa09f7, - 0x0501f8a6, 0x0501f010, 0x900c0583, 0x05000868, - 0x0501f00d, 0x900c058b, 0x0502000b, 0x601c0800, - 0x05d1f901, 0x0501f008, 0x900c0585, 0x0500087b, - 0x0501f005, 0x900c0589, 0x05000896, 0x0501f002, - 0x0501f89b, 0x654a6403, 0x59a810b6, 0x592c040f, - 0x8c000500, 0x05000002, 0x60201000, 0x592c040f, - 0x8c000516, 0x05000002, 0x90081418, 0x592c0010, - 0x497a5811, 0x497a5812, 0x80080c80, 0x05000007, - 0x05001004, 0x641e5a0a, 0x40001000, 0x0501f004, - 0x64565a0a, 0x0501f002, 0x64025a0a, 0x480a5810, - 0x4d2c0000, 0x05a9fd64, 0x0500003c, 0x5c001000, - 0x41cc0800, 0x5808040f, 0x8c000516, 0x05020002, - 0x91cc0c06, 0x58081810, 0x58082015, 0x58082816, - 0x58080004, 0x48025806, 0x48065803, 0x480a580a, - 0x480e5805, 0x48125807, 0x48165808, 0x64025801, - 0x4a025809, 0x0010150e, 0x900c1c03, 0x800c1904, - 0x50040000, 0x9c0001c0, 0x44000800, 0x80040800, - 0x800c1840, 0x05fe07fb, 0x5808040f, 0x8c000500, - 0x0500000b, 0x41cc0800, 0x8c000516, 0x05000002, - 0x91cc0c06, 0x64040800, 0x80040800, 0x46000800, - 0x00000900, 0x84000500, 0x4800140f, 0x42007000, - 0x000211a7, 0x58380000, 0x90000580, 0x0502000b, - 0x58380807, 0x58380005, 0x80040540, 0x05020007, - 0x412c1000, 0x0001f821, 0x59dc0806, 0x8c04053e, - 0x05fc07fe, 0x0001f066, 0x412c1000, 0x0001f821, - 0x850e1d5c, 0x05e1f18d, 0x5c025800, 0x64b25a0a, - 0x497a5810, 0x0001fb82, 0x0005f7dc, 0x91380595, - 0x05020008, 0x59a800d1, 0x8c000502, 0x05020007, - 0x41780800, 0x05d1f981, 0x60100800, 0x05d1f096, - 0x601c0800, 0x05d1f094, 0x05d5fc54, 0x60401000, - 0x05020008, 0x59340002, 0x82000500, 0x00ff0000, - 0x82000580, 0x00ff0000, 0x05fc07f2, 0x60201000, - 0x05d5f84b, 0x05fc07ef, 0x592c040f, 0x84000540, - 0x48025c0f, 0x05fdf7ef, 0x91380595, 0x0502000b, - 0x59a800d1, 0x8c000502, 0x0502000a, 0x05d1f9dc, - 0x4d3c0000, 0x417a7800, 0x05d1f871, 0x5c027800, - 0x60180800, 0x05d1f078, 0x60100800, 0x05d1f076, - 0x05d5fc36, 0x60401000, 0x05020008, 0x59340002, - 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000, - 0x05fc07ef, 0x60201000, 0x05d5f82d, 0x05fc07ec, - 0x592c040f, 0x84000540, 0x48025c0f, 0x05fdf7ef, - 0x60100800, 0x05d1f064, 0x91380595, 0x05020003, - 0x0509f9c4, 0x05d00c20, 0x1c01f000, 0x91380595, - 0x05020015, 0x4c580000, 0x91cc1408, 0x6008b000, - 0x91341c06, 0x05f5fbb2, 0x0502000e, 0x91cc140a, - 0x6008b000, 0x91341c08, 0x05f5fbad, 0x05020009, - 0x59342200, 0x59cc1007, 0x800811c0, 0x05000003, - 0x480a6801, 0x84102542, 0x8410251a, 0x48126a00, - 0x5c00b000, 0x1c01f000, 0x4803c856, 0xb13805a1, - 0x05000019, 0xb13805a0, 0x05000017, 0xb13805a2, - 0x05020003, 0x644a5812, 0x0501f004, 0xb13805a3, - 0x0502001b, 0x644e5812, 0x64c65a0a, 0x64125811, - 0x59cc0001, 0x48025813, 0x59cc0002, 0x48025814, - 0x59cc0003, 0x48025815, 0x59cc0004, 0x48025816, - 0x59cc0005, 0x48025817, 0x0001fb82, 0x05d1ffb1, - 0x0005f7dc, 0x592c0010, 0x800001c0, 0x05000005, - 0x59a8005c, 0x48026006, 0x640a6203, 0x1c01f000, - 0x64025a0a, 0x0001fb82, 0x0005ffdc, 0x1c01f000, - 0x42000000, 0x0010e46c, 0x050dfb0e, 0x05e9f844, - 0x59300203, 0x4933c857, 0x4803c857, 0x90000c91, - 0x05aa1906, 0x0c01f802, 0x05e9f02e, 0x0010b4e9, - 0x0010b4f2, 0x0010b4ea, 0x0010b4e8, 0x0010b4e8, - 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, - 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, - 0x0010b4e8, 0x0010b4ea, 0x0010b4e8, 0x0010b4e8, - 0x05a9f8f2, 0x1c01f000, 0x59300403, 0xb0000592, - 0x05f804d3, 0x05d1ff83, 0x59325809, 0x641a5a0a, - 0x0001fb82, 0x05edf6df, 0x59301804, 0x840c0520, - 0x48026004, 0x598c000b, 0x81300580, 0x0502000f, - 0x8c0c0520, 0x0502000f, 0x42001000, 0x0010e387, - 0x50081000, 0x58080002, 0x82000580, 0x00000100, - 0x0500000b, 0x5808000c, 0x81300580, 0x05aa08d7, - 0x4978100c, 0x0501f003, 0x8c0c0520, 0x05fe07e3, - 0x05e5fcae, 0x05fc07e1, 0x05a9f8d0, 0x05e9fb05, - 0x05fc07fc, 0x59300203, 0x90000c91, 0x05aa18cb, - 0x0c01f7c7, 0x4933c857, 0x4c500000, 0x4c540000, - 0x4c580000, 0x592c0c0b, 0x48065817, 0x59cc0809, - 0x4806580b, 0x59cc0808, 0x4806580f, 0x59a808d0, - 0x82040500, 0x000003ff, 0x800010c4, 0x8c040514, - 0x05000004, 0x59cc0002, 0x90000503, 0x80081480, - 0x480a621c, 0x412c0800, 0x05a9fc4b, 0x05a808b3, - 0x492c080d, 0x5804040c, 0x84000552, 0x84000540, - 0x48000c0c, 0x90081403, 0x80081104, 0x91cca406, - 0x912cac08, 0x60400800, 0x90080490, 0x05021003, - 0x40080800, 0x80000580, 0x4004b000, 0x4c000000, - 0x050dfbaa, 0x5c000000, 0x800001c0, 0x0500000a, - 0x412c1000, 0x4c000000, 0x05a9fc33, 0x05a8089b, - 0x492c1001, 0x912cac08, 0x5c000000, 0x40001000, - 0x05fdf7ee, 0x5c00b000, 0x5c00a800, 0x5c00a000, - 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c380000, - 0x59325809, 0x5930021c, 0x48025a0c, 0x59301013, - 0x640a6203, 0x592c020e, 0x8c000500, 0x05000004, - 0x59300017, 0x592c1013, 0x80081480, 0x40080000, - 0x0501f962, 0x80001540, 0x05020007, 0x64025a0a, - 0x592c000f, 0x82000500, 0x00000c00, 0x05000009, - 0x0501f009, 0x8c08053e, 0x05000005, 0x641e5a0a, - 0x80081080, 0x80081000, 0x0501f002, 0x64565a0a, - 0x480a580b, 0x42000000, 0x001102f0, 0x50007000, - 0x5838000b, 0x80000540, 0x05020007, 0x4930700c, - 0x4930700b, 0x58380002, 0x90000580, 0x05020808, - 0x0501f004, 0x90001400, 0x45301000, 0x4930700b, - 0x5c007000, 0x5c025800, 0x1c01f000, 0x4933c857, - 0x592c000d, 0x40001000, 0x4800700a, 0x90080408, - 0x48007003, 0x592c0011, 0x592c1012, 0x592c1804, - 0x480c7006, 0x48007007, 0x48087008, 0x592c0017, - 0x592c120c, 0x80080c80, 0x05001002, 0x40001000, - 0x90081403, 0x80081104, 0x90080490, 0x05021003, - 0x80000580, 0x0501f002, 0x60401000, 0x4800700d, - 0x48087004, 0x800810c4, 0x48087005, 0x40381000, - 0x0001f021, 0x4d2c0000, 0x05a9fbd7, 0x05a8083f, - 0x42000800, 0x001102f0, 0x452c0800, 0x497a580b, - 0x497a580c, 0x497a580d, 0x4a025809, 0x0010b5a9, - 0x4a025802, 0x00000100, 0x64025801, 0x5c025800, - 0x1c01f000, 0x4833c857, 0x4d300000, 0x4d2c0000, - 0x4c5c0000, 0x4030b800, 0x585c000a, 0x80025d40, - 0x05020004, 0x585c000c, 0x4c000000, 0x0501f03b, - 0x585c0002, 0x82000580, 0x00000100, 0x0502001c, - 0x592c0801, 0x4c040000, 0x05a9fbd8, 0x5c000800, - 0x800409c0, 0x05000017, 0x4804b80a, 0x585c100d, - 0x800811c0, 0x05020004, 0x40065800, 0x05a9fbd8, - 0x0501f010, 0x90080490, 0x05021003, 0x80000580, - 0x0501f002, 0x60401000, 0x4800b80d, 0x4808b804, - 0x800810c4, 0x4808b805, 0x90040408, 0x4800b803, - 0x405c1000, 0x0001f821, 0x0501f022, 0x0501f825, - 0x585c000c, 0x80026540, 0x59300000, 0x80000d40, - 0x05020002, 0x4800b80b, 0x4800b80c, 0x497a6000, - 0x4c000000, 0x4978b80a, 0x59325809, 0x4a025a08, - 0x00000103, 0x59300402, 0x48025c0a, 0x592c100f, - 0x4c080000, 0x0001fb82, 0x0501f8cb, 0x05f9ffc1, - 0x5c001000, 0x8c080518, 0x05000003, 0x05fdf8dc, - 0x0501f002, 0x0005ffdc, 0x405c7000, 0x5c000000, - 0x80026540, 0x05000003, 0x59325809, 0x05fdff88, - 0x5c00b800, 0x5c025800, 0x5c026000, 0x1c01f000, - 0x483bc857, 0x5838000a, 0x40025800, 0x05a9fba0, - 0x5838000c, 0x80026540, 0x59300009, 0x80025d40, - 0x640a5a0a, 0x1c01f000, 0x4803c857, 0x4933c857, - 0x4d1c0000, 0x497a601e, 0x41323800, 0x40026000, - 0x4d3c0000, 0x60167800, 0x0501f838, 0x5c027800, - 0x411e6000, 0x4933c857, 0x59300416, 0x84000502, - 0x48026416, 0x5c023800, 0x1c01f000, 0x481bc857, - 0x4933c857, 0x4c5c0000, 0x4c600000, 0x4010b800, - 0x4014c000, 0x0509ff6a, 0x05b5fffd, 0x59240400, - 0x8c00050a, 0x05020006, 0x40602800, 0x405c3000, - 0x0509f986, 0x90000541, 0x0501f002, 0x80000580, - 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c856, - 0x4d300000, 0x42026000, 0x00111b00, 0x59a8003b, - 0x81640580, 0x05000013, 0x59300c07, 0x90040581, - 0x05000009, 0x90040584, 0x05000004, 0x90040590, - 0x05f80b17, 0x0501f007, 0x59300203, 0x90000d87, - 0x05000004, 0x4807c857, 0x05fdf98f, 0x05020807, - 0x91326430, 0x41580000, 0x81300480, 0x05fc17ec, - 0x5c026000, 0x1c01f000, 0x4933c857, 0x59300403, - 0x4803c857, 0x05e5fece, 0x4df00000, 0x59301407, - 0x59300203, 0x4803c857, 0x90080d82, 0x05000016, - 0x90080d81, 0x0500000b, 0x90080d84, 0x05000005, - 0x4933c856, 0x5c03e000, 0x05e40eb2, 0x0501f03e, - 0x90000d88, 0x0500002e, 0x90000d87, 0x0500002c, - 0x90000d81, 0x05000013, 0x90000d82, 0x05000028, - 0x90000d85, 0x05000026, 0x90000d8e, 0x05000024, - 0x05a5ff7a, 0x90000d89, 0x0500000a, 0x90000d8b, - 0x05000008, 0x90000d8a, 0x0500001d, 0x90000d8c, - 0x0500001b, 0x90000d8e, 0x05000019, 0x05a5ff6f, - 0x598c000b, 0x81300580, 0x05020003, 0x05e9f9a1, - 0x05020013, 0x59300004, 0x4803c857, 0x8c000520, - 0x05000004, 0x84000520, 0x48026004, 0x0501f00c, - 0x05e5fb3e, 0x05a60f61, 0x5c03e000, 0x05e40e89, - 0x59300407, 0x90000d82, 0x05000013, 0x05d1fdf1, - 0x05f9ff4a, 0x05f00c42, 0x0501f00f, 0x5c03e000, - 0x05e40e80, 0x59300407, 0x90000d82, 0x0500000a, - 0x5930081d, 0x58040200, 0x8c000500, 0x050002a9, - 0x05d1fde4, 0x05f9ff3d, 0x05f00c35, 0x8d3c0500, - 0x05000003, 0x0509ffc5, 0x05edf53e, 0x64066229, - 0x4a026403, 0x00000085, 0x64266203, 0x640a6407, - 0x42000800, 0x80000040, 0x0005f6ab, 0x60007040, - 0x4203e000, 0xb0800000, 0x6033f800, 0x40000000, - 0x40000000, 0x40000000, 0x0501b004, 0x80387040, - 0x05a40f36, 0x05fdf7f9, 0x1c01f000, 0x83300480, - 0x00111a40, 0x05001006, 0x41540000, 0x81300480, - 0x05021003, 0x80000580, 0x1c01f000, 0x81780080, - 0x1c01f000, 0x59300027, 0x80000540, 0x05000006, - 0x4d2c0000, 0x40025800, 0x05a9fadc, 0x497a6027, - 0x5c025800, 0x1c01f000, 0x592c720e, 0x8c380500, - 0x05020008, 0x59307008, 0x8c380516, 0x05000005, - 0x59307009, 0x58387013, 0x59300014, 0x80380480, - 0x1c01f000, 0x59a808b6, 0x59cc2808, 0x4c5c0000, - 0x4178b800, 0x8c14051e, 0x05000002, 0x805cb800, - 0x82140500, 0x00000c00, 0x05000004, 0x905c0410, - 0x80040480, 0x05001018, 0x80001580, 0x8c140512, - 0x05000005, 0x905c0414, 0x80040480, 0x05001012, - 0x59cc100a, 0x80000580, 0x8c140510, 0x05000005, - 0x905c0418, 0x80040480, 0x0500100b, 0x59cc000b, - 0x80080400, 0x05001008, 0x05000005, 0x905c0418, - 0x80040480, 0x05001004, 0x80000580, 0x5c00b800, - 0x1c01f000, 0x42000000, 0x0010e449, 0x050df8f1, - 0x90000541, 0x05fdf7fa, 0x4933c857, 0x4937c857, - 0x4923c857, 0x4927c857, 0x492fc857, 0x48efc857, - 0x4d1c0000, 0x4d300000, 0x41323800, 0x05edfd0c, - 0x0500001f, 0x48ee602d, 0x4926601d, 0x4936600a, - 0x05fdf993, 0x591c0407, 0x90000583, 0x05000008, - 0x591c0202, 0x4803c857, 0x4802641b, 0x591c0402, - 0x4802621b, 0x4803c857, 0x0501f009, 0x591c0017, - 0x48026017, 0x591c0202, 0x4803c857, 0x4802621b, - 0x591c0402, 0x4802641b, 0x4803c857, 0x491e602a, - 0x64066407, 0x492e6009, 0x4d380000, 0x615e7000, - 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000, - 0x5c023800, 0x1c01f000, 0x4933c857, 0x493bc857, - 0x4937c857, 0x4d2c0000, 0x4c500000, 0x4c540000, - 0x4c580000, 0x59325809, 0x05f9fda7, 0x05000017, - 0x91cca406, 0x912cac0a, 0x91380596, 0x05020007, - 0x59a800b6, 0x90000588, 0x0502000e, 0x492fc857, - 0x6008b000, 0x0501f008, 0x91380595, 0x05020009, - 0x492fc857, 0x59a800b6, 0x90000598, 0x05020005, - 0x6018b000, 0x050df972, 0x05edfeac, 0x0501f003, - 0x05f1fb8b, 0x0005ffdc, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857, - 0x05e5fdd3, 0x4df00000, 0x59300203, 0x90000c91, - 0x05a61e96, 0x0c01f001, 0x0010b758, 0x0010b757, - 0x0010b75d, 0x0010b775, 0x0010b75c, 0x0010b757, - 0x0010b757, 0x0010b757, 0x0010b757, 0x0010b757, - 0x0010b757, 0x0010b757, 0x0010b757, 0x0010b757, - 0x0010b757, 0x0010b757, 0x0010b75d, 0x05a5fe83, - 0x5c03e000, 0x05e40dab, 0x80000580, 0x1c01f000, - 0x05adf8ed, 0x5c03e000, 0x05e40da6, 0x8d3c0502, - 0x05020011, 0x4d2c0000, 0x59325809, 0x64165a0a, - 0x0001fb82, 0x5c025800, 0x497a6009, 0x8d3c0500, - 0x0502000b, 0x642a6229, 0x4a026403, 0x00000085, - 0x64266203, 0x640a6407, 0x42000800, 0x80004040, - 0x0005feab, 0x81780080, 0x1c01f000, 0x05edfc5d, - 0x05fdf7fd, 0x05f9f9bb, 0x05020003, 0x05e9f869, - 0x05020005, 0x05e5f95d, 0x05fc07e3, 0x05e5fcb1, - 0x05a60e5e, 0x59300203, 0x90000d83, 0x05a40e5b, - 0x90000c91, 0x05a61e59, 0x0c01f7c4, 0x4803c856, - 0x05edfc7f, 0x0500002e, 0x59300402, 0x4802621b, - 0x59a804cc, 0x84000540, 0x84000502, 0x480354cc, - 0x812e59c0, 0x05000011, 0x82600580, 0x00003000, - 0x05020003, 0x4a026416, 0x00000100, 0x592c020b, - 0x480352cd, 0x480352cc, 0x592c000f, 0x480350ce, - 0x592c020c, 0x800000c2, 0x800008c4, 0x80040400, - 0x48026006, 0x0501f00a, 0x640b50ce, 0x59a8005c, - 0x800000c4, 0x48026006, 0x417a4000, 0x61fa880f, - 0x42003000, 0x00fffffe, 0x05cdfd6e, 0x4926601d, - 0x599c0208, 0x48026c12, 0x59340002, 0x4802600b, - 0x497a641b, 0x4936600a, 0x492e6009, 0x64066407, - 0x61627000, 0x0009f800, 0x90000541, 0x1c01f000, - 0x4d2c0000, 0x4c5c0000, 0x4c600000, 0x4c640000, - 0x4803c856, 0x59325809, 0x91380595, 0x050200b8, - 0x812e59c0, 0x05000003, 0x05f9fd0b, 0x05a40e1b, - 0x59a800b6, 0x82000580, 0x00000228, 0x050200ab, - 0x59cc0c07, 0x82040580, 0x00000101, 0x050200b7, - 0x59cc0a07, 0x59300402, 0x80040580, 0x050200b5, - 0x59cc0a0a, 0x82040580, 0x00000228, 0x050200b3, - 0x91ccbc0b, 0x585c0c00, 0x82040580, 0x00000101, - 0x050200b0, 0x585c0a00, 0x90040584, 0x050200af, - 0x91ccc40d, 0x58600c00, 0x82040580, 0x00000102, - 0x050200ac, 0x58600a00, 0x90040584, 0x050200ab, - 0x91cccc0f, 0x58640c00, 0x82040580, 0x00000103, - 0x05000004, 0x82040580, 0x00000203, 0x050200a5, - 0x58640a00, 0x82040580, 0x00000200, 0x050200a3, - 0x585c0801, 0x800409c0, 0x050000a2, 0x90040484, - 0x050210a0, 0x480750cf, 0x58600201, 0x800001c0, - 0x0500009f, 0x82001480, 0x00000fff, 0x0502109c, - 0x480354cd, 0x480352cc, 0x4c500000, 0x4c540000, - 0x4c580000, 0x6000b001, 0x4200a800, 0x00110672, - 0x91cca410, 0x5450a800, 0x8050a000, 0x8054a800, - 0x8058b040, 0x05fe07fc, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x40001000, 0x4c040000, 0x05b5ff22, - 0x5c000800, 0x05020005, 0x59a804cc, 0x8400054c, - 0x480354cc, 0x4803c857, 0x90040582, 0x05000055, - 0x90040583, 0x05000002, 0x0501f004, 0x59a800ce, - 0x90000582, 0x05000052, 0x812e59c0, 0x0500002b, - 0x592c1001, 0x800811c0, 0x05a40dbc, 0x4930100b, - 0x492c100a, 0x64001001, 0x4a001009, 0x0010b831, - 0x4a001003, 0x00110672, 0x4a001005, 0x00000200, - 0x592c0015, 0x48001007, 0x592c0016, 0x48001008, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c025800, - 0x0001f021, 0x4d2c0000, 0x4c5c0000, 0x4c600000, - 0x4c640000, 0x5832600b, 0x813261c0, 0x05a40da3, - 0x5832580a, 0x812e59c0, 0x05a40da0, 0x49786001, - 0x58300002, 0x82000580, 0x00000100, 0x0502005a, - 0x59a80ccd, 0x48065811, 0x59a808cf, 0x48065810, - 0x64ca5a0a, 0x0001fb82, 0x0005ffdc, 0x58600a01, - 0x59a802cd, 0x80040580, 0x0502004c, 0x59a81ccc, - 0x820c1d00, 0xffffffbc, 0x840c1d46, 0x480f54cc, - 0x0501f01e, 0x59cc3407, 0x82183500, 0x000000ff, - 0x90180585, 0x0502000c, 0x59340412, 0x800001c0, - 0x05000009, 0x80000040, 0x48026c12, 0x4d2c0000, - 0x59325809, 0x0005ffdc, 0x05fdff25, 0x5c025800, - 0x0501f00e, 0x05f1fed4, 0x59a80249, 0x84000518, - 0x48035249, 0x48035449, 0x0005ffdc, 0x05fdf7e4, - 0x59a800ce, 0x90000581, 0x05fc07b0, 0x5930041b, - 0x84000548, 0x4802641b, 0x5c00c800, 0x5c00c000, - 0x5c00b800, 0x5c025800, 0x1c01f000, 0x4803c856, - 0x812e59c0, 0x05fc07dc, 0x05f9fc53, 0x05a40d63, - 0x64c65a0a, 0x64625810, 0x59cc0007, 0x48025811, - 0x0001fb82, 0x05fdf7e4, 0x4807c857, 0x05fdf7ef, - 0x4807c857, 0x05fdf7ed, 0x4807c857, 0x05fdf7eb, - 0x4807c857, 0x05fdf7e9, 0x4807c857, 0x05fdf7e7, - 0x4807c857, 0x05fdf7e5, 0x4807c857, 0x05fdf7e3, - 0x4807c857, 0x05fdf7e1, 0x4807c857, 0x05fdf7df, - 0x4807c857, 0x05a5fd49, 0x05fdf7dc, 0x4803c857, - 0x05a5fd46, 0x05fdf7d9, 0x4807c857, 0x0501f80f, - 0x05fdf7d6, 0x4803c857, 0x4a006002, 0x00000100, - 0x640a5a0a, 0x0001fb82, 0x05fdf7a8, 0x59300403, - 0xb0000d98, 0x05000004, 0xb0000d9e, 0x05000002, - 0xb0000d9f, 0x1c01f000, 0x59a804cc, 0x82000500, - 0xfffffffc, 0x480354cc, 0x05d5f804, 0x05020006, - 0x05d5f814, 0x05000004, 0x64075042, 0x6006d800, - 0x05d1ff81, 0x1c01f000, 0x4933c857, 0x4d400000, - 0x60028000, 0x05b5fd62, 0x05f1fe96, 0x0500001f, - 0x59cc0408, 0x8c00051e, 0x05020009, 0x42000800, - 0x0010e512, 0x58040406, 0x8c000500, 0x05020004, - 0x59240200, 0x84000556, 0x48024a00, 0x60aa8000, - 0x59240400, 0x8c00050a, 0x05020004, 0x61fe89ff, - 0x60083000, 0x0505fedd, 0x4d3c0000, 0x600a7800, - 0x5924100b, 0x82081500, 0x00001fff, 0x41780800, - 0x05b5fe72, 0x5c027800, 0x42000000, 0x0010e454, - 0x0509ff08, 0x600a8000, 0x60100800, 0x05cdfc16, - 0x60040800, 0x05cdfcfd, 0x59cc0800, 0x82040d00, - 0x00ffffff, 0x5924100c, 0x48041001, 0x59cc0009, - 0x48024a0a, 0x48001200, 0x59cc000a, 0x48024c0a, - 0x48001400, 0x59240200, 0xb0000566, 0x48024a00, - 0x48064805, 0x49238830, 0x84040570, 0x48038832, - 0x812000f0, 0x80040540, 0x48026813, 0x60040000, - 0x05d1fd60, 0x5c028000, 0x59301009, 0x800811c0, - 0x05020009, 0x0501f823, 0x5924100b, 0x82081500, - 0x00001fff, 0x05b5feb9, 0x0501f81e, 0x0502001c, - 0x0501f018, 0x4d2c0000, 0x400a5800, 0x592c1208, - 0x82080500, 0x000000ff, 0x900005b0, 0x05020009, - 0x592c040b, 0x82000500, 0x000000ff, 0x05020003, - 0x05a9f88a, 0x0501f00a, 0x05d5ff81, 0x0501f008, - 0x592c020b, 0x80000110, 0x800001c0, 0x05020003, - 0x05a9f882, 0x0501f002, 0x05d9f93f, 0x5c025800, - 0x59300429, 0x900005a1, 0x000607dc, 0x1c01f000, - 0x4933c857, 0x4d340000, 0x4d240000, 0x4d200000, - 0x916c0583, 0x05020015, 0x599c0018, 0x8c000516, - 0x05000003, 0x05c5ff7f, 0x0501f010, 0x60100800, - 0x05cdfbc9, 0x59300429, 0x900005a1, 0x05000005, + 0x48064a00, 0x602c0800, 0x05cdfe76, 0x64066407, + 0x64066203, 0x64066403, 0x05e5fc9c, 0x0501f015, + 0x600c0800, 0x05cdfe6f, 0x4a026202, 0x0000ffff, + 0x64066203, 0x65466403, 0x05e5fc94, 0x0501f00d, + 0x64126006, 0x645a6403, 0x65466418, 0x4a026202, + 0x0000ffff, 0x0501f007, 0x600c2800, 0x0501fe4b, + 0x0501f004, 0x6008b000, 0x0501f83b, 0x05f1ff5a, + 0x5c027800, 0x5c028800, 0x5c028000, 0x5c024000, + 0x5c024800, 0x5c00b000, 0x1c01f000, 0x4933c857, + 0x61f2880f, 0x42003000, 0x00fffffc, 0x05cdfe80, + 0x05a60d65, 0x4936600a, 0x05fdfd75, 0x417a7800, + 0x05cdfe42, 0x600c0800, 0x05cdfe4a, 0x497a6c12, + 0x59300429, 0x900005a1, 0x05020003, 0x599c0208, + 0x48026c12, 0x64066203, 0x640a6403, 0x05e5f46b, + 0x492fc857, 0x4c580000, 0x4c000000, 0x8058b1c0, + 0x0500000a, 0x82580500, 0xfffffff0, 0x05a60d4e, + 0x8058b0d0, 0x592c040c, 0x82000500, 0xfffff0ff, + 0x80580540, 0x48025c0c, 0x5c000000, 0x5c00b000, + 0x1c01f000, 0x492fc857, 0x4c000000, 0x4c040000, + 0x800000d8, 0x592c0c0c, 0x82040d00, 0xffff0fff, + 0x80040540, 0x48025c0c, 0x5c000800, 0x5c000000, + 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325809, + 0x592c020b, 0x8400055e, 0x48025a0b, 0x4c500000, + 0x4c540000, 0x4c580000, 0x05fdffda, 0x05d9fa2f, + 0x64602800, 0x80142800, 0x8058b040, 0x91cca407, + 0x4014a800, 0x050dff35, 0x5c00b000, 0x5c00a800, + 0x5c00a000, 0x5c025800, 0x1c01f000, 0x59325809, + 0x592c0208, 0x82000580, 0x00000152, 0x1c01f000, + 0x59325809, 0x592c020b, 0x8400055c, 0x48025a0b, + 0x1c01f000, 0x59300809, 0x58040208, 0x82000500, + 0x000000ff, 0xb00005b9, 0x1c01f000, 0x5930002b, + 0x80000540, 0x05aa0ea9, 0x1c01f000, 0x59300008, + 0x82000500, 0x04000800, 0x82000580, 0x04000800, + 0x05020003, 0x59300221, 0x48025c13, 0x1c01f000, + 0x592c040b, 0x82000500, 0x0000f000, 0x82000580, + 0x00003000, 0x05020003, 0x4a026416, 0x00000100, + 0x1c01f000, 0x4d2c0000, 0x59325809, 0x59300203, + 0x4933c857, 0x492fc857, 0x493bc857, 0x4803c857, + 0x90003491, 0x05a61cf4, 0x0c01f803, 0x5c025800, + 0x1c01f000, 0x0010b936, 0x0010b93c, 0x0010b974, + 0x0010b936, 0x0010b936, 0x0010b936, 0x0010b936, + 0x0010b936, 0x0010b937, 0x0010b936, 0x0010b936, + 0x0010b936, 0x0010b936, 0x0010b936, 0x0010ba4d, + 0x0010b936, 0x0010b936, 0x05a5fcdf, 0xb13834a0, + 0x05a61cdd, 0x493a6403, 0x64066203, 0x05e5f3ef, + 0x91380593, 0x05020010, 0x492fc857, 0x05fdfcf7, + 0x05000003, 0x643a6203, 0x0501f005, 0x592c0010, + 0x800001c0, 0x05000005, 0x640a6203, 0x59a8005f, + 0x48026006, 0x1c01f000, 0x64025a0a, 0x0001fba8, + 0x0009f010, 0x913805a7, 0x0500001e, 0x91380594, + 0x05000018, 0x05fdfce5, 0x0500000c, 0xb13805a1, + 0x05000004, 0xb13805a0, 0x05fe07f3, 0x4937c857, + 0x05e9fc1f, 0x05f2000d, 0x59300203, 0x9000058e, + 0x050000f1, 0x05a5fcb8, 0x91380595, 0x05000003, + 0x91380596, 0x05a60cb4, 0x05e9fc15, 0x05f20003, + 0x59300203, 0x90000582, 0x05a60caf, 0x0501f00d, + 0x4937c857, 0x05e5ffbe, 0x64465812, 0x0501f004, + 0x4937c857, 0x05e5ffba, 0x64425812, 0x64c65a0a, + 0x64125811, 0x0001fba8, 0x05d1fdd3, 0x05edf772, + 0x59341400, 0x82081d00, 0x000000ff, 0x59300c03, + 0x480bc857, 0x4807c857, 0xb0040593, 0x05000020, + 0x90040582, 0x0500000f, 0x90040581, 0x05000010, + 0x90040583, 0x05000013, 0x90040585, 0x05000014, + 0x900405b3, 0x05000012, 0x90040580, 0x05000013, + 0x90040584, 0x05a60c8c, 0x0501f8a7, 0x0501f010, + 0x900c0583, 0x05000869, 0x0501f00d, 0x900c058b, + 0x0502000b, 0x601c0800, 0x05cdfd6e, 0x0501f008, + 0x900c0585, 0x0500087c, 0x0501f005, 0x900c0589, + 0x05000897, 0x0501f002, 0x0501f89c, 0x654a6403, + 0x59a810bb, 0x592c040f, 0x8c000500, 0x05000002, + 0x60201000, 0x592c040f, 0x8c000516, 0x05000002, + 0x90081418, 0x592c0010, 0x497a5811, 0x497a5812, + 0x80080c80, 0x05000008, 0x05001005, 0x641e5a0a, + 0x48065811, 0x40001000, 0x0501f004, 0x64565a0a, + 0x0501f002, 0x64025a0a, 0x480a5810, 0x4d2c0000, + 0x05a9f805, 0x0500003c, 0x5c001000, 0x41cc0800, + 0x5808040f, 0x8c000516, 0x05020002, 0x91cc0c06, + 0x58081810, 0x58082015, 0x58082816, 0x58080004, + 0x48025806, 0x48065803, 0x480a580a, 0x480e5805, + 0x48125807, 0x48165808, 0x64025801, 0x4a025809, + 0x00101580, 0x900c1c03, 0x800c1904, 0x50040000, + 0x9c0001c0, 0x44000800, 0x80040800, 0x800c1840, + 0x05fe07fb, 0x5808040f, 0x8c000500, 0x0500000b, + 0x41cc0800, 0x8c000516, 0x05000002, 0x91cc0c06, + 0x64040800, 0x80040800, 0x46000800, 0x00000900, + 0x84000500, 0x4800140f, 0x42007000, 0x000211e8, + 0x58380000, 0x90000580, 0x0502000b, 0x58380807, + 0x58380005, 0x80040540, 0x05020007, 0x412c1000, + 0x0001f829, 0x59dc0806, 0x8c04053e, 0x05fc07fe, + 0x0001f06e, 0x412c1000, 0x0001f829, 0x850e1d5c, + 0x05e1f000, 0x5c025800, 0x64b25a0a, 0x497a5810, + 0x0001fba8, 0x0009f010, 0x91380595, 0x05020008, + 0x59a800d6, 0x8c000502, 0x05020007, 0x41780800, + 0x05cdfe40, 0x60100800, 0x05cdf502, 0x601c0800, + 0x05cdf500, 0x05d5f997, 0x60401000, 0x05020008, + 0x59340002, 0x82000500, 0x00ff0000, 0x82000580, + 0x00ff0000, 0x05fc07f2, 0x60201000, 0x05d1fd79, + 0x05fc07ef, 0x592c040f, 0x84000540, 0x48025c0f, + 0x05fdf7ef, 0x91380595, 0x0502000b, 0x59a800d6, + 0x8c000502, 0x0502000a, 0x05cdfe9b, 0x4d3c0000, + 0x417a7800, 0x05cdfcdd, 0x5c027800, 0x60180800, + 0x05cdf4e4, 0x60100800, 0x05cdf4e2, 0x05d5f979, + 0x60401000, 0x05020008, 0x59340002, 0x82000500, + 0x00ff0000, 0x82000580, 0x00ff0000, 0x05fc07ef, + 0x60201000, 0x05d1fd5b, 0x05fc07ec, 0x592c040f, + 0x84000540, 0x48025c0f, 0x05fdf7ef, 0x60100800, + 0x05cdf4d0, 0x91380595, 0x05020003, 0x0509fb34, + 0x05d008eb, 0x1c01f000, 0x91380595, 0x05020015, + 0x4c580000, 0x91cc1408, 0x6008b000, 0x91341c06, + 0x05f5fb50, 0x0502000e, 0x91cc140a, 0x6008b000, + 0x91341c08, 0x05f5fb4b, 0x05020009, 0x59342200, + 0x59cc1007, 0x800811c0, 0x05000003, 0x480a6801, + 0x84102542, 0x8410251a, 0x48126a00, 0x5c00b000, + 0x1c01f000, 0x4803c856, 0xb13805a1, 0x05000019, + 0xb13805a0, 0x05000017, 0xb13805a2, 0x05020003, + 0x644a5812, 0x0501f004, 0xb13805a3, 0x0502001b, + 0x644e5812, 0x64c65a0a, 0x64125811, 0x59cc0001, + 0x48025813, 0x59cc0002, 0x48025814, 0x59cc0003, + 0x48025815, 0x59cc0004, 0x48025816, 0x59cc0005, + 0x48025817, 0x0001fba8, 0x05d1fcdf, 0x0009f010, + 0x592c0010, 0x800001c0, 0x05000005, 0x59a8005f, + 0x48026006, 0x640a6203, 0x1c01f000, 0x64025a0a, + 0x0001fba8, 0x0009f810, 0x1c01f000, 0x42000000, + 0x00112410, 0x050dfce2, 0x05e5ff5b, 0x59300203, + 0x4933c857, 0x4803c857, 0x90000c91, 0x05a61b9a, + 0x0c01f802, 0x05e5f745, 0x0010ba90, 0x0010ba99, + 0x0010ba91, 0x0010ba8f, 0x0010ba8f, 0x0010ba8f, + 0x0010ba8f, 0x0010ba8f, 0x0010ba8f, 0x0010ba8f, + 0x0010ba8f, 0x0010ba8f, 0x0010ba8f, 0x0010ba8f, + 0x0010ba91, 0x0010ba8f, 0x0010ba8f, 0x05a5fb86, + 0x1c01f000, 0x59300403, 0xb0000592, 0x05f804a6, + 0x05d1fcb1, 0x59325809, 0x641a5a0a, 0x0001fba8, + 0x05edf64d, 0x59301804, 0x840c0520, 0x48026004, + 0x598c000b, 0x81300580, 0x0502000f, 0x8c0c0520, + 0x0502000f, 0x42001000, 0x00112322, 0x50081000, + 0x58080002, 0x82000580, 0x00000100, 0x0500000b, + 0x5808000c, 0x81300580, 0x05a60b6b, 0x4978100c, + 0x0501f003, 0x8c0c0520, 0x05fe07e3, 0x05e5fbc0, + 0x05fc07e1, 0x05a5fb64, 0x05e9fa1c, 0x05fc07fc, + 0x59300203, 0x90000c91, 0x05a61b5f, 0x0c01f7c7, + 0x4933c857, 0x4c500000, 0x4c540000, 0x4c580000, + 0x592c0c0b, 0x48065817, 0x59cc0809, 0x4806580b, + 0x59cc0808, 0x4806580f, 0x59a808d5, 0x82040500, + 0x000003ff, 0x800010c4, 0x8c040514, 0x05000004, + 0x59cc0002, 0x90000503, 0x80081480, 0x480a621c, + 0x412c0800, 0x05a5feec, 0x05a40b47, 0x492c080d, + 0x5804040c, 0x84000552, 0x84000540, 0x48000c0c, + 0x90081403, 0x80081104, 0x91cca406, 0x912cac08, + 0x60400800, 0x90080490, 0x05021003, 0x40080800, + 0x80000580, 0x4004b000, 0x4c000000, 0x050dfd7e, + 0x5c000000, 0x800001c0, 0x0500000a, 0x412c1000, + 0x4c000000, 0x05a5fed4, 0x05a40b2f, 0x492c1001, + 0x912cac08, 0x5c000000, 0x40001000, 0x05fdf7ee, + 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000, + 0x4933c857, 0x4d2c0000, 0x4c380000, 0x59325809, + 0x5930021c, 0x48025a0c, 0x59301013, 0x640a6203, + 0x592c020e, 0x8c000500, 0x05000004, 0x59300017, + 0x592c1013, 0x80081480, 0x40080000, 0x0501f961, + 0x80001540, 0x05020007, 0x64025a0a, 0x592c000f, + 0x82000500, 0x00000c00, 0x05000009, 0x0501f009, + 0x8c08053e, 0x05000005, 0x641e5a0a, 0x80081080, + 0x80081000, 0x0501f002, 0x64565a0a, 0x480a580b, + 0x42000000, 0x00114294, 0x50007000, 0x5838000b, + 0x80000540, 0x05020007, 0x4930700c, 0x4930700b, + 0x58380002, 0x90000580, 0x05020808, 0x0501f004, + 0x90001400, 0x45301000, 0x4930700b, 0x5c007000, + 0x5c025800, 0x1c01f000, 0x4933c857, 0x592c000d, + 0x40001000, 0x4800700a, 0x90080408, 0x48007003, + 0x592c0011, 0x592c1012, 0x592c1804, 0x480c7006, + 0x48007007, 0x48087008, 0x592c0017, 0x592c120c, + 0x80080c80, 0x05001002, 0x40001000, 0x90081403, + 0x80081104, 0x90080490, 0x05021003, 0x80000580, + 0x0501f002, 0x60401000, 0x4800700d, 0x48087004, + 0x800810c4, 0x48087005, 0x40381000, 0x0001f029, + 0x4d2c0000, 0x05a5fe67, 0x05a40ad3, 0x42000800, + 0x00114294, 0x452c0800, 0x497a580b, 0x497a580c, + 0x497a580d, 0x4a025809, 0x0010bb50, 0x4a025802, + 0x00000100, 0x64025801, 0x5c025800, 0x1c01f000, + 0x4833c857, 0x4d300000, 0x4d2c0000, 0x4c5c0000, + 0x4030b800, 0x585c000a, 0x80025d40, 0x05020004, + 0x585c000c, 0x4c000000, 0x0501f03b, 0x585c0002, + 0x82000580, 0x00000100, 0x0502001c, 0x592c0801, + 0x4c040000, 0x05a5fe68, 0x5c000800, 0x800409c0, + 0x05000017, 0x4804b80a, 0x585c100d, 0x800811c0, + 0x05020004, 0x40065800, 0x05a5fe68, 0x0501f010, + 0x90080490, 0x05021003, 0x80000580, 0x0501f002, + 0x60401000, 0x4800b80d, 0x4808b804, 0x800810c4, + 0x4808b805, 0x90040408, 0x4800b803, 0x405c1000, + 0x0001f829, 0x0501f022, 0x0501f825, 0x585c000c, + 0x80026540, 0x59300000, 0x80000d40, 0x05020002, + 0x4800b80b, 0x4800b80c, 0x497a6000, 0x4c000000, + 0x4978b80a, 0x59325809, 0x4a025a08, 0x00000103, + 0x59300402, 0x48025c0a, 0x592c100f, 0x4c080000, + 0x0001fba8, 0x0501f8ca, 0x05f9ffb3, 0x5c001000, + 0x8c080518, 0x05000003, 0x05fdf8ce, 0x0501f002, + 0x0009f810, 0x405c7000, 0x5c000000, 0x80026540, + 0x05000003, 0x59325809, 0x05fdff88, 0x5c00b800, + 0x5c025800, 0x5c026000, 0x1c01f000, 0x483bc857, + 0x5838000a, 0x40025800, 0x05a5fe30, 0x5838000c, + 0x80026540, 0x59300009, 0x80025d40, 0x640a5a0a, + 0x1c01f000, 0x4803c857, 0x4933c857, 0x4d1c0000, + 0x497a601e, 0x41323800, 0x40026000, 0x4d3c0000, + 0x60167800, 0x0501f837, 0x5c027800, 0x411e6000, + 0x4933c857, 0x59300416, 0x84000502, 0x48026416, + 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857, + 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000, + 0x050df920, 0x05b5faf2, 0x59240400, 0x8c00050a, + 0x05020006, 0x40602800, 0x405c3000, 0x0509fb26, + 0x90000541, 0x0501f002, 0x80000580, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4d300000, + 0x42026000, 0x00115aa4, 0x0501fda4, 0x05021013, + 0x59300c07, 0x90040581, 0x05000009, 0x90040584, + 0x05000004, 0x90040590, 0x05f80aeb, 0x0501f007, + 0x59300203, 0x90000d87, 0x05000004, 0x4807c857, + 0x05fdf981, 0x05020807, 0x91326430, 0x41580000, + 0x81300480, 0x05fc17ef, 0x5c026000, 0x1c01f000, + 0x4933c857, 0x59300403, 0x4803c857, 0x05e5fde6, + 0x4df00000, 0x59301407, 0x59300203, 0x4803c857, + 0x90080d82, 0x05000016, 0x90080d81, 0x0500000b, + 0x90080d84, 0x05000005, 0x4933c856, 0x5c03e000, + 0x05e40dca, 0x0501f03e, 0x90000d88, 0x0500002e, + 0x90000d87, 0x0500002c, 0x90000d81, 0x05000013, + 0x90000d82, 0x05000028, 0x90000d85, 0x05000026, + 0x90000d8e, 0x05000024, 0x05a5fa0f, 0x90000d89, + 0x0500000a, 0x90000d8b, 0x05000008, 0x90000d8a, + 0x0500001d, 0x90000d8c, 0x0500001b, 0x90000d8e, + 0x05000019, 0x05a5fa04, 0x598c000b, 0x81300580, + 0x05020003, 0x05e9f8b9, 0x05020013, 0x59300004, + 0x4803c857, 0x8c000520, 0x05000004, 0x84000520, + 0x48026004, 0x0501f00c, 0x05e5fa51, 0x05a609f6, + 0x5c03e000, 0x05e40da1, 0x59300407, 0x90000d82, + 0x05000013, 0x05d1fb20, 0x05f9ff3d, 0x05f00bd6, + 0x0501f00f, 0x5c03e000, 0x05e40d98, 0x59300407, + 0x90000d82, 0x0500000a, 0x5930081d, 0x58040200, + 0x8c000500, 0x050002b4, 0x05d1fb13, 0x05f9ff30, + 0x05f00bc9, 0x8d3c0500, 0x05000003, 0x050df986, + 0x05edf4ad, 0x64066229, 0x4a026403, 0x00000085, + 0x64266203, 0x640a6407, 0x42000800, 0x80000040, + 0x0005f6e2, 0x60007040, 0x4203e000, 0xb0800000, + 0x6033f800, 0x40000000, 0x40000000, 0x40000000, + 0x0501b004, 0x80387040, 0x05a409cb, 0x05fdf7f9, + 0x1c01f000, 0x83300480, 0x001159e4, 0x05001006, + 0x41540000, 0x81300480, 0x05021003, 0x80000580, + 0x1c01f000, 0x81780080, 0x1c01f000, 0x59300027, + 0x80000540, 0x05000006, 0x4d2c0000, 0x40025800, + 0x05a5fd6d, 0x497a6027, 0x5c025800, 0x1c01f000, + 0x592c720e, 0x8c380500, 0x05020009, 0x59307008, + 0x8c380516, 0x05000006, 0x59307009, 0x58387013, + 0x59300014, 0x80380480, 0x05001002, 0x1c01f000, + 0x59300416, 0x8c000514, 0x05000005, 0x59300018, + 0x4803c857, 0x80380480, 0x05fe17f9, 0x59300013, + 0x4803c857, 0x05fdf7f6, 0x59a808bb, 0x59cc2808, + 0x4c5c0000, 0x4178b800, 0x8c14051e, 0x05000002, + 0x805cb800, 0x82140500, 0x00000c00, 0x05000004, + 0x905c0410, 0x80040480, 0x05001018, 0x80001580, + 0x8c140512, 0x05000005, 0x905c0414, 0x80040480, + 0x05001012, 0x59cc100a, 0x80000580, 0x8c140510, + 0x05000005, 0x905c0418, 0x80040480, 0x0500100b, + 0x59cc000b, 0x80080400, 0x05001008, 0x05000005, + 0x905c0418, 0x80040480, 0x05001004, 0x80000580, + 0x5c00b800, 0x1c01f000, 0x42000000, 0x001123ed, + 0x050dfabb, 0x90000541, 0x05fdf7fa, 0x4933c857, + 0x4937c857, 0x4923c857, 0x4927c857, 0x492fc857, + 0x48efc857, 0x4d1c0000, 0x4d300000, 0x41323800, + 0x05edfc70, 0x0500001f, 0x48ee602d, 0x4926601d, + 0x4936600a, 0x05fdf97a, 0x591c0407, 0x90000583, + 0x05000008, 0x591c0202, 0x4803c857, 0x4802641b, + 0x591c0402, 0x4802621b, 0x4803c857, 0x0501f009, + 0x591c0017, 0x48026017, 0x591c0202, 0x4803c857, + 0x4802621b, 0x591c0402, 0x4802641b, 0x4803c857, + 0x491e602a, 0x64066407, 0x492e6009, 0x4d380000, + 0x615e7000, 0x0009f839, 0x5c027000, 0x90000541, + 0x5c026000, 0x5c023800, 0x1c01f000, 0x4933c857, + 0x493bc857, 0x4937c857, 0x4d2c0000, 0x4c500000, + 0x4c540000, 0x4c580000, 0x59325809, 0x05f9fd7f, + 0x05000017, 0x91cca406, 0x912cac0a, 0x91380596, + 0x05020007, 0x59a800bb, 0x90000588, 0x0502000e, + 0x492fc857, 0x6008b000, 0x0501f008, 0x91380595, + 0x05020009, 0x492fc857, 0x59a800bb, 0x90000598, + 0x05020005, 0x6018b000, 0x050dfb3c, 0x05edfe31, + 0x0501f003, 0x05f1fb14, 0x0009f810, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000, + 0x4933c857, 0x05e5fce0, 0x4df00000, 0x59300203, + 0x90000c91, 0x05a61920, 0x0c01f001, 0x0010bd09, + 0x0010bd08, 0x0010bd0e, 0x0010bd26, 0x0010bd0d, + 0x0010bd08, 0x0010bd08, 0x0010bd08, 0x0010bd08, + 0x0010bd08, 0x0010bd08, 0x0010bd08, 0x0010bd08, + 0x0010bd08, 0x0010bd08, 0x0010bd08, 0x0010bd0e, + 0x05a5f90d, 0x5c03e000, 0x05e40cb8, 0x80000580, + 0x1c01f000, 0x05a9fbda, 0x5c03e000, 0x05e40cb3, + 0x8d3c0502, 0x05020011, 0x4d2c0000, 0x59325809, + 0x64165a0a, 0x0001fba8, 0x5c025800, 0x497a6009, + 0x8d3c0500, 0x0502000b, 0x642a6229, 0x4a026403, + 0x00000085, 0x64266203, 0x640a6407, 0x42000800, + 0x80004040, 0x0005fee2, 0x81780080, 0x1c01f000, + 0x05edfbc1, 0x05fdf7fd, 0x05f9f984, 0x05020003, + 0x05e5ff76, 0x05020005, 0x05e5f865, 0x05fc07e3, + 0x05e5fbbd, 0x05a608e8, 0x59300203, 0x90000d83, + 0x05a408e5, 0x90000c91, 0x05a618e3, 0x0c01f7c4, + 0x4803c856, 0x05edfbe3, 0x0500002e, 0x59300402, + 0x4802621b, 0x59a804d1, 0x84000540, 0x84000502, + 0x480354d1, 0x812e59c0, 0x05000011, 0x82600580, + 0x00003000, 0x05020003, 0x4a026416, 0x00000100, + 0x592c020b, 0x480352d2, 0x480352d1, 0x592c000f, + 0x480350d3, 0x592c020c, 0x800000c2, 0x800008c4, + 0x80040400, 0x48026006, 0x0501f00a, 0x640b50d3, + 0x59a8005f, 0x800000c4, 0x48026006, 0x417a4000, + 0x61fa880f, 0x42003000, 0x00fffffe, 0x05cdf9d8, + 0x4926601d, 0x599c0208, 0x48026c12, 0x59340002, + 0x4802600b, 0x497a641b, 0x4936600a, 0x492e6009, + 0x64066407, 0x61627000, 0x0009f839, 0x90000541, + 0x1c01f000, 0x4d2c0000, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x4803c856, 0x59325809, 0x91380595, + 0x050200b8, 0x812e59c0, 0x05000003, 0x05f9fce3, + 0x05a408a5, 0x59a800bb, 0x82000580, 0x00000228, + 0x050200ab, 0x59cc0c07, 0x82040580, 0x00000101, + 0x050200b7, 0x59cc0a07, 0x59300402, 0x80040580, + 0x050200b5, 0x59cc0a0a, 0x82040580, 0x00000228, + 0x050200b3, 0x91ccbc0b, 0x585c0c00, 0x82040580, + 0x00000101, 0x050200b0, 0x585c0a00, 0x90040584, + 0x050200af, 0x91ccc40d, 0x58600c00, 0x82040580, + 0x00000102, 0x050200ac, 0x58600a00, 0x90040584, + 0x050200ab, 0x91cccc0f, 0x58640c00, 0x82040580, + 0x00000103, 0x05000004, 0x82040580, 0x00000203, + 0x050200a5, 0x58640a00, 0x82040580, 0x00000200, + 0x050200a3, 0x585c0801, 0x800409c0, 0x050000a2, + 0x90040484, 0x050210a0, 0x480750d4, 0x58600201, + 0x800001c0, 0x0500009f, 0x82001480, 0x00000fff, + 0x0502109c, 0x480354d2, 0x480352d1, 0x4c500000, + 0x4c540000, 0x4c580000, 0x6000b001, 0x4200a800, + 0x00114616, 0x91cca410, 0x5450a800, 0x8050a000, + 0x8054a800, 0x8058b040, 0x05fe07fc, 0x5c00b000, + 0x5c00a800, 0x5c00a000, 0x40001000, 0x4c040000, + 0x05b5fa18, 0x5c000800, 0x05020005, 0x59a804d1, + 0x8400054c, 0x480354d1, 0x4803c857, 0x90040582, + 0x05000055, 0x90040583, 0x05000002, 0x0501f004, + 0x59a800d3, 0x90000582, 0x05000052, 0x812e59c0, + 0x0500002b, 0x592c1001, 0x800811c0, 0x05a40846, + 0x4930100b, 0x492c100a, 0x64001001, 0x4a001009, + 0x0010bde2, 0x4a001003, 0x00114616, 0x4a001005, + 0x00000200, 0x592c0015, 0x48001007, 0x592c0016, + 0x48001008, 0x5c00c800, 0x5c00c000, 0x5c00b800, + 0x5c025800, 0x0001f029, 0x4d2c0000, 0x4c5c0000, + 0x4c600000, 0x4c640000, 0x5832600b, 0x813261c0, + 0x05a4082d, 0x5832580a, 0x812e59c0, 0x05a4082a, + 0x49786001, 0x58300002, 0x82000580, 0x00000100, + 0x0502005a, 0x59a80cd2, 0x48065811, 0x59a808d4, + 0x48065810, 0x64ca5a0a, 0x0001fba8, 0x0009f810, + 0x58600a01, 0x59a802d2, 0x80040580, 0x0502004c, + 0x59a81cd1, 0x820c1d00, 0xffffffbc, 0x840c1d46, + 0x480f54d1, 0x0501f01e, 0x59cc3407, 0x82183500, + 0x000000ff, 0x90180585, 0x0502000c, 0x59340412, + 0x800001c0, 0x05000009, 0x80000040, 0x48026c12, + 0x4d2c0000, 0x59325809, 0x0009f810, 0x05fdff25, + 0x5c025800, 0x0501f00e, 0x05f1fe66, 0x59a8024c, + 0x84000518, 0x4803524c, 0x4803544c, 0x0009f810, + 0x05fdf7e4, 0x59a800d3, 0x90000581, 0x05fc07b0, + 0x5930041b, 0x84000548, 0x4802641b, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x5c025800, 0x1c01f000, + 0x4803c856, 0x812e59c0, 0x05fc07dc, 0x05f9fc2b, + 0x05a00fed, 0x64c65a0a, 0x64625810, 0x59cc0007, + 0x48025811, 0x0001fba8, 0x05fdf7e4, 0x4807c857, + 0x05fdf7ef, 0x4807c857, 0x05fdf7ed, 0x4807c857, + 0x05fdf7eb, 0x4807c857, 0x05fdf7e9, 0x4807c857, + 0x05fdf7e7, 0x4807c857, 0x05fdf7e5, 0x4807c857, + 0x05fdf7e3, 0x4807c857, 0x05fdf7e1, 0x4807c857, + 0x05fdf7df, 0x4807c857, 0x05a1ffd3, 0x05fdf7dc, + 0x4803c857, 0x05a1ffd0, 0x05fdf7d9, 0x4807c857, + 0x0501f80f, 0x05fdf7d6, 0x4803c857, 0x4a006002, + 0x00000100, 0x640a5a0a, 0x0001fba8, 0x05fdf7a8, + 0x59300403, 0xb0000d98, 0x05000004, 0xb0000d9e, + 0x05000002, 0xb0000d9f, 0x1c01f000, 0x59a804d1, + 0x82000500, 0xfffffffc, 0x480354d1, 0x05d1fd3d, + 0x05020006, 0x05d1fd4d, 0x05000004, 0x64075045, + 0x6006d800, 0x05d1fcb4, 0x1c01f000, 0x4933c857, + 0x4d400000, 0x60028000, 0x05b5f84d, 0x05f1fe28, + 0x0500001f, 0x59cc0408, 0x8c00051e, 0x05020009, + 0x42000800, 0x001124b6, 0x58040406, 0x8c000500, + 0x05020004, 0x59240200, 0x84000556, 0x48024a00, + 0x60aa8000, 0x59240400, 0x8c00050a, 0x05020004, + 0x61fe89ff, 0x60083000, 0x0509f873, 0x4d3c0000, + 0x600a7800, 0x5924100b, 0x82081500, 0x00001fff, + 0x41780800, 0x05b5f968, 0x5c027800, 0x42000000, + 0x001123f8, 0x050df8d2, 0x600a8000, 0x60100800, + 0x05cdf878, 0x60040800, 0x05cdf9b2, 0x59cc0800, + 0x82040d00, 0x00ffffff, 0x5924100c, 0x48041001, + 0x59cc0009, 0x48024a0a, 0x48001200, 0x59cc000a, + 0x48024c0a, 0x48001400, 0x59240200, 0xb0000566, + 0x48024a00, 0x48064805, 0x49238830, 0x84040570, + 0x48038832, 0x812000f0, 0x80040540, 0x48026813, + 0x60040000, 0x05d1fa93, 0x5c028000, 0x59301009, + 0x800811c0, 0x05020009, 0x0501f823, 0x5924100b, + 0x82081500, 0x00001fff, 0x05b5f9af, 0x0501f81e, + 0x0502001c, 0x0501f018, 0x4d2c0000, 0x400a5800, + 0x592c1208, 0x82080500, 0x000000ff, 0x900005b0, + 0x05020009, 0x592c040b, 0x82000500, 0x000000ff, + 0x05020003, 0x05a5fb10, 0x0501f00a, 0x05d5fce6, + 0x0501f008, 0x592c020b, 0x80000110, 0x800001c0, + 0x05020003, 0x05a5fb08, 0x0501f002, 0x05d5fef6, + 0x5c025800, 0x59300429, 0x900005a1, 0x000a0010, + 0x1c01f000, 0x4933c857, 0x4d340000, 0x4d240000, + 0x4d200000, 0x916c0583, 0x05020015, 0x599c0018, + 0x8c000516, 0x05000003, 0x05c5fb71, 0x0501f010, + 0x60100800, 0x05cdf82b, 0x59300429, 0x900005a1, + 0x05000005, 0x59240400, 0x8c00050c, 0x05000004, + 0x64866429, 0x05fdf9ce, 0x90000541, 0x5c024000, + 0x5c024800, 0x5c026800, 0x1c01f000, 0x80000580, + 0x05fdf7fb, 0x4d340000, 0x5932680a, 0x05cdfe78, + 0x5c026800, 0x0009f010, 0x4803c856, 0x4c5c0000, + 0x4d200000, 0x4014b800, 0x05b1ffc5, 0x59a800c0, + 0x80000040, 0x480350c0, 0x916c0582, 0x05020004, + 0x59240200, 0x8400051a, 0x48024a00, 0x59240200, + 0x82000500, 0xfffffeef, 0x84000546, 0x48024a00, + 0x497a4805, 0x4d400000, 0x60068000, 0x41781800, + 0x405c2800, 0x60040000, 0x05d1fa32, 0x60aa8000, + 0x4d3c0000, 0x600a7800, 0x05b5f805, 0x5c027800, + 0x5c028000, 0x5c024000, 0x5c00b800, 0x813261c0, + 0x05ee01d9, 0x1c01f000, 0x59303009, 0x58181a08, + 0x820c1d00, 0x000000ff, 0xb00c0588, 0x05000003, + 0xb00c05aa, 0x05020048, 0x59300004, 0x8c000516, + 0x05020045, 0x5818040c, 0x8c000500, 0x05000042, + 0x42000000, 0x00114294, 0x50006000, 0x41781800, + 0x5830200c, 0x41300000, 0x80100580, 0x05000006, + 0x40101800, 0x580c2000, 0x801021c0, 0x05fe07fa, + 0x0501f035, 0x4933c857, 0x59302000, 0x497a6000, + 0x800c19c0, 0x0502001e, 0x4933c856, 0x42007000, + 0x000211e8, 0x5830000a, 0x800001c0, 0x05000018, + 0x4978600a, 0x58380001, 0x80300580, 0x05020008, + 0x4933c856, 0x49787002, 0x4810600c, 0x801021c0, + 0x0502001d, 0x4978600b, 0x0501f01b, 0x4933c856, + 0x4810600c, 0x801021c0, 0x05020002, 0x4978600b, + 0x4c180000, 0x4c300000, 0x05a5fbf5, 0x5c006000, + 0x05fdfc08, 0x5c003000, 0x0501f00f, 0x4933c856, + 0x800c19c0, 0x05020008, 0x801021c0, 0x05000003, + 0x4810600c, 0x0501f008, 0x4978600c, 0x4978600b, + 0x0501f005, 0x48101800, 0x801021c0, 0x05020002, + 0x480c600b, 0x5818040c, 0x84000500, 0x4800340c, + 0x4978320c, 0x1c01f000, 0x42001000, 0x00112325, + 0x58080000, 0x4937c857, 0x4803c857, 0x90000580, + 0x0500001b, 0x58080005, 0x49341005, 0x80000540, + 0x05020003, 0x49341004, 0x1c01f000, 0x4803c857, + 0x49340016, 0x1c01f000, 0x42001000, 0x00112325, + 0x58080000, 0x4937c857, 0x4947c857, 0x4803c857, + 0x90000580, 0x0500001a, 0x58080003, 0x49341003, + 0x80000540, 0x05020003, 0x49341002, 0x1c01f000, + 0x4803c857, 0x49340016, 0x1c01f000, 0x4937c857, + 0x0501f83c, 0x05a00e94, 0x42001000, 0x00112325, + 0x64081000, 0x4c080000, 0x0501f8c1, 0x5c001000, + 0x05a20e8d, 0x58081001, 0x64001001, 0x4a001009, + 0x0010bffb, 0x49341003, 0x0501f010, 0x4937c857, + 0x0501f816, 0x05a00e84, 0x42001000, 0x00112325, + 0x64041000, 0x58081001, 0x64041001, 0x4a001009, + 0x0010bfd3, 0x49341003, 0x4c080000, 0x0501f8ac, + 0x5c001000, 0x05a20e78, 0x40100000, 0x800c0540, + 0x05a00e75, 0x4934100b, 0x65701005, 0x480c1007, + 0x48101008, 0x0001f029, 0x4c5c0000, 0x4c600000, + 0x4937c857, 0x8344bc00, 0x0010db80, 0x505c0000, + 0x8200c580, 0x40000000, 0x82600500, 0xe0000000, + 0x05020007, 0x82600540, 0x60000000, 0x4400b800, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8260c580, + 0x40000000, 0x4863c857, 0x80000580, 0x05fdf7f9, + 0x4c5c0000, 0x4c600000, 0x4937c857, 0x59368c03, + 0x8344bc00, 0x0010db80, 0x505c0000, 0x8200c580, + 0x20000000, 0x82600500, 0xe0000000, 0x05020007, + 0x82600540, 0x80000000, 0x4400b800, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x8260c580, 0x20000000, + 0x4863c857, 0x80000580, 0x05fdf7f9, 0x4d340000, + 0x4d440000, 0x4c5c0000, 0x49786009, 0x58300002, + 0x82000580, 0x00000100, 0x05020012, 0x5830000b, + 0x80026d40, 0x4937c857, 0x0500000a, 0x59368c03, + 0x8344bc00, 0x0010db80, 0x83340540, 0x20000000, + 0x4400b800, 0x4a026815, 0x00020000, 0x497a6816, + 0x5c00b800, 0x5c028800, 0x5c026800, 0x0501f041, + 0x5830000b, 0x80026d40, 0x4803c857, 0x05fc07f9, + 0x59368c03, 0x8344bc00, 0x0010db80, 0x505c0000, + 0x82000500, 0x00ffffff, 0x82000540, 0x40000000, + 0x84000578, 0x4400b800, 0x05fdf7ee, 0x4d340000, + 0x4d2c0000, 0x4d440000, 0x4c5c0000, 0x49786009, + 0x58300002, 0x82000580, 0x00000100, 0x05020025, + 0x5830000b, 0x80026d40, 0x4937c857, 0x0500001c, + 0x59368c03, 0x8344bc00, 0x0010db80, 0x505c0000, + 0x4947c857, 0x4803c857, 0x82000d00, 0xe0000000, + 0x82000500, 0x00ffffff, 0x82041580, 0xa0000000, + 0x05020008, 0x4a026815, 0x00020000, 0x497a6816, + 0x82000540, 0x20000000, 0x4400b800, 0x0501f008, + 0x42000800, 0x40000000, 0x59340002, 0x80040540, + 0x4400b800, 0x41365800, 0x05a5f9a7, 0x5c00b800, + 0x5c028800, 0x5c025800, 0x5c026800, 0x0501f005, + 0x5830000b, 0x80026d40, 0x4937c857, 0x05fdf7f8, + 0x4d340000, 0x42001000, 0x00112325, 0x58080002, + 0x80026d40, 0x05000009, 0x4937c857, 0x59340016, + 0x48001002, 0x80000540, 0x05020002, 0x48001003, + 0x05fdff57, 0x0501f00c, 0x58080004, 0x80026d40, + 0x05000008, 0x59340016, 0x48001004, 0x80000540, + 0x05020002, 0x48001005, 0x05fdff3d, 0x0501f002, + 0x64001000, 0x5c026800, 0x1c01f000, 0x4937c857, + 0x83440c80, 0x00000800, 0x0500100c, 0x61701000, + 0x05e1fbdf, 0x59001801, 0x4c000000, 0x40040000, + 0x800c1c00, 0x5c000000, 0x59002002, 0x80102440, + 0x80000580, 0x1c01f000, 0x4947c857, 0x41781800, + 0x41782000, 0x90000541, 0x05fdf7fb, 0x4933c857, + 0x4927c857, 0x59a8024c, 0x90000543, 0x4803524c, + 0x4c5c0000, 0x4d400000, 0x59ccb800, 0x825cbd00, + 0x00ffffff, 0x60028000, 0x05b1fe4d, 0x05f1fc28, + 0x485f5040, 0x0500001d, 0x4d3c0000, 0x60aa8000, + 0x59240400, 0x8c00050a, 0x05020006, 0x59240200, + 0x84000556, 0x48024a00, 0x60083000, 0x0505fe73, + 0x600a7800, 0x05b1fe96, 0x42000000, 0x001123f8, + 0x0509fedf, 0x59cc0408, 0x8c00051e, 0x05020009, + 0x42000800, 0x001124b6, 0x58040406, 0x8c000500, + 0x05020004, 0x59a8024c, 0x84000552, 0x4803524c, + 0x600a8000, 0x5c027800, 0x41780800, 0x05c9ffb5, + 0x59240200, 0x4803c857, 0x4927c857, 0xb0000566, + 0x48024a00, 0x485e4805, 0x812000f0, 0x805c0540, + 0x48026813, 0x49238830, 0x84000570, 0x48038832, + 0x59a8124c, 0x59cc0408, 0x8c00051a, 0x05020005, + 0x84081514, 0x4a0370e5, 0x00000800, 0x0501f004, + 0x84081554, 0x4a0370e5, 0x00000c00, 0x84081548, + 0x480b524c, 0x480b524c, 0x05f9fd4f, 0x59cc0408, + 0x8c000518, 0x0500000a, 0x59a8024c, 0x84000508, + 0x8400054a, 0x4803524c, 0x49238830, 0x845c0570, + 0x48038832, 0x60100800, 0x05c9fe52, 0x59a80a4c, + 0x84040d50, 0x59cc0013, 0x8c00053e, 0x05000003, + 0x8c000536, 0x05000004, 0x59cc0017, 0x8c000536, + 0x05020002, 0x84040d10, 0x4807524c, 0x4807544c, + 0x42001800, 0x001142a2, 0x8c040508, 0x05020007, 0x59240400, 0x8c00050c, 0x05000004, 0x64866429, - 0x05fdf9d9, 0x90000541, 0x5c024000, 0x5c024800, - 0x5c026800, 0x1c01f000, 0x80000580, 0x05fdf7fb, - 0x4d340000, 0x5932680a, 0x05d1f95a, 0x5c026800, - 0x0005f7dc, 0x4803c856, 0x4c5c0000, 0x4d200000, - 0x4014b800, 0x05b5fcda, 0x59a800bb, 0x80000040, - 0x480350bb, 0x916c0582, 0x05020004, 0x59240200, - 0x8400051a, 0x48024a00, 0x59240200, 0x82000500, - 0xfffffeef, 0x84000546, 0x48024a00, 0x497a4805, - 0x4d400000, 0x60068000, 0x41781800, 0x405c2800, - 0x60040000, 0x05d1fcff, 0x60aa8000, 0x4d3c0000, - 0x600a7800, 0x05b5fd10, 0x5c027800, 0x5c028000, - 0x5c024000, 0x5c00b800, 0x813261c0, 0x05ee0275, - 0x1c01f000, 0x59303009, 0x58181a08, 0x820c1d00, - 0x000000ff, 0xb00c0588, 0x05000003, 0xb00c05aa, - 0x05020048, 0x59300004, 0x8c000516, 0x05020045, - 0x5818040c, 0x8c000500, 0x05000042, 0x42000000, - 0x001102f0, 0x50006000, 0x41781800, 0x5830200c, - 0x41300000, 0x80100580, 0x05000006, 0x40101800, - 0x580c2000, 0x801021c0, 0x05fe07fa, 0x0501f035, - 0x4933c857, 0x59302000, 0x497a6000, 0x800c19c0, - 0x0502001e, 0x4933c856, 0x42007000, 0x000211a7, - 0x5830000a, 0x800001c0, 0x05000018, 0x4978600a, - 0x58380001, 0x80300580, 0x05020008, 0x4933c856, - 0x49787002, 0x4810600c, 0x801021c0, 0x0502001d, - 0x4978600b, 0x0501f01b, 0x4933c856, 0x4810600c, - 0x801021c0, 0x05020002, 0x4978600b, 0x4c180000, - 0x4c300000, 0x05a9f944, 0x5c006000, 0x05fdfc12, - 0x5c003000, 0x0501f00f, 0x4933c856, 0x800c19c0, - 0x05020008, 0x801021c0, 0x05000003, 0x4810600c, - 0x0501f008, 0x4978600c, 0x4978600b, 0x0501f005, - 0x48101800, 0x801021c0, 0x05020002, 0x480c600b, - 0x5818040c, 0x84000500, 0x4800340c, 0x4978320c, - 0x1c01f000, 0x4933c857, 0x4927c857, 0x59a80249, - 0x90000543, 0x48035249, 0x4c5c0000, 0x4d400000, - 0x59ccb800, 0x825cbd00, 0x00ffffff, 0x60028000, - 0x05b5fc5f, 0x05f1fd93, 0x485f503d, 0x0500001d, - 0x4d3c0000, 0x60aa8000, 0x59240400, 0x8c00050a, - 0x05020006, 0x59240200, 0x84000556, 0x48024a00, - 0x60083000, 0x0505fdda, 0x600a7800, 0x05b5fc9e, - 0x42000000, 0x0010e454, 0x0509fe12, 0x59cc0408, - 0x8c00051e, 0x05020009, 0x42000800, 0x0010e512, - 0x58040406, 0x8c000500, 0x05020004, 0x59a80249, - 0x84000552, 0x48035249, 0x600a8000, 0x5c027800, - 0x41780800, 0x05cdfbfd, 0x59240200, 0x4803c857, - 0x4927c857, 0xb0000566, 0x48024a00, 0x485e4805, - 0x812000f0, 0x805c0540, 0x48026813, 0x49238830, - 0x84000570, 0x48038832, 0x59a81249, 0x59cc0408, - 0x8c00051a, 0x05020005, 0x84081514, 0x4a0370e5, - 0x00000800, 0x0501f004, 0x84081554, 0x4a0370e5, - 0x00000c00, 0x480b5249, 0x05f9fe67, 0x59cc0408, - 0x8c000518, 0x05000009, 0x59a80249, 0x8400054a, - 0x48035249, 0x49238830, 0x845c0570, 0x48038832, - 0x60100800, 0x05cdfaf0, 0x59a80a49, 0x84040d50, - 0x59cc0013, 0x8c00053e, 0x05000003, 0x8c000536, - 0x05000004, 0x59cc0017, 0x8c000536, 0x05020002, - 0x84040d10, 0x48075249, 0x48075449, 0x42001800, - 0x001102fe, 0x59240400, 0x8c00050c, 0x05000004, - 0x64866429, 0x05fdf8f4, 0x0501f009, 0x405c0800, - 0x41781000, 0x60001802, 0x60040000, 0x60028000, - 0x05d1fc38, 0x0501f830, 0x0005ffdc, 0x59a80249, - 0x4803c857, 0x8c000506, 0x05020006, 0x41781800, - 0x0509ff06, 0x05000002, 0x60401800, 0x05b5fb93, - 0x805c0110, 0x48035046, 0x48038881, 0x59a80044, - 0x80000040, 0x4803c857, 0x05001003, 0x48035044, - 0x0502001a, 0x59a80249, 0x8c000506, 0x05000004, - 0x8400050a, 0x48035249, 0x48035449, 0x42001800, - 0x0010dd46, 0x05a5feeb, 0x42001800, 0x0010dd53, - 0x05a5fee8, 0x4a035045, 0x0000ffff, 0x05e5fe5b, - 0x4a01a8e4, 0x00000080, 0x0509ff09, 0x05000004, - 0x4a038802, 0x0000ffbf, 0x0501f003, 0x4a038802, - 0x0000ffff, 0x850e1d02, 0x5c028000, 0x5c00b800, - 0x1c01f000, 0x4d440000, 0x4d340000, 0x61f2880f, - 0x05d1f82d, 0x05020003, 0x4a026c00, 0x00000707, - 0x5c026800, 0x5c028800, 0x1c01f000, 0x05f9feef, - 0x59a80098, 0x40002800, 0x59a81899, 0x800c0480, - 0x05000006, 0x59a8089a, 0x05001023, 0x80040480, - 0x0500001a, 0x05001019, 0x59aa6097, 0x41302000, - 0x59300a03, 0x90040d80, 0x0502000b, 0x64226203, - 0x800c1800, 0x480f5099, 0x91301430, 0xa0080495, - 0x0502100c, 0x480b5097, 0x05f9fee3, 0x81300540, - 0x1c01f000, 0x91326430, 0xa1300c95, 0x05001002, - 0x41526000, 0x81300584, 0x05000004, 0x05fdf7ed, - 0x49535097, 0x05fdf7f5, 0x42000000, 0x0010e443, - 0x0509fd64, 0x480fc857, 0x05f9fed3, 0x80026580, - 0x05fdf7f0, 0x8c14053e, 0x05fe07dd, 0x80000080, - 0x80000000, 0x05fdf7da, 0x4933c857, 0x4d340000, - 0x4d200000, 0x05b5fb92, 0x61f6880f, 0x42003000, - 0x00fffffd, 0x05cdfa8b, 0x05a60b50, 0x4936600a, - 0x497a6c12, 0x59300429, 0x900005a1, 0x05020003, - 0x599c0208, 0x48026c12, 0x5c024000, 0x5c026800, - 0x640e601e, 0x64066203, 0x648a6403, 0x05e1f5da, - 0x5930002b, 0x80000540, 0x05000006, 0x82000580, - 0xffffffff, 0x05000003, 0x82000580, 0xffffffff, - 0x1c01f000, 0x4927c857, 0x59240200, 0xb0000542, - 0x48024a00, 0x1c01f000, 0x4933c857, 0x59368c03, - 0x4c180000, 0x59300203, 0x90003491, 0x05a61b2f, - 0x0c01f803, 0x5c003000, 0x1c01f000, 0x0010bac0, - 0x0010c01b, 0x0010c1e5, 0x0010bac0, 0x0010bac0, - 0x0010bac0, 0x0010bac0, 0x0010bac0, 0x0010bae0, - 0x0010bac0, 0x0010bac0, 0x0010bac0, 0x0010bac0, - 0x0010bac0, 0x0010c8ad, 0x0010bac0, 0x0010bac0, - 0x05a5fb1a, 0x4933c857, 0x61fe89ff, 0x813669c0, - 0x05000002, 0x59368c03, 0x4c180000, 0x59300203, - 0x90003491, 0x05a61b11, 0x0c01f803, 0x5c003000, - 0x1c01f000, 0x0010bade, 0x0010c49f, 0x0010bade, - 0x0010bade, 0x0010bade, 0x0010bade, 0x0010bade, - 0x0010bade, 0x0010c3dd, 0x0010c9fc, 0x0010ca31, - 0x0010c9fc, 0x0010ca31, 0x0010bade, 0x0010c8be, - 0x0010bade, 0x0010bade, 0x05a5fafc, 0x05a5fafb, - 0xb13834a0, 0x05a61af9, 0x41380000, 0x493bc857, - 0x4d1c0000, 0x4d400000, 0x0c01f804, 0x5c028000, - 0x5c023800, 0x1c01f000, 0x0010bb4a, 0x0010bdc5, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bdcb, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bc52, 0x0010bc91, 0x0010bca3, - 0x0010bd04, 0x0010bd48, 0x0010bd7c, 0x0010bd9e, - 0x0010bb4a, 0x0010bb4a, 0x0010bdd0, 0x0010bb4a, - 0x0010bb4a, 0x0010bdd9, 0x0010bdde, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010be6d, 0x0010bb4a, 0x0010bb4a, 0x0010bd31, - 0x0010bb4a, 0x0010bb4a, 0x0010be43, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010be78, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bec0, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bf15, 0x0010bb4a, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bc32, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bc3c, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bf3e, 0x0010bf43, 0x0010bf5b, 0x0010bb4a, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, - 0x0010bc48, 0x0010bb4a, 0x0010bb4a, 0x0010bb4b, - 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bbc5, - 0x0010bb4a, 0x0010bb4a, 0x05a5fa90, 0x4933c857, - 0x59cc0801, 0x82040580, 0x00fffffe, 0x05020416, - 0x0505ff3b, 0x05020414, 0x05b5f8b2, 0x05020412, - 0x59a804cc, 0x8c000504, 0x05000254, 0x4c5c0000, - 0x59a808b6, 0x82040580, 0x00000228, 0x050200b5, - 0x59cc0800, 0x82040d00, 0x00ffffff, 0x82040580, - 0x00fffff0, 0x050200b1, 0x59cc0801, 0x82040d00, - 0x00ffffff, 0x82040580, 0x00fffffe, 0x050200ad, - 0x59cc0c07, 0x80040910, 0x90040581, 0x050200ab, - 0x59cc0a0a, 0x82040580, 0x00000228, 0x050200af, - 0x4c600000, 0x4c640000, 0x91ccbc0b, 0x585c0c00, - 0x82040580, 0x00000101, 0x0502003f, 0x585c0a00, - 0x90040584, 0x0502003e, 0x91ccc40d, 0x58600c00, - 0x82040580, 0x00000102, 0x0502003b, 0x58600a00, - 0x90040584, 0x0502003a, 0x91cccc0f, 0x58640c00, - 0x82040580, 0x00000103, 0x05000004, 0x82040580, - 0x00000203, 0x05020036, 0x58640a00, 0x82040580, - 0x00000200, 0x05020034, 0x585c0801, 0x90040484, - 0x05021033, 0x59cc0a07, 0x4807c857, 0x4806621b, - 0x58600201, 0x4803c857, 0x800001c0, 0x05000026, - 0x82000c80, 0x00000fff, 0x05021023, 0x480354cd, - 0x480352cc, 0x60643000, 0x61fc19ff, 0x60182000, - 0x4d200000, 0x417a4000, 0x05c5fca6, 0x5c024000, - 0x585cc801, 0x5860ba01, 0x91ccc410, 0x497a641b, - 0x0509fb09, 0x59cc0c04, 0x48066202, 0x656a6403, - 0x64066203, 0x05e1fcc4, 0x59a804cc, 0x84000542, - 0x480354cc, 0x5c00c800, 0x5c00c000, 0x5c00b800, - 0x1c01f000, 0x4807c857, 0x05fdf7fb, 0x4807c857, - 0x05fdf7f9, 0x4807c857, 0x05fdf7f7, 0x4807c857, - 0x05fdf7f5, 0x4803c857, 0x05fdf7f3, 0x4807c857, - 0x05fdf7f1, 0x4807c857, 0x05fdf7ef, 0x4807c857, - 0x05fdf7ed, 0x4933c857, 0x59cc0801, 0x82040580, - 0x00fffffe, 0x0502039c, 0x0505fec1, 0x0502039a, - 0x05b5f838, 0x05020398, 0x0501fbcd, 0x050201db, - 0x4c5c0000, 0x59a808b6, 0x90040594, 0x0502003d, - 0x59cc0800, 0x82040d00, 0x00ffffff, 0x82040580, - 0x00fffff0, 0x05020039, 0x59cc0801, 0x82040d00, - 0x00ffffff, 0x82040580, 0x00fffffe, 0x05020035, - 0x59cc0c07, 0x80040910, 0x90040581, 0x05020033, - 0x59cc0a0a, 0x90040594, 0x05020038, 0x59cc0c07, - 0x82040d00, 0x000000ff, 0x90040582, 0x0502002d, - 0x59cc0a07, 0x4807c857, 0x4d300000, 0x05d9fead, - 0x4130b800, 0x5c026000, 0x0500002e, 0x485fc857, - 0x585c0c07, 0x90040581, 0x0502002d, 0x585c0a03, - 0x90040582, 0x0502002d, 0x585c0c03, 0xb0040598, - 0x0502002d, 0x5930000a, 0x585c080a, 0x80040580, - 0x0502002c, 0x585c041b, 0x8c000508, 0x0500002c, - 0x59a804cc, 0x84000542, 0x480354cc, 0x59cc0c04, - 0x4804ba02, 0x6578bc03, 0x6404ba03, 0x0005ffdc, - 0x405e6000, 0x05e1fc64, 0x5c00b800, 0x1c01f000, - 0x4807c857, 0x05fdf7fd, 0x4807c857, 0x05fdf7fb, - 0x4807c857, 0x05fdf7f9, 0x4807c857, 0x0501f002, - 0x4807c857, 0x641e641c, 0x657e6403, 0x6402621c, - 0x5c00b800, 0x0501f1ac, 0x4807c857, 0x05fdf7fa, - 0x4807c857, 0x640e641c, 0x05fdf7f8, 0x4807c857, - 0x640e641c, 0x05fdf7f5, 0x4807c857, 0x640e641c, - 0x05fdf7f2, 0x4807c857, 0x640e641c, 0x05fdf7ef, - 0x4807c857, 0x640e641c, 0x05fdf7ec, 0x4807c857, - 0x640e641c, 0x05fdf7e9, 0x4933c857, 0x0505fe58, - 0x05020331, 0x05b1ffcf, 0x0502032f, 0x59cc0407, - 0x4802601e, 0x65166403, 0x64066203, 0x05e1f436, - 0x4933c857, 0x0505fe4e, 0x05020327, 0x05b1ffc5, - 0x05020325, 0x0501fb5a, 0x05020168, 0x59cc0007, - 0x4802601e, 0x652a6403, 0x64066203, 0x05e1f42a, - 0x4933c857, 0x0505fe42, 0x0502031b, 0x05b1ffb9, - 0x05020319, 0x0501fb4e, 0x0502015c, 0x655a6403, - 0x64066203, 0x05e1f420, 0x4933c857, 0x05b1ffb1, - 0x05020009, 0x05cdfc75, 0x05020007, 0x5932481d, - 0x59240200, 0x90000503, 0x90000583, 0x05000006, - 0x0501f309, 0x64266403, 0x6426641c, 0x6402621c, - 0x0501f169, 0x05cdfde6, 0x05000025, 0x59340200, - 0x8c00051a, 0x05000004, 0x5934000a, 0x84000560, - 0x4802680a, 0x0505f982, 0x05020024, 0x0509fceb, - 0x05020006, 0x60a68000, 0x4d3c0000, 0x417a7800, - 0x05b1febc, 0x5c027800, 0x42000000, 0x0010e456, - 0x0509fb68, 0x41780800, 0x05cdf960, 0x64226403, - 0x600c3000, 0x59240400, 0x8c00050a, 0x0502014e, - 0x59cc400b, 0x59cc380c, 0x59cc180d, 0x59cc080e, - 0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0, - 0x641e6203, 0x41782800, 0x0501f13c, 0x0505faef, - 0x05fe07e1, 0x64266403, 0x643a641c, 0x4a02621c, - 0x00001900, 0x0501f13c, 0x64266403, 0x640e641c, - 0x0501f139, 0x4933c857, 0x05b1ff72, 0x050202d2, - 0x05cdfc36, 0x050202d0, 0x493a6403, 0x0505f8e7, - 0x05020007, 0x641a6403, 0x59240400, 0x8c00050a, - 0x0502012d, 0x641e6203, 0x0509f10a, 0x641e6403, - 0x6426641c, 0x6402621c, 0x0501f127, 0x4933c857, - 0x05cdfc26, 0x050202c0, 0x5934000a, 0x82000500, - 0x00010000, 0x82000580, 0x00010000, 0x05060de0, - 0x05b00f58, 0x050202b8, 0x59cc0001, 0x82000500, - 0x00ffff00, 0x82000580, 0x00fffc00, 0x05020007, - 0x59a80006, 0x8c00050e, 0x05000004, 0x59240400, - 0x8c00050a, 0x05020036, 0x05cdfd8d, 0x05020003, - 0x60067800, 0x05cdf826, 0x05cdfd7c, 0x05000004, - 0x82000580, 0x00000703, 0x05020032, 0x59cc0206, - 0x90003503, 0x05020034, 0x90003494, 0x05001032, - 0x59a830b6, 0x80183480, 0x0500102f, 0x5934300a, - 0x84183516, 0x90000594, 0x05020002, 0x84183556, - 0x481a680a, 0x59cc0406, 0x90000503, 0x05020026, - 0x0505f962, 0x0502002b, 0x05cdfd4f, 0x05020006, - 0x4c600000, 0x4178c000, 0x417a7800, 0x05b1fec9, - 0x5c00c000, 0x916c0583, 0x05020006, 0x60183000, - 0x0509f89c, 0x42000000, 0x0010e455, 0x0509faf9, - 0x05cdf967, 0x642a6403, 0x60803000, 0x59cc1a0a, - 0x41780800, 0x41784000, 0x41783800, 0x59240400, - 0x8c00050a, 0x050200dc, 0x05fdf796, 0x642e6403, - 0x642e641c, 0x4a02621c, 0x00002c00, 0x0501f0d6, - 0x642e6403, 0x6426641c, 0x4a02621c, 0x00001e00, - 0x0501f0d1, 0x42000000, 0x0010e3ab, 0x0509fae1, - 0x642e6403, 0x641e641c, 0x6402621c, 0x0501f0ca, - 0x642e6403, 0x640e641c, 0x6402621c, 0x0501f0c6, - 0x4933c857, 0x05cdfbc5, 0x0502025f, 0x0505fd84, - 0x0502025d, 0x05b1fefb, 0x0502025b, 0x59cc0206, - 0x90003503, 0x0502001b, 0x90003494, 0x05001019, - 0x59a830b6, 0x80180480, 0x05001016, 0x59cc0406, - 0x90000503, 0x05020013, 0x59340400, 0x82000580, - 0x00000707, 0x05000013, 0x417a7800, 0x4c600000, - 0x4178c000, 0x05b1fe87, 0x5c00c000, 0x60283000, - 0x0509f85c, 0x42000000, 0x0010e452, 0x0509fab9, - 0x64326403, 0x41782800, 0x60843000, 0x05fdf7c4, - 0x64366403, 0x641e641c, 0x6402621c, 0x0501f09e, + 0x05f9ffe7, 0x0501f009, 0x405c0800, 0x41781000, + 0x60001802, 0x60040000, 0x60028000, 0x05d1f869, + 0x0501f830, 0x0009f810, 0x59a8024c, 0x4803c857, + 0x8c000506, 0x05020006, 0x41781800, 0x0509ffce, + 0x05000002, 0x60401800, 0x05b1fd7c, 0x805c0110, + 0x48035049, 0x48038881, 0x59a80047, 0x80000040, + 0x4803c857, 0x05001003, 0x48035047, 0x0502001a, + 0x59a8024c, 0x8c000506, 0x05000004, 0x8400050a, + 0x4803524c, 0x4803544c, 0x42001800, 0x00111ce0, + 0x05a5f86f, 0x42001800, 0x00111ced, 0x05a5f86c, + 0x4a035048, 0x0000ffff, 0x05e5fc66, 0x4a01a8e4, + 0x00000080, 0x0509ffd1, 0x05000004, 0x4a038802, + 0x0000ffbf, 0x0501f003, 0x4a038802, 0x0000ffff, + 0x850e1d02, 0x5c028000, 0x5c00b800, 0x1c01f000, + 0x4d440000, 0x4d340000, 0x61f2880f, 0x05cdfc43, + 0x05020003, 0x4a026c00, 0x00000707, 0x5c026800, + 0x5c028800, 0x1c01f000, 0x05f9fdd4, 0x59a8009b, + 0x40002800, 0x59a8189c, 0x800c0480, 0x05000006, + 0x59a8089d, 0x05001026, 0x80040480, 0x0500001d, + 0x0500101c, 0x59aa609a, 0x41302000, 0x59300a03, + 0x90040d80, 0x0502000e, 0x5930002f, 0x84000516, + 0x4802602f, 0x64226203, 0x800c1800, 0x480f509c, + 0x91301430, 0xa0080495, 0x0502100c, 0x480b509a, + 0x05f9fdc9, 0x81300540, 0x1c01f000, 0x91326430, + 0xa1300c95, 0x05001002, 0x41526000, 0x81300584, + 0x05000004, 0x05fdf7ea, 0x4953509a, 0x05fdf7f5, + 0x42000000, 0x001123e5, 0x0509fe29, 0x480fc857, + 0x05f9fdb9, 0x80026580, 0x05fdf7f0, 0x8c14053e, + 0x05fe07da, 0x80000080, 0x80000000, 0x05fdf7d7, + 0x4933c857, 0x4d340000, 0x4d200000, 0x05b1fd78, + 0x61f6880f, 0x42003000, 0x00fffffd, 0x05c9fdf0, + 0x05a20cd5, 0x4936600a, 0x497a6c12, 0x59300429, + 0x900005a1, 0x05020003, 0x599c0208, 0x48026c12, + 0x5c024000, 0x5c026800, 0x640e601e, 0x64066203, + 0x648a6403, 0x05e1f3dd, 0x5930002b, 0x80000540, + 0x05000006, 0x82000580, 0xffffffff, 0x05000003, + 0x82000580, 0xffffffff, 0x1c01f000, 0x4927c857, + 0x59240200, 0xb0000542, 0x48024a00, 0x1c01f000, + 0x4927c857, 0x4a024a00, 0x00008085, 0x599c0208, + 0x48026c12, 0x4d300000, 0x05e9ffb6, 0x5c000000, + 0x05000005, 0x641c0407, 0x4a000006, 0x00000398, + 0x0501f002, 0x40026000, 0x4936600a, 0x600c0800, + 0x05c9fd94, 0x49238830, 0x4a038832, 0xffffffff, + 0x4926601d, 0x497a6009, 0x64066407, 0x64066203, + 0x640a6403, 0x05e1f3b5, 0x82bc0580, 0x00115aa4, + 0x05000008, 0x59a8003d, 0x59a8729f, 0x80380400, + 0x59a8723e, 0x8164740e, 0x80380480, 0x0501f003, + 0x59a8003d, 0x81640480, 0x1c01f000, 0x4933c857, + 0x59368c03, 0x4c180000, 0x59300203, 0x90003491, + 0x05a21c8d, 0x0c01f803, 0x5c003000, 0x1c01f000, + 0x0010c19d, 0x0010c70d, 0x0010c8e8, 0x0010c19d, + 0x0010c19d, 0x0010c19d, 0x0010c19d, 0x0010c19d, + 0x0010c1bd, 0x0010c19d, 0x0010c19d, 0x0010c19d, + 0x0010c19d, 0x0010c19d, 0x0010cff7, 0x0010c19d, + 0x0010c19d, 0x05a1fc78, 0x4933c857, 0x61fe89ff, + 0x813669c0, 0x05000002, 0x59368c03, 0x4c180000, + 0x59300203, 0x90003491, 0x05a21c6f, 0x0c01f803, + 0x5c003000, 0x1c01f000, 0x0010c1bb, 0x0010cb9c, + 0x0010c1bb, 0x0010c1bb, 0x0010c1bb, 0x0010c1bb, + 0x0010c1bb, 0x0010c1bb, 0x0010cae0, 0x0010d146, + 0x0010d17b, 0x0010d146, 0x0010d17b, 0x0010c1bb, + 0x0010d008, 0x0010c1bb, 0x0010c1bb, 0x05a1fc5a, + 0x05a1fc59, 0xb13834a0, 0x05a21c57, 0x41380000, + 0x493bc857, 0x4d1c0000, 0x4d400000, 0x0c01f804, + 0x5c028000, 0x5c023800, 0x1c01f000, 0x0010c22b, + 0x0010c4b4, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c4ba, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c333, 0x0010c372, + 0x0010c384, 0x0010c3e5, 0x0010c429, 0x0010c45d, + 0x0010c47f, 0x0010c22b, 0x0010c22b, 0x0010c4bf, + 0x0010c22b, 0x0010c22b, 0x0010c4c8, 0x0010c4cd, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c55f, 0x0010c22b, 0x0010c22b, + 0x0010c412, 0x0010c22b, 0x0010c22b, 0x0010c52f, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c56a, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c5b2, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c607, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c313, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c31d, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c630, 0x0010c635, 0x0010c64d, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c329, 0x0010c22b, 0x0010c22b, + 0x0010c22c, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c2a6, 0x0010c22b, 0x0010c22b, 0x0010c22b, + 0x0010c22b, 0x0010c22b, 0x0010c22b, 0x05a1fbea, + 0x4933c857, 0x59cc0801, 0x82040580, 0x00fffffe, + 0x05020427, 0x0505ffa4, 0x05020425, 0x05b1fa69, + 0x05020423, 0x59a804d1, 0x8c000504, 0x05000262, + 0x4c5c0000, 0x59a808bb, 0x82040580, 0x00000228, + 0x050200b5, 0x59cc0800, 0x82040d00, 0x00ffffff, + 0x82040580, 0x00fffff0, 0x050200b1, 0x59cc0801, + 0x82040d00, 0x00ffffff, 0x82040580, 0x00fffffe, + 0x050200ad, 0x59cc0c07, 0x80040910, 0x90040581, + 0x050200ab, 0x59cc0a0a, 0x82040580, 0x00000228, + 0x050200af, 0x4c600000, 0x4c640000, 0x91ccbc0b, + 0x585c0c00, 0x82040580, 0x00000101, 0x0502003f, + 0x585c0a00, 0x90040584, 0x0502003e, 0x91ccc40d, + 0x58600c00, 0x82040580, 0x00000102, 0x0502003b, + 0x58600a00, 0x90040584, 0x0502003a, 0x91cccc0f, + 0x58640c00, 0x82040580, 0x00000103, 0x05000004, + 0x82040580, 0x00000203, 0x05020036, 0x58640a00, + 0x82040580, 0x00000200, 0x05020034, 0x585c0801, + 0x90040484, 0x05021033, 0x59cc0a07, 0x4807c857, + 0x4806621b, 0x58600201, 0x4803c857, 0x800001c0, + 0x05000026, 0x82000c80, 0x00000fff, 0x05021023, + 0x480354d2, 0x480352d1, 0x60643000, 0x61fc19ff, + 0x60182000, 0x4d200000, 0x417a4000, 0x05c1ff62, + 0x5c024000, 0x585cc801, 0x5860ba01, 0x91ccc410, + 0x497a641b, 0x0509fb8f, 0x59cc0c04, 0x48066202, + 0x656a6403, 0x64066203, 0x05e1fa9c, 0x59a804d1, + 0x84000542, 0x480354d1, 0x5c00c800, 0x5c00c000, + 0x5c00b800, 0x1c01f000, 0x4807c857, 0x05fdf7fb, + 0x4807c857, 0x05fdf7f9, 0x4807c857, 0x05fdf7f7, + 0x4807c857, 0x05fdf7f5, 0x4803c857, 0x05fdf7f3, + 0x4807c857, 0x05fdf7f1, 0x4807c857, 0x05fdf7ef, + 0x4807c857, 0x05fdf7ed, 0x4933c857, 0x59cc0801, + 0x82040580, 0x00fffffe, 0x050203ad, 0x0505ff2a, + 0x050203ab, 0x05b1f9ef, 0x050203a9, 0x0501fbde, + 0x050201e9, 0x4c5c0000, 0x59a808bb, 0x90040594, + 0x0502003d, 0x59cc0800, 0x82040d00, 0x00ffffff, + 0x82040580, 0x00fffff0, 0x05020039, 0x59cc0801, + 0x82040d00, 0x00ffffff, 0x82040580, 0x00fffffe, + 0x05020035, 0x59cc0c07, 0x80040910, 0x90040581, + 0x05020033, 0x59cc0a0a, 0x90040594, 0x05020038, + 0x59cc0c07, 0x82040d00, 0x000000ff, 0x90040582, + 0x0502002d, 0x59cc0a07, 0x4807c857, 0x4d300000, + 0x05d9fbba, 0x4130b800, 0x5c026000, 0x0500002e, + 0x485fc857, 0x585c0c07, 0x90040581, 0x0502002d, + 0x585c0a03, 0x90040582, 0x0502002d, 0x585c0c03, + 0xb0040598, 0x0502002d, 0x5930000a, 0x585c080a, + 0x80040580, 0x0502002c, 0x585c041b, 0x8c000508, + 0x0500002c, 0x59a804d1, 0x84000542, 0x480354d1, + 0x59cc0c04, 0x4804ba02, 0x6578bc03, 0x6404ba03, + 0x0009f810, 0x405e6000, 0x05e1fa3c, 0x5c00b800, + 0x1c01f000, 0x4807c857, 0x05fdf7fd, 0x4807c857, + 0x05fdf7fb, 0x4807c857, 0x05fdf7f9, 0x4807c857, + 0x0501f002, 0x4807c857, 0x641e641c, 0x657e6403, + 0x6402621c, 0x5c00b800, 0x0501f1ba, 0x4807c857, + 0x05fdf7fa, 0x4807c857, 0x640e641c, 0x05fdf7f8, + 0x4807c857, 0x640e641c, 0x05fdf7f5, 0x4807c857, + 0x640e641c, 0x05fdf7f2, 0x4807c857, 0x640e641c, + 0x05fdf7ef, 0x4807c857, 0x640e641c, 0x05fdf7ec, + 0x4807c857, 0x640e641c, 0x05fdf7e9, 0x4933c857, + 0x0505fec1, 0x05020342, 0x05b1f986, 0x05020340, + 0x59cc0407, 0x4802601e, 0x65166403, 0x64066203, + 0x05e1f20e, 0x4933c857, 0x0505feb7, 0x05020338, + 0x05b1f97c, 0x05020336, 0x0501fb6b, 0x05020176, + 0x59cc0007, 0x4802601e, 0x652a6403, 0x64066203, + 0x05e1f202, 0x4933c857, 0x0505feab, 0x0502032c, + 0x05b1f970, 0x0502032a, 0x0501fb5f, 0x0502016a, + 0x655a6403, 0x64066203, 0x05e1f1f8, 0x4933c857, + 0x05b1f968, 0x05020009, 0x05cdf806, 0x05020007, + 0x5932481d, 0x59240200, 0x90000503, 0x90000583, + 0x05000006, 0x0501f31a, 0x64266403, 0x6426641c, + 0x6402621c, 0x0501f177, 0x05cdf9ce, 0x05000025, + 0x59340200, 0x8c00051a, 0x05000004, 0x5934000a, + 0x84000560, 0x4802680a, 0x0505f9b5, 0x05020024, + 0x0509fd85, 0x05020006, 0x60a68000, 0x4d3c0000, + 0x417a7800, 0x05b1f872, 0x5c027800, 0x42000000, + 0x001123fa, 0x0509fc02, 0x41780800, 0x05c9fce5, + 0x64226403, 0x600c3000, 0x59240400, 0x8c00050a, + 0x0502015c, 0x59cc400b, 0x59cc380c, 0x59cc180d, + 0x59cc080e, 0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, + 0x9c0409c0, 0x641e6203, 0x41782800, 0x0501f14a, + 0x0505fb53, 0x05fe07e1, 0x64266403, 0x643a641c, + 0x4a02621c, 0x00001900, 0x0501f14a, 0x64266403, + 0x640e641c, 0x0501f147, 0x4933c857, 0x05b1f929, + 0x050202e3, 0x05c9ffc7, 0x050202e1, 0x493a6403, + 0x0505f90d, 0x05020007, 0x641a6403, 0x59240400, + 0x8c00050a, 0x0502013b, 0x641e6203, 0x0509f186, + 0x641e6403, 0x6426641c, 0x6402621c, 0x0501f135, + 0x4933c857, 0x05c9ffb7, 0x050202d1, 0x5934000a, + 0x82000500, 0x00010000, 0x82000580, 0x00010000, + 0x05060e49, 0x05b0090f, 0x050202c9, 0x59cc0001, + 0x82000500, 0x00ffff00, 0x82000580, 0x00fffc00, + 0x05020007, 0x59a80006, 0x8c00050e, 0x05000004, + 0x59240400, 0x8c00050a, 0x05020036, 0x05cdf975, + 0x05020003, 0x60067800, 0x05c9fb58, 0x05cdf964, + 0x05000004, 0x82000580, 0x00000703, 0x05020032, + 0x59cc0206, 0x90003503, 0x05020034, 0x90003494, + 0x05001032, 0x59a830bb, 0x80183480, 0x0500102f, + 0x5934300a, 0x84183516, 0x90000594, 0x05020002, + 0x84183556, 0x481a680a, 0x59cc0406, 0x90000503, + 0x05020026, 0x0505f998, 0x0502002b, 0x05cdf937, + 0x05020006, 0x4c600000, 0x4178c000, 0x417a7800, + 0x05b1f87f, 0x5c00c000, 0x916c0583, 0x05020006, + 0x60183000, 0x0509f918, 0x42000000, 0x001123f9, + 0x0509fb93, 0x05c9fcec, 0x642a6403, 0x60803000, + 0x59cc1a0a, 0x41780800, 0x41784000, 0x41783800, + 0x59240400, 0x8c00050a, 0x050200ea, 0x05fdf796, + 0x642e6403, 0x642e641c, 0x4a02621c, 0x00002c00, + 0x0501f0e4, 0x642e6403, 0x6426641c, 0x4a02621c, + 0x00001e00, 0x0501f0df, 0x42000000, 0x0011234c, + 0x0509fb7b, 0x642e6403, 0x641e641c, 0x6402621c, + 0x0501f0d8, 0x642e6403, 0x640e641c, 0x6402621c, + 0x0501f0d4, 0x4933c857, 0x05c9ff56, 0x05020270, + 0x0505fded, 0x0502026e, 0x05b1f8b2, 0x0502026c, + 0x59cc0206, 0x90003503, 0x0502001b, 0x90003494, + 0x05001019, 0x59a830bb, 0x80180480, 0x05001016, + 0x59cc0406, 0x90000503, 0x05020013, 0x59340400, + 0x82000580, 0x00000707, 0x05000013, 0x417a7800, + 0x4c600000, 0x4178c000, 0x05b1f83d, 0x5c00c000, + 0x60283000, 0x0509f8d8, 0x42000000, 0x001123f6, + 0x0509fb53, 0x64326403, 0x41782800, 0x60843000, + 0x05fdf7c4, 0x64366403, 0x641e641c, 0x6402621c, + 0x0501f0ac, 0x64366403, 0x6426641c, 0x4a02621c, + 0x00001e00, 0x0501f0a7, 0x4933c857, 0x05c9ff29, + 0x05020243, 0x0505fdc0, 0x05020241, 0x05b1f885, + 0x0502023f, 0x0501fa74, 0x0502000a, 0x493a6403, + 0x0501fa7a, 0x05020003, 0x64ba6403, 0x05fdf75c, + 0x64366403, 0x641e641c, 0x6402621c, 0x0501f095, 0x64366403, 0x6426641c, 0x4a02621c, 0x00001e00, - 0x0501f099, 0x4933c857, 0x05cdfb98, 0x05020232, - 0x0505fd57, 0x05020230, 0x05b1fece, 0x0502022e, - 0x0501fa63, 0x0502000a, 0x493a6403, 0x0501fa69, - 0x05020003, 0x64ba6403, 0x05fdf75c, 0x64366403, - 0x641e641c, 0x6402621c, 0x0501f087, 0x64366403, - 0x6426641c, 0x4a02621c, 0x00001e00, 0x0501f082, - 0x4933c857, 0x05cdfb81, 0x05fe0713, 0x59240200, - 0x90000503, 0x90000583, 0x05020217, 0x05cdfceb, - 0x05020027, 0x0505f8ec, 0x0502000b, 0x643a6403, - 0x59240400, 0x8c00050a, 0x05020073, 0x61483000, - 0x59cc4008, 0x59cc3809, 0x59cc180a, 0x59cc080b, - 0x05fdf724, 0x4933c857, 0x600c3000, 0x0509f824, - 0x4d3c0000, 0x417a7800, 0x05b1fdca, 0x5c027800, - 0x42000000, 0x0010e454, 0x0509fa76, 0x59340200, - 0x84000558, 0x48026a00, 0x602c0800, 0x05c9ff82, - 0x59240400, 0x8c00050a, 0x05020057, 0x601c3000, - 0x0501f04c, 0x4933c857, 0x643e6403, 0x640e641c, - 0x4a02621c, 0x00001e00, 0x0501f053, 0x59340400, - 0x82000580, 0x00000703, 0x05fc07f7, 0x0501f02f, - 0x4933c857, 0x05cdfb4d, 0x050201e7, 0x5932481d, - 0x59240200, 0x90000503, 0x90000583, 0x050201e2, - 0x05cdfcad, 0x05020021, 0x0505f8ca, 0x05040864, - 0x05020004, 0x64426403, 0x61403000, 0x05fdf6ee, - 0x4d3c0000, 0x417a7800, 0x05b1fd9e, 0x5c027800, - 0x600c3000, 0x0505fff2, 0x42000000, 0x0010e454, - 0x0509fa48, 0x59340200, 0x84000558, 0x48026a00, - 0x05fdf7d4, 0x64466403, 0x640e641c, 0x4a02621c, - 0x00001e00, 0x0501f02c, 0x4933c857, 0x05b1fe65, - 0x05040ceb, 0x050201c4, 0x0501f9f9, 0x05020007, - 0x644a6403, 0x0501f024, 0x59340400, 0x82000580, - 0x00000703, 0x05fc07f0, 0x83340580, 0x00110210, - 0x05000008, 0x4d3c0000, 0x417a7800, 0x60a68000, - 0x05b1fd7c, 0x5c027800, 0x605c3000, 0x0505ffd0, - 0x42000000, 0x0010e454, 0x0509fa26, 0x05b5f860, - 0x59240400, 0x8c00050a, 0x0502000b, 0x60183000, - 0x60a68000, 0x4933c857, 0x64066403, 0x641e6203, - 0x41782800, 0x0501f002, 0x611a8000, 0x0505f9dc, - 0x0505f7e4, 0x4933c857, 0x64066403, 0x602c0800, - 0x05c9ff25, 0x64066203, 0x05e1f2a7, 0x4933c857, - 0x60240800, 0x05c9ff20, 0x64166403, 0x05fdf7fa, - 0x0505fcbb, 0x05020194, 0x05b1fe32, 0x05020192, - 0x0501f9c7, 0x05fe07d5, 0x64826403, 0x64066203, - 0x05e1f299, 0x05b1fe2b, 0x0502018b, 0x648e6403, - 0x64066203, 0x05e1f294, 0x0505fcad, 0x05b00e25, - 0x05020185, 0x0501f9ba, 0x05fe07c8, 0x59cc0807, - 0x82040500, 0x00ffff00, 0x0502000a, 0x59340212, - 0x82000500, 0x0000ff00, 0x05000006, 0x5932481d, - 0x59240005, 0x82000500, 0x000000ff, 0x0501f003, - 0x5932481d, 0x59240005, 0x82040d00, 0x00ffffff, - 0x80040580, 0x05020015, 0x59cc1408, 0x05f9fb62, - 0x0500002f, 0x591c0202, 0x82001580, 0x0000ffff, - 0x05000004, 0x59cc1208, 0x80080580, 0x05020028, - 0x591c000a, 0x81340580, 0x05020025, 0x591c0416, - 0x8c00051a, 0x05020018, 0x591c0407, 0x90000587, - 0x0502001f, 0x0501f02f, 0x59cc1208, 0x82080580, - 0x0000ffff, 0x05000015, 0x05f9fb4b, 0x05000018, - 0x59cc1408, 0x591c0202, 0x80080580, 0x0502002b, - 0x831c0580, 0xffffffff, 0x05000026, 0x591c000a, + 0x0501f090, 0x4933c857, 0x05c9ff12, 0x05fe0713, + 0x59240200, 0x90000503, 0x90000583, 0x05020228, + 0x05cdf8d3, 0x05020027, 0x0505f922, 0x0502000b, + 0x643a6403, 0x59240400, 0x8c00050a, 0x05020081, + 0x61483000, 0x59cc4008, 0x59cc3809, 0x59cc180a, + 0x59cc080b, 0x05fdf724, 0x4933c857, 0x600c3000, + 0x0509f8a0, 0x4d3c0000, 0x417a7800, 0x05adff80, + 0x5c027800, 0x42000000, 0x001123f8, 0x0509fb10, + 0x59340200, 0x84000558, 0x48026a00, 0x602c0800, + 0x05c9fab4, 0x59240400, 0x8c00050a, 0x05020065, + 0x601c3000, 0x0501f05a, 0x4933c857, 0x643e6403, + 0x640e641c, 0x4a02621c, 0x00001e00, 0x0501f061, + 0x59340400, 0x82000580, 0x00000703, 0x05fc07f7, + 0x0501f03d, 0x4933c857, 0x05c9fede, 0x050201f8, + 0x5932481d, 0x59240200, 0x90000503, 0x90000583, + 0x050201f3, 0x05cdf895, 0x0502002f, 0x0505f900, + 0x05040897, 0x05020004, 0x64426403, 0x61403000, + 0x05fdf6ee, 0x4d3c0000, 0x417a7800, 0x05adff54, + 0x5c027800, 0x600c3000, 0x0509f86e, 0x42000000, + 0x001123f8, 0x0509fae2, 0x59340200, 0x84000558, + 0x48026a00, 0x05fdf7d4, 0x64466403, 0x640e641c, + 0x4a02621c, 0x00001e00, 0x0501f03a, 0x4933c857, + 0x05b1f81c, 0x05040d54, 0x050201d5, 0x59cc0006, + 0x82000500, 0xff000000, 0x82000d80, 0x18000000, + 0x05020006, 0x6426641c, 0x4a02621c, 0x00002c00, + 0x64266403, 0x0501f02b, 0x82000d80, 0x81000000, + 0x05000003, 0x0501f9fc, 0x05020007, 0x644a6403, + 0x0501f024, 0x59340400, 0x82000580, 0x00000703, + 0x05fc07e2, 0x83340580, 0x001141b4, 0x05000008, + 0x4d3c0000, 0x417a7800, 0x60a68000, 0x05adff24, + 0x5c027800, 0x605c3000, 0x0509f83e, 0x42000000, + 0x001123f8, 0x0509fab2, 0x05b1fa0d, 0x59240400, + 0x8c00050a, 0x0502000b, 0x60183000, 0x60a68000, + 0x4933c857, 0x64066403, 0x641e6203, 0x41782800, + 0x0501f002, 0x611a8000, 0x0505fa34, 0x0509f052, + 0x4933c857, 0x64066403, 0x602c0800, 0x05c9fa49, + 0x64066203, 0x05e1f071, 0x4933c857, 0x60240800, + 0x05c9fa44, 0x64166403, 0x05fdf7fa, 0x0505fd16, + 0x05020197, 0x05adffdb, 0x05020195, 0x0501f9ca, + 0x05fe07d5, 0x64826403, 0x64066203, 0x05e1f063, + 0x05adffd4, 0x0502018e, 0x648e6403, 0x64066203, + 0x05e1f05e, 0x0505fd08, 0x05ac0fce, 0x05020188, + 0x0501f9bd, 0x05fe07c8, 0x59cc0807, 0x82040500, + 0x00ffff00, 0x0502000a, 0x59340212, 0x82000500, + 0x0000ff00, 0x05000006, 0x5932481d, 0x59240005, + 0x82000500, 0x000000ff, 0x0501f003, 0x5932481d, + 0x59240005, 0x82040d00, 0x00ffffff, 0x80040580, + 0x05020015, 0x59cc1408, 0x05f9fa0f, 0x0500002f, + 0x591c0202, 0x82001580, 0x0000ffff, 0x05000004, + 0x59cc1208, 0x80080580, 0x05020028, 0x591c000a, 0x81340580, 0x05020025, 0x591c0416, 0x8c00051a, - 0x05000013, 0x82000500, 0xffff1fff, 0x48023c16, - 0x491e602a, 0x0501f01b, 0x59cc1408, 0x41780000, - 0x0501fe2a, 0x05fe07ef, 0x0501f016, 0x649a6403, - 0x4a02621c, 0x00001700, 0x59cc1208, 0x82081580, - 0x0000ffff, 0x05fe079c, 0x0501f00e, 0xa11c0494, - 0x05000002, 0x0500100b, 0x591c0407, 0x90000587, - 0x05fe07f3, 0x591c0403, 0x900005a4, 0x05020005, - 0x4d300000, 0x411e6000, 0x0005ffdc, 0x5c026000, - 0x64966403, 0x05fdf78c, 0x59cc1408, 0x41780000, - 0x0501fe0e, 0x05fe07e6, 0x05fdf7fa, 0x4933c857, - 0x4d3c0000, 0x60067800, 0x05c9fe9d, 0x5c027800, - 0x4c580000, 0x6008b000, 0x91a81c02, 0x91cc140b, - 0x05f1f9fb, 0x5c00b000, 0x05000003, 0x64c66403, - 0x05fdf779, 0x0005ffdc, 0x6008b000, 0x91a81c00, - 0x91cc140d, 0x05f1f9f2, 0x0502000c, 0x05d9fc44, + 0x05020018, 0x591c0407, 0x90000587, 0x0502001f, + 0x0501f02c, 0x59cc1208, 0x82080580, 0x0000ffff, + 0x05000015, 0x05f9f9f8, 0x05000018, 0x59cc1408, + 0x591c0202, 0x80080580, 0x05020028, 0x831c0580, + 0xffffffff, 0x05000023, 0x591c000a, 0x81340580, + 0x05020022, 0x591c0416, 0x8c00051a, 0x05000013, + 0x82000500, 0xffff1fff, 0x48023c16, 0x491e602a, + 0x0501f018, 0x59cc1408, 0x41780000, 0x0501fe38, + 0x05fe07ef, 0x0501f013, 0x649a6403, 0x4a02621c, + 0x00001700, 0x59cc1208, 0x82081580, 0x0000ffff, + 0x05fe079c, 0x0501f00b, 0x591c0407, 0x90000587, + 0x05fe07f6, 0x591c0403, 0x900005a4, 0x05020005, + 0x4d300000, 0x411e6000, 0x0009f810, 0x5c026000, + 0x64966403, 0x05fdf78f, 0x59cc1408, 0x41780000, + 0x0501fe1f, 0x05fe07e9, 0x05fdf7fa, 0x4933c857, + 0x4d3c0000, 0x60067800, 0x05c9f9c4, 0x5c027800, + 0x4c580000, 0x6008b000, 0x91241c01, 0x91cc140b, + 0x05f1f854, 0x5c00b000, 0x05000003, 0x64c66403, + 0x05fdf77c, 0x0009f810, 0x6008b000, 0x91241c03, + 0x91cc140d, 0x05f1f84b, 0x0502000c, 0x05d9f946, 0x0500000a, 0x59300407, 0x90000581, 0x05020007, 0x59300403, 0x90000582, 0x05020004, 0x5930000a, - 0x81340580, 0x00040fdc, 0x05d1fa4c, 0x05020009, - 0x05d1fa56, 0x05020005, 0x64075042, 0x6006d800, - 0x05d1f9c9, 0x0501f003, 0x60040000, 0x05d1fa1c, - 0x1c01f000, 0x05b1fd97, 0x050200f7, 0x0501f92c, - 0x05fe073a, 0x493a6403, 0x0501f986, 0x05020003, - 0x64ae6403, 0x05fdf754, 0x64b26403, 0x05fdf752, - 0x4933c857, 0x05d9ff39, 0x050200eb, 0x05b1fd89, - 0x050200e9, 0x05cdfba8, 0x05fe072c, 0x59cc0408, - 0x4802641b, 0x59cc0208, 0x4802621b, 0x59cc0807, - 0x59340002, 0x82000500, 0x00ffffff, 0x80040580, - 0x0500001d, 0x5932481d, 0x59240005, 0x80040580, - 0x05020029, 0x59cc1408, 0x05f9facb, 0x0500002b, - 0x831c0580, 0xffffffff, 0x05000005, 0x0505fb01, - 0x05000026, 0x0505fed1, 0x05000024, 0x491e602a, - 0x64da6403, 0x59340200, 0x8c00050e, 0x05000009, - 0x831c0580, 0xffffffff, 0x050000c3, 0x591c0203, - 0x90001584, 0x05020003, 0x64066006, 0x1c01f000, - 0x0501f0bd, 0x59cc1208, 0x82080580, 0x0000ffff, - 0x05000008, 0x05f9fab0, 0x05000010, 0x591c0202, - 0x59cc0c08, 0x80040580, 0x0502000c, 0x05fdf7e1, - 0x59cc1408, 0x60040000, 0x0501fd9c, 0x05000007, - 0x05fdf7dc, 0x4803c856, 0x6426641c, 0x4a02621c, - 0x00001500, 0x0501f005, 0x4803c856, 0x640e641c, - 0x4a02621c, 0x00001700, 0x64de6403, 0x0501f0a2, - 0x4933c857, 0x05d9fef1, 0x050200a3, 0x05b1fd41, - 0x050200a1, 0x05cdfb60, 0x05fe06e4, 0x05cdf9f1, - 0x05000045, 0x59cc0407, 0x4802641b, 0x59cc1207, - 0x480a621b, 0x82080580, 0x0000ffff, 0x05000004, - 0x05f9fa89, 0x05000036, 0x0501f008, 0x59cc1407, - 0x60040000, 0x0501fd79, 0x05000031, 0x831c0580, - 0xffffffff, 0x0500002e, 0x59cc0c07, 0x591c0202, - 0x80040580, 0x0502002a, 0x0505fe88, 0x05000028, - 0x591c0416, 0x8c000516, 0x0502002f, 0x4d300000, - 0x411e6000, 0x05f5f927, 0x5c026000, 0x641e3a03, - 0x59cc0c09, 0x82040d00, 0x0000ff00, 0x840409c0, - 0x90040581, 0x05000009, 0x90040585, 0x0500000b, - 0x90040587, 0x05020011, 0x42000000, 0x0010e43c, - 0x0509f8e8, 0x0501f008, 0x42000000, 0x0010e43b, - 0x0509f8e4, 0x0501f007, 0x42000000, 0x0010e43a, - 0x0509f8e0, 0x591c0009, 0x80000540, 0x05000003, - 0x59cc2808, 0x0505f2a5, 0x4803c856, 0x6426641c, - 0x4a02621c, 0x00002a00, 0x0501f005, 0x4803c856, - 0x640e641c, 0x4a02621c, 0x00000300, 0x64ee6403, - 0x0501f055, 0x4803c856, 0x642e641c, 0x6402621c, - 0x05fdf7fb, 0x4803c856, 0x641e641c, 0x6402621c, - 0x05fdf7f7, 0x59cc0001, 0x82000580, 0x00fffffe, - 0x0502004d, 0x4c080000, 0x05cdf9b0, 0x05000021, - 0x05cdf991, 0x0505fbf6, 0x0502001c, 0x5932481d, - 0x59240200, 0x82000540, 0x000000e0, 0x48024a00, - 0x59a80249, 0x90000543, 0x48035249, 0x59a80046, - 0x800000d0, 0x59a8083d, 0x82040d00, 0x000000ff, - 0x80041540, 0x480b503d, 0x600c0800, 0x05e1fe12, - 0x497b504b, 0x8d0c0520, 0x05000004, 0x4a032804, - 0x000007d0, 0x0501f001, 0x0005ffdc, 0x05b1fd8e, - 0x5c001000, 0x1c01f000, 0x0505fbf3, 0x05fdf7fd, - 0x5c001000, 0x0005f7dc, 0x0501f82c, 0x05000026, - 0x653a6403, 0x64066203, 0x05e1f12f, 0x05cdfaee, - 0x05fe0666, 0x653e6403, 0x497a601e, 0x59cc0a06, - 0x82040d00, 0x000000ff, 0x800409c0, 0x05fc067e, - 0x90040581, 0x05020005, 0x59cc0808, 0x59a80005, - 0x80040580, 0x05fc0678, 0x90040582, 0x05020006, - 0x91cc140b, 0x6008b000, 0x91341c06, 0x05f1f8f0, - 0x05fc0671, 0x6406601e, 0x05fdf66f, 0x05cdfad6, - 0x05fe064e, 0x65426403, 0x59cc0207, 0x4802601e, - 0x05fdf669, 0x64066203, 0x42000800, 0x80000040, - 0x0005f6ab, 0x4803c857, 0x42000000, 0x0010e448, - 0x0509f874, 0x0005f7dc, 0x4d2c0000, 0x4c500000, - 0x4c580000, 0x4c540000, 0x59a800b6, 0x82000c80, - 0x00000841, 0x05021021, 0x05a5f9ff, 0x0500001f, - 0x492e6009, 0x59a800b6, 0x48025805, 0x90000403, - 0x80000104, 0x91cca406, 0x90000c87, 0x05001010, - 0x641e5811, 0x601cb000, 0x912c0409, 0x4000a800, - 0x0509f927, 0x412c7000, 0x800409c0, 0x05020003, - 0x49787001, 0x0501f00b, 0x05a5f9eb, 0x0500000b, - 0x492c7001, 0x40040000, 0x05fdf7f0, 0x48025811, - 0x4000b000, 0x912c0409, 0x4000a800, 0x0509f918, - 0x90000541, 0x0501f005, 0x497b50b6, 0x59325809, - 0x05a5fa07, 0x80000580, 0x5c00a800, 0x5c00b000, - 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4d340000, - 0x5932680a, 0x59343400, 0x4933c857, 0x4937c857, - 0x481bc857, 0x05cdfa90, 0x5c026800, 0x1c01f000, - 0x4933c857, 0x4c600000, 0x4d3c0000, 0x4d440000, - 0x4d340000, 0x0501f858, 0x05020046, 0x59cc0207, - 0x82000d00, 0x0000ff00, 0x900411c0, 0x59cc000a, - 0x82000500, 0x00ffffff, 0x80081540, 0x480a601e, - 0x8c040518, 0x05000011, 0x60203000, 0x0505fdbf, - 0x42000000, 0x0010e453, 0x0509f822, 0x59240400, - 0x8c00050a, 0x05020005, 0x60082800, 0x60903000, - 0x611a8000, 0x0501ffde, 0x6004c000, 0x417a7800, - 0x05b1fbe0, 0x0501f02d, 0x8c04051a, 0x05000029, - 0x59cc000a, 0x59cc3800, 0x821c3d00, 0x00ffffff, - 0x05d9f902, 0x05cc0aac, 0x05020022, 0x5930001d, - 0x4c000000, 0x05cdfaa0, 0x4926601d, 0x5930000a, - 0x4c000000, 0x59240c00, 0x8c04050a, 0x0502000b, - 0x59340c03, 0x59341802, 0x820c1d00, 0x00ffffff, - 0x58002403, 0x60102800, 0x60903000, 0x611a8000, - 0x41301000, 0x0501ffca, 0x4936600a, 0x60243000, - 0x0505fd98, 0x42000000, 0x0010e453, 0x0505fff5, - 0x417a7800, 0x4178c000, 0x05b1fbba, 0x5c000000, - 0x4802600a, 0x5c000000, 0x4802601d, 0x0501f003, - 0x90000541, 0x0501f002, 0x80000580, 0x5c026800, - 0x5c028800, 0x5c027800, 0x5c00c000, 0x1c01f000, - 0x4933c857, 0x59cc0206, 0x90000490, 0x05021004, - 0x6402621c, 0x90000541, 0x0501f002, 0x80000580, - 0x1c01f000, 0x4933c857, 0x6402621c, 0x59cc0407, - 0x82000500, 0x0000ff00, 0x82000580, 0x00000800, - 0x0502000d, 0x59cc0206, 0x59a808b6, 0x80040480, - 0x0500100a, 0x59cc0006, 0x82000500, 0x00ff0000, - 0x82000d80, 0x00140000, 0x05000003, 0x82000d80, - 0x00100000, 0x1c01f000, 0x42000000, 0x0010e448, - 0x0505ffc4, 0x90000541, 0x05fdf7fb, 0x59300403, - 0xb00034a0, 0x05a21dbd, 0x91383593, 0x05020006, - 0x4803c857, 0x4c000000, 0x0505fe36, 0x5c000000, - 0x0c01f029, 0x4933c857, 0x493bc857, 0x913835a7, - 0x0500000d, 0x91383594, 0x0500000b, 0xb13805a1, - 0x05000003, 0xb13805a0, 0x05a20dac, 0x05e5f88a, - 0x05ea0404, 0x59300203, 0x9000058e, 0x05f40618, - 0x05a1fda6, 0x493bc857, 0x4937c857, 0x0505fe1f, - 0x05cdf875, 0x601c0800, 0x05c9fcb3, 0x05e1fc2e, - 0x4d2c0000, 0x0505fe6d, 0x0502000d, 0x59325809, - 0x812e59c0, 0x05020003, 0x5c025800, 0x05e1f02e, - 0x05f5fc85, 0x05a00d95, 0x05f9fb11, 0x05a20d93, - 0x64c65a0a, 0x64125810, 0x0001fb82, 0x5c025800, - 0x05e9f384, 0x0010c0ad, 0x0010c0ee, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ee, 0x0010c0ff, - 0x0010c1d1, 0x0010c152, 0x0010c1d1, 0x0010c16b, - 0x0010c1d1, 0x0010c170, 0x0010c1d1, 0x0010c173, - 0x0010c1d1, 0x0010c173, 0x0010c1d1, 0x0010c1d1, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ee, - 0x0010c0ad, 0x0010c1d1, 0x0010c0ad, 0x0010c0ad, - 0x0010c1d1, 0x0010c0ad, 0x0010c1b7, 0x0010c1d1, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, - 0x0010c1d1, 0x0010c1d1, 0x0010c0ad, 0x0010c1d1, - 0x0010c1d1, 0x0010c0ad, 0x0010c0fa, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c175, - 0x0010c1d1, 0x0010c0ad, 0x0010c0ad, 0x0010c19d, - 0x0010c1d1, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0e1, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1, - 0x0010c0e1, 0x0010c0e1, 0x0010c0ad, 0x0010c0ad, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1, - 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0bc, - 0x0010c0d7, 0x0010c0ae, 0x0010c0ad, 0x0010c0ad, - 0x0010c1d1, 0x05a1fd2d, 0x4933c857, 0x05f5ffef, - 0x05000007, 0x4a02601c, 0x0010c0b7, 0x59a8005e, - 0x48026205, 0x643a6203, 0x1c01f000, 0x640a6203, - 0x59a8005c, 0x800000c4, 0x48026006, 0x1c01f000, - 0x4933c857, 0x05f5ffe1, 0x05000007, 0x4a02601c, - 0x0010c0c5, 0x59a8005e, 0x48026205, 0x643a6203, - 0x1c01f000, 0x916c0583, 0x0502000a, 0x5930041b, - 0x4803c857, 0x9000050f, 0x0500000a, 0x9000050c, - 0x05000004, 0x4803c857, 0x05f9ffd8, 0x0501f005, - 0x4803c857, 0x65726403, 0x64066203, 0x05ddf79e, - 0x4933c857, 0x0005ffdc, 0x1c01f000, 0x4933c857, - 0x05f5fbf1, 0x050000f8, 0x4d2c0000, 0x59325809, - 0x64025a0a, 0x0001fb82, 0x5c025800, 0x497a6009, - 0x0501f0f1, 0x05f5ffbd, 0x05000007, 0x59a8005e, - 0x48026205, 0x643a6203, 0x59a8005c, 0x48026006, - 0x1c01f000, 0x4d2c0000, 0x59325809, 0x05a5f8b0, - 0x5c025800, 0x0005f7dc, 0x59a8005c, 0x48026006, - 0x05f5ffae, 0x05000007, 0x4a02601c, 0x0010c0f8, - 0x59a8005e, 0x48026205, 0x643a6203, 0x1c01f000, - 0x640a6203, 0x1c01f000, 0x4d3c0000, 0x417a7800, - 0x05c9fbe7, 0x5c027800, 0x0501f0d3, 0x05cdf93b, - 0x050000d1, 0x59a80249, 0x8c000508, 0x0500000e, - 0x5932680a, 0x4c580000, 0x6008b000, 0x91a81c02, - 0x91341406, 0x05edff3e, 0x80000540, 0x5c00b000, - 0x050200c5, 0x59340200, 0x8400051a, 0x48026a00, - 0x0501f037, 0x599c0017, 0x8c00050a, 0x05020007, - 0x4d3c0000, 0x417a7800, 0x05c9fbcd, 0x5c027800, - 0x601c0800, 0x05c9fbd4, 0x59340212, 0x82000500, - 0x0000ff00, 0x0502001e, 0x83440d80, 0x000007fe, - 0x050200b1, 0x05b1fcf6, 0x05c5f9f6, 0x05000009, - 0x59240200, 0x8c00051e, 0x05000010, 0x59300809, - 0x4d300000, 0x05b1fe68, 0x5c026000, 0x0501f0a6, - 0x59a80249, 0x8c000514, 0x050000a3, 0x83240580, - 0x0010e512, 0x05020005, 0x4d300000, 0x05b1fb6d, - 0x5c026000, 0x0501f09c, 0x59a82249, 0x8c100514, - 0x05000099, 0x05b1fcd5, 0x0501f097, 0x599c0017, - 0x8c00050a, 0x05020094, 0x599c0019, 0x8c00050e, - 0x05020091, 0x416c0000, 0x90000582, 0x05020004, - 0x59a80044, 0x80000000, 0x48035044, 0x600c0800, - 0x05c9fba5, 0x64066407, 0x64066203, 0x640a6403, - 0x05ddff25, 0x4ce80000, 0x6005d000, 0x05d9fd7e, - 0x5c01d000, 0x1c01f000, 0x59340200, 0x8400051a, - 0x48026a00, 0x05cdf8dc, 0x0500007b, 0x60100800, - 0x05c9fb95, 0x0505fc46, 0x05020077, 0x05f5ff43, - 0x05000009, 0x59a8005e, 0x48026205, 0x643a6203, - 0x59a8005c, 0x48026006, 0x4a02601c, 0x0010c165, - 0x1c01f000, 0x60140800, 0x05c9fb87, 0x64066407, - 0x64066203, 0x640e6403, 0x05ddf707, 0x05cdf8cf, - 0x05020065, 0x60180800, 0x0501f86c, 0x0501f062, - 0x60100800, 0x05c9fb7c, 0x05fdf78f, 0x05c9ff3a, - 0x0501f05d, 0x4d300000, 0x05f5ff28, 0x0500000c, - 0x5930082a, 0x40066000, 0x59300416, 0x8c00051e, - 0x05020003, 0x5c026000, 0x0501f055, 0x5c026000, - 0x4a02601c, 0x0010c185, 0x0501f051, 0x5c026000, - 0x0005f7dc, 0x4c340000, 0x41306800, 0x05e9fa7c, - 0x05000012, 0x64066203, 0x647a6403, 0x58340c1b, - 0x4806641b, 0x58340a1b, 0x4806621b, 0x5834002a, - 0x4802602a, 0x5834080a, 0x4806600a, 0x5834081d, - 0x4806601d, 0x05f5fefa, 0x64126407, 0x42000800, - 0x80000040, 0x0005feab, 0x40366000, 0x5c006800, - 0x0005f7dc, 0x5930082a, 0x4807c857, 0x800409c0, - 0x05000031, 0x5804001e, 0x81300580, 0x0502002e, - 0x4978081e, 0x58041416, 0x8c080516, 0x0500002a, - 0x8c080514, 0x05000028, 0x84081516, 0x48080c16, - 0x58065809, 0x812e59c0, 0x05000023, 0x492fc857, - 0x4d300000, 0x40066000, 0x641e6203, 0x417a7800, - 0x0005fe2d, 0x5c026000, 0x0501f01b, 0x05f5fee7, - 0x000407dc, 0x5930002a, 0x80000540, 0x05000018, - 0x4c340000, 0x40006800, 0x58340407, 0x5c006800, - 0x90000583, 0x000607dc, 0x4a02601c, 0x0010c1c5, - 0x0501f00f, 0x4d300000, 0x4d1c0000, 0x5932382a, - 0x05e9fa3b, 0x05000004, 0x4a026416, 0x00000100, - 0x05f5fd84, 0x5c023800, 0x5c026000, 0x0005f7dc, - 0x05c9fb1d, 0x05f5fecd, 0x000407dc, 0x497a601c, - 0x59a8005e, 0x48026205, 0x643a6203, 0x59a8005c, - 0x48026006, 0x1c01f000, 0x4933c857, 0x4807c857, - 0x05c9fb11, 0x4d3c0000, 0x417a7800, 0x05c9fb04, - 0x5c027800, 0x5934000a, 0x84000520, 0x4802680a, - 0x05c9f6c9, 0x59340400, 0x4803c857, 0x80000110, - 0x9000348c, 0x05a21bf1, 0x91383595, 0x05020002, - 0x0c01f004, 0x91383596, 0x05a20bec, 0x0c01f00d, - 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47, - 0x0010ce6d, 0x00109b47, 0x0010c22a, 0x0010c208, - 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47, - 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47, - 0x0010ce6d, 0x00109b47, 0x0010c22a, 0x0010c23b, - 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47, - 0x4933c857, 0x5932481d, 0x59240400, 0x8c000508, - 0x05000014, 0x813669c0, 0x05000012, 0x59340212, - 0x82000500, 0x0000ff00, 0x0500000e, 0x599c0019, - 0x8c00050e, 0x0502000b, 0x4d3c0000, 0x417a7800, - 0x05c9facb, 0x5c027800, 0x600c0800, 0x05c9fad2, - 0x64066407, 0x64066203, 0x640a6403, 0x05ddf652, - 0x59cc0001, 0x59340802, 0x80040580, 0x82000500, - 0x00ffffff, 0x000607dc, 0x59345002, 0x05c9f861, - 0x482a6802, 0x0005f7dc, 0x4933c857, 0x59303403, - 0x9018359e, 0x0502000d, 0x91383595, 0x000607dc, - 0x4c340000, 0x5930682a, 0x803469c0, 0x05000005, - 0x58343416, 0x82183500, 0xffff1fff, 0x48186c16, - 0x5c006800, 0x0005f7dc, 0x1c01f000, 0x4933c857, - 0x05edfbfe, 0x000607dc, 0x64066203, 0x64066403, - 0x05ddf631, 0x493bc857, 0xb1380591, 0x05020007, - 0x05e1fe75, 0x05ea01ef, 0x59300203, 0x90000582, - 0x05000062, 0x05a1fb91, 0x913805a7, 0x05000015, - 0xb1380588, 0x0500000d, 0x91380594, 0x05000011, - 0xb13805a1, 0x05000003, 0xb13805a0, 0x05a20b87, - 0x05e1fe65, 0x05ea01df, 0x59300203, 0x9000058e, - 0x05000675, 0x05a1fb81, 0x05e1fe5f, 0x05ea01d9, - 0x59300203, 0x90000584, 0x0008014a, 0x05a1fb7b, - 0x4933c857, 0x59300403, 0xb0000c84, 0x05a21b77, - 0xb0000480, 0x05a01b75, 0x40027000, 0x4803c857, - 0x0c01f001, 0x0010c26d, 0x0010c26e, 0x0010c26e, - 0x0010c284, 0x05a1fb6d, 0x05e1f9fb, 0x59325809, - 0x812e59c0, 0x05000012, 0x832c0500, 0x00ff0000, - 0x0500000f, 0x640a6203, 0x5932680a, 0x59340200, - 0x8c00050e, 0x0502000a, 0x60128000, 0x0501fd0b, - 0x497a6009, 0x59300006, 0x80000540, 0x05020003, - 0x59a8005d, 0x48026006, 0x641e6203, 0x1c01f000, - 0x05e1f9e5, 0x05f5fa44, 0x05e8014a, 0x59325809, - 0x05a1ff0a, 0x05e9f147, 0x05a1fb50, 0x05f5fe13, - 0x05000005, 0x59a8005e, 0x48026205, 0x643a6203, - 0x0501f009, 0x59325809, 0x592c040e, 0x8c000502, - 0x05000004, 0x641e6203, 0x610e7000, 0x0009f000, - 0x64126203, 0x1c01f000, 0x0501fff6, 0x00080148, - 0x1c01f000, 0x05f5fe01, 0x05000007, 0x4a02601c, - 0x0010c2a5, 0x59a8005e, 0x48026205, 0x643a6203, - 0x1c01f000, 0x64066203, 0x65066403, 0x42027800, - 0x80002042, 0x0005f6ab, 0xb1380498, 0x05001008, - 0xb13805a1, 0x05000004, 0xb13805a0, 0x05000002, - 0x05a1fb2a, 0x4933c857, 0x1c01f000, 0xb1380591, - 0x05000004, 0xb1380581, 0x05a20b24, 0x1c01f000, - 0x0005fe4e, 0x0505f80e, 0x0005f7dc, 0xb1380498, - 0x05f210a1, 0xb1380492, 0x05a21b1c, 0xb1380489, - 0x05a01b1a, 0x0c01f001, 0x0010c2cc, 0x0010c2fa, - 0x0010c2cb, 0x0010c2cb, 0x0010c2cb, 0x0010c2cb, - 0x0010c2fa, 0x0010c2cb, 0x0010c318, 0x05a1fb0f, - 0x05f5fdd2, 0x0500000b, 0x59300416, 0x8c000504, - 0x05020008, 0x4a02601c, 0x0010c2d8, 0x59a8005e, - 0x48026205, 0x64426203, 0x65266403, 0x1c01f000, - 0x59325809, 0x592c040e, 0x8c00051e, 0x05000010, - 0x82000d00, 0x000000c0, 0x82040d80, 0x00000080, - 0x05000011, 0x59300804, 0x8c040518, 0x0502000e, - 0x59300416, 0x8c000516, 0x05000003, 0x641e6203, - 0x0501f011, 0x61067000, 0x0009f178, 0x641e6203, - 0x497a6006, 0x59300416, 0x8c000516, 0x0502000a, - 0x0005f64e, 0x59325809, 0x592c0c0e, 0x8c04051a, - 0x05020003, 0x0005fe4e, 0x0005f7dc, 0x0501ff99, - 0x05fc07fd, 0x1c01f000, 0x05e1f952, 0x59325809, - 0x5932680a, 0x59340200, 0x8c00050e, 0x0500000d, - 0x592c040e, 0x82000500, 0x000000c0, 0x82000580, - 0x00000080, 0x05000005, 0x592c0013, 0x59301817, - 0x800c1c80, 0x480e6017, 0x640a6203, 0x0501f00c, - 0x60128000, 0x0501fc79, 0x05f9fba3, 0x59300006, - 0x80000540, 0x05020004, 0x59a8005d, 0x800000c2, - 0x48026006, 0x497a6009, 0x641e6203, 0x1c01f000, - 0x4933c857, 0x05e1fda0, 0x05a20ac0, 0x59300203, - 0x90000582, 0x05fc078d, 0x05a1fabc, 0x641e6203, - 0x497a6006, 0x0005f64e, 0x641e6203, 0x497a6006, - 0x0005f645, 0x59300416, 0x8c00051c, 0x000a0167, - 0x59325809, 0x592c2013, 0x40080000, 0x80102480, - 0x59300017, 0x80102400, 0x48126017, 0x0009f167, - 0x8c04050e, 0x05020007, 0x641a6203, 0x0501f822, - 0x5930002b, 0x80000540, 0x05a60c01, 0x0005f645, - 0x640a6203, 0x1c01f000, 0x60040800, 0x05a5fbfc, - 0x90040581, 0x0008016c, 0x05fdf7e4, 0x83300580, - 0x00111ad0, 0x05000004, 0x59300416, 0x8c00051c, - 0x05000006, 0x59300008, 0x8c000522, 0x05a609ce, - 0x00080157, 0x1c01f000, 0x59300013, 0x80000540, - 0x00080157, 0x59325809, 0x592c040b, 0x8c000510, - 0x05000004, 0x497a6013, 0x05a5f9c3, 0x00080157, - 0x1c01f000, 0x492fc857, 0x480bc857, 0x8c08053e, - 0x05000005, 0x80081080, 0x80081000, 0x60240800, - 0x0501f002, 0x60540800, 0x480a580f, 0x1c01f000, - 0x1c01f000, 0x91380593, 0x05000003, 0x91380594, - 0x05a20a76, 0x59300416, 0x8c000516, 0x05a00a73, - 0x1c01f000, 0x05a1fa71, 0x59300009, 0x80000540, - 0x05a20a6e, 0x1c01f000, 0x59300416, 0x8c000516, - 0x05a00a6a, 0x1c01f000, 0x64126203, 0x493a6403, - 0x42000800, 0x80002001, 0x0005f6ab, 0x640e6203, - 0x493a6403, 0x05f5fd25, 0x05000007, 0x59300416, - 0x8c00050a, 0x05020004, 0x4a02601c, 0x0010c381, - 0x1c01f000, 0x0001f996, 0x59325809, 0x592c040e, - 0x8c00051e, 0x05000011, 0x82000500, 0x000000c0, - 0x82000580, 0x00000080, 0x0500000f, 0x59300416, - 0x8c000512, 0x05020009, 0x8c000510, 0x05020007, - 0x592c0410, 0x80000540, 0x05020004, 0x82080d40, - 0x80003065, 0x0005f69d, 0x82080d40, 0x80002065, - 0x0005f69d, 0x82080d40, 0x80002042, 0x0005f69d, - 0x4933c857, 0x493bc857, 0xb1380484, 0x05a21a3b, - 0xb1380481, 0x05a01a39, 0x0c01f001, 0x0010c3a6, - 0x0010c3b4, 0x0010c3c6, 0x59325809, 0x592c040e, - 0x8c00051e, 0x05000019, 0x82001d00, 0x000000c0, - 0x820c1d80, 0x000000c0, 0x05000014, 0x64066203, - 0x493a6403, 0x42000800, 0x80002042, 0x0005f6ab, - 0x59325809, 0x592c040e, 0x8c00051e, 0x0500000b, - 0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0, - 0x05000006, 0x64066203, 0x493a6403, 0x42000800, - 0x80002001, 0x0005f6ab, 0x497a6009, 0x497a6006, - 0x60128000, 0x0501f3c1, 0x59325809, 0x592c040e, - 0x8c00051e, 0x05fc07f9, 0x82001d00, 0x000000c0, - 0x820c1d80, 0x000000c0, 0x05fc07f4, 0x640e6203, - 0x493a6403, 0x05f5fccd, 0x05000007, 0x59300416, - 0x8c00050a, 0x05020004, 0x4a02601c, 0x0010c3d9, - 0x1c01f000, 0x0001f996, 0x82080d40, 0x80002065, - 0x0005f69d, 0x4933c857, 0x493bc857, 0x83380580, - 0x00000085, 0x05000005, 0x83380580, 0x00000088, - 0x05000007, 0x05a1f9f5, 0x64266203, 0x493a6403, - 0x42000800, 0x80000040, 0x0005f6ab, 0x83300580, - 0x00111a70, 0x05a209ed, 0x4d1c0000, 0x813669c0, - 0x05000003, 0x0501fe9a, 0x0502005a, 0x59cc1404, - 0x41780000, 0x0501f859, 0x05000028, 0x831c0580, - 0xffffffff, 0x05000025, 0x59cc0204, 0x82001580, - 0x0000ffff, 0x05000004, 0x591c1402, 0x80080580, - 0x0502001e, 0x05f5fc9d, 0x05000010, 0x59cc0005, - 0x8c000500, 0x0500000d, 0x4d300000, 0x411e6000, - 0x05f1fc04, 0x5c026000, 0x0500002a, 0x591c0416, - 0x8400055a, 0x48023c16, 0x59300416, 0x8400055a, - 0x48026416, 0x0501f029, 0x591c0407, 0x9000051f, - 0x90002586, 0x05000005, 0x90002584, 0x0500002a, - 0x90002591, 0x05020005, 0x497a3a05, 0x61502000, - 0x05e9f911, 0x0501f02f, 0x59240400, 0x8c00050a, - 0x05020004, 0x42023800, 0xffffffff, 0x05fdf7f8, - 0x813669c0, 0x0502000f, 0x59cc0001, 0x59cc3800, - 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x05d5fca3, - 0x5c003800, 0x0502001f, 0x05b1f9fa, 0x0502001d, - 0x05c9f8e4, 0x0502001b, 0x4926601d, 0x4936600a, - 0x4a026403, 0x00000087, 0x59cc1204, 0x82081580, - 0x0000ffff, 0x05020003, 0x4a026403, 0x00000086, - 0x4d2c0000, 0x0505f986, 0x05cdf8d1, 0x5c025800, - 0x0501f00c, 0x591c0403, 0x900005b8, 0x05fc07d8, - 0x591c0203, 0x90000587, 0x05fe07d8, 0x4d300000, - 0x411e6000, 0x05e5ff87, 0x5c026000, 0x05fdf7d3, - 0x5c023800, 0x1c01f000, 0x4933c857, 0x480bc857, - 0x4c5c0000, 0x4000b800, 0x42002800, 0x00111b00, - 0x41300000, 0x80140580, 0x0500001c, 0x58140203, - 0x90000580, 0x05000019, 0x58140202, 0x80080580, - 0x05020016, 0x58140203, 0x9000058f, 0x05000013, - 0x58141c07, 0x900c0585, 0x05000010, 0x8c5c0500, - 0x05000003, 0x900c0587, 0x0500000c, 0x5930200a, - 0x5814000a, 0x800001c0, 0x0500000d, 0x82001d80, - 0x00110210, 0x0500000a, 0x801021c0, 0x05000003, - 0x80100580, 0x05000011, 0x90142c30, 0x41540000, - 0x80140480, 0x05021020, 0x05fdf7de, 0x5814002a, - 0x801021c0, 0x05000005, 0x58102002, 0x82102500, - 0x00ffffff, 0x05fdf7f3, 0x8c5c0500, 0x05fe07f3, - 0x5930202a, 0x05fdf7ef, 0x40163800, 0x8c5c0500, - 0x05000007, 0x4c080000, 0x4c140000, 0x0505f8df, - 0x5c002800, 0x5c001000, 0x05fc07e8, 0x831c0580, - 0xffffffff, 0x05000006, 0x591c000a, 0x800001c0, - 0x05020003, 0x5930000a, 0x4802380a, 0x81300540, - 0x0501f009, 0x8c5c0500, 0x05000007, 0x40080800, - 0x42023800, 0xffffffff, 0x05cdf87e, 0x05fc07f0, - 0x80000580, 0x5c00b800, 0x1c01f000, 0x4933c857, - 0x83300580, 0x00111a40, 0x05020037, 0x64026203, - 0x91380593, 0x0502002c, 0x59300403, 0x82000580, - 0x00000092, 0x05a20931, 0x59a8009d, 0x59325809, - 0x812e59c0, 0x05000005, 0x812c0580, 0x05a2092b, - 0x592c0000, 0x497a5800, 0x800001c0, 0x05000004, - 0x4803509d, 0x05e5fe13, 0x0501f003, 0x497b509d, - 0x497b509e, 0x812e59c0, 0x0500001e, 0x592c0208, - 0xb0000595, 0x05a004d5, 0x91380593, 0x0502000d, - 0x592c0817, 0x82040580, 0xffffffff, 0x05000007, - 0xa0040494, 0x05021005, 0x05000004, 0x64180c07, - 0x64000c07, 0x49780806, 0x64025a0a, 0x0001f382, - 0x64c65a0a, 0x64125815, 0x4a025816, 0x000000ff, - 0x0001f382, 0x913805a7, 0x05000003, 0x91380594, - 0x05a20906, 0x493bc857, 0x05ddff93, 0x05fdf7cf, - 0x1c01f000, 0x4933c857, 0x91380593, 0x0502000c, - 0x59300403, 0x4803c857, 0x82000c80, 0x00000085, - 0x05a018fa, 0x82000c80, 0x00000093, 0x05a218f7, - 0x82000480, 0x00000085, 0x0c01f01c, 0x913805a7, - 0x0500000f, 0x91380594, 0x0500000d, 0x493bc857, - 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020007, - 0x05e1fbc9, 0x05e60743, 0x59300203, 0x9000058e, - 0x050003ca, 0x05a1f8e5, 0x05e5f73e, 0x493bc857, - 0x05ddff71, 0x59325809, 0x812e59c0, 0x05e406d5, - 0x64c65a0a, 0x64125815, 0x4a025816, 0x000000ff, - 0x0001fb82, 0x05e5f6cf, 0x0010c510, 0x0010c514, - 0x0010c514, 0x0010c510, 0x0010c510, 0x0010c510, - 0x0010c510, 0x0010c510, 0x0010c510, 0x0010c510, - 0x0010c510, 0x0010c510, 0x0010c510, 0x0010c511, - 0x05a1f8ca, 0x59325809, 0x64025a0a, 0x0001fb82, - 0x0005f7dc, 0x4933c857, 0x42000000, 0x0010e464, - 0x0505fac4, 0x0501fdae, 0x497a6205, 0x602e8000, - 0x0501f805, 0x641a6407, 0x641e6203, 0x497a6006, - 0x1c01f000, 0x4933c857, 0x4943c857, 0x59300407, - 0x90000587, 0x05020002, 0x1c01f000, 0x05ddffec, - 0x4df00000, 0x05f1ffa0, 0x0500000c, 0x9140058c, + 0x81340580, 0x00080810, 0x05cdfe4a, 0x0502000f, + 0x59a80807, 0x8c04050e, 0x05000004, 0x41202000, + 0x60401101, 0x05c1fc24, 0x05cdfe4e, 0x05020005, + 0x64075045, 0x6006d800, 0x05cdfdbb, 0x0501f003, + 0x60040000, 0x05cdfe0e, 0x1c01f000, 0x05adff3d, + 0x050200f7, 0x0501f92c, 0x05fe0737, 0x493a6403, + 0x0501f986, 0x05020003, 0x64ae6403, 0x05fdf751, + 0x64b26403, 0x05fdf74f, 0x4933c857, 0x05d9fc61, + 0x050200eb, 0x05adff2f, 0x050200e9, 0x05c9ff7f, + 0x05fe0729, 0x59cc0408, 0x4802641b, 0x59cc0208, + 0x4802621b, 0x59cc0807, 0x59340002, 0x82000500, + 0x00ffffff, 0x80040580, 0x0500001d, 0x5932481d, + 0x59240005, 0x80040580, 0x05020029, 0x59cc1408, + 0x05f9f975, 0x0500002b, 0x831c0580, 0xffffffff, + 0x05000005, 0x0505fb59, 0x05000026, 0x0505ff3c, + 0x05000024, 0x491e602a, 0x64da6403, 0x59340200, + 0x8c00050e, 0x05000009, 0x831c0580, 0xffffffff, + 0x050000c3, 0x591c0203, 0x90001584, 0x05020003, + 0x64066006, 0x1c01f000, 0x0501f0bd, 0x59cc1208, + 0x82080580, 0x0000ffff, 0x05000008, 0x05f9f95a, + 0x05000010, 0x591c0202, 0x59cc0c08, 0x80040580, + 0x0502000c, 0x05fdf7e1, 0x59cc1408, 0x60040000, + 0x0501fda7, 0x05000007, 0x05fdf7dc, 0x4803c856, + 0x6426641c, 0x4a02621c, 0x00001500, 0x0501f005, + 0x4803c856, 0x640e641c, 0x4a02621c, 0x00001700, + 0x64de6403, 0x0501f0a2, 0x4933c857, 0x05d9fc19, + 0x050200a3, 0x05adfee7, 0x050200a1, 0x05c9ff37, + 0x05fe06e1, 0x05c9fd71, 0x05000045, 0x59cc0407, + 0x4802641b, 0x59cc1207, 0x480a621b, 0x82080580, + 0x0000ffff, 0x05000004, 0x05f9f933, 0x05000036, + 0x0501f008, 0x59cc1407, 0x60040000, 0x0501fd84, + 0x05000031, 0x831c0580, 0xffffffff, 0x0500002e, + 0x59cc0c07, 0x591c0202, 0x80040580, 0x0502002a, + 0x0505fef3, 0x05000028, 0x591c0416, 0x8c000516, + 0x0502002f, 0x4d300000, 0x411e6000, 0x05f1ffa7, + 0x5c026000, 0x641e3a03, 0x59cc0c09, 0x82040d00, + 0x0000ff00, 0x840409c0, 0x90040581, 0x05000009, + 0x90040585, 0x0500000b, 0x90040587, 0x05020011, + 0x42000000, 0x001123dd, 0x0509f971, 0x0501f008, + 0x42000000, 0x001123dc, 0x0509f96d, 0x0501f007, + 0x42000000, 0x001123db, 0x0509f969, 0x591c0009, + 0x80000540, 0x05000003, 0x59cc2808, 0x0505f2fd, + 0x4803c856, 0x6426641c, 0x4a02621c, 0x00002a00, + 0x0501f005, 0x4803c856, 0x640e641c, 0x4a02621c, + 0x00000300, 0x64ee6403, 0x0501f055, 0x4803c856, + 0x642e641c, 0x6402621c, 0x05fdf7fb, 0x4803c856, + 0x641e641c, 0x6402621c, 0x05fdf7f7, 0x59cc0001, + 0x82000580, 0x00fffffe, 0x0502004d, 0x4c080000, + 0x05c9fd30, 0x05000021, 0x05c9fd11, 0x0505fc4e, + 0x0502001c, 0x5932481d, 0x59240200, 0x82000540, + 0x000000e2, 0x48024a00, 0x59a8024c, 0x90000543, + 0x4803524c, 0x59a80049, 0x800000d0, 0x59a80840, + 0x82040d00, 0x000000ff, 0x80041540, 0x480b5040, + 0x600c0800, 0x05e1fbde, 0x497b504e, 0x8d0c0520, + 0x05000004, 0x4a032804, 0x000007d0, 0x0501f001, + 0x0009f810, 0x05adff34, 0x5c001000, 0x1c01f000, + 0x0505fc4b, 0x05fdf7fd, 0x5c001000, 0x0009f010, + 0x0501f82c, 0x05000026, 0x653a6403, 0x64066203, + 0x05ddf6f6, 0x05c9fec5, 0x05fe0663, 0x653e6403, + 0x497a601e, 0x59cc0a06, 0x82040d00, 0x000000ff, + 0x800409c0, 0x05fc067b, 0x90040581, 0x05020005, + 0x59cc0808, 0x59a80005, 0x80040580, 0x05fc0675, + 0x90040582, 0x05020006, 0x91cc140b, 0x6008b000, + 0x91341c06, 0x05edff43, 0x05fc066e, 0x6406601e, + 0x05fdf66c, 0x05c9fead, 0x05fe064b, 0x65426403, + 0x59cc0207, 0x4802601e, 0x05fdf666, 0x64066203, + 0x42000800, 0x80000040, 0x0005f6e2, 0x4803c857, + 0x42000000, 0x001123ec, 0x0509f8fd, 0x0009f010, + 0x4d2c0000, 0x4c500000, 0x4c580000, 0x4c540000, + 0x59a800bb, 0x82000c80, 0x00000841, 0x05021021, + 0x05a1fb44, 0x0500001f, 0x492e6009, 0x59a800bb, + 0x48025805, 0x90000403, 0x80000104, 0x91cca406, + 0x90000c87, 0x05001010, 0x641e5811, 0x601cb000, + 0x912c0409, 0x4000a800, 0x0509f9b0, 0x412c7000, + 0x800409c0, 0x05020003, 0x49787001, 0x0501f00b, + 0x05a1fb30, 0x0500000b, 0x492c7001, 0x40040000, + 0x05fdf7f0, 0x48025811, 0x4000b000, 0x912c0409, + 0x4000a800, 0x0509f9a1, 0x90000541, 0x0501f005, + 0x497b50bb, 0x59325809, 0x05a1fb4c, 0x80000580, + 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c025800, + 0x1c01f000, 0x4d340000, 0x5932680a, 0x59343400, + 0x4933c857, 0x4937c857, 0x481bc857, 0x05c9fe67, + 0x5c026800, 0x1c01f000, 0x4933c857, 0x4c600000, + 0x4d3c0000, 0x4d440000, 0x4d340000, 0x0501f858, + 0x05020046, 0x59cc0207, 0x82000d00, 0x0000ff00, + 0x900411c0, 0x59cc000a, 0x82000500, 0x00ffffff, + 0x80081540, 0x480a601e, 0x8c040518, 0x05000011, + 0x60203000, 0x0505fe2a, 0x42000000, 0x001123f7, + 0x0509f8ab, 0x59240400, 0x8c00050a, 0x05020005, + 0x60082800, 0x60903000, 0x611a8000, 0x0505f833, + 0x6004c000, 0x417a7800, 0x05adfd85, 0x0501f02d, + 0x8c04051a, 0x05000029, 0x59cc000a, 0x59cc3800, + 0x821c3d00, 0x00ffffff, 0x05d5fdbc, 0x05c80e83, + 0x05020022, 0x5930001d, 0x4c000000, 0x05c9fe77, + 0x4926601d, 0x5930000a, 0x4c000000, 0x59240c00, + 0x8c04050a, 0x0502000b, 0x59340c03, 0x59341802, + 0x820c1d00, 0x00ffffff, 0x58002403, 0x60102800, + 0x60903000, 0x611a8000, 0x41301000, 0x0505f81f, + 0x4936600a, 0x60243000, 0x0505fe03, 0x42000000, + 0x001123f7, 0x0509f87e, 0x417a7800, 0x4178c000, + 0x05adfd5f, 0x5c000000, 0x4802600a, 0x5c000000, + 0x4802601d, 0x0501f003, 0x90000541, 0x0501f002, + 0x80000580, 0x5c026800, 0x5c028800, 0x5c027800, + 0x5c00c000, 0x1c01f000, 0x4933c857, 0x59cc0206, + 0x90000490, 0x05021004, 0x6402621c, 0x90000541, + 0x0501f002, 0x80000580, 0x1c01f000, 0x4933c857, + 0x6402621c, 0x59cc0407, 0x82000500, 0x0000ff00, + 0x82000580, 0x00000800, 0x0502000d, 0x59cc0206, + 0x59a808bb, 0x80040480, 0x0500100a, 0x59cc0006, + 0x82000500, 0x00ff0000, 0x82000d80, 0x00140000, + 0x05000003, 0x82000d80, 0x00100000, 0x1c01f000, + 0x42000000, 0x001123ec, 0x0509f84d, 0x90000541, + 0x05fdf7fb, 0x59300403, 0xb00034a0, 0x059e1f06, + 0x91383593, 0x05020006, 0x4803c857, 0x4c000000, + 0x0505feab, 0x5c000000, 0x0c01f029, 0x4933c857, + 0x493bc857, 0x913835a7, 0x0500000d, 0x91383594, + 0x0500000b, 0xb13805a1, 0x05000003, 0xb13805a0, + 0x059e0ef5, 0x05e1fe56, 0x05ea0244, 0x59300203, + 0x9000058e, 0x05f404bf, 0x059dfeef, 0x493bc857, + 0x4937c857, 0x0505fe94, 0x05c9fbf5, 0x601c0800, + 0x05c5ffd4, 0x05e1f9fa, 0x4d2c0000, 0x0505fee2, + 0x0502000d, 0x59325809, 0x812e59c0, 0x05020003, + 0x5c025800, 0x05ddf5f5, 0x05f5fb1c, 0x059c0ede, + 0x05f9f9c5, 0x059e0edc, 0x64c65a0a, 0x64125810, + 0x0001fba8, 0x5c025800, 0x05e9f1a7, 0x0010c79f, + 0x0010c7e0, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c7e0, 0x0010c7f1, 0x0010c8d4, 0x0010c855, + 0x0010c8d4, 0x0010c86e, 0x0010c8d4, 0x0010c873, + 0x0010c8d4, 0x0010c876, 0x0010c8d4, 0x0010c876, + 0x0010c8d4, 0x0010c8d4, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c7e0, 0x0010c79f, 0x0010c8d4, + 0x0010c79f, 0x0010c79f, 0x0010c8d4, 0x0010c79f, + 0x0010c8ba, 0x0010c8d4, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c79f, 0x0010c8d4, 0x0010c8d4, + 0x0010c79f, 0x0010c8d4, 0x0010c8d4, 0x0010c79f, + 0x0010c7ec, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c878, 0x0010c8d4, 0x0010c79f, + 0x0010c79f, 0x0010c8a0, 0x0010c8d4, 0x0010c79f, + 0x0010c79f, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c7d3, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c7d3, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c7d3, 0x0010c7d3, 0x0010c7d3, + 0x0010c79f, 0x0010c79f, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c7d3, 0x0010c79f, 0x0010c79f, + 0x0010c79f, 0x0010c7ae, 0x0010c7c9, 0x0010c7a0, + 0x0010c79f, 0x0010c79f, 0x0010c8d4, 0x059dfe76, + 0x4933c857, 0x05f5fe95, 0x05000007, 0x4a02601c, + 0x0010c7a9, 0x59a80061, 0x48026205, 0x643a6203, + 0x1c01f000, 0x640a6203, 0x59a8005f, 0x800000c4, + 0x48026006, 0x1c01f000, 0x4933c857, 0x05f5fe87, + 0x05000007, 0x4a02601c, 0x0010c7b7, 0x59a80061, + 0x48026205, 0x643a6203, 0x1c01f000, 0x916c0583, + 0x0502000a, 0x5930041b, 0x4803c857, 0x9000050f, + 0x0500000a, 0x9000050c, 0x05000004, 0x4803c857, + 0x05f9fe97, 0x0501f005, 0x4803c857, 0x65726403, + 0x64066203, 0x05ddf565, 0x4933c857, 0x0009f810, + 0x1c01f000, 0x4933c857, 0x05f5fa88, 0x05000109, + 0x4d2c0000, 0x59325809, 0x64025a0a, 0x0001fba8, + 0x5c025800, 0x497a6009, 0x0501f102, 0x05f5fe63, + 0x05000007, 0x59a80061, 0x48026205, 0x643a6203, + 0x59a8005f, 0x48026006, 0x1c01f000, 0x4d2c0000, + 0x59325809, 0x05a1f9f5, 0x5c025800, 0x0009f010, + 0x59a8005f, 0x48026006, 0x05f5fe54, 0x05000007, + 0x4a02601c, 0x0010c7ea, 0x59a80061, 0x48026205, + 0x643a6203, 0x1c01f000, 0x640a6203, 0x1c01f000, + 0x4d3c0000, 0x417a7800, 0x05c5ff08, 0x5c027800, + 0x0501f0e4, 0x05c9fd12, 0x050000e2, 0x59a8024c, + 0x8c000508, 0x0500000e, 0x5932680a, 0x4c580000, + 0x6008b000, 0x91241c01, 0x91341406, 0x05edfd91, + 0x80000540, 0x5c00b000, 0x050200d6, 0x59340200, + 0x8400051a, 0x48026a00, 0x0501f048, 0x599c0017, + 0x8c00050a, 0x0502000b, 0x4d3c0000, 0x417a7800, + 0x05c5feee, 0x5c027800, 0x59340212, 0x82000500, + 0x0000ff00, 0x0502001c, 0x601c0800, 0x05c5fef1, + 0x83440d80, 0x000007fe, 0x050200c2, 0x05adfea0, + 0x05c1fcaa, 0x05000009, 0x59240200, 0x8c00051e, + 0x0500000c, 0x59300809, 0x4d300000, 0x05b1f81d, + 0x5c026000, 0x0501f0b7, 0x05b1f8bf, 0x05020005, + 0x4d300000, 0x05adfd17, 0x5c026000, 0x0501f0b1, + 0x59a8224c, 0x8c100514, 0x050000ae, 0x05adfe83, + 0x0501f0ac, 0x599c0019, 0x8c00050e, 0x05000004, + 0x601c0800, 0x05c5fed3, 0x0501f0a6, 0x050200a5, + 0x59340c00, 0x82040d00, 0x000000ff, 0x4937c857, + 0x4807c857, 0x90040486, 0x0502100f, 0x4d3c0000, + 0x4d400000, 0x60a68000, 0x417a7800, 0x916c0583, + 0x05020006, 0x602c3000, 0x0505fca2, 0x42000000, + 0x001123f5, 0x0505ff16, 0x05adfb81, 0x5c028000, + 0x5c027800, 0x916c0582, 0x05020004, 0x59a80047, + 0x80000000, 0x48035047, 0x600c0800, 0x05c5feb5, + 0x64066407, 0x64066203, 0x640a6403, 0x05ddfcdb, + 0x4ce80000, 0x6005d000, 0x05d9fa95, 0x5c01d000, + 0x1c01f000, 0x59340200, 0x8400051a, 0x48026a00, + 0x05c9fca2, 0x0500007b, 0x60100800, 0x05c5fea5, + 0x0505fca0, 0x05020077, 0x05f5fdd8, 0x05000009, + 0x59a80061, 0x48026205, 0x643a6203, 0x59a8005f, + 0x48026006, 0x4a02601c, 0x0010c868, 0x1c01f000, + 0x60140800, 0x05c5fe97, 0x64066407, 0x64066203, + 0x640e6403, 0x05ddf4bd, 0x05c9fc95, 0x05020065, + 0x60180800, 0x0501f86c, 0x0501f062, 0x60100800, + 0x05c5fe8c, 0x05fdf77e, 0x05c9faa9, 0x0501f05d, + 0x4d300000, 0x05f5fdbd, 0x0500000c, 0x5930082a, + 0x40066000, 0x59300416, 0x8c00051e, 0x05020003, + 0x5c026000, 0x0501f055, 0x5c026000, 0x4a02601c, + 0x0010c888, 0x0501f051, 0x5c026000, 0x0009f010, + 0x4c340000, 0x41306800, 0x05e9f88e, 0x05000012, + 0x64066203, 0x647a6403, 0x58340c1b, 0x4806641b, + 0x58340a1b, 0x4806621b, 0x5834002a, 0x4802602a, + 0x5834080a, 0x4806600a, 0x5834081d, 0x4806601d, + 0x05f5fd8f, 0x64126407, 0x42000800, 0x80000040, + 0x0005fee2, 0x40366000, 0x5c006800, 0x0009f010, + 0x5930082a, 0x4807c857, 0x800409c0, 0x05000031, + 0x5804001e, 0x81300580, 0x0502002e, 0x4978081e, + 0x58041416, 0x8c080516, 0x0500002a, 0x8c080514, + 0x05000028, 0x84081516, 0x48080c16, 0x58065809, + 0x812e59c0, 0x05000023, 0x492fc857, 0x4d300000, + 0x40066000, 0x641e6203, 0x417a7800, 0x0005fe63, + 0x5c026000, 0x0501f01b, 0x05f5fd7c, 0x00080010, + 0x5930002a, 0x80000540, 0x05000018, 0x4c340000, + 0x40006800, 0x58340407, 0x5c006800, 0x90000583, + 0x000a0010, 0x4a02601c, 0x0010c8c8, 0x0501f00f, + 0x4d300000, 0x4d1c0000, 0x5932382a, 0x05e9f84d, + 0x05000004, 0x4a026416, 0x00000100, 0x05f5fc1a, + 0x5c023800, 0x5c026000, 0x0009f010, 0x05c5fe2d, + 0x05f5fd62, 0x00080010, 0x497a601c, 0x59a80061, + 0x48026205, 0x643a6203, 0x59a8005f, 0x48026006, + 0x1c01f000, 0x4933c857, 0x4807c857, 0x05c5fe21, + 0x4d3c0000, 0x417a7800, 0x05c5fe14, 0x5c027800, + 0x5934000a, 0x84000520, 0x4802680a, 0x05c9f238, + 0x59340400, 0x4803c857, 0x80000110, 0x9000348c, + 0x059e1d29, 0x91383595, 0x05020002, 0x0c01f004, + 0x91383596, 0x059e0d24, 0x0c01f00d, 0x0010a081, + 0x0010a081, 0x0010a081, 0x0010a081, 0x0010d5d4, + 0x0010a081, 0x0010c92d, 0x0010c90b, 0x0010a081, + 0x0010a081, 0x0010a081, 0x0010a081, 0x0010a081, + 0x0010a081, 0x0010a081, 0x0010a081, 0x0010d5d4, + 0x0010a081, 0x0010c92d, 0x0010c93e, 0x0010a081, + 0x0010a081, 0x0010a081, 0x0010a081, 0x4933c857, + 0x5932481d, 0x59240400, 0x8c000508, 0x05000014, + 0x813669c0, 0x05000012, 0x59340212, 0x82000500, + 0x0000ff00, 0x0500000e, 0x599c0019, 0x8c00050e, + 0x0502000b, 0x4d3c0000, 0x417a7800, 0x05c5fddb, + 0x5c027800, 0x600c0800, 0x05c5fde2, 0x64066407, + 0x64066203, 0x640a6403, 0x05ddf408, 0x59cc0001, + 0x59340802, 0x80040580, 0x82000500, 0x00ffffff, + 0x000a0010, 0x59345002, 0x05c5fb55, 0x482a6802, + 0x0009f010, 0x4933c857, 0x59303403, 0x9018359e, + 0x0502000d, 0x91383595, 0x000a0010, 0x4c340000, + 0x5930682a, 0x803469c0, 0x05000005, 0x58343416, + 0x82183500, 0xffff1fff, 0x48186c16, 0x5c006800, + 0x0009f010, 0x1c01f000, 0x4933c857, 0x05edfa3e, + 0x000a0010, 0x64066203, 0x64066403, 0x05ddf3e7, + 0x493bc857, 0xb1380591, 0x05020007, 0x05e1fc30, + 0x05ea001e, 0x59300203, 0x90000582, 0x05000062, + 0x059dfcc9, 0x913805a7, 0x05000015, 0xb1380588, + 0x0500000d, 0x91380594, 0x05000011, 0xb13805a1, + 0x05000003, 0xb13805a0, 0x059e0cbf, 0x05e1fc20, + 0x05ea000e, 0x59300203, 0x9000058e, 0x050006bc, + 0x059dfcb9, 0x05e1fc1a, 0x05ea0008, 0x59300203, + 0x90000584, 0x00080183, 0x059dfcb3, 0x4933c857, + 0x59300403, 0xb0000c84, 0x059e1caf, 0xb0000480, + 0x059c1cad, 0x40027000, 0x4803c857, 0x0c01f001, + 0x0010c970, 0x0010c971, 0x0010c971, 0x0010c987, + 0x059dfca5, 0x05ddffb6, 0x59325809, 0x812e59c0, + 0x05000012, 0x832c0500, 0x00ff0000, 0x0500000f, + 0x640a6203, 0x5932680a, 0x59340200, 0x8c00050e, + 0x0502000a, 0x60128000, 0x0501fd4d, 0x497a6009, + 0x59300006, 0x80000540, 0x05020003, 0x59a80060, + 0x48026006, 0x641e6203, 0x1c01f000, 0x05ddffa0, + 0x05f5f8ca, 0x05e4075c, 0x59325809, 0x05a1f83e, + 0x05e5f759, 0x059dfc88, 0x05f5fca8, 0x05000005, + 0x59a80061, 0x48026205, 0x643a6203, 0x0501f009, + 0x59325809, 0x592c040e, 0x8c000502, 0x05000004, + 0x641e6203, 0x610e7000, 0x0009f039, 0x64126203, + 0x1c01f000, 0x0505f83d, 0x00080181, 0x1c01f000, + 0x05f5fc96, 0x05000007, 0x4a02601c, 0x0010c9a8, + 0x59a80061, 0x48026205, 0x643a6203, 0x1c01f000, + 0x64066203, 0x65066403, 0x42027800, 0x80002042, + 0x0005f6e2, 0xb1380498, 0x05001008, 0xb13805a1, + 0x05000004, 0xb13805a0, 0x05000002, 0x059dfc62, + 0x4933c857, 0x1c01f000, 0xb1380591, 0x05000004, + 0xb1380581, 0x059e0c5c, 0x1c01f000, 0x0005fe84, + 0x0505f855, 0x0009f010, 0xb1380498, 0x05ee16e2, + 0xb1380492, 0x059e1c54, 0xb1380489, 0x059c1c52, + 0x0c01f001, 0x0010c9cf, 0x0010c9fd, 0x0010c9ce, + 0x0010c9ce, 0x0010c9ce, 0x0010c9ce, 0x0010c9fd, + 0x0010c9ce, 0x0010ca1b, 0x059dfc47, 0x05f5fc67, + 0x0500000b, 0x59300416, 0x8c000504, 0x05020008, + 0x4a02601c, 0x0010c9db, 0x59a80061, 0x48026205, + 0x64426203, 0x65266403, 0x1c01f000, 0x59325809, + 0x592c040e, 0x8c00051e, 0x05000010, 0x82000d00, + 0x000000c0, 0x82040d80, 0x00000080, 0x05000011, + 0x59300804, 0x8c040518, 0x0502000e, 0x59300416, + 0x8c000516, 0x05000003, 0x641e6203, 0x0501f011, + 0x61067000, 0x0009f1b1, 0x641e6203, 0x497a6006, + 0x59300416, 0x8c000516, 0x0502000a, 0x0005f684, + 0x59325809, 0x592c0c0e, 0x8c04051a, 0x05020003, + 0x0005fe84, 0x0009f010, 0x0501ffe0, 0x05fc07fd, + 0x1c01f000, 0x05ddff0d, 0x59325809, 0x5932680a, + 0x59340200, 0x8c00050e, 0x0500000d, 0x592c040e, + 0x82000500, 0x000000c0, 0x82000580, 0x00000080, + 0x05000005, 0x592c0013, 0x59301817, 0x800c1c80, + 0x480e6017, 0x640a6203, 0x0501f00c, 0x60128000, + 0x0501fcbb, 0x05f9fa46, 0x59300006, 0x80000540, + 0x05020004, 0x59a80060, 0x800000c2, 0x48026006, + 0x497a6009, 0x641e6203, 0x1c01f000, 0x4933c857, + 0x05e1fb5b, 0x059e0bf8, 0x59300203, 0x90000582, + 0x05fc078d, 0x059dfbf4, 0x641e6203, 0x497a6006, + 0x0005f684, 0x641e6203, 0x497a6006, 0x0005f67b, + 0x59300416, 0x8c00051c, 0x000a01a0, 0x59325809, + 0x592c2013, 0x40080000, 0x80102480, 0x59300017, + 0x80102400, 0x48126017, 0x0009f1a0, 0x8c04050e, + 0x05020007, 0x641a6203, 0x0501f822, 0x5930002b, + 0x80000540, 0x05a20d9c, 0x0005f67b, 0x640a6203, + 0x1c01f000, 0x60040800, 0x05a1fd97, 0x90040581, + 0x000801a5, 0x05fdf7e4, 0x83300580, 0x00115a74, + 0x05000004, 0x59300416, 0x8c00051c, 0x05000006, + 0x59300008, 0x8c000522, 0x05a20b67, 0x00080190, + 0x1c01f000, 0x59300013, 0x80000540, 0x00080190, + 0x59325809, 0x592c040b, 0x8c000510, 0x05000004, + 0x497a6013, 0x05a1fb5c, 0x00080190, 0x1c01f000, + 0x492fc857, 0x480bc857, 0x8c08053e, 0x05000005, + 0x80081080, 0x80081000, 0x60240800, 0x0501f002, + 0x60540800, 0x480a580f, 0x1c01f000, 0x1c01f000, + 0x91380593, 0x05000003, 0x91380594, 0x059e0bae, + 0x59300416, 0x8c000516, 0x059c0bab, 0x1c01f000, + 0x059dfba9, 0x59300009, 0x80000540, 0x059e0ba6, + 0x1c01f000, 0x59300416, 0x8c000516, 0x059c0ba2, + 0x1c01f000, 0x64126203, 0x493a6403, 0x42000800, + 0x80002001, 0x0005f6e2, 0x640e6203, 0x493a6403, + 0x05f5fbba, 0x05000007, 0x59300416, 0x8c00050a, + 0x05020004, 0x4a02601c, 0x0010ca84, 0x1c01f000, + 0x0001f99e, 0x59325809, 0x592c040e, 0x8c00051e, + 0x05000011, 0x82000500, 0x000000c0, 0x82000580, + 0x00000080, 0x0500000f, 0x59300416, 0x8c000512, + 0x05020009, 0x8c000510, 0x05020007, 0x592c0410, + 0x80000540, 0x05020004, 0x82080d40, 0x80003065, + 0x0005f6d4, 0x82080d40, 0x80002065, 0x0005f6d4, + 0x82080d40, 0x80002042, 0x0005f6d4, 0x4933c857, + 0x493bc857, 0xb1380484, 0x059e1b73, 0xb1380481, + 0x059c1b71, 0x0c01f001, 0x0010caa9, 0x0010cab7, + 0x0010cac9, 0x59325809, 0x592c040e, 0x8c00051e, + 0x05000019, 0x82001d00, 0x000000c0, 0x820c1d80, + 0x000000c0, 0x05000014, 0x64066203, 0x493a6403, + 0x42000800, 0x80002042, 0x0005f6e2, 0x59325809, + 0x592c040e, 0x8c00051e, 0x0500000b, 0x82001d00, + 0x000000c0, 0x820c1d80, 0x000000c0, 0x05000006, + 0x64066203, 0x493a6403, 0x42000800, 0x80002001, + 0x0005f6e2, 0x497a6009, 0x497a6006, 0x60128000, + 0x0501f403, 0x59325809, 0x592c040e, 0x8c00051e, + 0x05fc07f9, 0x82001d00, 0x000000c0, 0x820c1d80, + 0x000000c0, 0x05fc07f4, 0x640e6203, 0x493a6403, + 0x05f5fb62, 0x05000007, 0x59300416, 0x8c00050a, + 0x05020004, 0x4a02601c, 0x0010cadc, 0x1c01f000, + 0x0001f99e, 0x82080d40, 0x80002065, 0x0005f6d4, + 0x4933c857, 0x493bc857, 0x83380580, 0x00000085, + 0x05000005, 0x83380580, 0x00000088, 0x05000007, + 0x059dfb2d, 0x64266203, 0x493a6403, 0x42000800, + 0x80000040, 0x0005f6e2, 0x83300580, 0x00115a14, + 0x059e0b25, 0x4d1c0000, 0x813669c0, 0x05000003, + 0x0501fee1, 0x05020054, 0x59cc1404, 0x41780000, + 0x0501f853, 0x0500002c, 0x831c0580, 0xffffffff, + 0x05000029, 0x59cc0204, 0x82001580, 0x0000ffff, + 0x05000004, 0x591c1402, 0x80080580, 0x05020022, + 0x05f5fb32, 0x05000010, 0x59cc0005, 0x8c000500, + 0x0500000d, 0x4d300000, 0x411e6000, 0x05f1fa73, + 0x5c026000, 0x05000024, 0x591c0416, 0x8400055a, + 0x48023c16, 0x59300416, 0x8400055a, 0x48026416, + 0x0501f023, 0x591c0407, 0x9000051f, 0x90002586, + 0x05000005, 0x90002584, 0x05000024, 0x90002591, + 0x05020009, 0x497a3a05, 0x61502000, 0x05e5ff40, + 0x05000029, 0x42000000, 0x001123ec, 0x0505fc34, + 0x0501f025, 0x59240400, 0x8c00050a, 0x05020004, + 0x42023800, 0xffffffff, 0x05fdf7f4, 0x813669c0, + 0x05020005, 0x4926601d, 0x42026800, 0x001141b4, + 0x4936600a, 0x4a026403, 0x00000087, 0x59cc1204, + 0x82081580, 0x0000ffff, 0x05020003, 0x4a026403, + 0x00000086, 0x4d2c0000, 0x0505f9e8, 0x05c9fca9, + 0x5c025800, 0x0501f00c, 0x591c0403, 0x900005b8, + 0x05fc07de, 0x591c0203, 0x90000587, 0x05fe07e2, + 0x4d300000, 0x411e6000, 0x05e5fd9f, 0x5c026000, + 0x05fdf7dd, 0x5c023800, 0x1c01f000, 0x4933c857, + 0x480bc857, 0x4c5c0000, 0x4000b800, 0x42002800, + 0x00115aa4, 0x41300000, 0x80140580, 0x0500001c, + 0x58140203, 0x90000580, 0x05000019, 0x58140202, + 0x80080580, 0x05020016, 0x58140203, 0x9000058f, + 0x05000013, 0x58141c07, 0x900c0585, 0x05000010, + 0x8c5c0500, 0x05000003, 0x900c0587, 0x0500000c, + 0x5930200a, 0x5814000a, 0x800001c0, 0x0500000d, + 0x82001d80, 0x001141b4, 0x0500000a, 0x801021c0, + 0x05000003, 0x80100580, 0x05000011, 0x90142c30, + 0x41540000, 0x80140480, 0x05021020, 0x05fdf7de, + 0x5814002a, 0x801021c0, 0x05000005, 0x58102002, + 0x82102500, 0x00ffffff, 0x05fdf7f3, 0x8c5c0500, + 0x05fe07f3, 0x5930202a, 0x05fdf7ef, 0x40163800, + 0x8c5c0500, 0x05000007, 0x4c080000, 0x4c140000, + 0x0505f93f, 0x5c002800, 0x5c001000, 0x05fc07e8, + 0x831c0580, 0xffffffff, 0x05000006, 0x591c000a, + 0x800001c0, 0x05020003, 0x5930000a, 0x4802380a, + 0x81300540, 0x0501f009, 0x8c5c0500, 0x05000007, + 0x40080800, 0x42023800, 0xffffffff, 0x05c9fc56, + 0x05fc07f0, 0x80000580, 0x5c00b800, 0x1c01f000, + 0x4933c857, 0x83300580, 0x001159e4, 0x05020037, + 0x64026203, 0x91380593, 0x0502002c, 0x59300403, + 0x82000580, 0x00000092, 0x059e0a6f, 0x59a800a0, + 0x59325809, 0x812e59c0, 0x05000005, 0x812c0580, + 0x059e0a69, 0x592c0000, 0x497a5800, 0x800001c0, + 0x05000004, 0x480350a0, 0x05e5fc0a, 0x0501f003, + 0x497b50a0, 0x497b50a1, 0x812e59c0, 0x0500001e, + 0x592c0208, 0xb0000595, 0x059c060f, 0x91380593, + 0x0502000d, 0x592c0817, 0x82040580, 0xffffffff, + 0x05000007, 0xa0040494, 0x05021005, 0x05000004, + 0x64180c07, 0x64000c07, 0x49780806, 0x64025a0a, + 0x0001f3a8, 0x64c65a0a, 0x64125815, 0x4a025816, + 0x000000ff, 0x0001f3a8, 0x913805a7, 0x05000003, + 0x91380594, 0x059e0a44, 0x493bc857, 0x05ddfd54, + 0x05fdf7cf, 0x1c01f000, 0x4933c857, 0x91380593, + 0x0502000c, 0x59300403, 0x4803c857, 0x82000c80, + 0x00000085, 0x059c1a38, 0x82000c80, 0x00000093, + 0x059e1a35, 0x82000480, 0x00000085, 0x0c01f01c, + 0x913805a7, 0x0500000f, 0x91380594, 0x0500000d, + 0x493bc857, 0xb13805a1, 0x05000003, 0xb13805a0, + 0x05020007, 0x05e1f98a, 0x05e60578, 0x59300203, + 0x9000058e, 0x05000417, 0x059dfa23, 0x05e5f573, + 0x493bc857, 0x05ddfd32, 0x59325809, 0x812e59c0, + 0x05e404ed, 0x64c65a0a, 0x64125815, 0x4a025816, + 0x000000ff, 0x0001fba8, 0x05e5f4e7, 0x0010cc0d, + 0x0010cc11, 0x0010cc11, 0x0010cc0d, 0x0010cc0d, + 0x0010cc0d, 0x0010cc0d, 0x0010cc0d, 0x0010cc0d, + 0x0010cc0d, 0x0010cc0d, 0x0010cc0d, 0x0010cc0d, + 0x0010cc0e, 0x059dfa08, 0x59325809, 0x64025a0a, + 0x0001fba8, 0x0009f010, 0x4933c857, 0x42000000, + 0x00112408, 0x0505fb42, 0x0501fdfb, 0x497a6205, + 0x602e8000, 0x0501f805, 0x641a6407, 0x641e6203, + 0x497a6006, 0x1c01f000, 0x4933c857, 0x4943c857, + 0x59300407, 0x90000587, 0x05020002, 0x1c01f000, + 0x05ddfdad, 0x4df00000, 0x59300407, 0x90000586, + 0x05020005, 0x59300203, 0x90000588, 0x05020002, + 0x497a6009, 0x05f1fe25, 0x0500000c, 0x9140058c, 0x0500000a, 0x59300809, 0x58040000, 0x80001540, 0x05000006, 0x49780800, 0x4d2c0000, 0x400a5800, - 0x0501fa52, 0x5c025800, 0x05f1fc05, 0x90000c91, - 0x05a218a2, 0x0c01f001, 0x0010c563, 0x0010c566, - 0x0010c54b, 0x0010c570, 0x0010c57c, 0x0010c54b, - 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x0010c54b, - 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x0010c54b, - 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x05f9f966, - 0x4d400000, 0x5930002b, 0x80000540, 0x05000004, - 0x41400800, 0x05a5f9e6, 0x40068000, 0x4d2c0000, - 0x59325809, 0x05f1ff74, 0x05000006, 0x592c040b, - 0x8c000510, 0x05000002, 0x05ddf9f3, 0x0501fa2b, - 0x4c5c0000, 0x5930b80a, 0x05e5fe72, 0x485e600a, - 0x5c00b800, 0x5c025800, 0x5c028000, 0x5c03e000, - 0x05dc07a0, 0x1c01f000, 0x598c000b, 0x81300580, - 0x05020003, 0x05e1faa7, 0x0502000e, 0x05ddfc4b, - 0x05fc07df, 0x05ddfebf, 0x0500000a, 0x05a1f86b, - 0x05f1fbc0, 0x05020003, 0x05e1fa6e, 0x05020005, - 0x05ddfb62, 0x05fc07d6, 0x05ddfeb6, 0x05a20863, - 0x59300203, 0x90000c91, 0x05a21860, 0x0c01f7bf, - 0x05a5facd, 0x05fdf7ce, 0x4933c857, 0x4d240000, - 0x4c5c0000, 0x4d440000, 0x4d340000, 0x4c580000, - 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x59cc0007, - 0x4c000000, 0x59cc0001, 0x82000500, 0x00ffffff, - 0x82000d80, 0x00fffffe, 0x5c000000, 0x05020005, - 0x801c0d80, 0x05020054, 0x42000000, 0x00fffffe, - 0x05d5fb3a, 0x05c80ce4, 0x0502004f, 0x4178b800, - 0x91cc1408, 0x6008b000, 0x91341c06, 0x05edfaac, - 0x05000002, 0x6004b800, 0x5930001d, 0x4c000000, - 0x05c9fcd1, 0x4926601d, 0x5930000a, 0x4c000000, - 0x59242c00, 0x8c14050a, 0x05020011, 0x81342d80, - 0x05000002, 0x60102800, 0x58002403, 0x59340c03, - 0x59341802, 0x820c1d00, 0x00ffffff, 0x60143000, - 0x59cc4008, 0x59cc3809, 0x9c2041c0, 0x9c1c39c0, - 0x611a8000, 0x41301000, 0x0501f9f5, 0x8c5c0500, - 0x0502001f, 0x4936600a, 0x83440d80, 0x000007fe, - 0x0502000f, 0x60683000, 0x0501ffc5, 0x42000000, - 0x0010e451, 0x0505fa1b, 0x4d3c0000, 0x4d400000, - 0x60a68000, 0x05b1f852, 0x602a7800, 0x05b1f89e, + 0x0501fa93, 0x5c025800, 0x5930001e, 0x800001c0, + 0x05f60f6d, 0x05f1fa78, 0x90000c91, 0x059e19d6, + 0x0c01f001, 0x0010cc6a, 0x0010cc6d, 0x0010cc52, + 0x0010cc77, 0x0010cc83, 0x0010cc52, 0x0010cc52, + 0x0010cc52, 0x0010cc52, 0x0010cc52, 0x0010cc52, + 0x0010cc52, 0x0010cc52, 0x0010cc52, 0x0010cc52, + 0x0010cc52, 0x0010cc52, 0x05f9f805, 0x4d400000, + 0x5930002b, 0x80000540, 0x05000004, 0x41400800, + 0x05a1fb7d, 0x40068000, 0x4d2c0000, 0x59325809, + 0x05f1fdf6, 0x05000006, 0x592c040b, 0x8c000510, + 0x05000002, 0x05d9ffa0, 0x0501fa69, 0x4c5c0000, + 0x5930b80a, 0x05e5fc80, 0x485e600a, 0x5c00b800, + 0x5c025800, 0x5c028000, 0x5c03e000, 0x05dc0557, + 0x1c01f000, 0x598c000b, 0x81300580, 0x05020003, + 0x05e1f85e, 0x0502000e, 0x05ddf9fd, 0x05fc07df, + 0x05ddfc75, 0x0500000a, 0x059df99f, 0x05f1fa33, + 0x05020003, 0x05e1f825, 0x05020005, 0x05ddf914, + 0x05fc07d6, 0x05ddfc6c, 0x059e0997, 0x59300203, + 0x90000c91, 0x059e1994, 0x0c01f7bf, 0x05a1fc64, + 0x05fdf7ce, 0x4933c857, 0x4d240000, 0x4c5c0000, + 0x4d440000, 0x4d340000, 0x4c580000, 0x59cc3800, + 0x821c3d00, 0x00ffffff, 0x59cc0007, 0x4c000000, + 0x59cc0001, 0x82000500, 0x00ffffff, 0x82000d80, + 0x00fffffe, 0x5c000000, 0x05020005, 0x801c0d80, + 0x05020061, 0x42000000, 0x00fffffe, 0x05d1ffdf, + 0x05c808a6, 0x0502005c, 0x4178b800, 0x83440580, + 0x000007fe, 0x05000007, 0x91cc1408, 0x6008b000, + 0x91341c06, 0x05edf8e7, 0x05000002, 0x6004b800, + 0x5930001d, 0x4c000000, 0x05c9f890, 0x4926601d, + 0x5930000a, 0x4c000000, 0x59242c00, 0x8c14050a, + 0x05020018, 0x81342d80, 0x05000002, 0x60102800, + 0x58002403, 0x59340c03, 0x59341802, 0x820c1d00, + 0x00ffffff, 0x60143000, 0x59cc4008, 0x59cc3809, + 0x9c2041c0, 0x9c1c39c0, 0x611a8000, 0x82100580, + 0x000007fe, 0x05020005, 0x59240200, 0x82000500, + 0xfffffe7f, 0x48024a00, 0x41301000, 0x0501fa2b, + 0x8c5c0500, 0x05020022, 0x4936600a, 0x83440d80, + 0x000007fe, 0x05020012, 0x60683000, 0x0505f811, + 0x42000000, 0x001123f5, 0x0505fa85, 0x4d3c0000, + 0x4d400000, 0x60a68000, 0x59240a00, 0x84040d02, + 0x48064a00, 0x05adf9da, 0x602a7800, 0x05adfa30, 0x5c028000, 0x5c027800, 0x0501f00d, 0x602c3000, - 0x0501ffb7, 0x42000000, 0x0010e451, 0x0505fa0d, + 0x0505f800, 0x42000000, 0x001123f5, 0x0505fa74, 0x4d3c0000, 0x4d400000, 0x60a68000, 0x417a7800, - 0x05adfd58, 0x5c028000, 0x5c027800, 0x5c000000, + 0x05a9fedb, 0x5c028000, 0x5c027800, 0x5c000000, 0x4802600a, 0x5c000000, 0x4802601d, 0x59cc0007, 0x83440d80, 0x000007fe, 0x05020005, 0x42000000, 0x00fffffe, 0x4a026c00, 0x00000707, 0x48026802, 0x80000580, 0x5c00b000, 0x5c026800, 0x5c028800, 0x5c00b800, 0x5c024800, 0x1c01f000, 0x4933c857, - 0x4c040000, 0x59a800b6, 0xb00005b4, 0x05020040, - 0x59cc0a08, 0x82040480, 0x00000100, 0x05001033, - 0x59cc0c08, 0x82040500, 0x00008000, 0x05000035, - 0x59a80041, 0x80000540, 0x05020009, 0x5930100a, + 0x4c040000, 0x59a800bb, 0xb00005b4, 0x05020043, + 0x59cc0a08, 0x82040480, 0x00000100, 0x05001036, + 0x59cc0c08, 0x82040500, 0x00008000, 0x05000038, + 0x59a80044, 0x80000540, 0x05020009, 0x5930100a, 0x58080212, 0x82000500, 0x0000ff00, 0x05000004, - 0x82040500, 0x00000800, 0x0500002a, 0x59cc0c09, - 0x80040840, 0x05001024, 0x59a80a49, 0x8c040506, - 0x05000004, 0x59cc0c0f, 0x8c04051e, 0x05020012, - 0x59cc0a17, 0x800409c0, 0x05020012, 0x59cc0a18, - 0x82040480, 0x00000100, 0x05001014, 0x59cc0c18, - 0x800409c0, 0x0502000e, 0x59cc0c19, 0x80040840, - 0x05001011, 0x59cc0c1a, 0x80040840, 0x05001011, - 0x0501f017, 0x4a02621c, 0x00000100, 0x0501f012, - 0x4a02621c, 0x00000300, 0x0501f00f, 0x4a02621c, - 0x00000500, 0x0501f00c, 0x4a02621c, 0x00000700, - 0x0501f009, 0x4a02621c, 0x00000900, 0x0501f006, - 0x4a02621c, 0x00000f00, 0x0501f003, 0x4a02621c, - 0x00002d00, 0x90000541, 0x0501f002, 0x80000580, - 0x5c000800, 0x1c01f000, 0x59cc0407, 0x4803c857, - 0x82000580, 0x00000800, 0x05000002, 0x6402621c, - 0x1c01f000, 0x4933c857, 0x4c580000, 0x59cc000c, - 0x59340802, 0x82040d00, 0x00ffffff, 0x80040580, - 0x0502000a, 0x91cc1408, 0x6008b000, 0x91341c06, - 0x05edf9ff, 0x05020005, 0x91cc140a, 0x6008b000, - 0x91341c08, 0x05edf9fa, 0x5c00b000, 0x1c01f000, - 0x4933c857, 0x4c580000, 0x91cc140b, 0x6008b000, - 0x91341c06, 0x05edf9f2, 0x05020008, 0x91cc140d, - 0x6008b000, 0x91341c08, 0x05edf9ed, 0x05000014, - 0x4933c856, 0x4933c856, 0x4933c857, 0x59340009, - 0x4803c857, 0x5934000e, 0x4803c857, 0x59340008, - 0x4803c857, 0x5934000d, 0x4803c857, 0x59340007, - 0x4803c857, 0x5934000c, 0x4803c857, 0x59340006, - 0x4803c857, 0x5934000b, 0x4803c857, 0x5c00b000, - 0x1c01f000, 0x4933c857, 0x4947c857, 0x4943c857, - 0x4c600000, 0x05ddfe9e, 0x4df00000, 0x4d2c0000, - 0x4d300000, 0x4d340000, 0x4c580000, 0x0501f8d3, - 0x4130c000, 0x42026000, 0x00111b00, 0x59a8003b, - 0x8060c1c0, 0x05000005, 0x82601580, 0x00111a70, - 0x05000002, 0x80000040, 0x81640480, 0x05021092, - 0x40600000, 0x81300580, 0x0500008a, 0x0501fa1a, - 0x05020088, 0x812649c0, 0x05000004, 0x5930001d, - 0x81240580, 0x05020083, 0x5932680a, 0x05e5fb73, - 0x05000080, 0x59300407, 0x90000c92, 0x059e1f43, - 0x0c01f001, 0x0010c714, 0x0010c6ac, 0x0010c6ba, - 0x0010c6c4, 0x0010c6ac, 0x0010c6ba, 0x0010c6ec, - 0x0010c6f9, 0x0010c6ab, 0x0010c6ab, 0x0010c6ff, - 0x0010c6ab, 0x0010c6ab, 0x0010c6ab, 0x0010c6ab, - 0x0010c710, 0x0010c70a, 0x0010c708, 0x059dff2f, - 0x59300403, 0xb0000583, 0x05f40ca4, 0x0501ffa7, - 0x05f1ff0b, 0x05000005, 0x05f1ff18, 0x0502005d, - 0x05e9fc0f, 0x0501f05b, 0x05adfcbd, 0x05f1ff13, - 0x05e80c0b, 0x0501f057, 0x59325809, 0x05f1fe0e, - 0x05000054, 0x49425a0a, 0x497a5c0d, 0x0001fb82, - 0x59300229, 0x90000583, 0x05f00ee6, 0x0501f04d, - 0x05f9fa99, 0x59300008, 0x8c000500, 0x05000003, - 0x05a5f981, 0x0501f007, 0x59300203, 0x90000584, - 0x05a4097d, 0x59300203, 0x90000584, 0x05a4097a, - 0x59325809, 0x05f1fdf8, 0x0500003e, 0x592c0208, - 0x82000500, 0x000000ff, 0x90000594, 0x05f20ed1, - 0x05f5ffd9, 0x0005f9f3, 0x05d1fd2e, 0x4a025a08, - 0x00000103, 0x592c040c, 0x8c000512, 0x05000006, - 0x4d2c0000, 0x592c000d, 0x40025800, 0x05a1fab8, - 0x5c025800, 0x49425a0a, 0x497a580d, 0x0501fc4a, - 0x05f5fc75, 0x05f1ff3b, 0x0001fb82, 0x0501f025, - 0x59300203, 0x90000584, 0x05a4095b, 0x59325809, - 0x05f1fdd9, 0x0500001f, 0x49425a0a, 0x0501fc3e, - 0x05f5ffbd, 0x0005f9f3, 0x05f5fc67, 0x0001fb82, - 0x0501f018, 0x59300203, 0x90000591, 0x05020019, - 0x59300429, 0x48026203, 0x0501f016, 0x59300203, - 0x90000584, 0x05a40948, 0x59325809, 0x05f1fdc6, - 0x0500000c, 0x49425a0a, 0x0001fb82, 0x0501f009, - 0x59325819, 0x05a1fa92, 0x05a5ffff, 0x59325809, - 0x05f1fdbd, 0x05000003, 0x49425a0a, 0x0001fb82, - 0x05e5fcc0, 0x8d3c051c, 0x05000002, 0x497a600a, - 0x91326430, 0x41580000, 0x81300480, 0x05fc1771, - 0x0501f002, 0x41526000, 0x8d3c0518, 0x0500002b, - 0x59a80898, 0x59a80099, 0x80040480, 0x05000027, - 0x81300800, 0x41540000, 0x80040480, 0x05021023, - 0x5930000a, 0x800001c0, 0x05fe0765, 0x0001fb00, - 0x05fe07ec, 0x59340802, 0x82040d00, 0x00ffffff, - 0x5930002a, 0x80040580, 0x05fe07e6, 0x59340813, - 0x59301029, 0x80040582, 0x82000500, 0x00ffffff, - 0x0500000c, 0x0505f9bf, 0x42000800, 0x0010e512, - 0x58040005, 0x80080580, 0x82000500, 0x00ffffff, - 0x05fc07d8, 0x90040c0d, 0x8058b040, 0x05fe07f9, - 0x59300203, 0x90000588, 0x05020002, 0x0501fe69, - 0x4936600a, 0x05fdf74e, 0x5c00b000, 0x5c026800, - 0x5c026000, 0x5c025800, 0x5c03e000, 0x05dc0db9, - 0x5c00c000, 0x1c01f000, 0x4933c857, 0x813261c0, - 0x05000025, 0x83300d80, 0x00111a70, 0x05000022, - 0x8d3c0506, 0x05020020, 0x59300c07, 0x90040581, - 0x05000008, 0x90040582, 0x0502001b, 0x59300229, - 0x90000581, 0x05020018, 0x59300c18, 0x0501f002, - 0x59300c03, 0x900405b9, 0x05000003, 0x900405b5, - 0x05020011, 0x4d300000, 0x4d1c0000, 0x5932602a, - 0x4933c857, 0x05f5f9f9, 0x059c0e70, 0x591c001e, - 0x497a381e, 0x591c0c16, 0x84040d02, 0x48063c16, - 0x5c023800, 0x5c026000, 0x81300580, 0x059e0e67, - 0x497a602a, 0x1c01f000, 0x5c000000, 0x4c000000, - 0x4803c857, 0x4d3c0000, 0x60067800, 0x05c5fd68, - 0x5c027800, 0x4c580000, 0x6008b000, 0x5930181d, - 0x900c1c01, 0x91cc140b, 0x05edf8c5, 0x5c00b000, - 0x80000540, 0x1c01f000, 0x492fc857, 0x4943c857, - 0x59a8000c, 0x812c0480, 0x05001014, 0x59a8000a, - 0x812c0480, 0x05021011, 0x4d400000, 0x592c0000, - 0x80005d40, 0x0500000a, 0x497a5800, 0x49425a0a, - 0x4c2c0000, 0x0001fb82, 0x5c025800, 0x9140058c, - 0x05fe07f7, 0x60128000, 0x05fdf7f5, 0x49425a0a, - 0x5c028000, 0x0001f382, 0x1c01f000, 0x61fc21ff, - 0x5930100a, 0x800811c0, 0x05000002, 0x58082403, - 0x41301000, 0x0501f006, 0x41781000, 0x41442000, - 0x0501f003, 0x41781000, 0x61fc21ff, 0x5c000000, - 0x4c000000, 0x4803c857, 0x480bc857, 0x4813c857, - 0x492fc857, 0x4943c857, 0x4d2c0000, 0x4c040000, - 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000, - 0x4c180000, 0x4c1c0000, 0x4c200000, 0x05a1f9c7, - 0x059c0e1e, 0x5c004000, 0x5c003800, 0x5c003000, - 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000, - 0x5c000800, 0x05011000, 0x912c0408, 0x4803c840, + 0x82040500, 0x00000800, 0x0500002d, 0x59cc0c09, + 0x80040840, 0x05001027, 0x59a80a4c, 0x8c040506, + 0x05000004, 0x59cc0c0f, 0x8c04051e, 0x05020015, + 0x59cc0a17, 0x800409c0, 0x05020015, 0x59cc0a18, + 0x82040480, 0x00000100, 0x05001017, 0x59a80807, + 0x8c040508, 0x05020004, 0x59cc0c18, 0x800409c0, + 0x0502000e, 0x59cc0c19, 0x80040840, 0x05001011, + 0x59cc0c1a, 0x80040840, 0x05001011, 0x0501f017, + 0x4a02621c, 0x00000100, 0x0501f012, 0x4a02621c, + 0x00000300, 0x0501f00f, 0x4a02621c, 0x00000500, + 0x0501f00c, 0x4a02621c, 0x00000700, 0x0501f009, + 0x4a02621c, 0x00000900, 0x0501f006, 0x4a02621c, + 0x00000f00, 0x0501f003, 0x4a02621c, 0x00002d00, + 0x90000541, 0x0501f002, 0x80000580, 0x5c000800, + 0x1c01f000, 0x59cc0407, 0x4803c857, 0x82000580, + 0x00000800, 0x05000002, 0x6402621c, 0x1c01f000, + 0x4933c857, 0x4c580000, 0x59cc000c, 0x59340802, + 0x82040d00, 0x00ffffff, 0x80040580, 0x0502000a, + 0x91cc1408, 0x6008b000, 0x91341c06, 0x05edf82d, + 0x05020005, 0x91cc140a, 0x6008b000, 0x91341c08, + 0x05edf828, 0x5c00b000, 0x1c01f000, 0x4933c857, + 0x4c580000, 0x91cc140b, 0x6008b000, 0x91341c06, + 0x05edf820, 0x05020008, 0x91cc140d, 0x6008b000, + 0x91341c08, 0x05edf81b, 0x05000014, 0x4933c856, + 0x4933c856, 0x4933c857, 0x59340009, 0x4803c857, + 0x5934000e, 0x4803c857, 0x59340008, 0x4803c857, + 0x5934000d, 0x4803c857, 0x59340007, 0x4803c857, + 0x5934000c, 0x4803c857, 0x59340006, 0x4803c857, + 0x5934000b, 0x4803c857, 0x5c00b000, 0x1c01f000, + 0x4933c857, 0x4947c857, 0x4943c857, 0x4c600000, + 0x05ddfc45, 0x4df00000, 0x4d2c0000, 0x4d300000, + 0x4d340000, 0x4c580000, 0x0501f901, 0x4130c000, + 0x40be6000, 0x59a8003d, 0x8060c1c0, 0x05000004, + 0x80bc1498, 0x05001002, 0x80000040, 0x81640480, + 0x05021090, 0x40600000, 0x81300580, 0x05000088, + 0x0501fa4f, 0x05020086, 0x812649c0, 0x05000004, + 0x5930001d, 0x81240580, 0x05020081, 0x5932680a, + 0x05e5f94e, 0x0500007e, 0x59300407, 0x90000c92, + 0x059e1869, 0x0c01f001, 0x0010ce27, 0x0010cdc1, + 0x0010cdcf, 0x0010cdd9, 0x0010cdc1, 0x0010cdcf, + 0x0010ce01, 0x0010ce0e, 0x0010cdc0, 0x0010cdc0, + 0x0010ce14, 0x0010cdc0, 0x0010cdc0, 0x0010cdc0, + 0x0010cdc0, 0x0010ce23, 0x0010ce1d, 0x0010ce1d, + 0x059df855, 0x59300403, 0xb0000583, 0x05f40b35, + 0x0501fff9, 0x05f1fd8f, 0x05000005, 0x05f1fd9c, + 0x0502005b, 0x05e9fa34, 0x0501f059, 0x05a9fe3f, + 0x05f1fd97, 0x05e80a30, 0x0501f055, 0x59325809, + 0x05f1fc82, 0x05000052, 0x49425a0a, 0x497a5c0d, + 0x0001fba8, 0x59300229, 0x90000583, 0x05f00d6a, + 0x0501f04b, 0x05f9f935, 0x59300008, 0x8c000500, + 0x05000003, 0x05a1fb0a, 0x0501f007, 0x59300203, + 0x90000584, 0x05a00b06, 0x59300203, 0x90000584, + 0x05a00b03, 0x59325809, 0x05f1fc6c, 0x0500003c, + 0x592c0208, 0x82000500, 0x000000ff, 0x90000594, + 0x05f20d55, 0x05f5fe6a, 0x0005fa1a, 0x05d1f9a1, + 0x4a025a08, 0x00000103, 0x592c040c, 0x8c000512, + 0x05000006, 0x4d2c0000, 0x592c000d, 0x40025800, + 0x059dfbda, 0x5c025800, 0x49425a0a, 0x497a580d, + 0x0501fc7f, 0x05f5fb06, 0x05f1fdbf, 0x0001fba8, + 0x0501f023, 0x59300203, 0x90000584, 0x05a00ae4, + 0x59325809, 0x05f1fc4d, 0x0500001d, 0x49425a0a, + 0x0501fc73, 0x05f5fe4e, 0x0005fa1a, 0x05f5faf8, + 0x0001fba8, 0x0501f016, 0x59300203, 0x90000591, + 0x05020017, 0x59300429, 0x48026203, 0x0501f014, + 0x59300203, 0x90000584, 0x05a00ad1, 0x59325809, + 0x05f1fc3a, 0x0500000a, 0x49425a0a, 0x0001fba8, + 0x0501f007, 0x05a5f95d, 0x59325809, 0x05f1fc33, + 0x05000003, 0x49425a0a, 0x0001fba8, 0x05e5fac2, + 0x8d3c051c, 0x05000002, 0x497a600a, 0x91326430, + 0x41580000, 0x81300480, 0x05fc1773, 0x0501f002, + 0x41526000, 0x8d3c0518, 0x0500002c, 0x59a8089b, + 0x59a8009c, 0x80040480, 0x05000028, 0x81300800, + 0x41540000, 0x80040480, 0x05021024, 0x5930000a, + 0x800001c0, 0x05fe0767, 0x0001fb08, 0x05fe07ec, + 0x59340802, 0x82040d00, 0x00ffffff, 0x5930002a, + 0x80040580, 0x05fe07e6, 0x59340013, 0x59301029, + 0x80080580, 0x82000500, 0x00ffffff, 0x0500000c, + 0x0505fa27, 0x42000800, 0x001124b6, 0x58040005, + 0x80080580, 0x82000500, 0x00ffffff, 0x05fc07d8, + 0x90040c0d, 0x8058b040, 0x05fe07f9, 0x59300203, + 0x90000588, 0x05020003, 0x0501feb3, 0x497a6009, + 0x4936600a, 0x05fdf74f, 0x82bc0580, 0x00115aa4, + 0x0500002f, 0x42026000, 0x00115aa4, 0x59a8029f, + 0x8060c1c0, 0x05000007, 0x806014af, 0x05021005, + 0x82601580, 0x00115a14, 0x05000002, 0x80000040, + 0x59a8123e, 0x80080480, 0x05021021, 0x81300598, + 0x0500001c, 0x0501f982, 0x0502001a, 0x812649c0, + 0x05000004, 0x5930001d, 0x81240580, 0x05020015, + 0x5932680a, 0x05e5f881, 0x05000012, 0x59300407, + 0x90000d84, 0x05020003, 0x0501ff43, 0x0501f009, + 0x90000d91, 0x0502000b, 0x05a5f8fc, 0x59325809, + 0x05f1fbd2, 0x05000003, 0x49425a0a, 0x0001fba8, + 0x05e5fa61, 0x8d3c051c, 0x05000002, 0x497a600a, + 0x91326430, 0x813004af, 0x05fc17e1, 0x5c00b000, + 0x5c026800, 0x5c026000, 0x5c025800, 0x5c03e000, + 0x05dc0b32, 0x5c00c000, 0x1c01f000, 0x4933c857, + 0x813261c0, 0x05000025, 0x83300d80, 0x00115a14, + 0x05000022, 0x8d3c0506, 0x05020020, 0x59300c07, + 0x90040581, 0x05000008, 0x90040582, 0x0502001b, + 0x59300229, 0x90000581, 0x05020018, 0x59300c18, + 0x0501f002, 0x59300c03, 0x900405b9, 0x05000003, + 0x900405b5, 0x05020011, 0x4d300000, 0x4d1c0000, + 0x5932602a, 0x4933c857, 0x05f5f850, 0x05980f66, + 0x591c001e, 0x497a381e, 0x591c0c16, 0x84040d02, + 0x48063c16, 0x5c023800, 0x5c026000, 0x81300580, + 0x059a0f5d, 0x497a602a, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x4d3c0000, 0x60067800, + 0x05c5f836, 0x5c027800, 0x4c580000, 0x6008b000, + 0x5930181d, 0x900c1c01, 0x91cc140b, 0x05e9fec5, + 0x5c00b000, 0x80000540, 0x1c01f000, 0x492fc857, + 0x4943c857, 0x59a8000c, 0x812c0480, 0x05021003, + 0x05f1fb96, 0x05000014, 0x59a8000a, 0x812c0480, + 0x05021011, 0x4d400000, 0x592c0000, 0x80005d40, + 0x0500000a, 0x497a5800, 0x49425a0a, 0x4c2c0000, + 0x0001fba8, 0x5c025800, 0x9140058c, 0x05fe07f7, + 0x60128000, 0x05fdf7f5, 0x49425a0a, 0x5c028000, + 0x0001f3a8, 0x1c01f000, 0x61fc21ff, 0x5930100a, + 0x800811c0, 0x05000002, 0x58082403, 0x41301000, + 0x0501f006, 0x41781000, 0x41442000, 0x0501f003, + 0x41781000, 0x61fc21ff, 0x5c000000, 0x4c000000, + 0x4803c857, 0x480bc857, 0x4813c857, 0x492fc857, + 0x4943c857, 0x4d2c0000, 0x4c040000, 0x4c080000, + 0x4c0c0000, 0x4c100000, 0x4c140000, 0x4c180000, + 0x4c1c0000, 0x4c200000, 0x059dfab7, 0x05980f12, + 0x5c004000, 0x5c003800, 0x5c003000, 0x5c002800, + 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800, + 0x05011000, 0x912c0408, 0x4803c840, 0x6443c842, + 0x40000000, 0x05fd17ff, 0x4a025808, 0x0000010d, + 0x800811c0, 0x05000019, 0x914005a9, 0x05020013, + 0x90180582, 0x05000009, 0x90180583, 0x05000007, + 0x90180588, 0x05000005, 0x90180586, 0x05000006, + 0x90180589, 0x05020009, 0x4a02580d, 0xffffffff, + 0x0501f007, 0x5808280a, 0x58140002, 0x82000500, + 0x00ffffff, 0x48025816, 0x480a580d, 0x58080202, + 0x48025c17, 0x0501f005, 0x4a02580d, 0xffffffff, + 0x4a025c17, 0x0000ffff, 0xb1400586, 0x05000002, + 0x41782800, 0x480e5810, 0x48065811, 0x48225812, + 0x481e5813, 0x481a5c0c, 0xb1400586, 0x05020007, + 0x901805a0, 0x05020005, 0x59a8024c, 0x8c000508, + 0x05000002, 0x84142d46, 0x49425a0c, 0x48125a0a, + 0x82100580, 0x0000ffff, 0x05000029, 0x4d440000, + 0x4d340000, 0x4c140000, 0x4c180000, 0x40128800, + 0x83440480, 0x000007f0, 0x05001006, 0x83440480, + 0x00000800, 0x05021003, 0x05c5fdf0, 0x0501f002, + 0x0001fb08, 0x059a0ec0, 0x59340002, 0x82000500, + 0x00ffffff, 0x48025816, 0x5c003000, 0x5c002800, + 0xb1400586, 0x05020010, 0x901805a0, 0x0502000e, + 0x84142d48, 0x59344006, 0x59343807, 0x59341808, + 0x59340809, 0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, + 0x9c0409c0, 0x480e580e, 0x4806580f, 0x48225812, + 0x481e5813, 0x5c026800, 0x5c028800, 0x48165a0b, + 0x497a5800, 0x497a5c08, 0x812000d0, 0x48025c14, + 0x0501fcc2, 0x5c025800, 0x1c01f000, 0x5c000000, + 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857, + 0x4813c857, 0x4817c857, 0x4d2c0000, 0x4c080000, + 0x4c0c0000, 0x4c100000, 0x4c140000, 0x059dfa36, + 0x05980e91, 0x5c002800, 0x5c002000, 0x5c001800, + 0x5c001000, 0x05011000, 0x912c0408, 0x4803c840, 0x6443c842, 0x40000000, 0x05fd17ff, 0x4a025808, - 0x0000010d, 0x800811c0, 0x05000019, 0x914005a9, - 0x05020013, 0x90180582, 0x05000009, 0x90180583, - 0x05000007, 0x90180588, 0x05000005, 0x90180586, - 0x05000006, 0x90180589, 0x05020009, 0x4a02580d, - 0xffffffff, 0x0501f007, 0x5808280a, 0x58140002, - 0x82000500, 0x00ffffff, 0x48025816, 0x480a580d, - 0x58080202, 0x48025c17, 0x0501f005, 0x4a02580d, - 0xffffffff, 0x4a025c17, 0x0000ffff, 0xb1400586, - 0x05000002, 0x41782800, 0x480e5810, 0x48065811, - 0x48225812, 0x481e5813, 0x481a5c0c, 0xb1400586, - 0x05020007, 0x901805a0, 0x05020005, 0x59a80249, - 0x8c000508, 0x05000002, 0x84142d46, 0x49425a0c, - 0x48125a0a, 0x82100580, 0x0000ffff, 0x05000026, - 0x4d440000, 0x4d340000, 0x4c140000, 0x4c180000, - 0x40128800, 0x83440480, 0x000007f0, 0x05001003, - 0x05c9fa71, 0x0501f002, 0x0001fb00, 0x059e0dcf, - 0x59340002, 0x82000500, 0x00ffffff, 0x48025816, - 0x5c003000, 0x5c002800, 0xb1400586, 0x05020010, - 0x901805a0, 0x0502000e, 0x84142d48, 0x59344006, - 0x59343807, 0x59341808, 0x59340809, 0x9c2041c0, - 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0, 0x480e580e, - 0x4806580f, 0x48225812, 0x481e5813, 0x5c026800, - 0x5c028800, 0x48165a0b, 0x497a5800, 0x497a5c08, - 0x812000d0, 0x48025c14, 0x0501fcaf, 0x5c025800, - 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857, - 0x480bc857, 0x480fc857, 0x4813c857, 0x4817c857, - 0x4d2c0000, 0x4c080000, 0x4c0c0000, 0x4c100000, - 0x4c140000, 0x05a1f949, 0x059c0da0, 0x5c002800, - 0x5c002000, 0x5c001800, 0x5c001000, 0x05011000, - 0x912c0408, 0x4803c840, 0x6443c842, 0x40000000, - 0x05fd17ff, 0x4a025808, 0x0000010d, 0x65265a0c, - 0x480a5a0e, 0x480e5c0e, 0x48125a0f, 0x48165c0f, - 0x82080580, 0x00008014, 0x05020054, 0x820c0580, - 0x0000ffff, 0x05020051, 0x90100586, 0x0502004f, - 0x4d240000, 0x42024800, 0x0010e512, 0x59240005, - 0x5c024800, 0x05cdf855, 0x05000009, 0x82000d00, - 0x00ffff00, 0x05020006, 0x82000c00, 0x00102853, - 0x50040800, 0x80040910, 0x48065a10, 0x82000d00, - 0x0000ffff, 0x48065c10, 0x80000120, 0x48025a11, - 0x59a80249, 0x82001500, 0x00003500, 0x480a5a12, - 0x8c000502, 0x05000016, 0x8c000506, 0x05000006, - 0x90000d0a, 0x90040d8a, 0x05020003, 0x64065c11, - 0x0501f018, 0x8c00050a, 0x05000006, 0x90000d22, - 0x90040da2, 0x05020003, 0x640e5c11, 0x0501f011, - 0x8c000508, 0x05000006, 0x90000d12, 0x90040d92, - 0x05020003, 0x640a5c11, 0x0501f00a, 0x05cdf82b, - 0x05020003, 0x64125c11, 0x0501f006, 0x8c000506, - 0x05000003, 0x64165c11, 0x0501f002, 0x64025c11, - 0x59a8005c, 0x48025c12, 0x59a8005d, 0x48025a13, - 0x59c40801, 0x82040d00, 0x00018000, 0x90040580, - 0x05020003, 0x64025c13, 0x0501f00c, 0x82040580, - 0x00008000, 0x05020003, 0x64065c13, 0x0501f007, - 0x82040580, 0x00010000, 0x05020003, 0x640e5c13, - 0x0501f002, 0x64125c13, 0x0501fc37, 0x5c025800, - 0x1c01f000, 0x5930080a, 0x800409c0, 0x05000004, - 0x58040403, 0x81440580, 0x1c01f000, 0x90000541, - 0x05fdf7fe, 0x4933c857, 0xb13805a1, 0x05000003, - 0xb13805a0, 0x0502000c, 0x5932680a, 0x59340200, - 0x8c00050e, 0x05020002, 0x497a6205, 0x5930001c, - 0x80000540, 0x000407dc, 0x497a601c, 0x0801f800, - 0x1c01f000, 0x1c01f000, 0x4933c857, 0xb13805a1, - 0x05000003, 0xb13805a0, 0x05e60372, 0x59303403, - 0x82180580, 0x00000086, 0x05e4030a, 0x82180580, - 0x00000087, 0x05e40307, 0x497a6205, 0x642a6203, - 0x1c01f000, 0x4933c857, 0xb13805a1, 0x05000003, - 0xb13805a0, 0x05020008, 0x59300c03, 0x4807c857, - 0xb004048a, 0x059e1d05, 0xb0040481, 0x059c1d03, - 0x0c01f002, 0x1c01f000, 0x0010c8e7, 0x0010c8e4, - 0x0010c8f4, 0x0010c8e3, 0x0010c8e3, 0x0010c8e3, - 0x0010c8e3, 0x0010c8e3, 0x0010c8f4, 0x059dfcf7, - 0x497a6205, 0x64126203, 0x1c01f000, 0x497a6205, - 0x59325809, 0x832c0500, 0x00ff0000, 0x05000004, - 0x592c0c0e, 0x8c04051a, 0x05020003, 0x0005fe4e, - 0x0005f7dc, 0x0501f99f, 0x05fc07fd, 0x1c01f000, - 0x497a6205, 0x59cc0002, 0x90000530, 0x90000590, - 0x05f006dc, 0x5930001c, 0x80000540, 0x05000004, + 0x0000010d, 0x65265a0c, 0x480a5a0e, 0x480e5c0e, + 0x48125a0f, 0x48165c0f, 0x82080580, 0x00008014, + 0x05020054, 0x820c0580, 0x0000ffff, 0x05020051, + 0x90100586, 0x0502004f, 0x4d240000, 0x42024800, + 0x001124b6, 0x59240005, 0x5c024800, 0x05c9fbf5, + 0x05000009, 0x82000d00, 0x00ffff00, 0x05020006, + 0x82000c00, 0x001028fb, 0x50040800, 0x80040910, + 0x48065a10, 0x82000d00, 0x0000ffff, 0x48065c10, + 0x80000120, 0x48025a11, 0x59a8024c, 0x82001500, + 0x00003500, 0x480a5a12, 0x8c000502, 0x05000016, + 0x8c000506, 0x05000006, 0x90000d0a, 0x90040d8a, + 0x05020003, 0x64065c11, 0x0501f018, 0x8c00050a, + 0x05000006, 0x90000d22, 0x90040da2, 0x05020003, + 0x640e5c11, 0x0501f011, 0x8c000508, 0x05000006, + 0x90000d12, 0x90040d92, 0x05020003, 0x640a5c11, + 0x0501f00a, 0x05c9fbcb, 0x05020003, 0x64125c11, + 0x0501f006, 0x8c000506, 0x05000003, 0x64165c11, + 0x0501f002, 0x64025c11, 0x59a8005f, 0x48025c12, + 0x59a80060, 0x48025a13, 0x59c40801, 0x82040d00, + 0x00018000, 0x90040580, 0x05020003, 0x64025c13, + 0x0501f00c, 0x82040580, 0x00008000, 0x05020003, + 0x64065c13, 0x0501f007, 0x82040580, 0x00010000, + 0x05020003, 0x640e5c13, 0x0501f002, 0x64125c13, + 0x0501fc4a, 0x5c025800, 0x1c01f000, 0x5930080a, + 0x800409c0, 0x05000004, 0x58040403, 0x81440580, + 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x4933c857, + 0xb13805a1, 0x05000003, 0xb13805a0, 0x0502000c, + 0x5932680a, 0x59340200, 0x8c00050e, 0x05020002, + 0x497a6205, 0x5930001c, 0x80000540, 0x00080010, 0x497a601c, 0x0801f800, 0x1c01f000, 0x1c01f000, - 0x4933c857, 0x493bc857, 0xb13805a1, 0x05000006, - 0xb13805a0, 0x05e6032f, 0x59cc0002, 0x8c000526, - 0x0500000c, 0x59300403, 0x4803c857, 0xb0000589, - 0x059e0cce, 0x497a6205, 0x5930001c, 0x80000540, - 0x05000004, 0x497a601c, 0x0801f800, 0x1c01f000, - 0x1c01f000, 0x4933c857, 0x59300403, 0x82000d80, - 0x00000085, 0x05020007, 0x4a026403, 0x0000008b, - 0x642e6203, 0x42000800, 0x80000040, 0x0005f6ab, - 0x82000d80, 0x0000008b, 0x05020025, 0x4d3c0000, - 0x417a7800, 0x05adfa07, 0x5c027800, 0x42000000, - 0x0010e454, 0x0501feb3, 0x59325809, 0x812e59c0, - 0x05000006, 0x832c0500, 0x00ff0000, 0x05000003, - 0x60128000, 0x05fdfe55, 0x60443000, 0x0501fc50, - 0x05adfce3, 0x59240400, 0x8c00050a, 0x0502000a, - 0x41782800, 0x60103000, 0x60a68000, 0x05fdfe64, - 0x6406642c, 0x64126407, 0x64066403, 0x641e6203, - 0x1c01f000, 0x602c0800, 0x05c5fbab, 0x64066407, - 0x64066403, 0x64066203, 0x05d9f72b, 0x1c01f000, - 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000, - 0x4933c857, 0x59300a03, 0x9004058e, 0x05000003, - 0x90040590, 0x05020019, 0x0501f975, 0x05edfeb9, - 0x59300203, 0x90000d89, 0x0500000b, 0x48026429, - 0x4a026403, 0x00000085, 0x59300416, 0x8400055a, - 0x8400055e, 0x48026416, 0x64266203, 0x64166407, - 0x641a6229, 0x5932680a, 0x59340200, 0x8c00050e, - 0x05020003, 0x59a8005d, 0x48026006, 0x42000800, - 0x80000040, 0x0005feab, 0x1c01f000, 0x4933c857, - 0x4c040000, 0x59300403, 0x90000d9e, 0x05020012, - 0x800000d0, 0x59300a18, 0x82040d00, 0x000000ff, - 0x80040540, 0x4803c857, 0x48026418, 0x4a026403, - 0x00000085, 0x64266203, 0x64166407, 0x64126229, - 0x59a8005d, 0x48026006, 0x42000800, 0x80000040, - 0x0005feab, 0x5c000800, 0x1c01f000, 0x4933c857, - 0x40000000, 0x40000000, 0x1c01f000, 0x59300416, - 0x8c00050c, 0x0502000a, 0x4933c857, 0x4803c857, - 0x8c000518, 0x05000006, 0x8c000512, 0x05f20586, - 0x0501f937, 0x0005fe4e, 0x0005ffdc, 0x1c01f000, - 0x591c0407, 0x4803c857, 0x90000c89, 0x0502100b, - 0x0c01f001, 0x0010c9a2, 0x0010c9a2, 0x0010c9a2, - 0x0010c9a4, 0x0010c9a2, 0x0010c9a4, 0x0010c9a4, - 0x0010c9a2, 0x0010c9a4, 0x80000580, 0x1c01f000, - 0x90000541, 0x1c01f000, 0x591c0407, 0x9000051f, - 0x90000586, 0x0500000a, 0x4803c857, 0x64ee6403, - 0x6426641c, 0x4a02621c, 0x00002a00, 0x64066203, - 0x42000800, 0x80000040, 0x0005f6ab, 0x4803c856, - 0x4c040000, 0x4c140000, 0x4d300000, 0x411e6000, - 0x0501f90f, 0x497a6205, 0x59300416, 0x4803c857, - 0x82000500, 0xffffadff, 0x48026416, 0x497a6405, - 0x5c026000, 0x059dffc1, 0x059c0c18, 0x5c002800, - 0x5c000800, 0x05011000, 0x912c0408, 0x4803c840, - 0x6443c842, 0x40000000, 0x05fd17ff, 0x4a025808, - 0x0000010d, 0x497a5800, 0x65165a0c, 0x491e580d, - 0x59300402, 0x48025c0b, 0x5930041b, 0x48025c0f, - 0x591c0416, 0x84000556, 0x48023c16, 0x591c180a, - 0x580c0403, 0x48025a0a, 0x580c0002, 0x82000500, - 0x00ffffff, 0x48025816, 0x59cc0404, 0x48025c17, - 0x497a5a0b, 0x4816580e, 0x48065a0f, 0x580c0013, - 0x82000500, 0xff000000, 0x80000120, 0x48025c14, - 0x0501faf1, 0x493a6403, 0x4d400000, 0x61168000, - 0x591c0202, 0x4c000000, 0x4d300000, 0x411e6000, - 0x05fdfb31, 0x5c026000, 0x5c000000, 0x48023a02, - 0x5c028000, 0x491e602a, 0x4932381e, 0x641a3c07, - 0x641e3a03, 0x497a3806, 0x497a3a05, 0x1c01f000, - 0x4933c857, 0x91380593, 0x0502000a, 0x59300403, - 0x4803c857, 0x82000d80, 0x00000085, 0x05000026, - 0x82000d80, 0x0000008b, 0x05000023, 0x059dfbd3, - 0x913805a7, 0x0502000a, 0x05ddfa5f, 0x4d2c0000, - 0x4d400000, 0x59325809, 0x60128000, 0x05fdfd77, - 0x5c028000, 0x5c025800, 0x1c01f000, 0x91380594, - 0x05fc07f6, 0xb13805a1, 0x05000009, 0xb13805a0, - 0x05000007, 0x83380580, 0x00000089, 0x05000004, - 0x83380580, 0x0000008a, 0x05e60216, 0x05ddfe9a, - 0x05e60214, 0x59300a03, 0x9004058e, 0x05fc069b, - 0x9004058a, 0x0500000c, 0x9004058c, 0x0500000a, - 0x059dfbb2, 0x05f1fe75, 0x05000005, 0x643a6203, - 0x59a8005e, 0x48026205, 0x1c01f000, 0x642a6203, - 0x1c01f000, 0x83380480, 0x00000093, 0x0502100b, - 0x83380480, 0x00000085, 0x05001008, 0x83380580, - 0x00000089, 0x05000008, 0x83380580, 0x0000008a, - 0x05000031, 0x059dfb9d, 0x493bc857, 0x4933c857, - 0x05e5f1f4, 0x4933c857, 0x4c340000, 0x05f1fe5b, - 0x0500000b, 0x59300416, 0x8c00051a, 0x05000008, - 0x641a6407, 0x59300429, 0x90000d8e, 0x05020002, - 0x60080000, 0x48026203, 0x0501f01d, 0x59300c16, - 0x4c040000, 0x41306800, 0x05e5f9b1, 0x5c000800, - 0x05000015, 0x48066416, 0x64066203, 0x647a6403, - 0x59cc0c07, 0x4806641b, 0x59cc0a07, 0x4806621b, + 0x4933c857, 0xb13805a1, 0x05000003, 0xb13805a0, + 0x05e6015a, 0x59303403, 0x82180580, 0x00000086, + 0x05e400d5, 0x82180580, 0x00000087, 0x05e400d2, + 0x497a6205, 0x642a6203, 0x1c01f000, 0x4933c857, + 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020008, + 0x59300c03, 0x4807c857, 0xb004048a, 0x059a1df6, + 0xb0040481, 0x05981df4, 0x0c01f002, 0x1c01f000, + 0x0010d031, 0x0010d02e, 0x0010d03e, 0x0010d02d, + 0x0010d02d, 0x0010d02d, 0x0010d02d, 0x0010d02d, + 0x0010d03e, 0x0599fde8, 0x497a6205, 0x64126203, + 0x1c01f000, 0x497a6205, 0x59325809, 0x832c0500, + 0x00ff0000, 0x05000004, 0x592c0c0e, 0x8c04051a, + 0x05020003, 0x0005fe84, 0x0009f010, 0x0501f99f, + 0x05fc07fd, 0x1c01f000, 0x497a6205, 0x59cc0002, + 0x90000530, 0x90000590, 0x05f0052a, 0x5930001c, + 0x80000540, 0x05000004, 0x497a601c, 0x0801f800, + 0x1c01f000, 0x1c01f000, 0x4933c857, 0x493bc857, + 0xb13805a1, 0x05000006, 0xb13805a0, 0x05e60117, + 0x59cc0002, 0x8c000526, 0x0500000c, 0x59300403, + 0x4803c857, 0xb0000589, 0x059a0dbf, 0x497a6205, + 0x5930001c, 0x80000540, 0x05000004, 0x497a601c, + 0x0801f800, 0x1c01f000, 0x1c01f000, 0x4933c857, + 0x59300403, 0x82000d80, 0x00000085, 0x05020007, + 0x4a026403, 0x0000008b, 0x642e6203, 0x42000800, + 0x80000040, 0x0005f6e2, 0x82000d80, 0x0000008b, + 0x05020025, 0x4d3c0000, 0x417a7800, 0x05a9fb54, + 0x5c027800, 0x42000000, 0x001123f8, 0x0501fee4, + 0x59325809, 0x812e59c0, 0x05000006, 0x832c0500, + 0x00ff0000, 0x05000003, 0x60128000, 0x05fdfe50, + 0x60443000, 0x0501fc63, 0x05a9fe35, 0x59240400, + 0x8c00050a, 0x0502000a, 0x41782800, 0x60103000, + 0x60a68000, 0x05fdfe61, 0x6406642c, 0x64126407, + 0x64066403, 0x641e6203, 0x1c01f000, 0x602c0800, + 0x05c1fe74, 0x64066407, 0x64066403, 0x64066203, + 0x05d9f49a, 0x1c01f000, 0x4933c857, 0x40000000, + 0x40000000, 0x1c01f000, 0x4933c857, 0x59300a03, + 0x9004058e, 0x05000003, 0x90040590, 0x05020019, + 0x0501f975, 0x05edfce1, 0x59300203, 0x90000d89, + 0x0500000b, 0x48026429, 0x4a026403, 0x00000085, + 0x59300416, 0x8400055a, 0x8400055e, 0x48026416, + 0x64266203, 0x64166407, 0x641a6229, 0x5932680a, + 0x59340200, 0x8c00050e, 0x05020003, 0x59a80060, + 0x48026006, 0x42000800, 0x80000040, 0x0005fee2, + 0x1c01f000, 0x4933c857, 0x4c040000, 0x59300403, + 0x90000d9e, 0x05020012, 0x800000d0, 0x59300a18, + 0x82040d00, 0x000000ff, 0x80040540, 0x4803c857, + 0x48026418, 0x4a026403, 0x00000085, 0x64266203, + 0x64166407, 0x64126229, 0x59a80060, 0x48026006, + 0x42000800, 0x80000040, 0x0005fee2, 0x5c000800, + 0x1c01f000, 0x4933c857, 0x40000000, 0x40000000, + 0x1c01f000, 0x59300416, 0x8c00050c, 0x0502000a, + 0x4933c857, 0x4803c857, 0x8c000518, 0x05000006, + 0x8c000512, 0x05f203d5, 0x0501f937, 0x0005fe84, + 0x0009f810, 0x1c01f000, 0x591c0407, 0x4803c857, + 0x90000c89, 0x0502100b, 0x0c01f001, 0x0010d0ec, + 0x0010d0ec, 0x0010d0ec, 0x0010d0ee, 0x0010d0ec, + 0x0010d0ee, 0x0010d0ee, 0x0010d0ec, 0x0010d0ee, + 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000, + 0x591c0407, 0x9000051f, 0x90000586, 0x0500000a, + 0x4803c857, 0x64ee6403, 0x6426641c, 0x4a02621c, + 0x00002a00, 0x64066203, 0x42000800, 0x80000040, + 0x0005f6e2, 0x4803c856, 0x4c040000, 0x4c140000, + 0x4d300000, 0x411e6000, 0x0501f90f, 0x497a6205, + 0x59300416, 0x4803c857, 0x82000500, 0xffffadff, + 0x48026416, 0x497a6405, 0x5c026000, 0x059df8ae, + 0x05980d09, 0x5c002800, 0x5c000800, 0x05011000, + 0x912c0408, 0x4803c840, 0x6443c842, 0x40000000, + 0x05fd17ff, 0x4a025808, 0x0000010d, 0x497a5800, + 0x65165a0c, 0x491e580d, 0x59300402, 0x48025c0b, + 0x5930041b, 0x48025c0f, 0x591c0416, 0x84000556, + 0x48023c16, 0x591c180a, 0x580c0403, 0x48025a0a, + 0x580c0002, 0x82000500, 0x00ffffff, 0x48025816, + 0x59cc0404, 0x48025c17, 0x497a5a0b, 0x4816580e, + 0x48065a0f, 0x580c0013, 0x82000500, 0xff000000, + 0x80000120, 0x48025c14, 0x0501fb04, 0x493a6403, + 0x4d400000, 0x61168000, 0x591c0202, 0x4c000000, + 0x4d300000, 0x411e6000, 0x05fdfae4, 0x5c026000, + 0x5c000000, 0x48023a02, 0x5c028000, 0x491e602a, + 0x4932381e, 0x641a3c07, 0x641e3a03, 0x497a3806, + 0x497a3a05, 0x1c01f000, 0x4933c857, 0x91380593, + 0x0502000a, 0x59300403, 0x4803c857, 0x82000d80, + 0x00000085, 0x05000026, 0x82000d80, 0x0000008b, + 0x05000023, 0x0599fcc4, 0x913805a7, 0x0502000a, + 0x05d9ffd3, 0x4d2c0000, 0x4d400000, 0x59325809, + 0x60128000, 0x05fdfd72, 0x5c028000, 0x5c025800, + 0x1c01f000, 0x91380594, 0x05fc07f6, 0xb13805a1, + 0x05000009, 0xb13805a0, 0x05000007, 0x83380580, + 0x00000089, 0x05000004, 0x83380580, 0x0000008a, + 0x05e207fe, 0x05ddfc0e, 0x05e207fc, 0x59300a03, + 0x9004058e, 0x05fc069b, 0x9004058a, 0x0500000c, + 0x9004058c, 0x0500000a, 0x0599fca3, 0x05f1fcc3, + 0x05000005, 0x643a6203, 0x59a80061, 0x48026205, + 0x1c01f000, 0x642a6203, 0x1c01f000, 0x83380480, + 0x00000093, 0x0502100b, 0x83380480, 0x00000085, + 0x05001008, 0x83380580, 0x00000089, 0x05000008, + 0x83380580, 0x0000008a, 0x05000031, 0x0599fc8e, + 0x493bc857, 0x4933c857, 0x05e1f7dc, 0x4933c857, + 0x4c340000, 0x05f1fca9, 0x0500000b, 0x59300416, + 0x8c00051a, 0x05000008, 0x641a6407, 0x59300429, + 0x90000d8e, 0x05020002, 0x60080000, 0x48026203, + 0x0501f01d, 0x59300c16, 0x4c040000, 0x41306800, + 0x05e1ff7c, 0x5c000800, 0x05000015, 0x48066416, + 0x64066203, 0x647a6403, 0x59cc0c07, 0x4806641b, + 0x59cc0a07, 0x4806621b, 0x5834080a, 0x4806600a, + 0x5834081d, 0x4806601d, 0x05f1fc8c, 0x05000004, + 0x59300416, 0x84000550, 0x48026416, 0x64126407, + 0x42000800, 0x80000040, 0x0005fee2, 0x40366000, + 0x0009f810, 0x5c006800, 0x1c01f000, 0x4933c857, + 0x59300416, 0x8c00051a, 0x0502001a, 0x59300418, + 0x82000d00, 0x0000ff00, 0x900409c0, 0x9004059e, + 0x05020014, 0x4c340000, 0x41306800, 0x05e1ff55, + 0x0500000e, 0x493a6403, 0x64066203, 0x64126407, + 0x5834041b, 0x4802641b, 0x5834021b, 0x4802621b, 0x5834080a, 0x4806600a, 0x5834081d, 0x4806601d, - 0x05f1fe3e, 0x05000004, 0x59300416, 0x84000550, - 0x48026416, 0x64126407, 0x42000800, 0x80000040, - 0x0005feab, 0x40366000, 0x0005ffdc, 0x5c006800, - 0x1c01f000, 0x4933c857, 0x59300416, 0x8c00051a, - 0x0502001a, 0x59300418, 0x82000d00, 0x0000ff00, - 0x900409c0, 0x9004059e, 0x05020014, 0x4c340000, - 0x41306800, 0x05e5f98a, 0x0500000e, 0x493a6403, - 0x64066203, 0x64126407, 0x5834041b, 0x4802641b, - 0x5834021b, 0x4802621b, 0x5834080a, 0x4806600a, - 0x5834081d, 0x4806601d, 0x05f1fe09, 0x05d9fdea, - 0x40366000, 0x5c006800, 0x0005f7dc, 0x5930080a, - 0x58040200, 0x8c00051a, 0x059e0c13, 0x1c01f000, - 0x05c5fe2e, 0x05000019, 0x640a6203, 0x59300416, - 0x84000558, 0x48026416, 0x8c000512, 0x05000004, - 0x59a8005e, 0x48026205, 0x0501f006, 0x59a8085e, - 0x59a8005c, 0x80040400, 0x9000041e, 0x48026205, - 0x5930000a, 0x90000c11, 0x50040000, 0x80000540, - 0x05000003, 0x90000c00, 0x05fdf7fc, 0x45300800, - 0x497a6000, 0x90000541, 0x1c01f000, 0x82100500, - 0xfffffeef, 0x05020017, 0x4d2c0000, 0x4937c857, - 0x59340811, 0x91341411, 0x800409c0, 0x0500000c, - 0x40040000, 0x81300580, 0x05000004, 0x90041400, - 0x58040800, 0x05fdf7f9, 0x59300800, 0x497a6000, - 0x44041000, 0x0005fe4e, 0x0501f002, 0x4933c857, - 0x5c025800, 0x492e6009, 0x0005fe4e, 0x0005f7dc, - 0x492fc857, 0x641a5a0a, 0x0001f382, 0x4c340000, - 0x5930000a, 0x800001c0, 0x0500000f, 0x90006c11, - 0x50340000, 0x80000540, 0x05000009, 0x81300580, - 0x05000004, 0x50340000, 0x90006c00, 0x05fdf7f9, - 0x59300000, 0x44006800, 0x497a6000, 0x5c006800, - 0x1c01f000, 0x59300c07, 0x90040585, 0x05fc07fc, - 0x90040591, 0x05fc07fa, 0x90040586, 0x05fc07f8, - 0x90040581, 0x05fc07f6, 0x059dfaf8, 0x4c340000, - 0x0501f81a, 0x0502000f, 0x90006c11, 0x50340000, - 0x80000540, 0x05000009, 0x81300580, 0x05000004, - 0x50340000, 0x90006c00, 0x05fdf7f9, 0x59300000, - 0x44006800, 0x497a6000, 0x5c006800, 0x1c01f000, - 0x59300c07, 0x90040585, 0x05fc07fc, 0x90040591, - 0x05fc07fa, 0x90040586, 0x05fc07f8, 0x90040581, - 0x05fc07f6, 0x059dfadd, 0x4c5c0000, 0x4c600000, - 0x5930000a, 0x800001c0, 0x0500000c, 0x5800bc03, - 0x825cbc00, 0x0010d400, 0x505cb800, 0x805cb9c0, - 0x05000006, 0x805cc580, 0x05020004, 0x5c00c000, - 0x5c00b800, 0x1c01f000, 0x4933c857, 0x4803c857, - 0x485fc857, 0x905cbd41, 0x05fdf7f9, 0x4933c857, - 0x4c080000, 0x4c0c0000, 0x4c580000, 0x59a81046, - 0x59cc1807, 0x820c1d00, 0x00ffffff, 0x800c0110, - 0x80083580, 0x0502000c, 0x91cc1408, 0x6008b000, - 0x5930000a, 0x90001c06, 0x05e9fd25, 0x05020006, - 0x91cc140a, 0x6008b000, 0x5930000a, 0x90001c08, - 0x05e9fd1f, 0x5c00b000, 0x5c001800, 0x5c001000, - 0x1c01f000, 0x4933c856, 0x493a6403, 0x05c1feaa, - 0x05adf195, 0x4933c857, 0x492fc857, 0x5930080a, - 0x58040200, 0x8c00051e, 0x05000004, 0x592c020c, - 0x84000558, 0x48025a0c, 0x1c01f000, 0x59e0180f, - 0x599c0413, 0x800c1000, 0x80080580, 0x05020002, - 0x41781000, 0x59e00010, 0x59e00810, 0x80040d80, - 0x05fe07fd, 0x80080580, 0x05000018, 0x4c080000, - 0x80102040, 0x0500000e, 0x599c0413, 0x80081000, + 0x05f1fc57, 0x05d9fb59, 0x40366000, 0x5c006800, + 0x0009f010, 0x5930080a, 0x58040200, 0x8c00051a, + 0x059a0cf8, 0x1c01f000, 0x05c5f956, 0x05000019, + 0x640a6203, 0x59300416, 0x84000558, 0x48026416, + 0x8c000512, 0x05000004, 0x59a80061, 0x48026205, + 0x0501f006, 0x59a80861, 0x59a8005f, 0x80040400, + 0x9000041e, 0x48026205, 0x5930000a, 0x90000c11, + 0x50040000, 0x80000540, 0x05000003, 0x90000c00, + 0x05fdf7fc, 0x45300800, 0x497a6000, 0x90000541, + 0x1c01f000, 0x82100500, 0xfffffeef, 0x05020017, + 0x4d2c0000, 0x4937c857, 0x59340811, 0x91341411, + 0x800409c0, 0x0500000c, 0x40040000, 0x81300580, + 0x05000004, 0x90041400, 0x58040800, 0x05fdf7f9, + 0x59300800, 0x497a6000, 0x44041000, 0x0005fe84, + 0x0501f002, 0x4933c857, 0x5c025800, 0x492e6009, + 0x0005fe84, 0x0009f010, 0x492fc857, 0x641a5a0a, + 0x0001f3a8, 0x4c340000, 0x5930000a, 0x800001c0, + 0x0500000f, 0x90006c11, 0x50340000, 0x80000540, + 0x05000009, 0x81300580, 0x05000004, 0x50340000, + 0x90006c00, 0x05fdf7f9, 0x59300000, 0x44006800, + 0x497a6000, 0x5c006800, 0x1c01f000, 0x59300c07, + 0x90040585, 0x05fc07fc, 0x90040591, 0x05fc07fa, + 0x90040586, 0x05fc07f8, 0x90040581, 0x05fc07f6, + 0x0599fbe9, 0x4c340000, 0x0501f81a, 0x0502000f, + 0x90006c11, 0x50340000, 0x80000540, 0x05000009, + 0x81300580, 0x05000004, 0x50340000, 0x90006c00, + 0x05fdf7f9, 0x59300000, 0x44006800, 0x497a6000, + 0x5c006800, 0x1c01f000, 0x59300c07, 0x90040585, + 0x05fc07fc, 0x90040591, 0x05fc07fa, 0x90040586, + 0x05fc07f8, 0x90040581, 0x05fc07f6, 0x0599fbce, + 0x4c5c0000, 0x4c600000, 0x5930000a, 0x800001c0, + 0x0500000c, 0x5800bc03, 0x825cbc00, 0x0010db80, + 0x505cb800, 0x805cb9c0, 0x05000006, 0x805cc580, + 0x05020004, 0x5c00c000, 0x5c00b800, 0x1c01f000, + 0x4933c857, 0x4803c857, 0x485fc857, 0x905cbd41, + 0x05fdf7f9, 0x4933c857, 0x4c080000, 0x4c0c0000, + 0x4c580000, 0x59a81049, 0x59cc1807, 0x820c1d00, + 0x00ffffff, 0x800c0110, 0x80083580, 0x0502000c, + 0x91cc1408, 0x6008b000, 0x5930000a, 0x90001c06, + 0x05e9fb20, 0x05020006, 0x91cc140a, 0x6008b000, + 0x5930000a, 0x90001c08, 0x05e9fb1a, 0x5c00b000, + 0x5c001800, 0x5c001000, 0x1c01f000, 0x4933c856, + 0x493a6403, 0x05c1f957, 0x05a9f2e3, 0x4933c857, + 0x492fc857, 0x5930080a, 0x58040200, 0x8c00051e, + 0x05000004, 0x592c020c, 0x84000558, 0x48025a0c, + 0x1c01f000, 0x59e0180f, 0x599c0413, 0x800c1000, 0x80080580, 0x05020002, 0x41781000, 0x59e00010, 0x59e00810, 0x80040d80, 0x05fe07fd, 0x80080580, - 0x05fe07f4, 0x5c001000, 0x0501f008, 0x599c0814, - 0x599c1015, 0x800c00cc, 0x80040c00, 0x90081440, - 0x5c001800, 0x90000541, 0x4803c857, 0x1c01f000, - 0x59300203, 0x4933c857, 0x4937c857, 0x493bc857, - 0x4803c857, 0x90003491, 0x059e1a74, 0x0c01f001, - 0x0010cb79, 0x0010cc6e, 0x0010cb79, 0x0010cb79, - 0x0010cb79, 0x0010cb79, 0x0010cb79, 0x0010cbe2, - 0x0010cb7a, 0x0010cb79, 0x0010cb79, 0x0010cb79, - 0x0010cb79, 0x0010cb79, 0x0010cccb, 0x0010cb79, - 0x0010cb79, 0x059dfa61, 0xb138058c, 0x059e0a5f, - 0x05c5fd4e, 0x05020020, 0x59a80a49, 0x5932481d, - 0x59240200, 0x82000500, 0x000000e0, 0x82000580, - 0x00000080, 0x05000018, 0x8c040512, 0x05000028, - 0x59cc0806, 0x82040d00, 0xff000000, 0x82040580, - 0x03000000, 0x0500001c, 0x82040580, 0x50000000, - 0x05000004, 0x82040580, 0x52000000, 0x000607dc, - 0x83340580, 0x00110210, 0x05000005, 0x4d3c0000, - 0x417a7800, 0x05a9ff93, 0x5c027800, 0x64066403, - 0x0501f010, 0x59cc0806, 0x82040d00, 0xff000000, - 0x82040580, 0x03000000, 0x05000007, 0x82040580, - 0x50000000, 0x05000004, 0x82040580, 0x52000000, - 0x000607dc, 0x64266403, 0x6426641c, 0x6402621c, - 0x64126407, 0x64066203, 0x05d9f4c3, 0x59240400, - 0x8c00050a, 0x05020020, 0x0501fd7e, 0x0502001e, - 0x59cc0806, 0x4807c857, 0x82040d00, 0xff000000, - 0x82040580, 0x03000000, 0x05000013, 0x82040580, - 0x20000000, 0x05000010, 0x82040580, 0x21000000, - 0x0500000d, 0x82040580, 0x24000000, 0x0500000a, - 0x82040580, 0x50000000, 0x05000007, 0x82040580, - 0x52000000, 0x05000004, 0x82040580, 0x05000000, - 0x05020007, 0x9c0431c0, 0x611a8000, 0x60042800, - 0x05fdfbcf, 0x0501f913, 0x059c0a08, 0x61442000, - 0x05e5f959, 0x59cc0000, 0x82000500, 0x00ffffff, - 0x82000580, 0x00ffffff, 0x05000004, 0x641e6203, - 0x493a6403, 0x1c01f000, 0x59325819, 0x812e59c0, - 0x059e0dbb, 0x0005f7dc, 0x4d2c0000, 0x4c580000, - 0x4c500000, 0x4c540000, 0x4dcc0000, 0x41385000, - 0xb13805a0, 0x0500007f, 0xb13805a1, 0x0500007d, - 0xb1380594, 0x059e09ed, 0x59325809, 0x592c0c0f, - 0x82040d00, 0x0000e000, 0x82040580, 0x00002000, - 0x05020066, 0x59300819, 0x800409c0, 0x05000015, - 0x58041408, 0x42039800, 0x00111772, 0x9008049c, - 0x05001002, 0x606c1000, 0x41cca800, 0x9004a409, - 0x90080490, 0x05021004, 0x4008b000, 0x0501fca4, - 0x0501f008, 0x80001000, 0x603cb000, 0x0501fca0, - 0x58040801, 0x800409c0, 0x05fe07f5, 0x059df9cf, - 0x83340580, 0x00110210, 0x0500004c, 0x59344c00, + 0x05000018, 0x4c080000, 0x80102040, 0x0500000e, + 0x599c0413, 0x80081000, 0x80080580, 0x05020002, + 0x41781000, 0x59e00010, 0x59e00810, 0x80040d80, + 0x05fe07fd, 0x80080580, 0x05fe07f4, 0x5c001000, + 0x0501f008, 0x599c0814, 0x599c1015, 0x800c00cc, + 0x80040c00, 0x90081440, 0x5c001800, 0x90000541, + 0x4803c857, 0x1c01f000, 0x59300203, 0x4933c857, + 0x4937c857, 0x493bc857, 0x4803c857, 0x90003491, + 0x059a1b65, 0x0c01f001, 0x0010d2c3, 0x0010d3cb, + 0x0010d2c3, 0x0010d2c3, 0x0010d2c3, 0x0010d2c3, + 0x0010d2c3, 0x0010d32d, 0x0010d2c4, 0x0010d2c3, + 0x0010d2c3, 0x0010d2c3, 0x0010d2c3, 0x0010d2c3, + 0x0010d428, 0x0010d2c3, 0x0010d2c3, 0x0599fb52, + 0xb138058c, 0x059a0b50, 0x05c5f876, 0x05020020, + 0x59a80a4c, 0x5932481d, 0x59240200, 0x82000500, + 0x000000e0, 0x82000580, 0x00000080, 0x05000018, + 0x8c040512, 0x05000028, 0x59cc0806, 0x82040d00, + 0xff000000, 0x82040580, 0x03000000, 0x0500001c, + 0x82040580, 0x50000000, 0x05000004, 0x82040580, + 0x52000000, 0x000a0010, 0x83340580, 0x001141b4, + 0x05000005, 0x4d3c0000, 0x417a7800, 0x05a9f8e0, + 0x5c027800, 0x64066403, 0x0501f010, 0x59cc0806, + 0x82040d00, 0xff000000, 0x82040580, 0x03000000, + 0x05000007, 0x82040580, 0x50000000, 0x05000004, + 0x82040580, 0x52000000, 0x000a0010, 0x64266403, + 0x6426641c, 0x6402621c, 0x64126407, 0x64066203, + 0x05d9f232, 0x59240400, 0x8c00050a, 0x05020020, + 0x0501fdaf, 0x0502001e, 0x59cc0806, 0x4807c857, + 0x82040d00, 0xff000000, 0x82040580, 0x03000000, + 0x05000013, 0x82040580, 0x20000000, 0x05000010, + 0x82040580, 0x21000000, 0x0500000d, 0x82040580, + 0x24000000, 0x0500000a, 0x82040580, 0x50000000, + 0x05000007, 0x82040580, 0x52000000, 0x05000004, + 0x82040580, 0x05000000, 0x05020007, 0x9c0431c0, + 0x611a8000, 0x60042800, 0x05fdfbcc, 0x0501f92a, + 0x05980af9, 0x61442000, 0x05e1ff41, 0x0502000a, + 0x59cc0000, 0x82000500, 0x00ffffff, 0x82000580, + 0x00ffffff, 0x00080010, 0x641e6203, 0x493a6403, + 0x1c01f000, 0x42000000, 0x001123ec, 0x0501fc2c, + 0x0009f010, 0x4d2c0000, 0x4c580000, 0x4c500000, + 0x4c540000, 0x4dcc0000, 0x41385000, 0xb13805a0, + 0x05000091, 0xb13805a1, 0x0500008f, 0xb1380594, + 0x059a0add, 0x59325809, 0x592c0c0f, 0x82040d00, + 0x0000e000, 0x82040580, 0x00002000, 0x0502007d, + 0x83340580, 0x001141b4, 0x0500007a, 0x59344c00, 0x592c0c0d, 0x4807c857, 0x4827c857, 0x82040d00, 0x000000ff, 0x90040583, 0x0500001d, 0x90040585, - 0x05000021, 0x900405a0, 0x0500002c, 0xb0040592, - 0x05000036, 0xb0040590, 0x05000036, 0x900405a1, - 0x05000003, 0x900405a4, 0x05020038, 0x82240500, + 0x05000042, 0x900405a0, 0x0500004b, 0xb0040592, + 0x05000064, 0xb0040590, 0x05000064, 0x900405a1, + 0x05000003, 0x900405a4, 0x05020066, 0x82240500, 0x0000ff00, 0x82000580, 0x00000700, 0x05000005, - 0x60240800, 0x05c5f8c4, 0x60305000, 0x0501f02f, + 0x60240800, 0x05c1fba3, 0x60305000, 0x0501f05d, 0x64c65a0a, 0x64265811, 0x59340400, 0x48025812, - 0x0001fb82, 0x05e1ff9f, 0x0501f036, 0x41780800, - 0x05c5f9a2, 0x600c0800, 0x05c5f8b7, 0x60205000, - 0x0501f022, 0x59cc3800, 0x821c3d00, 0x00ffffff, - 0x4c1c0000, 0x05adf9eb, 0x5c003800, 0x0502001b, - 0x59cc0007, 0x05d5f947, 0x05020018, 0x4a026c00, - 0x00000707, 0x0501f015, 0x82240500, 0x0000ff00, - 0x82000580, 0x00000700, 0x05fc07e2, 0x82240500, - 0x000000ff, 0x90000589, 0x05fc07de, 0x05c5f9fc, - 0x60285000, 0x0501f009, 0x60385000, 0x0501f002, - 0x60405000, 0x82240500, 0x0000ff00, 0x82000580, - 0x00000700, 0x05fc07d3, 0x482a6403, 0x64066203, - 0x592c0011, 0x48026013, 0x497a6015, 0x59a8005d, - 0x48026006, 0x417a7800, 0x05d9fc0f, 0x59325819, - 0x812e59c0, 0x05000003, 0x059dfd35, 0x497a6019, - 0x5c039800, 0x5c00a800, 0x5c00a000, 0x5c00b000, - 0x5c025800, 0x1c01f000, 0x4d2c0000, 0x59325809, - 0x91380593, 0x05020038, 0x492fc857, 0x59300c03, - 0xb0040594, 0x0500002a, 0x90040590, 0x05000025, - 0x9004058e, 0x05000023, 0x59341400, 0x82081d00, - 0x0000ff00, 0x82081500, 0x000000ff, 0x90040588, - 0x0500000d, 0x9004058c, 0x05000014, 0x9004058a, - 0x059e0956, 0x820c0580, 0x00000700, 0x05000018, - 0x90080589, 0x05000016, 0x60180800, 0x05c5f862, - 0x0501f013, 0x592c0c0f, 0x8c040514, 0x05000005, - 0x90080583, 0x0502000e, 0x05c5fa00, 0x05fdf7f7, - 0x600c0000, 0x0501f002, 0x60240000, 0x80080580, - 0x05020007, 0x60100800, 0x05c5f853, 0x0501f004, - 0x59340200, 0x8400051a, 0x48026a00, 0x05f1fbff, - 0x05000005, 0x59a8005e, 0x48026006, 0x643a6203, - 0x0501f025, 0x64025a0a, 0x0001fb82, 0x0005ffdc, - 0x0501f021, 0xb13805a1, 0x05000003, 0xb13805a0, - 0x05020008, 0x5c025800, 0x05ddfc0b, 0x05e20785, - 0x59300203, 0x9000058e, 0x05000019, 0x059df927, - 0x913805a7, 0x05000009, 0x91380594, 0x059e0923, - 0x492fc857, 0x05d9ffb0, 0x60c68000, 0x60100800, - 0x61fc1001, 0x0501f006, 0x492fc857, 0x05d9ffaa, - 0x60c68000, 0x60100800, 0x60401000, 0x49425a0a, - 0x48065811, 0x480a5812, 0x0001fb82, 0x05c5ffa9, - 0x05e1ff08, 0x5c025800, 0x1c01f000, 0x4933c857, - 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020009, - 0x4d2c0000, 0x59325809, 0x812e59c0, 0x05000003, - 0x64025a0a, 0x0001fb82, 0x0005ffdc, 0x5c025800, - 0x1c01f000, 0x492fc857, 0x42007000, 0x000211a7, - 0x58380806, 0x492c7006, 0x800409c0, 0x05020003, - 0x492c7007, 0x0001f030, 0x492c0800, 0x1c01f000, - 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000, - 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857, - 0x82040d00, 0xff000000, 0x82040580, 0x03000000, - 0x0500000d, 0x82040580, 0x05000000, 0x0500000a, - 0x82040580, 0x21000000, 0x05000027, 0x82040580, - 0x24000000, 0x05000024, 0x82040580, 0x20000000, - 0x05020025, 0x059dfc85, 0x05000023, 0x492fc857, - 0x492e6019, 0x59a8b0b6, 0x9058b41b, 0x8258b500, - 0xfffffffc, 0x8058b104, 0x485a5c08, 0x412c7800, - 0x41cca000, 0x90580490, 0x05021004, 0x912cac09, - 0x0501fb9b, 0x0501f010, 0x40580800, 0x603cb000, - 0x912cac09, 0x0501fb96, 0x9004b48f, 0x059dfc6f, - 0x05000004, 0x492c7801, 0x412c7800, 0x05fdf7f2, - 0x59325819, 0x059dfc82, 0x497a6019, 0x80000580, - 0x0501f005, 0x59340200, 0x84000554, 0x48026a00, - 0x90000541, 0x5c00a800, 0x5c00a000, 0x5c00b000, - 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857, - 0x4d2c0000, 0x59300a03, 0x90040587, 0x05020006, - 0x59325819, 0x812e59c0, 0x059e0c6d, 0x0005ffdc, - 0x0501f02d, 0x9004058e, 0x05000023, 0x90040581, - 0x059e08a6, 0x05d9ffde, 0x4df00000, 0x598c000b, + 0x0001fba8, 0x05e1fd80, 0x0501f05f, 0x05011000, + 0x4a03c840, 0x00115716, 0x646fc842, 0x42039800, + 0x00115716, 0x05011000, 0x5930081a, 0x5930120c, + 0x59301c0c, 0x5930200d, 0x48079801, 0x480b9a07, + 0x480f9a09, 0x48139808, 0x5930000e, 0x5930080f, + 0x59301010, 0x59301811, 0x59302012, 0x4803980a, + 0x4807980b, 0x480b980c, 0x480f980d, 0x4813980e, + 0x59300013, 0x59300814, 0x59301015, 0x59301a16, + 0x48039813, 0x48079814, 0x480b9817, 0x480f9a18, + 0x41780800, 0x05c1fcb3, 0x600c0800, 0x05c1fb75, + 0x60205000, 0x0501f02f, 0x59303819, 0x4c1c0000, + 0x05a9fb34, 0x5c003800, 0x0502002a, 0x5930000c, + 0x05d1fde4, 0x05020027, 0x4a026c00, 0x00000707, + 0x0501f024, 0x82240500, 0x0000ff00, 0x82000580, + 0x00000700, 0x05fc07c3, 0x82240500, 0x000000ff, + 0x90000589, 0x05fc07bf, 0x05011000, 0x4a03c840, + 0x00115716, 0x642fc842, 0x42039800, 0x00115716, + 0x05011000, 0x5930081a, 0x5930100c, 0x59301a0d, + 0x5930240d, 0x48079801, 0x480b9806, 0x480f9a07, + 0x48139a0a, 0x05c1fd00, 0x60285000, 0x0501f009, + 0x60385000, 0x0501f002, 0x60405000, 0x82240500, + 0x0000ff00, 0x82000580, 0x00000700, 0x05fc07a5, + 0x482a6403, 0x64066203, 0x592c0011, 0x48026013, + 0x497a6015, 0x59a80060, 0x48026006, 0x417a7800, + 0x05d9f966, 0x5c039800, 0x5c00a800, 0x5c00a000, + 0x5c00b000, 0x5c025800, 0x1c01f000, 0x4d2c0000, + 0x59325809, 0x91380593, 0x05020038, 0x492fc857, + 0x59300c03, 0xb0040594, 0x0500002a, 0x90040590, + 0x05000025, 0x9004058e, 0x05000023, 0x59341400, + 0x82081d00, 0x0000ff00, 0x82081500, 0x000000ff, + 0x90040588, 0x0500000d, 0x9004058c, 0x05000014, + 0x9004058a, 0x059a0a34, 0x820c0580, 0x00000700, + 0x05000018, 0x90080589, 0x05000016, 0x60180800, + 0x05c1fb18, 0x0501f013, 0x592c0c0f, 0x8c040514, + 0x05000005, 0x90080583, 0x0502000e, 0x05c1fd09, + 0x05fdf7f7, 0x600c0000, 0x0501f002, 0x60240000, + 0x80080580, 0x05020007, 0x60100800, 0x05c1fb09, + 0x0501f004, 0x59340200, 0x8400051a, 0x48026a00, + 0x05f1fa3a, 0x05000005, 0x59a80061, 0x48026006, + 0x643a6203, 0x0501f025, 0x64025a0a, 0x0001fba8, + 0x0009f810, 0x0501f021, 0xb13805a1, 0x05000003, + 0xb13805a0, 0x05020008, 0x5c025800, 0x05ddf96c, + 0x05e2055a, 0x59300203, 0x9000058e, 0x05000019, + 0x0599fa05, 0x913805a7, 0x05000009, 0x91380594, + 0x059a0a01, 0x492fc857, 0x05d9fd11, 0x60c68000, + 0x60100800, 0x61fc1001, 0x0501f006, 0x492fc857, + 0x05d9fd0b, 0x60c68000, 0x60100800, 0x60401000, + 0x49425a0a, 0x48065811, 0x480a5812, 0x0001fba8, + 0x05c5fb21, 0x05e1fcc0, 0x5c025800, 0x1c01f000, + 0x4933c857, 0xb13805a1, 0x05000003, 0xb13805a0, + 0x05020009, 0x4d2c0000, 0x59325809, 0x812e59c0, + 0x05000003, 0x64025a0a, 0x0001fba8, 0x0009f810, + 0x5c025800, 0x1c01f000, 0x492fc857, 0x0501fa52, + 0x0502000c, 0x42007000, 0x000211e8, 0x58380806, + 0x492c7006, 0x800409c0, 0x05020004, 0x492c7007, + 0x0001f838, 0x0501f002, 0x492c0800, 0x80000580, + 0x1c01f000, 0x4933c857, 0x4937c857, 0x59cc0000, + 0x82000500, 0x00ffffff, 0x48026019, 0x59cc0001, + 0x82000500, 0x00ffffff, 0x4802601a, 0x59cc0806, + 0x4807c857, 0x82040d00, 0xff000000, 0x82040580, + 0x03000000, 0x05000014, 0x82040580, 0x05000000, + 0x0500002a, 0x82040580, 0x21000000, 0x05000029, + 0x82040580, 0x24000000, 0x05000026, 0x82040580, + 0x20000000, 0x05020027, 0x59cc0006, 0x59cc0a07, + 0x59cc120a, 0x4802600c, 0x4806620d, 0x480a640d, + 0x0501f01c, 0x59cc0207, 0x59cc0a09, 0x59cc1008, + 0x4802620c, 0x4806640c, 0x480a600d, 0x59cc000a, + 0x59cc080b, 0x59cc100c, 0x4802600e, 0x4806600f, + 0x480a6010, 0x59cc000d, 0x59cc080e, 0x59cc1013, + 0x48026011, 0x48066012, 0x480a6013, 0x59cc0014, + 0x59cc0817, 0x59cc1218, 0x48026014, 0x48066015, + 0x480a6216, 0x0501f003, 0x59cc0007, 0x4802600c, + 0x59340200, 0x84000554, 0x48026a00, 0x90000541, + 0x1c01f000, 0x4933c857, 0x492fc857, 0x4d2c0000, + 0x59300a03, 0x90040587, 0x05020003, 0x0009f810, + 0x0501f02a, 0x9004058e, 0x05000023, 0x90040581, + 0x059a0981, 0x05d9fd3c, 0x4df00000, 0x598c000b, 0x81300580, 0x05020010, 0x59300004, 0x8c000520, 0x05000004, 0x84000520, 0x48026004, 0x0501f011, - 0x42001000, 0x0010e387, 0x50081000, 0x58080002, - 0x82000580, 0x00000100, 0x05020009, 0x05ddfac9, - 0x05020018, 0x59300004, 0x8c000520, 0x05000005, - 0x84000520, 0x48026004, 0x0501f003, 0x05a5f9ba, - 0x05d9fc66, 0x5c03e000, 0x05d80fb2, 0x05edff76, - 0x059c0886, 0x59325809, 0x64165a0a, 0x0001fb82, - 0x05c5ff18, 0x59325819, 0x812e59c0, 0x059e0c40, - 0x05e1fe74, 0x80000580, 0x5c025800, 0x1c01f000, - 0x5c03e000, 0x05d80fa3, 0x59300c07, 0x90040591, - 0x05fc07c5, 0x05fdf7f9, 0x4c040000, 0x59340200, - 0x4803c857, 0x8c00051c, 0x05000009, 0x59cc0805, - 0x591c001b, 0x4803c857, 0x80040580, 0x05000004, - 0x80000580, 0x4803c856, 0x0501f002, 0x90000541, - 0x5c000800, 0x1c01f000, 0x4c000000, 0x4c0c0000, - 0x4c100000, 0x61fc19ff, 0x60102000, 0x0501f010, + 0x42001000, 0x00112322, 0x50081000, 0x58080002, + 0x82000580, 0x00000100, 0x05020009, 0x05ddf827, + 0x05020015, 0x59300004, 0x8c000520, 0x05000005, + 0x84000520, 0x48026004, 0x0501f003, 0x05a1facb, + 0x05d9f9bf, 0x5c03e000, 0x05d80d10, 0x05edfd9f, + 0x05980961, 0x59325809, 0x64165a0a, 0x0001fba8, + 0x05c5fa8d, 0x05e1fc2c, 0x80000580, 0x5c025800, + 0x1c01f000, 0x5c03e000, 0x05d80d04, 0x59300c07, + 0x90040591, 0x05fc07cb, 0x05fdf7f9, 0x4c040000, + 0x59340200, 0x4803c857, 0x8c00051c, 0x05000009, + 0x59cc0805, 0x591c001b, 0x4803c857, 0x80040580, + 0x05000004, 0x80000580, 0x4803c856, 0x0501f002, + 0x90000541, 0x5c000800, 0x1c01f000, 0x4c000000, + 0x4c0c0000, 0x4c100000, 0x61fc19ff, 0x60102000, + 0x0501f010, 0x4c000000, 0x4c0c0000, 0x4c100000, + 0x5930200a, 0x58101c03, 0x60102000, 0x0501f009, 0x4c000000, 0x4c0c0000, 0x4c100000, 0x5930200a, - 0x58101c03, 0x60102000, 0x0501f009, 0x4c000000, - 0x4c0c0000, 0x4c100000, 0x5930200a, 0x801021c0, - 0x059c0852, 0x58101c03, 0x601c2000, 0x480fc857, - 0x4813c857, 0x481bc857, 0x05adf889, 0x05bdfab9, - 0x5c002000, 0x5c001800, 0x5c000000, 0x1c01f000, - 0x8d0c0520, 0x05000009, 0x4d400000, 0x4d200000, - 0x61fe4001, 0x850e1d44, 0x60aa8000, 0x05fdfa0e, - 0x5c024000, 0x5c028000, 0x1c01f000, 0x59a80249, - 0x8c000508, 0x05000005, 0x599c0017, 0x8c00050a, - 0x05020002, 0x1c01f000, 0x90000541, 0x1c01f000, - 0x5930042c, 0x84000540, 0x4802642c, 0x1c01f000, - 0x4c640000, 0x05f1fb95, 0x59300203, 0x90000588, - 0x05020010, 0x60c8c800, 0x42000000, 0x20000000, - 0x41300800, 0x059dff7d, 0x0500000a, 0x59300203, - 0x90000588, 0x05020007, 0x60780000, 0x80000040, - 0x05fe07ff, 0x8064c840, 0x05fe07f4, 0x059df81b, - 0x05f1fb8d, 0x5c00c800, 0x1c01f000, 0x059dfbbf, - 0x059c0816, 0x59340403, 0x49265805, 0x49365806, - 0x65565a08, 0x48025c0a, 0x4a025c0b, 0x00001000, - 0x05f1fad2, 0x05000003, 0x4a025c0b, 0x00003000, - 0x59340802, 0x82040d00, 0x00ffffff, 0x59300403, - 0x82000580, 0x00000086, 0x42000000, 0x85000000, - 0x05020003, 0x42000000, 0x84000000, 0x80040540, - 0x4802580d, 0x59240005, 0x4802580e, 0x42000000, - 0x00990000, 0x59300c07, 0x90040d85, 0x05000002, - 0x8400052e, 0x59300c16, 0x8c04051a, 0x05000002, - 0x84000528, 0x4802580f, 0x497a5810, 0x59cc0004, - 0x48025811, 0x497a5812, 0x42000800, 0x00030300, - 0x59300403, 0x82000580, 0x00000086, 0x05020006, - 0x59cc0004, 0x48025814, 0x4a025815, 0x0000ffff, - 0x41780800, 0x48065813, 0x1c01f000, 0x492fc857, - 0x59a8289d, 0x801429c0, 0x05000055, 0x4c5c0000, - 0x4c600000, 0x4c640000, 0x4d2c0000, 0x4d300000, - 0x42026000, 0x00111a40, 0x592c0c0a, 0x592c100d, - 0x82081500, 0x00ffffff, 0x592c180e, 0x592c2011, - 0x40165800, 0x4014c000, 0x4014c800, 0x592c0208, - 0x82000580, 0x00000155, 0x05020035, 0x592c040a, - 0x80040580, 0x05020032, 0x592c000d, 0x82000500, - 0x00ffffff, 0x80080580, 0x0502002d, 0x592c000e, - 0x82000500, 0x00ffffff, 0x800c0580, 0x05020028, - 0x592c0011, 0x80100580, 0x05020025, 0x4c040000, - 0x4c080000, 0x4c0c0000, 0x4c100000, 0x40640000, - 0x812c0580, 0x05020014, 0x59300203, 0x90000580, - 0x0500000d, 0x59300009, 0x800001c0, 0x0500000a, - 0x05d9fee3, 0x4df00000, 0x05d9fde4, 0x05d9fbad, - 0x05020002, 0x64026203, 0x5c03e000, 0x05d80ecd, - 0x497a6009, 0x592cc800, 0x4064c000, 0x4064b800, - 0x0501f003, 0x592cb800, 0x485cc000, 0x64165a0a, - 0x0001fb82, 0x405e5800, 0x5c002000, 0x5c001800, - 0x5c001000, 0x5c000800, 0x0501f003, 0x412cc000, - 0x592e5800, 0x812e59c0, 0x05fe07c5, 0x4867509d, - 0x4863509e, 0x05e1fc7b, 0x5c026000, 0x5c025800, - 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x602c0800, 0x0501f004, 0x60100800, 0x0501f002, - 0x60040800, 0x4d2c0000, 0x59325809, 0x812e59c0, - 0x0500000f, 0x592c0208, 0x82000500, 0x000000ff, - 0x9000058e, 0x0502000a, 0x592c0000, 0x48026009, - 0x497a5800, 0x48065a0c, 0x05cdfd9c, 0x05000003, - 0x05fdfe71, 0x0501f002, 0x0001fb82, 0x5c025800, - 0x1c01f000, 0x4d2c0000, 0x4803c856, 0x0501f83b, - 0x05020038, 0x91380595, 0x05020027, 0x59a800b6, - 0x90000594, 0x05020022, 0x59cc0c07, 0x82040580, - 0x00000102, 0x05020029, 0x59cc0a07, 0x5930021b, - 0x80040580, 0x05020027, 0x59cc0a0a, 0x90040594, - 0x05020026, 0x916c0583, 0x05020002, 0x05adf86c, - 0x05edfe45, 0x0500000d, 0x59325809, 0x59a80ccd, - 0x48065a0b, 0x59a808cf, 0x4806580f, 0x64025a0a, - 0x59a804cc, 0x90000503, 0x90000583, 0x05000002, - 0x64ca5a0a, 0x0001fb82, 0x59a804cc, 0x8400050c, - 0x480354cc, 0x4803c857, 0x0005ffdc, 0x5c025800, - 0x1c01f000, 0x4803c856, 0x05edfe2f, 0x05fc07f7, - 0x59325809, 0x64c65a0a, 0x64625810, 0x59cc0007, - 0x48025811, 0x05fdf7f0, 0x4807c857, 0x05fdf7f4, - 0x4807c857, 0x05fdf7f2, 0x4807c857, 0x05fdf7f0, - 0x4803c857, 0x05fdf7ee, 0x59300403, 0xb0000d9a, - 0x05000004, 0xb0000d9b, 0x05000002, 0xb0000d9c, - 0x1c01f000, 0x4933c857, 0x4867c857, 0x485fc857, - 0x4863c857, 0x4c500000, 0x4c540000, 0x4c580000, - 0x4d3c0000, 0x59327c1b, 0x5924100b, 0x82081500, - 0x00001fff, 0x405c0000, 0x80080580, 0x0500002b, - 0x480bc857, 0x4d400000, 0x4d3c0000, 0x4c080000, - 0x60aa8000, 0x600a7800, 0x41780800, 0x05adf87b, - 0x5c001000, 0x5c027800, 0x5c028000, 0x59a802cc, - 0x40000800, 0x82000540, 0x0f000000, 0x4802480b, - 0x853e7d40, 0x4c580000, 0x0501fa22, 0x42001800, - 0x0010e51f, 0x8058b040, 0x05000013, 0x580c200b, - 0x82100500, 0x00001fff, 0x80080580, 0x0502000c, - 0x580c0200, 0x82000500, 0x00008001, 0x82000580, - 0x00008001, 0x05000006, 0x82102500, 0xffffe000, - 0x80100541, 0x4800180b, 0x4803c857, 0x900c1c0d, - 0x05fdf7ed, 0x5c00b000, 0x6000b001, 0x4060a000, - 0x4200a800, 0x00110672, 0x50500000, 0x50540800, - 0x80040580, 0x05000002, 0x853e7d42, 0x5450a800, - 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07f7, - 0x59a800cf, 0x80640580, 0x0500001f, 0x59a814cc, - 0x480bc857, 0x90081503, 0x90081583, 0x05020009, - 0x90640582, 0x05000018, 0x90640583, 0x05020011, - 0x59a800ce, 0x90000582, 0x05000013, 0x0501f00d, - 0x90640581, 0x05000010, 0x90640582, 0x05020005, - 0x59a800ce, 0x90000582, 0x0502000b, 0x0501f008, - 0x59a800ce, 0x90000581, 0x05000007, 0x0501f004, - 0x4803c856, 0x853e7d46, 0x0501f003, 0x4803c856, - 0x853e7d44, 0x4867c857, 0x493fc857, 0x486750cf, - 0x493e641b, 0x5c027800, 0x5c00b000, 0x5c00a800, - 0x5c00a000, 0x1c01f000, 0x4817c857, 0x4c000000, - 0x4c040000, 0x8c14052a, 0x05000004, 0x59880123, - 0x80000000, 0x48031123, 0x8c14052e, 0x05000004, - 0x59880124, 0x80000000, 0x48031124, 0x8c14052c, - 0x05000013, 0x40140000, 0x82000500, 0x00070000, - 0x82000d80, 0x00030000, 0x0500000d, 0x82000d80, - 0x00040000, 0x0500000a, 0x82000d80, 0x00050000, - 0x05000007, 0x59880005, 0x80000000, 0x48031005, - 0x59880125, 0x80000000, 0x48031125, 0x5c000800, - 0x5c000000, 0x1c01f000, 0x4817c857, 0x4c000000, - 0x4c040000, 0x8c14052a, 0x05000004, 0x59880126, - 0x80000000, 0x48031126, 0x8c14052e, 0x05000004, - 0x59880127, 0x80000000, 0x48031127, 0x8c14052c, - 0x05000013, 0x40140000, 0x82000500, 0x00070000, - 0x82000d80, 0x00030000, 0x0500000d, 0x82000d80, - 0x00040000, 0x0500000a, 0x82000d80, 0x00050000, + 0x801021c0, 0x05980930, 0x58101c03, 0x601c2000, + 0x480fc857, 0x4813c857, 0x481bc857, 0x05a9f9c8, + 0x05b9fcf9, 0x5c002000, 0x5c001800, 0x5c000000, + 0x1c01f000, 0x8d0c0520, 0x05000009, 0x4d400000, + 0x4d200000, 0x61fe4001, 0x850e1d44, 0x60aa8000, + 0x05fdf9f8, 0x5c024000, 0x5c028000, 0x1c01f000, + 0x59a8024c, 0x8c000508, 0x05000005, 0x599c0017, + 0x8c00050a, 0x05020002, 0x1c01f000, 0x90000541, + 0x1c01f000, 0x5930042c, 0x84000540, 0x4802642c, + 0x1c01f000, 0x4c640000, 0x05f1f9d0, 0x4df00000, + 0x59300203, 0x90000588, 0x05020010, 0x60c8c800, + 0x42000000, 0x20000000, 0x41300800, 0x059df8bb, + 0x0500000a, 0x59300203, 0x90000588, 0x05020007, + 0x60780000, 0x80000040, 0x05fe07ff, 0x8064c840, + 0x05fe07f4, 0x0599f8f8, 0x5c03e000, 0x05f009ca, + 0x5c00c800, 0x1c01f000, 0x0599fc97, 0x059808f2, + 0x61fc01ff, 0x83340d80, 0x001141b4, 0x05000002, + 0x59340403, 0x49265805, 0x49365806, 0x65565a08, + 0x48025c0a, 0x4a025c0b, 0x00001000, 0x59a808d5, + 0x82040d00, 0x0000f000, 0x82040480, 0x00002000, + 0x05001003, 0x4a025c0b, 0x00003000, 0x59cc0801, + 0x82040d00, 0x00ffffff, 0x59300403, 0x82000580, + 0x00000086, 0x42000000, 0x85000000, 0x05020003, + 0x42000000, 0x84000000, 0x80040540, 0x4802580d, + 0x59240005, 0x4802580e, 0x42000000, 0x00990000, + 0x59300c07, 0x90040d85, 0x05000002, 0x8400052e, + 0x59300c16, 0x8c04051a, 0x05000002, 0x84000528, + 0x4802580f, 0x497a5810, 0x59cc0004, 0x48025811, + 0x497a5812, 0x42000800, 0x00030300, 0x59300403, + 0x82000580, 0x00000086, 0x05020006, 0x59cc0004, + 0x48025814, 0x4a025815, 0x0000ffff, 0x41780800, + 0x48065813, 0x1c01f000, 0x492fc857, 0x59a828a0, + 0x801429c0, 0x05000055, 0x4c5c0000, 0x4c600000, + 0x4c640000, 0x4d2c0000, 0x4d300000, 0x42026000, + 0x001159e4, 0x592c0c0a, 0x592c100d, 0x82081500, + 0x00ffffff, 0x592c180e, 0x592c2011, 0x40165800, + 0x4014c000, 0x4014c800, 0x592c0208, 0x82000580, + 0x00000155, 0x05020035, 0x592c040a, 0x80040580, + 0x05020032, 0x592c000d, 0x82000500, 0x00ffffff, + 0x80080580, 0x0502002d, 0x592c000e, 0x82000500, + 0x00ffffff, 0x800c0580, 0x05020028, 0x592c0011, + 0x80100580, 0x05020025, 0x4c040000, 0x4c080000, + 0x4c0c0000, 0x4c100000, 0x40640000, 0x812c0580, + 0x05020014, 0x59300203, 0x90000580, 0x0500000d, + 0x59300009, 0x800001c0, 0x0500000a, 0x05d9fc3a, + 0x4df00000, 0x05d9fb3a, 0x05d9f8ff, 0x05020002, + 0x64026203, 0x5c03e000, 0x05d80c24, 0x497a6009, + 0x592cc800, 0x4064c000, 0x4064b800, 0x0501f003, + 0x592cb800, 0x485cc000, 0x64165a0a, 0x0001fba8, + 0x405e5800, 0x5c002000, 0x5c001800, 0x5c001000, + 0x5c000800, 0x0501f003, 0x412cc000, 0x592e5800, + 0x812e59c0, 0x05fe07c5, 0x486750a0, 0x486350a1, + 0x05e1fa08, 0x5c026000, 0x5c025800, 0x5c00c800, + 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x602c0800, + 0x0501f004, 0x60100800, 0x0501f002, 0x60040800, + 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0500000f, + 0x592c0208, 0x82000500, 0x000000ff, 0x9000058e, + 0x0502000a, 0x592c0000, 0x48026009, 0x497a5800, + 0x48065a0c, 0x05cdf9bd, 0x05000003, 0x05fdfe67, + 0x0501f002, 0x0001fba8, 0x5c025800, 0x1c01f000, + 0x4d2c0000, 0x4803c856, 0x0501f83b, 0x05020038, + 0x91380595, 0x05020027, 0x59a800bb, 0x90000594, + 0x05020022, 0x59cc0c07, 0x82040580, 0x00000102, + 0x05020029, 0x59cc0a07, 0x5930021b, 0x80040580, + 0x05020027, 0x59cc0a0a, 0x90040594, 0x05020026, + 0x916c0583, 0x05020002, 0x05a9f9ac, 0x05edfc67, + 0x0500000d, 0x59325809, 0x59a80cd2, 0x48065a0b, + 0x59a808d4, 0x4806580f, 0x64025a0a, 0x59a804d1, + 0x90000503, 0x90000583, 0x05000002, 0x64ca5a0a, + 0x0001fba8, 0x59a804d1, 0x8400050c, 0x480354d1, + 0x4803c857, 0x0009f810, 0x5c025800, 0x1c01f000, + 0x4803c856, 0x05edfc51, 0x05fc07f7, 0x59325809, + 0x64c65a0a, 0x64625810, 0x59cc0007, 0x48025811, + 0x05fdf7f0, 0x4807c857, 0x05fdf7f4, 0x4807c857, + 0x05fdf7f2, 0x4807c857, 0x05fdf7f0, 0x4803c857, + 0x05fdf7ee, 0x59300403, 0xb0000d9a, 0x05000004, + 0xb0000d9b, 0x05000002, 0xb0000d9c, 0x1c01f000, + 0x4933c857, 0x4867c857, 0x485fc857, 0x4863c857, + 0x4c500000, 0x4c540000, 0x4c580000, 0x4d3c0000, + 0x59327c1b, 0x5924100b, 0x82081500, 0x00001fff, + 0x405c0000, 0x80080580, 0x0500002b, 0x480bc857, + 0x4d400000, 0x4d3c0000, 0x4c080000, 0x60aa8000, + 0x600a7800, 0x41780800, 0x05a9f9bb, 0x5c001000, + 0x5c027800, 0x5c028000, 0x59a802d1, 0x40000800, + 0x82000540, 0x0f000000, 0x4802480b, 0x853e7d40, + 0x4c580000, 0x0501fa36, 0x42001800, 0x001124c3, + 0x8058b040, 0x05000013, 0x580c200b, 0x82100500, + 0x00001fff, 0x80080580, 0x0502000c, 0x580c0200, + 0x82000500, 0x00008001, 0x82000580, 0x00008001, + 0x05000006, 0x82102500, 0xffffe000, 0x80100541, + 0x4800180b, 0x4803c857, 0x900c1c0d, 0x05fdf7ed, + 0x5c00b000, 0x6000b001, 0x4060a000, 0x4200a800, + 0x00114616, 0x50500000, 0x50540800, 0x80040580, + 0x05000002, 0x853e7d42, 0x5450a800, 0x8050a000, + 0x8054a800, 0x8058b040, 0x05fe07f7, 0x59a800d4, + 0x80640580, 0x0500001f, 0x59a814d1, 0x480bc857, + 0x90081503, 0x90081583, 0x05020009, 0x90640582, + 0x05000018, 0x90640583, 0x05020011, 0x59a800d3, + 0x90000582, 0x05000013, 0x0501f00d, 0x90640581, + 0x05000010, 0x90640582, 0x05020005, 0x59a800d3, + 0x90000582, 0x0502000b, 0x0501f008, 0x59a800d3, + 0x90000581, 0x05000007, 0x0501f004, 0x4803c856, + 0x853e7d46, 0x0501f003, 0x4803c856, 0x853e7d44, + 0x4867c857, 0x493fc857, 0x486750d4, 0x493e641b, + 0x5c027800, 0x5c00b000, 0x5c00a800, 0x5c00a000, + 0x1c01f000, 0x412c7800, 0x60047000, 0x583c7801, + 0x803c79c0, 0x05000003, 0x80387000, 0x05fdf7fc, + 0x599c0413, 0x80380480, 0x05021003, 0x80000580, + 0x1c01f000, 0x81780000, 0x1c01f000, 0x4817c857, + 0x4c000000, 0x4c040000, 0x8c14052a, 0x05000004, + 0x59880126, 0x80000000, 0x48031126, 0x8c14052e, + 0x05000004, 0x59880127, 0x80000000, 0x48031127, + 0x82140500, 0x00070000, 0x82000d80, 0x00050000, + 0x05020005, 0x42000000, 0x0011235f, 0x0501f8ac, + 0x0501f00f, 0x8c14052c, 0x0500000d, 0x82000d80, + 0x00030000, 0x0500000a, 0x82000d80, 0x00040000, 0x05000007, 0x59880005, 0x80000000, 0x48031005, 0x59880128, 0x80000000, 0x48031128, 0x5c000800, - 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000, - 0x8c04052c, 0x05000004, 0x59880111, 0x80000000, - 0x48031111, 0x8c04052a, 0x05000004, 0x59880112, - 0x80000000, 0x48031112, 0x8c040528, 0x05000004, - 0x59880113, 0x80000000, 0x48031113, 0x8c040526, + 0x5c000000, 0x1c01f000, 0x4817c857, 0x4c000000, + 0x4c040000, 0x8c14052a, 0x05000004, 0x59880129, + 0x80000000, 0x48031129, 0x8c14052e, 0x05000004, + 0x5988012a, 0x80000000, 0x4803112a, 0x82140500, + 0x00070000, 0x82000d80, 0x00050000, 0x05020005, + 0x42000000, 0x0011235f, 0x0501f885, 0x0501f00f, + 0x8c14052c, 0x0500000d, 0x82000d80, 0x00030000, + 0x0500000a, 0x82000d80, 0x00040000, 0x05000007, + 0x59880005, 0x80000000, 0x48031005, 0x5988012b, + 0x80000000, 0x4803112b, 0x5c000800, 0x5c000000, + 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c04052c, 0x05000004, 0x59880114, 0x80000000, 0x48031114, - 0x8c040524, 0x05000004, 0x59880115, 0x80000000, - 0x48031115, 0x8c040522, 0x05000004, 0x59880116, - 0x80000000, 0x48031116, 0x8c040520, 0x05000004, - 0x59880117, 0x80000000, 0x48031117, 0x5c000000, - 0x1c01f000, 0x4807c857, 0x4c000000, 0x59880118, - 0x80000000, 0x48031118, 0x5c000000, 0x1c01f000, - 0x4807c857, 0x4c000000, 0x8c04051c, 0x05000004, - 0x59880119, 0x80000000, 0x48031119, 0x8c04051a, - 0x05000004, 0x5988011a, 0x80000000, 0x4803111a, - 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000, - 0x8c040518, 0x05000004, 0x5988011b, 0x80000000, - 0x4803111b, 0x8c040516, 0x05000004, 0x5988011c, - 0x80000000, 0x4803111c, 0x8c040514, 0x05000004, + 0x8c04052a, 0x05000004, 0x59880115, 0x80000000, + 0x48031115, 0x8c040528, 0x05000004, 0x59880116, + 0x80000000, 0x48031116, 0x8c040526, 0x05000004, + 0x59880117, 0x80000000, 0x48031117, 0x8c040524, + 0x05000004, 0x59880118, 0x80000000, 0x48031118, + 0x8c040522, 0x05000004, 0x59880119, 0x80000000, + 0x48031119, 0x8c040520, 0x05000004, 0x5988011a, + 0x80000000, 0x4803111a, 0x5c000000, 0x1c01f000, + 0x4807c857, 0x4c000000, 0x5988011b, 0x80000000, + 0x4803111b, 0x5c000000, 0x1c01f000, 0x4807c857, + 0x4c000000, 0x8c04051c, 0x05000004, 0x5988011c, + 0x80000000, 0x4803111c, 0x8c04051a, 0x05000004, 0x5988011d, 0x80000000, 0x4803111d, 0x5c000000, - 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040510, + 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040518, 0x05000004, 0x5988011e, 0x80000000, 0x4803111e, - 0x8c04050c, 0x05000004, 0x5988011f, 0x80000000, - 0x4803111f, 0x5c000000, 0x1c01f000, 0x4807c857, - 0x4c000000, 0x8c040508, 0x05000004, 0x59880120, - 0x80000000, 0x48031120, 0x8c040504, 0x05000004, - 0x59880121, 0x80000000, 0x48031121, 0x5c000000, - 0x1c01f000, 0x4807c856, 0x4c000000, 0x598800ea, - 0x80000000, 0x480310ea, 0x5c000000, 0x1c01f000, - 0x5c036000, 0x4db00000, 0x49b3c857, 0x4c040000, - 0x50000800, 0x80040800, 0x05001002, 0x44040000, - 0x5c000800, 0x1c01f000, 0x480fc857, 0x4c000000, - 0x900c0580, 0x05020004, 0x42000000, 0x0010e411, - 0x0501f012, 0x820c0580, 0x00001001, 0x05020004, - 0x42000000, 0x0010e412, 0x0501f00c, 0x820c0580, - 0x00001002, 0x05020004, 0x42000000, 0x0010e413, - 0x0501f006, 0x820c0c80, 0x0000201c, 0x059a1ddf, - 0x900c051f, 0x0c01f804, 0x05fdffde, 0x5c000000, - 0x1c01f000, 0x0010d01d, 0x0010d020, 0x0010d023, - 0x0010d026, 0x0010d029, 0x0010d02c, 0x0010d02f, - 0x0010d032, 0x0010d035, 0x0010d038, 0x0010d03b, - 0x0010d03e, 0x0010d041, 0x0010d044, 0x0010d047, - 0x0010d04a, 0x0010d04d, 0x0010d050, 0x0010d053, - 0x0010d056, 0x0010d059, 0x0010d05c, 0x0010d05f, - 0x0010d062, 0x0010d065, 0x0010d068, 0x0010d06b, - 0x0010d06e, 0x42000000, 0x0010e414, 0x1c01f000, - 0x42000000, 0x0010e415, 0x1c01f000, 0x42000000, - 0x0010e416, 0x1c01f000, 0x42000000, 0x0010e417, - 0x1c01f000, 0x42000000, 0x0010e418, 0x1c01f000, - 0x42000000, 0x0010e419, 0x1c01f000, 0x42000000, - 0x0010e41a, 0x1c01f000, 0x42000000, 0x0010e41b, - 0x1c01f000, 0x42000000, 0x0010e41c, 0x1c01f000, - 0x42000000, 0x0010e41d, 0x1c01f000, 0x42000000, - 0x0010e41e, 0x1c01f000, 0x42000000, 0x0010e41f, - 0x1c01f000, 0x42000000, 0x0010e420, 0x1c01f000, - 0x42000000, 0x0010e421, 0x1c01f000, 0x42000000, - 0x0010e422, 0x1c01f000, 0x42000000, 0x0010e423, - 0x1c01f000, 0x42000000, 0x0010e424, 0x1c01f000, - 0x42000000, 0x0010e425, 0x1c01f000, 0x42000000, - 0x0010e426, 0x1c01f000, 0x42000000, 0x0010e427, - 0x1c01f000, 0x42000000, 0x0010e428, 0x1c01f000, - 0x42000000, 0x0010e429, 0x1c01f000, 0x42000000, - 0x0010e42a, 0x1c01f000, 0x42000000, 0x0010e42b, - 0x1c01f000, 0x42000000, 0x0010e42c, 0x1c01f000, - 0x42000000, 0x0010e42d, 0x1c01f000, 0x42000000, - 0x0010e42e, 0x1c01f000, 0x42000000, 0x0010e42f, - 0x1c01f000, 0x480fc857, 0x4c000000, 0x900c0581, - 0x05020004, 0x42000000, 0x0010e394, 0x0501f00f, - 0x900c0582, 0x05020004, 0x42000000, 0x0010e395, - 0x0501f00a, 0x900c0583, 0x05020004, 0x42000000, - 0x0010e396, 0x0501f005, 0x900c0584, 0x05020004, - 0x42000000, 0x0010e397, 0x05fdff56, 0x5c000000, - 0x1c01f000, 0x4c000000, 0x59a80249, 0x4803c857, - 0x59240a00, 0x8c04050a, 0x05000010, 0x8c000506, - 0x05000004, 0x42000000, 0x0010e39f, 0x0501f011, - 0x8c00050a, 0x05000004, 0x42000000, 0x0010e39e, - 0x0501f00c, 0x8c000508, 0x05000004, 0x42000000, - 0x0010e3a1, 0x0501f007, 0x05c9f810, 0x05000006, - 0x8c000506, 0x05020004, 0x42000000, 0x0010e3a0, - 0x05fdff38, 0x5c000000, 0x1c01f000, 0x8058b1c0, - 0x05980d32, 0x5450a800, 0x8050a000, 0x8054a800, - 0x8058b040, 0x05fe07fc, 0x1c01f000, 0x8058b1c0, - 0x05980d2a, 0x4450a800, 0x8054a800, 0x8058b040, - 0x05fe07fd, 0x1c01f000, 0x4813c857, 0x4817c857, - 0x40140000, 0x80100480, 0x059a1d20, 0x497bc841, - 0x41787000, 0x42006800, 0x00140000, 0x59a800ca, - 0x8c000500, 0x05000003, 0x42006800, 0x0013a000, - 0x4837c857, 0x8010048d, 0x05021005, 0x8014048d, - 0x05001003, 0x40147000, 0x80342840, 0x61fc7801, - 0x40100000, 0x80140480, 0x82006d00, 0xffffff00, - 0x05020002, 0x40007800, 0x4813c840, 0x483fc842, - 0x05011000, 0x40100000, 0x803c2400, 0x40100000, - 0x80140580, 0x05fe07f3, 0x45782800, 0x803871c0, - 0x05000005, 0x40382800, 0x41787000, 0x80102000, - 0x05fdf7eb, 0x1c01f000, 0x8058b1c0, 0x05980cf7, - 0x50500000, 0x9c0001c0, 0x4400a800, 0x8050a000, - 0x8054a800, 0x8058b040, 0x05fe07fa, 0x1c01f000, - 0x4c000000, 0x59a80007, 0x8c00051c, 0x5c000000, - 0x1c01f000, 0x59a80007, 0x8c000518, 0x1c01f000, - 0x4200b000, 0x0010e511, 0x5058b000, 0x1c01f000, - 0x42006800, 0x0010e512, 0x58340406, 0x8c000502, - 0x05fc07f8, 0x6004b000, 0x1c01f000, 0x61906800, - 0x80346840, 0x05000006, 0x64070000, 0x40000000, - 0x59807000, 0x8c380500, 0x05fc07fa, 0x1c01f000, - 0x4c040000, 0x05fdfff6, 0x05020003, 0x80040840, - 0x05fe07fd, 0x5c000800, 0x1c01f000, 0x640f0000, - 0x40000000, 0x59800000, 0x8c000500, 0x05fc07fc, - 0x1c01f000, 0x42006800, 0x0010e512, 0x58340406, - 0x8c000504, 0x1c01f000, 0x42006800, 0x0010e511, - 0x50346800, 0x42007000, 0x0010e512, 0x58380200, - 0x8c000500, 0x05020004, 0x9038740d, 0x80346840, - 0x05fe07fb, 0x1c01f000, 0x42006800, 0x0010e512, - 0x58340406, 0x8c000508, 0x1c01f000, 0x42006800, - 0x0010e512, 0x58340406, 0x8c00050a, 0x1c01f000, - 0x59a80006, 0x8c000516, 0x1c01f000, 0x599c0017, - 0x8c00051e, 0x1c01f000, 0x42006800, 0x0010e511, - 0x50346800, 0x59cc7000, 0x42007800, 0x0010e512, - 0x583c0005, 0x80380580, 0x82000500, 0x00ffffff, - 0x05000006, 0x80346840, 0x05000003, 0x903c7c0d, - 0x05fdf7f8, 0x90000541, 0x1c01f000, 0x59a86a49, - 0x8c34050a, 0x0500000a, 0x8c340514, 0x05000008, - 0x42006800, 0x0010e511, 0x50346800, 0xb0340481, - 0x05001004, 0x599c0017, 0x8c00050a, 0x1c01f000, - 0x80000580, 0x05fdf7fe, 0x59a80006, 0x8c000518, - 0x05000002, 0x8d0c0520, 0x1c01f000, 0x00000001, - 0x00000002, 0x00000004, 0x00000008, 0x00000010, - 0x00000020, 0x00000040, 0x00000080, 0x00000100, - 0x00000200, 0x00000400, 0x00000800, 0x00001000, - 0x00002000, 0x00004000, 0x00008000, 0x00010000, - 0x00020000, 0x00040000, 0x00080000, 0x00100000, - 0x00200000, 0x00400000, 0x00800000, 0x01000000, - 0x02000000, 0x04000000, 0x08000000, 0x10000000, - 0x20000000, 0x40000000, 0x80000000, 0x0010e512, - 0x0010e51f, 0x0010e52c, 0x0010e539, 0x0010e546, - 0x0010e553, 0x0010e560, 0x0010e56d, 0x0010e57a, - 0x0010e587, 0x0010e594, 0x0010e5a1, 0x0010e5ae, - 0x0010e5bb, 0x0010e5c8, 0x0010e5d5, 0x0010e5e2, - 0x0010e5ef, 0x0010e5fc, 0x0010e609, 0x0010e616, - 0x0010e623, 0x0010e630, 0x0010e63d, 0x0010e64a, - 0x0010e657, 0x0010e664, 0x0010e671, 0x0010e67e, - 0x0010e68b, 0x0010e698, 0x0010e6a5, 0x0010e6b2, - 0x0010e6bf, 0x0010e6cc, 0x0010e6d9, 0x0010e6e6, - 0x0010e6f3, 0x0010e700, 0x0010e70d, 0x0010e71a, - 0x0010e727, 0x0010e734, 0x0010e741, 0x0010e74e, - 0x0010e75b, 0x0010e768, 0x0010e775, 0x0010e782, - 0x0010e78f, 0x0010e79c, 0x0010e7a9, 0x0010e7b6, - 0x0010e7c3, 0x0010e7d0, 0x0010e7dd, 0x0010e7ea, - 0x0010e7f7, 0x0010e804, 0x0010e811, 0x0010e81e, - 0x0010e82b, 0x0010e838, 0x0010e845, 0x0010e852, - 0x0010e85f, 0x0010e86c, 0x0010e879, 0x0010e886, - 0x0010e893, 0x0010e8a0, 0x0010e8ad, 0x0010e8ba, - 0x0010e8c7, 0x0010e8d4, 0x0010e8e1, 0x0010e8ee, - 0x0010e8fb, 0x0010e908, 0x0010e915, 0x0010e922, - 0x0010e92f, 0x0010e93c, 0x0010e949, 0x0010e956, - 0x0010e963, 0x0010e970, 0x0010e97d, 0x0010e98a, - 0x0010e997, 0x0010e9a4, 0x0010e9b1, 0x0010e9be, - 0x0010e9cb, 0x0010e9d8, 0x0010e9e5, 0x0010e9f2, - 0x0010e9ff, 0x0010ea0c, 0x0010ea19, 0x0010ea26, - 0x0010ea33, 0x0010ea40, 0x0010ea4d, 0x0010ea5a, - 0x0010ea67, 0x0010ea74, 0x0010ea81, 0x0010ea8e, - 0x0010ea9b, 0x0010eaa8, 0x0010eab5, 0x0010eac2, - 0x0010eacf, 0x0010eadc, 0x0010eae9, 0x0010eaf6, - 0x0010eb03, 0x0010eb10, 0x0010eb1d, 0x0010eb2a, - 0x0010eb37, 0x0010eb44, 0x0010eb51, 0x0010eb5e, - 0x0010eb6b, 0x0010eb78, 0x0010eb85, 0x0010eb92, - 0x0010eb9f, 0x0010ebac, 0x0010ebb9, 0x0010ebc6, - 0x0010ebd3, 0x0010ebe0, 0x0010ebed, 0x0010ebfa, - 0x0010ec07, 0x0010ec14, 0x0010ec21, 0x0010ec2e, - 0x0010ec3b, 0x0010ec48, 0x0010ec55, 0x0010ec62, - 0x0010ec6f, 0x0010ec7c, 0x0010ec89, 0x0010ec96, - 0x0010eca3, 0x0010ecb0, 0x0010ecbd, 0x0010ecca, - 0x0010ecd7, 0x0010ece4, 0x0010ecf1, 0x0010ecfe, - 0x0010ed0b, 0x0010ed18, 0x0010ed25, 0x0010ed32, - 0x0010ed3f, 0x0010ed4c, 0x0010ed59, 0x0010ed66, - 0x0010ed73, 0x0010ed80, 0x0010ed8d, 0x0010ed9a, - 0x0010eda7, 0x0010edb4, 0x0010edc1, 0x0010edce, - 0x0010eddb, 0x0010ede8, 0x0010edf5, 0x0010ee02, - 0x0010ee0f, 0x0010ee1c, 0x0010ee29, 0x0010ee36, - 0x0010ee43, 0x0010ee50, 0x0010ee5d, 0x0010ee6a, - 0x0010ee77, 0x0010ee84, 0x0010ee91, 0x0010ee9e, - 0x0010eeab, 0x0010eeb8, 0x0010eec5, 0x0010eed2, - 0x0010eedf, 0x0010eeec, 0x0010eef9, 0x0010ef06, - 0x0010ef13, 0x0010ef20, 0x0010ef2d, 0x0010ef3a, - 0x0010ef47, 0x0010ef54, 0x0010ef61, 0x0010ef6e, - 0x0010ef7b, 0x0010ef88, 0x0010ef95, 0x0010efa2, - 0x0010efaf, 0x0010efbc, 0x0010efc9, 0x0010efd6, - 0x0010efe3, 0x0010eff0, 0x0010effd, 0x0010f00a, - 0x0010f017, 0x0010f024, 0x0010f031, 0x0010f03e, - 0x0010f04b, 0x0010f058, 0x0010f065, 0x0010f072, - 0x0010f07f, 0x0010f08c, 0x0010f099, 0x0010f0a6, - 0x0010f0b3, 0x0010f0c0, 0x0010f0cd, 0x0010f0da, - 0x0010f0e7, 0x0010f0f4, 0x0010f101, 0x0010f10e, - 0x0010f11b, 0x0010f128, 0x0010f135, 0x0010f142, - 0x0010f14f, 0x0010f15c, 0x0010f169, 0x0010f176, - 0x0010f183, 0x0010f190, 0x0010f19d, 0x0010f1aa, - 0x0010f1b7, 0x0010f1c4, 0x0010f1d1, 0x0010f1de, - 0x0010f1eb, 0x0010f1f8, 0x0010f205, 0x40000000, - 0x600070e0, 0x60007820, 0x4a007016, 0x00010001, - 0x58380016, 0x8c000500, 0x05fc07fc, 0x600c4000, - 0x60003002, 0x64807808, 0x583c2808, 0x8c14053e, - 0x05000004, 0x80183040, 0x05fe07fc, 0x0501f00d, - 0x583c2808, 0x82140500, 0x20000400, 0x82000580, - 0x00000400, 0x05020005, 0x82140500, 0x00000300, - 0x90000580, 0x05000007, 0x80204040, 0x05fe07ee, - 0x4a007016, 0x00010000, 0x90000541, 0x0501f040, - 0x650c7808, 0x583c0009, 0x8c000500, 0x05000005, - 0x60002000, 0x4a007016, 0x00010000, 0x0501f037, - 0x65007808, 0x583c5809, 0x65047808, 0x583c6009, - 0x65087808, 0x583c6809, 0x4a007016, 0x00010000, - 0x82102d00, 0xf0000000, 0x90140580, 0x05000002, - 0x0501f020, 0x60202800, 0x60003000, 0x803000c8, - 0x40003800, 0x8030010a, 0x801c3d80, 0x40300000, - 0x80180580, 0x80100400, 0x801c0400, 0x802c5c00, - 0x803400c8, 0x40003800, 0x8034010a, 0x801c3d80, - 0x40340000, 0x80180580, 0x801c0400, 0x80306400, - 0x802c00c8, 0x40003800, 0x802c010a, 0x801c3d80, - 0x402c0000, 0x80180580, 0x801c0400, 0x80346c00, - 0x82183400, 0x9e3779b9, 0x80142840, 0x05fe07e4, - 0x0502000b, 0x402c0000, 0x80040580, 0x05fe07c7, - 0x40300000, 0x80080580, 0x05fe07c4, 0x40340000, - 0x800c0580, 0x05fe07c1, 0x80000580, 0x1c01f000, - 0x1c01f000, 0x42005000, 0x7ff4c000, 0x58280800, - 0x58281001, 0x58281802, 0x58282003, 0x05fdff98, - 0x05020807, 0x82101d00, 0x0fffffff, 0x480fc021, - 0x900c01c0, 0x4803c022, 0x1c01f000, 0x497bc021, - 0x497bc022, 0x4a03c020, 0x00004020, 0x4a03c011, - 0x40200011, 0x6016d800, 0x05027011, 0x59e00020, - 0x90000582, 0x0502000e, 0x05006000, 0x4203e000, - 0x40000000, 0x59e00017, 0x60000800, 0x8c00050a, - 0x05a20bd4, 0x8d0c0530, 0x05a20bc7, 0x05a20bc9, - 0x6403c017, 0x4203e000, 0x30000001, 0x0599fcb5, - 0x05fdf7ff, 0x59a808d1, 0x8c100502, 0x05000003, - 0x84040d42, 0x0501f007, 0x8c100504, 0x05000003, - 0x84040d44, 0x0501f003, 0x8c100500, 0x84040d40, - 0x480750d1, 0x1c01f000, 0x59a800d1, 0x8c000502, - 0x05000009, 0x4a0350d2, 0x0000008b, 0x4a0350d3, - 0x0000008b, 0x4a0350d4, 0x0000008b, 0x641350d5, - 0x0501f00c, 0x8c000504, 0x05000006, 0x65bf50d2, - 0x65bf50d3, 0x65df50d4, 0x640350d5, 0x0501f005, - 0x64cf50d2, 0x64cf50d3, 0x649750d4, 0x640350d5, - 0x1c01f000, 0x9d56cdac, 0x00000000, 0x00000000, - 0x00112000, 0x0000317e, 0x00000000, 0x00000000, - 0x00020000, 0x000011a6, 0x916c0583, 0x01020177, - 0x42000000, 0x0010dd03, 0x50000000, 0x800001c0, - 0x05020a3e, 0x0501f9fb, 0x0501ffd5, 0x0501fb93, - 0x8d0c0516, 0x05000f50, 0x8d0c0516, 0x05000e06, - 0x59a800a2, 0x80000540, 0x01060ac5, 0x0505fc83, - 0x05fdf7ee, 0x835c0480, 0x00000104, 0x010411a5, - 0x416a5800, 0x592ed000, 0x497a5800, 0x497a5801, - 0x815eb840, 0x812e59c0, 0x1c01f000, 0x42007000, - 0x000211a7, 0x58380004, 0x49781000, 0x64001002, - 0x48087004, 0x80000d40, 0x05020006, 0x48087005, - 0x58380000, 0x80000540, 0x0500000a, 0x1c01f000, - 0x48080800, 0x05fdf7fb, 0x42007000, 0x000211a7, - 0x58380000, 0x80000540, 0x05000002, 0x1c01f000, - 0x58380807, 0x800409c0, 0x01060234, 0x58380005, - 0x80006d40, 0x05020002, 0x1c01f000, 0x58340000, - 0x48347001, 0x80000540, 0x05020002, 0x48007004, - 0x48007005, 0x4a03b805, 0x30000002, 0x58340007, - 0x59dc0806, 0x4803b800, 0x58340008, 0x4803b801, - 0x58340806, 0x4807b81f, 0x58340805, 0x58341003, - 0x58340001, 0x48047002, 0x48087003, 0x480bb803, - 0x8c000500, 0x05020004, 0x64087000, 0x6407c824, - 0x0501f004, 0x64047000, 0x6503c824, 0x0105f25b, - 0x58380802, 0x600011fe, 0x82040480, 0x0000ff00, - 0x05021003, 0x40041000, 0x80000580, 0x48007002, - 0x480bb802, 0x4a03b805, 0x10000002, 0x1c01f000, - 0x59dc0806, 0x4a03b805, 0x20000000, 0x8c04053e, - 0x05000009, 0x8c040508, 0x01020dda, 0x42007000, - 0x000211a7, 0x58380000, 0x90001484, 0x0c001003, - 0x0101fdda, 0x1c01f000, 0x00020036, 0x00020078, - 0x0002007f, 0x001014e8, 0x82040d00, 0x43200f80, - 0x01060268, 0x58380002, 0x80000540, 0x05000008, - 0x0105f25b, 0x82040d00, 0x43200f80, 0x01060268, - 0x58380002, 0x80000540, 0x05fe07d6, 0x58386001, - 0x58300009, 0x4a006002, 0x00000100, 0x64007000, - 0x80001540, 0x05fc07ab, 0x59dc0000, 0x48006007, - 0x59dc0001, 0x48006008, 0x0809f800, 0x05fdf79f, - 0x84040d1e, 0x59e00017, 0x8c00050c, 0x05020007, - 0x59a818a0, 0x800400c4, 0x800c1c00, 0x580c0003, - 0x8c000500, 0x05000008, 0x59a800a2, 0x4c000000, - 0x0105fab6, 0x5c000000, 0x80000540, 0x01060280, - 0x1c01f000, 0x4d2c0000, 0x4c040000, 0x4c0c0000, - 0x05fdff71, 0x5c001800, 0x5c000800, 0x05000014, - 0x82040400, 0x0010df60, 0x50000000, 0x48025806, - 0x64025801, 0x64125805, 0x64065804, 0x900c0402, - 0x48025803, 0x580c0000, 0x48025807, 0x580c0001, - 0x48025808, 0x4a025809, 0x000200bf, 0x4806580a, - 0x412c1000, 0x5c025800, 0x05fdf765, 0x5c025800, - 0x0105f2b6, 0x58300802, 0x82040580, 0x00000100, - 0x01060275, 0x4d2c0000, 0x40325800, 0x0105f993, - 0x5c025800, 0x0105f280, 0x59b800ea, 0x82000d00, - 0xf2000038, 0x010603f7, 0x8c000510, 0x010403f6, - 0x59ba60e0, 0x81300182, 0x0502104c, 0x05002030, - 0x8532653e, 0x59300407, 0x90000583, 0x0502002a, - 0x59300203, 0x90000584, 0x05020027, 0x59325809, - 0x59300004, 0x4a025a08, 0x00000103, 0x497a580d, - 0x8c00053e, 0x0502001a, 0x59300008, 0x82000500, - 0x04000800, 0x82000580, 0x04000800, 0x05000017, - 0x0501fa9c, 0x59325827, 0x812e59c0, 0x01060993, - 0x5932680a, 0x0505fef1, 0x5934000f, 0x8d0c0512, - 0x05020005, 0x5934140b, 0x80081040, 0x05001002, - 0x480a6c0b, 0x80000540, 0x05020a19, 0x59b800ea, - 0x8c000510, 0x05fe07d7, 0x1c01f000, 0x0145f8b9, - 0x05fc07e6, 0x0105f3ef, 0x59300221, 0x48025c13, - 0x05fdf7e8, 0x61567000, 0x0501f024, 0x83326500, - 0x3fffffff, 0x59300407, 0x90000583, 0x05020015, - 0x59325809, 0x5932680a, 0x4a025a08, 0x00000103, - 0x497a580d, 0x0501fa77, 0x59325827, 0x812e59c0, - 0x01060992, 0x0505fecd, 0x5934000f, 0x8d0c0512, - 0x05020005, 0x5934140b, 0x80081040, 0x05001002, - 0x480a6c0b, 0x80000540, 0x050209f5, 0x05fdf7dc, - 0x61527000, 0x0501f009, 0x83300500, 0x60000000, - 0x05000013, 0x81326580, 0x8000013a, 0x82000400, - 0x00100bfb, 0x50027000, 0x59300c07, 0x90040580, - 0x010403ef, 0x90040582, 0x010403ef, 0x59300004, - 0x8c00053e, 0x05020003, 0x0505fed4, 0x05fdf7c8, - 0x0145f8b9, 0x05fc07fd, 0x0105f3ef, 0x83300500, - 0x1f000000, 0x010403f1, 0x81326580, 0x80000130, - 0x90000c97, 0x01021dda, 0x1201f000, 0x00100bff, - 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff, - 0x80040d40, 0x4807c857, 0x59b800ea, 0x8c000516, - 0x0106051a, 0x480770e1, 0x1c01f000, 0x59325809, - 0x412c7000, 0x58380a08, 0x82040d00, 0x000000ff, - 0xb00405a8, 0x01040786, 0xb00405aa, 0x01040786, - 0xb00405ba, 0x0104079f, 0xb00405b2, 0x0104079f, - 0x58380a08, 0x9004050f, 0x82000c00, 0x001012ac, - 0x50044000, 0x0c01f001, 0x00100f85, 0x00100f85, - 0x00020168, 0x00100f85, 0x00100f85, 0x00100f85, - 0x00100f85, 0x00100f85, 0x00020176, 0x00100fa5, - 0x00100f85, 0x00100f85, 0x00100f85, 0x00100f85, - 0x00100f85, 0x00100f85, 0x5838040e, 0x8c000500, - 0x01000dda, 0x50200000, 0x80387c00, 0x583c1002, - 0x583c2800, 0x583c2001, 0x58380a0b, 0x58383013, - 0x59303808, 0x58380011, 0x48026014, 0x0501f00e, - 0x5838020e, 0x8c000502, 0x01040785, 0x50200000, - 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002, - 0x592c0a0b, 0x592c3013, 0x59303808, 0x497a6014, - 0x497a6015, 0x48166010, 0x48126011, 0x480a6012, - 0x481a6013, 0x80040840, 0x4806600f, 0x010607cc, - 0x841c3d40, 0x481e6008, 0x1c01f000, 0x4d2c0000, - 0x59325809, 0x592c0a08, 0x4807c857, 0x82040d00, - 0x000000ff, 0x9004050f, 0x1201f000, 0x001010f0, - 0x41787800, 0x59325809, 0x592c0c0e, 0x8c040502, - 0x01080120, 0x592c0011, 0x592c1013, 0x592c0a08, - 0x480a6013, 0x48026014, 0x48026015, 0x82040d00, - 0x000000ff, 0xb00405b2, 0x01080126, 0xb00405ba, - 0x01080126, 0x412c3000, 0x9004050f, 0x82000400, - 0x001012ac, 0x50003800, 0x8c3c050e, 0x05000002, - 0x801c3800, 0x501c0000, 0x592c1a0b, 0x4802600c, - 0x481a600d, 0x481e600e, 0x480e600f, 0x843c7d4a, - 0x403c1000, 0x1c01f000, 0x59e00004, 0x8c00050e, - 0x05fe06ac, 0x1c01f000, 0x42001000, 0x001105e7, - 0x5808000a, 0x80000540, 0x010a06ac, 0x4a001003, - 0x001105f1, 0x4c080000, 0x0501f812, 0x5c001000, - 0x4814100a, 0x480c1007, 0x48101008, 0x64001001, - 0x64101005, 0x64041004, 0x05fdf655, 0x58300802, - 0x82040580, 0x00000100, 0x010a06bb, 0x82300580, - 0x001105e7, 0x010a06b6, 0x4978600a, 0x1c01f000, - 0x61901800, 0x800c1840, 0x05000006, 0x64070000, - 0x40000000, 0x59800000, 0x8c000500, 0x05fc07fa, - 0x01080706, 0x600028f4, 0x58142024, 0x58141823, - 0x58142825, 0x64030000, 0x1c01f000, 0x4c000000, - 0x4df00000, 0x4203e000, 0xb0100000, 0x41f00000, - 0x81fe1500, 0x8d080512, 0x010e092d, 0x8d08051c, - 0x05060ccd, 0x8d080518, 0x05060d00, 0x8d08051a, - 0x05fe0ed6, 0x83080500, 0x00000d00, 0x05020804, - 0x5c03e000, 0x5c000000, 0x1801f000, 0x8d080516, - 0x010a0f6d, 0x8d080514, 0x05fe0fbc, 0x8d080508, - 0x010a0b68, 0x8d080500, 0x05060c27, 0x8d08050c, - 0x010e0830, 0x8d08050a, 0x010a049f, 0x1c01f000, - 0x42000000, 0x0010dd09, 0x50000000, 0x8c000504, - 0x05000013, 0x8c000508, 0x05020004, 0x8c000502, - 0x05020002, 0x1c01f000, 0x4df00000, 0x4203e000, - 0x50000000, 0x42034000, 0x0010dceb, 0x59a0001e, - 0x59a1d806, 0x84000502, 0x4803401e, 0x58ec0009, - 0x0801f800, 0x5c03e000, 0x1c01f000, 0x05027002, - 0x05026002, 0x1c01f000, 0x4df00000, 0x4203e000, - 0x50000000, 0x59e00020, 0xb0000d85, 0x05000003, - 0xb0000d84, 0x05020007, 0x4803c857, 0x42000800, - 0x000211a7, 0x58040800, 0x90040d80, 0x05020019, - 0x0105f982, 0x05000017, 0x412dd800, 0x48efc857, - 0x0125f8b5, 0x42034000, 0x0010dceb, 0x49a1d80b, - 0x48ef4006, 0x59a0001e, 0x84000544, 0x4803401e, - 0x59e00020, 0x4803c857, 0x59e00021, 0x4803c857, - 0x59e00022, 0x4803c857, 0x59e00023, 0x4803c857, - 0x59e00024, 0x4803c857, 0x0115f957, 0x0115f96f, - 0x5c03e000, 0x1c01f000, 0x4c5c0000, 0x4da00000, - 0x4df00000, 0x4203e000, 0x50000000, 0x05006062, - 0x42034000, 0x0010dceb, 0x59a01018, 0x59a01819, - 0x800c19c0, 0x05020009, 0x59a0381c, 0x801c39c0, - 0x01000dda, 0x49a3c857, 0x481fc857, 0x59a0041d, - 0x801c3c00, 0x0501f00a, 0x59a0041a, 0x90000402, - 0x4803441a, 0x90000c97, 0x05001003, 0x497b441a, - 0x41780000, 0x59a03817, 0x801c3c00, 0x401cb800, - 0x80081040, 0x480b4018, 0x581c0200, 0x4803c021, - 0x581c0401, 0x4803c022, 0x581c0201, 0x4803c023, - 0x581c0400, 0x4803c020, 0x900001c0, 0x90000552, - 0x4803c011, 0x8d0c0530, 0x0500000f, 0x4c080000, - 0x4c0c0000, 0x4c1c0000, 0x59e00017, 0x8c00050a, - 0x05000004, 0x60000800, 0x05fdfe16, 0x0501f003, - 0x8c000500, 0x05fe0f3d, 0x5c003800, 0x5c001800, - 0x5c001000, 0x6403c017, 0x4203e000, 0x30000001, - 0x800c19c0, 0x05000007, 0x800c1840, 0x480f4019, - 0x0502001b, 0x497b441a, 0x497b421a, 0x0501f018, - 0x800811c0, 0x0502000a, 0x4d2c0000, 0x59a2581c, - 0x0105f992, 0x5c025800, 0x497b401c, 0x497b401b, - 0x497b441d, 0x497b421d, 0x0501f00d, 0x59a0041d, - 0x90000402, 0x90000c96, 0x4803441d, 0x05001008, - 0x4d2c0000, 0x59a2581c, 0x592c3817, 0x481f401c, - 0x497b441d, 0x0105f992, 0x5c025800, 0x8d0c052a, - 0x05000009, 0x60083800, 0x42000800, 0x25000000, - 0x585c1800, 0x585c3001, 0x900c19c0, 0x901831c0, - 0x0101fea6, 0x5c03e000, 0x5c034000, 0x5c00b800, - 0x1c01f000, 0x8d0c0520, 0x05000003, 0x59a80005, - 0x8c000516, 0x1c01f000, 0x910c0503, 0x012a02dd, - 0x59340400, 0x82000580, 0x00000606, 0x012a02b7, - 0x5934000d, 0x80027d40, 0x012a02e6, 0x592c1003, - 0x5808020a, 0x8c000500, 0x05000005, 0x592c1813, - 0x5808000d, 0x800c0400, 0x4800100d, 0x5934000f, - 0x59341203, 0x80080540, 0x05020021, 0x8d0c0512, - 0x05000010, 0x0505fcf0, 0x05000017, 0x59a800d2, - 0x80000040, 0x05fe07ff, 0x492e6009, 0x4936600a, - 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400, - 0x20000000, 0x4801a8e1, 0x80000580, 0x1c01f000, - 0x5934000b, 0x80001920, 0x82000500, 0x0000ffff, - 0x800c0480, 0x0502100a, 0x800c1800, 0x480e6c0b, - 0x05fdf7e9, 0x8d0c0512, 0x05020005, 0x59341c0b, - 0x800c1840, 0x480e6c0b, 0x59341203, 0x0501f803, - 0x80000580, 0x1c01f000, 0x800811c0, 0x05020002, - 0x64066a03, 0x59340010, 0x492e6810, 0x80000d40, - 0x05020008, 0x492e680f, 0x592c040a, 0x800000c2, - 0x800018c4, 0x800c0400, 0x48025807, 0x1c01f000, - 0x492c0800, 0x05fdf7f9, 0x83440c80, 0x00000800, - 0x05021009, 0x83440400, 0x0010d400, 0x50000000, - 0x80000540, 0x05000004, 0x40026800, 0x80000580, - 0x1c01f000, 0x90000541, 0x1c01f000, 0x59340203, - 0x80000540, 0x05020036, 0x4d300000, 0x4d2c0000, - 0x5934000f, 0x80025d40, 0x0500002f, 0x0505fcaa, - 0x05000021, 0x592c0000, 0x4802680f, 0x80000540, - 0x05020002, 0x48026810, 0x592c2a08, 0x4936600a, - 0x4c080000, 0x012dfdc8, 0x5c001000, 0x05000025, - 0x492e6009, 0x8d0c0512, 0x05000010, 0x58d400ea, - 0x8c000516, 0x05fe07fe, 0x83300400, 0x20000000, - 0x4801a8e1, 0x8d0c0512, 0x05fe07e6, 0x5934000b, - 0x80001120, 0x82000500, 0x0000ffff, 0x80080480, - 0x05fc17e0, 0x0501f010, 0x80081000, 0x480a6c0b, - 0x05fdf7ef, 0x4c080000, 0x012dfdc8, 0x05020008, - 0x42000000, 0x0010e444, 0x0165ffdc, 0x015dfa53, - 0x05000003, 0x5c001000, 0x05fdf7d7, 0x5c001000, - 0x64066a03, 0x5c025800, 0x5c026000, 0x1c01f000, - 0x497a5800, 0x4932580d, 0x4a026007, 0x00068000, - 0x641e6203, 0x0501f802, 0x05fdf7df, 0x592e440b, - 0x83224500, 0x000000ff, 0x83200400, 0x0010d17b, - 0x50024800, 0x4926601d, 0x592c0210, 0x48026202, - 0x59240206, 0x8c000510, 0x012a070a, 0x8d0c050e, - 0x012a0708, 0x59240200, 0x8c000516, 0x012a0706, - 0x59340200, 0x8c000518, 0x012a0704, 0x64025a0a, - 0x8c000508, 0x012a0702, 0x492e6009, 0x4d3c0000, - 0x417a7800, 0x0505fac6, 0x5c027800, 0x1c01f000, - 0x58040001, 0x49680800, 0x49780801, 0x815eb800, - 0x4006d000, 0x80000d40, 0x05fe07fa, 0x497a5801, - 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x1c01f000, 0x59980005, 0x48032823, 0x59d8010b, - 0x48033006, 0x1c01f000, 0x59980005, 0x59747408, - 0x58387100, 0x483aec02, 0x4802e803, 0x1c01f000, - 0x592c0408, 0x8c00051e, 0x012e0618, 0x497a5800, - 0x8d0c0516, 0x05020003, 0x0501fa49, 0x0501f011, - 0x8d0c0526, 0x0502000d, 0x0502d007, 0x592c0001, - 0x492fb107, 0x80000d40, 0x05fe0fda, 0x0500e1c4, - 0x1c01f000, 0x0500e9c2, 0x05fcd7f9, 0x42000000, - 0x0010e3a8, 0x0165ffdf, 0x0501fa39, 0x0500da49, - 0x0500e1bb, 0x59d80105, 0x82000d00, 0x01238780, - 0x05020257, 0x1c01f000, 0x59980003, 0x0c01f001, - 0x000203a8, 0x000203a9, 0x00020421, 0x00020461, - 0x000203b7, 0x000204de, 0x1c01f000, 0x4df00000, - 0x4203e000, 0x50000000, 0x05026a8e, 0x05006003, - 0x8d0c0520, 0x05020b35, 0x830c0580, 0x00080800, - 0x82000500, 0x00080800, 0x05000a2e, 0x5c03e000, + 0x8c040516, 0x05000004, 0x5988011f, 0x80000000, + 0x4803111f, 0x8c040514, 0x05000004, 0x59880120, + 0x80000000, 0x48031120, 0x5c000000, 0x1c01f000, + 0x4807c857, 0x4c000000, 0x8c040510, 0x05000004, + 0x59880121, 0x80000000, 0x48031121, 0x8c04050c, + 0x05000004, 0x59880122, 0x80000000, 0x48031122, + 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000, + 0x8c040508, 0x05000004, 0x59880123, 0x80000000, + 0x48031123, 0x8c040504, 0x05000004, 0x59880124, + 0x80000000, 0x48031124, 0x5c000000, 0x1c01f000, + 0x4807c856, 0x4c000000, 0x598800ed, 0x80000000, + 0x480310ed, 0x5c000000, 0x1c01f000, 0x5c036000, + 0x4db00000, 0x49b3c857, 0x4c040000, 0x50000800, + 0x80040800, 0x05001002, 0x44040000, 0x5c000800, + 0x1c01f000, 0x480fc857, 0x4c000000, 0x900c0580, + 0x05020004, 0x42000000, 0x001123b2, 0x0501f012, + 0x820c0580, 0x00001001, 0x05020004, 0x42000000, + 0x001123b3, 0x0501f00c, 0x820c0580, 0x00001002, + 0x05020004, 0x42000000, 0x001123b4, 0x0501f006, + 0x820c0c80, 0x0000201c, 0x05961e9f, 0x900c051f, + 0x0c01f804, 0x05fdffde, 0x5c000000, 0x1c01f000, + 0x0010d798, 0x0010d79b, 0x0010d79e, 0x0010d7a1, + 0x0010d7a4, 0x0010d7a7, 0x0010d7aa, 0x0010d7ad, + 0x0010d7b0, 0x0010d7b3, 0x0010d7b6, 0x0010d7b9, + 0x0010d7bc, 0x0010d7bf, 0x0010d7c2, 0x0010d7c5, + 0x0010d7c8, 0x0010d7cb, 0x0010d7ce, 0x0010d7d1, + 0x0010d7d4, 0x0010d7d7, 0x0010d7da, 0x0010d7dd, + 0x0010d7e0, 0x0010d7e3, 0x0010d7e6, 0x0010d7e9, + 0x42000000, 0x001123b5, 0x1c01f000, 0x42000000, + 0x001123b6, 0x1c01f000, 0x42000000, 0x001123b7, + 0x1c01f000, 0x42000000, 0x001123b8, 0x1c01f000, + 0x42000000, 0x001123b9, 0x1c01f000, 0x42000000, + 0x001123ba, 0x1c01f000, 0x42000000, 0x001123bb, + 0x1c01f000, 0x42000000, 0x001123bc, 0x1c01f000, + 0x42000000, 0x001123bd, 0x1c01f000, 0x42000000, + 0x001123be, 0x1c01f000, 0x42000000, 0x001123bf, + 0x1c01f000, 0x42000000, 0x001123c0, 0x1c01f000, + 0x42000000, 0x001123c1, 0x1c01f000, 0x42000000, + 0x001123c2, 0x1c01f000, 0x42000000, 0x001123c3, + 0x1c01f000, 0x42000000, 0x001123c4, 0x1c01f000, + 0x42000000, 0x001123c5, 0x1c01f000, 0x42000000, + 0x001123c6, 0x1c01f000, 0x42000000, 0x001123c7, + 0x1c01f000, 0x42000000, 0x001123c8, 0x1c01f000, + 0x42000000, 0x001123c9, 0x1c01f000, 0x42000000, + 0x001123ca, 0x1c01f000, 0x42000000, 0x001123cb, + 0x1c01f000, 0x42000000, 0x001123cc, 0x1c01f000, + 0x42000000, 0x001123cd, 0x1c01f000, 0x42000000, + 0x001123ce, 0x1c01f000, 0x42000000, 0x001123cf, + 0x1c01f000, 0x42000000, 0x001123d0, 0x1c01f000, + 0x480fc857, 0x4c000000, 0x900c0585, 0x05020004, + 0x42000000, 0x00112335, 0x0501f00f, 0x900c0582, + 0x05020004, 0x42000000, 0x00112336, 0x0501f00a, + 0x900c0583, 0x05020004, 0x42000000, 0x00112337, + 0x0501f005, 0x900c0584, 0x05020004, 0x42000000, + 0x00112338, 0x05fdff56, 0x5c000000, 0x1c01f000, + 0x4c000000, 0x59a8024c, 0x4803c857, 0x59240a00, + 0x8c04050a, 0x05000010, 0x8c000506, 0x05000004, + 0x42000000, 0x00112340, 0x0501f011, 0x8c00050a, + 0x05000004, 0x42000000, 0x0011233f, 0x0501f00c, + 0x8c000508, 0x05000004, 0x42000000, 0x00112342, + 0x0501f007, 0x05c5fb7f, 0x05000006, 0x8c000506, + 0x05020004, 0x42000000, 0x00112341, 0x05fdff38, + 0x5c000000, 0x1c01f000, 0x8058b1c0, 0x05940df2, + 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040, + 0x05fe07fc, 0x1c01f000, 0x8058b1c0, 0x05940dea, + 0x4450a800, 0x8054a800, 0x8058b040, 0x05fe07fd, + 0x1c01f000, 0x4813c857, 0x4817c857, 0x40140000, + 0x80100480, 0x05961de0, 0x497bc841, 0x41787000, + 0x42006800, 0x00140000, 0x59a800cf, 0x8c000500, + 0x05000003, 0x42006800, 0x0013a000, 0x4837c857, + 0x8010048d, 0x05021005, 0x8014048d, 0x05001003, + 0x40147000, 0x80342840, 0x61fc7801, 0x40100000, + 0x80140480, 0x82006d00, 0xffffff00, 0x05020002, + 0x40007800, 0x4813c840, 0x483fc842, 0x05011000, + 0x40100000, 0x803c2400, 0x40100000, 0x80140580, + 0x05fe07f3, 0x45782800, 0x803871c0, 0x05000005, + 0x40382800, 0x41787000, 0x80102000, 0x05fdf7eb, + 0x1c01f000, 0x8058b1c0, 0x05940db7, 0x50500000, + 0x9c0001c0, 0x4400a800, 0x8050a000, 0x8054a800, + 0x8058b040, 0x05fe07fa, 0x1c01f000, 0x4c000000, + 0x59a80007, 0x8c00051c, 0x5c000000, 0x1c01f000, + 0x59a80007, 0x8c000518, 0x1c01f000, 0x4200b000, + 0x001124b5, 0x5058b000, 0x1c01f000, 0x42006800, + 0x001124b6, 0x58340406, 0x8c000502, 0x05fc07f8, + 0x6004b000, 0x1c01f000, 0x61906800, 0x80346840, + 0x05000006, 0x64070000, 0x40000000, 0x59807000, + 0x8c380500, 0x05fc07fa, 0x1c01f000, 0x4c040000, + 0x05fdfff6, 0x05020003, 0x80040840, 0x05fe07fd, + 0x5c000800, 0x1c01f000, 0x640f0000, 0x40000000, + 0x59800000, 0x8c000500, 0x05fc07fc, 0x1c01f000, + 0x42006800, 0x001124b6, 0x58340406, 0x8c000504, + 0x1c01f000, 0x42006800, 0x001124b5, 0x50346800, + 0x42007000, 0x001124b6, 0x58380200, 0x8c000500, + 0x05020004, 0x9038740d, 0x80346840, 0x05fe07fb, + 0x1c01f000, 0x42006800, 0x001124b6, 0x58340406, + 0x8c000508, 0x1c01f000, 0x42006800, 0x001124b6, + 0x58340406, 0x8c00050a, 0x1c01f000, 0x59a80006, + 0x8c000516, 0x1c01f000, 0x599c0017, 0x8c00051e, + 0x1c01f000, 0x42006800, 0x001124b5, 0x50346800, + 0x59cc7000, 0x42007800, 0x001124b6, 0x583c0005, + 0x80380580, 0x82000500, 0x00ffffff, 0x05000006, + 0x80346840, 0x05000003, 0x903c7c0d, 0x05fdf7f8, + 0x90000541, 0x1c01f000, 0x59a86a4c, 0x8c34050a, + 0x0500000a, 0x8c340514, 0x05000008, 0x42006800, + 0x001124b5, 0x50346800, 0xb0340481, 0x05001004, + 0x599c0017, 0x8c00050a, 0x1c01f000, 0x80000580, + 0x05fdf7fe, 0x59a80006, 0x8c000518, 0x05000002, + 0x8d0c0520, 0x1c01f000, 0x599c0019, 0x8c00050c, + 0x1c01f000, 0x00000001, 0x00000002, 0x00000004, + 0x00000008, 0x00000010, 0x00000020, 0x00000040, + 0x00000080, 0x00000100, 0x00000200, 0x00000400, + 0x00000800, 0x00001000, 0x00002000, 0x00004000, + 0x00008000, 0x00010000, 0x00020000, 0x00040000, + 0x00080000, 0x00100000, 0x00200000, 0x00400000, + 0x00800000, 0x01000000, 0x02000000, 0x04000000, + 0x08000000, 0x10000000, 0x20000000, 0x40000000, + 0x80000000, 0x001124b6, 0x001124c3, 0x001124d0, + 0x001124dd, 0x001124ea, 0x001124f7, 0x00112504, + 0x00112511, 0x0011251e, 0x0011252b, 0x00112538, + 0x00112545, 0x00112552, 0x0011255f, 0x0011256c, + 0x00112579, 0x00112586, 0x00112593, 0x001125a0, + 0x001125ad, 0x001125ba, 0x001125c7, 0x001125d4, + 0x001125e1, 0x001125ee, 0x001125fb, 0x00112608, + 0x00112615, 0x00112622, 0x0011262f, 0x0011263c, + 0x00112649, 0x00112656, 0x00112663, 0x00112670, + 0x0011267d, 0x0011268a, 0x00112697, 0x001126a4, + 0x001126b1, 0x001126be, 0x001126cb, 0x001126d8, + 0x001126e5, 0x001126f2, 0x001126ff, 0x0011270c, + 0x00112719, 0x00112726, 0x00112733, 0x00112740, + 0x0011274d, 0x0011275a, 0x00112767, 0x00112774, + 0x00112781, 0x0011278e, 0x0011279b, 0x001127a8, + 0x001127b5, 0x001127c2, 0x001127cf, 0x001127dc, + 0x001127e9, 0x001127f6, 0x00112803, 0x00112810, + 0x0011281d, 0x0011282a, 0x00112837, 0x00112844, + 0x00112851, 0x0011285e, 0x0011286b, 0x00112878, + 0x00112885, 0x00112892, 0x0011289f, 0x001128ac, + 0x001128b9, 0x001128c6, 0x001128d3, 0x001128e0, + 0x001128ed, 0x001128fa, 0x00112907, 0x00112914, + 0x00112921, 0x0011292e, 0x0011293b, 0x00112948, + 0x00112955, 0x00112962, 0x0011296f, 0x0011297c, + 0x00112989, 0x00112996, 0x001129a3, 0x001129b0, + 0x001129bd, 0x001129ca, 0x001129d7, 0x001129e4, + 0x001129f1, 0x001129fe, 0x00112a0b, 0x00112a18, + 0x00112a25, 0x00112a32, 0x00112a3f, 0x00112a4c, + 0x00112a59, 0x00112a66, 0x00112a73, 0x00112a80, + 0x00112a8d, 0x00112a9a, 0x00112aa7, 0x00112ab4, + 0x00112ac1, 0x00112ace, 0x00112adb, 0x00112ae8, + 0x00112af5, 0x00112b02, 0x00112b0f, 0x00112b1c, + 0x00112b29, 0x00112b36, 0x00112b43, 0x00112b50, + 0x00112b5d, 0x00112b6a, 0x00112b77, 0x00112b84, + 0x00112b91, 0x00112b9e, 0x00112bab, 0x00112bb8, + 0x00112bc5, 0x00112bd2, 0x00112bdf, 0x00112bec, + 0x00112bf9, 0x00112c06, 0x00112c13, 0x00112c20, + 0x00112c2d, 0x00112c3a, 0x00112c47, 0x00112c54, + 0x00112c61, 0x00112c6e, 0x00112c7b, 0x00112c88, + 0x00112c95, 0x00112ca2, 0x00112caf, 0x00112cbc, + 0x00112cc9, 0x00112cd6, 0x00112ce3, 0x00112cf0, + 0x00112cfd, 0x00112d0a, 0x00112d17, 0x00112d24, + 0x00112d31, 0x00112d3e, 0x00112d4b, 0x00112d58, + 0x00112d65, 0x00112d72, 0x00112d7f, 0x00112d8c, + 0x00112d99, 0x00112da6, 0x00112db3, 0x00112dc0, + 0x00112dcd, 0x00112dda, 0x00112de7, 0x00112df4, + 0x00112e01, 0x00112e0e, 0x00112e1b, 0x00112e28, + 0x00112e35, 0x00112e42, 0x00112e4f, 0x00112e5c, + 0x00112e69, 0x00112e76, 0x00112e83, 0x00112e90, + 0x00112e9d, 0x00112eaa, 0x00112eb7, 0x00112ec4, + 0x00112ed1, 0x00112ede, 0x00112eeb, 0x00112ef8, + 0x00112f05, 0x00112f12, 0x00112f1f, 0x00112f2c, + 0x00112f39, 0x00112f46, 0x00112f53, 0x00112f60, + 0x00112f6d, 0x00112f7a, 0x00112f87, 0x00112f94, + 0x00112fa1, 0x00112fae, 0x00112fbb, 0x00112fc8, + 0x00112fd5, 0x00112fe2, 0x00112fef, 0x00112ffc, + 0x00113009, 0x00113016, 0x00113023, 0x00113030, + 0x0011303d, 0x0011304a, 0x00113057, 0x00113064, + 0x00113071, 0x0011307e, 0x0011308b, 0x00113098, + 0x001130a5, 0x001130b2, 0x001130bf, 0x001130cc, + 0x001130d9, 0x001130e6, 0x001130f3, 0x00113100, + 0x0011310d, 0x0011311a, 0x00113127, 0x00113134, + 0x00113141, 0x0011314e, 0x0011315b, 0x00113168, + 0x00113175, 0x00113182, 0x0011318f, 0x0011319c, + 0x001131a9, 0x40000000, 0x600070e0, 0x60007820, + 0x4a007016, 0x00010001, 0x58380016, 0x8c000500, + 0x05fc07fc, 0x600c4000, 0x60003002, 0x64807808, + 0x583c2808, 0x8c14053e, 0x05000004, 0x80183040, + 0x05fe07fc, 0x0501f00d, 0x583c2808, 0x82140500, + 0x20000400, 0x82000580, 0x00000400, 0x05020005, + 0x82140500, 0x00000300, 0x90000580, 0x05000007, + 0x80204040, 0x05fe07ee, 0x4a007016, 0x00010000, + 0x90000541, 0x0501f040, 0x650c7808, 0x583c0009, + 0x8c000500, 0x05000005, 0x60002000, 0x4a007016, + 0x00010000, 0x0501f037, 0x65007808, 0x583c5809, + 0x65047808, 0x583c6009, 0x65087808, 0x583c6809, + 0x4a007016, 0x00010000, 0x82102d00, 0xf0000000, + 0x90140580, 0x05000002, 0x0501f020, 0x60202800, + 0x60003000, 0x803000c8, 0x40003800, 0x8030010a, + 0x801c3d80, 0x40300000, 0x80180580, 0x80100400, + 0x801c0400, 0x802c5c00, 0x803400c8, 0x40003800, + 0x8034010a, 0x801c3d80, 0x40340000, 0x80180580, + 0x801c0400, 0x80306400, 0x802c00c8, 0x40003800, + 0x802c010a, 0x801c3d80, 0x402c0000, 0x80180580, + 0x801c0400, 0x80346c00, 0x82183400, 0x9e3779b9, + 0x80142840, 0x05fe07e4, 0x0502000b, 0x402c0000, + 0x80040580, 0x05fe07c7, 0x40300000, 0x80080580, + 0x05fe07c4, 0x40340000, 0x800c0580, 0x05fe07c1, + 0x80000580, 0x1c01f000, 0x1c01f000, 0x42005000, + 0x7ff4c000, 0x58280800, 0x58281001, 0x58281802, + 0x58282003, 0x481350ec, 0x05fdff97, 0x05020807, + 0x82101d00, 0x0fffffff, 0x480fc021, 0x900c01c0, + 0x4803c022, 0x1c01f000, 0x497bc021, 0x497bc022, + 0x4a03c020, 0x00004020, 0x4a03c011, 0x40200011, + 0x6016d800, 0x05027011, 0x59e00020, 0x90000582, + 0x0502000e, 0x05006000, 0x4203e000, 0x40000000, + 0x59e00017, 0x60000800, 0x8c00050a, 0x059e0cc6, + 0x8d0c0530, 0x059e0cb9, 0x059e0cbb, 0x6403c017, + 0x4203e000, 0x30000001, 0x0595fd65, 0x05fdf7ff, + 0x59a808d6, 0x8c100502, 0x05000003, 0x84040d42, + 0x0501f007, 0x8c100504, 0x05000003, 0x84040d44, + 0x0501f003, 0x8c100500, 0x84040d40, 0x480750d6, + 0x1c01f000, 0x59a800d6, 0x8c000502, 0x05000009, + 0x4a0350d7, 0x0000008b, 0x4a0350d8, 0x0000008b, + 0x4a0350d9, 0x0000008b, 0x641350da, 0x0501f00c, + 0x8c000504, 0x05000006, 0x65bf50d7, 0x65bf50d8, + 0x65df50d9, 0x640350da, 0x0501f005, 0x64cf50d7, + 0x64cf50d8, 0x649750d9, 0x640350da, 0x1c01f000, + 0x909963d2, 0x00000000, 0x00000000, 0x00116000, + 0x0000320d, 0x00000000, 0x00000000, 0x00020000, + 0x000011e7, 0x916c0583, 0x010201aa, 0x42000000, + 0x00111c89, 0x50000000, 0x800001c0, 0x05020a46, + 0x0501fa03, 0x0501fffc, 0x0501fbb9, 0x8d0c0516, + 0x05000f77, 0x8d0c0516, 0x05000e2c, 0x59a800a5, + 0x80000540, 0x01060b27, 0x0505fcb9, 0x80ddb9c0, + 0x05000007, 0x4df00000, 0x4203e000, 0x50000000, + 0x58de5801, 0x0135fba1, 0x5c03e000, 0x05fdf7e6, + 0x835c0480, 0x00000104, 0x010411dc, 0x416a5800, + 0x592ed000, 0x497a5800, 0x497a5801, 0x815eb840, + 0x812e59c0, 0x1c01f000, 0x42007000, 0x000211e8, + 0x58380004, 0x49781000, 0x64001002, 0x48087004, + 0x80000d40, 0x05020006, 0x48087005, 0x58380000, + 0x80000540, 0x0500000a, 0x1c01f000, 0x48080800, + 0x05fdf7fb, 0x42007000, 0x000211e8, 0x58380000, + 0x80000540, 0x05000002, 0x1c01f000, 0x58380807, + 0x800409c0, 0x01060291, 0x58380005, 0x80006d40, + 0x05020002, 0x1c01f000, 0x58340000, 0x48347001, + 0x80000540, 0x05020002, 0x48007004, 0x48007005, + 0x4a03b805, 0x30000002, 0x58340007, 0x59dc0806, + 0x4803b800, 0x58340008, 0x4803b801, 0x58340806, + 0x4807b81f, 0x58340805, 0x58341003, 0x58340001, + 0x48047002, 0x48087003, 0x480bb803, 0x8c000500, + 0x05020004, 0x64087000, 0x6407c824, 0x0501f004, + 0x64047000, 0x6503c824, 0x0105f2bd, 0x58380802, + 0x600011fe, 0x82040480, 0x0000ff00, 0x05021003, + 0x40041000, 0x80000580, 0x48007002, 0x480bb802, + 0x4a03b805, 0x10000002, 0x1c01f000, 0x59dc0806, + 0x4a03b805, 0x20000000, 0x8c04053e, 0x05000009, + 0x8c040508, 0x01020e15, 0x42007000, 0x000211e8, + 0x58380000, 0x90001484, 0x0c001003, 0x0101fe15, + 0x1c01f000, 0x0002003e, 0x00020080, 0x00020087, + 0x00101557, 0x82040d00, 0x43200f80, 0x010602ca, + 0x58380002, 0x80000540, 0x05000008, 0x0105f2bd, + 0x82040d00, 0x43200f80, 0x010602ca, 0x58380002, + 0x80000540, 0x05fe07d6, 0x58386001, 0x58300009, + 0x4a006002, 0x00000100, 0x64007000, 0x80001540, + 0x05fc07ab, 0x59dc0000, 0x48006007, 0x59dc0001, + 0x48006008, 0x0809f800, 0x05fdf79f, 0x84040d1e, + 0x59e00017, 0x8c00050c, 0x05020007, 0x59a818a3, + 0x800400c4, 0x800c1c00, 0x580c0003, 0x8c000500, + 0x05000008, 0x59a800a5, 0x4c000000, 0x0105fb18, + 0x5c000000, 0x80000540, 0x010602e2, 0x1c01f000, + 0x4d2c0000, 0x4c040000, 0x4c0c0000, 0x05fdff71, + 0x5c001800, 0x5c000800, 0x05000014, 0x82040400, + 0x00111efa, 0x50000000, 0x48025806, 0x64025801, + 0x64125805, 0x64065804, 0x900c0402, 0x48025803, + 0x580c0000, 0x48025807, 0x580c0001, 0x48025808, + 0x4a025809, 0x000200c7, 0x4806580a, 0x412c1000, + 0x5c025800, 0x05fdf765, 0x5c025800, 0x0105f318, + 0x58300802, 0x82040580, 0x00000100, 0x010602d7, + 0x4d2c0000, 0x40325800, 0x0105f9ca, 0x5c025800, + 0x0105f2e2, 0x59b800ea, 0x82000d00, 0xf2000038, + 0x0106048a, 0x8c000510, 0x01040489, 0x59ba60e0, + 0x81300182, 0x0502104c, 0x05002030, 0x8532653e, + 0x59300407, 0x90000583, 0x0502002a, 0x59300203, + 0x90000584, 0x05020027, 0x59325809, 0x59300004, + 0x4a025a08, 0x00000103, 0x497a580d, 0x8c00053e, + 0x0502001a, 0x59300008, 0x82000500, 0x04000800, + 0x82000580, 0x04000800, 0x05000017, 0x0501faba, + 0x59325827, 0x812e59c0, 0x010609ca, 0x5932680a, + 0x0505ff1d, 0x5934000f, 0x8d0c0512, 0x05020005, + 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b, + 0x80000540, 0x05020a37, 0x59b800ea, 0x8c000510, + 0x05fe07d7, 0x1c01f000, 0x0145fd77, 0x05fc07e6, + 0x0105f482, 0x59300221, 0x48025c13, 0x05fdf7e8, + 0x61567000, 0x0501f024, 0x83326500, 0x3fffffff, + 0x59300407, 0x90000583, 0x05020015, 0x59325809, + 0x5932680a, 0x4a025a08, 0x00000103, 0x497a580d, + 0x0501fa95, 0x59325827, 0x812e59c0, 0x010609c9, + 0x0505fef9, 0x5934000f, 0x8d0c0512, 0x05020005, + 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b, + 0x80000540, 0x05020a13, 0x05fdf7dc, 0x61527000, + 0x0501f009, 0x83300500, 0x60000000, 0x05000013, + 0x81326580, 0x8000013a, 0x82000400, 0x00100c8e, + 0x50027000, 0x59300c07, 0x90040580, 0x01040482, + 0x90040582, 0x01040482, 0x59300004, 0x8c00053e, + 0x05020003, 0x0505ff05, 0x05fdf7c8, 0x0145fd77, + 0x05fc07fd, 0x0105f482, 0x83300500, 0x1f000000, + 0x01040484, 0x81326580, 0x80000130, 0x90000c9b, + 0x01021e15, 0x1201f000, 0x00100c92, 0x82000500, + 0xf0000000, 0x82040d00, 0x0fffffff, 0x80040d40, + 0x4807c857, 0x59b800ea, 0x8c000516, 0x010605b6, + 0x480770e1, 0x1c01f000, 0x59325809, 0x412c7000, + 0x58380a08, 0x82040d00, 0x000000ff, 0xb00405a8, + 0x01080024, 0xb00405aa, 0x01080024, 0xb00405ba, + 0x0108003d, 0xb00405b2, 0x0108003d, 0x58380a08, + 0x9004050f, 0x82000c00, 0x0010004b, 0x50044000, + 0x0c01f001, 0x00101023, 0x00101023, 0x00020170, + 0x00101023, 0x00101023, 0x00101023, 0x00101023, + 0x00101023, 0x0002017e, 0x00101043, 0x00101023, + 0x00101023, 0x00101023, 0x00101023, 0x00101023, + 0x00101023, 0x5838040e, 0x8c000500, 0x01000e15, + 0x50200000, 0x80387c00, 0x583c1002, 0x583c2800, + 0x583c2001, 0x58380a0b, 0x58383013, 0x59303808, + 0x58380011, 0x48026014, 0x0501f00e, 0x5838020e, + 0x8c000502, 0x01080023, 0x50200000, 0x80387c00, + 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a0b, + 0x592c3013, 0x59303808, 0x497a6014, 0x497a6015, + 0x48166010, 0x48126011, 0x480a6012, 0x481a6013, + 0x80040840, 0x4806600f, 0x010a006a, 0x841c3d40, + 0x481e6008, 0x1c01f000, 0x4d2c0000, 0x59325809, + 0x592c0a08, 0x4807c857, 0x82040d00, 0x000000ff, + 0x9004050f, 0x1201f000, 0x0010118f, 0x41787800, + 0x59325809, 0x592c0c0e, 0x8c040502, 0x010801bf, + 0x592c0011, 0x592c1013, 0x592c0a08, 0x480a6013, + 0x48026014, 0x48026015, 0x82040d00, 0x000000ff, + 0xb00405b2, 0x010801c5, 0xb00405ba, 0x010801c5, + 0x412c3000, 0x9004050f, 0x82000400, 0x0010004b, + 0x50003800, 0x8c3c050e, 0x05000002, 0x801c3800, + 0x501c0000, 0x592c1a0b, 0x4802600c, 0x481a600d, + 0x481e600e, 0x480e600f, 0x843c7d4a, 0x403c1000, + 0x1c01f000, 0x59e00004, 0x8c00050e, 0x05fe06ac, + 0x1c01f000, 0x42001000, 0x0011458b, 0x5808000a, + 0x80000540, 0x010a071d, 0x4a001003, 0x00114595, + 0x4c080000, 0x0501f812, 0x5c001000, 0x4814100a, + 0x480c1007, 0x48101008, 0x64001001, 0x64101005, + 0x64041004, 0x05fdf655, 0x58300802, 0x82040580, + 0x00000100, 0x010a072c, 0x82300580, 0x0011458b, + 0x010a0727, 0x4978600a, 0x1c01f000, 0x61901800, + 0x800c1840, 0x05000006, 0x64070000, 0x40000000, + 0x59800000, 0x8c000500, 0x05fc07fa, 0x01080777, + 0x600028f4, 0x58142024, 0x58141823, 0x58142825, + 0x64030000, 0x1c01f000, 0x4c000000, 0x4df00000, + 0x4203e000, 0xb0100000, 0x41f00000, 0x81fe1500, + 0x8d080512, 0x010e09a4, 0x8d08051c, 0x05060cfc, + 0x8d080518, 0x05060d2f, 0x8d08051a, 0x05fe0ed6, + 0x83080500, 0x00000d00, 0x05020804, 0x5c03e000, + 0x5c000000, 0x1801f000, 0x8d080516, 0x010a0fde, + 0x8d080514, 0x05fe0fbc, 0x8d080508, 0x010a0bdb, + 0x8d080500, 0x05060c55, 0x8d08050c, 0x010e08a1, + 0x8d08050a, 0x010a050e, 0x1c01f000, 0x42000000, + 0x00111c8f, 0x50000000, 0x8c000504, 0x05000013, + 0x8c000508, 0x05020004, 0x8c000502, 0x05020002, 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x59d8110a, 0x59d8010a, 0x80080580, 0x05fe07fd, - 0x59742c08, 0x59740003, 0x480aec09, 0x48082800, - 0x80000540, 0x05002011, 0x05000007, 0x59980004, - 0x90000585, 0x0500000d, 0x59a8009b, 0x81640580, - 0x0502000a, 0x58140100, 0x80080d80, 0x0500001f, - 0x59740c02, 0x80040d80, 0x0500000e, 0x59980805, - 0x4802ec02, 0x4806e803, 0x0500ead1, 0x8d0c0524, - 0x05020003, 0x5c03e000, 0x1c01f000, 0x59d8010b, - 0x59d8110a, 0x80080580, 0x05000010, 0x05fc67fa, - 0x05006013, 0x59740a09, 0x59e00017, 0x8c00050a, - 0x05020012, 0x8c04051e, 0x05020005, 0x59741202, - 0x800810e0, 0x90081554, 0x480bc011, 0x4807c017, - 0x4203e000, 0x30000001, 0x4a02e803, 0xffff0000, - 0x850e1d24, 0x0500eab6, 0x05fdf7e7, 0x850e1d64, - 0x0500eab3, 0x05fdf7e4, 0x4c040000, 0x05fdfc9d, - 0x5c000800, 0x8c04051e, 0x05fc07ed, 0x5c03e000, - 0x1c01f000, 0x592c0c08, 0x58040000, 0x58040900, - 0x80040580, 0x05000019, 0x592c0402, 0x80040580, - 0x05000005, 0x59980005, 0x48025803, 0x48065c02, - 0x1c01f000, 0x05006013, 0x592c0a09, 0x4a025803, - 0xffff0000, 0x59e00017, 0x8c00050a, 0x0502000e, - 0x8c04051e, 0x05020005, 0x592c0202, 0x800000e0, - 0x90000554, 0x4803c011, 0x4807c017, 0x4203e000, - 0x30000001, 0x1c01f000, 0x4a025803, 0xffff0000, - 0x1c01f000, 0x4c040000, 0x05fdfc76, 0x5c000800, - 0x8c04051e, 0x05fc07f1, 0x1c01f000, 0x4df00000, - 0x4203e000, 0x50000000, 0x59940023, 0x80000540, - 0x05002012, 0x05000007, 0x59980004, 0x90000585, - 0x0500000e, 0x59a8009b, 0x81640580, 0x0502000b, - 0x59d8010b, 0x59d8110a, 0x80080d80, 0x05000023, - 0x59980806, 0x80040d80, 0x05000013, 0x59980805, - 0x48072823, 0x48033006, 0x0500ea55, 0x8d0c0524, - 0x05020005, 0x8d0c0526, 0x050209a6, 0x5c03e000, - 0x1c01f000, 0x59d8110a, 0x59d8010a, 0x80080580, - 0x05fe07fd, 0x59d8010b, 0x80080580, 0x0500000f, - 0x05fc67f5, 0x05006012, 0x800810e0, 0x90081553, - 0x480bc011, 0x60040800, 0x59e00017, 0x8c00050a, - 0x0502000e, 0x8d0c0530, 0x0502000e, 0x6407c017, - 0x4203e000, 0x30000001, 0x4a032823, 0xffff0000, - 0x850e1d24, 0x0500ea36, 0x05fdf7e3, 0x850e1d64, - 0x0500ea33, 0x05fdf7e0, 0x05fdfc36, 0x05fdf7f4, - 0x8c000500, 0x05fe0d5d, 0x05fdf7f1, 0x4df00000, - 0x4203e000, 0x50000000, 0x59b800e4, 0x8c000518, - 0x0502001b, 0x830c0500, 0x00140000, 0x0502001b, - 0x59940023, 0x80000540, 0x0500200c, 0x05000017, - 0x59980004, 0x90000585, 0x05000008, 0x59a8009b, - 0x81640580, 0x05020005, 0x59a80099, 0x59a80898, - 0x80040580, 0x0500000c, 0x0500ea15, 0x05006004, - 0x8d0c0524, 0x0502000a, 0x0501fa4a, 0x8d0c0526, - 0x05020964, 0x5c03e000, 0x1c01f000, 0x4a0370e4, - 0x00002000, 0x850e1d68, 0x0500604c, 0x59d8090a, - 0x59d8010a, 0x80041580, 0x05fe07fd, 0x59d8190b, - 0x800c1580, 0x59981006, 0x480f3006, 0x05000037, - 0x0501f844, 0x59980007, 0x483b3007, 0x0500000d, - 0x8d0c0528, 0x05020021, 0x80380580, 0x05020004, - 0x40080000, 0x800c0580, 0x0500001c, 0x59980005, - 0x48032823, 0x830e1d00, 0xffebffff, 0x05fdf7e0, - 0x8d0c0528, 0x05020004, 0x40080000, 0x800c0580, - 0x05fe07f7, 0x800408e0, 0x90040d53, 0x60041000, - 0x4807c011, 0x59e00017, 0x8c00050a, 0x0502000f, - 0x8d0c0530, 0x05020012, 0x480bc017, 0x4203e000, - 0x30000001, 0x4a032823, 0xffff0000, 0x830e1d00, - 0xffebffff, 0x05fdf7ca, 0x800408e0, 0x90040d5d, - 0x60001000, 0x05fdf7ef, 0x4c080000, 0x40080800, - 0x05fdfbd8, 0x5c001000, 0x05fdf7f0, 0x8c000500, - 0x05fc07ee, 0x4c080000, 0x40080800, 0x05fdfcfb, - 0x5c001000, 0x05fdf7e9, 0x0501f80e, 0x59980007, - 0x483b3007, 0x05fc07e8, 0x80380580, 0x05000003, - 0x8d0c0528, 0x05fc07ce, 0x912801c0, 0x90000d5c, - 0x60001000, 0x05fdf7d7, 0x850e1d64, 0x05fdf7a7, - 0x59e0000f, 0x59e0680f, 0x80346d80, 0x05fe07fd, - 0x40025000, 0x59e00010, 0x59e07010, 0x80387580, - 0x05fe07fd, 0x40007000, 0x81280580, 0x1c01f000, + 0x42034000, 0x00111c71, 0x59a0001e, 0x59a1d806, + 0x84000502, 0x4803401e, 0x58ec0009, 0x0801f800, + 0x5c03e000, 0x1c01f000, 0x05027002, 0x05026002, + 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, + 0x59e00020, 0xb0000d85, 0x05000003, 0xb0000d84, + 0x05020007, 0x4803c857, 0x42000800, 0x000211e8, + 0x58040800, 0x90040d80, 0x05020019, 0x0105f9b9, + 0x05000017, 0x412dd800, 0x48efc857, 0x0125fa58, + 0x42034000, 0x00111c71, 0x49a1d80b, 0x48ef4006, + 0x59a0001e, 0x84000544, 0x4803401e, 0x59e00020, + 0x4803c857, 0x59e00021, 0x4803c857, 0x59e00022, + 0x4803c857, 0x59e00023, 0x4803c857, 0x59e00024, + 0x4803c857, 0x0115f9ff, 0x0115fa17, 0x5c03e000, + 0x1c01f000, 0x4c5c0000, 0x4da00000, 0x4df00000, + 0x4203e000, 0x50000000, 0x05006062, 0x42034000, + 0x00111c71, 0x59a01018, 0x59a01819, 0x800c19c0, + 0x05020009, 0x59a0381c, 0x801c39c0, 0x01000e15, + 0x49a3c857, 0x481fc857, 0x59a0041d, 0x801c3c00, + 0x0501f00a, 0x59a0041a, 0x90000402, 0x4803441a, + 0x90000c97, 0x05001003, 0x497b441a, 0x41780000, + 0x59a03817, 0x801c3c00, 0x401cb800, 0x80081040, + 0x480b4018, 0x581c0200, 0x4803c021, 0x581c0401, + 0x4803c022, 0x581c0201, 0x4803c023, 0x581c0400, + 0x4803c020, 0x900001c0, 0x90000552, 0x4803c011, + 0x8d0c0530, 0x0500000f, 0x4c080000, 0x4c0c0000, + 0x4c1c0000, 0x59e00017, 0x8c00050a, 0x05000004, + 0x60000800, 0x05fdfe16, 0x0501f003, 0x8c000500, + 0x05fe0f3d, 0x5c003800, 0x5c001800, 0x5c001000, + 0x6403c017, 0x4203e000, 0x30000001, 0x800c19c0, + 0x05000007, 0x800c1840, 0x480f4019, 0x0502001b, + 0x497b441a, 0x497b421a, 0x0501f018, 0x800811c0, + 0x0502000a, 0x4d2c0000, 0x59a2581c, 0x0105f9c9, + 0x5c025800, 0x497b401c, 0x497b401b, 0x497b441d, + 0x497b421d, 0x0501f00d, 0x59a0041d, 0x90000402, + 0x90000c96, 0x4803441d, 0x05001008, 0x4d2c0000, + 0x59a2581c, 0x592c3817, 0x481f401c, 0x497b441d, + 0x0105f9c9, 0x5c025800, 0x8d0c052a, 0x05000009, + 0x60083800, 0x42000800, 0x25000000, 0x585c1800, + 0x585c3001, 0x900c19c0, 0x901831c0, 0x0101fed5, + 0x5c03e000, 0x5c034000, 0x5c00b800, 0x1c01f000, + 0x8d0c0520, 0x05000003, 0x59a80005, 0x8c000516, + 0x1c01f000, 0x910c0503, 0x012a04d4, 0x59340400, + 0x82000580, 0x00000606, 0x012a04ae, 0x5934000d, + 0x80027d40, 0x012a04dd, 0x592c1003, 0x5808720a, + 0x8c380500, 0x05000005, 0x592c1813, 0x5808000d, + 0x800c0400, 0x4800100d, 0x5934000f, 0x59341203, + 0x80080540, 0x05020021, 0x8d0c0512, 0x05000010, + 0x0505fd1f, 0x05000017, 0x59a800d7, 0x80000040, + 0x05fe07ff, 0x492e6009, 0x4936600a, 0x58d400ea, + 0x8c000516, 0x05fe07fe, 0x83300400, 0x20000000, + 0x4801a8e1, 0x80000580, 0x1c01f000, 0x5934000b, + 0x80001920, 0x82000500, 0x0000ffff, 0x800c0480, + 0x0502100a, 0x800c1800, 0x480e6c0b, 0x05fdf7e9, + 0x8d0c0512, 0x05020005, 0x59341c0b, 0x800c1840, + 0x480e6c0b, 0x59341203, 0x0501f803, 0x80000580, + 0x1c01f000, 0x800811c0, 0x05020002, 0x64066a03, + 0x59340010, 0x492e6810, 0x80000d40, 0x05020008, + 0x492e680f, 0x592c040a, 0x800000c2, 0x800018c4, + 0x800c0400, 0x48025807, 0x1c01f000, 0x492c0800, + 0x05fdf7f9, 0x59a800ad, 0x81440480, 0x05021024, + 0x83442400, 0x0010db80, 0x50100000, 0x80000d40, + 0x0500001f, 0x82000d00, 0xe0000000, 0x0500001e, + 0x8d0c0538, 0x0500001a, 0x82000500, 0x00ffffff, + 0x82041d80, 0x20000000, 0x05000017, 0x82041d80, + 0x80000000, 0x05020007, 0x84040d7a, 0x4c000000, + 0x80040540, 0x44002000, 0x5c000000, 0x0501f00e, + 0x82041d80, 0xa0000000, 0x0500000b, 0x82041d80, + 0x40000000, 0x05020006, 0x4c040000, 0x012df81b, + 0x5c000800, 0x40340000, 0x05000003, 0x90000541, + 0x1c01f000, 0x40026800, 0x80000580, 0x05fdf7fd, + 0x59340203, 0x80000540, 0x05020036, 0x4d300000, + 0x4d2c0000, 0x5934000f, 0x80025d40, 0x0500002f, + 0x0505fcbb, 0x05000021, 0x592c0000, 0x4802680f, + 0x80000540, 0x05020002, 0x48026810, 0x592c2a08, + 0x4936600a, 0x4c080000, 0x0131f8a2, 0x5c001000, + 0x05000025, 0x492e6009, 0x8d0c0512, 0x05000010, + 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400, + 0x20000000, 0x4801a8e1, 0x8d0c0512, 0x05fe07e6, + 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff, + 0x80080480, 0x05fc17e0, 0x0501f010, 0x80081000, + 0x480a6c0b, 0x05fdf7ef, 0x4c080000, 0x0131f8a2, + 0x05020008, 0x42000000, 0x001123e6, 0x0169ff57, + 0x0161f906, 0x05000003, 0x5c001000, 0x05fdf7d7, + 0x5c001000, 0x64066a03, 0x5c025800, 0x5c026000, + 0x1c01f000, 0x497a5800, 0x4932580d, 0x4a026007, + 0x00068000, 0x641e6203, 0x0501f802, 0x05fdf7df, + 0x592e440b, 0x83224500, 0x000000ff, 0x83200400, + 0x0010d8f9, 0x50024800, 0x4926601d, 0x592c0210, + 0x48026202, 0x59240206, 0x8c000510, 0x012e0170, + 0x8d0c050e, 0x012e016e, 0x59240200, 0x8c000516, + 0x012e016c, 0x59340200, 0x8c000518, 0x012e016a, + 0x64025a0a, 0x8c000508, 0x012e0168, 0x492e6009, + 0x4d3c0000, 0x417a7800, 0x0505fad6, 0x5c027800, + 0x1c01f000, 0x58040001, 0x49680800, 0x49780801, + 0x815eb800, 0x4006d000, 0x80000d40, 0x05fe07fa, + 0x497a5801, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x1c01f000, 0x59980005, 0x48032823, + 0x59d8010b, 0x48033006, 0x1c01f000, 0x59980005, + 0x59747408, 0x58387100, 0x483aec02, 0x4802e803, + 0x1c01f000, 0x592c0408, 0x8c00051e, 0x013200fc, + 0x497a5800, 0x8d0c0516, 0x05020003, 0x0501fa49, + 0x0501f011, 0x8d0c0526, 0x0502000d, 0x0502d007, + 0x592c0001, 0x492fb107, 0x80000d40, 0x05fe0fda, + 0x0500e1c4, 0x1c01f000, 0x0500e9c2, 0x05fcd7f9, + 0x42000000, 0x00112349, 0x0169ff5a, 0x0501fa39, + 0x0500da49, 0x0500e1bb, 0x59d80105, 0x82000d00, + 0x01238780, 0x05020257, 0x1c01f000, 0x59980003, + 0x0c01f001, 0x000203ce, 0x000203cf, 0x00020447, + 0x00020487, 0x000203dd, 0x00020504, 0x1c01f000, + 0x4df00000, 0x4203e000, 0x50000000, 0x05026a8e, + 0x05006003, 0x8d0c0520, 0x05020b35, 0x830c0580, + 0x00080800, 0x82000500, 0x00080800, 0x05000a2e, + 0x5c03e000, 0x1c01f000, 0x4df00000, 0x4203e000, + 0x50000000, 0x59d8110a, 0x59d8010a, 0x80080580, + 0x05fe07fd, 0x59742c08, 0x59740003, 0x480aec09, + 0x48082800, 0x80000540, 0x05002011, 0x05000007, + 0x59980004, 0x90000585, 0x0500000d, 0x59a8009e, + 0x81640580, 0x0502000a, 0x58140100, 0x80080d80, + 0x0500001f, 0x59740c02, 0x80040d80, 0x0500000e, + 0x59980805, 0x4802ec02, 0x4806e803, 0x0500ead1, + 0x8d0c0524, 0x05020003, 0x5c03e000, 0x1c01f000, + 0x59d8010b, 0x59d8110a, 0x80080580, 0x05000010, + 0x05fc67fa, 0x05006013, 0x59740a09, 0x59e00017, + 0x8c00050a, 0x05020012, 0x8c04051e, 0x05020005, + 0x59741202, 0x800810e0, 0x90081554, 0x480bc011, + 0x4807c017, 0x4203e000, 0x30000001, 0x4a02e803, + 0xffff0000, 0x850e1d24, 0x0500eab6, 0x05fdf7e7, + 0x850e1d64, 0x0500eab3, 0x05fdf7e4, 0x4c040000, + 0x05fdfc7f, 0x5c000800, 0x8c04051e, 0x05fc07ed, + 0x5c03e000, 0x1c01f000, 0x592c0c08, 0x592c0409, + 0x58040900, 0x80040580, 0x05000019, 0x592c0402, + 0x80040580, 0x05000005, 0x59980005, 0x48025803, + 0x48065c02, 0x1c01f000, 0x05006013, 0x592c0a09, + 0x4a025803, 0xffff0000, 0x59e00017, 0x8c00050a, + 0x0502000e, 0x8c04051e, 0x05020005, 0x592c0202, + 0x800000e0, 0x90000554, 0x4803c011, 0x4807c017, + 0x4203e000, 0x30000001, 0x1c01f000, 0x4a025803, + 0xffff0000, 0x1c01f000, 0x4c040000, 0x05fdfc58, + 0x5c000800, 0x8c04051e, 0x05fc07f1, 0x1c01f000, + 0x4df00000, 0x4203e000, 0x50000000, 0x59940023, + 0x80000540, 0x05002012, 0x05000007, 0x59980004, + 0x90000585, 0x0500000e, 0x59a8009e, 0x81640580, + 0x0502000b, 0x59d8010b, 0x59d8110a, 0x80080d80, + 0x05000023, 0x59980806, 0x80040d80, 0x05000013, + 0x59980805, 0x48072823, 0x48033006, 0x0500ea55, + 0x8d0c0524, 0x05020005, 0x8d0c0526, 0x050209a6, + 0x5c03e000, 0x1c01f000, 0x59d8110a, 0x59d8010a, + 0x80080580, 0x05fe07fd, 0x59d8010b, 0x80080580, + 0x0500000f, 0x05fc67f5, 0x05006012, 0x800810e0, + 0x90081553, 0x480bc011, 0x60040800, 0x59e00017, + 0x8c00050a, 0x0502000e, 0x8d0c0530, 0x0502000e, + 0x6407c017, 0x4203e000, 0x30000001, 0x4a032823, + 0xffff0000, 0x850e1d24, 0x0500ea36, 0x05fdf7e3, + 0x850e1d64, 0x0500ea33, 0x05fdf7e0, 0x05fdfc18, + 0x05fdf7f4, 0x8c000500, 0x05fe0d3f, 0x05fdf7f1, 0x4df00000, 0x4203e000, 0x50000000, 0x59b800e4, - 0x8c000518, 0x05020067, 0x59d8110a, 0x59d8010a, - 0x80080580, 0x05fe07fd, 0x59742c08, 0x59740003, - 0x480aec09, 0x48082800, 0x80000540, 0x05002015, - 0x0500000b, 0x59980004, 0x90000585, 0x05000011, - 0x59a8009b, 0x81640580, 0x0502000e, 0x59a80099, - 0x59a80898, 0x80040580, 0x0500002a, 0x58140100, - 0x80080d80, 0x05000013, 0x59740c02, 0x80040d80, - 0x05000024, 0x59980805, 0x4802ec02, 0x4806e803, - 0x0500e9a3, 0x8d0c0524, 0x05020019, 0x05006007, - 0x8d0c0528, 0x0502000b, 0x59940023, 0x80000540, - 0x05000008, 0x0501f9bb, 0x5c03e000, 0x1c01f000, - 0x4a02e803, 0xffff0000, 0x850e1d24, 0x0500e994, - 0x05fdffc0, 0x59980007, 0x483b3007, 0x05000031, - 0x80380580, 0x05000024, 0x8d0c0528, 0x05020022, - 0x59980005, 0x48032823, 0x05fdf7f0, 0x59d8010b, - 0x59d8110a, 0x80080580, 0x05fc07ee, 0x05fc67eb, - 0x05006016, 0x59740a09, 0x59e00017, 0x8c00050a, - 0x05020028, 0x8c04051e, 0x05020005, 0x59741202, - 0x800810e0, 0x90081554, 0x480bc011, 0x4807c017, - 0x4203e000, 0x30000001, 0x4a02e803, 0xffff0000, - 0x4a032823, 0xffff0000, 0x830e1d00, 0xffebffff, - 0x0500e96f, 0x05fdf7d5, 0x850e1d64, 0x0500e96c, - 0x05fdf7d2, 0x05fc67d1, 0x912801c0, 0x90000d5c, - 0x4807c011, 0x59e00017, 0x8c00050a, 0x60000800, - 0x05fe0b50, 0x6403c017, 0x4203e000, 0x30000001, - 0x4a032823, 0xffff0000, 0x850e1d28, 0x05fdf7c3, - 0x4a0370e4, 0x00002000, 0x850e1d68, 0x05fdf797, - 0x4c040000, 0x05fdfb43, 0x5c000800, 0x8c04051e, - 0x05fc07d7, 0x5c03e000, 0x1c01f000, 0x59d81108, - 0x835c0480, 0x00000104, 0x0500101c, 0x0502b01a, - 0x480bb007, 0x05fce7fa, 0x59d80105, 0x82000500, - 0x01238780, 0x05020096, 0x8d0c0522, 0x0500001f, - 0x8d0c0516, 0x0502000c, 0x59d8090a, 0x59d8010a, - 0x80040580, 0x05fe07fd, 0x59741003, 0x59740408, - 0x48040000, 0x4806ec09, 0x800811c0, 0x05fc260f, - 0x1c01f000, 0x59940023, 0x80000540, 0x05fc2606, - 0x1c01f000, 0x0500f00a, 0x49681000, 0x400ad000, - 0x815eb800, 0x59c80000, 0x82000540, 0x00001200, - 0x48039000, 0x05fee7e1, 0x05fdf7d9, 0x480ba807, - 0x05fee7de, 0x05fdf7d6, 0x05006024, 0x850e1d24, - 0x59d8010a, 0x59d8090a, 0x80040580, 0x05fe07fd, - 0x8d0c0516, 0x05000016, 0x59d8010b, 0x59d8110b, - 0x80081580, 0x05fe07fd, 0x80040580, 0x0500000f, - 0x800408e0, 0x8d0c0520, 0x05020016, 0x90040d53, - 0x4807c011, 0x59740a09, 0x59e00017, 0x8c00050a, - 0x05020031, 0x8d0c0530, 0x05020033, 0x4807c017, - 0x4203e000, 0x30000001, 0x1c01f000, 0x59740408, - 0x4806ec09, 0x48040000, 0x59740a02, 0x800408e0, - 0x90040d54, 0x05fdf7ef, 0x850e1d64, 0x1c01f000, - 0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580, - 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, 0x81281580, - 0x05000012, 0x40025000, 0x820c0500, 0x04000000, - 0x850e1d34, 0x810e1d40, 0x90040d5d, 0x4807c011, - 0x59e00017, 0x60000800, 0x8c00050a, 0x0502000e, - 0x8d0c0530, 0x05020010, 0x6403c017, 0x4203e000, - 0x30000001, 0x1c01f000, 0x40001000, 0x400c0000, - 0x810c0580, 0x8c000534, 0x40080000, 0x05fe07ea, - 0x05fdf7cb, 0x4c040000, 0x05fdfaca, 0x5c000800, - 0x05fdf7cf, 0x8c000500, 0x05fc07cd, 0x4c040000, - 0x05fdfbee, 0x5c000800, 0x05fdf7c9, 0x592c2802, - 0x801429c0, 0x0500000d, 0x58140804, 0x592c0001, - 0x492c2804, 0x800409c0, 0x05000005, 0x492c0800, - 0x80000d40, 0x05fe058f, 0x1c01f000, 0x492c2805, - 0x850e1d66, 0x05fdf7fb, 0x492fc857, 0x0105f19b, - 0x0502d00c, 0x59740805, 0x58040000, 0x4807b107, - 0x80000d40, 0x05020005, 0x4802e804, 0x850e1d26, - 0x4802e805, 0x1c01f000, 0x05fcd7f8, 0x05fdf7fd, - 0x59d80105, 0x82000500, 0x01238780, 0x05020004, - 0x42000000, 0x0010e3a8, 0x0165f7df, 0x4803c857, - 0x485fc857, 0x8c00050e, 0x01020dd3, 0x4203e000, - 0x50000000, 0x6010b900, 0x0101f5de, 0x4a03b104, - 0x10000000, 0x592c4408, 0x592c1409, 0x800800cc, - 0x592c2006, 0x80100400, 0x4803b100, 0x497bb102, - 0x59d80101, 0x4813b100, 0x592c0007, 0x4803b101, - 0x592c0208, 0x82000540, 0x00400000, 0x4803b103, - 0x58200900, 0x480bb10a, 0x4807b10b, 0x592c0001, - 0x4803b11f, 0x4a03b104, 0x10000001, 0x412ee800, + 0x8c000518, 0x0502001b, 0x830c0500, 0x00140000, + 0x0502001b, 0x59940023, 0x80000540, 0x0500200c, + 0x05000017, 0x59980004, 0x90000585, 0x05000008, + 0x59a8009e, 0x81640580, 0x05020005, 0x59a8009c, + 0x59a8089b, 0x80040580, 0x0500000c, 0x0500ea15, + 0x05006004, 0x8d0c0524, 0x0502000a, 0x0501fa4a, + 0x8d0c0526, 0x05020964, 0x5c03e000, 0x1c01f000, + 0x4a0370e4, 0x00002000, 0x850e1d68, 0x0500604c, + 0x59d8090a, 0x59d8010a, 0x80041580, 0x05fe07fd, + 0x59d8190b, 0x800c1580, 0x59981006, 0x480f3006, + 0x05000037, 0x0501f844, 0x59980007, 0x483b3007, + 0x0500000d, 0x8d0c0528, 0x05020021, 0x80380580, + 0x05020004, 0x40080000, 0x800c0580, 0x0500001c, + 0x59980005, 0x48032823, 0x830e1d00, 0xffebffff, + 0x05fdf7e0, 0x8d0c0528, 0x05020004, 0x40080000, + 0x800c0580, 0x05fe07f7, 0x800408e0, 0x90040d53, + 0x60041000, 0x4807c011, 0x59e00017, 0x8c00050a, + 0x0502000f, 0x8d0c0530, 0x05020012, 0x480bc017, + 0x4203e000, 0x30000001, 0x4a032823, 0xffff0000, + 0x830e1d00, 0xffebffff, 0x05fdf7ca, 0x800408e0, + 0x90040d5d, 0x60001000, 0x05fdf7ef, 0x4c080000, + 0x40080800, 0x05fdfbba, 0x5c001000, 0x05fdf7f0, + 0x8c000500, 0x05fc07ee, 0x4c080000, 0x40080800, + 0x05fdfcdd, 0x5c001000, 0x05fdf7e9, 0x0501f80e, + 0x59980007, 0x483b3007, 0x05fc07e8, 0x80380580, + 0x05000003, 0x8d0c0528, 0x05fc07ce, 0x912801c0, + 0x90000d5c, 0x60001000, 0x05fdf7d7, 0x850e1d64, + 0x05fdf7a7, 0x59e0000f, 0x59e0680f, 0x80346d80, + 0x05fe07fd, 0x40025000, 0x59e00010, 0x59e07010, + 0x80387580, 0x05fe07fd, 0x40007000, 0x81280580, 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x59741408, 0x58080900, 0x4807b10b, 0x8d0c0524, - 0x0502001a, 0x59d80106, 0x80000540, 0x05020017, - 0x59d80105, 0x82000500, 0x00006000, 0x05020013, - 0x599af808, 0x817ef9c0, 0x05000010, 0x41765800, - 0x592e5800, 0x592c1005, 0x800811c0, 0x05000006, - 0x412c0000, 0x81740580, 0x05fe0fcd, 0x05fdffb1, - 0x0501f006, 0x592c0003, 0x80000540, 0x05fc0dc6, - 0x817ef840, 0x05fe07f3, 0x5c03e000, 0x1c01f000, - 0x05fce71b, 0x59d80105, 0x82000500, 0x01238780, - 0x05fe07b7, 0x8d0c0524, 0x05020002, 0x1c01f000, - 0x59d8010a, 0x59d8090a, 0x80040580, 0x05fe07fd, - 0x850e1d24, 0x8d0c0516, 0x05000013, 0x59d8010b, - 0x80040580, 0x0500000f, 0x800408e0, 0x8d0c0520, - 0x05020014, 0x90040d53, 0x4807c011, 0x59740a09, - 0x59e00017, 0x8c00050a, 0x05020028, 0x8d0c0530, - 0x0502002a, 0x4807c017, 0x4203e000, 0x30000001, - 0x1c01f000, 0x59740408, 0x4806ec09, 0x48040000, - 0x59740a02, 0x800408e0, 0x90040d54, 0x05fdf7ef, - 0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580, - 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, 0x81281580, - 0x0500001c, 0x40025000, 0x820c0500, 0x04000000, - 0x850e1d34, 0x810e1d40, 0x90040d5d, 0x4807c011, - 0x59e00017, 0x60000800, 0x8c00050a, 0x05020007, - 0x8d0c0530, 0x05020009, 0x6403c017, 0x4203e000, - 0x30000001, 0x1c01f000, 0x4c040000, 0x05fdfa15, - 0x5c000800, 0x05fdf7d8, 0x8c000500, 0x05fc07d6, - 0x4c040000, 0x05fdfb39, 0x5c000800, 0x05fdf7d2, - 0x40001000, 0x400c0000, 0x810c0580, 0x8c000534, - 0x40080000, 0x05fe07e0, 0x05fdf7c3, 0x59da5908, - 0x496a5800, 0x412ed000, 0x815eb800, 0x05fce7fc, - 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x59d8090b, 0x59980006, 0x48073006, 0x80040480, - 0x05020004, 0x59940023, 0x80000540, 0x05022003, - 0x59980805, 0x48072823, 0x59d80105, 0x82000500, - 0x01238780, 0x05fe0752, 0x1c01f000, 0x59da5908, - 0x496a5800, 0x412ed000, 0x815eb800, 0x05fce7fc, - 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x59740c08, 0x58040900, 0x4807b10b, 0x59740402, - 0x4806ec02, 0x80040480, 0x05020004, 0x59740003, - 0x80000540, 0x05022003, 0x59980805, 0x4806e803, - 0x59d8090a, 0x59d8010a, 0x80040580, 0x05fe07fd, - 0x59740408, 0x48040000, 0x4806ec09, 0x59d80105, - 0x82000500, 0x01238780, 0x05fe0731, 0x1c01f000, - 0x59981007, 0x59e00010, 0x59e00810, 0x80041d80, - 0x05fe07fd, 0x80080580, 0x0500000d, 0x48073007, + 0x59b800e4, 0x8c000518, 0x05020067, 0x59d8110a, + 0x59d8010a, 0x80080580, 0x05fe07fd, 0x59742c08, + 0x59740003, 0x480aec09, 0x48082800, 0x80000540, + 0x05002015, 0x0500000b, 0x59980004, 0x90000585, + 0x05000011, 0x59a8009e, 0x81640580, 0x0502000e, + 0x59a8009c, 0x59a8089b, 0x80040580, 0x0500002a, + 0x58140100, 0x80080d80, 0x05000013, 0x59740c02, + 0x80040d80, 0x05000024, 0x59980805, 0x4802ec02, + 0x4806e803, 0x0500e9a3, 0x8d0c0524, 0x05020019, + 0x05006007, 0x8d0c0528, 0x0502000b, 0x59940023, + 0x80000540, 0x05000008, 0x0501f9bb, 0x5c03e000, + 0x1c01f000, 0x4a02e803, 0xffff0000, 0x850e1d24, + 0x0500e994, 0x05fdffc0, 0x59980007, 0x483b3007, + 0x05000031, 0x80380580, 0x05000024, 0x8d0c0528, + 0x05020022, 0x59980005, 0x48032823, 0x05fdf7f0, + 0x59d8010b, 0x59d8110a, 0x80080580, 0x05fc07ee, + 0x05fc67eb, 0x05006016, 0x59740a09, 0x59e00017, + 0x8c00050a, 0x05020028, 0x8c04051e, 0x05020005, + 0x59741202, 0x800810e0, 0x90081554, 0x480bc011, + 0x4807c017, 0x4203e000, 0x30000001, 0x4a02e803, + 0xffff0000, 0x4a032823, 0xffff0000, 0x830e1d00, + 0xffebffff, 0x0500e96f, 0x05fdf7d5, 0x850e1d64, + 0x0500e96c, 0x05fdf7d2, 0x05fc67d1, 0x912801c0, + 0x90000d5c, 0x4807c011, 0x59e00017, 0x8c00050a, + 0x60000800, 0x05fe0b32, 0x6403c017, 0x4203e000, + 0x30000001, 0x4a032823, 0xffff0000, 0x850e1d28, + 0x05fdf7c3, 0x4a0370e4, 0x00002000, 0x850e1d68, + 0x05fdf797, 0x4c040000, 0x05fdfb25, 0x5c000800, + 0x8c04051e, 0x05fc07d7, 0x5c03e000, 0x1c01f000, + 0x59d81108, 0x835c0480, 0x00000104, 0x0500101c, + 0x0502b01a, 0x480bb007, 0x05fce7fa, 0x59d80105, + 0x82000500, 0x01238780, 0x05020096, 0x8d0c0522, + 0x0500001f, 0x8d0c0516, 0x0502000c, 0x59d8090a, + 0x59d8010a, 0x80040580, 0x05fe07fd, 0x59741003, + 0x59740408, 0x48040000, 0x4806ec09, 0x800811c0, + 0x05fc260f, 0x1c01f000, 0x59940023, 0x80000540, + 0x05fc2606, 0x1c01f000, 0x0500f00a, 0x49681000, + 0x400ad000, 0x815eb800, 0x59c80000, 0x82000540, + 0x00001200, 0x48039000, 0x05fee7e1, 0x05fdf7d9, + 0x480ba807, 0x05fee7de, 0x05fdf7d6, 0x05006024, + 0x850e1d24, 0x59d8010a, 0x59d8090a, 0x80040580, + 0x05fe07fd, 0x8d0c0516, 0x05000016, 0x59d8010b, + 0x59d8110b, 0x80081580, 0x05fe07fd, 0x80040580, + 0x0500000f, 0x800408e0, 0x8d0c0520, 0x05020016, + 0x90040d53, 0x4807c011, 0x59740a09, 0x59e00017, + 0x8c00050a, 0x05020031, 0x8d0c0530, 0x05020033, + 0x4807c017, 0x4203e000, 0x30000001, 0x1c01f000, + 0x59740408, 0x4806ec09, 0x48040000, 0x59740a02, + 0x800408e0, 0x90040d54, 0x05fdf7ef, 0x850e1d64, + 0x1c01f000, 0x59e0000f, 0x59b818e4, 0x59e0100f, + 0x80081580, 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, + 0x81281580, 0x05000012, 0x40025000, 0x820c0500, + 0x04000000, 0x850e1d34, 0x810e1d40, 0x90040d5d, + 0x4807c011, 0x59e00017, 0x60000800, 0x8c00050a, + 0x0502000e, 0x8d0c0530, 0x05020010, 0x6403c017, + 0x4203e000, 0x30000001, 0x1c01f000, 0x40001000, + 0x400c0000, 0x810c0580, 0x8c000534, 0x40080000, + 0x05fe07ea, 0x05fdf7cb, 0x4c040000, 0x05fdfaac, + 0x5c000800, 0x05fdf7cf, 0x8c000500, 0x05fc07cd, + 0x4c040000, 0x05fdfbd0, 0x5c000800, 0x05fdf7c9, + 0x592c2802, 0x801429c0, 0x0500000d, 0x58140804, + 0x592c0001, 0x492c2804, 0x800409c0, 0x05000005, + 0x492c0800, 0x80000d40, 0x05fe058f, 0x1c01f000, + 0x492c2805, 0x850e1d66, 0x05fdf7fb, 0x492fc857, + 0x0105f1d2, 0x0502d00c, 0x59740805, 0x58040000, + 0x4807b107, 0x80000d40, 0x05020005, 0x4802e804, + 0x850e1d26, 0x4802e805, 0x1c01f000, 0x05fcd7f8, + 0x05fdf7fd, 0x59d80105, 0x82000500, 0x01238780, + 0x05020004, 0x42000000, 0x00112349, 0x0169f75a, + 0x4803c857, 0x485fc857, 0x8c00050e, 0x01020e0e, + 0x4203e000, 0x50000000, 0x6010b900, 0x0101f619, + 0x4a03b104, 0x10000000, 0x592c4408, 0x592c1409, + 0x800800cc, 0x592c2006, 0x80100400, 0x4803b100, + 0x497bb102, 0x59d80101, 0x4813b100, 0x592c0007, + 0x4803b101, 0x592c0208, 0x82000540, 0x00400000, + 0x4803b103, 0x58200900, 0x480bb10a, 0x4807b10b, + 0x592c0001, 0x4803b11f, 0x4a03b104, 0x10000001, + 0x412ee800, 0x1c01f000, 0x4df00000, 0x4203e000, + 0x50000000, 0x59741408, 0x58080900, 0x4807b10b, + 0x8d0c0524, 0x0502001a, 0x59d80106, 0x80000540, + 0x05020017, 0x59d80105, 0x82000500, 0x00006000, + 0x05020013, 0x599af808, 0x817ef9c0, 0x05000010, + 0x41765800, 0x592e5800, 0x592c1005, 0x800811c0, + 0x05000006, 0x412c0000, 0x81740580, 0x05fe0fcd, + 0x05fdffb1, 0x0501f006, 0x592c0003, 0x80000540, + 0x05fc0dc6, 0x817ef840, 0x05fe07f3, 0x5c03e000, + 0x1c01f000, 0x05fce71b, 0x59d80105, 0x82000500, + 0x01238780, 0x05fe07b7, 0x8d0c0524, 0x05020002, + 0x1c01f000, 0x59d8010a, 0x59d8090a, 0x80040580, + 0x05fe07fd, 0x850e1d24, 0x8d0c0516, 0x05000013, + 0x59d8010b, 0x80040580, 0x0500000f, 0x800408e0, + 0x8d0c0520, 0x05020014, 0x90040d53, 0x4807c011, + 0x59740a09, 0x59e00017, 0x8c00050a, 0x05020028, + 0x8d0c0530, 0x0502002a, 0x4807c017, 0x4203e000, + 0x30000001, 0x1c01f000, 0x59740408, 0x4806ec09, + 0x48040000, 0x59740a02, 0x800408e0, 0x90040d54, + 0x05fdf7ef, 0x59e0000f, 0x59b818e4, 0x59e0100f, + 0x80081580, 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, + 0x81281580, 0x0500001c, 0x40025000, 0x820c0500, + 0x04000000, 0x850e1d34, 0x810e1d40, 0x90040d5d, + 0x4807c011, 0x59e00017, 0x60000800, 0x8c00050a, + 0x05020007, 0x8d0c0530, 0x05020009, 0x6403c017, + 0x4203e000, 0x30000001, 0x1c01f000, 0x4c040000, + 0x05fdf9f7, 0x5c000800, 0x05fdf7d8, 0x8c000500, + 0x05fc07d6, 0x4c040000, 0x05fdfb1b, 0x5c000800, + 0x05fdf7d2, 0x40001000, 0x400c0000, 0x810c0580, + 0x8c000534, 0x40080000, 0x05fe07e0, 0x05fdf7c3, + 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800, + 0x05fce7fc, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x59d8090b, 0x59980006, 0x48073006, + 0x80040480, 0x05020004, 0x59940023, 0x80000540, + 0x05022003, 0x59980805, 0x48072823, 0x59d80105, + 0x82000500, 0x01238780, 0x05fe0752, 0x1c01f000, + 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800, + 0x05fce7fc, 0x59c80000, 0x82000540, 0x00001200, + 0x48039000, 0x59740c08, 0x58040900, 0x4807b10b, + 0x59740402, 0x4806ec02, 0x80040480, 0x05020004, + 0x59740003, 0x80000540, 0x05022003, 0x59980805, + 0x4806e803, 0x59d8090a, 0x59d8010a, 0x80040580, + 0x05fe07fd, 0x59740408, 0x48040000, 0x4806ec09, + 0x59d80105, 0x82000500, 0x01238780, 0x05fe0731, + 0x1c01f000, 0x59981007, 0x59e00010, 0x59e00810, + 0x80041d80, 0x05fe07fd, 0x80080580, 0x0500000d, + 0x48073007, 0x59e0000f, 0x59e0100f, 0x80081d80, + 0x05fe07fd, 0x81280580, 0x0500000d, 0x400a5000, + 0x40080000, 0x80040580, 0x05fe04a0, 0x1c01f000, 0x59e0000f, 0x59e0100f, 0x80081d80, 0x05fe07fd, - 0x81280580, 0x0500000d, 0x400a5000, 0x40080000, - 0x80040580, 0x05fe04a0, 0x1c01f000, 0x59e0000f, - 0x59e0100f, 0x80081d80, 0x05fe07fd, 0x81280580, - 0x05fc07fa, 0x400a5000, 0x59940023, 0x80000540, - 0x05fc27f3, 0x1c01f000, 0x59e0000f, 0x59b818e4, - 0x59e0100f, 0x80080d80, 0x05fe07fc, 0x8c0c050c, - 0x05fe07fa, 0x81280580, 0x05020006, 0x400c0000, - 0x810c0580, 0x8c000534, 0x05020002, 0x1c01f000, - 0x820c0500, 0x04000000, 0x850e1d34, 0x810e1d40, - 0x400a5000, 0x900811c0, 0x9008155c, 0x480bc011, - 0x59e00017, 0x60000800, 0x8c00050a, 0x05020007, - 0x8d0c0530, 0x05020007, 0x6403c017, 0x4203e000, - 0x30000001, 0x1c01f000, 0x05fdf98e, 0x05fdf7fb, - 0x8c000500, 0x05fe0ab5, 0x05fdf7f8, 0x4d2c0000, - 0x599af802, 0x817ef9c0, 0x05000008, 0x40f25800, - 0x592c020a, 0x8c000500, 0x05020806, 0x592e5801, - 0x817ef840, 0x05fe07fb, 0x5c025800, 0x1c01f000, - 0x59c40001, 0x82000500, 0x00018000, 0x82000d80, - 0x00018000, 0x05020004, 0x42000800, 0x64000000, - 0x0501f00f, 0x82000d80, 0x00010000, 0x05020004, - 0x42000800, 0x32000000, 0x0501f009, 0x82000d80, - 0x00008000, 0x05020004, 0x42000800, 0x19000000, - 0x0501f003, 0x42000800, 0x0c800000, 0x592c1411, - 0x013dff72, 0x40041000, 0x40000800, 0x61a00007, - 0x013dff8e, 0x480a580f, 0x1c01f000, 0x592c020a, - 0x84000502, 0x592c080d, 0x48025a0a, 0x4806580e, - 0x800409c0, 0x05000020, 0x592c000f, 0x80041480, - 0x0500100f, 0x0500001b, 0x82080480, 0x000003e8, - 0x05001018, 0x480a580d, 0x592c0210, 0x80000040, - 0x05000015, 0x80000040, 0x05000003, 0x48025a10, - 0x1c01f000, 0x64065a10, 0x1c01f000, 0x80081080, - 0x80081000, 0x82080480, 0x000003e8, 0x05001009, - 0x497a580d, 0x592c0210, 0x90000402, 0x82001500, - 0x00000f00, 0x05020005, 0x48025a10, 0x1c01f000, - 0x497a580d, 0x1c01f000, 0x4a025a10, 0x000000ff, - 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x599af802, 0x817ef9c0, 0x0500003e, 0x4178c000, - 0x59d8080b, 0x59d8000b, 0x80040580, 0x05fe07fd, - 0x58f00200, 0x48040100, 0x4805e20c, 0x59d8000a, - 0x80040580, 0x05020033, 0x59d80005, 0x82000500, - 0x00006000, 0x0502002f, 0x0500c02e, 0x91700582, - 0x0500002c, 0x91700588, 0x0500002a, 0x40f25800, - 0x592e5801, 0x592cba0a, 0x592c000d, 0x80000540, - 0x05000005, 0x8c5c0502, 0x05020003, 0x4200c000, - 0xffffffff, 0x592c4200, 0x592c020c, 0x58201000, - 0x40002000, 0x80080580, 0x05000014, 0x412c0000, - 0x80f00580, 0x05020009, 0x8c5c0502, 0x05000003, - 0x80600000, 0x05000013, 0x0501f81d, 0x480bb00a, - 0x5c03e000, 0x1c01f000, 0x8c5c0502, 0x05020014, - 0x4a03b004, 0x10000000, 0x4971e410, 0x0501f831, - 0x5c03e000, 0x1c01f000, 0x817ef840, 0x05fe07dd, - 0x80600000, 0x05000003, 0x80625d58, 0x05020003, - 0x5c03e000, 0x1c01f000, 0x592c4200, 0x592c220c, - 0x58201000, 0x592cba0a, 0x05fdf7ee, 0x8060c1c0, - 0x05fe07f2, 0x412cc000, 0x05fdf7f0, 0x916c0583, - 0x05020017, 0x8c5c0500, 0x05000007, 0x8c5c0502, - 0x05020005, 0x592c000d, 0x592c080f, 0x80040480, - 0x05001010, 0x40100000, 0x80080c80, 0x05021003, - 0x592c040a, 0x80040c00, 0x592c0210, 0x80041c80, - 0x05021002, 0x1c01f000, 0x80101400, 0x592c040a, - 0x80080480, 0x05001002, 0x40001000, 0x1c01f000, - 0x845cbd42, 0x485e5a0a, 0x40101000, 0x1c01f000, - 0x801000cc, 0x592c2808, 0x80140400, 0x4803b000, - 0x497bb002, 0x59d80001, 0x4817b000, 0x592c0009, - 0x4803b001, 0x4813b00b, 0x592ee410, 0x592c040a, - 0x82000540, 0x00400000, 0x4803b003, 0x05fdffd4, - 0x480bb00a, 0x592c000b, 0x4803b01f, 0x4a03b004, - 0x10000001, 0x412de000, 0x1c01f000, 0x41700000, - 0x0c01f001, 0x001064bd, 0x000207ec, 0x001064bd, - 0x000208b8, 0x001064bc, 0x001064bc, 0x001064bc, - 0x001064bc, 0x00106bd4, 0x05010035, 0x59980000, - 0x80000540, 0x013604e2, 0x0502c01f, 0x6062f800, - 0x4df00000, 0x4203e000, 0x50000000, 0x49db3001, - 0x59da5808, 0x592c2a08, 0x58f00812, 0x800409c0, - 0x05000031, 0x58f0000b, 0x48025804, 0x48065802, - 0x48f25803, 0x497a5800, 0x497a5801, 0x82140500, - 0x000000ff, 0xb0000cbb, 0x05021024, 0x0c01f838, - 0x5c03e000, 0x817ef840, 0x05000007, 0x916c0583, - 0x05020005, 0x91700581, 0x0502000e, 0x05010015, - 0x05fcc7e4, 0x0500fb2c, 0x0500b317, 0x59d40005, - 0x82000500, 0x43238780, 0x01360079, 0x59d80005, - 0x82000500, 0x43238780, 0x0136007f, 0x1c01f000, - 0x91700583, 0x0500089d, 0x91700581, 0x05fe07f2, - 0x05010004, 0x05fcc7d3, 0x05fdf7ef, 0x6062f800, - 0x4df00000, 0x4203e000, 0x50000000, 0x49d73001, - 0x59d65808, 0x05fdf7d0, 0x0131fd24, 0x5c03e000, - 0x05fdf7e5, 0x592c0408, 0x82001500, 0x000000ff, - 0x80000110, 0x82000c00, 0x0010de60, 0x50040800, - 0x480a5c08, 0x800409c0, 0x05fe07c7, 0x80000540, - 0x01000dda, 0x42000800, 0x0010de60, 0x50040800, - 0x48065802, 0x0131fd39, 0x05fdf7ca, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x001065b0, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106532, 0x00106524, 0x00106524, - 0x00106524, 0x001065cd, 0x00106524, 0x00106524, - 0x00106524, 0x00020a44, 0x00106524, 0x0010677c, - 0x00106524, 0x00106524, 0x00106524, 0x000208d9, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106576, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x0010688b, - 0x00106a51, 0x00106524, 0x0010680e, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106858, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106ba1, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x001067db, 0x00106b6a, 0x00106524, - 0x00106b97, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x000208e4, - 0x00106524, 0x000208ec, 0x00106524, 0x00106524, - 0x00106524, 0x00106524, 0x00106524, 0x00106524, - 0x00106524, 0x00020ad5, 0x00106524, 0x00106524, - 0x00020c45, 0x00106524, 0x00106524, 0x00106524, - 0x00106c2c, 0x000208ec, 0x835c0480, 0x00000104, - 0x013014d5, 0x4df00000, 0x4203e000, 0x50000000, - 0x59981001, 0x58080005, 0x82000d00, 0x43238780, - 0x0136007f, 0x8c000508, 0x013004bf, 0x580a5808, - 0x592c0208, 0x58f00812, 0x800409c0, 0x013004c1, - 0x48065802, 0x497a5800, 0x497a5801, 0x82000500, - 0x000000ff, 0xb0000c8b, 0x013214be, 0x1201f800, - 0x001064d9, 0x5c03e000, 0x91700583, 0x05fc07e3, - 0x0500fa65, 0x0500b250, 0x1c01f000, 0x80140110, - 0x80000040, 0x0500013d, 0x0130152b, 0x4a01e007, - 0x00020a18, 0x4801e400, 0x492de002, 0x492de003, - 0x600ee000, 0x1c01f000, 0x497a5805, 0x80140110, - 0x80000040, 0x0130052b, 0x0130152b, 0x4a01e007, - 0x0002097f, 0x05fdf7f4, 0x497a5805, 0x80140110, - 0x80000040, 0x0132052b, 0x592c020b, 0x82000480, - 0x00001001, 0x01321539, 0x592c0017, 0xb0000580, - 0x01320539, 0x4d2c0000, 0x05f9ff1f, 0x05000011, - 0x412c6800, 0x5c025800, 0x600ae000, 0x42001000, - 0x001102f2, 0x592c0804, 0x592c2015, 0x592c2816, - 0x90340405, 0x48001003, 0x48041006, 0x48101007, - 0x48141008, 0x4834100a, 0x492c100b, 0x05f9f718, - 0x5c025800, 0x492de005, 0x6022e000, 0x4a01e004, - 0x00020910, 0x1c01f000, 0x6006e000, 0x412c6800, - 0x58f25805, 0x05fdf7e9, 0x4d2c0000, 0x5832580b, - 0x592c5a08, 0x4978600b, 0x812e59c0, 0x0130056e, - 0x58300002, 0x82000580, 0x00000100, 0x01320554, - 0x42000000, 0x001102f1, 0x50007000, 0x5830680a, - 0x58340005, 0x592c0809, 0x80040580, 0x01320558, - 0x58340806, 0x58341007, 0x58341808, 0x48065815, - 0x480a5816, 0x480e5817, 0x822c0d80, 0x0000016a, - 0x0502000e, 0x592c0a0e, 0x58342c09, 0x5834180f, - 0x58342010, 0x58341011, 0x8c040504, 0x0502000e, - 0x8c140510, 0x05020011, 0x480c680c, 0x4810680d, - 0x4808680e, 0x0501f037, 0x592c0c0e, 0x90040d04, - 0x592c040b, 0x80000110, 0x90000508, 0x80040d40, - 0x05fdf7ee, 0x82080500, 0xffff0003, 0x01320558, - 0x8c140510, 0x05000016, 0x58343812, 0x58344013, - 0x58343014, 0x8c040506, 0x05000004, 0x82180500, - 0xffff0003, 0x01320558, 0x8c040504, 0x05020009, - 0x8c040506, 0x0500001f, 0x481c7007, 0x48207008, - 0x40181000, 0x60483000, 0x607c3800, 0x0501f00f, - 0x481c7011, 0x48207012, 0x48187013, 0x60303000, - 0x60203800, 0x8c140510, 0x05000006, 0x603c3000, - 0x60683800, 0x8c040506, 0x05020002, 0x60603800, - 0x480c7007, 0x48107008, 0x481c7010, 0x592c0804, - 0x48047006, 0x492c700b, 0x4818700e, 0x4834700c, - 0x48365801, 0x65286808, 0x5c025800, 0x0135f3c3, - 0x48365801, 0x65286808, 0x6006e000, 0x40341000, - 0x822c0580, 0x0000016a, 0x05020004, 0x0501f80e, - 0x5c025800, 0x1c01f000, 0x0501f96d, 0x5c025800, - 0x1c01f000, 0x592c0001, 0x80001540, 0x0130052b, - 0x58080a08, 0x82040d00, 0x000000ff, 0xb004058a, - 0x01320532, 0x58080409, 0x8c000510, 0x0500008f, - 0x4d2c0000, 0x4c080000, 0x05f9fe8b, 0x5c001000, - 0x05000008, 0x412c6800, 0x5c025800, 0x48365805, - 0x592c5a0e, 0x0501f80e, 0x05000084, 0x0131f539, - 0x5c025800, 0x492de005, 0x6022e000, 0x4a01e004, - 0x0002099c, 0x1c01f000, 0x6006e000, 0x412c6800, - 0x58f25805, 0x592c1001, 0x05fdf7f1, 0x592c220b, - 0x5808480c, 0x5808040d, 0x80004540, 0x0500004c, - 0x80102480, 0x0500004a, 0x05001049, 0x90200483, - 0x05001007, 0x0500000b, 0x0500100c, 0x40004000, - 0x58081001, 0x90200485, 0x05fdf7fb, 0x40200000, - 0x0c01f001, 0x000209f1, 0x000209cb, 0x000209cf, - 0x58081001, 0x0501f008, 0x40200000, 0x0c01f001, - 0x000209bf, 0x000209c3, 0x000209c7, 0x000209cb, - 0x000209cf, 0x60240800, 0x42001800, 0x001012a3, - 0x0501f010, 0x60300800, 0x42001800, 0x001012a4, - 0x0501f00c, 0x603c0800, 0x42001800, 0x001012a5, - 0x0501f008, 0x60480800, 0x42001800, 0x001012a6, - 0x0501f004, 0x60540800, 0x42001800, 0x001012a7, - 0x40080000, 0x80043c00, 0x581c2800, 0x581c3001, - 0x581c3802, 0x8c2c0502, 0x0500000e, 0x80102040, - 0x0500000c, 0x90040595, 0x05000004, 0x90040c03, - 0x800c1800, 0x0501f007, 0x58081001, 0x800811c0, - 0x01000dda, 0x60240800, 0x42001800, 0x001012a3, - 0x48046809, 0x4808680a, 0x480c680b, 0x4810680c, - 0x4814680d, 0x4818680e, 0x481c680f, 0x48246810, - 0x64046811, 0x80000580, 0x1c01f000, 0x90000541, - 0x1c01f000, 0x592c0208, 0x82000500, 0x000000ff, - 0xb00005a8, 0x05000007, 0x90000582, 0x05000005, - 0x90000598, 0x05000003, 0x90000588, 0x05020018, - 0x592c0001, 0x80001540, 0x05000015, 0x58080208, - 0x82000500, 0x000000ff, 0xb000058a, 0x05020010, - 0x58080409, 0x8c000510, 0x0500000d, 0x592c0005, - 0x4d2c0000, 0x80025d40, 0x59a8000c, 0x812c0480, - 0x05001008, 0x59a8000a, 0x812c0480, 0x05021005, - 0x0105f992, 0x5c025800, 0x497a5805, 0x1c01f000, + 0x81280580, 0x05fc07fa, 0x400a5000, 0x59940023, + 0x80000540, 0x05fc27f3, 0x1c01f000, 0x59e0000f, + 0x59b818e4, 0x59e0100f, 0x80080d80, 0x05fe07fc, + 0x8c0c050c, 0x05fe07fa, 0x81280580, 0x05020006, + 0x400c0000, 0x810c0580, 0x8c000534, 0x05020002, + 0x1c01f000, 0x820c0500, 0x04000000, 0x850e1d34, + 0x810e1d40, 0x400a5000, 0x900811c0, 0x9008155c, + 0x480bc011, 0x59e00017, 0x60000800, 0x8c00050a, + 0x05020007, 0x8d0c0530, 0x05020007, 0x6403c017, + 0x4203e000, 0x30000001, 0x1c01f000, 0x05fdf970, + 0x05fdf7fb, 0x8c000500, 0x05fe0a97, 0x05fdf7f8, + 0x4d2c0000, 0x599af802, 0x817ef9c0, 0x05000008, + 0x40f25800, 0x592c020a, 0x8c000500, 0x05020806, + 0x592e5801, 0x817ef840, 0x05fe07fb, 0x5c025800, + 0x1c01f000, 0x59c40001, 0x82000500, 0x00018000, + 0x82000d80, 0x00018000, 0x05020004, 0x42000800, + 0x00100000, 0x0501f00f, 0x82000d80, 0x00010000, + 0x05020004, 0x42000800, 0x00080000, 0x0501f009, + 0x82000d80, 0x00008000, 0x05020004, 0x42000800, + 0x00040000, 0x0501f003, 0x42000800, 0x00020000, + 0x592c1411, 0x0141fc2b, 0x40041000, 0x40000800, + 0x60280000, 0x0141fc47, 0x800810c8, 0x480a580f, + 0x1c01f000, 0x592c020a, 0x84000502, 0x592c080d, + 0x48025a0a, 0x4806580e, 0x800409c0, 0x05000020, + 0x592c000f, 0x80041480, 0x0500100f, 0x0500001b, + 0x82080480, 0x000003e8, 0x05001018, 0x480a580d, + 0x592c0210, 0x80000040, 0x05000015, 0x80000040, + 0x05000003, 0x48025a10, 0x1c01f000, 0x64065a10, + 0x1c01f000, 0x80081080, 0x80081000, 0x82080480, + 0x000003e8, 0x05001009, 0x497a580d, 0x592c0210, + 0x90000402, 0x82001500, 0x00000f00, 0x05020005, + 0x48025a10, 0x1c01f000, 0x497a580d, 0x1c01f000, + 0x4a025a10, 0x000000ff, 0x1c01f000, 0x4df00000, + 0x4203e000, 0x50000000, 0x599af802, 0x817ef9c0, + 0x0500003e, 0x4178c000, 0x59d8080b, 0x59d8000b, + 0x80040580, 0x05fe07fd, 0x58f00200, 0x48040100, + 0x4805e20c, 0x59d8000a, 0x80040580, 0x05020033, + 0x59d80005, 0x82000500, 0x00006000, 0x0502002f, + 0x0500c02e, 0x91700582, 0x0500002c, 0x91700588, + 0x0500002a, 0x40f25800, 0x592e5801, 0x592cba0a, + 0x592c000d, 0x80000540, 0x05000005, 0x8c5c0502, + 0x05020003, 0x4200c000, 0xffffffff, 0x592c4200, + 0x592c020c, 0x58201000, 0x40002000, 0x80080580, + 0x05000014, 0x412c0000, 0x80f00580, 0x05020009, + 0x8c5c0502, 0x05000003, 0x80600000, 0x05000013, + 0x0501f81d, 0x480bb00a, 0x5c03e000, 0x1c01f000, + 0x8c5c0502, 0x05020014, 0x4a03b004, 0x10000000, + 0x4971e410, 0x0501f831, 0x5c03e000, 0x1c01f000, + 0x817ef840, 0x05fe07dd, 0x80600000, 0x05000003, + 0x80625d58, 0x05020003, 0x5c03e000, 0x1c01f000, + 0x592c4200, 0x592c220c, 0x58201000, 0x592cba0a, + 0x05fdf7ee, 0x8060c1c0, 0x05fe07f2, 0x412cc000, + 0x05fdf7f0, 0x916c0583, 0x05020017, 0x8c5c0500, + 0x05000007, 0x8c5c0502, 0x05020005, 0x592c000d, + 0x592c080f, 0x80040480, 0x05001010, 0x40100000, + 0x80080c80, 0x05021003, 0x592c040a, 0x80040c00, + 0x592c0210, 0x80041c80, 0x05021002, 0x1c01f000, + 0x80101400, 0x592c040a, 0x80080480, 0x05001002, + 0x40001000, 0x1c01f000, 0x845cbd42, 0x485e5a0a, + 0x40101000, 0x1c01f000, 0x801000cc, 0x592c2808, + 0x80140400, 0x4803b000, 0x497bb002, 0x59d80001, + 0x4817b000, 0x592c0009, 0x4803b001, 0x4813b00b, + 0x592ee410, 0x592c040a, 0x82000540, 0x00400000, + 0x4803b003, 0x05fdffd4, 0x480bb00a, 0x592c000b, + 0x4803b01f, 0x4a03b004, 0x10000001, 0x412de000, + 0x1c01f000, 0x41700000, 0x0c01f001, 0x001067ad, + 0x00020813, 0x001067ad, 0x000208df, 0x001067ac, + 0x001067ac, 0x001067ac, 0x001067ac, 0x00106f40, + 0x05010035, 0x59980000, 0x80000540, 0x013a006a, + 0x0502c01f, 0x6062f800, 0x4df00000, 0x4203e000, + 0x50000000, 0x49db3001, 0x59da5808, 0x592c2a08, + 0x58f00812, 0x800409c0, 0x05000031, 0x58f0000b, + 0x48025804, 0x48065802, 0x48f25803, 0x497a5800, + 0x497a5801, 0x82140500, 0x000000ff, 0xb0000cbb, + 0x05021024, 0x0c01f838, 0x5c03e000, 0x817ef840, + 0x05000007, 0x916c0583, 0x05020005, 0x91700581, + 0x0502000e, 0x05010015, 0x05fcc7e4, 0x0500fb3b, + 0x0500b326, 0x59d40005, 0x82000500, 0x43238780, + 0x0136038f, 0x59d80005, 0x82000500, 0x43238780, + 0x01360395, 0x1c01f000, 0x91700583, 0x0500089d, + 0x91700581, 0x05fe07f2, 0x05010004, 0x05fcc7d3, + 0x05fdf7ef, 0x6062f800, 0x4df00000, 0x4203e000, + 0x50000000, 0x49d73001, 0x59d65808, 0x05fdf7d0, + 0x0135f814, 0x5c03e000, 0x05fdf7e5, 0x592c0408, + 0x82001500, 0x000000ff, 0x80000110, 0x82000c00, + 0x00111dfa, 0x50040800, 0x480a5c08, 0x800409c0, + 0x05fe07c7, 0x80000540, 0x01000e15, 0x42000800, + 0x00111dfa, 0x50040800, 0x48065802, 0x0135f829, + 0x05fdf7ca, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x0010689d, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106822, + 0x00106814, 0x00106814, 0x00106814, 0x001068be, + 0x00106814, 0x00106814, 0x00106814, 0x00020a7a, + 0x00106814, 0x00106a8e, 0x00106814, 0x00106814, + 0x00106814, 0x00020900, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106866, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106ba1, 0x00106db9, 0x00106814, + 0x00106b21, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106b6e, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106f0d, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106aed, + 0x00106ed2, 0x00106814, 0x00106f02, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x0002090b, 0x00106814, 0x00020913, + 0x00106814, 0x00106814, 0x00106814, 0x00106814, + 0x00106814, 0x00106814, 0x00106814, 0x00020b0b, + 0x00106814, 0x00106814, 0x00020c7b, 0x00106814, + 0x00106814, 0x00106814, 0x00106fb4, 0x00020913, + 0x835c0480, 0x00000104, 0x013017c5, 0x4df00000, + 0x4203e000, 0x50000000, 0x59981001, 0x58080005, + 0x82000d00, 0x43238780, 0x01360395, 0x8c000508, + 0x013007af, 0x580a5808, 0x592c0208, 0x58f00812, + 0x800409c0, 0x013007b1, 0x48065802, 0x497a5800, + 0x497a5801, 0x82000500, 0x000000ff, 0xb0000c8b, + 0x013217ae, 0x1201f800, 0x001067c9, 0x5c03e000, + 0x91700583, 0x05fc07e3, 0x0500fa74, 0x0500b25f, + 0x1c01f000, 0x80140110, 0x80000040, 0x0500013f, + 0x0134101b, 0x4a01e007, 0x00020a41, 0x4801e400, + 0x492de002, 0x492de003, 0x600ee000, 0x1c01f000, + 0x497a5805, 0x80140110, 0x80000040, 0x0134001b, + 0x0134101b, 0x4a01e007, 0x000209a6, 0x05fdf7f4, + 0x497a5805, 0x80140110, 0x80000040, 0x0136001b, + 0x592c020b, 0x82000480, 0x00001001, 0x01361029, + 0x592c0017, 0xb0000580, 0x01360029, 0x4d2c0000, + 0x05f9ff00, 0x05000011, 0x412c6800, 0x5c025800, + 0x600ae000, 0x42001000, 0x00114296, 0x592c0804, + 0x592c2015, 0x592c2816, 0x90340405, 0x48001003, + 0x48041006, 0x48101007, 0x48141008, 0x4834100a, + 0x492c100b, 0x05f9f6f9, 0x5c025800, 0x492de005, + 0x6022e000, 0x4a01e004, 0x00020937, 0x1c01f000, + 0x6006e000, 0x412c6800, 0x58f25805, 0x05fdf7e9, + 0x4d2c0000, 0x5832580b, 0x592c5a08, 0x4978600b, + 0x812e59c0, 0x0134005e, 0x58300002, 0x82000580, + 0x00000100, 0x01360044, 0x42000000, 0x00114295, + 0x50007000, 0x5830680a, 0x58340005, 0x592c0809, + 0x80040580, 0x01360048, 0x58340806, 0x58341007, + 0x58341808, 0x48065815, 0x480a5816, 0x480e5817, + 0x822c0d80, 0x0000016a, 0x0502000e, 0x592c0a0e, + 0x58342c09, 0x5834180f, 0x58342010, 0x58341011, + 0x8c040504, 0x0502000e, 0x8c140510, 0x05020011, + 0x480c680c, 0x4810680d, 0x4808680e, 0x0501f037, + 0x592c0c0e, 0x90040d04, 0x592c040b, 0x80000110, + 0x90000508, 0x80040d40, 0x05fdf7ee, 0x82080500, + 0xffff0003, 0x01360048, 0x8c140510, 0x05000016, + 0x58343812, 0x58344013, 0x58343014, 0x8c040506, + 0x05000004, 0x82180500, 0xffff0003, 0x01360048, + 0x8c040504, 0x05020009, 0x8c040506, 0x0500001f, + 0x481c7007, 0x48207008, 0x40181000, 0x60483000, + 0x607c3800, 0x0501f00f, 0x481c7011, 0x48207012, + 0x48187013, 0x60303000, 0x60203800, 0x8c140510, + 0x05000006, 0x603c3000, 0x60683800, 0x8c040506, + 0x05020002, 0x60603800, 0x480c7007, 0x48107008, + 0x481c7010, 0x592c0804, 0x48047006, 0x492c700b, + 0x4818700e, 0x4834700c, 0x48365801, 0x65286808, + 0x5c025800, 0x0135f72f, 0x48365801, 0x65286808, + 0x6006e000, 0x40341000, 0x822c0580, 0x0000016a, + 0x05020004, 0x0501f80e, 0x5c025800, 0x1c01f000, + 0x0501f97c, 0x5c025800, 0x1c01f000, 0x592c0001, + 0x80001540, 0x0134001b, 0x58080a08, 0x82040d00, + 0x000000ff, 0xb004058a, 0x01360022, 0x58080409, + 0x8c000510, 0x05000091, 0x4d2c0000, 0x4c080000, + 0x05f9fe6c, 0x5c001000, 0x05000008, 0x412c6800, + 0x5c025800, 0x48365805, 0x592c5a0e, 0x0501f80e, + 0x05000086, 0x0135f029, 0x5c025800, 0x492de005, + 0x6022e000, 0x4a01e004, 0x000209c3, 0x1c01f000, + 0x6006e000, 0x412c6800, 0x58f25805, 0x592c1001, + 0x05fdf7f1, 0x592c220b, 0x5808480c, 0x5808040d, + 0x80004540, 0x0500004c, 0x80102480, 0x0500004a, + 0x05001049, 0x90200483, 0x05001007, 0x0500000b, + 0x0500100c, 0x40004000, 0x58081001, 0x90200485, + 0x05fdf7fb, 0x40200000, 0x0c01f001, 0x00020a18, + 0x000209f2, 0x000209f6, 0x58081001, 0x0501f008, + 0x40200000, 0x0c01f001, 0x000209e6, 0x000209ea, + 0x000209ee, 0x000209f2, 0x000209f6, 0x60240800, + 0x42001800, 0x00100042, 0x0501f010, 0x60300800, + 0x42001800, 0x00100043, 0x0501f00c, 0x603c0800, + 0x42001800, 0x00100044, 0x0501f008, 0x60480800, + 0x42001800, 0x00100045, 0x0501f004, 0x60540800, + 0x42001800, 0x00100046, 0x40080000, 0x80043c00, + 0x581c2800, 0x581c3001, 0x581c3802, 0x8c2c0502, + 0x0500000e, 0x80102040, 0x0500000c, 0x90040595, + 0x05000004, 0x90040c03, 0x800c1800, 0x0501f007, + 0x58081001, 0x800811c0, 0x01000e15, 0x60240800, + 0x42001800, 0x00100042, 0x48046809, 0x4808680a, + 0x480c680b, 0x4810680c, 0x4814680d, 0x4818680e, + 0x481c680f, 0x48246810, 0x64046811, 0x80000580, + 0x1c01f000, 0x90000541, 0x1c01f000, 0x592c0208, + 0x82000500, 0x000000ff, 0xb00005a8, 0x05000007, + 0x90000582, 0x05000005, 0x90000598, 0x05000003, + 0x90000588, 0x0502001a, 0x592c0001, 0x80001540, + 0x05000017, 0x58080208, 0x82000500, 0x000000ff, + 0xb000058a, 0x05020012, 0x58080409, 0x8c000510, + 0x0500000f, 0x592c0005, 0x4d2c0000, 0x80025d40, + 0x59a8000c, 0x812c0480, 0x05021003, 0x0159fa66, + 0x05000008, 0x59a8000a, 0x812c0480, 0x05021005, + 0x0105f9c9, 0x5c025800, 0x497a5805, 0x1c01f000, 0x5c025800, 0x05fdf7fe, 0x592e8a0a, 0x83440c80, - 0x000007f0, 0x01321539, 0x8d0c050e, 0x0132057e, - 0x592e4414, 0x81224110, 0x83440400, 0x0010d400, - 0x50000000, 0x80026d40, 0x01300591, 0x59340013, - 0x80000130, 0x81200580, 0x01320591, 0x599c0018, - 0x8c00052a, 0x05000005, 0x592c0003, 0x5800040c, - 0x81200580, 0x01320591, 0x5934000a, 0x8c00052e, - 0x01320597, 0x05fdf885, 0x01320593, 0x1c01f000, - 0x58f00803, 0x58f00400, 0x48065800, 0x492c0801, - 0x492de003, 0x80000040, 0x4801e400, 0x05000002, - 0x1c01f000, 0x58f25802, 0x58f00007, 0x6006e000, - 0x0801f800, 0x1c01f000, 0x80140110, 0x0130052b, - 0x80000040, 0x05020009, 0x592c240e, 0x8c100504, - 0x0500000a, 0x592c020b, 0x82000c80, 0x00001001, - 0x01321539, 0x0135f3b1, 0x4a01e007, 0x00020a53, - 0x05fdf68d, 0x592c240e, 0x592c040b, 0x8c000510, - 0x0500000d, 0x0169f933, 0x0502000b, 0x59a800df, - 0x492f50df, 0x492fc857, 0x4803c857, 0x80000d40, - 0x05000003, 0x492c0800, 0x1c01f000, 0x492f50de, - 0x1c01f000, 0x592e8a0a, 0x417a7800, 0x592e440b, - 0x83224500, 0x000000ff, 0x83200580, 0x000000ff, - 0x01300716, 0x83200400, 0x0010d17b, 0x50024800, - 0x83440c80, 0x000007f0, 0x0132170d, 0x83440c00, - 0x0010d400, 0x50040000, 0x80026d40, 0x01300711, - 0x59340013, 0x80000130, 0x81200580, 0x01320711, - 0x59340002, 0x592c080c, 0x80040580, 0x82000500, - 0x00ffffff, 0x01320539, 0x59243a00, 0x901c0503, - 0x90000583, 0x05000004, 0x59340200, 0x8c00050e, - 0x0130070a, 0x592c040b, 0x8c000510, 0x0500001b, - 0x592c080d, 0x59a802dd, 0x80041480, 0x0130172f, - 0x59a804dd, 0x80000000, 0x80041480, 0x0132172f, - 0x0139fa9c, 0x01300539, 0x59300407, 0x800001c0, - 0x01320539, 0x497a580c, 0x4936600a, 0x59340002, - 0x82000500, 0x00ffffff, 0x4802600b, 0x641a6407, - 0x4926601d, 0x492e6017, 0x592c040e, 0x8c00051e, - 0x01320539, 0x1c01f000, 0x592e600d, 0x497a580c, - 0x83300480, 0x00111b00, 0x0130172f, 0xa1300495, - 0x013216d4, 0x592c0a10, 0x59300202, 0x80040580, - 0x0132072f, 0x4936600a, 0x4926601d, 0x8c10051c, - 0x013206c8, 0x59240206, 0x8c000510, 0x01320747, - 0x8d0c050e, 0x013206b4, 0x8c1c0516, 0x0132073e, - 0x59340200, 0x8c000518, 0x0132072c, 0x59300c07, - 0x90040586, 0x0132074a, 0xa1300494, 0x05021008, - 0x05000007, 0x592c040e, 0x8c00051e, 0x05000004, - 0x59300203, 0x90000587, 0x01320744, 0x8c100508, - 0x013206aa, 0x59300809, 0x497a5807, 0x64025a0a, - 0x800409c0, 0x013206af, 0x59300416, 0x8c000516, - 0x01320732, 0x492e6009, 0x0501f359, 0x497a5805, - 0x80140110, 0x0130052b, 0x80000040, 0x0130052b, - 0x592c0a0b, 0x82040c80, 0x00001001, 0x01321539, - 0x4a01e007, 0x00020ae1, 0x05fdf5ff, 0x592c0001, - 0x80001540, 0x0130052b, 0x58080a08, 0x82040d00, - 0x000000ff, 0xb004058a, 0x01320532, 0x58080409, - 0x8c000510, 0x05020021, 0x6006e000, 0x592c240e, - 0x8c100504, 0x05fc0765, 0x592c0208, 0x82000580, - 0x0000017a, 0x05fc0761, 0x40087800, 0x592c020b, - 0x82000480, 0x00001001, 0x01321539, 0x583c180c, - 0x583c200d, 0x583c100e, 0x82080500, 0xffff0003, - 0x01320539, 0x600ae000, 0x42000000, 0x001102f1, - 0x50007000, 0x64207010, 0x592c0804, 0x48047006, - 0x480c7007, 0x48107008, 0x492c700b, 0x6430700e, - 0x483c700c, 0x0135f3c3, 0x592c240e, 0x8c100504, - 0x01320539, 0x4d2c0000, 0x4c080000, 0x05f9fd06, - 0x5c001000, 0x0500000e, 0x412c6800, 0x5c025800, - 0x592c5c0e, 0x802c5942, 0x48365805, 0x05fdfe88, - 0x05fc0739, 0x0131f539, 0x6006e000, 0x412c6800, - 0x58f25805, 0x592c1001, 0x05fdf7f6, 0x5c025800, - 0x492de005, 0x6022e000, 0x4a01e004, 0x00020b1c, - 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x0502b00b, 0x835c0480, 0x00000104, 0x0500100c, - 0x815eb840, 0x416a5800, 0x592ed000, 0x492fb007, - 0x497a5800, 0x497a5801, 0x05fcb7f7, 0x59d80005, - 0x82000500, 0x43238780, 0x0136007f, 0x5c03e000, - 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000, - 0x0502f00b, 0x835c0480, 0x00000104, 0x0500100c, - 0x815eb840, 0x416a5800, 0x592ed000, 0x492fa807, - 0x497a5800, 0x497a5801, 0x05fcf7f7, 0x59d40005, - 0x82000500, 0x43238780, 0x01360079, 0x5c03e000, - 0x1c01f000, 0x40307000, 0x5838000b, 0x80025d40, - 0x0500001c, 0x58380002, 0x82000580, 0x00000100, - 0x0500001d, 0x4c380000, 0x592c0208, 0x82000500, - 0x000000ff, 0x90000592, 0x0500000f, 0xb00005a0, - 0x0500000d, 0x90000588, 0x0500000b, 0x592c020c, - 0x8400054e, 0x48025a0c, 0x497a5c0c, 0x497a5c0d, - 0x640a5a0a, 0x4a025a08, 0x00000103, 0x05fdf819, - 0x0501f003, 0x64425a0a, 0x05fdf816, 0x5c007000, - 0x6006e000, 0x4a007002, 0x00000100, 0x49787010, - 0x1c01f000, 0x58380004, 0x90000483, 0x05000081, - 0x58381010, 0x8c080500, 0x05020014, 0x8c080506, - 0x05020037, 0x600cb000, 0x912cac15, 0x5838000a, - 0x5838100d, 0x8008a400, 0x4c380000, 0x0169f8a7, - 0x5c007000, 0x5838000d, 0x90000403, 0x4800700d, - 0x64047010, 0x58380004, 0x90000483, 0x48007004, - 0x90000583, 0x0500006b, 0x5838000e, 0x80001d40, - 0x05020026, 0x4c380000, 0x05f9fc87, 0x5c007000, - 0x05000012, 0x4a025a08, 0x0000010a, 0x60241800, - 0x480c700e, 0x5838000c, 0x80000540, 0x05020002, - 0x5838000b, 0x40000800, 0x492c0801, 0x492c700c, - 0x603c0800, 0x0501f019, 0x6022e000, 0x4a01e004, - 0x00020ba8, 0x1c01f000, 0x6022e000, 0x4a01e004, - 0x00020bac, 0x1c01f000, 0x600ae000, 0x6e007000, - 0x001102f1, 0x0501f06b, 0x600ae000, 0x42000000, - 0x001102f1, 0x50007000, 0x05fdf7e3, 0x84081540, - 0x48087010, 0x5838180e, 0x583a580c, 0x400c0000, - 0x60600800, 0x80040c80, 0x58381004, 0x5838000f, - 0x41783000, 0x80000540, 0x05020004, 0x84183540, - 0x90081483, 0x05000037, 0x40080000, 0x80040480, - 0x05001002, 0x40080800, 0x4004b000, 0x412c0000, - 0x800c0400, 0x4000a800, 0x5838000a, 0x5838100d, - 0x8008a400, 0x4c080000, 0x4c040000, 0x4c0c0000, - 0x4c380000, 0x0169f8a7, 0x5c007000, 0x5c001800, - 0x5c000800, 0x40040000, 0x58381004, 0x80080480, - 0x48007004, 0x90000583, 0x05000002, 0x84183500, - 0x5c000000, 0x80041400, 0xb00804a0, 0x05020003, - 0x84183542, 0x41781000, 0x400c0000, 0x80041c00, - 0x900c0498, 0x05020003, 0x84183544, 0x40001800, - 0x40080800, 0x4804700d, 0x480c700e, 0x40180000, - 0x0c01f001, 0x00020bf3, 0x00020bf6, 0x00020bf4, - 0x00020bf3, 0x00020b8f, 0x00020bf6, 0x00020bf4, - 0x00020bf3, 0x0101fdda, 0x5838100f, 0x0135f3c3, - 0x5838080d, 0x90040402, 0x5838100a, 0x80080400, - 0x50001000, 0x800811c0, 0x05020041, 0x58381810, - 0x8c0c0506, 0x0502000b, 0x6006e000, 0x583a580b, - 0x4978700b, 0x49787010, 0x592c0208, 0x82000500, - 0x000000ff, 0x90000592, 0x05fc064b, 0x05fdf60f, - 0x8c0c0502, 0x05020028, 0x8c0c0508, 0x05000016, - 0x5838080c, 0x5838000e, 0x80002d40, 0x0502000b, - 0x4c380000, 0x0105f971, 0x5c007000, 0x05fc078b, - 0x412c0800, 0x583a580c, 0x48065801, 0x4a000a08, - 0x0000010a, 0x60242800, 0x58381811, 0x58382012, - 0x58381013, 0x80040c05, 0x480c0800, 0x48100801, - 0x48080802, 0x6006e000, 0x583a580b, 0x4978700b, - 0x49787010, 0x592c0208, 0x82000d00, 0x000000ff, - 0xb00405b2, 0x05fc0628, 0x592c1001, 0xb00405ba, - 0x05fe0559, 0x58080409, 0x8c000510, 0x05fc0622, - 0x05fdf6dd, 0x8c0c0504, 0x05fe07ef, 0x840c1d44, - 0x480c7010, 0x58381811, 0x58382012, 0x58381013, - 0x480c7007, 0x48107008, 0x0135f3c3, 0x5838000a, - 0x80040c00, 0x90381c07, 0x54041800, 0x80040800, - 0x800c1800, 0x54041800, 0x0135f3c3, 0x80140110, - 0x0130052b, 0x80000040, 0x0130052b, 0x4a01e007, - 0x00020c4c, 0x05fdf494, 0x4d2c0000, 0x0105f971, - 0x412c6800, 0x5c025800, 0x05000006, 0x48365805, - 0x90346c01, 0x0501f80c, 0x05fc05c4, 0x0131f539, - 0x492de006, 0x6022e000, 0x4a01e004, 0x00020c5b, - 0x1c01f000, 0x6006e000, 0x412c6800, 0x58f25806, - 0x05fdf7f3, 0x592c4812, 0x592c020b, 0x80004540, - 0x05000023, 0x592c040b, 0x80002540, 0x05000020, - 0x592c7001, 0x80204040, 0x05000008, 0x90200485, - 0x05001006, 0x58387001, 0x803871c0, 0x05000018, - 0x80004540, 0x05fe07fa, 0x82204400, 0x001012a3, - 0x50200000, 0x80380c00, 0x58042800, 0x58043001, - 0x58043802, 0x4838680d, 0x4800680c, 0x49786814, - 0x49786815, 0x48146810, 0x48186811, 0x481c6812, - 0x4820680e, 0x48246813, 0x80102040, 0x4810680f, - 0x05020005, 0x80000580, 0x1c01f000, 0x90000541, - 0x1c01f000, 0x80204000, 0x50201800, 0x800c19c0, - 0x0502000a, 0x58380001, 0x80007540, 0x05fc07f8, - 0x58380208, 0x9000050f, 0x82000400, 0x001012ac, - 0x50004000, 0x50201800, 0x4820680e, 0x480c680c, - 0x4838680d, 0x05fdf7ec, 0x4df00000, 0x4203e000, - 0x50000000, 0x5994002e, 0x80000540, 0x05000183, - 0x4c000000, 0x5c000000, 0x59947824, 0x4803282f, - 0x803c0480, 0x05001004, 0x05000003, 0x48032824, - 0x0501f05f, 0x417a0800, 0x81060800, 0x82000400, - 0x000003e8, 0x05fc27fd, 0x48032824, 0x59940032, - 0x80000d40, 0x05000006, 0x80040840, 0x48072832, - 0x05020003, 0x59940033, 0x0801f800, 0x59a8001c, - 0x8400057e, 0x4803501c, 0x59a80022, 0x8400057e, - 0x48035022, 0x59a8000f, 0x8400057e, 0x4803500f, - 0x59a80010, 0x8400057e, 0x48035010, 0x0125f91f, - 0x0502000a, 0x59a80878, 0x800409c0, 0x05000007, - 0xa0040c81, 0x48075078, 0x05000002, 0x05021003, - 0x497b5078, 0x013dfecc, 0x59a800a7, 0x8c000500, - 0x0500000e, 0x59a80878, 0x800409c0, 0x0500000b, - 0xa0040c81, 0x48075078, 0x05000002, 0x05021007, - 0x497b5078, 0x42000000, 0x0010dd09, 0x50000800, - 0x84040d48, 0x44040000, 0x59a800b8, 0x81041400, - 0x480b50b8, 0x59a808ba, 0x81040c01, 0x82040480, - 0x00028f5a, 0x05001002, 0x41780800, 0x480750ba, - 0x81040040, 0x05000002, 0x4907c857, 0x59e40852, - 0x59a800b9, 0x80040580, 0x05000004, 0x480bc857, - 0x59e40052, 0x480350b9, 0x59940030, 0x81040400, - 0x48032830, 0x0139ff8b, 0x5998b002, 0x8058b1c0, - 0x05000008, 0x40f25800, 0x592e5801, 0x592c020a, - 0x8c000500, 0x05fe0a3a, 0x8058b040, 0x05fe07fb, - 0x59940000, 0x90000580, 0x05020005, 0x59940030, - 0x48032831, 0x497b2830, 0x64072800, 0x4c0c0000, - 0x58d400e5, 0x8c000514, 0x05000013, 0x59940807, - 0x59941006, 0x5994002f, 0x80081c80, 0x05001004, - 0x05000003, 0x480f2806, 0x0501f00b, 0x80040840, - 0x48072807, 0x05020004, 0x59940008, 0x0801f800, - 0x0501f005, 0x400c0000, 0x900c1c0a, 0x05fc27f8, - 0x480f2806, 0x5c001800, 0x4d180000, 0x59c80040, - 0x8c000534, 0x05020025, 0x417a3000, 0x91947c09, - 0x60042000, 0x58d400e5, 0x80100500, 0x05020007, - 0x801020c4, 0x903c7c05, 0x811a3000, 0x91180585, - 0x05fe07f9, 0x0501f019, 0x583c0801, 0x583c1000, - 0x5994002f, 0x80080480, 0x05001005, 0x05000004, - 0x48007800, 0x80000040, 0x05fe17f2, 0x80040840, - 0x48047801, 0x05000006, 0x9000040a, 0x48007800, - 0x05fc27fb, 0xb004053f, 0x05fdf7ea, 0x583c0004, - 0x4c3c0000, 0x4c100000, 0x0801f800, 0x5c002000, - 0x5c007800, 0x05fdf7e3, 0x5c023000, 0x8d0c0516, - 0x05020017, 0x8d0c0522, 0x0500001e, 0x5998b008, - 0x8058b1c0, 0x05000012, 0x41765800, 0x592e5800, - 0x592c0003, 0x80001540, 0x05000006, 0x05002008, - 0x5994002f, 0x80080480, 0x05021004, 0x497a5803, - 0x05f9fea5, 0x0501f002, 0x48025803, 0x8058b040, - 0x05fe07f3, 0x8d0c0520, 0x0500000a, 0x59940023, - 0x80001540, 0x05000007, 0x05002006, 0x5994002f, - 0x80080480, 0x05021002, 0x80000580, 0x48032823, - 0x59940026, 0x80000d40, 0x05000012, 0x59941025, - 0x5994002f, 0x80080480, 0x05001005, 0x05000004, - 0x48032825, 0x80000040, 0x0502100a, 0x80040840, - 0x48072826, 0x05020004, 0x59940027, 0x0801f800, - 0x0501f004, 0x9000040a, 0x48032825, 0x05fc27f8, - 0x59940004, 0x80000d40, 0x05000012, 0x59941003, - 0x5994002f, 0x80080480, 0x05001005, 0x05000004, - 0x48032803, 0x80000040, 0x0502100a, 0x80040840, - 0x48072804, 0x05020004, 0x59940005, 0x0801f800, - 0x0501f004, 0x9000040a, 0x48032803, 0x05fc27f8, - 0x59940029, 0x80000d40, 0x05000012, 0x59941028, - 0x5994002f, 0x80080480, 0x05001005, 0x05000004, - 0x48032828, 0x80000040, 0x0502100a, 0x80040840, - 0x48072829, 0x05020004, 0x5994002a, 0x0801f800, - 0x0501f004, 0x90000401, 0x48032828, 0x05fc27f8, - 0x5994002c, 0x80000d40, 0x05000012, 0x5994102b, - 0x5994002f, 0x80080480, 0x05001005, 0x05000004, - 0x4803282b, 0x80000040, 0x0502100a, 0x80040840, - 0x4807282c, 0x05020004, 0x5994002d, 0x0801f800, - 0x0501f004, 0x9000040a, 0x4803282b, 0x05fc27f8, - 0x59a8081c, 0x8c04053e, 0x0500001b, 0x84040d3e, - 0x4807501c, 0x05000018, 0x5994002f, 0x4c000000, - 0x82000400, 0x000003e8, 0x4803282f, 0x80040480, - 0x05001004, 0x05000003, 0x4803501c, 0x0501f00c, - 0x4c000000, 0x013df83f, 0x013c08af, 0x5c000000, - 0x59a8081b, 0x80040400, 0x05fc27ff, 0x800001c0, - 0x05020002, 0x40040000, 0x4803501c, 0x5c000000, - 0x4803282f, 0x59a8080f, 0x8c04053e, 0x05000021, - 0x84040d3e, 0x4807500f, 0x0500001e, 0x5994002f, - 0x4c000000, 0x82000400, 0x000003e8, 0x4803282f, - 0x80040480, 0x05001009, 0x05000008, 0x4803500f, - 0x4c000000, 0x59a8100d, 0x5808040b, 0x8c000514, - 0x5c000000, 0x0500000d, 0x4c000000, 0x60480000, - 0x59a8100d, 0x013dfb92, 0x013c08af, 0x5c000000, - 0x90000400, 0x05fc27ff, 0x800001c0, 0x05020002, - 0x60000000, 0x4803500f, 0x5c000000, 0x4803282f, - 0x59a80810, 0x8c04053e, 0x05000023, 0x84040d3e, - 0x48075010, 0x05000020, 0x5994002f, 0x4c000000, - 0x82000400, 0x000003e8, 0x4803282f, 0x80040480, - 0x05001009, 0x05000008, 0x48035010, 0x4c000000, - 0x59a8100e, 0x5808040b, 0x8c000514, 0x5c000000, - 0x0500000f, 0x4c000000, 0x60500000, 0x59a8100e, - 0x013dfb92, 0x013c08af, 0x5c000000, 0x82000400, - 0x000927c0, 0x05fc27fe, 0x800001c0, 0x05020003, - 0x42000000, 0x000927c0, 0x48035010, 0x5c000000, - 0x4803282f, 0x5994082e, 0x5994002f, 0x80040480, - 0x01001dda, 0x4803282e, 0x59940000, 0x0c01f001, - 0x00020e25, 0x001076d4, 0x00107743, 0x5c03e000, - 0x1c01f000, 0x5994002e, 0x80000000, 0x4803282e, - 0x4203e000, 0x70000000, 0x1c01f000, 0x813e79c0, - 0x05020016, 0x59a800d4, 0x80000040, 0x05fe07ff, - 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x91300400, - 0x4801a8e1, 0x592c1003, 0x5808020a, 0x8c000500, - 0x0500000a, 0x592c1c0e, 0x820c1d00, 0x000000c0, - 0xb00c1d80, 0x05000005, 0x592c1813, 0x5808000d, - 0x800c0400, 0x4800100d, 0x1c01f000, 0x5c000000, - 0x4c000000, 0x4803c857, 0x4807c857, 0x59302a03, - 0x98140486, 0x05000005, 0x601c2800, 0x0501f003, - 0x60040800, 0x601c2800, 0x59325809, 0x832c0580, - 0x00110228, 0x0500001f, 0x832c0500, 0x00ff0000, - 0x05000025, 0x592c1000, 0x59301808, 0x59302027, - 0x801021c0, 0x05020039, 0x592c040e, 0x480a6009, - 0x48166203, 0x8c000510, 0x0502001c, 0x48065a0a, - 0x820c0500, 0x04000800, 0x82000580, 0x04000800, - 0x0500002b, 0xa1300494, 0x05021009, 0x05000008, - 0x592c040e, 0x8c00051e, 0x05020005, 0x013dff4d, - 0x59300202, 0x48025a10, 0x4932580d, 0x05f9fd11, - 0x417a7800, 0x59300009, 0x82000d80, 0x00110228, - 0x05020003, 0x58040000, 0x48026009, 0x80025d40, - 0x05fe07b3, 0x1c01f000, 0x832c0580, 0x00110228, - 0x05fc07f4, 0x592c040b, 0x8c000510, 0x05fe07f1, - 0x98040481, 0x05fe07de, 0x456a5800, 0x412ed000, - 0x815eb800, 0x592c0001, 0x80000d40, 0x05020006, + 0x000007f0, 0x0502101e, 0x8d0c050e, 0x0136006e, + 0x592e4414, 0x81224110, 0x83440480, 0x000007f0, + 0x0502101e, 0x83440400, 0x0010db80, 0x50000000, + 0x80026d40, 0x0134007e, 0x59340013, 0x80000130, + 0x81200580, 0x0136007e, 0x599c0018, 0x8c00052a, + 0x05000005, 0x592c0003, 0x5800040c, 0x81200580, + 0x0136007e, 0x5934000a, 0x8c00052e, 0x01360084, + 0x05fdf861, 0x01360080, 0x1c01f000, 0x83440c80, + 0x00000800, 0x01341029, 0x59a800ad, 0x81440480, + 0x01361029, 0x05fdf7dd, 0x05fdf89f, 0x05fc07e7, + 0x0135f07e, 0x58f00803, 0x58f00400, 0x48065800, + 0x492c0801, 0x492de003, 0x80000040, 0x4801e400, + 0x05000002, 0x1c01f000, 0x58f25802, 0x58f00007, + 0x6006e000, 0x0801f800, 0x1c01f000, 0x80140110, + 0x0134001b, 0x80000040, 0x05020009, 0x592c240e, + 0x8c100504, 0x0500000a, 0x592c020b, 0x82000c80, + 0x00001001, 0x01361029, 0x0135f71d, 0x4a01e007, + 0x00020a89, 0x05fdf67e, 0x592c240e, 0x592c040b, + 0x8c000510, 0x0500000d, 0x016df8ae, 0x0502000b, + 0x59a800e4, 0x492f50e4, 0x492fc857, 0x4803c857, + 0x80000d40, 0x05000003, 0x492c0800, 0x1c01f000, + 0x492f50e3, 0x1c01f000, 0x592e8a0a, 0x417a7800, + 0x592e440b, 0x83224500, 0x000000ff, 0x83200580, + 0x000000ff, 0x0134021e, 0x83200400, 0x0010d8f9, + 0x50024800, 0x83440c80, 0x000007f0, 0x01361215, + 0x83440c00, 0x0010db80, 0x50040000, 0x80026d40, + 0x01340219, 0x59340013, 0x80000130, 0x81200580, + 0x01360219, 0x59340002, 0x592c080c, 0x80040580, + 0x82000500, 0x00ffffff, 0x01360029, 0x59243a00, + 0x901c0503, 0x90000583, 0x05000004, 0x59340200, + 0x8c00050e, 0x01340212, 0x592c040b, 0x8c000510, + 0x0500001b, 0x592c080d, 0x59a802e2, 0x80041480, + 0x0134123a, 0x59a804e2, 0x80000000, 0x80041480, + 0x0136123a, 0x0139fe8a, 0x01340029, 0x59300407, + 0x800001c0, 0x01360029, 0x497a580c, 0x4936600a, + 0x59340002, 0x82000500, 0x00ffffff, 0x4802600b, + 0x641a6407, 0x4926601d, 0x492e6017, 0x592c040e, + 0x8c00051e, 0x01360029, 0x1c01f000, 0x592e600d, + 0x497a580c, 0x813004af, 0x0134123a, 0xa1300495, + 0x013611dc, 0x592c0a10, 0x59300202, 0x80040580, + 0x0136023a, 0x4936600a, 0x4926601d, 0x8c10051c, + 0x013601ce, 0x59240206, 0x8c000510, 0x01360252, + 0x8d0c050e, 0x013601ba, 0x8c1c0516, 0x01360249, + 0x59340200, 0x8c000518, 0x01360234, 0x59300c07, + 0x90040586, 0x01360255, 0xa1300494, 0x05021009, + 0xa1300496, 0x05001007, 0x592c040e, 0x8c00051e, + 0x05000004, 0x59300203, 0x90000587, 0x0136024f, + 0x8c100508, 0x013601b0, 0x59300809, 0x497a5807, + 0x64025a0a, 0x800409c0, 0x013601b5, 0x59300416, + 0x8c000516, 0x0136023d, 0x492e6009, 0x0501f359, + 0x497a5805, 0x80140110, 0x0134001b, 0x80000040, + 0x0134001b, 0x592c0a0b, 0x82040c80, 0x00001001, + 0x01361029, 0x4a01e007, 0x00020b17, 0x05fdf5f0, + 0x592c0001, 0x80001540, 0x0134001b, 0x58080a08, + 0x82040d00, 0x000000ff, 0xb004058a, 0x01360022, + 0x58080409, 0x8c000510, 0x05020021, 0x6006e000, + 0x592c240e, 0x8c100504, 0x05fc0765, 0x592c0208, + 0x82000580, 0x0000017a, 0x05fc0761, 0x40087800, + 0x592c020b, 0x82000480, 0x00001001, 0x01361029, + 0x583c180c, 0x583c200d, 0x583c100e, 0x82080500, + 0xffff0003, 0x01360029, 0x600ae000, 0x42000000, + 0x00114295, 0x50007000, 0x64207010, 0x592c0804, + 0x48047006, 0x480c7007, 0x48107008, 0x492c700b, + 0x6430700e, 0x483c700c, 0x0135f72f, 0x592c240e, + 0x8c100504, 0x01360029, 0x4d2c0000, 0x4c080000, + 0x05f9fcd8, 0x5c001000, 0x0500000e, 0x412c6800, + 0x5c025800, 0x592c5c0e, 0x802c5942, 0x48365805, + 0x05fdfe79, 0x05fc0739, 0x0135f029, 0x6006e000, + 0x412c6800, 0x58f25805, 0x592c1001, 0x05fdf7f6, + 0x5c025800, 0x492de005, 0x6022e000, 0x4a01e004, + 0x00020b52, 0x1c01f000, 0x4df00000, 0x4203e000, + 0x50000000, 0x0502b00b, 0x835c0480, 0x00000104, + 0x0500100c, 0x815eb840, 0x416a5800, 0x592ed000, + 0x492fb007, 0x497a5800, 0x497a5801, 0x05fcb7f7, + 0x59d80005, 0x82000500, 0x43238780, 0x01360395, + 0x5c03e000, 0x1c01f000, 0x4df00000, 0x4203e000, + 0x50000000, 0x0502f00b, 0x835c0480, 0x00000104, + 0x0500100c, 0x815eb840, 0x416a5800, 0x592ed000, + 0x492fa807, 0x497a5800, 0x497a5801, 0x05fcf7f7, + 0x59d40005, 0x82000500, 0x43238780, 0x0136038f, + 0x5c03e000, 0x1c01f000, 0x40307000, 0x5838000b, + 0x80025d40, 0x0500001c, 0x58380002, 0x82000580, + 0x00000100, 0x0500001d, 0x4c380000, 0x592c0208, + 0x82000500, 0x000000ff, 0x90000592, 0x0500000f, + 0xb00005a0, 0x0500000d, 0x90000588, 0x0500000b, + 0x592c020c, 0x8400054e, 0x48025a0c, 0x497a5c0c, + 0x497a5c0d, 0x640a5a0a, 0x4a025a08, 0x00000103, + 0x05fdf809, 0x0501f003, 0x64425a0a, 0x05fdf806, + 0x5c007000, 0x6006e000, 0x4a007002, 0x00000100, + 0x49787010, 0x1c01f000, 0x58380004, 0x90000483, + 0x05000081, 0x58381010, 0x8c080500, 0x05020014, + 0x8c080506, 0x05020037, 0x600cb000, 0x912cac15, + 0x5838000a, 0x5838100d, 0x8008a400, 0x4c380000, + 0x0501fe18, 0x5c007000, 0x5838000d, 0x90000403, + 0x4800700d, 0x64047010, 0x58380004, 0x90000483, + 0x48007004, 0x90000583, 0x0500006b, 0x5838000e, + 0x80001d40, 0x05020026, 0x4c380000, 0x05f9fc59, + 0x5c007000, 0x05000012, 0x4a025a08, 0x0000010a, + 0x60241800, 0x480c700e, 0x5838000c, 0x80000540, + 0x05020002, 0x5838000b, 0x40000800, 0x492c0801, + 0x492c700c, 0x603c0800, 0x0501f019, 0x6022e000, + 0x4a01e004, 0x00020bde, 0x1c01f000, 0x6022e000, + 0x4a01e004, 0x00020be2, 0x1c01f000, 0x600ae000, + 0x6e007000, 0x00114295, 0x0501f06b, 0x600ae000, + 0x42000000, 0x00114295, 0x50007000, 0x05fdf7e3, + 0x84081540, 0x48087010, 0x5838180e, 0x583a580c, + 0x400c0000, 0x60600800, 0x80040c80, 0x58381004, + 0x5838000f, 0x41783000, 0x80000540, 0x05020004, + 0x84183540, 0x90081483, 0x05000037, 0x40080000, + 0x80040480, 0x05001002, 0x40080800, 0x4004b000, + 0x412c0000, 0x800c0400, 0x4000a800, 0x5838000a, + 0x5838100d, 0x8008a400, 0x4c080000, 0x4c040000, + 0x4c0c0000, 0x4c380000, 0x0501fdca, 0x5c007000, + 0x5c001800, 0x5c000800, 0x40040000, 0x58381004, + 0x80080480, 0x48007004, 0x90000583, 0x05000002, + 0x84183500, 0x5c000000, 0x80041400, 0xb00804a0, + 0x05020003, 0x84183542, 0x41781000, 0x400c0000, + 0x80041c00, 0x900c0498, 0x05020003, 0x84183544, + 0x40001800, 0x40080800, 0x4804700d, 0x480c700e, + 0x40180000, 0x0c01f001, 0x00020c29, 0x00020c2c, + 0x00020c2a, 0x00020c29, 0x00020bc5, 0x00020c2c, + 0x00020c2a, 0x00020c29, 0x0101fe15, 0x5838100f, + 0x0135f72f, 0x5838080d, 0x90040402, 0x5838100a, + 0x80080400, 0x50001000, 0x800811c0, 0x05020041, + 0x58381810, 0x8c0c0506, 0x0502000b, 0x6006e000, + 0x583a580b, 0x4978700b, 0x49787010, 0x592c0208, + 0x82000500, 0x000000ff, 0x90000592, 0x05fc064b, + 0x05fdf602, 0x8c0c0502, 0x05020028, 0x8c0c0508, + 0x05000016, 0x5838080c, 0x5838000e, 0x80002d40, + 0x0502000b, 0x4c380000, 0x0105f9a8, 0x5c007000, + 0x05fc078b, 0x412c0800, 0x583a580c, 0x48065801, + 0x4a000a08, 0x0000010a, 0x60242800, 0x58381811, + 0x58382012, 0x58381013, 0x80040c05, 0x480c0800, + 0x48100801, 0x48080802, 0x6006e000, 0x583a580b, + 0x4978700b, 0x49787010, 0x592c0208, 0x82000d00, + 0x000000ff, 0xb00405b2, 0x05fc0628, 0x592c1001, + 0xb00405ba, 0x05fe054a, 0x58080409, 0x8c000510, + 0x05fc0622, 0x05fdf6dd, 0x8c0c0504, 0x05fe07ef, + 0x840c1d44, 0x480c7010, 0x58381811, 0x58382012, + 0x58381013, 0x480c7007, 0x48107008, 0x0135f72f, + 0x5838000a, 0x80040c00, 0x90381c07, 0x54041800, + 0x80040800, 0x800c1800, 0x54041800, 0x0135f72f, + 0x80140110, 0x0134001b, 0x80000040, 0x0134001b, + 0x4a01e007, 0x00020c82, 0x05fdf485, 0x4d2c0000, + 0x0105f9a8, 0x412c6800, 0x5c025800, 0x05000006, + 0x48365805, 0x90346c01, 0x0501f80c, 0x05fc05b7, + 0x0135f029, 0x492de006, 0x6022e000, 0x4a01e004, + 0x00020c91, 0x1c01f000, 0x6006e000, 0x412c6800, + 0x58f25806, 0x05fdf7f3, 0x592c4812, 0x592c020b, + 0x80004540, 0x05000023, 0x592c040b, 0x80002540, + 0x05000020, 0x592c7001, 0x80204040, 0x05000008, + 0x90200485, 0x05001006, 0x58387001, 0x803871c0, + 0x05000018, 0x80004540, 0x05fe07fa, 0x82204400, + 0x00100042, 0x50200000, 0x80380c00, 0x58042800, + 0x58043001, 0x58043802, 0x4838680d, 0x4800680c, + 0x49786814, 0x49786815, 0x48146810, 0x48186811, + 0x481c6812, 0x4820680e, 0x48246813, 0x80102040, + 0x4810680f, 0x05020005, 0x80000580, 0x1c01f000, + 0x90000541, 0x1c01f000, 0x80204000, 0x50201800, + 0x800c19c0, 0x0502000a, 0x58380001, 0x80007540, + 0x05fc07f8, 0x58380208, 0x9000050f, 0x82000400, + 0x0010004b, 0x50004000, 0x50201800, 0x4820680e, + 0x480c680c, 0x4838680d, 0x05fdf7ec, 0x4df00000, + 0x4203e000, 0x50000000, 0x5994002f, 0x80000540, + 0x05000183, 0x4c000000, 0x5c000000, 0x59947824, + 0x48032830, 0x803c0480, 0x05001004, 0x05000003, + 0x48032824, 0x0501f05f, 0x417a0800, 0x81060800, + 0x82000400, 0x000003e8, 0x05fc27fd, 0x48032824, + 0x59940033, 0x80000d40, 0x05000006, 0x80040840, + 0x48072833, 0x05020003, 0x59940034, 0x0801f800, + 0x59a8001e, 0x8400057e, 0x4803501e, 0x59a80024, + 0x8400057e, 0x48035024, 0x59a80011, 0x8400057e, + 0x48035011, 0x59a80012, 0x8400057e, 0x48035012, + 0x0125fac5, 0x0502000a, 0x59a8087b, 0x800409c0, + 0x05000007, 0xa0040c81, 0x4807507b, 0x05000002, + 0x05021003, 0x497b507b, 0x0141fb83, 0x59a800aa, + 0x8c000500, 0x0500000e, 0x59a8087b, 0x800409c0, + 0x0500000b, 0xa0040c81, 0x4807507b, 0x05000002, + 0x05021007, 0x497b507b, 0x42000000, 0x00111c8f, + 0x50000800, 0x84040d48, 0x44040000, 0x59a800bd, + 0x81041400, 0x480b50bd, 0x59a808bf, 0x81040c01, + 0x82040480, 0x00028f5a, 0x05001002, 0x41780800, + 0x480750bf, 0x81040040, 0x05000002, 0x4907c857, + 0x59e40852, 0x59a800be, 0x80040580, 0x05000004, + 0x480bc857, 0x59e40052, 0x480350be, 0x59940031, + 0x81040400, 0x48032831, 0x013dfbef, 0x5998b002, + 0x8058b1c0, 0x05000008, 0x40f25800, 0x592e5801, + 0x592c020a, 0x8c000500, 0x05fe0a2b, 0x8058b040, + 0x05fe07fb, 0x59940000, 0x90000580, 0x05020005, + 0x59940031, 0x48032832, 0x497b2831, 0x64072800, + 0x4c0c0000, 0x58d400e5, 0x8c000514, 0x05000013, + 0x59940807, 0x59941006, 0x59940030, 0x80081c80, + 0x05001004, 0x05000003, 0x480f2806, 0x0501f00b, + 0x80040840, 0x48072807, 0x05020004, 0x59940008, + 0x0801f800, 0x0501f005, 0x400c0000, 0x900c1c0a, + 0x05fc27f8, 0x480f2806, 0x5c001800, 0x4d180000, + 0x59c80040, 0x8c000534, 0x05020025, 0x417a3000, + 0x91947c09, 0x60042000, 0x58d400e5, 0x80100500, + 0x05020007, 0x801020c4, 0x903c7c05, 0x811a3000, + 0x91180585, 0x05fe07f9, 0x0501f019, 0x583c0801, + 0x583c1000, 0x59940030, 0x80080480, 0x05001005, + 0x05000004, 0x48007800, 0x80000040, 0x05fe17f2, + 0x80040840, 0x48047801, 0x05000006, 0x9000040a, + 0x48007800, 0x05fc27fb, 0xb004053f, 0x05fdf7ea, + 0x583c0004, 0x4c3c0000, 0x4c100000, 0x0801f800, + 0x5c002000, 0x5c007800, 0x05fdf7e3, 0x5c023000, + 0x8d0c0516, 0x05020017, 0x8d0c0522, 0x0500001e, + 0x5998b008, 0x8058b1c0, 0x05000012, 0x41765800, + 0x592e5800, 0x592c0003, 0x80001540, 0x05000006, + 0x05002008, 0x59940030, 0x80080480, 0x05021004, + 0x497a5803, 0x05f9fe95, 0x0501f002, 0x48025803, + 0x8058b040, 0x05fe07f3, 0x8d0c0520, 0x0500000a, + 0x59940023, 0x80001540, 0x05000007, 0x05002006, + 0x59940030, 0x80080480, 0x05021002, 0x80000580, + 0x48032823, 0x59940026, 0x80000d40, 0x05000012, + 0x59941025, 0x59940030, 0x80080480, 0x05001005, + 0x05000004, 0x48032825, 0x80000040, 0x0502100a, + 0x80040840, 0x48072826, 0x05020004, 0x59940027, + 0x0801f800, 0x0501f004, 0x9000040a, 0x48032825, + 0x05fc27f8, 0x59940004, 0x80000d40, 0x05000012, + 0x59941003, 0x59940030, 0x80080480, 0x05001005, + 0x05000004, 0x48032803, 0x80000040, 0x0502100a, + 0x80040840, 0x48072804, 0x05020004, 0x59940005, + 0x0801f800, 0x0501f004, 0x9000040a, 0x48032803, + 0x05fc27f8, 0x5994002a, 0x80000d40, 0x05000012, + 0x59941028, 0x59940030, 0x80080480, 0x05001005, + 0x05000004, 0x48032828, 0x80000040, 0x0502100a, + 0x80040840, 0x4807282a, 0x05020004, 0x5994002b, + 0x0801f800, 0x0501f004, 0x9000040a, 0x48032828, + 0x05fc27f8, 0x5994002d, 0x80000d40, 0x05000012, + 0x5994102c, 0x59940030, 0x80080480, 0x05001005, + 0x05000004, 0x4803282c, 0x80000040, 0x0502100a, + 0x80040840, 0x4807282d, 0x05020004, 0x5994002e, + 0x0801f800, 0x0501f004, 0x9000040a, 0x4803282c, + 0x05fc27f8, 0x59a8081e, 0x8c04053e, 0x0500001b, + 0x84040d3e, 0x4807501e, 0x05000018, 0x59940030, + 0x4c000000, 0x82000400, 0x000003e8, 0x48032830, + 0x80040480, 0x05001004, 0x05000003, 0x4803501e, + 0x0501f00c, 0x4c000000, 0x013dfcff, 0x013c0d6f, + 0x5c000000, 0x59a8081d, 0x80040400, 0x05fc27ff, + 0x800001c0, 0x05020002, 0x40040000, 0x4803501e, + 0x5c000000, 0x48032830, 0x59a80811, 0x8c04053e, + 0x05000021, 0x84040d3e, 0x48075011, 0x0500001e, + 0x59940030, 0x4c000000, 0x82000400, 0x000003e8, + 0x48032830, 0x80040480, 0x05001009, 0x05000008, + 0x48035011, 0x4c000000, 0x59a8100f, 0x5808040b, + 0x8c000514, 0x5c000000, 0x0500000d, 0x4c000000, + 0x60480000, 0x59a8100f, 0x0141f852, 0x013c0d6f, + 0x5c000000, 0x90000400, 0x05fc27ff, 0x800001c0, + 0x05020002, 0x60000000, 0x48035011, 0x5c000000, + 0x48032830, 0x59a80812, 0x8c04053e, 0x05000023, + 0x84040d3e, 0x48075012, 0x05000020, 0x59940030, + 0x4c000000, 0x82000400, 0x000003e8, 0x48032830, + 0x80040480, 0x05001009, 0x05000008, 0x48035012, + 0x4c000000, 0x59a81010, 0x5808040b, 0x8c000514, + 0x5c000000, 0x0500000f, 0x4c000000, 0x60500000, + 0x59a81010, 0x0141f852, 0x013c0d6f, 0x5c000000, + 0x82000400, 0x000927c0, 0x05fc27fe, 0x800001c0, + 0x05020003, 0x42000000, 0x000927c0, 0x48035012, + 0x5c000000, 0x48032830, 0x5994082f, 0x59940030, + 0x80040480, 0x01001e15, 0x4803282f, 0x59940000, + 0x0c01f001, 0x00020e5b, 0x00107aee, 0x00107ba7, + 0x5c03e000, 0x1c01f000, 0x5994002f, 0x80000000, + 0x4803282f, 0x4203e000, 0x70000000, 0x1c01f000, + 0x813e79c0, 0x05020016, 0x59a800d9, 0x80000040, + 0x05fe07ff, 0x58d400ea, 0x8c000516, 0x05fe07fe, + 0x91300400, 0x4801a8e1, 0x592c1003, 0x5808720a, + 0x8c380500, 0x0500000a, 0x592c1c0e, 0x820c1d00, + 0x000000c0, 0xb00c1d80, 0x05000005, 0x592c1813, + 0x5808000d, 0x800c0400, 0x4800100d, 0x1c01f000, + 0x5c000000, 0x4c000000, 0x4803c857, 0x4807c857, + 0x59302a03, 0x98140486, 0x05000005, 0x601c2800, + 0x0501f003, 0x60040800, 0x601c2800, 0x59325809, + 0x832c0580, 0x001141cc, 0x05000020, 0x832c0500, + 0x00ff0000, 0x05000026, 0x592c1000, 0x59301808, + 0x59302027, 0x801021c0, 0x0502003a, 0x592c040e, + 0x480a6009, 0x48166203, 0x8c000510, 0x0502001d, + 0x48065a0a, 0x820c0500, 0x04000800, 0x82000580, + 0x04000800, 0x0500002c, 0xa1300494, 0x0502100a, + 0xa1300496, 0x05001008, 0x592c040e, 0x8c00051e, + 0x05020005, 0x0141fc01, 0x59300202, 0x48025a10, + 0x4932580d, 0x05f9fd00, 0x417a7800, 0x59300009, + 0x82000d80, 0x001141cc, 0x05020003, 0x58040000, + 0x48026009, 0x80025d40, 0x05fe07b2, 0x1c01f000, + 0x832c0580, 0x001141cc, 0x05fc07f4, 0x592c040b, + 0x8c000510, 0x05fe07f1, 0x98040481, 0x05fe07dd, + 0x456a5800, 0x412ed000, 0x815eb800, 0x592c0001, + 0x80000d40, 0x05020006, 0x59c80000, 0x82000540, + 0x00001200, 0x48039000, 0x05fdf7e4, 0x05f9fcca, + 0x05fdf7e2, 0x59300021, 0x48025c13, 0x05fdf7d3, + 0x497a6027, 0x45682000, 0x4012d000, 0x815eb800, 0x59c80000, 0x82000540, 0x00001200, 0x48039000, - 0x05fdf7e4, 0x05f9fcdb, 0x05fdf7e2, 0x59300021, - 0x48025c13, 0x05fdf7d4, 0x497a6027, 0x45682000, - 0x4012d000, 0x815eb800, 0x59c80000, 0x82000540, - 0x00001200, 0x48039000, 0x05fdf7c0, 0x59300416, - 0x8c000510, 0x05000002, 0x84040d52, 0x48066004, - 0x497a6000, 0x497a6001, 0x58d400ea, 0x8c000516, - 0x05fe07fe, 0x83300400, 0xa0000000, 0x4801a8e1, - 0x1c01f000, 0x59300416, 0x8c000510, 0x05000002, - 0x84040d52, 0x59300004, 0x82000500, 0x00000100, - 0x80040d40, 0x48066004, 0x58d400ea, 0x8c000516, - 0x05fe07fe, 0x83300400, 0x40000000, 0x4801a8e1, - 0x1c01f000, 0x58d400ea, 0x82001500, 0x32000018, - 0x01420562, 0x8c000510, 0x0500002f, 0x58d410e0, - 0x82080500, 0xfffff000, 0x0502000d, 0x900a350f, - 0x80081108, 0x480bc857, 0x90080487, 0x01021dda, - 0x90080481, 0x01001dda, 0x1201f000, 0x00108566, - 0x84040d10, 0x48066004, 0x0501f019, 0x840a653e, - 0x59300804, 0x8c040520, 0x05fc07fa, 0x82040d00, - 0xfffefeff, 0x48066004, 0x8c08053e, 0x05020009, - 0x8c040514, 0x05000004, 0x05fdff72, 0x0501f8ff, - 0x0501f00b, 0x604e7000, 0x0501f920, 0x0501f008, - 0x8c040514, 0x05000004, 0x05fdff6a, 0x0501f8f7, - 0x0501f003, 0x61267000, 0x0501f918, 0x58d400ea, - 0x82001500, 0x32000018, 0x01420562, 0x8c000510, - 0x05fe07d3, 0x1c01f000, 0x59bc00ea, 0x82001500, - 0xb2000018, 0x0142058c, 0x8c000510, 0x05000009, - 0x59bc10e0, 0x80080108, 0x900a350f, 0x9800048b, - 0x05000005, 0x4803c857, 0x1201f000, 0x00108590, - 0x1c01f000, 0x4d300000, 0x59bc00ea, 0x8c000510, - 0x05fc07fe, 0x59be60e0, 0x813261c0, 0x01000dda, - 0x59300804, 0x8c04051c, 0x05020068, 0x59300027, - 0x80006d40, 0x05000065, 0x83180400, 0x00020f72, - 0x50001000, 0x5808020f, 0x8c000500, 0x0502005d, - 0x58340811, 0x8c040500, 0x0502002b, 0x5808000e, - 0x50000000, 0x48001003, 0x5808080c, 0x80040c80, - 0x58340011, 0x8c000504, 0x05000007, 0x5834200d, - 0x5834280e, 0x48101007, 0x48141008, 0x84000504, - 0x48006811, 0x5834180c, 0x5834300f, 0x58345010, - 0x40180000, 0x80284480, 0x05021002, 0x40280000, - 0x80000104, 0x80044480, 0x05001002, 0x40000800, - 0xb0040480, 0x05001002, 0x61000800, 0x48041004, - 0x800408c4, 0x48041005, 0x40040000, 0x80285480, - 0x48286810, 0x80184c80, 0x05000016, 0x4824680f, - 0x802851c0, 0x05000015, 0x05f9f8e5, 0x5c026000, - 0x1c01f000, 0x84040d00, 0x48046811, 0x5808080b, - 0x5834200d, 0x5834280e, 0x59301809, 0x580c3004, - 0x48181006, 0x48041003, 0x48101007, 0x48141008, - 0x49301010, 0x48341011, 0x60000801, 0x05fdf7d6, - 0x800c1840, 0x05020005, 0x58340011, 0x84000542, - 0x48006811, 0x05fdf7e9, 0x5834700a, 0x5834200b, - 0x80102000, 0x50100000, 0x80000540, 0x05000010, - 0x80383400, 0x58183800, 0x58184001, 0x58184802, - 0x4810680b, 0x480c680c, 0x481c680d, 0x4820680e, - 0x4824680f, 0x802851c0, 0x05fc07ec, 0x58340011, - 0x84000544, 0x48006811, 0x05fdf7d4, 0x58387001, - 0x4838680a, 0x42002000, 0x001012a3, 0x05fdf7ea, - 0x84000542, 0x4800120f, 0x4933c857, 0x05fdf7cc, - 0x0010e32d, 0x0010e33f, 0x0010e351, 0x0010e363, - 0x0010e375, 0x5830020f, 0x8c000500, 0x0502001b, - 0x58307810, 0x803c79c0, 0x05000030, 0x58300002, - 0x82000580, 0x00000100, 0x0502002e, 0x583c0c07, - 0x90040586, 0x05000003, 0x90040583, 0x05020027, - 0x58300804, 0x58300003, 0x80040c00, 0x5830000b, - 0x80047c80, 0x823c7d80, 0x00000080, 0x05020002, - 0x40000800, 0x5830000e, 0x44040000, 0x5830000d, - 0x480378e7, 0x1c01f000, 0x4803c856, 0x4978620f, - 0x8c000502, 0x05fc07fc, 0x4803c856, 0x4c300000, - 0x0141fd13, 0x5c006000, 0x58300c0f, 0x800410ca, - 0x82081400, 0x00007600, 0x4a001014, 0x00090000, - 0x800410c8, 0x82081400, 0x0000bf32, 0x58080005, - 0x84000500, 0x48001005, 0x5830000b, 0x5830080e, - 0x44000800, 0x0141fd04, 0x483fc857, 0x05fdf7e6, - 0x4d300000, 0x4d2c0000, 0x4d3c0000, 0x4c300000, - 0x58326010, 0x4933c857, 0x59325809, 0x592c020c, - 0x8400054e, 0x48025a0c, 0x417a7800, 0x0155f815, - 0x5c006000, 0x5c027800, 0x5c025800, 0x5c026000, - 0x05fdf7d5, 0x59a8029c, 0x81640480, 0x05001015, - 0x41626000, 0x41580000, 0x59300a03, 0x90040d80, - 0x05020007, 0x64226203, 0x8166c840, 0x9132c430, - 0x81600480, 0x05021008, 0x1c01f000, 0x91326430, - 0x81300c80, 0x05fc17f5, 0x42026000, 0x00111b00, - 0x05fdf7f2, 0x837ac540, 0x00111b00, 0x1c01f000, - 0x42000000, 0x0010e442, 0x0165ffdc, 0x4967c857, - 0x80026580, 0x1c01f000, 0x83300480, 0x00111b00, - 0x01001dda, 0x41580000, 0x81300480, 0x0502100a, - 0x457a6000, 0x4a026202, 0x0000ffff, 0x05011000, - 0x91300403, 0x4803c840, 0x64b7c842, 0x8166c800, - 0x1c01f000, 0x41540000, 0x81300480, 0x01021dda, - 0xa1300494, 0x05021005, 0x05000004, 0x64026203, - 0x497a6006, 0x1c01f000, 0x59a80098, 0x49335097, - 0x80000000, 0x48035098, 0x457a6000, 0x4a026202, + 0x05fdf7bf, 0x59300416, 0x8c000510, 0x05000002, + 0x84040d52, 0x48066004, 0x497a6000, 0x497a6001, + 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400, + 0xa0000000, 0x4801a8e1, 0x1c01f000, 0x59300416, + 0x8c000510, 0x05000002, 0x84040d52, 0x59300004, + 0x82000500, 0x00000100, 0x80040d40, 0x48066004, + 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400, + 0x40000000, 0x4801a8e1, 0x1c01f000, 0x58d400ea, + 0x82001500, 0x32000018, 0x01460220, 0x8c000510, + 0x0500002f, 0x58d410e0, 0x82080500, 0xfffff000, + 0x0502000d, 0x900a350f, 0x80081108, 0x480bc857, + 0x90080487, 0x01021e15, 0x90080481, 0x01001e15, + 0x1201f000, 0x00108a24, 0x84040d10, 0x48066004, + 0x0501f019, 0x840a653e, 0x59300804, 0x8c040520, + 0x05fc07fa, 0x82040d00, 0xfffefeff, 0x48066004, + 0x8c08053e, 0x05020009, 0x8c040514, 0x05000004, + 0x05fdff71, 0x0501f8fc, 0x0501f00b, 0x604e7000, + 0x0501f922, 0x0501f008, 0x8c040514, 0x05000004, + 0x05fdff69, 0x0501f8f4, 0x0501f003, 0x61267000, + 0x0501f91a, 0x58d400ea, 0x82001500, 0x32000018, + 0x01460220, 0x8c000510, 0x05fe07d3, 0x1c01f000, + 0x59bc00ea, 0x82001500, 0xb2000018, 0x0146024a, + 0x8c000510, 0x05000009, 0x59bc10e0, 0x80080108, + 0x900a350f, 0x9800048b, 0x05000005, 0x4803c857, + 0x1201f000, 0x00108a4e, 0x1c01f000, 0x4d300000, + 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0, + 0x813261c0, 0x01000e15, 0x59300804, 0x8c04051c, + 0x05020068, 0x59300027, 0x80006d40, 0x05000065, + 0x83180400, 0x00020fa9, 0x50001000, 0x5808020f, + 0x8c000500, 0x0502005d, 0x58340811, 0x8c040500, + 0x0502002b, 0x5808000e, 0x50000000, 0x48001003, + 0x5808080c, 0x80040c80, 0x58340011, 0x8c000504, + 0x05000007, 0x5834200d, 0x5834280e, 0x48101007, + 0x48141008, 0x84000504, 0x48006811, 0x5834180c, + 0x5834300f, 0x58345010, 0x40180000, 0x80284480, + 0x05021002, 0x40280000, 0x80000104, 0x80044480, + 0x05001002, 0x40000800, 0xb0040480, 0x05001002, + 0x61000800, 0x48041004, 0x800408c4, 0x48041005, + 0x40040000, 0x80285480, 0x48286810, 0x80184c80, + 0x05000016, 0x4824680f, 0x802851c0, 0x05000015, + 0x05f9f8b6, 0x5c026000, 0x1c01f000, 0x84040d00, + 0x48046811, 0x5808080b, 0x5834200d, 0x5834280e, + 0x59301809, 0x580c3004, 0x48181006, 0x48041003, + 0x48101007, 0x48141008, 0x49301010, 0x48341011, + 0x60000801, 0x05fdf7d6, 0x800c1840, 0x05020005, + 0x58340011, 0x84000542, 0x48006811, 0x05fdf7e9, + 0x5834700a, 0x5834200b, 0x80102000, 0x50100000, + 0x80000540, 0x05000010, 0x80383400, 0x58183800, + 0x58184001, 0x58184802, 0x4810680b, 0x480c680c, + 0x481c680d, 0x4820680e, 0x4824680f, 0x802851c0, + 0x05fc07ec, 0x58340011, 0x84000544, 0x48006811, + 0x05fdf7d4, 0x58387001, 0x4838680a, 0x42002000, + 0x00100042, 0x05fdf7ea, 0x84000542, 0x4800120f, + 0x4933c857, 0x05fdf7cc, 0x001122c8, 0x001122da, + 0x001122ec, 0x001122fe, 0x00112310, 0x5830020f, + 0x8c000500, 0x0502001b, 0x58307810, 0x803c79c0, + 0x05000030, 0x58300002, 0x82000580, 0x00000100, + 0x0502002e, 0x583c0c07, 0x90040586, 0x05000003, + 0x90040583, 0x05020027, 0x58300804, 0x58300003, + 0x80040c00, 0x5830000b, 0x80047c80, 0x823c7d80, + 0x00000080, 0x05020002, 0x40000800, 0x5830000e, + 0x44040000, 0x5830000d, 0x480378e7, 0x1c01f000, + 0x4803c856, 0x4978620f, 0x8c000502, 0x05fc07fc, + 0x4803c856, 0x4c300000, 0x0145f9d1, 0x5c006000, + 0x58300c0f, 0x800410ca, 0x82081400, 0x00007600, + 0x4a001014, 0x00090000, 0x800410c8, 0x82081400, + 0x0000bf32, 0x58080005, 0x84000500, 0x48001005, + 0x5830000b, 0x5830080e, 0x44000800, 0x0145f9c2, + 0x483fc857, 0x05fdf7e6, 0x4d300000, 0x4d2c0000, + 0x4d3c0000, 0x4c300000, 0x58326010, 0x4933c857, + 0x59325809, 0x592c020c, 0x8400054e, 0x48025a0c, + 0x417a7800, 0x0155fd87, 0x5c006000, 0x5c027800, + 0x5c025800, 0x5c026000, 0x05fdf7d5, 0x816404a0, + 0x05001013, 0x41626000, 0x41580000, 0x59300a03, + 0x90040d80, 0x05020007, 0x64226203, 0x8166c840, + 0x9132c430, 0x81600480, 0x05021007, 0x1c01f000, + 0x91326430, 0x81300c80, 0x05fc17f5, 0x40be6000, + 0x05fdf7f3, 0x80bec56f, 0x1c01f000, 0x42000000, + 0x001123e4, 0x0169ff57, 0x4967c857, 0x80026580, + 0x1c01f000, 0x813004af, 0x014c10c4, 0x41580000, + 0x81300480, 0x0502100a, 0x457a6000, 0x4a026202, + 0x0000ffff, 0x05011000, 0x91300403, 0x4803c840, + 0x64b3c842, 0x8166c800, 0x1c01f000, 0x41540000, + 0x81300480, 0x01021e15, 0xa1300494, 0x05021008, + 0x5930102f, 0x82080580, 0x00000800, 0x4802602f, + 0x64026203, 0x497a6006, 0x1c01f000, 0x59a8009b, + 0x80000000, 0x4803509b, 0x5930102f, 0x82080580, + 0x00000800, 0x4802602f, 0x457a6000, 0x4a026202, 0x0000ffff, 0x05011000, 0x91300403, 0x4803c840, - 0x64b7c842, 0x1c01f000, 0x4d340000, 0x4d240000, + 0x64b3c842, 0x1c01f000, 0x4d340000, 0x4d240000, 0x5932481d, 0x5932680a, 0x59300407, 0x9000051f, 0x0c01f804, 0x5c024800, 0x5c026800, 0x1c01f000, - 0x0010942a, 0x00109439, 0x00109453, 0x0002102a, - 0x0010baa6, 0x0010bac1, 0x0002111a, 0x0010942a, - 0x00109439, 0x00107f71, 0x0010949b, 0x0010942a, - 0x0010942a, 0x0010942a, 0x0010942a, 0x0010946b, - 0x0010b373, 0x0010cb60, 0x0010942a, 0x0010942a, - 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a, - 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a, - 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a, - 0x59300203, 0x90000c91, 0x01021dda, 0x0c01f001, - 0x0010946a, 0x0010a076, 0x0002103f, 0x0010a2f9, - 0x0010a3aa, 0x0010946a, 0x0010946a, 0x0010946a, - 0x0010a062, 0x0010946a, 0x0010946a, 0x0010946a, - 0x0010946a, 0x0010a5a1, 0x0010ae80, 0x0010946a, - 0x0010aeaf, 0xb1380498, 0x05021006, 0xb1380480, + 0x0010995c, 0x0010996b, 0x00109985, 0x00021063, + 0x0010c183, 0x0010c19e, 0x00021153, 0x0010995c, + 0x0010996b, 0x0010842a, 0x001099cd, 0x0010995c, + 0x0010995c, 0x0010995c, 0x0010995c, 0x0010999d, + 0x0010b919, 0x0010d2aa, 0x0010995c, 0x0010995c, + 0x0010995c, 0x0010995c, 0x0010995c, 0x0010995c, + 0x0010995c, 0x0010995c, 0x0010995c, 0x0010995c, + 0x0010995c, 0x0010995c, 0x0010995c, 0x0010995c, + 0x59300203, 0x90000c91, 0x01021e15, 0x0c01f001, + 0x0010999c, 0x0010a5bb, 0x00021078, 0x0010a83d, + 0x0010a8ee, 0x0010999c, 0x0010999c, 0x0010999c, + 0x0010a5a7, 0x0010999c, 0x0010999c, 0x0010999c, + 0x0010999c, 0x0010ab13, 0x0010b419, 0x0010999c, + 0x0010b448, 0xb1380498, 0x05021006, 0xb1380480, 0x05001004, 0x4d2c0000, 0x0c01f803, 0x5c025800, - 0x1c01f000, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, - 0x0010a0f0, 0x0010a0f0, 0x0010a0f1, 0x0010a1ed, - 0x0010a0f0, 0x0010a23e, 0x0010a0f0, 0x0010a0f0, - 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, - 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, - 0x0010a1f1, 0x0002105f, 0x0010a0f0, 0x0010a1f0, - 0x0010a1f2, 0x59325809, 0x59300008, 0x8c000536, + 0x1c01f000, 0x0010a634, 0x0010a634, 0x0010a634, + 0x0010a634, 0x0010a634, 0x0010a635, 0x0010a731, + 0x0010a634, 0x0010a782, 0x0010a634, 0x0010a634, + 0x0010a634, 0x0010a634, 0x0010a634, 0x0010a634, + 0x0010a634, 0x0010a634, 0x0010a634, 0x0010a634, + 0x0010a735, 0x00021098, 0x0010a634, 0x0010a734, + 0x0010a736, 0x59325809, 0x59300008, 0x8c000536, 0x0500000f, 0x497a580d, 0x41782800, 0x60303000, 0x60443800, 0x4c5c0000, 0x592cb805, 0x0501f84c, - 0x4d2c0000, 0x405e5800, 0x0105f992, 0x5c025800, + 0x4d2c0000, 0x405e5800, 0x0105f9c9, 0x5c025800, 0x497a5805, 0x5c00b800, 0x0501f01c, 0x59300813, 0x59301402, 0x59340200, 0x8c00050e, 0x05020023, 0x0501f82f, 0x05000005, 0x4a025a08, 0x00000103, 0x497a580d, 0x0501f009, 0x4a025a08, 0x00000103, - 0x64025a0a, 0x497a580d, 0x40040000, 0x0159feba, - 0x80000d40, 0x01520b78, 0x4806580b, 0x480a5c0a, + 0x64025a0a, 0x497a580d, 0x40040000, 0x015dfc60, + 0x80000d40, 0x015608bc, 0x4806580b, 0x480a5c0a, 0x59300008, 0x82000500, 0x04000800, 0x82000580, - 0x04000800, 0x05000017, 0x05f9faf6, 0x0159feb1, + 0x04000800, 0x05000017, 0x05f9fae3, 0x015dfc57, 0x5934000f, 0x8d0c0512, 0x05020005, 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b, 0x80000540, - 0x05fa0a77, 0x05fdf745, 0x592c020e, 0x8c000502, + 0x05fa0a64, 0x05fdf740, 0x592c020e, 0x8c000502, 0x05fc07dc, 0x800409c0, 0x05fc07e0, 0x592c020c, - 0x8c00050e, 0x05fe07dd, 0x4933c857, 0x0155f703, + 0x8c00050e, 0x05fe07dd, 0x4933c857, 0x0159f49c, 0x59300221, 0x48025c13, 0x05fdf7e8, 0x592c020e, 0x8c000500, 0x0500000d, 0x59300017, 0x592c3813, 0x801c3c80, 0x05000009, 0x64565a0a, 0x8c1c053e, @@ -14629,2070 +15123,2092 @@ static const uint32_t isp_2500_risc_code[] = { 0x812c3c00, 0x50180000, 0x44003800, 0x401cc000, 0x901cc401, 0x585c0813, 0x800409c0, 0x0500003d, 0x4807c857, 0x8c04053e, 0x05020025, 0x5930002b, - 0x80000540, 0x05000018, 0x015dfa98, 0x0500002e, + 0x80000540, 0x05000018, 0x0161f94e, 0x0500002e, 0x4c040000, 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000, 0x40002800, 0x58141003, 0x40040000, - 0x80081480, 0x48082803, 0x40140000, 0x0105ff10, + 0x80081480, 0x48082803, 0x40140000, 0x0105ffae, 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800, 0x592c020a, 0x80000540, 0x0502000b, 0x0501f005, 0x592c040c, 0x8c00051c, 0x05000002, 0x592c0806, 0x4807c857, 0x592c020a, 0x82000540, 0x00001500, 0x48025a0a, 0x0501f016, 0x5930002b, - 0x80000540, 0x0500000e, 0x015dfa98, 0x0500000a, + 0x80000540, 0x0500000e, 0x0161f94e, 0x0500000a, 0x592c020a, 0x82000540, 0x00000700, 0x48025a0a, - 0x5930002b, 0x4c040000, 0x0105ff10, 0x5c000800, + 0x5930002b, 0x4c040000, 0x0105ffae, 0x5c000800, 0x0501f008, 0x64465a0a, 0x05fdf7fa, 0x4807c856, 0x592c020a, 0x82000540, 0x00000700, 0x48025a0a, 0x4404c000, 0x5c00c000, 0x5c00b800, 0x1c01f000, - 0x59300203, 0x90003491, 0x01021dda, 0x0c01f001, - 0x0010badf, 0x0002112f, 0x0010c2aa, 0x0010c2bb, - 0x0002114a, 0x0010badf, 0x0010c39c, 0x00021178, - 0x0010badf, 0x0010badf, 0x0010badf, 0x0010badf, - 0x0010badf, 0x0010badf, 0x0010c8cd, 0x0010badf, - 0x0010c900, 0x91380593, 0x01620241, 0x59300403, - 0xb0027484, 0x01021dda, 0xb0000480, 0x01001dda, - 0x0c01f001, 0x0010c28a, 0x0002113b, 0x0010c28b, - 0x0010c29d, 0x0159f89e, 0x05000005, 0x59a8005e, + 0x59300203, 0x90003491, 0x01021e15, 0x0c01f001, + 0x0010c1bc, 0x00021168, 0x0010c9ad, 0x0010c9be, + 0x00021183, 0x0010c1bc, 0x0010ca9f, 0x000211b1, + 0x0010c1bc, 0x0010c1bc, 0x0010c1bc, 0x0010c1bc, + 0x0010c1bc, 0x0010c1bc, 0x0010d017, 0x0010c1bc, + 0x0010d04a, 0x91380593, 0x01660144, 0x59300403, + 0xb0027484, 0x01021e15, 0xb0000480, 0x01001e15, + 0x0c01f001, 0x0010c98d, 0x00021174, 0x0010c98e, + 0x0010c9a0, 0x0159fe36, 0x05000005, 0x59a80061, 0x48026205, 0x643a6203, 0x1c01f000, 0x59325809, 0x832c0500, 0x00ff0000, 0x05000004, 0x592c0c0e, - 0x8c04051a, 0x0162029a, 0x05fdfd06, 0x05fdf693, + 0x8c04051a, 0x0166019d, 0x05fdfd03, 0x05fdf68e, 0xb1380498, 0x05001007, 0xb13805a1, 0x05000003, - 0xb13805a0, 0x01020dda, 0x4933c857, 0x1c01f000, - 0xb1380588, 0x05000004, 0xb1380593, 0x0160033f, - 0x0101fdda, 0x83300580, 0x00111ad0, 0x05020008, - 0x497a6205, 0x59301202, 0x41780000, 0x0161fc4e, - 0x01600354, 0x411e6000, 0x0161f31f, 0x5930002b, + 0xb13805a0, 0x01020e15, 0x4933c857, 0x1c01f000, + 0xb1380588, 0x05000004, 0xb1380593, 0x01640242, + 0x0101fe15, 0x83300580, 0x00115a74, 0x05020008, + 0x497a6205, 0x59301202, 0x41780000, 0x0165fb4b, + 0x01640257, 0x411e6000, 0x0165f222, 0x5930002b, 0x59301013, 0x5930080a, 0x58040a00, 0x8c04050e, - 0x01620325, 0x800811c0, 0x01620330, 0x5930002b, - 0x80000540, 0x0162033a, 0x59325809, 0x592c040e, - 0x8c00051e, 0x0160031f, 0x64066203, 0x65066403, + 0x01660228, 0x800811c0, 0x01660233, 0x5930002b, + 0x80000540, 0x0166023d, 0x59325809, 0x592c040e, + 0x8c00051e, 0x01640222, 0x64066203, 0x65066403, 0x42000800, 0x80002042, 0x8c00051a, 0x05020002, - 0x84040d54, 0x05fdf534, 0xb1380498, 0x01621360, - 0xb1380480, 0x01601361, 0x0c01f001, 0x0010c369, - 0x00021191, 0x0010c372, 0x0010c377, 0x0010c369, - 0x0010c369, 0x0010c369, 0x0010c369, 0x0010c36a, - 0x0010c36e, 0x0010c36e, 0x0010c369, 0x0010c369, - 0x0010c369, 0x0010c369, 0x0010c36e, 0x0010c369, - 0x0010c36e, 0x0010c369, 0x0010c36a, 0x64066203, - 0x493a6403, 0x42000800, 0x80002042, 0x05fdf516, + 0x84040d54, 0x05fdf532, 0xb1380498, 0x01661263, + 0xb1380480, 0x01641264, 0x0c01f001, 0x0010ca6c, + 0x000211ca, 0x0010ca75, 0x0010ca7a, 0x0010ca6c, + 0x0010ca6c, 0x0010ca6c, 0x0010ca6c, 0x0010ca6d, + 0x0010ca71, 0x0010ca71, 0x0010ca6c, 0x0010ca6c, + 0x0010ca6c, 0x0010ca6c, 0x0010ca71, 0x0010ca6c, + 0x0010ca71, 0x0010ca6c, 0x0010ca6d, 0x64066203, + 0x493a6403, 0x42000800, 0x80002042, 0x05fdf514, + 0x8058b1c0, 0x01000e15, 0x5450a800, 0x8050a000, + 0x8054a800, 0x8058b040, 0x05fe07fc, 0x1c01f000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00960114, + 0x00000000, 0x00000000, 0x00000000, 0x81cffae4, 0x00000000, 0x00000000, 0x00000000, 0x00000005, 0xfffffffb, 0x02800004, 0x00000000, 0x0000c000, - 0x00000aa2, 0x073fca5a, 0x0705a5a5, 0x01928009, + 0x00000adf, 0x073fca5a, 0x0705a5a5, 0x01928009, 0x070ff0e1, 0x03800006, 0x053f2aaa, 0x070aaaaa, - 0x073f3aaa, 0x070aaaaa, 0x05958014, 0x05308000, - 0x05008000, 0x0600902f, 0x04a007df, 0x0202f051, - 0x042e4020, 0x07840018, 0x028f0361, 0x033e5000, - 0x03020000, 0x068d0025, 0x079306e2, 0x039206e4, - 0x050fb056, 0x040010e6, 0x002fb008, 0x060ff0e6, - 0x00580401, 0x054880ff, 0x06810023, 0x008c04f2, - 0x008a04f1, 0x048b04ef, 0x069f0029, 0x039809b1, - 0x069f0029, 0x079909af, 0x058e8014, 0x07840018, - 0x0678aae5, 0x04004051, 0x06818275, 0x079a0014, - 0x030430d4, 0x04052051, 0x0448b043, 0x06810034, - 0x00252080, 0x022a5001, 0x06780043, 0x030e0000, - 0x030450ff, 0x06780043, 0x03019000, 0x03a182b7, - 0x0481892c, 0x027c0045, 0x03020000, 0x0781812d, - 0x0590803f, 0x0291092a, 0x010410a6, 0x06600052, - 0x030d60ff, 0x05601041, 0x050f80ff, 0x032fa071, - 0x060ff032, 0x055c0441, 0x0681004f, 0x070ff0d1, - 0x055c0403, 0x034a88ff, 0x05818944, 0x01800114, - 0x07480000, 0x07810936, 0x0149b000, 0x0781005f, - 0x06600a01, 0x050f80ff, 0x053fa809, 0x0600001c, - 0x07f00000, 0x030ef039, 0x02860934, 0x07600339, - 0x07601839, 0x050f80ff, 0x063fa051, 0x06000002, - 0x05481000, 0x04818068, 0x06780043, 0x070000f0, - 0x06810073, 0x037c00ff, 0x06000010, 0x04818932, - 0x02800073, 0x06780043, 0x070000f0, 0x037c00ff, - 0x07000030, 0x06810073, 0x06780043, 0x070000f0, - 0x037c00ff, 0x06000020, 0x06810073, 0x02800932, - 0x0379ff00, 0x070fffff, 0x06780043, 0x07f00000, - 0x075a0000, 0x020ef001, 0x02860934, 0x05484000, - 0x02a182da, 0x03680c00, 0x0581897b, 0x04600452, - 0x030d60ff, 0x002fb001, 0x070ff069, 0x00868089, - 0x060ff079, 0x055c0441, 0x07810014, 0x012fb000, - 0x060560fb, 0x0280008f, 0x060ff079, 0x028682b5, - 0x070ff069, 0x055c0441, 0x07810014, 0x060560fb, - 0x070ff0d1, 0x0700f0ff, 0x04600252, 0x030d60ff, - 0x070ff00f, 0x055c040c, 0x058180fa, 0x070ff0d1, - 0x045c040d, 0x054b08ff, 0x07818105, 0x04600801, - 0x050f80ff, 0x053fa809, 0x0600004f, 0x03070039, - 0x0007b001, 0x03079041, 0x0307a000, 0x07489000, - 0x06818134, 0x068d00a4, 0x0207c004, 0x0107d005, - 0x0107e006, 0x0207f007, 0x02080008, 0x01081009, - 0x0108200a, 0x0208300b, 0x018680bb, 0x0448d07a, - 0x058180bb, 0x0448b07a, 0x0681093d, 0x0049707a, - 0x058180bb, 0x04604679, 0x050f80ff, 0x053fa809, - 0x06000001, 0x01680703, 0x076c0303, 0x0481893d, - 0x072d5003, 0x033e5000, 0x05002000, 0x0049107a, - 0x068100c7, 0x070ff00a, 0x0054040b, 0x058280c6, - 0x078d00c3, 0x0008200b, 0x032ff000, 0x010770ff, - 0x0108400c, 0x0208500d, 0x0678007a, 0x06000008, - 0x068100da, 0x078d00cc, 0x04603e79, 0x050f80ff, - 0x073fa041, 0x0600004a, 0x0049707a, 0x01a18a0f, - 0x068d00d3, 0x0678007a, 0x07f00000, 0x010880ff, - 0x02386008, 0x03010000, 0x028000e0, 0x068d00da, - 0x0678007a, 0x07f00000, 0x010880ff, 0x03386000, - 0x03010000, 0x072e6300, 0x020ef07f, 0x03860014, - 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819, - 0x078d00e7, 0x02080001, 0x00081002, 0x0678007a, - 0x05000200, 0x068100ef, 0x0049107a, 0x02a182d3, - 0x01082003, 0x078d00f0, 0x0448b07a, 0x078100f6, - 0x0338600c, 0x03010000, 0x028000f8, 0x02386004, - 0x03010000, 0x072e6c00, 0x03800014, 0x04600252, - 0x030d60ff, 0x07f00000, 0x07f00000, 0x0400e0d0, - 0x0648300e, 0x07810096, 0x072e500c, 0x00208001, - 0x05a007e4, 0x03800014, 0x06780043, 0x070000f0, - 0x0781093f, 0x050020ff, 0x027c0002, 0x06000010, - 0x04810110, 0x027c0002, 0x07000030, 0x04810110, - 0x0380093f, 0x0500d0d1, 0x0279ff0d, 0x070000ff, - 0x0380009a, 0x060ff032, 0x055c0441, 0x0681004f, - 0x020ef002, 0x03860924, 0x04602602, 0x050f80ff, + 0x073f3aaa, 0x070aaaaa, 0x04958016, 0x05308000, + 0x05008000, 0x0600902f, 0x070ff02e, 0x055c0409, + 0x02a1880d, 0x0202f051, 0x042e4020, 0x0684001a, + 0x028f037c, 0x033e5000, 0x03020000, 0x078d0027, + 0x04930701, 0x01920703, 0x050fb056, 0x040010e6, + 0x002fb008, 0x060ff0e6, 0x00580401, 0x054880ff, + 0x06810025, 0x028c050d, 0x038a050c, 0x078b050a, + 0x079f002b, 0x039809ed, 0x079f002b, 0x079909eb, + 0x048e8016, 0x0684001a, 0x0678aae5, 0x04004051, + 0x0681828c, 0x069a0016, 0x030430d4, 0x04052051, + 0x0448b043, 0x07810036, 0x00252080, 0x022a5001, + 0x06780043, 0x030e0000, 0x030450ff, 0x06780043, + 0x03019000, 0x03a182d8, 0x05818960, 0x027c0045, + 0x03020000, 0x07818135, 0x05908041, 0x0291095e, + 0x010410a6, 0x06600052, 0x030d60ff, 0x05601041, + 0x050f80ff, 0x032fa071, 0x060ff032, 0x055c0441, + 0x06810051, 0x070ff0d1, 0x055c0403, 0x034a88ff, + 0x05818978, 0x0080011c, 0x07480000, 0x0781096a, + 0x0149b000, 0x06810061, 0x06600a01, 0x050f80ff, + 0x053fa809, 0x0600001c, 0x07f00000, 0x030ef039, + 0x02860968, 0x07600339, 0x07601839, 0x050f80ff, + 0x063fa051, 0x06000002, 0x05481000, 0x0581806a, + 0x06780043, 0x070000f0, 0x06810075, 0x037c00ff, + 0x06000010, 0x05818966, 0x02800075, 0x06780043, + 0x070000f0, 0x037c00ff, 0x07000030, 0x06810075, + 0x06780043, 0x070000f0, 0x037c00ff, 0x06000020, + 0x06810075, 0x03800966, 0x0379ff00, 0x070fffff, + 0x06780043, 0x07f00000, 0x075a0000, 0x020ef001, + 0x02860968, 0x05484000, 0x02a182fd, 0x03680c00, + 0x058189b7, 0x04600452, 0x030d60ff, 0x002fb001, + 0x070ff069, 0x0186808b, 0x060ff079, 0x055c0441, + 0x06810016, 0x012fb000, 0x060560fb, 0x02800091, + 0x060ff079, 0x038682d4, 0x070ff069, 0x055c0441, + 0x06810016, 0x060560fb, 0x070ff0d1, 0x0700f0ff, + 0x04600252, 0x030d60ff, 0x070ff00f, 0x055c040c, + 0x058180fc, 0x070ff0d1, 0x045c040d, 0x054b08ff, + 0x0681810d, 0x04600801, 0x050f80ff, 0x053fa809, + 0x0600004f, 0x03070039, 0x0007b001, 0x03079041, + 0x0307a000, 0x07489000, 0x0781813c, 0x078d00a6, + 0x0207c004, 0x0107d005, 0x0107e006, 0x0207f007, + 0x02080008, 0x01081009, 0x0108200a, 0x0208300b, + 0x018680bd, 0x0448d07a, 0x058180bd, 0x0448b07a, + 0x07810971, 0x0049707a, 0x058180bd, 0x04604679, + 0x050f80ff, 0x053fa809, 0x06000001, 0x01680703, + 0x076c0303, 0x05818971, 0x072d5003, 0x033e5000, + 0x05002000, 0x0049107a, 0x078100c9, 0x070ff00a, + 0x0054040b, 0x048280c8, 0x078d00c5, 0x0008200b, + 0x032ff000, 0x010770ff, 0x0108400c, 0x0208500d, + 0x0678007a, 0x06000008, 0x068100dc, 0x068d00ce, + 0x04603e79, 0x050f80ff, 0x073fa041, 0x0600004a, + 0x0049707a, 0x01a18a4b, 0x068d00d5, 0x0678007a, + 0x07f00000, 0x010880ff, 0x02386008, 0x03010000, + 0x038000e2, 0x068d00dc, 0x0678007a, 0x07f00000, + 0x010880ff, 0x03386000, 0x03010000, 0x072e6300, + 0x020ef07f, 0x02860016, 0x070ff07d, 0x0450047c, + 0x050f80ff, 0x002fa819, 0x068d00e9, 0x02080001, + 0x00081002, 0x0678007a, 0x05000200, 0x068100f1, + 0x0049107a, 0x03a182f6, 0x01082003, 0x068d00f2, + 0x0448b07a, 0x068100f8, 0x0338600c, 0x03010000, + 0x038000fa, 0x02386004, 0x03010000, 0x072e6c00, + 0x02800016, 0x04600252, 0x030d60ff, 0x07f00000, + 0x07f00000, 0x0400e0d0, 0x0648300e, 0x06810098, + 0x072e500c, 0x00208001, 0x062d6002, 0x050fd00c, + 0x07f00000, 0x07f00000, 0x070ff0d1, 0x050fd0ff, + 0x05a00812, 0x02800016, 0x06780043, 0x070000f0, + 0x06810973, 0x050020ff, 0x027c0002, 0x06000010, + 0x05810118, 0x027c0002, 0x07000030, 0x05810118, + 0x02800973, 0x0500d0d1, 0x0279ff0d, 0x070000ff, + 0x0380009c, 0x060ff032, 0x055c0441, 0x06810051, + 0x020ef002, 0x02860958, 0x04602602, 0x050f80ff, 0x053fa811, 0x06000008, 0x060ff0d0, 0x055c0411, - 0x0179feff, 0x0700ffff, 0x05818924, 0x0448b043, - 0x0481012c, 0x072d6000, 0x0179fd12, 0x0600001f, + 0x0179feff, 0x0700ffff, 0x04818958, 0x0448b043, + 0x04810134, 0x072d6000, 0x0179fd12, 0x0600001f, 0x060ff0d0, 0x0379fcff, 0x0600001f, 0x055c0412, - 0x05818924, 0x0280004f, 0x027c0045, 0x03040000, - 0x0481013d, 0x027c0045, 0x03080000, 0x0681092a, - 0x0380003f, 0x06600a79, 0x050f80ff, 0x053fa80a, - 0x06000010, 0x028000a4, 0x05601041, 0x050f80ff, - 0x032fa071, 0x0280004f, 0x0204a051, 0x06780043, - 0x070000f0, 0x037c00ff, 0x06000010, 0x07818266, - 0x06600052, 0x030d60ff, 0x00948926, 0x050fb056, - 0x044880e6, 0x05818014, 0x060ff0d0, 0x0179feff, - 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x07810924, - 0x053f2000, 0x07030000, 0x019d8014, 0x070ff093, - 0x045a0201, 0x070ff093, 0x045c0401, 0x06818152, + 0x04818958, 0x02800051, 0x027c0045, 0x03040000, + 0x04810145, 0x027c0045, 0x03080000, 0x0681095e, + 0x03800041, 0x06600a79, 0x050f80ff, 0x053fa80a, + 0x06000010, 0x038000a6, 0x05601041, 0x050f80ff, + 0x032fa071, 0x02800051, 0x0204a051, 0x06780043, + 0x070000f0, 0x037c00ff, 0x06000010, 0x0781827d, + 0x06600052, 0x030d60ff, 0x0194895a, 0x050fb056, + 0x044880e6, 0x04818016, 0x060ff0d0, 0x0179feff, + 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x06810958, + 0x053f2000, 0x07030000, 0x009d8016, 0x070ff093, + 0x045a0201, 0x070ff093, 0x045c0401, 0x0781815a, 0x02046092, 0x04002046, 0x060ff002, 0x045c0401, - 0x0703a0ff, 0x04600202, 0x00540401, 0x07828160, + 0x0703a0ff, 0x04600202, 0x00540401, 0x06828168, 0x04500425, 0x070060ff, 0x0730ffff, 0x0700000f, - 0x0742000f, 0x048102ad, 0x07a0090c, 0x0648a002, - 0x07818163, 0x00047089, 0x070ff047, 0x045c0443, - 0x077800ff, 0x07f00000, 0x068182ab, 0x07780047, - 0x0500e000, 0x04818913, 0x070ff006, 0x008601f1, + 0x0742000f, 0x058102c6, 0x06a00940, 0x0648a002, + 0x0681816b, 0x00047089, 0x070ff047, 0x045c0443, + 0x077800ff, 0x07f00000, 0x068182c2, 0x07780047, + 0x0500e600, 0x05818947, 0x070ff006, 0x01860200, 0x0179fe47, 0x0700000f, 0x010480ff, 0x056c7048, - 0x0681817c, 0x007a0d4a, 0x04003801, 0x0220f001, - 0x00800189, 0x07608e48, 0x034a60ff, 0x0700f0ff, + 0x07818184, 0x007a0d4a, 0x04003801, 0x0220f001, + 0x00800191, 0x07608e48, 0x034a60ff, 0x0700f0ff, 0x074b88ff, 0x037000ff, 0x07000600, 0x05500448, 0x074d00ff, 0x045a044a, 0x0304a0ff, 0x070ff00f, - 0x01540406, 0x048201f1, 0x04031051, 0x0349c0e4, - 0x048101e0, 0x062d6001, 0x07f00000, 0x060ff0d0, - 0x034900ff, 0x068181e0, 0x072e500c, 0x062d6002, + 0x01540406, 0x05820200, 0x04031051, 0x0349c0e4, + 0x048101ef, 0x062d6001, 0x07f00000, 0x060ff0d0, + 0x034900ff, 0x068181ef, 0x072e500c, 0x062d6002, 0x07f00000, 0x0204f0d0, 0x0079fe4f, 0x070000ff, - 0x050580ff, 0x01540436, 0x078281d8, 0x060ff058, - 0x0054043b, 0x058201d8, 0x072d6000, 0x044b044f, + 0x050580ff, 0x01540436, 0x078281e7, 0x060ff058, + 0x0054043b, 0x058201e7, 0x072d6000, 0x044b044f, 0x050580ff, 0x0004d0d0, 0x0379ff4d, 0x0700ffff, - 0x0104e0d1, 0x0379ff4e, 0x0700ffff, 0x079081a6, - 0x0291092a, 0x0500e0a6, 0x0279ff0e, 0x0700ffff, + 0x0104e0d1, 0x0379ff4e, 0x0700ffff, 0x069081ae, + 0x0291095e, 0x0500e0a6, 0x0279ff0e, 0x0700ffff, 0x04600e0e, 0x050f80ff, 0x032fa009, 0x07f00000, - 0x074b0000, 0x056c0e00, 0x048101dc, 0x0660060e, + 0x074b0000, 0x056c0e00, 0x058101eb, 0x0660060e, 0x050f80ff, 0x032fa009, 0x0379ff00, 0x070000ff, - 0x076c0000, 0x068181da, 0x06602e0e, 0x050f80ff, - 0x032fa009, 0x030ef000, 0x028681bf, 0x066a0331, - 0x00201008, 0x0460040e, 0x050f80ff, 0x032fa009, - 0x07780000, 0x07ffff00, 0x045a0458, 0x070000ff, + 0x076c0000, 0x068181e9, 0x06602e0e, 0x050f80ff, + 0x032fa009, 0x030ef000, 0x028681c7, 0x066a0331, + 0x04605e0e, 0x050f80ff, 0x032fa009, 0x07780000, + 0x06000008, 0x048101ce, 0x0045e04a, 0x00201008, + 0x0460040e, 0x050f80ff, 0x032fa009, 0x07780000, + 0x07ffff00, 0x045a0458, 0x070000ff, 0x04002051, + 0x06003051, 0x01204000, 0x07305000, 0x07000060, + 0x03206009, 0x05007022, 0x0460040e, 0x050f80ff, + 0x032fa042, 0x07f00000, 0x0405804f, 0x0460520e, + 0x050f80ff, 0x053fa812, 0x06000026, 0x00800213, + 0x066a0531, 0x018001ee, 0x046a0731, 0x018001ee, + 0x066a0931, 0x018001ee, 0x046a0b31, 0x0405804f, + 0x04950210, 0x07a0031d, 0x02868213, 0x06780043, + 0x070000f0, 0x037c00ff, 0x07000030, 0x0481020e, + 0x0134bfff, 0x070fffff, 0x0104102e, 0x050fd041, + 0x07602e41, 0x050f80ff, 0x06000051, 0x032fa00a, + 0x01800236, 0x07608e48, 0x034a60ff, 0x00540425, + 0x05810205, 0x06828208, 0x06a00379, 0x02209016, + 0x0380097e, 0x0495020e, 0x07a0031d, 0x0086020e, + 0x0202f00e, 0x052e4030, 0x040fd02f, 0x06a00379, + 0x02800016, 0x0400e02f, 0x042e4020, 0x0202f051, + 0x0004100e, 0x0079fe31, 0x070000ff, 0x0481022c, + 0x06602e0e, 0x050f80ff, 0x06780031, 0x06000004, + 0x0481021f, 0x04300ead, 0x010deadd, 0x0080022a, + 0x07000033, 0x032fa00a, 0x0079fe58, 0x070000ff, + 0x070000ff, 0x04602c0e, 0x050f80ff, 0x017a0100, + 0x03400000, 0x032fa00a, 0x0080022c, 0x032fa00a, + 0x07f00000, 0x044b8c31, 0x045a040e, 0x0104b0ff, + 0x004980e5, 0x07818236, 0x06780043, 0x070000f0, + 0x037c00ff, 0x07000030, 0x078109b4, 0x024a6c46, + 0x04500423, 0x050070ff, 0x03620024, 0x050080ff, + 0x04004046, 0x0700500f, 0x03206000, 0x05601048, + 0x0700a0ff, 0x0700900a, 0x070ff005, 0x04500446, + 0x00540425, 0x05820269, 0x07601e22, 0x050f80ff, + 0x063fa032, 0x06000002, 0x03203000, 0x01204000, + 0x03205000, 0x0120b000, 0x0320c000, 0x07601841, + 0x050f80ff, 0x043fa852, 0x06000001, 0x070ff056, + 0x056c02ff, 0x050fb0ff, 0x070560ff, 0x03079041, + 0x05601041, 0x050f80ff, 0x073fa011, 0x0600003d, + 0x06780043, 0x07f00000, 0x065a007a, 0x010880ff, + 0x033e5000, 0x05002000, 0x06a00316, 0x048d0262, + 0x0208a04a, 0x0108b04b, 0x02386001, 0x03010000, + 0x072e6300, 0x028000e3, 0x0500d00a, 0x05500405, + 0x014a68ff, 0x070090ff, 0x0154040a, 0x0700c0ff, + 0x0600a023, 0x0500b024, 0x02206001, 0x07601e22, + 0x050f80ff, 0x063fa04a, 0x06000002, 0x07f00000, + 0x07601822, 0x050f80ff, 0x043fa819, 0x06000001, + 0x0600a00d, 0x0080024c, 0x06780043, 0x070000f0, + 0x050010ff, 0x027c0001, 0x07000030, 0x05810287, + 0x027c0001, 0x06000020, 0x0781094e, 0x03800966, + 0x0548e0e4, 0x0781094e, 0x0334a000, 0x03080000, + 0x0180014b, 0x074860ff, 0x068182ad, 0x054880ff, + 0x06810016, 0x070ff056, 0x050fb0ff, 0x044880e5, + 0x04810298, 0x067800e6, 0x07000041, 0x04818016, + 0x0180029f, 0x056c02ff, 0x050fb0ff, 0x070560ff, + 0x072e5300, 0x067800e6, 0x07000041, 0x04818016, + 0x072d5003, 0x033e5000, 0x05002000, 0x06780043, + 0x07f00000, 0x010880ff, 0x050fd0ff, 0x058d02a6, + 0x03386005, 0x03010000, 0x033e6000, 0x0700000c, + 0x052e5200, 0x02800016, 0x069a0016, 0x05301fff, + 0x0700000f, 0x06420001, 0x058102c6, 0x06a00940, + 0x0648a002, 0x068182b0, 0x062e5080, 0x04001089, + 0x040fd002, 0x040fd001, 0x02499001, 0x048102ef, + 0x070ff0d4, 0x050fd0ff, 0x045c0401, 0x077800ff, + 0x07f00000, 0x068182ef, 0x02800016, 0x06009051, + 0x057b8509, 0x06000002, 0x00800815, 0x06009051, + 0x077b8d09, 0x06000002, 0x00800815, 0x06009051, + 0x077b9509, 0x06000002, 0x00800815, 0x03209000, + 0x00800815, 0x06009051, 0x057ba109, 0x06000002, + 0x00800815, 0x06009051, 0x077ba909, 0x06000002, + 0x00800815, 0x06780043, 0x07009000, 0x068182e3, + 0x00498043, 0x048102e3, 0x0648a0e5, 0x058102e4, + 0x027c0045, 0x03040000, 0x048102e6, 0x075c00ff, + 0x07c00000, 0x056a02ff, 0x008002e3, 0x018002e2, + 0x06780075, 0x06000c07, 0x05810882, 0x06009051, + 0x077bcf09, 0x06000002, 0x070fc0ff, 0x05a00800, + 0x070fc0ff, 0x05308000, 0x0700a000, 0x05a00812, + 0x033e5000, 0x0700000c, 0x02800016, 0x070ff003, + 0x01540477, 0x068282fb, 0x07003077, 0x060ff051, + 0x010770ff, 0x07c00000, 0x04602601, 0x050f80ff, + 0x063fa029, 0x06000008, 0x02015010, 0x02016051, + 0x00017051, 0x00011051, 0x07601e41, 0x050f80ff, + 0x053fa83a, 0x06000008, 0x07f00000, 0x05601041, + 0x050f80ff, 0x01464000, 0x032fa00a, 0x05007011, + 0x05008012, 0x06009013, 0x0700a014, 0x0400b015, + 0x0600c016, 0x0500d017, 0x07c00000, 0x072d5003, + 0x06601879, 0x050f80ff, 0x068d0319, 0x063fa051, + 0x0600003e, 0x07c00000, 0x06005051, 0x0400e02c, + 0x0660060e, 0x050f80ff, 0x032fa009, 0x0379ff00, + 0x070000ff, 0x076c0000, 0x07810330, 0x0660600e, + 0x0500e0ff, 0x034000ff, 0x01540427, 0x06820362, + 0x03400005, 0x070ff005, 0x055c0428, 0x06810364, + 0x0280031f, 0x06a00368, 0x04605e0e, 0x050f80ff, + 0x012fa809, 0x06780001, 0x06000008, 0x06810338, + 0x0045e04a, 0x06600052, 0x030d60ff, 0x0460040e, + 0x050f80ff, 0x0004d0d0, 0x0379ff4d, 0x0700ffff, + 0x0104e0d1, 0x0379ff4e, 0x0700ffff, 0x062d6002, + 0x032fa009, 0x0204f0d0, 0x064b004f, 0x07780000, + 0x07ffff00, 0x045a044f, 0x070000ff, 0x00201008, 0x04002051, 0x06003051, 0x01204000, 0x07305000, - 0x07000060, 0x03206009, 0x05007022, 0x0460040e, - 0x050f80ff, 0x032fa042, 0x07f00000, 0x0405804f, - 0x0460520e, 0x050f80ff, 0x053fa812, 0x06000026, - 0x018001fc, 0x066a0531, 0x008001df, 0x046a0731, - 0x008001df, 0x066a0931, 0x008001df, 0x046a0b31, - 0x0405804f, 0x059501f9, 0x05a002fa, 0x038681fc, - 0x06780043, 0x070000f0, 0x037c00ff, 0x07000030, - 0x048101f7, 0x0134bfff, 0x070fffff, 0x0104102e, - 0x050fd041, 0x07602e41, 0x050f80ff, 0x06000051, - 0x032fa00a, 0x0080021f, 0x049501f7, 0x05a002fa, - 0x008601f7, 0x0202f00e, 0x052e4030, 0x040fd02f, - 0x06a0035e, 0x03800014, 0x0400e02f, 0x042e4020, - 0x0202f051, 0x0004100e, 0x0079fe31, 0x070000ff, - 0x04810215, 0x06602e0e, 0x050f80ff, 0x06780031, - 0x06000004, 0x04810208, 0x04300ead, 0x010deadd, - 0x00800213, 0x07000033, 0x032fa00a, 0x0079fe58, - 0x070000ff, 0x070000ff, 0x04602c0e, 0x050f80ff, - 0x017a0100, 0x03400000, 0x032fa00a, 0x00800215, - 0x032fa00a, 0x07f00000, 0x044b8c31, 0x045a040e, - 0x0104b0ff, 0x004980e5, 0x0681821f, 0x06780043, - 0x070000f0, 0x037c00ff, 0x07000030, 0x07810978, - 0x024a6c46, 0x04500423, 0x050070ff, 0x03620024, - 0x050080ff, 0x04004046, 0x0700500f, 0x03206000, - 0x05601048, 0x0700a0ff, 0x0700900a, 0x070ff005, - 0x04500446, 0x00540425, 0x04820252, 0x07601e22, - 0x050f80ff, 0x063fa032, 0x06000002, 0x03203000, - 0x01204000, 0x03205000, 0x0120b000, 0x0320c000, - 0x07601841, 0x050f80ff, 0x043fa852, 0x06000001, - 0x070ff056, 0x056c02ff, 0x050fb0ff, 0x070560ff, - 0x03079041, 0x05601041, 0x050f80ff, 0x073fa011, - 0x0600003d, 0x06780043, 0x07f00000, 0x065a007a, - 0x010880ff, 0x033e5000, 0x05002000, 0x05a002f3, - 0x058d024b, 0x0208a04a, 0x0108b04b, 0x02386001, - 0x03010000, 0x072e6300, 0x038000e1, 0x0500d00a, - 0x05500405, 0x014a68ff, 0x070090ff, 0x0154040a, - 0x0700c0ff, 0x0600a023, 0x0500b024, 0x02206001, - 0x07601e22, 0x050f80ff, 0x063fa04a, 0x06000002, - 0x07f00000, 0x07601822, 0x050f80ff, 0x043fa819, - 0x06000001, 0x0600a00d, 0x01800235, 0x06780043, - 0x070000f0, 0x050010ff, 0x027c0001, 0x07000030, - 0x04810270, 0x027c0001, 0x06000020, 0x0681091a, - 0x02800932, 0x0548e0e4, 0x0681091a, 0x0334a000, - 0x03080000, 0x00800143, 0x074860ff, 0x07818296, - 0x054880ff, 0x07810014, 0x070ff056, 0x050fb0ff, - 0x044880e5, 0x05810281, 0x067800e6, 0x07000041, - 0x05818014, 0x01800288, 0x056c02ff, 0x050fb0ff, - 0x070560ff, 0x072e5300, 0x067800e6, 0x07000041, - 0x05818014, 0x072d5003, 0x033e5000, 0x05002000, - 0x06780043, 0x07f00000, 0x010880ff, 0x050fd0ff, - 0x048d028f, 0x03386005, 0x03010000, 0x033e6000, - 0x0700000c, 0x052e5200, 0x03800014, 0x079a0014, - 0x05301fff, 0x0700000f, 0x06420001, 0x048102ad, - 0x07a0090c, 0x0648a002, 0x07818299, 0x062e5080, - 0x04001089, 0x040fd002, 0x040fd001, 0x02499001, - 0x058102cc, 0x070ff0d4, 0x050fd0ff, 0x045c0401, - 0x077800ff, 0x07f00000, 0x078182cc, 0x03800014, - 0x002092ab, 0x018007e7, 0x002092ad, 0x018007e7, - 0x012092af, 0x018007e7, 0x03209000, 0x018007e7, - 0x002092b3, 0x018007e7, 0x002092b5, 0x018007e7, - 0x06780043, 0x07009000, 0x068182c2, 0x00498043, - 0x048102c2, 0x0648a0e5, 0x058102c3, 0x027c0045, - 0x03040000, 0x058102c5, 0x075c00ff, 0x07c00000, - 0x056a02ff, 0x008002c2, 0x008002c1, 0x06780075, - 0x06000c07, 0x04810852, 0x012092c6, 0x070fc0ff, - 0x05a007d2, 0x070fc0ff, 0x05308000, 0x0700a000, - 0x05a007e4, 0x033e5000, 0x0700000c, 0x03800014, - 0x070ff003, 0x01540477, 0x078282d8, 0x07003077, - 0x060ff051, 0x010770ff, 0x07c00000, 0x04602601, - 0x050f80ff, 0x063fa029, 0x06000008, 0x02015010, - 0x02016051, 0x00017051, 0x00011051, 0x07601e41, - 0x050f80ff, 0x053fa83a, 0x06000008, 0x07f00000, - 0x05601041, 0x050f80ff, 0x01464000, 0x032fa00a, - 0x05007011, 0x05008012, 0x06009013, 0x0700a014, - 0x0400b015, 0x0600c016, 0x0500d017, 0x07c00000, - 0x072d5003, 0x06601879, 0x050f80ff, 0x058d02f6, - 0x063fa051, 0x0600003e, 0x07c00000, 0x06005051, - 0x0400e02c, 0x0660060e, 0x050f80ff, 0x032fa009, - 0x0379ff00, 0x070000ff, 0x076c0000, 0x0681031c, - 0x0660600e, 0x0500e0ff, 0x034000ff, 0x01540427, - 0x07820347, 0x03400005, 0x070ff005, 0x055c0428, - 0x06810349, 0x056c0805, 0x078182fc, 0x040f8029, - 0x053fa809, 0x07000024, 0x07f00000, 0x06600649, - 0x050f80ff, 0x032fa009, 0x0379ff00, 0x070000ff, - 0x076c0000, 0x078182fc, 0x07a0034d, 0x0400e049, - 0x0380031d, 0x07a0034d, 0x06600052, 0x030d60ff, - 0x0460040e, 0x050f80ff, 0x0004d0d0, 0x0379ff4d, - 0x0700ffff, 0x0104e0d1, 0x0379ff4e, 0x0700ffff, - 0x062d6002, 0x032fa009, 0x0204f0d0, 0x064b004f, - 0x07780000, 0x07ffff00, 0x045a044f, 0x070000ff, - 0x00201008, 0x04002051, 0x06003051, 0x01204000, - 0x07305000, 0x06000068, 0x03206009, 0x05007022, - 0x0460040e, 0x050f80ff, 0x032fa042, 0x07f00000, - 0x0460520e, 0x050f80ff, 0x053fa812, 0x06000026, - 0x050010d1, 0x0660360e, 0x050f80ff, 0x012fa80a, - 0x060ff00e, 0x055c042e, 0x0781034b, 0x07c00000, - 0x0400e026, 0x02800308, 0x0500e02e, 0x0380031d, - 0x0400e051, 0x02800346, 0x050f802b, 0x053fa809, - 0x06000016, 0x07f00000, 0x0340002d, 0x050f802b, - 0x053fa80a, 0x06000016, 0x07f00000, 0x0660600e, - 0x0302c0ff, 0x034000ff, 0x01540427, 0x0782035c, - 0x07c00000, 0x0202c026, 0x0280035b, 0x053f2000, - 0x03020000, 0x07c00000, 0x022a5002, 0x077800e4, - 0x07000005, 0x068184df, 0x010440d7, 0x0678aae5, - 0x06000051, 0x01a18974, 0x05908369, 0x029103f2, - 0x030400a6, 0x04600e40, 0x050f80ff, 0x022fa029, - 0x07f00000, 0x074b0000, 0x076c0600, 0x048183f4, - 0x060ff002, 0x01580403, 0x04810420, 0x070ff044, - 0x045c0404, 0x034a88ff, 0x058183f6, 0x0349f044, - 0x07818422, 0x0049b001, 0x07810381, 0x0448e001, - 0x06810383, 0x028003f8, 0x02495001, 0x048183f8, - 0x030100d8, 0x062da001, 0x0149e044, 0x07810393, - 0x018f8387, 0x0700f0d7, 0x062da001, 0x0149e00f, - 0x0681038f, 0x008f838c, 0x05a004bb, 0x048183a4, - 0x0778000f, 0x07a00000, 0x03a18412, 0x048183a4, - 0x06480001, 0x078103c3, 0x0448e001, 0x078103a9, - 0x00491001, 0x0681840d, 0x06005010, 0x05780105, + 0x06000068, 0x03206009, 0x05007022, 0x0460040e, + 0x050f80ff, 0x032fa042, 0x07f00000, 0x0460520e, + 0x050f80ff, 0x053fa812, 0x06000026, 0x050010d1, + 0x0660360e, 0x050f80ff, 0x012fa80a, 0x060ff00e, + 0x055c042e, 0x07810366, 0x07c00000, 0x0400e026, + 0x0380032b, 0x0500e02e, 0x02800338, 0x0400e051, + 0x02800361, 0x050f802b, 0x053fa809, 0x06000016, + 0x07f00000, 0x0340002d, 0x050f802b, 0x053fa80a, + 0x06000016, 0x07f00000, 0x0660600e, 0x0302c0ff, + 0x034000ff, 0x01540427, 0x07820377, 0x07c00000, + 0x0202c026, 0x02800376, 0x053f2000, 0x03020000, + 0x07c00000, 0x022a5002, 0x077800e4, 0x07000005, + 0x078184fa, 0x010440d7, 0x0678aae5, 0x06000051, + 0x00a189b0, 0x05908384, 0x0091040d, 0x030400a6, + 0x04600e40, 0x050f80ff, 0x022fa029, 0x07f00000, + 0x074b0000, 0x076c0600, 0x0781840f, 0x060ff002, + 0x01580403, 0x0481043b, 0x070ff044, 0x045c0404, + 0x034a88ff, 0x07818411, 0x0349f044, 0x0681843d, + 0x0049b001, 0x0781039c, 0x0448e001, 0x0681039e, + 0x00800413, 0x02495001, 0x06818413, 0x030100d8, + 0x062da001, 0x0149e044, 0x068103ae, 0x008f83a2, + 0x0700f0d7, 0x062da001, 0x0149e00f, 0x078103aa, + 0x008f83a7, 0x04a004d6, 0x048183bf, 0x0778000f, + 0x07a00000, 0x03a1842d, 0x048183bf, 0x06480001, + 0x078103de, 0x0448e001, 0x068103c4, 0x00491001, + 0x07818428, 0x06005010, 0x05780105, 0x07ffff00, + 0x06006051, 0x06601402, 0x050f80ff, 0x053fa812, + 0x06000002, 0x0245f040, 0x078403bd, 0x020e0040, + 0x053f2000, 0x05008000, 0x0693001a, 0x0292001a, + 0x02800016, 0x060ff079, 0x045c0440, 0x048183c8, + 0x0644f07a, 0x002fb008, 0x060ff079, 0x045c0440, + 0x048183cd, 0x0644f07a, 0x002fb008, 0x0644f001, + 0x06489001, 0x068103d5, 0x04600440, 0x050f80ff, + 0x073fa00a, 0x06000008, 0x06a009b0, 0x04601040, + 0x050f80ff, 0x012fa80a, 0x03200003, 0x06600c40, + 0x050f80ff, 0x032fa00a, 0x028003bf, 0x020ef002, + 0x01860400, 0x04600840, 0x050f80ff, 0x053fa809, + 0x06000002, 0x05780105, 0x00800440, 0x017c0105, + 0x05000400, 0x07818400, 0x04602602, 0x050f80ff, + 0x053fa809, 0x06000002, 0x07f00000, 0x06602e40, + 0x050f80ff, 0x070ff005, 0x053fa809, 0x06000002, + 0x055c0405, 0x07818400, 0x06005010, 0x05780105, 0x07ffff00, 0x06006051, 0x06601402, 0x050f80ff, - 0x053fa812, 0x06000002, 0x0245f040, 0x068403a2, - 0x020e0040, 0x053f2000, 0x05008000, 0x07930018, - 0x03920018, 0x03800014, 0x060ff079, 0x045c0440, - 0x048183ad, 0x0644f07a, 0x002fb008, 0x060ff079, - 0x045c0440, 0x058183b2, 0x0644f07a, 0x002fb008, - 0x0644f001, 0x06489001, 0x068103ba, 0x04600440, - 0x050f80ff, 0x073fa00a, 0x06000008, 0x07a00974, - 0x04601040, 0x050f80ff, 0x012fa80a, 0x03200003, - 0x06600c40, 0x050f80ff, 0x032fa00a, 0x028003a4, - 0x020ef002, 0x028603e5, 0x04600840, 0x050f80ff, - 0x053fa809, 0x06000002, 0x05780105, 0x00800440, - 0x017c0105, 0x05000400, 0x048183e5, 0x04602602, - 0x050f80ff, 0x053fa809, 0x06000002, 0x07f00000, - 0x06602e40, 0x050f80ff, 0x070ff005, 0x053fa809, - 0x06000002, 0x055c0405, 0x048183e5, 0x06005010, - 0x05780105, 0x07ffff00, 0x06006051, 0x06601402, - 0x050f80ff, 0x053fa812, 0x06000002, 0x007a0140, - 0x07c00000, 0x028003a2, 0x0644f001, 0x04601040, - 0x050f80ff, 0x012fa80a, 0x05308000, 0x03040000, - 0x04600440, 0x050f80ff, 0x073fa00a, 0x06000008, - 0x06009040, 0x04a007df, 0x028003a4, 0x02209002, - 0x018004c5, 0x03209000, 0x018004c5, 0x02209004, - 0x018004c5, 0x04a004e9, 0x062da001, 0x0149e044, - 0x04810408, 0x018f83fc, 0x0700f0d7, 0x062da001, - 0x0149e00f, 0x04810404, 0x028f8401, 0x05a004bb, - 0x048183a4, 0x0778000f, 0x07a00000, 0x03a18412, - 0x048183a4, 0x05308000, 0x05002000, 0x06009040, - 0x04a007df, 0x028003a4, 0x05308000, 0x05004000, - 0x06009040, 0x04a007df, 0x028003a4, 0x0700600f, - 0x0379ff06, 0x0700ffff, 0x05602603, 0x050f80ff, - 0x053fa809, 0x06000008, 0x0179fe11, 0x0700ffff, - 0x055c0406, 0x0781841e, 0x07c00000, 0x056a02ff, - 0x0180041d, 0x02209008, 0x018004c5, 0x053f2000, - 0x05008000, 0x02495001, 0x07818495, 0x012f200c, - 0x029d8426, 0x04600840, 0x050f80ff, 0x053fa809, - 0x07000003, 0x0448e007, 0x06818492, 0x0721f000, - 0x0249f007, 0x04810432, 0x0245f01f, 0x06000002, - 0x0049b001, 0x0781843c, 0x05601c00, 0x050f80ff, - 0x012fa809, 0x06480001, 0x05810495, 0x04481001, - 0x07818495, 0x06602840, 0x050f80ff, 0x012fa809, - 0x020ef001, 0x03868495, 0x059c0495, 0x070050d8, - 0x062da001, 0x06306002, 0x05000430, 0x04600440, - 0x050f80ff, 0x053fa812, 0x06000002, 0x028f844a, - 0x050040d8, 0x062da001, 0x0149e044, 0x0481045b, - 0x028f844f, 0x0700f0d7, 0x062da001, 0x0149e00f, - 0x04810457, 0x028f8454, 0x05a004bb, 0x0681848c, - 0x0778000f, 0x07a00000, 0x03a18412, 0x0681848c, - 0x05602600, 0x050f80ff, 0x073fa009, 0x06000001, - 0x060ff004, 0x00540402, 0x05820490, 0x06005051, - 0x06006051, 0x04602640, 0x050f80ff, 0x063fa01a, - 0x06000002, 0x07f00000, 0x06600a40, 0x050f80ff, - 0x073fa00a, 0x07000003, 0x04487007, 0x0481047a, - 0x060ff002, 0x00540404, 0x0682847a, 0x002f2008, - 0x05308000, 0x07005000, 0x06009040, 0x04a007df, - 0x04008004, 0x05a007e4, 0x03800018, 0x06780007, - 0x02800040, 0x06818489, 0x0079c107, 0x07ffffff, - 0x007a0b07, 0x03800000, 0x04780104, 0x07ffff00, - 0x04810485, 0x02455007, 0x04600840, 0x050f80ff, - 0x053fa80a, 0x07000003, 0x060ff040, 0x045a041f, - 0x030e30ff, 0x002f2008, 0x07930018, 0x03920018, - 0x03800014, 0x04004002, 0x00800462, 0x002f2008, - 0x03209000, 0x018004c5, 0x002f2008, 0x04a004e9, - 0x062da001, 0x07f00000, 0x038f8499, 0x030100d8, - 0x062da001, 0x0149e044, 0x058104aa, 0x028f849e, - 0x0700f0d7, 0x062da001, 0x0149e00f, 0x058104a6, - 0x038f84a3, 0x05a004bb, 0x05818018, 0x0778000f, - 0x07a00000, 0x03a18412, 0x05818018, 0x05308000, - 0x07005000, 0x06009040, 0x04a007df, 0x04008010, - 0x05a007e4, 0x03800018, 0x05602603, 0x050f80ff, - 0x053fa809, 0x06000008, 0x07780044, 0x073f0000, - 0x055c0411, 0x077800ff, 0x07ff0000, 0x07c00000, - 0x07602803, 0x050f80ff, 0x053fa809, 0x06000008, - 0x070ff0d8, 0x062da001, 0x055c0411, 0x0379fcff, - 0x0600001f, 0x07c00000, 0x050fd009, 0x040fd040, - 0x053f2000, 0x05008000, 0x05308000, 0x03013000, - 0x04a007df, 0x010440d7, 0x0349f044, 0x058104d2, - 0x062da001, 0x018f04d2, 0x03e00000, 0x062da001, - 0x0149e044, 0x07810018, 0x018f04d7, 0x03e00000, - 0x0700f0d7, 0x062da001, 0x0149e00f, 0x07810018, - 0x018f04dd, 0x03e00000, 0x062da001, 0x03800018, - 0x069084df, 0x0249c0e5, 0x07810018, 0x062da001, - 0x07f00000, 0x07f00000, 0x033e5000, 0x070c0000, - 0x018f04e2, 0x02800016, 0x050020d8, 0x04600440, - 0x050f80ff, 0x073fa00a, 0x06000001, 0x07c00000, - 0x002fb001, 0x008004f2, 0x012fb000, 0x03075087, - 0x058d04f3, 0x03386000, 0x03020000, 0x04482075, - 0x0781059c, 0x0648a0e6, 0x06810543, 0x0642007f, - 0x07810541, 0x0340007e, 0x060ff038, 0x0154047e, - 0x02d00531, 0x0560027d, 0x050f80ff, 0x032fa009, - 0x030ef000, 0x0186084d, 0x0107d000, 0x05601000, - 0x050f80ff, 0x032fa009, 0x03681e00, 0x076c14ff, - 0x0581850f, 0x0007e038, 0x0727c009, 0x02800515, - 0x03681e00, 0x04500420, 0x050f80ff, 0x073fa009, - 0x0700003f, 0x008004fd, 0x070ff07d, 0x0450047c, - 0x050f80ff, 0x002fa819, 0x068d0519, 0x02080001, - 0x00081002, 0x0678007a, 0x05000200, 0x07810521, - 0x0049107a, 0x02a182d3, 0x01082003, 0x078d0522, - 0x0448b07a, 0x0481852a, 0x0249007a, 0x0781052d, - 0x07780003, 0x03800000, 0x0781052d, 0x0338600c, - 0x03010000, 0x0280052f, 0x02386004, 0x03010000, - 0x072e6c00, 0x0380059c, 0x02800537, 0x03800539, - 0x0280053b, 0x0280053d, 0x0380053f, 0x03800500, - 0x0727c009, 0x02800515, 0x0727c00c, 0x02800515, - 0x0727c00f, 0x02800515, 0x0727c012, 0x02800515, - 0x0627c015, 0x02800515, 0x052e6800, 0x0380059c, - 0x044880e6, 0x04810886, 0x070ff088, 0x0179feff, - 0x070fffff, 0x03a18821, 0x06818816, 0x0249607a, - 0x0781884b, 0x060ff083, 0x02868846, 0x013e6200, - 0x07000003, 0x0448b07a, 0x06810567, 0x0049707a, - 0x06810558, 0x004940e6, 0x06810567, 0x072e6300, - 0x02800567, 0x04604679, 0x050f80ff, 0x032fa009, - 0x03680600, 0x076c00ff, 0x04818567, 0x068d055e, - 0x05001099, 0x060ff001, 0x064b0001, 0x045c0401, - 0x0179feff, 0x070000ff, 0x06810567, 0x0245a07a, - 0x068d0567, 0x008c04f2, 0x0648307a, 0x048185f2, - 0x0279127a, 0x01040222, 0x016d02ff, 0x058185d1, - 0x00798075, 0x0700f50f, 0x058185d1, 0x06483075, - 0x078105d1, 0x04602679, 0x0049b07a, 0x07810578, - 0x04602670, 0x050f80ff, 0x053fa812, 0x07000041, - 0x078d057b, 0x004940e6, 0x06810580, 0x072e6300, - 0x03800014, 0x0049707a, 0x07810584, 0x0049807a, - 0x07810014, 0x02386001, 0x07030000, 0x0648f07a, - 0x0781059a, 0x04600479, 0x050f80ff, 0x053fa809, - 0x06000002, 0x05780105, 0x07ffff00, 0x06006051, - 0x0760147b, 0x050f80ff, 0x053fa812, 0x06000002, - 0x0245f079, 0x06840594, 0x020e0079, 0x033e6a00, - 0x0700aa0a, 0x02079051, 0x03800014, 0x0444e07a, - 0x02800649, 0x078d059c, 0x008c04f2, 0x038005b8, - 0x060ff0e6, 0x077800ff, 0x07000050, 0x058185b8, - 0x02799075, 0x0500fd0f, 0x037c00ff, 0x04000808, - 0x058185b8, 0x0049107a, 0x058185b8, 0x06601879, - 0x0049b07a, 0x068105ae, 0x06601870, 0x050f80ff, - 0x063fa052, 0x0600003e, 0x078d05b1, 0x02386001, - 0x07030000, 0x033e6a00, 0x0700aa0a, 0x02079051, - 0x03800014, 0x0648c0e6, 0x048185d9, 0x0448e0e6, - 0x068105ce, 0x022095bc, 0x02490075, 0x078182cc, - 0x004920e6, 0x078105c9, 0x04a008d5, 0x05001088, - 0x00700101, 0x03100000, 0x00088001, 0x033e6000, - 0x07000088, 0x018008c5, 0x02386001, 0x07030000, - 0x033e6000, 0x06000008, 0x028006b9, 0x02799075, - 0x0700f50f, 0x07810014, 0x06601879, 0x0049b07a, - 0x068105d5, 0x06601870, 0x050080ff, 0x06309052, - 0x0600003e, 0x028005e0, 0x04602679, 0x0049b07a, - 0x078105dd, 0x04602670, 0x050080ff, 0x05309812, - 0x07000041, 0x0648007a, 0x068105f2, 0x04488075, - 0x048185f2, 0x0678007a, 0x04000108, 0x078105ee, - 0x04603e79, 0x050f80ff, 0x068d05e9, 0x073fa042, - 0x0600004a, 0x068d05ec, 0x02086051, 0x040f8008, - 0x070fa009, 0x0049107a, 0x01a186bb, 0x00798075, - 0x0600f507, 0x07818869, 0x0448b075, 0x078105f9, - 0x02493075, 0x05810865, 0x004940e6, 0x07810611, - 0x02386001, 0x030e0000, 0x05001087, 0x00494001, - 0x07810603, 0x04780b01, 0x01204000, 0x0681060e, - 0x0249f076, 0x07810609, 0x06a00a7f, 0x0647f076, - 0x004940e6, 0x0781060f, 0x03386000, 0x030e0000, - 0x033e6000, 0x0700c000, 0x03800014, 0x06a00a2c, - 0x03386000, 0x030e0000, 0x0648c0e6, 0x05818624, - 0x068d0613, 0x02386001, 0x07030000, 0x0049107a, - 0x0681061a, 0x020ef083, 0x03860624, 0x06483075, - 0x078106b7, 0x0279007a, 0x01080200, 0x01a107d2, - 0x05308000, 0x07060000, 0x06009079, 0x04a007df, - 0x038006b7, 0x06483075, 0x058107fc, 0x068d0626, - 0x02386001, 0x07030000, 0x0444e07a, 0x0648307a, - 0x0581865f, 0x0448707a, 0x07810690, 0x0448107a, - 0x05818690, 0x0648f07a, 0x06810649, 0x05a007d2, - 0x04008079, 0x0049b07a, 0x07810639, 0x04602670, - 0x04a007f2, 0x0380063a, 0x04a007f1, 0x0186865a, - 0x0049107a, 0x0581865a, 0x04600408, 0x050f80ff, - 0x053fa809, 0x06000002, 0x05780105, 0x07ffff00, - 0x0760147b, 0x050f80ff, 0x053fa812, 0x06000002, - 0x05a007db, 0x038006b7, 0x0760187b, 0x050f80ff, - 0x032fa009, 0x0349c000, 0x04818658, 0x04601079, - 0x050f80ff, 0x073fa00a, 0x0600003d, 0x07f00000, - 0x06600a79, 0x050f80ff, 0x053fa80a, 0x06000010, - 0x038006b7, 0x0046e07a, 0x03800690, 0x06009008, - 0x05308000, 0x05004000, 0x04a007df, 0x038006b7, + 0x053fa812, 0x06000002, 0x007a0140, 0x07c00000, + 0x038003bd, 0x0644f001, 0x04601040, 0x050f80ff, + 0x012fa80a, 0x05308000, 0x03040000, 0x04600440, + 0x050f80ff, 0x073fa00a, 0x06000008, 0x06009040, + 0x04a0080d, 0x028003bf, 0x02209002, 0x008004e0, + 0x03209000, 0x008004e0, 0x02209004, 0x008004e0, + 0x06a00504, 0x062da001, 0x0149e044, 0x04810423, + 0x038f8417, 0x0700f0d7, 0x062da001, 0x0149e00f, + 0x0481041f, 0x028f841c, 0x04a004d6, 0x048183bf, + 0x0778000f, 0x07a00000, 0x03a1842d, 0x048183bf, + 0x05308000, 0x05002000, 0x06009040, 0x04a0080d, + 0x028003bf, 0x05308000, 0x05004000, 0x06009040, + 0x04a0080d, 0x028003bf, 0x0700600f, 0x0379ff06, + 0x0700ffff, 0x05602603, 0x050f80ff, 0x053fa809, + 0x06000008, 0x0179fe11, 0x0700ffff, 0x055c0406, + 0x07818439, 0x07c00000, 0x056a02ff, 0x00800438, + 0x02209008, 0x008004e0, 0x053f2000, 0x05008000, + 0x02495001, 0x068184b0, 0x012f200c, 0x039d8441, + 0x04600840, 0x050f80ff, 0x053fa809, 0x07000003, + 0x0448e007, 0x068184ad, 0x0721f000, 0x0249f007, + 0x0581044d, 0x0245f01f, 0x06000002, 0x0049b001, + 0x06818457, 0x05601c00, 0x050f80ff, 0x012fa809, + 0x06480001, 0x048104b0, 0x04481001, 0x068184b0, + 0x06602840, 0x050f80ff, 0x012fa809, 0x020ef001, + 0x028684b0, 0x049c04b0, 0x070050d8, 0x062da001, + 0x06306002, 0x05000430, 0x04600440, 0x050f80ff, + 0x053fa812, 0x06000002, 0x038f8465, 0x050040d8, + 0x062da001, 0x0149e044, 0x04810476, 0x038f846a, + 0x0700f0d7, 0x062da001, 0x0149e00f, 0x05810472, + 0x038f846f, 0x04a004d6, 0x068184a7, 0x0778000f, + 0x07a00000, 0x03a1842d, 0x068184a7, 0x05602600, + 0x050f80ff, 0x073fa009, 0x06000001, 0x060ff004, + 0x00540402, 0x048204ab, 0x06005051, 0x06006051, + 0x04602640, 0x050f80ff, 0x063fa01a, 0x06000002, + 0x07f00000, 0x06600a40, 0x050f80ff, 0x073fa00a, + 0x07000003, 0x04487007, 0x05810495, 0x060ff002, + 0x00540404, 0x07828495, 0x002f2008, 0x05308000, + 0x07005000, 0x06009040, 0x04a0080d, 0x04008004, + 0x05a00812, 0x0280001a, 0x06780007, 0x02800040, + 0x068184a4, 0x0079c107, 0x07ffffff, 0x007a0b07, + 0x03800000, 0x04780104, 0x07ffff00, 0x058104a0, + 0x02455007, 0x04600840, 0x050f80ff, 0x053fa80a, + 0x07000003, 0x060ff040, 0x045a041f, 0x030e30ff, + 0x002f2008, 0x0693001a, 0x0292001a, 0x02800016, + 0x04004002, 0x0180047d, 0x002f2008, 0x03209000, + 0x008004e0, 0x002f2008, 0x06a00504, 0x062da001, + 0x07f00000, 0x038f84b4, 0x030100d8, 0x062da001, + 0x0149e044, 0x058104c5, 0x028f84b9, 0x0700f0d7, + 0x062da001, 0x0149e00f, 0x048104c1, 0x038f84be, + 0x04a004d6, 0x0481801a, 0x0778000f, 0x07a00000, + 0x03a1842d, 0x0481801a, 0x05308000, 0x07005000, + 0x06009040, 0x04a0080d, 0x04008010, 0x05a00812, + 0x0280001a, 0x05602603, 0x050f80ff, 0x053fa809, + 0x06000008, 0x07780044, 0x073f0000, 0x055c0411, + 0x077800ff, 0x07ff0000, 0x07c00000, 0x07602803, + 0x050f80ff, 0x053fa809, 0x06000008, 0x070ff0d8, + 0x062da001, 0x055c0411, 0x0379fcff, 0x0600001f, + 0x07c00000, 0x050fd009, 0x040fd040, 0x053f2000, + 0x05008000, 0x05308000, 0x03013000, 0x04a0080d, + 0x010440d7, 0x0349f044, 0x058104ed, 0x062da001, + 0x018f04ed, 0x03e00000, 0x062da001, 0x0149e044, + 0x0681001a, 0x008f04f2, 0x03e00000, 0x0700f0d7, + 0x062da001, 0x0149e00f, 0x0681001a, 0x008f04f8, + 0x03e00000, 0x062da001, 0x0280001a, 0x079084fa, + 0x0249c0e5, 0x0681001a, 0x062da001, 0x07f00000, + 0x07f00000, 0x033e5000, 0x070c0000, 0x008f04fd, + 0x03800018, 0x050020d8, 0x04600440, 0x050f80ff, + 0x073fa00a, 0x06000001, 0x07c00000, 0x002fb001, + 0x0280050d, 0x012fb000, 0x03075087, 0x068d050e, + 0x03386000, 0x03020000, 0x04482075, 0x078105b7, + 0x0648a0e6, 0x0681055e, 0x0642007f, 0x0781055c, + 0x0340007e, 0x060ff038, 0x0154047e, 0x02d0054c, + 0x0560027d, 0x050f80ff, 0x032fa009, 0x030ef000, + 0x0186087b, 0x0107d000, 0x05601000, 0x050f80ff, + 0x032fa009, 0x03681e00, 0x076c14ff, 0x0481852a, + 0x0007e038, 0x0727c009, 0x03800530, 0x03681e00, + 0x04500420, 0x050f80ff, 0x073fa009, 0x0700003f, + 0x03800518, 0x070ff07d, 0x0450047c, 0x050f80ff, + 0x002fa819, 0x068d0534, 0x02080001, 0x00081002, + 0x0678007a, 0x05000200, 0x0781053c, 0x0049107a, + 0x03a182f6, 0x01082003, 0x068d053d, 0x0448b07a, + 0x04818545, 0x0249007a, 0x07810548, 0x07780003, + 0x03800000, 0x07810548, 0x0338600c, 0x03010000, + 0x0280054a, 0x02386004, 0x03010000, 0x072e6c00, + 0x038005b7, 0x02800552, 0x02800554, 0x03800556, + 0x02800558, 0x0380055a, 0x0380051b, 0x0727c009, + 0x03800530, 0x0727c00c, 0x03800530, 0x0727c00f, + 0x03800530, 0x0727c012, 0x03800530, 0x0627c015, + 0x03800530, 0x052e6800, 0x038005b7, 0x044880e6, + 0x048108ba, 0x070ff088, 0x0179feff, 0x070fffff, + 0x02a1884f, 0x07818844, 0x0249607a, 0x06818879, + 0x060ff083, 0x03868874, 0x013e6200, 0x07000003, + 0x0448b07a, 0x07810582, 0x0049707a, 0x06810573, + 0x004940e6, 0x07810582, 0x072e6300, 0x03800582, + 0x04604679, 0x050f80ff, 0x032fa009, 0x03680600, + 0x076c00ff, 0x05818582, 0x068d0579, 0x05001099, + 0x060ff001, 0x064b0001, 0x045c0401, 0x0179feff, + 0x070000ff, 0x07810582, 0x0245a07a, 0x078d0582, + 0x028c050d, 0x0648307a, 0x05818611, 0x0279127a, + 0x01040222, 0x016d02ff, 0x058185ee, 0x00798075, + 0x0700f50f, 0x058185ee, 0x06483075, 0x078105ee, + 0x04602679, 0x0049b07a, 0x07810593, 0x04602670, + 0x050f80ff, 0x053fa812, 0x07000041, 0x078d0596, + 0x004940e6, 0x0681059b, 0x072e6300, 0x02800016, + 0x0049707a, 0x0781059f, 0x0049807a, 0x06810016, + 0x02386001, 0x07030000, 0x0648f07a, 0x068105b5, + 0x04600479, 0x050f80ff, 0x053fa809, 0x06000002, + 0x05780105, 0x07ffff00, 0x06006051, 0x0760147b, + 0x050f80ff, 0x053fa812, 0x06000002, 0x0245f079, + 0x078405af, 0x020e0079, 0x033e6a00, 0x0700aa0a, + 0x02079051, 0x02800016, 0x0444e07a, 0x02800668, + 0x078d05b7, 0x028c050d, 0x028005d3, 0x060ff0e6, + 0x077800ff, 0x07000050, 0x048185d3, 0x02799075, + 0x0500fd0f, 0x037c00ff, 0x04000808, 0x048185d3, + 0x0049107a, 0x048185d3, 0x06601879, 0x0049b07a, + 0x078105c9, 0x06601870, 0x050f80ff, 0x063fa052, + 0x0600003e, 0x078d05cc, 0x02386001, 0x07030000, + 0x033e6a00, 0x0700aa0a, 0x02079051, 0x02800016, + 0x0648c0e6, 0x058185f6, 0x0448e0e6, 0x078105eb, + 0x06009051, 0x077baf09, 0x07000005, 0x02490075, + 0x068182ef, 0x004920e6, 0x068105e6, 0x07a00909, + 0x05001088, 0x00700101, 0x03100000, 0x00088001, + 0x033e6000, 0x07000088, 0x018008f9, 0x02386001, + 0x07030000, 0x033e6000, 0x06000008, 0x038006d8, + 0x02799075, 0x0700f50f, 0x06810016, 0x06601879, + 0x0049b07a, 0x068105f2, 0x06601870, 0x050080ff, + 0x06309052, 0x0600003e, 0x038005ff, 0x0648307a, + 0x05818611, 0x04602679, 0x0049b07a, 0x078105fc, + 0x04602670, 0x050080ff, 0x05309812, 0x07000041, + 0x0648007a, 0x07810611, 0x04488075, 0x05818611, + 0x0678007a, 0x04000108, 0x0681060d, 0x04603e79, + 0x050f80ff, 0x068d0608, 0x073fa042, 0x0600004a, + 0x068d060b, 0x02086051, 0x040f8008, 0x070fa009, + 0x0049107a, 0x00a186da, 0x00798075, 0x0600f507, + 0x0681889d, 0x0448b075, 0x07810618, 0x02493075, + 0x05810895, 0x004940e6, 0x07810630, 0x02386001, + 0x030e0000, 0x05001087, 0x00494001, 0x07810622, + 0x04780b01, 0x01204000, 0x0781062d, 0x0249f076, + 0x07810628, 0x07a00abb, 0x0647f076, 0x004940e6, + 0x0781062e, 0x03386000, 0x030e0000, 0x033e6000, + 0x0700c000, 0x02800016, 0x06a00a68, 0x03386000, + 0x030e0000, 0x0648c0e6, 0x04818643, 0x068d0632, + 0x02386001, 0x07030000, 0x0049107a, 0x07810639, + 0x020ef083, 0x02860643, 0x06483075, 0x068106d6, + 0x0279007a, 0x01080200, 0x01a10800, 0x05308000, + 0x07060000, 0x06009079, 0x04a0080d, 0x028006d6, + 0x06483075, 0x0481082a, 0x068d0645, 0x02386001, + 0x07030000, 0x0444e07a, 0x0648307a, 0x0581867e, + 0x0448707a, 0x078106af, 0x0448107a, 0x058186af, + 0x0648f07a, 0x06810668, 0x05a00800, 0x04008079, + 0x0049b07a, 0x06810658, 0x04602670, 0x04a00820, + 0x03800659, 0x04a0081f, 0x00868679, 0x0049107a, + 0x04818679, 0x04600408, 0x050f80ff, 0x053fa809, + 0x06000002, 0x05780105, 0x07ffff00, 0x0760147b, + 0x050f80ff, 0x053fa812, 0x06000002, 0x05a00809, + 0x028006d6, 0x0760187b, 0x050f80ff, 0x032fa009, + 0x0349c000, 0x05818677, 0x04601079, 0x050f80ff, + 0x073fa00a, 0x0600003d, 0x07f00000, 0x06600a79, + 0x050f80ff, 0x053fa80a, 0x06000010, 0x028006d6, + 0x0046e07a, 0x038006af, 0x06009008, 0x05308000, + 0x05004000, 0x04a0080d, 0x028006d6, 0x06600679, + 0x050f80ff, 0x00201007, 0x012fa80a, 0x0046047a, + 0x034630ff, 0x050020ff, 0x06003051, 0x04601079, + 0x050f80ff, 0x073fa012, 0x06000001, 0x07f00000, 0x07601e7b, 0x050f80ff, 0x032fa011, 0x070ff000, 0x04500401, 0x030460ff, 0x060ff025, 0x00540446, - 0x06820673, 0x030460ff, 0x052e40c0, 0x04092046, - 0x0349a0e4, 0x04818670, 0x003e4080, 0x0700c000, - 0x03800674, 0x003e4080, 0x05008000, 0x03800674, - 0x04092046, 0x070ff03a, 0x01868678, 0x013e4000, - 0x07000003, 0x06a0035e, 0x06600679, 0x050f80ff, - 0x00201007, 0x012fa80a, 0x0046047a, 0x034630ff, - 0x050020ff, 0x06003051, 0x04601079, 0x050f80ff, - 0x073fa012, 0x06000001, 0x07f00000, 0x06602e79, - 0x050f80ff, 0x032fa009, 0x030ef000, 0x0286068f, - 0x06009079, 0x05308000, 0x03016000, 0x04a007df, - 0x038006b7, 0x0049407a, 0x078106b2, 0x079c06b1, - 0x04008079, 0x04a007f1, 0x018686b1, 0x06600679, - 0x050f80ff, 0x063fa029, 0x06000001, 0x0349f003, - 0x058186b1, 0x07780006, 0x07ffff00, 0x037c00ff, - 0x07000600, 0x058186b1, 0x0079fe02, 0x070000ff, - 0x056c08ff, 0x058186b1, 0x0246007a, 0x0400707a, - 0x06600679, 0x050f80ff, 0x04302001, 0x04000410, - 0x05303442, 0x02080002, 0x063fa032, 0x06000001, - 0x020e3079, 0x038006b7, 0x0447407a, 0x05a007d2, - 0x05308000, 0x03020000, 0x06009079, 0x04a007df, - 0x033e6a00, 0x0700aa0a, 0x02079051, 0x03800014, - 0x06605679, 0x050f80ff, 0x032fa009, 0x070ff000, - 0x038606d4, 0x057dfeff, 0x07ffffff, 0x078106d4, - 0x050f8000, 0x012fa811, 0x0079fe02, 0x070000ff, - 0x077d66ff, 0x060000dc, 0x058186d4, 0x060ff001, - 0x008686d5, 0x064b0002, 0x06420002, 0x060ff002, - 0x05500400, 0x050f80ff, 0x05004084, 0x073fa00a, - 0x06000002, 0x07c00000, 0x04600201, 0x050f80ff, - 0x073fa009, 0x06000001, 0x0079fe02, 0x070000ff, - 0x077d72ff, 0x070000dd, 0x058186d4, 0x064b0002, - 0x06420002, 0x06000001, 0x028006ce, 0x0605004c, - 0x028006e6, 0x079306e2, 0x05a007d8, 0x054bc450, - 0x068106e9, 0x02d006ea, 0x028006e9, 0x038006fa, - 0x038006fc, 0x0080078c, 0x0180079f, 0x01800709, - 0x038006fc, 0x01800756, 0x038006fa, 0x008007a7, - 0x018007a3, 0x038006fa, 0x018007aa, 0x008007c7, - 0x01800778, 0x038006fa, 0x038006fa, 0x032096fa, - 0x018007e7, 0x073c3fff, 0x0700000f, 0x0379ff50, - 0x070fffff, 0x060ff079, 0x055c0450, 0x0581079c, - 0x002fb008, 0x060ff079, 0x055c0450, 0x0481079b, - 0x05a007ca, 0x00800794, 0x0179fe50, 0x070fffff, - 0x070050ff, 0x060ff079, 0x055c0405, 0x04810713, - 0x002fb008, 0x060ff079, 0x055c0405, 0x06818798, - 0x073c3fff, 0x0700000f, 0x070ff087, 0x017980ff, - 0x0600f507, 0x07818722, 0x02203040, 0x05002087, - 0x0049d002, 0x07818722, 0x002fb008, 0x07006087, - 0x002fb008, 0x0149d006, 0x05810750, 0x05930727, - 0x01257000, 0x052e4003, 0x072e5030, 0x0304c050, - 0x02400057, 0x06740057, 0x06000004, 0x0782001b, - 0x004940e6, 0x01a18a72, 0x0049107a, 0x01a186bb, - 0x04002083, 0x07003084, 0x04004085, 0x04602679, - 0x0049b07a, 0x05810736, 0x04602670, 0x050f80ff, - 0x063fa01a, 0x06000001, 0x05a007d2, 0x05a008de, - 0x033e6a00, 0x0700aa0a, 0x062e5020, 0x07a0090c, - 0x02798102, 0x070000ff, 0x007c8002, 0x07000055, - 0x0581074d, 0x072e50c0, 0x0648a002, 0x0581074d, - 0x040fd002, 0x058d0748, 0x03386006, 0x03010000, - 0x033e6000, 0x0700000c, 0x003e4002, 0x07000a00, - 0x028006b9, 0x07420003, 0x0681871a, 0x00798002, - 0x0600f507, 0x07818722, 0x0180072b, 0x0493075d, - 0x01257000, 0x073c3fff, 0x0700000f, 0x052e4003, - 0x072e5030, 0x0304c050, 0x067800e6, 0x07000041, - 0x04810762, 0x05a008e7, 0x0681876d, 0x002fb008, - 0x067800e6, 0x07000041, 0x04810768, 0x05a008e7, - 0x0681876d, 0x062e5020, 0x003e4002, 0x07000a00, - 0x03e00000, 0x03800014, 0x06740057, 0x07000018, - 0x0782001b, 0x05a008de, 0x033e6a00, 0x0700aa0a, - 0x002fb008, 0x05a008de, 0x033e6a00, 0x0700aa0a, - 0x00800768, 0x0379ff50, 0x070fffff, 0x060ff079, - 0x055c0450, 0x0781877e, 0x0245507a, 0x002fb008, - 0x060ff079, 0x055c0450, 0x06818783, 0x0245507a, - 0x002fb008, 0x05601050, 0x050f80ff, 0x012fa809, - 0x02455001, 0x05601050, 0x050f80ff, 0x012fa80a, - 0x01800795, 0x0795879c, 0x0179fe50, 0x070fffff, - 0x045c042f, 0x0781879c, 0x0202f051, 0x042e4020, - 0x01800795, 0x002fb008, 0x003e4002, 0x07000a00, - 0x0380001b, 0x0693879b, 0x062e5020, 0x042e4002, - 0x002fb008, 0x013e4000, 0x05000e00, 0x0380001b, - 0x0179fe50, 0x070fffff, 0x010210ff, 0x0380001b, - 0x0179fe50, 0x070fffff, 0x050340ff, 0x01800795, - 0x023e5008, 0x05000800, 0x0380001b, 0x0179fe50, - 0x070fffff, 0x0102e0ff, 0x05602c2e, 0x050f80ff, - 0x05222000, 0x07223000, 0x05224000, 0x07225000, - 0x07226000, 0x05227000, 0x05228000, 0x07229000, - 0x0722a000, 0x0522b000, 0x063fa051, 0x07000011, - 0x0202c026, 0x0522d000, 0x052e400c, 0x0560402e, - 0x050f80ff, 0x032fa021, 0x04032002, 0x07033003, - 0x07420000, 0x07036000, 0x0403b001, 0x0380001b, - 0x030430d4, 0x062e5008, 0x00800279, 0x05601050, - 0x050f80ff, 0x032fa009, 0x03460000, 0x008007d5, - 0x0246007a, 0x0045207a, 0x008007d3, 0x0246007a, - 0x0600007a, 0x04601079, 0x050f80ff, 0x032fa00a, - 0x07c00000, 0x039287d8, 0x070500e1, 0x07c00000, - 0x0245f008, 0x048407dc, 0x020e0008, 0x07c00000, - 0x070ff009, 0x065a0008, 0x058407e1, 0x020e0008, - 0x07c00000, 0x058407e4, 0x020e0008, 0x07c00000, - 0x05308000, 0x0500d000, 0x04a007df, 0x04a007ec, - 0x03800014, 0x052e4300, 0x072e500c, 0x073c3fff, - 0x0700000f, 0x07c00000, 0x04602608, 0x050f80ff, - 0x032fa011, 0x076a0000, 0x078187fa, 0x066a0001, - 0x058107fa, 0x06006051, 0x07c00000, 0x02206001, - 0x07c00000, 0x0678007a, 0x06000020, 0x06818804, - 0x0049107a, 0x04810804, 0x073c3fff, 0x0700000f, - 0x02800626, 0x040fd079, 0x0648307a, 0x05810809, - 0x06a0096b, 0x0080080e, 0x05a007cf, 0x05308000, - 0x05001000, 0x06009079, 0x04a007df, 0x048d080e, - 0x040fd079, 0x033e6a00, 0x0600aa0e, 0x02079051, - 0x03386006, 0x03010000, 0x03800014, 0x052e6200, - 0x0648307a, 0x0581081b, 0x06a0096b, 0x018008c5, - 0x05a007cf, 0x05308000, 0x05001000, 0x06009079, - 0x04a007df, 0x018008c5, 0x050010ff, 0x0448b07a, - 0x0481082f, 0x0049107a, 0x0481082f, 0x048d0826, - 0x04604679, 0x050f80ff, 0x032fa009, 0x03680600, - 0x056c02ff, 0x0681882f, 0x046c1001, 0x04810831, - 0x056a02ff, 0x07c00000, 0x04a00834, 0x075c00ff, - 0x07c00000, 0x048d0834, 0x060ff07c, 0x070ff07d, - 0x070ff07e, 0x060ff07f, 0x060ff080, 0x070ff081, - 0x070ff082, 0x060ff083, 0x070ff084, 0x060ff085, - 0x0338600c, 0x03010000, 0x038a8841, 0x058d0842, - 0x03386000, 0x03020000, 0x07c00000, 0x06483075, - 0x0781884b, 0x0448d07a, 0x078187fc, 0x040fd079, - 0x052e6200, 0x038005d1, 0x0648307a, 0x068182b3, - 0x05a007d2, 0x0120984d, 0x018007e7, 0x04002089, + 0x0782069f, 0x030460ff, 0x052e40c0, 0x04092046, + 0x0349a0e4, 0x0581869c, 0x003e4080, 0x0700c000, + 0x038006a0, 0x003e4080, 0x05008000, 0x038006a0, + 0x04092046, 0x070ff03a, 0x008686a4, 0x013e4000, + 0x07000003, 0x06a00379, 0x06602e79, 0x050f80ff, + 0x032fa009, 0x030ef000, 0x028606ae, 0x06009079, + 0x05308000, 0x03016000, 0x04a0080d, 0x028006d6, + 0x0049407a, 0x078106d1, 0x069c06d0, 0x04008079, + 0x04a0081f, 0x008686d0, 0x06600679, 0x050f80ff, + 0x063fa029, 0x06000001, 0x0349f003, 0x048186d0, + 0x07780006, 0x07ffff00, 0x037c00ff, 0x07000600, + 0x048186d0, 0x0079fe02, 0x070000ff, 0x056c08ff, + 0x048186d0, 0x0246007a, 0x0400707a, 0x06600679, + 0x050f80ff, 0x04302001, 0x04000410, 0x05303442, + 0x02080002, 0x063fa032, 0x06000001, 0x020e3079, + 0x028006d6, 0x0447407a, 0x05a00800, 0x05308000, + 0x03020000, 0x06009079, 0x04a0080d, 0x033e6a00, + 0x0700aa0a, 0x02079051, 0x02800016, 0x06605679, + 0x050f80ff, 0x032fa009, 0x070ff000, 0x038606f3, + 0x057dfeff, 0x07ffffff, 0x078106f3, 0x050f8000, + 0x012fa811, 0x0079fe02, 0x070000ff, 0x077d66ff, + 0x060000dc, 0x058186f3, 0x060ff001, 0x008686f4, + 0x064b0002, 0x06420002, 0x060ff002, 0x05500400, + 0x050f80ff, 0x05004084, 0x073fa00a, 0x06000002, + 0x07c00000, 0x04600201, 0x050f80ff, 0x073fa009, + 0x06000001, 0x0079fe02, 0x070000ff, 0x077d72ff, + 0x070000dd, 0x058186f3, 0x064b0002, 0x06420002, + 0x06000001, 0x038006ed, 0x0605004c, 0x01800705, + 0x04930701, 0x05a00806, 0x054bc450, 0x04810708, + 0x01d00709, 0x00800708, 0x00800719, 0x0180071d, + 0x018007bd, 0x008007d0, 0x0080072a, 0x0180071d, + 0x01800787, 0x00800719, 0x018007d4, 0x00800719, + 0x00800719, 0x018007d7, 0x018007f5, 0x018007a9, + 0x00800719, 0x00800719, 0x06009051, 0x037a3309, + 0x06000007, 0x00800815, 0x073c3fff, 0x0700000f, + 0x0379ff50, 0x070fffff, 0x060ff079, 0x055c0450, + 0x048107cd, 0x002fb008, 0x060ff079, 0x055c0450, + 0x058107cc, 0x04a007f8, 0x018007c5, 0x0179fe50, + 0x070fffff, 0x070050ff, 0x060ff079, 0x055c0405, + 0x0481073d, 0x002fb008, 0x060ff079, 0x055c0405, + 0x0481073d, 0x050fd005, 0x05601005, 0x050f80ff, + 0x032fa009, 0x03460000, 0x05601005, 0x050f80ff, + 0x032fa00a, 0x018007c9, 0x073c3fff, 0x0700000f, + 0x070ff087, 0x017980ff, 0x0600f507, 0x0681874c, + 0x02203040, 0x05002087, 0x0049d002, 0x0681874c, + 0x002fb008, 0x07006087, 0x002fb008, 0x0149d006, + 0x05810781, 0x04930751, 0x01257000, 0x052e4003, + 0x072e5030, 0x0304c050, 0x02400057, 0x06740057, + 0x06000004, 0x0782001d, 0x004940e6, 0x00a18aae, + 0x0448b07a, 0x0481075e, 0x04603e79, 0x050f80ff, + 0x048d075b, 0x073fa042, 0x0600004a, 0x0049107a, + 0x00a186da, 0x04002083, 0x07003084, 0x04004085, + 0x04602679, 0x0049b07a, 0x04810767, 0x04602670, + 0x050f80ff, 0x063fa01a, 0x06000001, 0x05a00800, + 0x07a00912, 0x033e6a00, 0x0700aa0a, 0x062e5020, + 0x06a00940, 0x02798102, 0x070000ff, 0x007c8002, + 0x07000055, 0x0581077e, 0x072e50c0, 0x0648a002, + 0x0581077e, 0x040fd002, 0x048d0779, 0x03386006, + 0x03010000, 0x033e6000, 0x0700000c, 0x003e4002, + 0x07000a00, 0x038006d8, 0x07420003, 0x07818744, + 0x00798002, 0x0600f507, 0x0681874c, 0x01800755, + 0x0593078e, 0x01257000, 0x073c3fff, 0x0700000f, + 0x052e4003, 0x072e5030, 0x0304c050, 0x067800e6, + 0x07000041, 0x05810793, 0x07a0091b, 0x0681879e, + 0x002fb008, 0x067800e6, 0x07000041, 0x05810799, + 0x07a0091b, 0x0681879e, 0x062e5020, 0x003e4002, + 0x07000a00, 0x03e00000, 0x02800016, 0x06740057, + 0x07000018, 0x0782001d, 0x07a00912, 0x033e6a00, + 0x0700aa0a, 0x002fb008, 0x07a00912, 0x033e6a00, + 0x0700aa0a, 0x01800799, 0x0379ff50, 0x070fffff, + 0x060ff079, 0x055c0450, 0x078187af, 0x0245507a, + 0x002fb008, 0x060ff079, 0x055c0450, 0x078187b4, + 0x0245507a, 0x002fb008, 0x05601050, 0x050f80ff, + 0x012fa809, 0x02455001, 0x05601050, 0x050f80ff, + 0x012fa80a, 0x018007c6, 0x069587cd, 0x0179fe50, + 0x070fffff, 0x045c042f, 0x068187cd, 0x0202f051, + 0x042e4020, 0x018007c6, 0x002fb008, 0x003e4002, + 0x07000a00, 0x0380001d, 0x079387cc, 0x062e5020, + 0x042e4002, 0x002fb008, 0x013e4000, 0x05000e00, + 0x0380001d, 0x0179fe50, 0x070fffff, 0x010210ff, + 0x0380001d, 0x023e5008, 0x05000800, 0x0380001d, + 0x0179fe50, 0x070fffff, 0x0102e0ff, 0x05602c2e, + 0x050f80ff, 0x05222000, 0x07223000, 0x05224000, + 0x07225000, 0x07226000, 0x05227000, 0x05228000, + 0x0722a000, 0x0522b000, 0x060ff029, 0x063fa051, + 0x07000011, 0x030290ff, 0x0202c026, 0x0522d000, + 0x052e400c, 0x0560402e, 0x050f80ff, 0x032fa021, + 0x04032002, 0x07033003, 0x07420000, 0x07036000, + 0x0403b001, 0x0380001d, 0x030430d4, 0x062e5008, + 0x01800290, 0x05601050, 0x050f80ff, 0x032fa009, + 0x03460000, 0x01800803, 0x0246007a, 0x0045207a, + 0x00800801, 0x0246007a, 0x0600007a, 0x04601079, + 0x050f80ff, 0x032fa00a, 0x07c00000, 0x03928806, + 0x070500e1, 0x07c00000, 0x0245f008, 0x0584080a, + 0x020e0008, 0x07c00000, 0x070ff009, 0x065a0008, + 0x0584080f, 0x020e0008, 0x07c00000, 0x05840812, + 0x020e0008, 0x07c00000, 0x05308000, 0x0500d000, + 0x04a0080d, 0x04a0081a, 0x02800016, 0x052e4300, + 0x072e500c, 0x073c3fff, 0x0700000f, 0x07c00000, + 0x04602608, 0x050f80ff, 0x032fa011, 0x076a0000, + 0x07818828, 0x066a0001, 0x05810828, 0x06006051, + 0x07c00000, 0x02206001, 0x07c00000, 0x0678007a, + 0x06000020, 0x06818832, 0x0049107a, 0x04810832, + 0x073c3fff, 0x0700000f, 0x02800645, 0x040fd079, + 0x0648307a, 0x04810837, 0x06a009a7, 0x0180083c, + 0x04a007fd, 0x05308000, 0x05001000, 0x06009079, + 0x04a0080d, 0x058d083c, 0x040fd079, 0x033e6a00, + 0x0600aa0e, 0x02079051, 0x03386006, 0x03010000, + 0x02800016, 0x052e6200, 0x0648307a, 0x04810849, + 0x06a009a7, 0x018008f9, 0x04a007fd, 0x05308000, + 0x05001000, 0x06009079, 0x04a0080d, 0x018008f9, + 0x050010ff, 0x0448b07a, 0x0481085d, 0x0049107a, + 0x0481085d, 0x048d0854, 0x04604679, 0x050f80ff, + 0x032fa009, 0x03680600, 0x056c02ff, 0x0681885d, + 0x046c1001, 0x0581085f, 0x056a02ff, 0x07c00000, + 0x04a00862, 0x075c00ff, 0x07c00000, 0x048d0862, + 0x060ff07c, 0x070ff07d, 0x070ff07e, 0x060ff07f, + 0x060ff080, 0x070ff081, 0x070ff082, 0x060ff083, + 0x070ff084, 0x060ff085, 0x0338600c, 0x03010000, + 0x038a886f, 0x048d0870, 0x03386000, 0x03020000, + 0x07c00000, 0x06483075, 0x06818879, 0x0448d07a, + 0x0681882a, 0x040fd079, 0x052e6200, 0x038005ee, + 0x0648307a, 0x068182d0, 0x05a00800, 0x06009051, + 0x017af709, 0x06000008, 0x00800815, 0x04002089, 0x04780102, 0x07f00000, 0x05001088, 0x04740101, 0x03100000, 0x04780101, 0x07f00000, 0x060ff002, - 0x045c0401, 0x06818867, 0x00088001, 0x033e6000, + 0x045c0401, 0x07818899, 0x00088001, 0x033e6000, 0x070000c0, 0x0220901a, 0x05308000, 0x01012000, - 0x04a007df, 0x018008c0, 0x01209865, 0x018007e7, - 0x00209867, 0x018002ca, 0x040fd075, 0x040fd07a, - 0x040fd079, 0x0648307a, 0x05810874, 0x06780075, - 0x06000007, 0x07818881, 0x00494075, 0x07818874, - 0x06a0096b, 0x06486075, 0x078182b1, 0x00494075, - 0x06818894, 0x02490075, 0x078182c6, 0x04487075, - 0x06818889, 0x0448b07a, 0x04810880, 0x00492075, - 0x0781889f, 0x00800897, 0x05308000, 0x03010000, - 0x06009079, 0x04a007df, 0x03800014, 0x0448e0e6, - 0x0581859c, 0x018002af, 0x0648307a, 0x078188c0, - 0x004940e6, 0x01a18a72, 0x05308000, 0x0500e000, - 0x06009079, 0x04a007df, 0x04008089, 0x05a007e4, - 0x018008c0, 0x00208007, 0x05a007e4, 0x03800014, - 0x05a007cf, 0x05308000, 0x0700f000, 0x06009079, - 0x07000088, 0x04a008a8, 0x04a007df, 0x03800014, - 0x004940e6, 0x01a18a72, 0x05308000, 0x01011000, - 0x06009079, 0x07000088, 0x04a008a8, 0x04a007df, - 0x03800014, 0x03386000, 0x07030000, 0x07f00000, - 0x048d08ab, 0x033e6a00, 0x0600aa0e, 0x02079051, - 0x040fd075, 0x0448b075, 0x058108b7, 0x02493075, - 0x058108b7, 0x05301005, 0x03010000, 0x008008b9, + 0x04a0080d, 0x008008f4, 0x06009051, 0x077b2b09, + 0x06000008, 0x00800815, 0x06009051, 0x077b3309, + 0x06000008, 0x018002ed, 0x040fd075, 0x040fd07a, + 0x040fd079, 0x0648307a, 0x048108a8, 0x06780075, + 0x06000007, 0x068188b5, 0x00494075, 0x068188a8, + 0x06a009a7, 0x06486075, 0x068182ce, 0x00494075, + 0x068188c8, 0x02490075, 0x078182e7, 0x04487075, + 0x078188bd, 0x0448b07a, 0x058108b4, 0x00492075, + 0x068188d3, 0x008008cb, 0x05308000, 0x03010000, + 0x06009079, 0x04a0080d, 0x02800016, 0x0448e0e6, + 0x058185b7, 0x018002ca, 0x0648307a, 0x068188f4, + 0x004940e6, 0x00a18aae, 0x05308000, 0x0500e000, + 0x06009079, 0x04a0080d, 0x04008089, 0x05a00812, + 0x008008f4, 0x00208007, 0x05a00812, 0x02800016, + 0x04a007fd, 0x05308000, 0x0700f000, 0x06009079, + 0x07000088, 0x04a008dc, 0x04a0080d, 0x02800016, + 0x004940e6, 0x00a18aae, 0x05308000, 0x01011000, + 0x06009079, 0x07000088, 0x04a008dc, 0x04a0080d, + 0x02800016, 0x03386000, 0x07030000, 0x07f00000, + 0x048d08df, 0x033e6a00, 0x0600aa0e, 0x02079051, + 0x040fd075, 0x0448b075, 0x058108eb, 0x02493075, + 0x058108eb, 0x05301005, 0x03010000, 0x018008ed, 0x05301006, 0x03010000, 0x05002087, 0x06485002, - 0x068188b9, 0x0744c000, 0x01088000, 0x02086001, - 0x07c00000, 0x05001088, 0x040fd001, 0x04a008d5, + 0x078188ed, 0x0744c000, 0x01088000, 0x02086001, + 0x07c00000, 0x05001088, 0x040fd001, 0x07a00909, 0x0644c001, 0x00088001, 0x070fc0ff, 0x033e6a00, - 0x0600aa0e, 0x004920e6, 0x068188cb, 0x02079051, - 0x048d08cb, 0x060ff089, 0x034990ff, 0x058108d2, - 0x03386005, 0x03010000, 0x03800014, 0x03386006, - 0x03010000, 0x03800014, 0x048d08d5, 0x03386000, - 0x07030000, 0x07f00000, 0x048d08d9, 0x070ff087, - 0x074850ff, 0x068188da, 0x07c00000, 0x058d08de, - 0x02386001, 0x07030000, 0x07f00000, 0x058d08e2, - 0x070ff087, 0x074850ff, 0x068188e3, 0x07c00000, - 0x05002087, 0x0049d002, 0x078188f6, 0x002fb008, - 0x067800e6, 0x07000041, 0x002fb008, 0x078188f6, - 0x07a0090c, 0x0448e002, 0x058108f9, 0x0648a002, - 0x05818903, 0x06486002, 0x048108fd, 0x02400057, - 0x056a02ff, 0x07c00000, 0x07a0090c, 0x06788102, - 0x06000004, 0x078188f6, 0x04002089, 0x070ff0d4, - 0x045c0402, 0x077800ff, 0x07f00000, 0x078188f6, - 0x00202010, 0x018c08f6, 0x07f00000, 0x06420002, - 0x04818904, 0x05a008de, 0x033e6a00, 0x0700aa0a, + 0x0600aa0e, 0x004920e6, 0x078188ff, 0x02079051, + 0x058d08ff, 0x060ff089, 0x034990ff, 0x07810906, + 0x03386005, 0x03010000, 0x02800016, 0x03386006, + 0x03010000, 0x02800016, 0x078d0909, 0x03386000, + 0x07030000, 0x07f00000, 0x068d090d, 0x070ff087, + 0x074850ff, 0x0481890e, 0x07c00000, 0x078d0912, + 0x02386001, 0x07030000, 0x07f00000, 0x068d0916, + 0x070ff087, 0x074850ff, 0x05818917, 0x07c00000, + 0x05002087, 0x0049d002, 0x0481892a, 0x002fb008, + 0x067800e6, 0x07000041, 0x002fb008, 0x0481892a, + 0x06a00940, 0x0448e002, 0x0781092d, 0x0648a002, + 0x04818937, 0x06486002, 0x06810931, 0x02400057, + 0x056a02ff, 0x07c00000, 0x06a00940, 0x06788102, + 0x06000004, 0x0481892a, 0x04002089, 0x070ff0d4, + 0x045c0402, 0x077800ff, 0x07f00000, 0x0481892a, + 0x00202010, 0x028c092a, 0x07f00000, 0x06420002, + 0x04818938, 0x07a00912, 0x033e6a00, 0x0700aa0a, 0x07c00000, 0x07f00000, 0x060ff0a2, 0x045a0202, - 0x060ff0a2, 0x045c0402, 0x0481890d, 0x07c00000, - 0x06a0035e, 0x03495047, 0x07810918, 0x0320901d, - 0x0280094a, 0x0220901f, 0x0280094a, 0x014980e4, - 0x05818014, 0x013e4000, 0x07003000, 0x05600e35, - 0x050f80ff, 0x07a00990, 0x01208003, 0x05a007e4, - 0x02800932, 0x03209009, 0x0280094a, 0x03209011, - 0x0280094a, 0x02209007, 0x0280094a, 0x03209003, - 0x0280094a, 0x00497043, 0x05818928, 0x00494043, - 0x07810924, 0x02209001, 0x0280094a, 0x0220900d, - 0x0280094a, 0x0320900f, 0x0280094a, 0x03493000, - 0x0681093b, 0x027c0045, 0x070a0000, 0x06810946, - 0x0220900b, 0x0280094a, 0x0320900c, 0x02800940, - 0x02209013, 0x05308000, 0x01012000, 0x04a007df, - 0x01800288, 0x03209005, 0x0280094a, 0x072e500c, - 0x00208002, 0x05a007e4, 0x03800014, 0x0349c0e4, - 0x06810967, 0x072d6000, 0x07f00000, 0x060000d0, + 0x060ff0a2, 0x045c0402, 0x05818941, 0x07c00000, + 0x06a00379, 0x03495047, 0x0681094c, 0x0320901d, + 0x0380097e, 0x0220901f, 0x0380097e, 0x014980e4, + 0x04818016, 0x013e4000, 0x07003000, 0x05600e35, + 0x050f80ff, 0x07a009cc, 0x01208003, 0x05a00812, + 0x03800966, 0x03209009, 0x0380097e, 0x03209011, + 0x0380097e, 0x02209007, 0x0380097e, 0x03209003, + 0x0380097e, 0x00497043, 0x0581895c, 0x00494043, + 0x06810958, 0x02209001, 0x0380097e, 0x0220900d, + 0x0380097e, 0x0320900f, 0x0380097e, 0x03493000, + 0x0781096f, 0x027c0045, 0x070a0000, 0x0681097a, + 0x0220900b, 0x0380097e, 0x0320900c, 0x03800974, + 0x02209013, 0x05308000, 0x01012000, 0x04a0080d, + 0x0180029f, 0x03209005, 0x0380097e, 0x072e500c, + 0x00208002, 0x05a00812, 0x02800016, 0x0349c0e4, + 0x0681099b, 0x072d6000, 0x07f00000, 0x060000d0, 0x0379ff00, 0x0700ffff, 0x04605232, 0x050f80ff, 0x032fa00a, 0x070000d1, 0x0379ff00, 0x0700ffff, 0x04605432, 0x050f80ff, 0x032fa00a, 0x062d6002, 0x07f00000, 0x0204f0d0, 0x0079fe4f, 0x070000ff, 0x074b0a00, 0x044b044f, 0x075a0000, 0x04600432, - 0x050f80ff, 0x032fa00a, 0x00041032, 0x03800044, - 0x05308000, 0x01012000, 0x04a007df, 0x00800279, - 0x06a0035e, 0x070ff02e, 0x045c0479, 0x06810973, - 0x05308000, 0x05008000, 0x06009079, 0x04a007df, - 0x07c00000, 0x053f2000, 0x0700c000, 0x019d8974, - 0x07c00000, 0x033e5000, 0x0700f000, 0x0280097f, - 0x004980e5, 0x0581807e, 0x033e5000, 0x05008000, - 0x050f8035, 0x07a00990, 0x00017008, 0x01018009, + 0x050f80ff, 0x032fa00a, 0x00041032, 0x02800046, + 0x07780047, 0x05000700, 0x037c00ff, 0x07000500, + 0x058189a3, 0x05308000, 0x03019000, 0x038009a5, + 0x05308000, 0x01012000, 0x04a0080d, 0x01800290, + 0x06a00379, 0x070ff02e, 0x045c0479, 0x078109af, + 0x05308000, 0x05008000, 0x06009079, 0x04a0080d, + 0x07c00000, 0x053f2000, 0x0700c000, 0x009d89b0, + 0x07c00000, 0x033e5000, 0x0700f000, 0x038009bb, + 0x004980e5, 0x04818080, 0x033e5000, 0x05008000, + 0x050f8035, 0x07a009cc, 0x00017008, 0x01018009, 0x033e5000, 0x07000c00, 0x05308000, 0x07006000, - 0x07009041, 0x04a007df, 0x033e5000, 0x07003000, - 0x05008017, 0x07009018, 0x0249a0e5, 0x0681821f, - 0x0380007e, 0x06600052, 0x030d60ff, 0x07f00000, + 0x07009041, 0x04a0080d, 0x033e5000, 0x07003000, + 0x05008017, 0x07009018, 0x0249a0e5, 0x07818236, + 0x02800080, 0x06600052, 0x030d60ff, 0x07f00000, 0x07f00000, 0x000110d0, 0x010120d1, 0x04600252, 0x030d60ff, 0x07f00000, 0x07f00000, 0x020130d0, 0x010140d1, 0x04600452, 0x030d60ff, 0x010170d4, 0x07f00000, 0x020150d0, 0x030160d1, 0x053fa83a, 0x06000008, 0x07c00000, 0x07600c41, 0x050f80ff, 0x01202003, 0x073fa00a, 0x06000001, 0x07f00000, - 0x05601041, 0x050f80ff, 0x032fa071, 0x01800139, - 0x002fb001, 0x038009b2, 0x012fb000, 0x02386001, - 0x030e0000, 0x03076087, 0x069f09b5, 0x03386000, - 0x03020000, 0x00498076, 0x04818a07, 0x00497076, - 0x048189c1, 0x04482076, 0x048189d3, 0x02496076, - 0x058189f6, 0x02800a04, 0x075a00ff, 0x069f09c2, + 0x05601041, 0x050f80ff, 0x032fa071, 0x01800141, + 0x002fb001, 0x038009ee, 0x012fb000, 0x02386001, + 0x030e0000, 0x03076087, 0x069f09f1, 0x03386000, + 0x03020000, 0x00498076, 0x04818a43, 0x00497076, + 0x048189fd, 0x04482076, 0x05818a0f, 0x02496076, + 0x04818a32, 0x02800a40, 0x075a00ff, 0x069f09fe, 0x03386000, 0x03010000, 0x033e6000, 0x07003000, - 0x00492076, 0x06810a04, 0x00491076, 0x04818a04, - 0x02490076, 0x04818a04, 0x0249a0e6, 0x078109d1, - 0x06a00a7f, 0x028009fb, 0x0245f076, 0x02800a04, - 0x004980e6, 0x06810a0d, 0x070ff074, 0x028609e5, + 0x00492076, 0x06810a40, 0x00491076, 0x04818a40, + 0x02490076, 0x04818a40, 0x0249a0e6, 0x06810a0d, + 0x07a00abb, 0x02800a37, 0x0245f076, 0x02800a40, + 0x004980e6, 0x06810a49, 0x070ff074, 0x03860a21, 0x070ff072, 0x05500471, 0x050f80ff, 0x002fa819, - 0x079f09db, 0x02080001, 0x00081002, 0x01082003, - 0x06a00a49, 0x02860a0d, 0x06a00a2c, 0x0249a0e6, - 0x048189fb, 0x02800a04, 0x06a00a2c, 0x033e6000, - 0x07002200, 0x030ef003, 0x018689ed, 0x033e6000, - 0x07002e00, 0x0045807a, 0x0249a0e6, 0x068109f1, - 0x04a007d3, 0x038009ff, 0x0648c0e6, 0x06810a04, - 0x03386000, 0x030e0000, 0x02800580, 0x06a00a2c, - 0x030ef003, 0x008689fb, 0x070ff074, 0x028609ea, - 0x033e6000, 0x07002200, 0x0249a0e6, 0x06810a04, + 0x079f0a17, 0x02080001, 0x00081002, 0x01082003, + 0x06a00a85, 0x02860a49, 0x06a00a68, 0x0249a0e6, + 0x04818a37, 0x02800a40, 0x06a00a68, 0x033e6000, + 0x07002200, 0x030ef003, 0x00868a29, 0x033e6000, + 0x07002e00, 0x0045807a, 0x0249a0e6, 0x07810a2d, + 0x04a00801, 0x02800a3b, 0x0648c0e6, 0x06810a40, + 0x03386000, 0x030e0000, 0x0280059b, 0x06a00a68, + 0x030ef003, 0x00868a37, 0x070ff074, 0x02860a26, + 0x033e6000, 0x07002200, 0x0249a0e6, 0x06810a40, 0x03386000, 0x030e0000, 0x033e6000, 0x05008000, - 0x03800611, 0x03386000, 0x030e0000, 0x02800029, + 0x03800630, 0x03386000, 0x030e0000, 0x0380002b, 0x040fd079, 0x033e6000, 0x0500a200, 0x03386000, - 0x030e0000, 0x00800897, 0x02209a0d, 0x018007e7, + 0x030e0000, 0x008008cb, 0x02209a49, 0x00800815, 0x02386001, 0x030e0000, 0x06604e79, 0x050f80ff, 0x032fa009, 0x03070000, 0x06601270, 0x050f80ff, 0x053fa821, 0x06000038, 0x07f00000, 0x04601a70, - 0x050f80ff, 0x032fa021, 0x060ff002, 0x02860a2a, - 0x069f0a1f, 0x03080000, 0x00081001, 0x00082002, + 0x050f80ff, 0x032fa021, 0x060ff002, 0x03860a66, + 0x069f0a5b, 0x03080000, 0x00081001, 0x00082002, 0x03083003, 0x070ff087, 0x033e6000, 0x07000300, 0x03386000, 0x030e0000, 0x07c00000, 0x0045807a, - 0x03800a27, 0x06604e79, 0x050f80ff, 0x032fa009, + 0x03800a63, 0x06604e79, 0x050f80ff, 0x032fa009, 0x03070000, 0x06601270, 0x050f80ff, 0x053fa822, - 0x06000038, 0x069f0a34, 0x070ff087, 0x0149d0ff, - 0x04818a40, 0x06000080, 0x05001081, 0x05002082, + 0x06000038, 0x069f0a70, 0x070ff087, 0x0149d0ff, + 0x04818a7c, 0x06000080, 0x05001081, 0x05002082, 0x06003083, 0x04601a70, 0x050f80ff, 0x032fa022, 0x07c00000, 0x0131ef00, 0x0700000f, 0x070ff087, - 0x0149d0ff, 0x06810a34, 0x0742001e, 0x05818a42, - 0x050fd0ff, 0x02800a40, 0x07420074, 0x06810a5e, - 0x02400073, 0x060ff038, 0x00540473, 0x03d00a60, + 0x0149d0ff, 0x06810a70, 0x0742001e, 0x05818a7e, + 0x050fd0ff, 0x02800a7c, 0x07420074, 0x07810a9a, + 0x02400073, 0x060ff038, 0x00540473, 0x03d00a9c, 0x05600272, 0x050f80ff, 0x032fa009, 0x030ef000, - 0x02860a70, 0x01072000, 0x05601000, 0x050f80ff, - 0x032fa009, 0x03681e00, 0x076c14ff, 0x04818a70, + 0x03860aac, 0x01072000, 0x05601000, 0x050f80ff, + 0x032fa009, 0x03681e00, 0x076c14ff, 0x05818aac, 0x02073038, 0x05271009, 0x07c00000, 0x022ff001, - 0x02800a5d, 0x03800a66, 0x02800a68, 0x03800a6a, - 0x03800a6c, 0x02800a6e, 0x02800a4f, 0x05271009, - 0x02800a5d, 0x0527100c, 0x02800a5d, 0x0527100f, - 0x02800a5d, 0x05271012, 0x02800a5d, 0x04271015, - 0x02800a5d, 0x032ff000, 0x02800a5d, 0x02386001, - 0x030e0000, 0x05001087, 0x069f0a75, 0x00494001, - 0x07810a7b, 0x03386000, 0x030e0000, 0x07c00000, + 0x03800a99, 0x02800aa2, 0x02800aa4, 0x03800aa6, + 0x02800aa8, 0x03800aaa, 0x03800a8b, 0x05271009, + 0x03800a99, 0x0527100c, 0x03800a99, 0x0527100f, + 0x03800a99, 0x05271012, 0x03800a99, 0x04271015, + 0x03800a99, 0x032ff000, 0x03800a99, 0x02386001, + 0x030e0000, 0x05001087, 0x079f0ab1, 0x00494001, + 0x07810ab7, 0x03386000, 0x030e0000, 0x07c00000, 0x03386000, 0x03010000, 0x033e6000, 0x07003000, - 0x00208080, 0x0301a087, 0x0049401a, 0x04818a89, - 0x0049701a, 0x05818a9f, 0x06420008, 0x04818a80, - 0x0760031e, 0x00208080, 0x0049d01a, 0x07810a90, - 0x06420008, 0x04818a80, 0x0760031d, 0x00208080, - 0x02800a80, 0x00208070, 0x0301a087, 0x0049401a, - 0x06810a80, 0x01208060, 0x0301a087, 0x0049401a, - 0x06810a80, 0x06a00a2c, 0x033e6000, 0x07002200, - 0x069f0a9b, 0x03386000, 0x030e0000, 0x07c00000, - 0x06a00a2c, 0x02800a9b, 0xe2cab9fe, 0x02800004, - 0x00000000, 0x00008000, 0x00000703, 0x033d0aaa, - 0x070aaaaa, 0x013d1aaa, 0x070aaaaa, 0x050f801e, - 0x012fa8d1, 0x050f801e, 0x043fa889, 0x0700000f, - 0x03200005, 0x07420000, 0x050fb000, 0x050f801e, - 0x073fa011, 0x06000038, 0x050f801e, 0x053fa859, - 0x0700003a, 0x050fe000, 0x0481800e, 0x07840024, - 0x0595801d, 0x030e0011, 0x072e4200, 0x03800018, - 0x02920040, 0x068b0023, 0x028a0064, 0x0778aae7, - 0x06000001, 0x01a18536, 0x079a0053, 0x05908018, - 0x010170e1, 0x03640a17, 0x0482803d, 0x070ff017, - 0x02d0002a, 0x02800032, 0x02800034, 0x02800037, - 0x0380003a, 0x0280003d, 0x0280003d, 0x0280003d, - 0x0280003d, 0x03e00000, 0x03800018, 0x04908034, - 0x030160e1, 0x0380003f, 0x04908037, 0x030150e1, - 0x0380003f, 0x0590803a, 0x010140e1, 0x0380003f, - 0x060fc013, 0x06a006f4, 0x03800018, 0x014940e4, - 0x00a18043, 0x03800024, 0x02681e0d, 0x050fb0ff, - 0x04600875, 0x050f80ff, 0x053fa809, 0x06000001, - 0x05488003, 0x04818052, 0x0400800d, 0x0120d000, - 0x013e4000, 0x05000200, 0x06009075, 0x04002076, - 0x06a006e0, 0x07c00000, 0x000170e3, 0x050fe017, - 0x05878059, 0x0547f417, 0x0301f0ff, 0x01800235, - 0x054bc417, 0x050fb0ff, 0x03640aff, 0x04828061, - 0x0179fe17, 0x070fffff, 0x030750ff, 0x01800472, - 0x050fd017, 0x06a006f4, 0x0380001d, 0x00018098, - 0x07480018, 0x04818079, 0x05481018, 0x04818076, - 0x05482018, 0x04818073, 0x07483018, 0x04818070, - 0x002fb004, 0x030190cc, 0x0380007b, 0x012fb003, - 0x020190cb, 0x0380007b, 0x002fb002, 0x030190ca, - 0x0380007b, 0x002fb001, 0x030190c9, 0x0380007b, - 0x012fb000, 0x020190c8, 0x00017086, 0x01491017, - 0x07810084, 0x05a001a0, 0x07781817, 0x05000200, - 0x037c00ff, 0x05000200, 0x0581012e, 0x078b0084, - 0x03385000, 0x03020000, 0x07780017, 0x0043dc07, - 0x078181e2, 0x056c0478, 0x05810147, 0x056c0278, - 0x07810090, 0x05278000, 0x0180012e, 0x05278000, - 0x07483017, 0x04810131, 0x05482017, 0x04810138, - 0x0448b076, 0x0681811c, 0x06601875, 0x050f80ff, - 0x073fa022, 0x0600003e, 0x06000080, 0x05001081, - 0x05002082, 0x06003083, 0x00683e76, 0x076c0aff, - 0x048180a7, 0x05004084, 0x04602075, 0x050f80ff, - 0x022fa02a, 0x038000aa, 0x04602075, 0x050f80ff, - 0x032fa022, 0x04487076, 0x0581011b, 0x04604675, - 0x050f80ff, 0x032fa009, 0x03680600, 0x050010ff, - 0x056c02ff, 0x058180f3, 0x07000090, 0x074b0000, - 0x050fe000, 0x038600ee, 0x0560027b, 0x050f80ff, - 0x032fa009, 0x07f00000, 0x07601400, 0x050f80ff, - 0x032fa009, 0x07f00000, 0x074b0000, 0x070ff08d, - 0x0179feff, 0x070000ff, 0x055c0400, 0x078100f3, - 0x070ff017, 0x037a00ff, 0x05000400, 0x010170ff, - 0x04604075, 0x050f80ff, 0x034a8400, 0x034a8800, - 0x05780100, 0x070000ff, 0x055a0400, 0x074b0a00, - 0x077bff00, 0x070000ff, 0x032fa00a, 0x07f00000, - 0x04603e75, 0x050f80ff, 0x07300fff, 0x070fffff, - 0x032fa00a, 0x07f00000, 0x04604a75, 0x050f80ff, - 0x0700008d, 0x017a0100, 0x07ffff00, 0x032fa00a, - 0x07f00000, 0x04604c75, 0x050f80ff, 0x07300fff, - 0x070fffff, 0x032fa00a, 0x07f00000, 0x06604275, - 0x050f80ff, 0x06000013, 0x032fa00a, 0x0245a076, - 0x008001ea, 0x04603875, 0x050f80ff, 0x05002071, - 0x073fa00a, 0x06000001, 0x066c0001, 0x06818115, - 0x05482017, 0x04810115, 0x070ff09a, 0x017910ff, - 0x03088888, 0x057d10ff, 0x03088888, 0x04810115, - 0x070ff09a, 0x045a0201, 0x070ff09a, 0x045c0401, - 0x048180fd, 0x050020ff, 0x060000fb, 0x06483001, - 0x07818109, 0x00680e01, 0x055c0400, 0x0481010e, - 0x004a4001, 0x02400002, 0x046c0e02, 0x06818104, - 0x00800115, 0x040fd002, 0x052e400c, 0x040080fb, - 0x046a6108, 0x06009075, 0x04002076, 0x06a006e0, - 0x04603e75, 0x050f80ff, 0x053fa842, 0x06000045, - 0x048b0119, 0x02085013, 0x05278000, 0x02075013, - 0x060ff0fb, 0x00d0011f, 0x01800124, 0x00800126, - 0x01800128, 0x0080012a, 0x0080012c, 0x062d0020, - 0x0180012e, 0x062d0080, 0x0180012e, 0x052d0200, - 0x0180012e, 0x052d0800, 0x0180012e, 0x033d0000, - 0x06000002, 0x03920024, 0x0584801d, 0x02800023, - 0x040fe07f, 0x00860140, 0x05a00160, 0x0192012e, - 0x040fe07f, 0x07a68160, 0x0180012e, 0x0760187b, - 0x050f80ff, 0x032fa009, 0x0744f000, 0x0760187b, - 0x050f80ff, 0x032fa00a, 0x02800097, 0x052e400c, - 0x040080fb, 0x046aa108, 0x06009075, 0x04002076, - 0x06a006e0, 0x0180012e, 0x04278001, 0x05482017, - 0x04810154, 0x048b014a, 0x060ff086, 0x0349f0ff, - 0x0581807b, 0x07483017, 0x04810151, 0x050fd0ff, - 0x040fe07f, 0x07a68160, 0x0180012e, 0x05004084, - 0x05a00217, 0x0192012e, 0x070ff07d, 0x0450047c, - 0x056004ff, 0x050f80ff, 0x032fa009, 0x070ff000, - 0x00540479, 0x030790ff, 0x00800138, 0x04487076, - 0x04810168, 0x04605875, 0x050f80ff, 0x032fa009, - 0x060ff079, 0x01540400, 0x0180016a, 0x060ff079, - 0x0054047a, 0x05820199, 0x05810199, 0x070ff07d, - 0x0450047c, 0x050f80ff, 0x002fa819, 0x048b0170, - 0x02080001, 0x00081002, 0x01082003, 0x058b0174, - 0x04487076, 0x0481017a, 0x02385001, 0x03010000, - 0x0080017c, 0x03385000, 0x03010000, 0x03400078, - 0x070ff003, 0x04500479, 0x030790ff, 0x0340007e, - 0x0642007f, 0x05810199, 0x070ff07e, 0x050f80ff, - 0x032fa009, 0x050fe000, 0x02868198, 0x070ff07d, - 0x056002ff, 0x050f80ff, 0x032fa009, 0x0107d000, - 0x0186019a, 0x0560107d, 0x050f80ff, 0x032fa009, - 0x03681e00, 0x0550041b, 0x050f80ff, 0x032fa009, - 0x0107e000, 0x070ff07e, 0x01800184, 0x0307c000, - 0x07c00000, 0x052e400c, 0x040080fb, 0x046aa108, - 0x06009075, 0x04002076, 0x028006e0, 0x060ff075, - 0x008601e0, 0x060ff073, 0x00540419, 0x058201b7, - 0x058101c3, 0x050010ff, 0x00202010, 0x00642001, - 0x068281ab, 0x04002001, 0x040f8073, 0x024a3c02, - 0x017a02ff, 0x06000c98, 0x070fa0ff, 0x060ff002, - 0x06500073, 0x03610072, 0x045c0473, 0x078181c6, - 0x03073072, 0x018001c6, 0x036100ff, 0x050010ff, - 0x03610072, 0x00540473, 0x057dfeff, 0x07ffffff, - 0x01400203, 0x00202010, 0x01642003, 0x068281ab, - 0x05002003, 0x008001ab, 0x04002013, 0x04001013, - 0x01294000, 0x07480077, 0x078181e1, 0x06604e75, - 0x050f80ff, 0x053fa809, 0x06000001, 0x07f00000, - 0x07602203, 0x050f80ff, 0x053fa809, 0x06000001, - 0x05481003, 0x078181dd, 0x060ff002, 0x04500401, - 0x016480ff, 0x078281e1, 0x07440077, 0x040080fb, - 0x006b6108, 0x06009075, 0x07a006db, 0x018001e1, - 0x060ff002, 0x045c0401, 0x078181e1, 0x01294000, - 0x07c00000, 0x040fd075, 0x050fd017, 0x060ff086, - 0x077800ff, 0x07000060, 0x037c00ff, 0x07000060, - 0x078181e4, 0x04487076, 0x04810201, 0x07780017, - 0x0243d807, 0x06818201, 0x06601875, 0x050f80ff, - 0x073fa022, 0x0600003e, 0x0249a076, 0x078181fa, - 0x058b01f5, 0x04603e75, 0x050f80ff, 0x053fa842, - 0x06000045, 0x052e400c, 0x040080fb, 0x026b4108, - 0x06009075, 0x04002076, 0x06a006e0, 0x03800024, - 0x06601875, 0x050f80ff, 0x073fa022, 0x0600003e, - 0x052e400c, 0x04600875, 0x050f80ff, 0x053fa809, - 0x06000001, 0x05488003, 0x05810211, 0x0400d0fb, - 0x066a810d, 0x013e4000, 0x07000300, 0x03800024, - 0x040080fb, 0x066a8108, 0x06009075, 0x04002076, - 0x06a006e0, 0x03800024, 0x0240007f, 0x0742007e, - 0x050f807e, 0x032fa009, 0x050fe000, 0x02868231, - 0x070ff07d, 0x055c047b, 0x04810226, 0x0760007d, - 0x050f80ff, 0x032fa009, 0x050fe000, 0x02868226, - 0x070ff07b, 0x0107d0ff, 0x0560107d, 0x050f80ff, - 0x032fa009, 0x03681e00, 0x0450041c, 0x0107e0ff, - 0x050f80ff, 0x032fa009, 0x050fe000, 0x01860233, - 0x0307c000, 0x07c00000, 0x040fd075, 0x028006f4, - 0x0460081f, 0x050f80ff, 0x032fa039, 0x01021000, - 0x03020005, 0x01018006, 0x01683e21, 0x00d0023d, - 0x0080025d, 0x018002f5, 0x0280032f, 0x038003d8, - 0x00800261, 0x0080025d, 0x0080025d, 0x0080025d, + 0x04008051, 0x00610108, 0x0301a087, 0x0049401a, + 0x05818ac6, 0x0049701a, 0x04818adc, 0x06420008, + 0x05818abd, 0x0760031e, 0x00610108, 0x0049d01a, + 0x06810acd, 0x06420008, 0x05818abd, 0x0760031d, + 0x00610108, 0x03800abd, 0x00208070, 0x0301a087, + 0x0049401a, 0x07810abd, 0x01208060, 0x0301a087, + 0x0049401a, 0x07810abd, 0x06a00a68, 0x033e6000, + 0x07002200, 0x079f0ad8, 0x03386000, 0x030e0000, + 0x07c00000, 0x06a00a68, 0x03800ad8, 0x8e579a58, + 0x02800004, 0x00000000, 0x00008000, 0x0000070b, + 0x033d0aaa, 0x070aaaaa, 0x013d1aaa, 0x070aaaaa, + 0x050f801e, 0x012fa8d1, 0x050f801e, 0x043fa889, + 0x0700000f, 0x03200005, 0x07420000, 0x050fb000, + 0x050f801e, 0x073fa011, 0x06000038, 0x050f801e, + 0x053fa859, 0x0700003a, 0x050fe000, 0x0481800e, + 0x07840024, 0x0595801d, 0x030e0011, 0x072e4200, + 0x03800018, 0x02920040, 0x068b0023, 0x028a0064, + 0x0778aae7, 0x06000001, 0x00a1853d, 0x079a0053, + 0x05908018, 0x010170e1, 0x03640a17, 0x0482803d, + 0x070ff017, 0x02d0002a, 0x02800032, 0x02800034, + 0x02800037, 0x0380003a, 0x0280003d, 0x0280003d, + 0x0280003d, 0x0280003d, 0x03e00000, 0x03800018, + 0x04908034, 0x030160e1, 0x0380003f, 0x04908037, + 0x030150e1, 0x0380003f, 0x0590803a, 0x010140e1, + 0x0380003f, 0x060fc013, 0x06a006fb, 0x03800018, + 0x014940e4, 0x00a18043, 0x03800024, 0x02681e0d, + 0x050fb0ff, 0x04600875, 0x050f80ff, 0x053fa809, + 0x06000001, 0x05488003, 0x04818052, 0x0400800d, + 0x0120d000, 0x013e4000, 0x05000200, 0x06009075, + 0x04002076, 0x07a006e7, 0x07c00000, 0x000170e3, + 0x050fe017, 0x05878059, 0x0547f417, 0x0301f0ff, + 0x01800235, 0x054bc417, 0x050fb0ff, 0x03640aff, + 0x04828061, 0x0179fe17, 0x070fffff, 0x030750ff, + 0x01800472, 0x050fd017, 0x06a006fb, 0x0380001d, + 0x00018098, 0x07480018, 0x04818079, 0x05481018, + 0x04818076, 0x05482018, 0x04818073, 0x07483018, + 0x04818070, 0x002fb004, 0x030190cc, 0x0380007b, + 0x012fb003, 0x020190cb, 0x0380007b, 0x002fb002, + 0x030190ca, 0x0380007b, 0x002fb001, 0x030190c9, + 0x0380007b, 0x012fb000, 0x020190c8, 0x00017086, + 0x01491017, 0x07810084, 0x05a001a0, 0x07781817, + 0x05000200, 0x037c00ff, 0x05000200, 0x0581012e, + 0x078b0084, 0x03385000, 0x03020000, 0x07780017, + 0x0043dc07, 0x078181e2, 0x056c0478, 0x05810147, + 0x056c0278, 0x07810090, 0x05278000, 0x0180012e, + 0x05278000, 0x07483017, 0x04810131, 0x05482017, + 0x04810138, 0x0448b076, 0x0681811c, 0x06601875, + 0x050f80ff, 0x073fa022, 0x0600003e, 0x06000080, + 0x05001081, 0x05002082, 0x06003083, 0x00683e76, + 0x076c0aff, 0x048180a7, 0x05004084, 0x04602075, + 0x050f80ff, 0x022fa02a, 0x038000aa, 0x04602075, + 0x050f80ff, 0x032fa022, 0x04487076, 0x0581011b, + 0x04604675, 0x050f80ff, 0x032fa009, 0x03680600, + 0x050010ff, 0x056c02ff, 0x058180f3, 0x07000090, + 0x074b0000, 0x050fe000, 0x038600ee, 0x0560027b, + 0x050f80ff, 0x032fa009, 0x07f00000, 0x07601400, + 0x050f80ff, 0x032fa009, 0x07f00000, 0x074b0000, + 0x070ff08d, 0x0179feff, 0x070000ff, 0x055c0400, + 0x078100f3, 0x070ff017, 0x037a00ff, 0x05000400, + 0x010170ff, 0x04604075, 0x050f80ff, 0x034a8400, + 0x034a8800, 0x05780100, 0x070000ff, 0x055a0400, + 0x074b0a00, 0x077bff00, 0x070000ff, 0x032fa00a, + 0x07f00000, 0x04603e75, 0x050f80ff, 0x07300fff, + 0x070fffff, 0x032fa00a, 0x07f00000, 0x04604a75, + 0x050f80ff, 0x0700008d, 0x017a0100, 0x07ffff00, + 0x032fa00a, 0x07f00000, 0x04604c75, 0x050f80ff, + 0x07300fff, 0x070fffff, 0x032fa00a, 0x07f00000, + 0x06604275, 0x050f80ff, 0x06000013, 0x032fa00a, + 0x0245a076, 0x008001ea, 0x04603875, 0x050f80ff, + 0x05002071, 0x073fa00a, 0x06000001, 0x066c0001, + 0x06818115, 0x05482017, 0x04810115, 0x070ff09a, + 0x017910ff, 0x03088888, 0x057d10ff, 0x03088888, + 0x04810115, 0x070ff09a, 0x045a0201, 0x070ff09a, + 0x045c0401, 0x048180fd, 0x050020ff, 0x060000fb, + 0x06483001, 0x07818109, 0x00680e01, 0x055c0400, + 0x0481010e, 0x004a4001, 0x02400002, 0x046c0e02, + 0x06818104, 0x00800115, 0x040fd002, 0x052e400c, + 0x040080fb, 0x046a6108, 0x06009075, 0x04002076, + 0x07a006e7, 0x04603e75, 0x050f80ff, 0x053fa842, + 0x06000045, 0x048b0119, 0x02085013, 0x05278000, + 0x02075013, 0x060ff0fb, 0x00d0011f, 0x01800124, + 0x00800126, 0x01800128, 0x0080012a, 0x0080012c, + 0x062d0020, 0x0180012e, 0x062d0080, 0x0180012e, + 0x052d0200, 0x0180012e, 0x052d0800, 0x0180012e, + 0x033d0000, 0x06000002, 0x03920024, 0x0584801d, + 0x02800023, 0x040fe07f, 0x00860140, 0x05a00160, + 0x0192012e, 0x040fe07f, 0x07a68160, 0x0180012e, + 0x0760187b, 0x050f80ff, 0x032fa009, 0x0744f000, + 0x0760187b, 0x050f80ff, 0x032fa00a, 0x02800097, + 0x052e400c, 0x040080fb, 0x046aa108, 0x06009075, + 0x04002076, 0x07a006e7, 0x0180012e, 0x04278001, + 0x05482017, 0x04810154, 0x048b014a, 0x060ff086, + 0x0349f0ff, 0x0581807b, 0x07483017, 0x04810151, + 0x050fd0ff, 0x040fe07f, 0x07a68160, 0x0180012e, + 0x05004084, 0x05a00217, 0x0192012e, 0x070ff07d, + 0x0450047c, 0x056004ff, 0x050f80ff, 0x032fa009, + 0x070ff000, 0x00540479, 0x030790ff, 0x00800138, + 0x04487076, 0x04810168, 0x04605875, 0x050f80ff, + 0x032fa009, 0x060ff079, 0x01540400, 0x0180016a, + 0x060ff079, 0x0054047a, 0x05820199, 0x05810199, + 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819, + 0x048b0170, 0x02080001, 0x00081002, 0x01082003, + 0x058b0174, 0x04487076, 0x0481017a, 0x02385001, + 0x03010000, 0x0080017c, 0x03385000, 0x03010000, + 0x03400078, 0x070ff003, 0x04500479, 0x030790ff, + 0x0340007e, 0x0642007f, 0x05810199, 0x070ff07e, + 0x050f80ff, 0x032fa009, 0x050fe000, 0x02868198, + 0x070ff07d, 0x056002ff, 0x050f80ff, 0x032fa009, + 0x0107d000, 0x0186019a, 0x0560107d, 0x050f80ff, + 0x032fa009, 0x03681e00, 0x0550041b, 0x050f80ff, + 0x032fa009, 0x0107e000, 0x070ff07e, 0x01800184, + 0x0307c000, 0x07c00000, 0x052e400c, 0x040080fb, + 0x046aa108, 0x06009075, 0x04002076, 0x038006e7, + 0x060ff075, 0x008601e0, 0x060ff073, 0x00540419, + 0x058201b7, 0x058101c3, 0x050010ff, 0x00202010, + 0x00642001, 0x068281ab, 0x04002001, 0x040f8073, + 0x024a3c02, 0x017a02ff, 0x06000c98, 0x070fa0ff, + 0x060ff002, 0x06500073, 0x03610072, 0x045c0473, + 0x078181c6, 0x03073072, 0x018001c6, 0x036100ff, + 0x050010ff, 0x03610072, 0x00540473, 0x057dfeff, + 0x07ffffff, 0x01400203, 0x00202010, 0x01642003, + 0x068281ab, 0x05002003, 0x008001ab, 0x04002013, + 0x04001013, 0x01294000, 0x07480077, 0x078181e1, + 0x06604e75, 0x050f80ff, 0x053fa809, 0x06000001, + 0x07f00000, 0x07602203, 0x050f80ff, 0x053fa809, + 0x06000001, 0x05481003, 0x078181dd, 0x060ff002, + 0x04500401, 0x016480ff, 0x078281e1, 0x07440077, + 0x040080fb, 0x006b6108, 0x06009075, 0x07a006e2, + 0x018001e1, 0x060ff002, 0x045c0401, 0x078181e1, + 0x01294000, 0x07c00000, 0x040fd075, 0x050fd017, + 0x060ff086, 0x077800ff, 0x07000060, 0x037c00ff, + 0x07000060, 0x078181e4, 0x04487076, 0x04810201, + 0x07780017, 0x0243d807, 0x06818201, 0x06601875, + 0x050f80ff, 0x073fa022, 0x0600003e, 0x0249a076, + 0x078181fa, 0x058b01f5, 0x04603e75, 0x050f80ff, + 0x053fa842, 0x06000045, 0x052e400c, 0x040080fb, + 0x026b4108, 0x06009075, 0x04002076, 0x07a006e7, + 0x03800024, 0x06601875, 0x050f80ff, 0x073fa022, + 0x0600003e, 0x052e400c, 0x04600875, 0x050f80ff, + 0x053fa809, 0x06000001, 0x05488003, 0x05810211, + 0x0400d0fb, 0x066a810d, 0x013e4000, 0x07000300, + 0x03800024, 0x040080fb, 0x066a8108, 0x06009075, + 0x04002076, 0x07a006e7, 0x03800024, 0x0240007f, + 0x0742007e, 0x050f807e, 0x032fa009, 0x050fe000, + 0x02868231, 0x070ff07d, 0x055c047b, 0x04810226, + 0x0760007d, 0x050f80ff, 0x032fa009, 0x050fe000, + 0x02868226, 0x070ff07b, 0x0107d0ff, 0x0560107d, + 0x050f80ff, 0x032fa009, 0x03681e00, 0x0450041c, + 0x0107e0ff, 0x050f80ff, 0x032fa009, 0x050fe000, + 0x01860233, 0x0307c000, 0x07c00000, 0x040fd075, + 0x028006fb, 0x0460081f, 0x050f80ff, 0x032fa039, + 0x01021000, 0x03020005, 0x01018006, 0x01683e21, + 0x00d0023d, 0x0080025d, 0x018002f5, 0x0280032f, + 0x038003d8, 0x00800261, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, - 0x0080025d, 0x0080025d, 0x00800413, 0x0080025d, + 0x0080025d, 0x0080025d, 0x0080025d, 0x00800413, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d, - 0x050fd0ff, 0x06a006f4, 0x03800018, 0x0380001d, - 0x01494021, 0x06818434, 0x0400701f, 0x05a00466, - 0x007a0101, 0x07060000, 0x04601c20, 0x050f80ff, - 0x053fa809, 0x07000003, 0x04484007, 0x048102b9, - 0x06485007, 0x048102b9, 0x04601020, 0x050f80ff, - 0x073fa009, 0x07000003, 0x0769ff06, 0x076c3006, - 0x04810289, 0x056cd006, 0x04810289, 0x04601c20, - 0x050f80ff, 0x053fa809, 0x07000003, 0x06780007, - 0x070000ff, 0x075a0005, 0x04601020, 0x050f80ff, - 0x053fa809, 0x07000003, 0x0469fe07, 0x05780105, - 0x07ffff00, 0x075a0005, 0x030b6005, 0x018002a3, - 0x04601c20, 0x050f80ff, 0x053fa809, 0x07000003, - 0x00464007, 0x02465007, 0x07f00000, 0x04601c20, - 0x050f80ff, 0x053fa80a, 0x07000003, 0x07f00000, + 0x0080025d, 0x050fd0ff, 0x06a006fb, 0x03800018, + 0x0380001d, 0x01494021, 0x06818434, 0x0400701f, + 0x05a00466, 0x007a0101, 0x07060000, 0x04601c20, + 0x050f80ff, 0x053fa809, 0x07000003, 0x04484007, + 0x048102b9, 0x06485007, 0x048102b9, 0x04601020, + 0x050f80ff, 0x073fa009, 0x07000003, 0x0769ff06, + 0x076c3006, 0x04810289, 0x056cd006, 0x04810289, 0x04601c20, 0x050f80ff, 0x053fa809, 0x07000003, - 0x07f00000, 0x07f00000, 0x04601620, 0x050f80ff, - 0x053fa809, 0x07000003, 0x05780105, 0x07ffff00, - 0x044b0407, 0x075a0005, 0x0460041f, 0x050f80ff, - 0x053fa80a, 0x06000002, 0x07f00000, 0x0460041f, - 0x050f80ff, 0x053fa809, 0x07000003, 0x07303000, - 0x06008280, 0x0460081f, 0x050f80ff, 0x053fa809, - 0x07000003, 0x007a0107, 0x03400000, 0x0460081f, - 0x050f80ff, 0x053fa80a, 0x07000003, 0x018002bb, - 0x07303000, 0x07008290, 0x03496021, 0x068182bf, - 0x06006013, 0x018002c6, 0x02400010, 0x048102bf, - 0x06006010, 0x0660361f, 0x050f80ff, 0x073fa00a, - 0x07000003, 0x072d0003, 0x039b82c6, 0x069382cb, + 0x06780007, 0x070000ff, 0x075a0005, 0x04601020, + 0x050f80ff, 0x053fa809, 0x07000003, 0x0469fe07, + 0x05780105, 0x07ffff00, 0x075a0005, 0x030b6005, + 0x018002a3, 0x04601c20, 0x050f80ff, 0x053fa809, + 0x07000003, 0x00464007, 0x02465007, 0x07f00000, + 0x04601c20, 0x050f80ff, 0x053fa80a, 0x07000003, + 0x07f00000, 0x04601c20, 0x050f80ff, 0x053fa809, + 0x07000003, 0x07f00000, 0x07f00000, 0x04601620, + 0x050f80ff, 0x053fa809, 0x07000003, 0x05780105, + 0x07ffff00, 0x044b0407, 0x075a0005, 0x0460041f, + 0x050f80ff, 0x053fa80a, 0x06000002, 0x07f00000, + 0x0460041f, 0x050f80ff, 0x053fa809, 0x07000003, + 0x07303000, 0x06008280, 0x0460081f, 0x050f80ff, + 0x053fa809, 0x07000003, 0x007a0107, 0x03400000, + 0x0460081f, 0x050f80ff, 0x053fa80a, 0x07000003, + 0x018002bb, 0x07303000, 0x07008290, 0x03496021, + 0x068182bf, 0x06006013, 0x018002c6, 0x02400010, + 0x048102bf, 0x06006010, 0x0660361f, 0x050f80ff, + 0x073fa00a, 0x07000003, 0x072d0003, 0x039b82c6, + 0x069382cb, 0x073aa000, 0x06000004, 0x010b1000, + 0x000b2001, 0x020b3002, 0x010b4003, 0x020b5004, + 0x030b6005, 0x010b7006, 0x069382e6, 0x07602818, + 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, + 0x070000ff, 0x007a0101, 0x07500000, 0x000b8001, + 0x04780102, 0x07ffff00, 0x020b9002, 0x009702e3, + 0x063aa020, 0x0700001e, 0x008002ec, 0x063aa020, + 0x06000016, 0x008002ec, 0x029782ea, 0x063aa020, + 0x07000012, 0x008002ec, 0x063aa020, 0x0600001a, + 0x070ff0f6, 0x03687eff, 0x068182ec, 0x06601820, + 0x050f10ff, 0x063f3008, 0x06000008, 0x062d0002, + 0x01800260, 0x04007013, 0x05a00466, 0x007a0101, + 0x07050000, 0x07303000, 0x07008890, 0x074d0005, + 0x06006013, 0x072d0003, 0x029b82fd, 0x04938302, 0x073aa000, 0x06000004, 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005, - 0x010b7006, 0x069382e6, 0x07602818, 0x050f80ff, + 0x010b7006, 0x04938316, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, 0x000b8001, 0x04780102, - 0x07ffff00, 0x020b9002, 0x009702e3, 0x063aa020, - 0x0700001e, 0x008002ec, 0x063aa020, 0x06000016, - 0x008002ec, 0x029782ea, 0x063aa020, 0x07000012, - 0x008002ec, 0x063aa020, 0x0600001a, 0x070ff0f6, - 0x03687eff, 0x068182ec, 0x06601820, 0x050f10ff, - 0x063f3008, 0x06000008, 0x062d0002, 0x01800260, - 0x04007013, 0x05a00466, 0x007a0101, 0x07050000, - 0x07303000, 0x07008890, 0x074d0005, 0x06006013, - 0x072d0003, 0x029b82fd, 0x04938302, 0x073aa000, + 0x07ffff00, 0x020b9002, 0x06602220, 0x050f80ff, + 0x022fa019, 0x04001002, 0x04002013, 0x0660281f, + 0x050f80ff, 0x032fa00a, 0x05938328, 0x0500b01e, + 0x0660050b, 0x040f800b, 0x022fa01a, 0x073aa00c, + 0x06000016, 0x07300003, 0x06000008, 0x01800409, + 0x050f801e, 0x022fa01a, 0x073aa00c, 0x07000012, + 0x07300003, 0x06000008, 0x01800409, 0x04007013, + 0x05a00466, 0x007a0101, 0x03070000, 0x04602c1f, + 0x050f80ff, 0x073fa009, 0x06000004, 0x02499008, + 0x0781033c, 0x07303000, 0x07008890, 0x0280033e, + 0x07303000, 0x04008980, 0x05007003, 0x04601620, + 0x050f80ff, 0x073fa009, 0x07000003, 0x03499006, + 0x0781034e, 0x0379ff05, 0x070000ff, 0x06602220, + 0x050f80ff, 0x073fa009, 0x07000003, 0x07780006, + 0x07ffff00, 0x075a0005, 0x074d0005, 0x06006013, + 0x072d0003, 0x019b8350, 0x05938355, 0x073aa000, 0x06000004, 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005, 0x010b7006, - 0x04938316, 0x07602818, 0x050f80ff, 0x012fa809, + 0x0493836b, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, 0x000b8001, 0x04780102, 0x07ffff00, - 0x020b9002, 0x06602220, 0x050f80ff, 0x022fa019, - 0x04001002, 0x04002013, 0x0660281f, 0x050f80ff, - 0x032fa00a, 0x05938328, 0x0500b01e, 0x0660050b, - 0x040f800b, 0x022fa01a, 0x073aa00c, 0x06000016, - 0x07300003, 0x06000008, 0x01800409, 0x050f801e, - 0x022fa01a, 0x073aa00c, 0x07000012, 0x07300003, - 0x06000008, 0x01800409, 0x04007013, 0x05a00466, - 0x007a0101, 0x03070000, 0x04602c1f, 0x050f80ff, - 0x073fa009, 0x06000004, 0x02499008, 0x0781033c, - 0x07303000, 0x07008890, 0x0280033e, 0x07303000, - 0x04008980, 0x05007003, 0x04601620, 0x050f80ff, - 0x073fa009, 0x07000003, 0x03499006, 0x0781034e, - 0x0379ff05, 0x070000ff, 0x06602220, 0x050f80ff, - 0x073fa009, 0x07000003, 0x07780006, 0x07ffff00, - 0x075a0005, 0x074d0005, 0x06006013, 0x072d0003, - 0x019b8350, 0x05938355, 0x073aa000, 0x06000004, - 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003, - 0x020b5004, 0x030b6005, 0x010b7006, 0x0493836b, - 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, - 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, - 0x000b8001, 0x04780102, 0x07ffff00, 0x020b9002, - 0x0500b01e, 0x0660050b, 0x04601c20, 0x050f80ff, - 0x032fa021, 0x07f00000, 0x064b0002, 0x02499008, - 0x06810373, 0x0644c002, 0x054b0400, 0x050040ff, - 0x06698104, 0x0581838b, 0x06000013, 0x04001013, - 0x04780102, 0x06000010, 0x06003013, 0x04004013, - 0x06005013, 0x06006013, 0x04007013, 0x00644015, - 0x07820384, 0x04448002, 0x02205008, 0x05938387, - 0x040f800b, 0x03800388, 0x050f801e, 0x032fa042, - 0x04008015, 0x038003cc, 0x046c8004, 0x0581839c, - 0x01208018, 0x06780002, 0x07000003, 0x0581839f, - 0x06003001, 0x06000013, 0x04001013, 0x04004013, - 0x06005013, 0x05938399, 0x040f800b, 0x0380039a, - 0x050f801e, 0x022fa032, 0x038003cc, 0x040fd01f, - 0x06a006f4, 0x03800018, 0x0379ff03, 0x070000ff, - 0x04488002, 0x078103a6, 0x070ff003, 0x04500408, - 0x050080ff, 0x0379ff00, 0x070000ff, 0x06489002, - 0x068103ad, 0x070ff000, 0x04500408, 0x050080ff, - 0x07005003, 0x05004000, 0x06003001, 0x06000013, - 0x04001013, 0x049383b5, 0x040f800b, 0x028003b6, - 0x050f801e, 0x022fa032, 0x07f00000, 0x06602420, - 0x050f80ff, 0x022fa031, 0x07f00000, 0x049383bf, - 0x06600c0b, 0x038003c0, 0x07600c1e, 0x050f80ff, - 0x022fa032, 0x02680608, 0x078103cc, 0x016408ff, - 0x057dfeff, 0x07ffffff, 0x034000ff, 0x045a0407, - 0x010b40ff, 0x06600908, 0x0669f908, 0x049383d0, - 0x027a0008, 0x05000160, 0x038003d2, 0x027a0008, - 0x04000120, 0x070aa0ff, 0x024a2408, 0x037a00ff, - 0x06000080, 0x070000ff, 0x01800409, 0x04007013, - 0x05a00466, 0x007a0101, 0x07030000, 0x07303000, - 0x07008190, 0x06006013, 0x028003e0, 0x072d0003, - 0x009b83e0, 0x049383e5, 0x073aa000, 0x06000004, - 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003, - 0x020b5004, 0x030b6005, 0x010b7006, 0x06938401, + 0x020b9002, 0x0500b01e, 0x0660050b, 0x04601c20, + 0x050f80ff, 0x032fa021, 0x07f00000, 0x064b0002, + 0x02499008, 0x06810373, 0x0644c002, 0x054b0400, + 0x050040ff, 0x06698104, 0x0581838b, 0x06000013, + 0x04001013, 0x04780102, 0x06000010, 0x06003013, + 0x04004013, 0x06005013, 0x06006013, 0x04007013, + 0x00644015, 0x07820384, 0x04448002, 0x02205008, + 0x05938387, 0x040f800b, 0x03800388, 0x050f801e, + 0x032fa042, 0x04008015, 0x038003cc, 0x046c8004, + 0x0581839c, 0x01208018, 0x06780002, 0x07000003, + 0x0581839f, 0x06003001, 0x06000013, 0x04001013, + 0x04004013, 0x06005013, 0x05938399, 0x040f800b, + 0x0380039a, 0x050f801e, 0x022fa032, 0x038003cc, + 0x040fd01f, 0x06a006fb, 0x03800018, 0x0379ff03, + 0x070000ff, 0x04488002, 0x078103a6, 0x070ff003, + 0x04500408, 0x050080ff, 0x0379ff00, 0x070000ff, + 0x06489002, 0x068103ad, 0x070ff000, 0x04500408, + 0x050080ff, 0x07005003, 0x05004000, 0x06003001, + 0x06000013, 0x04001013, 0x049383b5, 0x040f800b, + 0x028003b6, 0x050f801e, 0x022fa032, 0x07f00000, + 0x06602420, 0x050f80ff, 0x022fa031, 0x07f00000, + 0x049383bf, 0x06600c0b, 0x038003c0, 0x07600c1e, + 0x050f80ff, 0x022fa032, 0x02680608, 0x078103cc, + 0x016408ff, 0x057dfeff, 0x07ffffff, 0x034000ff, + 0x045a0407, 0x010b40ff, 0x06600908, 0x0669f908, + 0x049383d0, 0x027a0008, 0x05000160, 0x038003d2, + 0x027a0008, 0x04000120, 0x070aa0ff, 0x024a2408, + 0x037a00ff, 0x06000080, 0x070000ff, 0x01800409, + 0x04007013, 0x05a00466, 0x007a0101, 0x07030000, + 0x07303000, 0x07008190, 0x06006013, 0x028003e0, + 0x072d0003, 0x009b83e0, 0x049383e5, 0x073aa000, + 0x06000004, 0x010b1000, 0x000b2001, 0x020b3002, + 0x010b4003, 0x020b5004, 0x030b6005, 0x010b7006, + 0x06938401, 0x07602818, 0x050f80ff, 0x012fa809, + 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, + 0x07500000, 0x000b8001, 0x04780102, 0x07ffff00, + 0x020b9002, 0x073ff000, 0x06000007, 0x029703fe, + 0x037a00ff, 0x06000080, 0x070aa0ff, 0x062d0002, + 0x01800260, 0x073ff000, 0x07000003, 0x01970406, + 0x037a00ff, 0x06000080, 0x070aa0ff, 0x062d0002, + 0x01800260, 0x070ff0f6, 0x03687eff, 0x07818409, + 0x0793840f, 0x040f100b, 0x00800410, 0x050f101e, + 0x070f3000, 0x062d0002, 0x01800260, 0x073aa000, + 0x06000002, 0x072d0003, 0x029b8415, 0x070ff0f6, + 0x036830ff, 0x07818417, 0x070ff0f6, 0x036830ff, + 0x0681841a, 0x0660301f, 0x070f00ff, 0x0693842f, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, - 0x000b8001, 0x04780102, 0x07ffff00, 0x020b9002, - 0x073ff000, 0x06000007, 0x029703fe, 0x037a00ff, - 0x06000080, 0x070aa0ff, 0x062d0002, 0x01800260, - 0x073ff000, 0x07000003, 0x01970406, 0x037a00ff, - 0x06000080, 0x070aa0ff, 0x062d0002, 0x01800260, - 0x070ff0f6, 0x03687eff, 0x07818409, 0x0793840f, - 0x040f100b, 0x00800410, 0x050f101e, 0x070f3000, - 0x062d0002, 0x01800260, 0x073aa000, 0x06000002, - 0x072d0003, 0x029b8415, 0x070ff0f6, 0x036830ff, - 0x07818417, 0x070ff0f6, 0x036830ff, 0x0681841a, - 0x0660301f, 0x070f00ff, 0x0693842f, 0x07602818, - 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, - 0x070000ff, 0x007a0101, 0x07500000, 0x060af001, - 0x04780102, 0x07ffff00, 0x020b0002, 0x07300c00, - 0x07000005, 0x00800431, 0x07300c00, 0x07000005, - 0x070f3000, 0x062d0002, 0x01800260, 0x05474021, - 0x04602620, 0x050f80ff, 0x053fa809, 0x07000003, - 0x06780007, 0x07ffff00, 0x0481043d, 0x03455021, - 0x04602a20, 0x050f80ff, 0x063fa019, 0x06000002, - 0x06003013, 0x01497021, 0x07818455, 0x04601620, - 0x050f80ff, 0x053fa809, 0x06000001, 0x0379ff03, - 0x070000ff, 0x07420003, 0x04600220, 0x050f80ff, - 0x012fa809, 0x040fe001, 0x0186045a, 0x03200009, - 0x0760141b, 0x050f80ff, 0x073fa009, 0x06000001, - 0x04008013, 0x0660181f, 0x050f80ff, 0x022fa04a, - 0x01800263, 0x012080c0, 0x0600901f, 0x05002021, - 0x06a006e0, 0x01800260, 0x06489076, 0x05810463, - 0x02200020, 0x00800464, 0x03200000, 0x06006075, - 0x0180046c, 0x07489021, 0x0581046a, 0x03200030, - 0x0080046b, 0x03200011, 0x0600601f, 0x07a005ac, - 0x05600406, 0x050f80ff, 0x053fa809, 0x06000002, - 0x07c00000, 0x04600875, 0x050f80ff, 0x032fa039, + 0x060af001, 0x04780102, 0x07ffff00, 0x020b0002, + 0x07300c00, 0x07000005, 0x00800431, 0x07300c00, + 0x07000005, 0x070f3000, 0x062d0002, 0x01800260, + 0x05474021, 0x04602620, 0x050f80ff, 0x053fa809, + 0x07000003, 0x06780007, 0x07ffff00, 0x0481043d, + 0x03455021, 0x04602a20, 0x050f80ff, 0x063fa019, + 0x06000002, 0x06003013, 0x01497021, 0x07818455, + 0x04601620, 0x050f80ff, 0x053fa809, 0x06000001, + 0x0379ff03, 0x070000ff, 0x07420003, 0x04600220, + 0x050f80ff, 0x012fa809, 0x040fe001, 0x0186045a, + 0x03200009, 0x0760141b, 0x050f80ff, 0x073fa009, + 0x06000001, 0x04008013, 0x0660181f, 0x050f80ff, + 0x022fa04a, 0x01800263, 0x012080c0, 0x0600901f, + 0x05002021, 0x07a006e7, 0x01800260, 0x06489076, + 0x05810463, 0x02200020, 0x00800464, 0x03200000, + 0x06006075, 0x0180046c, 0x07489021, 0x0581046a, + 0x03200030, 0x0080046b, 0x03200011, 0x0600601f, + 0x06a005b3, 0x05600406, 0x050f80ff, 0x053fa809, + 0x06000002, 0x07c00000, 0x04600875, 0x050f80ff, + 0x032fa039, 0x07780000, 0x02800040, 0x037c00ff, + 0x03800000, 0x0481047c, 0x02075013, 0x008004a4, 0x03076000, 0x0107b005, 0x01018006, 0x0448b076, - 0x0781847e, 0x06602475, 0x050f80ff, 0x053fa811, - 0x0700003c, 0x00077013, 0x050fe078, 0x0386849a, - 0x04a0049e, 0x0092049d, 0x060ff0fb, 0x00d00485, - 0x0080048a, 0x0180048d, 0x01800490, 0x01800493, - 0x01800496, 0x072d0030, 0x029b848a, 0x0280052f, - 0x072d00c0, 0x039b848d, 0x0280052f, 0x072d0300, - 0x039b8490, 0x0280052f, 0x072d0c00, 0x039b8493, - 0x0280052f, 0x033d0000, 0x07000003, 0x039b8496, - 0x0280052f, 0x040fd075, 0x050fd078, 0x06a006f4, - 0x0380001d, 0x048b049e, 0x03385000, 0x07030000, + 0x06818485, 0x06602475, 0x050f80ff, 0x053fa811, + 0x0700003c, 0x00077013, 0x050fe078, 0x028684a1, + 0x05a004a5, 0x009204a4, 0x060ff0fb, 0x00d0048c, + 0x00800491, 0x00800494, 0x00800497, 0x0180049a, + 0x0080049d, 0x072d0030, 0x029b8491, 0x03800536, + 0x072d00c0, 0x029b8494, 0x03800536, 0x072d0300, + 0x029b8497, 0x03800536, 0x072d0c00, 0x039b849a, + 0x03800536, 0x033d0000, 0x07000003, 0x029b849d, + 0x03800536, 0x040fd075, 0x050fd078, 0x06a006fb, + 0x0380001d, 0x058b04a5, 0x03385000, 0x07030000, 0x05600818, 0x050f80ff, 0x032fa009, 0x07f00000, - 0x054b0400, 0x0308a0ff, 0x029884ad, 0x04693e76, - 0x076c0aff, 0x068184ad, 0x07288200, 0x008004b0, + 0x054b0400, 0x0308a0ff, 0x039884b4, 0x04693e76, + 0x076c0aff, 0x078184b4, 0x07288200, 0x018004b7, 0x0179fe00, 0x070000ff, 0x010880ff, 0x0560087b, 0x050f80ff, 0x012fa809, 0x0609f001, 0x0448b076, - 0x048104df, 0x05601c7b, 0x050f80ff, 0x002fa819, - 0x02790076, 0x03010000, 0x068184d5, 0x02025001, - 0x06483001, 0x048104d5, 0x04600475, 0x050f80ff, + 0x048104e6, 0x05601c7b, 0x050f80ff, 0x002fa819, + 0x02790076, 0x03010000, 0x068184dc, 0x02025001, + 0x06483001, 0x048104dc, 0x04600475, 0x050f80ff, 0x053fa809, 0x06000002, 0x07f00000, 0x054b0405, 0x05780105, 0x07ffff00, 0x075a0005, 0x050fd005, 0x040fd07a, 0x06602475, 0x050f80ff, 0x053fa811, 0x0700003c, 0x06306002, 0x05000430, 0x04600475, - 0x050f80ff, 0x053fa812, 0x06000002, 0x008004df, + 0x050f80ff, 0x053fa812, 0x06000002, 0x008004e6, 0x02080002, 0x01081003, 0x064b0001, 0x00082001, 0x02083001, 0x02079001, 0x0207a001, 0x00084013, - 0x0207f013, 0x0280051f, 0x06485076, 0x07810500, + 0x0207f013, 0x02800526, 0x06485076, 0x06810507, 0x02465076, 0x06601875, 0x050f80ff, 0x073fa021, 0x0600003e, 0x070ff07d, 0x0450047c, 0x050f80ff, - 0x002fa819, 0x048b04ea, 0x02080001, 0x00081002, - 0x01082003, 0x03079003, 0x04487076, 0x048104f8, - 0x00498076, 0x01a18527, 0x04605875, 0x050f80ff, - 0x032fa009, 0x03083000, 0x018004f9, 0x0208307a, - 0x0340007e, 0x0642007f, 0x0681050e, 0x070ff07e, - 0x05a00184, 0x0092850e, 0x02800526, 0x078b0500, + 0x002fa819, 0x048b04f1, 0x02080001, 0x00081002, + 0x01082003, 0x03079003, 0x04487076, 0x058104ff, + 0x00498076, 0x01a1852e, 0x04605875, 0x050f80ff, + 0x032fa009, 0x03083000, 0x03800500, 0x0208307a, + 0x0340007e, 0x0642007f, 0x06810515, 0x070ff07e, + 0x05a00184, 0x00928515, 0x0380052d, 0x068b0507, 0x06601875, 0x050f80ff, 0x073fa041, 0x0600003e, - 0x07f00000, 0x04487076, 0x0781050c, 0x04605875, + 0x07f00000, 0x04487076, 0x06810513, 0x04605875, 0x050f80ff, 0x032fa009, 0x03083000, 0x00498076, - 0x01a18527, 0x06602875, 0x050f80ff, 0x073fa009, - 0x06000007, 0x0008400e, 0x04487076, 0x0681051f, - 0x0007100e, 0x068b0516, 0x04603e75, 0x050f80ff, - 0x053fa841, 0x06000045, 0x078b051b, 0x02385001, - 0x03010000, 0x03800522, 0x068b051f, 0x03385000, - 0x03010000, 0x04278001, 0x040fe07f, 0x02860526, + 0x01a1852e, 0x06602875, 0x050f80ff, 0x073fa009, + 0x06000007, 0x0008400e, 0x04487076, 0x06810526, + 0x0007100e, 0x078b051d, 0x04603e75, 0x050f80ff, + 0x053fa841, 0x06000045, 0x078b0522, 0x02385001, + 0x03010000, 0x02800529, 0x068b0526, 0x03385000, + 0x03010000, 0x04278001, 0x040fe07f, 0x0386052d, 0x01800160, 0x07c00000, 0x04094013, 0x03073072, 0x07440077, 0x040080fb, 0x006b6108, 0x06009075, - 0x07a006db, 0x07c00000, 0x00683e76, 0x06810534, - 0x0448d076, 0x068105df, 0x03800635, 0x07a006cf, - 0x0080049d, 0x06000013, 0x00201001, 0x00202002, - 0x0778aae7, 0x06000001, 0x06810585, 0x050fb000, - 0x070ff000, 0x03d0053f, 0x03800559, 0x02800554, - 0x0280054f, 0x0280054a, 0x03800544, 0x077800e7, - 0x06000001, 0x07810582, 0x072e7200, 0x030190cc, - 0x0280055d, 0x016880e7, 0x07810582, 0x042e7080, - 0x020190cb, 0x0280055d, 0x016820e7, 0x07810582, - 0x042e7020, 0x030190ca, 0x0280055d, 0x016808e7, - 0x07810582, 0x042e7008, 0x030190c9, 0x0280055d, - 0x016802e7, 0x07810582, 0x042e7002, 0x020190c8, - 0x07480077, 0x07810582, 0x03460077, 0x060ff075, - 0x03860582, 0x06003094, 0x0748a003, 0x05818582, + 0x07a006e2, 0x07c00000, 0x00683e76, 0x0681053b, + 0x0448d076, 0x068105e6, 0x0380063c, 0x06a006d6, + 0x008004a4, 0x06000013, 0x00201001, 0x00202002, + 0x0778aae7, 0x06000001, 0x0681058c, 0x050fb000, + 0x070ff000, 0x02d00546, 0x03800560, 0x0280055b, + 0x03800556, 0x02800551, 0x0380054b, 0x077800e7, + 0x06000001, 0x06810589, 0x072e7200, 0x030190cc, + 0x02800564, 0x016880e7, 0x06810589, 0x042e7080, + 0x020190cb, 0x02800564, 0x016820e7, 0x06810589, + 0x042e7020, 0x030190ca, 0x02800564, 0x016808e7, + 0x06810589, 0x042e7008, 0x030190c9, 0x02800564, + 0x016802e7, 0x06810589, 0x042e7002, 0x020190c8, + 0x07480077, 0x06810589, 0x03460077, 0x060ff075, + 0x02860589, 0x06003094, 0x0748a003, 0x04818589, 0x01683e03, 0x02203010, 0x01540403, 0x014a1a03, - 0x060ff073, 0x00540419, 0x0682058f, 0x07810595, - 0x050010ff, 0x01540403, 0x07820571, 0x06003001, + 0x060ff073, 0x00540419, 0x07820596, 0x0781059c, + 0x050010ff, 0x01540403, 0x07820578, 0x06003001, 0x034a3c03, 0x017a02ff, 0x06000c98, 0x040f8073, 0x070fa0ff, 0x070ff003, 0x06500073, 0x03610072, - 0x045c0473, 0x0481857c, 0x03073072, 0x05394000, + 0x045c0473, 0x04818583, 0x03073072, 0x05394000, 0x07000090, 0x07f00000, 0x06003094, 0x07489003, - 0x04818586, 0x03400000, 0x076c0a00, 0x05818539, - 0x07c00000, 0x060ff073, 0x00540419, 0x0681059b, - 0x07820599, 0x01683e03, 0x02203010, 0x01540403, - 0x014a1a03, 0x0280056d, 0x03610072, 0x00540473, - 0x057dfeff, 0x07ffffff, 0x034000ff, 0x0280056d, - 0x040fd075, 0x040fd073, 0x040fd019, 0x03800582, - 0x040fd075, 0x028006f4, 0x06604e75, 0x050f80ff, + 0x0581858d, 0x03400000, 0x076c0a00, 0x04818540, + 0x07c00000, 0x060ff073, 0x00540419, 0x068105a2, + 0x078205a0, 0x01683e03, 0x02203010, 0x01540403, + 0x014a1a03, 0x03800574, 0x03610072, 0x00540473, + 0x057dfeff, 0x07ffffff, 0x034000ff, 0x03800574, + 0x040fd075, 0x040fd073, 0x040fd019, 0x02800589, + 0x040fd075, 0x028006fb, 0x06604e75, 0x050f80ff, 0x053fa809, 0x06000001, 0x07f00000, 0x07602203, 0x050f80ff, 0x053fa809, 0x06000001, 0x05481003, - 0x05818582, 0x07440077, 0x040080fb, 0x006b6108, - 0x06009075, 0x07a006db, 0x03800582, 0x009785ba, + 0x04818589, 0x07440077, 0x040080fb, 0x006b6108, + 0x06009075, 0x07a006e2, 0x02800589, 0x009785c1, 0x07602418, 0x050f80ff, 0x012fa809, 0x06780001, 0x070000ff, 0x075a0000, 0x05602618, 0x050f80ff, 0x012fa809, 0x060ff001, 0x0569feff, 0x054b08ff, 0x075a0000, 0x05600418, 0x050f80ff, 0x012fa809, - 0x040fe007, 0x008685c1, 0x01204000, 0x028005d6, + 0x040fe007, 0x008685c8, 0x01204000, 0x038005dd, 0x05600e06, 0x050f80ff, 0x073fa009, 0x06000002, 0x07f00000, 0x064d0004, 0x00700104, 0x03010000, - 0x06780004, 0x07ff0000, 0x076c00ff, 0x058185cf, + 0x06780004, 0x07ff0000, 0x076c00ff, 0x048185d6, 0x00700104, 0x03010000, 0x064d0004, 0x05600e06, 0x050f80ff, 0x073fa00a, 0x06000002, 0x07f00000, 0x044b0804, 0x0279ff01, 0x0700ffff, 0x05602618, 0x050f80ff, 0x073fa009, 0x06000001, 0x0279ff02, 0x0700ffff, 0x07c00000, 0x04007075, 0x0448b076, - 0x068105fe, 0x02790076, 0x03010000, 0x058185e7, - 0x06483025, 0x048185fe, 0x06489076, 0x078105eb, - 0x03200030, 0x028005ec, 0x03200011, 0x06006075, + 0x07810605, 0x02790076, 0x03010000, 0x058185ee, + 0x06483025, 0x05818605, 0x06489076, 0x068105f2, + 0x03200030, 0x038005f3, 0x03200011, 0x06006075, 0x05a0046c, 0x007a0101, 0x07060000, 0x07303000, - 0x07008290, 0x02496076, 0x058185f6, 0x06006013, - 0x03800611, 0x02400010, 0x078105f6, 0x06006010, + 0x07008290, 0x02496076, 0x048185fd, 0x06006013, + 0x03800618, 0x02400010, 0x068105fd, 0x06006010, 0x06603675, 0x050f80ff, 0x073fa00a, 0x07000003, - 0x03800611, 0x0600007a, 0x02493076, 0x04818607, + 0x03800618, 0x0600007a, 0x02493076, 0x0481860e, 0x06602e75, 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff, 0x06473076, 0x06602e75, 0x050f80ff, 0x032fa00a, 0x05a0045f, 0x007a0101, 0x03010000, 0x06303008, 0x05008000, 0x0600600e, - 0x072d0003, 0x019b8611, 0x04938616, 0x073a0000, + 0x072d0003, 0x019b8618, 0x0593861d, 0x073a0000, 0x06000001, 0x050a4000, 0x060a5001, 0x060a6002, 0x050a7003, 0x040a8004, 0x070a9005, 0x050ae006, - 0x0593862d, 0x07602818, 0x050f80ff, 0x012fa809, + 0x04938634, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, 0x060af001, 0x04780102, 0x07ffff00, - 0x020b0002, 0x053079a0, 0x0700000f, 0x0280062f, - 0x053079a0, 0x0600000e, 0x06489076, 0x06810632, - 0x06446007, 0x060a0007, 0x062d0002, 0x0080049d, - 0x00683e76, 0x076c0aff, 0x07810677, 0x04007013, - 0x06489076, 0x0681063d, 0x03200030, 0x0280063e, + 0x020b0002, 0x053079a0, 0x0700000f, 0x03800636, + 0x053079a0, 0x0600000e, 0x06489076, 0x07810639, + 0x06446007, 0x060a0007, 0x062d0002, 0x008004a4, + 0x00683e76, 0x076c0aff, 0x0781067e, 0x04007013, + 0x06489076, 0x07810644, 0x03200030, 0x02800645, 0x03200011, 0x06006075, 0x05a0046c, 0x007a0101, 0x03070000, 0x04602c75, 0x050f80ff, 0x053fa809, - 0x06000001, 0x03499003, 0x0781064d, 0x07303000, - 0x07008890, 0x053079a0, 0x0700000c, 0x02800651, + 0x06000001, 0x03499003, 0x06810654, 0x07303000, + 0x07008890, 0x053079a0, 0x0700000c, 0x02800658, 0x07303000, 0x04008980, 0x04307920, 0x0700000c, - 0x074d0005, 0x06006013, 0x072d0003, 0x019b8653, - 0x04938658, 0x073a0000, 0x06000001, 0x050a4000, + 0x074d0005, 0x06006013, 0x072d0003, 0x019b865a, + 0x0593865f, 0x073a0000, 0x06000001, 0x050a4000, 0x060a5001, 0x060a6002, 0x050a7003, 0x040a8004, - 0x070a9005, 0x050ae006, 0x0593866f, 0x07602818, + 0x070a9005, 0x050ae006, 0x04938676, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, 0x060af001, 0x04780102, 0x07ffff00, 0x020b0002, 0x007a0107, - 0x07000030, 0x03800671, 0x007a0107, 0x06000020, - 0x06489076, 0x07810674, 0x06446007, 0x060a0007, - 0x062d0002, 0x0080049d, 0x06602e75, 0x050f80ff, + 0x07000030, 0x03800678, 0x007a0107, 0x06000020, + 0x06489076, 0x0781067b, 0x06446007, 0x060a0007, + 0x062d0002, 0x008004a4, 0x06602e75, 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff, 0x06473076, 0x06602e75, 0x050f80ff, 0x032fa00a, 0x04007075, 0x05a0045f, 0x007a0101, 0x03010000, 0x06303008, 0x07008800, 0x074d0005, 0x06600a75, 0x050f80ff, 0x073fa009, 0x07000003, 0x07f00000, 0x054b0406, 0x045a0404, 0x050040ff, 0x0600600e, - 0x072d0003, 0x009b8691, 0x05938696, 0x073aa000, + 0x072d0003, 0x009b8698, 0x0493869d, 0x073aa000, 0x06000004, 0x050a4000, 0x060a5001, 0x060a6002, 0x050a7003, 0x040a8004, 0x070a9005, 0x050ae006, - 0x049386ad, 0x07602818, 0x050f80ff, 0x012fa809, + 0x059386b4, 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000, 0x060af001, 0x04780102, 0x07ffff00, - 0x020b0002, 0x04307920, 0x0700000f, 0x038006af, + 0x020b0002, 0x04307920, 0x0700000f, 0x028006b6, 0x04307920, 0x0600000e, 0x06307d20, 0x0600000e, - 0x0648c076, 0x048186b5, 0x04307920, 0x0600000e, - 0x06489076, 0x078106b8, 0x06446007, 0x060a0007, - 0x062d0002, 0x0080049d, 0x072d0003, 0x019b86bb, - 0x070ff0f6, 0x03687eff, 0x058186bd, 0x050f2074, - 0x06489076, 0x068106c4, 0x06446007, 0x060a0007, - 0x040070fb, 0x049386c8, 0x066a9007, 0x050f40ff, - 0x062d0002, 0x0080049d, 0x01208060, 0x0600901f, - 0x05002021, 0x028006e0, 0x040080fb, 0x066ae108, - 0x06009075, 0x04002076, 0x028006e0, 0x03201100, - 0x048486d9, 0x06420001, 0x048186d5, 0x028006f7, - 0x020e0008, 0x07c00000, 0x03201100, 0x058486ed, - 0x06420001, 0x048186dc, 0x028006f7, 0x050fd009, - 0x040fd008, 0x03201100, 0x058486e7, 0x06420001, - 0x048186e3, 0x028006f7, 0x007a0102, 0x04000101, + 0x0648c076, 0x048186bc, 0x04307920, 0x0600000e, + 0x06489076, 0x068106bf, 0x06446007, 0x060a0007, + 0x062d0002, 0x008004a4, 0x072d0003, 0x009b86c2, + 0x070ff0f6, 0x03687eff, 0x048186c4, 0x050f2074, + 0x06489076, 0x068106cb, 0x06446007, 0x060a0007, + 0x040070fb, 0x059386cf, 0x066a9007, 0x050f40ff, + 0x062d0002, 0x008004a4, 0x01208060, 0x0600901f, + 0x05002021, 0x038006e7, 0x040080fb, 0x066ae108, + 0x06009075, 0x04002076, 0x038006e7, 0x03201100, + 0x048486e0, 0x06420001, 0x048186dc, 0x038006ff, + 0x020e0008, 0x07c00000, 0x03201100, 0x048486f4, + 0x06420001, 0x048186e3, 0x038006ff, 0x050fd009, + 0x040fd008, 0x03201100, 0x058486ee, 0x06420001, + 0x048186ea, 0x038006ff, 0x007a0102, 0x04000101, 0x05600809, 0x050f80ff, 0x073fa00a, 0x06000001, - 0x020e0008, 0x068406f1, 0x030e0009, 0x07c00000, + 0x020e0008, 0x068406f8, 0x030e0009, 0x07c00000, 0x01011009, 0x052e4300, 0x07c00000, 0x052e400f, - 0x01208090, 0x038006d4, 0x070fc0ff, 0x040f8013, - 0x032fa009, 0x038006fa, 0x05008006, 0x05007005, - 0x06006004, 0x07005003, 0x04004002, 0x06003001, - 0x07c00000, 0xf06a0be7, 0x02800004, 0x00000000, - 0x0000a000, 0x00000621, 0x033d0aaa, 0x070aaaaa, - 0x013d1aaa, 0x070aaaaa, 0x008c041c, 0x048e04cb, - 0x058d04d7, 0x028f053e, 0x02910013, 0x040f7029, - 0x02860013, 0x066c001f, 0x07810559, 0x066c0a1f, - 0x06810586, 0x040f702f, 0x0386001d, 0x06000010, - 0x050fb000, 0x066c0079, 0x068105c7, 0x0398001d, - 0x03400000, 0x076c0a00, 0x04818016, 0x07960021, - 0x05998021, 0x06a0009e, 0x02800008, 0x050f7012, - 0x04a683f7, 0x04908008, 0x030150e1, 0x06780015, - 0x07fffff0, 0x06810064, 0x0079fe15, 0x031fffff, - 0x030160ff, 0x064bd415, 0x03d0002d, 0x0180019f, - 0x038000d4, 0x03800035, 0x02800040, 0x0380004b, - 0x03800056, 0x02800076, 0x02800076, 0x040f7025, - 0x01868039, 0x02026016, 0x0280003d, 0x06600025, - 0x050f80ff, 0x073fa00a, 0x0600000b, 0x02025016, - 0x02400029, 0x03800078, 0x050f7021, 0x01868044, - 0x00022016, 0x03800048, 0x07600021, 0x050f80ff, - 0x073fa00a, 0x0600000b, 0x00021016, 0x02400029, - 0x03800078, 0x040f7023, 0x0086804f, 0x00024016, - 0x03800053, 0x06600023, 0x050f80ff, 0x073fa00a, - 0x0600000b, 0x02023016, 0x02400029, 0x03800078, - 0x04600816, 0x050f80ff, 0x012fa839, 0x06780004, - 0x07ffff00, 0x037c00ff, 0x05000700, 0x06810062, - 0x0448e001, 0x04818062, 0x07a000bb, 0x03800078, - 0x040fd016, 0x03800078, 0x0279f015, 0x07ffffff, - 0x04818076, 0x060ff015, 0x03d00069, 0x03800071, - 0x02800073, 0x02800076, 0x02800076, 0x02800076, - 0x02800076, 0x02800076, 0x02800076, 0x03e00000, - 0x02800008, 0x04908073, 0x010140e1, 0x03800078, - 0x060fc010, 0x06a00619, 0x02800008, 0x072e4800, - 0x03016011, 0x0186807e, 0x060fc010, 0x07c00000, - 0x00011010, 0x0647f016, 0x072d000c, 0x009b8080, - 0x04600816, 0x050f80ff, 0x012fa839, 0x0249f001, - 0x04818097, 0x06780004, 0x07ffff00, 0x037c00ff, - 0x07000300, 0x0481809b, 0x0448e001, 0x0481809b, - 0x0079c101, 0x07ffffff, 0x007a0b01, 0x03800000, - 0x04600816, 0x050f80ff, 0x012fa80a, 0x062d0008, - 0x038000bb, 0x062d0008, 0x00011016, 0x052e4c00, - 0x07c00000, 0x062d0008, 0x040fd016, 0x07c00000, - 0x030160eb, 0x0249f016, 0x0481807f, 0x04600816, - 0x050f80ff, 0x012fa839, 0x01494005, 0x068100b6, - 0x06783f01, 0x03800060, 0x027c0501, 0x02800020, - 0x0581809c, 0x040f7025, 0x018680af, 0x02026016, - 0x028000b3, 0x06600025, 0x050f80ff, 0x073fa00a, - 0x0600000b, 0x02025016, 0x02400029, 0x07c00000, - 0x06783f01, 0x03800060, 0x007c0b01, 0x03800000, - 0x0581809c, 0x06601807, 0x070030ff, 0x050f80ff, - 0x012fa809, 0x050f8003, 0x073fa00a, 0x0600000b, - 0x040f7001, 0x038600c9, 0x04600201, 0x050f80ff, - 0x073fa00a, 0x0600000b, 0x07c00000, 0x050f702e, - 0x008680ce, 0x0002e016, 0x0202f016, 0x028000d3, - 0x0760002e, 0x050f80ff, 0x073fa00a, 0x0600000b, - 0x0002e016, 0x07c00000, 0x0430e004, 0x03080000, - 0x06601216, 0x050f80ff, 0x073fa011, 0x07000005, - 0x07f00000, 0x0660000b, 0x050f80ff, 0x022fa019, - 0x0700c000, 0x0279ff02, 0x0700ffff, 0x00017002, - 0x0760280a, 0x050f80ff, 0x012fa809, 0x0079fe01, - 0x0700ffff, 0x055c0417, 0x0781818d, 0x0400d010, - 0x0548e00c, 0x078100ed, 0x0245600e, 0x0548400c, - 0x078100f5, 0x07300000, 0x05001000, 0x04602c16, - 0x050f80ff, 0x032fa00a, 0x0644900e, 0x0560100a, - 0x050f80ff, 0x032fa039, 0x02015002, 0x064b0015, - 0x0379ff03, 0x070000ff, 0x01018003, 0x05420418, - 0x07818100, 0x0045700e, 0x0179fe06, 0x070000ff, - 0x0700f0ff, 0x06006010, 0x04007010, 0x0760280a, + 0x04008013, 0x026b2108, 0x038006db, 0x070fc0ff, + 0x040f8013, 0x032fa009, 0x00800702, 0x05008006, + 0x05007005, 0x06006004, 0x07005003, 0x04004002, + 0x06003001, 0x07c00000, 0xd3228c85, 0x02800004, + 0x00000000, 0x0000a000, 0x0000062a, 0x033d0aaa, + 0x070aaaaa, 0x013d1aaa, 0x070aaaaa, 0x008c041c, + 0x058e04cc, 0x058d04d8, 0x038f0541, 0x02910013, + 0x040f7029, 0x02860013, 0x066c001f, 0x0781055c, + 0x066c0a1f, 0x0781058b, 0x040f702f, 0x0386001d, + 0x06000010, 0x050fb000, 0x066c0079, 0x068105ce, + 0x0398001d, 0x03400000, 0x076c0a00, 0x04818016, + 0x07960021, 0x05998021, 0x06a0009e, 0x02800008, + 0x050f7012, 0x04a683f7, 0x04908008, 0x030150e1, + 0x06780015, 0x07fffff0, 0x06810064, 0x0079fe15, + 0x031fffff, 0x030160ff, 0x064bd415, 0x03d0002d, + 0x0180019f, 0x038000d4, 0x03800035, 0x02800040, + 0x0380004b, 0x03800056, 0x02800076, 0x02800076, + 0x040f7025, 0x01868039, 0x02026016, 0x0280003d, + 0x06600025, 0x050f80ff, 0x073fa00a, 0x0600000b, + 0x02025016, 0x02400029, 0x03800078, 0x050f7021, + 0x01868044, 0x00022016, 0x03800048, 0x07600021, + 0x050f80ff, 0x073fa00a, 0x0600000b, 0x00021016, + 0x02400029, 0x03800078, 0x040f7023, 0x0086804f, + 0x00024016, 0x03800053, 0x06600023, 0x050f80ff, + 0x073fa00a, 0x0600000b, 0x02023016, 0x02400029, + 0x03800078, 0x04600816, 0x050f80ff, 0x012fa839, + 0x06780004, 0x07ffff00, 0x037c00ff, 0x05000700, + 0x06810062, 0x0448e001, 0x04818062, 0x07a000bb, + 0x03800078, 0x040fd016, 0x03800078, 0x0279f015, + 0x07ffffff, 0x04818076, 0x060ff015, 0x03d00069, + 0x03800071, 0x02800073, 0x02800076, 0x02800076, + 0x02800076, 0x02800076, 0x02800076, 0x02800076, + 0x03e00000, 0x02800008, 0x04908073, 0x010140e1, + 0x03800078, 0x060fc010, 0x07a00622, 0x02800008, + 0x072e4800, 0x03016011, 0x0186807e, 0x060fc010, + 0x07c00000, 0x00011010, 0x0647f016, 0x072d000c, + 0x009b8080, 0x04600816, 0x050f80ff, 0x012fa839, + 0x0249f001, 0x04818097, 0x06780004, 0x07ffff00, + 0x037c00ff, 0x07000300, 0x0481809b, 0x0448e001, + 0x0481809b, 0x0079c101, 0x07ffffff, 0x007a0b01, + 0x03800000, 0x04600816, 0x050f80ff, 0x012fa80a, + 0x062d0008, 0x038000bb, 0x062d0008, 0x00011016, + 0x052e4c00, 0x07c00000, 0x062d0008, 0x040fd016, + 0x07c00000, 0x030160eb, 0x0249f016, 0x0481807f, + 0x04600816, 0x050f80ff, 0x012fa839, 0x01494005, + 0x068100b6, 0x06783f01, 0x03800060, 0x027c0501, + 0x02800020, 0x0581809c, 0x040f7025, 0x018680af, + 0x02026016, 0x028000b3, 0x06600025, 0x050f80ff, + 0x073fa00a, 0x0600000b, 0x02025016, 0x02400029, + 0x07c00000, 0x06783f01, 0x03800060, 0x007c0b01, + 0x03800000, 0x0581809c, 0x06601807, 0x070030ff, + 0x050f80ff, 0x012fa809, 0x050f8003, 0x073fa00a, + 0x0600000b, 0x040f7001, 0x038600c9, 0x04600201, + 0x050f80ff, 0x073fa00a, 0x0600000b, 0x07c00000, + 0x050f702e, 0x008680ce, 0x0002e016, 0x0202f016, + 0x028000d3, 0x0760002e, 0x050f80ff, 0x073fa00a, + 0x0600000b, 0x0002e016, 0x07c00000, 0x0430e004, + 0x03080000, 0x06601216, 0x050f80ff, 0x073fa011, + 0x07000005, 0x07f00000, 0x0660000b, 0x050f80ff, + 0x022fa019, 0x0700c000, 0x0279ff02, 0x0700ffff, + 0x00017002, 0x0760280a, 0x050f80ff, 0x012fa809, + 0x0079fe01, 0x0700ffff, 0x055c0417, 0x0781818d, + 0x0400d010, 0x0548e00c, 0x078100ed, 0x0245600e, + 0x0548400c, 0x078100f5, 0x07300000, 0x05001000, + 0x04602c16, 0x050f80ff, 0x032fa00a, 0x0644900e, + 0x0560100a, 0x050f80ff, 0x032fa039, 0x02015002, + 0x064b0015, 0x0379ff03, 0x070000ff, 0x01018003, + 0x05420418, 0x07818100, 0x0045700e, 0x0179fe06, + 0x070000ff, 0x0700f0ff, 0x06006010, 0x04007010, + 0x0760280a, 0x050f80ff, 0x073fa009, 0x06000004, + 0x07f00000, 0x064b8408, 0x040080ce, 0x04500408, 0x050f80ff, 0x073fa009, 0x06000004, 0x07f00000, - 0x064b8408, 0x040080ce, 0x04500408, 0x050f80ff, - 0x073fa009, 0x06000004, 0x07f00000, 0x04603216, - 0x050f80ff, 0x063fa02a, 0x06000002, 0x0769ff00, - 0x076c9000, 0x0481011a, 0x076cd400, 0x0781811b, - 0x0444b00e, 0x0368060f, 0x01d0011d, 0x0080013e, - 0x01800139, 0x00800140, 0x01800121, 0x056cea00, - 0x0781818d, 0x0748300f, 0x05810135, 0x0560260a, - 0x050f80ff, 0x073fa009, 0x06000002, 0x06005010, - 0x06006010, 0x04602616, 0x050f80ff, 0x063fa01a, - 0x06000002, 0x07f00000, 0x0760180a, 0x050f80ff, - 0x053fa812, 0x06000002, 0x07f00000, 0x027a030d, - 0x03080000, 0x0444b00e, 0x01800139, 0x007a010e, - 0x07001800, 0x076c3000, 0x03a182e4, 0x07818172, - 0x0220f002, 0x01800147, 0x0120d081, 0x007a010e, - 0x05001000, 0x076c3000, 0x03a182e4, 0x07818172, - 0x0220f004, 0x0548400c, 0x0581014e, 0x0220f00e, - 0x0444100d, 0x0748600c, 0x0581014e, 0x0444200d, - 0x056cea00, 0x05810153, 0x0548700c, 0x05810153, - 0x0644900d, 0x024a1815, 0x004a2c15, 0x04500415, - 0x070030ff, 0x0700000f, 0x017a0100, 0x05004000, - 0x0400100e, 0x05304000, 0x07000030, 0x04002010, - 0x0600500d, 0x0700600a, 0x0400700b, 0x05008017, - 0x06600616, 0x050f80ff, 0x022fa04a, 0x0448b00e, - 0x05818056, 0x050f7027, 0x0286816b, 0x00028016, - 0x0180016f, 0x07600027, 0x050f80ff, 0x073fa00a, - 0x0600000b, 0x00027016, 0x02400029, 0x03800078, - 0x040fd016, 0x050fd00a, 0x0560100a, 0x050f80ff, - 0x032fa009, 0x05780100, 0x07ffff00, 0x017a0700, - 0x06000001, 0x050f80ff, 0x032fa00a, 0x07f00000, - 0x0760140a, 0x050f80ff, 0x022fa019, 0x05780100, - 0x07ffff00, 0x076a0500, 0x00202001, 0x0560260a, - 0x050f80ff, 0x012fa809, 0x06003010, 0x0760140a, - 0x050f80ff, 0x032fa022, 0x00800197, 0x050fd00a, - 0x0560100a, 0x050f80ff, 0x032fa009, 0x0379ff00, - 0x0380ffff, 0x0145b000, 0x0560100a, 0x050f80ff, - 0x032fa00a, 0x07303000, 0x07000030, 0x04600e16, - 0x050f80ff, 0x053fa80a, 0x06000001, 0x06a003e6, - 0x03800078, 0x06600616, 0x050f80ff, 0x012fa841, - 0x0079fe01, 0x070000ff, 0x070090ff, 0x0400d010, - 0x0600a007, 0x0400b008, 0x0560100a, 0x050f80ff, - 0x032fa009, 0x0769ff00, 0x0660000b, 0x050f80ff, - 0x073fa009, 0x07000006, 0x07f00000, 0x04602c16, - 0x050f80ff, 0x053fa809, 0x0600000b, 0x07479017, - 0x056c0e09, 0x058101bd, 0x076c0c09, 0x058101bd, - 0x050fd009, 0x06a00619, 0x03800078, 0x05601c0a, - 0x050f80ff, 0x053fa809, 0x06000007, 0x07f00000, - 0x074b000f, 0x0748300f, 0x058101ca, 0x07446000, - 0x04602c16, 0x050f80ff, 0x053fa80a, 0x0600000b, - 0x0368060f, 0x01d001cc, 0x008001d0, 0x0180024b, - 0x00800208, 0x0180027d, 0x0748f00f, 0x0581027b, - 0x0530e042, 0x02080002, 0x0578400f, 0x06000020, - 0x017c40ff, 0x06000020, 0x068181dc, 0x0748500c, - 0x048101dc, 0x03459017, 0x04602c16, 0x050f80ff, - 0x053fa80a, 0x0600000b, 0x0569800f, 0x078181e8, - 0x0548d00f, 0x068181e5, 0x0644a00e, 0x056c0e09, - 0x058101f3, 0x0080027f, 0x050010ff, 0x046c8001, - 0x078181fa, 0x056c0e09, 0x058101f3, 0x0560200a, - 0x050f80ff, 0x012fa809, 0x04780101, 0x07ffff00, - 0x0481027f, 0x01498017, 0x058101f6, 0x0644900e, - 0x06300001, 0x04000410, 0x05a00295, 0x03800035, - 0x026d0001, 0x048101fd, 0x0180027d, 0x0530e042, - 0x02080002, 0x01498017, 0x04810202, 0x0644900e, + 0x04603216, 0x050f80ff, 0x063fa02a, 0x06000002, + 0x0769ff00, 0x076c9000, 0x0481011a, 0x076cd400, + 0x0781811b, 0x0444b00e, 0x0368060f, 0x01d0011d, + 0x0080013e, 0x01800139, 0x00800140, 0x01800121, + 0x056cea00, 0x0781818d, 0x0748300f, 0x05810135, + 0x0560260a, 0x050f80ff, 0x073fa009, 0x06000002, + 0x06005010, 0x06006010, 0x04602616, 0x050f80ff, + 0x063fa01a, 0x06000002, 0x07f00000, 0x0760180a, + 0x050f80ff, 0x053fa812, 0x06000002, 0x07f00000, + 0x027a030d, 0x03080000, 0x0444b00e, 0x01800139, + 0x007a010e, 0x07001800, 0x076c3000, 0x03a182e4, + 0x07818172, 0x0220f002, 0x01800147, 0x0120d081, + 0x007a010e, 0x05001000, 0x076c3000, 0x03a182e4, + 0x07818172, 0x0220f004, 0x0548400c, 0x0581014e, + 0x0220f00e, 0x0444100d, 0x0748600c, 0x0581014e, + 0x0444200d, 0x056cea00, 0x05810153, 0x0548700c, + 0x05810153, 0x0644900d, 0x024a1815, 0x004a2c15, + 0x04500415, 0x070030ff, 0x0700000f, 0x017a0100, + 0x05004000, 0x0400100e, 0x05304000, 0x07000030, + 0x04002010, 0x0600500d, 0x0700600a, 0x0400700b, + 0x05008017, 0x06600616, 0x050f80ff, 0x022fa04a, + 0x0448b00e, 0x05818056, 0x050f7027, 0x0286816b, + 0x00028016, 0x0180016f, 0x07600027, 0x050f80ff, + 0x073fa00a, 0x0600000b, 0x00027016, 0x02400029, + 0x03800078, 0x040fd016, 0x050fd00a, 0x0560100a, + 0x050f80ff, 0x032fa009, 0x05780100, 0x07ffff00, + 0x017a0700, 0x06000001, 0x050f80ff, 0x032fa00a, + 0x07f00000, 0x0760140a, 0x050f80ff, 0x022fa019, + 0x05780100, 0x07ffff00, 0x076a0500, 0x00202001, + 0x0560260a, 0x050f80ff, 0x012fa809, 0x06003010, + 0x0760140a, 0x050f80ff, 0x032fa022, 0x00800197, + 0x050fd00a, 0x0560100a, 0x050f80ff, 0x032fa009, + 0x0379ff00, 0x0380ffff, 0x0145b000, 0x0560100a, + 0x050f80ff, 0x032fa00a, 0x07303000, 0x07000030, + 0x04600e16, 0x050f80ff, 0x053fa80a, 0x06000001, + 0x06a003e6, 0x03800078, 0x06600616, 0x050f80ff, + 0x012fa841, 0x0079fe01, 0x070000ff, 0x070090ff, + 0x0400d010, 0x0600a007, 0x0400b008, 0x0560100a, + 0x050f80ff, 0x032fa009, 0x0769ff00, 0x0660000b, + 0x050f80ff, 0x073fa009, 0x07000006, 0x07f00000, + 0x04602c16, 0x050f80ff, 0x053fa809, 0x0600000b, + 0x07479017, 0x056c0e09, 0x058101bd, 0x076c0c09, + 0x058101bd, 0x050fd009, 0x07a00622, 0x03800078, + 0x05601c0a, 0x050f80ff, 0x053fa809, 0x06000007, + 0x07f00000, 0x074b000f, 0x0748300f, 0x058101ca, + 0x07446000, 0x04602c16, 0x050f80ff, 0x053fa80a, + 0x0600000b, 0x0368060f, 0x01d001cc, 0x008001d0, + 0x0180024b, 0x00800208, 0x0180027d, 0x0748f00f, + 0x0581027b, 0x0530e042, 0x02080002, 0x0578400f, + 0x06000020, 0x017c40ff, 0x06000020, 0x068181dc, + 0x0748500c, 0x048101dc, 0x03459017, 0x04602c16, + 0x050f80ff, 0x053fa80a, 0x0600000b, 0x0569800f, + 0x078181e8, 0x0548d00f, 0x068181e5, 0x0644a00e, + 0x056c0e09, 0x058101f3, 0x0080027f, 0x050010ff, + 0x046c8001, 0x078181fa, 0x056c0e09, 0x058101f3, + 0x0560200a, 0x050f80ff, 0x012fa809, 0x04780101, + 0x07ffff00, 0x0481027f, 0x01498017, 0x058101f6, + 0x0644900e, 0x06300001, 0x04000410, 0x05a00295, + 0x03800035, 0x026d0001, 0x048101fd, 0x0180027d, + 0x0530e042, 0x02080002, 0x01498017, 0x04810202, + 0x0644900e, 0x05a002b2, 0x06818279, 0x07300003, + 0x05000430, 0x05a00295, 0x03800056, 0x0630e445, + 0x02080002, 0x056c0e09, 0x0681827f, 0x0748f00f, + 0x04810215, 0x0569800f, 0x0781827d, 0x0548d00f, + 0x07818217, 0x007a010e, 0x06000010, 0x0180021d, + 0x0246a00e, 0x0180021d, 0x0246a00e, 0x0748500f, + 0x0581021d, 0x0748500c, 0x0581021d, 0x03459017, + 0x0349a017, 0x07818224, 0x04602c16, 0x050f80ff, + 0x053fa80a, 0x0600000b, 0x0180022e, 0x0747a017, + 0x05001017, 0x0760220a, 0x050f80ff, 0x073fa009, + 0x06000001, 0x07f00000, 0x04602c16, 0x050f80ff, + 0x012fa812, 0x01498017, 0x05810233, 0x0644900e, + 0x0279ff0e, 0x07ffffeb, 0x0448700e, 0x04810245, + 0x06601216, 0x050f80ff, 0x012fa809, 0x07f00000, + 0x04600201, 0x050f80ff, 0x012fa809, 0x07f00000, + 0x06601401, 0x050f80ff, 0x012fa809, 0x060ff001, + 0x075a00ff, 0x04810245, 0x0279ff0e, 0x07ffffeb, 0x05a002b2, 0x06818279, 0x07300003, 0x05000430, - 0x05a00295, 0x03800056, 0x0630e445, 0x02080002, - 0x056c0e09, 0x0681827f, 0x0748f00f, 0x04810215, - 0x0569800f, 0x0781827d, 0x0548d00f, 0x07818217, - 0x007a010e, 0x06000010, 0x0180021d, 0x0246a00e, - 0x0180021d, 0x0246a00e, 0x0748500f, 0x0581021d, - 0x0748500c, 0x0581021d, 0x03459017, 0x0349a017, - 0x07818224, 0x04602c16, 0x050f80ff, 0x053fa80a, - 0x0600000b, 0x0180022e, 0x0747a017, 0x05001017, - 0x0760220a, 0x050f80ff, 0x073fa009, 0x06000001, - 0x07f00000, 0x04602c16, 0x050f80ff, 0x012fa812, - 0x01498017, 0x05810233, 0x0644900e, 0x0279ff0e, - 0x07ffffeb, 0x0448700e, 0x04810245, 0x06601216, - 0x050f80ff, 0x012fa809, 0x07f00000, 0x04600201, - 0x050f80ff, 0x012fa809, 0x07f00000, 0x06601401, - 0x050f80ff, 0x012fa809, 0x060ff001, 0x075a00ff, - 0x04810245, 0x0279ff0e, 0x07ffffeb, 0x05a002b2, - 0x06818279, 0x07300003, 0x05000430, 0x05a00295, - 0x03800056, 0x056c0e09, 0x0681827f, 0x0430e001, - 0x02080002, 0x0644000d, 0x0447400d, 0x0748f00f, - 0x05810265, 0x0569800f, 0x0781827d, 0x0578400f, - 0x06000020, 0x017c40ff, 0x06000020, 0x0681825e, - 0x0748500c, 0x0481025e, 0x03459017, 0x01800265, - 0x0049100d, 0x07818265, 0x0548700c, 0x07818265, - 0x07486000, 0x07818265, 0x0045400d, 0x04602c16, - 0x050f80ff, 0x053fa80a, 0x0600000b, 0x05a002b2, - 0x06818279, 0x01498017, 0x04810275, 0x0644900e, - 0x0444100d, 0x0630000e, 0x04000420, 0x0748600c, - 0x05810277, 0x0444200d, 0x01800277, 0x06300004, - 0x04000420, 0x05a00295, 0x03800035, 0x02200010, - 0x00800280, 0x02200001, 0x00800280, 0x03200006, - 0x00800280, 0x02200004, 0x040fd016, 0x050fd00a, - 0x050fd000, 0x0760140a, 0x050f80ff, 0x032fa00a, - 0x07f00000, 0x04600e16, 0x050f80ff, 0x053fa809, - 0x06000001, 0x05780103, 0x070000ff, 0x017a0103, - 0x07000600, 0x04600e16, 0x050f80ff, 0x053fa80a, - 0x06000001, 0x06a003e6, 0x03800078, 0x0760140a, - 0x050f80ff, 0x053fa809, 0x06000001, 0x07f00000, - 0x074b0003, 0x034a1803, 0x014a2c03, 0x05500403, - 0x070030ff, 0x0400100e, 0x04002010, 0x04600e16, - 0x050f80ff, 0x073fa009, 0x06000002, 0x0600500d, - 0x0700600a, 0x0400700b, 0x0460040b, 0x050f80ff, - 0x073fa009, 0x06000004, 0x0279ff08, 0x0700ffff, - 0x06600616, 0x050f80ff, 0x022fa04a, 0x07c00000, - 0x03681e00, 0x070090ff, 0x076c2400, 0x048102cd, - 0x056cf400, 0x048102ba, 0x076ce400, 0x068182df, - 0x0748000f, 0x058102bd, 0x0444b00d, 0x0548100f, - 0x058102c0, 0x0444700e, 0x06a00364, 0x078182e2, - 0x0760220a, 0x050f80ff, 0x0448b00d, 0x058102c9, - 0x073fa009, 0x06000004, 0x008002d3, 0x043fa819, - 0x06000002, 0x05008005, 0x008002d3, 0x0760220a, - 0x050f80ff, 0x043fa819, 0x06000002, 0x05008005, - 0x0500100a, 0x06780007, 0x07ffff00, 0x058102d7, - 0x0245500e, 0x0560160a, 0x050f80ff, 0x053fa809, - 0x06000001, 0x0379ff03, 0x070000ff, 0x01018003, - 0x03800318, 0x040fd016, 0x050fd00a, 0x02800619, - 0x056a02ff, 0x07c00000, 0x0447400e, 0x03681e00, - 0x070090ff, 0x076c3000, 0x07810312, 0x076c9000, - 0x07810312, 0x056cea00, 0x068182ef, 0x02209008, - 0x03800312, 0x056cd000, 0x058102f6, 0x076cd400, - 0x058102f6, 0x040fd016, 0x050fd00a, 0x02800619, - 0x0748000f, 0x058102f9, 0x0444700e, 0x0548100f, - 0x058102fc, 0x0444b00d, 0x06a00364, 0x05818311, - 0x0448700d, 0x05818317, 0x0644500e, 0x070ff009, + 0x05a00295, 0x03800056, 0x056c0e09, 0x0681827f, + 0x0430e001, 0x02080002, 0x0644000d, 0x0447400d, + 0x0748f00f, 0x05810265, 0x0569800f, 0x0781827d, + 0x0578400f, 0x06000020, 0x017c40ff, 0x06000020, + 0x0681825e, 0x0748500c, 0x0481025e, 0x03459017, + 0x01800265, 0x0049100d, 0x07818265, 0x0548700c, + 0x07818265, 0x07486000, 0x07818265, 0x0045400d, + 0x04602c16, 0x050f80ff, 0x053fa80a, 0x0600000b, + 0x05a002b2, 0x06818279, 0x01498017, 0x04810275, + 0x0644900e, 0x0444100d, 0x0630000e, 0x04000420, + 0x0748600c, 0x05810277, 0x0444200d, 0x01800277, + 0x06300004, 0x04000420, 0x05a00295, 0x03800035, + 0x02200010, 0x00800280, 0x02200001, 0x00800280, + 0x03200006, 0x00800280, 0x02200004, 0x040fd016, + 0x050fd00a, 0x050fd000, 0x0760140a, 0x050f80ff, + 0x032fa00a, 0x07f00000, 0x04600e16, 0x050f80ff, + 0x053fa809, 0x06000001, 0x05780103, 0x070000ff, + 0x017a0103, 0x07000600, 0x04600e16, 0x050f80ff, + 0x053fa80a, 0x06000001, 0x06a003e6, 0x03800078, + 0x0760140a, 0x050f80ff, 0x053fa809, 0x06000001, + 0x07f00000, 0x074b0003, 0x034a1803, 0x014a2c03, + 0x05500403, 0x070030ff, 0x0400100e, 0x04002010, + 0x04600e16, 0x050f80ff, 0x073fa009, 0x06000002, + 0x0600500d, 0x0700600a, 0x0400700b, 0x0460040b, + 0x050f80ff, 0x073fa009, 0x06000004, 0x0279ff08, + 0x0700ffff, 0x06600616, 0x050f80ff, 0x022fa04a, + 0x07c00000, 0x03681e00, 0x070090ff, 0x076c2400, + 0x048102cd, 0x056cf400, 0x048102ba, 0x076ce400, + 0x068182df, 0x0748000f, 0x058102bd, 0x0444b00d, + 0x0548100f, 0x058102c0, 0x0444700e, 0x06a00364, + 0x078182e2, 0x0760220a, 0x050f80ff, 0x0448b00d, + 0x058102c9, 0x073fa009, 0x06000004, 0x008002d3, + 0x043fa819, 0x06000002, 0x05008005, 0x008002d3, + 0x0760220a, 0x050f80ff, 0x043fa819, 0x06000002, + 0x05008005, 0x0500100a, 0x06780007, 0x07ffff00, + 0x058102d7, 0x0245500e, 0x0560160a, 0x050f80ff, + 0x053fa809, 0x06000001, 0x0379ff03, 0x070000ff, + 0x01018003, 0x03800318, 0x040fd016, 0x050fd00a, + 0x03800622, 0x056a02ff, 0x07c00000, 0x0447400e, + 0x03681e00, 0x070090ff, 0x076c3000, 0x07810312, + 0x076c9000, 0x07810312, 0x056cea00, 0x068182ef, + 0x02209008, 0x03800312, 0x056cd000, 0x058102f6, + 0x076cd400, 0x058102f6, 0x040fd016, 0x050fd00a, + 0x03800622, 0x0748000f, 0x058102f9, 0x0444700e, + 0x0548100f, 0x058102fc, 0x0444b00d, 0x06a00364, + 0x05818311, 0x0448700d, 0x05818317, 0x0644500e, + 0x070ff009, 0x0550041b, 0x050f80ff, 0x073fa009, + 0x06000001, 0x0320000c, 0x02400002, 0x04488004, + 0x0781030c, 0x02400002, 0x0320000f, 0x07003018, + 0x06601816, 0x050f80ff, 0x032fa022, 0x075c00ff, + 0x07c00000, 0x0500100a, 0x0560260a, 0x050f80ff, + 0x053fa809, 0x07000003, 0x04008010, 0x06a00320, + 0x0481831f, 0x07003018, 0x06601816, 0x050f80ff, + 0x022fa04a, 0x075c00ff, 0x07c00000, 0x070ff009, 0x0550041b, 0x050f80ff, 0x073fa009, 0x06000001, - 0x0320000c, 0x02400002, 0x04488004, 0x0781030c, - 0x02400002, 0x0320000f, 0x07003018, 0x06601816, - 0x050f80ff, 0x032fa022, 0x075c00ff, 0x07c00000, - 0x0500100a, 0x0560260a, 0x050f80ff, 0x053fa809, - 0x07000003, 0x04008010, 0x06a00320, 0x0481831f, - 0x07003018, 0x06601816, 0x050f80ff, 0x022fa04a, - 0x075c00ff, 0x07c00000, 0x070ff009, 0x0550041b, - 0x050f80ff, 0x073fa009, 0x06000001, 0x0448b00d, - 0x04818329, 0x0448700e, 0x0781032d, 0x02400002, - 0x0049700d, 0x0781032d, 0x02400002, 0x07a0033c, - 0x0581833a, 0x060ff001, 0x05500400, 0x050f80ff, - 0x063fa019, 0x06000002, 0x07f00000, 0x07420018, - 0x0681033b, 0x02400002, 0x07a0033c, 0x0681033b, - 0x056a02ff, 0x07c00000, 0x070ff01d, 0x00540402, - 0x03d0033f, 0x02800345, 0x03800347, 0x02800349, - 0x0380034b, 0x0380034d, 0x0280034f, 0x03200009, - 0x02800362, 0x0320000c, 0x02800362, 0x0320000f, - 0x02800362, 0x03200012, 0x02800362, 0x02200015, - 0x02800362, 0x04600201, 0x050f80ff, 0x012fa809, - 0x040f7001, 0x0286035e, 0x04601001, 0x050f80ff, - 0x073fa009, 0x06000001, 0x02681e02, 0x0550041b, - 0x050f80ff, 0x073fa009, 0x06000001, 0x0380033c, - 0x040fd016, 0x040fd002, 0x056a02ff, 0x03800363, - 0x075c00ff, 0x07c00000, 0x0560020a, 0x050f80ff, - 0x053fa809, 0x06000007, 0x050f700f, 0x038603e4, - 0x0560100f, 0x050f80ff, 0x053fa809, 0x06000004, - 0x0769ff09, 0x056c9409, 0x058183e4, 0x05602a0a, - 0x050f80ff, 0x063fa019, 0x07000003, 0x07000006, - 0x0079fe07, 0x070000ff, 0x050010ff, 0x0760120f, - 0x050f80ff, 0x063fa019, 0x06000002, 0x0379ff05, - 0x070000ff, 0x074b0c05, 0x055a0405, 0x070050ff, - 0x0079fe04, 0x070000ff, 0x050020ff, 0x064b0c04, - 0x045a0402, 0x050020ff, 0x064b0004, 0x04487004, - 0x06810392, 0x0379ff05, 0x070000ff, 0x04488004, - 0x04818398, 0x04007010, 0x04008010, 0x04444004, - 0x04488004, 0x068103ad, 0x02680604, 0x076c06ff, - 0x04818398, 0x00464004, 0x0045700d, 0x0045800e, - 0x05601a0f, 0x050f80ff, 0x073fa009, 0x0700000c, - 0x07f00000, 0x074b0018, 0x07600a0a, 0x050f80ff, - 0x053fa809, 0x06000001, 0x050f80ff, 0x073fa00a, - 0x06000008, 0x07f00000, 0x06604e16, 0x050f80ff, - 0x053fa80a, 0x06000001, 0x07f00000, 0x04605816, - 0x050f80ff, 0x073fa00a, 0x07000003, 0x06486004, - 0x058183c5, 0x04780107, 0x07ffff00, 0x004a8c07, - 0x04780107, 0x07ff0000, 0x004a8007, 0x045a0407, - 0x045a0404, 0x050040ff, 0x06780008, 0x07ff00ff, - 0x0279ff08, 0x0700ff00, 0x014c80ff, 0x044d8008, - 0x045a0408, 0x070030ff, 0x028003dc, 0x04780107, - 0x07ffff00, 0x0079fe08, 0x070000ff, 0x045a0407, - 0x050070ff, 0x06780007, 0x07ff00ff, 0x0279ff07, - 0x0700ff00, 0x054d80ff, 0x004c8007, 0x045a0407, - 0x070030ff, 0x04780108, 0x07ffff00, 0x004a8c08, - 0x04780108, 0x07ff0000, 0x004a8008, 0x045a0408, - 0x045a0404, 0x050040ff, 0x04603e16, 0x050f80ff, - 0x022fa032, 0x0500100f, 0x05007006, 0x01681f09, - 0x075c00ff, 0x07c00000, 0x056a02ff, 0x07c00000, - 0x050f7012, 0x038603ed, 0x06600013, 0x050f80ff, - 0x073fa00a, 0x0600000b, 0x07c00000, 0x070ff0e2, - 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000, - 0x05820412, 0x05810412, 0x00012016, 0x02013016, - 0x07c00000, 0x070ff0e2, 0x077800ff, 0x033e0000, - 0x077400ff, 0x031a0000, 0x078203ff, 0x078103ff, - 0x07c00000, 0x03016012, 0x06600016, 0x050f80ff, - 0x032fa009, 0x07f00000, 0x06600016, 0x050f80ff, - 0x073fa00a, 0x06000008, 0x050f7000, 0x0186040c, - 0x01012000, 0x0080040e, 0x00012010, 0x02013010, - 0x04600816, 0x050f80ff, 0x073fa009, 0x06000007, - 0x0647f00e, 0x007a010e, 0x04000101, 0x04600816, - 0x050f80ff, 0x073fa00a, 0x06000007, 0x072e0030, - 0x020e0016, 0x07c00000, 0x0391000a, 0x0784001d, - 0x022c0004, 0x046c041f, 0x04810431, 0x046c021f, - 0x05810481, 0x066c0c1f, 0x05810493, 0x046c081f, - 0x058104a5, 0x066c061f, 0x048104bf, 0x0721f000, - 0x0202c010, 0x0202a010, 0x02020010, 0x052e5800, - 0x02b60079, 0x058d04d7, 0x0380000c, 0x040f702a, - 0x0086042a, 0x06000010, 0x04001010, 0x0760182b, - 0x050f80ff, 0x032fa012, 0x07f00000, 0x0460082a, - 0x050f80ff, 0x053fa809, 0x06000001, 0x07780003, - 0x03400000, 0x05810471, 0x0560102b, 0x050f80ff, - 0x032fa009, 0x0769ff00, 0x076c3000, 0x05810448, - 0x056cd000, 0x07818471, 0x05601c2b, 0x050f80ff, - 0x032fa009, 0x05444000, 0x07445000, 0x032fa00a, - 0x06300002, 0x05000430, 0x0660062a, 0x050f80ff, - 0x032fa00a, 0x07f00000, 0x0560262b, 0x050f80ff, - 0x032fa009, 0x04001010, 0x04002010, 0x0460262a, - 0x050f80ff, 0x022fa01a, 0x07f00000, 0x06600a2a, - 0x050f80ff, 0x012fa80a, 0x07f00000, 0x0460082a, - 0x050f80ff, 0x012fa80a, 0x0079c101, 0x07ffffff, - 0x007a0b01, 0x03800000, 0x05780100, 0x07ffff00, - 0x0581046c, 0x02455001, 0x0460082a, 0x050f80ff, - 0x012fa80a, 0x0201602a, 0x07a000bb, 0x06420029, + 0x0448b00d, 0x04818329, 0x0448700e, 0x0781032d, + 0x02400002, 0x0049700d, 0x0781032d, 0x02400002, + 0x07a0033c, 0x0581833a, 0x060ff001, 0x05500400, + 0x050f80ff, 0x063fa019, 0x06000002, 0x07f00000, + 0x07420018, 0x0681033b, 0x02400002, 0x07a0033c, + 0x0681033b, 0x056a02ff, 0x07c00000, 0x070ff01d, + 0x00540402, 0x03d0033f, 0x02800345, 0x03800347, + 0x02800349, 0x0380034b, 0x0380034d, 0x0280034f, + 0x03200009, 0x02800362, 0x0320000c, 0x02800362, + 0x0320000f, 0x02800362, 0x03200012, 0x02800362, + 0x02200015, 0x02800362, 0x04600201, 0x050f80ff, + 0x012fa809, 0x040f7001, 0x0286035e, 0x04601001, + 0x050f80ff, 0x073fa009, 0x06000001, 0x02681e02, + 0x0550041b, 0x050f80ff, 0x073fa009, 0x06000001, + 0x0380033c, 0x040fd016, 0x040fd002, 0x056a02ff, + 0x03800363, 0x075c00ff, 0x07c00000, 0x0560020a, + 0x050f80ff, 0x053fa809, 0x06000007, 0x050f700f, + 0x038603e4, 0x0560100f, 0x050f80ff, 0x053fa809, + 0x06000004, 0x0769ff09, 0x056c9409, 0x058183e4, + 0x05602a0a, 0x050f80ff, 0x063fa019, 0x07000003, + 0x07000006, 0x0079fe07, 0x070000ff, 0x050010ff, + 0x0760120f, 0x050f80ff, 0x063fa019, 0x06000002, + 0x0379ff05, 0x070000ff, 0x074b0c05, 0x055a0405, + 0x070050ff, 0x0079fe04, 0x070000ff, 0x050020ff, + 0x064b0c04, 0x045a0402, 0x050020ff, 0x064b0004, + 0x04487004, 0x06810392, 0x0379ff05, 0x070000ff, + 0x04488004, 0x04818398, 0x04007010, 0x04008010, + 0x04444004, 0x04488004, 0x068103ad, 0x02680604, + 0x076c06ff, 0x04818398, 0x00464004, 0x0045700d, + 0x0045800e, 0x05601a0f, 0x050f80ff, 0x073fa009, + 0x0700000c, 0x07f00000, 0x074b0018, 0x07600a0a, + 0x050f80ff, 0x053fa809, 0x06000001, 0x050f80ff, + 0x073fa00a, 0x06000008, 0x07f00000, 0x06604e16, + 0x050f80ff, 0x053fa80a, 0x06000001, 0x07f00000, + 0x04605816, 0x050f80ff, 0x073fa00a, 0x07000003, + 0x06486004, 0x058183c5, 0x04780107, 0x07ffff00, + 0x004a8c07, 0x04780107, 0x07ff0000, 0x004a8007, + 0x045a0407, 0x045a0404, 0x050040ff, 0x06780008, + 0x07ff00ff, 0x0279ff08, 0x0700ff00, 0x014c80ff, + 0x044d8008, 0x045a0408, 0x070030ff, 0x028003dc, + 0x04780107, 0x07ffff00, 0x0079fe08, 0x070000ff, + 0x045a0407, 0x050070ff, 0x06780007, 0x07ff00ff, + 0x0279ff07, 0x0700ff00, 0x054d80ff, 0x004c8007, + 0x045a0407, 0x070030ff, 0x04780108, 0x07ffff00, + 0x004a8c08, 0x04780108, 0x07ff0000, 0x004a8008, + 0x045a0408, 0x045a0404, 0x050040ff, 0x04603e16, + 0x050f80ff, 0x022fa032, 0x0500100f, 0x05007006, + 0x01681f09, 0x075c00ff, 0x07c00000, 0x056a02ff, + 0x07c00000, 0x050f7012, 0x038603ed, 0x06600013, + 0x050f80ff, 0x073fa00a, 0x0600000b, 0x07c00000, + 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff, + 0x031a0000, 0x05820412, 0x05810412, 0x00012016, + 0x02013016, 0x07c00000, 0x070ff0e2, 0x077800ff, + 0x033e0000, 0x077400ff, 0x031a0000, 0x078203ff, + 0x078103ff, 0x07c00000, 0x03016012, 0x06600016, + 0x050f80ff, 0x032fa009, 0x07f00000, 0x06600016, + 0x050f80ff, 0x073fa00a, 0x06000008, 0x050f7000, + 0x0186040c, 0x01012000, 0x0080040e, 0x00012010, + 0x02013010, 0x04600816, 0x050f80ff, 0x073fa009, + 0x06000007, 0x0647f00e, 0x007a010e, 0x04000101, + 0x04600816, 0x050f80ff, 0x073fa00a, 0x06000007, + 0x072e0030, 0x020e0016, 0x07c00000, 0x0391000a, + 0x0784001d, 0x022c0004, 0x046c041f, 0x04810432, + 0x046c021f, 0x05810482, 0x066c0c1f, 0x04810494, + 0x046c081f, 0x058104a6, 0x066c061f, 0x058104c0, + 0x0721f000, 0x0202c010, 0x0202a010, 0x02020010, + 0x052e5800, 0x02b60079, 0x058d04d8, 0x0380000c, + 0x0380001d, 0x040f702a, 0x0086042a, 0x06000010, + 0x04001010, 0x0760182b, 0x050f80ff, 0x032fa012, + 0x07f00000, 0x0460082a, 0x050f80ff, 0x053fa809, + 0x06000001, 0x07780003, 0x03400000, 0x05810472, + 0x0560102b, 0x050f80ff, 0x032fa009, 0x0769ff00, + 0x076c3000, 0x04810449, 0x056cd000, 0x07818472, + 0x05601c2b, 0x050f80ff, 0x032fa009, 0x05444000, + 0x07445000, 0x032fa00a, 0x06300002, 0x05000430, + 0x0660062a, 0x050f80ff, 0x032fa00a, 0x07f00000, + 0x0560262b, 0x050f80ff, 0x032fa009, 0x04001010, + 0x04002010, 0x0460262a, 0x050f80ff, 0x022fa01a, + 0x07f00000, 0x06600a2a, 0x050f80ff, 0x012fa80a, + 0x07f00000, 0x0460082a, 0x050f80ff, 0x012fa80a, + 0x0079c101, 0x07ffffff, 0x007a0b01, 0x03800000, + 0x05780100, 0x07ffff00, 0x0481046d, 0x02455001, + 0x0460082a, 0x050f80ff, 0x012fa80a, 0x0201602a, + 0x07a000bb, 0x06420029, 0x0660002a, 0x050f80ff, + 0x053fa809, 0x06000001, 0x050f7003, 0x0086047f, + 0x01028003, 0x0660002a, 0x050f80ff, 0x073fa00a, + 0x06000008, 0x008004c1, 0x00028010, 0x00027010, + 0x008004c1, 0x040f702a, 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809, 0x06000001, - 0x050f7003, 0x0186047e, 0x01028003, 0x0660002a, - 0x050f80ff, 0x073fa00a, 0x06000008, 0x018004c0, - 0x00028010, 0x00027010, 0x018004c0, 0x040f702a, + 0x050f7003, 0x00860491, 0x03026003, 0x0660002a, + 0x050f80ff, 0x073fa00a, 0x06000008, 0x008004c1, + 0x02026010, 0x02025010, 0x008004c1, 0x040f702a, 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff, - 0x053fa809, 0x06000001, 0x050f7003, 0x01860490, - 0x03026003, 0x0660002a, 0x050f80ff, 0x073fa00a, - 0x06000008, 0x018004c0, 0x02026010, 0x02025010, - 0x018004c0, 0x040f702a, 0x00860429, 0x06420029, + 0x053fa809, 0x06000001, 0x050f7003, 0x018604a3, + 0x01024003, 0x0660002a, 0x050f80ff, 0x073fa00a, + 0x06000008, 0x018004b7, 0x00024010, 0x02023010, + 0x018004b7, 0x040f702a, 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809, 0x06000001, - 0x050f7003, 0x008604a2, 0x01024003, 0x0660002a, - 0x050f80ff, 0x073fa00a, 0x06000008, 0x008004b6, - 0x00024010, 0x02023010, 0x008004b6, 0x040f702a, - 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff, - 0x053fa809, 0x06000001, 0x050f7003, 0x018604b4, - 0x01022003, 0x0660002a, 0x050f80ff, 0x073fa00a, - 0x06000008, 0x008004b6, 0x00022010, 0x00021010, - 0x0647f020, 0x007a0120, 0x04000101, 0x06a0054a, - 0x0400802a, 0x06a005fe, 0x02948429, 0x0721f005, - 0x0080042a, 0x0080042f, 0x0647f020, 0x06486020, - 0x078184c5, 0x06a0054a, 0x00800429, 0x007a0120, - 0x04000101, 0x06a0054a, 0x0400802a, 0x06a005fe, - 0x00800429, 0x0391000a, 0x070ff0e2, 0x077800ff, - 0x033e0000, 0x077400ff, 0x031a0000, 0x0682842f, - 0x040fd02a, 0x052e4003, 0x00208010, 0x06a005fe, - 0x0080042f, 0x0784001d, 0x030150c0, 0x0448e015, - 0x05818505, 0x0648f015, 0x068184fd, 0x02490015, - 0x078184f5, 0x00491015, 0x078184ed, 0x00492015, - 0x0781053c, 0x033d0000, 0x07000003, 0x019b853c, - 0x033d0000, 0x06000002, 0x073c0000, 0x06000040, - 0x052e5200, 0x02200004, 0x0380050c, 0x072d0c00, - 0x039b84e1, 0x052d0800, 0x073c0000, 0x06000020, - 0x062e5080, 0x03200003, 0x0380050c, 0x072d0300, - 0x029b84df, 0x052d0200, 0x073c0000, 0x06000010, - 0x062e5020, 0x02200002, 0x0380050c, 0x072d00c0, - 0x039b84dd, 0x062d0080, 0x073c0000, 0x06000008, - 0x062e5008, 0x02200001, 0x0380050c, 0x072d0030, - 0x039b84db, 0x062d0020, 0x073c0000, 0x06000004, - 0x062e5002, 0x06000010, 0x0784001d, 0x0392000c, - 0x050fb000, 0x040f707c, 0x02860538, 0x046c0279, - 0x0581851d, 0x0448b07a, 0x07810524, 0x06000010, - 0x04001010, 0x0760187b, 0x050f80ff, 0x032fa012, - 0x0046b07a, 0x02b60079, 0x03800527, 0x066c0079, - 0x07810522, 0x040fd07c, 0x06a00619, 0x02800008, - 0x040fd07c, 0x03800527, 0x0045207a, 0x0279ff7a, - 0x07ffd7ff, 0x0007d010, 0x0647f07a, 0x0648607a, - 0x04818532, 0x0448707a, 0x07810530, 0x040f70fb, - 0x01868530, 0x0644f07a, 0x07a00550, 0x02800538, - 0x007a017a, 0x04000101, 0x07a00550, 0x0400807c, - 0x0245f008, 0x06a005fe, 0x07279000, 0x0007e010, - 0x0207c010, 0x0207a010, 0x008c041c, 0x0380000c, + 0x050f7003, 0x008604b5, 0x01022003, 0x0660002a, + 0x050f80ff, 0x073fa00a, 0x06000008, 0x018004b7, + 0x00022010, 0x00021010, 0x0647f020, 0x007a0120, + 0x04000101, 0x07a0054d, 0x0400802a, 0x07a00605, + 0x02948429, 0x0721f005, 0x0080042a, 0x00800431, + 0x0647f020, 0x06486020, 0x078184c6, 0x07a0054d, + 0x00800429, 0x007a0120, 0x04000101, 0x07a0054d, + 0x0400802a, 0x07a00605, 0x00800429, 0x0391001d, + 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff, + 0x031a0000, 0x06828431, 0x040fd02a, 0x052e4003, + 0x00208010, 0x07a00605, 0x00800431, 0x0784001d, + 0x030150c0, 0x0448e015, 0x05818506, 0x0648f015, + 0x068184fe, 0x02490015, 0x078184f6, 0x00491015, + 0x078184ee, 0x00492015, 0x06810540, 0x033d0000, + 0x07000003, 0x009b8540, 0x033d0000, 0x06000002, + 0x073c0000, 0x06000040, 0x052e5200, 0x02200004, + 0x0280050d, 0x072d0c00, 0x039b84e2, 0x052d0800, + 0x073c0000, 0x06000020, 0x062e5080, 0x03200003, + 0x0280050d, 0x072d0300, 0x029b84e0, 0x052d0200, + 0x073c0000, 0x06000010, 0x062e5020, 0x02200002, + 0x0280050d, 0x072d00c0, 0x039b84de, 0x062d0080, + 0x073c0000, 0x06000008, 0x062e5008, 0x02200001, + 0x0280050d, 0x072d0030, 0x029b84dc, 0x062d0020, + 0x073c0000, 0x06000004, 0x062e5002, 0x06000010, + 0x0784001d, 0x0392000c, 0x050fb000, 0x040f707c, + 0x03860539, 0x046c0279, 0x0581851e, 0x0448b07a, + 0x06810525, 0x06000010, 0x04001010, 0x0760187b, + 0x050f80ff, 0x032fa012, 0x0046b07a, 0x02b60079, + 0x03800528, 0x066c0079, 0x06810523, 0x040fd07c, + 0x07a00622, 0x02800008, 0x040fd07c, 0x03800528, + 0x0045207a, 0x0279ff7a, 0x07ffd7ff, 0x0007d010, + 0x0647f07a, 0x0648607a, 0x05818533, 0x0448707a, + 0x06810531, 0x040f70fb, 0x00868531, 0x0644f07a, + 0x07a00553, 0x03800539, 0x007a017a, 0x04000101, + 0x07a00553, 0x0400807c, 0x0245f008, 0x07a00605, + 0x07279000, 0x0007e010, 0x0207c010, 0x0207a010, + 0x008c041c, 0x058d04d8, 0x0380000c, 0x0380001d, 0x0392000c, 0x070ff0e2, 0x077800ff, 0x033e0000, - 0x077400ff, 0x031a0000, 0x0582853c, 0x070fc0ff, - 0x052e400c, 0x00208020, 0x06a005fe, 0x0380053c, + 0x077400ff, 0x031a0000, 0x04828540, 0x070fc0ff, + 0x052e400c, 0x00208020, 0x07a00605, 0x02800540, 0x06000020, 0x05001014, 0x0460082a, 0x050f80ff, 0x032fa012, 0x07c00000, 0x0600007a, 0x040010a2, 0x044b0801, 0x070ff014, 0x065a0001, 0x0460087c, 0x050f80ff, 0x032fa012, 0x07c00000, 0x050f7024, - 0x02860564, 0x070ff0e2, 0x077800ff, 0x033e0000, + 0x02860567, 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000, 0x04828013, 0x0721f006, - 0x0302a024, 0x028005ad, 0x050f7022, 0x02860573, - 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff, - 0x031a0000, 0x04828013, 0x0302a022, 0x06a005b9, - 0x04488020, 0x0781059c, 0x040fd02a, 0x0202a010, - 0x02020010, 0x040f7026, 0x03860581, 0x0202a026, - 0x06a005b9, 0x04488020, 0x0581857d, 0x0621f001, - 0x00683e20, 0x048185ae, 0x0280059d, 0x040fd02a, - 0x0202a010, 0x0002b010, 0x02020010, 0x050f7028, - 0x028605b6, 0x0621f002, 0x0302a028, 0x028005ad, + 0x0302a024, 0x038005b2, 0x050f7022, 0x03860577, 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff, - 0x031a0000, 0x04828013, 0x050f7024, 0x02860591, - 0x0721f006, 0x0302a024, 0x028005ad, 0x050f7022, - 0x028605b6, 0x0302a022, 0x06a005b9, 0x04488020, - 0x0781059c, 0x040fd02a, 0x0202a010, 0x0002b010, - 0x02020010, 0x028005b6, 0x0621f004, 0x070ff0e2, - 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000, - 0x048285a8, 0x01208060, 0x0600902a, 0x04002020, - 0x07a00605, 0x028005b6, 0x0202a010, 0x02020010, - 0x0002b010, 0x0721f000, 0x028005b6, 0x06a005b9, - 0x0400102a, 0x0245f001, 0x06a005bf, 0x050f801e, - 0x0320000a, 0x022017d0, 0x032fa012, 0x072e5c00, - 0x008c041c, 0x058d04d7, 0x02800013, 0x0460082a, - 0x050f80ff, 0x022fa031, 0x03020000, 0x0102b005, - 0x07c00000, 0x01200100, 0x079a05c3, 0x060f0001, - 0x07c00000, 0x07420000, 0x058185c0, 0x060fc010, - 0x02800619, 0x0392001d, 0x0207c02f, 0x0460087c, + 0x031a0000, 0x04828013, 0x0302a022, 0x06a005bf, + 0x04488020, 0x068105a1, 0x040fd02a, 0x0202a010, + 0x02020010, 0x038005be, 0x040f7026, 0x02860586, + 0x0202a026, 0x06a005bf, 0x04488020, 0x05818581, + 0x0621f001, 0x00683e20, 0x048185b3, 0x028005a2, + 0x040fd02a, 0x0202a010, 0x0002b010, 0x02020010, + 0x038005be, 0x050f7028, 0x038605bb, 0x0621f002, + 0x0302a028, 0x038005b2, 0x070ff0e2, 0x077800ff, + 0x033e0000, 0x077400ff, 0x031a0000, 0x04828013, + 0x050f7024, 0x03860596, 0x0721f006, 0x0302a024, + 0x038005b2, 0x050f7022, 0x038605bb, 0x0302a022, + 0x06a005bf, 0x04488020, 0x068105a1, 0x040fd02a, + 0x0202a010, 0x0002b010, 0x02020010, 0x038005be, + 0x0621f004, 0x070ff0e2, 0x077800ff, 0x033e0000, + 0x077400ff, 0x031a0000, 0x048285ad, 0x01208060, + 0x0600902a, 0x04002020, 0x06a0060d, 0x038005bb, + 0x0202a010, 0x02020010, 0x0002b010, 0x0721f000, + 0x038005bb, 0x06a005bf, 0x0400102a, 0x0245f001, + 0x07a005c5, 0x050f801e, 0x0320000a, 0x022017d0, + 0x032fa012, 0x072e5c00, 0x008c041c, 0x058d04d8, + 0x02800013, 0x0380001d, 0x0460082a, 0x050f80ff, + 0x022fa031, 0x03020000, 0x0102b005, 0x07c00000, + 0x07300000, 0x06000008, 0x079a05ca, 0x060f0001, + 0x07c00000, 0x07420000, 0x048185c7, 0x060fc010, + 0x03800622, 0x0392001d, 0x0207c02f, 0x0460087c, 0x050f80ff, 0x032fa039, 0x0307a000, 0x0107b005, 0x0307f006, 0x0660007c, 0x050020ff, 0x050f80ff, - 0x032fa011, 0x0302f000, 0x008685df, 0x0202f001, - 0x018685dd, 0x0002e010, 0x0660187f, 0x050f80ff, - 0x073fa00a, 0x06000008, 0x028005e5, 0x0002e001, - 0x028005e5, 0x040f7001, 0x038605d8, 0x0760002e, + 0x032fa011, 0x0302f000, 0x008685e6, 0x0202f001, + 0x018685e4, 0x0002e010, 0x0660187f, 0x050f80ff, + 0x073fa00a, 0x06000008, 0x028005ec, 0x0002e001, + 0x028005ec, 0x040f7001, 0x028605df, 0x0760002e, 0x050f80ff, 0x012fa80a, 0x0002e001, 0x06000010, 0x04001010, 0x040f8002, 0x032fa012, 0x06279001, 0x0400107c, 0x060ff0fb, 0x054bc8ff, 0x065a0001, - 0x06a005bf, 0x0320000a, 0x022011f4, 0x00202004, - 0x06003010, 0x0249507a, 0x078105f6, 0x0020200e, + 0x07a005c5, 0x0320000a, 0x022011f4, 0x00202004, + 0x06003010, 0x0249507a, 0x068105fd, 0x0020200e, 0x050f8078, 0x032fa022, 0x030e5077, 0x008c041c, - 0x058d04d7, 0x040f702f, 0x00868013, 0x0380001d, - 0x03201100, 0x05848603, 0x06420001, 0x058185ff, - 0x0280061c, 0x020e0008, 0x07c00000, 0x050fd009, - 0x040fd008, 0x03201100, 0x0584860c, 0x06420001, - 0x04818608, 0x0280061c, 0x007a0102, 0x04000101, - 0x05600809, 0x050f80ff, 0x073fa00a, 0x06000001, - 0x020e0008, 0x05848617, 0x06420001, 0x04818613, - 0x0280061c, 0x030e0009, 0x07c00000, 0x052e400f, - 0x00208040, 0x028005fe, 0x070fc0ff, 0x040f8010, - 0x032fa009, 0x0280061f, 0x45c0c10d, 0x00000000, - 0x00000000, 0x0000400e, 0x00000808, 0x00000803, - 0x00011f0f, 0x02080b02, 0xe6e5610b, 0x7f04e630, - 0x7f028001, 0x30e2e500, 0x017e04e4, 0x007e0280, - 0x08605fee, 0xe4f7f953, 0x0b80fef5, 0x16120a7f, - 0xf7f953b3, 0x7530fe75, 0xf5e408fc, 0x08f943fd, - 0x06000222, 0x000f1f01, 0x75002003, 0xf5e40151, - 0xf553f552, 0x7f7ef552, 0x3d040204, 0x520536c2, - 0x94d352e5, 0x7505400c, 0x36d20152, 0x740c0790, - 0x74a3f007, 0xf5e4f0ff, 0x90f0a30c, 0xa3f01407, - 0x200b75f0, 0xf5e409f5, 0xd308e508, 0x03403094, - 0x12090402, 0x0b150600, 0x047008e5, 0x0280017f, - 0x09e5007f, 0x017e0470, 0x007e0280, 0x05605fee, - 0xd2f31712, 0xf7e15335, 0x094508e5, 0x250be5ff, - 0x24e025e0, 0xe482f583, 0x83f50734, 0xe285f0ef, - 0xd352e520, 0x0d400194, 0xe02a1b12, 0x4064a054, - 0x04020370, 0xf8f95300, 0xe4709490, 0x10f5e0f0, - 0x1e1209af, 0xef08af74, 0x82f50844, 0xe0808375, - 0x44ef29f5, 0x7582f507, 0xf5e09e83, 0xd3405422, - 0x1e400094, 0xf05429e5, 0x1b122170, 0x8044e02a, - 0x5422e5f0, 0x70086530, 0x2a1b1209, 0xf0bf54e0, - 0x1b120980, 0xf040742a, 0x12000402, 0x8375491b, - 0xf0ff74ae, 0x007e08af, 0xf50744ef, 0xe5fde082, - 0x25e0250b, 0xf58124e0, 0x0734e482, 0xf0ed83f5, - 0xe00e0790, 0x44eff004, 0x7582f507, 0xf5e09883, - 0x5a1b1228, 0x1b120c40, 0x0144e02a, 0x02691b12, - 0x08affb03, 0x8074007e, 0x8dcdefcd, 0xe083f582, - 0x120ae030, 0x44e02a1b, 0x0402f020, 0x2a1b1200, - 0xf0df54e0, 0x12ae44ee, 0xe430711b, 0x00040203, - 0x1b129e74, 0x03e0203c, 0x8f000402, 0xe0838e82, - 0x0203e020, 0x1b120004, 0x1044e02a, 0x4408e5f0, - 0x7582f506, 0x44e09e83, 0x08aff004, 0x44ef007e, - 0xe082f506, 0x1234e220, 0x44e02a1b, 0xe4e5f008, - 0x7d04e630, 0x7d028001, 0xc37ee500, 0x04500494, - 0x0280017c, 0x4dec007c, 0x35c20560, 0xee000402, - 0x1b12d244, 0xf0404471, 0x12000402, 0x54e02a1b, - 0x1b12f0f7, 0xd2837549, 0xf0bf54e0, 0xe0140790, - 0x7ee5f004, 0x7e750370, 0x7e08af01, 0x5a1b1200, - 0x1b121240, 0x0144e02a, 0xe0291b12, 0x1b120254, - 0x00040269, 0xe02a1b12, 0x1b120244, 0xfe54e029, - 0xee35c2f0, 0x828f8044, 0xf5e083f5, 0x44e35417, - 0x9074f010, 0x4408e5fc, 0x82f5fd07, 0x54e0838c, - 0x0207903f, 0xc054e0f0, 0x838c828d, 0x129274f0, - 0x07903c1b, 0x501b1203, 0x1b128274, 0x0407903c, - 0x74501b12, 0x3c1b12b4, 0x12050790, 0x9474501b, - 0x4408e5fe, 0x411b1206, 0xe03010f5, 0x8037d204, - 0xe537c202, 0x8f7f5410, 0xf0838e82, 0x12304430, - 0x80543a1b, 0x400094d3, 0x8039d204, 0x8f39c202, - 0xe0838e82, 0x12f08044, 0x40543a1b, 0x400094d3, - 0x803ad204, 0x8f3ac202, 0xe0838e82, 0x74f04044, - 0x08e5fe92, 0x1b120644, 0x04e73041, 0x028038d2, - 0x828f38c2, 0x54e0838e, 0x1e12f07f, 0x0af5e407, - 0x80020320, 0x03433003, 0x20171912, 0x03800202, - 0x12034230, 0x3030970c, 0x17191206, 0x12970c12, - 0x1b124f0d, 0xfb54e02a, 0xc30ae5f0, 0x46400194, - 0x1208e143, 0x44e02a1b, 0xe4e5f004, 0x122ae720, - 0x8375491b, 0x0854e0d2, 0x400094d3, 0x80017f04, - 0xe5007f02, 0x0194c30a, 0x017e0440, 0x007e0280, - 0x05605eef, 0x80981d12, 0x491b1217, 0xe0d28375, - 0x02f00844, 0x1b120004, 0xd2837549, 0xf0f754e0, - 0x7f071e12, 0xb3161208, 0x12fe8e74, 0x838e491b, - 0x5410f5e0, 0x10e5f0fe, 0xe5ff0144, 0x44edfd08, - 0xef82f507, 0x5410e5f0, 0x44edfffe, 0xef82f507, - 0x75481b12, 0x44e08683, 0x481b1210, 0xf01044e0, - 0xe02a1b12, 0x0144fd54, 0x2a1b12ff, 0x691b12ef, - 0xe50c3230, 0xf5084408, 0x82837582, 0xaff00574, - 0x5918120b, 0x08251074, 0x000208f5, 0xe5090585, - 0x0794d309, 0x00020350, 0xd37ee582, 0x04400094, - 0x0280017f, 0x7ee5007f, 0x50fa94c3, 0x80017e04, - 0xee007e02, 0x0502605f, 0x0b35307e, 0x7f01e143, - 0xb3161209, 0x53580002, 0x0002fee1, 0x8f6a8e58, - 0x8d6c8c6b, 0x016e756d, 0x75016f75, 0xf5e40170, - 0xf574f573, 0x2f079075, 0xf53cf5f0, 0xf546f53e, - 0xf53df547, 0xe56ff53f, 0xe50e706f, 0x126a456b, - 0x83753707, 0x803a7480, 0x37071208, 0x74808375, - 0x3607121a, 0xe0868375, 0xe4f00844, 0x74c36ef5, - 0xff6e953f, 0x75680812, 0xf0ef8283, 0x12741912, - 0x33e5d308, 0x070912f0, 0x40be0812, 0x706fe5e1, - 0x3707120b, 0x74808375, 0x0980f036, 0x75370712, - 0x16748083, 0x016e75f0, 0x75370712, 0x6ee5b483, - 0x741912f0, 0x6e253f74, 0x34e482f5, 0xe583f500, - 0xbf74f033, 0x82f56e25, 0x120034e4, 0xd840be08, - 0xf570f5e4, 0xf547f546, 0x0709126e, 0xfee083f5, - 0xe0d30812, 0x0024007c, 0xfe3eecff, 0xefd33bad, - 0x509cee9d, 0x80017b04, 0xe5007b02, 0x7a047070, - 0x7a028001, 0x605aeb00, 0x466e8506, 0xd3017075, - 0x9cee9def, 0x017f0450, 0x007f0280, 0x01b470e5, - 0x80017e04, 0xef007e02, 0x8503605e, 0x6e05476e, - 0x7f646ee5, 0x46e5a370, 0x47e50560, 0x85037eb4, - 0x6fe54746, 0x46850870, 0x77478576, 0x74c30e80, - 0xf546957f, 0x7f74c378, 0x79f54795, 0x37706fe5, - 0x476546e5, 0x73750c70, 0x01747501, 0x3df53cf5, - 0xf5e43580, 0x47e5c34e, 0x3cf54695, 0x71f513c3, - 0x72f54625, 0x403f94c3, 0x3df5e405, 0x74c34080, - 0xf572953f, 0xe537803d, 0x70476546, 0x0173750f, - 0xf5017575, 0x753ff53e, 0x2280014e, 0xc34ef5e4, - 0x469547e5, 0x13c33ef5, 0x462571f5, 0x94d372f5, - 0xe405503f, 0x06803ff5, 0xc12472e5, 0x6f053ff5, - 0x94c36fe5, 0x02035002, 0x6de57304, 0x02706c45, - 0x74e50480, 0x07907545, 0x017ff02f, 0x04603ee5, - 0x14703ce5, 0xf53cf5e4, 0xf53ef53d, 0xdf08123f, - 0x02f00470, 0x7a80b106, 0x95c33ce5, 0xe507403e, - 0xff3e953c, 0xe5c30680, 0xff3c953e, 0x95d376e5, - 0x85054079, 0x03807a76, 0xe57a7985, 0x7895c377, - 0x77850550, 0x8503807b, 0x7be57b78, 0x407a95d3, - 0x957be530, 0xf53cf57a, 0x7be5c33e, 0x07907a95, - 0x3ce5f019, 0x71f513c3, 0x72f57a25, 0x403f94c3, - 0x3df5e405, 0x74c31f80, 0xf572953f, 0x803ff53d, - 0x3cf5e414, 0x07903ef5, 0x0812f019, 0xf00370df, - 0x01740380, 0x680812f0, 0xe0d08375, 0xadfe0f54, - 0x7e02703c, 0x020fbe07, 0xfbee807e, 0x749bd3ef, - 0x4098f880, 0x3cf5e41f, 0x08123ef5, 0xf00370df, - 0x01741280, 0xfb08e5f0, 0xf50744eb, 0xd2837582, - 0xf01044e0, 0xebfb08e5, 0x82f50944, 0xed9e8375, - 0x0744ebf0, 0x837582f5, 0x12f0edca, 0x83756808, - 0x22f0efcc, 0x074408e5, 0x837582f5, 0xf054e0bc, - 0x4408e5f0, 0x7582f507, 0x54e0be83, 0x08e5f0f0, - 0x82f50744, 0xe0c08375, 0xe5f0f054, 0xf5074408, - 0x90f02282, 0xfee02807, 0x82f5e0a3, 0x8522838e, - 0x41854242, 0x40408541, 0xf52fc074, 0x3e027482, - 0x42e583f5, 0x2fe074f0, 0x027482f5, 0x2283f53e, - 0xfd2942e5, 0xe5fc33e4, 0xec9dc33c, 0x74f88064, - 0xf5229880, 0x0790e083, 0xfd1f5422, 0xe0a3fae0, - 0x838a82f5, 0x9022f0ed, 0xfce02207, 0x82f5e0a3, - 0x9022838c, 0xedff2407, 0xf0cf0744, 0x22f0efa3, - 0x85383885, 0x3a853939, 0x2fc0743a, 0x027482f5, - 0x2283f53e, 0xff260790, 0xcf0744ed, 0xf0efa3f0, - 0xa074f022, 0x7482f52f, 0x83f53e02, 0x25c07422, - 0xe482f511, 0x83f50134, 0x25007422, 0xe482f511, - 0x83f50234, 0x25607422, 0xe482f511, 0x83f50334, - 0x25807422, 0xe482f511, 0x83f50334, 0x25e07422, - 0xe482f511, 0x83f50334, 0x25407422, 0xe482f511, - 0x83f50634, 0x2f807422, 0x027482f5, 0x2283f53e, - 0x82e583f5, 0x82f50744, 0x22f040e5, 0x11254074, - 0x34e482f5, 0x2283f502, 0x1125c074, 0x34e482f5, - 0x2283f503, 0x11250074, 0x34e482f5, 0x2283f506, - 0x11252074, 0x34e482f5, 0x2283f506, 0xedfd08e5, - 0x82f50744, 0xf041e522, 0x016465e5, 0x7e226445, - 0x007afb00, 0x22007cfd, 0x11252074, 0x34e482f5, - 0xa0742202, 0x82f51125, 0x220334e4, 0x007e08af, - 0xf50744ef, 0x3e852282, 0x413f8542, 0x8522408f, - 0x3d85423c, 0x22408f41, 0x903f4575, 0xf0e42007, - 0x83f522a3, 0x05f032e5, 0xc36ee56e, 0xf0224094, - 0x064408e5, 0x742282f5, 0xf56e2500, 0x0034e482, - 0xe52283f5, 0x906c456d, 0xe4222f07, 0xd33ce5f9, - 0x74223e95, 0x82f52e80, 0xf50234e4, 0x7422e083, - 0x82f52ea0, 0xf50234e4, 0x7422e083, 0xf56e2580, - 0x0034e482, 0xfd422522, 0x22fc33e4, 0x85424285, - 0x40854141, 0x4ced2240, 0x09020360, 0x704eeff2, - 0x26079037, 0xe0960712, 0xd90712fd, 0x0790f0ed, - 0x96071228, 0x0712fde0, 0x12f0ede5, 0x54e09307, - 0x0812fd1f, 0xed83f584, 0x240790f0, 0xe0960712, - 0x12fd1f54, 0xf0ed3808, 0x4e0464ef, 0x07903770, - 0x96071226, 0x0712fde0, 0x90f0edf1, 0x07122807, - 0x12fde096, 0xf0edfd07, 0xe0930712, 0x12fd1f54, - 0x83f58e08, 0x0790f0ed, 0x96071224, 0xfd1f54e0, - 0xed440812, 0x0164eff0, 0x7d04704e, 0x7d028001, - 0x0264ef00, 0x7f04704e, 0x7f028001, 0x604def00, - 0x26079078, 0xe0420712, 0x090812ff, 0x3e0712ef, - 0x0812ffe0, 0x90f0ef15, 0x07122207, 0x1f54e042, - 0x500812ff, 0x0790f0ef, 0x42071224, 0xff1f54e0, - 0xef5c0812, 0x071222f0, 0x12f0e4d9, 0xf0e4e507, - 0xf5840812, 0x12f0e483, 0x14743808, 0xf10712f0, - 0x0712f0e4, 0x12f0e4fd, 0x83f58e08, 0x0812f0e4, - 0xf0147444, 0xe4090812, 0x150812f0, 0x0812f0e4, - 0x12f0e450, 0x14745c08, 0x648c22f0, 0x668a658d, - 0xf5e4678b, 0x704eef69, 0x161d0203, 0xe568f5e4, - 0x70664567, 0x37071232, 0xe4908375, 0x75360712, - 0x12e4c283, 0x83753607, 0x0812e4c4, 0x12297073, - 0x83753707, 0x0712e492, 0xc6837536, 0x360712e4, - 0xe4c88375, 0x901180f0, 0x07122607, 0x0812e442, - 0x12057073, 0xf0e43f07, 0x12161d12, 0x67e5801e, - 0x33706645, 0x75370712, 0x41e59083, 0x75360712, - 0x41e5c283, 0x75360712, 0x0812c483, 0x12297071, - 0x83753707, 0x1240e592, 0x83753607, 0x1240e5c6, - 0x83753607, 0x900e80c8, 0x07122607, 0x71081242, - 0x07120670, 0xf040e53f, 0x007e69af, 0x66ac67ad, - 0x12490412, 0x83753707, 0x94d3e0ca, 0x050c5000, - 0xc368e568, 0x03500594, 0x224b0a02, 0x75f7f953, - 0xf5e410fc, 0x30fe75fd, 0xf943fff5, 0x20e6e508, - 0xff780be7, 0xfdd8f6e4, 0x80fee653, 0xe4087809, - 0x53fdd8f6, 0x8175fee6, 0xa8f5e480, 0xa9c2a8d2, - 0xe2e5afd2, 0x2005e520, 0x038002e6, 0xe502e143, - 0x0ee020e2, 0x7f000090, 0xe4087e00, 0xfcdfa3f0, - 0x0b02fade, 0x01fa43b5, 0xf0c0e0c0, 0x82c083c0, - 0x1112d0c0, 0xd0d0d018, 0xd083d082, 0x53e0d0f0, - 0x0232fefa, 0x93e4d51a, 0x93e4f8a3, 0xdf08f6a3, - 0xe42980f9, 0x54f8a393, 0xc80c2407, 0x54c433c3, - 0xc820440f, 0xf4044083, 0x46018056, 0x80e4dff6, - 0x0402010b, 0x40201008, 0xff0f9080, 0x93017ee4, - 0xffa3c160, 0xe5303f54, 0xfe1f5409, 0x60a393e4, - 0x54cf0e01, 0x60e025c0, 0x80b840ad, 0x8d608cfe, - 0xe7081261, 0x0d402074, 0x7482f52f, 0x83f53e03, - 0x80f03ee5, 0x82f52f0b, 0xf53e0374, 0xf03ce583, - 0x95d33ce5, 0xe53c403e, 0x70604561, 0x0912e910, - 0x123ee511, 0x3b407507, 0x80a20812, 0xc33ee518, - 0x1d403895, 0xe5383e85, 0x8505603e, 0x0380393f, - 0x8f393985, 0x2108123a, 0x07123ee5, 0xf03fe5cd, - 0xe5438022, 0x70604561, 0x6c071219, 0x08120540, - 0x122780ab, 0x08121809, 0x1242e521, 0x41e5cd07, - 0x3ce522f0, 0x403895c3, 0x383c851d, 0x05603ce5, - 0x80393d85, 0x39398503, 0x08123a8f, 0x123ce521, - 0x3de5cd07, 0x388522f0, 0x39398538, 0x123a3a85, - 0x38e52108, 0xe5cd0712, 0x7f22f039, 0xb3161206, - 0x12e41c12, 0x0e12b70e, 0x0a44e0e6, 0xfe8e74f0, - 0x12b70e12, 0xf0efbe0e, 0xe53028e5, 0x0180d303, - 0x750540c3, 0x03802014, 0x12081475, 0x8375b70e, - 0xf014e58a, 0x7505ffb4, 0x06808012, 0x13c314e5, - 0xf5e412f5, 0x127ff516, 0x1312b818, 0xc30ae5a3, - 0x09500194, 0x16e51605, 0x401494c3, 0x20e4e5ea, - 0x0e1228e7, 0xd28375b7, 0xd30854e0, 0x04400094, - 0x0280017f, 0x0ae5007f, 0x400194c3, 0x80017e04, - 0xef007e02, 0x1203605e, 0x7fe5981d, 0x401194c3, - 0xb70e1214, 0xe0d28375, 0xe5f08044, 0x0fe720e4, - 0x80981d12, 0xb70e120a, 0xe0d28375, 0x12f07f54, - 0x7422e41c, 0x82088580, 0x17e583f5, 0xed0e12f0, - 0x0790f0e4, 0x0e12e002, 0x908375ca, 0x9274f0ef, - 0x4408e5fe, 0x82f5ff07, 0x54e0838e, 0x0790fdc0, - 0x3f54e003, 0x8e828f4d, 0x0790f083, 0x0e12e004, - 0x828375ca, 0x0790f0ef, 0xedffe005, 0x82f50744, - 0xefb48375, 0x75b60e12, 0x54e08083, 0x3730f0bf, - 0x440f120a, 0xe0948375, 0x30f08044, 0x0f120a38, - 0x92837544, 0xf08044e0, 0xe43028e5, 0x0a39201a, - 0x75b70e12, 0x54e08883, 0x3a20f07f, 0xb70e120a, - 0xe0888375, 0x74f0bf54, 0x0e12fe8c, 0xe0838eb7, - 0x0e120f54, 0x868375b6, 0xf0bf54e0, 0x064408e5, - 0x75b00e12, 0xf0e48a83, 0x704eef22, 0xd9071226, - 0x0790fde0, 0x88071226, 0xe0e50712, 0x280790fd, - 0x12880712, 0x07128408, 0x3808127f, 0x240790e0, - 0xef850712, 0x704e0464, 0xf1071229, 0x0790fde0, - 0x88071226, 0xe0fd0712, 0x280790fd, 0x12880712, - 0x07128e08, 0x4408127f, 0xfd1f54e0, 0x12240790, - 0x64ef8807, 0x04704e01, 0x0280017d, 0x64ef007d, - 0x04704e02, 0x0280017f, 0x4def007f, 0x08123560, - 0x90ffe009, 0x07122607, 0x12f0ef96, 0xffe01508, - 0x12280790, 0xf0ef9607, 0xe0500812, 0x12ff1f54, - 0xf0ef9307, 0xe05c0812, 0x90ff1f54, 0x07122407, - 0x22f0ef96, 0x837582f5, 0xe5f0e482, 0xf5074408, - 0x838e2282, 0x5410f5e0, 0x10e5f0fe, 0xe5ff0144, - 0x44edfd08, 0x2282f507, 0x54c415e5, 0x08e5ff07, - 0x0844edfd, 0x837582f5, 0x83752282, 0x4044e080, - 0x4408e5f0, 0x7582f508, 0xe5228a83, 0x25e02516, - 0xf52f24e0, 0x1a34e482, 0x93e483f5, 0x43220df5, - 0xe14310e1, 0xfde15380, 0x2210e185, 0xe02516e5, - 0x3224e025, 0x34e482f5, 0xe483f51a, 0x55852293, - 0x83548582, 0x22f015e5, 0x2054e2e5, 0x220094d3, - 0x4054e2e5, 0x220094d3, 0x064408e5, 0xfd2282f5, - 0xebfb08e5, 0x82f50744, 0x53f5e422, 0x40340f12, - 0x80017f04, 0x12007f02, 0x04403c0f, 0x0280017e, - 0x4fee007e, 0x0f020370, 0x10e185f7, 0x5302e143, - 0xe1850fe1, 0x51f5e410, 0x3f54e3e5, 0x0f1252f5, - 0xad1d403c, 0x1251af52, 0x60efb01c, 0x10e18508, - 0x8040e143, 0xbfe1530b, 0x120b0f12, 0xfb800600, - 0x3f54e3e5, 0xe4e551f5, 0x52f53f54, 0x40340f12, - 0xaf52ad1d, 0xb01c1251, 0x850860ef, 0xe14310e1, - 0x530b8020, 0x0f12dfe1, 0x0600120b, 0x0f12fb80, - 0x7f044034, 0x7f028001, 0x3c0f1200, 0x017e0440, - 0x007e0280, 0x03604fee, 0x220e0f12, 0x01001f01, - 0x00002003, 0x02001102, 0x10024010, 0x00000090, - 0x00000000, 0x1f011f01, 0x1257f5e4, 0x15123f16, - 0x1012e4c6, 0xb7141256, 0x12260790, 0x12e44207, - 0xf0e43e07, 0x12561012, 0x0790b714, 0x42071226, - 0x071241e5, 0xf040e53e, 0x007e57af, 0x007c56ad, - 0xaf490412, 0x02007e56, 0x90ffee11, 0xe0a32007, - 0x56f5e4fd, 0xfcfe40f5, 0x12fa56ab, 0x0f7f5111, - 0xf5e4187d, 0xfe40f556, 0xfa56abfc, 0xaf411512, - 0x12007e56, 0xffe47f1a, 0x1f7d56f5, 0xfcfe40f5, - 0x22fa56ab, 0x55f5e422, 0x74fd08e5, 0xed56f5a0, - 0x57f50744, 0xe53028e5, 0x0180d303, 0x7f0540c3, - 0x0480ef28, 0xc3ef147f, 0xe454f513, 0xcb0e12f9, - 0xe08e8375, 0xefce10f5, 0x94d3eece, 0xe5264000, - 0x12fe5410, 0x83754b0f, 0xe5f0ed8e, 0xfd014410, - 0xf50744eb, 0x85f0ed82, 0x56858257, 0xe330e083, - 0x801e0901, 0xe934c2d4, 0x405495c3, 0x2234d202, - 0x00000f22, 0x90113030, 0x93e40010, 0x109010f5, - 0xf593e410, 0x90101210, 0x22501112, 0xe730e2e5, - 0x0310120e, 0x303030c2, 0xfc101203, 0xe5213320, - 0x2094c3fe, 0xf9530950, 0x30fe75f7, 0xe508f943, - 0x03e730f2, 0xe57ff953, 0xd37054f1, 0xdf500094, - 0x00000022, 0x8f588e22, 0x8d5a8c59, 0x8b5c8a5b, - 0x015e755d, 0xf55ff5e4, 0x1262f560, 0x83753707, - 0xc4ffe0d0, 0x61f50f54, 0x85661e12, 0xe5d35e59, - 0xe55b955e, 0x7807125a, 0x07124b50, 0xbc837510, - 0x125e45e0, 0x83753607, 0x5e45e0be, 0x75360712, - 0x45e0c083, 0x5faff05e, 0x081260e5, 0x360a127b, - 0x007e62af, 0x5cac5dad, 0xe5490412, 0x7e5eaf61, - 0x0503b400, 0x80e21d12, 0xac5dad07, 0x1713125c, - 0x11025e05, 0x1007127a, 0xe0bc8375, 0x07124045, - 0xbe837536, 0x124045e0, 0x83753607, 0x4045e0c0, - 0x588e22f0, 0x5a75598f, 0x75017901, 0xfbe4015b, - 0x75370712, 0x54e0ae83, 0x0812ff1a, 0x13c4e068, - 0xeffe0754, 0x65ee0c70, 0x90077035, 0xb4e02f07, - 0x35af0d01, 0x0e12007e, 0xcfebcf05, 0xe5211e02, - 0x45026459, 0x7f047058, 0x7f028001, 0x4559e500, - 0x7e047058, 0x7e028001, 0x604fee00, 0x49418523, - 0xe54b4085, 0x70584559, 0xfe5aaf2c, 0xfccde9cd, - 0x58aa59ab, 0xaf360a12, 0x12007e5b, 0x1580211e, - 0x007e5baf, 0x90211e12, 0x07122607, 0x1249e542, - 0x4be53e07, 0xaffde4f0, 0x12fcfe35, 0x8c222209, - 0x12658d64, 0x3c40e708, 0x644565e5, 0x09121070, - 0x3ee5c311, 0x40760712, 0xa208123b, 0x3ee51880, - 0x403895c3, 0x383e851d, 0x05603ee5, 0x80393f85, - 0x39398503, 0x07123a8f, 0x123ee5b5, 0x3fe56007, - 0x3b8022f0, 0x644565e5, 0x07121170, 0x1205406c, - 0x1f80ab08, 0xe54b0712, 0xe522f041, 0x3895c33c, - 0x3c851d40, 0x603ce538, 0x393d8505, 0x39850380, - 0x123a8f39, 0x3ce5b507, 0xe5600712, 0x1222f03d, - 0x38e5ac07, 0xe5600712, 0x8c22f039, 0x12648d63, - 0x3c40e708, 0x634564e5, 0x09121070, 0x3ee5c311, - 0x40760712, 0xa208123b, 0x3ee51880, 0x403895c3, - 0x383e851d, 0x05603ee5, 0x80393f85, 0x39398503, - 0x07123a8f, 0x123ee5b5, 0x3fe56007, 0x3b8022f0, - 0x634564e5, 0x07121170, 0x1205406c, 0x1f80ab08, - 0xe54b0712, 0xe522f041, 0x3895c33c, 0x3c851d40, - 0x603ce538, 0x393d8505, 0x39850380, 0x123a8f39, - 0x3ce5b507, 0xe5600712, 0x1222f03d, 0x38e5ac07, - 0xe5600712, 0xe522f039, 0x08e5fe0d, 0x0544548e, - 0x157555f5, 0x1282f50f, 0x17122d0f, 0x05312025, - 0x80031575, 0x0b157503, 0x94c30ae5, 0x12385001, - 0x31202014, 0x05150506, 0x15048015, 0xe5151515, - 0x0194c30a, 0x14122150, 0x04312020, 0x02801505, - 0x0ae51515, 0x500194c3, 0x2a0f120e, 0x20251712, - 0x15050531, 0xe52a0f12, 0x0408b415, 0x0280017f, - 0x15e5007f, 0x7e0407b4, 0x7e028001, 0x604fee00, - 0x227f0502, 0x85825585, 0x15e58354, 0x251712f0, - 0x37071222, 0x74ae8375, 0x360712ff, 0xf51a54e0, - 0x13c4e034, 0x35f50754, 0x2460fe24, 0x3c60fe24, - 0x63700424, 0xe52d3175, 0xb674fd08, 0x749f0712, - 0x220790bc, 0x74a20712, 0xc0071290, 0x3c809274, - 0xe53a3175, 0xba74fd08, 0x749f0712, 0x220790c0, - 0x74c30712, 0xc00712c4, 0x2080c874, 0xe5353175, - 0xb874fd08, 0x749f0712, 0x44edffbe, 0x22079007, - 0xefa3f0cf, 0x12c274f0, 0xc674c007, 0x0744edff, - 0xa3f0cfa3, 0x7522f0ef, 0x8e220134, 0x8c598f58, - 0x8a5b8d5a, 0x755d8b5c, 0xf5e4015e, 0x661e125f, - 0xd35e5985, 0x5b955ee5, 0x07125ae5, 0xe5575078, - 0x705c455d, 0x37071230, 0xe5928375, 0x3607125e, - 0xe5c68375, 0x3607125e, 0xe5c88375, 0x3607125e, - 0xe5908375, 0x3607125e, 0xe5c28375, 0x3607125e, - 0x80c48375, 0x3f071203, 0xaff05ee5, 0xad007e5f, - 0x125cac5d, 0x5eaf4904, 0x5dad007e, 0x0b125cac, - 0x025e05d9, 0x5dabcf14, 0x5bad5caa, 0x59af5aac, - 0x1b0258ae, 0x8d5c8c7b, 0x8b5e8a5d, 0x0160755f, - 0xf561f5e4, 0x1263f562, 0x608f661e, 0x9560e5d3, - 0x125ce55d, 0x61507807, 0x5e455fe5, 0x07122770, - 0xb6837537, 0x071260e5, 0xb8837536, 0x071260e5, - 0xba837536, 0xaff060e5, 0xe5007e61, 0x7d081262, - 0x80360a12, 0x24079019, 0xe5420712, 0x36071260, - 0xe48e8375, 0x74360712, 0x36071201, 0x63aff0e4, - 0x5fad007e, 0x04125eac, 0x7e60af49, 0xac5fad00, - 0x8b12125e, 0x15026005, 0xf5e42258, 0xaf59f558, - 0x0744ef08, 0x837582f5, 0xc4fde0d0, 0x5af50f54, - 0xf50744ef, 0x80837582, 0x12f00174, 0x83759a08, - 0xf045e582, 0xf50744ef, 0x8a837582, 0x12f0ff74, - 0x07127419, 0xbc837537, 0x12ef54e0, 0x83753607, - 0xef54e0be, 0x75360712, 0x54e0c083, 0x360712ef, - 0xe0bc8375, 0x07121044, 0xbe837536, 0x121044e0, - 0x83753607, 0x1044e0c0, 0xe558aff0, 0x7b081259, - 0xe4360a02, 0x017d58f5, 0x35af59f5, 0x0912fcfe, - 0x37071222, 0x74b68375, 0x36071210, 0x74b88375, - 0x36071210, 0x74ba8375, 0x36071210, 0x74bc8375, - 0x36071210, 0x74be8375, 0x36071210, 0x74c08375, - 0x36071210, 0xe4908375, 0x75360712, 0x12e4c283, - 0x83753607, 0x0712e4c4, 0x92837536, 0x360712e4, - 0xe4c68375, 0x75360712, 0xf0e4c883, 0xe5fe58af, - 0x7d081259, 0xe5360a02, 0x6ce430e2, 0xc054e7e5, - 0x64704064, 0x54c409e5, 0x08e5fe30, 0xe025e025, - 0xfe4ec054, 0x4e3f54ef, 0xae2be5fd, 0xc302782a, - 0xce33ce33, 0x82f5f9d8, 0xf0ed838e, 0x2aae2be5, - 0x33c30278, 0xd8ce33ce, 0x82f5fff9, 0xe5a3838e, - 0x828ff0fe, 0xa3a3838e, 0x8ff0fde5, 0xa3838e82, - 0xfce5a3a3, 0x2be5c3f0, 0x2ae5fa94, 0x08500094, - 0x2be52b05, 0x2a050270, 0xe4ffe422, 0x56f558f5, - 0x827457f5, 0xb70e12fc, 0xf5e0838c, 0xf07f5410, - 0x804410e5, 0xed4b0f12, 0x120a7ef0, 0x8375b70e, - 0xe020e0a0, 0x05f4de26, 0x7057e557, 0xe5560502, - 0xfd012414, 0xd3fc33e4, 0xe59d57e5, 0xd9409c56, - 0x20940ae5, 0x0a050250, 0xc208e143, 0xb70e1231, - 0xe0a68375, 0x12651255, 0x31d20370, 0x2231c222, - 0xe0260790, 0xf5e0a3fa, 0xe0838a82, 0x39e541f5, - 0x404195c3, 0x9539e526, 0xee9fc341, 0x40780712, - 0x80017c04, 0xe5007c02, 0x603f6441, 0x80017b04, - 0xec007b02, 0x0529605b, 0xc3288041, 0x399541e5, - 0x12ee9fc3, 0x04407807, 0x0280017f, 0x41e5007f, - 0x017e0460, 0x007e0280, 0x04605eef, 0x03804115, - 0x85413985, 0xe522403a, 0x60e430e2, 0xe230e1e5, - 0x7009e55b, 0x80017f04, 0xe5007f02, 0x7e047008, - 0x7e028001, 0x605fee00, 0xf8f95343, 0xe430e2e5, - 0x30e1e53b, 0xfa432ee2, 0xfbfa5302, 0x9010f5e4, - 0x10e57094, 0x30e1e5f0, 0x9490e7e2, 0x1065e070, - 0xfa430360, 0x90100504, 0x10e57094, 0x12e670f0, - 0xe1800600, 0x53fdfa53, 0xc080fbfa, 0x12548f22, - 0xe1e50600, 0x7f04e030, 0x7f028001, 0xd37ee500, - 0x04400594, 0x0280017e, 0x4fee007e, 0x54853d60, - 0x20e2e511, 0xce7432e1, 0x303c1b12, 0x017d04e7, - 0x007d0280, 0x838e828f, 0x04e630e0, 0x0280017f, - 0x5def007f, 0x1c121570, 0x12ce7467, 0xe6303c1b, - 0x8044e007, 0x80f943f0, 0x22f31712, 0xe5f70e12, - 0x25e02516, 0xf53024e0, 0x1a34e482, 0x93e483f5, - 0x16e50ff5, 0xe025e025, 0x82f53124, 0xf51a34e4, - 0xf593e483, 0x180f120e, 0x0fe510f5, 0x0e12f054, - 0x8c8375ca, 0x0fe5f0ef, 0x120ce030, 0x8375b70e, - 0x4044e086, 0x120a80f0, 0x8375b70e, 0xbf54e086, - 0x440f12f0, 0xe5828375, 0x7f22f00e, 0xb3161205, - 0x12b70e12, 0x0274e60e, 0xfe8e74f0, 0x12b70e12, - 0xf0efbe0e, 0x12701575, 0x34208a1e, 0x10157505, - 0x15750380, 0x8a1e1250, 0x74043420, 0x74028010, - 0xf51525f0, 0xd40e1215, 0x1012f0ef, 0x17342091, - 0x306415e5, 0x10740c60, 0x15f51525, 0xe40380b4, - 0x0e1215f5, 0x22f0efd4, 0x2a0790e4, 0x12f0a3f0, - 0x83753707, 0x7f54e082, 0xe0360712, 0x12f08044, - 0x08123d00, 0xa0837598, 0x1ae020e0, 0xe02b0790, - 0x0670f004, 0xe02a0790, 0x0790f004, 0x10b4e02a, - 0xb4e0a3e1, 0x44eedc00, 0x44effca6, 0x8c82f507, - 0x32f5e083, 0xfea844ee, 0xf50744ef, 0xe0838e82, - 0x122233f5, 0x83759808, 0x54c4e0d0, 0x4375fd0f, - 0xff447501, 0x74b70812, 0x3b75f004, 0x6014ed01, - 0x0b60140c, 0x240f6014, 0x800b7003, 0x12008009, - 0xf004b408, 0x08120680, 0xf00474b4, 0xfe8244ee, - 0xf50744ef, 0xe5838e82, 0xcb081245, 0xe5828375, - 0x36071231, 0xe0868375, 0x22f00844, 0x000f1f01, - 0x90002003, 0x920f2000, 0x940f2100, 0x960f2200, - 0x980f2300, 0x9a0f2400, 0x9c0f2500, 0x9e0f2600, - 0xa00f2700, 0xa2012001, 0xa4012101, 0xa6012201, - 0xa8012301, 0xaa012401, 0xac012501, 0xae012601, - 0xb0012701, 0xb4012801, 0xb60f2800, 0xb80f2840, - 0xcb012861, 0xeecacbef, 0xe4017fca, 0x704aebfd, - 0xf508e524, 0x12b67482, 0x08e52c08, 0xb87482f5, - 0xe52c0812, 0x7482f508, 0x2c0812ba, 0x007c007e, - 0x80360a12, 0x26079012, 0xe5420712, 0x0790f041, - 0x42071224, 0x12f040e5, 0x83753707, 0x0712e48e, - 0x12017436, 0xf0e43607, 0x26f5e422, 0xe15327f5, - 0x752af5fe, 0x08f5012b, 0x1612017f, 0x1c3030b3, - 0xe4291a90, 0x9010f593, 0x93e4f91f, 0x009010f5, - 0xf593e441, 0xf90f9010, 0x10f593e4, 0x1612027f, - 0x550f12b3, 0x1612037f, 0x060012b3, 0xe730e2e5, - 0x00101209, 0x12033030, 0x00020011, 0x0be5f047, - 0xe025e025, 0x82f58224, 0xf50734e4, 0x88742283, - 0x4408e5fe, 0x82f5ff07, 0x22e0838e, 0x4408e5f0, - 0x2282f507, 0xc054e0f0, 0x838e828f, 0x44ef22f0, - 0x7582f507, 0x54e08683, 0x0094d310, 0x0790f022, - 0xf004e015, 0x44effe22, 0x8e82f507, 0x8e22e083, - 0x12618f60, 0xffe4661e, 0xeeceedce, 0xe56195d3, - 0x78071260, 0x20743940, 0xe482f52e, 0x83f50334, - 0xff0370e0, 0x08122680, 0x9fc3fdef, 0xedcf1e40, - 0x704aebcf, 0x12428d0b, 0x41f5fb08, 0x0c80408e, - 0xf5ef0812, 0xfb081238, 0x3a8e39f5, 0x22bc801e, - 0xe5015875, 0x120c7035, 0xf5e0d907, 0xe507124a, - 0xe54cf5e0, 0x0c04b435, 0xe0f10712, 0x07124af5, - 0x4cf5e0fd, 0x01b435e5, 0x80017f04, 0xe5007f02, - 0x0402b435, 0x0280017e, 0x4fee007e, 0x08120c60, - 0x4af5e009, 0xe0150812, 0x41854cf5, 0x4b408549, - 0x015b7522, 0x12240790, 0x54e04207, 0x94d3ff1f, - 0x8f045002, 0xef058058, 0x58f5fe24, 0x1894c3ef, - 0x59750540, 0xef048018, 0x8559f504, 0x58af5a43, - 0x59ad007e, 0x5bab007c, 0x1512007a, 0x7e5aaf41, - 0x8c171200, 0x007e5baf, 0x907f1a02, 0x93e4fd10, - 0xf02e0790, 0x122d1412, 0x34e5cf19, 0x07123570, - 0xce837537, 0x1313ffe0, 0xf5075413, 0x240f5436, - 0x240b60fe, 0x240a60fe, 0x02187003, 0x1e026f1d, - 0x14101252, 0x1255f5e4, 0x5505461d, 0x94c355e5, - 0x22f44005, 0xedc3fce4, 0xf5effa9f, 0x00827583, - 0x93e4ff79, 0xa3cc6ccc, 0xf6daf8d9, 0xe430e2e5, - 0xede58c02, 0xefffff24, 0xf5ff8275, 0x6c93e483, - 0x017f0370, 0x22007f22, 0x75b70e12, 0xf0e48083, - 0x074408e5, 0x75b00e12, 0x0e128483, 0x868375b5, - 0x75b50e12, 0x54e08c83, 0xb60e12f3, 0x128e8375, - 0x8375b50e, 0xfb54e094, 0x071222f0, 0x8e837537, - 0x360712e4, 0x07120174, 0x0812e436, 0x8c8375cb, - 0x122044e0, 0x54e0cb08, 0x8474f0df, 0xf5820885, - 0x7f54e083, 0x8044e0f0, 0x567522f0, 0xf5fde401, - 0xfe35af57, 0x220912fc, 0x121d1c12, 0x1b123b1e, - 0x7e57afcc, 0x7c56ad00, 0x49041200, 0x007e56af, - 0x75ee1102, 0xfde40156, 0x35af57f5, 0x0912fcfe, - 0x1d1c1222, 0x123b1e12, 0x57afcc1b, 0x56ad007e, - 0x0412007c, 0x7e56af49, 0xee110200, 0x1216f5e4, - 0xe5fef70e, 0xff054408, 0x8f180f12, 0xf0838e82, - 0x16e51605, 0x401494c3, 0x1208e5e6, 0xf0e4de0e, - 0x58f5e422, 0x5af559f5, 0x58adfeff, 0x220912fc, - 0x007e047f, 0x007c58ad, 0x7f220912, 0xad007e02, - 0x02007c58, 0x3ce52209, 0xe5fc3e25, 0xfb002442, - 0xecfa33e4, 0x12ea9bc3, 0x0b407807, 0x3de5428c, - 0x41f53f25, 0x1222408f, 0x74221809, 0x8518f584, - 0x19851908, 0x83188582, 0xf07f54e0, 0xf08044e0, - 0xf08044e0, 0x704eef22, 0x3707120b, 0xe0d28375, - 0x22f0df54, 0x75370712, 0x44e0d283, 0x7522f020, - 0x07900158, 0x42071226, 0xf53f54e0, 0x3f071241, - 0xf53f54e0, 0x56752240, 0x57f5e402, 0xafbd1d12, - 0xad007e57, 0x02007c56, 0xf5e44904, 0xf541f542, - 0xf538f540, 0x223af539, 0xff0754ef, 0xf854f9e5, - 0x22f9f54f, 0xfee4017f, 0xffbe0e0f, 0x0e1222fb, - 0x12f0efd4, 0x00229110, 0x00000000, 0x00000000, + 0x058d04d8, 0x040f702f, 0x00868013, 0x0380001d, + 0x05301000, 0x06000008, 0x0484860b, 0x06420001, + 0x04818607, 0x02800625, 0x020e0008, 0x07c00000, + 0x050fd009, 0x040fd008, 0x05301000, 0x06000008, + 0x04848615, 0x06420001, 0x05818611, 0x02800625, + 0x007a0102, 0x04000101, 0x05600809, 0x050f80ff, + 0x073fa00a, 0x06000001, 0x020e0008, 0x04848620, + 0x06420001, 0x0481861c, 0x02800625, 0x030e0009, + 0x07c00000, 0x052e400f, 0x00208040, 0x03800605, + 0x070fc0ff, 0x040f8010, 0x032fa009, 0x03800628, + 0x0c83b152, 0x00000000, 0x00000000, 0x0000400e, + 0x00000808, 0x00000803, 0x00011f0f, 0x02080b02, + 0xe6e5610b, 0x7f04e630, 0x7f028001, 0x30e2e500, + 0x017e04e4, 0x007e0280, 0x08605fee, 0xe4f7f953, + 0x0b80fef5, 0x16120a7f, 0xf7f953b3, 0x7530fe75, + 0xf5e408fc, 0x08f943fd, 0x06000222, 0x000f1f01, + 0x75002003, 0xf5e40151, 0xf553f552, 0x7f7ef552, + 0x3d040204, 0x520536c2, 0x94d352e5, 0x7505400c, + 0x36d20152, 0x740c0790, 0x74a3f007, 0xf5e4f0ff, + 0x90f0a30c, 0xa3f01407, 0x200b75f0, 0xf5e409f5, + 0xd308e508, 0x03403094, 0x12090402, 0x0b150600, + 0x047008e5, 0x0280017f, 0x09e5007f, 0x017e0470, + 0x007e0280, 0x05605fee, 0xd2f31712, 0xf7e15335, + 0x094508e5, 0x250be5ff, 0x24e025e0, 0xe482f583, + 0x83f50734, 0xe285f0ef, 0xd352e520, 0x0d400194, + 0xe02a1b12, 0x4064a054, 0x04020370, 0xf8f95300, + 0xe4709490, 0x10f5e0f0, 0x1e1209af, 0xef08af74, + 0x82f50844, 0xe0808375, 0x44ef29f5, 0x7582f507, + 0xf5e09e83, 0xd3405422, 0x1e400094, 0xf05429e5, + 0x1b122170, 0x8044e02a, 0x5422e5f0, 0x70086530, + 0x2a1b1209, 0xf0bf54e0, 0x1b120980, 0xf040742a, + 0x12000402, 0x8375491b, 0xf0ff74ae, 0x007e08af, + 0xf50744ef, 0xe5fde082, 0x25e0250b, 0xf58124e0, + 0x0734e482, 0xf0ed83f5, 0xe00e0790, 0x44eff004, + 0x7582f507, 0xf5e09883, 0x5a1b1228, 0x1b120c40, + 0x0144e02a, 0x02691b12, 0x08affb03, 0x8074007e, + 0x8dcdefcd, 0xe083f582, 0x120ae030, 0x44e02a1b, + 0x0402f020, 0x2a1b1200, 0xf0df54e0, 0x12ae44ee, + 0xe430711b, 0x00040203, 0x1b129e74, 0x03e0203c, + 0x8f000402, 0xe0838e82, 0x0203e020, 0x1b120004, + 0x1044e02a, 0x4408e5f0, 0x7582f506, 0x44e09e83, + 0x08aff004, 0x44ef007e, 0xe082f506, 0x1234e220, + 0x44e02a1b, 0xe4e5f008, 0x7d04e630, 0x7d028001, + 0xc37ee500, 0x04500494, 0x0280017c, 0x4dec007c, + 0x35c20560, 0xee000402, 0x1b12d244, 0xf0404471, + 0x12000402, 0x54e02a1b, 0x1b12f0f7, 0xd2837549, + 0xf0bf54e0, 0xe0140790, 0x7ee5f004, 0x7e750370, + 0x7e08af01, 0x5a1b1200, 0x1b121240, 0x0144e02a, + 0xe0291b12, 0x1b120254, 0x00040269, 0xe02a1b12, + 0x1b120244, 0xfe54e029, 0xee35c2f0, 0x828f8044, + 0xf5e083f5, 0x44e35417, 0x9074f010, 0x4408e5fc, + 0x82f5fd07, 0x54e0838c, 0x0207903f, 0xc054e0f0, + 0x838c828d, 0x129274f0, 0x07903c1b, 0x501b1203, + 0x1b128274, 0x0407903c, 0x74501b12, 0x3c1b12b4, + 0x12050790, 0x9474501b, 0x4408e5fe, 0x411b1206, + 0xe03010f5, 0x8037d204, 0xe537c202, 0x8f7f5410, + 0xf0838e82, 0x12304430, 0x80543a1b, 0x400094d3, + 0x8039d204, 0x8f39c202, 0xe0838e82, 0x12f08044, + 0x40543a1b, 0x400094d3, 0x803ad204, 0x8f3ac202, + 0xe0838e82, 0x74f04044, 0x08e5fe92, 0x1b120644, + 0x04e73041, 0x028038d2, 0x828f38c2, 0x54e0838e, + 0x1e12f07f, 0x0af5e407, 0x80020320, 0x03433003, + 0x20171912, 0x03800202, 0x12034230, 0x3030970c, + 0x17191206, 0x12970c12, 0x1b124f0d, 0xfb54e02a, + 0xc30ae5f0, 0x46400194, 0x1208e143, 0x44e02a1b, + 0xe4e5f004, 0x122ae720, 0x8375491b, 0x0854e0d2, + 0x400094d3, 0x80017f04, 0xe5007f02, 0x0194c30a, + 0x017e0440, 0x007e0280, 0x05605eef, 0x80981d12, + 0x491b1217, 0xe0d28375, 0x02f00844, 0x1b120004, + 0xd2837549, 0xf0f754e0, 0x7f071e12, 0xb3161208, + 0x12fe8e74, 0x838e491b, 0x5410f5e0, 0x10e5f0fe, + 0xe5ff0144, 0x44edfd08, 0xef82f507, 0x5410e5f0, + 0x44edfffe, 0xef82f507, 0x75481b12, 0x44e08683, + 0x481b1210, 0xf01044e0, 0xe02a1b12, 0x0144fd54, + 0x2a1b12ff, 0x691b12ef, 0xe50c3230, 0xf5084408, + 0x82837582, 0xaff00574, 0x5918120b, 0x08251074, + 0x000208f5, 0xe5090585, 0x0794d309, 0x00020350, + 0xd37ee582, 0x04400094, 0x0280017f, 0x7ee5007f, + 0x50fa94c3, 0x80017e04, 0xee007e02, 0x0502605f, + 0x0b35307e, 0x7f01e143, 0xb3161209, 0x53580002, + 0x0002fee1, 0x8f6a8e58, 0x8d6c8c6b, 0x016e756d, + 0x75016f75, 0xf5e40170, 0xf574f573, 0x2f079075, + 0xf53cf5f0, 0xf546f53e, 0xf53df547, 0xe56ff53f, + 0xe50e706f, 0x126a456b, 0x83753707, 0x803a7480, + 0x37071208, 0x74808375, 0x3607121a, 0xe0868375, + 0xe4f00844, 0x74c36ef5, 0xff6e953f, 0x75680812, + 0xf0ef8283, 0x12741912, 0x33e5d308, 0x070912f0, + 0x40be0812, 0x706fe5e1, 0x3707120b, 0x74808375, + 0x0980f036, 0x75370712, 0x16748083, 0x016e75f0, + 0x75370712, 0x6ee5b483, 0x741912f0, 0x6e253f74, + 0x34e482f5, 0xe583f500, 0xbf74f033, 0x82f56e25, + 0x120034e4, 0xd840be08, 0xf570f5e4, 0xf547f546, + 0x0709126e, 0xfee083f5, 0xe0d30812, 0x0024007c, + 0xfe3eecff, 0xefd33bad, 0x509cee9d, 0x80017b04, + 0xe5007b02, 0x7a047070, 0x7a028001, 0x605aeb00, + 0x466e8506, 0xd3017075, 0x9cee9def, 0x017f0450, + 0x007f0280, 0x01b470e5, 0x80017e04, 0xef007e02, + 0x8503605e, 0x6e05476e, 0x7f646ee5, 0x46e5a370, + 0x47e50560, 0x85037eb4, 0x6fe54746, 0x46850870, + 0x77478576, 0x74c30e80, 0xf546957f, 0x7f74c378, + 0x79f54795, 0x37706fe5, 0x476546e5, 0x73750c70, + 0x01747501, 0x3df53cf5, 0xf5e43580, 0x47e5c34e, + 0x3cf54695, 0x71f513c3, 0x72f54625, 0x403f94c3, + 0x3df5e405, 0x74c34080, 0xf572953f, 0xe537803d, + 0x70476546, 0x0173750f, 0xf5017575, 0x753ff53e, + 0x2280014e, 0xc34ef5e4, 0x469547e5, 0x13c33ef5, + 0x462571f5, 0x94d372f5, 0xe405503f, 0x06803ff5, + 0xc12472e5, 0x6f053ff5, 0x94c36fe5, 0x02035002, + 0x6de57304, 0x02706c45, 0x74e50480, 0x07907545, + 0x017ff02f, 0x04603ee5, 0x14703ce5, 0xf53cf5e4, + 0xf53ef53d, 0xdf08123f, 0x02f00470, 0x7a80b106, + 0x95c33ce5, 0xe507403e, 0xff3e953c, 0xe5c30680, + 0xff3c953e, 0x95d376e5, 0x85054079, 0x03807a76, + 0xe57a7985, 0x7895c377, 0x77850550, 0x8503807b, + 0x7be57b78, 0x407a95d3, 0x957be530, 0xf53cf57a, + 0x7be5c33e, 0x07907a95, 0x3ce5f019, 0x71f513c3, + 0x72f57a25, 0x403f94c3, 0x3df5e405, 0x74c31f80, + 0xf572953f, 0x803ff53d, 0x3cf5e414, 0x07903ef5, + 0x0812f019, 0xf00370df, 0x01740380, 0x680812f0, + 0xe0d08375, 0xadfe0f54, 0x7e02703c, 0x020fbe07, + 0xfbee807e, 0x749bd3ef, 0x4098f880, 0x3cf5e41f, + 0x08123ef5, 0xf00370df, 0x01741280, 0xfb08e5f0, + 0xf50744eb, 0xd2837582, 0xf01044e0, 0xebfb08e5, + 0x82f50944, 0xed9e8375, 0x0744ebf0, 0x837582f5, + 0x12f0edca, 0x83756808, 0x22f0efcc, 0x074408e5, + 0x837582f5, 0xf054e0bc, 0x4408e5f0, 0x7582f507, + 0x54e0be83, 0x08e5f0f0, 0x82f50744, 0xe0c08375, + 0xe5f0f054, 0xf5074408, 0x90f02282, 0xfee02807, + 0x82f5e0a3, 0x8522838e, 0x41854242, 0x40408541, + 0xf52fc074, 0x3e027482, 0x42e583f5, 0x2fe074f0, + 0x027482f5, 0x2283f53e, 0xfd2942e5, 0xe5fc33e4, + 0xec9dc33c, 0x74f88064, 0xf5229880, 0x0790e083, + 0xfd1f5422, 0xe0a3fae0, 0x838a82f5, 0x9022f0ed, + 0xfce02207, 0x82f5e0a3, 0x9022838c, 0xedff2407, + 0xf0cf0744, 0x22f0efa3, 0x85383885, 0x3a853939, + 0x2fc0743a, 0x027482f5, 0x2283f53e, 0xff260790, + 0xcf0744ed, 0xf0efa3f0, 0xa074f022, 0x7482f52f, + 0x83f53e02, 0x25c07422, 0xe482f511, 0x83f50134, + 0x25007422, 0xe482f511, 0x83f50234, 0x25607422, + 0xe482f511, 0x83f50334, 0x25807422, 0xe482f511, + 0x83f50334, 0x25e07422, 0xe482f511, 0x83f50334, + 0x25407422, 0xe482f511, 0x83f50634, 0x2f807422, + 0x027482f5, 0x2283f53e, 0x82e583f5, 0x82f50744, + 0x22f040e5, 0x11254074, 0x34e482f5, 0x2283f502, + 0x1125c074, 0x34e482f5, 0x2283f503, 0x11250074, + 0x34e482f5, 0x2283f506, 0x11252074, 0x34e482f5, + 0x2283f506, 0xedfd08e5, 0x82f50744, 0xf041e522, + 0x016465e5, 0x7e226445, 0x007afb00, 0x22007cfd, + 0x11252074, 0x34e482f5, 0xa0742202, 0x82f51125, + 0x220334e4, 0x007e08af, 0xf50744ef, 0x3e852282, + 0x413f8542, 0x8522408f, 0x3d85423c, 0x22408f41, + 0x903f4575, 0xf0e42007, 0x83f522a3, 0x05f032e5, + 0xc36ee56e, 0xf0224094, 0x064408e5, 0x742282f5, + 0xf56e2500, 0x0034e482, 0xe52283f5, 0x906c456d, + 0xe4222f07, 0xd33ce5f9, 0x74223e95, 0x82f52e80, + 0xf50234e4, 0x7422e083, 0x82f52ea0, 0xf50234e4, + 0x7422e083, 0xf56e2580, 0x0034e482, 0xfd422522, + 0x22fc33e4, 0x85424285, 0x40854141, 0x4ced2240, + 0x09020360, 0x704eeff2, 0x26079037, 0xe0960712, + 0xd90712fd, 0x0790f0ed, 0x96071228, 0x0712fde0, + 0x12f0ede5, 0x54e09307, 0x0812fd1f, 0xed83f584, + 0x240790f0, 0xe0960712, 0x12fd1f54, 0xf0ed3808, + 0x4e0464ef, 0x07903770, 0x96071226, 0x0712fde0, + 0x90f0edf1, 0x07122807, 0x12fde096, 0xf0edfd07, + 0xe0930712, 0x12fd1f54, 0x83f58e08, 0x0790f0ed, + 0x96071224, 0xfd1f54e0, 0xed440812, 0x0164eff0, + 0x7d04704e, 0x7d028001, 0x0264ef00, 0x7f04704e, + 0x7f028001, 0x604def00, 0x26079078, 0xe0420712, + 0x090812ff, 0x3e0712ef, 0x0812ffe0, 0x90f0ef15, + 0x07122207, 0x1f54e042, 0x500812ff, 0x0790f0ef, + 0x42071224, 0xff1f54e0, 0xef5c0812, 0x071222f0, + 0x12f0e4d9, 0xf0e4e507, 0xf5840812, 0x12f0e483, + 0x14743808, 0xf10712f0, 0x0712f0e4, 0x12f0e4fd, + 0x83f58e08, 0x0812f0e4, 0xf0147444, 0xe4090812, + 0x150812f0, 0x0812f0e4, 0x12f0e450, 0x14745c08, + 0x648c22f0, 0x668a658d, 0xf5e4678b, 0x704eef69, + 0x161d0203, 0xe568f5e4, 0x70664567, 0x37071232, + 0xe4908375, 0x75360712, 0x12e4c283, 0x83753607, + 0x0812e4c4, 0x12297073, 0x83753707, 0x0712e492, + 0xc6837536, 0x360712e4, 0xe4c88375, 0x901180f0, + 0x07122607, 0x0812e442, 0x12057073, 0xf0e43f07, + 0x12161d12, 0x67e5801e, 0x33706645, 0x75370712, + 0x41e59083, 0x75360712, 0x41e5c283, 0x75360712, + 0x0812c483, 0x12297071, 0x83753707, 0x1240e592, + 0x83753607, 0x1240e5c6, 0x83753607, 0x900e80c8, + 0x07122607, 0x71081242, 0x07120670, 0xf040e53f, + 0x007e69af, 0x66ac67ad, 0x12490412, 0x83753707, + 0x94d3e0ca, 0x050c5000, 0xc368e568, 0x03500594, + 0x224b0a02, 0x75f7f953, 0xf5e410fc, 0x30fe75fd, + 0xf943fff5, 0x20e6e508, 0xff780be7, 0xfdd8f6e4, + 0x80fee653, 0xe4087809, 0x53fdd8f6, 0x8175fee6, + 0xa8f5e480, 0xa9c2a8d2, 0xe2e5afd2, 0x2005e520, + 0x038002e6, 0xe502e143, 0x0ee020e2, 0x7f000090, + 0xe4087e00, 0xfcdfa3f0, 0x0b02fade, 0x01fa43b5, + 0xf0c0e0c0, 0x82c083c0, 0x1112d0c0, 0xd0d0d018, + 0xd083d082, 0x53e0d0f0, 0x0232fefa, 0x93e4d51a, + 0x93e4f8a3, 0xdf08f6a3, 0xe42980f9, 0x54f8a393, + 0xc80c2407, 0x54c433c3, 0xc820440f, 0xf4044083, + 0x46018056, 0x80e4dff6, 0x0402010b, 0x40201008, + 0xff0f9080, 0x93017ee4, 0xffa3c160, 0xe5303f54, + 0xfe1f5409, 0x60a393e4, 0x54cf0e01, 0x60e025c0, + 0x80b840ad, 0x8d608cfe, 0xe7081261, 0x0d402074, + 0x7482f52f, 0x83f53e03, 0x80f03ee5, 0x82f52f0b, + 0xf53e0374, 0xf03ce583, 0x95d33ce5, 0xe53c403e, + 0x70604561, 0x0912e910, 0x123ee511, 0x3b407507, + 0x80a20812, 0xc33ee518, 0x1d403895, 0xe5383e85, + 0x8505603e, 0x0380393f, 0x8f393985, 0x2108123a, + 0x07123ee5, 0xf03fe5cd, 0xe5438022, 0x70604561, + 0x6c071219, 0x08120540, 0x122780ab, 0x08121809, + 0x1242e521, 0x41e5cd07, 0x3ce522f0, 0x403895c3, + 0x383c851d, 0x05603ce5, 0x80393d85, 0x39398503, + 0x08123a8f, 0x123ce521, 0x3de5cd07, 0x388522f0, + 0x39398538, 0x123a3a85, 0x38e52108, 0xe5cd0712, + 0x7f22f039, 0xb3161206, 0x12e41c12, 0x0e12b70e, + 0x0a44e0e6, 0xfe8e74f0, 0x12b70e12, 0xf0efbe0e, + 0xe53028e5, 0x0180d303, 0x750540c3, 0x03802014, + 0x12081475, 0x8375b70e, 0xf014e58a, 0x7505ffb4, + 0x06808012, 0x13c314e5, 0xf5e412f5, 0x127ff516, + 0x1312b818, 0xc30ae5a3, 0x09500194, 0x16e51605, + 0x401494c3, 0x20e4e5ea, 0x0e1228e7, 0xd28375b7, + 0xd30854e0, 0x04400094, 0x0280017f, 0x0ae5007f, + 0x400194c3, 0x80017e04, 0xef007e02, 0x1203605e, + 0x7fe5981d, 0x401194c3, 0xb70e1214, 0xe0d28375, + 0xe5f08044, 0x0fe720e4, 0x80981d12, 0xb70e120a, + 0xe0d28375, 0x12f07f54, 0x7422e41c, 0x82088580, + 0x17e583f5, 0xed0e12f0, 0x0790f0e4, 0x0e12e002, + 0x908375ca, 0x9274f0ef, 0x4408e5fe, 0x82f5ff07, + 0x54e0838e, 0x0790fdc0, 0x3f54e003, 0x8e828f4d, + 0x0790f083, 0x0e12e004, 0x828375ca, 0x0790f0ef, + 0xedffe005, 0x82f50744, 0xefb48375, 0x75b60e12, + 0x54e08083, 0x3730f0bf, 0x440f120a, 0xe0948375, + 0x30f08044, 0x0f120a38, 0x92837544, 0xf08044e0, + 0xe43028e5, 0x0a39201a, 0x75b70e12, 0x54e08883, + 0x3a20f07f, 0xb70e120a, 0xe0888375, 0x74f0bf54, + 0x0e12fe8c, 0xe0838eb7, 0x0e120f54, 0x868375b6, + 0xf0bf54e0, 0x064408e5, 0x75b00e12, 0xf0e48a83, + 0x704eef22, 0xd9071226, 0x0790fde0, 0x88071226, + 0xe0e50712, 0x280790fd, 0x12880712, 0x07128408, + 0x3808127f, 0x240790e0, 0xef850712, 0x704e0464, + 0xf1071229, 0x0790fde0, 0x88071226, 0xe0fd0712, + 0x280790fd, 0x12880712, 0x07128e08, 0x4408127f, + 0xfd1f54e0, 0x12240790, 0x64ef8807, 0x04704e01, + 0x0280017d, 0x64ef007d, 0x04704e02, 0x0280017f, + 0x4def007f, 0x08123560, 0x90ffe009, 0x07122607, + 0x12f0ef96, 0xffe01508, 0x12280790, 0xf0ef9607, + 0xe0500812, 0x12ff1f54, 0xf0ef9307, 0xe05c0812, + 0x90ff1f54, 0x07122407, 0x22f0ef96, 0x837582f5, + 0xe5f0e482, 0xf5074408, 0x838e2282, 0x5410f5e0, + 0x10e5f0fe, 0xe5ff0144, 0x44edfd08, 0x2282f507, + 0x54c415e5, 0x08e5ff07, 0x0844edfd, 0x837582f5, + 0x83752282, 0x4044e080, 0x4408e5f0, 0x7582f508, + 0xe5228a83, 0x25e02516, 0xf52f24e0, 0x1a34e482, + 0x93e483f5, 0x43220df5, 0xe14310e1, 0xfde15380, + 0x2210e185, 0xe02516e5, 0x3224e025, 0x34e482f5, + 0xe483f51a, 0x55852293, 0x83548582, 0x22f015e5, + 0x2054e2e5, 0x220094d3, 0x4054e2e5, 0x220094d3, + 0x064408e5, 0xfd2282f5, 0xebfb08e5, 0x82f50744, + 0x53f5e422, 0x40340f12, 0x80017f04, 0x12007f02, + 0x04403c0f, 0x0280017e, 0x4fee007e, 0x0f020370, + 0x10e185f7, 0x5302e143, 0xe1850fe1, 0x51f5e410, + 0x3f54e3e5, 0x0f1252f5, 0xad1d403c, 0x1251af52, + 0x60efb01c, 0x10e18508, 0x8040e143, 0xbfe1530b, + 0x120b0f12, 0xfb800600, 0x3f54e3e5, 0xe4e551f5, + 0x52f53f54, 0x40340f12, 0xaf52ad1d, 0xb01c1251, + 0x850860ef, 0xe14310e1, 0x530b8020, 0x0f12dfe1, + 0x0600120b, 0x0f12fb80, 0x7f044034, 0x7f028001, + 0x3c0f1200, 0x017e0440, 0x007e0280, 0x03604fee, + 0x220e0f12, 0x01001f01, 0x00002003, 0x02001102, + 0x10024010, 0x00000090, 0x00000000, 0x1f011f01, + 0x1257f5e4, 0x15123f16, 0x1012e4c6, 0xb7141256, + 0x12260790, 0x12e44207, 0xf0e43e07, 0x12561012, + 0x0790b714, 0x42071226, 0x071241e5, 0xf040e53e, + 0x007e57af, 0x007c56ad, 0xaf490412, 0x02007e56, + 0x90ffee11, 0xe0a32007, 0x56f5e4fd, 0xfcfe40f5, + 0x12fa56ab, 0x0f7f5111, 0xf5e4187d, 0xfe40f556, + 0xfa56abfc, 0xaf411512, 0x12007e56, 0xffe47f1a, + 0x1f7d56f5, 0xfcfe40f5, 0x22fa56ab, 0x55f5e422, + 0x74fd08e5, 0xed56f5a0, 0x57f50744, 0xe53028e5, + 0x0180d303, 0x7f0540c3, 0x0480ef28, 0xc3ef147f, + 0xe454f513, 0xcb0e12f9, 0xe08e8375, 0xefce10f5, + 0x94d3eece, 0xe5264000, 0x12fe5410, 0x83754b0f, + 0xe5f0ed8e, 0xfd014410, 0xf50744eb, 0x85f0ed82, + 0x56858257, 0xe330e083, 0x801e0901, 0xe934c2d4, + 0x405495c3, 0x2234d202, 0x00000f22, 0x90113030, + 0x93e40010, 0x109010f5, 0xf593e410, 0x90101210, + 0x22501112, 0xe730e2e5, 0x0310120e, 0x303030c2, + 0xfc101203, 0xe5213320, 0x2094c3fe, 0xf9530950, + 0x30fe75f7, 0xe508f943, 0x03e730f2, 0xe57ff953, + 0xd37054f1, 0xdf500094, 0x00000022, 0x8f588e22, + 0x8d5a8c59, 0x8b5c8a5b, 0x015e755d, 0xf55ff5e4, + 0x1262f560, 0x83753707, 0xc4ffe0d0, 0x61f50f54, + 0x85661e12, 0xe5d35e59, 0xe55b955e, 0x7807125a, + 0x07124b50, 0xbc837510, 0x125e45e0, 0x83753607, + 0x5e45e0be, 0x75360712, 0x45e0c083, 0x5faff05e, + 0x081260e5, 0x360a127b, 0x007e62af, 0x5cac5dad, + 0xe5490412, 0x7e5eaf61, 0x0503b400, 0x80e21d12, + 0xac5dad07, 0x1713125c, 0x11025e05, 0x1007127a, + 0xe0bc8375, 0x07124045, 0xbe837536, 0x124045e0, + 0x83753607, 0x4045e0c0, 0x588e22f0, 0x5a75598f, + 0x75017901, 0xfbe4015b, 0x75370712, 0x54e0ae83, + 0x0812ff1a, 0x13c4e068, 0xeffe0754, 0x65ee0c70, + 0x90077035, 0xb4e02f07, 0x35af0d01, 0x0e12007e, + 0xcfebcf05, 0xe5211e02, 0x45026459, 0x7f047058, + 0x7f028001, 0x4559e500, 0x7e047058, 0x7e028001, + 0x604fee00, 0x49418523, 0xe54b4085, 0x70584559, + 0xfe5aaf2c, 0xfccde9cd, 0x58aa59ab, 0xaf360a12, + 0x12007e5b, 0x1580211e, 0x007e5baf, 0x90211e12, + 0x07122607, 0x1249e542, 0x4be53e07, 0xaffde4f0, + 0x12fcfe35, 0x8c222209, 0x12658d64, 0x3c40e708, + 0x644565e5, 0x09121070, 0x3ee5c311, 0x40760712, + 0xa208123b, 0x3ee51880, 0x403895c3, 0x383e851d, + 0x05603ee5, 0x80393f85, 0x39398503, 0x07123a8f, + 0x123ee5b5, 0x3fe56007, 0x3b8022f0, 0x644565e5, + 0x07121170, 0x1205406c, 0x1f80ab08, 0xe54b0712, + 0xe522f041, 0x3895c33c, 0x3c851d40, 0x603ce538, + 0x393d8505, 0x39850380, 0x123a8f39, 0x3ce5b507, + 0xe5600712, 0x1222f03d, 0x38e5ac07, 0xe5600712, + 0x8c22f039, 0x12648d63, 0x3c40e708, 0x634564e5, + 0x09121070, 0x3ee5c311, 0x40760712, 0xa208123b, + 0x3ee51880, 0x403895c3, 0x383e851d, 0x05603ee5, + 0x80393f85, 0x39398503, 0x07123a8f, 0x123ee5b5, + 0x3fe56007, 0x3b8022f0, 0x634564e5, 0x07121170, + 0x1205406c, 0x1f80ab08, 0xe54b0712, 0xe522f041, + 0x3895c33c, 0x3c851d40, 0x603ce538, 0x393d8505, + 0x39850380, 0x123a8f39, 0x3ce5b507, 0xe5600712, + 0x1222f03d, 0x38e5ac07, 0xe5600712, 0xe522f039, + 0x08e5fe0d, 0x0544548e, 0x157555f5, 0x1282f50f, + 0x17122d0f, 0x05312025, 0x80031575, 0x0b157503, + 0x94c30ae5, 0x12385001, 0x31202014, 0x05150506, + 0x15048015, 0xe5151515, 0x0194c30a, 0x14122150, + 0x04312020, 0x02801505, 0x0ae51515, 0x500194c3, + 0x2a0f120e, 0x20251712, 0x15050531, 0xe52a0f12, + 0x0408b415, 0x0280017f, 0x15e5007f, 0x7e0407b4, + 0x7e028001, 0x604fee00, 0x227f0502, 0x85825585, + 0x15e58354, 0x251712f0, 0x37071222, 0x74ae8375, + 0x360712ff, 0xf51a54e0, 0x13c4e034, 0x35f50754, + 0x2460fe24, 0x3c60fe24, 0x63700424, 0xe52d3175, + 0xb674fd08, 0x749f0712, 0x220790bc, 0x74a20712, + 0xc0071290, 0x3c809274, 0xe53a3175, 0xba74fd08, + 0x749f0712, 0x220790c0, 0x74c30712, 0xc00712c4, + 0x2080c874, 0xe5353175, 0xb874fd08, 0x749f0712, + 0x44edffbe, 0x22079007, 0xefa3f0cf, 0x12c274f0, + 0xc674c007, 0x0744edff, 0xa3f0cfa3, 0x7522f0ef, + 0x8e220134, 0x8c598f58, 0x8a5b8d5a, 0x755d8b5c, + 0xf5e4015e, 0x661e125f, 0xd35e5985, 0x5b955ee5, + 0x07125ae5, 0xe5575078, 0x705c455d, 0x37071230, + 0xe5928375, 0x3607125e, 0xe5c68375, 0x3607125e, + 0xe5c88375, 0x3607125e, 0xe5908375, 0x3607125e, + 0xe5c28375, 0x3607125e, 0x80c48375, 0x3f071203, + 0xaff05ee5, 0xad007e5f, 0x125cac5d, 0x5eaf4904, + 0x5dad007e, 0x0b125cac, 0x025e05d9, 0x5dabcf14, + 0x5bad5caa, 0x59af5aac, 0x1b0258ae, 0x8d5c8c7b, + 0x8b5e8a5d, 0x0160755f, 0xf561f5e4, 0x1263f562, + 0x608f661e, 0x9560e5d3, 0x125ce55d, 0x61507807, + 0x5e455fe5, 0x07122770, 0xb6837537, 0x071260e5, + 0xb8837536, 0x071260e5, 0xba837536, 0xaff060e5, + 0xe5007e61, 0x7d081262, 0x80360a12, 0x24079019, + 0xe5420712, 0x36071260, 0xe48e8375, 0x74360712, + 0x36071201, 0x63aff0e4, 0x5fad007e, 0x04125eac, + 0x7e60af49, 0xac5fad00, 0x8b12125e, 0x15026005, + 0xf5e42258, 0xaf59f558, 0x0744ef08, 0x837582f5, + 0xc4fde0d0, 0x5af50f54, 0xf50744ef, 0x80837582, + 0x12f00174, 0x83759a08, 0xf045e582, 0xf50744ef, + 0x8a837582, 0x12f0ff74, 0x07127419, 0xbc837537, + 0x12ef54e0, 0x83753607, 0xef54e0be, 0x75360712, + 0x54e0c083, 0x360712ef, 0xe0bc8375, 0x07121044, + 0xbe837536, 0x121044e0, 0x83753607, 0x1044e0c0, + 0xe558aff0, 0x7b081259, 0xe4360a02, 0x017d58f5, + 0x35af59f5, 0x0912fcfe, 0x37071222, 0x74b68375, + 0x36071210, 0x74b88375, 0x36071210, 0x74ba8375, + 0x36071210, 0x74bc8375, 0x36071210, 0x74be8375, + 0x36071210, 0x74c08375, 0x36071210, 0xe4908375, + 0x75360712, 0x12e4c283, 0x83753607, 0x0712e4c4, + 0x92837536, 0x360712e4, 0xe4c68375, 0x75360712, + 0xf0e4c883, 0xe5fe58af, 0x7d081259, 0xe5360a02, + 0x6ce430e2, 0xc054e7e5, 0x64704064, 0x54c409e5, + 0x08e5fe30, 0xe025e025, 0xfe4ec054, 0x4e3f54ef, + 0xae2be5fd, 0xc302782a, 0xce33ce33, 0x82f5f9d8, + 0xf0ed838e, 0x2aae2be5, 0x33c30278, 0xd8ce33ce, + 0x82f5fff9, 0xe5a3838e, 0x828ff0fe, 0xa3a3838e, + 0x8ff0fde5, 0xa3838e82, 0xfce5a3a3, 0x2be5c3f0, + 0x2ae5fa94, 0x08500094, 0x2be52b05, 0x2a050270, + 0xe4ffe422, 0x56f558f5, 0x827457f5, 0xb70e12fc, + 0xf5e0838c, 0xf07f5410, 0x804410e5, 0xed4b0f12, + 0x120a7ef0, 0x8375b70e, 0xe020e0a0, 0x05f4de26, + 0x7057e557, 0xe5560502, 0xfd012414, 0xd3fc33e4, + 0xe59d57e5, 0xd9409c56, 0x20940ae5, 0x0a050250, + 0xc208e143, 0xb70e1231, 0xe0a68375, 0x12651255, + 0x31d20370, 0x2231c222, 0xe0260790, 0xf5e0a3fa, + 0xe0838a82, 0x39e541f5, 0x404195c3, 0x9539e526, + 0xee9fc341, 0x40780712, 0x80017c04, 0xe5007c02, + 0x603f6441, 0x80017b04, 0xec007b02, 0x0529605b, + 0xc3288041, 0x399541e5, 0x12ee9fc3, 0x04407807, + 0x0280017f, 0x41e5007f, 0x017e0460, 0x007e0280, + 0x04605eef, 0x03804115, 0x85413985, 0xe522403a, + 0x60e430e2, 0xe230e1e5, 0x7009e55b, 0x80017f04, + 0xe5007f02, 0x7e047008, 0x7e028001, 0x605fee00, + 0xf8f95343, 0xe430e2e5, 0x30e1e53b, 0xfa432ee2, + 0xfbfa5302, 0x9010f5e4, 0x10e57094, 0x30e1e5f0, + 0x9490e7e2, 0x1065e070, 0xfa430360, 0x90100504, + 0x10e57094, 0x12e670f0, 0xe1800600, 0x53fdfa53, + 0xc080fbfa, 0x12548f22, 0xe1e50600, 0x7f04e030, + 0x7f028001, 0xd37ee500, 0x04400594, 0x0280017e, + 0x4fee007e, 0x54853d60, 0x20e2e511, 0xce7432e1, + 0x303c1b12, 0x017d04e7, 0x007d0280, 0x838e828f, + 0x04e630e0, 0x0280017f, 0x5def007f, 0x1c121570, + 0x12ce7467, 0xe6303c1b, 0x8044e007, 0x80f943f0, + 0x22f31712, 0xe5f70e12, 0x25e02516, 0xf53024e0, + 0x1a34e482, 0x93e483f5, 0x16e50ff5, 0xe025e025, + 0x82f53124, 0xf51a34e4, 0xf593e483, 0x180f120e, + 0x0fe510f5, 0x0e12f054, 0x8c8375ca, 0x0fe5f0ef, + 0x120ce030, 0x8375b70e, 0x4044e086, 0x120a80f0, + 0x8375b70e, 0xbf54e086, 0x440f12f0, 0xe5828375, + 0x7f22f00e, 0xb3161205, 0x12b70e12, 0x0274e60e, + 0xfe8e74f0, 0x12b70e12, 0xf0efbe0e, 0x12701575, + 0x34208a1e, 0x10157505, 0x15750380, 0x8a1e1250, + 0x74043420, 0x74028010, 0xf51525f0, 0xd40e1215, + 0x1012f0ef, 0x17342091, 0x306415e5, 0x10740c60, + 0x15f51525, 0xe40380b4, 0x0e1215f5, 0x22f0efd4, + 0x2a0790e4, 0x12f0a3f0, 0x83753707, 0x7f54e082, + 0xe0360712, 0x12f08044, 0x08123d00, 0xa0837598, + 0x1ae020e0, 0xe02b0790, 0x0670f004, 0xe02a0790, + 0x0790f004, 0x10b4e02a, 0xb4e0a3e1, 0x44eedc00, + 0x44effca6, 0x8c82f507, 0x32f5e083, 0xfea844ee, + 0xf50744ef, 0xe0838e82, 0x122233f5, 0x83759808, + 0x54c4e0d0, 0x4375fd0f, 0xff447501, 0x74b70812, + 0x3b75f004, 0x6014ed01, 0x0b60140c, 0x240f6014, + 0x800b7003, 0x12008009, 0xf004b408, 0x08120680, + 0xf00474b4, 0xfe8244ee, 0xf50744ef, 0xe5838e82, + 0xcb081245, 0xe5828375, 0x36071231, 0xe0868375, + 0x22f00844, 0x000f1f01, 0x90002003, 0x920f2000, + 0x940f2100, 0x960f2200, 0x980f2300, 0x9a0f2400, + 0x9c0f2500, 0x9e0f2600, 0xa00f2700, 0xa2012001, + 0xa4012101, 0xa6012201, 0xa8012301, 0xaa012401, + 0xac012501, 0xae012601, 0xb0012701, 0xb4012801, + 0xb60f2800, 0xb80f2840, 0xcb012861, 0xeecacbef, + 0xe4017fca, 0x704aebfd, 0xf508e524, 0x12b67482, + 0x08e52c08, 0xb87482f5, 0xe52c0812, 0x7482f508, + 0x2c0812ba, 0x007c007e, 0x80360a12, 0x26079012, + 0xe5420712, 0x0790f041, 0x42071224, 0x12f040e5, + 0x83753707, 0x0712e48e, 0x12017436, 0xf0e43607, + 0x26f5e422, 0xe15327f5, 0x752af5fe, 0x08f5012b, + 0x1612017f, 0x1c3030b3, 0xe4291a90, 0x9010f593, + 0x93e4f91f, 0x009010f5, 0xf593e441, 0xf90f9010, + 0x10f593e4, 0x1612027f, 0x550f12b3, 0x1612037f, + 0x060012b3, 0xe730e2e5, 0x00101209, 0x12033030, + 0x00020011, 0x0be5f047, 0xe025e025, 0x82f58224, + 0xf50734e4, 0x88742283, 0x4408e5fe, 0x82f5ff07, + 0x22e0838e, 0x4408e5f0, 0x2282f507, 0xc054e0f0, + 0x838e828f, 0x44ef22f0, 0x7582f507, 0x54e08683, + 0x0094d310, 0x0790f022, 0xf004e015, 0x44effe22, + 0x8e82f507, 0x8e22e083, 0x12618f60, 0xffe4661e, + 0xeeceedce, 0xe56195d3, 0x78071260, 0x20743940, + 0xe482f52e, 0x83f50334, 0xff0370e0, 0x08122680, + 0x9fc3fdef, 0xedcf1e40, 0x704aebcf, 0x12428d0b, + 0x41f5fb08, 0x0c80408e, 0xf5ef0812, 0xfb081238, + 0x3a8e39f5, 0x22bc801e, 0xe5015875, 0x120c7035, + 0xf5e0d907, 0xe507124a, 0xe54cf5e0, 0x0c04b435, + 0xe0f10712, 0x07124af5, 0x4cf5e0fd, 0x01b435e5, + 0x80017f04, 0xe5007f02, 0x0402b435, 0x0280017e, + 0x4fee007e, 0x08120c60, 0x4af5e009, 0xe0150812, + 0x41854cf5, 0x4b408549, 0x015b7522, 0x12240790, + 0x54e04207, 0x94d3ff1f, 0x8f045002, 0xef058058, + 0x58f5fe24, 0x1894c3ef, 0x59750540, 0xef048018, + 0x8559f504, 0x58af5a43, 0x59ad007e, 0x5bab007c, + 0x1512007a, 0x7e5aaf41, 0x8c171200, 0x007e5baf, + 0x907f1a02, 0x93e4fd10, 0xf02e0790, 0x122d1412, + 0x34e5cf19, 0x07123570, 0xce837537, 0x1313ffe0, + 0xf5075413, 0x240f5436, 0x240b60fe, 0x240a60fe, + 0x02187003, 0x1e026f1d, 0x14101252, 0x1255f5e4, + 0x5505461d, 0x94c355e5, 0x22f44005, 0xedc3fce4, + 0xf5effa9f, 0x00827583, 0x93e4ff79, 0xa3cc6ccc, + 0xf6daf8d9, 0xe430e2e5, 0xede58c02, 0xefffff24, + 0xf5ff8275, 0x6c93e483, 0x017f0370, 0x22007f22, + 0x75b70e12, 0xf0e48083, 0x074408e5, 0x75b00e12, + 0x0e128483, 0x868375b5, 0x75b50e12, 0x54e08c83, + 0xb60e12f3, 0x128e8375, 0x8375b50e, 0xfb54e094, + 0x071222f0, 0x8e837537, 0x360712e4, 0x07120174, + 0x0812e436, 0x8c8375cb, 0x122044e0, 0x54e0cb08, + 0x8474f0df, 0xf5820885, 0x7f54e083, 0x8044e0f0, + 0x567522f0, 0xf5fde401, 0xfe35af57, 0x220912fc, + 0x121d1c12, 0x1b123b1e, 0x7e57afcc, 0x7c56ad00, + 0x49041200, 0x007e56af, 0x75ee1102, 0xfde40156, + 0x35af57f5, 0x0912fcfe, 0x1d1c1222, 0x123b1e12, + 0x57afcc1b, 0x56ad007e, 0x0412007c, 0x7e56af49, + 0xee110200, 0x1216f5e4, 0xe5fef70e, 0xff054408, + 0x8f180f12, 0xf0838e82, 0x16e51605, 0x401494c3, + 0x1208e5e6, 0xf0e4de0e, 0x58f5e422, 0x5af559f5, + 0x58adfeff, 0x220912fc, 0x007e047f, 0x007c58ad, + 0x7f220912, 0xad007e02, 0x02007c58, 0x3ce52209, + 0xe5fc3e25, 0xfb002442, 0xecfa33e4, 0x12ea9bc3, + 0x0b407807, 0x3de5428c, 0x41f53f25, 0x1222408f, + 0x74221809, 0x8518f584, 0x19851908, 0x83188582, + 0xf07f54e0, 0xf08044e0, 0xf08044e0, 0x704eef22, + 0x3707120b, 0xe0d28375, 0x22f0df54, 0x75370712, + 0x44e0d283, 0x7522f020, 0x07900158, 0x42071226, + 0xf53f54e0, 0x3f071241, 0xf53f54e0, 0x56752240, + 0x57f5e402, 0xafbd1d12, 0xad007e57, 0x02007c56, + 0xf5e44904, 0xf541f542, 0xf538f540, 0x223af539, + 0xff0754ef, 0xf854f9e5, 0x22f9f54f, 0xfee4017f, + 0xffbe0e0f, 0x0e1222fb, 0x12f0efd4, 0x00229110, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, @@ -16714,7 +17230,7 @@ static const uint32_t isp_2500_risc_code[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000f1f01, - 0xc3002003, 0xb9f6ad13, 0xffffb7ea, 0xffeeae82 + 0x00000000, 0x000f1f01, 0xc3002003, 0xb9f6ad13, + 0xffffb7ea, 0xffee6df3 }; #endif -- cgit v1.1 From 175f9d7444496870348fb2dc23d1b9fa87c8088c Mon Sep 17 00:00:00 2001 From: smh Date: Mon, 11 Apr 2016 13:17:11 +0000 Subject: Only include sysctl in kernel build Only include sysctl in kernel builds fixing warning about implicit declaration of function 'sysctl_handle_int'. PR: 204140 MFC after: 1 week X-MFC-With: r297813 Sponsored by: Multiplay --- .../opensolaris/uts/common/fs/zfs/spa_misc.c | 84 ++++++++++++---------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c index 6080594..63350b3 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c @@ -55,6 +55,11 @@ #include "zfs_prop.h" #include +#if defined(__FreeBSD__) && defined(_KERNEL) +#include +#include +#endif + /* * SPA locking * @@ -255,35 +260,6 @@ int zfs_flags = 0; * in leaked space, or worse. */ boolean_t zfs_recover = B_FALSE; -SYSCTL_DECL(_vfs_zfs); -SYSCTL_INT(_vfs_zfs, OID_AUTO, recover, CTLFLAG_RWTUN, &zfs_recover, 0, - "Try to recover from otherwise-fatal errors."); - -static int -sysctl_vfs_zfs_debug_flags(SYSCTL_HANDLER_ARGS) -{ - int err, val; - - val = zfs_flags; - err = sysctl_handle_int(oidp, &val, 0, req); - if (err != 0 || req->newptr == NULL) - return (err); - - /* - * ZFS_DEBUG_MODIFY must be enabled prior to boot so all - * arc buffers in the system have the necessary additional - * checksum data. However, it is safe to disable at any - * time. - */ - if (!(zfs_flags & ZFS_DEBUG_MODIFY)) - val &= ~ZFS_DEBUG_MODIFY; - zfs_flags = val; - - return (0); -} -SYSCTL_PROC(_vfs_zfs, OID_AUTO, debug_flags, - CTLTYPE_UINT | CTLFLAG_MPSAFE | CTLFLAG_RWTUN, 0, sizeof(int), - sysctl_vfs_zfs_debug_flags, "IU", "Debug flags for ZFS testing."); /* * If destroy encounters an EIO while reading metadata (e.g. indirect @@ -325,26 +301,18 @@ boolean_t zfs_free_leak_on_eio = B_FALSE; * in a system panic. */ uint64_t zfs_deadman_synctime_ms = 1000000ULL; -SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, deadman_synctime_ms, CTLFLAG_RDTUN, - &zfs_deadman_synctime_ms, 0, - "Stalled ZFS I/O expiration time in milliseconds"); /* * Check time in milliseconds. This defines the frequency at which we check * for hung I/O. */ uint64_t zfs_deadman_checktime_ms = 5000ULL; -SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, deadman_checktime_ms, CTLFLAG_RDTUN, - &zfs_deadman_checktime_ms, 0, - "Period of checks for stalled ZFS I/O in milliseconds"); /* * Default value of -1 for zfs_deadman_enabled is resolved in * zfs_deadman_init() */ int zfs_deadman_enabled = -1; -SYSCTL_INT(_vfs_zfs, OID_AUTO, deadman_enabled, CTLFLAG_RDTUN, - &zfs_deadman_enabled, 0, "Kernel panic on stalled ZFS I/O"); /* * The worst case is single-sector max-parity RAID-Z blocks, in which @@ -356,8 +324,50 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, deadman_enabled, CTLFLAG_RDTUN, * (VDEV_RAIDZ_MAXPARITY + 1) * SPA_DVAS_PER_BP * 2 == 24 */ int spa_asize_inflation = 24; + +#if defined(__FreeBSD__) && defined(_KERNEL) +SYSCTL_DECL(_vfs_zfs); +SYSCTL_INT(_vfs_zfs, OID_AUTO, recover, CTLFLAG_RWTUN, &zfs_recover, 0, + "Try to recover from otherwise-fatal errors."); + +static int +sysctl_vfs_zfs_debug_flags(SYSCTL_HANDLER_ARGS) +{ + int err, val; + + val = zfs_flags; + err = sysctl_handle_int(oidp, &val, 0, req); + if (err != 0 || req->newptr == NULL) + return (err); + + /* + * ZFS_DEBUG_MODIFY must be enabled prior to boot so all + * arc buffers in the system have the necessary additional + * checksum data. However, it is safe to disable at any + * time. + */ + if (!(zfs_flags & ZFS_DEBUG_MODIFY)) + val &= ~ZFS_DEBUG_MODIFY; + zfs_flags = val; + + return (0); +} + +SYSCTL_PROC(_vfs_zfs, OID_AUTO, debug_flags, + CTLTYPE_UINT | CTLFLAG_MPSAFE | CTLFLAG_RWTUN, 0, sizeof(int), + sysctl_vfs_zfs_debug_flags, "IU", "Debug flags for ZFS testing."); + +SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, deadman_synctime_ms, CTLFLAG_RDTUN, + &zfs_deadman_synctime_ms, 0, + "Stalled ZFS I/O expiration time in milliseconds"); +SYSCTL_UQUAD(_vfs_zfs, OID_AUTO, deadman_checktime_ms, CTLFLAG_RDTUN, + &zfs_deadman_checktime_ms, 0, + "Period of checks for stalled ZFS I/O in milliseconds"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, deadman_enabled, CTLFLAG_RDTUN, + &zfs_deadman_enabled, 0, "Kernel panic on stalled ZFS I/O"); SYSCTL_INT(_vfs_zfs, OID_AUTO, spa_asize_inflation, CTLFLAG_RWTUN, &spa_asize_inflation, 0, "Worst case inflation factor for single sector writes"); +#endif #ifndef illumos #ifdef _KERNEL -- cgit v1.1 From 26836fccd261358467b3d92e77ff4695af286de9 Mon Sep 17 00:00:00 2001 From: ae Date: Mon, 11 Apr 2016 13:44:31 +0000 Subject: Fix the problem, when gpart(8) can't write both bootcode and partcode in one command due to wrong file size limit. Do not use bootcode size to calculate partsize limit. Also add report message about successful partcode writing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by: Trond Endrestøl MFC after: 2 weeks --- sbin/geom/class/part/geom_part.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/sbin/geom/class/part/geom_part.c b/sbin/geom/class/part/geom_part.c index 44309f9..4f57f00 100644 --- a/sbin/geom/class/part/geom_part.c +++ b/sbin/geom/class/part/geom_part.c @@ -1126,6 +1126,7 @@ gpart_write_partcode(struct ggeom *gp, int idx, void *code, ssize_t size) err(EXIT_FAILURE, "%s", dsf); free(buf); close(fd); + printf("partcode written to %s\n", pp->lg_name); } else errx(EXIT_FAILURE, "invalid partition index"); } @@ -1172,6 +1173,9 @@ gpart_write_partcode_vtoc8(struct ggeom *gp, int idx, void *code) } if (installed == 0) errx(EXIT_FAILURE, "%s: no partitions", gp->lg_name); + else + printf("partcode written to %s\n", + idx != 0 ? pp->lg_name: gp->lg_name); } static void @@ -1193,10 +1197,8 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) bootcode); if (error) errc(EXIT_FAILURE, error, "internal error"); - } else { + } else bootcode = NULL; - bootsize = 0; - } s = gctl_get_ascii(req, "class"); if (s == NULL) @@ -1220,21 +1222,23 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl) s = find_geomcfg(gp, "scheme"); if (s == NULL) errx(EXIT_FAILURE, "Scheme not found for geom %s", gp->lg_name); - vtoc8 = 0; if (strcmp(s, "VTOC8") == 0) vtoc8 = 1; + else + vtoc8 = 0; if (gctl_has_param(req, GPART_PARAM_PARTCODE)) { s = gctl_get_ascii(req, GPART_PARAM_PARTCODE); - partsize = vtoc8 != 0 ? VTOC_BOOTSIZE : bootsize * 1024; + if (vtoc8 != 0) + partsize = VTOC_BOOTSIZE; + else + partsize = 1024 * 1024; /* Arbitrary limit. */ partcode = gpart_bootfile_read(s, &partsize); error = gctl_delete_param(req, GPART_PARAM_PARTCODE); if (error) errc(EXIT_FAILURE, error, "internal error"); - } else { + } else partcode = NULL; - partsize = 0; - } if (gctl_has_param(req, GPART_PARAM_INDEX)) { if (partcode == NULL) -- cgit v1.1