diff options
Diffstat (limited to 'sys')
331 files changed, 16766 insertions, 10208 deletions
diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S index 1254f3f..ed1ccb5 100644 --- a/sys/amd64/amd64/cpu_switch.S +++ b/sys/amd64/amd64/cpu_switch.S @@ -122,6 +122,9 @@ done_store_dr: 1: movq %rdx,%rcx movl xsave_mask,%eax movl xsave_mask+4,%edx + .globl ctx_switch_xsave +ctx_switch_xsave: + /* This is patched to xsaveopt if supported, see fpuinit_bsp1() */ xsave (%r8) movq %rcx,%rdx 2: smsw %ax diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c index ca951ad..4bf3635 100644 --- a/sys/amd64/amd64/fpu.c +++ b/sys/amd64/amd64/fpu.c @@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$"); #define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr))) #define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr))) #define ldmxcsr(csr) __asm __volatile("ldmxcsr %0" : : "m" (csr)) +#define stmxcsr(addr) __asm __volatile("stmxcsr %0" : : "m" (*(addr))) static __inline void xrstor(char *addr, uint64_t mask) @@ -105,6 +106,7 @@ void fnstsw(caddr_t addr); void fxsave(caddr_t addr); void fxrstor(caddr_t addr); void ldmxcsr(u_int csr); +void stmxcsr(u_int *csr); void xrstor(char *addr, uint64_t mask); void xsave(char *addr, uint64_t mask); @@ -113,9 +115,6 @@ void xsave(char *addr, uint64_t mask); #define start_emulating() load_cr0(rcr0() | CR0_TS) #define stop_emulating() clts() -#define GET_FPU_CW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_cw) -#define GET_FPU_SW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_sw) - CTASSERT(sizeof(struct savefpu) == 512); CTASSERT(sizeof(struct xstate_hdr) == 64); CTASSERT(sizeof(struct savefpu_ymm) == 832); @@ -132,10 +131,16 @@ static void fpu_clean_state(void); SYSCTL_INT(_hw, HW_FLOATINGPT, floatingpoint, CTLFLAG_RD, NULL, 1, "Floating point instructions executed in hardware"); +static int use_xsaveopt; int use_xsave; /* non-static for cpu_switch.S */ uint64_t xsave_mask; /* the same */ static struct savefpu *fpu_initialstate; +struct xsave_area_elm_descr { + u_int offset; + u_int size; +} *xsave_area_desc; + void fpusave(void *addr) { @@ -182,6 +187,17 @@ fpuinit_bsp1(void) TUNABLE_ULONG_FETCH("hw.xsave_mask", &xsave_mask_user); xsave_mask_user |= XFEATURE_ENABLED_X87 | XFEATURE_ENABLED_SSE; xsave_mask &= xsave_mask_user; + + cpuid_count(0xd, 0x1, cp); + if ((cp[0] & CPUID_EXTSTATE_XSAVEOPT) != 0) { + /* + * Patch the XSAVE instruction in the cpu_switch code + * to XSAVEOPT. We assume that XSAVE encoding used + * REX byte, and set the bit 4 of the r/m byte. + */ + ctx_switch_xsave[3] |= 0x10; + use_xsaveopt = 1; + } } /* @@ -252,6 +268,7 @@ static void fpuinitstate(void *arg __unused) { register_t saveintr; + int cp[4], i, max_ext_n; fpu_initialstate = malloc(cpu_max_ext_state_size, M_DEVBUF, M_WAITOK | M_ZERO); @@ -273,6 +290,28 @@ fpuinitstate(void *arg __unused) */ bzero(&fpu_initialstate->sv_xmm[0], sizeof(struct xmmacc)); + /* + * Create a table describing the layout of the CPU Extended + * Save Area. + */ + if (use_xsaveopt) { + max_ext_n = flsl(xsave_mask); + xsave_area_desc = malloc(max_ext_n * sizeof(struct + xsave_area_elm_descr), M_DEVBUF, M_WAITOK | M_ZERO); + /* x87 state */ + xsave_area_desc[0].offset = 0; + xsave_area_desc[0].size = 160; + /* XMM */ + xsave_area_desc[1].offset = 160; + xsave_area_desc[1].size = 288 - 160; + + for (i = 2; i < max_ext_n; i++) { + cpuid_count(0xd, i, cp); + xsave_area_desc[i].offset = cp[1]; + xsave_area_desc[i].size = cp[0]; + } + } + start_emulating(); intr_restore(saveintr); } @@ -288,7 +327,7 @@ fpuexit(struct thread *td) critical_enter(); if (curthread == PCPU_GET(fpcurthread)) { stop_emulating(); - fpusave(PCPU_GET(curpcb)->pcb_save); + fpusave(curpcb->pcb_save); start_emulating(); PCPU_SET(fpcurthread, 0); } @@ -474,25 +513,26 @@ static char fpetable[128] = { }; /* - * Preserve the FP status word, clear FP exceptions, then generate a SIGFPE. + * Read the FP status and control words, then generate si_code value + * for SIGFPE. The error code chosen will be one of the + * FPE_... macros. It will be sent as the second argument to old + * BSD-style signal handlers and as "siginfo_t->si_code" (second + * argument) to SA_SIGINFO signal handlers. * - * Clearing exceptions is necessary mainly to avoid IRQ13 bugs. We now - * depend on longjmp() restoring a usable state. Restoring the state - * or examining it might fail if we didn't clear exceptions. + * Some time ago, we cleared the x87 exceptions with FNCLEX there. + * Clearing exceptions was necessary mainly to avoid IRQ13 bugs. The + * usermode code which understands the FPU hardware enough to enable + * the exceptions, can also handle clearing the exception state in the + * handler. The only consequence of not clearing the exception is the + * rethrow of the SIGFPE on return from the signal handler and + * reexecution of the corresponding instruction. * - * The error code chosen will be one of the FPE_... macros. It will be - * sent as the second argument to old BSD-style signal handlers and as - * "siginfo_t->si_code" (second argument) to SA_SIGINFO signal handlers. - * - * XXX the FP state is not preserved across signal handlers. So signal - * handlers cannot afford to do FP unless they preserve the state or - * longjmp() out. Both preserving the state and longjmp()ing may be - * destroyed by IRQ13 bugs. Clearing FP exceptions is not an acceptable - * solution for signals other than SIGFPE. + * For XMM traps, the exceptions were never cleared. */ int -fputrap() +fputrap_x87(void) { + struct savefpu *pcb_save; u_short control, status; critical_enter(); @@ -503,19 +543,32 @@ fputrap() * wherever they are. */ if (PCPU_GET(fpcurthread) != curthread) { - control = GET_FPU_CW(curthread); - status = GET_FPU_SW(curthread); + pcb_save = curpcb->pcb_save; + control = pcb_save->sv_env.en_cw; + status = pcb_save->sv_env.en_sw; } else { fnstcw(&control); fnstsw(&status); } - if (PCPU_GET(fpcurthread) == curthread) - fnclex(); critical_exit(); return (fpetable[status & ((~control & 0x3f) | 0x40)]); } +int +fputrap_sse(void) +{ + u_int mxcsr; + + critical_enter(); + if (PCPU_GET(fpcurthread) != curthread) + mxcsr = curpcb->pcb_save->sv_env.en_mxcsr; + else + stmxcsr(&mxcsr); + critical_exit(); + return (fpetable[(mxcsr & (~mxcsr >> 7)) & 0x3f]); +} + /* * Implement device not available (DNA) exception * @@ -529,7 +582,6 @@ static int err_count = 0; void fpudna(void) { - struct pcb *pcb; critical_enter(); if (PCPU_GET(fpcurthread) == curthread) { @@ -551,26 +603,31 @@ fpudna(void) * Record new context early in case frstor causes a trap. */ PCPU_SET(fpcurthread, curthread); - pcb = PCPU_GET(curpcb); fpu_clean_state(); - if ((pcb->pcb_flags & PCB_FPUINITDONE) == 0) { + if ((curpcb->pcb_flags & PCB_FPUINITDONE) == 0) { /* * This is the first time this thread has used the FPU or * the PCB doesn't contain a clean FPU state. Explicitly * load an initial state. + * + * We prefer to restore the state from the actual save + * area in PCB instead of directly loading from + * fpu_initialstate, to ignite the XSAVEOPT + * tracking engine. */ - fpurestore(fpu_initialstate); - if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__) - fldcw(pcb->pcb_initial_fpucw); - if (PCB_USER_FPU(pcb)) - set_pcb_flags(pcb, + bcopy(fpu_initialstate, curpcb->pcb_save, cpu_max_ext_state_size); + fpurestore(curpcb->pcb_save); + if (curpcb->pcb_initial_fpucw != __INITIAL_FPUCW__) + fldcw(curpcb->pcb_initial_fpucw); + if (PCB_USER_FPU(curpcb)) + set_pcb_flags(curpcb, PCB_FPUINITDONE | PCB_USERFPUINITDONE); else - set_pcb_flags(pcb, PCB_FPUINITDONE); + set_pcb_flags(curpcb, PCB_FPUINITDONE); } else - fpurestore(pcb->pcb_save); + fpurestore(curpcb->pcb_save); critical_exit(); } @@ -596,6 +653,9 @@ int fpugetregs(struct thread *td) { struct pcb *pcb; + uint64_t *xstate_bv, bit; + char *sa; + int max_ext_n, i; pcb = td->td_pcb; if ((pcb->pcb_flags & PCB_USERFPUINITDONE) == 0) { @@ -613,6 +673,25 @@ fpugetregs(struct thread *td) return (_MC_FPOWNED_FPU); } else { critical_exit(); + if (use_xsaveopt) { + /* + * Handle partially saved state. + */ + sa = (char *)get_pcb_user_save_pcb(pcb); + xstate_bv = (uint64_t *)(sa + sizeof(struct savefpu) + + offsetof(struct xstate_hdr, xstate_bv)); + max_ext_n = flsl(xsave_mask); + for (i = 0; i < max_ext_n; i++) { + bit = 1 << i; + if ((*xstate_bv & bit) != 0) + continue; + bcopy((char *)fpu_initialstate + + xsave_area_desc[i].offset, + sa + xsave_area_desc[i].offset, + xsave_area_desc[i].size); + *xstate_bv |= bit; + } + } return (_MC_FPOWNED_PCB); } } @@ -882,16 +961,14 @@ fpu_kern_leave(struct thread *td, struct fpu_kern_ctx *ctx) int fpu_kern_thread(u_int flags) { - struct pcb *pcb; - pcb = PCPU_GET(curpcb); KASSERT((curthread->td_pflags & TDP_KTHREAD) != 0, ("Only kthread may use fpu_kern_thread")); - KASSERT(pcb->pcb_save == get_pcb_user_save_pcb(pcb), + KASSERT(curpcb->pcb_save == get_pcb_user_save_pcb(curpcb), ("mangled pcb_save")); - KASSERT(PCB_USER_FPU(pcb), ("recursive call")); + KASSERT(PCB_USER_FPU(curpcb), ("recursive call")); - set_pcb_flags(pcb, PCB_KERNFPU); + set_pcb_flags(curpcb, PCB_KERNFPU); return (0); } @@ -901,5 +978,5 @@ is_fpu_kern_thread(u_int flags) if ((curthread->td_pflags & TDP_KTHREAD) == 0) return (0); - return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNFPU) != 0); + return ((curpcb->pcb_flags & PCB_KERNFPU) != 0); } diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 8044fe5..cd3ebc5 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -996,7 +996,7 @@ exec_setregs(struct thread *td, struct image_params *imgp, u_long stack) pcb->pcb_dr3 = 0; pcb->pcb_dr6 = 0; pcb->pcb_dr7 = 0; - if (pcb == PCPU_GET(curpcb)) { + if (pcb == curpcb) { /* * Clear the debug registers on the running * CPU, otherwise they will end up affecting diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index e8272d906..c92f142 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -3502,13 +3502,13 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m, pv_entry_t pv; vm_paddr_t opa, pa; vm_page_t mpte, om; - boolean_t invlva; va = trunc_page(va); KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig")); KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS, ("pmap_enter: invalid to pmap_enter page table pages (va: 0x%lx)", va)); + KASSERT((prot & access) == access, ("pmap_enter: access not in prot")); KASSERT((m->oflags & VPO_UNMANAGED) != 0 || va < kmi.clean_sva || va >= kmi.clean_eva, ("pmap_enter: managed mapping within the clean submap")); @@ -3516,9 +3516,9 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m, VM_OBJECT_LOCKED(m->object), ("pmap_enter: page %p is not busy", m)); pa = VM_PAGE_TO_PHYS(m); - newpte = (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V); - if ((m->oflags & VPO_UNMANAGED) == 0) - newpte |= PG_MANAGED; + newpte = (pt_entry_t)(pa | PG_A | PG_V); + if ((access & VM_PROT_WRITE) != 0) + newpte |= PG_M; if ((prot & VM_PROT_WRITE) != 0) newpte |= PG_RW; if ((prot & VM_PROT_EXECUTE) == 0) @@ -3529,6 +3529,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m, newpte |= PG_U; if (pmap == kernel_pmap) newpte |= PG_G; + newpte |= pmap_cache_bits(m->md.pat_mode, 0); mpte = om = NULL; @@ -3540,109 +3541,111 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m, * In the case that a page table page is not * resident, we are creating it here. */ - if (va < VM_MAXUSER_ADDRESS) - mpte = pmap_allocpte(pmap, va, &lock); - +retry: pde = pmap_pde(pmap, va); - if (pde != NULL && (*pde & PG_V) != 0) { - if ((*pde & PG_PS) != 0) - panic("pmap_enter: attempted pmap_enter on 2MB page"); + if (pde != NULL && (*pde & PG_V) != 0 && ((*pde & PG_PS) == 0 || + pmap_demote_pde_locked(pmap, pde, va, &lock))) { pte = pmap_pde_to_pte(pde, va); + if (va < VM_MAXUSER_ADDRESS && mpte == NULL) { + mpte = PHYS_TO_VM_PAGE(*pde & PG_FRAME); + mpte->wire_count++; + } + } else if (va < VM_MAXUSER_ADDRESS) { + /* + * Here if the pte page isn't mapped, or if it has been + * deallocated. + */ + mpte = _pmap_allocpte(pmap, pmap_pde_pindex(va), &lock); + goto retry; } else panic("pmap_enter: invalid page directory va=%#lx", va); origpte = *pte; - opa = origpte & PG_FRAME; /* - * Mapping has not changed, must be protection or wiring change. + * Is the specified virtual address already mapped? */ - if (origpte && (opa == pa)) { + if ((origpte & PG_V) != 0) { /* * Wiring change, just update stats. We don't worry about * wiring PT pages as they remain resident as long as there * are valid mappings in them. Hence, if a user page is wired, * the PT page will be also. */ - if (wired && ((origpte & PG_W) == 0)) + if ((newpte & PG_W) != 0 && (origpte & PG_W) == 0) pmap->pm_stats.wired_count++; - else if (!wired && (origpte & PG_W)) + else if ((newpte & PG_W) == 0 && (origpte & PG_W) != 0) pmap->pm_stats.wired_count--; /* - * Remove extra pte reference + * Remove the extra PT page reference. */ - if (mpte) - mpte->wire_count--; - - if ((origpte & PG_MANAGED) != 0) - om = m; - goto validate; - } - - /* - * Mapping has changed, invalidate old range and fall through to - * handle validating new mapping. - */ - if (opa) { - if (origpte & PG_W) - pmap->pm_stats.wired_count--; - if ((origpte & PG_MANAGED) != 0) - om = PHYS_TO_VM_PAGE(opa); if (mpte != NULL) { mpte->wire_count--; KASSERT(mpte->wire_count > 0, ("pmap_enter: missing reference to page table page," " va: 0x%lx", va)); } - } else - pmap_resident_count_inc(pmap, 1); - /* - * Increment the counters. - */ - if (wired) - pmap->pm_stats.wired_count++; + /* + * Has the physical page changed? + */ + opa = origpte & PG_FRAME; + if (opa == pa) { + /* + * No, might be a protection or wiring change. + */ + if ((origpte & PG_MANAGED) != 0) { + newpte |= PG_MANAGED; + if ((newpte & PG_RW) != 0) + vm_page_aflag_set(m, PGA_WRITEABLE); + } + if (((origpte ^ newpte) & ~(PG_M | PG_A)) == 0) + goto unchanged; + goto validate; + } else { + /* + * Yes, fall through to validate the new mapping. + */ + if ((origpte & PG_MANAGED) != 0) + om = PHYS_TO_VM_PAGE(opa); + } + } else { + /* + * Increment the counters. + */ + if ((newpte & PG_W) != 0) + pmap->pm_stats.wired_count++; + pmap_resident_count_inc(pmap, 1); + } /* * Enter on the PV list if part of our managed memory. */ - if ((newpte & PG_MANAGED) != 0) { + if ((m->oflags & VPO_UNMANAGED) == 0) { + newpte |= PG_MANAGED; pv = get_pv_entry(pmap, &lock); pv->pv_va = va; CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa); TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list); + if ((newpte & PG_RW) != 0) + vm_page_aflag_set(m, PGA_WRITEABLE); } -validate: - /* - * Update the PTE only if the mapping or protection/wiring bits are - * different. + * Update the PTE. */ - if ((origpte & ~(PG_M | PG_A)) != newpte) { - newpte |= PG_A; - if ((access & VM_PROT_WRITE) != 0) - newpte |= PG_M; - if ((newpte & (PG_MANAGED | PG_RW)) == (PG_MANAGED | PG_RW)) - vm_page_aflag_set(m, PGA_WRITEABLE); - if (origpte & PG_V) { - invlva = FALSE; - origpte = pte_load_store(pte, newpte); - if (origpte & PG_A) { - if (origpte & PG_MANAGED) - vm_page_aflag_set(om, PGA_REFERENCED); - if (opa != pa || ((origpte & PG_NX) == 0 && - (newpte & PG_NX) != 0)) - invlva = TRUE; - } - if ((origpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) { - if ((origpte & PG_MANAGED) != 0) + if ((origpte & PG_V) != 0) { +validate: + origpte = pte_load_store(pte, newpte); + opa = origpte & PG_FRAME; + if (opa != pa) { + if ((origpte & PG_MANAGED) != 0) { + if ((origpte & (PG_M | PG_RW)) == (PG_M | + PG_RW)) vm_page_dirty(om); - if ((newpte & PG_RW) == 0) - invlva = TRUE; - } - if (opa != pa && (origpte & PG_MANAGED) != 0) { + if ((origpte & PG_A) != 0) + vm_page_aflag_set(om, PGA_REFERENCED); CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa); pmap_pvh_free(&om->md, pmap, va); if ((om->aflags & PGA_WRITEABLE) != 0 && @@ -3651,11 +3654,28 @@ validate: TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list))) vm_page_aflag_clear(om, PGA_WRITEABLE); } - if (invlva) - pmap_invalidate_page(pmap, va); - } else - pte_store(pte, newpte); - } + } else if ((newpte & PG_M) == 0 && (origpte & (PG_M | + PG_RW)) == (PG_M | PG_RW)) { + if ((origpte & PG_MANAGED) != 0) + vm_page_dirty(m); + + /* + * Although the PTE may still have PG_RW set, TLB + * invalidation may nonetheless be required because + * the PTE no longer has PG_M set. + */ + } else if ((origpte & PG_NX) != 0 || (newpte & PG_NX) == 0) { + /* + * This PTE change does not require TLB invalidation. + */ + goto unchanged; + } + if ((origpte & PG_A) != 0) + pmap_invalidate_page(pmap, va); + } else + pte_store(pte, newpte); + +unchanged: /* * If both the page table page and the reservation are fully diff --git a/sys/amd64/amd64/ptrace_machdep.c b/sys/amd64/amd64/ptrace_machdep.c index 8236321..9fa1917 100644 --- a/sys/amd64/amd64/ptrace_machdep.c +++ b/sys/amd64/amd64/ptrace_machdep.c @@ -50,6 +50,7 @@ cpu_ptrace_xstate(struct thread *td, int req, void *addr, int data) switch (req) { case PT_GETXSTATE: + fpugetregs(td); savefpu = (char *)(get_pcb_user_save_td(td) + 1); error = copyout(savefpu, addr, cpu_max_ext_state_size - sizeof(struct savefpu)); @@ -62,8 +63,10 @@ cpu_ptrace_xstate(struct thread *td, int req, void *addr, int data) } savefpu = malloc(data, M_TEMP, M_WAITOK); error = copyin(addr, savefpu, data); - if (error == 0) + if (error == 0) { + fpugetregs(td); error = fpusetxstate(td, savefpu, data); + } free(savefpu, M_TEMP); break; @@ -89,11 +92,13 @@ cpu32_ptrace(struct thread *td, int req, void *addr, int data) switch (req) { case PT_I386_GETXMMREGS: + fpugetregs(td); error = copyout(get_pcb_user_save_td(td), addr, sizeof(*fpstate)); break; case PT_I386_SETXMMREGS: + fpugetregs(td); fpstate = get_pcb_user_save_td(td); error = copyin(addr, fpstate, sizeof(*fpstate)); fpstate->sv_env.en_mxcsr &= cpu_mxcsr_mask; diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c index 75e15e0..d035a7e 100644 --- a/sys/amd64/amd64/trap.c +++ b/sys/amd64/amd64/trap.c @@ -328,7 +328,7 @@ trap(struct trapframe *frame) break; case T_ARITHTRAP: /* arithmetic trap */ - ucode = fputrap(); + ucode = fputrap_x87(); if (ucode == -1) goto userout; i = SIGFPE; @@ -442,7 +442,9 @@ trap(struct trapframe *frame) break; case T_XMMFLT: /* SIMD floating-point exception */ - ucode = 0; /* XXX */ + ucode = fputrap_sse(); + if (ucode == -1) + goto userout; i = SIGFPE; break; } @@ -518,9 +520,8 @@ trap(struct trapframe *frame) frame->tf_rip = (long)fsbase_load_fault; goto out; } - if (PCPU_GET(curpcb)->pcb_onfault != NULL) { - frame->tf_rip = - (long)PCPU_GET(curpcb)->pcb_onfault; + if (curpcb->pcb_onfault != NULL) { + frame->tf_rip = (long)curpcb->pcb_onfault; goto out; } break; @@ -706,7 +707,7 @@ trap_pfault(frame, usermode) * it normally, and panic immediately. */ if (!usermode && (td->td_intr_nesting_level != 0 || - PCPU_GET(curpcb)->pcb_onfault == NULL)) { + curpcb->pcb_onfault == NULL)) { trap_fatal(frame, eva); return (-1); } @@ -762,8 +763,8 @@ trap_pfault(frame, usermode) nogo: if (!usermode) { if (td->td_intr_nesting_level == 0 && - PCPU_GET(curpcb)->pcb_onfault != NULL) { - frame->tf_rip = (long)PCPU_GET(curpcb)->pcb_onfault; + curpcb->pcb_onfault != NULL) { + frame->tf_rip = (long)curpcb->pcb_onfault; return (0); } trap_fatal(frame, eva); diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c index 103fa0d..070d8c9 100644 --- a/sys/amd64/amd64/vm_machdep.c +++ b/sys/amd64/amd64/vm_machdep.c @@ -90,6 +90,10 @@ static u_int cpu_reset_proxyid; static volatile u_int cpu_reset_proxy_active; #endif +CTASSERT((struct thread **)OFFSETOF_CURTHREAD == + &((struct pcpu *)NULL)->pc_curthread); +CTASSERT((struct pcb **)OFFSETOF_CURPCB == &((struct pcpu *)NULL)->pc_curpcb); + struct savefpu * get_pcb_user_save_td(struct thread *td) { diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h index 94d4133..881fcd2 100644 --- a/sys/amd64/include/cpufunc.h +++ b/sys/amd64/include/cpufunc.h @@ -290,6 +290,13 @@ popcntq(u_long mask) } static __inline void +lfence(void) +{ + + __asm __volatile("lfence" : : : "memory"); +} + +static __inline void mfence(void) { diff --git a/sys/amd64/include/fpu.h b/sys/amd64/include/fpu.h index 98a016b..7d0f0ea 100644 --- a/sys/amd64/include/fpu.h +++ b/sys/amd64/include/fpu.h @@ -62,7 +62,8 @@ int fpusetregs(struct thread *td, struct savefpu *addr, char *xfpustate, size_t xfpustate_size); int fpusetxstate(struct thread *td, char *xfpustate, size_t xfpustate_size); -int fputrap(void); +int fputrap_sse(void); +int fputrap_x87(void); void fpuuserinited(struct thread *td); struct fpu_kern_ctx *fpu_kern_alloc_ctx(u_int flags); void fpu_kern_free_ctx(struct fpu_kern_ctx *ctx); diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index ff11ea1..ff322bb 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -57,6 +57,7 @@ extern u_int cpu_procinfo; extern u_int cpu_procinfo2; extern char cpu_vendor[]; extern u_int cpu_vendor_id; +extern char ctx_switch_xsave[]; extern char kstack[]; extern char sigcode[]; extern int szsigcode; diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index d07dbac..2188442 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -216,16 +216,36 @@ extern struct pcpu *pcpup; #define PCPU_PTR(member) __PCPU_PTR(pc_ ## member) #define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val) +#define OFFSETOF_CURTHREAD 0 +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnull-dereference" +#endif static __inline __pure2 struct thread * __curthread(void) { struct thread *td; - __asm("movq %%gs:0,%0" : "=r" (td)); + __asm("movq %%gs:%1,%0" : "=r" (td) + : "m" (*(char *)OFFSETOF_CURTHREAD)); return (td); } +#ifdef __clang__ +#pragma clang diagnostic pop +#endif #define curthread (__curthread()) +#define OFFSETOF_CURPCB 32 +static __inline __pure2 struct pcb * +__curpcb(void) +{ + struct pcb *pcb; + + __asm("movq %%gs:%1,%0" : "=r" (pcb) : "m" (*(char *)OFFSETOF_CURPCB)); + return (pcb); +} +#define curpcb (__curpcb()) + #define IS_BSP() (PCPU_GET(cpuid) == 0) #else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */ diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c index 04cf1bf..93643d5 100644 --- a/sys/arm/arm/nexus.c +++ b/sys/arm/arm/nexus.c @@ -117,12 +117,16 @@ 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; if ((rman_get_flags(res) & RF_SHAREABLE) == 0) flags |= INTR_EXCL; - arm_setup_irqhandler(device_get_nameunit(child), - filt, intr, arg, rman_get_start(res), flags, cookiep); + for (irq = rman_get_start(res); irq <= rman_get_end(res); irq++) { + arm_setup_irqhandler(device_get_nameunit(child), + filt, intr, arg, irq, flags, cookiep); + arm_unmask_irq(irq); + } return (0); } diff --git a/sys/arm/at91/at91.c b/sys/arm/at91/at91.c index da3aa72..deb3c38 100644 --- a/sys/arm/at91/at91.c +++ b/sys/arm/at91/at91.c @@ -242,15 +242,29 @@ at91_identify(driver_t *drv, device_t parent) BUS_ADD_CHILD(parent, 0, "atmelarm", 0); } +static void +at91_cpu_add_builtin_children(device_t dev, const struct cpu_devs *walker) +{ + int i; + + for (i = 1; walker->name; i++, walker++) { + at91_add_child(dev, i, walker->name, walker->unit, + walker->mem_base, walker->mem_len, walker->irq0, + walker->irq1, walker->irq2); + } +} + static int at91_attach(device_t dev) { struct at91_softc *sc = device_get_softc(dev); const struct pmap_devmap *pdevmap; + int i; at91_softc = sc; sc->sc_st = &at91_bs_tag; sc->sc_sh = AT91_BASE; + sc->sc_aic_sh = AT91_BASE + AT91_SYS_BASE; sc->dev = dev; sc->sc_irq_rman.rm_type = RMAN_ARRAY; @@ -269,13 +283,34 @@ at91_attach(device_t dev) panic("at91_attach: failed to set up memory rman"); } - /* - * Our device list will be added automatically by the cpu device - * e.g. at91rm9200.c when it is identified. To ensure that the - * CPU and PMC are attached first any other "identified" devices - * call BUS_ADD_CHILD(9) with an "order" of at least 2. + * Setup the interrupt table. + */ + if (soc_info.soc_data == NULL || soc_info.soc_data->soc_irq_prio == NULL) + panic("Interrupt priority table missing\n"); + for (i = 0; i < 32; i++) { + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + + i * 4, i); + /* Priority. */ + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, + soc_info.soc_data->soc_irq_prio[i]); + if (i < 8) + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, + 1); + } + + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); + /* No debug. */ + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); + /* Disable and clear all interrupts. */ + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); + bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); + + /* + * Add this device's children... */ + at91_cpu_add_builtin_children(dev, soc_info.soc_data->soc_children); + soc_info.soc_data->soc_clock_init(); bus_generic_probe(dev); bus_generic_attach(dev); @@ -362,7 +397,6 @@ at91_setup_intr(device_t dev, device_t child, struct resource *ires, int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep) { - struct at91_softc *sc = device_get_softc(dev); int error; if (rman_get_start(ires) == AT91_IRQ_SYSTEM && filt == NULL) @@ -372,8 +406,6 @@ at91_setup_intr(device_t dev, device_t child, if (error) return (error); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IECR, - 1 << rman_get_start(ires)); return (0); } diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c index 0bb79bd..2dc95e3 100644 --- a/sys/arm/at91/at91_machdep.c +++ b/sys/arm/at91/at91_machdep.c @@ -94,6 +94,7 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91_usartreg.h> #include <arm/at91/at91rm92reg.h> #include <arm/at91/at91sam9g20reg.h> +#include <arm/at91/at91sam9g45reg.h> /* Page table for mapping proc0 zero page */ #define KERNEL_PT_SYS 0 @@ -201,6 +202,17 @@ const struct pmap_devmap at91_devmap[] = { VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, + /* + * The next should be good for the 9G45. + */ + { + /* Internal Memory 1MB */ + AT91SAM9G45_OHCI_BASE, + AT91SAM9G45_OHCI_PA_BASE, + 0x00100000, + VM_PROT_READ|VM_PROT_WRITE, + PTE_NOCACHE, + }, { 0, 0, 0, 0, 0, } }; @@ -213,7 +225,7 @@ extern int memsize[]; long at91_ramsize(void) { - uint32_t cr, mr, *SDRAMC; + uint32_t cr, mdr, mr, *SDRAMC; int banks, rows, cols, bw; #ifdef LINUX_BOOT_ABI /* @@ -231,6 +243,24 @@ at91_ramsize(void) rows = ((cr & AT91RM92_SDRAMC_CR_NR_MASK) >> 2) + 11; cols = (cr & AT91RM92_SDRAMC_CR_NC_MASK) + 8; bw = (mr & AT91RM92_SDRAMC_MR_DBW_16) ? 1 : 2; + } else if (at91_cpu_is(AT91_T_SAM9G45)) { + SDRAMC = (uint32_t *)(AT91_BASE + AT91SAM9G45_DDRSDRC0_BASE); + cr = SDRAMC[AT91SAM9G45_DDRSDRC_CR / 4]; + mdr = SDRAMC[AT91SAM9G45_DDRSDRC_MDR / 4]; + banks = 0; + rows = ((cr & AT91SAM9G45_DDRSDRC_CR_NR_MASK) >> 2) + 11; + cols = (cr & AT91SAM9G45_DDRSDRC_CR_NC_MASK) + 8; + bw = (mdr & AT91SAM9G45_DDRSDRC_MDR_DBW_16) ? 1 : 2; + + /* Fix the calculation for DDR memory */ + mdr &= AT91SAM9G45_DDRSDRC_MDR_MASK; + if (mdr & AT91SAM9G45_DDRSDRC_MDR_LPDDR1 || + mdr & AT91SAM9G45_DDRSDRC_MDR_DDR2) { + /* The cols value is 1 higher for DDR */ + cols += 1; + /* DDR has 4 internal banks. */ + banks = 2; + } } else { /* * This should be good for the 9260, 9261, 9G20, 9G35 and 9X25 @@ -402,6 +432,7 @@ at91_try_id(uint32_t dbgu_base) * try to get the matching CPU support. */ soc_info.soc_data = at91_match_soc(soc_info.type, soc_info.subtype); + soc_info.dbgu_base = AT91_BASE + dbgu_base; return (1); } diff --git a/sys/arm/at91/at91_pio_rm9200.h b/sys/arm/at91/at91_pio_rm9200.h deleted file mode 100644 index 809262f..0000000 --- a/sys/arm/at91/at91_pio_rm9200.h +++ /dev/null @@ -1,208 +0,0 @@ -/* $FreeBSD$ */ - -#ifndef ARM_AT91_AT91_PIO_RM9200_H -#define ARM_AT91_AT91_PIO_RM9200_H - -#include <arm/at91/at91_pioreg.h> -/* - * These defines come from an atmel file that says specifically that it - * has no copyright. - */ - -//***************************************************************************** -// PIO DEFINITIONS FOR AT91RM9200 -//***************************************************************************** -#define AT91C_PA0_MISO (AT91C_PIO_PA0) // SPI Master In Slave -#define AT91C_PA0_PCK3 (AT91C_PIO_PA0) // PMC Programmable Clock Output 3 -#define AT91C_PA1_MOSI (AT91C_PIO_PA1) // SPI Master Out Slave -#define AT91C_PA1_PCK0 (AT91C_PIO_PA1) // PMC Programmable Clock Output 0 -#define AT91C_PA10_ETX1 (AT91C_PIO_PA10) // Ethernet MAC Transmit Data 1 -#define AT91C_PA10_MCDB1 (AT91C_PIO_PA10) // Multimedia Card B Data 1 -#define AT91C_PA11_ECRS_ECRSDV (AT91C_PIO_PA11) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid -#define AT91C_PA11_MCDB2 (AT91C_PIO_PA11) // Multimedia Card B Data 2 -#define AT91C_PA12_ERX0 (AT91C_PIO_PA12) // Ethernet MAC Receive Data 0 -#define AT91C_PA12_MCDB3 (AT91C_PIO_PA12) // Multimedia Card B Data 3 -#define AT91C_PA13_ERX1 (AT91C_PIO_PA13) // Ethernet MAC Receive Data 1 -#define AT91C_PA13_TCLK0 (AT91C_PIO_PA13) // Timer Counter 0 external clock input -#define AT91C_PA14_ERXER (AT91C_PIO_PA14) // Ethernet MAC Receive Error -#define AT91C_PA14_TCLK1 (AT91C_PIO_PA14) // Timer Counter 1 external clock input -#define AT91C_PA15_EMDC (AT91C_PIO_PA15) // Ethernet MAC Management Data Clock -#define AT91C_PA15_TCLK2 (AT91C_PIO_PA15) // Timer Counter 2 external clock input -#define AT91C_PA16_EMDIO (AT91C_PIO_PA16) // Ethernet MAC Management Data Input/Output -#define AT91C_PA16_IRQ6 (AT91C_PIO_PA16) // AIC Interrupt input 6 -#define AT91C_PA17_TXD0 (AT91C_PIO_PA17) // USART 0 Transmit Data -#define AT91C_PA17_TIOA0 (AT91C_PIO_PA17) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PA18_RXD0 (AT91C_PIO_PA18) // USART 0 Receive Data -#define AT91C_PA18_TIOB0 (AT91C_PIO_PA18) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PA19_SCK0 (AT91C_PIO_PA19) // USART 0 Serial Clock -#define AT91C_PA19_TIOA1 (AT91C_PIO_PA19) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PA2_SPCK (AT91C_PIO_PA2) // SPI Serial Clock -#define AT91C_PA2_IRQ4 (AT91C_PIO_PA2) // AIC Interrupt Input 4 -#define AT91C_PA20_CTS0 (AT91C_PIO_PA20) // USART 0 Clear To Send -#define AT91C_PA20_TIOB1 (AT91C_PIO_PA20) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PA21_RTS0 (AT91C_PIO_PA21) // Usart 0 Ready To Send -#define AT91C_PA21_TIOA2 (AT91C_PIO_PA21) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PA22_RXD2 (AT91C_PIO_PA22) // USART 2 Receive Data -#define AT91C_PA22_TIOB2 (AT91C_PIO_PA22) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PA23_TXD2 (AT91C_PIO_PA23) // USART 2 Transmit Data -#define AT91C_PA23_IRQ3 (AT91C_PIO_PA23) // Interrupt input 3 -#define AT91C_PA24_SCK2 (AT91C_PIO_PA24) // USART2 Serial Clock -#define AT91C_PA24_PCK1 (AT91C_PIO_PA24) // PMC Programmable Clock Output 1 -#define AT91C_PA25_TWD (AT91C_PIO_PA25) // TWI Two-wire Serial Data -#define AT91C_PA25_IRQ2 (AT91C_PIO_PA25) // Interrupt input 2 -#define AT91C_PA26_TWCK (AT91C_PIO_PA26) // TWI Two-wire Serial Clock -#define AT91C_PA26_IRQ1 (AT91C_PIO_PA26) // Interrupt input 1 -#define AT91C_PA27_MCCK (AT91C_PIO_PA27) // Multimedia Card Clock -#define AT91C_PA27_TCLK3 (AT91C_PIO_PA27) // Timer Counter 3 External Clock Input -#define AT91C_PA28_MCCDA (AT91C_PIO_PA28) // Multimedia Card A Command -#define AT91C_PA28_TCLK4 (AT91C_PIO_PA28) // Timer Counter 4 external Clock Input -#define AT91C_PA29_MCDA0 (AT91C_PIO_PA29) // Multimedia Card A Data 0 -#define AT91C_PA29_TCLK5 (AT91C_PIO_PA29) // Timer Counter 5 external clock input -#define AT91C_PA3_NPCS0 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 0 -#define AT91C_PA3_IRQ5 (AT91C_PIO_PA3) // AIC Interrupt Input 5 -#define AT91C_PA30_DRXD (AT91C_PIO_PA30) // DBGU Debug Receive Data -#define AT91C_PA30_CTS2 (AT91C_PIO_PA30) // Usart 2 Clear To Send -#define AT91C_PA31_DTXD (AT91C_PIO_PA31) // DBGU Debug Transmit Data -#define AT91C_PA31_RTS2 (AT91C_PIO_PA31) // USART 2 Ready To Send -#define AT91C_PA4_NPCS1 (AT91C_PIO_PA4) // SPI Peripheral Chip Select 1 -#define AT91C_PA4_PCK1 (AT91C_PIO_PA4) // PMC Programmable Clock Output 1 -#define AT91C_PA5_NPCS2 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 2 -#define AT91C_PA5_TXD3 (AT91C_PIO_PA5) // USART 3 Transmit Data -#define AT91C_PA6_NPCS3 (AT91C_PIO_PA6) // SPI Peripheral Chip Select 3 -#define AT91C_PA6_RXD3 (AT91C_PIO_PA6) // USART 3 Receive Data -#define AT91C_PA7_ETXCK_EREFCK (AT91C_PIO_PA7) // Ethernet MAC Transmit Clock/Reference Clock -#define AT91C_PA7_PCK2 (AT91C_PIO_PA7) // PMC Programmable Clock 2 -#define AT91C_PA8_ETXEN (AT91C_PIO_PA8) // Ethernet MAC Transmit Enable -#define AT91C_PA8_MCCDB (AT91C_PIO_PA8) // Multimedia Card B Command -#define AT91C_PA9_ETX0 (AT91C_PIO_PA9) // Ethernet MAC Transmit Data 0 -#define AT91C_PA9_MCDB0 (AT91C_PIO_PA9) // Multimedia Card B Data 0 -#define AT91C_PB0_TF0 (AT91C_PIO_PB0) // SSC Transmit Frame Sync 0 -#define AT91C_PB0_TIOB3 (AT91C_PIO_PB0) // Timer Counter 3 Multipurpose Timer I/O Pin B -#define AT91C_PB1_TK0 (AT91C_PIO_PB1) // SSC Transmit Clock 0 -#define AT91C_PB1_CTS3 (AT91C_PIO_PB1) // USART 3 Clear To Send -#define AT91C_PB10_RK1 (AT91C_PIO_PB10) // SSC Receive Clock 1 -#define AT91C_PB10_TIOA5 (AT91C_PIO_PB10) // Timer Counter 5 Multipurpose Timer I/O Pin A -#define AT91C_PB11_RF1 (AT91C_PIO_PB11) // SSC Receive Frame Sync 1 -#define AT91C_PB11_TIOB5 (AT91C_PIO_PB11) // Timer Counter 5 Multipurpose Timer I/O Pin B -#define AT91C_PB12_TF2 (AT91C_PIO_PB12) // SSC Transmit Frame Sync 2 -#define AT91C_PB12_ETX2 (AT91C_PIO_PB12) // Ethernet MAC Transmit Data 2 -#define AT91C_PB13_TK2 (AT91C_PIO_PB13) // SSC Transmit Clock 2 -#define AT91C_PB13_ETX3 (AT91C_PIO_PB13) // Ethernet MAC Transmit Data 3 -#define AT91C_PB14_TD2 (AT91C_PIO_PB14) // SSC Transmit Data 2 -#define AT91C_PB14_ETXER (AT91C_PIO_PB14) // Ethernet MAC Transmikt Coding Error -#define AT91C_PB15_RD2 (AT91C_PIO_PB15) // SSC Receive Data 2 -#define AT91C_PB15_ERX2 (AT91C_PIO_PB15) // Ethernet MAC Receive Data 2 -#define AT91C_PB16_RK2 (AT91C_PIO_PB16) // SSC Receive Clock 2 -#define AT91C_PB16_ERX3 (AT91C_PIO_PB16) // Ethernet MAC Receive Data 3 -#define AT91C_PB17_RF2 (AT91C_PIO_PB17) // SSC Receive Frame Sync 2 -#define AT91C_PB17_ERXDV (AT91C_PIO_PB17) // Ethernet MAC Receive Data Valid -#define AT91C_PB18_RI1 (AT91C_PIO_PB18) // USART 1 Ring Indicator -#define AT91C_PB18_ECOL (AT91C_PIO_PB18) // Ethernet MAC Collision Detected -#define AT91C_PB19_DTR1 (AT91C_PIO_PB19) // USART 1 Data Terminal ready -#define AT91C_PB19_ERXCK (AT91C_PIO_PB19) // Ethernet MAC Receive Clock -#define AT91C_PB2_TD0 (AT91C_PIO_PB2) // SSC Transmit data -#define AT91C_PB2_SCK3 (AT91C_PIO_PB2) // USART 3 Serial Clock -#define AT91C_PB20_TXD1 (AT91C_PIO_PB20) // USART 1 Transmit Data -#define AT91C_PB21_RXD1 (AT91C_PIO_PB21) // USART 1 Receive Data -#define AT91C_PB22_SCK1 (AT91C_PIO_PB22) // USART1 Serial Clock -#define AT91C_PB23_DCD1 (AT91C_PIO_PB23) // USART 1 Data Carrier Detect -#define AT91C_PB24_CTS1 (AT91C_PIO_PB24) // USART 1 Clear To Send -#define AT91C_PB25_DSR1 (AT91C_PIO_PB25) // USART 1 Data Set ready -#define AT91C_PB25_EF100 (AT91C_PIO_PB25) // Ethernet MAC Force 100 Mbits/sec -#define AT91C_PB26_RTS1 (AT91C_PIO_PB26) // Usart 0 Ready To Send -#define AT91C_PB27_PCK0 (AT91C_PIO_PB27) // PMC Programmable Clock Output 0 -#define AT91C_PB28_FIQ (AT91C_PIO_PB28) // AIC Fast Interrupt Input -#define AT91C_PB29_IRQ0 (AT91C_PIO_PB29) // Interrupt input 0 -#define AT91C_PB3_RD0 (AT91C_PIO_PB3) // SSC Receive Data -#define AT91C_PB3_MCDA1 (AT91C_PIO_PB3) // Multimedia Card A Data 1 -#define AT91C_PB4_RK0 (AT91C_PIO_PB4) // SSC Receive Clock -#define AT91C_PB4_MCDA2 (AT91C_PIO_PB4) // Multimedia Card A Data 2 -#define AT91C_PB5_RF0 (AT91C_PIO_PB5) // SSC Receive Frame Sync 0 -#define AT91C_PB5_MCDA3 (AT91C_PIO_PB5) // Multimedia Card A Data 3 -#define AT91C_PB6_TF1 (AT91C_PIO_PB6) // SSC Transmit Frame Sync 1 -#define AT91C_PB6_TIOA3 (AT91C_PIO_PB6) // Timer Counter 4 Multipurpose Timer I/O Pin A -#define AT91C_PB7_TK1 (AT91C_PIO_PB7) // SSC Transmit Clock 1 -#define AT91C_PB7_TIOB3 (AT91C_PIO_PB7) // Timer Counter 3 Multipurpose Timer I/O Pin B -#define AT91C_PB8_TD1 (AT91C_PIO_PB8) // SSC Transmit Data 1 -#define AT91C_PB8_TIOA4 (AT91C_PIO_PB8) // Timer Counter 4 Multipurpose Timer I/O Pin A -#define AT91C_PB9_RD1 (AT91C_PIO_PB9) // SSC Receive Data 1 -#define AT91C_PB9_TIOB4 (AT91C_PIO_PB9) // Timer Counter 4 Multipurpose Timer I/O Pin B -#define AT91C_PC0_BFCK (AT91C_PIO_PC0) // Burst Flash Clock -#define AT91C_PC1_BFRDY_SMOE (AT91C_PIO_PC1) // Burst Flash Ready -#define AT91C_PC10_NCS4_CFCS (AT91C_PIO_PC10) // Compact Flash Chip Select -#define AT91C_PC11_NCS5_CFCE1 (AT91C_PIO_PC11) // Chip Select 5 / Compact Flash Chip Enable 1 -#define AT91C_PC12_NCS6_CFCE2 (AT91C_PIO_PC12) // Chip Select 6 / Compact Flash Chip Enable 2 -#define AT91C_PC13_NCS7 (AT91C_PIO_PC13) // Chip Select 7 -#define AT91C_PC16_D16 (AT91C_PIO_PC16) // Data Bus [16] -#define AT91C_PC17_D17 (AT91C_PIO_PC17) // Data Bus [17] -#define AT91C_PC18_D18 (AT91C_PIO_PC18) // Data Bus [18] -#define AT91C_PC19_D19 (AT91C_PIO_PC19) // Data Bus [19] -#define AT91C_PC2_BFAVD (AT91C_PIO_PC2)u // Burst Flash Address Valid -#define AT91C_PC20_D20 (AT91C_PIO_PC20) // Data Bus [20] -#define AT91C_PC21_D21 (AT91C_PIO_PC21) // Data Bus [21] -#define AT91C_PC22_D22 (AT91C_PIO_PC22) // Data Bus [22] -#define AT91C_PC23_D23 (AT91C_PIO_PC23) // Data Bus [23] -#define AT91C_PC24_D24 (AT91C_PIO_PC24) // Data Bus [24] -#define AT91C_PC25_D25 (AT91C_PIO_PC25) // Data Bus [25] -#define AT91C_PC26_D26 (AT91C_PIO_PC26) // Data Bus [26] -#define AT91C_PC27_D27 (AT91C_PIO_PC27) // Data Bus [27] -#define AT91C_PC28_D28 (AT91C_PIO_PC28) // Data Bus [28] -#define AT91C_PC29_D29 (AT91C_PIO_PC29) // Data Bus [29] -#define AT91C_PC3_BFBAA_SMWE (AT91C_PIO_PC3) // Burst Flash Address Advance / SmartMedia Write Enable -#define AT91C_PC30_D30 (AT91C_PIO_PC30) // Data Bus [30] -#define AT91C_PC31_D31 (AT91C_PIO_PC31) // Data Bus [31] -#define AT91C_PC4_BFOE (AT91C_PIO_PC4) // Burst Flash Output Enable -#define AT91C_PC5_BFWE (AT91C_PIO_PC5) // Burst Flash Write Enable -#define AT91C_PC6_NWAIT (AT91C_PIO_PC6) // NWAIT -#define AT91C_PC7_A23 (AT91C_PIO_PC7) // Address Bus[23] -#define AT91C_PC8_A24 (AT91C_PIO_PC8) // Address Bus[24] -#define AT91C_PC9_A25_CFRNW (AT91C_PIO_PC9) // Address Bus[25] / Compact Flash Read Not Write -#define AT91C_PD0_ETX0 (AT91C_PIO_PD0) // Ethernet MAC Transmit Data 0 -#define AT91C_PD1_ETX1 (AT91C_PIO_PD1) // Ethernet MAC Transmit Data 1 -#define AT91C_PD10_PCK3 (AT91C_PIO_PD10) // PMC Programmable Clock Output 3 -#define AT91C_PD10_TPS1 (AT91C_PIO_PD10) // ETM ARM9 pipeline status 1 -#define AT91C_PD11_ (AT91C_PIO_PD11) // -#define AT91C_PD11_TPS2 (AT91C_PIO_PD11) // ETM ARM9 pipeline status 2 -#define AT91C_PD12_ (AT91C_PIO_PD12) // -#define AT91C_PD12_TPK0 (AT91C_PIO_PD12) // ETM Trace Packet 0 -#define AT91C_PD13_ (AT91C_PIO_PD13) // -#define AT91C_PD13_TPK1 (AT91C_PIO_PD13) // ETM Trace Packet 1 -#define AT91C_PD14_ (AT91C_PIO_PD14) // -#define AT91C_PD14_TPK2 (AT91C_PIO_PD14) // ETM Trace Packet 2 -#define AT91C_PD15_TD0 (AT91C_PIO_PD15) // SSC Transmit data -#define AT91C_PD15_TPK3 (AT91C_PIO_PD15) // ETM Trace Packet 3 -#define AT91C_PD16_TD1 (AT91C_PIO_PD16) // SSC Transmit Data 1 -#define AT91C_PD16_TPK4 (AT91C_PIO_PD16) // ETM Trace Packet 4 -#define AT91C_PD17_TD2 (AT91C_PIO_PD17) // SSC Transmit Data 2 -#define AT91C_PD17_TPK5 (AT91C_PIO_PD17) // ETM Trace Packet 5 -#define AT91C_PD18_NPCS1 (AT91C_PIO_PD18) // SPI Peripheral Chip Select 1 -#define AT91C_PD18_TPK6 (AT91C_PIO_PD18) // ETM Trace Packet 6 -#define AT91C_PD19_NPCS2 (AT91C_PIO_PD19) // SPI Peripheral Chip Select 2 -#define AT91C_PD19_TPK7 (AT91C_PIO_PD19) // ETM Trace Packet 7 -#define AT91C_PD2_ETX2 (AT91C_PIO_PD2) // Ethernet MAC Transmit Data 2 -#define AT91C_PD20_NPCS3 (AT91C_PIO_PD20) // SPI Peripheral Chip Select 3 -#define AT91C_PD20_TPK8 (AT91C_PIO_PD20) // ETM Trace Packet 8 -#define AT91C_PD21_RTS0 (AT91C_PIO_PD21) // Usart 0 Ready To Send -#define AT91C_PD21_TPK9 (AT91C_PIO_PD21) // ETM Trace Packet 9 -#define AT91C_PD22_RTS1 (AT91C_PIO_PD22) // Usart 0 Ready To Send -#define AT91C_PD22_TPK10 (AT91C_PIO_PD22) // ETM Trace Packet 10 -#define AT91C_PD23_RTS2 (AT91C_PIO_PD23) // USART 2 Ready To Send -#define AT91C_PD23_TPK11 (AT91C_PIO_PD23) // ETM Trace Packet 11 -#define AT91C_PD24_RTS3 (AT91C_PIO_PD24) // USART 3 Ready To Send -#define AT91C_PD24_TPK12 (AT91C_PIO_PD24) // ETM Trace Packet 12 -#define AT91C_PD25_DTR1 (AT91C_PIO_PD25) // USART 1 Data Terminal ready -#define AT91C_PD25_TPK13 (AT91C_PIO_PD25) // ETM Trace Packet 13 -#define AT91C_PD26_TPK14 (AT91C_PIO_PD26) // ETM Trace Packet 14 -#define AT91C_PD27_TPK15 (AT91C_PIO_PD27) // ETM Trace Packet 15 -#define AT91C_PD3_ETX3 (AT91C_PIO_PD3) // Ethernet MAC Transmit Data 3 -#define AT91C_PD4_ETXEN (AT91C_PIO_PD4) // Ethernet MAC Transmit Enable -#define AT91C_PD5_ETXER (AT91C_PIO_PD5) // Ethernet MAC Transmikt Coding Error -#define AT91C_PD6_DTXD (AT91C_PIO_PD6) // DBGU Debug Transmit Data -#define AT91C_PD7_PCK0 (AT91C_PIO_PD7) // PMC Programmable Clock Output 0 -#define AT91C_PD7_TSYNC (AT91C_PIO_PD7) // ETM Synchronization signal -#define AT91C_PD8_PCK1 (AT91C_PIO_PD8) // PMC Programmable Clock Output 1 -#define AT91C_PD8_TCLK (AT91C_PIO_PD8) // ETM Trace Clock signal -#define AT91C_PD9_PCK2 (AT91C_PIO_PD9) // PMC Programmable Clock 2 -#define AT91C_PD9_TPS0 (AT91C_PIO_PD9) // ETM ARM9 pipeline status 0 - -#endif /* ARM_AT91_AT91_PIO_RM9200_H */ diff --git a/sys/arm/at91/at91_pio_sam9g45.h b/sys/arm/at91/at91_pio_sam9g45.h new file mode 100644 index 0000000..6045536 --- /dev/null +++ b/sys/arm/at91/at91_pio_sam9g45.h @@ -0,0 +1,272 @@ +/*- + * ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support - ROUSSET - + * ---------------------------------------------------------------------------- + * Copyright (c) 2009, Atmel Corporation + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaimer below. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL 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. + * ---------------------------------------------------------------------------- + * + * From AT91LIB version 1.9 boards/at91sam9g45-ek/at91sam9g45/AT91SAM9G45.h + */ + +/* $FreeBSD$ */ + +#ifndef ARM_AT91_AT91_PIO_SAM9G45_H +#define ARM_AT91_AT91_PIO_SAM9G45_H + +#include <arm/at91/at91_pioreg.h> + +// ***************************************************************************** +// PIO DEFINITIONS FOR AT91SAM9G45 +// ***************************************************************************** +#define AT91C_PA0_MCI0_CK (AT91C_PIO_PA0) // +#define AT91C_PA0_TCLK3 (AT91C_PIO_PA0) // +#define AT91C_PA1_MCI0_CDA (AT91C_PIO_PA1) // +#define AT91C_PA1_TIOA3 (AT91C_PIO_PA1) // +#define AT91C_PA10_ETX0 (AT91C_PIO_PA10) // Ethernet MAC Transmit Data 0 +#define AT91C_PA11_ETX1 (AT91C_PIO_PA11) // Ethernet MAC Transmit Data 1 +#define AT91C_PA12_ERX0 (AT91C_PIO_PA12) // Ethernet MAC Receive Data 0 +#define AT91C_PA13_ERX1 (AT91C_PIO_PA13) // Ethernet MAC Receive Data 1 +#define AT91C_PA14_ETXEN (AT91C_PIO_PA14) // Ethernet MAC Transmit Enable +#define AT91C_PA15_ERXDV (AT91C_PIO_PA15) // Ethernet MAC Receive Data Valid +#define AT91C_PA16_ERXER (AT91C_PIO_PA16) // Ethernet MAC Receive Error +#define AT91C_PA17_ETXCK_EREFCK (AT91C_PIO_PA17) // Ethernet MAC Transmit Clock/Reference Clock +#define AT91C_PA18_EMDC (AT91C_PIO_PA18) // Ethernet MAC Management Data Clock +#define AT91C_PA19_EMDIO (AT91C_PIO_PA19) // Ethernet MAC Management Data Input/Output +#define AT91C_PA2_MCI0_DA0 (AT91C_PIO_PA2) // +#define AT91C_PA2_TIOB3 (AT91C_PIO_PA2) // +#define AT91C_PA20_TWD0 (AT91C_PIO_PA20) // TWI Two-wire Serial Data +#define AT91C_PA21_TWCK0 (AT91C_PIO_PA21) // TWI Two-wire Serial Clock +#define AT91C_PA22_MCI1_CDA (AT91C_PIO_PA22) // +#define AT91C_PA22_SCK3 (AT91C_PIO_PA22) // +#define AT91C_PA23_MCI1_DA0 (AT91C_PIO_PA23) // +#define AT91C_PA23_RTS3 (AT91C_PIO_PA23) // +#define AT91C_PA24_MCI1_DA1 (AT91C_PIO_PA24) // +#define AT91C_PA24_CTS3 (AT91C_PIO_PA24) // +#define AT91C_PA25_MCI1_DA2 (AT91C_PIO_PA25) // +#define AT91C_PA25_PWM3 (AT91C_PIO_PA25) // +#define AT91C_PA26_MCI1_DA3 (AT91C_PIO_PA26) // +#define AT91C_PA26_TIOB2 (AT91C_PIO_PA26) // +#define AT91C_PA27_MCI1_DA4 (AT91C_PIO_PA27) // +#define AT91C_PA27_ETXER (AT91C_PIO_PA27) // Ethernet MAC Transmikt Coding Error +#define AT91C_PA28_MCI1_DA5 (AT91C_PIO_PA28) // +#define AT91C_PA28_ERXCK (AT91C_PIO_PA28) // Ethernet MAC Receive Clock +#define AT91C_PA29_MCI1_DA6 (AT91C_PIO_PA29) // +#define AT91C_PA29_ECRS (AT91C_PIO_PA29) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid +#define AT91C_PA3_MCI0_DA1 (AT91C_PIO_PA3) // +#define AT91C_PA3_TCLK4 (AT91C_PIO_PA3) // +#define AT91C_PA30_MCI1_DA7 (AT91C_PIO_PA30) // +#define AT91C_PA30_ECOL (AT91C_PIO_PA30) // Ethernet MAC Collision Detected +#define AT91C_PA31_MCI1_CK (AT91C_PIO_PA31) // +#define AT91C_PA31_PCK0 (AT91C_PIO_PA31) // +#define AT91C_PA4_MCI0_DA2 (AT91C_PIO_PA4) // +#define AT91C_PA4_TIOA4 (AT91C_PIO_PA4) // +#define AT91C_PA5_MCI0_DA3 (AT91C_PIO_PA5) // +#define AT91C_PA5_TIOB4 (AT91C_PIO_PA5) // +#define AT91C_PA6_MCI0_DA4 (AT91C_PIO_PA6) // +#define AT91C_PA6_ETX2 (AT91C_PIO_PA6) // Ethernet MAC Transmit Data 2 +#define AT91C_PA7_MCI0_DA5 (AT91C_PIO_PA7) // +#define AT91C_PA7_ETX3 (AT91C_PIO_PA7) // Ethernet MAC Transmit Data 3 +#define AT91C_PA8_MCI0_DA6 (AT91C_PIO_PA8) // +#define AT91C_PA8_ERX2 (AT91C_PIO_PA8) // Ethernet MAC Receive Data 2 +#define AT91C_PA9_MCI0_DA7 (AT91C_PIO_PA9) // +#define AT91C_PA9_ERX3 (AT91C_PIO_PA9) // Ethernet MAC Receive Data 3 +#define AT91C_PB0_SPI0_MISO (AT91C_PIO_PB0) // SPI 0 Master In Slave +#define AT91C_PB1_SPI0_MOSI (AT91C_PIO_PB1) // SPI 0 Master Out Slave +#define AT91C_PB10_TWD1 (AT91C_PIO_PB10) // +#define AT91C_PB10_ISI_D10 (AT91C_PIO_PB10) // +#define AT91C_PB11_TWCK1 (AT91C_PIO_PB11) // +#define AT91C_PB11_ISI_D11 (AT91C_PIO_PB11) // +#define AT91C_PB12_DRXD (AT91C_PIO_PB12) // +#define AT91C_PB13_DTXD (AT91C_PIO_PB13) // +#define AT91C_PB14_SPI1_MISO (AT91C_PIO_PB14) // +#define AT91C_PB15_SPI1_MOSI (AT91C_PIO_PB15) // +#define AT91C_PB15_CTS0 (AT91C_PIO_PB15) // +#define AT91C_PB16_SPI1_SPCK (AT91C_PIO_PB16) // +#define AT91C_PB16_SCK0 (AT91C_PIO_PB16) // +#define AT91C_PB17_SPI1_NPCS0 (AT91C_PIO_PB17) // +#define AT91C_PB17_RTS0 (AT91C_PIO_PB17) // +#define AT91C_PB18_RXD0 (AT91C_PIO_PB18) // +#define AT91C_PB18_SPI0_NPCS1 (AT91C_PIO_PB18) // +#define AT91C_PB19_TXD0 (AT91C_PIO_PB19) // +#define AT91C_PB19_SPI0_NPCS2 (AT91C_PIO_PB19) // +#define AT91C_PB2_SPI0_SPCK (AT91C_PIO_PB2) // SPI 0 Serial Clock +#define AT91C_PB20_ISI_D0 (AT91C_PIO_PB20) // +#define AT91C_PB21_ISI_D1 (AT91C_PIO_PB21) // +#define AT91C_PB22_ISI_D2 (AT91C_PIO_PB22) // +#define AT91C_PB23_ISI_D3 (AT91C_PIO_PB23) // +#define AT91C_PB24_ISI_D4 (AT91C_PIO_PB24) // +#define AT91C_PB25_ISI_D5 (AT91C_PIO_PB25) // +#define AT91C_PB26_ISI_D6 (AT91C_PIO_PB26) // +#define AT91C_PB27_ISI_D7 (AT91C_PIO_PB27) // +#define AT91C_PB28_ISI_PCK (AT91C_PIO_PB28) // +#define AT91C_PB29_ISI_VSYNC (AT91C_PIO_PB29) // +#define AT91C_PB3_SPI0_NPCS0 (AT91C_PIO_PB3) // SPI 0 Peripheral Chip Select 0 +#define AT91C_PB30_ISI_HSYNC (AT91C_PIO_PB30) // +#define AT91C_PB31_ (AT91C_PIO_PB31) // +#define AT91C_PB31_PCK1 (AT91C_PIO_PB31) // +#define AT91C_PB4_TXD1 (AT91C_PIO_PB4) // USART 1 Transmit Data +#define AT91C_PB5_RXD1 (AT91C_PIO_PB5) // USART 1 Receive Data +#define AT91C_PB6_TXD2 (AT91C_PIO_PB6) // USART 2 Transmit Data +#define AT91C_PB7_RXD2 (AT91C_PIO_PB7) // USART 2 Receive Data +#define AT91C_PB8_TXD3 (AT91C_PIO_PB8) // USART 3 Transmit Data +#define AT91C_PB8_ISI_D8 (AT91C_PIO_PB8) // +#define AT91C_PB9_RXD3 (AT91C_PIO_PB9) // USART 3 Receive Data +#define AT91C_PB9_ISI_D9 (AT91C_PIO_PB9) // +#define AT91C_PC0_DQM2 (AT91C_PIO_PC0) // DQM2 +#define AT91C_PC1_DQM3 (AT91C_PIO_PC1) // DQM3 +#define AT91C_PC10_NCS4_CFCS0 (AT91C_PIO_PC10) // +#define AT91C_PC10_TCLK2 (AT91C_PIO_PC10) // +#define AT91C_PC11_NCS5_CFCS1 (AT91C_PIO_PC11) // +#define AT91C_PC11_CTS2 (AT91C_PIO_PC11) // +#define AT91C_PC12_A25_CFRNW (AT91C_PIO_PC12) // +#define AT91C_PC13_NCS2 (AT91C_PIO_PC13) // +#define AT91C_PC14_NCS3_NANDCS (AT91C_PIO_PC14) // +#define AT91C_PC15_NWAIT (AT91C_PIO_PC15) // +#define AT91C_PC16_D16 (AT91C_PIO_PC16) // +#define AT91C_PC17_D17 (AT91C_PIO_PC17) // +#define AT91C_PC18_D18 (AT91C_PIO_PC18) // +#define AT91C_PC19_D19 (AT91C_PIO_PC19) // +#define AT91C_PC2_A19 (AT91C_PIO_PC2) // +#define AT91C_PC20_D20 (AT91C_PIO_PC20) // +#define AT91C_PC21_D21 (AT91C_PIO_PC21) // +#define AT91C_PC22_D22 (AT91C_PIO_PC22) // +#define AT91C_PC23_D23 (AT91C_PIO_PC23) // +#define AT91C_PC24_D24 (AT91C_PIO_PC24) // +#define AT91C_PC25_D25 (AT91C_PIO_PC25) // +#define AT91C_PC26_D26 (AT91C_PIO_PC26) // +#define AT91C_PC27_D27 (AT91C_PIO_PC27) // +#define AT91C_PC28_D28 (AT91C_PIO_PC28) // +#define AT91C_PC29_D29 (AT91C_PIO_PC29) // +#define AT91C_PC3_A20 (AT91C_PIO_PC3) // +#define AT91C_PC30_D30 (AT91C_PIO_PC30) // +#define AT91C_PC31_D31 (AT91C_PIO_PC31) // +#define AT91C_PC4_A21_NANDALE (AT91C_PIO_PC4) // +#define AT91C_PC5_A22_NANDCLE (AT91C_PIO_PC5) // +#define AT91C_PC6_A23 (AT91C_PIO_PC6) // +#define AT91C_PC7_A24 (AT91C_PIO_PC7) // +#define AT91C_PC8_CFCE1 (AT91C_PIO_PC8) // +#define AT91C_PC9_CFCE2 (AT91C_PIO_PC9) // +#define AT91C_PC9_RTS2 (AT91C_PIO_PC9) // +#define AT91C_PD0_TK0 (AT91C_PIO_PD0) // +#define AT91C_PD0_PWM3 (AT91C_PIO_PD0) // +#define AT91C_PD1_TF0 (AT91C_PIO_PD1) // +#define AT91C_PD10_TD1 (AT91C_PIO_PD10) // +#define AT91C_PD11_RD1 (AT91C_PIO_PD11) // +#define AT91C_PD12_TK1 (AT91C_PIO_PD12) // +#define AT91C_PD12_PCK0 (AT91C_PIO_PD12) // +#define AT91C_PD13_RK1 (AT91C_PIO_PD13) // +#define AT91C_PD14_TF1 (AT91C_PIO_PD14) // +#define AT91C_PD15_RF1 (AT91C_PIO_PD15) // +#define AT91C_PD16_RTS1 (AT91C_PIO_PD16) // +#define AT91C_PD17_CTS1 (AT91C_PIO_PD17) // +#define AT91C_PD18_SPI1_NPCS2 (AT91C_PIO_PD18) // +#define AT91C_PD18_IRQ (AT91C_PIO_PD18) // +#define AT91C_PD19_SPI1_NPCS3 (AT91C_PIO_PD19) // +#define AT91C_PD19_FIQ (AT91C_PIO_PD19) // +#define AT91C_PD2_TD0 (AT91C_PIO_PD2) // +#define AT91C_PD20_TIOA0 (AT91C_PIO_PD20) // +#define AT91C_PD21_TIOA1 (AT91C_PIO_PD21) // +#define AT91C_PD22_TIOA2 (AT91C_PIO_PD22) // +#define AT91C_PD23_TCLK0 (AT91C_PIO_PD23) // +#define AT91C_PD24_SPI0_NPCS1 (AT91C_PIO_PD24) // +#define AT91C_PD24_PWM0 (AT91C_PIO_PD24) // +#define AT91C_PD25_SPI0_NPCS2 (AT91C_PIO_PD25) // +#define AT91C_PD25_PWM1 (AT91C_PIO_PD25) // +#define AT91C_PD26_PCK0 (AT91C_PIO_PD26) // +#define AT91C_PD26_PWM2 (AT91C_PIO_PD26) // +#define AT91C_PD27_PCK1 (AT91C_PIO_PD27) // +#define AT91C_PD27_SPI0_NPCS3 (AT91C_PIO_PD27) // +#define AT91C_PD28_TSADTRG (AT91C_PIO_PD28) // +#define AT91C_PD28_SPI1_NPCS1 (AT91C_PIO_PD28) // +#define AT91C_PD29_TCLK1 (AT91C_PIO_PD29) // +#define AT91C_PD29_SCK1 (AT91C_PIO_PD29) // +#define AT91C_PD3_RD0 (AT91C_PIO_PD3) // +#define AT91C_PD30_TIOB0 (AT91C_PIO_PD30) // +#define AT91C_PD30_SCK2 (AT91C_PIO_PD30) // +#define AT91C_PD31_TIOB1 (AT91C_PIO_PD31) // +#define AT91C_PD31_PWM1 (AT91C_PIO_PD31) // +#define AT91C_PD4_RK0 (AT91C_PIO_PD4) // +#define AT91C_PD5_RF0 (AT91C_PIO_PD5) // +#define AT91C_PD6_AC97RX (AT91C_PIO_PD6) // +#define AT91C_PD7_AC97TX (AT91C_PIO_PD7) // +#define AT91C_PD7_TIOA5 (AT91C_PIO_PD7) // +#define AT91C_PD8_AC97FS (AT91C_PIO_PD8) // +#define AT91C_PD8_TIOB5 (AT91C_PIO_PD8) // +#define AT91C_PD9_AC97CK (AT91C_PIO_PD9) // +#define AT91C_PD9_TCLK5 (AT91C_PIO_PD9) // +#define AT91C_PE0_LCDPWR (AT91C_PIO_PE0) // +#define AT91C_PE0_PCK0 (AT91C_PIO_PE0) // +#define AT91C_PE1_LCDMOD (AT91C_PIO_PE1) // +#define AT91C_PE10_LCDD3 (AT91C_PIO_PE10) // +#define AT91C_PE10_LCDD5 (AT91C_PIO_PE10) // +#define AT91C_PE11_LCDD4 (AT91C_PIO_PE11) // +#define AT91C_PE11_LCDD6 (AT91C_PIO_PE11) // +#define AT91C_PE12_LCDD5 (AT91C_PIO_PE12) // +#define AT91C_PE12_LCDD7 (AT91C_PIO_PE12) // +#define AT91C_PE13_LCDD6 (AT91C_PIO_PE13) // +#define AT91C_PE13_LCDD10 (AT91C_PIO_PE13) // +#define AT91C_PE14_LCDD7 (AT91C_PIO_PE14) // +#define AT91C_PE14_LCDD11 (AT91C_PIO_PE14) // +#define AT91C_PE15_LCDD8 (AT91C_PIO_PE15) // +#define AT91C_PE15_LCDD12 (AT91C_PIO_PE15) // +#define AT91C_PE16_LCDD9 (AT91C_PIO_PE16) // +#define AT91C_PE16_LCDD13 (AT91C_PIO_PE16) // +#define AT91C_PE17_LCDD10 (AT91C_PIO_PE17) // +#define AT91C_PE17_LCDD14 (AT91C_PIO_PE17) // +#define AT91C_PE18_LCDD11 (AT91C_PIO_PE18) // +#define AT91C_PE18_LCDD15 (AT91C_PIO_PE18) // +#define AT91C_PE19_LCDD12 (AT91C_PIO_PE19) // +#define AT91C_PE19_LCDD18 (AT91C_PIO_PE19) // +#define AT91C_PE2_LCDCC (AT91C_PIO_PE2) // +#define AT91C_PE20_LCDD13 (AT91C_PIO_PE20) // +#define AT91C_PE20_LCDD19 (AT91C_PIO_PE20) // +#define AT91C_PE21_LCDD14 (AT91C_PIO_PE21) // +#define AT91C_PE21_LCDD20 (AT91C_PIO_PE21) // +#define AT91C_PE22_LCDD15 (AT91C_PIO_PE22) // +#define AT91C_PE22_LCDD21 (AT91C_PIO_PE22) // +#define AT91C_PE23_LCDD16 (AT91C_PIO_PE23) // +#define AT91C_PE23_LCDD22 (AT91C_PIO_PE23) // +#define AT91C_PE24_LCDD17 (AT91C_PIO_PE24) // +#define AT91C_PE24_LCDD23 (AT91C_PIO_PE24) // +#define AT91C_PE25_LCDD18 (AT91C_PIO_PE25) // +#define AT91C_PE26_LCDD19 (AT91C_PIO_PE26) // +#define AT91C_PE27_LCDD20 (AT91C_PIO_PE27) // +#define AT91C_PE28_LCDD21 (AT91C_PIO_PE28) // +#define AT91C_PE29_LCDD22 (AT91C_PIO_PE29) // +#define AT91C_PE3_LCDVSYNC (AT91C_PIO_PE3) // +#define AT91C_PE30_LCDD23 (AT91C_PIO_PE30) // +#define AT91C_PE31_PWM2 (AT91C_PIO_PE31) // +#define AT91C_PE31_PCK1 (AT91C_PIO_PE31) // +#define AT91C_PE4_LCDHSYNC (AT91C_PIO_PE4) // +#define AT91C_PE5_LCDDOTCK (AT91C_PIO_PE5) // +#define AT91C_PE6_LCDDEN (AT91C_PIO_PE6) // +#define AT91C_PE7_LCDD0 (AT91C_PIO_PE7) // +#define AT91C_PE7_LCDD2 (AT91C_PIO_PE7) // +#define AT91C_PE8_LCDD1 (AT91C_PIO_PE8) // +#define AT91C_PE8_LCDD3 (AT91C_PIO_PE8) // +#define AT91C_PE9_LCDD2 (AT91C_PIO_PE9) // +#define AT91C_PE9_LCDD4 (AT91C_PIO_PE9) // + +#endif /* ARM_AT91_AT91_PIO_SAM9G45_H */ diff --git a/sys/arm/at91/at91_pmc.c b/sys/arm/at91/at91_pmc.c index 799a87b..8711d17 100644 --- a/sys/arm/at91/at91_pmc.c +++ b/sys/arm/at91/at91_pmc.c @@ -65,6 +65,7 @@ MALLOC_DEFINE(M_PMC, "at91_pmc_clocks", "AT91 PMC Clock descriptors"); #define AT91_PMC_BASE 0xffffc00 static void at91_pmc_set_pllb_mode(struct at91_pmc_clock *, int); +static void at91_pmc_set_upll_mode(struct at91_pmc_clock *, int); static void at91_pmc_set_sys_mode(struct at91_pmc_clock *, int); static void at91_pmc_set_periph_mode(struct at91_pmc_clock *, int); static void at91_pmc_clock_alias(const char *name, const char *alias); @@ -110,6 +111,18 @@ static struct at91_pmc_clock pllb = { .set_mode = &at91_pmc_set_pllb_mode, }; +/* Used by USB on at91sam9g45 */ +static struct at91_pmc_clock upll = { + .name = "upll", // UTMI PLL, used for USB functions on 9G45 + .parent = &main_ck, + .refcnt = 0, + .id = 0, + .primary = 1, + .pll = 1, + .pmc_mask = (1 << 6), + .set_mode = &at91_pmc_set_upll_mode, +}; + static struct at91_pmc_clock udpck = { .name = "udpck", .parent = &pllb, @@ -143,6 +156,7 @@ static struct at91_pmc_clock *clock_list[16+32] = { &main_ck, &plla, &pllb, + &upll, &udpck, &uhpck, &mck, @@ -199,6 +213,26 @@ at91_pmc_set_pllb_mode(struct at91_pmc_clock *clk, int on) } static void +at91_pmc_set_upll_mode(struct at91_pmc_clock *clk, int on) +{ + struct at91_pmc_softc *sc = pmc_softc; + uint32_t value; + + if (on) { + on = PMC_IER_LOCKU; + value = CKGR_UCKR_UPLLEN | CKGR_UCKR_BIASEN; + } else + value = 0; + + WR4(sc, CKGR_UCKR, RD4(sc, CKGR_UCKR) | value); + while ((RD4(sc, PMC_SR) & PMC_IER_LOCKU) != on) + continue; + + WR4(sc, PMC_USB, PMC_USB_USBDIV(9) | PMC_USB_USBS); + WR4(sc, PMC_SCER, PMC_SCER_UHP_SAM9); +} + +static void at91_pmc_set_sys_mode(struct at91_pmc_clock *clk, int on) { struct at91_pmc_softc *sc = pmc_softc; @@ -466,6 +500,12 @@ at91_pmc_init_clock(void) uhpck.pmc_mask = PMC_SCER_UHP_SAM9; udpck.pmc_mask = PMC_SCER_UDP_SAM9; } + /* There is no pllb on AT91SAM9G45 */ + if (at91_cpu_is(AT91_T_SAM9G45)) { + uhpck.parent = &upll; + uhpck.pmc_mask = PMC_SCER_UHP_SAM9; + } + mckr = RD4(sc, PMC_MCKR); main_ck.hz = main_clock; @@ -506,8 +546,14 @@ at91_pmc_init_clock(void) mdiv = (mckr & PMC_MCKR_MDIV_MASK) >> 8; if (at91_is_sam9() || at91_is_sam9xe()) { + /* + * On AT91SAM9G45 when mdiv == 3 we need to divide + * MCK by 3 but not, for example, on 9g20. + */ + if (!at91_cpu_is(AT91_T_SAM9G45) || mdiv <= 2) + mdiv *= 2; if (mdiv > 0) - mck.hz /= mdiv * 2; + mck.hz /= mdiv; } else mck.hz /= (1 + mdiv); diff --git a/sys/arm/at91/at91_pmcreg.h b/sys/arm/at91/at91_pmcreg.h index eaf08c6..ce6165d 100644 --- a/sys/arm/at91/at91_pmcreg.h +++ b/sys/arm/at91/at91_pmcreg.h @@ -36,14 +36,14 @@ #define PMC_PCER 0x10 /* Peripheral Clock Enable Register */ #define PMC_PCDR 0x14 /* Peripheral Clock Disable Register */ #define PMC_PCSR 0x18 /* Peripheral Clock Status Register */ - /* 0x1c reserved */ +#define CKGR_UCKR 0x1c /* UTMI Clock Configuration Register */ #define CKGR_MOR 0x20 /* Main Oscillator Register */ #define CKGR_MCFR 0x24 /* Main Clock Frequency Register */ #define CKGR_PLLAR 0x28 /* PLL A Register */ #define CKGR_PLLBR 0x2c /* PLL B Register */ #define PMC_MCKR 0x30 /* Master Clock Register */ /* 0x34 reserved */ - /* 0x38 reserved */ +#define PMC_USB 0x38 /* USB Clock Register */ /* 0x3c reserved */ #define PMC_PCK0 0x40 /* Programmable Clock 0 Register */ #define PMC_PCK1 0x44 /* Programmable Clock 1 Register */ @@ -77,6 +77,10 @@ /* PMC Peripheral Clock Status Register */ /* Each bit here is 1 << peripheral number to enable/disable/status */ +/* PMC UTMI Clock Configuration Register */ +#define CKGR_UCKR_BIASEN (1UL << 24) +#define CKGR_UCKR_UPLLEN (1UL << 16) + /* PMC Clock Generator Main Oscillator Register */ #define CKGR_MOR_MOSCEN (1UL << 0) /* MOSCEN: Main Oscillator Enable */ #define CKGR_MOR_OSCBYPASS (1UL << 1) /* Oscillator Bypass */ @@ -93,6 +97,10 @@ #define PMC_MCKR_MDIV_MASK (3 << 8) #define PMC_MCKR_PRES_MASK (7 << 2) +/* PMC USB Clock Register */ +#define PMC_USB_USBDIV(n) (((n) & 0x0F) << 8) +#define PMC_USB_USBS (1 << 0) + /* PMC Interrupt Enable Register */ /* PMC Interrupt Disable Register */ /* PMC Status Register */ @@ -101,6 +109,7 @@ #define PMC_IER_LOCKA (1UL << 1) /* PLL A Locked */ #define PMC_IER_LOCKB (1UL << 2) /* PLL B Locked */ #define PMC_IER_MCKRDY (1UL << 3) /* Master Clock Status */ +#define PMC_IER_LOCKU (1UL << 6) /* UPLL Locked */ #define PMC_IER_PCK0RDY (1UL << 8) /* Programmable Clock 0 Ready */ #define PMC_IER_PCK1RDY (1UL << 9) /* Programmable Clock 1 Ready */ #define PMC_IER_PCK2RDY (1UL << 10) /* Programmable Clock 2 Ready */ diff --git a/sys/arm/at91/at91_spi.c b/sys/arm/at91/at91_spi.c index a81e0be..f01e984 100644 --- a/sys/arm/at91/at91_spi.c +++ b/sys/arm/at91/at91_spi.c @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include <machine/bus.h> +#include <arm/at91/at91var.h> #include <arm/at91/at91_spireg.h> #include <arm/at91/at91_pdcreg.h> @@ -144,6 +145,7 @@ at91_spi_attach(device_t dev) * memory and APB bandwidth. * Also, currently we lack a way for lettting both the board and the * slave devices take their maximum supported SPI clocks into account. + * Also, we hard-wire SPI mode to 3. */ csr = SPI_CSR_CPOL | (4 << 16) | (0xff << 8); WR4(sc, SPI_CSR0, csr); @@ -285,7 +287,10 @@ at91_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) */ WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS); -#ifdef SPI_CHIPSEL_SUPPORT + /* + * PSCDEC = 0 has a range of 0..3 for chip select. We + * don't support PSCDEC = 1 which has a range of 0..15. + */ if (cmd->cs < 0 || cmd->cs > 3) { device_printf(dev, "Invalid chip select %d requested by %s\n", cmd->cs, @@ -293,18 +298,23 @@ at91_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) err = EINVAL; goto out; } + #ifdef SPI_CHIP_SELECT_HIGH_SUPPORT + /* + * The AT91RM9200 couldn't do CS high for CS 0. Other chips can, but we + * don't support that yet, or other spi modes. + */ if (at91_is_rm92() && cmd->cs == 0 && (cmd->flags & SPI_CHIP_SELECT_HIGH) != 0) { device_printf(dev, - "Invalid chip select high requested by %s\n", + "Invalid chip select high requested by %s for cs 0.\n", device_get_nameunit(child)); err = EINVAL; goto out; } #endif - WR4(sc, SPI_MR, (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs)); -#endif + err = (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs); + WR4(sc, SPI_MR, err); /* * Set up the TX side of the transfer. diff --git a/sys/arm/at91/at91rm9200.c b/sys/arm/at91/at91rm9200.c index 51627f0..a3201e3 100644 --- a/sys/arm/at91/at91rm9200.c +++ b/sys/arm/at91/at91rm9200.c @@ -46,14 +46,6 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91_pmcvar.h> #include <arm/at91/at91soc.h> - -struct at91rm92_softc { - device_t dev; - bus_space_tag_t sc_st; - bus_space_handle_t sc_sh; - bus_space_handle_t sc_sys_sh; - bus_space_handle_t sc_aic_sh; -}; /* * Standard priority levels for the system. 0 is lowest and 7 is highest. * These values are the ones Atmel uses for its Linux port, which differ @@ -137,19 +129,6 @@ static const struct cpu_devs at91_devs[] = { 0, 0, 0, 0, 0 } }; -static void -at91_cpu_add_builtin_children(device_t dev) -{ - int i; - const struct cpu_devs *walker; - - for (i = 1, walker = at91_devs; walker->name; i++, walker++) { - at91_add_child(dev, i, walker->name, walker->unit, - walker->mem_base, walker->mem_len, walker->irq0, - walker->irq1, walker->irq2); - } -} - static uint32_t at91_pll_outb(int freq) { @@ -160,71 +139,19 @@ at91_pll_outb(int freq) return (0x8000); } -static void -at91_identify(driver_t *drv, device_t parent) -{ - - if (at91_cpu_is(AT91_T_RM9200)) { - at91_add_child(parent, 0, "at91rm920", 0, 0, 0, -1, 0, 0); - at91_cpu_add_builtin_children(parent); - } -} - -static int -at91_probe(device_t dev) -{ - - device_set_desc(dev, soc_info.name); - return (0); -} - -static int -at91_attach(device_t dev) -{ - struct at91_pmc_clock *clk; - struct at91rm92_softc *sc = device_get_softc(dev); - int i; - - struct at91_softc *at91sc = device_get_softc(device_get_parent(dev)); - - sc->sc_st = at91sc->sc_st; - sc->sc_sh = at91sc->sc_sh; - sc->dev = dev; - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91RM92_SYS_BASE, - AT91RM92_SYS_SIZE, &sc->sc_sys_sh) != 0) - panic("Enable to map system registers"); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91RM92_AIC_BASE, - AT91RM92_AIC_SIZE, &sc->sc_aic_sh) != 0) - panic("Enable to map system registers"); - - /* XXX Hack to tell atmelarm about the AIC */ - at91sc->sc_aic_sh = sc->sc_aic_sh; - - for (i = 0; i < 32; i++) { - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + - i * 4, i); - /* Priority. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, - at91_irq_prio[i]); - if (i < 8) - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, - 1); - } - - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); - /* No debug. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); - /* Disable and clear all interrupts. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); - +#if 0 +/* -- XXX are these needed? */ /* Disable all interrupts for RTC (0xe24 == RTC_IDR) */ bus_space_write_4(sc->sc_st, sc->sc_sys_sh, 0xe24, 0xffffffff); /* Disable all interrupts for the SDRAM controller */ bus_space_write_4(sc->sc_st, sc->sc_sys_sh, 0xfa8, 0xffffffff); +#endif + +static void +at91_clock_init(void) +{ + struct at91_pmc_clock *clk; /* Update USB device port clock info */ clk = at91_pmc_clock_ref("udpck"); @@ -260,30 +187,14 @@ at91_attach(device_t dev) clk->pll_div_mask = RM9200_PLL_B_DIV_MASK; clk->set_outb = at91_pll_outb; at91_pmc_clock_deref(clk); - - return (0); } -static device_method_t at91_methods[] = { - DEVMETHOD(device_probe, at91_probe), - DEVMETHOD(device_attach, at91_attach), - DEVMETHOD(device_identify, at91_identify), - {0, 0}, -}; - -static driver_t at91rm92_driver = { - "at91rm920", - at91_methods, - sizeof(struct at91rm92_softc), -}; - -static devclass_t at91rm92_devclass; - -DRIVER_MODULE(at91rm920, atmelarm, at91rm92_driver, at91rm92_devclass, 0, 0); - static struct at91_soc_data soc_data = { .soc_delay = at91_st_delay, - .soc_reset = at91_st_cpu_reset + .soc_reset = at91_st_cpu_reset, + .soc_clock_init = at91_clock_init, + .soc_irq_prio = at91_irq_prio, + .soc_children = at91_devs, }; AT91_SOC(AT91_T_RM9200, &soc_data); diff --git a/sys/arm/at91/at91rm9200_devices.c b/sys/arm/at91/at91rm9200_devices.c new file mode 100644 index 0000000..9f5efa4 --- /dev/null +++ b/sys/arm/at91/at91rm9200_devices.c @@ -0,0 +1,142 @@ +/*- + * Copyright (c) 2012 M. Warner Losh. 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 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 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/bus.h> +#include <sys/kernel.h> +#include <sys/malloc.h> +#include <sys/module.h> + +#define _ARM32_BUS_DMA_PRIVATE +#include <machine/bus.h> + +#include <arm/at91/at91var.h> +#include <arm/at91/at91board.h> +#include <arm/at91/at91rm92reg.h> +#include <arm/at91/at91rm9200var.h> +#include <arm/at91/at91_pioreg.h> +#include <arm/at91/at91_piovar.h> + +/* + * The AT91RM9200 uses the same silicon for both the BGA and PQFP + * packages. There's no documented way to detect this at runtime, + * so we require the board code to register what type of SoC is on the + * board in question. The pinouts are not quite compatible, and we + * use this information to cope with the slight differences. + */ +void +at91rm9200_set_subtype(enum at91_soc_subtype st) +{ + + switch (st) { + case AT91_ST_RM9200_BGA: + case AT91_ST_RM9200_PQFP: + soc_info.subtype = st; + break; + default: + panic("Bad SoC subtype %d for at91rm9200_set_subtype.", st); + break; + } +} + +void +at91rm9200_config_uart(unsigned devid, unsigned unit, unsigned pinmask) +{ + + /* + * Since the USART supports RS-485 multidrop mode, it allows the + * TX pins to float. However, for RS-232 operations, we don't want + * these pins to float. Instead, they should be pulled up to avoid + * mismatches. Linux does something similar when it configures the + * TX lines. This implies that we also allow the RX lines to float + * rather than be in the state they are left in by the boot loader. + * Since they are input pins, I think that this is the right thing + * to do. + */ + + /* + * Current boards supported don't need the extras, but they should be + * implemented. But that should wait until the new pin api goes in. + */ + switch (devid) { + case AT91_ID_DBGU: + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA30, 0); /* DRXD */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA31, 1); /* DTXD */ + break; + + case AT91RM9200_ID_USART0: + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA17, 1); /* TXD0 */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA19, 0); /* RXD0 */ + /* CTS PA20 */ + /* RTS -- errata #39 PA21 */ + break; + + case AT91RM9200_ID_USART1: + at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PIO_PB20, 1); /* TXD1 */ + at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PIO_PB21, 0); /* RXD1 */ + /* RI - PB18 */ + /* DTR - PB19 */ + /* DCD - PB23 */ + /* CTS - PB24 */ + /* DSR - PB25 */ + /* RTS - PB26 */ + break; + + case AT91RM9200_ID_USART2: + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA22, 0); /* RXD2 */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA23, 1); /* TXD2 */ + /* CTS - PA30 B periph */ + /* RTS - PA31 B periph */ + break; + + case AT91RM9200_ID_USART3: + at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PIO_PA5, 1); /* TXD3 */ + at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PIO_PA6, 0); /* RXD3 */ + /* CTS - PB0 B periph */ + /* RTS - PB1 B periph */ + break; + + default: + break; + } +} + +void +at91rm9200_config_mci(int has_4wire) +{ + /* XXX TODO chip changed GPIO, other slots, etc */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA27, 0); /* MCCK */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA28, 1); /* MCCDA */ + at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA29, 1); /* MCDA0 */ + if (has_4wire) { + at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB3, 1); /* MCDA1 */ + at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB4, 1); /* MCDA2 */ + at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB5, 1); /* MCDA3 */ + } +} diff --git a/sys/arm/at91/at91rm9200var.h b/sys/arm/at91/at91rm9200var.h new file mode 100644 index 0000000..156320e --- /dev/null +++ b/sys/arm/at91/at91rm9200var.h @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2012 M. Warner Losh. 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 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 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 ARM_AT91_AT91RM9200VAR_H +#define ARM_AT91_AT91RM9200VAR_H + +void at91rm9200_set_subtype(enum at91_soc_subtype st); + +#define AT91RM9200_ID_USART0 1 +#define AT91RM9200_ID_USART1 2 +#define AT91RM9200_ID_USART2 3 +#define AT91RM9200_ID_USART3 4 + +/* + * Serial port convenience routines + */ +/* uart pins that are wired... */ +#define AT91_UART_CTS 0x01 +#define AT91_UART_RTS 0x02 +#define AT91_UART_RI 0x04 +#define AT91_UART_DTR 0x08 +#define AT91_UART_DCD 0x10 +#define AT91_UART_DSR 0x20 + +#define AT91_ID_DBGU 0 + +void at91rm9200_config_uart(unsigned devid, unsigned unit, unsigned pinmask); + +/* + * MCI (sd/mmc card support) + */ +void at91rm9200_config_mci(int has_4wire); + +#endif /* ARM_AT91_AT91RM9200VAR_H */ diff --git a/sys/arm/at91/at91sam9260.c b/sys/arm/at91/at91sam9260.c index 9ea0335..23a5f57 100644 --- a/sys/arm/at91/at91sam9260.c +++ b/sys/arm/at91/at91sam9260.c @@ -47,15 +47,6 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91_pmcvar.h> #include <arm/at91/at91_rstreg.h> -struct at91sam9_softc { - device_t dev; - bus_space_tag_t sc_st; - bus_space_handle_t sc_sh; - bus_space_handle_t sc_sys_sh; - bus_space_handle_t sc_aic_sh; - bus_space_handle_t sc_matrix_sh; -}; - /* * Standard priority levels for the system. 0 is lowest and 7 is highest. * These values are the ones Atmel uses for its Linux port @@ -131,19 +122,6 @@ static const struct cpu_devs at91_devs[] = { 0, 0, 0, 0, 0 } }; -static void -at91_cpu_add_builtin_children(device_t dev) -{ - int i; - const struct cpu_devs *walker; - - for (i = 1, walker = at91_devs; walker->name; i++, walker++) { - at91_add_child(dev, i, walker->name, walker->unit, - walker->mem_base, walker->mem_len, walker->irq0, - walker->irq1, walker->irq2); - } -} - static uint32_t at91_pll_outa(int freq) { @@ -162,76 +140,9 @@ at91_pll_outb(int freq) } static void -at91_identify(driver_t *drv, device_t parent) -{ - - if (soc_info.type == AT91_T_SAM9260) { - at91_add_child(parent, 0, "at91sam9260", 0, 0, 0, -1, 0, 0); - at91_cpu_add_builtin_children(parent); - } -} - -static int -at91_probe(device_t dev) -{ - - device_set_desc(dev, soc_info.name); - return (0); -} - -static int -at91_attach(device_t dev) +at91_clock_init(void) { struct at91_pmc_clock *clk; - struct at91sam9_softc *sc = device_get_softc(dev); - int i; - - struct at91_softc *at91sc = device_get_softc(device_get_parent(dev)); - - sc->sc_st = at91sc->sc_st; - sc->sc_sh = at91sc->sc_sh; - sc->dev = dev; - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9260_SYS_BASE, - AT91SAM9260_SYS_SIZE, &sc->sc_sys_sh) != 0) - panic("Enable to map system registers"); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9260_AIC_BASE, - AT91SAM9260_AIC_SIZE, &sc->sc_aic_sh) != 0) - panic("Enable to map system registers"); - - /* XXX Hack to tell atmelarm about the AIC */ - at91sc->sc_aic_sh = sc->sc_aic_sh; - - for (i = 0; i < 32; i++) { - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + - i * 4, i); - /* Priority. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, - at91_irq_prio[i]); - if (i < 8) - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, - 1); - } - - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); - /* No debug. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); - /* Disable and clear all interrupts. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, - AT91SAM9260_MATRIX_BASE, AT91SAM9260_MATRIX_SIZE, - &sc->sc_matrix_sh) != 0) - panic("Enable to map matrix registers"); - - /* activate NAND */ - i = bus_space_read_4(sc->sc_st, sc->sc_matrix_sh, - AT91SAM9260_EBICSA); - bus_space_write_4(sc->sc_st, sc->sc_matrix_sh, - AT91SAM9260_EBICSA, - i | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA); /* Update USB device port clock info */ clk = at91_pmc_clock_ref("udpck"); @@ -276,30 +187,14 @@ at91_attach(device_t dev) clk->pll_div_mask = SAM9260_PLL_B_DIV_MASK; clk->set_outb = at91_pll_outb; at91_pmc_clock_deref(clk); - return (0); } -static device_method_t at91sam9260_methods[] = { - DEVMETHOD(device_probe, at91_probe), - DEVMETHOD(device_attach, at91_attach), - DEVMETHOD(device_identify, at91_identify), - DEVMETHOD_END -}; - -static driver_t at91sam9260_driver = { - "at91sam9260", - at91sam9260_methods, - sizeof(struct at91sam9_softc), -}; - -static devclass_t at91sam9260_devclass; - -DRIVER_MODULE(at91sam9260, atmelarm, at91sam9260_driver, at91sam9260_devclass, - NULL, NULL); - static struct at91_soc_data soc_data = { .soc_delay = at91_pit_delay, - .soc_reset = at91_rst_cpu_reset + .soc_reset = at91_rst_cpu_reset, + .soc_clock_init = at91_clock_init, + .soc_irq_prio = at91_irq_prio, + .soc_children = at91_devs, }; AT91_SOC(AT91_T_SAM9260, &soc_data); diff --git a/sys/arm/at91/at91sam9g20.c b/sys/arm/at91/at91sam9g20.c index 4b87ad0..73876b0 100644 --- a/sys/arm/at91/at91sam9g20.c +++ b/sys/arm/at91/at91sam9g20.c @@ -47,15 +47,6 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91_pmcvar.h> #include <arm/at91/at91_rstreg.h> -struct at91sam9_softc { - device_t dev; - bus_space_tag_t sc_st; - bus_space_handle_t sc_sh; - bus_space_handle_t sc_sys_sh; - bus_space_handle_t sc_aic_sh; - bus_space_handle_t sc_matrix_sh; -}; - /* * Standard priority levels for the system. 0 is lowest and 7 is highest. * These values are the ones Atmel uses for its Linux port @@ -131,19 +122,6 @@ static const struct cpu_devs at91_devs[] = { 0, 0, 0, 0, 0 } }; -static void -at91_cpu_add_builtin_children(device_t dev) -{ - int i; - const struct cpu_devs *walker; - - for (i = 1, walker = at91_devs; walker->name; i++, walker++) { - at91_add_child(dev, i, walker->name, walker->unit, - walker->mem_base, walker->mem_len, walker->irq0, - walker->irq1, walker->irq2); - } -} - static uint32_t at91_pll_outa(int freq) { @@ -169,81 +147,9 @@ at91_pll_outb(int freq) } static void -at91_identify(driver_t *drv, device_t parent) -{ - - if (at91_cpu_is(AT91_T_SAM9G20)) { - at91_add_child(parent, 0, "at91sam", 9, 0, 0, -1, 0, 0); - at91_cpu_add_builtin_children(parent); - } -} - -static int -at91_probe(device_t dev) -{ - - device_set_desc(dev, soc_info.name); - return (0); -} - -static int -at91_attach(device_t dev) +at91_clock_init(void) { struct at91_pmc_clock *clk; - struct at91sam9_softc *sc = device_get_softc(dev); - int i; - - struct at91_softc *at91sc = device_get_softc(device_get_parent(dev)); - - sc->sc_st = at91sc->sc_st; - sc->sc_sh = at91sc->sc_sh; - sc->dev = dev; - - /* - * XXX These values work for the RM9200, SAM926[01], and SAM9G20 - * will have to fix this when we want to support anything else. XXX - */ - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9G20_SYS_BASE, - AT91SAM9G20_SYS_SIZE, &sc->sc_sys_sh) != 0) - panic("Enable to map system registers"); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9G20_AIC_BASE, - AT91SAM9G20_AIC_SIZE, &sc->sc_aic_sh) != 0) - panic("Enable to map system registers"); - - /* XXX Hack to tell atmelarm about the AIC */ - at91sc->sc_aic_sh = sc->sc_aic_sh; - - for (i = 0; i < 32; i++) { - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + - i * 4, i); - /* Priority. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, - at91_irq_prio[i]); - if (i < 8) - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, - 1); - } - - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); - /* No debug. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); - /* Disable and clear all interrupts. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, - AT91SAM9G20_MATRIX_BASE, AT91SAM9G20_MATRIX_SIZE, - &sc->sc_matrix_sh) != 0) - panic("Enable to map matrix registers"); - - /* activate NAND*/ - i = bus_space_read_4(sc->sc_st, sc->sc_matrix_sh, - AT91SAM9G20_EBICSA); - bus_space_write_4(sc->sc_st, sc->sc_matrix_sh, - AT91SAM9G20_EBICSA, - i | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA); - /* Update USB device port clock info */ clk = at91_pmc_clock_ref("udpck"); @@ -279,29 +185,14 @@ at91_attach(device_t dev) clk->pll_div_mask = SAM9G20_PLL_B_DIV_MASK; clk->set_outb = at91_pll_outb; at91_pmc_clock_deref(clk); - return (0); } -static device_method_t at91_methods[] = { - DEVMETHOD(device_probe, at91_probe), - DEVMETHOD(device_attach, at91_attach), - DEVMETHOD(device_identify, at91_identify), - {0, 0}, -}; - -static driver_t at91sam9_driver = { - "at91sam", - at91_methods, - sizeof(struct at91sam9_softc), -}; - -static devclass_t at91sam9_devclass; - -DRIVER_MODULE(at91sam, atmelarm, at91sam9_driver, at91sam9_devclass, 0, 0); - static struct at91_soc_data soc_data = { .soc_delay = at91_pit_delay, - .soc_reset = at91_rst_cpu_reset + .soc_reset = at91_rst_cpu_reset, + .soc_clock_init = at91_clock_init, + .soc_irq_prio = at91_irq_prio, + .soc_children = at91_devs, }; AT91_SOC(AT91_T_SAM9G20, &soc_data); diff --git a/sys/arm/at91/at91sam9g45.c b/sys/arm/at91/at91sam9g45.c new file mode 100644 index 0000000..638c3d9 --- /dev/null +++ b/sys/arm/at91/at91sam9g45.c @@ -0,0 +1,177 @@ +/*- + * Copyright (c) 2005 Olivier Houchard. All rights reserved. + * Copyright (c) 2010 Greg Ansley. All rights reserved. + * Copyright (c) 2012 Andrew Turner. 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 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 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/bus.h> +#include <sys/kernel.h> +#include <sys/malloc.h> +#include <sys/module.h> + +#define _ARM32_BUS_DMA_PRIVATE +#include <machine/bus.h> + +#include <arm/at91/at91var.h> +#include <arm/at91/at91reg.h> +#include <arm/at91/at91soc.h> +#include <arm/at91/at91_aicreg.h> +#include <arm/at91/at91sam9g45reg.h> +#include <arm/at91/at91_pitreg.h> +#include <arm/at91/at91_pmcreg.h> +#include <arm/at91/at91_pmcvar.h> +#include <arm/at91/at91_rstreg.h> + +/* + * Standard priority levels for the system. 0 is lowest and 7 is highest. + * These values are the ones Atmel uses for its Linux port + */ +static const int at91_irq_prio[32] = +{ + 7, /* Advanced Interrupt Controller */ + 7, /* System Peripherals */ + 1, /* Parallel IO Controller A */ + 1, /* Parallel IO Controller B */ + 1, /* Parallel IO Controller C */ + 1, /* Parallel IO Controller D and E */ + 0, + 5, /* USART 0 */ + 5, /* USART 1 */ + 5, /* USART 2 */ + 5, /* USART 3 */ + 0, /* Multimedia Card Interface 0 */ + 6, /* Two-Wire Interface 0 */ + 6, /* Two-Wire Interface 1 */ + 5, /* Serial Peripheral Interface 0 */ + 5, /* Serial Peripheral Interface 1 */ + 4, /* Serial Synchronous Controller 0 */ + 4, /* Serial Synchronous Controller 1 */ + 0, /* Timer Counter 0, 1, 2, 3, 4 and 5 */ + 0, /* Pulse Width Modulation Controller */ + 0, /* Touch Screen Controller */ + 0, /* DMA Controller */ + 2, /* USB Host High Speed port */ + 3, /* LCD Controller */ + 5, /* AC97 Controller */ + 3, /* Ethernet */ + 0, /* Image Sensor Interface */ + 2, /* USB Device High Speed port */ + 0, /* (reserved) */ + 0, /* Multimedia Card Interface 1 */ + 0, /* (reserved) */ + 0, /* Advanced Interrupt Controller IRQ0 */ +}; + +#define DEVICE(_name, _id, _unit) \ + { \ + _name, _unit, \ + AT91SAM9G45_ ## _id ##_BASE, \ + AT91SAM9G45_ ## _id ## _SIZE, \ + AT91SAM9G45_IRQ_ ## _id \ + } + +static const struct cpu_devs at91_devs[] = +{ + DEVICE("at91_pmc", PMC, 0), + DEVICE("at91_wdt", WDT, 0), + DEVICE("at91_rst", RSTC, 0), + DEVICE("at91_pit", PIT, 0), + DEVICE("at91_pio", PIOA, 0), + DEVICE("at91_pio", PIOB, 1), + DEVICE("at91_pio", PIOC, 2), + DEVICE("at91_pio", PIOD, 3), + DEVICE("at91_pio", PIOE, 4), + DEVICE("at91_twi", TWI0, 0), + DEVICE("at91_twi", TWI1, 1), + DEVICE("at91_mci", HSMCI0, 0), + DEVICE("at91_mci", HSMCI1, 1), + DEVICE("uart", DBGU, 0), + DEVICE("uart", USART0, 1), + DEVICE("uart", USART1, 2), + DEVICE("uart", USART2, 3), + DEVICE("uart", USART3, 4), + DEVICE("spi", SPI0, 0), + DEVICE("spi", SPI1, 1), + DEVICE("ate", EMAC, 0), + DEVICE("macb", EMAC, 0), + DEVICE("nand", NAND, 0), + DEVICE("ohci", OHCI, 0), + { 0, 0, 0, 0, 0 } +}; + +static uint32_t +at91_pll_outa(int freq) +{ + + switch (freq / 10000000) { + case 747 ... 801: return ((1 << 29) | (0 << 14)); + case 697 ... 746: return ((1 << 29) | (1 << 14)); + case 647 ... 696: return ((1 << 29) | (2 << 14)); + case 597 ... 646: return ((1 << 29) | (3 << 14)); + case 547 ... 596: return ((1 << 29) | (4 << 14)); + case 497 ... 546: return ((1 << 29) | (5 << 14)); + case 447 ... 496: return ((1 << 29) | (6 << 14)); + case 397 ... 446: return ((1 << 29) | (7 << 14)); + default: return (1 << 29); + } +} + +static void +at91_clock_init(void) +{ + struct at91_pmc_clock *clk; + + /* Update USB host port clock info */ + clk = at91_pmc_clock_ref("uhpck"); + clk->pmc_mask = PMC_SCER_UHP_SAM9; + at91_pmc_clock_deref(clk); + + /* Each SOC has different PLL contraints */ + clk = at91_pmc_clock_ref("plla"); + clk->pll_min_in = SAM9G45_PLL_A_MIN_IN_FREQ; /* 2 MHz */ + clk->pll_max_in = SAM9G45_PLL_A_MAX_IN_FREQ; /* 32 MHz */ + clk->pll_min_out = SAM9G45_PLL_A_MIN_OUT_FREQ; /* 400 MHz */ + clk->pll_max_out = SAM9G45_PLL_A_MAX_OUT_FREQ; /* 800 MHz */ + clk->pll_mul_shift = SAM9G45_PLL_A_MUL_SHIFT; + clk->pll_mul_mask = SAM9G45_PLL_A_MUL_MASK; + clk->pll_div_shift = SAM9G45_PLL_A_DIV_SHIFT; + clk->pll_div_mask = SAM9G45_PLL_A_DIV_MASK; + clk->set_outb = at91_pll_outa; + at91_pmc_clock_deref(clk); +} + +static struct at91_soc_data soc_data = { + .soc_delay = at91_pit_delay, + .soc_reset = at91_rst_cpu_reset, + .soc_clock_init = at91_clock_init, + .soc_irq_prio = at91_irq_prio, + .soc_children = at91_devs, +}; + +AT91_SOC(AT91_T_SAM9G45, &soc_data); diff --git a/sys/arm/at91/at91sam9g45reg.h b/sys/arm/at91/at91sam9g45reg.h new file mode 100644 index 0000000..86574b3 --- /dev/null +++ b/sys/arm/at91/at91sam9g45reg.h @@ -0,0 +1,294 @@ +/*- + * Copyright (c) 2009 Sylvestre Gallon. All rights reserved. + * Copyright (c) 2010 Greg Ansley. All rights reserved. + * Copyright (c) 2012 Andrew Turner. 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 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 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 AT91SAM9G45REG_H_ +#define AT91SAM9G45REG_H_ + +/* Chip Specific limits */ +#define SAM9G45_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */ +#define SAM9G45_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */ +#define SAM9G45_PLL_A_MIN_OUT_FREQ 400000000 /* 400 Mhz */ +#define SAM9G45_PLL_A_MAX_OUT_FREQ 800000000 /* 800 Mhz */ +#define SAM9G45_PLL_A_MUL_SHIFT 16 +#define SAM9G45_PLL_A_MUL_MASK 0xFF +#define SAM9G45_PLL_A_DIV_SHIFT 0 +#define SAM9G45_PLL_A_DIV_MASK 0xFF + +/* + * Memory map, from datasheet : + * 0x00000000 - 0x0ffffffff : Internal Memories + * 0x10000000 - 0x1ffffffff : Chip Select 0 + * 0x20000000 - 0x2ffffffff : Chip Select 1 + * 0x30000000 - 0x3ffffffff : Chip Select 2 + * 0x40000000 - 0x4ffffffff : Chip Select 3 + * 0x50000000 - 0x5ffffffff : Chip Select 4 + * 0x60000000 - 0x6ffffffff : Chip Select 5 + * 0x70000000 - 0x7ffffffff : DDR SDRC 0 + * 0x80000000 - 0xeffffffff : Undefined (Abort) + * 0xf0000000 - 0xfffffffff : Peripherals + */ + +#define AT91_CHIPSELECT_0 0x10000000 +#define AT91_CHIPSELECT_1 0x20000000 +#define AT91_CHIPSELECT_2 0x30000000 +#define AT91_CHIPSELECT_3 0x40000000 +#define AT91_CHIPSELECT_4 0x50000000 +#define AT91_CHIPSELECT_5 0x60000000 + + +#define AT91SAM9G45_EMAC_BASE 0xffbc000 +#define AT91SAM9G45_EMAC_SIZE 0x4000 + +#define AT91SAM9G45_RSTC_BASE 0xffffd00 +#define AT91SAM9G45_RSTC_SIZE 0x10 + +/* USART*/ + +#define AT91SAM9G45_USART_SIZE 0x4000 +#define AT91SAM9G45_USART0_BASE 0xff8c000 +#define AT91SAM9G45_USART0_SIZE AT91SAM9G45_USART_SIZE +#define AT91SAM9G45_USART1_BASE 0xff90000 +#define AT91SAM9G45_USART1_SIZE AT91SAM9G45_USART_SIZE +#define AT91SAM9G45_USART2_BASE 0xff94000 +#define AT91SAM9G45_USART2_SIZE AT91SAM9G45_USART_SIZE +#define AT91SAM9G45_USART3_BASE 0xff98000 +#define AT91SAM9G45_USART3_SIZE AT91SAM9G45_USART_SIZE + +/*TC*/ +#define AT91SAM9G45_TC0_BASE 0xff7c000 +#define AT91SAM9G45_TC0_SIZE 0x4000 +#define AT91SAM9G45_TC0C0_BASE 0xff7c000 +#define AT91SAM9G45_TC0C1_BASE 0xff7c040 +#define AT91SAM9G45_TC0C2_BASE 0xff7c080 + +#define AT91SAM9G45_TC1_BASE 0xffd4000 +#define AT91SAM9G45_TC1_SIZE 0x4000 +#define AT91SAM9G45_TC1C0_BASE 0xffd4000 +#define AT91SAM9G45_TC1C1_BASE 0xffd4040 +#define AT91SAM9G45_TC1C2_BASE 0xffd4080 + +/*SPI*/ + +#define AT91SAM9G45_SPI0_BASE 0xffa48000 +#define AT91SAM9G45_SPI0_SIZE 0x4000 + +#define AT91SAM9G45_SPI1_BASE 0xffa8000 +#define AT91SAM9G45_SPI1_SIZE 0x4000 + +/* System Registers */ +#define AT91SAM9G45_SYS_BASE 0xffff000 +#define AT91SAM9G45_SYS_SIZE 0x1000 + +#define AT91SAM9G45_MATRIX_BASE 0xfffea00 +#define AT91SAM9G45_MATRIX_SIZE 0x200 + +#define AT91SAM9G45_DBGU_BASE 0xfffee00 +#define AT91SAM9G45_DBGU_SIZE 0x200 + +/* + * PIO + */ +#define AT91SAM9G45_PIOA_BASE 0xffff200 +#define AT91SAM9G45_PIOA_SIZE 0x200 +#define AT91SAM9G45_PIOB_BASE 0xffff400 +#define AT91SAM9G45_PIOB_SIZE 0x200 +#define AT91SAM9G45_PIOC_BASE 0xffff600 +#define AT91SAM9G45_PIOC_SIZE 0x200 +#define AT91SAM9G45_PIOD_BASE 0xffff800 +#define AT91SAM9G45_PIOD_SIZE 0x200 +#define AT91SAM9G45_PIOE_BASE 0xffffa00 +#define AT91SAM9G45_PIOE_SIZE 0x200 + +#define AT91SAM9G45_PMC_BASE 0xffffc00 +#define AT91SAM9G45_PMC_SIZE 0x100 + +/* IRQs : */ +/* + * 0: AIC + * 1: System peripheral (System timer, RTC, DBGU) + * 2: PIO Controller A + * 3: PIO Controller B + * 4: PIO Controller C + * 5: PIO Controller D/E + * 6: TRNG + * 7: USART 0 + * 8: USART 1 + * 9: USART 2 + * 10: USART 3 + * 11: Multimedia Card interface 0 + * 12: Two-wirte interface 0 + * 13: Two-wirte interface 1 + * 14: SPI 0 + * 15: SPI 1 + * 16: SSC 0 + * 17: SSC 0 + * 18: Timer Counter 0, 2, 3, 4, 5 + * 19: PWM + * 20: Touch Screen ADC + * 21: DMA + * 22: USB Host port + * 23: LCD + * 24: AC97 + * 25: EMAC + * 26: Image Sensor Interface + * 27: USB Device High Speed + * 28: - + * 29: Multimedia Card interface 1 + * 30: Reserved + * 31: AIC + */ + +#define AT91SAM9G45_IRQ_SYSTEM 1 +#define AT91SAM9G45_IRQ_PIOA 2 +#define AT91SAM9G45_IRQ_PIOB 3 +#define AT91SAM9G45_IRQ_PIOC 4 +#define AT91SAM9G45_IRQ_PIOD 5 +#define AT91SAM9G45_IRQ_PIOE 6 +#define AT91SAM9G45_IRQ_USART0 7 +#define AT91SAM9G45_IRQ_USART1 8 +#define AT91SAM9G45_IRQ_USART2 9 +#define AT91SAM9G45_IRQ_USART3 10 +#define AT91SAM9G45_IRQ_HSMCI0 11 +#define AT91SAM9G45_IRQ_TWI0 12 +#define AT91SAM9G45_IRQ_TWI1 13 +#define AT91SAM9G45_IRQ_SPI0 14 +#define AT91SAM9G45_IRQ_SPI1 15 +#define AT91SAM9G45_IRQ_SSC0 16 +#define AT91SAM9G45_IRQ_SSC1 17 +#define AT91SAM9G45_IRQ_TC0_TC5 18 +#define AT91SAM9G45_IRQ_PWM 19 +#define AT91SAM9G45_IRQ_TSADCC 20 +#define AT91SAM9G45_IRQ_DMA 21 +#define AT91SAM9G45_IRQ_UHP 22 +#define AT91SAM9G45_IRQ_LCDC 23 +#define AT91SAM9G45_IRQ_AC97C 24 +#define AT91SAM9G45_IRQ_EMAC 25 +#define AT91SAM9G45_IRQ_ISI 26 +#define AT91SAM9G45_IRQ_UDPHS 27 +/* Reserved 28 */ +#define AT91SAM9G45_IRQ_HSMCI1 29 +/* Reserved 30 */ +#define AT91SAM9G45_IRQ_AICBASE 31 + +/* Alias */ +#define AT91SAM9G45_IRQ_DBGU AT91SAM9G45_IRQ_SYSTEM +#define AT91SAM9G45_IRQ_PMC AT91SAM9G45_IRQ_SYSTEM +#define AT91SAM9G45_IRQ_WDT AT91SAM9G45_IRQ_SYSTEM +#define AT91SAM9G45_IRQ_PIT AT91SAM9G45_IRQ_SYSTEM +#define AT91SAM9G45_IRQ_RSTC AT91SAM9G45_IRQ_SYSTEM +#define AT91SAM9G45_IRQ_OHCI AT91SAM9G45_IRQ_UHP +#define AT91SAM9G45_IRQ_TC0 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_TC1 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_TC2 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_TC3 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_TC4 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_TC5 AT91SAM9G45_IRQ_TC0_TC5 +#define AT91SAM9G45_IRQ_NAND (-1) + +#define AT91SAM9G45_AIC_BASE 0xffff000 +#define AT91SAM9G45_AIC_SIZE 0x200 + +/* Timer */ + +#define AT91SAM9G45_WDT_BASE 0xffffd40 +#define AT91SAM9G45_WDT_SIZE 0x10 + +#define AT91SAM9G45_PIT_BASE 0xffffd30 +#define AT91SAM9G45_PIT_SIZE 0x10 + +#define AT91SAM9G45_SMC_BASE 0xfffe800 +#define AT91SAM9G45_SMC_SIZE 0x200 + +#define AT91SAM9G45_PMC_BASE 0xffffc00 +#define AT91SAM9G45_PMC_SIZE 0x100 + +#define AT91SAM9G45_HSMCI0_BASE 0xff80000 +#define AT91SAM9G45_HSMCI0_SIZE 0x4000 + +#define AT91SAM9G45_HSMCI1_BASE 0xffd0000 +#define AT91SAM9G45_HSMCI1_SIZE 0x4000 + +#define AT91SAM9G45_TWI0_BASE 0xff84000 +#define AT91SAM9G45_TWI0_SIZE 0x4000 +#define AT91SAM9G45_TWI1_BASE 0xff88000 +#define AT91SAM9G45_TWI1_SIZE 0x4000 + +/* XXX Needs to be carfully coordinated with + * other * soc's so phyical and vm address + * mapping are unique. XXX + */ +#define AT91SAM9G45_OHCI_BASE 0xdfb00000 +#define AT91SAM9G45_OHCI_PA_BASE 0x00700000 +#define AT91SAM9G45_OHCI_SIZE 0x00100000 + +#define AT91SAM9G45_NAND_BASE 0xe0000000 +#define AT91SAM9G45_NAND_PA_BASE 0x40000000 +#define AT91SAM9G45_NAND_SIZE 0x10000000 + + +/* DDRSDRC */ +#define AT91SAM9G45_DDRSDRC1_BASE 0xfffea00 +#define AT91SAM9G45_DDRSDRC0_BASE 0xfffe600 +#define AT91SAM9G45_DDRSDRC_MR 0x00 +#define AT91SAM9G45_DDRSDRC_TR 0x04 +#define AT91SAM9G45_DDRSDRC_CR 0x08 +#define AT91SAM9G45_DDRSDRC_CR_NC_8 0x0 +#define AT91SAM9G45_DDRSDRC_CR_NC_9 0x1 +#define AT91SAM9G45_DDRSDRC_CR_NC_10 0x2 +#define AT91SAM9G45_DDRSDRC_CR_NC_11 0x3 +#define AT91SAM9G45_DDRSDRC_CR_NC_MASK 0x00000003 +#define AT91SAM9G45_DDRSDRC_CR_NR_11 0x0 +#define AT91SAM9G45_DDRSDRC_CR_NR_12 0x4 +#define AT91SAM9G45_DDRSDRC_CR_NR_13 0x8 +#define AT91SAM9G45_DDRSDRC_CR_NR_14 0xc +#define AT91SAM9G45_DDRSDRC_CR_NR_MASK 0x0000000c +#define AT91SAM9G45_DDRSDRC_TPR0 0x0c +#define AT91SAM9G45_DDRSDRC_TPR1 0x10 +#define AT91SAM9G45_DDRSDRC_TPR2 0x14 +/* Reserved 0x18 */ +#define AT91SAM9G45_DDRSDRC_LPR 0x1c +#define AT91SAM9G45_DDRSDRC_MDR 0x20 +#define AT91SAM9G45_DDRSDRC_MDR_SDR 0x0 +#define AT91SAM9G45_DDRSDRC_MDR_LPSDR 0x1 +#define AT91SAM9G45_DDRSDRC_MDR_LPDDR1 0x3 +#define AT91SAM9G45_DDRSDRC_MDR_DDR2 0x6 +#define AT91SAM9G45_DDRSDRC_MDR_MASK 0x00000007 +#define AT91SAM9G45_DDRSDRC_MDR_DBW_16 0x10 +#define AT91SAM9G45_DDRSDRC_DLL 0x24 +#define AT91SAM9G45_DDRSDRC_HSR 0x2c +#define AT91SAM9G45_DDRSDRC_DELAY1R 0x40 +#define AT91SAM9G45_DDRSDRC_DELAY2R 0x44 +#define AT91SAM9G45_DDRSDRC_DELAY3R 0x48 +#define AT91SAM9G45_DDRSDRC_DELAY4R 0x4c +/* Reserved 0x50 - 0xe0 */ +#define AT91SAM9G45_DDRSDRC_WPMR 0xe4 +#define AT91SAM9G45_DDRSDRC_WPSR 0xe8 + +#endif /* AT91SAM9G45REG_H_*/ + diff --git a/sys/arm/at91/at91sam9x25.c b/sys/arm/at91/at91sam9x5.c index b84d30c..3de9ebd 100644 --- a/sys/arm/at91/at91sam9x25.c +++ b/sys/arm/at91/at91sam9x5.c @@ -41,20 +41,12 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91reg.h> #include <arm/at91/at91soc.h> #include <arm/at91/at91_aicreg.h> -#include <arm/at91/at91sam9x25reg.h> +#include <arm/at91/at91sam9x5reg.h> #include <arm/at91/at91_pitreg.h> #include <arm/at91/at91_pmcreg.h> #include <arm/at91/at91_pmcvar.h> #include <arm/at91/at91_rstreg.h> -struct at91sam9x25_softc { - device_t dev; - bus_space_tag_t sc_st; - bus_space_handle_t sc_sh; - bus_space_handle_t sc_sys_sh; - bus_space_handle_t sc_aic_sh; -}; - /* * Standard priority levels for the system. 0 is lowest and 7 is highest. * These values are the ones Atmel uses for its Linux port @@ -133,19 +125,6 @@ static const struct cpu_devs at91_devs[] = { 0, 0, 0, 0, 0 } }; -static void -at91_cpu_add_builtin_children(device_t dev) -{ - int i; - const struct cpu_devs *walker; - - for (i = 1, walker = at91_devs; walker->name; i++, walker++) { - at91_add_child(dev, i, walker->name, walker->unit, - walker->mem_base, walker->mem_len, walker->irq0, - walker->irq1, walker->irq2); - } -} - static uint32_t at91_pll_outa(int freq) { @@ -171,68 +150,9 @@ at91_pll_outb(int freq) } static void -at91_identify(driver_t *drv, device_t parent) -{ - - if (soc_info.type == AT91_T_SAM9X5 && soc_info.subtype == AT91_ST_SAM9X25) { - at91_add_child(parent, 0, "at91sam9x25", 0, 0, 0, -1, 0, 0); - at91_cpu_add_builtin_children(parent); - } -} - -static int -at91_probe(device_t dev) -{ - - device_set_desc(dev, "AT91SAM9X25"); - return (0); -} - -static int -at91_attach(device_t dev) +at91_clock_init(void) { struct at91_pmc_clock *clk; - struct at91sam9x25_softc *sc = device_get_softc(dev); - int i; - - struct at91_softc *at91sc = device_get_softc(device_get_parent(dev)); - - sc->sc_st = at91sc->sc_st; - sc->sc_sh = at91sc->sc_sh; - sc->dev = dev; - - /* - * XXX These values work for the RM9200, SAM926[01], and SAM9X25 - * will have to fix this when we want to support anything else. XXX - */ - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9X25_SYS_BASE, - AT91SAM9X25_SYS_SIZE, &sc->sc_sys_sh) != 0) - panic("Enable to map system registers"); - - if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9X25_AIC_BASE, - AT91SAM9X25_AIC_SIZE, &sc->sc_aic_sh) != 0) - panic("Enable to map system registers"); - - /* XXX Hack to tell atmelarm about the AIC */ - at91sc->sc_aic_sh = sc->sc_aic_sh; - - for (i = 0; i < 32; i++) { - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + - i * 4, i); - /* Priority. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, - at91_irq_prio[i]); - if (i < 8) - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, - 1); - } - - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); - /* No debug. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); - /* Disable and clear all interrupts. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); /* Update USB device port clock info */ clk = at91_pmc_clock_ref("udpck"); @@ -268,29 +188,14 @@ at91_attach(device_t dev) clk->pll_div_mask = SAM9X25_PLL_B_DIV_MASK; clk->set_outb = at91_pll_outb; at91_pmc_clock_deref(clk); - return (0); } -static device_method_t at91sam9x25_methods[] = { - DEVMETHOD(device_probe, at91_probe), - DEVMETHOD(device_attach, at91_attach), - DEVMETHOD(device_identify, at91_identify), - {0, 0}, -}; - -static driver_t at91sam9x25_driver = { - "at91sam9x25", - at91sam9x25_methods, - sizeof(struct at91sam9x25_softc), -}; - -static devclass_t at91sam9x25_devclass; - -DRIVER_MODULE(at91sam9x25, atmelarm, at91sam9x25_driver, at91sam9x25_devclass, 0, 0); - static struct at91_soc_data soc_data = { .soc_delay = at91_pit_delay, - .soc_reset = at91_rst_cpu_reset + .soc_reset = at91_rst_cpu_reset, + .soc_clock_init = at91_clock_init, + .soc_irq_prio = at91_irq_prio, + .soc_children = at91_devs, }; AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data); diff --git a/sys/arm/at91/at91sam9x25reg.h b/sys/arm/at91/at91sam9x5reg.h index d497e2b..17c43ff 100644 --- a/sys/arm/at91/at91sam9x25reg.h +++ b/sys/arm/at91/at91sam9x5reg.h @@ -27,8 +27,8 @@ /* $FreeBSD$ */ -#ifndef AT91SAM9X25REG_H_ -#define AT91SAM9X25REG_H_ +#ifndef AT91SAM9X5REG_H_ +#define AT91SAM9X5REG_H_ #ifndef AT91SAM9X25_MASTER_CLOCK #define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6) @@ -312,5 +312,4 @@ #define AT91SAM9X25_SDRAMC_ISR 0x20 #define AT91SAM9X25_SDRAMC_MDR 0x24 -#endif /* AT91SAM9X25REG_H_*/ - +#endif /* AT91SAM9X5REG_H_*/ diff --git a/sys/arm/at91/at91var.h b/sys/arm/at91/at91var.h index 183b723..b149465 100644 --- a/sys/arm/at91/at91var.h +++ b/sys/arm/at91/at91var.h @@ -104,10 +104,14 @@ enum at91_soc_family { typedef void (*DELAY_t)(int); typedef void (*cpu_reset_t)(void); +typedef void (*clk_init_t)(void); struct at91_soc_data { DELAY_t soc_delay; cpu_reset_t soc_reset; + clk_init_t soc_clock_init; + const int *soc_irq_prio; + const struct cpu_devs *soc_children; }; struct at91_soc_info { @@ -117,6 +121,7 @@ struct at91_soc_info { uint32_t cidr; uint32_t exid; char name[AT91_SOC_NAME_MAX]; + uint32_t dbgu_base; struct at91_soc_data *soc_data; }; diff --git a/sys/arm/at91/board_bwct.c b/sys/arm/at91/board_bwct.c index 63f3910..0515b21 100644 --- a/sys/arm/at91/board_bwct.c +++ b/sys/arm/at91/board_bwct.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2008 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 Warner Losh. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,37 +31,22 @@ __FBSDID("$FreeBSD$"); #include <machine/board.h> #include <arm/at91/at91board.h> -#include <arm/at91/at91rm92reg.h> -#include <arm/at91/at91_piovar.h> -#include <arm/at91/at91_pio_rm9200.h> +#include <arm/at91/at91var.h> +#include <arm/at91/at91rm9200var.h> BOARD_INIT long board_init(void) { + + at91rm9200_set_subtype(AT91_ST_RM9200_BGA); + /* - * Since the USART supports RS-485 multidrop mode, it allows the - * TX pins to float. However, for RS-232 operations, we don't want - * these pins to float. Instead, they should be pulled up to avoid - * mismatches. Linux does something similar when it configures the - * TX lines. This implies that we also allow the RX lines to float - * rather than be in the state they are left in by the boot loader. - * Since they are input pins, I think that this is the right thing - * to do. + * I don't know anything at all about this board. */ + at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */ - /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1); - /* PIOA's B periph: Turn USART 3's TX/RX pins */ - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0); - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1); - /* PIOB's A periph: Turn USART 1's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0); - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1); - - /* Pin assignment */ + at91rm9200_config_mci(0); + /* Configure ethernet */ return (at91_ramsize()); } diff --git a/sys/arm/at91/board_ethernut5.c b/sys/arm/at91/board_ethernut5.c index a09c335..96beeba 100644 --- a/sys/arm/at91/board_ethernut5.c +++ b/sys/arm/at91/board_ethernut5.c @@ -146,4 +146,4 @@ board_init(void) return (at91_ramsize()); } -ARM_BOARD(NONE, "Ethernut 5") +ARM_BOARD(ETHERNUT5, "Ethernut 5") diff --git a/sys/arm/at91/board_hl200.c b/sys/arm/at91/board_hl200.c index 07db749..d3ac4fe 100644 --- a/sys/arm/at91/board_hl200.c +++ b/sys/arm/at91/board_hl200.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2008 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 Warner Losh. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,34 +31,33 @@ __FBSDID("$FreeBSD$"); #include <machine/board.h> #include <arm/at91/at91board.h> +#include <arm/at91/at91var.h> #include <arm/at91/at91rm92reg.h> -#include <arm/at91/at91_piovar.h> -#include <arm/at91/at91_pio_rm9200.h> +#include <arm/at91/at91rm9200var.h> BOARD_INIT long board_init(void) { + + at91rm9200_set_subtype(AT91_ST_RM9200_BGA); + /* - * Since the USART supports RS-485 multidrop mode, it allows the - * TX pins to float. However, for RS-232 operations, we don't want - * these pins to float. Instead, they should be pulled up to avoid - * mismatches. Linux does something similar when it configures the - * TX lines. This implies that we also allow the RX lines to float - * rather than be in the state they are left in by the boot loader. - * Since they are input pins, I think that this is the right thing - * to do. + * Unsure what all is in the HOTe HL200, but I do know there's + * one serial port that isn't DBGU. There's many other peripherals + * that need to be configured here. */ - /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1); - /* PIOA's B periph: Turn USART 3's TX/RX pins */ - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0); - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1); - /* PIOB's A periph: Turn USART 1's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0); - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1); + at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */ + + at91rm9200_config_mci(0); /* HOTe HL200 unknown 1 vs 4 wire */ + + /* Enable CF card slot */ + /* Enable sound thing */ + /* Enable VGA chip */ + /* Enable ethernet */ + /* Enable TWI + RTC */ + /* Enable USB Host */ + /* Enable USB Device (gadget) */ return (at91_ramsize()); } diff --git a/sys/arm/at91/board_kb920x.c b/sys/arm/at91/board_kb920x.c index a577f87..1f35705 100644 --- a/sys/arm/at91/board_kb920x.c +++ b/sys/arm/at91/board_kb920x.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2008 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 Warner Losh. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,44 +30,35 @@ __FBSDID("$FreeBSD$"); #include <sys/systm.h> #include <machine/board.h> -#include <arm/at91/at91var.h> #include <arm/at91/at91board.h> -#include <arm/at91/at91rm92reg.h> -#include <arm/at91/at91_piovar.h> -#include <arm/at91/at91_pio_rm9200.h> +#include <arm/at91/at91var.h> +#include <arm/at91/at91rm9200var.h> BOARD_INIT long board_init(void) { + + at91rm9200_set_subtype(AT91_ST_RM9200_PQFP); + /* - * Since the USART supports RS-485 multidrop mode, it allows the - * TX pins to float. However, for RS-232 operations, we don't want - * these pins to float. Instead, they should be pulled up to avoid - * mismatches. Linux does something similar when it configures the - * TX lines. This implies that we also allow the RX lines to float - * rather than be in the state they are left in by the boot loader. - * Since they are input pins, I think that this is the right thing - * to do. + * Setup the serial ports. + * DBGU is the main one, although jumpers can make USART0 default. + * USART1 is IrDA, and USART3 is optional RS485. */ - /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1); - /* PIOA's B periph: Turn USART 3's TX/RX pins */ - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0); - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1); - /* PIOB's A periph: Turn USART 1's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0); - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1); + at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); /* Tx and Rx - IRDA */ + at91rm9200_config_uart(AT91RM9200_ID_USART3, 3, /* Tx, Rx, CTS, RTS - RS485 */ + AT91_UART_CTS | AT91_UART_RTS); + + at91rm9200_config_mci(1); - /* MMC/SD Interface */ - at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA27_MCCK, 0); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA28_MCCDA, 1); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA29_MCDA0, 1); - at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB3_MCDA1, 1); - at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB4_MCDA2, 1); - at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB5_MCDA3, 1); + /* CFE interface */ + /* ethernet interface */ + /* lcd interface */ + /* USB host */ + /* USB device (gadget) */ + /* TWI */ return (at91_ramsize()); } diff --git a/sys/arm/at91/board_sam9260ek.c b/sys/arm/at91/board_sam9260ek.c new file mode 100644 index 0000000..61b9cbd --- /dev/null +++ b/sys/arm/at91/board_sam9260ek.c @@ -0,0 +1,169 @@ +/*- + * Copyright (c) 2012 Marius Strobl <marius@FreeBSD.org> + * 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. + */ + +/* + * Ethernut 5 board support + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/systm.h> +#include <machine/board.h> +#include <arm/at91/at91_pioreg.h> +#include <arm/at91/at91_piovar.h> +#include <arm/at91/at91board.h> +#include <arm/at91/at91sam9260reg.h> + +BOARD_INIT long +board_init(void) +{ + + /* + * DBGU + */ + /* DRXD */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB14, 0); + /* DTXD */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB15, 1); + + /* + * EMAC + */ + /* ETX0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA12, 0); + /* ETX1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA13, 0); + /* ERX0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA14, 0); + /* ERX1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA15, 0); + /* ETXEN */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA16, 0); + /* ERXDV */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA17, 0); + /* ERXER */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA18, 0); + /* ETXCK */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA19, 0); + /* EMDC */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA20, 0); + /* EMDIO */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA21, 0); + /* Not RMII */ + /* ETX2 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 0); + /* ETX3 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 0); + /* ETXER */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA22, 0); + /* ERX2 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA25, 0); + /* ERX3 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA26, 0); + /* ERXCK */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA27, 0); + /* ECRS */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA28, 0); + /* ECOL */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA29, 0); + + + /* + * MMC, wired to socket B. + */ + /* MCDB0 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 1); + /* MCCDB */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 1); + /* MCDB3 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 1); + /* MCDB2 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1); + /* MCDB1 */ + at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 1); + /* MCCK */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA8, 1); + + /* + * SPI0 and MMC are wired together, since we don't support sharing + * don't support the dataflash. But if you did, you'd have to + * use CS0 and CS1. + */ + + /* + * SPI1 is wired to a audio CODEC that we don't support, so + * give it a pass. + */ + + /* + * TWI. Only one child on the iic bus, which we take care of + * via hints. + */ + /* TWD */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA23, 1); + /* TWCK */ + at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA24, 1); + + /* + * USART0 + */ + /* TXD0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB4, 1); + /* RXD0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB5, 0); + /* DSR0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB22, 0); + /* DCD0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB23, 0); + /* DTR0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB24, 1); + /* RI0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB25, 0); + /* RTS0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB26, 1); + /* CTS0 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB27, 0); + + /* + * USART1 + */ + /* RTS1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB28, 1); + /* CTS1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB29, 0); + /* TXD1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB6, 1); + /* RXD1 */ + at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB7, 0); + + /* USART2 - USART5 aren't wired up, except via PIO pins, ignore them. */ + + return (at91_ramsize()); +} + +ARM_BOARD(AT91SAM9260EK, "Atmel SMA9260-EK") diff --git a/sys/arm/at91/board_sn9g45.c b/sys/arm/at91/board_sn9g45.c new file mode 100644 index 0000000..eb1980e --- /dev/null +++ b/sys/arm/at91/board_sn9g45.c @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 2009 Greg Ansley. 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 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 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. + */ + +/* + * DesignA Electronics Snapper9g45 + * http://www.designa-electronics.com/ + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); +#include <sys/param.h> +#include <sys/systm.h> + +#include <machine/board.h> +#include <arm/at91/at91board.h> +#include <arm/at91/at91reg.h> +#include <arm/at91/at91var.h> +#include <arm/at91/at91sam9g45reg.h> +#include <arm/at91/at91_piovar.h> +#include <arm/at91/at91_pio_sam9g45.h> + +BOARD_INIT long +board_init(void) +{ + + /* PIOB's A periph: Turn the debug USART's TX/RX pins */ + at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB12_DRXD, 0); + at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB13_DTXD, 1); + + return (at91_ramsize()); +} + +ARM_BOARD(SNAPPER9G45, "DesignA Electronics Snapper9G45"); diff --git a/sys/arm/at91/board_tsc4370.c b/sys/arm/at91/board_tsc4370.c index 8139a4a..7b1086b 100644 --- a/sys/arm/at91/board_tsc4370.c +++ b/sys/arm/at91/board_tsc4370.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2008 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 Warner Losh. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,38 +31,32 @@ __FBSDID("$FreeBSD$"); #include <machine/board.h> #include <arm/at91/at91board.h> +#include <arm/at91/at91var.h> #include <arm/at91/at91rm92reg.h> +#include <arm/at91/at91rm9200var.h> #include <arm/at91/at91_piovar.h> -#include <arm/at91/at91_pio_rm9200.h> +#include <arm/at91/at91_pioreg.h> BOARD_INIT long board_init(void) { - /* - * Since the USART supports RS-485 multidrop mode, it allows the - * TX pins to float. However, for RS-232 operations, we don't want - * these pins to float. Instead, they should be pulled up to avoid - * mismatches. Linux does something similar when it configures the - * TX lines. This implies that we also allow the RX lines to float - * rather than be in the state they are left in by the boot loader. - * Since they are input pins, I think that this is the right thing - * to do. - */ - /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0); - at91_pio_use_periph_a(AT91RM92_PIOA_BASE, - AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1); - /* PIOA's B periph: Turn USART 3's TX/RX pins */ - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0); - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1); - /* We're using TC0's A1 and A2 input */ - at91_pio_use_periph_b(AT91RM92_PIOA_BASE, - AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0); - /* PIOB's A periph: Turn USART 1's TX/RX pins */ - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0); - at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1); + at91rm9200_set_subtype(AT91_ST_RM9200_PQFP); + + at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); /* Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART2, 3, 0); /* Tx and Rx */ + at91rm9200_config_uart(AT91RM9200_ID_USART3, 4, 0); /* Tx and Rx */ + + at91rm9200_config_mci(0); /* tsc4370 board has only 1 wire */ + /* Newer boards may have 4 wires */ + + /* Configure TWI */ + /* Configure SPI + dataflash */ + /* Configure SSC */ + /* Configure USB Host */ + /* Configure FPGA attached to chip selects */ /* Pin assignment */ /* Assert PA24 low -- talk to rubidium */ diff --git a/sys/arm/at91/files.at91 b/sys/arm/at91/files.at91 index 8e3a75d..04dfd16 100644 --- a/sys/arm/at91/files.at91 +++ b/sys/arm/at91/files.at91 @@ -22,16 +22,18 @@ arm/at91/at91_wdt.c optional at91_wdt arm/at91/if_ate.c optional ate arm/at91/if_macb.c optional macb arm/at91/uart_bus_at91usart.c optional uart -arm/at91/uart_cpu_at91rm9200usart.c optional uart +arm/at91/uart_cpu_at91usart.c optional uart arm/at91/uart_dev_at91usart.c optional uart # # All the "systems on a chip" we support # arm/at91/at91soc.c standard arm/at91/at91rm9200.c optional at91rm9200 +arm/at91/at91rm9200_devices.c optional at91rm9200 arm/at91/at91sam9260.c optional at91sam9260 arm/at91/at91sam9g20.c optional at91sam9g20 -arm/at91/at91sam9x25.c optional at91sam9x25 +arm/at91/at91sam9g45.c optional at91sam9g45 +arm/at91/at91sam9x5.c optional at91sam9x5 # # All the boards we support # @@ -41,6 +43,15 @@ arm/at91/board_hl200.c optional at91_board_hl200 arm/at91/board_hl201.c optional at91_board_hl201 arm/at91/board_kb920x.c optional at91_board_kb920x arm/at91/board_qila9g20.c optional at91_board_qila9g20 +arm/at91/board_sam9260ek.c optional at91_board_sam9260ek arm/at91/board_sam9g20ek.c optional at91_board_sam9g20ek arm/at91/board_sam9x25ek.c optional at91_board_sam9x25ek +arm/at91/board_sn9g45.c optional at91_board_sn9g45 arm/at91/board_tsc4370.c optional at91_board_tsc4370 +# +# usb +# +dev/usb/controller/at91dci.c optional at91_dci +dev/usb/controller/at91dci_atmelarm.c optional at91_dci +dev/usb/controller/ohci_atmelarm.c optional ohci +dev/usb/controller/ehci_atmelarm.c optional ehci diff --git a/sys/arm/at91/hints.at91rm9200 b/sys/arm/at91/hints.at91rm9200 deleted file mode 100644 index 4fb861f..0000000 --- a/sys/arm/at91/hints.at91rm9200 +++ /dev/null @@ -1,68 +0,0 @@ -# $FreeBSD$ -# - -# These are the wiring for the at91rm9200. These are the built-in devices -# for that cpu. - -# DBGU is unit 0 -hint.uart.0.at="apb" -hint.uart.0.maddr="0xfffff200" -hint.uart.0.flags=0x10 -# USART0 is unit 1 -hint.uart.1.at="apb" -hint.uart.1.maddr="0xfffc0000" -# USART1 is unit 2 -hint.uart.2.at="apb" -hint.uart.2.maddr="0xfffc4000" -# USART2 is unit 3 -hint.uart.3.at="apb" -hint.uart.3.maddr="0xfffc8000" -# USART3 is unit 4 -hint.uart.4.at="apb" -hint.uart.4.maddr="0xfffcc000" - -# SSC0 -hint.ssc.0.at="apb" -hint.ssc.0.maddr="0xfffd0000" -# SSC1 -hint.ssc.1.at="apb" -hint.ssc.1.maddr="0xfffd4000" -# SSC2 -hint.ssc.1.at="apb" -hint.ssc.1.maddr="0xfffd8000" - -# TC0, TC1, TC2 -hint.tc.0.at="apb" -hint.tc.0.maddr="0xfffa0000" -# TC3, TC4, TC5 -hint.tc.1.at="apb" -hint.tc.1.maddr="0xfffa4000" - -# USB Device -hint.udp.0.at="apb" -hint.udp.0.maddr="0xfffb0000" - -# MCI -hint.mci.0.at="apb" -hint.mci.0.maddr="0xfffb4000" - -# TWI -hint.twi.0.at="apb" -hint.twi.0.maddr="0xfffb8000" - -# EMAC -hint.emac.0.at="apb" -hint.emac.0.maddr="0xfffbc000" - -# SPI -hint.spi.0.at="apb" -hint.spi.0.maddr="0xfffe0000" - -# PMC -hint.pmc.0.at="apb" -hint.pmc.0.maddr="0xfffffc00" - -# USB host (ohci) -#??? maybe this needs to be on asb instead of apb -hint.ohci.at="apb" -hint.ohci.maddr="0x00300000" diff --git a/sys/arm/at91/hints.at91sam9261 b/sys/arm/at91/hints.at91sam9261 deleted file mode 100644 index b60c60e..0000000 --- a/sys/arm/at91/hints.at91sam9261 +++ /dev/null @@ -1,67 +0,0 @@ -# $FreeBSD$ -# - -# These are the wiring for the at91sam9261. These are the built-in devices -# for that cpu. - -# DBGU is unit 0 -hint.uart.0.at="apb" -hint.uart.0.maddr="0xfffff200" -hint.uart.0.flags=0x10 -# USART0 is unit 1 -hint.uart.1.at="apb" -hint.uart.1.maddr="0xfffb0000" -# USART1 is unit 2 -hint.uart.2.at="apb" -hint.uart.2.maddr="0xfffb4000" -# USART2 is unit 3 -hint.uart.3.at="apb" -hint.uart.3.maddr="0xfffb8000" -# USART3 is unit 4 -hint.uart.4.at="apb" -hint.uart.4.maddr="0xfffbc000" - -# TC0, TC1, TC2 -hint.tc.0.at="apb" -hint.tc.0.maddr="0xfffa0000" - -# USB Device -hint.udp.0.at="apb" -hint.udp.0.maddr="0xfffa4000" - -# MCI -hint.mci.0.at="apb" -hint.mci.0.maddr="0xfffa8000" - -# TWI -hint.twi.0.at="apb" -hint.twi.0.maddr="0xfffac000" - -# SSC0 -hint.ssc.0.at="apb" -hint.ssc.0.maddr="0xfffbc000" -# SSC1 -hint.ssc.1.at="apb" -hint.ssc.1.maddr="0xfffc0000" -# SSC2 -hint.ssc.1.at="apb" -hint.ssc.1.maddr="0xfffc4000" - -# SPI0 -hint.spi.0.at="apb" -hint.spi.0.maddr="0xfffc8000" -# SSC1 -hint.spi.1.at="apb" -hint.spi.1.maddr="0xfffcc000" - -# PMC -hint.pmc.0.at="apb" -hint.pmc.0.maddr="0xfffffc00" - -# USB host (ohci) -#??? maybe this needs to be on asb instead of apb -hint.ohci.at="apb" -hint.ohci.maddr="0x00500000" -# LCD controller -hint.atlcd.at="apb" -hint.atlcd.maddr="0x00600000" diff --git a/sys/arm/at91/if_ate.c b/sys/arm/at91/if_ate.c index 3d80435..58062e7 100644 --- a/sys/arm/at91/if_ate.c +++ b/sys/arm/at91/if_ate.c @@ -569,8 +569,6 @@ ate_activate(device_t dev) /* * DMA tag and map for the TX descriptors. - * XXX Old EMAC (not EMACB) doesn't really need DMA'able - * memory. We could just malloc it. gja XXX */ if (bus_dma_tag_create(bus_get_dma_tag(dev), sizeof(eth_tx_desc_t), 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, @@ -606,11 +604,10 @@ ate_activate(device_t dev) if (sc->is_emacb) { /* Write the descriptor queue address. */ WR4(sc, ETHB_TBQP, sc->tx_desc_phys); - } - /* EMACB: Enable transceiver input clock */ - if (sc->is_emacb) + /* EMACB: Enable transceiver input clock */ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE); + } return (0); @@ -676,7 +673,7 @@ ate_deactivate(struct ate_softc *sc) } if (sc->is_emacb) - WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE); + WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE); } /* @@ -849,12 +846,11 @@ ate_intr(void *xsc) return; if (status & ETH_ISR_RCOM) { - - bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map, + bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map, BUS_DMASYNC_POSTREAD); - rxdhead = &sc->rx_descs[sc->rxhead]; - while (rxdhead->addr & ETH_CPU_OWNER) { + rxdhead = &sc->rx_descs[sc->rxhead]; + while (rxdhead->addr & ETH_CPU_OWNER) { if (!sc->is_emacb) { /* * Simulate SAM9 FIRST/LAST bits for RM9200. @@ -933,7 +929,8 @@ ate_intr(void *xsc) /* XXX Performance robbing copy. Could * recieve directly to mbufs if not an - * RM9200. XXX */ + * RM9200. And even then we could likely + * copy just the protocol headers. XXX */ m_append(mb, count, sc->rx_buf[sc->rxhead]); remain -= count; } @@ -1014,6 +1011,9 @@ ate_intr(void *xsc) BARRIER(sc, ETH_CTL, 4, BUS_SPACE_BARRIER_WRITE); WR4(sc, ETH_CTL, reg | ETH_CTL_RE); } + + /* XXX need to work around SAM9260 errata 43.2.4.1: + * disable the mac, reset tx buffer, enable mac on TUND */ } /* @@ -1269,7 +1269,7 @@ atestop(struct ate_softc *sc) /* Turn off transeiver input clock */ if (sc->is_emacb) - WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE); + WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE); /* * XXX we should power down the EMAC if it isn't in use, after diff --git a/sys/arm/at91/std.at91sam9g45 b/sys/arm/at91/std.at91sam9g45 new file mode 100644 index 0000000..7e7c1a3 --- /dev/null +++ b/sys/arm/at91/std.at91sam9g45 @@ -0,0 +1,14 @@ +# $FreeBSD$ +# +# Unlike other Atmel SoCs, which have their SDRAM at CS1, the +# at91sam9g45 family has it on CS6, so PHYSADDR must be adjusted +# accordingly. The at91sam9g45, at91sam9g46, at91sam9m10 and at91sam9m11 +# SoCs are members of this family. + +files "../at91/files.at91" +cpu CPU_ARM9 +makeoptions CONF_CFLAGS=-mcpu=arm9 +options PHYSADDR=0x70000000 + +# bring in the sam specific timers and such +device at91sam9 diff --git a/sys/arm/at91/std.atmel b/sys/arm/at91/std.atmel index c278cf0..e707da5 100644 --- a/sys/arm/at91/std.atmel +++ b/sys/arm/at91/std.atmel @@ -9,7 +9,8 @@ options PHYSADDR=0x20000000 device at91rm9200 device at91sam9260 device at91sam9g20 -device at91sam9x25 +device at91sam9g45 +device at91sam9x5 # bring in the sam specific timers and such device at91sam9 diff --git a/sys/arm/at91/std.sam9260ek b/sys/arm/at91/std.sam9260ek new file mode 100644 index 0000000..e7d1884 --- /dev/null +++ b/sys/arm/at91/std.sam9260ek @@ -0,0 +1,11 @@ +# $FreeBSD$ +include "../at91/std.at91sam9" + +options STARTUP_PAGETABLE_ADDR=0x20800000 +makeoptions KERNPHYSADDR=0x20000000 +makeoptions KERNVIRTADDR=0xc0000000 +options KERNPHYSADDR=0x20000000 +options KERNVIRTADDR=0xc0000000 + +device at91_board_sam9260ek +device at91sam9260 diff --git a/sys/arm/at91/std.sam9x25ek b/sys/arm/at91/std.sam9x25ek index 32b1f3b..661213b 100644 --- a/sys/arm/at91/std.sam9x25ek +++ b/sys/arm/at91/std.sam9x25ek @@ -8,4 +8,4 @@ options KERNPHYSADDR=0x20000000 options KERNVIRTADDR=0xc0000000 device at91_board_sam9x25ek -device at91sam9x25 +device at91sam9x5 diff --git a/sys/arm/at91/std.sn9g45 b/sys/arm/at91/std.sn9g45 new file mode 100644 index 0000000..e0d7c98 --- /dev/null +++ b/sys/arm/at91/std.sn9g45 @@ -0,0 +1,12 @@ +#$FreeBSD$ +include "../at91/std.at91sam9g45" + +options STARTUP_PAGETABLE_ADDR=0x70800000 +makeoptions KERNPHYSADDR=0x70008000 +options KERNPHYSADDR=0x70008000 +makeoptions KERNVIRTADDR=0xc0008000 +options KERNVIRTADDR=0xc0008000 + +device at91sam9g45 +device at91_board_sn9g45 + diff --git a/sys/arm/at91/uart_bus_at91usart.c b/sys/arm/at91/uart_bus_at91usart.c index b042537..98cde1d 100644 --- a/sys/arm/at91/uart_bus_at91usart.c +++ b/sys/arm/at91/uart_bus_at91usart.c @@ -95,6 +95,12 @@ usart_at91_probe(device_t dev) case 4: device_set_desc(dev, "USART3"); break; + case 5: + device_set_desc(dev, "USART4"); + break; + case 6: + device_set_desc(dev, "USART5"); + break; } sc->sc_class = &at91_usart_class; if (sc->sc_class->uc_rclk == 0) diff --git a/sys/arm/at91/uart_cpu_at91rm9200usart.c b/sys/arm/at91/uart_cpu_at91usart.c index cb39bf9..33b5621 100644 --- a/sys/arm/at91/uart_cpu_at91rm9200usart.c +++ b/sys/arm/at91/uart_cpu_at91usart.c @@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart_bus.h> #include <dev/uart/uart_cpu.h> -#include <arm/at91/at91rm92reg.h> #include <arm/at91/at91var.h> bus_space_tag_t uart_bus_space_io; @@ -71,9 +70,10 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) di->bas.bst = &at91_bs_tag; /* * XXX: Not pretty, but will work because we map the needed addresses - * early. + * early. At least we probed this so that the console will work on + * all flavors of Atmel we can detect. */ - di->bas.bsh = AT91_BASE + AT91RM92_DBGU_BASE; + di->bas.bsh = soc_info.dbgu_base; di->baudrate = 115200; di->bas.regshft = 0; di->bas.rclk = 0; diff --git a/sys/arm/conf/ATMEL b/sys/arm/conf/ATMEL index 0c4c9e0..fc23165 100644 --- a/sys/arm/conf/ATMEL +++ b/sys/arm/conf/ATMEL @@ -8,7 +8,8 @@ ident ATMEL include "../at91/std.atmel" -# Arbitrary values for testing purposes. +# Typical values for most SoCs and board configurations. Will not work for +# at91sam9g45 or on some boards with non u-boot boot loaders. options STARTUP_PAGETABLE_ADDR=0x20800000 makeoptions KERNPHYSADDR=0x20000000 makeoptions KERNVIRTADDR=0xc0000000 @@ -25,8 +26,10 @@ device at91_board_hl200 device at91_board_hl201 device at91_board_kb920x device at91_board_qila9g20 +device at91_board_sam9260ek device at91_board_sam9g20ek device at91_board_sam9x25ek +device at91_board_sn9g45 device at91_board_tsc4370 #makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols @@ -155,10 +158,16 @@ options ALT_BREAK_TO_DEBUGGER # USB support options USB_DEBUG # enable debug msgs -device ohci # OHCI PCI->USB interface +device ohci # OHCI USB interface device usb # USB Bus (required) device umass # Disks/Mass storage - Requires scbus and da +# USB device (gadget) support +device at91_dci # Atmel's usb device +device usfs # emulate a flash +device cdce # emulate an ethernet +device usb_template # Control of the gadget + # watchdog device at91_wdt # Atmel AT91 Watchdog Timer diff --git a/sys/arm/conf/ETHERNUT5 b/sys/arm/conf/ETHERNUT5 index 65490b0..ef52bc6 100644 --- a/sys/arm/conf/ETHERNUT5 +++ b/sys/arm/conf/ETHERNUT5 @@ -103,7 +103,7 @@ device bpf # Berkeley packet filter # Ethernet device mii # Minimal MII support -device ate # Atmel AT91 Ethernet friver +device ate # Atmel AT91 Ethernet driver # I2C device at91_twi # Atmel AT91 Two-wire Interface @@ -150,7 +150,7 @@ options ALT_BREAK_TO_DEBUGGER # USB support #options USB_DEBUG # enable debug msgs -device ohci # OHCI PCI->USB interface +device ohci # OHCI USB interface device usb # USB Bus (required) #device umass # Disks/Mass storage - Requires scbus and da diff --git a/sys/arm/conf/ETHERNUT5.hints b/sys/arm/conf/ETHERNUT5.hints index 6ab41a1..19be9ce 100644 --- a/sys/arm/conf/ETHERNUT5.hints +++ b/sys/arm/conf/ETHERNUT5.hints @@ -2,7 +2,7 @@ # Atmel AT45DB21D hint.at45d.0.at="spibus0" -hint.at45d.0.addr=0x00 +hint.at45d.0.cs=0 # user 132 kbytes hint.map.0.at="flash/spi0" hint.map.0.start=0x00000000 diff --git a/sys/arm/conf/HL201 b/sys/arm/conf/HL201 index 1baa357..1a143a5 100644 --- a/sys/arm/conf/HL201 +++ b/sys/arm/conf/HL201 @@ -70,7 +70,7 @@ device random device loop device ether device uart -device macb +device ate device mii #device lxtphy diff --git a/sys/arm/conf/KB920X b/sys/arm/conf/KB920X index d102f5f..8eb4b41 100644 --- a/sys/arm/conf/KB920X +++ b/sys/arm/conf/KB920X @@ -138,6 +138,12 @@ device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support device wlan_amrr # AMRR transmit rate control algorithm +# USB device (gadget) support +device at91_dci # Atmel's usb device +device usfs # emulate a flash +device cdce # emulate an ethernet +device usb_template # Control of the gadget + options IEEE80211_SUPPORT_MESH options AH_SUPPORT_AR5416 diff --git a/sys/arm/conf/QILA9G20 b/sys/arm/conf/QILA9G20 index 5a17594..9dc5032 100644 --- a/sys/arm/conf/QILA9G20 +++ b/sys/arm/conf/QILA9G20 @@ -86,7 +86,6 @@ device uart # Serial Ports # Ethernet device ate # Ethernet Driver -#device macb # Alternate Ethernet driver device mii option AT91_ATE_USE_RMII diff --git a/sys/arm/conf/SAM9260EK b/sys/arm/conf/SAM9260EK new file mode 100644 index 0000000..08b308d --- /dev/null +++ b/sys/arm/conf/SAM9260EK @@ -0,0 +1,166 @@ +# Kernel configuration for Ethernut 5 boards +# +# For more information on this file, please read the config(5) manual page, +# and/or the handbook section on Kernel Configuration Files: +# +# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +# +# The handbook is also available locally in /usr/share/doc/handbook +# if you've installed the doc distribution, otherwise always see the +# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the +# latest information. +# +# An exhaustive list of options and more detailed explanations of the +# device lines is also present in the ../../conf/NOTES and NOTES files. +# If you are in doubt as to the purpose or necessity of a line, check first +# in NOTES. +# +# $FreeBSD$ + +ident SAM9260EK + +include "../at91/std.sam9260ek" + +# To statically compile in device wiring instead of /boot/device.hints +hints "SAM9260EK.hints" + +#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols + +options SCHED_4BSD # 4BSD scheduler +#options PREEMPTION # Enable kernel thread preemption +options INET # InterNETworking +#options INET6 # IPv6 communications protocols +#options SCTP # Stream Control Transmission Protocol +options FFS # Berkeley Fast Filesystem +options SOFTUPDATES # Enable FFS soft updates support +#options UFS_ACL # Support for access control lists +options UFS_DIRHASH # Improve performance on big directories +#options UFS_GJOURNAL # Enable gjournal-based UFS journaling +#options MD_ROOT # MD is a potential root device +options NFSCL # New Network Filesystem Client +#options NFSD # New Network Filesystem Server +options NFSLOCKD # Network Lock Manager +options NFS_ROOT # NFS usable as /, requires NFSCL +#options MSDOSFS # MSDOS Filesystem +#options CD9660 # ISO 9660 Filesystem +#options PROCFS # Process filesystem (requires PSEUDOFS) +#options PSEUDOFS # Pseudo-filesystem framework +#options GEOM_PART_GPT # GUID Partition Tables. +#options GEOM_LABEL # Provides labelization +#options COMPAT_FREEBSD5 # Compatible with FreeBSD5 +#options COMPAT_FREEBSD6 # Compatible with FreeBSD6 +#options COMPAT_FREEBSD7 # Compatible with FreeBSD7 +options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI +options KTRACE # ktrace(1) support +#options STACK # stack(9) support +options SYSVSHM # SYSV-style shared memory +options SYSVMSG # SYSV-style message queues +options SYSVSEM # SYSV-style semaphores +options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions +options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. +#options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4) +#options AUDIT # Security event auditing +#options CAPABILITY_MODE # Capsicum capability mode +#options CAPABILITIES # Capsicum capabilities +#options MAC # TrustedBSD MAC Framework +#options INCLUDE_CONFIG_FILE # Include this file in kernel + +# required for netbooting +#options BOOTP +#options BOOTP_COMPAT +#options BOOTP_NFSROOT +#options BOOTP_NFSV3 +#options BOOTP_WIRED_TO=ate0 + +# alternatively, boot from a MMC/SD memory card +#options ROOTDEVNAME=\"ufs:/dev/mmcsd0s1a\" + +# Alternatively, boot from a USB card. +options ROOTDEVNAME=\"ufs:/dev/da0s1a\" + +# kernel/memory size reduction +options MUTEX_NOINLINE +options NO_FFS_SNAPSHOT +options NO_SWAPPING +options NO_SYSCTL_DESCR +options RWLOCK_NOINLINE + +# Debugging support. Always need this: +#options KDB # Enable kernel debugger support. +# For minimum debugger support (stable branch) use: +#options KDB_TRACE # Print a stack trace for a panic. +# For full debugger support use this instead: +#options DDB # Support DDB. +#options GDB # Support remote GDB. +#options DEADLKRES # Enable the deadlock resolver +#options INVARIANTS # Enable calls of extra sanity checking +#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS +#options WITNESS # Enable checks to detect deadlocks and cycles +#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed +#options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones + +# The `bpf' device enables the Berkeley Packet Filter. +# Be aware of the administrative consequences of enabling this! +# Note that 'bpf' is required for DHCP. +device bpf # Berkeley packet filter + +# Ethernet +device mii # Minimal MII support +device ate # Atmel AT91 Ethernet driver + +# I2C +device at91_twi # Atmel AT91 Two-wire Interface +device iic # I2C generic I/O device driver +device iicbus # I2C bus system +device icee # I2C eeprom + +# MMC/SD +# See comment for DataFlash below +device at91_mci # Atmel AT91 Multimedia Card Interface +options AT91_MCI_HAS_4WIRE # 4 wires +options AT91_MCI_SLOT_B # Wired to slot B +device mmc # MMC/SD bus +device mmcsd # MMC/SD memory card + +# DataFlash +# The DataFlash and MMC card are wired together, so we must pick one or the +# other. This is due to pin mux, and also due to the design of the +# SAM9260EK board. SLOT A wouldn't have this issue. +#device at91_spi # Atmel AT91 Serial Peripheral Interface +#device spibus # SPI bus +#device at45d # Atmel AT45D +#device geom_map # GEOM partition mapping + +# Pseudo devices. +device loop # Network loopback +device random # Entropy device +device ether # Ethernet support +#device vlan # 802.1Q VLAN support +#device tun # Packet tunnel. +#device md # Memory "disks" +#device gif # IPv6 and IPv4 tunneling +#device faith # IPv6-to-IPv4 relaying (translation) +#device firmware # firmware assist module + +# SCSI peripherals +device scbus # SCSI bus (required for ATA/SCSI) +#device ch # SCSI media changers +device da # Direct Access (disks) +#device sa # Sequential Access (tape etc) +device cd # CD/DVD +device pass # Passthrough device (direct ATA/SCSI access) +device ses # Enclosure Services (SES and SAF-TE) +#device ctl # CAM Target Layer + +# Serial (COM) ports +device uart # Multi-uart driver +options ALT_BREAK_TO_DEBUGGER + +# USB support +#options USB_DEBUG # enable debug msgs +device ohci # OHCI USB interface +device usb # USB Bus (required) +device umass # Disks/Mass storage - Requires scbus and da + +# watchdog +device at91_wdt # Atmel AT91 Watchdog Timer diff --git a/sys/arm/conf/SAM9260EK.hints b/sys/arm/conf/SAM9260EK.hints new file mode 100644 index 0000000..9bc2d01 --- /dev/null +++ b/sys/arm/conf/SAM9260EK.hints @@ -0,0 +1,48 @@ +# $FreeBSD$ + +# Atmel AT45DB21D +hint.at45d.0.at="spibus0" +hint.at45d.0.cs=1 +# Area 0: 00000000 to 000041FF (RO) Bootstrap +# Area 1: 00004200 to 000083FF Environment +# Area 2: 00008400 to 00041FFF (RO) U-Boot +# Area 3: 00042000 to 00251FFF Kernel +# Area 4: 00252000 to 0083FFFF FS +# bootstrap +hint.map.0.at="flash/spi0" +hint.map.0.start=0x00000000 +hint.map.0.end=0x000041ff +hint.map.0.name="bootstrap" +hint.map.0.readonly=1 +# uboot environment +hint.map.1.at="flash/spi0" +hint.map.1.start=0x00004200 +hint.map.1.end=0x00083ff +hint.map.1.name="uboot-env" +#hint.map.1.readonly=1 +# uboot +hint.map.2.at="flash/spi0" +hint.map.2.start=0x00008400 +hint.map.2.end=0x00041fff +hint.map.2.name="uboot" +hint.map.2.readonly=1 +# kernel +hint.map.3.at="flash/spi0" +hint.map.3.start=0x00042000 +hint.map.3.end=0x00251fff +hint.map.3.name="fs" +#hint.map.3.readonly=1 +# fs +hint.map.4.at="flash/spi0" +hint.map.4.start=0x00252000 +hint.map.4.end=0x0083ffff +hint.map.4.name="fs" +#hint.map.4.readonly=1 + +# EEPROM at24c512 - 512kbit 65,536x8 memory +hint.icee.0.at="iicbus0" +hint.icee.0.addr=0xa0 +hint.icee.0.type=16 +hint.icee.0.size=65536 +hint.icee.0.rd_sz=128 +hint.icee.0.wr_sz=128 diff --git a/sys/arm/conf/SAM9G20EK b/sys/arm/conf/SAM9G20EK index 5740695..2192fda 100644 --- a/sys/arm/conf/SAM9G20EK +++ b/sys/arm/conf/SAM9G20EK @@ -85,7 +85,6 @@ device uart # Serial Ports # Ethernet device ate # Ethernet Driver -#device macb # Alternate Ethernet driver device mii option AT91_ATE_USE_RMII diff --git a/sys/arm/conf/SAM9X25EK b/sys/arm/conf/SAM9X25EK index 3b5b2d7..0ae2b76 100644 --- a/sys/arm/conf/SAM9X25EK +++ b/sys/arm/conf/SAM9X25EK @@ -86,8 +86,7 @@ device md device uart # Serial Ports # Ethernet -#device ate # Ethernet Driver -device macb # Alternate Ethernet driver +device ate # Ethernet Driver device mii option AT91_ATE_USE_RMII diff --git a/sys/arm/conf/SN9G45 b/sys/arm/conf/SN9G45 new file mode 100644 index 0000000..ee0b5d9 --- /dev/null +++ b/sys/arm/conf/SN9G45 @@ -0,0 +1,129 @@ +# Kernel configuration for DesignA Electronics Snapper9G45 System on Module +# +# For more information on this file, please read the handbook section on +# Kernel Configuration Files: +# +# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +# +# The handbook is also available locally in /usr/share/doc/handbook +# if you've installed the doc distribution, otherwise always see the +# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the +# latest information. +# +# An exhaustive list of options and more detailed explanations of the +# device lines is also present in the ../../conf/NOTES and NOTES files. +# If you are in doubt as to the purpose or necessity of a line, check first +# in NOTES. +# +# $FreeBSD$ + +ident SN9G45 + +include "../at91/std.sn9g45" + +#To statically compile in device wiring instead of /boot/device.hints +#hints "SN9G45.hints" +makeoptions MODULES_OVERRIDE="" + +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options DDB +options KDB + +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +#options INET6 #IPv6 communications protocols +options FFS #Berkeley Fast Filesystem +#options SOFTUPDATES #Enable FFS soft updates support +#options UFS_ACL #Support for access control lists +#options UFS_DIRHASH #Improve performance on big directories +#options MD_ROOT #MD is a potential root device +#options MD_ROOT_SIZE=4096 # 3MB ram disk +options NFSCL #New Network Filesystem Client +#options NFSD #New Network Filesystem Server +#options NFSLOCKD #Network Lock Manager +#options NFS_ROOT #NFS usable as /, requires NFSCL +#options BOOTP_NFSROOT +#options BOOTP +#options BOOTP_NFSV3 +#options BOOTP_WIRED_TO=ate0 +#options BOOTP_COMPAT + +options ROOTDEVNAME=\"ufs:/dev/da0s1\" + +options ALT_BREAK_TO_DEBUGGER + +#options MSDOSFS #MSDOS Filesystem +#options CD9660 #ISO 9660 Filesystem +#options PROCFS #Process filesystem (requires PSEUDOFS) +#options PSEUDOFS #Pseudo-filesystem framework +options SCSI_DELAY=1000 #Delay (in ms) before probing SCSI +#options KTRACE #ktrace(1) support +options SYSVSHM #SYSV-style shared memory +options SYSVMSG #SYSV-style message queues +options SYSVSEM #SYSV-style semaphores +options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions +#options SYSCTL_OMIT_DESCR +options MUTEX_NOINLINE +options RWLOCK_NOINLINE +options NO_FFS_SNAPSHOT +options NO_SWAPPING + +# Debugging for use in -current +#options INVARIANTS #Enable calls of extra sanity checking +#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS +#options WITNESS #Enable checks to detect deadlocks and cycles +#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed +#options DIAGNOSTIC + +device random +device loop +device bpf +device ether +device md + +device uart # Serial Ports + +# Ethernet +device ate # Ethernet Driver +device mii +option AT91_ATE_USE_RMII + +device at91_wdt # WDT: Watchdog timer + +# SCSI peripherals +device scbus # SCSI bus (required for SCSI) +device da # Direct Access (disks) +device cd # CD +device pass # Passthrough device (direct SCSI access) + +# USB support +device ohci # OHCI localbus->USB interface +device usb # USB Bus (required) +device umass # Disks/Mass storage - Requires scbus and da +device uhid # "Human Interface Devices" +#device ulpt # Printer +#device udbp # USB Double Bulk Pipe devices + +# USB Ethernet, requires miibus +device miibus +#device aue # ADMtek USB Ethernet +#device axe # ASIX Electronics USB Ethernet +#device cdce # Generic USB over Ethernet +#device cue # CATC USB Ethernet +#device kue # Kawasaki LSI USB Ethernet +#device rue # RealTek RTL8150 USB Ethernet +device udav # Davicom DM9601E USB + +# USB Wireless +#device rum # Ralink Technology RT2501USB wireless NICs +#device uath # Atheros AR5523 wireless NICs +#device ural # Ralink Technology RT2500USB wireless NICs +#device zyd # ZyDAS zd1211/zd1211b wireless NICs + +# Wireless NIC cards +#device wlan # 802.11 support +#device wlan_wep # 802.11 WEP support +#device wlan_ccmp # 802.11 CCMP support +#device wlan_tkip # 802.11 TKIP support +#device wlan_amrr # AMRR transmit rate control algorithm + diff --git a/sys/arm/econa/econa.c b/sys/arm/econa/econa.c index f96dfc3..9f29a7f 100644 --- a/sys/arm/econa/econa.c +++ b/sys/arm/econa/econa.c @@ -602,8 +602,6 @@ econa_setup_intr(device_t dev, device_t child, if (error) return (error); - arm_unmask_irq(rman_get_start(ires)); - return (0); } diff --git a/sys/arm/mv/common.c b/sys/arm/mv/common.c index 06104f1..b451bf4 100644 --- a/sys/arm/mv/common.c +++ b/sys/arm/mv/common.c @@ -251,7 +251,9 @@ cpu_extra_feat(void) uint32_t ef = 0; soc_id(&dev, &rev); - if (dev == MV_DEV_88F6281 || dev == MV_DEV_MV78100_Z0 || + if (dev == MV_DEV_88F6281 || + dev == MV_DEV_88F6282 || + dev == MV_DEV_MV78100_Z0 || dev == MV_DEV_MV78100) __asm __volatile("mrc p15, 1, %0, c15, c1, 0" : "=r" (ef)); else if (dev == MV_DEV_88F5182 || dev == MV_DEV_88F5281) @@ -351,6 +353,13 @@ soc_identify(void) else if (r == 3) rev = "A1"; break; + case MV_DEV_88F6282: + dev = "Marvell 88F6282"; + if (r == 0) + rev = "A0"; + else if (r == 1) + rev = "A1"; + break; case MV_DEV_MV78100_Z0: dev = "Marvell MV78100 Z0"; break; @@ -536,6 +545,7 @@ win_cpu_can_remap(int i) if ((dev == MV_DEV_88F5182 && i < 2) || (dev == MV_DEV_88F5281 && i < 4) || (dev == MV_DEV_88F6281 && i < 4) || + (dev == MV_DEV_88F6282 && i < 4) || (dev == MV_DEV_MV78100 && i < 8) || (dev == MV_DEV_MV78100_Z0 && i < 8)) return (1); @@ -1320,7 +1330,8 @@ xor_max_eng(void) uint32_t dev, rev; soc_id(&dev, &rev); - if (dev == MV_DEV_88F6281) + if (dev == MV_DEV_88F6281 || + dev == MV_DEV_88F6282) return (2); else if ((dev == MV_DEV_MV78100) || (dev == MV_DEV_MV78100_Z0)) return (1); diff --git a/sys/arm/mv/gpio.c b/sys/arm/mv/gpio.c index ffcab14..7e4ae53 100644 --- a/sys/arm/mv/gpio.c +++ b/sys/arm/mv/gpio.c @@ -155,7 +155,8 @@ mv_gpio_attach(device_t dev) sc->pin_num = 32; sc->irq_num = 4; - } else if (dev_id == MV_DEV_88F6281) { + } else if (dev_id == MV_DEV_88F6281 || + dev_id == MV_DEV_88F6282) { sc->pin_num = 50; sc->irq_num = 7; diff --git a/sys/arm/mv/ic.c b/sys/arm/mv/ic.c index 14c6b7b..96159a7 100644 --- a/sys/arm/mv/ic.c +++ b/sys/arm/mv/ic.c @@ -105,7 +105,9 @@ mv_ic_attach(device_t dev) sc->ic_high_regs = 0; sc->ic_error_regs = 0; - if (dev_id == MV_DEV_88F6281 || dev_id == MV_DEV_MV78100 || + if (dev_id == MV_DEV_88F6281 || + dev_id == MV_DEV_88F6282 || + dev_id == MV_DEV_MV78100 || dev_id == MV_DEV_MV78100_Z0) sc->ic_high_regs = 1; diff --git a/sys/arm/mv/kirkwood/kirkwood.c b/sys/arm/mv/kirkwood/kirkwood.c index 7b0d88a..e6fd442 100644 --- a/sys/arm/mv/kirkwood/kirkwood.c +++ b/sys/arm/mv/kirkwood/kirkwood.c @@ -74,6 +74,8 @@ get_tclk(void) soc_id(&dev, &rev); if (dev == MV_DEV_88F6281 && (rev == 2 || rev == 3)) return (TCLK_200MHZ); + if (dev == MV_DEV_88F6282) + return (TCLK_200MHZ); return (TCLK_166MHZ); } diff --git a/sys/arm/mv/mv_sata.c b/sys/arm/mv/mv_sata.c index 277c837..28c641f 100644 --- a/sys/arm/mv/mv_sata.c +++ b/sys/arm/mv/mv_sata.c @@ -197,6 +197,7 @@ sata_probe(device_t dev) sc->sc_edma_qlen = 128; break; case MV_DEV_88F6281: + case MV_DEV_88F6282: case MV_DEV_MV78100: case MV_DEV_MV78100_Z0: sc->sc_version = 2; diff --git a/sys/arm/mv/mvreg.h b/sys/arm/mv/mvreg.h index 87c93e5..398fa15 100644 --- a/sys/arm/mv/mvreg.h +++ b/sys/arm/mv/mvreg.h @@ -326,6 +326,7 @@ #define MV_DEV_88F5182 0x5182 #define MV_DEV_88F5281 0x5281 #define MV_DEV_88F6281 0x6281 +#define MV_DEV_88F6282 0x6282 #define MV_DEV_MV78100_Z0 0x6381 #define MV_DEV_MV78100 0x7810 diff --git a/sys/arm/s3c2xx0/s3c24x0.c b/sys/arm/s3c2xx0/s3c24x0.c index cddd435..f90c15d 100644 --- a/sys/arm/s3c2xx0/s3c24x0.c +++ b/sys/arm/s3c2xx0/s3c24x0.c @@ -220,7 +220,6 @@ s3c24x0_setup_intr(device_t dev, device_t child, /* Enable the external interrupt pin */ s3c24x0_enable_ext_intr(irq - S3C24X0_EXTIRQ_MIN); } - arm_unmask_irq(irq); } return (0); } diff --git a/sys/arm/xscale/i8134x/i81342.c b/sys/arm/xscale/i8134x/i81342.c index 2bfab78..bb3795c 100644 --- a/sys/arm/xscale/i8134x/i81342.c +++ b/sys/arm/xscale/i8134x/i81342.c @@ -435,7 +435,6 @@ i81342_setup_intr(device_t dev, device_t child, struct resource *ires, filt, intr, arg, cookiep); if (error) return (error); - arm_unmask_irq(rman_get_start(ires)); return (0); } diff --git a/sys/arm/xscale/pxa/pxa_obio.c b/sys/arm/xscale/pxa/pxa_obio.c index 0f7e4a6..5cbb9c3 100644 --- a/sys/arm/xscale/pxa/pxa_obio.c +++ b/sys/arm/xscale/pxa/pxa_obio.c @@ -181,7 +181,6 @@ pxa_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, filter, ithread, arg, cookiep); if (error) return (error); - arm_unmask_irq(rman_get_start(irq)); return (0); } diff --git a/sys/boot/arm/at91/bootspi/ee.c b/sys/boot/arm/at91/bootspi/ee.c index 62a02d9..ef05719 100644 --- a/sys/boot/arm/at91/bootspi/ee.c +++ b/sys/boot/arm/at91/bootspi/ee.c @@ -59,11 +59,11 @@ EEInit(void) AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - pPio->PIO_ASR = AT91C_PA25_TWD | AT91C_PA26_TWCK; - pPio->PIO_PDR = AT91C_PA25_TWD | AT91C_PA26_TWCK; + pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26; + pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - pPio->PIO_MDDR = ~AT91C_PA25_TWD; - pPio->PIO_MDER = AT91C_PA25_TWD; + pPio->PIO_MDDR = ~AT91C_PIO_PA25; + pPio->PIO_MDER = AT91C_PIO_PA25; pPMC->PMC_PCER = 1u << AT91C_ID_TWI; diff --git a/sys/boot/arm/at91/libat91/at91rm9200.h b/sys/boot/arm/at91/libat91/at91rm9200.h index db76708..80d44c8 100644 --- a/sys/boot/arm/at91/libat91/at91rm9200.h +++ b/sys/boot/arm/at91/libat91/at91rm9200.h @@ -2311,7 +2311,7 @@ typedef struct _AT91S_BFC { // ========== Register definition for BFC peripheral ========== #define AT91C_BFC_MR ((AT91_REG *) 0xFFFFFFC0) // (BFC) BFC Mode Register -#include <at91/at91_pio_rm9200.h> +#include <at91/at91_pioreg.h> // ***************************************************************************** // PERIPHERAL ID DEFINITIONS FOR AT91RM9200 diff --git a/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c b/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c index fb9d9c6..1d54cfd 100644 --- a/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c +++ b/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c @@ -188,8 +188,8 @@ _init(void) AT91C_BASE_PIOC->PIO_PDR = 0xffff0000; #endif // Configure DBGU -use local routine optimized for space - AT91C_BASE_PIOA->PIO_ASR = AT91C_PA31_DTXD | AT91C_PA30_DRXD; - AT91C_BASE_PIOA->PIO_PDR = AT91C_PA31_DTXD | AT91C_PA30_DRXD; + AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA31 | AT91C_PIO_PA30; + AT91C_BASE_PIOA->PIO_PDR = AT91C_PIO_PA31 | AT91C_PIO_PA30; pUSART->US_IDR = (unsigned int) -1; pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; diff --git a/sys/boot/arm/at91/libat91/eeprom.c b/sys/boot/arm/at91/libat91/eeprom.c index f5fc52b..e08996b 100644 --- a/sys/boot/arm/at91/libat91/eeprom.c +++ b/sys/boot/arm/at91/libat91/eeprom.c @@ -58,11 +58,11 @@ InitEEPROM(void) AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - pPio->PIO_ASR = AT91C_PA25_TWD | AT91C_PA26_TWCK; - pPio->PIO_PDR = AT91C_PA25_TWD | AT91C_PA26_TWCK; + pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26; + pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - pPio->PIO_MDDR = ~AT91C_PA25_TWD; - pPio->PIO_MDER = AT91C_PA25_TWD; + pPio->PIO_MDDR = ~AT91C_PIO_PA25; + pPio->PIO_MDER = AT91C_PIO_PA25; pPMC->PMC_PCER = 1u << AT91C_ID_TWI; diff --git a/sys/boot/arm/at91/libat91/emac_init.c b/sys/boot/arm/at91/libat91/emac_init.c index 3024622..a3869b6 100644 --- a/sys/boot/arm/at91/libat91/emac_init.c +++ b/sys/boot/arm/at91/libat91/emac_init.c @@ -85,24 +85,24 @@ EMAC_SetMACAddress(unsigned char mac[6]) AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_EMAC; AT91C_BASE_PIOA->PIO_ASR = - AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | - AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | - AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | - AT91C_PA7_ETXCK_EREFCK; + AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | + AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 | + AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 | + AT91C_PIO_PA7; AT91C_BASE_PIOA->PIO_PDR = - AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | - AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | - AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | - AT91C_PA7_ETXCK_EREFCK; + AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | + AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 | + AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 | + AT91C_PIO_PA7; #if defined(BOOT_KB920X) | defined(BOOT_BWCT) /* Really !RMII */ AT91C_BASE_PIOB->PIO_BSR = - AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | - AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | - AT91C_PB18_ECOL | AT91C_PB19_ERXCK; + AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 | + AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 | + AT91C_PIO_PB18 | AT91C_PIO_PB19; AT91C_BASE_PIOB->PIO_PDR = - AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | - AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | - AT91C_PB18_ECOL | AT91C_PB19_ERXCK; + AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 | + AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 | + AT91C_PIO_PB18 | AT91C_PIO_PB19; #endif pEmac->EMAC_CTL = 0; diff --git a/sys/boot/arm/at91/libat91/lib_AT91RM9200.h b/sys/boot/arm/at91/libat91/lib_AT91RM9200.h index d5a5b67..c87512f 100644 --- a/sys/boot/arm/at91/libat91/lib_AT91RM9200.h +++ b/sys/boot/arm/at91/libat91/lib_AT91RM9200.h @@ -134,17 +134,17 @@ AT91F_MCI_CfgPIO(void) // Configure PIO controllers to periph mode AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, // PIO controller base address - ((unsigned int) AT91C_PA28_MCCDA ) | - ((unsigned int) AT91C_PA29_MCDA0 ) | - ((unsigned int) AT91C_PA27_MCCK ), // Peripheral A + ((unsigned int) AT91C_PIO_PA28 ) | + ((unsigned int) AT91C_PIO_PA29 ) | + ((unsigned int) AT91C_PIO_PA27 ), // Peripheral A 0); // Peripheral B // Configure PIO controllers to periph mode AT91F_PIO_CfgPeriph( AT91C_BASE_PIOB, // PIO controller base address 0, // Peripheral A - ((unsigned int) AT91C_PB5_MCDA3 ) | - ((unsigned int) AT91C_PB3_MCDA1 ) | - ((unsigned int) AT91C_PB4_MCDA2 )); // Peripheral B + ((unsigned int) AT91C_PIO_PB5 ) | + ((unsigned int) AT91C_PIO_PB3 ) | + ((unsigned int) AT91C_PIO_PB4 )); // Peripheral B } diff --git a/sys/boot/arm/at91/libat91/spi_flash.c b/sys/boot/arm/at91/libat91/spi_flash.c index 591b9eb..388e64e 100644 --- a/sys/boot/arm/at91/libat91/spi_flash.c +++ b/sys/boot/arm/at91/libat91/spi_flash.c @@ -223,10 +223,10 @@ SPI_InitFlash(void) // enable CS0, CLK, MOSI, MISO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - pPio->PIO_ASR = AT91C_PA3_NPCS0 | AT91C_PA1_MOSI | AT91C_PA0_MISO | - AT91C_PA2_SPCK; - pPio->PIO_PDR = AT91C_PA3_NPCS0 | AT91C_PA1_MOSI | AT91C_PA0_MISO | - AT91C_PA2_SPCK; + pPio->PIO_ASR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 | + AT91C_PIO_PA2; + pPio->PIO_PDR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 | + AT91C_PIO_PA2; // enable clocks to SPI AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_SPI; diff --git a/sys/boot/ficl/Makefile b/sys/boot/ficl/Makefile index e441573..1f8de9b 100644 --- a/sys/boot/ficl/Makefile +++ b/sys/boot/ficl/Makefile @@ -54,9 +54,11 @@ softcore.c: ${SOFTWORDS} softcore.awk | awk -f softcore.awk -v datestamp="`LC_ALL=C date`") > ${.TARGET} .if ${MACHINE_CPUARCH} == "amd64" +.if !exists(machine) ${SRCS:M*.c:R:S/$/.o/g}: machine beforedepend ${OBJS}: machine +.endif machine: ln -sf ${.CURDIR}/../../i386/include machine diff --git a/sys/boot/forth/beastie.4th b/sys/boot/forth/beastie.4th index fa455ce..5c1ca81 100644 --- a/sys/boot/forth/beastie.4th +++ b/sys/boot/forth/beastie.4th @@ -1,6 +1,6 @@ \ Copyright (c) 2003 Scott Long <scottl@freebsd.org> \ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com> -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/beastie.4th.8 b/sys/boot/forth/beastie.4th.8 index 814867d..679a082 100644 --- a/sys/boot/forth/beastie.4th.8 +++ b/sys/boot/forth/beastie.4th.8 @@ -168,4 +168,4 @@ set of commands was written by .An Scott Long Aq scottl@FreeBSD.org , .An Aleksander Fafula Aq alex@fafula.com and -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/brand.4th b/sys/boot/forth/brand.4th index 367ab93..b6f22c8 100644 --- a/sys/boot/forth/brand.4th +++ b/sys/boot/forth/brand.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/brand.4th.8 b/sys/boot/forth/brand.4th.8 index 10e8c55..64e6854 100644 --- a/sys/boot/forth/brand.4th.8 +++ b/sys/boot/forth/brand.4th.8 @@ -122,4 +122,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/check-password.4th b/sys/boot/forth/check-password.4th index 005edf1..4728fc2 100644 --- a/sys/boot/forth/check-password.4th +++ b/sys/boot/forth/check-password.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/check-password.4th.8 b/sys/boot/forth/check-password.4th.8 index 1b1d42e..b9c7b66 100644 --- a/sys/boot/forth/check-password.4th.8 +++ b/sys/boot/forth/check-password.4th.8 @@ -120,4 +120,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/color.4th b/sys/boot/forth/color.4th index d16e1b3..8d7c1ec 100644 --- a/sys/boot/forth/color.4th +++ b/sys/boot/forth/color.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/color.4th.8 b/sys/boot/forth/color.4th.8 index 6c24989..d0233ed 100644 --- a/sys/boot/forth/color.4th.8 +++ b/sys/boot/forth/color.4th.8 @@ -114,4 +114,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/delay.4th b/sys/boot/forth/delay.4th index 69b8781..0d5ecbc 100644 --- a/sys/boot/forth/delay.4th +++ b/sys/boot/forth/delay.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2008-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/delay.4th.8 b/sys/boot/forth/delay.4th.8 index 1e4e71d..dd1680e 100644 --- a/sys/boot/forth/delay.4th.8 +++ b/sys/boot/forth/delay.4th.8 @@ -123,4 +123,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/menu-commands.4th b/sys/boot/forth/menu-commands.4th index 3f36537..2006131 100644 --- a/sys/boot/forth/menu-commands.4th +++ b/sys/boot/forth/menu-commands.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/menu.4th b/sys/boot/forth/menu.4th index bf203f4..60f62b9 100644 --- a/sys/boot/forth/menu.4th +++ b/sys/boot/forth/menu.4th @@ -1,6 +1,6 @@ \ Copyright (c) 2003 Scott Long <scottl@freebsd.org> \ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com> -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/menu.4th.8 b/sys/boot/forth/menu.4th.8 index e94ee86..457952f 100644 --- a/sys/boot/forth/menu.4th.8 +++ b/sys/boot/forth/menu.4th.8 @@ -320,4 +320,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/forth/shortcuts.4th b/sys/boot/forth/shortcuts.4th index ff64162..33a1cf6 100644 --- a/sys/boot/forth/shortcuts.4th +++ b/sys/boot/forth/shortcuts.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2008-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/version.4th b/sys/boot/forth/version.4th index 8fa0b98..358b6b1 100644 --- a/sys/boot/forth/version.4th +++ b/sys/boot/forth/version.4th @@ -1,4 +1,4 @@ -\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org> +\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org> \ All rights reserved. \ \ Redistribution and use in source and binary forms, with or without diff --git a/sys/boot/forth/version.4th.8 b/sys/boot/forth/version.4th.8 index c080a5d..dc36391 100644 --- a/sys/boot/forth/version.4th.8 +++ b/sys/boot/forth/version.4th.8 @@ -123,4 +123,4 @@ The .Nm set of commands was written by .An -nosplit -.An Devin Teske Aq dteske@freebsd.org . +.An Devin Teske Aq dteske@FreeBSD.org . diff --git a/sys/boot/sparc64/loader/main.c b/sys/boot/sparc64/loader/main.c index 4cbea17..9b76f0d 100644 --- a/sys/boot/sparc64/loader/main.c +++ b/sys/boot/sparc64/loader/main.c @@ -7,7 +7,7 @@ * unchanged, you can do what ever you want with this file. */ /*- - * Copyright (c) 2008 Marius Strobl <marius@FreeBSD.org> + * Copyright (c) 2008 - 2012 Marius Strobl <marius@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -75,8 +75,6 @@ __FBSDID("$FreeBSD$"); #include "libofw.h" #include "dev_net.h" -#define MAXDEV 31 - extern char bootprog_name[], bootprog_rev[], bootprog_date[], bootprog_maker[]; enum { @@ -735,18 +733,52 @@ sparc64_zfs_probe(void) { struct vtoc8 vtoc; struct zfs_devdesc zfs_currdev; - char devname[32]; + char alias[64], devname[sizeof(alias) + sizeof(":x") - 1]; + char type[sizeof("device_type")]; + char *bdev, *dev, *odev; uint64_t guid; - int fd, part, unit; + int fd, len, part; + phandle_t aliases, options; /* Get the GUID of the ZFS pool on the boot device. */ guid = 0; zfs_probe_dev(bootpath, &guid); - for (unit = 0; unit < MAXDEV; unit++) { + /* + * Get the GUIDs of the ZFS pools on any additional disks listed in + * the boot-device environment variable. + */ + if ((aliases = OF_finddevice("/aliases")) == -1) + goto out; + options = OF_finddevice("/options"); + len = OF_getproplen(options, "boot-device"); + if (len <= 0) + goto out; + bdev = odev = malloc(len + 1); + if (bdev == NULL) + goto out; + if (OF_getprop(options, "boot-device", bdev, len) <= 0) + goto out; + bdev[len] = '\0'; + while ((dev = strsep(&bdev, " ")) != NULL) { + if (*dev == '\0') + continue; + strcpy(alias, dev); + (void)OF_getprop(aliases, dev, alias, sizeof(alias)); + /* + * Don't probe the boot disk twice. Note that bootpath + * includes the partition specifier. + */ + if (strncmp(alias, bootpath, strlen(alias)) == 0) + continue; + if (OF_getprop(OF_finddevice(alias), "device_type", type, + sizeof(type)) == -1) + continue; + if (strcmp(type, "block") != 0) + continue; + /* Find freebsd-zfs slices in the VTOC. */ - sprintf(devname, "disk%d:", unit); - fd = open(devname, O_RDONLY); + fd = open(alias, O_RDONLY); if (fd == -1) continue; lseek(fd, 0, SEEK_SET); @@ -760,12 +792,14 @@ sparc64_zfs_probe(void) if (part == 2 || vtoc.part[part].tag != VTOC_TAG_FREEBSD_ZFS) continue; - sprintf(devname, "disk%d:%c", unit, part + 'a'); + (void)sprintf(devname, "%s:%c", alias, part + 'a'); if (zfs_probe_dev(devname, NULL) == ENXIO) break; } } + free(odev); + out: if (guid != 0) { zfs_currdev.pool_guid = guid; zfs_currdev.root_guid = 0; diff --git a/sys/boot/zfs/Makefile b/sys/boot/zfs/Makefile index a6fba3a..ff423a0 100644 --- a/sys/boot/zfs/Makefile +++ b/sys/boot/zfs/Makefile @@ -33,5 +33,7 @@ machine: .include <bsd.lib.mk> .if ${MACHINE_CPUARCH} == "amd64" +.if !exists(machine) beforedepend ${OBJS}: machine .endif +.endif diff --git a/sys/cam/ata/ata_all.c b/sys/cam/ata/ata_all.c index 5135efb..6ad6df7 100644 --- a/sys/cam/ata/ata_all.c +++ b/sys/cam/ata/ata_all.c @@ -359,7 +359,7 @@ ata_28bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features, ataio->cmd.lba_low = lba; ataio->cmd.lba_mid = lba >> 8; ataio->cmd.lba_high = lba >> 16; - ataio->cmd.device = 0x40 | ((lba >> 24) & 0x0f); + ataio->cmd.device = ATA_DEV_LBA | ((lba >> 24) & 0x0f); ataio->cmd.sector_count = sector_count; } @@ -384,7 +384,7 @@ ata_48bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint16_t features, ataio->cmd.lba_low = lba; ataio->cmd.lba_mid = lba >> 8; ataio->cmd.lba_high = lba >> 16; - ataio->cmd.device = 0x40; + ataio->cmd.device = ATA_DEV_LBA; ataio->cmd.lba_low_exp = lba >> 24; ataio->cmd.lba_mid_exp = lba >> 32; ataio->cmd.lba_high_exp = lba >> 40; @@ -404,7 +404,7 @@ ata_ncq_cmd(struct ccb_ataio *ataio, uint8_t cmd, ataio->cmd.lba_low = lba; ataio->cmd.lba_mid = lba >> 8; ataio->cmd.lba_high = lba >> 16; - ataio->cmd.device = 0x40; + ataio->cmd.device = ATA_DEV_LBA; ataio->cmd.lba_low_exp = lba >> 24; ataio->cmd.lba_mid_exp = lba >> 32; ataio->cmd.lba_high_exp = lba >> 40; diff --git a/sys/cam/ata/ata_all.h b/sys/cam/ata/ata_all.h index 924fdfe..848a8fc 100644 --- a/sys/cam/ata/ata_all.h +++ b/sys/cam/ata/ata_all.h @@ -35,6 +35,7 @@ struct ccb_ataio; struct cam_periph; union ccb; +#define SID_AEN 0x04 /* Abuse inq_flags bit to track enabled AEN. */ #define SID_DMA 0x10 /* Abuse inq_flags bit to track enabled DMA. */ struct ata_cmd { diff --git a/sys/cam/ata/ata_xpt.c b/sys/cam/ata/ata_xpt.c index 20f22eb..91f985d 100644 --- a/sys/cam/ata/ata_xpt.c +++ b/sys/cam/ata/ata_xpt.c @@ -468,6 +468,12 @@ negotiate: 0, 0x02); break; case PROBE_SETAN: + /* Remember what transport thinks about AEN. */ + if (softc->caps & CTS_SATA_CAPS_H_AN) + path->device->inq_flags |= SID_AEN; + else + path->device->inq_flags &= ~SID_AEN; + xpt_async(AC_GETDEV_CHANGED, path, NULL); cam_fill_ataio(ataio, 1, probedone, @@ -1154,6 +1160,12 @@ notsata: cts.xport_specific.sata.valid = CTS_SATA_VALID_CAPS; xpt_action((union ccb *)&cts); softc->caps = caps; + /* Remember what transport thinks about AEN. */ + if (softc->caps & CTS_SATA_CAPS_H_AN) + path->device->inq_flags |= SID_AEN; + else + path->device->inq_flags &= ~SID_AEN; + xpt_async(AC_GETDEV_CHANGED, path, NULL); if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) { path->device->flags &= ~CAM_DEV_UNCONFIGURED; xpt_acquire_device(path->device); diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h index 52d7496..1f12d91 100644 --- a/sys/cam/cam_ccb.h +++ b/sys/cam/cam_ccb.h @@ -755,6 +755,7 @@ struct ccb_relsim { * Definitions for the asynchronous callback CCB fields. */ typedef enum { + AC_UNIT_ATTENTION = 0x4000,/* Device reported UNIT ATTENTION */ AC_ADVINFO_CHANGED = 0x2000,/* Advance info might have changes */ AC_CONTRACT = 0x1000,/* A contractual callback */ AC_GETDEV_CHANGED = 0x800,/* Getdev info might have changed */ diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c index d947732..4ebf84c 100644 --- a/sys/cam/cam_periph.c +++ b/sys/cam/cam_periph.c @@ -1593,6 +1593,7 @@ cam_periph_error(union ccb *ccb, cam_flags camflags, const char *action_string; cam_status status; int frozen, error, openings, print, lost_device; + int error_code, sense_key, asc, ascq; u_int32_t relsim_flags, timeout; print = 1; @@ -1759,6 +1760,12 @@ cam_periph_error(union ccb *ccb, cam_flags camflags, xpt_async(AC_LOST_DEVICE, newpath, NULL); xpt_free_path(newpath); } + + /* Broadcast UNIT ATTENTIONs to all periphs. */ + } else if (scsi_extract_sense_ccb(ccb, + &error_code, &sense_key, &asc, &ascq) && + sense_key == SSD_KEY_UNIT_ATTENTION) { + xpt_async(AC_UNIT_ATTENTION, orig_ccb->ccb_h.path, orig_ccb); } /* Attempt a retry */ diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c index 3065c12..4a174d7 100644 --- a/sys/cam/cam_xpt.c +++ b/sys/cam/cam_xpt.c @@ -4055,6 +4055,7 @@ xpt_async_string(u_int32_t async_code) case AC_GETDEV_CHANGED: return ("AC_GETDEV_CHANGED"); case AC_CONTRACT: return ("AC_CONTRACT"); case AC_ADVINFO_CHANGED: return ("AC_ADVINFO_CHANGED"); + case AC_UNIT_ATTENTION: return ("AC_UNIT_ATTENTION"); } return ("AC_UNKNOWN"); } diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c index ab51f01..a6f58dd 100644 --- a/sys/cam/ctl/scsi_ctl.c +++ b/sys/cam/ctl/scsi_ctl.c @@ -1081,11 +1081,81 @@ ctlfe_free_ccb(struct cam_periph *periph, union ccb *ccb) } } +static int +ctlfe_adjust_cdb(struct ccb_accept_tio *atio, uint32_t offset) +{ + uint64_t lba; + uint32_t num_blocks, nbc; + uint8_t *cmdbyt = (atio->ccb_h.flags & CAM_CDB_POINTER)? + atio->cdb_io.cdb_ptr : atio->cdb_io.cdb_bytes; + + nbc = offset >> 9; /* ASSUMING 512 BYTE BLOCKS */ + + switch (cmdbyt[0]) { + case READ_6: + case WRITE_6: + { + struct scsi_rw_6 *cdb = (struct scsi_rw_6 *)cmdbyt; + lba = scsi_3btoul(cdb->addr); + lba &= 0x1fffff; + num_blocks = cdb->length; + if (num_blocks == 0) + num_blocks = 256; + lba += nbc; + num_blocks -= nbc; + scsi_ulto3b(lba, cdb->addr); + cdb->length = num_blocks; + break; + } + case READ_10: + case WRITE_10: + { + struct scsi_rw_10 *cdb = (struct scsi_rw_10 *)cmdbyt; + lba = scsi_4btoul(cdb->addr); + num_blocks = scsi_2btoul(cdb->length); + lba += nbc; + num_blocks -= nbc; + scsi_ulto4b(lba, cdb->addr); + scsi_ulto2b(num_blocks, cdb->length); + break; + } + case READ_12: + case WRITE_12: + { + struct scsi_rw_12 *cdb = (struct scsi_rw_12 *)cmdbyt; + lba = scsi_4btoul(cdb->addr); + num_blocks = scsi_4btoul(cdb->length); + lba += nbc; + num_blocks -= nbc; + scsi_ulto4b(lba, cdb->addr); + scsi_ulto4b(num_blocks, cdb->length); + break; + } + case READ_16: + case WRITE_16: + { + struct scsi_rw_16 *cdb = (struct scsi_rw_16 *)cmdbyt; + lba = scsi_8btou64(cdb->addr); + num_blocks = scsi_4btoul(cdb->length); + lba += nbc; + num_blocks -= nbc; + scsi_u64to8b(lba, cdb->addr); + scsi_ulto4b(num_blocks, cdb->length); + break; + } + default: + return -1; + } + return (0); +} + static void ctlfedone(struct cam_periph *periph, union ccb *done_ccb) { struct ctlfe_lun_softc *softc; struct ctlfe_softc *bus_softc; + struct ccb_accept_tio *atio = NULL; + union ctl_io *io = NULL; #ifdef CTLFE_DEBUG printf("%s: entered, func_code = %#x, type = %#lx\n", __func__, @@ -1123,13 +1193,12 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) } switch (done_ccb->ccb_h.func_code) { case XPT_ACCEPT_TARGET_IO: { - union ctl_io *io; - struct ccb_accept_tio *atio; atio = &done_ccb->atio; softc->atios_returned++; + resubmit: /* * Allocate a ctl_io, pass it to CTL, and wait for the * datamove or done. @@ -1213,8 +1282,8 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) break; } case XPT_CONT_TARGET_IO: { - struct ccb_accept_tio *atio; - union ctl_io *io; + int srr = 0; + uint32_t srr_off = 0; atio = (struct ccb_accept_tio *)done_ccb->ccb_h.ccb_atio; io = (union ctl_io *)atio->ccb_h.io_ptr; @@ -1225,6 +1294,57 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb) __func__, atio->tag_id, done_ccb->ccb_h.flags); #endif /* + * Handle SRR case were the data pointer is pushed back hack + */ + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_MESSAGE_RECV + && done_ccb->csio.msg_ptr != NULL + && done_ccb->csio.msg_ptr[0] == MSG_EXTENDED + && done_ccb->csio.msg_ptr[1] == 5 + && done_ccb->csio.msg_ptr[2] == 0) { + srr = 1; + srr_off = + (done_ccb->csio.msg_ptr[3] << 24) + | (done_ccb->csio.msg_ptr[4] << 16) + | (done_ccb->csio.msg_ptr[5] << 8) + | (done_ccb->csio.msg_ptr[6]); + } + + if (srr && (done_ccb->ccb_h.flags & CAM_SEND_STATUS)) { + /* + * If status was being sent, the back end data is now + * history. Hack it up and resubmit a new command with + * the CDB adjusted. If the SIM does the right thing, + * all of the resid math should work. + */ + softc->ccbs_freed++; + xpt_release_ccb(done_ccb); + ctl_free_io(io); + if (ctlfe_adjust_cdb(atio, srr_off) == 0) { + done_ccb = (union ccb *)atio; + goto resubmit; + } + /* + * Fall through to doom.... + */ + } else if (srr) { + /* + * If we have an srr and we're still sending data, we + * should be able to adjust offsets and cycle again. + */ + io->scsiio.kern_rel_offset = + io->scsiio.ext_data_filled = srr_off; + io->scsiio.ext_data_len = io->scsiio.kern_total_len - + io->scsiio.kern_rel_offset; + softc->ccbs_freed++; + io->scsiio.io_hdr.status = CTL_STATUS_NONE; + xpt_release_ccb(done_ccb); + TAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h, + periph_links.tqe); + xpt_schedule(periph, /*priority*/ 1); + return; + } + + /* * If we were sending status back to the initiator, free up * resources. If we were doing a datamove, call the * datamove done routine. diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c index b5a41bb..a37ae19 100644 --- a/sys/cam/scsi/scsi_all.c +++ b/sys/cam/scsi/scsi_all.c @@ -768,7 +768,7 @@ static struct asc_table_entry asc_table[] = { * * SCSI ASC/ASCQ Assignments * Numeric Sorted Listing - * as of 7/29/08 + * as of 5/20/12 * * D - DIRECT ACCESS DEVICE (SBC-2) device column key * .T - SEQUENTIAL ACCESS DEVICE (SSC) ------------------- @@ -854,6 +854,12 @@ static struct asc_table_entry asc_table[] = { /* DT R MAEBKV */ { SST(0x00, 0x1E, SS_RDEF, /* XXX TBD */ "Conflicting SA creation request") }, + /* DT B */ + { SST(0x00, 0x1F, SS_RDEF, /* XXX TBD */ + "Logical unit transitioning to another power condition") }, + /* DT P B */ + { SST(0x00, 0x20, SS_RDEF, /* XXX TBD */ + "Extended copy information available") }, /* D W O BK */ { SST(0x01, 0x00, SS_RDEF, "No index/sector signal") }, @@ -923,6 +929,33 @@ static struct asc_table_entry asc_table[] = { /* DT R MAEBKV */ { SST(0x04, 0x13, SS_RDEF, /* XXX TBD */ "Logical unit not ready, SA creation in progress") }, + /* D B */ + { SST(0x04, 0x14, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, space allocation in progress") }, + /* M */ + { SST(0x04, 0x15, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, robotics disabled") }, + /* M */ + { SST(0x04, 0x16, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, configuration required") }, + /* M */ + { SST(0x04, 0x17, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, calibration required") }, + /* M */ + { SST(0x04, 0x18, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, a door is open") }, + /* M */ + { SST(0x04, 0x19, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, operating in sequential mode") }, + /* DT B */ + { SST(0x04, 0x1A, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, START/STOP UNIT command in progress") }, + /* D B */ + { SST(0x04, 0x1B, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, sanitize in progress") }, + /* DT MAEB */ + { SST(0x04, 0x1C, SS_RDEF, /* XXX TBD */ + "Logical unit not ready, additional power use not yet granted") }, /* DTL WROMAEBKVF */ { SST(0x05, 0x00, SS_RDEF, "Logical unit does not respond to selection") }, @@ -989,6 +1022,12 @@ static struct asc_table_entry asc_table[] = { /* DTLPWROMAEBKVF */ { SST(0x0B, 0x07, SS_RDEF, /* XXX TBD */ "Warning - degraded power to non-volatile cache") }, + /* DTLPWROMAEBKVF */ + { SST(0x0B, 0x08, SS_RDEF, /* XXX TBD */ + "Warning - power loss expected") }, + /* D */ + { SST(0x0B, 0x09, SS_RDEF, /* XXX TBD */ + "Warning - device statistics notification available") }, /* T R */ { SST(0x0C, 0x00, SS_RDEF, "Write error") }, @@ -1031,6 +1070,9 @@ static struct asc_table_entry asc_table[] = { /* DTLPWRO AEBKVF */ { SST(0x0C, 0x0D, SS_RDEF, /* XXX TBD */ "Write error - not enough unsolicited data") }, + /* DT W O BK */ + { SST(0x0C, 0x0E, SS_RDEF, /* XXX TBD */ + "Multiple write errors") }, /* R */ { SST(0x0C, 0x0F, SS_RDEF, /* XXX TBD */ "Defects in error window") }, @@ -1076,6 +1118,12 @@ static struct asc_table_entry asc_table[] = { /* DT W O */ { SST(0x10, 0x03, SS_RDEF, /* XXX TBD */ "Logical block reference tag check failed") }, + /* T */ + { SST(0x10, 0x04, SS_RDEF, /* XXX TBD */ + "Logical block protection error on recovered buffer data") }, + /* T */ + { SST(0x10, 0x05, SS_RDEF, /* XXX TBD */ + "Logical block protection method error") }, /* DT WRO BK */ { SST(0x11, 0x00, SS_FATAL|EIO, "Unrecovered read error") }, @@ -1280,6 +1328,9 @@ static struct asc_table_entry asc_table[] = { /* DT WRO BK */ { SST(0x1D, 0x00, SS_FATAL, "Miscompare during verify operation") }, + /* D B */ + { SST(0x1D, 0x01, SS_RDEF, /* XXX TBD */ + "Miscomparable verify of unmapped LBA") }, /* D W O BK */ { SST(0x1E, 0x00, SS_NOP | SSQ_PRINT_SENSE, "Recovered ID with ECC correction") }, @@ -1322,6 +1373,9 @@ static struct asc_table_entry asc_table[] = { /* DT PWROMAEBK */ { SST(0x20, 0x0B, SS_RDEF, /* XXX TBD */ "Access denied - ACL LUN conflict") }, + /* T */ + { SST(0x20, 0x0C, SS_FATAL | EINVAL, + "Illegal command when not in append-only mode") }, /* DT WRO BK */ { SST(0x21, 0x00, SS_FATAL | EINVAL, "Logical block address out of range") }, @@ -1337,6 +1391,39 @@ static struct asc_table_entry asc_table[] = { /* D */ { SST(0x22, 0x00, SS_FATAL | EINVAL, "Illegal function (use 20 00, 24 00, or 26 00)") }, + /* DT P B */ + { SST(0x23, 0x00, SS_RDEF, /* XXX TBD */ + "Invalid token operation, cause not reportable") }, + /* DT P B */ + { SST(0x23, 0x01, SS_RDEF, /* XXX TBD */ + "Invalid token operation, unsupported token type") }, + /* DT P B */ + { SST(0x23, 0x02, SS_RDEF, /* XXX TBD */ + "Invalid token operation, remote token usage not supported") }, + /* DT P B */ + { SST(0x23, 0x03, SS_RDEF, /* XXX TBD */ + "Invalid token operation, remote ROD token creation not supported") }, + /* DT P B */ + { SST(0x23, 0x04, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token unknown") }, + /* DT P B */ + { SST(0x23, 0x05, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token corrupt") }, + /* DT P B */ + { SST(0x23, 0x06, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token revoked") }, + /* DT P B */ + { SST(0x23, 0x07, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token expired") }, + /* DT P B */ + { SST(0x23, 0x08, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token cancelled") }, + /* DT P B */ + { SST(0x23, 0x09, SS_RDEF, /* XXX TBD */ + "Invalid token operation, token deleted") }, + /* DT P B */ + { SST(0x23, 0x0A, SS_RDEF, /* XXX TBD */ + "Invalid token operation, invalid token length") }, /* DTLPWROMAEBKVF */ { SST(0x24, 0x00, SS_FATAL | EINVAL, "Invalid field in CDB") }, @@ -1445,6 +1532,9 @@ static struct asc_table_entry asc_table[] = { /* R F */ { SST(0x27, 0x06, SS_RDEF, /* XXX TBD */ "Conditional write protect") }, + /* D B */ + { SST(0x27, 0x07, SS_RDEF, /* XXX TBD */ + "Space allocation failed write protect") }, /* DTLPWROMAEBKVF */ { SST(0x28, 0x00, SS_FATAL | ENXIO, "Not ready to ready change, medium may have changed") }, @@ -1543,6 +1633,9 @@ static struct asc_table_entry asc_table[] = { /* DT R MAEBKV */ { SST(0x2A, 0x14, SS_RDEF, /* XXX TBD */ "SA creation capabilities data has changed") }, + /* T M V */ + { SST(0x2A, 0x15, SS_RDEF, /* XXX TBD */ + "Medium removal prevention preempted") }, /* DTLPWRO K */ { SST(0x2B, 0x00, SS_RDEF, "Copy cannot execute since host cannot disconnect") }, @@ -1582,6 +1675,9 @@ static struct asc_table_entry asc_table[] = { /* T */ { SST(0x2C, 0x0B, SS_RDEF, /* XXX TBD */ "Not reserved") }, + /* D */ + { SST(0x2C, 0x0C, SS_RDEF, /* XXX TBD */ + "ORWRITE generation does not match") }, /* T */ { SST(0x2D, 0x00, SS_RDEF, "Overwrite error on update in place") }, @@ -1645,6 +1741,9 @@ static struct asc_table_entry asc_table[] = { /* M */ { SST(0x30, 0x12, SS_RDEF, /* XXX TBD */ "Incompatible volume qualifier") }, + /* M */ + { SST(0x30, 0x13, SS_RDEF, /* XXX TBD */ + "Cleaning volume expired") }, /* DT WRO BK */ { SST(0x31, 0x00, SS_RDEF, "Medium format corrupted") }, @@ -1654,6 +1753,9 @@ static struct asc_table_entry asc_table[] = { /* R */ { SST(0x31, 0x02, SS_RDEF, /* XXX TBD */ "Zoned formatting failed due to spare linking") }, + /* D B */ + { SST(0x31, 0x03, SS_RDEF, /* XXX TBD */ + "SANITIZE command failed") }, /* D W O BK */ { SST(0x32, 0x00, SS_RDEF, "No defect spare location available") }, @@ -1702,6 +1804,9 @@ static struct asc_table_entry asc_table[] = { /* B */ { SST(0x38, 0x06, SS_RDEF, /* XXX TBD */ "ESN - device busy class event") }, + /* D */ + { SST(0x38, 0x07, SS_RDEF, /* XXX TBD */ + "Thin provisioning soft threshold reached") }, /* DTL WROMAE K */ { SST(0x39, 0x00, SS_RDEF, "Saving parameters not supported") }, @@ -1801,6 +1906,9 @@ static struct asc_table_entry asc_table[] = { /* M */ { SST(0x3B, 0x1B, SS_RDEF, /* XXX TBD */ "Data transfer device inserted") }, + /* T */ + { SST(0x3B, 0x1C, SS_RDEF, /* XXX TBD */ + "Too many logical objects on partition to support operation") }, /* DTLPWROMAE K */ { SST(0x3D, 0x00, SS_RDEF, "Invalid bits in IDENTIFY message") }, @@ -1904,6 +2012,9 @@ static struct asc_table_entry asc_table[] = { /* DTLPWROMAEBKVF */ { SST(0x44, 0x00, SS_RDEF, "Internal target failure") }, + /* DT P MAEBKVF */ + { SST(0x44, 0x01, SS_RDEF, /* XXX TBD */ + "Persistent reservation information lost") }, /* DT B */ { SST(0x44, 0x71, SS_RDEF, /* XXX TBD */ "ATA device failed set features") }, @@ -1967,6 +2078,27 @@ static struct asc_table_entry asc_table[] = { /* DT PWROMAEBK */ { SST(0x4B, 0x06, SS_RDEF, /* XXX TBD */ "Initiator response timeout") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x07, SS_RDEF, /* XXX TBD */ + "Connection lost") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x08, SS_RDEF, /* XXX TBD */ + "Data-in buffer overflow - data buffer size") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x09, SS_RDEF, /* XXX TBD */ + "Data-in buffer overflow - data buffer descriptor area") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x0A, SS_RDEF, /* XXX TBD */ + "Data-in buffer error") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x0B, SS_RDEF, /* XXX TBD */ + "Data-out buffer overflow - data buffer size") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x0C, SS_RDEF, /* XXX TBD */ + "Data-out buffer overflow - data buffer descriptor area") }, + /* DT PWROMAEBK F */ + { SST(0x4B, 0x0D, SS_RDEF, /* XXX TBD */ + "Data-out buffer error") }, /* DTLPWROMAEBKVF */ { SST(0x4C, 0x00, SS_RDEF, "Logical unit failed self-configuration") }, @@ -2012,6 +2144,18 @@ static struct asc_table_entry asc_table[] = { /* T */ { SST(0x53, 0x04, SS_RDEF, /* XXX TBD */ "Medium thread or unthread failure") }, + /* M */ + { SST(0x53, 0x05, SS_RDEF, /* XXX TBD */ + "Volume identifier invalid") }, + /* T */ + { SST(0x53, 0x06, SS_RDEF, /* XXX TBD */ + "Volume identifier missing") }, + /* M */ + { SST(0x53, 0x07, SS_RDEF, /* XXX TBD */ + "Duplicate volume identifier") }, + /* M */ + { SST(0x53, 0x08, SS_RDEF, /* XXX TBD */ + "Element status unknown") }, /* P */ { SST(0x54, 0x00, SS_RDEF, "SCSI to host system interface failure") }, @@ -2048,6 +2192,15 @@ static struct asc_table_entry asc_table[] = { /* M */ { SST(0x55, 0x0A, SS_RDEF, /* XXX TBD */ "Data currently unavailable") }, + /* DTLPWROMAEBKVF */ + { SST(0x55, 0x0B, SS_RDEF, /* XXX TBD */ + "Insufficient power for operation") }, + /* DT P B */ + { SST(0x55, 0x0C, SS_RDEF, /* XXX TBD */ + "Insufficient resources to create ROD") }, + /* DT P B */ + { SST(0x55, 0x0D, SS_RDEF, /* XXX TBD */ + "Insufficient resources to create ROD token") }, /* R */ { SST(0x57, 0x00, SS_RDEF, "Unable to recover table-of-contents") }, @@ -2354,6 +2507,24 @@ static struct asc_table_entry asc_table[] = { /* DTLPWRO A K */ { SST(0x5E, 0x04, SS_RDEF, "Standby condition activated by command") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x05, SS_RDEF, + "Idle-B condition activated by timer") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x06, SS_RDEF, + "Idle-B condition activated by command") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x07, SS_RDEF, + "Idle-C condition activated by timer") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x08, SS_RDEF, + "Idle-C condition activated by command") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x09, SS_RDEF, + "Standby-Y condition activated by timer") }, + /* DTLPWRO A K */ + { SST(0x5E, 0x0A, SS_RDEF, + "Standby-Y condition activated by command") }, /* B */ { SST(0x5E, 0x41, SS_RDEF, /* XXX TBD */ "Power state change to active") }, diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index 7b24ddb..c102c60 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -97,6 +97,7 @@ typedef enum { CD_FLAG_NEW_DISC = 0x0002, CD_FLAG_DISC_LOCKED = 0x0004, CD_FLAG_DISC_REMOVABLE = 0x0008, + CD_FLAG_SAW_MEDIA = 0x0010, CD_FLAG_CHANGER = 0x0040, CD_FLAG_ACTIVE = 0x0080, CD_FLAG_SCHED_ON_COMP = 0x0100, @@ -110,6 +111,7 @@ typedef enum { CD_CCB_PROBE = 0x01, CD_CCB_BUFFER_IO = 0x02, CD_CCB_WAITING = 0x03, + CD_CCB_TUR = 0x04, CD_CCB_TYPE_MASK = 0x0F, CD_CCB_RETRY_UA = 0x10 } cd_ccb_state; @@ -154,12 +156,14 @@ struct cd_softc { struct cam_periph *periph; int minimum_command_size; int outstanding_cmds; + int tur; struct task sysctl_task; struct sysctl_ctx_list sysctl_ctx; struct sysctl_oid *sysctl_tree; STAILQ_HEAD(, cd_mode_params) mode_queue; struct cd_tocdata toc; struct disk *disk; + struct callout mediapoll_c; }; struct cd_page_sizes { @@ -281,6 +285,7 @@ static int cdsendkey(struct cam_periph *periph, struct dvd_authinfo *authinfo); static int cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct); +static timeout_t cdmediapoll; static struct periph_driver cddriver = { @@ -290,6 +295,9 @@ static struct periph_driver cddriver = PERIPHDRIVER_DECLARE(cd, cddriver); +#ifndef CD_DEFAULT_POLL_PERIOD +#define CD_DEFAULT_POLL_PERIOD 3 +#endif #ifndef CD_DEFAULT_RETRY #define CD_DEFAULT_RETRY 4 #endif @@ -303,6 +311,7 @@ PERIPHDRIVER_DECLARE(cd, cddriver); #define CHANGER_MAX_BUSY_SECONDS 15 #endif +static int cd_poll_period = CD_DEFAULT_POLL_PERIOD; static int cd_retry_count = CD_DEFAULT_RETRY; static int cd_timeout = CD_DEFAULT_TIMEOUT; static int changer_min_busy_seconds = CHANGER_MIN_BUSY_SECONDS; @@ -311,6 +320,9 @@ static int changer_max_busy_seconds = CHANGER_MAX_BUSY_SECONDS; static SYSCTL_NODE(_kern_cam, OID_AUTO, cd, CTLFLAG_RD, 0, "CAM CDROM driver"); static SYSCTL_NODE(_kern_cam_cd, OID_AUTO, changer, CTLFLAG_RD, 0, "CD Changer"); +SYSCTL_INT(_kern_cam_cd, OID_AUTO, poll_period, CTLFLAG_RW, + &cd_poll_period, 0, "Media polling period in seconds"); +TUNABLE_INT("kern.cam.cd.poll_period", &cd_poll_period); SYSCTL_INT(_kern_cam_cd, OID_AUTO, retry_count, CTLFLAG_RW, &cd_retry_count, 0, "Normal I/O retry count"); TUNABLE_INT("kern.cam.cd.retry_count", &cd_retry_count); @@ -494,6 +506,7 @@ cdcleanup(struct cam_periph *periph) xpt_print(periph->path, "can't remove sysctl context\n"); } + callout_drain(&softc->mediapoll_c); disk_destroy(softc->disk); free(softc, M_DEVBUF); cam_periph_lock(periph); @@ -504,6 +517,7 @@ cdasync(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg) { struct cam_periph *periph; + struct cd_softc *softc; periph = (struct cam_periph *)callback_arg; switch (code) { @@ -541,10 +555,39 @@ cdasync(void *callback_arg, u_int32_t code, break; } + case AC_UNIT_ATTENTION: + { + union ccb *ccb; + int error_code, sense_key, asc, ascq; + + softc = (struct cd_softc *)periph->softc; + ccb = (union ccb *)arg; + + /* + * Handle all media change UNIT ATTENTIONs except + * our own, as they will be handled by cderror(). + */ + if (xpt_path_periph(ccb->ccb_h.path) != periph && + scsi_extract_sense_ccb(ccb, + &error_code, &sense_key, &asc, &ascq)) { + if (asc == 0x28 && ascq == 0x00) + disk_media_changed(softc->disk, M_NOWAIT); + } + cam_periph_async(periph, code, path, arg); + break; + } + case AC_SCSI_AEN: + softc = (struct cd_softc *)periph->softc; + if (softc->state == CD_STATE_NORMAL && !softc->tur) { + if (cam_periph_acquire(periph) == CAM_REQ_CMP) { + softc->tur = 1; + xpt_schedule(periph, CAM_PRIORITY_DEV); + } + } + /* FALLTHROUGH */ case AC_SENT_BDR: case AC_BUS_RESET: { - struct cd_softc *softc; struct ccb_hdr *ccbh; softc = (struct cd_softc *)periph->softc; @@ -788,8 +831,8 @@ cdregister(struct cam_periph *periph, void *arg) * Add an async callback so that we get * notified if this device goes away. */ - xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE, - cdasync, periph, periph->path); + xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE | + AC_SCSI_AEN | AC_UNIT_ATTENTION, cdasync, periph, periph->path); /* * If the target lun is greater than 0, we most likely have a CD @@ -1005,6 +1048,17 @@ cdregister(struct cam_periph *periph, void *arg) } } + /* + * Schedule a periodic media polling events. + */ + callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0); + if ((softc->flags & CD_FLAG_DISC_REMOVABLE) && + (softc->flags & CD_FLAG_CHANGER) == 0 && + (cgd->inq_flags & SID_AEN) == 0 && + cd_poll_period != 0) + callout_reset(&softc->mediapoll_c, cd_poll_period * hz, + cdmediapoll, periph); + cdregisterexit: if ((softc->flags & CD_FLAG_CHANGER) == 0) @@ -1500,8 +1554,25 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb) periph->immediate_priority = CAM_PRIORITY_NONE; wakeup(&periph->ccb_list); } else if (bp == NULL) { - xpt_release_ccb(start_ccb); + if (softc->tur) { + softc->tur = 0; + csio = &start_ccb->csio; + scsi_test_unit_ready(csio, + /*retries*/ cd_retry_count, + cddone, + MSG_SIMPLE_Q_TAG, + SSD_FULL_SIZE, + cd_timeout); + start_ccb->ccb_h.ccb_bp = NULL; + start_ccb->ccb_h.ccb_state = CD_CCB_TUR; + xpt_action(start_ccb); + } else + xpt_release_ccb(start_ccb); } else { + if (softc->tur) { + softc->tur = 0; + cam_periph_release_locked(periph); + } bioq_remove(&softc->bio_queue, bp); scsi_read_write(&start_ccb->csio, @@ -1545,7 +1616,7 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb) xpt_action(start_ccb); } - if (bp != NULL) { + if (bp != NULL || softc->tur) { /* Have more work to do, so ensure we stay scheduled */ xpt_schedule(periph, CAM_PRIORITY_NORMAL); } @@ -1840,6 +1911,25 @@ cddone(struct cam_periph *periph, union ccb *done_ccb) wakeup(&done_ccb->ccb_h.cbfcnp); return; } + case CD_CCB_TUR: + { + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { + + if (cderror(done_ccb, CAM_RETRY_SELTO, + SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) == + ERESTART) + return; + if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); + } + xpt_release_ccb(done_ccb); + cam_periph_release_locked(periph); + return; + } default: break; } @@ -2830,7 +2920,7 @@ cdcheckmedia(struct cam_periph *periph) cdprevent(periph, PR_ALLOW); return (error); } else { - softc->flags |= CD_FLAG_VALID_MEDIA; + softc->flags |= CD_FLAG_SAW_MEDIA | CD_FLAG_VALID_MEDIA; softc->disk->d_sectorsize = softc->params.blksize; softc->disk->d_mediasize = (off_t)softc->params.blksize * softc->params.disksize; @@ -3175,6 +3265,14 @@ cderror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags) &error_code, &sense_key, &asc, &ascq)) { if (sense_key == SSD_KEY_ILLEGAL_REQUEST) error = cd6byteworkaround(ccb); + else if (sense_key == SSD_KEY_UNIT_ATTENTION && + asc == 0x28 && ascq == 0x00) + disk_media_changed(softc->disk, M_NOWAIT); + else if (sense_key == SSD_KEY_NOT_READY && + asc == 0x3a && (softc->flags & CD_FLAG_SAW_MEDIA)) { + softc->flags &= ~CD_FLAG_SAW_MEDIA; + disk_media_gone(softc->disk, M_NOWAIT); + } } if (error == ERESTART) @@ -3190,6 +3288,26 @@ cderror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags) &softc->saved_ccb)); } +static void +cdmediapoll(void *arg) +{ + struct cam_periph *periph = arg; + struct cd_softc *softc = periph->softc; + + if (softc->flags & CD_FLAG_CHANGER) + return; + + if (softc->state == CD_STATE_NORMAL && !softc->tur) { + if (cam_periph_acquire(periph) == CAM_REQ_CMP) { + softc->tur = 1; + xpt_schedule(periph, CAM_PRIORITY_DEV); + } + } + /* Queue us up again */ + if (cd_poll_period != 0) + callout_schedule(&softc->mediapoll_c, cd_poll_period * hz); +} + /* * Read table of contents */ diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c index 8a5c72a..3253e02 100644 --- a/sys/cam/scsi/scsi_da.c +++ b/sys/cam/scsi/scsi_da.c @@ -77,6 +77,7 @@ typedef enum { DA_FLAG_NEW_PACK = 0x002, DA_FLAG_PACK_LOCKED = 0x004, DA_FLAG_PACK_REMOVABLE = 0x008, + DA_FLAG_SAW_MEDIA = 0x010, DA_FLAG_NEED_OTAG = 0x020, DA_FLAG_WENT_IDLE = 0x040, DA_FLAG_RETRY_UA = 0x080, @@ -101,6 +102,7 @@ typedef enum { DA_CCB_WAITING = 0x04, DA_CCB_DUMP = 0x05, DA_CCB_DELETE = 0x06, + DA_CCB_TUR = 0x07, DA_CCB_TYPE_MASK = 0x0F, DA_CCB_RETRY_UA = 0x10 } da_ccb_state; @@ -150,6 +152,7 @@ struct da_softc { int unmap_max_ranges; int unmap_max_lba; int delete_running; + int tur; da_delete_methods delete_method; struct disk_params params; struct disk *disk; @@ -161,6 +164,7 @@ struct da_softc { uint64_t wwpn; uint8_t unmap_buf[UNMAP_MAX_RANGES * 16 + 8]; struct scsi_read_capacity_data_long rcaplong; + struct callout mediapoll_c; }; struct da_quirk_entry { @@ -857,6 +861,11 @@ static void dasetgeom(struct cam_periph *periph, uint32_t block_len, size_t rcap_size); static timeout_t dasendorderedtag; static void dashutdown(void *arg, int howto); +static timeout_t damediapoll; + +#ifndef DA_DEFAULT_POLL_PERIOD +#define DA_DEFAULT_POLL_PERIOD 3 +#endif #ifndef DA_DEFAULT_TIMEOUT #define DA_DEFAULT_TIMEOUT 60 /* Timeout in seconds */ @@ -871,12 +880,16 @@ static void dashutdown(void *arg, int howto); #endif +static int da_poll_period = DA_DEFAULT_POLL_PERIOD; static int da_retry_count = DA_DEFAULT_RETRY; static int da_default_timeout = DA_DEFAULT_TIMEOUT; static int da_send_ordered = DA_DEFAULT_SEND_ORDERED; static SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0, "CAM Direct Access Disk driver"); +SYSCTL_INT(_kern_cam_da, OID_AUTO, poll_period, CTLFLAG_RW, + &da_poll_period, 0, "Media polling period in seconds"); +TUNABLE_INT("kern.cam.da.poll_period", &da_poll_period); SYSCTL_INT(_kern_cam_da, OID_AUTO, retry_count, CTLFLAG_RW, &da_retry_count, 0, "Normal I/O retry count"); TUNABLE_INT("kern.cam.da.retry_count", &da_retry_count); @@ -966,6 +979,9 @@ daopen(struct disk *dp) (softc->quirks & DA_Q_NO_PREVENT) == 0) daprevent(periph, PR_PREVENT); + if (error == 0) + softc->flags |= DA_FLAG_SAW_MEDIA; + cam_periph_unhold(periph); cam_periph_unlock(periph); @@ -1050,7 +1066,8 @@ daschedule(struct cam_periph *periph) /* Check if we have more work to do. */ if (bioq_first(&softc->bio_queue) || - (!softc->delete_running && bioq_first(&softc->delete_queue))) { + (!softc->delete_running && bioq_first(&softc->delete_queue)) || + softc->tur) { prio = CAM_PRIORITY_NORMAL; } @@ -1297,6 +1314,7 @@ dacleanup(struct cam_periph *periph) xpt_print(periph->path, "can't remove sysctl context\n"); } + callout_drain(&softc->mediapoll_c); disk_destroy(softc->disk); callout_drain(&softc->sendordered_c); free(softc, M_DEVBUF); @@ -1308,6 +1326,7 @@ daasync(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg) { struct cam_periph *periph; + struct da_softc *softc; periph = (struct cam_periph *)callback_arg; switch (code) { @@ -1359,10 +1378,43 @@ daasync(void *callback_arg, u_int32_t code, } break; } + case AC_UNIT_ATTENTION: + { + union ccb *ccb; + int error_code, sense_key, asc, ascq; + + softc = (struct da_softc *)periph->softc; + ccb = (union ccb *)arg; + + /* + * Handle all UNIT ATTENTIONs except our own, + * as they will be handled by daerror(). + */ + if (xpt_path_periph(ccb->ccb_h.path) != periph && + scsi_extract_sense_ccb(ccb, + &error_code, &sense_key, &asc, &ascq)) { + if (asc == 0x2A && ascq == 0x09) { + xpt_print(ccb->ccb_h.path, + "capacity data has changed\n"); + dareprobe(periph); + } else if (asc == 0x28 && ascq == 0x00) + disk_media_changed(softc->disk, M_NOWAIT); + } + cam_periph_async(periph, code, path, arg); + break; + } + case AC_SCSI_AEN: + softc = (struct da_softc *)periph->softc; + if (softc->state == DA_STATE_NORMAL && !softc->tur) { + if (cam_periph_acquire(periph) == CAM_REQ_CMP) { + softc->tur = 1; + xpt_schedule(periph, CAM_PRIORITY_DEV); + } + } + /* FALLTHROUGH */ case AC_SENT_BDR: case AC_BUS_RESET: { - struct da_softc *softc; struct ccb_hdr *ccbh; softc = (struct da_softc *)periph->softc; @@ -1698,9 +1750,9 @@ daregister(struct cam_periph *periph, void *arg) * fine without them and the only alternative * would be to not attach the device on failure. */ - xpt_register_async(AC_SENT_BDR | AC_BUS_RESET - | AC_LOST_DEVICE | AC_ADVINFO_CHANGED, - daasync, periph, periph->path); + xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE | + AC_ADVINFO_CHANGED | AC_SCSI_AEN | AC_UNIT_ATTENTION, + daasync, periph, periph->path); /* * Emit an attribute changed notification just in case @@ -1710,6 +1762,16 @@ daregister(struct cam_periph *periph, void *arg) */ disk_attr_changed(softc->disk, "GEOM::physpath", M_NOWAIT); + /* + * Schedule a periodic media polling events. + */ + callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0); + if ((softc->flags & DA_FLAG_PACK_REMOVABLE) && + (cgd->inq_flags & SID_AEN) == 0 && + da_poll_period != 0) + callout_reset(&softc->mediapoll_c, da_poll_period * hz, + damediapoll, periph); + xpt_schedule(periph, CAM_PRIORITY_DEV); return(CAM_REQ_CMP); @@ -1847,9 +1909,25 @@ dastart(struct cam_periph *periph, union ccb *start_ccb) /* Run regular command. */ bp = bioq_takefirst(&softc->bio_queue); if (bp == NULL) { - xpt_release_ccb(start_ccb); + if (softc->tur) { + softc->tur = 0; + scsi_test_unit_ready(&start_ccb->csio, + /*retries*/ da_retry_count, + dadone, + MSG_SIMPLE_Q_TAG, + SSD_FULL_SIZE, + da_default_timeout * 1000); + start_ccb->ccb_h.ccb_bp = NULL; + start_ccb->ccb_h.ccb_state = DA_CCB_TUR; + xpt_action(start_ccb); + } else + xpt_release_ccb(start_ccb); break; } + if (softc->tur) { + softc->tur = 0; + cam_periph_release_locked(periph); + } if ((bp->bio_flags & BIO_ORDERED) != 0 || (softc->flags & DA_FLAG_NEED_OTAG) != 0) { @@ -2417,6 +2495,25 @@ dadone(struct cam_periph *periph, union ccb *done_ccb) case DA_CCB_DUMP: /* No-op. We're polling */ return; + case DA_CCB_TUR: + { + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { + + if (daerror(done_ccb, CAM_RETRY_SELTO, + SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) == + ERESTART) + return; + if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); + } + xpt_release_ccb(done_ccb); + cam_periph_release_locked(periph); + return; + } default: break; } @@ -2477,6 +2574,13 @@ daerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags) xpt_print(periph->path, "capacity data has changed\n"); dareprobe(periph); sense_flags |= SF_NO_PRINT; + } else if (sense_key == SSD_KEY_UNIT_ATTENTION && + asc == 0x28 && ascq == 0x00) + disk_media_changed(softc->disk, M_NOWAIT); + else if (sense_key == SSD_KEY_NOT_READY && + asc == 0x3a && (softc->flags & DA_FLAG_SAW_MEDIA)) { + softc->flags &= ~DA_FLAG_SAW_MEDIA; + disk_media_gone(softc->disk, M_NOWAIT); } } if (error == ERESTART) @@ -2493,6 +2597,23 @@ daerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags) } static void +damediapoll(void *arg) +{ + struct cam_periph *periph = arg; + struct da_softc *softc = periph->softc; + + if (softc->state == DA_STATE_NORMAL && !softc->tur) { + if (cam_periph_acquire(periph) == CAM_REQ_CMP) { + softc->tur = 1; + daschedule(periph); + } + } + /* Queue us up again */ + if (da_poll_period != 0) + callout_schedule(&softc->mediapoll_c, da_poll_period * hz); +} + +static void daprevent(struct cam_periph *periph, int action) { struct da_softc *softc; @@ -2645,7 +2766,10 @@ dasetgeom(struct cam_periph *periph, uint32_t block_len, uint64_t maxsector, else softc->disk->d_flags &= ~DISKFLAG_CANDELETE; +/* Currently as of 6/13/2012, panics if DIAGNOSTIC is set */ +#ifndef DIAGNOSTIC disk_resize(softc->disk); +#endif } static void diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c index fe2ec81..616df5b 100644 --- a/sys/cam/scsi/scsi_enc.c +++ b/sys/cam/scsi/scsi_enc.c @@ -56,8 +56,6 @@ __FBSDID("$FreeBSD$"); #include <cam/scsi/scsi_enc.h> #include <cam/scsi/scsi_enc_internal.h> -#include <opt_enc.h> - MALLOC_DEFINE(M_SCSIENC, "SCSI ENC", "SCSI ENC buffers"); /* Enclosure type independent driver */ diff --git a/sys/cam/scsi/scsi_enc_safte.c b/sys/cam/scsi/scsi_enc_safte.c index f661e51..875dec7 100644 --- a/sys/cam/scsi/scsi_enc_safte.c +++ b/sys/cam/scsi/scsi_enc_safte.c @@ -48,8 +48,6 @@ __FBSDID("$FreeBSD$"); #include <cam/scsi/scsi_enc_internal.h> #include <cam/scsi/scsi_message.h> -#include <opt_enc.h> - /* * SAF-TE Type Device Emulation */ diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c index 9b6fba3..4adb593 100644 --- a/sys/cam/scsi/scsi_enc_ses.c +++ b/sys/cam/scsi/scsi_enc_ses.c @@ -56,8 +56,6 @@ __FBSDID("$FreeBSD$"); #include <cam/scsi/scsi_enc.h> #include <cam/scsi/scsi_enc_internal.h> -#include <opt_enc.h> - /* SES Native Type Device Support */ /* SES Diagnostic Page Codes */ @@ -1473,7 +1471,7 @@ ses_process_config(enc_softc_t *enc, struct enc_fsm_state *state, out: if (err) - ses_softc_cleanup(enc); + ses_cache_free(enc, enc_cache); else { enc_update_request(enc, SES_UPDATE_GETSTATUS); enc_update_request(enc, SES_UPDATE_GETELMDESCS); diff --git a/sys/cam/scsi/scsi_ses.h b/sys/cam/scsi/scsi_ses.h index ffc5493..0aeb22e 100644 --- a/sys/cam/scsi/scsi_ses.h +++ b/sys/cam/scsi/scsi_ses.h @@ -117,7 +117,7 @@ struct ses_enc_desc { static inline uint8_t * ses_enc_desc_last_byte(struct ses_enc_desc *encdesc) { - return (&encdesc->length + encdesc->length + 1); + return (&encdesc->length + encdesc->length); } static inline struct ses_enc_desc * 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 c796533..53ce61f 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c @@ -2172,7 +2172,7 @@ spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config, if (spa_version(spa) >= SPA_VERSION_FEATURES) { boolean_t missing_feat_read = B_FALSE; - nvlist_t *unsup_feat; + nvlist_t *unsup_feat, *enabled_feat; if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_READ, &spa->spa_feat_for_read_obj) != 0) { @@ -2189,27 +2189,32 @@ spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config, return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO)); } - VERIFY(nvlist_alloc(&unsup_feat, NV_UNIQUE_NAME, KM_SLEEP) == - 0); + enabled_feat = fnvlist_alloc(); + unsup_feat = fnvlist_alloc(); if (!feature_is_supported(spa->spa_meta_objset, spa->spa_feat_for_read_obj, spa->spa_feat_desc_obj, - unsup_feat)) + unsup_feat, enabled_feat)) missing_feat_read = B_TRUE; if (spa_writeable(spa) || state == SPA_LOAD_TRYIMPORT) { if (!feature_is_supported(spa->spa_meta_objset, spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj, - unsup_feat)) + unsup_feat, enabled_feat)) { missing_feat_write = B_TRUE; + } } + fnvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_ENABLED_FEAT, enabled_feat); + if (!nvlist_empty(unsup_feat)) { - VERIFY(nvlist_add_nvlist(spa->spa_load_info, - ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat) == 0); + fnvlist_add_nvlist(spa->spa_load_info, + ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat); } - nvlist_free(unsup_feat); + fnvlist_free(enabled_feat); + fnvlist_free(unsup_feat); if (!missing_feat_read) { fnvlist_add_boolean(spa->spa_load_info, diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h index 9ff1c93..481e85b 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h @@ -35,7 +35,7 @@ extern "C" { #endif extern boolean_t feature_is_supported(objset_t *os, uint64_t obj, - uint64_t desc_obj, nvlist_t *unsup_feat); + uint64_t desc_obj, nvlist_t *unsup_feat, nvlist_t *enabled_feat); struct spa; extern void spa_feature_create_zap_objects(struct spa *, dmu_tx_t *); diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c index ba72208..b9250df 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c @@ -173,7 +173,7 @@ typedef enum { */ boolean_t feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj, - nvlist_t *unsup_feat) + nvlist_t *unsup_feat, nvlist_t *enabled_feat) { boolean_t supported; zap_cursor_t zc; @@ -186,11 +186,16 @@ feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj, ASSERT(za.za_integer_length == sizeof (uint64_t) && za.za_num_integers == 1); + if (NULL != enabled_feat) { + fnvlist_add_uint64(enabled_feat, za.za_name, + za.za_first_integer); + } + if (za.za_first_integer != 0 && !zfeature_is_supported(za.za_name)) { supported = B_FALSE; - if (unsup_feat != NULL) { + if (NULL != unsup_feat) { char *desc = ""; char buf[MAXPATHLEN]; diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c index d22edbf..3a93d6f 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c @@ -177,15 +177,9 @@ zvol_size_changed(zvol_state_t *zv) pp = zv->zv_provider; if (pp == NULL) return; - if (zv->zv_volsize == pp->mediasize) - return; - /* - * Changing provider size is not really supported by GEOM, but it - * should be safe when provider is closed. - */ - if (zv->zv_total_opens > 0) - return; - pp->mediasize = zv->zv_volsize; + g_topology_lock(); + g_resize_provider(pp, zv->zv_volsize); + g_topology_unlock(); #endif /* !sun */ } 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 f2d996a..64fd2e6 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h +++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h @@ -520,6 +520,7 @@ typedef struct zpool_rewind_policy { #define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */ #define ZPOOL_CONFIG_REWIND_INFO "rewind_info" /* not stored on disk */ #define ZPOOL_CONFIG_UNSUP_FEAT "unsup_feat" /* not stored on disk */ +#define ZPOOL_CONFIG_ENABLED_FEAT "enabled_feat" /* not stored on disk */ #define ZPOOL_CONFIG_CAN_RDONLY "can_rdonly" /* not stored on disk */ #define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read" #define ZPOOL_CONFIG_FEATURE_STATS "feature_stats" /* not stored on disk */ diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c index 4895231..1ec1509 100644 --- a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c @@ -47,6 +47,8 @@ extern uintptr_t dtrace_in_probe_addr; extern int dtrace_in_probe; +extern void dtrace_getnanotime(struct timespec *tsp); + int dtrace_invop(uintptr_t, uintptr_t *, uintptr_t); typedef struct dtrace_invop_hdlr { @@ -461,8 +463,11 @@ dtrace_gethrtime() uint64_t dtrace_gethrestime(void) { - printf("%s(%d): XXX\n",__func__,__LINE__); - return (0); + struct timespec current_time; + + dtrace_getnanotime(¤t_time); + + return (current_time.tv_sec * 1000000000ULL + current_time.tv_nsec); } /* Function to handle DTrace traps during probes. See amd64/amd64/trap.c */ diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c index e8384bf..49e5c76 100644 --- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c @@ -49,6 +49,8 @@ extern uintptr_t kernelbase; extern uintptr_t dtrace_in_probe_addr; extern int dtrace_in_probe; +extern void dtrace_getnanotime(struct timespec *tsp); + int dtrace_invop(uintptr_t, uintptr_t *, uintptr_t); typedef struct dtrace_invop_hdlr { @@ -462,8 +464,11 @@ dtrace_gethrtime() uint64_t dtrace_gethrestime(void) { - printf("%s(%d): XXX\n",__func__,__LINE__); - return (0); + struct timespec current_time; + + dtrace_getnanotime(¤t_time); + + return (current_time.tv_sec * 1000000000ULL + current_time.tv_nsec); } /* Function to handle DTrace traps during probes. See i386/i386/trap.c */ diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c index 5a7b1b8..a8e52e8 100644 --- a/sys/compat/ia32/ia32_sysvec.c +++ b/sys/compat/ia32/ia32_sysvec.c @@ -117,7 +117,7 @@ struct sysentvec ia32_freebsd_sysvec = { .sv_imgact_try = NULL, .sv_minsigstksz = MINSIGSTKSZ, .sv_pagesize = IA32_PAGE_SIZE, - .sv_minuser = 0, + .sv_minuser = FREEBSD32_MINUSER, .sv_maxuser = FREEBSD32_MAXUSER, .sv_usrstack = FREEBSD32_USRSTACK, .sv_psstrings = FREEBSD32_PS_STRINGS, diff --git a/sys/compat/ia32/ia32_util.h b/sys/compat/ia32/ia32_util.h index f153492..fe87b72 100644 --- a/sys/compat/ia32/ia32_util.h +++ b/sys/compat/ia32/ia32_util.h @@ -35,29 +35,30 @@ #include <vm/vm_param.h> #include <vm/pmap.h> - #include <sys/exec.h> #include <sys/sysent.h> #include <sys/cdefs.h> #ifdef __ia64__ -#define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE * 2) +#define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE * 2) +#define FREEBSD32_MINUSER 0 #define FREEBSD32_SHAREDPAGE 0 -#define FREEBSD32_USRSTACK FREEBSD32_MAXUSER -#else +#define FREEBSD32_USRSTACK FREEBSD32_MAXUSER +#else /* __ia64__ */ #define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE) +#define FREEBSD32_MINUSER 0 #define FREEBSD32_SHAREDPAGE (FREEBSD32_MAXUSER - IA32_PAGE_SIZE) -#define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE -#endif +#define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE +#endif /* __ia64 */ #define IA32_PAGE_SIZE 4096 #define IA32_MAXDSIZ (512*1024*1024) /* 512MB */ #define IA32_MAXSSIZ (64*1024*1024) /* 64MB */ -#define IA32_MAXVMEM 0 /* Unlimited */ +#define IA32_MAXVMEM 0 /* Unlimited */ struct syscall_args; int ia32_fetch_syscall_args(struct thread *td, struct syscall_args *sa); void ia32_set_syscall_retval(struct thread *, int); void ia32_fixlimit(struct rlimit *rl, int which); -#endif +#endif /* _COMPAT_IA32_IA32_UTIL_H */ diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm index d099256..57d7fb6 100644 --- a/sys/conf/Makefile.arm +++ b/sys/conf/Makefile.arm @@ -105,7 +105,7 @@ ${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c >opt_kernname.h eval $$(stat -s ${KERNEL_KO}.tmp) && \ echo "#define KERNSIZE $$st_size" >>opt_kernname.h - gzip -9 ${KERNEL_KO}.tmp + gzip -f9 ${KERNEL_KO}.tmp eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \ echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h ${CC} -O2 -ffreestanding -DKZIP -I. -I$S -c $S/kern/inflate.c -o \ diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 895a301..b625663 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -435,7 +435,7 @@ options KTRACE_REQUEST_POOL=101 # # KTR is a kernel tracing facility imported from BSD/OS. It is # enabled with the KTR option. KTR_ENTRIES defines the number of -# entries in the circular trace buffer; it must be a power of two. +# entries in the circular trace buffer; it may be an arbitrary number. # KTR_COMPILE defines the mask of events to compile into the kernel as # defined by the KTR_* constants in <sys/ktr.h>. KTR_MASK defines the # initial value of the ktr_mask variable which determines at runtime diff --git a/sys/conf/files b/sys/conf/files index c0c52da..6be8ccb 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -639,6 +639,7 @@ dev/aha/aha_isa.c optional aha isa dev/aha/aha_mca.c optional aha mca dev/ahb/ahb.c optional ahb eisa dev/ahci/ahci.c optional ahci pci +dev/ahci/ahciem.c optional ahci pci dev/aic/aic.c optional aic dev/aic/aic_pccard.c optional aic pccard dev/aic7xxx/ahc_eisa.c optional ahc eisa @@ -729,6 +730,8 @@ dev/ath/if_ath_led.c optional ath \ compile-with "${NORMAL_C} -I$S/dev/ath" dev/ath/if_ath_tx.c optional ath \ compile-with "${NORMAL_C} -I$S/dev/ath" +dev/ath/if_ath_tx_edma.c optional ath \ + compile-with "${NORMAL_C} -I$S/dev/ath" dev/ath/if_ath_tx_ht.c optional ath \ compile-with "${NORMAL_C} -I$S/dev/ath" dev/ath/if_ath_tdma.c optional ath \ @@ -2207,6 +2210,16 @@ dev/utopia/idtphy.c optional utopia dev/utopia/suni.c optional utopia dev/utopia/utopia.c optional utopia dev/vge/if_vge.c optional vge +# +# virtio support +# +dev/virtio/pci/virtio_pci.c optional vtnet +dev/virtio/virtio.c optional vtnet +dev/virtio/virtqueue.c optional vtnet +dev/virtio/network/if_vtnet.c optional vtnet +dev/virtio/virtio_bus_if.m optional vtnet +dev/virtio/virtio_if.m optional vtnet + dev/vkbd/vkbd.c optional vkbd dev/vr/if_vr.c optional vr pci dev/vte/if_vte.c optional vte pci @@ -3551,7 +3564,6 @@ vm/sg_pager.c standard vm/swap_pager.c standard vm/uma_core.c standard vm/uma_dbg.c standard -vm/vm_contig.c standard vm/memguard.c optional DEBUG_MEMGUARD vm/vm_fault.c standard vm/vm_glue.c standard diff --git a/sys/contrib/libfdt/fdt.c b/sys/contrib/libfdt/fdt.c index b1130c2..e56833a 100644 --- a/sys/contrib/libfdt/fdt.c +++ b/sys/contrib/libfdt/fdt.c @@ -149,6 +149,15 @@ int _fdt_check_node_offset(const void *fdt, int offset) return offset; } +int _fdt_check_prop_offset(const void *fdt, int offset) +{ + if ((offset < 0) || (offset % FDT_TAGSIZE) + || (fdt_next_tag(fdt, offset, &offset) != FDT_PROP)) + return -FDT_ERR_BADOFFSET; + + return offset; +} + int fdt_next_node(const void *fdt, int offset, int *depth) { int nextoffset = 0; diff --git a/sys/contrib/libfdt/fdt_empty_tree.c b/sys/contrib/libfdt/fdt_empty_tree.c new file mode 100644 index 0000000..f72d13b --- /dev/null +++ b/sys/contrib/libfdt/fdt_empty_tree.c @@ -0,0 +1,84 @@ +/* + * libfdt - Flat Device Tree manipulation + * Copyright (C) 2012 David Gibson, IBM Corporation. + * + * libfdt is dual licensed: you can use it either under the terms of + * the GPL, or the BSD license, at your option. + * + * a) This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301 USA + * + * Alternatively, + * + * b) 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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 "libfdt_env.h" + +#include <fdt.h> +#include <libfdt.h> + +#include "libfdt_internal.h" + +int fdt_create_empty_tree(void *buf, int bufsize) +{ + int err; + + err = fdt_create(buf, bufsize); + if (err) + return err; + + err = fdt_finish_reservemap(buf); + if (err) + return err; + + err = fdt_begin_node(buf, ""); + if (err) + return err; + + err = fdt_end_node(buf); + if (err) + return err; + + err = fdt_finish(buf); + if (err) + return err; + + return fdt_open_into(buf, buf, bufsize); +} + diff --git a/sys/contrib/libfdt/fdt_ro.c b/sys/contrib/libfdt/fdt_ro.c index 951cc74..02b6d68 100644 --- a/sys/contrib/libfdt/fdt_ro.c +++ b/sys/contrib/libfdt/fdt_ro.c @@ -105,6 +105,30 @@ int fdt_num_mem_rsv(const void *fdt) return i; } +static int _nextprop(const void *fdt, int offset) +{ + uint32_t tag; + int nextoffset; + + do { + tag = fdt_next_tag(fdt, offset, &nextoffset); + + switch (tag) { + case FDT_END: + if (nextoffset >= 0) + return -FDT_ERR_BADSTRUCTURE; + else + return nextoffset; + + case FDT_PROP: + return offset; + } + offset = nextoffset; + } while (tag == FDT_NOP); + + return -FDT_ERR_NOTFOUND; +} + int fdt_subnode_offset_namelen(const void *fdt, int offset, const char *name, int namelen) { @@ -194,52 +218,66 @@ const char *fdt_get_name(const void *fdt, int nodeoffset, int *len) return NULL; } -const struct fdt_property *fdt_get_property_namelen(const void *fdt, - int nodeoffset, - const char *name, - int namelen, int *lenp) +int fdt_first_property_offset(const void *fdt, int nodeoffset) +{ + int offset; + + if ((offset = _fdt_check_node_offset(fdt, nodeoffset)) < 0) + return offset; + + return _nextprop(fdt, offset); +} + +int fdt_next_property_offset(const void *fdt, int offset) +{ + if ((offset = _fdt_check_prop_offset(fdt, offset)) < 0) + return offset; + + return _nextprop(fdt, offset); +} + +const struct fdt_property *fdt_get_property_by_offset(const void *fdt, + int offset, + int *lenp) { - uint32_t tag; - const struct fdt_property *prop; - int offset, nextoffset; int err; + const struct fdt_property *prop; - if (((err = fdt_check_header(fdt)) != 0) - || ((err = _fdt_check_node_offset(fdt, nodeoffset)) < 0)) - goto fail; + if ((err = _fdt_check_prop_offset(fdt, offset)) < 0) { + if (lenp) + *lenp = err; + return NULL; + } - nextoffset = err; - do { - offset = nextoffset; + prop = _fdt_offset_ptr(fdt, offset); - tag = fdt_next_tag(fdt, offset, &nextoffset); - switch (tag) { - case FDT_END: - if (nextoffset < 0) - err = nextoffset; - else - /* FDT_END tag with unclosed nodes */ - err = -FDT_ERR_BADSTRUCTURE; - goto fail; + if (lenp) + *lenp = fdt32_to_cpu(prop->len); - case FDT_PROP: - prop = _fdt_offset_ptr(fdt, offset); - if (_fdt_string_eq(fdt, fdt32_to_cpu(prop->nameoff), - name, namelen)) { - /* Found it! */ - if (lenp) - *lenp = fdt32_to_cpu(prop->len); - - return prop; - } + return prop; +} + +const struct fdt_property *fdt_get_property_namelen(const void *fdt, + int offset, + const char *name, + int namelen, int *lenp) +{ + for (offset = fdt_first_property_offset(fdt, offset); + (offset >= 0); + (offset = fdt_next_property_offset(fdt, offset))) { + const struct fdt_property *prop; + + if (!(prop = fdt_get_property_by_offset(fdt, offset, lenp))) { + offset = -FDT_ERR_INTERNAL; break; } - } while ((tag != FDT_BEGIN_NODE) && (tag != FDT_END_NODE)); + if (_fdt_string_eq(fdt, fdt32_to_cpu(prop->nameoff), + name, namelen)) + return prop; + } - err = -FDT_ERR_NOTFOUND; - fail: if (lenp) - *lenp = err; + *lenp = offset; return NULL; } @@ -263,6 +301,19 @@ const void *fdt_getprop_namelen(const void *fdt, int nodeoffset, return prop->data; } +const void *fdt_getprop_by_offset(const void *fdt, int offset, + const char **namep, int *lenp) +{ + const struct fdt_property *prop; + + prop = fdt_get_property_by_offset(fdt, offset, lenp); + if (!prop) + return NULL; + if (namep) + *namep = fdt_string(fdt, fdt32_to_cpu(prop->nameoff)); + return prop->data; +} + const void *fdt_getprop(const void *fdt, int nodeoffset, const char *name, int *lenp) { diff --git a/sys/contrib/libfdt/fdt_rw.c b/sys/contrib/libfdt/fdt_rw.c index 994037b..24437df 100644 --- a/sys/contrib/libfdt/fdt_rw.c +++ b/sys/contrib/libfdt/fdt_rw.c @@ -289,6 +289,33 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, return 0; } +int fdt_appendprop(void *fdt, int nodeoffset, const char *name, + const void *val, int len) +{ + struct fdt_property *prop; + int err, oldlen, newlen; + + FDT_RW_CHECK_HEADER(fdt); + + prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen); + if (prop) { + newlen = len + oldlen; + err = _fdt_splice_struct(fdt, prop->data, + FDT_TAGALIGN(oldlen), + FDT_TAGALIGN(newlen)); + if (err) + return err; + prop->len = cpu_to_fdt32(newlen); + memcpy(prop->data + oldlen, val, len); + } else { + err = _fdt_add_property(fdt, nodeoffset, name, len, &prop); + if (err) + return err; + memcpy(prop->data, val, len); + } + return 0; +} + int fdt_delprop(void *fdt, int nodeoffset, const char *name) { struct fdt_property *prop; diff --git a/sys/contrib/libfdt/libfdt.h b/sys/contrib/libfdt/libfdt.h index 18de52b..73f4975 100644 --- a/sys/contrib/libfdt/libfdt.h +++ b/sys/contrib/libfdt/libfdt.h @@ -343,6 +343,75 @@ int fdt_path_offset(const void *fdt, const char *path); const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp); /** + * fdt_first_property_offset - find the offset of a node's first property + * @fdt: pointer to the device tree blob + * @nodeoffset: structure block offset of a node + * + * fdt_first_property_offset() finds the first property of the node at + * the given structure block offset. + * + * returns: + * structure block offset of the property (>=0), on success + * -FDT_ERR_NOTFOUND, if the requested node has no properties + * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_BEGIN_NODE tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_TRUNCATED, standard meanings. + */ +int fdt_first_property_offset(const void *fdt, int nodeoffset); + +/** + * fdt_next_property_offset - step through a node's properties + * @fdt: pointer to the device tree blob + * @offset: structure block offset of a property + * + * fdt_next_property_offset() finds the property immediately after the + * one at the given structure block offset. This will be a property + * of the same node as the given property. + * + * returns: + * structure block offset of the next property (>=0), on success + * -FDT_ERR_NOTFOUND, if the given property is the last in its node + * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_PROP tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_TRUNCATED, standard meanings. + */ +int fdt_next_property_offset(const void *fdt, int offset); + +/** + * fdt_get_property_by_offset - retrieve the property at a given offset + * @fdt: pointer to the device tree blob + * @offset: offset of the property to retrieve + * @lenp: pointer to an integer variable (will be overwritten) or NULL + * + * fdt_get_property_by_offset() retrieves a pointer to the + * fdt_property structure within the device tree blob at the given + * offset. If lenp is non-NULL, the length of the property value is + * also returned, in the integer pointed to by lenp. + * + * returns: + * pointer to the structure representing the property + * if lenp is non-NULL, *lenp contains the length of the property + * value (>=0) + * NULL, on error + * if lenp is non-NULL, *lenp contains an error code (<0): + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_TRUNCATED, standard meanings + */ +const struct fdt_property *fdt_get_property_by_offset(const void *fdt, + int offset, + int *lenp); + +/** * fdt_get_property_namelen - find a property based on substring * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to find @@ -396,6 +465,40 @@ static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset, } /** + * fdt_getprop_by_offset - retrieve the value of a property at a given offset + * @fdt: pointer to the device tree blob + * @ffset: offset of the property to read + * @namep: pointer to a string variable (will be overwritten) or NULL + * @lenp: pointer to an integer variable (will be overwritten) or NULL + * + * fdt_getprop_by_offset() retrieves a pointer to the value of the + * property at structure block offset 'offset' (this will be a pointer + * to within the device blob itself, not a copy of the value). If + * lenp is non-NULL, the length of the property value is also + * returned, in the integer pointed to by lenp. If namep is non-NULL, + * the property's namne will also be returned in the char * pointed to + * by namep (this will be a pointer to within the device tree's string + * block, not a new copy of the name). + * + * returns: + * pointer to the property's value + * if lenp is non-NULL, *lenp contains the length of the property + * value (>=0) + * if namep is non-NULL *namep contiains a pointer to the property + * name. + * NULL, on error + * if lenp is non-NULL, *lenp contains an error code (<0): + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_TRUNCATED, standard meanings + */ +const void *fdt_getprop_by_offset(const void *fdt, int offset, + const char **namep, int *lenp); + +/** * fdt_getprop_namelen - get property value based on substring * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to find @@ -749,17 +852,17 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, const void *val, int len); /** - * fdt_setprop_inplace_cell - change the value of a single-cell property + * fdt_setprop_inplace_u32 - change the value of a 32-bit integer property * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to change * @name: name of the property to change - * @val: cell (32-bit integer) value to replace the property with + * @val: 32-bit integer value to replace the property with * - * fdt_setprop_inplace_cell() replaces the value of a given property - * with the 32-bit integer cell value in val, converting val to - * big-endian if necessary. This function cannot change the size of a - * property, and so will only work if the property already exists and - * has length 4. + * fdt_setprop_inplace_u32() replaces the value of a given property + * with the 32-bit integer value in val, converting val to big-endian + * if necessary. This function cannot change the size of a property, + * and so will only work if the property already exists and has length + * 4. * * This function will alter only the bytes in the blob which contain * the given property value, and will not alter or move any other part @@ -768,7 +871,7 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, * returns: * 0, on success * -FDT_ERR_NOSPACE, if the property's length is not equal to 4 - * -FDT_ERR_NOTFOUND, node does not have the named property + * -FDT_ERR_NOTFOUND, node does not have the named property * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag * -FDT_ERR_BADMAGIC, * -FDT_ERR_BADVERSION, @@ -776,14 +879,60 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, * -FDT_ERR_BADSTRUCTURE, * -FDT_ERR_TRUNCATED, standard meanings */ -static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset, - const char *name, uint32_t val) +static inline int fdt_setprop_inplace_u32(void *fdt, int nodeoffset, + const char *name, uint32_t val) { val = cpu_to_fdt32(val); return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val)); } /** + * fdt_setprop_inplace_u64 - change the value of a 64-bit integer property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to change + * @val: 64-bit integer value to replace the property with + * + * fdt_setprop_inplace_u64() replaces the value of a given property + * with the 64-bit integer value in val, converting val to big-endian + * if necessary. This function cannot change the size of a property, + * and so will only work if the property already exists and has length + * 8. + * + * This function will alter only the bytes in the blob which contain + * the given property value, and will not alter or move any other part + * of the tree. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, if the property's length is not equal to 8 + * -FDT_ERR_NOTFOUND, node does not have the named property + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_TRUNCATED, standard meanings + */ +static inline int fdt_setprop_inplace_u64(void *fdt, int nodeoffset, + const char *name, uint64_t val) +{ + val = cpu_to_fdt64(val); + return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val)); +} + +/** + * fdt_setprop_inplace_cell - change the value of a single-cell property + * + * This is an alternative name for fdt_setprop_inplace_u32() + */ +static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset, + const char *name, uint32_t val) +{ + return fdt_setprop_inplace_u32(fdt, nodeoffset, name, val); +} + +/** * fdt_nop_property - replace a property with nop tags * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to nop @@ -842,11 +991,20 @@ int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size); int fdt_finish_reservemap(void *fdt); int fdt_begin_node(void *fdt, const char *name); int fdt_property(void *fdt, const char *name, const void *val, int len); -static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val) +static inline int fdt_property_u32(void *fdt, const char *name, uint32_t val) { val = cpu_to_fdt32(val); return fdt_property(fdt, name, &val, sizeof(val)); } +static inline int fdt_property_u64(void *fdt, const char *name, uint64_t val) +{ + val = cpu_to_fdt64(val); + return fdt_property(fdt, name, &val, sizeof(val)); +} +static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val) +{ + return fdt_property_u32(fdt, name, val); +} #define fdt_property_string(fdt, name, str) \ fdt_property(fdt, name, str, strlen(str)+1) int fdt_end_node(void *fdt); @@ -856,6 +1014,7 @@ int fdt_finish(void *fdt); /* Read-write functions */ /**********************************************************************/ +int fdt_create_empty_tree(void *buf, int bufsize); int fdt_open_into(const void *fdt, void *buf, int bufsize); int fdt_pack(void *fdt); @@ -965,14 +1124,14 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, const void *val, int len); /** - * fdt_setprop_cell - set a property to a single cell value + * fdt_setprop_u32 - set a property to a 32-bit integer * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to change * @name: name of the property to change * @val: 32-bit integer value for the property (native endian) * - * fdt_setprop_cell() sets the value of the named property in the - * given node to the given cell value (converting to big-endian if + * fdt_setprop_u32() sets the value of the named property in the given + * node to the given 32-bit integer value (converting to big-endian if * necessary), or creates a new property with that value if it does * not already exist. * @@ -992,14 +1151,60 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name, * -FDT_ERR_BADLAYOUT, * -FDT_ERR_TRUNCATED, standard meanings */ -static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name, - uint32_t val) +static inline int fdt_setprop_u32(void *fdt, int nodeoffset, const char *name, + uint32_t val) { val = cpu_to_fdt32(val); return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val)); } /** + * fdt_setprop_u64 - set a property to a 64-bit integer + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to change + * @val: 64-bit integer value for the property (native endian) + * + * fdt_setprop_u64() sets the value of the named property in the given + * node to the given 64-bit integer value (converting to big-endian if + * necessary), or creates a new property with that value if it does + * not already exist. + * + * This function may insert or delete data from the blob, and will + * therefore change the offsets of some existing nodes. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to + * contain the new property value + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_TRUNCATED, standard meanings + */ +static inline int fdt_setprop_u64(void *fdt, int nodeoffset, const char *name, + uint64_t val) +{ + val = cpu_to_fdt64(val); + return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val)); +} + +/** + * fdt_setprop_cell - set a property to a single cell value + * + * This is an alternative name for fdt_setprop_u32() + */ +static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name, + uint32_t val) +{ + return fdt_setprop_u32(fdt, nodeoffset, name, val); +} + +/** * fdt_setprop_string - set a property to a string value * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to change @@ -1031,6 +1236,147 @@ static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name, fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) /** + * fdt_appendprop - append to or create a property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to append to + * @val: pointer to data to append to the property value + * @len: length of the data to append to the property value + * + * fdt_appendprop() appends the value to the named property in the + * given node, creating the property if it does not already exist. + * + * This function may insert data into the blob, and will therefore + * change the offsets of some existing nodes. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to + * contain the new property value + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_TRUNCATED, standard meanings + */ +int fdt_appendprop(void *fdt, int nodeoffset, const char *name, + const void *val, int len); + +/** + * fdt_appendprop_u32 - append a 32-bit integer value to a property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to change + * @val: 32-bit integer value to append to the property (native endian) + * + * fdt_appendprop_u32() appends the given 32-bit integer value + * (converting to big-endian if necessary) to the value of the named + * property in the given node, or creates a new property with that + * value if it does not already exist. + * + * This function may insert data into the blob, and will therefore + * change the offsets of some existing nodes. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to + * contain the new property value + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_TRUNCATED, standard meanings + */ +static inline int fdt_appendprop_u32(void *fdt, int nodeoffset, + const char *name, uint32_t val) +{ + val = cpu_to_fdt32(val); + return fdt_appendprop(fdt, nodeoffset, name, &val, sizeof(val)); +} + +/** + * fdt_appendprop_u64 - append a 64-bit integer value to a property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to change + * @val: 64-bit integer value to append to the property (native endian) + * + * fdt_appendprop_u64() appends the given 64-bit integer value + * (converting to big-endian if necessary) to the value of the named + * property in the given node, or creates a new property with that + * value if it does not already exist. + * + * This function may insert data into the blob, and will therefore + * change the offsets of some existing nodes. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to + * contain the new property value + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_TRUNCATED, standard meanings + */ +static inline int fdt_appendprop_u64(void *fdt, int nodeoffset, + const char *name, uint64_t val) +{ + val = cpu_to_fdt64(val); + return fdt_appendprop(fdt, nodeoffset, name, &val, sizeof(val)); +} + +/** + * fdt_appendprop_cell - append a single cell value to a property + * + * This is an alternative name for fdt_appendprop_u32() + */ +static inline int fdt_appendprop_cell(void *fdt, int nodeoffset, + const char *name, uint32_t val) +{ + return fdt_appendprop_u32(fdt, nodeoffset, name, val); +} + +/** + * fdt_appendprop_string - append a string to a property + * @fdt: pointer to the device tree blob + * @nodeoffset: offset of the node whose property to change + * @name: name of the property to change + * @str: string value to append to the property + * + * fdt_appendprop_string() appends the given string to the value of + * the named property in the given node, or creates a new property + * with that value if it does not already exist. + * + * This function may insert data into the blob, and will therefore + * change the offsets of some existing nodes. + * + * returns: + * 0, on success + * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to + * contain the new property value + * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_BADVERSION, + * -FDT_ERR_BADSTATE, + * -FDT_ERR_BADSTRUCTURE, + * -FDT_ERR_BADLAYOUT, + * -FDT_ERR_TRUNCATED, standard meanings + */ +#define fdt_appendprop_string(fdt, nodeoffset, name, str) \ + fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1) + +/** * fdt_delprop - delete a property * @fdt: pointer to the device tree blob * @nodeoffset: offset of the node whose property to nop diff --git a/sys/contrib/libfdt/libfdt_env.h b/sys/contrib/libfdt/libfdt_env.h index 7ac3f52..f91f137 100644 --- a/sys/contrib/libfdt/libfdt_env.h +++ b/sys/contrib/libfdt/libfdt_env.h @@ -13,19 +13,25 @@ #include <string.h> #endif -#define _B(n) ((unsigned long long)((uint8_t *)&x)[n]) +#define EXTRACT_BYTE(n) ((unsigned long long)((uint8_t *)&x)[n]) +static inline uint16_t fdt16_to_cpu(uint16_t x) +{ + return (EXTRACT_BYTE(0) << 8) | EXTRACT_BYTE(1); +} +#define cpu_to_fdt16(x) fdt16_to_cpu(x) + static inline uint32_t fdt32_to_cpu(uint32_t x) { - return (_B(0) << 24) | (_B(1) << 16) | (_B(2) << 8) | _B(3); + return (EXTRACT_BYTE(0) << 24) | (EXTRACT_BYTE(1) << 16) | (EXTRACT_BYTE(2) << 8) | EXTRACT_BYTE(3); } #define cpu_to_fdt32(x) fdt32_to_cpu(x) static inline uint64_t fdt64_to_cpu(uint64_t x) { - return (_B(0) << 56) | (_B(1) << 48) | (_B(2) << 40) | (_B(3) << 32) - | (_B(4) << 24) | (_B(5) << 16) | (_B(6) << 8) | _B(7); + return (EXTRACT_BYTE(0) << 56) | (EXTRACT_BYTE(1) << 48) | (EXTRACT_BYTE(2) << 40) | (EXTRACT_BYTE(3) << 32) + | (EXTRACT_BYTE(4) << 24) | (EXTRACT_BYTE(5) << 16) | (EXTRACT_BYTE(6) << 8) | EXTRACT_BYTE(7); } #define cpu_to_fdt64(x) fdt64_to_cpu(x) -#undef _B +#undef EXTRACT_BYTE #endif /* _LIBFDT_ENV_H */ diff --git a/sys/contrib/libfdt/libfdt_internal.h b/sys/contrib/libfdt/libfdt_internal.h index d2dcbd6..381133b 100644 --- a/sys/contrib/libfdt/libfdt_internal.h +++ b/sys/contrib/libfdt/libfdt_internal.h @@ -63,6 +63,7 @@ } int _fdt_check_node_offset(const void *fdt, int offset); +int _fdt_check_prop_offset(const void *fdt, int offset); const char *_fdt_find_string(const char *strtab, int tabsize, const char *s); int _fdt_node_end_offset(void *fdt, int nodeoffset); diff --git a/sys/contrib/pf/net/pf_if.c b/sys/contrib/pf/net/pf_if.c index 6336c79..b4491b8 100644 --- a/sys/contrib/pf/net/pf_if.c +++ b/sys/contrib/pf/net/pf_if.c @@ -506,8 +506,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af) if (aw->type != PF_ADDR_DYNIFTL) return (0); #ifdef __FreeBSD__ - /* XXX: revisit! */ - if ((dyn = pool_get(&V_pfi_addr_pl, PR_WAITOK | PR_ZERO)) + if ((dyn = pool_get(&V_pfi_addr_pl, PR_NOWAIT | PR_ZERO)) #else if ((dyn = pool_get(&pfi_addr_pl, PR_WAITOK | PR_LIMITFAIL | PR_ZERO)) #endif diff --git a/sys/dev/aac/aac_disk.c b/sys/dev/aac/aac_disk.c index e4042f7..f2f6636 100644 --- a/sys/dev/aac/aac_disk.c +++ b/sys/dev/aac/aac_disk.c @@ -334,8 +334,10 @@ aac_biodone(struct bio *bp) { fwprintf(NULL, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, ""); - if (bp->bio_flags & BIO_ERROR) + if (bp->bio_flags & BIO_ERROR) { + bp->bio_resid = bp->bio_bcount; disk_err(bp, "hard error", -1, 1); + } biodone(bp); } diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c index 0f2f7f9..d35a526 100644 --- a/sys/dev/acpica/acpi_cpu.c +++ b/sys/dev/acpica/acpi_cpu.c @@ -89,6 +89,7 @@ struct acpi_cpu_softc { struct sysctl_ctx_list cpu_sysctl_ctx; struct sysctl_oid *cpu_sysctl_tree; int cpu_cx_lowest; + int cpu_cx_lowest_lim; char cpu_cx_supported[64]; int cpu_rid; }; @@ -138,13 +139,12 @@ static int cpu_quirks; /* Indicate any hardware bugs. */ /* Runtime state. */ static int cpu_disable_idle; /* Disable entry to idle function */ -static int cpu_cx_count; /* Number of valid Cx states */ /* Values for sysctl. */ static struct sysctl_ctx_list cpu_sysctl_ctx; static struct sysctl_oid *cpu_sysctl_tree; static int cpu_cx_generic; -static int cpu_cx_lowest; +static int cpu_cx_lowest_lim; static device_t *cpu_devices; static int cpu_ndevices; @@ -173,7 +173,7 @@ static void acpi_cpu_idle(void); static void acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context); static int acpi_cpu_quirks(void); static int acpi_cpu_usage_sysctl(SYSCTL_HANDLER_ARGS); -static int acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc, int val); +static int acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc); static int acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS); static int acpi_cpu_global_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS); @@ -590,6 +590,7 @@ acpi_cpu_cx_probe(struct acpi_cpu_softc *sc) /* Use initial sleep value of 1 sec. to start with lowest idle state. */ sc->cpu_prev_sleep = 1000000; sc->cpu_cx_lowest = 0; + sc->cpu_cx_lowest_lim = 0; /* * Check for the ACPI 2.0 _CST sleep states object. If we can't find @@ -820,7 +821,6 @@ acpi_cpu_startup(void *arg) */ acpi_cpu_quirks(); - cpu_cx_count = 0; if (cpu_cx_generic) { /* * We are using generic Cx mode, probe for available Cx states @@ -829,24 +829,10 @@ acpi_cpu_startup(void *arg) for (i = 0; i < cpu_ndevices; i++) { sc = device_get_softc(cpu_devices[i]); acpi_cpu_generic_cx_probe(sc); - if (sc->cpu_cx_count > cpu_cx_count) - cpu_cx_count = sc->cpu_cx_count; - } - - /* - * Find the highest Cx state common to all CPUs - * in the system, taking quirks into account. - */ - for (i = 0; i < cpu_ndevices; i++) { - sc = device_get_softc(cpu_devices[i]); - if (sc->cpu_cx_count < cpu_cx_count) - cpu_cx_count = sc->cpu_cx_count; } } else { /* * We are using _CST mode, remove C3 state if necessary. - * Update the largest Cx state supported in the global cpu_cx_count. - * It will be used in the global Cx sysctl handler. * As we now know for sure that we will be using _CST mode * install our notify handler. */ @@ -855,8 +841,6 @@ acpi_cpu_startup(void *arg) if (cpu_quirks & CPU_QUIRK_NO_C3) { sc->cpu_cx_count = sc->cpu_non_c3 + 1; } - if (sc->cpu_cx_count > cpu_cx_count) - cpu_cx_count = sc->cpu_cx_count; AcpiInstallNotifyHandler(sc->cpu_handle, ACPI_DEVICE_NOTIFY, acpi_cpu_notify, sc); } @@ -875,7 +859,7 @@ acpi_cpu_startup(void *arg) "Global lowest Cx sleep state to use"); /* Take over idling from cpu_idle_default(). */ - cpu_cx_lowest = 0; + cpu_cx_lowest_lim = 0; cpu_disable_idle = FALSE; cpu_idle_hook = acpi_cpu_idle; } @@ -892,7 +876,8 @@ acpi_cpu_cx_list(struct acpi_cpu_softc *sc) sbuf_new(&sb, sc->cpu_cx_supported, sizeof(sc->cpu_cx_supported), SBUF_FIXEDLEN); for (i = 0; i < sc->cpu_cx_count; i++) - sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat); + sbuf_printf(&sb, "C%d/%d/%d ", i + 1, sc->cpu_cx_states[i].type, + sc->cpu_cx_states[i].trans_lat); sbuf_trim(&sb); sbuf_finish(&sb); } @@ -937,6 +922,7 @@ acpi_cpu_idle() { struct acpi_cpu_softc *sc; struct acpi_cx *cx_next; + uint64_t cputicks; uint32_t start_time, end_time; int bm_active, cx_next_idx, i; @@ -976,11 +962,12 @@ acpi_cpu_idle() * driver polling for new devices keeps this bit set all the * time if USB is loaded. */ - if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) == 0) { + if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) == 0 && + cx_next_idx > sc->cpu_non_c3) { AcpiReadBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, &bm_active); if (bm_active != 0) { AcpiWriteBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, 1); - cx_next_idx = min(cx_next_idx, sc->cpu_non_c3); + cx_next_idx = sc->cpu_non_c3; } } @@ -996,11 +983,10 @@ acpi_cpu_idle() * we are called inside critical section, delaying context switch. */ if (cx_next->type == ACPI_STATE_C1) { - AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock); + cputicks = cpu_ticks(); acpi_cpu_c1(); - AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock); - end_time = PM_USEC(acpi_TimerDelta(end_time, start_time)); - if (curthread->td_critnest == 0) + end_time = ((cpu_ticks() - cputicks) << 20) / cpu_tickrate(); + if (curthread->td_critnest == 0) end_time = min(end_time, 500000 / hz); sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + end_time) / 4; return; @@ -1024,7 +1010,13 @@ acpi_cpu_idle() * get the time very close to the CPU start/stop clock logic, this * is the only reliable time source. */ - AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock); + if (cx_next->type == ACPI_STATE_C3) { + AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock); + cputicks = 0; + } else { + start_time = 0; + cputicks = cpu_ticks(); + } CPU_GET_REG(cx_next->p_lvlx, 1); /* @@ -1034,7 +1026,11 @@ acpi_cpu_idle() * margin that we are certain to have a correct value. */ AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock); - AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock); + if (cx_next->type == ACPI_STATE_C3) { + AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock); + end_time = acpi_TimerDelta(end_time, start_time); + } else + end_time = ((cpu_ticks() - cputicks) << 20) / cpu_tickrate(); /* Enable bus master arbitration and disable bus master wakeup. */ if (cx_next->type == ACPI_STATE_C3 && @@ -1044,8 +1040,6 @@ acpi_cpu_idle() } ACPI_ENABLE_IRQS(); - /* Find the actual time asleep in microseconds. */ - end_time = acpi_TimerDelta(end_time, start_time); sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + PM_USEC(end_time)) / 4; } @@ -1058,8 +1052,6 @@ static void acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context) { struct acpi_cpu_softc *sc = (struct acpi_cpu_softc *)context; - struct acpi_cpu_softc *isc; - int i; if (notify != ACPI_NOTIFY_CX_STATES) return; @@ -1068,16 +1060,8 @@ acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context) acpi_cpu_cx_cst(sc); acpi_cpu_cx_list(sc); - /* Update the new lowest useable Cx state for all CPUs. */ ACPI_SERIAL_BEGIN(cpu); - cpu_cx_count = 0; - for (i = 0; i < cpu_ndevices; i++) { - isc = device_get_softc(cpu_devices[i]); - if (isc->cpu_cx_count > cpu_cx_count) - cpu_cx_count = isc->cpu_cx_count; - } - if (sc->cpu_cx_lowest < cpu_cx_lowest) - acpi_cpu_set_cx_lowest(sc, min(cpu_cx_lowest, sc->cpu_cx_count - 1)); + acpi_cpu_set_cx_lowest(sc); ACPI_SERIAL_END(cpu); } @@ -1205,12 +1189,12 @@ acpi_cpu_usage_sysctl(SYSCTL_HANDLER_ARGS) } static int -acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc, int val) +acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc) { int i; ACPI_SERIAL_ASSERT(cpu); - sc->cpu_cx_lowest = val; + sc->cpu_cx_lowest = min(sc->cpu_cx_lowest_lim, sc->cpu_cx_count - 1); /* If not disabling, cache the new lowest non-C3 state. */ sc->cpu_non_c3 = 0; @@ -1234,18 +1218,23 @@ acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS) int val, error; sc = (struct acpi_cpu_softc *) arg1; - snprintf(state, sizeof(state), "C%d", sc->cpu_cx_lowest + 1); + snprintf(state, sizeof(state), "C%d", sc->cpu_cx_lowest_lim + 1); error = sysctl_handle_string(oidp, state, sizeof(state), req); if (error != 0 || req->newptr == NULL) return (error); if (strlen(state) < 2 || toupper(state[0]) != 'C') return (EINVAL); - val = (int) strtol(state + 1, NULL, 10) - 1; - if (val < 0 || val > sc->cpu_cx_count - 1) - return (EINVAL); + if (strcasecmp(state, "Cmax") == 0) + val = MAX_CX_STATES; + else { + val = (int) strtol(state + 1, NULL, 10); + if (val < 1 || val > MAX_CX_STATES) + return (EINVAL); + } ACPI_SERIAL_BEGIN(cpu); - acpi_cpu_set_cx_lowest(sc, val); + sc->cpu_cx_lowest_lim = val - 1; + acpi_cpu_set_cx_lowest(sc); ACPI_SERIAL_END(cpu); return (0); @@ -1258,22 +1247,27 @@ acpi_cpu_global_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS) char state[8]; int val, error, i; - snprintf(state, sizeof(state), "C%d", cpu_cx_lowest + 1); + snprintf(state, sizeof(state), "C%d", cpu_cx_lowest_lim + 1); error = sysctl_handle_string(oidp, state, sizeof(state), req); if (error != 0 || req->newptr == NULL) return (error); if (strlen(state) < 2 || toupper(state[0]) != 'C') return (EINVAL); - val = (int) strtol(state + 1, NULL, 10) - 1; - if (val < 0 || val > cpu_cx_count - 1) - return (EINVAL); - cpu_cx_lowest = val; + if (strcasecmp(state, "Cmax") == 0) + val = MAX_CX_STATES; + else { + val = (int) strtol(state + 1, NULL, 10); + if (val < 1 || val > MAX_CX_STATES) + return (EINVAL); + } /* Update the new lowest useable Cx state for all CPUs. */ ACPI_SERIAL_BEGIN(cpu); + cpu_cx_lowest_lim = val - 1; for (i = 0; i < cpu_ndevices; i++) { sc = device_get_softc(cpu_devices[i]); - acpi_cpu_set_cx_lowest(sc, min(val, sc->cpu_cx_count - 1)); + sc->cpu_cx_lowest_lim = cpu_cx_lowest_lim; + acpi_cpu_set_cx_lowest(sc); } ACPI_SERIAL_END(cpu); diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c index 481fe0a..1bbfba7 100644 --- a/sys/dev/ahci/ahci.c +++ b/sys/dev/ahci/ahci.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org> + * Copyright (c) 2009-2012 Alexander Motin <mav@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,21 +31,16 @@ __FBSDID("$FreeBSD$"); #include <sys/module.h> #include <sys/systm.h> #include <sys/kernel.h> -#include <sys/ata.h> #include <sys/bus.h> #include <sys/conf.h> #include <sys/endian.h> #include <sys/malloc.h> #include <sys/lock.h> #include <sys/mutex.h> -#include <sys/sema.h> -#include <sys/taskqueue.h> -#include <vm/uma.h> #include <machine/stdarg.h> #include <machine/resource.h> #include <machine/bus.h> #include <sys/rman.h> -#include <dev/led/led.h> #include <dev/pci/pcivar.h> #include <dev/pci/pcireg.h> #include "ahci.h" @@ -69,7 +64,6 @@ static int ahci_ch_resume(device_t dev); static void ahci_ch_pm(void *arg); static void ahci_ch_intr_locked(void *data); static void ahci_ch_intr(void *data); -static void ahci_ch_led(void *priv, int onoff); static int ahci_ctlr_reset(device_t dev); static int ahci_ctlr_setup(device_t dev); static void ahci_begin_transaction(device_t dev, union ccb *ccb); @@ -441,7 +435,6 @@ ahci_attach(device_t dev) ctlr->caps &= ~AHCI_CAP_SNCQ; if ((ctlr->caps & AHCI_CAP_CCCS) == 0) ctlr->ccc = 0; - mtx_init(&ctlr->em_mtx, "AHCI EM lock", NULL, MTX_DEF); ctlr->emloc = ATA_INL(ctlr->r_mem, AHCI_EM_LOC); ahci_ctlr_setup(dev); /* Setup interrupts. */ @@ -494,17 +487,6 @@ ahci_attach(device_t dev) (ctlr->caps2 & AHCI_CAP2_NVMP) ? " NVMP":"", (ctlr->caps2 & AHCI_CAP2_BOH) ? " BOH":""); } - if (bootverbose && (ctlr->caps & AHCI_CAP_EMS)) { - device_printf(dev, "EM Caps:%s%s%s%s%s%s%s%s\n", - (ctlr->capsem & AHCI_EM_PM) ? " PM":"", - (ctlr->capsem & AHCI_EM_ALHD) ? " ALHD":"", - (ctlr->capsem & AHCI_EM_XMT) ? " XMT":"", - (ctlr->capsem & AHCI_EM_SMB) ? " SMB":"", - (ctlr->capsem & AHCI_EM_SGPIO) ? " SGPIO":"", - (ctlr->capsem & AHCI_EM_SES2) ? " SES-2":"", - (ctlr->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"", - (ctlr->capsem & AHCI_EM_LED) ? " LED":""); - } /* Attach all channels on this controller */ for (unit = 0; unit < ctlr->channels; unit++) { child = device_add_child(dev, "ahcich", -1); @@ -516,6 +498,13 @@ ahci_attach(device_t dev) if ((ctlr->ichannels & (1 << unit)) == 0) device_disable(child); } + if (ctlr->caps & AHCI_CAP_EMS) { + child = device_add_child(dev, "ahciem", -1); + if (child == NULL) + device_printf(dev, "failed to add enclosure device\n"); + else + device_set_ivars(child, (void *)(intptr_t)-1); + } bus_generic_attach(dev); return 0; } @@ -543,7 +532,6 @@ ahci_detach(device_t dev) rman_fini(&ctlr->sc_iomem); if (ctlr->r_mem) bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); - mtx_destroy(&ctlr->em_mtx); return (0); } @@ -753,16 +741,34 @@ ahci_alloc_resource(device_t dev, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { struct ahci_controller *ctlr = device_get_softc(dev); - int unit = ((struct ahci_channel *)device_get_softc(child))->unit; - struct resource *res = NULL; - int offset = AHCI_OFFSET + (unit << 7); + struct resource *res; long st; + int offset, size, unit; + unit = (intptr_t)device_get_ivars(child); + res = NULL; switch (type) { case SYS_RES_MEMORY: + if (unit >= 0) { + offset = AHCI_OFFSET + (unit << 7); + size = 128; + } else if (*rid == 0) { + offset = AHCI_EM_CTL; + size = 4; + } else { + offset = (ctlr->emloc & 0xffff0000) >> 14; + size = (ctlr->emloc & 0x0000ffff) << 2; + if (*rid != 1) { + if (*rid == 2 && (ctlr->capsem & + (AHCI_EM_XMT | AHCI_EM_SMB)) == 0) + offset += size; + else + break; + } + } st = rman_get_start(ctlr->r_mem); res = rman_reserve_resource(&ctlr->sc_iomem, st + offset, - st + offset + 127, 128, RF_ACTIVE, child); + st + offset + size - 1, size, RF_ACTIVE, child); if (res) { bus_space_handle_t bsh; bus_space_tag_t bst; @@ -830,13 +836,13 @@ ahci_teardown_intr(device_t dev, device_t child, struct resource *irq, static int ahci_print_child(device_t dev, device_t child) { - int retval; + int retval, channel; retval = bus_print_child_header(dev, child); - retval += printf(" at channel %d", - (int)(intptr_t)device_get_ivars(child)); + channel = (int)(intptr_t)device_get_ivars(child); + if (channel >= 0) + retval += printf(" at channel %d", channel); retval += bus_print_child_footer(dev, child); - return (retval); } @@ -844,9 +850,11 @@ static int ahci_child_location_str(device_t dev, device_t child, char *buf, size_t buflen) { + int channel; - snprintf(buf, buflen, "channel=%d", - (int)(intptr_t)device_get_ivars(child)); + channel = (int)(intptr_t)device_get_ivars(child); + if (channel >= 0) + snprintf(buf, buflen, "channel=%d", channel); return (0); } @@ -910,7 +918,6 @@ ahci_ch_attach(device_t dev) struct cam_devq *devq; int rid, error, i, sata_rev = 0; u_int32_t version; - char buf[32]; ch->dev = dev; ch->unit = (intptr_t)device_get_ivars(dev); @@ -950,7 +957,7 @@ ahci_ch_attach(device_t dev) ch->user[i].caps |= CTS_SATA_CAPS_H_DMAAA | CTS_SATA_CAPS_H_AN; } - rid = ch->unit; + rid = 0; if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE))) return (ENXIO); @@ -1019,25 +1026,6 @@ ahci_ch_attach(device_t dev) ahci_ch_pm, dev); } mtx_unlock(&ch->mtx); - if ((ch->caps & AHCI_CAP_EMS) && - (ctlr->capsem & AHCI_EM_LED)) { - for (i = 0; i < AHCI_NUM_LEDS; i++) { - ch->leds[i].dev = dev; - ch->leds[i].num = i; - } - if ((ctlr->capsem & AHCI_EM_ALHD) == 0) { - snprintf(buf, sizeof(buf), "%s.act", - device_get_nameunit(dev)); - ch->leds[0].led = led_create(ahci_ch_led, - &ch->leds[0], buf); - } - snprintf(buf, sizeof(buf), "%s.locate", - device_get_nameunit(dev)); - ch->leds[1].led = led_create(ahci_ch_led, &ch->leds[1], buf); - snprintf(buf, sizeof(buf), "%s.fault", - device_get_nameunit(dev)); - ch->leds[2].led = led_create(ahci_ch_led, &ch->leds[2], buf); - } return (0); err3: @@ -1057,12 +1045,7 @@ static int ahci_ch_detach(device_t dev) { struct ahci_channel *ch = device_get_softc(dev); - int i; - for (i = 0; i < AHCI_NUM_LEDS; i++) { - if (ch->leds[i].led) - led_destroy(ch->leds[i].led); - } mtx_lock(&ch->mtx); xpt_async(AC_LOST_DEVICE, ch->path, NULL); /* Forget about reset. */ @@ -1185,47 +1168,6 @@ static driver_t ahcich_driver = { }; DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahcich_devclass, 0, 0); -static void -ahci_ch_setleds(device_t dev) -{ - struct ahci_channel *ch; - struct ahci_controller *ctlr; - size_t buf; - int i, timeout; - int16_t val; - - ctlr = device_get_softc(device_get_parent(dev)); - ch = device_get_softc(dev); - - val = 0; - for (i = 0; i < AHCI_NUM_LEDS; i++) - val |= ch->leds[i].state << (i * 3); - - buf = (ctlr->emloc & 0xffff0000) >> 14; - mtx_lock(&ctlr->em_mtx); - timeout = 1000; - while (ATA_INL(ctlr->r_mem, AHCI_EM_CTL) & (AHCI_EM_TM | AHCI_EM_RST) && - --timeout > 0) - DELAY(1000); - if (timeout == 0) - device_printf(dev, "EM timeout\n"); - ATA_OUTL(ctlr->r_mem, buf, (1 << 8) | (0 << 16) | (0 << 24)); - ATA_OUTL(ctlr->r_mem, buf + 4, ch->unit | (val << 16)); - ATA_OUTL(ctlr->r_mem, AHCI_EM_CTL, AHCI_EM_TM); - mtx_unlock(&ctlr->em_mtx); -} - -static void -ahci_ch_led(void *priv, int onoff) -{ - struct ahci_led *led; - - led = (struct ahci_led *)priv; - - led->state = onoff; - ahci_ch_setleds(led->dev); -} - struct ahci_dc_cb_args { bus_addr_t maddr; int error; diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h index ecce136..2eef321 100644 --- a/sys/dev/ahci/ahci.h +++ b/sys/dev/ahci/ahci.h @@ -1,6 +1,6 @@ /*- * Copyright (c) 1998 - 2008 Søren Schmidt <sos@FreeBSD.org> - * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org> + * Copyright (c) 2009-2012 Alexander Motin <mav@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -395,7 +395,6 @@ struct ahci_channel { struct ata_dma dma; /* DMA data */ struct cam_sim *sim; struct cam_path *path; - struct ahci_led leds[3]; uint32_t caps; /* Controller capabilities */ uint32_t caps2; /* Controller capabilities */ uint32_t chcaps; /* Channel capabilities */ @@ -435,6 +434,22 @@ struct ahci_channel { struct ahci_device curr[16]; /* Current settings */ }; +struct ahci_enclosure { + device_t dev; /* Device handle */ + struct resource *r_memc; /* Control register */ + struct resource *r_memt; /* Transmit buffer */ + struct resource *r_memr; /* Recieve buffer */ + struct cam_sim *sim; + struct cam_path *path; + struct mtx mtx; /* state lock */ + struct ahci_led leds[AHCI_MAX_PORTS * 3]; + uint32_t capsem; /* Controller capabilities */ + uint8_t status[AHCI_MAX_PORTS][4]; /* ArrayDev statuses */ + int quirks; + int channels; + int ichannels; +}; + /* structure describing a AHCI controller */ struct ahci_controller { device_t dev; @@ -465,7 +480,6 @@ struct ahci_controller { void (*function)(void *); void *argument; } interrupt[AHCI_MAX_PORTS]; - struct mtx em_mtx; /* EM access lock */ }; enum ahci_err_type { diff --git a/sys/dev/ahci/ahciem.c b/sys/dev/ahci/ahciem.c new file mode 100644 index 0000000..11e7230 --- /dev/null +++ b/sys/dev/ahci/ahciem.c @@ -0,0 +1,600 @@ +/*- + * Copyright (c) 2012 Alexander Motin <mav@FreeBSD.org> + * 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. 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/module.h> +#include <sys/systm.h> +#include <sys/kernel.h> +#include <sys/bus.h> +#include <sys/conf.h> +#include <sys/endian.h> +#include <sys/malloc.h> +#include <sys/lock.h> +#include <sys/mutex.h> +#include <machine/stdarg.h> +#include <machine/resource.h> +#include <machine/bus.h> +#include <sys/rman.h> +#include <dev/led/led.h> +#include <dev/pci/pcivar.h> +#include <dev/pci/pcireg.h> +#include "ahci.h" + +#include <cam/cam.h> +#include <cam/cam_ccb.h> +#include <cam/cam_sim.h> +#include <cam/cam_xpt_sim.h> +#include <cam/cam_debug.h> +#include <cam/scsi/scsi_ses.h> + +/* local prototypes */ +static void ahciemaction(struct cam_sim *sim, union ccb *ccb); +static void ahciempoll(struct cam_sim *sim); +static int ahci_em_reset(device_t dev); +static void ahci_em_led(void *priv, int onoff); +static void ahci_em_setleds(device_t dev, int c); + +static int +ahci_em_probe(device_t dev) +{ + + device_set_desc_copy(dev, "AHCI enclosure management bridge"); + return (0); +} + +static int +ahci_em_attach(device_t dev) +{ + device_t parent = device_get_parent(dev); + struct ahci_controller *ctlr = device_get_softc(parent); + struct ahci_enclosure *enc = device_get_softc(dev); + struct cam_devq *devq; + int i, c, rid, error; + char buf[32]; + + enc->dev = dev; + enc->quirks = ctlr->quirks; + enc->channels = ctlr->channels; + enc->ichannels = ctlr->ichannels; + mtx_init(&enc->mtx, "AHCI enclosure lock", NULL, MTX_DEF); + rid = 0; + if (!(enc->r_memc = bus_alloc_resource_any(dev, SYS_RES_MEMORY, + &rid, RF_ACTIVE))) + return (ENXIO); + enc->capsem = ATA_INL(enc->r_memc, 0);; + rid = 1; + if (!(enc->r_memt = bus_alloc_resource_any(dev, SYS_RES_MEMORY, + &rid, RF_ACTIVE))) { + error = ENXIO; + goto err0; + } + if ((enc->capsem & (AHCI_EM_XMT | AHCI_EM_SMB)) == 0) { + rid = 2; + if (!(enc->r_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY, + &rid, RF_ACTIVE))) { + error = ENXIO; + goto err0; + } + } else + enc->r_memr = NULL; + mtx_lock(&enc->mtx); + ahci_em_reset(dev); + rid = ATA_IRQ_RID; + /* Create the device queue for our SIM. */ + devq = cam_simq_alloc(1); + if (devq == NULL) { + device_printf(dev, "Unable to allocate SIM queue\n"); + error = ENOMEM; + goto err1; + } + /* Construct SIM entry */ + enc->sim = cam_sim_alloc(ahciemaction, ahciempoll, "ahciem", enc, + device_get_unit(dev), &enc->mtx, + 1, 0, devq); + if (enc->sim == NULL) { + cam_simq_free(devq); + device_printf(dev, "Unable to allocate SIM\n"); + error = ENOMEM; + goto err1; + } + if (xpt_bus_register(enc->sim, dev, 0) != CAM_SUCCESS) { + device_printf(dev, "unable to register xpt bus\n"); + error = ENXIO; + goto err2; + } + if (xpt_create_path(&enc->path, /*periph*/NULL, cam_sim_path(enc->sim), + CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) { + device_printf(dev, "Unable to create path\n"); + error = ENXIO; + goto err3; + } + mtx_unlock(&enc->mtx); + if (bootverbose) { + device_printf(dev, "Caps:%s%s%s%s%s%s%s%s\n", + (enc->capsem & AHCI_EM_PM) ? " PM":"", + (enc->capsem & AHCI_EM_ALHD) ? " ALHD":"", + (enc->capsem & AHCI_EM_XMT) ? " XMT":"", + (enc->capsem & AHCI_EM_SMB) ? " SMB":"", + (enc->capsem & AHCI_EM_SGPIO) ? " SGPIO":"", + (enc->capsem & AHCI_EM_SES2) ? " SES-2":"", + (enc->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"", + (enc->capsem & AHCI_EM_LED) ? " LED":""); + } + if ((enc->capsem & AHCI_EM_LED)) { + for (c = 0; c < enc->channels; c++) { + if ((enc->ichannels & (1 << c)) == 0) + continue; + for (i = 0; i < AHCI_NUM_LEDS; i++) { + enc->leds[c * AHCI_NUM_LEDS + i].dev = dev; + enc->leds[c * AHCI_NUM_LEDS + i].num = + c * AHCI_NUM_LEDS + i; + } + if ((enc->capsem & AHCI_EM_ALHD) == 0) { + snprintf(buf, sizeof(buf), "%s.%d.act", + device_get_nameunit(parent), c); + enc->leds[c * AHCI_NUM_LEDS + 0].led = + led_create(ahci_em_led, + &enc->leds[c * AHCI_NUM_LEDS + 0], buf); + } + snprintf(buf, sizeof(buf), "%s.%d.locate", + device_get_nameunit(parent), c); + enc->leds[c * AHCI_NUM_LEDS + 1].led = + led_create(ahci_em_led, + &enc->leds[c * AHCI_NUM_LEDS + 1], buf); + snprintf(buf, sizeof(buf), "%s.%d.fault", + device_get_nameunit(parent), c); + enc->leds[c * AHCI_NUM_LEDS + 2].led = + led_create(ahci_em_led, + &enc->leds[c * AHCI_NUM_LEDS + 2], buf); + } + } + return (0); + +err3: + xpt_bus_deregister(cam_sim_path(enc->sim)); +err2: + cam_sim_free(enc->sim, /*free_devq*/TRUE); +err1: + mtx_unlock(&enc->mtx); + if (enc->r_memr) + bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr); +err0: + if (enc->r_memt) + bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt); + bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc); + mtx_destroy(&enc->mtx); + return (error); +} + +static int +ahci_em_detach(device_t dev) +{ + struct ahci_enclosure *enc = device_get_softc(dev); + int i; + + for (i = 0; i < enc->channels * AHCI_NUM_LEDS; i++) { + if (enc->leds[i].led) + led_destroy(enc->leds[i].led); + } + mtx_lock(&enc->mtx); + xpt_async(AC_LOST_DEVICE, enc->path, NULL); + xpt_free_path(enc->path); + xpt_bus_deregister(cam_sim_path(enc->sim)); + cam_sim_free(enc->sim, /*free_devq*/TRUE); + mtx_unlock(&enc->mtx); + + bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc); + bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt); + if (enc->r_memr) + bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr); + mtx_destroy(&enc->mtx); + return (0); +} + +static int +ahci_em_reset(device_t dev) +{ + struct ahci_enclosure *enc; + int i, timeout; + + enc = device_get_softc(dev); + ATA_OUTL(enc->r_memc, 0, AHCI_EM_RST); + timeout = 1000; + while ((ATA_INL(enc->r_memc, 0) & AHCI_EM_RST) && + --timeout > 0) + DELAY(1000); + if (timeout == 0) { + device_printf(dev, "EM timeout\n"); + return (1); + } + for (i = 0; i < enc->channels; i++) + ahci_em_setleds(dev, i); + return (0); +} + +static int +ahci_em_suspend(device_t dev) +{ + struct ahci_enclosure *enc = device_get_softc(dev); + + mtx_lock(&enc->mtx); + xpt_freeze_simq(enc->sim, 1); + mtx_unlock(&enc->mtx); + return (0); +} + +static int +ahci_em_resume(device_t dev) +{ + struct ahci_enclosure *enc = device_get_softc(dev); + + mtx_lock(&enc->mtx); + ahci_em_reset(dev); + xpt_release_simq(enc->sim, TRUE); + mtx_unlock(&enc->mtx); + return (0); +} + +devclass_t ahciem_devclass; +static device_method_t ahciem_methods[] = { + DEVMETHOD(device_probe, ahci_em_probe), + DEVMETHOD(device_attach, ahci_em_attach), + DEVMETHOD(device_detach, ahci_em_detach), + DEVMETHOD(device_suspend, ahci_em_suspend), + DEVMETHOD(device_resume, ahci_em_resume), + { 0, 0 } +}; +static driver_t ahciem_driver = { + "ahciem", + ahciem_methods, + sizeof(struct ahci_enclosure) +}; +DRIVER_MODULE(ahciem, ahci, ahciem_driver, ahciem_devclass, 0, 0); + +static void +ahci_em_setleds(device_t dev, int c) +{ + struct ahci_enclosure *enc; + int timeout; + int16_t val; + + enc = device_get_softc(dev); + + val = 0; + if (enc->status[c][2] & 0x80) /* Activity */ + val |= (1 << 0); + if (enc->status[c][2] & SESCTL_RQSID) /* Identification */ + val |= (1 << 3); + else if (enc->status[c][3] & SESCTL_RQSFLT) /* Fault */ + val |= (1 << 6); + else if (enc->status[c][1] & 0x02) /* Rebuild */ + val |= (1 << 6) | (1 << 3); + + timeout = 10000; + while (ATA_INL(enc->r_memc, 0) & (AHCI_EM_TM | AHCI_EM_RST) && + --timeout > 0) + DELAY(100); + if (timeout == 0) + device_printf(dev, "Transmit timeout\n"); + ATA_OUTL(enc->r_memt, 0, (1 << 8) | (0 << 16) | (0 << 24)); + ATA_OUTL(enc->r_memt, 4, c | (0 << 8) | (val << 16)); + ATA_OUTL(enc->r_memc, 0, AHCI_EM_TM); +} + +static void +ahci_em_led(void *priv, int onoff) +{ + struct ahci_led *led; + struct ahci_enclosure *enc; + int c, l; + + led = (struct ahci_led *)priv; + enc = device_get_softc(led->dev); + c = led->num / AHCI_NUM_LEDS; + l = led->num % AHCI_NUM_LEDS; + + if (l == 0) { + if (onoff) + enc->status[c][2] |= 0x80; + else + enc->status[c][2] &= ~0x80; + } else if (l == 1) { + if (onoff) + enc->status[c][2] |= SESCTL_RQSID; + else + enc->status[c][2] &= ~SESCTL_RQSID; + } else if (l == 2) { + if (onoff) + enc->status[c][3] |= SESCTL_RQSFLT; + else + enc->status[c][3] &= SESCTL_RQSFLT; + } + ahci_em_setleds(led->dev, c); +} + +static int +ahci_check_ids(device_t dev, union ccb *ccb) +{ + + if (ccb->ccb_h.target_id != 0) { + ccb->ccb_h.status = CAM_TID_INVALID; + xpt_done(ccb); + return (-1); + } + if (ccb->ccb_h.target_lun != 0) { + ccb->ccb_h.status = CAM_LUN_INVALID; + xpt_done(ccb); + return (-1); + } + return (0); +} + +static void +ahci_em_emulate_ses_on_led(device_t dev, union ccb *ccb) +{ + struct ahci_enclosure *enc; + struct ses_status_page *page; + struct ses_status_array_dev_slot *ads, *ads0; + struct ses_elm_desc_hdr *elmd; + uint8_t *buf; + int i; + + enc = device_get_softc(dev); + buf = ccb->ataio.data_ptr; + + /* General request validation. */ + if (ccb->ataio.cmd.command != ATA_SEP_ATTN || + ccb->ataio.dxfer_len < ccb->ataio.cmd.sector_count * 4) { + ccb->ccb_h.status = CAM_REQ_INVALID; + goto out; + } + + /* SEMB IDENTIFY */ + if (ccb->ataio.cmd.features == 0xEC && + ccb->ataio.cmd.sector_count >= 16) { + bzero(buf, ccb->ataio.dxfer_len); + buf[0] = 64; /* Valid bytes. */ + strncpy(&buf[10], "AHCI ", SID_VENDOR_SIZE); + strncpy(&buf[18], "SGPIO Enclosure ", SID_PRODUCT_SIZE); + strncpy(&buf[34], "1.00", SID_REVISION_SIZE); + strncpy(&buf[39], "0001", 4); + strncpy(&buf[43], "S-E-S ", 6); + strncpy(&buf[49], "2.00", 4); + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + /* SEMB RECEIVE DIAGNOSTIC RESULT (0) */ + page = (struct ses_status_page *)buf; + if (ccb->ataio.cmd.lba_low == 0x02 && + ccb->ataio.cmd.features == 0x00 && + ccb->ataio.cmd.sector_count >= 2) { + bzero(buf, ccb->ataio.dxfer_len); + page->hdr.page_code = 0; + scsi_ulto2b(3, page->hdr.length); + buf[4] = 0; + buf[5] = 1; + buf[6] = 2; + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + /* SEMB RECEIVE DIAGNOSTIC RESULT (1) */ + if (ccb->ataio.cmd.lba_low == 0x02 && + ccb->ataio.cmd.features == 0x01 && + ccb->ataio.cmd.sector_count >= 13) { + struct ses_enc_desc *ed; + struct ses_elm_type_desc *td; + + bzero(buf, ccb->ataio.dxfer_len); + page->hdr.page_code = 0x01; + scsi_ulto2b(4 + 4 + 36 + 4, page->hdr.length); + ed = (struct ses_enc_desc *)&buf[8]; + ed->byte0 = 0x11; + ed->subenc_id = 0; + ed->num_types = 1; + ed->length = 36; + strncpy(ed->vendor_id, "AHCI ", SID_VENDOR_SIZE); + strncpy(ed->product_id, "SGPIO Enclosure ", SID_PRODUCT_SIZE); + strncpy(ed->product_rev, " ", SID_REVISION_SIZE); + td = (struct ses_elm_type_desc *)ses_enc_desc_next(ed); + td->etype_elm_type = 0x17; + td->etype_maxelt = enc->channels; + td->etype_subenc = 0; + td->etype_txt_len = 0; + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + /* SEMB RECEIVE DIAGNOSTIC RESULT (2) */ + if (ccb->ataio.cmd.lba_low == 0x02 && + ccb->ataio.cmd.features == 0x02 && + ccb->ataio.cmd.sector_count >= (3 + enc->channels)) { + bzero(buf, ccb->ataio.dxfer_len); + page->hdr.page_code = 0x02; + scsi_ulto2b(4 + 4 * (1 + enc->channels), + page->hdr.length); + for (i = 0; i < enc->channels; i++) { + ads = &page->elements[i + 1].array_dev_slot; + memcpy(ads, enc->status[i], 4); + ads->common.bytes[0] |= + (enc->ichannels & (1 << i)) ? + SES_OBJSTAT_UNKNOWN : + SES_OBJSTAT_NOTINSTALLED; + } + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + /* SEMB SEND DIAGNOSTIC (2) */ + if (ccb->ataio.cmd.lba_low == 0x82 && + ccb->ataio.cmd.features == 0x02 && + ccb->ataio.cmd.sector_count >= (3 + enc->channels)) { + ads0 = &page->elements[0].array_dev_slot; + for (i = 0; i < enc->channels; i++) { + ads = &page->elements[i + 1].array_dev_slot; + if (ads->common.bytes[0] & SESCTL_CSEL) { + enc->status[i][0] = 0; + enc->status[i][1] = + ads->bytes[0] & 0x02; + enc->status[i][2] = + ads->bytes[1] & (0x80 | SESCTL_RQSID); + enc->status[i][3] = + ads->bytes[2] & SESCTL_RQSFLT; + ahci_em_setleds(dev, i); + } else if (ads0->common.bytes[0] & SESCTL_CSEL) { + enc->status[i][0] = 0; + enc->status[i][1] = + ads0->bytes[0] & 0x02; + enc->status[i][2] = + ads0->bytes[1] & (0x80 | SESCTL_RQSID); + enc->status[i][3] = + ads0->bytes[2] & SESCTL_RQSFLT; + ahci_em_setleds(dev, i); + } + } + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + /* SEMB RECEIVE DIAGNOSTIC RESULT (7) */ + if (ccb->ataio.cmd.lba_low == 0x02 && + ccb->ataio.cmd.features == 0x07 && + ccb->ataio.cmd.sector_count >= (3 + 3 * enc->channels)) { + bzero(buf, ccb->ataio.dxfer_len); + page->hdr.page_code = 0x07; + scsi_ulto2b(4 + 4 + 12 * enc->channels, + page->hdr.length); + for (i = 0; i < enc->channels; i++) { + elmd = (struct ses_elm_desc_hdr *)&buf[8 + 4 + 12 * i]; + scsi_ulto2b(8, elmd->length); + snprintf((char *)(elmd + 1), 9, "SLOT %03d", i); + } + ccb->ccb_h.status = CAM_REQ_CMP; + goto out; + } + + ccb->ccb_h.status = CAM_REQ_INVALID; +out: + xpt_done(ccb); +} + +static void +ahci_em_begin_transaction(device_t dev, union ccb *ccb) +{ + struct ahci_enclosure *enc; + struct ata_res *res; + + enc = device_get_softc(dev); + res = &ccb->ataio.res; + bzero(res, sizeof(*res)); + if ((ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) && + (ccb->ataio.cmd.control & ATA_A_RESET)) { + res->lba_high = 0xc3; + res->lba_mid = 0x3c; + ccb->ccb_h.status = CAM_REQ_CMP; + xpt_done(ccb); + return; + } + + if (enc->capsem & AHCI_EM_LED) { + ahci_em_emulate_ses_on_led(dev, ccb); + return; + } else + device_printf(dev, "Unsupported enclosure interface\n"); + + ccb->ccb_h.status = CAM_REQ_INVALID; + xpt_done(ccb); +} + +static void +ahciemaction(struct cam_sim *sim, union ccb *ccb) +{ + device_t dev, parent; + struct ahci_enclosure *enc; + + CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, + ("ahciemaction func_code=%x\n", ccb->ccb_h.func_code)); + + enc = cam_sim_softc(sim); + dev = enc->dev; + switch (ccb->ccb_h.func_code) { + case XPT_ATA_IO: /* Execute the requested I/O operation */ + if (ahci_check_ids(dev, ccb)) + return; + ahci_em_begin_transaction(dev, ccb); + return; + case XPT_RESET_BUS: /* Reset the specified bus */ + case XPT_RESET_DEV: /* Bus Device Reset the specified device */ + ahci_em_reset(dev); + ccb->ccb_h.status = CAM_REQ_CMP; + break; + case XPT_PATH_INQ: /* Path routing inquiry */ + { + struct ccb_pathinq *cpi = &ccb->cpi; + + parent = device_get_parent(dev); + cpi->version_num = 1; /* XXX??? */ + cpi->hba_inquiry = PI_SDTR_ABLE; + cpi->target_sprt = 0; + cpi->hba_misc = PIM_SEQSCAN; + cpi->hba_eng_cnt = 0; + cpi->max_target = 0; + cpi->max_lun = 0; + cpi->initiator_id = 0; + cpi->bus_id = cam_sim_bus(sim); + cpi->base_transfer_speed = 150000; + strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); + strncpy(cpi->hba_vid, "AHCI", HBA_IDLEN); + strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN); + cpi->unit_number = cam_sim_unit(sim); + cpi->transport = XPORT_SATA; + cpi->transport_version = XPORT_VERSION_UNSPECIFIED; + cpi->protocol = PROTO_ATA; + cpi->protocol_version = PROTO_VERSION_UNSPECIFIED; + cpi->maxio = MAXPHYS; + cpi->hba_vendor = pci_get_vendor(parent); + cpi->hba_device = pci_get_device(parent); + cpi->hba_subvendor = pci_get_subvendor(parent); + cpi->hba_subdevice = pci_get_subdevice(parent); + cpi->ccb_h.status = CAM_REQ_CMP; + break; + } + default: + ccb->ccb_h.status = CAM_REQ_INVALID; + break; + } + xpt_done(ccb); +} + +static void +ahciempoll(struct cam_sim *sim) +{ + +} diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index b1c09ab..07cb91f 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -1532,7 +1532,7 @@ ata_cam_request_sense(device_t dev, struct ata_request *request) ch->requestsense = 1; - bzero(request, sizeof(&request)); + bzero(request, sizeof(*request)); request->dev = NULL; request->parent = dev; request->unit = ccb->ccb_h.target_id; diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c index 42dbf87..e6522c6 100644 --- a/sys/dev/ata/ata-lowlevel.c +++ b/sys/dev/ata/ata-lowlevel.c @@ -836,23 +836,21 @@ static void ata_pio_read(struct ata_request *request, int length) { struct ata_channel *ch = device_get_softc(request->parent); + uint8_t *addr; int size = min(request->transfersize, length); int resid; uint8_t buf[2]; - if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t))) { - ATA_IDX_INSW_STRM(ch, ATA_DATA, - (void*)((uintptr_t)request->data+request->donecount), - size / sizeof(int16_t)); + addr = (uint8_t *)request->data + request->donecount; + if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t)) || + ((uintptr_t)addr % sizeof(int32_t))) { + ATA_IDX_INSW_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int16_t)); if (size & 1) { ATA_IDX_INSW_STRM(ch, ATA_DATA, (void*)buf, 1); - ((uint8_t *)request->data + request->donecount + - (size & ~1))[0] = buf[0]; + (addr + (size & ~1))[0] = buf[0]; } } else - ATA_IDX_INSL_STRM(ch, ATA_DATA, - (void*)((uintptr_t)request->data+request->donecount), - size / sizeof(int32_t)); + ATA_IDX_INSL_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int32_t)); if (request->transfersize < length) { device_printf(request->parent, "WARNING - %s read data overrun %d>%d\n", @@ -867,23 +865,21 @@ static void ata_pio_write(struct ata_request *request, int length) { struct ata_channel *ch = device_get_softc(request->parent); + uint8_t *addr; int size = min(request->transfersize, length); int resid; uint8_t buf[2]; - if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t))) { - ATA_IDX_OUTSW_STRM(ch, ATA_DATA, - (void*)((uintptr_t)request->data+request->donecount), - size / sizeof(int16_t)); + addr = (uint8_t *)request->data + request->donecount; + if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t)) || + ((uintptr_t)addr % sizeof(int32_t))) { + ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int16_t)); if (size & 1) { - buf[0] = ((uint8_t *)request->data + request->donecount + - (size & ~1))[0]; + buf[0] = (addr + (size & ~1))[0]; ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (void*)buf, 1); } } else - ATA_IDX_OUTSL_STRM(ch, ATA_DATA, - (void*)((uintptr_t)request->data+request->donecount), - size / sizeof(int32_t)); + ATA_IDX_OUTSL_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int32_t)); if (request->transfersize < length) { device_printf(request->parent, "WARNING - %s write data underrun %d>%d\n", diff --git a/sys/dev/ath/ath_hal/ah.c b/sys/dev/ath/ath_hal/ah.c index dea1736..36815f1 100644 --- a/sys/dev/ath/ath_hal/ah.c +++ b/sys/dev/ath/ath_hal/ah.c @@ -657,7 +657,8 @@ ath_hal_getcapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE type, } case HAL_CAP_RXBUFSIZE: case HAL_CAP_NUM_MR_RETRIES: - return HAL_EINVAL; /* XXX not yet */ + *result = pCap->halNumMRRetries; + return HAL_OK; case HAL_CAP_BT_COEX: return pCap->halBtCoexSupport ? HAL_OK : HAL_ENOTSUPP; case HAL_CAP_HT20_SGI: diff --git a/sys/dev/ath/ath_hal/ah.h b/sys/dev/ath/ath_hal/ah.h index aa3e8b6..a22c25d 100644 --- a/sys/dev/ath/ath_hal/ah.h +++ b/sys/dev/ath/ath_hal/ah.h @@ -220,6 +220,8 @@ typedef enum { #define HAL_NUM_RX_QUEUES 2 /* max possible # of queues */ +#define HAL_TXFIFO_DEPTH 8 /* transmit fifo depth */ + /* * Transmit queue subtype. These map directly to * WME Access Categories (except for UPSD). Refer @@ -580,13 +582,16 @@ typedef enum { typedef struct { u_int Tries; - u_int Rate; + u_int Rate; /* hardware rate code */ + u_int RateIndex; /* rate series table index */ u_int PktDuration; u_int ChSel; u_int RateFlags; #define HAL_RATESERIES_RTS_CTS 0x0001 /* use rts/cts w/this series */ #define HAL_RATESERIES_2040 0x0002 /* use ext channel for series */ #define HAL_RATESERIES_HALFGI 0x0004 /* use half-gi for series */ +#define HAL_RATESERIES_STBC 0x0008 /* use STBC for series */ + u_int tx_power_cap; } HAL_11N_RATE_SERIES; typedef enum { @@ -1084,6 +1089,15 @@ struct ath_hal { void __ahdecl(*ah_reqTxIntrDesc)(struct ath_hal *, struct ath_desc*); HAL_BOOL __ahdecl(*ah_getTxCompletionRates)(struct ath_hal *, const struct ath_desc *ds, int *rates, int *tries); + void __ahdecl(*ah_setTxDescLink)(struct ath_hal *ah, void *ds, + uint32_t link); + void __ahdecl(*ah_getTxDescLink)(struct ath_hal *ah, void *ds, + uint32_t *link); + void __ahdecl(*ah_getTxDescLinkPtr)(struct ath_hal *ah, void *ds, + uint32_t **linkptr); + void __ahdecl(*ah_setupTxStatusRing)(struct ath_hal *, + void *ts_start, uint32_t ts_paddr_start, + uint16_t size); /* Receive Functions */ uint32_t __ahdecl(*ah_getRxDP)(struct ath_hal*, HAL_RX_QUEUE); @@ -1224,7 +1238,7 @@ struct ath_hal { struct ath_desc *, u_int, u_int, HAL_11N_RATE_SERIES [], u_int, u_int); void __ahdecl(*ah_set11nAggrFirst)(struct ath_hal *, - struct ath_desc *, u_int, u_int); + struct ath_desc *, u_int); void __ahdecl(*ah_set11nAggrMiddle)(struct ath_hal *, struct ath_desc *, u_int); void __ahdecl(*ah_set11nAggrLast)(struct ath_hal *, diff --git a/sys/dev/ath/ath_hal/ah_desc.h b/sys/dev/ath/ath_hal/ah_desc.h index 1203ebb..542453f 100644 --- a/sys/dev/ath/ath_hal/ah_desc.h +++ b/sys/dev/ath/ath_hal/ah_desc.h @@ -57,16 +57,19 @@ struct ath_tx_status { uint8_t ts_finaltsi; /* final transmit series index */ #ifdef AH_SUPPORT_AR5416 /* 802.11n status */ - uint8_t ts_flags; /* misc flags */ - int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */ - int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */ -/* #define ts_rssi ts_rssi_combined */ - uint32_t ts_ba_low; /* blockack bitmap low */ - uint32_t ts_ba_high; /* blockack bitmap high */ + uint8_t ts_flags; /* misc flags */ + uint8_t ts_queue_id; /* AR9300: TX queue id */ + uint8_t ts_desc_id; /* AR9300: TX descriptor id */ uint8_t ts_tid; /* TID */ - uint32_t ts_evm0; /* evm bytes */ - uint32_t ts_evm1; - uint32_t ts_evm2; +/* #define ts_rssi ts_rssi_combined */ + uint32_t ts_ba_low; /* blockack bitmap low */ + uint32_t ts_ba_high; /* blockack bitmap high */ + uint32_t ts_evm0; /* evm bytes */ + uint32_t ts_evm1; + uint32_t ts_evm2; + int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */ + int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */ + uint8_t ts_pad[2]; #endif /* AH_SUPPORT_AR5416 */ }; @@ -243,6 +246,8 @@ struct ath_desc_status { #define HAL_TXDESC_EXT_ONLY 0x0080 /* send on ext channel only (11n) */ #define HAL_TXDESC_EXT_AND_CTL 0x0100 /* send on ext + ctl channels (11n) */ #define HAL_TXDESC_VMF 0x0200 /* virtual more frag */ +#define HAL_TXDESC_LOWRXCHAIN 0x0400 /* switch to low RX chain */ +#define HAL_TXDESC_LDPC 0x1000 /* flags passed to rx descriptor setup methods */ #define HAL_RXDESC_INTREQ 0x0020 /* enable per-descriptor interrupt */ diff --git a/sys/dev/ath/ath_hal/ah_internal.h b/sys/dev/ath/ath_hal/ah_internal.h index 65ec50e..200b84e 100644 --- a/sys/dev/ath/ath_hal/ah_internal.h +++ b/sys/dev/ath/ath_hal/ah_internal.h @@ -252,6 +252,7 @@ typedef struct { int halRxStatusLen; int halRxHpFifoDepth; int halRxLpFifoDepth; + int halNumMRRetries; } HAL_CAPABILITIES; struct regDomain; diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210.h b/sys/dev/ath/ath_hal/ar5210/ar5210.h index 657e250..b7cfea3 100644 --- a/sys/dev/ath/ath_hal/ar5210/ar5210.h +++ b/sys/dev/ath/ath_hal/ar5210/ar5210.h @@ -179,6 +179,12 @@ extern void ar5210GetTxIntrQueue(struct ath_hal *ah, uint32_t *); extern void ar5210IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *); extern HAL_BOOL ar5210GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *, int *rates, int *tries); +extern void ar5210SetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t link); +extern void ar5210GetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t *link); +extern void ar5210GetTxDescLinkPtr(struct ath_hal *ah, void *ds, + uint32_t **linkptr); extern uint32_t ar5210GetRxDP(struct ath_hal *, HAL_RX_QUEUE); extern void ar5210SetRxDP(struct ath_hal *, uint32_t rxdp, HAL_RX_QUEUE); diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c index 03c5f93..c62f936 100644 --- a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c +++ b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c @@ -75,6 +75,9 @@ static const struct ath_hal_private ar5210hal = {{ .ah_getTxIntrQueue = ar5210GetTxIntrQueue, .ah_reqTxIntrDesc = ar5210IntrReqTxDesc, .ah_getTxCompletionRates = ar5210GetTxCompletionRates, + .ah_setTxDescLink = ar5210SetTxDescLink, + .ah_getTxDescLink = ar5210GetTxDescLink, + .ah_getTxDescLinkPtr = ar5210GetTxDescLinkPtr, /* RX Functions */ .ah_getRxDP = ar5210GetRxDP, @@ -358,6 +361,7 @@ ar5210FillCapabilityInfo(struct ath_hal *ah) pCap->halSleepAfterBeaconBroken = AH_TRUE; pCap->halPSPollBroken = AH_FALSE; + pCap->halNumMRRetries = 1; /* No hardware MRR support */ pCap->halTotalQueues = HAL_NUM_TX_QUEUES; pCap->halKeyCacheSize = 64; diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c b/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c index f7c6030..ac3cb65 100644 --- a/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c +++ b/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c @@ -630,3 +630,36 @@ ar5210GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int * { return AH_FALSE; } + +/* + * Set the TX descriptor link pointer + */ +void +ar5210SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link) +{ + struct ar5210_desc *ads = AR5210DESC(ds); + + ads->ds_link = link; +} + +/* + * Get the TX descriptor link pointer + */ +void +ar5210GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link) +{ + struct ar5210_desc *ads = AR5210DESC(ds); + + *link = ads->ds_link; +} + +/* + * Get a pointer to the TX descriptor link pointer + */ +void +ar5210GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr) +{ + struct ar5210_desc *ads = AR5210DESC(ds); + + *linkptr = &ads->ds_link; +} diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211.h b/sys/dev/ath/ath_hal/ar5211/ar5211.h index 1d6c8af..2d631fb 100644 --- a/sys/dev/ath/ath_hal/ar5211/ar5211.h +++ b/sys/dev/ath/ath_hal/ar5211/ar5211.h @@ -204,6 +204,12 @@ extern void ar5211GetTxIntrQueue(struct ath_hal *ah, uint32_t *); extern void ar5211IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *); extern HAL_BOOL ar5211GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int *rates, int *tries); +extern void ar5211SetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t link); +extern void ar5211GetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t *link); +extern void ar5211GetTxDescLinkPtr(struct ath_hal *ah, void *ds, + uint32_t **linkptr); extern uint32_t ar5211GetRxDP(struct ath_hal *, HAL_RX_QUEUE); extern void ar5211SetRxDP(struct ath_hal *, uint32_t rxdp, HAL_RX_QUEUE); diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c index 186ece2..40a1f8a 100644 --- a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c +++ b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c @@ -75,6 +75,9 @@ static const struct ath_hal_private ar5211hal = {{ .ah_getTxIntrQueue = ar5211GetTxIntrQueue, .ah_reqTxIntrDesc = ar5211IntrReqTxDesc, .ah_getTxCompletionRates = ar5211GetTxCompletionRates, + .ah_setTxDescLink = ar5211SetTxDescLink, + .ah_getTxDescLink = ar5211GetTxDescLink, + .ah_getTxDescLinkPtr = ar5211GetTxDescLinkPtr, /* RX Functions */ .ah_getRxDP = ar5211GetRxDP, @@ -493,6 +496,7 @@ ar5211FillCapabilityInfo(struct ath_hal *ah) pCap->halSleepAfterBeaconBroken = AH_TRUE; pCap->halPSPollBroken = AH_TRUE; pCap->halVEOLSupport = AH_TRUE; + pCap->halNumMRRetries = 1; /* No hardware MRR support */ pCap->halTotalQueues = HAL_NUM_TX_QUEUES; pCap->halKeyCacheSize = 128; diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c index e1e7f73..da6e5c9 100644 --- a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c +++ b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c @@ -671,3 +671,27 @@ ar5211GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int * return AH_FALSE; } + +void +ar5211SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link) +{ + struct ar5211_desc *ads = AR5211DESC(ds); + + ads->ds_link = link; +} + +void +ar5211GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link) +{ + struct ar5211_desc *ads = AR5211DESC(ds); + + *link = ads->ds_link; +} + +void +ar5211GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr) +{ + struct ar5211_desc *ads = AR5211DESC(ds); + + *linkptr = &ads->ds_link; +} diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212.h b/sys/dev/ath/ath_hal/ar5212/ar5212.h index a8b95d1..24770ce 100644 --- a/sys/dev/ath/ath_hal/ar5212/ar5212.h +++ b/sys/dev/ath/ath_hal/ar5212/ar5212.h @@ -602,6 +602,12 @@ extern void ar5212GetTxIntrQueue(struct ath_hal *ah, uint32_t *); extern void ar5212IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *); extern HAL_BOOL ar5212GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int *rates, int *tries); +extern void ar5212SetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t link); +extern void ar5212GetTxDescLink(struct ath_hal *ah, void *ds, + uint32_t *link); +extern void ar5212GetTxDescLinkPtr(struct ath_hal *ah, void *ds, + uint32_t **linkptr); extern const HAL_RATE_TABLE *ar5212GetRateTable(struct ath_hal *, u_int mode); diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c index 43cbe7f..c3fd1c7 100644 --- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c +++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c @@ -71,6 +71,9 @@ static const struct ath_hal_private ar5212hal = {{ .ah_getTxIntrQueue = ar5212GetTxIntrQueue, .ah_reqTxIntrDesc = ar5212IntrReqTxDesc, .ah_getTxCompletionRates = ar5212GetTxCompletionRates, + .ah_setTxDescLink = ar5212SetTxDescLink, + .ah_getTxDescLink = ar5212GetTxDescLink, + .ah_getTxDescLinkPtr = ar5212GetTxDescLinkPtr, /* RX Functions */ .ah_getRxDP = ar5212GetRxDP, @@ -821,6 +824,7 @@ ar5212FillCapabilityInfo(struct ath_hal *ah) pCap->halTurboGSupport = pCap->halWirelessModes & HAL_MODE_108G; pCap->halPSPollBroken = AH_TRUE; /* XXX fixed in later revs? */ + pCap->halNumMRRetries = 4; /* Hardware supports 4 MRR */ pCap->halVEOLSupport = AH_TRUE; pCap->halBssIdMaskSupport = AH_TRUE; pCap->halMcastKeySrchSupport = AH_TRUE; diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c index 008330a..773d5f4 100644 --- a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c +++ b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c @@ -971,3 +971,27 @@ ar5212GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int * return AH_TRUE; } + +void +ar5212SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link) +{ + struct ar5212_desc *ads = AR5212DESC(ds); + + ads->ds_link = link; +} + +void +ar5212GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link) +{ + struct ar5212_desc *ads = AR5212DESC(ds); + + *link = ads->ds_link; +} + +void +ar5212GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr) +{ + struct ar5212_desc *ads = AR5212DESC(ds); + + *linkptr = &ads->ds_link; +} diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416.h b/sys/dev/ath/ath_hal/ar5416/ar5416.h index 5a0e7ef..75cd3df 100644 --- a/sys/dev/ath/ath_hal/ar5416/ar5416.h +++ b/sys/dev/ath/ath_hal/ar5416/ar5416.h @@ -387,7 +387,7 @@ extern void ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds, u_int nseries, u_int flags); extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, - u_int aggrLen, u_int numDelims); + u_int aggrLen); extern void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds, u_int numDelims); extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds); diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c index fc5eefb..295124f7 100644 --- a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c +++ b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c @@ -892,6 +892,7 @@ ar5416FillCapabilityInfo(struct ath_hal *ah) pCap->halTurboGSupport = pCap->halWirelessModes & HAL_MODE_108G; pCap->halPSPollBroken = AH_TRUE; /* XXX fixed in later revs? */ + pCap->halNumMRRetries = 4; /* Hardware supports 4 MRR */ pCap->halVEOLSupport = AH_TRUE; pCap->halBssIdMaskSupport = AH_TRUE; pCap->halMcastKeySrchSupport = AH_TRUE; /* Works on AR5416 and later */ diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c index e33a55d..bc1b7ee4 100644 --- a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c +++ b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c @@ -135,6 +135,7 @@ ar5416StopTxDma(struct ath_hal *ah, u_int q) #define set11nRateFlags(_series, _index) \ ((_series)[_index].RateFlags & HAL_RATESERIES_2040 ? AR_2040_##_index : 0) \ |((_series)[_index].RateFlags & HAL_RATESERIES_HALFGI ? AR_GI##_index : 0) \ + |((_series)[_index].RateFlags & HAL_RATESERIES_STBC ? AR_STBC##_index : 0) \ |SM((_series)[_index].ChSel, AR_ChainSel##_index) /* @@ -727,16 +728,14 @@ ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds, } void -ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, - u_int aggrLen, u_int numDelims) +ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, u_int aggrLen) { struct ar5416_desc *ads = AR5416DESC(ds); ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr); ads->ds_ctl6 &= ~(AR_AggrLen | AR_PadDelim); - ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen) | - SM(numDelims, AR_PadDelim); + ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen); } void diff --git a/sys/dev/ath/ath_rate/amrr/amrr.c b/sys/dev/ath/ath_rate/amrr/amrr.c index efba5dd..c252009 100644 --- a/sys/dev/ath/ath_rate/amrr/amrr.c +++ b/sys/dev/ath/ath_rate/amrr/amrr.c @@ -421,6 +421,14 @@ ath_rate_ctl(void *arg, struct ieee80211_node *ni) } } +static int +ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an, + struct ath_rateioctl *re) +{ + + return (EINVAL); +} + static void ath_rate_sysctlattach(struct ath_softc *sc) { diff --git a/sys/dev/ath/ath_rate/onoe/onoe.c b/sys/dev/ath/ath_rate/onoe/onoe.c index 7160346..7c73926 100644 --- a/sys/dev/ath/ath_rate/onoe/onoe.c +++ b/sys/dev/ath/ath_rate/onoe/onoe.c @@ -407,6 +407,14 @@ ath_rate_sysctlattach(struct ath_softc *sc) "rate control: # good periods before raising rate"); } +static int +ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an, + struct ath_rateioctl *re) +{ + + return (EINVAL); +} + struct ath_ratectrl * ath_rate_attach(struct ath_softc *sc) { diff --git a/sys/dev/ath/ath_rate/sample/sample.c b/sys/dev/ath/ath_rate/sample/sample.c index ae77e5e..985551b 100644 --- a/sys/dev/ath/ath_rate/sample/sample.c +++ b/sys/dev/ath/ath_rate/sample/sample.c @@ -105,8 +105,6 @@ __FBSDID("$FreeBSD$"); static void ath_rate_ctl_reset(struct ath_softc *, struct ieee80211_node *); -static const int packet_size_bins[NUM_PACKET_SIZE_BINS] = { 250, 1600 }; - static __inline int size_to_bin(int size) { @@ -128,12 +126,6 @@ size_to_bin(int size) return NUM_PACKET_SIZE_BINS-1; } -static __inline int -bin_to_size(int index) -{ - return packet_size_bins[index]; -} - void ath_rate_node_init(struct ath_softc *sc, struct ath_node *an) { @@ -510,8 +502,10 @@ ath_rate_findrate(struct ath_softc *sc, struct ath_node *an, goto done; } - /* XXX TODO: this doesn't know about 11gn vs 11g protection; teach it */ - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT); + mrr = sc->sc_mrretry; + /* XXX check HT protmode too */ + if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot)) + mrr = 0; best_rix = pick_best_rate(an, rt, size_bin, !mrr); if (best_rix >= 0) { @@ -918,7 +912,11 @@ ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an, short_tries, long_tries); return; } - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT); + mrr = sc->sc_mrretry; + /* XXX check HT protmode too */ + if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot)) + mrr = 0; + if (!mrr || ts->ts_finaltsi == 0) { if (!IS_RATE_DEFINED(sn, final_rix)) { badrate(ifp, 0, ts->ts_rate, long_tries, status); @@ -1198,6 +1196,93 @@ ath_rate_ctl_reset(struct ath_softc *sc, struct ieee80211_node *ni) #undef DOT11RATE } +/* + * Fetch the statistics for the given node. + * + * The ieee80211 node must be referenced and unlocked, however the ath_node + * must be locked. + * + * The main difference here is that we convert the rate indexes + * to 802.11 rates, or the userland output won't make much sense + * as it has no access to the rix table. + */ +int +ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an, + struct ath_rateioctl *rs) +{ + struct sample_node *sn = ATH_NODE_SAMPLE(an); + const HAL_RATE_TABLE *rt = sc->sc_currates; + struct ath_rateioctl_tlv av; + struct ath_rateioctl_rt *tv; + int y; + int o = 0; + + ATH_NODE_LOCK_ASSERT(an); + + /* + * Ensure there's enough space for the statistics. + */ + if (rs->len < + sizeof(struct ath_rateioctl_tlv) + + sizeof(struct ath_rateioctl_rt) + + sizeof(struct ath_rateioctl_tlv) + + sizeof(struct sample_node)) { + device_printf(sc->sc_dev, "%s: len=%d, too short\n", + __func__, + rs->len); + return (EINVAL); + } + + /* + * Take a temporary copy of the sample node state so we can + * modify it before we copy it. + */ + tv = malloc(sizeof(struct ath_rateioctl_rt), M_TEMP, + M_NOWAIT | M_ZERO); + if (tv == NULL) { + return (ENOMEM); + } + + /* + * Populate the rate table mapping TLV. + */ + tv->nentries = rt->rateCount; + for (y = 0; y < rt->rateCount; y++) { + tv->ratecode[y] = rt->info[y].dot11Rate & IEEE80211_RATE_VAL; + if (rt->info[y].phy == IEEE80211_T_HT) + tv->ratecode[y] |= IEEE80211_RATE_MCS; + } + + o = 0; + /* + * First TLV - rate code mapping + */ + av.tlv_id = ATH_RATE_TLV_RATETABLE; + av.tlv_len = sizeof(struct ath_rateioctl_rt); + copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv)); + o += sizeof(struct ath_rateioctl_tlv); + copyout(tv, rs->buf + o, sizeof(struct ath_rateioctl_rt)); + o += sizeof(struct ath_rateioctl_rt); + + /* + * Second TLV - sample node statistics + */ + av.tlv_id = ATH_RATE_TLV_SAMPLENODE; + av.tlv_len = sizeof(struct sample_node); + copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv)); + o += sizeof(struct ath_rateioctl_tlv); + + /* + * Copy the statistics over to the provided buffer. + */ + copyout(sn, rs->buf + o, sizeof(struct sample_node)); + o += sizeof(struct sample_node); + + free(tv, M_TEMP); + + return (0); +} + static void sample_stats(void *arg, struct ieee80211_node *ni) { diff --git a/sys/dev/ath/ath_rate/sample/sample.h b/sys/dev/ath/ath_rate/sample/sample.h index bb72c0a..b9e7230 100644 --- a/sys/dev/ath/ath_rate/sample/sample.h +++ b/sys/dev/ath/ath_rate/sample/sample.h @@ -79,10 +79,18 @@ struct txschedule { */ #define NUM_PACKET_SIZE_BINS 2 +static const int packet_size_bins[NUM_PACKET_SIZE_BINS] = { 250, 1600 }; + +static inline int +bin_to_size(int index) +{ + return packet_size_bins[index]; +} + /* per-node state */ struct sample_node { int static_rix; /* rate index of fixed tx rate */ -#define SAMPLE_MAXRATES 32 /* NB: corresponds to hal info[32] */ +#define SAMPLE_MAXRATES 64 /* NB: corresponds to hal info[32] */ uint32_t ratemask; /* bit mask of valid rate indices */ const struct txschedule *sched; /* tx schedule table */ @@ -101,6 +109,9 @@ struct sample_node { int packets_since_sample[NUM_PACKET_SIZE_BINS]; unsigned sample_tt[NUM_PACKET_SIZE_BINS]; }; + +#ifdef _KERNEL + #define ATH_NODE_SAMPLE(an) ((struct sample_node *)&(an)[1]) #define IS_RATE_DEFINED(sn, rix) (((sn)->ratemask & (1<<(rix))) != 0) @@ -225,4 +236,7 @@ static unsigned calc_usecs_unicast_packet(struct ath_softc *sc, } return tt; } + +#endif /* _KERNEL */ + #endif /* _DEV_ATH_RATE_SAMPLE_H */ diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index 965a1fd..caae6308 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -109,6 +109,7 @@ __FBSDID("$FreeBSD$"); #include <dev/ath/if_ath_keycache.h> #include <dev/ath/if_ath_rx.h> #include <dev/ath/if_ath_rx_edma.h> +#include <dev/ath/if_ath_tx_edma.h> #include <dev/ath/if_ath_beacon.h> #include <dev/ath/if_athdfs.h> @@ -253,6 +254,28 @@ SYSCTL_INT(_hw_ath, OID_AUTO, bstuck, CTLFLAG_RW, &ath_bstuck_threshold, MALLOC_DEFINE(M_ATHDEV, "athdev", "ath driver dma buffers"); +void +ath_legacy_attach_comp_func(struct ath_softc *sc) +{ + + /* + * Special case certain configurations. Note the + * CAB queue is handled by these specially so don't + * include them when checking the txq setup mask. + */ + switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) { + case 0x01: + TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc); + break; + case 0x0f: + TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc); + break; + default: + TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc); + break; + } +} + #define HAL_MODE_HT20 (HAL_MODE_11NG_HT20 | HAL_MODE_11NA_HT20) #define HAL_MODE_HT40 \ (HAL_MODE_11NG_HT40PLUS | HAL_MODE_11NG_HT40MINUS | \ @@ -306,8 +329,11 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) if (ath_hal_hasedma(sc->sc_ah)) { sc->sc_isedma = 1; ath_recv_setup_edma(sc); - } else + ath_xmit_setup_edma(sc); + } else { ath_recv_setup_legacy(sc); + ath_xmit_setup_legacy(sc); + } /* * Check if the MAC has multi-rate retry support. @@ -367,14 +393,24 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) ath_setcurmode(sc, IEEE80211_MODE_11A); /* - * Allocate tx+rx descriptors and populate the lists. + * Allocate TX descriptors and populate the lists. */ error = ath_desc_alloc(sc); if (error != 0) { - if_printf(ifp, "failed to allocate descriptors: %d\n", error); + if_printf(ifp, "failed to allocate TX descriptors: %d\n", + error); + goto bad; + } + error = ath_txdma_setup(sc); + if (error != 0) { + if_printf(ifp, "failed to allocate TX descriptors: %d\n", + error); goto bad; } + /* + * Allocate RX descriptors and populate the lists. + */ error = ath_rxdma_setup(sc); if (error != 0) { if_printf(ifp, "failed to allocate RX descriptors: %d\n", @@ -446,21 +482,12 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) } /* - * Special case certain configurations. Note the - * CAB queue is handled by these specially so don't - * include them when checking the txq setup mask. + * Attach the TX completion function. + * + * The non-EDMA chips may have some special case optimisations; + * this method gives everyone a chance to attach cleanly. */ - switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) { - case 0x01: - TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc); - break; - case 0x0f: - TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc); - break; - default: - TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc); - break; - } + sc->sc_tx.xmit_attach_comp_func(sc); /* * Setup rate control. Some rate control modules @@ -678,6 +705,12 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) (void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask); } + /* + * Disable MRR with protected frames by default. + * Only 802.11n series NICs can handle this. + */ + sc->sc_mrrprot = 0; /* XXX should be a capability */ + #ifdef ATH_ENABLE_11N /* * Query HT capabilities @@ -687,6 +720,9 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) int rxs, txs; device_printf(sc->sc_dev, "[HT] enabling HT modes\n"); + + sc->sc_mrrprot = 1; /* XXX should be a capability */ + ic->ic_htcaps = IEEE80211_HTC_HT /* HT operation */ | IEEE80211_HTC_AMPDU /* A-MPDU tx/rx */ | IEEE80211_HTC_AMSDU /* A-MSDU tx/rx */ @@ -858,6 +894,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc) bad2: ath_tx_cleanup(sc); ath_desc_free(sc); + ath_txdma_teardown(sc); ath_rxdma_teardown(sc); bad: if (ah) @@ -901,6 +938,7 @@ ath_detach(struct ath_softc *sc) ath_dfs_detach(sc); ath_desc_free(sc); + ath_txdma_teardown(sc); ath_rxdma_teardown(sc); ath_tx_cleanup(sc); ath_hal_detach(sc->sc_ah); /* NB: sets chip in full sleep */ @@ -2749,28 +2787,32 @@ ath_load_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error) *paddr = segs->ds_addr; } +/* + * Allocate the descriptors and appropriate DMA tag/setup. + * + * For some situations (eg EDMA TX completion), there isn't a requirement + * for the ath_buf entries to be allocated. + */ int -ath_descdma_setup(struct ath_softc *sc, +ath_descdma_alloc_desc(struct ath_softc *sc, struct ath_descdma *dd, ath_bufhead *head, - const char *name, int nbuf, int ndesc) + const char *name, int ds_size, int ndesc) { #define DS2PHYS(_dd, _ds) \ ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc)) #define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \ ((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0) struct ifnet *ifp = sc->sc_ifp; - uint8_t *ds; - struct ath_buf *bf; - int i, bsize, error; - int desc_len; + int error; - desc_len = sizeof(struct ath_desc); + dd->dd_descsize = ds_size; - DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA: %u buffers %u desc/buf\n", - __func__, name, nbuf, ndesc); + DPRINTF(sc, ATH_DEBUG_RESET, + "%s: %s DMA: %u desc, %d bytes per descriptor\n", + __func__, name, ndesc, dd->dd_descsize); dd->dd_name = name; - dd->dd_desc_len = desc_len * nbuf * ndesc; + dd->dd_desc_len = dd->dd_descsize * ndesc; /* * Merlin work-around: @@ -2778,8 +2820,8 @@ ath_descdma_setup(struct ath_softc *sc, * Assume one skipped descriptor per 4KB page. */ if (! ath_hal_split4ktrans(sc->sc_ah)) { - int numdescpage = 4096 / (desc_len * ndesc); - dd->dd_desc_len = (nbuf / numdescpage + 1) * 4096; + int numpages = dd->dd_desc_len / 4096; + dd->dd_desc_len += ds_size * numpages; } /* @@ -2815,7 +2857,7 @@ ath_descdma_setup(struct ath_softc *sc, &dd->dd_dmamap); if (error != 0) { if_printf(ifp, "unable to alloc memory for %u %s descriptors, " - "error %u\n", nbuf * ndesc, dd->dd_name, error); + "error %u\n", ndesc, dd->dd_name, error); goto fail1; } @@ -2829,10 +2871,49 @@ ath_descdma_setup(struct ath_softc *sc, goto fail2; } - ds = (uint8_t *) dd->dd_desc; DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n", - __func__, dd->dd_name, ds, (u_long) dd->dd_desc_len, - (caddr_t) dd->dd_desc_paddr, /*XXX*/ (u_long) dd->dd_desc_len); + __func__, dd->dd_name, (uint8_t *) dd->dd_desc, + (u_long) dd->dd_desc_len, (caddr_t) dd->dd_desc_paddr, + /*XXX*/ (u_long) dd->dd_desc_len); + + return (0); + +fail2: + bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap); +fail1: + bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap); +fail0: + bus_dma_tag_destroy(dd->dd_dmat); + memset(dd, 0, sizeof(*dd)); + return error; +#undef DS2PHYS +#undef ATH_DESC_4KB_BOUND_CHECK +} + +int +ath_descdma_setup(struct ath_softc *sc, + struct ath_descdma *dd, ath_bufhead *head, + const char *name, int ds_size, int nbuf, int ndesc) +{ +#define DS2PHYS(_dd, _ds) \ + ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc)) +#define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \ + ((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0) + struct ifnet *ifp = sc->sc_ifp; + uint8_t *ds; + struct ath_buf *bf; + int i, bsize, error; + + /* Allocate descriptors */ + error = ath_descdma_alloc_desc(sc, dd, head, name, ds_size, + nbuf * ndesc); + + /* Assume any errors during allocation were dealt with */ + if (error != 0) { + return (error); + } + + ds = (uint8_t *) dd->dd_desc; /* allocate rx buffers */ bsize = sizeof(struct ath_buf) * nbuf; @@ -2845,7 +2926,7 @@ ath_descdma_setup(struct ath_softc *sc, dd->dd_bufptr = bf; TAILQ_INIT(head); - for (i = 0; i < nbuf; i++, bf++, ds += (ndesc * desc_len)) { + for (i = 0; i < nbuf; i++, bf++, ds += (ndesc * dd->dd_descsize)) { bf->bf_desc = (struct ath_desc *) ds; bf->bf_daddr = DS2PHYS(dd, ds); if (! ath_hal_split4ktrans(sc->sc_ah)) { @@ -2855,7 +2936,7 @@ ath_descdma_setup(struct ath_softc *sc, * in the descriptor. */ if (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr, - desc_len * ndesc)) { + dd->dd_descsize)) { /* Start at the next page */ ds += 0x1000 - (bf->bf_daddr & 0xFFF); bf->bf_desc = (struct ath_desc *) ds; @@ -2873,14 +2954,18 @@ ath_descdma_setup(struct ath_softc *sc, bf->bf_lastds = bf->bf_desc; /* Just an initial value */ TAILQ_INSERT_TAIL(head, bf, bf_list); } + + /* + * XXX TODO: ensure that ds doesn't overflow the descriptor + * allocation otherwise weird stuff will occur and crash your + * machine. + */ return 0; + /* XXX this should likely just call ath_descdma_cleanup() */ fail3: bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap); -fail2: bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap); -fail1: bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap); -fail0: bus_dma_tag_destroy(dd->dd_dmat); memset(dd, 0, sizeof(*dd)); return error; @@ -2888,6 +2973,69 @@ fail0: #undef ATH_DESC_4KB_BOUND_CHECK } +/* + * Allocate ath_buf entries but no descriptor contents. + * + * This is for RX EDMA where the descriptors are the header part of + * the RX buffer. + */ +int +ath_descdma_setup_rx_edma(struct ath_softc *sc, + struct ath_descdma *dd, ath_bufhead *head, + const char *name, int nbuf, int rx_status_len) +{ + struct ifnet *ifp = sc->sc_ifp; + struct ath_buf *bf; + int i, bsize, error; + + DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA: %u buffers\n", + __func__, name, nbuf); + + dd->dd_name = name; + /* + * This is (mostly) purely for show. We're not allocating any actual + * descriptors here as EDMA RX has the descriptor be part + * of the RX buffer. + * + * However, dd_desc_len is used by ath_descdma_free() to determine + * whether we have already freed this DMA mapping. + */ + dd->dd_desc_len = rx_status_len * nbuf; + dd->dd_descsize = rx_status_len; + + /* allocate rx buffers */ + bsize = sizeof(struct ath_buf) * nbuf; + bf = malloc(bsize, M_ATHDEV, M_NOWAIT | M_ZERO); + if (bf == NULL) { + if_printf(ifp, "malloc of %s buffers failed, size %u\n", + dd->dd_name, bsize); + error = ENOMEM; + goto fail3; + } + dd->dd_bufptr = bf; + + TAILQ_INIT(head); + for (i = 0; i < nbuf; i++, bf++) { + bf->bf_desc = NULL; + bf->bf_daddr = 0; + bf->bf_lastds = NULL; /* Just an initial value */ + + error = bus_dmamap_create(sc->sc_dmat, BUS_DMA_NOWAIT, + &bf->bf_dmamap); + if (error != 0) { + if_printf(ifp, "unable to create dmamap for %s " + "buffer %u, error %u\n", dd->dd_name, i, error); + ath_descdma_cleanup(sc, dd, head); + return error; + } + TAILQ_INSERT_TAIL(head, bf, bf_list); + } + return 0; +fail3: + memset(dd, 0, sizeof(*dd)); + return error; +} + void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd, ath_bufhead *head) @@ -2895,32 +3043,39 @@ ath_descdma_cleanup(struct ath_softc *sc, struct ath_buf *bf; struct ieee80211_node *ni; - bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap); - bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap); - bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap); - bus_dma_tag_destroy(dd->dd_dmat); + if (dd->dd_dmamap != 0) { + bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap); + bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap); + bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap); + bus_dma_tag_destroy(dd->dd_dmat); + } - TAILQ_FOREACH(bf, head, bf_list) { - if (bf->bf_m) { - m_freem(bf->bf_m); - bf->bf_m = NULL; - } - if (bf->bf_dmamap != NULL) { - bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap); - bf->bf_dmamap = NULL; - } - ni = bf->bf_node; - bf->bf_node = NULL; - if (ni != NULL) { - /* - * Reclaim node reference. - */ - ieee80211_free_node(ni); + if (head != NULL) { + TAILQ_FOREACH(bf, head, bf_list) { + if (bf->bf_m) { + m_freem(bf->bf_m); + bf->bf_m = NULL; + } + if (bf->bf_dmamap != NULL) { + bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap); + bf->bf_dmamap = NULL; + } + ni = bf->bf_node; + bf->bf_node = NULL; + if (ni != NULL) { + /* + * Reclaim node reference. + */ + ieee80211_free_node(ni); + } } } - TAILQ_INIT(head); - free(dd->dd_bufptr, M_ATHDEV); + if (head != NULL) + TAILQ_INIT(head); + + if (dd->dd_bufptr != NULL) + free(dd->dd_bufptr, M_ATHDEV); memset(dd, 0, sizeof(*dd)); } @@ -2930,14 +3085,15 @@ ath_desc_alloc(struct ath_softc *sc) int error; error = ath_descdma_setup(sc, &sc->sc_txdma, &sc->sc_txbuf, - "tx", ath_txbuf, ATH_TXDESC); + "tx", sc->sc_tx_desclen, ath_txbuf, ATH_TXDESC); if (error != 0) { return error; } sc->sc_txbuf_cnt = ath_txbuf; error = ath_descdma_setup(sc, &sc->sc_txdma_mgmt, &sc->sc_txbuf_mgmt, - "tx_mgmt", ath_txbuf_mgmt, ATH_TXDESC); + "tx_mgmt", sc->sc_tx_desclen, ath_txbuf_mgmt, + ATH_TXDESC); if (error != 0) { ath_descdma_cleanup(sc, &sc->sc_txdma, &sc->sc_txbuf); return error; @@ -2949,7 +3105,7 @@ ath_desc_alloc(struct ath_softc *sc) */ error = ath_descdma_setup(sc, &sc->sc_bdma, &sc->sc_bbuf, - "beacon", ATH_BCBUF, 1); + "beacon", sc->sc_tx_desclen, ATH_BCBUF, 1); if (error != 0) { ath_descdma_cleanup(sc, &sc->sc_txdma, &sc->sc_txbuf); ath_descdma_cleanup(sc, &sc->sc_txdma_mgmt, @@ -3429,8 +3585,8 @@ ath_tx_update_busy(struct ath_softc *sc) * Kick the packet scheduler if needed. This can occur from this * particular task. */ -static int -ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) +int +ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) { struct ath_hal *ah = sc->sc_ah; struct ath_buf *bf; @@ -3830,7 +3986,7 @@ ath_tx_freebuf(struct ath_softc *sc, struct ath_buf *bf, int status) } void -ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) +ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) { #ifdef ATH_DEBUG struct ath_hal *ah = sc->sc_ah; @@ -4861,6 +5017,43 @@ ath_watchdog(void *arg) callout_schedule(&sc->sc_wd_ch, hz); } +/* + * Fetch the rate control statistics for the given node. + */ +static int +ath_ioctl_ratestats(struct ath_softc *sc, struct ath_rateioctl *rs) +{ + struct ath_node *an; + struct ieee80211com *ic = sc->sc_ifp->if_l2com; + struct ieee80211_node *ni; + int error = 0; + + /* Perform a lookup on the given node */ + ni = ieee80211_find_node(&ic->ic_sta, rs->is_u.macaddr); + if (ni == NULL) { + error = EINVAL; + goto bad; + } + + /* Lock the ath_node */ + an = ATH_NODE(ni); + ATH_NODE_LOCK(an); + + /* Fetch the rate control stats for this node */ + error = ath_rate_fetch_node_stats(sc, an, rs); + + /* No matter what happens here, just drop through */ + + /* Unlock the ath_node */ + ATH_NODE_UNLOCK(an); + + /* Unref the node */ + ieee80211_node_decref(ni); + +bad: + return (error); +} + #ifdef ATH_DIAGAPI /* * Diagnostic interface to the HAL. This is used by various @@ -5009,6 +5202,9 @@ ath_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) error = ath_ioctl_phyerr(sc,(struct ath_diag*) ifr); break; #endif + case SIOCGATHNODERATESTATS: + error = ath_ioctl_ratestats(sc, (struct ath_rateioctl *) ifr); + break; case SIOCGIFADDR: error = ether_ioctl(ifp, cmd, data); break; diff --git a/sys/dev/ath/if_ath_ahb.c b/sys/dev/ath/if_ath_ahb.c index a5bb413..1d8d7ac 100644 --- a/sys/dev/ath/if_ath_ahb.c +++ b/sys/dev/ath/if_ath_ahb.c @@ -193,11 +193,15 @@ ath_ahb_attach(device_t dev) ATH_LOCK_INIT(sc); ATH_PCU_LOCK_INIT(sc); + ATH_RX_LOCK_INIT(sc); + ATH_TXSTATUS_LOCK_INIT(sc); error = ath_attach(AR9130_DEVID, sc); if (error == 0) /* success */ return 0; + ATH_TXSTATUS_LOCK_DESTROY(sc); + ATH_RX_LOCK_DESTROY(sc); ATH_PCU_LOCK_DESTROY(sc); ATH_LOCK_DESTROY(sc); bus_dma_tag_destroy(sc->sc_dmat); @@ -238,6 +242,8 @@ ath_ahb_detach(device_t dev) if (sc->sc_eepromdata) free(sc->sc_eepromdata, M_TEMP); + ATH_TXSTATUS_LOCK_DESTROY(sc); + ATH_RX_LOCK_DESTROY(sc); ATH_PCU_LOCK_DESTROY(sc); ATH_LOCK_DESTROY(sc); diff --git a/sys/dev/ath/if_ath_beacon.c b/sys/dev/ath/if_ath_beacon.c index c4b159a..4ebdcf0 100644 --- a/sys/dev/ath/if_ath_beacon.c +++ b/sys/dev/ath/if_ath_beacon.c @@ -277,14 +277,15 @@ ath_beacon_setup(struct ath_softc *sc, struct ath_buf *bf) flags = HAL_TXDESC_NOACK; if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol) { - ds->ds_link = bf->bf_daddr; /* self-linked */ + /* self-linked descriptor */ + ath_hal_settxdesclink(sc->sc_ah, ds, bf->bf_daddr); flags |= HAL_TXDESC_VEOL; /* * Let hardware handle antenna switching. */ antenna = sc->sc_txantenna; } else { - ds->ds_link = 0; + ath_hal_settxdesclink(sc->sc_ah, ds, 0); /* * Switch antenna every 4 beacons. * XXX assumes two antenna @@ -405,8 +406,10 @@ ath_beacon_proc(void *arg, int pending) if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) { bf = ath_beacon_generate(sc, vap); if (bf != NULL) { + /* XXX should do this using the ds */ *bflink = bf->bf_daddr; - bflink = &bf->bf_desc->ds_link; + ath_hal_gettxdesclinkptr(sc->sc_ah, + bf->bf_desc, &bflink); } } } diff --git a/sys/dev/ath/if_ath_misc.h b/sys/dev/ath/if_ath_misc.h index 0a51fee..d34c72c 100644 --- a/sys/dev/ath/if_ath_misc.h +++ b/sys/dev/ath/if_ath_misc.h @@ -66,7 +66,6 @@ extern void ath_returnbuf_head(struct ath_softc *sc, struct ath_buf *bf); extern void ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf); extern int ath_reset(struct ifnet *, ATH_RESET_TYPE); -extern void ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq); extern void ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf, int fail); extern void ath_tx_update_ratectrl(struct ath_softc *sc, @@ -84,11 +83,23 @@ extern void ath_setdefantenna(struct ath_softc *sc, u_int antenna); extern void ath_setslottime(struct ath_softc *sc); +extern int ath_descdma_alloc_desc(struct ath_softc *sc, + struct ath_descdma *dd, ath_bufhead *head, const char *name, + int ds_size, int ndesc); extern int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd, - ath_bufhead *head, const char *name, int nbuf, int ndesc); + ath_bufhead *head, const char *name, int ds_size, int nbuf, + int ndesc); +extern int ath_descdma_setup_rx_edma(struct ath_softc *sc, + struct ath_descdma *dd, ath_bufhead *head, const char *name, + int nbuf, int desclen); extern void ath_descdma_cleanup(struct ath_softc *sc, struct ath_descdma *dd, ath_bufhead *head); +extern void ath_legacy_attach_comp_func(struct ath_softc *sc); +extern void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq); +extern int ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, + int dosched); + /* * This is only here so that the RX proc function can call it. * It's very likely that the "start TX after RX" call should be diff --git a/sys/dev/ath/if_ath_pci.c b/sys/dev/ath/if_ath_pci.c index 773b79d..5973dc3 100644 --- a/sys/dev/ath/if_ath_pci.c +++ b/sys/dev/ath/if_ath_pci.c @@ -249,12 +249,16 @@ ath_pci_attach(device_t dev) ATH_LOCK_INIT(sc); ATH_PCU_LOCK_INIT(sc); + ATH_RX_LOCK_INIT(sc); + ATH_TXSTATUS_LOCK_INIT(sc); error = ath_attach(pci_get_device(dev), sc); if (error == 0) /* success */ return 0; + ATH_TXSTATUS_LOCK_DESTROY(sc); ATH_PCU_LOCK_DESTROY(sc); + ATH_RX_LOCK_DESTROY(sc); ATH_LOCK_DESTROY(sc); bus_dma_tag_destroy(sc->sc_dmat); bad3: @@ -293,7 +297,9 @@ ath_pci_detach(device_t dev) if (sc->sc_eepromdata) free(sc->sc_eepromdata, M_TEMP); + ATH_TXSTATUS_LOCK_DESTROY(sc); ATH_PCU_LOCK_DESTROY(sc); + ATH_RX_LOCK_DESTROY(sc); ATH_LOCK_DESTROY(sc); return (0); diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c index eba6ba5..4027bfe 100644 --- a/sys/dev/ath/if_ath_rx.c +++ b/sys/dev/ath/if_ath_rx.c @@ -534,6 +534,14 @@ ath_rx_pkt(struct ath_softc *sc, struct ath_rx_status *rs, HAL_STATUS status, goto rx_accept; sc->sc_stats.ast_rx_badcrypt++; } + /* + * Similar as above - if the failure was a keymiss + * just punt it up to the upper layers for now. + */ + if (rs->rs_status & HAL_RXERR_KEYMISS) { + sc->sc_stats.ast_rx_keymiss++; + goto rx_accept; + } if (rs->rs_status & HAL_RXERR_MIC) { sc->sc_stats.ast_rx_badmic++; /* @@ -1067,7 +1075,7 @@ ath_legacy_dma_rxsetup(struct ath_softc *sc) device_printf(sc->sc_dev, "%s: called\n", __func__); error = ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf, - "rx", ath_rxbuf, 1); + "rx", sizeof(struct ath_desc), ath_rxbuf, 1); if (error != 0) return (error); @@ -1091,6 +1099,9 @@ ath_recv_setup_legacy(struct ath_softc *sc) device_printf(sc->sc_dev, "DMA setup: legacy\n"); + /* Sensible legacy defaults */ + sc->sc_rx_statuslen = 0; + sc->sc_rx.recv_start = ath_legacy_startrecv; sc->sc_rx.recv_stop = ath_legacy_stoprecv; sc->sc_rx.recv_flush = ath_legacy_flushrecv; diff --git a/sys/dev/ath/if_ath_rx_edma.c b/sys/dev/ath/if_ath_rx_edma.c index 9e3580d..b6f7dfd 100644 --- a/sys/dev/ath/if_ath_rx_edma.c +++ b/sys/dev/ath/if_ath_rx_edma.c @@ -156,6 +156,7 @@ ath_edma_stoprecv(struct ath_softc *sc, int dodelay) { struct ath_hal *ah = sc->sc_ah; + ATH_RX_LOCK(sc); ath_hal_stoppcurecv(ah); ath_hal_setrxfilter(ah, 0); ath_hal_stopdmarecv(ah); @@ -173,6 +174,7 @@ ath_edma_stoprecv(struct ath_softc *sc, int dodelay) m_freem(sc->sc_rxedma[HAL_RX_QUEUE_LP].m_rxpending); sc->sc_rxedma[HAL_RX_QUEUE_LP].m_rxpending = NULL; } + ATH_RX_UNLOCK(sc); } /* @@ -187,6 +189,8 @@ ath_edma_reinit_fifo(struct ath_softc *sc, HAL_RX_QUEUE qtype) struct ath_buf *bf; int i, j; + ATH_RX_LOCK_ASSERT(sc); + i = re->m_fifo_head; for (j = 0; j < re->m_fifo_depth; j++) { bf = re->m_fifo[i]; @@ -221,6 +225,8 @@ ath_edma_startrecv(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; + ATH_RX_LOCK(sc); + /* Enable RX FIFO */ ath_hal_rxena(ah); @@ -266,6 +272,9 @@ ath_edma_startrecv(struct ath_softc *sc) ath_mode_init(sc); ath_hal_startpcurecv(ah); + + ATH_RX_UNLOCK(sc); + return (0); } @@ -275,8 +284,16 @@ ath_edma_recv_flush(struct ath_softc *sc) device_printf(sc->sc_dev, "%s: called\n", __func__); + ATH_PCU_LOCK(sc); + sc->sc_rxproc_cnt++; + ATH_PCU_UNLOCK(sc); + ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, 0); ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, 0); + + ATH_PCU_LOCK(sc); + sc->sc_rxproc_cnt--; + ATH_PCU_UNLOCK(sc); } /* @@ -300,16 +317,21 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, struct ath_desc *ds; struct ath_buf *bf; struct mbuf *m; - HAL_STATUS status; struct ath_hal *ah = sc->sc_ah; uint64_t tsf; int16_t nf; - int ngood = 0; + int ngood = 0, npkts = 0; + ath_bufhead rxlist; + struct ath_buf *next; + + TAILQ_INIT(&rxlist); tsf = ath_hal_gettsf64(ah); nf = ath_hal_getchannoise(ah, sc->sc_curchan); sc->sc_stats.ast_rx_noise = nf; + ATH_RX_LOCK(sc); + do { bf = re->m_fifo[re->m_fifo_head]; /* This shouldn't occur! */ @@ -330,12 +352,13 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_POSTREAD); rs = &bf->bf_status.ds_rxstat; - status = ath_hal_rxprocdesc(ah, ds, bf->bf_daddr, NULL, rs); + bf->bf_rxstatus = ath_hal_rxprocdesc(ah, ds, bf->bf_daddr, + NULL, rs); #ifdef ATH_DEBUG if (sc->sc_debug & ATH_DEBUG_RECV_DESC) - ath_printrxbuf(sc, bf, 0, status == HAL_OK); + ath_printrxbuf(sc, bf, 0, bf->bf_rxstatus == HAL_OK); #endif - if (status == HAL_EINPROGRESS) + if (bf->bf_rxstatus == HAL_EINPROGRESS) break; /* @@ -347,36 +370,67 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, */ DPRINTF(sc, ATH_DEBUG_EDMA_RX, "%s: Q%d: completed!\n", __func__, qtype); + npkts++; /* - * Remove the FIFO entry! + * Remove the FIFO entry and place it on the completion + * queue. */ re->m_fifo[re->m_fifo_head] = NULL; + TAILQ_INSERT_TAIL(&rxlist, bf, bf_list); + /* Bump the descriptor FIFO stats */ + INCR(re->m_fifo_head, re->m_fifolen); + re->m_fifo_depth--; + /* XXX check it doesn't fall below 0 */ + } while (re->m_fifo_depth > 0); + + /* Append some more fresh frames to the FIFO */ + if (dosched) + ath_edma_rxfifo_alloc(sc, qtype, re->m_fifolen); + + ATH_RX_UNLOCK(sc); + + /* Handle the completed descriptors */ + TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) { /* * Skip the RX descriptor status - start at the data offset */ - m_adj(m, sc->sc_rx_statuslen); + m_adj(bf->bf_m, sc->sc_rx_statuslen); /* Handle the frame */ - if (ath_rx_pkt(sc, rs, status, tsf, nf, qtype, bf)) + /* + * Note: this may or may not free bf->bf_m and sync/unmap + * the frame. + */ + rs = &bf->bf_status.ds_rxstat; + if (ath_rx_pkt(sc, rs, bf->bf_rxstatus, tsf, nf, qtype, bf)) ngood++; + } + /* Free in one set, inside the lock */ + ATH_RX_LOCK(sc); + TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) { /* Free the buffer/mbuf */ ath_edma_rxbuf_free(sc, bf); + } + ATH_RX_UNLOCK(sc); - /* Bump the descriptor FIFO stats */ - INCR(re->m_fifo_head, re->m_fifolen); - re->m_fifo_depth--; - /* XXX check it doesn't fall below 0 */ - } while (re->m_fifo_depth > 0); + /* rx signal state monitoring */ + ath_hal_rxmonitor(ah, &sc->sc_halstats, sc->sc_curchan); + if (ngood) + sc->sc_lastrx = tsf; + + CTR2(ATH_KTR_INTR, "ath edma rx proc: npkts=%d, ngood=%d", + npkts, ngood); /* Handle resched and kickpcu appropriately */ ATH_PCU_LOCK(sc); if (dosched && sc->sc_kickpcu) { CTR0(ATH_KTR_ERR, "ath_edma_recv_proc_queue(): kickpcu"); - device_printf(sc->sc_dev, "%s: handled %d descriptors\n", - __func__, ngood); + device_printf(sc->sc_dev, + "%s: handled npkts %d ngood %d\n", + __func__, npkts, ngood); /* * XXX TODO: what should occur here? Just re-poke and @@ -386,10 +440,6 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype, } ATH_PCU_UNLOCK(sc); - /* Append some more fresh frames to the FIFO */ - if (dosched) - ath_edma_rxfifo_alloc(sc, qtype, re->m_fifolen); - return (ngood); } @@ -397,6 +447,10 @@ static void ath_edma_recv_tasklet(void *arg, int npending) { struct ath_softc *sc = (struct ath_softc *) arg; + struct ifnet *ifp = sc->sc_ifp; +#ifdef IEEE80211_SUPPORT_SUPERG + struct ieee80211com *ic = ifp->if_l2com; +#endif DPRINTF(sc, ATH_DEBUG_EDMA_RX, "%s: called; npending=%d\n", __func__, @@ -409,10 +463,26 @@ ath_edma_recv_tasklet(void *arg, int npending) ATH_PCU_UNLOCK(sc); return; } + sc->sc_rxproc_cnt++; ATH_PCU_UNLOCK(sc); ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, 1); ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, 1); + + /* XXX inside IF_LOCK ? */ + if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) { +#ifdef IEEE80211_SUPPORT_SUPERG + ieee80211_ff_age_all(ic, 100); +#endif + if (! IFQ_IS_EMPTY(&ifp->if_snd)) + ath_tx_kick(sc); + } + if (ath_dfs_tasklet_needed(sc, sc->sc_curchan)) + taskqueue_enqueue(sc->sc_tq, &sc->sc_dfstask); + + ATH_PCU_LOCK(sc); + sc->sc_rxproc_cnt--; + ATH_PCU_UNLOCK(sc); } /* @@ -435,6 +505,8 @@ ath_edma_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf) int error; int len; + ATH_RX_LOCK_ASSERT(sc); + // device_printf(sc->sc_dev, "%s: called; bf=%p\n", __func__, bf); m = m_getm(NULL, sc->sc_edma_bufsize, M_DONTWAIT, MT_DATA); @@ -498,6 +570,8 @@ ath_edma_rxbuf_alloc(struct ath_softc *sc) struct ath_buf *bf; int error; + ATH_RX_LOCK_ASSERT(sc); + /* Allocate buffer */ bf = TAILQ_FIRST(&sc->sc_rxbuf); /* XXX shouldn't happen upon startup? */ @@ -526,6 +600,9 @@ static void ath_edma_rxbuf_free(struct ath_softc *sc, struct ath_buf *bf) { + ATH_RX_LOCK_ASSERT(sc); + + /* We're doing this multiple times? */ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap); if (bf->bf_m) { @@ -550,6 +627,8 @@ ath_edma_rxfifo_alloc(struct ath_softc *sc, HAL_RX_QUEUE qtype, int nbufs) struct ath_buf *bf; int i; + ATH_RX_LOCK_ASSERT(sc); + /* * Allocate buffers until the FIFO is full or nbufs is reached. */ @@ -616,6 +695,8 @@ ath_edma_rxfifo_flush(struct ath_softc *sc, HAL_RX_QUEUE qtype) struct ath_rx_edma *re = &sc->sc_rxedma[qtype]; int i; + ATH_RX_LOCK_ASSERT(sc); + for (i = 0; i < re->m_fifolen; i++) { if (re->m_fifo[i] != NULL) { #ifdef ATH_DEBUG @@ -647,6 +728,8 @@ ath_edma_setup_rxfifo(struct ath_softc *sc, HAL_RX_QUEUE qtype) { struct ath_rx_edma *re = &sc->sc_rxedma[qtype]; + ATH_RX_LOCK_ASSERT(sc); + if (! ath_hal_getrxfifodepth(sc->sc_ah, qtype, &re->m_fifolen)) { device_printf(sc->sc_dev, "%s: qtype=%d, failed\n", __func__, @@ -696,16 +779,18 @@ ath_edma_dma_rxsetup(struct ath_softc *sc) { int error; - /* Create RX DMA tag */ - /* Create RX ath_buf array */ - - error = ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf, - "rx", ath_rxbuf, 1); + /* + * Create RX DMA tag and buffers. + */ + error = ath_descdma_setup_rx_edma(sc, &sc->sc_rxdma, &sc->sc_rxbuf, + "rx", ath_rxbuf, sc->sc_rx_statuslen); if (error != 0) return error; + ATH_RX_LOCK(sc); (void) ath_edma_setup_rxfifo(sc, HAL_RX_QUEUE_HP); (void) ath_edma_setup_rxfifo(sc, HAL_RX_QUEUE_LP); + ATH_RX_UNLOCK(sc); return (0); } @@ -716,11 +801,13 @@ ath_edma_dma_rxteardown(struct ath_softc *sc) device_printf(sc->sc_dev, "%s: called\n", __func__); + ATH_RX_LOCK(sc); ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_HP); ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_HP); ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_LP); ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_LP); + ATH_RX_UNLOCK(sc); /* Free RX ath_buf */ /* Free RX DMA tag */ @@ -739,25 +826,17 @@ ath_recv_setup_edma(struct ath_softc *sc) /* Set buffer size to 4k */ sc->sc_edma_bufsize = 4096; - /* Configure the hardware with this */ - (void) ath_hal_setrxbufsize(sc->sc_ah, sc->sc_edma_bufsize); - /* Fetch EDMA field and buffer sizes */ (void) ath_hal_getrxstatuslen(sc->sc_ah, &sc->sc_rx_statuslen); - (void) ath_hal_gettxdesclen(sc->sc_ah, &sc->sc_tx_desclen); - (void) ath_hal_gettxstatuslen(sc->sc_ah, &sc->sc_tx_statuslen); - (void) ath_hal_getntxmaps(sc->sc_ah, &sc->sc_tx_nmaps); + + /* Configure the hardware with the RX buffer size */ + (void) ath_hal_setrxbufsize(sc->sc_ah, sc->sc_edma_bufsize - + sc->sc_rx_statuslen); device_printf(sc->sc_dev, "RX status length: %d\n", sc->sc_rx_statuslen); - device_printf(sc->sc_dev, "TX descriptor length: %d\n", - sc->sc_tx_desclen); - device_printf(sc->sc_dev, "TX status length: %d\n", - sc->sc_tx_statuslen); - device_printf(sc->sc_dev, "TX/RX buffer size: %d\n", + device_printf(sc->sc_dev, "RX buffer size: %d\n", sc->sc_edma_bufsize); - device_printf(sc->sc_dev, "TX buffers per descriptor: %d\n", - sc->sc_tx_nmaps); sc->sc_rx.recv_stop = ath_edma_stoprecv; sc->sc_rx.recv_start = ath_edma_startrecv; diff --git a/sys/dev/ath/if_ath_sysctl.c b/sys/dev/ath/if_ath_sysctl.c index ff75888..e1e9426 100644 --- a/sys/dev/ath/if_ath_sysctl.c +++ b/sys/dev/ath/if_ath_sysctl.c @@ -934,6 +934,8 @@ ath_sysctl_stats_attach(struct ath_softc *sc) SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_mcastq_overflow", CTLFLAG_RD, &sc->sc_stats.ast_tx_mcastq_overflow, 0, "Number of multicast frames exceeding maximum mcast queue depth"); + SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_keymiss", CTLFLAG_RD, + &sc->sc_stats.ast_rx_keymiss, 0, ""); /* Attach the RX phy error array */ ath_sysctl_stats_attach_rxphyerr(sc, child); diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c index 934f9dc..699478a 100644 --- a/sys/dev/ath/if_ath_tx.c +++ b/sys/dev/ath/if_ath_tx.c @@ -302,6 +302,11 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_buf *bf) struct ath_hal *ah = sc->sc_ah; struct ath_desc *ds, *ds0; int i; + /* + * XXX There's txdma and txdma_mgmt; the descriptor + * sizes must match. + */ + struct ath_descdma *dd = &sc->sc_txdma; /* * Fillin the remainder of the descriptor info. @@ -310,9 +315,10 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_buf *bf) for (i = 0; i < bf->bf_nseg; i++, ds++) { ds->ds_data = bf->bf_segs[i].ds_addr; if (i == bf->bf_nseg - 1) - ds->ds_link = 0; + ath_hal_settxdesclink(ah, ds, 0); else - ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1); + ath_hal_settxdesclink(ah, ds, + bf->bf_daddr + dd->dd_descsize * (i + 1)); ath_hal_filltxdesc(ah, ds , bf->bf_segs[i].ds_len /* segment length */ , i == 0 /* first segment */ @@ -340,6 +346,11 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf) struct ath_hal *ah = sc->sc_ah; struct ath_desc *ds, *ds0; int i; + /* + * XXX There's txdma and txdma_mgmt; the descriptor + * sizes must match. + */ + struct ath_descdma *dd = &sc->sc_txdma; ds0 = ds = bf->bf_desc; @@ -350,9 +361,10 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf) for (i = 0; i < bf->bf_nseg; i++, ds++) { ds->ds_data = bf->bf_segs[i].ds_addr; if (i == bf->bf_nseg - 1) - ds->ds_link = 0; + ath_hal_settxdesclink(ah, ds, 0); else - ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1); + ath_hal_settxdesclink(ah, ds, + bf->bf_daddr + dd->dd_descsize * (i + 1)); /* * This performs the setup for an aggregate frame. @@ -382,6 +394,50 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf) } /* + * Set the rate control fields in the given descriptor based on + * the bf_state fields and node state. + * + * The bfs fields should already be set with the relevant rate + * control information, including whether MRR is to be enabled. + * + * Since the FreeBSD HAL currently sets up the first TX rate + * in ath_hal_setuptxdesc(), this will setup the MRR + * conditionally for the pre-11n chips, and call ath_buf_set_rate + * unconditionally for 11n chips. These require the 11n rate + * scenario to be set if MCS rates are enabled, so it's easier + * to just always call it. The caller can then only set rates 2, 3 + * and 4 if multi-rate retry is needed. + */ +static void +ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni, + struct ath_buf *bf) +{ + struct ath_rc_series *rc = bf->bf_state.bfs_rc; + + /* If mrr is disabled, blank tries 1, 2, 3 */ + if (! bf->bf_state.bfs_ismrr) + rc[1].tries = rc[2].tries = rc[3].tries = 0; + + /* + * Always call - that way a retried descriptor will + * have the MRR fields overwritten. + * + * XXX TODO: see if this is really needed - setting up + * the first descriptor should set the MRR fields to 0 + * for us anyway. + */ + if (ath_tx_is_11n(sc)) { + ath_buf_set_rate(sc, ni, bf); + } else { + ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc + , rc[1].ratecode, rc[1].tries + , rc[2].ratecode, rc[2].tries + , rc[3].ratecode, rc[3].tries + ); + } +} + +/* * Setup segments+descriptors for an 11n aggregate. * bf_first is the first buffer in the aggregate. * The descriptor list must already been linked together using @@ -414,7 +470,8 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first) * to the beginning descriptor of this frame. */ if (bf_prev != NULL) - bf_prev->bf_lastds->ds_link = bf->bf_daddr; + ath_hal_settxdesclink(sc->sc_ah, bf_prev->bf_lastds, + bf->bf_daddr); /* Save a copy so we can link the next descriptor in */ bf_prev = bf; @@ -439,13 +496,6 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first) bf_first->bf_state.bfs_ctsduration); /* - * Setup the last descriptor in the list. - * bf_prev points to the last; bf is NULL here. - */ - ath_hal_setuplasttxdesc(sc->sc_ah, bf_prev->bf_desc, - bf_first->bf_desc); - - /* * Set the first descriptor bf_lastds field to point to * the last descriptor in the last subframe, that's where * the status update will occur. @@ -458,6 +508,21 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first) */ bf_first->bf_last = bf_prev; + /* + * setup first desc with rate and aggr info + */ + ath_tx_set_ratectrl(sc, bf_first->bf_node, bf_first); + + /* + * Setup the last descriptor in the list. + * + * bf_first->bf_lastds already points to it; the rate + * control information needs to be squirreled away here + * as well ans clearing the moreaggr/paddelim fields. + */ + ath_hal_setuplasttxdesc(sc->sc_ah, bf_first->bf_lastds, + bf_first->bf_desc); + DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: end\n", __func__); } @@ -482,7 +547,7 @@ ath_tx_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq, *txq->axq_link = bf->bf_daddr; } ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); - txq->axq_link = &bf->bf_lastds->ds_link; + ath_hal_gettxdesclinkptr(sc->sc_ah, bf->bf_lastds, &txq->axq_link); } /* @@ -616,7 +681,7 @@ ath_tx_handoff_hw(struct ath_softc *sc, struct ath_txq *txq, #endif /* IEEE80211_SUPPORT_TDMA */ if (bf->bf_state.bfs_aggr) txq->axq_aggr_depth++; - txq->axq_link = &bf->bf_lastds->ds_link; + ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link); ath_hal_txstart(ah, txq->axq_qnum); } } @@ -626,8 +691,8 @@ ath_tx_handoff_hw(struct ath_softc *sc, struct ath_txq *txq, * * This must be called whether the queue is empty or not. */ -void -ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq) +static void +ath_legacy_tx_dma_restart(struct ath_softc *sc, struct ath_txq *txq) { struct ath_hal *ah = sc->sc_ah; struct ath_buf *bf, *bf_last; @@ -645,7 +710,7 @@ ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq) return; ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr); - txq->axq_link = &bf_last->bf_lastds->ds_link; + ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link); ath_hal_txstart(ah, txq->axq_qnum); } @@ -655,7 +720,8 @@ ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq) * The relevant hardware txq should be locked. */ static void -ath_tx_handoff(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf) +ath_legacy_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq, + struct ath_buf *bf) { ATH_TXQ_LOCK_ASSERT(txq); @@ -988,11 +1054,12 @@ ath_tx_set_rtscts(struct ath_softc *sc, struct ath_buf *bf) /* * Must disable multi-rate retry when using RTS/CTS. - * XXX TODO: only for pre-11n NICs. */ - bf->bf_state.bfs_ismrr = 0; - bf->bf_state.bfs_try0 = - bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */ + if (!sc->sc_mrrprot) { + bf->bf_state.bfs_ismrr = 0; + bf->bf_state.bfs_try0 = + bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */ + } } /* @@ -1025,7 +1092,9 @@ ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf) bf->bf_lastds = ds; bf->bf_last = bf; - /* XXX TODO: Setup descriptor chain */ + /* Set rate control and descriptor chain for this frame */ + ath_tx_set_ratectrl(sc, bf->bf_node, bf); + ath_tx_chaindesclist(sc, bf); } /* @@ -1074,50 +1143,6 @@ ath_tx_do_ratelookup(struct ath_softc *sc, struct ath_buf *bf) } /* - * Set the rate control fields in the given descriptor based on - * the bf_state fields and node state. - * - * The bfs fields should already be set with the relevant rate - * control information, including whether MRR is to be enabled. - * - * Since the FreeBSD HAL currently sets up the first TX rate - * in ath_hal_setuptxdesc(), this will setup the MRR - * conditionally for the pre-11n chips, and call ath_buf_set_rate - * unconditionally for 11n chips. These require the 11n rate - * scenario to be set if MCS rates are enabled, so it's easier - * to just always call it. The caller can then only set rates 2, 3 - * and 4 if multi-rate retry is needed. - */ -static void -ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni, - struct ath_buf *bf) -{ - struct ath_rc_series *rc = bf->bf_state.bfs_rc; - - /* If mrr is disabled, blank tries 1, 2, 3 */ - if (! bf->bf_state.bfs_ismrr) - rc[1].tries = rc[2].tries = rc[3].tries = 0; - - /* - * Always call - that way a retried descriptor will - * have the MRR fields overwritten. - * - * XXX TODO: see if this is really needed - setting up - * the first descriptor should set the MRR fields to 0 - * for us anyway. - */ - if (ath_tx_is_11n(sc)) { - ath_buf_set_rate(sc, ni, bf); - } else { - ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc - , rc[1].ratecode, rc[1].tries - , rc[2].ratecode, rc[2].tries - , rc[3].ratecode, rc[3].tries - ); - } -} - -/* * Transmit the given frame to the hardware. * * The frame must already be setup; rate control must already have @@ -1142,8 +1167,6 @@ ath_tx_xmit_normal(struct ath_softc *sc, struct ath_txq *txq, ath_tx_set_rtscts(sc, bf); ath_tx_rate_fill_rcflags(sc, bf); ath_tx_setds(sc, bf); - ath_tx_set_ratectrl(sc, bf->bf_node, bf); - ath_tx_chaindesclist(sc, bf); /* Hand off to hardware */ ath_tx_handoff(sc, txq, bf); @@ -2391,8 +2414,6 @@ ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an, struct ath_buf *bf) ath_tx_set_rtscts(sc, bf); ath_tx_rate_fill_rcflags(sc, bf); ath_tx_setds(sc, bf); - ath_tx_set_ratectrl(sc, bf->bf_node, bf); - ath_tx_chaindesclist(sc, bf); /* Statistics */ sc->sc_aggr_stats.aggr_low_hwq_single_pkt++; @@ -3834,7 +3855,6 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an, struct ath_buf *bf; struct ath_txq *txq = sc->sc_ac2q[tid->ac]; struct ieee80211_tx_ampdu *tap; - struct ieee80211_node *ni = &an->an_node; ATH_AGGR_STATUS status; ath_bufhead bf_q; @@ -3882,9 +3902,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an, ath_tx_set_rtscts(sc, bf); ath_tx_rate_fill_rcflags(sc, bf); ath_tx_setds(sc, bf); - ath_tx_chaindesclist(sc, bf); ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); - ath_tx_set_ratectrl(sc, ni, bf); sc->sc_aggr_stats.aggr_nonbaw_pkt++; @@ -3942,9 +3960,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an, "%s: single-frame aggregate\n", __func__); bf->bf_state.bfs_aggr = 0; ath_tx_setds(sc, bf); - ath_tx_chaindesclist(sc, bf); ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); - ath_tx_set_ratectrl(sc, ni, bf); if (status == ATH_AGGR_BAW_CLOSED) sc->sc_aggr_stats.aggr_baw_closed_single_pkt++; else @@ -3979,10 +3995,6 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an, */ ath_tx_setds_11n(sc, bf); - /* - * setup first desc with rate and aggr info - */ - ath_tx_set_ratectrl(sc, ni, bf); } queuepkt: //txq = bf->bf_state.bfs_txq; @@ -4022,7 +4034,6 @@ ath_tx_tid_hw_queue_norm(struct ath_softc *sc, struct ath_node *an, { struct ath_buf *bf; struct ath_txq *txq = sc->sc_ac2q[tid->ac]; - struct ieee80211_node *ni = &an->an_node; DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: node %p: TID %d: called\n", __func__, an, tid->tid); @@ -4071,8 +4082,6 @@ ath_tx_tid_hw_queue_norm(struct ath_softc *sc, struct ath_node *an, ath_tx_set_rtscts(sc, bf); ath_tx_rate_fill_rcflags(sc, bf); ath_tx_setds(sc, bf); - ath_tx_chaindesclist(sc, bf); - ath_tx_set_ratectrl(sc, ni, bf); /* Track outstanding buffer count to hardware */ /* aggregates are "one" buffer */ @@ -4450,3 +4459,40 @@ ath_addba_response_timeout(struct ieee80211_node *ni, ath_tx_tid_resume(sc, atid); ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]); } + +static int +ath_legacy_dma_txsetup(struct ath_softc *sc) +{ + + /* nothing new needed */ + return (0); +} + +static int +ath_legacy_dma_txteardown(struct ath_softc *sc) +{ + + /* nothing new needed */ + return (0); +} + +void +ath_xmit_setup_legacy(struct ath_softc *sc) +{ + /* + * For now, just set the descriptor length to sizeof(ath_desc); + * worry about extracting the real length out of the HAL later. + */ + sc->sc_tx_desclen = sizeof(struct ath_desc); + sc->sc_tx_statuslen = 0; + sc->sc_tx_nmaps = 1; /* only one buffer per TX desc */ + + sc->sc_tx.xmit_setup = ath_legacy_dma_txsetup; + sc->sc_tx.xmit_teardown = ath_legacy_dma_txteardown; + sc->sc_tx.xmit_attach_comp_func = ath_legacy_attach_comp_func; + + sc->sc_tx.xmit_dma_restart = ath_legacy_tx_dma_restart; + sc->sc_tx.xmit_handoff = ath_legacy_xmit_handoff; + sc->sc_tx.xmit_processq = ath_legacy_tx_processq; + sc->sc_tx.xmit_drainq = ath_legacy_tx_draintxq; +} diff --git a/sys/dev/ath/if_ath_tx.h b/sys/dev/ath/if_ath_tx.h index 958acf9..4ac4589 100644 --- a/sys/dev/ath/if_ath_tx.h +++ b/sys/dev/ath/if_ath_tx.h @@ -79,7 +79,6 @@ #define BAW_WITHIN(_start, _bawsz, _seqno) \ ((((_seqno) - (_start)) & 4095) < (_bawsz)) -extern void ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq); extern void ath_freetx(struct mbuf *m); extern void ath_tx_node_flush(struct ath_softc *sc, struct ath_node *an); extern void ath_tx_txq_drain(struct ath_softc *sc, struct ath_txq *txq); @@ -124,4 +123,22 @@ extern void ath_bar_response(struct ieee80211_node *ni, extern void ath_addba_response_timeout(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap); +/* + * Setup path + */ +#define ath_txdma_setup(_sc) \ + (_sc)->sc_tx.xmit_setup(_sc) +#define ath_txdma_teardown(_sc) \ + (_sc)->sc_tx.xmit_teardown(_sc) +#define ath_txq_restart_dma(_sc, _txq) \ + (_sc)->sc_tx.xmit_dma_restart((_sc), (_txq)) +#define ath_tx_handoff(_sc, _txq, _bf) \ + (_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf)) +#define ath_tx_draintxq(_sc, _txq) \ + (_sc)->sc_tx.xmit_drainq((_sc), (_txq)) +#define ath_tx_processq(_sc, _txq, _dosched) \ + (_sc)->sc_tx.xmit_processq((_sc), (_txq), (_dosched)) + +extern void ath_xmit_setup_legacy(struct ath_softc *sc); + #endif diff --git a/sys/dev/ath/if_ath_tx_edma.c b/sys/dev/ath/if_ath_tx_edma.c new file mode 100644 index 0000000..5991d1c --- /dev/null +++ b/sys/dev/ath/if_ath_tx_edma.c @@ -0,0 +1,311 @@ +/*- + * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> + * 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. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any + * redistribution must be conditioned upon including a substantially + * similar Disclaimer requirement for further binary redistribution. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +/* + * Driver for the Atheros Wireless LAN controller. + * + * This software is derived from work of Atsushi Onoe; his contribution + * is greatly appreciated. + */ + +#include "opt_inet.h" +#include "opt_ath.h" +/* + * This is needed for register operations which are performed + * by the driver - eg, calls to ath_hal_gettsf32(). + * + * It's also required for any AH_DEBUG checks in here, eg the + * module dependencies. + */ +#include "opt_ah.h" +#include "opt_wlan.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/sysctl.h> +#include <sys/mbuf.h> +#include <sys/malloc.h> +#include <sys/lock.h> +#include <sys/mutex.h> +#include <sys/kernel.h> +#include <sys/socket.h> +#include <sys/sockio.h> +#include <sys/errno.h> +#include <sys/callout.h> +#include <sys/bus.h> +#include <sys/endian.h> +#include <sys/kthread.h> +#include <sys/taskqueue.h> +#include <sys/priv.h> +#include <sys/module.h> +#include <sys/ktr.h> +#include <sys/smp.h> /* for mp_ncpus */ + +#include <machine/bus.h> + +#include <net/if.h> +#include <net/if_dl.h> +#include <net/if_media.h> +#include <net/if_types.h> +#include <net/if_arp.h> +#include <net/ethernet.h> +#include <net/if_llc.h> + +#include <net80211/ieee80211_var.h> +#include <net80211/ieee80211_regdomain.h> +#ifdef IEEE80211_SUPPORT_SUPERG +#include <net80211/ieee80211_superg.h> +#endif +#ifdef IEEE80211_SUPPORT_TDMA +#include <net80211/ieee80211_tdma.h> +#endif + +#include <net/bpf.h> + +#ifdef INET +#include <netinet/in.h> +#include <netinet/if_ether.h> +#endif + +#include <dev/ath/if_athvar.h> +#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */ +#include <dev/ath/ath_hal/ah_diagcodes.h> + +#include <dev/ath/if_ath_debug.h> +#include <dev/ath/if_ath_misc.h> +#include <dev/ath/if_ath_tsf.h> +#include <dev/ath/if_ath_tx.h> +#include <dev/ath/if_ath_sysctl.h> +#include <dev/ath/if_ath_led.h> +#include <dev/ath/if_ath_keycache.h> +#include <dev/ath/if_ath_rx.h> +#include <dev/ath/if_ath_beacon.h> +#include <dev/ath/if_athdfs.h> + +#ifdef ATH_TX99_DIAG +#include <dev/ath/ath_tx99/ath_tx99.h> +#endif + +#include <dev/ath/if_ath_tx_edma.h> + +/* + * some general macros + */ +#define INCR(_l, _sz) (_l) ++; (_l) &= ((_sz) - 1) +#define DECR(_l, _sz) (_l) --; (_l) &= ((_sz) - 1) + +/* + * XXX doesn't belong here, and should be tunable + */ +#define ATH_TXSTATUS_RING_SIZE 512 + +MALLOC_DECLARE(M_ATHDEV); + +/* + * Re-initialise the DMA FIFO with the current contents of + * said FIFO. + * + * This should only be called as part of the chip reset path, as it + * assumes the FIFO is currently empty. + * + * TODO: verify that a cold/warm reset does clear the TX FIFO, so + * writing in a partially-filled FIFO will not cause double-entries + * to appear. + */ +static void +ath_edma_dma_restart(struct ath_softc *sc, struct ath_txq *txq) +{ + + device_printf(sc->sc_dev, "%s: called: txq=%p, qnum=%d\n", + __func__, + txq, + txq->axq_qnum); +} + +/* + * Handoff this frame to the hardware. + * + * For the multicast queue, this will treat it as a software queue + * and append it to the list, after updating the MORE_DATA flag + * in the previous frame. The cabq processing code will ensure + * that the queue contents gets transferred over. + * + * For the hardware queues, this will queue a frame to the queue + * like before, then populate the FIFO from that. Since the + * EDMA hardware has 8 FIFO slots per TXQ, this ensures that + * frames such as management frames don't get prematurely dropped. + * + * This does imply that a similar flush-hwq-to-fifoq method will + * need to be called from the processq function, before the + * per-node software scheduler is called. + */ +static void +ath_edma_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq, + struct ath_buf *bf) +{ + + device_printf(sc->sc_dev, "%s: called; bf=%p, txq=%p, qnum=%d\n", + __func__, + bf, + txq, + txq->axq_qnum); + + /* + * XXX For now this is a placeholder; free the buffer + * and inform the stack that the TX failed. + */ + ath_tx_default_comp(sc, bf, 1); +} + +static int +ath_edma_setup_txfifo(struct ath_softc *sc, int qnum) +{ + struct ath_tx_edma_fifo *te = &sc->sc_txedma[qnum]; + + te->m_fifo = malloc(sizeof(struct ath_buf *) * HAL_TXFIFO_DEPTH, + M_ATHDEV, + M_NOWAIT | M_ZERO); + if (te->m_fifo == NULL) { + device_printf(sc->sc_dev, "%s: malloc failed\n", + __func__); + return (-ENOMEM); + } + + /* + * Set initial "empty" state. + */ + te->m_fifo_head = te->m_fifo_tail = te->m_fifo_depth = 0; + + return (0); +} + +static int +ath_edma_free_txfifo(struct ath_softc *sc, int qnum) +{ + struct ath_tx_edma_fifo *te = &sc->sc_txedma[qnum]; + + /* XXX TODO: actually deref the ath_buf entries? */ + free(te->m_fifo, M_ATHDEV); + return (0); +} + +static int +ath_edma_dma_txsetup(struct ath_softc *sc) +{ + int error; + int i; + + error = ath_descdma_alloc_desc(sc, &sc->sc_txsdma, + NULL, "txcomp", sc->sc_tx_statuslen, ATH_TXSTATUS_RING_SIZE); + if (error != 0) + return (error); + + ath_hal_setuptxstatusring(sc->sc_ah, + (void *) sc->sc_txsdma.dd_desc, + sc->sc_txsdma.dd_desc_paddr, + ATH_TXSTATUS_RING_SIZE); + + for (i = 0; i < HAL_NUM_TX_QUEUES; i++) { + ath_edma_setup_txfifo(sc, i); + } + + + return (0); +} + +static int +ath_edma_dma_txteardown(struct ath_softc *sc) +{ + int i; + + for (i = 0; i < HAL_NUM_TX_QUEUES; i++) { + ath_edma_free_txfifo(sc, i); + } + + ath_descdma_cleanup(sc, &sc->sc_txsdma, NULL); + return (0); +} + +static int +ath_edma_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched) +{ + + return (0); +} + +static void +ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq) +{ + +} + +static void +ath_edma_tx_proc(void *arg, int npending) +{ + struct ath_softc *sc = (struct ath_softc *) arg; + + device_printf(sc->sc_dev, "%s: called, npending=%d\n", + __func__, npending); +} + +static void +ath_edma_attach_comp_func(struct ath_softc *sc) +{ + + TASK_INIT(&sc->sc_txtask, 0, ath_edma_tx_proc, sc); +} + +void +ath_xmit_setup_edma(struct ath_softc *sc) +{ + + /* Fetch EDMA field and buffer sizes */ + (void) ath_hal_gettxdesclen(sc->sc_ah, &sc->sc_tx_desclen); + (void) ath_hal_gettxstatuslen(sc->sc_ah, &sc->sc_tx_statuslen); + (void) ath_hal_getntxmaps(sc->sc_ah, &sc->sc_tx_nmaps); + + device_printf(sc->sc_dev, "TX descriptor length: %d\n", + sc->sc_tx_desclen); + device_printf(sc->sc_dev, "TX status length: %d\n", + sc->sc_tx_statuslen); + device_printf(sc->sc_dev, "TX buffers per descriptor: %d\n", + sc->sc_tx_nmaps); + + sc->sc_tx.xmit_setup = ath_edma_dma_txsetup; + sc->sc_tx.xmit_teardown = ath_edma_dma_txteardown; + sc->sc_tx.xmit_attach_comp_func = ath_edma_attach_comp_func; + + sc->sc_tx.xmit_dma_restart = ath_edma_dma_restart; + sc->sc_tx.xmit_handoff = ath_edma_xmit_handoff; + sc->sc_tx.xmit_processq = ath_edma_tx_processq; + sc->sc_tx.xmit_drainq = ath_edma_tx_draintxq; +} diff --git a/sys/dev/ath/if_ath_tx_edma.h b/sys/dev/ath/if_ath_tx_edma.h new file mode 100644 index 0000000..d4975a6 --- /dev/null +++ b/sys/dev/ath/if_ath_tx_edma.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org> + * 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. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any + * redistribution must be conditioned upon including a substantially + * similar Disclaimer requirement for further binary redistribution. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. + * + * $FreeBSD$ + */ +#ifndef __IF_ATH_TX_EDMA_H__ +#define __IF_ATH_TX_EDMA_H__ + +extern void ath_xmit_setup_edma(struct ath_softc *sc); + +#endif diff --git a/sys/dev/ath/if_ath_tx_ht.c b/sys/dev/ath/if_ath_tx_ht.c index e9ec632..6495a04 100644 --- a/sys/dev/ath/if_ath_tx_ht.c +++ b/sys/dev/ath/if_ath_tx_ht.c @@ -511,6 +511,8 @@ ath_rateseries_setup(struct ath_softc *sc, struct ieee80211_node *ni, series[i].RateFlags |= HAL_RATESERIES_HALFGI; series[i].Rate = rt->info[rc[i].rix].rateCode; + series[i].RateIndex = rc[i].rix; + series[i].tx_power_cap = 0x3f; /* XXX for now */ /* * PktDuration doesn't include slot, ACK, RTS, etc timing - @@ -558,14 +560,12 @@ ath_rateseries_print(struct ath_softc *sc, HAL_11N_RATE_SERIES *series) * This isn't useful for sending beacon frames, which has different needs * wrt what's passed into the rate scenario function. */ - void ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf) { HAL_11N_RATE_SERIES series[4]; struct ath_desc *ds = bf->bf_desc; - struct ath_desc *lastds = NULL; struct ath_hal *ah = sc->sc_ah; int is_pspoll = (bf->bf_state.bfs_atype == HAL_PKT_TYPE_PSPOLL); int ctsrate = bf->bf_state.bfs_ctsrate; @@ -576,13 +576,6 @@ ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni, ath_rateseries_setup(sc, ni, bf, series); - /* Enforce AR5416 aggregate limit - can't do RTS w/ an agg frame > 8k */ - - /* Enforce RTS and CTS are mutually exclusive */ - - /* Get a pointer to the last tx descriptor in the list */ - lastds = bf->bf_lastds; - #if 0 printf("pktlen: %d; flags 0x%x\n", pktlen, flags); ath_rateseries_print(sc, series); @@ -600,21 +593,6 @@ ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni, 4, /* number of series */ flags); - /* Setup the last descriptor in the chain */ - /* - * XXX Why is this done here, and not in the upper layer? - * The rate control code stores a copy of the RC info in - * the last descriptor as well as the first, then uses - * the shadow copy in the last descriptor to see what the RC - * decisions were. I'm not sure why; perhaps earlier hardware - * overwrote the first descriptor contents. - * - * In the 802.11n case, it also clears the moreaggr/delim - * fields. Again, this should be done by the caller of - * ath_buf_set_rate(). - */ - ath_hal_setuplasttxdesc(ah, lastds, ds); - /* Set burst duration */ /* * This is only required when doing 11n burst, not aggregation diff --git a/sys/dev/ath/if_athioctl.h b/sys/dev/ath/if_athioctl.h index 71813ae..514e5a7 100644 --- a/sys/dev/ath/if_athioctl.h +++ b/sys/dev/ath/if_athioctl.h @@ -161,7 +161,9 @@ struct ath_stats { u_int32_t ast_tx_aggr_ok; /* aggregate TX ok */ u_int32_t ast_tx_aggr_fail; /* aggregate TX failed */ u_int32_t ast_tx_mcastq_overflow; /* multicast queue overflow */ - u_int32_t ast_pad[1]; + u_int32_t ast_rx_keymiss; + + u_int32_t ast_pad[16]; }; #define SIOCGATHSTATS _IOWR('i', 137, struct ifreq) @@ -184,6 +186,53 @@ struct ath_diag { #define SIOCGATHDIAG _IOWR('i', 138, struct ath_diag) #define SIOCGATHPHYERR _IOWR('i', 140, struct ath_diag) + +/* + * The rate control ioctl has to support multiple potential rate + * control classes. For now, instead of trying to support an + * abstraction for this in the API, let's just use a TLV + * representation for the payload and let userspace sort it out. + */ +struct ath_rateioctl_tlv { + uint16_t tlv_id; + uint16_t tlv_len; /* length excluding TLV header */ +}; + +/* + * This is purely the six byte MAC address. + */ +#define ATH_RATE_TLV_MACADDR 0xaab0 + +/* + * The rate control modules may decide to push a mapping table + * of rix -> net80211 ratecode as part of the update. + */ +#define ATH_RATE_TLV_RATETABLE_NENTRIES 64 +struct ath_rateioctl_rt { + uint16_t nentries; + uint16_t pad[1]; + uint8_t ratecode[ATH_RATE_TLV_RATETABLE_NENTRIES]; +}; +#define ATH_RATE_TLV_RATETABLE 0xaab1 + +/* + * This is the sample node statistics structure. + * More in ath_rate/sample/sample.h. + */ +#define ATH_RATE_TLV_SAMPLENODE 0xaab2 + +struct ath_rateioctl { + char if_name[IFNAMSIZ]; /* if name */ + union { + uint8_t macaddr[IEEE80211_ADDR_LEN]; + uint64_t pad; + } is_u; + uint32_t len; + caddr_t buf; +}; +#define SIOCGATHNODERATESTATS _IOWR('i', 149, struct ath_rateioctl) +#define SIOCGATHRATESTATS _IOWR('i', 150, struct ath_rateioctl) + /* * Radio capture format. */ diff --git a/sys/dev/ath/if_athrate.h b/sys/dev/ath/if_athrate.h index 10f6040..d07c9ca 100644 --- a/sys/dev/ath/if_athrate.h +++ b/sys/dev/ath/if_athrate.h @@ -150,4 +150,16 @@ struct ath_buf; void ath_rate_tx_complete(struct ath_softc *, struct ath_node *, const struct ath_rc_series *, const struct ath_tx_status *, int pktlen, int nframes, int nbad); + +/* + * Fetch the global rate control statistics. + */ +int ath_rate_fetch_stats(struct ath_softc *sc, struct ath_rateioctl *rs); + +/* + * Fetch the per-node statistics. + */ +int ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an, + struct ath_rateioctl *rs); + #endif /* _ATH_RATECTRL_H_ */ diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h index 7370e01..94097ad 100644 --- a/sys/dev/ath/if_athvar.h +++ b/sys/dev/ath/if_athvar.h @@ -189,6 +189,7 @@ struct ath_buf { TAILQ_ENTRY(ath_buf) bf_list; struct ath_buf * bf_next; /* next buffer in the aggregate */ int bf_nseg; + HAL_STATUS bf_rxstatus; uint16_t bf_flags; /* status flags (below) */ struct ath_desc *bf_desc; /* virtual addr of desc */ struct ath_desc_status bf_status; /* tx/rx status */ @@ -276,6 +277,7 @@ typedef TAILQ_HEAD(ath_bufhead_s, ath_buf) ath_bufhead; struct ath_descdma { const char* dd_name; struct ath_desc *dd_desc; /* descriptors */ + int dd_descsize; /* size of single descriptor */ bus_addr_t dd_desc_paddr; /* physical addr of dd_desc */ bus_size_t dd_desc_len; /* size of dd_desc */ bus_dma_segment_t dd_dseg; @@ -395,6 +397,30 @@ struct ath_rx_edma { struct mbuf *m_rxpending; }; +struct ath_tx_edma_fifo { + struct ath_buf **m_fifo; + int m_fifolen; + int m_fifo_head; + int m_fifo_tail; + int m_fifo_depth; +}; + +struct ath_tx_methods { + int (*xmit_setup)(struct ath_softc *sc); + int (*xmit_teardown)(struct ath_softc *sc); + void (*xmit_attach_comp_func)(struct ath_softc *sc); + + void (*xmit_dma_restart)(struct ath_softc *sc, + struct ath_txq *txq); + void (*xmit_handoff)(struct ath_softc *sc, + struct ath_txq *txq, struct ath_buf *bf); + + void (*xmit_drainq)(struct ath_softc *sc, + struct ath_txq *txq); + int (*xmit_processq)(struct ath_softc *sc, + struct ath_txq *txq, int dosched); +}; + struct ath_softc { struct ifnet *sc_ifp; /* interface common */ struct ath_stats sc_stats; /* interface statistics */ @@ -409,7 +435,10 @@ struct ath_softc { uint32_t sc_bssidmask; /* bssid mask */ struct ath_rx_methods sc_rx; - struct ath_rx_edma sc_rxedma[2]; /* HP/LP queues */ + struct ath_rx_edma sc_rxedma[HAL_NUM_RX_QUEUES]; /* HP/LP queues */ + struct ath_tx_methods sc_tx; + struct ath_tx_edma_fifo sc_txedma[HAL_NUM_TX_QUEUES]; + int sc_rx_statuslen; int sc_tx_desclen; int sc_tx_statuslen; @@ -425,6 +454,8 @@ struct ath_softc { struct mtx sc_mtx; /* master lock (recursive) */ struct mtx sc_pcu_mtx; /* PCU access mutex */ char sc_pcu_mtx_name[32]; + struct mtx sc_rx_mtx; /* RX access mutex */ + char sc_rx_mtx_name[32]; struct taskqueue *sc_tq; /* private task queue */ struct ath_hal *sc_ah; /* Atheros HAL */ struct ath_ratectrl *sc_rc; /* tx rate control support */ @@ -432,6 +463,7 @@ struct ath_softc { void (*sc_setdefantenna)(struct ath_softc *, u_int); unsigned int sc_invalid : 1,/* disable hardware accesses */ sc_mrretry : 1,/* multi-rate retry support */ + sc_mrrprot : 1,/* MRR + protection support */ sc_softled : 1,/* enable LED gpio status */ sc_hardled : 1,/* enable MAC LED status */ sc_splitmic : 1,/* split TKIP MIC keys */ @@ -546,6 +578,7 @@ struct ath_softc { int sc_txbuf_cnt; /* how many buffers avail */ struct ath_descdma sc_txdma_mgmt; /* mgmt TX descriptors */ ath_bufhead sc_txbuf_mgmt; /* mgmt transmit buffer */ + struct ath_descdma sc_txsdma; /* EDMA TX status desc's */ struct mtx sc_txbuflock; /* txbuf lock */ char sc_txname[12]; /* e.g. "ath0_buf" */ u_int sc_txqsetup; /* h/w queues setup */ @@ -554,6 +587,11 @@ struct ath_softc { struct ath_txq *sc_ac2q[5]; /* WME AC -> h/w q map */ struct task sc_txtask; /* tx int processing */ struct task sc_txqtask; /* tx proc processing */ + + struct ath_descdma sc_txcompdma; /* TX EDMA completion */ + struct mtx sc_txcomplock; /* TX EDMA completion lock */ + char sc_txcompname[12]; /* eg ath0_txcomp */ + int sc_wd_timer; /* count down for wd timer */ struct callout sc_wd_ch; /* tx watchdog timer */ struct ath_tx_radiotap_header sc_tx_th; @@ -696,6 +734,28 @@ struct ath_softc { #define ATH_PCU_UNLOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_pcu_mtx, \ MA_NOTOWNED) +/* + * The RX lock is primarily a(nother) workaround to ensure that the + * RX FIFO/list isn't modified by various execution paths. + * Even though RX occurs in a single context (the ath taskqueue), the + * RX path can be executed via various reset/channel change paths. + */ +#define ATH_RX_LOCK_INIT(_sc) do {\ + snprintf((_sc)->sc_rx_mtx_name, \ + sizeof((_sc)->sc_rx_mtx_name), \ + "%s RX lock", \ + device_get_nameunit((_sc)->sc_dev)); \ + mtx_init(&(_sc)->sc_rx_mtx, (_sc)->sc_rx_mtx_name, \ + NULL, MTX_DEF); \ + } while (0) +#define ATH_RX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_rx_mtx) +#define ATH_RX_LOCK(_sc) mtx_lock(&(_sc)->sc_rx_mtx) +#define ATH_RX_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_rx_mtx) +#define ATH_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_rx_mtx, \ + MA_OWNED) +#define ATH_RX_UNLOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_rx_mtx, \ + MA_NOTOWNED) + #define ATH_TXQ_SETUP(sc, i) ((sc)->sc_txqsetup & (1<<i)) #define ATH_TXBUF_LOCK_INIT(_sc) do { \ @@ -709,6 +769,19 @@ struct ath_softc { #define ATH_TXBUF_LOCK_ASSERT(_sc) \ mtx_assert(&(_sc)->sc_txbuflock, MA_OWNED) +#define ATH_TXSTATUS_LOCK_INIT(_sc) do { \ + snprintf((_sc)->sc_txcompname, sizeof((_sc)->sc_txcompname), \ + "%s_buf", \ + device_get_nameunit((_sc)->sc_dev)); \ + mtx_init(&(_sc)->sc_txcomplock, (_sc)->sc_txcompname, NULL, \ + MTX_DEF); \ +} while (0) +#define ATH_TXSTATUS_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_txcomplock) +#define ATH_TXSTATUS_LOCK(_sc) mtx_lock(&(_sc)->sc_txcomplock) +#define ATH_TXSTATUS_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_txcomplock) +#define ATH_TXSTATUS_LOCK_ASSERT(_sc) \ + mtx_assert(&(_sc)->sc_txcomplock, MA_OWNED) + int ath_attach(u_int16_t, struct ath_softc *); int ath_detach(struct ath_softc *); void ath_resume(struct ath_softc *); @@ -1042,6 +1115,15 @@ void ath_intr(void *); ((*(_ah)->ah_getTxIntrQueue)((_ah), (_txqs))) #define ath_hal_gettxcompletionrates(_ah, _ds, _rates, _tries) \ ((*(_ah)->ah_getTxCompletionRates)((_ah), (_ds), (_rates), (_tries))) +#define ath_hal_settxdesclink(_ah, _ds, _link) \ + ((*(_ah)->ah_setTxDescLink)((_ah), (_ds), (_link))) +#define ath_hal_gettxdesclink(_ah, _ds, _link) \ + ((*(_ah)->ah_getTxDescLink)((_ah), (_ds), (_link))) +#define ath_hal_gettxdesclinkptr(_ah, _ds, _linkptr) \ + ((*(_ah)->ah_getTxDescLinkPtr)((_ah), (_ds), (_linkptr))) +#define ath_hal_setuptxstatusring(_ah, _tsstart, _tspstart, _size) \ + ((*(_ah)->ah_setupTxStatusRing)((_ah), (_tsstart), (_tspstart), \ + (_size))) #define ath_hal_setupfirsttxdesc(_ah, _ds, _aggrlen, _flags, _txpower, \ _txr0, _txtr0, _antm, _rcr, _rcd) \ @@ -1060,7 +1142,7 @@ void ath_intr(void *); (_series), (_ns), (_flags))) #define ath_hal_set11n_aggr_first(_ah, _ds, _len, _num) \ - ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len), (_num))) + ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len))) #define ath_hal_set11naggrmiddle(_ah, _ds, _num) \ ((*(_ah)->ah_set11nAggrMiddle)((_ah), (_ds), (_num))) #define ath_hal_set11n_aggr_last(_ah, _ds) \ diff --git a/sys/dev/cesa/cesa.c b/sys/dev/cesa/cesa.c index 9c758a4..835bb06 100644 --- a/sys/dev/cesa/cesa.c +++ b/sys/dev/cesa/cesa.c @@ -1005,6 +1005,7 @@ cesa_attach(device_t dev) switch (d) { case MV_DEV_88F6281: + case MV_DEV_88F6282: sc->sc_tperr = 0; break; case MV_DEV_MV78100: diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index 26d0903..d81bf0c 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -2522,7 +2522,6 @@ igb_allocate_msix(struct adapter *adapter) "Bound queue %d to cpu %d\n", i,igb_last_bind_cpu); igb_last_bind_cpu = CPU_NEXT(igb_last_bind_cpu); - igb_last_bind_cpu = igb_last_bind_cpu % mp_ncpus; } #if __FreeBSD_version >= 800000 TASK_INIT(&que->txr->txq_task, 0, igb_deferred_mq_start, diff --git a/sys/dev/e1000/if_lem.c b/sys/dev/e1000/if_lem.c index b5bca6a..882bd3c 100644 --- a/sys/dev/e1000/if_lem.c +++ b/sys/dev/e1000/if_lem.c @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2001-2011, Intel Corporation + Copyright (c) 2001-2012, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -85,7 +85,7 @@ /********************************************************************* * Legacy Em Driver version: *********************************************************************/ -char lem_driver_version[] = "1.0.4"; +char lem_driver_version[] = "1.0.5"; /********************************************************************* * PCI Device ID Table @@ -239,15 +239,12 @@ static void lem_enable_wakeup(device_t); static int lem_enable_phy_wakeup(struct adapter *); static void lem_led_func(void *, int); -#ifdef EM_LEGACY_IRQ static void lem_intr(void *); -#else /* FAST IRQ */ static int lem_irq_fast(void *); static void lem_handle_rxtx(void *context, int pending); static void lem_handle_link(void *context, int pending); static void lem_add_rx_process_limit(struct adapter *, const char *, const char *, int *, int); -#endif /* ~EM_LEGACY_IRQ */ #ifdef DEVICE_POLLING static poll_handler_t lem_poll; @@ -304,11 +301,13 @@ TUNABLE_INT("hw.em.txd", &lem_txd); TUNABLE_INT("hw.em.smart_pwr_down", &lem_smart_pwr_down); TUNABLE_INT("hw.em.sbp", &lem_debug_sbp); -#ifndef EM_LEGACY_IRQ +/* Interrupt style - default to fast */ +static int lem_use_legacy_irq = 0; +TUNABLE_INT("hw.em.use_legacy_irq", &lem_use_legacy_irq); + /* How many packets rxeof tries to clean at a time */ static int lem_rx_process_limit = 100; TUNABLE_INT("hw.em.rx_process_limit", &lem_rx_process_limit); -#endif /* Flow control setting - default to FULL */ static int lem_fc_setting = e1000_fc_full; @@ -450,12 +449,10 @@ lem_attach(device_t dev) lem_tx_abs_int_delay_dflt); } -#ifndef EM_LEGACY_IRQ /* Sysctls for limiting the amount of work done in the taskqueue */ lem_add_rx_process_limit(adapter, "rx_processing_limit", "max number of rx packets to process", &adapter->rx_process_limit, lem_rx_process_limit); -#endif /* Sysctl for setting the interface flow control */ lem_set_flow_cntrl(adapter, "flow_control", @@ -1197,22 +1194,6 @@ lem_init_locked(struct adapter *adapter) callout_reset(&adapter->timer, hz, lem_local_timer, adapter); e1000_clear_hw_cntrs_base_generic(&adapter->hw); - /* MSI/X configuration for 82574 */ - if (adapter->hw.mac.type == e1000_82574) { - int tmp; - tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT); - tmp |= E1000_CTRL_EXT_PBA_CLR; - E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp); - /* - ** Set the IVAR - interrupt vector routing. - ** Each nibble represents a vector, high bit - ** is enable, other 3 bits are the MSIX table - ** entry, we map RXQ0 to 0, TXQ0 to 1, and - ** Link (other) to 2, hence the magic number. - */ - E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908); - } - #ifdef DEVICE_POLLING /* * Only enable interrupts if we are not polling, make sure @@ -1281,7 +1262,6 @@ lem_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) } #endif /* DEVICE_POLLING */ -#ifdef EM_LEGACY_IRQ /********************************************************************* * * Legacy Interrupt Service routine @@ -1295,7 +1275,8 @@ lem_intr(void *arg) u32 reg_icr; - if (ifp->if_capenable & IFCAP_POLLING) + if ((ifp->if_capenable & IFCAP_POLLING) || + ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)) return; EM_CORE_LOCK(adapter); @@ -1303,11 +1284,10 @@ lem_intr(void *arg) if (reg_icr & E1000_ICR_RXO) adapter->rx_overruns++; - if ((reg_icr == 0xffffffff) || (reg_icr == 0)) - goto out; - - if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) - goto out; + if ((reg_icr == 0xffffffff) || (reg_icr == 0)) { + EM_CORE_UNLOCK(adapter); + return; + } if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { callout_stop(&adapter->timer); @@ -1317,23 +1297,22 @@ lem_intr(void *arg) lem_tx_purge(adapter); callout_reset(&adapter->timer, hz, lem_local_timer, adapter); - goto out; + EM_CORE_UNLOCK(adapter); + return; } - EM_TX_LOCK(adapter); + EM_CORE_UNLOCK(adapter); lem_rxeof(adapter, -1, NULL); + + EM_TX_LOCK(adapter); lem_txeof(adapter); if (ifp->if_drv_flags & IFF_DRV_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) lem_start_locked(ifp); EM_TX_UNLOCK(adapter); - -out: - EM_CORE_UNLOCK(adapter); return; } -#else /* EM_FAST_IRQ, then fast interrupt routines only */ static void lem_handle_link(void *context, int pending) @@ -1417,7 +1396,6 @@ lem_irq_fast(void *arg) adapter->rx_overruns++; return FILTER_HANDLED; } -#endif /* ~EM_LEGACY_IRQ */ /********************************************************************* @@ -2214,19 +2192,21 @@ lem_allocate_irq(struct adapter *adapter) return (ENXIO); } -#ifdef EM_LEGACY_IRQ - /* We do Legacy setup */ - if ((error = bus_setup_intr(dev, adapter->res[0], - INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter, - &adapter->tag[0])) != 0) { - device_printf(dev, "Failed to register interrupt handler"); - return (error); + /* Do Legacy setup? */ + if (lem_use_legacy_irq) { + if ((error = bus_setup_intr(dev, adapter->res[0], + INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter, + &adapter->tag[0])) != 0) { + device_printf(dev, + "Failed to register interrupt handler"); + return (error); + } + return (0); } -#else /* FAST_IRQ */ /* - * Try allocating a fast interrupt and the associated deferred - * processing contexts. + * Use a Fast interrupt and the associated + * deferred processing contexts. */ TASK_INIT(&adapter->rxtx_task, 0, lem_handle_rxtx, adapter); TASK_INIT(&adapter->link_task, 0, lem_handle_link, adapter); @@ -2243,7 +2223,6 @@ lem_allocate_irq(struct adapter *adapter) adapter->tq = NULL; return (error); } -#endif /* EM_LEGACY_IRQ */ return (0); } @@ -3301,20 +3280,6 @@ lem_initialize_receive_unit(struct adapter *adapter) E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR); } - /* - ** When using MSIX interrupts we need to throttle - ** using the EITR register (82574 only) - */ - if (adapter->msix) - for (int i = 0; i < 4; i++) - E1000_WRITE_REG(&adapter->hw, - E1000_EITR_82574(i), DEFAULT_ITR); - - /* Disable accelerated ackknowledge */ - if (adapter->hw.mac.type == e1000_82574) - E1000_WRITE_REG(&adapter->hw, - E1000_RFCTL, E1000_RFCTL_ACK_DIS); - /* Setup the Base and Length of the Rx Descriptor Ring */ bus_addr = adapter->rxdma.dma_paddr; E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0), @@ -3834,10 +3799,6 @@ lem_enable_intr(struct adapter *adapter) struct e1000_hw *hw = &adapter->hw; u32 ims_mask = IMS_ENABLE_MASK; - if (adapter->msix) { - E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK); - ims_mask |= EM_MSIX_MASK; - } E1000_WRITE_REG(hw, E1000_IMS, ims_mask); } @@ -3846,9 +3807,7 @@ lem_disable_intr(struct adapter *adapter) { struct e1000_hw *hw = &adapter->hw; - if (adapter->msix) - E1000_WRITE_REG(hw, EM_EIAC, 0); - E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); + E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); } /* @@ -4682,7 +4641,6 @@ lem_set_flow_cntrl(struct adapter *adapter, const char *name, OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description); } -#ifndef EM_LEGACY_IRQ static void lem_add_rx_process_limit(struct adapter *adapter, const char *name, const char *description, int *limit, int value) @@ -4692,4 +4650,3 @@ lem_add_rx_process_limit(struct adapter *adapter, const char *name, SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description); } -#endif diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index a2853a2..2c6b0b8 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$"); */ #define MBOX_DELAY_COUNT 1000000 / 100 #define ISP_MARK_PORTDB(a, b, c) \ - isp_prt(isp, ISP_LOGSANCFG, \ + isp_prt(isp, ISP_LOG_SANCFG, \ "Chan %d ISP_MARK_PORTDB@LINE %d", b, __LINE__); \ isp_mark_portdb(a, b, c) @@ -670,8 +670,7 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults) ISP_DELAY(100); if (--loops < 0) { ISP_RESET0(isp); - isp_prt(isp, ISP_LOGERR, - "MBOX_BUSY never cleared on reset"); + isp_prt(isp, ISP_LOGERR, "MBOX_BUSY never cleared on reset"); return; } } @@ -1715,6 +1714,25 @@ isp_fibre_init(ispsoftc_t *isp) icbp->icb_xfwoptions = fcp->isp_xfwoptions; + if (ISP_CAP_FCTAPE(isp)) { + if (isp->isp_confopts & ISP_CFG_NOFCTAPE) + icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE; + + if (isp->isp_confopts & ISP_CFG_FCTAPE) + icbp->icb_xfwoptions |= ICBXOPT_FCTAPE; + + if (icbp->icb_xfwoptions & ICBXOPT_FCTAPE) { + icbp->icb_fwoptions &= ~ICBOPT_FULL_LOGIN; /* per documents */ + icbp->icb_xfwoptions |= ICBXOPT_FCTAPE_CCQ|ICBXOPT_FCTAPE_CONFIRM; + FCPARAM(isp, 0)->fctape_enabled = 1; + } else { + FCPARAM(isp, 0)->fctape_enabled = 0; + } + } else { + icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE; + FCPARAM(isp, 0)->fctape_enabled = 0; + } + /* * Prefer or force Point-To-Point instead Loop? */ @@ -1804,6 +1822,9 @@ isp_fibre_init(ispsoftc_t *isp) if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) { mbs.param[1] |= IFCOPT1_EQFQASYNC|IFCOPT1_CTIO_RETRY; if (fcp->role & ISP_ROLE_TARGET) { + if (ISP_FW_NEWER_THAN(isp, 3, 25, 0)) { + mbs.param[1] |= IFCOPT1_ENAPURE; + } mbs.param[3] = IFCOPT3_NOPRLI; } } @@ -1813,8 +1834,15 @@ isp_fibre_init(ispsoftc_t *isp) } } icbp->icb_logintime = ICB_LOGIN_TOV; - icbp->icb_lunetimeout = ICB_LUN_ENABLE_TOV; +#ifdef ISP_TARGET_MODE + if (ISP_FW_NEWER_THAN(isp, 3, 25, 0) && (icbp->icb_fwoptions & ICBOPT_TGT_ENABLE)) { + icbp->icb_lunenables = 0xffff; + icbp->icb_ccnt = DFLT_CMND_CNT; + icbp->icb_icnt = DFLT_INOT_CNT; + icbp->icb_lunetimeout = ICB_LUN_ENABLE_TOV; + } +#endif if (fcp->isp_wwnn && fcp->isp_wwpn && (fcp->isp_wwnn >> 60) != 2) { icbp->icb_fwoptions |= ICBOPT_BOTH_WWNS; MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwnn); @@ -1910,7 +1938,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) } } if (chan == isp->isp_nchan) { - isp_prt(isp, ISP_LOGDEBUG0, "all %d channels with role 'none'", chan); + isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan); isp->isp_state = ISP_INITSTATE; return; } @@ -1978,6 +2006,19 @@ isp_fibre_init_2400(ispsoftc_t *isp) icbp->icb_fwoptions1 |= ICB2400_OPT1_HARD_ADDRESS; icbp->icb_fwoptions2 = fcp->isp_xfwoptions; + if (isp->isp_confopts & ISP_CFG_NOFCTAPE) { + icbp->icb_fwoptions2 &= ~ICB2400_OPT2_FCTAPE; + } + if (isp->isp_confopts & ISP_CFG_FCTAPE) { + icbp->icb_fwoptions2 |= ICB2400_OPT2_FCTAPE; + } + + if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) { + FCPARAM(isp, chan)->fctape_enabled = 1; + } else { + FCPARAM(isp, chan)->fctape_enabled = 0; + } + switch (isp->isp_confopts & ISP_CFG_PORT_PREF) { case ISP_CFG_NPORT_ONLY: icbp->icb_fwoptions2 &= ~ICB2400_OPT2_TOPO_MASK; @@ -2286,7 +2327,7 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags goto out; } else if (plp->plogx_status != PLOGX_STATUS_IOCBERR) { isp_prt(isp, ISP_LOGWARN, - "status 0x%x on port login IOCB chanel %d", + "status 0x%x on port login IOCB channel %d", plp->plogx_status, chan); rval = -1; goto out; @@ -2336,13 +2377,13 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags msg = buf; break; case PLOGX_IOCBERR_PORTUSED: - lev = ISP_LOGSANCFG|ISP_LOGDEBUG0; + lev = ISP_LOG_SANCFG|ISP_LOG_WARN1; ISP_SNPRINTF(buf, sizeof (buf), "already logged in with N-Port handle 0x%x", parm1); msg = buf; rval = MBOX_PORT_ID_USED | (parm1 << 16); break; case PLOGX_IOCBERR_HNDLUSED: - lev = ISP_LOGSANCFG|ISP_LOGDEBUG0; + lev = ISP_LOG_SANCFG|ISP_LOG_WARN1; ISP_SNPRINTF(buf, sizeof (buf), "handle already used for PortID 0x%06x", parm1); msg = buf; rval = MBOX_LOOP_ID_USED; @@ -2388,35 +2429,26 @@ isp_port_login(ispsoftc_t *isp, uint16_t handle, uint32_t portid) switch (mbs.param[0]) { case MBOX_PORT_ID_USED: - isp_prt(isp, ISP_LOGDEBUG0, - "isp_port_login: portid 0x%06x already logged in as %u", - portid, mbs.param[1]); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: portid 0x%06x already logged in as %u", portid, mbs.param[1]); return (MBOX_PORT_ID_USED | (mbs.param[1] << 16)); case MBOX_LOOP_ID_USED: - isp_prt(isp, ISP_LOGDEBUG0, - "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX", - handle, mbs.param[1] & 0xff); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX", handle, mbs.param[1] & 0xff); return (MBOX_LOOP_ID_USED); case MBOX_COMMAND_COMPLETE: return (0); case MBOX_COMMAND_ERROR: - isp_prt(isp, ISP_LOGINFO, - "isp_port_login: error 0x%x in PLOGI to port 0x%06x", - mbs.param[1], portid); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: error 0x%x in PLOGI to port 0x%06x", mbs.param[1], portid); return (MBOX_COMMAND_ERROR); case MBOX_ALL_IDS_USED: - isp_prt(isp, ISP_LOGINFO, - "isp_port_login: all IDs used for fabric login"); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: all IDs used for fabric login"); return (MBOX_ALL_IDS_USED); default: - isp_prt(isp, ISP_LOGINFO, - "isp_port_login: error 0x%x on port login of 0x%06x@0x%0x", - mbs.param[0], portid, handle); + isp_prt(isp, ISP_LOG_SANCFG, "isp_port_login: error 0x%x on port login of 0x%06x@0x%0x", mbs.param[0], portid, handle); return (mbs.param[0]); } } @@ -2483,16 +2515,12 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock) if (IS_24XX(isp)) { isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill); pdb->handle = un.bill.pdb_handle; - pdb->s3_role = un.bill.pdb_prli_svc3; + pdb->prli_word3 = un.bill.pdb_prli_svc3; pdb->portid = BITS2WORD_24XX(un.bill.pdb_portid_bits); ISP_MEMCPY(pdb->portname, un.bill.pdb_portname, 8); ISP_MEMCPY(pdb->nodename, un.bill.pdb_nodename, 8); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Port 0x%06x flags 0x%x curstate %x", - chan, pdb->portid, un.bill.pdb_flags, - un.bill.pdb_curstate); - if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || - un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) { + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x flags 0x%x curstate %x", chan, pdb->portid, un.bill.pdb_flags, un.bill.pdb_curstate); + if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) { mbs.param[0] = MBOX_NOT_LOGGED_IN; if (dolock) { FC_SCRATCH_RELEASE(isp, chan); @@ -2502,7 +2530,7 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock) } else { isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred); pdb->handle = un.fred.pdb_loopid; - pdb->s3_role = un.fred.pdb_prli_svc3; + pdb->prli_word3 = un.fred.pdb_prli_svc3; pdb->portid = BITS2WORD(un.fred.pdb_portid_bits); ISP_MEMCPY(pdb->portname, un.fred.pdb_portname, 8); ISP_MEMCPY(pdb->nodename, un.fred.pdb_nodename, 8); @@ -2528,7 +2556,7 @@ isp_dump_chip_portdb(ispsoftc_t *isp, int chan, int dolock) if (isp_getpdb(isp, chan, loopid, &pdb, dolock)) { continue; } - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x " + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x " "PortID 0x%06x WWPN 0x%02x%02x%02x%02x%02x%02x%02x%02x", chan, loopid, pdb.portid, pdb.portname[0], pdb.portname[1], pdb.portname[2], pdb.portname[3], pdb.portname[4], @@ -2606,7 +2634,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) fcp = FCPARAM(isp, chan); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Entry", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Entry", chan); ISP_MARK_PORTDB(isp, chan, 1); /* @@ -2622,7 +2650,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) GET_NANOTIME(&hra); isp_fw_state(isp, chan); if (lwfs != fcp->isp_fwstate) { - isp_prt(isp, ISP_LOGCONFIG|ISP_LOGSANCFG, "Chan %d Firmware State <%s->%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->isp_fwstate)); + isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, "Chan %d Firmware State <%s->%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->isp_fwstate)); lwfs = fcp->isp_fwstate; } if (fcp->isp_fwstate == FW_READY) { @@ -2673,7 +2701,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) * If we haven't gone to 'ready' state, return. */ if (fcp->isp_fwstate != FW_READY) { - isp_prt(isp, ISP_LOGSANCFG, "%s: chan %d not at FW_READY state", __func__, chan); + isp_prt(isp, ISP_LOG_SANCFG, "%s: chan %d not at FW_READY state", __func__, chan); return (-1); } @@ -2738,7 +2766,9 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) } } if (alpa_map[i] && fcp->isp_loopid != i) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)", chan, i, alpa_map[i], fcp->isp_loopid, alpa); + isp_prt(isp, ISP_LOG_SANCFG, + "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)", + chan, i, alpa_map[i], fcp->isp_loopid, alpa); fcp->isp_loopid = i; } } @@ -2778,18 +2808,17 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) lp->state = FC_PORTDB_STATE_PENDING_VALID; MAKE_WWN_FROM_NODE_NAME(lp->node_wwn, pdb.nodename); MAKE_WWN_FROM_NODE_NAME(lp->port_wwn, pdb.portname); - lp->roles = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT; + lp->prli_word3 = pdb.prli_word3; lp->portid = pdb.portid; lp->handle = pdb.handle; lp->new_portid = lp->portid; - lp->new_roles = lp->roles; + lp->new_prli_word3 = lp->prli_word3; if (IS_24XX(isp)) { if (check_for_fabric) { /* * The mbs is still hanging out from the MBOX_GET_LOOP_ID above. */ fcp->isp_fabric_params = mbs.param[7]; - isp_prt(isp, ISP_LOGCONFIG, "fabric params 0x%x", mbs.param[7]); } else { fcp->isp_fabric_params = 0; } @@ -2809,7 +2838,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay) r = isp_register_fc4_type(isp, chan); } if (r) { - isp_prt(isp, ISP_LOGWARN|ISP_LOGSANCFG, "%s: register fc4 type failed", __func__); + isp_prt(isp, ISP_LOGWARN|ISP_LOG_SANCFG, "%s: register fc4 type failed", __func__); return (-1); } } else { @@ -2843,8 +2872,8 @@ not_on_fabric: /* * Announce ourselves, too. */ - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loopid, isp_fc_toponame(fcp)); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Complete", chan); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loopid, isp_fc_toponame(fcp)); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Complete", chan); return (0); } @@ -2912,8 +2941,7 @@ isp_pdb_sync(ispsoftc_t *isp, int chan) } } - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Synchronizing PDBs", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Synchronizing PDBs", chan); fcp->isp_loopstate = LOOP_SYNCING_PDB; @@ -2950,7 +2978,7 @@ isp_pdb_sync(ispsoftc_t *isp, int chan) } else { lp->autologin = 0; } - lp->new_roles = 0; + lp->new_prli_word3 = 0; lp->new_portid = 0; /* * Note that we might come out of this with our state @@ -2963,13 +2991,12 @@ isp_pdb_sync(ispsoftc_t *isp, int chan) * target id in isp_dev_map (if any). */ lp->portid = lp->new_portid; - lp->roles = lp->new_roles; + lp->prli_word3 = lp->new_prli_word3; lp->state = FC_PORTDB_STATE_VALID; isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp); - lp->new_roles = 0; + lp->new_prli_word3 = 0; lp->new_portid = 0; - lp->reserved = 0; - lp->new_reserved = 0; + lp->announced = 0; break; case FC_PORTDB_STATE_CHANGED: /* @@ -2977,14 +3004,13 @@ isp_pdb_sync(ispsoftc_t *isp, int chan) */ lp->state = FC_PORTDB_STATE_VALID; isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp); - lp->new_roles = 0; + lp->new_prli_word3 = 0; lp->new_portid = 0; - lp->reserved = 0; - lp->new_reserved = 0; + lp->announced = 0; break; case FC_PORTDB_STATE_PENDING_VALID: lp->portid = lp->new_portid; - lp->roles = lp->new_roles; + lp->prli_word3 = lp->new_prli_word3; if (lp->dev_map_idx) { int t = lp->dev_map_idx - 1; fcp->isp_dev_map[t] = dbidx + 1; @@ -2992,11 +3018,10 @@ isp_pdb_sync(ispsoftc_t *isp, int chan) lp->state = FC_PORTDB_STATE_VALID; isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp); if (dbidx != FL_ID) { - lp->new_roles = 0; + lp->new_prli_word3 = 0; lp->new_portid = 0; } - lp->reserved = 0; - lp->new_reserved = 0; + lp->announced = 0; break; case FC_PORTDB_STATE_ZOMBIE: break; @@ -3054,8 +3079,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) break; case TOPO_FL_PORT: if (IS_24XX(isp) && isp->isp_nchan > 1) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Skipping Local Loop Scan", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Skipping Local Loop Scan", chan); fcp->isp_loopstate = LOOP_LSCAN_DONE; return (0); } @@ -3065,16 +3089,14 @@ isp_scan_loop(ispsoftc_t *isp, int chan) lim = 2; break; default: - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d no loop topology to scan", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d no loop topology to scan", chan); fcp->isp_loopstate = LOOP_LSCAN_DONE; return (0); } fcp->isp_loopstate = LOOP_SCANNING_LOOP; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop 0..%d", chan, lim-1); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop 0..%d", chan, lim-1); /* @@ -3100,8 +3122,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) if (IS_2100(isp) || IS_2200(isp)) { uint64_t node_wwn = isp_get_wwn(isp, chan, handle, 1); if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE (bad)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan); return (-1); } if (node_wwn == INI_NONE) { @@ -3119,8 +3140,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) chan, handle, r); if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) { ISP_MARK_PORTDB(isp, chan, 1); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE (bad)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan); return (-1); } continue; @@ -3128,8 +3148,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) { ISP_MARK_PORTDB(isp, chan, 1); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE (bad)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan); return (-1); } @@ -3143,8 +3162,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) isp_prt(isp, ISP_LOGWARN, "Chan %d cannot synchronize port database", chan); ISP_MARK_PORTDB(isp, chan, 1); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE (bad)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan); return (-1); } @@ -3153,7 +3171,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) */ MAKE_WWN_FROM_NODE_NAME(tmp.node_wwn, pdb.nodename); MAKE_WWN_FROM_NODE_NAME(tmp.port_wwn, pdb.portname); - tmp.roles = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT; + tmp.prli_word3 = pdb.prli_word3; tmp.portid = pdb.portid; tmp.handle = pdb.handle; @@ -3192,8 +3210,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) for (i = 0; i < MAX_FC_TARG; i++) { lp = &fcp->portdb[i]; - if (lp->state == FC_PORTDB_STATE_NIL || - lp->target_mode) { + if (lp->state == FC_PORTDB_STATE_NIL || lp->target_mode) { continue; } if (lp->node_wwn != tmp.node_wwn) { @@ -3214,8 +3231,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) chan, i, lp->state); isp_dump_portdb(isp, chan); ISP_MARK_PORTDB(isp, chan, 1); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE (bad)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan); return (-1); } @@ -3229,15 +3245,11 @@ isp_scan_loop(ispsoftc_t *isp, int chan) * Check to make see if really still the same * device. If it is, we mark it pending valid. */ - if (lp->portid == tmp.portid && - lp->handle == tmp.handle && - lp->roles == tmp.roles) { + if (lp->portid == tmp.portid && lp->handle == tmp.handle && lp->prli_word3 == tmp.prli_word3) { lp->new_portid = tmp.portid; - lp->new_roles = tmp.roles; + lp->new_prli_word3 = tmp.prli_word3; lp->state = FC_PORTDB_STATE_PENDING_VALID; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%06x@0x%04x Pending " - "Valid", chan, tmp.portid, tmp.handle); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x Pending Valid", chan, tmp.portid, tmp.handle); break; } @@ -3251,12 +3263,10 @@ isp_scan_loop(ispsoftc_t *isp, int chan) * Claim that this has changed and let somebody else * decide what to do. */ - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%06x@0x%04x changed", - chan, tmp.portid, tmp.handle); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x changed", chan, tmp.portid, tmp.handle); lp->state = FC_PORTDB_STATE_CHANGED; lp->new_portid = tmp.portid; - lp->new_roles = tmp.roles; + lp->new_prli_word3 = tmp.prli_word3; break; } @@ -3290,17 +3300,14 @@ isp_scan_loop(ispsoftc_t *isp, int chan) lp->autologin = 1; lp->state = FC_PORTDB_STATE_NEW; lp->new_portid = tmp.portid; - lp->new_roles = tmp.roles; + lp->new_prli_word3 = tmp.prli_word3; lp->handle = tmp.handle; lp->port_wwn = tmp.port_wwn; lp->node_wwn = tmp.node_wwn; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%06x@0x%04x is New Entry", - chan, tmp.portid, tmp.handle); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x is New Entry", chan, tmp.portid, tmp.handle); } fcp->isp_loopstate = LOOP_LSCAN_DONE; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC scan loop DONE", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE", chan); return (0); } @@ -3343,8 +3350,7 @@ isp_gid_ft_sns(ispsoftc_t *isp, int chan) sns_gid_ft_req_t *rq = &un._x; mbreg_t mbs; - isp_prt(isp, ISP_LOGDEBUG0, - "Chan %d scanning fabric (GID_FT) via SNS", chan); + isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via SNS", chan); ISP_MEMZERO(rq, SNS_GID_FT_REQ_SIZE); rq->snscb_rblen = GIDLEN >> 1; @@ -3393,8 +3399,7 @@ isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan) uint32_t *rp; uint8_t *scp = fcp->isp_scratch; - isp_prt(isp, ISP_LOGDEBUG0, - "Chan %d scanning fabric (GID_FT) via CT", chan); + isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via CT", chan); if (!IS_24XX(isp)) { return (1); @@ -3488,10 +3493,8 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) int portidx, portlim, r; sns_gid_ft_rsp_t *rs0, *rs1; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC Scan Fabric", chan); - if (fcp->isp_fwstate != FW_READY || - fcp->isp_loopstate < LOOP_LSCAN_DONE) { + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric", chan); + if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_LSCAN_DONE) { return (-1); } if (fcp->isp_loopstate > LOOP_SCANNING_FABRIC) { @@ -3499,8 +3502,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) } if (fcp->isp_topo != TOPO_FL_PORT && fcp->isp_topo != TOPO_F_PORT) { fcp->isp_loopstate = LOOP_FSCAN_DONE; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC Scan Fabric Done (no fabric)", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done (no fabric)", chan); return (0); } @@ -3568,9 +3570,8 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) } if (rs1->snscb_cthdr.ct_cmd_resp != LS_ACC) { int level; - if (rs1->snscb_cthdr.ct_reason == 9 && - rs1->snscb_cthdr.ct_explanation == 7) { - level = ISP_LOGSANCFG|ISP_LOGDEBUG0; + if (rs1->snscb_cthdr.ct_reason == 9 && rs1->snscb_cthdr.ct_explanation == 7) { + level = ISP_LOG_SANCFG; } else { level = ISP_LOGWARN; } @@ -3614,7 +3615,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) "fabric too big for scratch area: increase ISP_FC_SCRLEN"); } portlim = portidx + 1; - isp_prt(isp, ISP_LOGSANCFG, + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d got %d ports back from name server", chan, portlim); for (portidx = 0; portidx < portlim; portidx++) { @@ -3639,9 +3640,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) rs1->snscb_ports[npidx].portid[0] = 0; rs1->snscb_ports[npidx].portid[1] = 0; rs1->snscb_ports[npidx].portid[2] = 0; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d removing duplicate PortID 0x%06x" - " entry from list", chan, portid); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x entry from list", chan, portid); } } @@ -3671,7 +3670,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) ((rs1->snscb_ports[portidx].portid[2])); if (portid == 0) { - isp_prt(isp, ISP_LOGSANCFG, + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d skipping null PortID at idx %d", chan, portidx); continue; @@ -3687,19 +3686,19 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) */ if (ISP_CAP_MULTI_ID(isp)) { if ((portid >> 8) == (fcp->isp_portid >> 8)) { - isp_prt(isp, ISP_LOGSANCFG, + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d skip PortID 0x%06x", chan, portid); continue; } } else if (portid == fcp->isp_portid) { - isp_prt(isp, ISP_LOGSANCFG, + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d skip ourselves on @ PortID 0x%06x", chan, portid); continue; } - isp_prt(isp, ISP_LOGSANCFG, + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Checking Fabric Port 0x%06x", chan, portid); /* @@ -3711,8 +3710,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) for (dbidx = 0; dbidx < MAX_FC_TARG; dbidx++) { lp = &fcp->portdb[dbidx]; - if (lp->state != FC_PORTDB_STATE_PROBATIONAL || - lp->target_mode) { + if (lp->state != FC_PORTDB_STATE_PROBATIONAL || lp->target_mode) { continue; } if (lp->portid == portid) { @@ -3754,9 +3752,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) if (r != 0) { lp->new_portid = portid; lp->state = FC_PORTDB_STATE_DEAD; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Fabric Port 0x%06x is dead", - chan, portid); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is dead", chan, portid); continue; } @@ -3773,7 +3769,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) pdb.portid != portid || wwpn != lp->port_wwn || wwnn != lp->node_wwn) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, + isp_prt(isp, ISP_LOG_SANCFG, fconf, chan, dbidx, pdb.handle, pdb.portid, (uint32_t) (wwnn >> 32), (uint32_t) wwnn, (uint32_t) (wwpn >> 32), (uint32_t) wwpn, @@ -3824,7 +3820,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) handle_changed++; } - nr = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT; + nr = pdb.prli_word3; /* * Check to see whether the portid and roles have @@ -3839,17 +3835,12 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) */ lp->new_portid = portid; - lp->new_roles = nr; - if (pdb.portid != lp->portid || nr != lp->roles || - handle_changed) { - isp_prt(isp, ISP_LOGSANCFG, - "Chan %d Fabric Port 0x%06x changed", - chan, portid); + lp->new_prli_word3 = nr; + if (pdb.portid != lp->portid || nr != lp->prli_word3 || handle_changed) { + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x changed", chan, portid); lp->state = FC_PORTDB_STATE_CHANGED; } else { - isp_prt(isp, ISP_LOGSANCFG, - "Chan %d Fabric Port 0x%06x " - "Now Pending Valid", chan, portid); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x Now Pending Valid", chan, portid); lp->state = FC_PORTDB_STATE_PENDING_VALID; } continue; @@ -3935,7 +3926,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) handle = pdb.handle; MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename); MAKE_WWN_FROM_NODE_NAME(wwpn, pdb.portname); - nr = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT; + nr = pdb.prli_word3; /* * And go through the database *one* more time to make sure @@ -3949,8 +3940,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) if (fcp->portdb[dbidx].target_mode) { continue; } - if (fcp->portdb[dbidx].node_wwn == wwnn && - fcp->portdb[dbidx].port_wwn == wwpn) { + if (fcp->portdb[dbidx].node_wwn == wwnn && fcp->portdb[dbidx].port_wwn == wwpn) { break; } } @@ -3961,11 +3951,9 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) lp->node_wwn = wwnn; lp->port_wwn = wwpn; lp->new_portid = portid; - lp->new_roles = nr; + lp->new_prli_word3 = nr; lp->state = FC_PORTDB_STATE_NEW; - isp_prt(isp, ISP_LOGSANCFG, - "Chan %d Fabric Port 0x%06x is a New Entry", - chan, portid); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is a New Entry", chan, portid); continue; } @@ -3991,16 +3979,12 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) lp = &fcp->portdb[dbidx]; lp->handle = handle; lp->new_portid = portid; - lp->new_roles = nr; - if (lp->portid != portid || lp->roles != nr) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Zombie Fabric Port 0x%06x Now Changed", - chan, portid); + lp->new_prli_word3 = nr; + if (lp->portid != portid || lp->prli_word3 != nr) { + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Changed", chan, portid); lp->state = FC_PORTDB_STATE_CHANGED; } else { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Zombie Fabric Port 0x%06x " - "Now Pending Valid", chan, portid); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Pending Valid", chan, portid); lp->state = FC_PORTDB_STATE_PENDING_VALID; } } @@ -4011,8 +3995,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan) return (-1); } fcp->isp_loopstate = LOOP_FSCAN_DONE; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d FC Scan Fabric Done", chan); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done", chan); return (0); } @@ -4261,17 +4244,13 @@ isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan) FC_SCRATCH_RELEASE(isp, chan); if (ct->ct_cmd_resp == LS_RJT) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Register FC4 Type rejected", chan); + 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_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Register FC4 Type accepted", chan); + 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); + isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->ct_cmd_resp); return (-1); } } @@ -4369,6 +4348,7 @@ isp_start(XS_T *xs) fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs)); if ((fcp->role & ISP_ROLE_INITIATOR) == 0) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs)); XS_SETERR(xs, HBA_SELTIMEOUT); return (CMD_COMPLETE); } @@ -4381,6 +4361,7 @@ isp_start(XS_T *xs) } if (XS_TGT(xs) >= MAX_FC_TARG) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d target too big", XS_CHANNEL(xs), target, XS_LUN(xs)); XS_SETERR(xs, HBA_SELTIMEOUT); return (CMD_COMPLETE); } @@ -4392,9 +4373,11 @@ isp_start(XS_T *xs) return (CMD_COMPLETE); } if (fcp->portdb[hdlidx].state == FC_PORTDB_STATE_ZOMBIE) { + isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), target, XS_LUN(xs)); return (CMD_RQLATER); } if (fcp->portdb[hdlidx].state != FC_PORTDB_STATE_VALID) { + isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANNEL(xs), target, XS_LUN(xs), fcp->portdb[hdlidx].state); XS_SETERR(xs, HBA_SELTIMEOUT); return (CMD_COMPLETE); } @@ -4403,6 +4386,7 @@ isp_start(XS_T *xs) } else { sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs)); if ((sdp->role & ISP_ROLE_INITIATOR) == 0) { + isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs)); XS_SETERR(xs, HBA_SELTIMEOUT); return (CMD_COMPLETE); } @@ -4415,7 +4399,7 @@ isp_start(XS_T *xs) qep = isp_getrqentry(isp); if (qep == NULL) { - isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow"); + isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow"); XS_SETERR(xs, HBA_BOTCH); return (CMD_EAGAIN); } @@ -4449,6 +4433,14 @@ isp_start(XS_T *xs) } reqp->req_header.rqs_entry_count = 1; + + /* + * Select and install Header Code. + * Note that it might be overridden before going out + * if we're on a 64 bit platform. The lower level + * code (isp_send_cmd) will select the appropriate + * 64 bit variant if it needs to. + */ if (IS_24XX(isp)) { reqp->req_header.rqs_entry_type = RQSTYPE_T7RQS; } else if (IS_FC(isp)) { @@ -4461,6 +4453,9 @@ isp_start(XS_T *xs) } } + /* + * Set task attributes + */ if (IS_24XX(isp)) { int ttype; if (XS_TAG_P(xs)) { @@ -4513,20 +4508,30 @@ isp_start(XS_T *xs) tptr = &reqp->req_time; /* - * NB: we do not support long CDBs + * NB: we do not support long CDBs (yet) */ cdblen = XS_CDBLEN(xs); if (IS_SCSI(isp)) { + if (cdblen > sizeof (reqp->req_cdb)) { + isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); + XS_SETERR(xs, HBA_BOTCH); + return (CMD_COMPLETE); + } reqp->req_target = target | (XS_CHANNEL(xs) << 7); reqp->req_lun_trn = XS_LUN(xs); - cdblen = ISP_MIN(cdblen, sizeof (reqp->req_cdb)); cdbp = reqp->req_cdb; reqp->req_cdblen = cdblen; } else if (IS_24XX(isp)) { ispreqt7_t *t7 = (ispreqt7_t *)local; fcportdb_t *lp; + if (cdblen > sizeof (t7->req_cdb)) { + isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); + XS_SETERR(xs, HBA_BOTCH); + return (CMD_COMPLETE); + } + lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx]; t7->req_nphdl = target; t7->req_tidlo = lp->portid; @@ -4537,28 +4542,47 @@ isp_start(XS_T *xs) t7->req_lun[0] |= 0x40; } t7->req_lun[1] = XS_LUN(xs); - FCP_NEXT_CRN(isp, xs, t7->req_crn, XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs)); + if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) { + if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs)); + XS_SETERR(xs, HBA_BOTCH); + return (CMD_EAGAIN); + } + } tptr = &t7->req_time; cdbp = t7->req_cdb; - cdblen = ISP_MIN(cdblen, sizeof (t7->req_cdb)); - } else if (ISP_CAP_2KLOGIN(isp)) { - ispreqt2e_t *t2e = (ispreqt2e_t *)local; - t2e->req_target = target; - t2e->req_scclun = XS_LUN(xs); - cdbp = t2e->req_cdb; - cdblen = ISP_MIN(cdblen, sizeof (t2e->req_cdb)); - } else if (ISP_CAP_SCCFW(isp)) { - ispreqt2_t *t2 = (ispreqt2_t *)local; - t2->req_target = target; - t2->req_scclun = XS_LUN(xs); - cdbp = t2->req_cdb; - cdblen = ISP_MIN(cdblen, sizeof (t2->req_cdb)); } else { ispreqt2_t *t2 = (ispreqt2_t *)local; - t2->req_target = target; - t2->req_lun_trn = XS_LUN(xs); - cdbp = t2->req_cdb; - cdblen = ISP_MIN(cdblen, sizeof (t2->req_cdb)); + fcportdb_t *lp; + + if (cdblen > sizeof t2->req_cdb) { + isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen); + XS_SETERR(xs, HBA_BOTCH); + return (CMD_COMPLETE); + } + lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx]; + if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) { + if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs)); + XS_SETERR(xs, HBA_BOTCH); + return (CMD_EAGAIN); + } + } + if (ISP_CAP_2KLOGIN(isp)) { + ispreqt2e_t *t2e = (ispreqt2e_t *)local; + t2e->req_target = target; + t2e->req_scclun = XS_LUN(xs); + cdbp = t2e->req_cdb; + } else if (ISP_CAP_SCCFW(isp)) { + ispreqt2_t *t2 = (ispreqt2_t *)local; + t2->req_target = target; + t2->req_scclun = XS_LUN(xs); + cdbp = t2->req_cdb; + } else { + t2->req_target = target; + t2->req_lun_trn = XS_LUN(xs); + cdbp = t2->req_cdb; + } } ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen); @@ -4571,7 +4595,7 @@ isp_start(XS_T *xs) } if (isp_allocate_xs(isp, xs, &handle)) { - isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers"); + isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers"); XS_SETERR(xs, HBA_BOTCH); return (CMD_EAGAIN); } @@ -4618,7 +4642,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) * Issue a bus reset. */ if (IS_24XX(isp)) { - isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED"); + isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED"); break; } else if (IS_FC(isp)) { mbs.param[1] = 10; @@ -4639,8 +4663,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { break; } - isp_prt(isp, ISP_LOGINFO, - "driver initiated bus reset of bus %d", chan); + isp_prt(isp, ISP_LOGINFO, "driver initiated bus reset of bus %d", chan); return (0); case ISPCTL_RESET_DEV: @@ -4658,17 +4681,12 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) hdlidx = fcp->isp_dev_map[tgt] - 1; if (hdlidx < 0 || hdlidx >= MAX_FC_TARG) { - isp_prt(isp, ISP_LOGWARN, - "Chan %d bad handle %d trying to reset" - "target %d", chan, hdlidx, tgt); + isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to reset target %d", chan, hdlidx, tgt); break; } lp = &fcp->portdb[hdlidx]; if (lp->state != FC_PORTDB_STATE_VALID) { - isp_prt(isp, ISP_LOGWARN, - "Chan %d handle %d for abort of target %d " - "no longer valid", chan, - hdlidx, tgt); + isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no longer valid", chan, hdlidx, tgt); break; } @@ -4703,18 +4721,14 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) FC_SCRATCH_RELEASE(isp, chan); break; } - MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, - QENTRY_LEN, chan); + MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan); sp = (isp24xx_statusreq_t *) local; - isp_get_24xx_response(isp, - &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp); + isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp); FC_SCRATCH_RELEASE(isp, chan); if (sp->req_completion_status == 0) { return (0); } - isp_prt(isp, ISP_LOGWARN, - "Chan %d reset of target %d returned 0x%x", - chan, tgt, sp->req_completion_status); + isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", chan, tgt, sp->req_completion_status); break; } else if (IS_FC(isp)) { if (ISP_CAP_2KLOGIN(isp)) { @@ -4732,8 +4746,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { break; } - isp_prt(isp, ISP_LOGINFO, - "Target %d on Bus %d Reset Succeeded", tgt, chan); + isp_prt(isp, ISP_LOGINFO, "Target %d on Bus %d Reset Succeeded", tgt, chan); ISP_SET_SENDMARKER(isp, chan, 1); return (0); @@ -4747,8 +4760,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) handle = isp_find_handle(isp, xs); if (handle == 0) { - isp_prt(isp, ISP_LOGWARN, - "cannot find handle for command to abort"); + isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort"); break; } if (IS_24XX(isp)) { @@ -4760,21 +4772,15 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) fcp = FCPARAM(isp, chan); hdlidx = fcp->isp_dev_map[tgt] - 1; if (hdlidx < 0 || hdlidx >= MAX_FC_TARG) { - isp_prt(isp, ISP_LOGWARN, - "Chan %d bad handle %d trying to abort" - "target %d", chan, hdlidx, tgt); + isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to abort target %d", chan, hdlidx, tgt); break; } lp = &fcp->portdb[hdlidx]; if (lp->state != FC_PORTDB_STATE_VALID) { - isp_prt(isp, ISP_LOGWARN, - "Chan %d handle %d for abort of target %d " - "no longer valid", chan, hdlidx, tgt); + isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no longer valid", chan, hdlidx, tgt); break; } - isp_prt(isp, ISP_LOGALL, - "Chan %d Abort Cmd for N-Port 0x%04x @ Port " - "0x%06x %p", chan, lp->handle, lp->portid, xs); + isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x%06x", chan, lp->handle, lp->portid); ISP_MEMZERO(ab, QENTRY_LEN); ab->abrt_header.rqs_entry_type = RQSTYPE_ABORT_IO; ab->abrt_header.rqs_entry_count = 1; @@ -4797,8 +4803,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) break; } isp_put_24xx_abrt(isp, ab, fcp->isp_scratch); - ab2 = (isp24xx_abrt_t *) - &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN]; + ab2 = (isp24xx_abrt_t *) &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN]; ab2->abrt_nphdl = 0xdeaf; MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan); isp_mboxcmd(isp, &mbs); @@ -4806,16 +4811,13 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...) FC_SCRATCH_RELEASE(isp, chan); break; } - MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, - QENTRY_LEN, chan); + MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan); isp_get_24xx_abrt(isp, ab2, ab); FC_SCRATCH_RELEASE(isp, chan); if (ab->abrt_nphdl == ISP24XX_ABRT_OKAY) { return (0); } - isp_prt(isp, ISP_LOGWARN, - "Chan %d handle %d abort returned 0x%x", chan, - hdlidx, ab->abrt_nphdl); + isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan, hdlidx, ab->abrt_nphdl); break; } else if (IS_FC(isp)) { if (ISP_CAP_SCCFW(isp)) { @@ -5003,7 +5005,8 @@ isp_intr(ispsoftc_t *isp, uint32_t isr, uint16_t sema, uint16_t mbox) { XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs; uint32_t iptr, optr, junk; - int i, nlooked = 0, ndone = 0; + int i, nlooked = 0, ndone = 0, continuations_expected = 0; + int etype, last_etype = 0; again: optr = isp->isp_residx; @@ -5179,10 +5182,10 @@ again: uint8_t qe[QENTRY_LEN]; ispstatusreq_t *sp = (ispstatusreq_t *) qe; isphdr_t *hp; - int buddaboom, etype, scsi_status, completion_status; + int buddaboom, scsi_status, completion_status; int req_status_flags, req_state_flags; uint8_t *snsp, *resp; - uint32_t rlen, slen; + uint32_t rlen, slen, totslen; long resid; uint16_t oop; @@ -5234,9 +5237,22 @@ again: isp->isp_fpcchiwater = rio->req_header.rqs_seqno; } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + last_etype = etype; continue; } else if (etype == RQSTYPE_RIO2) { - isp_prt(isp, ISP_LOGERR, "dropping RIO2 response\n"); + isp_prt(isp, ISP_LOGERR, "dropping RIO2 response"); + ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + last_etype = etype; + continue; + } else if (etype == RQSTYPE_STATUS_CONT) { + isp_get_cont_response(isp, (ispstatus_cont_t *) hp, (ispstatus_cont_t *) sp); + if (last_etype == RQSTYPE_RESPONSE && continuations_expected && ndone > 0 && (xs = complist[ndone-1]) != NULL) { + ispstatus_cont_t *scp = (ispstatus_cont_t *) sp; + XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data)); + isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "%d more Status Continuations expected", --continuations_expected); + } else { + isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); + } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ continue; } else { @@ -5256,12 +5272,12 @@ again: * optr to be one more than the updated amount. */ while (tsto != oop) { - optr = ISP_NXT_QENTRY(tsto, - RESULT_QUEUE_LEN(isp)); + optr = ISP_NXT_QENTRY(tsto, RESULT_QUEUE_LEN(isp)); } if (r > 0) { ISP_WRITE(isp, isp->isp_respoutrp, optr); ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + last_etype = etype; continue; } @@ -5277,11 +5293,10 @@ again: * not, something bad has happened. */ 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_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; } buddaboom = 1; @@ -5296,10 +5311,11 @@ again: if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) { isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp); ISP_WRITE(isp, isp->isp_respoutrp, optr); + last_etype = etype; continue; } if (sp->req_header.rqs_flags & RQSFLAG_FULL) { - isp_prt(isp, ISP_LOGDEBUG0, "internal queues full"); + isp_prt(isp, ISP_LOG_WARN1, "internal queues full"); /* * We'll synthesize a QUEUE FULL message below. */ @@ -5319,6 +5335,7 @@ again: if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) { isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp); ISP_WRITE(isp, isp->isp_respoutrp, optr); + last_etype = etype; continue; } } @@ -5327,6 +5344,7 @@ again: isp_prt(isp, ISP_LOGERR, "bad request handle 0x%x (iocb type 0x%x)", sp->req_handle, etype); ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ ISP_WRITE(isp, isp->isp_respoutrp, optr); + last_etype = etype; continue; } xs = isp_find_xs(isp, sp->req_handle); @@ -5343,20 +5361,23 @@ again: } ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ ISP_WRITE(isp, isp->isp_respoutrp, optr); + last_etype = etype; continue; } if (req_status_flags & RQSTF_BUS_RESET) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs)); XS_SETERR(xs, HBA_BUSRESET); ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1); } if (buddaboom) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs)); XS_SETERR(xs, HBA_BOTCH); } resp = NULL; rlen = 0; snsp = NULL; - slen = 0; + totslen = slen = 0; if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) != 0) { resp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense; rlen = ((isp24xx_statusreq_t *)sp)->req_response_len; @@ -5374,14 +5395,23 @@ again: if (IS_24XX(isp)) { snsp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense; snsp += rlen; - slen = ((isp24xx_statusreq_t *)sp)->req_sense_len; + totslen = ((isp24xx_statusreq_t *)sp)->req_sense_len; + slen = (sizeof (((isp24xx_statusreq_t *)sp)->req_rsp_sense)) - rlen; + if (totslen < slen) + slen = totslen; } else { snsp = sp->req_sense_data; - slen = sp->req_sense_len; + totslen = sp->req_sense_len; + slen = sizeof (sp->req_sense_data); + if (totslen < slen) + slen = totslen; } } else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) { snsp = sp->req_sense_data; - slen = sp->req_sense_len; + totslen = sp->req_sense_len; + slen = sizeof (sp->req_sense_data); + if (totslen < slen) + slen = totslen; } if (req_state_flags & RQSF_GOT_STATUS) { *XS_STSP(xs) = scsi_status & 0xff; @@ -5442,7 +5472,22 @@ again: } } if (snsp && slen) { - XS_SAVE_SENSE(xs, snsp, slen); + if (totslen > slen) { + continuations_expected += ((totslen - slen + QENTRY_LEN - 5) / (QENTRY_LEN - 4)); + if (ndone > (MAX_REQUESTQ_COMPLETIONS - continuations_expected - 1)) { + /* we'll lose some stats, but that's a small price to pay */ + for (i = 0; i < ndone; i++) { + if (complist[i]) { + isp->isp_rsltccmplt++; + isp_done(complist[i]); + } + } + ndone = 0; + } + isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "Expecting %d more Status Continuations for total sense length of %u", + continuations_expected, totslen); + } + 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); @@ -5461,6 +5506,7 @@ again: *XS_STSP(xs) = SCSI_QFULL; XS_SETERR(xs, HBA_NOERROR); } else if (XS_NOERR(xs)) { + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__); XS_SETERR(xs, HBA_BOTCH); } XS_SET_RESID(xs, XS_XFRLEN(xs)); @@ -5482,15 +5528,12 @@ again: } isp_destroy_handle(isp, sp->req_handle); - if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) || - ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) { - isp_prt_endcmd(isp, xs); - } if (isp->isp_nactive > 0) { isp->isp_nactive--; } complist[ndone++] = xs; /* defer completion call until later */ ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */ + last_etype = etype; if (ndone == MAX_REQUESTQ_COMPLETIONS) { break; } @@ -5525,6 +5568,10 @@ out: for (i = 0; i < ndone; i++) { xs = complist[i]; if (xs) { + if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) || + ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) { + isp_prt_endcmd(isp, xs); + } isp->isp_rsltccmplt++; isp_done(xs); } @@ -5547,8 +5594,8 @@ isp_prt_endcmd(ispsoftc_t *isp, XS_T *xs) ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i]); } if (XS_SENSE_VALID(xs)) { - isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x", - XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs)); + isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s SenseLength=%u/%u KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x", + XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), XS_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs)); } else { isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s STS 0x%x XS_ERR=0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs), XS_ERR(xs)); } @@ -5876,6 +5923,7 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox) continue; } j++; + isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__); XS_SETERR(xs, HBA_BUSRESET); } if (j) { @@ -6102,10 +6150,10 @@ isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *opt { switch (type) { case RQSTYPE_STATUS_CONT: - isp_prt(isp, ISP_LOGDEBUG0, "Ignored Continuation Response"); + isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response"); return (1); case RQSTYPE_MARKER: - isp_prt(isp, ISP_LOGDEBUG0, "Marker Response"); + isp_prt(isp, ISP_LOG_WARN1, "Marker Response"); return (1); case RQSTYPE_ATIO: case RQSTYPE_CTIO: @@ -6170,7 +6218,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) case RQCS_INCOMPLETE: if ((sp->req_state_flags & RQSF_GOT_TARGET) == 0) { - isp_xs_prt(isp, xs, ISP_LOGDEBUG1, "Selection Timeout"); + isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func__, __LINE__); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_SELTIMEOUT); *rp = XS_XFRLEN(xs); @@ -6366,7 +6414,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) break; case RQCS_QUEUE_FULL: - isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "internal queues full status 0x%x", *XS_STSP(xs)); + isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *XS_STSP(xs)); /* * If QFULL or some other status byte is set, then this @@ -6374,17 +6422,14 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) * * Unfortunately, some QLogic f/w writers have, in * some cases, ommitted to *set* status to QFULL. - * - + */ +#if 0 if (*XS_STSP(xs) != SCSI_GOOD && XS_NOERR(xs)) { XS_SETERR(xs, HBA_NOERROR); return; } - * - * - */ - +#endif *XS_STSP(xs) = SCSI_QFULL; XS_SETERR(xs, HBA_NOERROR); return; @@ -6446,8 +6491,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) reason = "logout"; } - isp_prt(isp, ISP_LOGINFO, "port %s for target %d", - reason, XS_TGT(xs)); + isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs)); /* * If we're on a local loop, force a LIP (which is overkill) @@ -6469,24 +6513,21 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp) return; } case RQCS_PORT_CHANGED: - isp_prt(isp, ISP_LOGWARN, - "port changed for target %d", XS_TGT(xs)); + isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs)); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_SELTIMEOUT); } return; case RQCS_PORT_BUSY: - isp_prt(isp, ISP_LOGWARN, - "port busy for target %d", XS_TGT(xs)); + isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs)); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_TGTBSY); } return; default: - isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", - sp->req_completion_status); + isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", sp->req_completion_status); break; } if (XS_NOERR(xs)) { @@ -6547,9 +6588,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; case RQCS_24XX_DRE: /* data reassembly error */ - isp_prt(isp, ISP_LOGERR, - "Chan %d data reassembly error for target %d", - chan, XS_TGT(xs)); + isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", chan, XS_TGT(xs)); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_ABORTED); } @@ -6557,8 +6596,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; case RQCS_24XX_TABORT: /* aborted by target */ - isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", - chan, XS_TGT(xs)); + isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs)); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_ABORTED); } @@ -6580,7 +6618,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; } XS_SET_RESID(xs, sp->req_resid); - isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(xs)[0] & 0xff); + isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(xs)[0] & 0xff); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_NOERROR); } @@ -6616,8 +6654,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; } case RQCS_PORT_CHANGED: - isp_prt(isp, ISP_LOGWARN, - "port changed for target %d chan %d", XS_TGT(xs), chan); + isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(xs), chan); if (XS_NOERR(xs)) { XS_SETERR(xs, HBA_SELTIMEOUT); } @@ -6625,9 +6662,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * case RQCS_24XX_ENOMEM: /* f/w resource unavailable */ - isp_prt(isp, ISP_LOGWARN, - "f/w resource unavailable for target %d chan %d", - XS_TGT(xs), chan); + isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %d", XS_TGT(xs), chan); if (XS_NOERR(xs)) { *XS_STSP(xs) = SCSI_BUSY; XS_SETERR(xs, HBA_TGTBSY); @@ -6635,9 +6670,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; case RQCS_24XX_TMO: /* task management overrun */ - isp_prt(isp, ISP_LOGWARN, - "command for target %d overlapped task management for " - "chan %d", XS_TGT(xs), chan); + isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task management for chan %d", XS_TGT(xs), chan); if (XS_NOERR(xs)) { *XS_STSP(xs) = SCSI_BUSY; XS_SETERR(xs, HBA_TGTBSY); @@ -6645,9 +6678,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long * return; default: - isp_prt(isp, ISP_LOGERR, - "Unknown Completion Status 0x%x on chan %d", - sp->req_completion_status, chan); + isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp->req_completion_status, chan); break; } if (XS_NOERR(xs)) { @@ -6991,7 +7022,7 @@ static const uint32_t mbpfc[] = { ISP_FC_OPMAP(0x03, 0x07), /* 0x05: MBOX_READ_RAM_WORD */ ISP_FC_OPMAP_FULL(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff), /* 0x06: MBOX_MAILBOX_REG_TEST */ ISP_FC_OPMAP(0x07, 0x07), /* 0x07: MBOX_VERIFY_CHECKSUM */ - ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x4f), /* 0x08: MBOX_ABOUT_FIRMWARE */ + ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x7f), /* 0x08: MBOX_ABOUT_FIRMWARE */ ISP_FC_OPMAP(0xdf, 0x01), /* 0x09: MBOX_LOAD_RISC_RAM_2100 */ ISP_FC_OPMAP(0xdf, 0x01), /* 0x0a: DUMP RAM */ ISP_FC_OPMAP_HALF(0x1, 0xff, 0x0, 0x01), /* 0x0b: MBOX_LOAD_RISC_RAM */ diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c index 6aea120..34a49fa 100644 --- a/sys/dev/isp/isp_freebsd.c +++ b/sys/dev/isp/isp_freebsd.c @@ -55,9 +55,6 @@ int isp_change_is_bad = 0; /* "changed" devices are bad */ int isp_quickboot_time = 7; /* don't wait more than N secs for loop up */ int isp_gone_device_time = 30; /* grace time before reporting device lost */ int isp_autoconfig = 1; /* automatically attach/detach devices */ -static const char *roles[4] = { - "(none)", "Target", "Initiator", "Target/Initiator" -}; static const char prom3[] = "Chan %d PortID 0x%06x Departed from Target %u because of %s"; static const char rqo[] = "%s: Request Queue Overflow\n"; @@ -120,7 +117,10 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) csa.event_enable = AC_LOST_DEVICE; csa.callback = isp_cam_async; csa.callback_arg = sim; + + ISP_LOCK(isp); xpt_action((union ccb *)&csa); + ISP_UNLOCK(isp); if (IS_SCSI(isp)) { struct isp_spi *spi = ISP_SPI_PC(isp, chan); @@ -154,15 +154,14 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) if (fcp->role & ISP_ROLE_INITIATOR) { isp_freeze_loopdown(isp, chan, "isp_attach"); callout_reset(&fc->ldt, isp_quickboot_time * hz, isp_ldt, fc); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down Timer @ %lu", (unsigned long) time_uptime); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down Timer @ %lu", (unsigned long) time_uptime); } ISP_UNLOCK(isp); if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) { xpt_free_path(fc->path); ISP_LOCK(isp); - if (callout_active(&fc->ldt)) { + if (callout_active(&fc->ldt)) callout_stop(&fc->ldt); - } xpt_bus_deregister(cam_sim_path(fc->sim)); ISP_UNLOCK(isp); cam_sim_free(fc->sim, FALSE); @@ -182,6 +181,9 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan) SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "wwpn", CTLFLAG_RD, &FCPARAM(isp, 0)->isp_wwpn, "World Wide Port Name"); SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "loop_down_limit", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->loop_down_limit, 0, "Loop Down Limit"); SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "gone_device_time", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->gone_device_time, 0, "Gone Device Time"); +#if defined(ISP_TARGET_MODE) && defined(DEBUG) + SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "inject_lost_data_frame", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->inject_lost_data_frame, 0, "Cause a Lost Frame on a Read"); +#endif } } return (0); @@ -301,7 +303,9 @@ isp_detach(ispsoftc_t *isp) csa.event_enable = 0; csa.callback = isp_cam_async; csa.callback_arg = sim; + ISP_LOCK(isp); xpt_action((union ccb *)&csa); + ISP_UNLOCK(isp); xpt_free_path(path); xpt_bus_deregister(cam_sim_path(sim)); cam_sim_free(sim, FALSE); @@ -346,7 +350,7 @@ isp_unfreeze_loopdown(ispsoftc_t *isp, int chan) int wasfrozen = fc->simqfrozen & SIMQFRZ_LOOPDOWN; fc->simqfrozen &= ~SIMQFRZ_LOOPDOWN; if (wasfrozen && fc->simqfrozen == 0) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan); xpt_release_simq(fc->sim, 1); } } @@ -360,7 +364,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int flags, struct thread *td) int nr, chan, retval = ENOTTY; isp = dev->si_drv1; - + switch (c) { case ISP_SDBLEV: { @@ -479,7 +483,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int flags, struct thread *td) } lp = &FCPARAM(isp, ifc->chan)->portdb[ifc->loopid]; if (lp->state == FC_PORTDB_STATE_VALID || lp->target_mode) { - ifc->role = lp->roles; + ifc->role = (lp->prli_word3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT; ifc->loopid = lp->handle; ifc->portid = lp->portid; ifc->node_wwn = lp->node_wwn; @@ -772,14 +776,16 @@ isp_get_pcmd(ispsoftc_t *isp, union ccb *ccb) static ISP_INLINE void isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb) { - ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free; - isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb); - ISP_PCMD(ccb) = NULL; + if (ISP_PCMD(ccb)) { + ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free; + isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb); + ISP_PCMD(ccb) = NULL; + } } + /* * Put the target mode functions here, because some are inlines */ - #ifdef ISP_TARGET_MODE static ISP_INLINE void isp_tmlock(ispsoftc_t *, const char *); static ISP_INLINE void isp_tmunlk(ispsoftc_t *); @@ -804,9 +810,11 @@ static int isp_enable_target_mode(ispsoftc_t *, int); static int isp_disable_target_mode(ispsoftc_t *, int); static void isp_ledone(ispsoftc_t *, lun_entry_t *); static timeout_t isp_refire_putback_atio; +static timeout_t isp_refire_notify_ack; static void isp_complete_ctio(union ccb *); static void isp_target_putback_atio(union ccb *); -static void isp_target_start_ctio(ispsoftc_t *, union ccb *); +enum Start_Ctio_How { FROM_CAM, FROM_SRR, FROM_CTIO_DONE }; +static void isp_target_start_ctio(ispsoftc_t *, union ccb *, enum Start_Ctio_How); static void isp_handle_platform_atio(ispsoftc_t *, at_entry_t *); static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *); static void isp_handle_platform_atio7(ispsoftc_t *, at7_entry_t *); @@ -1026,8 +1034,10 @@ isp_get_atpd(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag) static ISP_INLINE void isp_put_atpd(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp) { - atp->tag = 0; - atp->dead = 0; + if (atp->ests) { + isp_put_ecmd(isp, atp->ests); + } + memset(atp, 0, sizeof (*atp)); atp->next = tptr->atfree; tptr->atfree = atp; } @@ -1248,7 +1258,7 @@ isp_enable_lun(ispsoftc_t *isp, union ccb *ccb) ISP_SET_PC(isp, bus, tm_enable_defer, 1); ccb->ccb_h.status = CAM_REQ_CMP; xpt_print(ccb->ccb_h.path, "Target Mode not enabled yet- lun enable deferred\n"); - goto done; + goto done1; } /* @@ -1265,6 +1275,7 @@ done: } else { tptr->enabled = 1; } +done1: if (tptr) { rls_lun_statep(isp, tptr); } @@ -1283,6 +1294,7 @@ isp_enable_deferred_luns(ispsoftc_t *isp, int bus) struct tslist *lhp; int i, n; + ISP_GET_PC(isp, bus, tm_enabled, i); if (i == 1) { return (CAM_REQ_CMP); @@ -1303,7 +1315,7 @@ isp_enable_deferred_luns(ispsoftc_t *isp, int bus) SLIST_FOREACH(tptr, lhp, next) { tptr->hold++; if (tptr->enabled == 0) { - if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) == 0) { + if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) == CAM_REQ_CMP) { tptr->enabled = 1; n++; } @@ -1325,9 +1337,10 @@ static cam_status isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun) { cam_status status; - int luns_already_enabled = ISP_FC_PC(isp, bus)->tm_luns_enabled; + int luns_already_enabled; - isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u", __func__, bus, lun); + ISP_GET_PC(isp, bus, tm_luns_enabled, luns_already_enabled); + isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u luns_enabled %d", __func__, bus, lun, luns_already_enabled); if (IS_24XX(isp) || (IS_FC(isp) && luns_already_enabled)) { status = CAM_REQ_CMP; } else { @@ -1342,7 +1355,7 @@ isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun) } status = CAM_REQ_INPROG; isp->isp_osinfo.rptr = &status; - if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, DFLT_CMND_CNT, DFLT_INOT_CNT)) { + if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun == CAM_LUN_WILDCARD? 0 : lun, cmd_cnt, not_cnt)) { status = CAM_RESRC_UNAVAIL; } else { mtx_sleep(&status, &isp->isp_lock, PRIBIO, "isp_enable_deferred", 0); @@ -1412,8 +1425,9 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb) /* * For SCC FW, we only deal with lun zero. */ - if (IS_FC(isp)) { - lun = 0; + if (IS_FC(isp) && lun > 0) { + status = CAM_REQ_CMP; + goto done; } isp->isp_osinfo.rptr = &status; if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, 0, 0)) { @@ -1426,7 +1440,8 @@ done: if (status == CAM_REQ_CMP) { tptr->enabled = 0; /* - * If we have no more luns enabled for this bus, delete all tracked wwns for it (if we are FC) + * If we have no more luns enabled for this bus, + * delete all tracked wwns for it (if we are FC), * and disable target mode. */ if (is_any_lun_enabled(isp, bus) == 0) { @@ -1492,7 +1507,7 @@ isp_disable_target_mode(ispsoftc_t *isp, int bus) } } ISP_SET_PC(isp, bus, tm_enabled, 0); - isp_prt(isp, ISP_LOGINFO, "Target Role disabled onon Bus %d", bus); + isp_prt(isp, ISP_LOGINFO, "Target Role disabled on Bus %d", bus); return (0); } @@ -1517,21 +1532,25 @@ isp_ledone(ispsoftc_t *isp, lun_entry_t *lep) } static void -isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) +isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how) { + void *qe; + int fctape, sendstatus, resid, repval = ISP_LOGTDEBUG0; tstate_t *tptr; + fcparam *fcp; atio_private_data_t *atp; struct ccb_scsiio *cso = &ccb->csio; - uint32_t dmaresult, handle; + uint32_t dmaresult, handle, xfrlen, sense_length; uint8_t local[QENTRY_LEN]; /* * Do some sanity checks. */ - if (cso->dxfer_len == 0) { + xfrlen = cso->dxfer_len; + if (xfrlen == 0) { if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) { - xpt_print(ccb->ccb_h.path, "a data transfer length of zero but no status to send is wrong\n"); + ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "a data transfer length of zero but no status to send is wrong\n"); ccb->ccb_h.status = CAM_REQ_INVALID; xpt_done(ccb); return; @@ -1542,8 +1561,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) if (tptr == NULL) { tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); if (tptr == NULL) { - xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s\n", __func__, cso->tag_id); - dump_tstates(isp, XS_CHANNEL(ccb)); + ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s\n", __func__, cso->tag_id); ccb->ccb_h.status = CAM_DEV_NOT_THERE; xpt_done(ccb); return; @@ -1552,14 +1570,18 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) atp = isp_get_atpd(isp, tptr, cso->tag_id); if (atp == NULL) { - xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\n", __func__, cso->tag_id); + ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\n", __func__, cso->tag_id); isp_dump_atpd(isp, tptr); ccb->ccb_h.status = CAM_REQ_CMP_ERR; xpt_done(ccb); return; } + + /* + * Is this command a dead duck? + */ if (atp->dead) { - xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO for a dead command\n", __func__, cso->tag_id); + ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] not sending a CTIO for a dead command\n", __func__, cso->tag_id); ccb->ccb_h.status = CAM_REQ_ABORTED; xpt_done(ccb); return; @@ -1568,38 +1590,83 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) /* * Check to make sure we're still in target mode. */ - if ((FCPARAM(isp, XS_CHANNEL(ccb))->role & ISP_ROLE_TARGET) == 0) { - xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because we're no longer in target mode\n", __func__, cso->tag_id); + fcp = FCPARAM(isp, XS_CHANNEL(ccb)); + if ((fcp->role & ISP_ROLE_TARGET) == 0) { + ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because we're no longer in target mode\n", __func__, cso->tag_id); ccb->ccb_h.status = CAM_PROVIDE_FAIL; xpt_done(ccb); return; } /* + * We're only handling one outstanding CTIO at a time (which + * could be split into two to split data and status) + */ + if (atp->ctcnt) { + ISP_PATH_PRT(isp, ISP_LOGINFO, ccb->ccb_h.path, "sending only one CTIO at a time\n"); + goto restart_delay; + } + + + /* * Get some resources */ if (isp_get_pcmd(isp, ccb)) { - rls_lun_statep(isp, tptr); - xpt_print(ccb->ccb_h.path, "out of PCMDs\n"); - cam_freeze_devq(ccb->ccb_h.path); - cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); - ccb->ccb_h.status = CAM_REQUEUE_REQ; - xpt_done(ccb); - return; + ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n"); + goto restart_delay; } qe = isp_getrqentry(isp); if (qe == NULL) { - xpt_print(ccb->ccb_h.path, rqo, __func__); - cam_freeze_devq(ccb->ccb_h.path); - cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); - ccb->ccb_h.status = CAM_REQUEUE_REQ; - goto out; + ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, rqo, __func__); + goto restart_delay; } memset(local, 0, QENTRY_LEN); /* - * We're either moving data or completing a command here. + * Does the initiator expect FC-Tape style responses? + * Can we provide them? */ + if ((atp->word3 & PRLI_WD3_RETRY) && fcp->fctape_enabled) { + fctape = 1; + } else { + fctape = 0; + } + + /* + * If we already did the data xfer portion of a CTIO that sends data + * and status, don't do it again and do the status portion now. + */ + if (atp->sendst) { + xfrlen = 0; /* we already did the data transfer */ + atp->sendst = 0; + } + if (ccb->ccb_h.flags & CAM_SEND_STATUS) { + sendstatus = 1; + } else { + sendstatus = 0; + } + + if (ccb->ccb_h.flags & CAM_SEND_SENSE) { + /* + * Sense length is not the entire sense data structure size. Periph + * drivers don't seem to be setting sense_len to reflect the actual + * size. We'll peek inside to get the right amount. + */ + sense_length = cso->sense_len; + + /* + * This 'cannot' happen + */ + if (sense_length > (XCMD_SIZE - MIN_FCP_RESPONSE_SIZE)) { + sense_length = XCMD_SIZE - MIN_FCP_RESPONSE_SIZE; + } + } else { + sense_length = 0; + } + + if (how == FROM_SRR || atp->nsrr) + repval = ISP_LOGINFO; + if (IS_24XX(isp)) { ct7_entry_t *cto = (ct7_entry_t *) local; @@ -1612,58 +1679,155 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) cto->ct_iid_hi = atp->portid >> 16; cto->ct_oxid = atp->oxid; cto->ct_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(ccb)); - cto->ct_scsi_status = cso->scsi_status; cto->ct_timeout = 120; cto->ct_flags = atp->tattr << CT7_TASK_ATTR_SHIFT; - if (ccb->ccb_h.flags & CAM_SEND_STATUS) { - cto->ct_flags |= CT7_SENDSTATUS; - } - if (cso->dxfer_len == 0) { - cto->ct_flags |= CT7_FLAG_MODE1 | CT7_NO_DATA; - if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) { - int m = min(cso->sense_len, sizeof (struct scsi_sense_data)); - cto->rsp.m1.ct_resplen = cto->ct_senselen = min(m, MAXRESPLEN_24XX); - memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, cto->ct_senselen); - cto->ct_scsi_status |= (FCP_SNSLEN_VALID << 8); + + /* + * Mode 1, status, no data. Only possible when we are sending status, have + * no data to transfer, and any sense length can fit in the ct7_entry. + * + * Mode 2, status, no data. We have to use this in the case sense data + * won't fit into a ct7_entry_t. + * + */ + if (sendstatus && xfrlen == 0) { + cto->ct_flags |= CT7_SENDSTATUS | CT7_NO_DATA; + resid = atp->orig_datalen - atp->bytes_xfered; + if (sense_length <= MAXRESPLEN_24XX) { + if (resid < 0) { + cto->ct_resid = -resid; + } else if (resid > 0) { + cto->ct_resid = resid; + } + cto->ct_flags |= CT7_FLAG_MODE1; + cto->ct_scsi_status = cso->scsi_status; + if (resid < 0) { + cto->ct_scsi_status |= (FCP_RESID_OVERFLOW << 8); + } else if (resid > 0) { + cto->ct_scsi_status |= (FCP_RESID_UNDERFLOW << 8); + } + if (fctape) { + cto->ct_flags |= CT7_CONFIRM|CT7_EXPLCT_CONF; + } + if (sense_length) { + cto->ct_scsi_status |= (FCP_SNSLEN_VALID << 8); + cto->rsp.m1.ct_resplen = cto->ct_senselen = sense_length; + memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length); + } + } else { + bus_addr_t addr; + char buf[XCMD_SIZE]; + fcp_rsp_iu_t *rp; + + if (atp->ests == NULL) { + atp->ests = isp_get_ecmd(isp); + if (atp->ests == NULL) { + goto restart_delay; + } + } + memset(buf, 0, sizeof (buf)); + rp = (fcp_rsp_iu_t *)buf; + if (fctape) { + cto->ct_flags |= CT7_CONFIRM|CT7_EXPLCT_CONF; + rp->fcp_rsp_bits |= FCP_CONF_REQ; + } + cto->ct_flags |= CT7_FLAG_MODE2; + rp->fcp_rsp_scsi_status = cso->scsi_status; + if (resid < 0) { + rp->fcp_rsp_resid = -resid; + rp->fcp_rsp_bits |= FCP_RESID_OVERFLOW; + } else if (resid > 0) { + rp->fcp_rsp_resid = resid; + rp->fcp_rsp_bits |= FCP_RESID_UNDERFLOW; + } + if (sense_length) { + rp->fcp_rsp_snslen = sense_length; + cto->ct_senselen = sense_length; + rp->fcp_rsp_bits |= FCP_SNSLEN_VALID; + isp_put_fcp_rsp_iu(isp, rp, atp->ests); + memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data, sense_length); + } else { + isp_put_fcp_rsp_iu(isp, rp, atp->ests); + } + if (isp->isp_dblev & ISP_LOGTDEBUG1) { + isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_RESPONSE_SIZE + sense_length, atp->ests); + } + addr = isp->isp_osinfo.ecmd_dma; + addr += ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * XCMD_SIZE); + isp_prt(isp, repval, "%s: ests base %p vaddr %p ecmd_dma %jx addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests, + (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RESPONSE_SIZE + sense_length); + cto->rsp.m2.ct_datalen = MIN_FCP_RESPONSE_SIZE + sense_length; + cto->rsp.m2.ct_fcp_rsp_iudata.ds_base = DMA_LO32(addr); + cto->rsp.m2.ct_fcp_rsp_iudata.ds_basehi = DMA_HI32(addr); + cto->rsp.m2.ct_fcp_rsp_iudata.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; } - } else { + if (sense_length) { + isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d slen %u sense: %x %x/%x/%x", __func__, + cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, sense_length, cso->sense_data.error_code, + cso->sense_data.sense_buf[1], cso->sense_data.sense_buf[11], cso->sense_data.sense_buf[12]); + } else { + isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d", __func__, + cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid); + } + atp->state = ATPD_STATE_LAST_CTIO; + } + + /* + * Mode 0 data transfers, *possibly* with status. + */ + if (xfrlen != 0) { cto->ct_flags |= CT7_FLAG_MODE0; if ((cso->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { cto->ct_flags |= CT7_DATA_IN; } else { cto->ct_flags |= CT7_DATA_OUT; } - cto->rsp.m0.reloff = atp->bytes_xfered; + /* - * Don't overrun the limits placed on us + * Don't overrun the limits placed on us, but record it as + * if we had so that we can set an overflow bit later. */ - if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) { - cso->dxfer_len = atp->orig_datalen - atp->bytes_xfered; + atp->last_xframt = xfrlen; + if (atp->bytes_xfered >= atp->orig_datalen) { + resid = atp->orig_datalen - (atp->bytes_xfered + xfrlen); + } else if (atp->bytes_xfered + xfrlen > atp->orig_datalen) { + resid = atp->orig_datalen - (atp->bytes_xfered + xfrlen); + xfrlen = atp->orig_datalen - atp->bytes_xfered; + } else { + resid = atp->orig_datalen - xfrlen; } - atp->last_xframt = cso->dxfer_len; - cto->rsp.m0.ct_xfrlen = cso->dxfer_len; - } - if (cto->ct_flags & CT7_SENDSTATUS) { - int lvl = (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0; - cto->ct_resid = atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_len); - if (cto->ct_resid < 0) { - cto->ct_scsi_status |= (FCP_RESID_OVERFLOW << 8); - } else if (cto->ct_resid > 0) { - cto->ct_scsi_status |= (FCP_RESID_UNDERFLOW << 8); + cto->rsp.m0.reloff = atp->bytes_xfered; + cto->rsp.m0.ct_xfrlen = xfrlen; + +#ifdef DEBUG + if (ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame && xfrlen > ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame) { + isp_prt(isp, ISP_LOGWARN, "%s: truncating data frame with xfrlen %d to %d", __func__, xfrlen, xfrlen - (xfrlen >> 2)); + ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame = 0; + cto->rsp.m0.ct_xfrlen -= xfrlen >> 2; } - atp->state = ATPD_STATE_LAST_CTIO; - ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO7[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid, - atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered); - } else { - cto->ct_resid = 0; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, cso->ccb_h.path, "%s: CTIO7[%x] flags %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags, - cso->dxfer_len, atp->bytes_xfered); - atp->state = ATPD_STATE_CTIO; +#endif + if (sendstatus) { + if (cso->scsi_status == SCSI_STATUS_OK && resid == 0 && fctape == 0) { + cto->ct_flags |= CT7_SENDSTATUS; + atp->state = ATPD_STATE_LAST_CTIO; + } else { + atp->sendst = 1; /* send status later */ + cto->ct_header.rqs_seqno = 0; + atp->state = ATPD_STATE_CTIO; + } + } else { + atp->state = ATPD_STATE_CTIO; + } + isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x xfrlen=%u off=%u", __func__, + cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, xfrlen, atp->bytes_xfered); } } else if (IS_FC(isp)) { ct2_entry_t *cto = (ct2_entry_t *) local; - cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2; + if (isp->isp_osinfo.sixtyfourbit) + cto->ct_header.rqs_entry_type = RQSTYPE_CTIO3; + else + cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2; cto->ct_header.rqs_entry_count = 1; cto->ct_header.rqs_seqno = 1; if (ISP_CAP_2KLOGIN(isp) == 0) { @@ -1674,76 +1838,142 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) cto->ct_lun = ccb->ccb_h.target_lun; } } - - + cto->ct_timeout = 10; cto->ct_rxid = cso->tag_id; - if (cso->dxfer_len == 0) { - cto->ct_flags |= CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS; - cto->rsp.m1.ct_scsi_status = cso->scsi_status; - cto->ct_resid = atp->orig_datalen - atp->bytes_xfered; - if (cto->ct_resid < 0) { - cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER; - } else if (cto->ct_resid > 0) { - cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER; + + /* + * Mode 1, status, no data. Only possible when we are sending status, have + * no data to transfer, and the sense length can fit in the ct7_entry. + * + * Mode 2, status, no data. We have to use this in the case the the response + * length won't fit into a ct2_entry_t. + * + * We'll fill out this structure with information as if this were a + * Mode 1. The hardware layer will create the Mode 2 FCP RSP IU as + * needed based upon this. + */ + if (sendstatus && xfrlen == 0) { + cto->ct_flags |= CT2_SENDSTATUS | CT2_NO_DATA; + resid = atp->orig_datalen - atp->bytes_xfered; + if (sense_length <= MAXRESPLEN) { + if (resid < 0) { + cto->ct_resid = -resid; + } else if (resid > 0) { + cto->ct_resid = resid; + } + cto->ct_flags |= CT2_FLAG_MODE1; + cto->rsp.m1.ct_scsi_status = cso->scsi_status; + if (resid < 0) { + cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER; + } else if (resid > 0) { + cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER; + } + if (fctape) { + cto->ct_flags |= CT2_CONFIRM; + } + if (sense_length) { + cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID; + cto->rsp.m1.ct_resplen = cto->rsp.m1.ct_senselen = sense_length; + memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length); + } + } else { + bus_addr_t addr; + char buf[XCMD_SIZE]; + fcp_rsp_iu_t *rp; + + if (atp->ests == NULL) { + atp->ests = isp_get_ecmd(isp); + if (atp->ests == NULL) { + goto restart_delay; + } + } + memset(buf, 0, sizeof (buf)); + rp = (fcp_rsp_iu_t *)buf; + if (fctape) { + cto->ct_flags |= CT2_CONFIRM; + rp->fcp_rsp_bits |= FCP_CONF_REQ; + } + cto->ct_flags |= CT2_FLAG_MODE2; + rp->fcp_rsp_scsi_status = cso->scsi_status; + if (resid < 0) { + rp->fcp_rsp_resid = -resid; + rp->fcp_rsp_bits |= FCP_RESID_OVERFLOW; + } else if (resid > 0) { + rp->fcp_rsp_resid = resid; + rp->fcp_rsp_bits |= FCP_RESID_UNDERFLOW; + } + if (sense_length) { + rp->fcp_rsp_snslen = sense_length; + rp->fcp_rsp_bits |= FCP_SNSLEN_VALID; + isp_put_fcp_rsp_iu(isp, rp, atp->ests); + memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data, sense_length); + } else { + isp_put_fcp_rsp_iu(isp, rp, atp->ests); + } + if (isp->isp_dblev & ISP_LOGTDEBUG1) { + isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_RESPONSE_SIZE + sense_length, atp->ests); + } + addr = isp->isp_osinfo.ecmd_dma; + addr += ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * XCMD_SIZE); + isp_prt(isp, repval, "%s: ests base %p vaddr %p ecmd_dma %jx addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests, + (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RESPONSE_SIZE + sense_length); + cto->rsp.m2.ct_datalen = MIN_FCP_RESPONSE_SIZE + sense_length; + if (isp->isp_osinfo.sixtyfourbit) { + cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base = DMA_LO32(addr); + cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi = DMA_HI32(addr); + cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; + } else { + cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base = DMA_LO32(addr); + cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length; + } } - if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) { - int m = min(cso->sense_len, MAXRESPLEN); - memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, m); - cto->rsp.m1.ct_senselen = m; - cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID; - } else if (cso->scsi_status == SCSI_STATUS_CHECK_COND) { - /* - * XXX: DEBUG - */ - xpt_print(ccb->ccb_h.path, "CHECK CONDITION being sent without associated SENSE DATA for CDB=0x%x\n", atp->cdb0); + if (sense_length) { + isp_prt(isp, repval, "%s: CTIO2[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d sense: %x %x/%x/%x", __func__, + cto->ct_rxid, atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid, cso->sense_data.error_code, + cso->sense_data.sense_buf[1], cso->sense_data.sense_buf[11], cso->sense_data.sense_buf[12]); + } else { + isp_prt(isp, repval, "%s: CTIO2[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d", __func__, + cto->ct_rxid, atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid); } - } else { + atp->state = ATPD_STATE_LAST_CTIO; + } + + if (xfrlen != 0) { + int resid = 0; cto->ct_flags |= CT2_FLAG_MODE0; if ((cso->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { cto->ct_flags |= CT2_DATA_IN; } else { cto->ct_flags |= CT2_DATA_OUT; } - cto->ct_reloff = atp->bytes_xfered; - cto->rsp.m0.ct_xfrlen = cso->dxfer_len; + /* - * Don't overrun the limits placed on us + * Don't overrun the limits placed on us, but record it as + * if we had so that we can set an overflow bit later. */ - if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) { - cso->dxfer_len = atp->orig_datalen - atp->bytes_xfered; + atp->last_xframt = xfrlen; + if (atp->bytes_xfered + xfrlen > atp->orig_datalen) { + resid = 1; + xfrlen = atp->orig_datalen - atp->bytes_xfered; } - if ((ccb->ccb_h.flags & CAM_SEND_STATUS) != 0) { - cto->ct_flags |= CT2_SENDSTATUS; - cto->rsp.m0.ct_scsi_status = cso->scsi_status; - cto->ct_resid = atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_len); - if (cto->ct_resid < 0) { - cto->rsp.m0.ct_scsi_status |= CT2_DATA_OVER; - } else if (cto->ct_resid > 0) { - cto->rsp.m0.ct_scsi_status |= CT2_DATA_UNDER; + cto->ct_reloff = atp->bytes_xfered; + cto->rsp.m0.ct_xfrlen = xfrlen; + + if (sendstatus) { + if (cso->scsi_status == SCSI_STATUS_OK && resid == 0 && fctape == 0) { + cto->ct_flags |= CT2_SENDSTATUS; + atp->state = ATPD_STATE_LAST_CTIO; + } else { + atp->sendst = 1; /* send status later */ + cto->ct_header.rqs_seqno = 0; + atp->state = ATPD_STATE_CTIO; } } else { - atp->last_xframt = cso->dxfer_len; + atp->state = ATPD_STATE_CTIO; } - /* - * If we're sending data and status back together, - * we can't also send back sense data as well. - */ - ccb->ccb_h.flags &= ~CAM_SEND_SENSE; - } - - if (cto->ct_flags & CT2_SENDSTATUS) { - int lvl = (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0; - cto->ct_flags |= CT2_CCINCR; - atp->state = ATPD_STATE_LAST_CTIO; - ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO2[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid, - atp->cdb0, cto->rsp.m0.ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered); - } else { - cto->ct_resid = 0; - atp->state = ATPD_STATE_CTIO; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO2[%x] flags %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags, - cso->dxfer_len, atp->bytes_xfered); } - cto->ct_timeout = 10; + isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u", __func__, cto->ct_rxid, + atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered); } else { ct_entry_t *cto = (ct_entry_t *) local; @@ -1754,9 +1984,9 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) cto->ct_iid |= XS_CHANNEL(ccb) << 7; cto->ct_tgt = ccb->ccb_h.target_id; cto->ct_lun = ccb->ccb_h.target_lun; - cto->ct_fwhandle = cso->tag_id >> 16; - if (AT_HAS_TAG(cso->tag_id)) { - cto->ct_tag_val = cso->tag_id; + cto->ct_fwhandle = cso->tag_id; + if (atp->rxid) { + cto->ct_tag_val = atp->rxid; cto->ct_flags |= CT_TQAE; } if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) { @@ -1773,7 +2003,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) cto->ct_flags |= CT_SENDSTATUS|CT_CCINCR; cto->ct_scsi_status = cso->scsi_status; cto->ct_resid = cso->resid; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO[%x] scsi status %x resid %d tag_id %x\n", __func__, + isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] scsi status %x resid %d tag_id %x", __func__, cto->ct_fwhandle, cso->scsi_status, cso->resid, cso->tag_id); } ccb->ccb_h.flags &= ~CAM_SEND_SENSE; @@ -1781,12 +2011,10 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) } if (isp_allocate_xs_tgt(isp, ccb, &handle)) { - xpt_print(ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__); - ccb->ccb_h.status = CAM_REQUEUE_REQ; - goto out; + ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__); + goto restart_delay; } - /* * Call the dma setup routines for this entry (and any subsequent * CTIOs) if there's data to move, and then tell the f/w it's got @@ -1810,16 +2038,25 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) dmaresult = ISP_DMASETUP(isp, cso, (ispreq_t *) local); if (dmaresult == CMD_QUEUED) { isp->isp_nactive++; - ccb->ccb_h.status |= CAM_SIM_QUEUED; + if (xfrlen) { + ccb->ccb_h.spriv_field0 = atp->bytes_xfered; + } else { + ccb->ccb_h.spriv_field0 = ~0; + } + ccb->ccb_h.status = CAM_REQ_INPROG | CAM_SIM_QUEUED; + atp->ctcnt++; rls_lun_statep(isp, tptr); return; } - if (dmaresult == CMD_EAGAIN) { - ccb->ccb_h.status = CAM_REQUEUE_REQ; - } else { + isp_destroy_tgt_handle(isp, handle); + if (dmaresult != CMD_EAGAIN) { ccb->ccb_h.status = CAM_REQ_CMP_ERR; + goto out; } - isp_destroy_tgt_handle(isp, handle); +restart_delay: + cam_freeze_devq(ccb->ccb_h.path); + cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); + ccb->ccb_h.status = CAM_REQUEUE_REQ; out: rls_lun_statep(isp, tptr); isp_free_pcmd(isp, ccb); @@ -1837,6 +2074,21 @@ isp_refire_putback_atio(void *arg) } static void +isp_refire_notify_ack(void *arg) +{ + isp_tna_t *tp = arg; + ispsoftc_t *isp = tp->isp; + ISP_LOCK(isp); + if (isp_notify_ack(isp, tp->not)) { + (void) timeout(isp_refire_notify_ack, tp, 5); + } else { + free(tp, M_DEVBUF); + } + ISP_UNLOCK(isp); +} + + +static void isp_target_putback_atio(union ccb *ccb) { ispsoftc_t *isp; @@ -1889,12 +2141,10 @@ isp_target_putback_atio(union ccb *ccb) static void isp_complete_ctio(union ccb *ccb) { - if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) { - ccb->ccb_h.status |= CAM_REQ_CMP; + if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_INPROG) { + ccb->ccb_h.status &= ~CAM_SIM_QUEUED; + xpt_done(ccb); } - ccb->ccb_h.status &= ~CAM_SIM_QUEUED; - isp_free_pcmd(XS_ISP(ccb), ccb); - xpt_done(ccb); } /* @@ -1975,14 +2225,12 @@ isp_handle_platform_atio(ispsoftc_t *isp, at_entry_t *aep) rls_lun_statep(isp, tptr); return; } - atp->tag = aep->at_tag_val; - if (atp->tag == 0) { - atp->tag = ~0; - } + atp->tag = aep->at_handle; + atp->rxid = aep->at_tag_val; atp->state = ATPD_STATE_ATIO; SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); tptr->atio_count--; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count); atiop->ccb_h.target_id = aep->at_tgt; atiop->ccb_h.target_lun = aep->at_lun; if (aep->at_flags & AT_NODISC) { @@ -2022,7 +2270,7 @@ isp_handle_platform_atio(ispsoftc_t *isp, at_entry_t *aep) atp->cdb0 = atiop->cdb_io.cdb_bytes[0]; atp->tattr = aep->at_tag_type; atp->state = ATPD_STATE_CAM; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO[%x] CDB=0x%x lun %d\n", aep->at_tag_val, atp->cdb0, atp->lun); + isp_prt(isp, ISP_LOGTDEBUG0, "ATIO[0x%x] CDB=0x%x lun %d", aep->at_tag_val, atp->cdb0, atp->lun); rls_lun_statep(isp, tptr); } @@ -2063,8 +2311,12 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) if (tptr == NULL) { tptr = get_lun_statep(isp, 0, CAM_LUN_WILDCARD); if (tptr == NULL) { - isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d", aep->at_rxid, lun); - isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); + isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wildcard", __func__, aep->at_rxid, lun); + if (lun == 0) { + isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0); + } else { + isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); + } return; } } @@ -2112,7 +2364,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) atp->state = ATPD_STATE_ATIO; SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); tptr->atio_count--; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count); + isp_prt(isp, ISP_LOGTDEBUG2, "Take FREE ATIO count now %d", tptr->atio_count); atiop->ccb_h.target_id = FCPARAM(isp, 0)->isp_loopid; atiop->ccb_h.target_lun = lun; @@ -2146,7 +2398,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) if (isp_find_pdb_by_wwn(isp, 0, iid, &lp)) { isp_del_wwn_entry(isp, 0, iid, lp->handle, lp->portid); } - isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY); + isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY, 0); } atiop->cdb_len = ATIO2_CDBLEN; ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, ATIO2_CDBLEN); @@ -2183,7 +2435,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) atp->tattr = aep->at_taskflags & ATIO2_TC_ATTR_MASK; atp->state = ATPD_STATE_CAM; xpt_done((union ccb *)atiop); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO2[%x] CDB=0x%x lun %d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen); + isp_prt(isp, ISP_LOGTDEBUG0, "ATIO2[0x%x] CDB=0x%x lun %d datalen %u", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen); rls_lun_statep(isp, tptr); return; noresrc: @@ -2281,8 +2533,12 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) if (tptr == NULL) { tptr = get_lun_statep(isp, chan, CAM_LUN_WILDCARD); if (tptr == NULL) { - isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d or wildcard", aep->at_rxid, lun); - isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); + isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wildcard", __func__, aep->at_rxid, lun); + if (lun == 0) { + isp_endcmd(isp, aep, nphdl, SCSI_STATUS_BUSY, 0); + } else { + isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0); + } return; } } @@ -2344,18 +2600,19 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) } oatp = isp_get_atpd(isp, tptr, aep->at_rxid); if (oatp) { - isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platforms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d\n", + isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platforms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d", aep->at_rxid, nphdl, sid, aep->at_hdr.ox_id, oatp->state); /* * It's not a "no resource" condition- but we can treat it like one */ goto noresrc; } + atp->word3 = lp->prli_word3; atp->tag = aep->at_rxid; atp->state = ATPD_STATE_ATIO; SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle); tptr->atio_count--; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count); atiop->init_id = nphdl; atiop->ccb_h.target_id = FCPARAM(isp, chan)->isp_loopid; atiop->ccb_h.target_lun = lun; @@ -2400,7 +2657,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep) atp->cdb0 = atiop->cdb_io.cdb_bytes[0]; atp->tattr = aep->at_cmnd.fcp_cmnd_task_attribute & FCP_CMND_TASK_ATTR_MASK; atp->state = ATPD_STATE_CAM; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO7[%x] CDB=0x%x lun %d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen); + isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=0x%x lun %d datalen %u", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen); xpt_done((union ccb *)atiop); rls_lun_statep(isp, tptr); return; @@ -2420,15 +2677,157 @@ noresrc: rls_lun_statep(isp, tptr); } + +/* + * Handle starting an SRR (sequence retransmit request) + * We get here when we've gotten the immediate notify + * and the return of all outstanding CTIOs for this + * transaction. + */ +static void +isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp) +{ + in_fcentry_24xx_t *inot; + uint32_t srr_off, ccb_off, ccb_len, ccb_end; + union ccb *ccb; + + inot = (in_fcentry_24xx_t *)atp->srr; + srr_off = inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16); + ccb = atp->srr_ccb; + atp->srr_ccb = NULL; + atp->nsrr++; + if (ccb == NULL) { + isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] null ccb", atp->tag); + goto fail; + } + + ccb_off = ccb->ccb_h.spriv_field0; + ccb_len = ccb->csio.dxfer_len; + ccb_end = (ccb_off == ~0)? ~0 : ccb_off + ccb_len; + + switch (inot->in_srr_iu) { + case R_CTL_INFO_SOLICITED_DATA: + /* + * We have to restart a FCP_DATA data out transaction + */ + atp->sendst = 0; + atp->last_xframt = 0; + atp->bytes_xfered = srr_off; + if (ccb_len == 0) { + isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x but current CCB doesn't transfer data", atp->tag, srr_off); + goto mdp; + } + if (srr_off < ccb_off || ccb_off > srr_off + ccb_len) { + isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x not covered by current CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end); + goto mdp; + } + isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x covered by current CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end); + break; + case R_CTL_INFO_COMMAND_STATUS: + isp_prt(isp, ISP_LOGTINFO, "SRR[0x%08x] Got an FCP RSP SRR- resending status", atp->tag); + atp->sendst = 1; + /* + * We have to restart a FCP_RSP IU transaction + */ + break; + case R_CTL_INFO_DATA_DESCRIPTOR: + /* + * We have to restart an FCP DATA in transaction + */ + isp_prt(isp, ISP_LOGWARN, "Got an FCP DATA IN SRR- dropping"); + goto fail; + + default: + isp_prt(isp, ISP_LOGWARN, "Got an unknown information (%x) SRR- dropping", inot->in_srr_iu); + goto fail; + } + + /* + * We can't do anything until this is acked, so we might as well start it now. + * We aren't going to do the usual asynchronous ack issue because we need + * to make sure this gets on the wire first. + */ + if (isp_notify_ack(isp, inot)) { + isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose"); + goto fail; + } + isp_target_start_ctio(isp, ccb, FROM_SRR); + return; +fail: + inot->in_reserved = 1; + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + ccb->ccb_h.status &= ~CAM_STATUS_MASK; + ccb->ccb_h.status |= CAM_REQ_CMP_ERR; + isp_complete_ctio(ccb); + return; +mdp: + if (isp_notify_ack(isp, inot)) { + isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose"); + goto fail; + } + ccb->ccb_h.status &= ~CAM_STATUS_MASK; + ccb->ccb_h.status = CAM_MESSAGE_RECV; + /* + * This is not a strict interpretation of MDP, but it's close + */ + ccb->csio.msg_ptr = &ccb->csio.sense_data.sense_buf[SSD_FULL_SIZE - 16]; + ccb->csio.msg_len = 7; + ccb->csio.msg_ptr[0] = MSG_EXTENDED; + ccb->csio.msg_ptr[1] = 5; + ccb->csio.msg_ptr[2] = 0; /* modify data pointer */ + ccb->csio.msg_ptr[3] = srr_off >> 24; + ccb->csio.msg_ptr[4] = srr_off >> 16; + ccb->csio.msg_ptr[5] = srr_off >> 8; + ccb->csio.msg_ptr[6] = srr_off; + isp_complete_ctio(ccb); +} + + +static void +isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw) +{ + tstate_t *tptr; + in_fcentry_24xx_t *inot = inot_raw; + atio_private_data_t *atp; + uint32_t tag = inot->in_rxid; + uint32_t bus = inot->in_vpidx; + + if (!IS_24XX(isp)) { + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_raw); + return; + } + + tptr = get_lun_statep_from_tag(isp, bus, tag); + if (tptr == NULL) { + isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x in SRR Notify", __func__, tag); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + return; + } + atp = isp_get_atpd(isp, tptr, tag); + if (atp == NULL) { + rls_lun_statep(isp, tptr); + isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify", __func__, tag); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); + return; + } + atp->srr_notify_rcvd = 1; + memcpy(atp->srr, inot, sizeof (atp->srr)); + isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%08x] inot->in_rxid flags 0x%x srr_iu=%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->in_srr_iu, + inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16)); + if (atp->srr_ccb) + isp_handle_srr_start(isp, tptr, atp); + rls_lun_statep(isp, tptr); +} + static void isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) { union ccb *ccb; - int sentstatus, ok, notify_cam, resid = 0; + int sentstatus = 0, ok = 0, notify_cam = 0, resid = 0, moved_data = 0, failure = 0; tstate_t *tptr = NULL; atio_private_data_t *atp = NULL; int bus; - uint32_t tval, handle; + uint32_t handle; /* * CTIO handles are 16 bits. @@ -2446,147 +2845,155 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg) return; } isp_destroy_tgt_handle(isp, handle); + isp_free_pcmd(isp, ccb); + if (isp->isp_nactive) { + isp->isp_nactive--; + } + bus = XS_CHANNEL(ccb); tptr = get_lun_statep(isp, bus, XS_LUN(ccb)); if (tptr == NULL) { tptr = get_lun_statep(isp, bus, CAM_LUN_WILDCARD); } - KASSERT((tptr != NULL), ("cannot get state pointer")); - if (isp->isp_nactive) { - isp->isp_nactive++; + if (tptr == NULL) { + isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x after I/O", __func__, ccb->csio.tag_id); + return; } + + if (IS_24XX(isp)) { + atp = isp_get_atpd(isp, tptr, ((ct7_entry_t *)arg)->ct_rxid); + } else if (IS_FC(isp)) { + atp = isp_get_atpd(isp, tptr, ((ct2_entry_t *)arg)->ct_rxid); + } else { + atp = isp_get_atpd(isp, tptr, ((ct_entry_t *)arg)->ct_fwhandle); + } + if (atp == NULL) { + rls_lun_statep(isp, tptr); + isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ccb->csio.tag_id); + return; + } + KASSERT((atp->ctcnt > 0), ("ctio count not greater than zero")); + atp->ctcnt -= 1; + ccb->ccb_h.status &= ~CAM_STATUS_MASK; + if (IS_24XX(isp)) { ct7_entry_t *ct = arg; - atp = isp_get_atpd(isp, tptr, ct->ct_rxid); - if (atp == NULL) { + if (ct->ct_nphdl == CT7_SRR) { + atp->srr_ccb = ccb; + if (atp->srr_notify_rcvd) + isp_handle_srr_start(isp, tptr, atp); rls_lun_statep(isp, tptr); - isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ct->ct_rxid); return; } - - sentstatus = ct->ct_flags & CT7_SENDSTATUS; - ok = (ct->ct_nphdl == CT7_OK); - if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) { - ccb->ccb_h.status |= CAM_SENT_SENSE; - } - notify_cam = ct->ct_header.rqs_seqno & 0x1; - if ((ct->ct_flags & CT7_DATAMASK) != CT7_NO_DATA) { - resid = ct->ct_resid; - atp->bytes_xfered += (atp->last_xframt - resid); - atp->last_xframt = 0; - } if (ct->ct_nphdl == CT_HBA_RESET) { - ok = 0; - notify_cam = 1; - sentstatus = 1; - ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; - } else if (!ok) { - ccb->ccb_h.status |= CAM_REQ_CMP_ERR; + failure = CAM_UNREC_HBA_ERROR; + } else { + sentstatus = ct->ct_flags & CT7_SENDSTATUS; + ok = (ct->ct_nphdl == CT7_OK); + notify_cam = ct->ct_header.rqs_seqno & 0x1; + if ((ct->ct_flags & CT7_DATAMASK) != CT7_NO_DATA) { + resid = ct->ct_resid; + moved_data = 1; + } } - tval = atp->tag; isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentstatus? "FIN" : "MID"); - atp->state = ATPD_STATE_PDON; /* XXX: should really come after isp_complete_ctio */ } else if (IS_FC(isp)) { ct2_entry_t *ct = arg; - - atp = isp_get_atpd(isp, tptr, ct->ct_rxid); - if (atp == NULL) { + if (ct->ct_status == CT_SRR) { + atp->srr_ccb = ccb; + if (atp->srr_notify_rcvd) + isp_handle_srr_start(isp, tptr, atp); rls_lun_statep(isp, tptr); - isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ct->ct_rxid); + isp_target_putback_atio(ccb); return; } - sentstatus = ct->ct_flags & CT2_SENDSTATUS; - ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK; - if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) { - ccb->ccb_h.status |= CAM_SENT_SENSE; - } - notify_cam = ct->ct_header.rqs_seqno & 0x1; - if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) { - resid = ct->ct_resid; - atp->bytes_xfered += (atp->last_xframt - resid); - atp->last_xframt = 0; - } if (ct->ct_status == CT_HBA_RESET) { - ok = 0; - notify_cam = 1; - sentstatus = 1; - ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; - } else if (!ok) { - ccb->ccb_h.status |= CAM_REQ_CMP_ERR; + failure = CAM_UNREC_HBA_ERROR; + } else { + sentstatus = ct->ct_flags & CT2_SENDSTATUS; + ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK; + notify_cam = ct->ct_header.rqs_seqno & 0x1; + if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) { + resid = ct->ct_resid; + moved_data = 1; + } } isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentstatus? "FIN" : "MID"); - tval = atp->tag; - atp->state = ATPD_STATE_PDON; /* XXX: should really come after isp_complete_ctio */ } else { ct_entry_t *ct = arg; - sentstatus = ct->ct_flags & CT_SENDSTATUS; - ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK; - /* - * We *ought* to be able to get back to the original ATIO - * here, but for some reason this gets lost. It's just as - * well because it's squirrelled away as part of periph - * private data. - * - * We can live without it as long as we continue to use - * the auto-replenish feature for CTIOs. - */ - notify_cam = ct->ct_header.rqs_seqno & 0x1; + if (ct->ct_status == (CT_HBA_RESET & 0xff)) { - ok = 0; - notify_cam = 1; - sentstatus = 1; - ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; - } else if (!ok) { - ccb->ccb_h.status |= CAM_REQ_CMP_ERR; - } else if (ct->ct_status & QLTM_SVALID) { - char *sp = (char *)ct; - sp += CTIO_SENSE_OFFSET; - ccb->csio.sense_len = min(sizeof (ccb->csio.sense_data), QLTM_SENSELEN); - ISP_MEMCPY(&ccb->csio.sense_data, sp, ccb->csio.sense_len); - ccb->ccb_h.status |= CAM_AUTOSNS_VALID; + failure = CAM_UNREC_HBA_ERROR; + } else { + sentstatus = ct->ct_flags & CT_SENDSTATUS; + ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK; + notify_cam = ct->ct_header.rqs_seqno & 0x1; } if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) { resid = ct->ct_resid; + moved_data = 1; } isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] tag %x S_ID 0x%x lun %d sts %x flg %x resid %d %s", __func__, ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_status, ct->ct_flags, resid, sentstatus? "FIN" : "MID"); - tval = ct->ct_fwhandle; } - ccb->csio.resid += resid; + if (ok) { + if (moved_data) { + ccb->csio.resid += resid; + atp->bytes_xfered += (atp->last_xframt - resid); + atp->last_xframt = 0; + } + if (sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) { + ccb->ccb_h.status |= CAM_SENT_SENSE; + } + ccb->ccb_h.status |= CAM_REQ_CMP; + } else { + notify_cam = 1; + if (failure == CAM_UNREC_HBA_ERROR) + ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; + else + ccb->ccb_h.status |= CAM_REQ_CMP_ERR; + } + atp->state = ATPD_STATE_PDON; + rls_lun_statep(isp, tptr); /* - * We're here either because intermediate data transfers are done - * and/or the final status CTIO (which may have joined with a - * Data Transfer) is done. - * - * In any case, for this platform, the upper layers figure out - * what to do next, so all we do here is collect status and - * pass information along. Any DMA handles have already been - * freed. + * We never *not* notify CAM when there has been any error (ok == 0), + * so we never need to do an ATIO putback if we're not notifying CAM. */ + isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done (notify_cam=%d nowsendstatus=%d)", (sentstatus)? " FINAL " : "MIDTERM ", atp->tag, notify_cam, atp->sendst); if (notify_cam == 0) { - isp_prt(isp, ISP_LOGTDEBUG0, " INTER CTIO[0x%x] done", tval); + if (atp->sendst) { + isp_target_start_ctio(isp, ccb, FROM_CTIO_DONE); + } return; } - if (tptr) { - rls_lun_statep(isp, tptr); - } - isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done", (sentstatus)? " FINAL " : "MIDTERM ", tval); - if (!ok && !IS_24XX(isp)) { - isp_target_putback_atio(ccb); - } else { + /* + * We're telling CAM we're done with this CTIO transaction. + * + * 24XX cards never need an ATIO put back. + * + * Other cards need one put back only on error. + * In the latter case, a timeout will re-fire + * and try again in case we didn't have + * queue resources to do so at first. In any case, + * once the putback is done we do the completion + * call. + */ + if (ok || IS_24XX(isp)) { isp_complete_ctio(ccb); + } else { + isp_target_putback_atio(ccb); } } static void isp_handle_platform_notify_scsi(ispsoftc_t *isp, in_entry_t *inot) { - (void) isp_notify_ack(isp, inot); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); } static void @@ -2649,9 +3056,9 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp) if (inot) { tptr->inot_count--; SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); } else { - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "out of INOT structures\n"); + ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "out of INOT structures\n"); } } else { ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "abort task RX_ID %x from wwn 0x%016llx, state unknown\n", inp->in_seqid, wwn); @@ -2680,7 +3087,7 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp) break; } if (needack) { - (void) isp_notify_ack(isp, inp); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp); } } @@ -2688,6 +3095,7 @@ static void isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) { uint16_t nphdl; + uint16_t prli_options = 0; uint32_t portid; fcportdb_t *lp; uint8_t *ptr = NULL; @@ -2737,10 +3145,12 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) /* * Treat PRLI the same as PLOGI and make a database entry for it. */ - if (inot->in_status_subcode == PLOGI) + if (inot->in_status_subcode == PLOGI) { msg = "PLOGI"; - else + } else { + prli_options = inot->in_prli_options; msg = "PRLI"; + } if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) { ptr = (uint8_t *)inot; /* point to unswizzled entry! */ wwn = (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF]) << 56) | @@ -2754,7 +3164,7 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) } else { wwn = INI_NONE; } - isp_add_wwn_entry(isp, chan, wwn, nphdl, portid); + isp_add_wwn_entry(isp, chan, wwn, nphdl, portid, prli_options); break; case PDISC: msg = "PDISC"; @@ -2773,7 +3183,7 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) } isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x PortID 0x%06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, portid, inot->in_rxid, inot->in_oxid); - (void) isp_notify_ack(isp, inot); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); break; } @@ -2800,14 +3210,30 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot) * this initiator (known by N-port handle). */ /* XXX IMPLEMENT XXX */ - (void) isp_notify_ack(isp, inot); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); break; + case IN24XX_SRR_RCVD: +#ifdef ISP_TARGET_MODE + isp_handle_srr_notify(isp, inot); + break; +#else + if (ptr == NULL) { + ptr = "SRR RCVD"; + } + /* FALLTHROUGH */ +#endif case IN24XX_LINK_RESET: + if (ptr == NULL) { + ptr = "LINK RESET"; + } case IN24XX_LINK_FAILED: - case IN24XX_SRR_RCVD: + if (ptr == NULL) { + ptr = "LINK FAILED"; + } default: - (void) isp_notify_ack(isp, inot); + isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpidx), ptr); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot); break; } } @@ -2905,6 +3331,9 @@ isp_handle_platform_target_notify_ack(ispsoftc_t *isp, isp_notify_t *mp) */ if (mp->nt_need_ack) { isp_prt(isp, ISP_LOGTINFO, "Notify Code 0x%x (qevalid=%d) being acked", mp->nt_ncode, mp->nt_lreserved != NULL); + /* + * Don't need to use the guaranteed send because the caller can retry + */ return (isp_notify_ack(isp, mp->nt_lreserved)); } return (0); @@ -3003,7 +3432,7 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify) tptr->inot_count--; SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle); rls_lun_statep(isp, tptr); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count); inot->ccb_h.status = CAM_MESSAGE_RECV; xpt_done((union ccb *)inot); return; @@ -3013,9 +3442,11 @@ bad: } if (notify->nt_need_ack && notify->nt_lreserved) { if (((isphdr_t *)notify->nt_lreserved)->rqs_entry_type == RQSTYPE_ABTS_RCVD) { - (void) isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM); + if (isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM)) { + isp_prt(isp, ISP_LOGWARN, "you lose- unable to send an ACKNAK"); + } } else { - (void) isp_notify_ack(isp, notify->nt_lreserved); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, notify->nt_lreserved); } } } @@ -3182,7 +3613,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) 'O', 'R', 'Y', ' ', 'D', 'I', 'S', 'K', '0', '0', '0', '1' }; - int i, more = 0, last; + int r, i, more = 0, last; struct isptarg_softc *softc = periph->softc; struct ccb_scsiio *csio; lun_id_t return_lun; @@ -3193,7 +3624,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) struct ccb_hdr *ccbh; mtx_assert(periph->sim->mtx, MA_OWNED); - ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: function code 0x%x INOTQ=%c WORKQ=%c REWORKQ=%c\n", __func__, iccb->ccb_h.func_code, + ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, iccb->ccb_h.path, "%s: function code 0x%x INOTQ=%c WORKQ=%c REWORKQ=%c\n", __func__, iccb->ccb_h.func_code, TAILQ_FIRST(&softc->inot_queue)? 'y' : 'n', TAILQ_FIRST(&softc->work_queue)? 'y' : 'n', TAILQ_FIRST(&softc->rework_queue)? 'y' : 'n'); /* * Check for immediate notifies first @@ -3219,7 +3650,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) } else { ccbh = TAILQ_FIRST(&softc->work_queue); if (ccbh == NULL) { - ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: woken up but no work?\n", __func__); + ISP_PATH_PRT(softc->isp, ISP_LOGWARN, iccb->ccb_h.path, "%s: woken up but no work?\n", __func__); xpt_release_ccb(iccb); return; } @@ -3240,7 +3671,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) flags = CAM_SEND_STATUS; memset(&atio->sense_data, 0, sizeof (atio->sense_data)); cdb = atio->cdb_io.cdb_bytes; - ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processing ATIO from 0x%x CDB=0x%x data_offset=%u\n", __func__, atio->tag_id, atio->init_id, + ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, ccbh->path, "%s: [0x%x] processing ATIO from 0x%x CDB=0x%x data_offset=%u\n", __func__, atio->tag_id, atio->init_id, cdb[0], atio->ccb_h.ccb_data_offset); return_lun = XS_LUN(atio); @@ -3248,9 +3679,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) xpt_print(atio->ccb_h.path, "[0x%x] Non-Zero Lun %d: cdb0=0x%x\n", atio->tag_id, return_lun, cdb[0]); if (cdb[0] != INQUIRY && cdb[0] != REPORT_LUNS && cdb[0] != REQUEST_SENSE) { status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_ILLEGAL_REQUEST; - SDFIXED(atio->sense_data)->add_sense_code = 0x25; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x0; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST; + SDFIXED(atio->sense_data)->add_sense_code = 0x25; /* LOGICAL UNIT NOT SUPPORTED */ atio->sense_len = SSD_MIN_SIZE; } return_lun = CAM_LUN_WILDCARD; @@ -3273,11 +3704,16 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) case READ_10: case READ_12: case READ_16: - if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last)) { + r = isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last); + if (r != 0) { status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x5; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST; + if (r == -1) { + SDFIXED(atio->sense_data)->add_sense_code = 0x21; /* LOGICAL BLOCK ADDRESS OUT OF RANGE */ + } else { + SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */ + } atio->sense_len = SSD_MIN_SIZE; } else { #ifdef ISP_FORCE_TIMEOUT @@ -3312,11 +3748,16 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) case WRITE_10: case WRITE_12: case WRITE_16: - if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last)) { + r = isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last); + if (r != 0) { status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x5; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST; + if (r == -1) { + SDFIXED(atio->sense_data)->add_sense_code = 0x21; /* LOGICAL BLOCK ADDRESS OUT OF RANGE */ + } else { + SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */ + } atio->sense_len = SSD_MIN_SIZE; } else { #ifdef ISP_FORCE_TIMEOUT @@ -3351,9 +3792,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) flags |= CAM_DIR_IN; if (cdb[1] || cdb[2] || cdb[3]) { status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x5; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x20; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION; + SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */ atio->sense_len = SSD_MIN_SIZE; break; } @@ -3375,9 +3816,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) if (ca) { ca = 0; status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x28; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x0; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION; + SDFIXED(atio->sense_data)->add_sense_code = 0x29; /* POWER ON, RESET, OR BUS DEVICE RESET OCCURRED */ atio->sense_len = SSD_MIN_SIZE; } break; @@ -3393,9 +3834,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) flags |= CAM_DIR_IN; if (cdb[2] || cdb[3] || cdb[4] || cdb[5]) { status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x5; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST; + SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */ atio->sense_len = SSD_MIN_SIZE; break; } @@ -3447,9 +3888,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb) default: flags |= CAM_DIR_NONE; status = SCSI_STATUS_CHECK_COND; - SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION; - SDFIXED(atio->sense_data)->add_sense_code = 0x5; - SDFIXED(atio->sense_data)->add_sense_code_qual = 0x20; + SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR; + SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST; + SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */ atio->sense_len = SSD_MIN_SIZE; break; } @@ -3492,7 +3933,7 @@ isptargctor(struct cam_periph *periph, void *arg) periph->softc = softc; softc->periph = periph; softc->path = periph->path; - ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __func__); + ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__); return (CAM_REQ_CMP); } @@ -3501,7 +3942,7 @@ isptargdtor(struct cam_periph *periph) { struct isptarg_softc *softc; softc = (struct isptarg_softc *)periph->softc; - ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __func__); + ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__); softc->periph = NULL; softc->path = NULL; periph->softc = NULL; @@ -3523,13 +3964,13 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb) switch (ccb->ccb_h.func_code) { case XPT_ACCEPT_TARGET_IO: atio = (struct ccb_accept_tio *) ccb; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __func__); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __func__); TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe); xpt_schedule(periph, 1); break; case XPT_IMMEDIATE_NOTIFY: inot = (struct ccb_immediate_notify *) ccb; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_id, inot->seq_id, __func__); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_id, inot->seq_id, __func__); TAILQ_INSERT_TAIL(&softc->inot_queue, &ccb->ccb_h, periph_links.tqe); xpt_schedule(periph, 1); break; @@ -3540,8 +3981,16 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb) } atio = ccb->ccb_h.ccb_atio; if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { - cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL); - xpt_action((union ccb *)atio); + if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_MESSAGE_RECV) { + uint32_t newoff = (ccb->csio.msg_ptr[3] << 24) | (ccb->csio.msg_ptr[4] << 16) | (ccb->csio.msg_ptr[5] << 8) | (ccb->csio.msg_ptr[6]); + ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "[0x%08x] got message to return to reset offset to 0x%x\n", atio->tag_id, newoff); + atio->ccb_h.ccb_data_offset = newoff; + TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe); + xpt_schedule(periph, 1); + } else { + cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL); + xpt_action((union ccb *)atio); + } } else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) { ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO seen in %s\n", atio->tag_id, __func__); TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe); @@ -3558,7 +4007,7 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb) ccb->ccb_h.status &= ~CAM_DEV_QFRZN; } inot = ccb->ccb_h.ccb_inot; - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "[0x%x] recycle notify for tag 0x%x\n", inot->tag_id, inot->seq_id); + ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, inot->ccb_h.path, "[0x%x] recycle notify for tag 0x%x\n", inot->tag_id, inot->seq_id); xpt_release_ccb(ccb); xpt_action((union ccb *)inot); break; @@ -3890,7 +4339,7 @@ isptarg_rwparm(uint8_t *cdb, uint8_t *dp, uint64_t dl, uint32_t offset, uint8_t } if (lba + cnt > dl) { - return (-1); + return (-2); } @@ -3976,14 +4425,6 @@ isp_watchdog(void *arg) handle = isp_find_handle(isp, xs); - if (handle != ISP_HANDLE_FREE && !XS_CMD_WPEND_P(xs)) { - isp_xs_prt(isp, xs, ISP_LOGWARN, "first watchdog (handle 0x%x) timed out- deferring for grace period", handle); - callout_reset(&PISP_PCMD(xs)->wdog, 2 * hz, isp_watchdog, xs); - XS_CMD_S_WPEND(xs); - return; - } - XS_C_TACTIVE(xs); - /* * Hand crank the interrupt code just to be sure the command isn't stuck somewhere. */ @@ -4031,7 +4472,8 @@ isp_watchdog(void *arg) } isp_destroy_handle(isp, handle); isp_prt(isp, ISP_LOGERR, "%s: timeout for handle 0x%x", __func__, handle); - XS_SETERR(xs, CAM_CMD_TIMEOUT); + xs->ccb_h.status &= ~CAM_STATUS_MASK; + xs->ccb_h.status |= CAM_CMD_TIMEOUT; isp_prt_endcmd(isp, xs); isp_done(xs); } else { @@ -4122,7 +4564,7 @@ isp_gdt_task(void *arg, int pending) continue; } if (lp->gone_timer != 0) { - isp_prt(isp, ISP_LOGSANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer); + isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer); lp->gone_timer -= 1; more_to_do++; continue; @@ -4139,7 +4581,7 @@ isp_gdt_task(void *arg, int pending) callout_reset(&fc->gdt, hz, isp_gdt, fc); } else { callout_deactivate(&fc->gdt); - isp_prt(isp, ISP_LOGSANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime); + isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime); } } ISP_UNLOCK(isp); @@ -4171,7 +4613,7 @@ isp_ldt_task(void *arg, int pending) int dbidx, tgt, i; ISP_LOCK(isp); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime); callout_deactivate(&fc->ldt); /* @@ -4190,7 +4632,7 @@ isp_ldt_task(void *arg, int pending) /* * XXX: CLEAN UP AND COMPLETE ANY PENDING COMMANDS FIRST! */ - + for (i = 0; i < isp->isp_maxcmds; i++) { struct ccb_scsiio *xs; @@ -4211,7 +4653,7 @@ isp_ldt_task(void *arg, int pending) /* * Mark that we've announced that this device is gone.... */ - lp->reserved = 1; + lp->announced = 1; /* * but *don't* change the state of the entry. Just clear @@ -4254,7 +4696,7 @@ isp_kthread(void *arg) for (;;) { int lb, lim; - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state", __func__, chan); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state", __func__, chan); lb = isp_fc_runstate(isp, chan, 250000); /* @@ -4272,9 +4714,9 @@ isp_kthread(void *arg) fc->loop_down_time += slp; if (lb < 0) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up (down count %d)", __func__, chan, fc->loop_down_time); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up (down count %d)", __func__, chan, fc->loop_down_time); } else { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (down count %d)", __func__, chan, lb, fc->loop_down_time); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (down count %d)", __func__, chan, lb, fc->loop_down_time); } /* @@ -4304,11 +4746,14 @@ isp_kthread(void *arg) } } else if (lb) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", __func__, chan); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", __func__, chan); fc->loop_down_time += slp; - slp = 60; + if (fc->loop_down_time > 300) + slp = 0; + else + slp = 60; } else { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __func__, chan); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __func__, chan); fc->loop_down_time = 0; slp = 0; } @@ -4326,7 +4771,7 @@ isp_kthread(void *arg) isp_unfreeze_loopdown(isp, chan); } - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", __func__, chan, slp); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", __func__, chan, slp); msleep(fc, &isp->isp_osinfo.lock, PRIBIO, "ispf", slp * hz); @@ -4338,7 +4783,7 @@ isp_kthread(void *arg) * to settle. */ if (slp == 0 && fc->hysteresis) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis ticks %d", __func__, chan, fc->hysteresis * hz); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis ticks %d", __func__, chan, fc->hysteresis * hz); mtx_unlock(&isp->isp_osinfo.lock); pause("ispt", fc->hysteresis * hz); mtx_lock(&isp->isp_osinfo.lock); @@ -4355,7 +4800,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) struct ccb_trans_settings *cts; CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n")); - + isp = (ispsoftc_t *)cam_sim_softc(sim); mtx_assert(&isp->isp_lock, MA_OWNED); @@ -4388,6 +4833,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) break; } } + ccb->csio.req_map = NULL; #ifdef DIAGNOSTIC if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) { xpt_print(ccb->ccb_h.path, "invalid target\n"); @@ -4412,7 +4858,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb) error = isp_start((XS_T *) ccb); switch (error) { case CMD_QUEUED: - XS_CMD_S_CLEAR(ccb); ccb->ccb_h.status |= CAM_SIM_QUEUED; if (ccb->ccb_h.timeout == CAM_TIME_INFINITY) { break; @@ -4422,7 +4867,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb) ts = 60*1000; } ts = isp_mstohz(ts); - XS_S_TACTIVE(ccb); callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb); break; case CMD_RQLATER: @@ -4449,7 +4893,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(ccb)); cam_freeze_devq(ccb->ccb_h.path); cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0); - XS_SETERR(ccb, CAM_REQUEUE_REQ); + ccb->ccb_h.status = CAM_REQUEUE_REQ; isp_free_pcmd(isp, ccb); xpt_done(ccb); break; @@ -4457,7 +4901,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) isp_free_pcmd(isp, ccb); cam_freeze_devq(ccb->ccb_h.path); cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 100, 0); - XS_SETERR(ccb, CAM_REQUEUE_REQ); + ccb->ccb_h.status = CAM_REQUEUE_REQ; xpt_done(ccb); break; case CMD_COMPLETE: @@ -4465,7 +4909,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) break; default: isp_prt(isp, ISP_LOGERR, "What's this? 0x%x at %d in file %s", error, __LINE__, __FILE__); - XS_SETERR(ccb, CAM_REQ_CMP_ERR); + ccb->ccb_h.status = CAM_REQUEUE_REQ; isp_free_pcmd(isp, ccb); xpt_done(ccb); } @@ -4503,8 +4947,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb) ccb->ccb_h.status = CAM_DEV_NOT_THERE; break; } - ccb->ccb_h.sim_priv.entries[0].field = 0; - ccb->ccb_h.sim_priv.entries[1].ptr = isp; + ccb->ccb_h.spriv_field0 = 0; + ccb->ccb_h.spriv_ptr1 = isp; ccb->ccb_h.flags = 0; if (ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) { @@ -4516,7 +4960,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) } tptr->atio_count++; SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n", + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n", ccb->atio.tag_id, tptr->atio_count); } else if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) { if (ccb->cin1.tag_id) { @@ -4527,12 +4971,12 @@ isp_action(struct cam_sim *sim, union ccb *ccb) } tptr->inot_count++; SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", ccb->cin1.seq_id, tptr->inot_count); } else if (ccb->ccb_h.func_code == XPT_IMMED_NOTIFY) { tptr->inot_count++; SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); - ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", + ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", ccb->cin1.seq_id, tptr->inot_count); } rls_lun_statep(isp, tptr); @@ -4567,7 +5011,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb) rls_lun_statep(isp, tptr); cam_freeze_devq(ccb->ccb_h.path); cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0); - XS_SETERR(ccb, CAM_REQUEUE_REQ); + ccb->ccb_h.status &= ~CAM_STATUS_MASK; + ccb->ccb_h.status |= CAM_REQUEUE_REQ; break; } isp_put_ntpd(isp, tptr, ntp); @@ -4578,7 +5023,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb) break; } case XPT_CONT_TARGET_IO: - isp_target_start_ctio(isp, ccb); + isp_target_start_ctio(isp, ccb, FROM_CAM); break; #endif case XPT_RESET_DEV: /* BDR the specified SCSI device */ @@ -4874,13 +5319,24 @@ isp_action(struct cam_sim *sim, union ccb *ccb) } if (rchange) { ISP_PATH_PRT(isp, ISP_LOGCONFIG, ccb->ccb_h.path, "changing role on from %d to %d\n", fcp->role, newrole); +#ifdef ISP_TARGET_MODE + ISP_SET_PC(isp, bus, tm_enabled, 0); + ISP_SET_PC(isp, bus, tm_luns_enabled, 0); +#endif if (isp_fc_change_role(isp, bus, newrole) != 0) { ccb->ccb_h.status = CAM_REQ_CMP_ERR; + xpt_done(ccb); + break; + } #ifdef ISP_TARGET_MODE - } else if (newrole == ISP_ROLE_TARGET || newrole == ISP_ROLE_BOTH) { + if (newrole == ISP_ROLE_TARGET || newrole == ISP_ROLE_BOTH) { + /* + * Give the new role a chance to complain and settle + */ + msleep(isp, &isp->isp_lock, PRIBIO, "taking a breather", 2); ccb->ccb_h.status = isp_enable_deferred_luns(isp, bus); -#endif } +#endif } } xpt_done(ccb); @@ -5026,10 +5482,8 @@ isp_done(XS_T *sccb) xpt_print(sccb->ccb_h.path, "cam completion status 0x%x\n", sccb->ccb_h.status); } - XS_CMD_S_DONE(sccb); - if (XS_TACTIVE_P(sccb)) + if (callout_active(&PISP_PCMD(sccb)->wdog)) callout_stop(&PISP_PCMD(sccb)->wdog); - XS_CMD_S_CLEAR(sccb); isp_free_pcmd(isp, (union ccb *) sccb); xpt_done((union ccb *) sccb); } @@ -5038,8 +5492,9 @@ void isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) { int bus; - static const char prom[] = "Chan %d PortID 0x%06x handle 0x%x role %s %s WWPN 0x%08x%08x"; - static const char prom2[] = "Chan %d PortID 0x%06x handle 0x%x role %s %s tgt %u WWPN 0x%08x%08x"; + static const char prom0[] = "Chan %d PortID 0x%06x handle 0x%x %s %s WWPN 0x%08x%08x"; + static const char prom2[] = "Chan %d PortID 0x%06x handle 0x%x %s %s tgt %u WWPN 0x%08x%08x"; + char buf[64]; char *msg = NULL; target_id_t tgt; fcportdb_t *lp; @@ -5148,7 +5603,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) } if (!callout_active(&fc->ldt)) { callout_reset(&fc->ldt, fc->loop_down_limit * hz, isp_ldt, fc); - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @ %lu", (unsigned long) time_uptime); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @ %lu", (unsigned long) time_uptime); } } } @@ -5177,9 +5632,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) lp = va_arg(ap, fcportdb_t *); va_end(ap); fc = ISP_FC_PC(isp, bus); - lp->reserved = 0; + lp->announced = 0; lp->gone_timer = 0; - if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT))) { + if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & PRLI_WD3_TARGET_FUNCTION)) { int dbidx = lp - FCPARAM(isp, bus)->portdb; int i; @@ -5199,12 +5654,13 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) isp_dump_portdb(isp, bus); } } + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); if (lp->dev_map_idx) { tgt = lp->dev_map_idx - 1; - isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); + isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); isp_make_here(isp, bus, tgt); } else { - isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); + isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } break; case ISPASYNC_DEV_CHANGED: @@ -5213,7 +5669,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) lp = va_arg(ap, fcportdb_t *); va_end(ap); fc = ISP_FC_PC(isp, bus); - lp->reserved = 0; + lp->announced = 0; lp->gone_timer = 0; if (isp_change_is_bad) { lp->state = FC_PORTDB_STATE_NIL; @@ -5224,20 +5680,22 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is bad"); isp_make_gone(isp, bus, tgt); } else { - isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "changed and departed", + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); + isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed and departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } } else { lp->portid = lp->new_portid; - lp->roles = lp->new_roles; + lp->prli_word3 = lp->new_prli_word3; + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); if (lp->dev_map_idx) { int t = lp->dev_map_idx - 1; FCPARAM(isp, bus)->isp_dev_map[t] = (lp - FCPARAM(isp, bus)->portdb) + 1; tgt = lp->dev_map_idx - 1; - isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "changed at", tgt, + isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "changed at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } else { - isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); + isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } } break; @@ -5246,12 +5704,13 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) bus = va_arg(ap, int); lp = va_arg(ap, fcportdb_t *); va_end(ap); + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); if (lp->dev_map_idx) { tgt = lp->dev_map_idx - 1; - isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "stayed at", tgt, + isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "stayed at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } else { - isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "stayed", + isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "stayed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } break; @@ -5270,18 +5729,19 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) * announce that it's gone. * */ - if (lp->dev_map_idx && lp->reserved == 0) { - lp->reserved = 1; + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); + if (lp->dev_map_idx && lp->announced == 0) { + lp->announced = 1; lp->state = FC_PORTDB_STATE_ZOMBIE; lp->gone_timer = ISP_FC_PC(isp, bus)->gone_device_time; if (fc->ready && !callout_active(&fc->gdt)) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Device Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)time_uptime); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Device Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)time_uptime); callout_reset(&fc->gdt, hz, isp_gdt, fc); } tgt = lp->dev_map_idx - 1; - isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); - } else if (lp->reserved == 0) { - isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); + isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); + } else if (lp->announced == 0) { + isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn); } break; case ISPASYNC_CHANGE_NOTIFY: @@ -5315,7 +5775,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) * If the loop down timer is running, cancel it. */ if (fc->ready && callout_active(&fc->ldt)) { - isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime); + isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime); callout_stop(&fc->ldt); } isp_prt(isp, ISP_LOGINFO, msg, bus); @@ -5355,6 +5815,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) case NT_HBA_RESET: isp_del_all_wwn_entries(isp, ISP_NOCHAN); break; + case NT_GLOBAL_LOGOUT: case NT_LOGOUT: /* * This is device arrival/departure notification @@ -5396,6 +5857,29 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) } break; } + case ISPASYNC_TARGET_NOTIFY_ACK: + { + void *inot; + va_start(ap, cmd); + inot = va_arg(ap, void *); + va_end(ap); + if (isp_notify_ack(isp, inot)) { + isp_tna_t *tp = malloc(sizeof (*tp), M_DEVBUF, M_NOWAIT); + if (tp) { + tp->isp = isp; + if (inot) { + memcpy(tp->data, inot, sizeof (tp->data)); + tp->not = tp->data; + } else { + tp->not = NULL; + } + (void) timeout(isp_refire_notify_ack, tp, 5); + } else { + isp_prt(isp, ISP_LOGERR, "you lose- cannot allocate a notify refire"); + } + } + break; + } case ISPASYNC_TARGET_ACTION: { isphdr_t *hp; @@ -5628,13 +6112,13 @@ void isp_prt(ispsoftc_t *isp, int level, const char *fmt, ...) { int loc; - char lbuf[128]; + char lbuf[200]; va_list ap; if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) { return; } - sprintf(lbuf, "%s: ", device_get_nameunit(isp->isp_dev)); + snprintf(lbuf, sizeof (lbuf), "%s: ", device_get_nameunit(isp->isp_dev)); loc = strlen(lbuf); va_start(ap, fmt); vsnprintf(&lbuf[loc], sizeof (lbuf) - loc - 1, fmt, ap); @@ -5805,6 +6289,47 @@ isp_common_dmateardown(ispsoftc_t *isp, struct ccb_scsiio *csio, uint32_t hdl) bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); } +int +isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd) +{ + uint32_t chan = XS_CHANNEL(cmd); + uint32_t tgt = XS_TGT(cmd); + uint32_t lun = XS_LUN(cmd); + struct isp_fc *fc = &isp->isp_osinfo.pc.fc[chan]; + int idx = NEXUS_HASH(tgt, lun); + struct isp_nexus *nxp = fc->nexus_hash[idx]; + + while (nxp) { + if (nxp->tgt == tgt && nxp->lun == lun) + break; + nxp = nxp->next; + } + if (nxp == NULL) { + nxp = fc->nexus_free_list; + if (nxp == NULL) { + nxp = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_ZERO|M_NOWAIT); + if (nxp == NULL) { + return (-1); + } + } else { + fc->nexus_free_list = nxp->next; + } + nxp->tgt = tgt; + nxp->lun = lun; + nxp->next = fc->nexus_hash[idx]; + fc->nexus_hash[idx] = nxp; + } + if (nxp) { + if (nxp->crnseed == 0) + nxp->crnseed = 1; + if (cmd) + PISP_PCMD(cmd)->crn = nxp->crnseed; + *crnp = nxp->crnseed++; + return (0); + } + return (-1); +} + void isp_timer(void *arg) { @@ -5814,3 +6339,20 @@ isp_timer(void *arg) #endif callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp); } + +isp_ecmd_t * +isp_get_ecmd(ispsoftc_t *isp) +{ + isp_ecmd_t *ecmd = isp->isp_osinfo.ecmd_free; + if (ecmd) { + isp->isp_osinfo.ecmd_free = ecmd->next; + } + return (ecmd); +} + +void +isp_put_ecmd(ispsoftc_t *isp, isp_ecmd_t *ecmd) +{ + ecmd->next = isp->isp_osinfo.ecmd_free; + isp->isp_osinfo.ecmd_free = ecmd; +} diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h index 001c699..5bd1268 100644 --- a/sys/dev/isp/isp_freebsd.h +++ b/sys/dev/isp/isp_freebsd.h @@ -75,6 +75,16 @@ #define ISP_IFLAGS INTR_TYPE_CAM | INTR_ENTROPY | INTR_MPSAFE +#define N_XCMDS 64 +#define XCMD_SIZE 512 +struct ispsoftc; +typedef union isp_ecmd { + union isp_ecmd * next; + uint8_t data[XCMD_SIZE]; +} isp_ecmd_t; +isp_ecmd_t * isp_get_ecmd(struct ispsoftc *); +void isp_put_ecmd(struct ispsoftc *, isp_ecmd_t *); + #ifdef ISP_TARGET_MODE /* Not quite right, but there was no bump for this change */ #if __FreeBSD_version < 225469 @@ -100,12 +110,22 @@ typedef struct { uint32_t portid; uint16_t rxid; /* wire rxid */ uint16_t oxid; /* wire oxid */ + uint16_t word3; /* PRLI word3 params */ + uint16_t ctcnt; /* number of CTIOs currently active */ uint32_t - cdb0 : 8, - : 1, - dead : 1, - tattr : 3, - state : 3; + srr_notify_rcvd : 1, + cdb0 : 8, + sendst : 1, + dead : 1, + tattr : 3, + state : 3; + void * ests; + /* + * The current SRR notify copy + */ + uint8_t srr[64]; /* sb QENTRY_LEN, but order of definitions is wrong */ + void * srr_ccb; + uint32_t nsrr; } atio_private_data_t; #define ATPD_STATE_FREE 0 #define ATPD_STATE_ATIO 1 @@ -123,6 +143,11 @@ union inot_private_data { uint32_t tag_id, seq_id; } rd; }; +typedef struct isp_timed_notify_ack { + void *isp; + void *not; + uint8_t data[64]; /* sb QENTRY_LEN, but order of definitions is wrong */ +} isp_tna_t; typedef struct tstate { SLIST_ENTRY(tstate) next; @@ -151,15 +176,32 @@ typedef struct tstate { */ struct isp_pcmd { struct isp_pcmd * next; - bus_dmamap_t dmap; /* dma map for this command */ - struct ispsoftc * isp; /* containing isp */ - struct callout wdog; /* watchdog timer */ - uint8_t crn; /* command reference number */ + bus_dmamap_t dmap; /* dma map for this command */ + struct ispsoftc * isp; /* containing isp */ + struct callout wdog; /* watchdog timer */ + uint8_t totslen; /* sense length on status response */ + uint8_t cumslen; /* sense length on status response */ + uint8_t crn; /* command reference number */ }; #define ISP_PCMD(ccb) (ccb)->ccb_h.spriv_ptr1 #define PISP_PCMD(ccb) ((struct isp_pcmd *)ISP_PCMD(ccb)) /* + * Per nexus info. + */ +struct isp_nexus { + struct isp_nexus * next; + uint32_t + crnseed : 8; /* next command reference number */ + uint32_t + tgt : 16, /* TGT for target */ + lun : 16; /* LUN for target */ +}; +#define NEXUS_HASH_WIDTH 32 +#define INITIAL_NEXUS_COUNT MAX_FC_TARG +#define NEXUS_HASH(tgt, lun) ((tgt + lun) % NEXUS_HASH_WIDTH) + +/* * Per channel information */ SLIST_HEAD(tslist, tstate); @@ -176,6 +218,11 @@ struct isp_fc { uint32_t loop_down_time; uint32_t loop_down_limit; uint32_t gone_device_time; + /* + * Per target/lun info- just to keep a per-ITL nexus crn count + */ + struct isp_nexus *nexus_hash[NEXUS_HASH_WIDTH]; + struct isp_nexus *nexus_free_list; uint32_t #ifdef ISP_TARGET_MODE #ifdef ISP_INTERNAL_TARGET @@ -202,8 +249,10 @@ struct isp_fc { #ifdef ISP_INTERNAL_TARGET struct proc * target_proc; #endif +#if defined(DEBUG) + unsigned int inject_lost_data_frame; +#endif #endif - uint8_t crnseed; /* next command reference number */ }; struct isp_spi { @@ -266,6 +315,7 @@ struct isposinfo { #else : 2, #endif + sixtyfourbit : 1, /* sixtyfour bit platform */ timer_active : 1, autoconf : 1, ehook_active : 1, @@ -288,6 +338,10 @@ struct isposinfo { cam_status * rptr; #endif + bus_addr_t ecmd_dma; + isp_ecmd_t * ecmd_base; + isp_ecmd_t * ecmd_free; + /* * Per-type private storage... */ @@ -318,16 +372,7 @@ struct isposinfo { ISP_FC_PC(isp, chan)-> tag = val; \ } -#define FCP_NEXT_CRN(isp, cmd, rslt, chan, tgt, lun) \ - if ((isp)->isp_osinfo.pc.fc[(chan)].crnseed == 0) { \ - (isp)->isp_osinfo.pc.fc[(chan)].crnseed = 1; \ - } \ - if (cmd) { \ - PISP_PCMD(cmd)->crn = (isp)->isp_osinfo.pc.fc[(chan)].crnseed; \ - } \ - (rslt) = (isp)->isp_osinfo.pc.fc[(chan)].crnseed++ - - +#define FCP_NEXT_CRN isp_fcp_next_crn #define isp_lock isp_osinfo.lock #define isp_bus_tag isp_osinfo.bus_tag #define isp_bus_handle isp_osinfo.bus_handle @@ -341,7 +386,6 @@ struct isposinfo { /* * Required Macros/Defines */ - #define ISP_FC_SCRLEN 0x1000 #define ISP_MEMZERO(a, b) memset(a, 0, b) @@ -459,20 +503,17 @@ default: \ #define XS_STSP(ccb) (&(ccb)->scsi_status) #define XS_SNSP(ccb) (&(ccb)->sense_data) -#define XS_SNSLEN(ccb) \ - imin((sizeof((ccb)->sense_data)), ccb->sense_len - ccb->sense_resid) +#define XS_TOT_SNSLEN(ccb) ccb->sense_len +#define XS_CUR_SNSLEN(ccb) (ccb->sense_len - ccb->sense_resid) #define XS_SNSKEY(ccb) (scsi_get_sense_key(&(ccb)->sense_data, \ - ccb->sense_len - ccb->sense_resid, \ - /*show_errors*/ 1)) + ccb->sense_len - ccb->sense_resid, 1)) #define XS_SNSASC(ccb) (scsi_get_asc(&(ccb)->sense_data, \ - ccb->sense_len - ccb->sense_resid, \ - /*show_errors*/ 1)) + ccb->sense_len - ccb->sense_resid, 1)) #define XS_SNSASCQ(ccb) (scsi_get_ascq(&(ccb)->sense_data, \ - ccb->sense_len - ccb->sense_resid, \ - /*show_errors*/ 1)) + ccb->sense_len - ccb->sense_resid, 1)) #define XS_TAG_P(ccb) \ (((ccb)->ccb_h.flags & CAM_TAG_ACTION_VALID) && \ (ccb)->tag_action != CAM_TAG_ACTION_NONE) @@ -483,8 +524,7 @@ default: \ #define XS_SETERR(ccb, v) (ccb)->ccb_h.status &= ~CAM_STATUS_MASK, \ - (ccb)->ccb_h.status |= v, \ - (ccb)->ccb_h.spriv_field0 |= ISP_SPRIV_ERRSET + (ccb)->ccb_h.status |= v # define HBA_NOERROR CAM_REQ_INPROG # define HBA_BOTCH CAM_UNREC_HBA_ERROR @@ -499,21 +539,31 @@ default: \ #define XS_ERR(ccb) ((ccb)->ccb_h.status & CAM_STATUS_MASK) -#define XS_NOERR(ccb) \ - (((ccb)->ccb_h.spriv_field0 & ISP_SPRIV_ERRSET) == 0 || \ - ((ccb)->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) - -#define XS_INITERR(ccb) \ - XS_SETERR(ccb, CAM_REQ_INPROG), (ccb)->ccb_h.spriv_field0 = 0 - -#define XS_SAVE_SENSE(xs, sense_ptr, slen) do { \ - (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \ - memset(&(xs)->sense_data, 0, sizeof((xs)->sense_data)); \ - memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs),\ - slen)); \ - if (slen < (xs)->sense_len) \ - (xs)->sense_resid = (xs)->sense_len - slen; \ - } while (0); +#define XS_NOERR(ccb) (((ccb)->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) + +#define XS_INITERR(ccb) XS_SETERR(ccb, CAM_REQ_INPROG), ccb->sense_resid = ccb->sense_len + +#define XS_SAVE_SENSE(xs, sense_ptr, totslen, slen) do { \ + uint32_t tlen = slen; \ + if (tlen > (xs)->sense_len) \ + tlen = (xs)->sense_len; \ + PISP_PCMD(xs)->totslen = imin((xs)->sense_len, totslen); \ + PISP_PCMD(xs)->cumslen = tlen; \ + memcpy(&(xs)->sense_data, sense_ptr, tlen); \ + (xs)->sense_resid = (xs)->sense_len - tlen; \ + (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \ + } while (0) + +#define XS_SENSE_APPEND(xs, xsnsp, xsnsl) do { \ + uint32_t off = PISP_PCMD(xs)->cumslen; \ + uint8_t *ptr = &((uint8_t *)(&(xs)->sense_data))[off]; \ + uint32_t amt = imin(xsnsl, PISP_PCMD(xs)->totslen - off); \ + if (amt) { \ + memcpy(ptr, xsnsp, amt); \ + (xs)->sense_resid -= amt; \ + PISP_PCMD(xs)->cumslen += amt; \ + } \ + } while (0) #define XS_SENSE_VALID(xs) (((xs)->ccb_h.status & CAM_AUTOSNS_VALID) != 0) @@ -634,24 +684,6 @@ extern int isp_autoconfig; /* * Platform private flags */ -#define ISP_SPRIV_ERRSET 0x1 -#define ISP_SPRIV_TACTIVE 0x2 -#define ISP_SPRIV_DONE 0x8 -#define ISP_SPRIV_WPEND 0x10 - -#define XS_S_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_TACTIVE -#define XS_C_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_TACTIVE -#define XS_TACTIVE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_TACTIVE) - -#define XS_CMD_S_DONE(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_DONE -#define XS_CMD_C_DONE(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_DONE -#define XS_CMD_DONE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_DONE) - -#define XS_CMD_S_WPEND(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_WPEND -#define XS_CMD_C_WPEND(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_WPEND -#define XS_CMD_WPEND_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_WPEND) - -#define XS_CMD_S_CLEAR(sccb) (sccb)->ccb_h.spriv_field0 = 0 /* * Platform Library Functions @@ -667,6 +699,7 @@ int isp_fc_scratch_acquire(ispsoftc_t *, int); int isp_mstohz(int); void isp_platform_intr(void *); void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t); +int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *); /* * Platform Version specific defines diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c index e8b563f..d5535f2 100644 --- a/sys/dev/isp/isp_library.c +++ b/sys/dev/isp/isp_library.c @@ -58,7 +58,7 @@ const char *isp_class3_roles[4] = { * Called with the first queue entry at least partially filled out. */ int -isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir) +isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, ispds64_t *ecmd) { uint8_t storage[QENTRY_LEN]; uint8_t type, nqe; @@ -396,11 +396,11 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval) } if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) { if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) != 0) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: linktest failed for channel %d", chan); return (-1); } if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan); return (-1); } } @@ -410,19 +410,19 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval) } if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan); return (LOOP_PDB_RCVD); } if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan); return (LOOP_LSCAN_DONE); } if (isp_control(isp, ISPCTL_PDB_SYNC, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan); return (LOOP_FSCAN_DONE); } if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) { - isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan); + isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan); return (-1); } return (0); @@ -438,7 +438,7 @@ isp_dump_portdb(ispsoftc_t *isp, int chan) int i; for (i = 0; i < MAX_FC_TARG; i++) { - char mb[4]; + char mb[4], buf1[64], buf2[64]; const char *dbs[8] = { "NIL ", "PROB", @@ -449,9 +449,6 @@ isp_dump_portdb(ispsoftc_t *isp, int chan) "ZOMB", "VLD " }; - const char *roles[4] = { - " UNK", " TGT", " INI", "TINI" - }; fcportdb_t *lp = &fcp->portdb[i]; if (lp->state == FC_PORTDB_STATE_NIL && lp->target_mode == 0) { @@ -462,12 +459,81 @@ isp_dump_portdb(ispsoftc_t *isp, int chan) } else { ISP_SNPRINTF(mb, sizeof (mb), "---"); } + isp_gen_role_str(buf1, sizeof (buf1), lp->prli_word3); + isp_gen_role_str(buf2, sizeof (buf2), lp->new_prli_word3); isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", - chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->roles], lp->portid, roles[lp->new_roles], lp->new_portid, + chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, buf1, lp->portid, buf2, lp->new_portid, (uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn)); } } +void +isp_gen_role_str(char *buf, size_t len, uint16_t p3) +{ + int nd = 0; + buf[0] = '('; + buf[1] = 0; + if (p3 & PRLI_WD3_ENHANCED_DISCOVERY) { + nd++; + strlcat(buf, "EDisc", len); + } + if (p3 & PRLI_WD3_REC_SUPPORT) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "REC", len); + } + if (p3 & PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "RetryID", len); + } + if (p3 & PRLI_WD3_RETRY) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "Retry", len); + } + if (p3 & PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "CNFRM", len); + } + if (p3 & PRLI_WD3_DATA_OVERLAY_ALLOWED) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "DOver", len); + } + if (p3 & PRLI_WD3_INITIATOR_FUNCTION) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "INI", len); + } + if (p3 & PRLI_WD3_TARGET_FUNCTION) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "TGT", len); + } + if (p3 & PRLI_WD3_READ_FCP_XFER_RDY_DISABLED) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "RdXfrDis", len); + } + if (p3 & PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED) { + if (nd++) { + strlcat(buf, ",", len); + } + strlcat(buf, "XfrDis", len); + } + strlcat(buf, ")", len); +} + const char * isp_fc_fw_statename(int state) { @@ -535,7 +601,6 @@ isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role) isp_del_all_wwn_entries(isp, chan); #endif isp_clear_commands(isp); - isp_reset(isp, 0); if (isp->isp_state != ISP_RESETSTATE) { isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); @@ -896,7 +961,8 @@ isp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst) ISP_IOXPUT_8(isp, src->req_target, &dst->req_target); ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun); ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags); - ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved); + ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn); + ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved); ISP_IOXPUT_16(isp, src->req_time, &dst->req_time); ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count); for (i = 0; i < ASIZE(src->req_cdb); i++) { @@ -919,7 +985,8 @@ isp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst) ISP_IOXPUT_16(isp, src->req_target, &dst->req_target); ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun); ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags); - ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved); + ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn); + ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved); ISP_IOXPUT_16(isp, src->req_time, &dst->req_time); ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count); for (i = 0; i < ASIZE(src->req_cdb); i++) { @@ -1077,15 +1144,34 @@ isp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst) ISP_IOXGET_16(isp, &src->req_time, dst->req_time); ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len); ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid); - for (i = 0; i < 8; i++) { + for (i = 0; i < sizeof (src->req_response); i++) { ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]); } - for (i = 0; i < 32; i++) { + for (i = 0; i < sizeof (src->req_sense_data); i++) { ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]); } } void +isp_get_cont_response(ispsoftc_t *isp, ispstatus_cont_t *src, ispstatus_cont_t *dst) +{ + int i; + isp_get_hdr(isp, &src->req_header, &dst->req_header); + if (IS_24XX(isp)) { + uint32_t *a, *b; + a = (uint32_t *) src->req_sense_data; + b = (uint32_t *) dst->req_sense_data; + for (i = 0; i < (sizeof (src->req_sense_data) / sizeof (uint32_t)); i++) { + ISP_IOZGET_32(isp, a++, *b++); + } + } else { + for (i = 0; i < sizeof (src->req_sense_data); i++) { + ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]); + } + } +} + +void isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_statusreq_t *dst) { int i; @@ -1929,6 +2015,29 @@ isp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst) } void +isp_put_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst) +{ + ISP_IOZPUT_8(isp, src->r_ctl, &dst->r_ctl); + ISP_IOZPUT_8(isp, src->d_id[0], &dst->d_id[0]); + ISP_IOZPUT_8(isp, src->d_id[1], &dst->d_id[1]); + ISP_IOZPUT_8(isp, src->d_id[2], &dst->d_id[2]); + ISP_IOZPUT_8(isp, src->cs_ctl, &dst->cs_ctl); + ISP_IOZPUT_8(isp, src->s_id[0], &dst->s_id[0]); + ISP_IOZPUT_8(isp, src->s_id[1], &dst->s_id[1]); + ISP_IOZPUT_8(isp, src->s_id[2], &dst->s_id[2]); + ISP_IOZPUT_8(isp, src->type, &dst->type); + ISP_IOZPUT_8(isp, src->f_ctl[0], &dst->f_ctl[0]); + ISP_IOZPUT_8(isp, src->f_ctl[1], &dst->f_ctl[1]); + ISP_IOZPUT_8(isp, src->f_ctl[2], &dst->f_ctl[2]); + ISP_IOZPUT_8(isp, src->seq_id, &dst->seq_id); + ISP_IOZPUT_8(isp, src->df_ctl, &dst->df_ctl); + ISP_IOZPUT_16(isp, src->seq_cnt, &dst->seq_cnt); + ISP_IOZPUT_16(isp, src->ox_id, &dst->ox_id); + ISP_IOZPUT_16(isp, src->rx_id, &dst->rx_id); + ISP_IOZPUT_32(isp, src->parameter, &dst->parameter); +} + +void isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst) { int i; @@ -1998,23 +2107,43 @@ isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst) ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique); } +void +isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *src, fcp_rsp_iu_t *dst) +{ + int i; + for (i = 0; i < ((sizeof (src->fcp_rsp_reserved))/(sizeof (src->fcp_rsp_reserved[0]))); i++) { + ISP_IOZPUT_8(isp, src->fcp_rsp_reserved[i], &dst->fcp_rsp_reserved[i]); + } + ISP_IOZPUT_16(isp, src->fcp_rsp_status_qualifier, &dst->fcp_rsp_status_qualifier); + ISP_IOZPUT_8(isp, src->fcp_rsp_bits, &dst->fcp_rsp_bits); + ISP_IOZPUT_8(isp, src->fcp_rsp_scsi_status, &dst->fcp_rsp_scsi_status); + ISP_IOZPUT_32(isp, src->fcp_rsp_resid, &dst->fcp_rsp_resid); + ISP_IOZPUT_32(isp, src->fcp_rsp_snslen, &dst->fcp_rsp_snslen); + ISP_IOZPUT_32(isp, src->fcp_rsp_rsplen, &dst->fcp_rsp_rsplen); +} + #ifdef ISP_TARGET_MODE /* * Command shipping- finish off first queue entry and do dma mapping and * additional segments as needed. * - * Called with the first queue entry at least partially filled out. + * Called with the first queue entry mostly filled out. + * Our job here is to finish that and add additional data + * segments if needed. + * + * We used to do synthetic entries to split data and status + * at this level, but that started getting too tricky. */ int isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen) { - uint8_t storage[QENTRY_LEN], storage2[QENTRY_LEN]; + uint8_t storage[QENTRY_LEN]; uint8_t type, nqe; uint32_t seg, curseg, seglim, nxt, nxtnxt; ispds_t *dsp = NULL; ispds64_t *dsp64 = NULL; - void *qe0, *qe1, *sqe = NULL; + void *qe0, *qe1; qe0 = isp_getrqentry(isp); if (qe0 == NULL) { @@ -2027,7 +2156,7 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ seglim = 0; /* - * If we have no data to transmit, just copy the first IOCB and start it up. + * If we have data to transmit, figure out how many segments can fit into the first entry. */ if (ddir != ISP_NOXFR) { /* @@ -2039,100 +2168,25 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ seglim = ISP_RQDSEG; break; case RQSTYPE_CTIO2: + dsp = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg; + seglim = ISP_RQDSEG_T2; + break; case RQSTYPE_CTIO3: - { - ct2_entry_t *ct = fqe, *ct2 = (ct2_entry_t *) storage2; - uint16_t swd = ct->rsp.m0.ct_scsi_status & 0xff; - - if ((ct->ct_flags & CT2_SENDSTATUS) && (swd || ct->ct_resid)) { - memcpy(ct2, ct, QENTRY_LEN); - /* - * Clear fields from first CTIO2 that now need to be cleared - */ - ct->ct_header.rqs_seqno = 0; - ct->ct_flags &= ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST); - ct->ct_resid = 0; - ct->ct_syshandle = 0; - ct->rsp.m0.ct_scsi_status = 0; - - /* - * Reset fields in the second CTIO2 as appropriate. - */ - ct2->ct_flags &= ~(CT2_FLAG_MMASK|CT2_DATAMASK|CT2_FASTPOST); - ct2->ct_flags |= CT2_NO_DATA|CT2_FLAG_MODE1; - ct2->ct_seg_count = 0; - ct2->ct_reloff = 0; - memset(&ct2->rsp, 0, sizeof (ct2->rsp)); - if (swd == SCSI_CHECK && snsptr && snslen) { - ct2->rsp.m1.ct_senselen = min(snslen, MAXRESPLEN); - memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_senselen); - swd |= CT2_SNSLEN_VALID; - } - if (ct2->ct_resid > 0) { - swd |= CT2_DATA_UNDER; - } else if (ct2->ct_resid < 0) { - swd |= CT2_DATA_OVER; - } - ct2->rsp.m1.ct_scsi_status = swd; - sqe = storage2; - } - if (type == RQSTYPE_CTIO2) { - dsp = ct->rsp.m0.u.ct_dataseg; - seglim = ISP_RQDSEG_T2; - } else { - dsp64 = ct->rsp.m0.u.ct_dataseg64; - seglim = ISP_RQDSEG_T3; - } + dsp64 = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64; + seglim = ISP_RQDSEG_T3; break; - } case RQSTYPE_CTIO7: - { - ct7_entry_t *ct = fqe, *ct2 = (ct7_entry_t *)storage2; - uint16_t swd = ct->ct_scsi_status & 0xff; - - dsp64 = &ct->rsp.m0.ds; + dsp64 = &((ct7_entry_t *)fqe)->rsp.m0.ds; seglim = 1; - if ((ct->ct_flags & CT7_SENDSTATUS) && (swd || ct->ct_resid)) { - memcpy(ct2, ct, sizeof (ct7_entry_t)); - - /* - * Clear fields from first CTIO7 that now need to be cleared - */ - ct->ct_header.rqs_seqno = 0; - ct->ct_flags &= ~CT7_SENDSTATUS; - ct->ct_resid = 0; - ct->ct_syshandle = 0; - ct->ct_scsi_status = 0; - - /* - * Reset fields in the second CTIO7 as appropriate. - */ - ct2->ct_flags &= ~(CT7_FLAG_MMASK|CT7_DATAMASK); - ct2->ct_flags |= CT7_NO_DATA|CT7_NO_DATA|CT7_FLAG_MODE1; - ct2->ct_seg_count = 0; - memset(&ct2->rsp, 0, sizeof (ct2->rsp)); - if (swd == SCSI_CHECK && snsptr && snslen) { - ct2->rsp.m1.ct_resplen = min(snslen, MAXRESPLEN_24XX); - memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_resplen); - swd |= (FCP_SNSLEN_VALID << 8); - } - if (ct2->ct_resid < 0) { - swd |= (FCP_RESID_OVERFLOW << 8); - } else if (ct2->ct_resid > 0) { - swd |= (FCP_RESID_UNDERFLOW << 8); - } - ct2->ct_scsi_status = swd; - sqe = storage2; - } break; - } default: return (CMD_COMPLETE); } } /* - * Fill out the data transfer stuff in the first queue entry + * First, fill out any of the data transfer stuff that fits + * in the first queue entry. */ if (seglim > nsegs) { seglim = nsegs; @@ -2147,12 +2201,6 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ } /* - * First, if we are sending status with data and we have a non-zero - * status or non-zero residual, we have to make a synthetic extra CTIO - * that contains the status that we'll ship separately (FC cards only). - */ - - /* * Second, start building additional continuation segments as needed. */ while (seg < nsegs) { @@ -2198,25 +2246,10 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ } /* - * If we have a synthetic queue entry to complete things, do it here. + * Third, not patch up the first queue entry with the number of segments + * we actually are going to be transmitting. At the same time, handle + * any mode 2 requests. */ - if (sqe) { - nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp)); - if (nxtnxt == isp->isp_reqodx) { - return (CMD_EAGAIN); - } - qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt); - nxt = nxtnxt; - if (type == RQSTYPE_CTIO7) { - isp_put_ctio7(isp, sqe, qe1); - } else { - isp_put_ctio2(isp, sqe, qe1); - } - if (isp->isp_dblev & ISP_LOGTDEBUG1) { - isp_print_bytes(isp, "synthetic final queue entry", QENTRY_LEN, storage2); - } - } - ((isphdr_t *)fqe)->rqs_entry_count = nqe; switch (type) { case RQSTYPE_CTIO: @@ -2225,7 +2258,11 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ break; case RQSTYPE_CTIO2: case RQSTYPE_CTIO3: - ((ct2_entry_t *)fqe)->ct_seg_count = nsegs; + if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) { + ((ct2_entry_t *)fqe)->ct_seg_count = 1; + } else { + ((ct2_entry_t *)fqe)->ct_seg_count = nsegs; + } if (ISP_CAP_2KLOGIN(isp)) { isp_put_ctio2e(isp, fqe, qe0); } else { @@ -2233,7 +2270,11 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_ } break; case RQSTYPE_CTIO7: - ((ct7_entry_t *)fqe)->ct_seg_count = nsegs; + if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) { + ((ct7_entry_t *)fqe)->ct_seg_count = 1; + } else { + ((ct7_entry_t *)fqe)->ct_seg_count = nsegs; + } isp_put_ctio7(isp, fqe, qe0); break; default: @@ -2405,8 +2446,9 @@ isp_find_chan_by_did(ispsoftc_t *isp, uint32_t did, uint16_t *cp) * Add an initiator device to the port database */ void -isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id) +isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id, uint16_t prli_params) { + char buf[64]; fcparam *fcp; fcportdb_t *lp; isp_notify_t nt; @@ -2415,8 +2457,8 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 fcp = FCPARAM(isp, chan); if (nphdl >= MAX_NPORT_HANDLE) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", - __func__, chan, (unsigned long long) ini, nphdl, s_id); + isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", + chan, (unsigned long long) ini, nphdl, s_id); return; } @@ -2451,19 +2493,18 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 if (lp) { int something = 0; if (lp->handle != nphdl) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x", - __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid); + isp_prt(isp, ISP_LOGWARN, "Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x", + chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid); isp_dump_portdb(isp, chan); return; } if (s_id != PORT_NONE) { if (lp->portid == PORT_NONE) { lp->portid = s_id; - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port ID 0x%06x", __func__, chan, nphdl, s_id); + isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets Port ID 0x%06x", chan, nphdl, s_id); something++; } else if (lp->portid != s_id) { - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl, - lp->portid, s_id); + isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", chan, nphdl, lp->portid, s_id); isp_dump_portdb(isp, chan); return; } @@ -2471,18 +2512,24 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 if (VALID_INI(ini)) { if (!VALID_INI(lp->port_wwn)) { lp->port_wwn = ini; - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini); + isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", chan, nphdl, (unsigned long long) ini); something++; } else if (lp->port_wwn != ini) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl, + isp_prt(isp, ISP_LOGWARN, "Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", chan, nphdl, (unsigned long long) lp->port_wwn, (unsigned long long) ini); isp_dump_portdb(isp, chan); return; } } - + if (prli_params != lp->prli_word3) { + lp->prli_word3 = prli_params; + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); + isp_prt(isp, ISP_LOGTINFO|ISP_LOGCONFIG, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x new PRLI Word 3 params %s", chan, + (unsigned long long) lp->port_wwn, lp->handle, lp->portid, buf); + something++; + } if (!something) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", __func__, chan, + isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", chan, (unsigned long long) lp->port_wwn, lp->handle, lp->portid); } return; @@ -2500,8 +2547,8 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 } } if (i < 0) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database", - __func__, chan, (unsigned long long) ini, nphdl, s_id); + isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database", + chan, (unsigned long long) ini, nphdl, s_id); return; } @@ -2511,9 +2558,12 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 lp->handle = nphdl; lp->portid = s_id; lp->port_wwn = ini; + lp->prli_word3 = prli_params; + isp_gen_role_str(buf, sizeof (buf), lp->prli_word3); fcp->isp_tgt_map[nphdl] = i + 1; - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1); + isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d %s added", chan, + (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1, buf); ISP_MEMZERO(&nt, sizeof (nt)); nt.nt_hba = isp; @@ -2538,8 +2588,8 @@ isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 fcportdb_t *lp; if (nphdl >= MAX_NPORT_HANDLE) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", - __func__, chan, (unsigned long long) ini, nphdl, s_id); + isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", + chan, (unsigned long long) ini, nphdl, s_id); return; } @@ -2553,13 +2603,13 @@ isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3 } } if (lp == NULL) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared", - __func__, chan, (unsigned long long) ini, nphdl, s_id); + isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared", + chan, (unsigned long long) ini, nphdl, s_id); isp_dump_portdb(isp, chan); return; } - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared", - __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1); + isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared", + chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1); fcp->isp_tgt_map[nphdl] = 0; ISP_MEMZERO(&nt, sizeof (nt)); @@ -2650,7 +2700,7 @@ isp_del_wwn_entries(ispsoftc_t *isp, isp_notify_t *mp) return; } } - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d unable to find entry to delete N-port handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", __func__, + isp_prt(isp, ISP_LOGWARN, "Chan %d unable to find entry to delete N-port handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", mp->nt_channel, mp->nt_nphdl, (unsigned long long) mp->nt_wwn, mp->nt_sid); } @@ -2973,8 +3023,14 @@ isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst) ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2); ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3); ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count); + } else { + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count); + } } } @@ -3026,8 +3082,14 @@ isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst) ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2); ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3); ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count); + } else { + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count); + } } } @@ -3072,8 +3134,9 @@ isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst) } } else { ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); + ISP_IOXPUT_32(isp, src->rsp.m2.reserved2, &dst->rsp.m2.reserved2); ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi); ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); @@ -3132,8 +3195,14 @@ isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst) ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2); ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3); ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count); + } else { + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count); + } } } @@ -3187,8 +3256,14 @@ isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst) ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2); ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3); ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count); + } else { + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count); + } } } diff --git a/sys/dev/isp/isp_library.h b/sys/dev/isp/isp_library.h index 4e0c7f8..a326bfa 100644 --- a/sys/dev/isp/isp_library.h +++ b/sys/dev/isp/isp_library.h @@ -36,7 +36,7 @@ * stuff figured out, you can make all the code in one spot. */ typedef enum { ISP_TO_DEVICE, ISP_FROM_DEVICE, ISP_NOXFR} isp_ddir_t; -int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t); +int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t, ispds64_t *); /* * Handle management functions. @@ -66,6 +66,7 @@ void isp_print_bytes(ispsoftc_t *, const char *, int, void *); extern const char *isp_class3_roles[4]; int isp_fc_runstate(ispsoftc_t *, int, int); void isp_dump_portdb(ispsoftc_t *, int); +void isp_gen_role_str(char *, size_t, uint16_t); const char *isp_fc_fw_statename(int); const char *isp_fc_loop_statename(int); @@ -106,6 +107,7 @@ void isp_put_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *); void isp_put_cont_req(ispsoftc_t *, ispcontreq_t *, ispcontreq_t *); void isp_put_cont64_req(ispsoftc_t *, ispcontreq64_t *, ispcontreq64_t *); void isp_get_response(ispsoftc_t *, ispstatusreq_t *, ispstatusreq_t *); +void isp_get_cont_response(ispsoftc_t *, ispstatus_cont_t *, ispstatus_cont_t *); void isp_get_24xx_response(ispsoftc_t *, isp24xx_statusreq_t *, isp24xx_statusreq_t *); void isp_get_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *); void isp_get_rio1(ispsoftc_t *, isp_rio1_t *, isp_rio1_t *); @@ -139,10 +141,12 @@ void isp_get_ga_nxt_response(ispsoftc_t *, sns_ga_nxt_rsp_t *, sns_ga_nxt_rsp_t void isp_get_els(ispsoftc_t *, els_t *, els_t *); void isp_put_els(ispsoftc_t *, els_t *, els_t *); 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_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 *); #define ISP_HANDLE_MASK 0x7fff @@ -166,7 +170,7 @@ int isp_find_pdb_by_wwn(ispsoftc_t *, int, uint64_t, fcportdb_t **); int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **); int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **); void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *); -void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); +void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t, uint16_t); void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); void isp_del_all_wwn_entries(ispsoftc_t *, int); void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *); diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c index 7a852cb..d4a214b 100644 --- a/sys/dev/isp/isp_pci.c +++ b/sys/dev/isp/isp_pci.c @@ -588,6 +588,20 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp) } } + tval = 0; + (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "nofctape", &tval); + if (tval) { + isp->isp_confopts |= ISP_CFG_NOFCTAPE; + } + + tval = 0; + (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "fctape", &tval); + if (tval) { + isp->isp_confopts &= ~ISP_CFG_NOFCTAPE; + isp->isp_confopts |= ISP_CFG_FCTAPE; + } + + /* * Because the resource_*_value functions can neither return * 64 bit integer values, nor can they be directly coerced @@ -664,6 +678,8 @@ isp_pci_attach(device_t dev) isp = &pcs->pci_isp; isp->isp_dev = dev; isp->isp_nchan = 1; + if (sizeof (bus_addr_t) > 4) + isp->isp_osinfo.sixtyfourbit = 1; /* * Get Generic Options @@ -1028,6 +1044,9 @@ isp_pci_detach(device_t dev) pci_release_msi(dev); } (void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs); + /* + * XXX: THERE IS A LOT OF LEAKAGE HERE + */ if (pcs->pci_isp.isp_param) { free(pcs->pci_isp.isp_param, M_DEVBUF); pcs->pci_isp.isp_param = NULL; @@ -1441,6 +1460,7 @@ static void imc(void *arg, bus_dma_segment_t *segs, int nseg, int error) { struct imush *imushp = (struct imush *) arg; + isp_ecmd_t *ecmd; if (error) { imushp->error = error; @@ -1451,17 +1471,33 @@ imc(void *arg, bus_dma_segment_t *segs, int nseg, int error) return; } isp_prt(imushp->isp, ISP_LOGDEBUG0, "request/result area @ 0x%jx/0x%jx", (uintmax_t) segs->ds_addr, (uintmax_t) segs->ds_len); + imushp->isp->isp_rquest = imushp->vbase; imushp->isp->isp_rquest_dma = segs->ds_addr; segs->ds_addr += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp)); imushp->vbase += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp)); + imushp->isp->isp_result_dma = segs->ds_addr; imushp->isp->isp_result = imushp->vbase; - + segs->ds_addr += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); + imushp->vbase += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); + + if (imushp->isp->isp_type >= ISP_HA_FC_2300) { + imushp->isp->isp_osinfo.ecmd_dma = segs->ds_addr; + imushp->isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)imushp->vbase; + imushp->isp->isp_osinfo.ecmd_base = imushp->isp->isp_osinfo.ecmd_free; + for (ecmd = imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) { + if (ecmd == &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) { + ecmd->next = NULL; + } else { + ecmd->next = ecmd + 1; + } + } + } #ifdef ISP_TARGET_MODE + segs->ds_addr += (N_XCMDS * XCMD_SIZE); + imushp->vbase += (N_XCMDS * XCMD_SIZE); if (IS_24XX(imushp->isp)) { - segs->ds_addr += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); - imushp->vbase += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp)); imushp->isp->isp_atioq_dma = segs->ds_addr; imushp->isp->isp_atioq = imushp->vbase; } @@ -1531,11 +1567,11 @@ isp_pci_mbxdma(ispsoftc_t *isp) return (1); } +#ifdef ISP_TARGET_MODE /* * XXX: We don't really support 64 bit target mode for parallel scsi yet */ -#ifdef ISP_TARGET_MODE - if (IS_SCSI(isp) && sizeof (bus_addr_t) > 4) { + if (IS_SCSI(isp) && isp->isp_osinfo.sixtyfourbit) { free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); isp_prt(isp, ISP_LOGERR, "we cannot do DAC for SPI cards yet"); ISP_LOCK(isp); @@ -1580,7 +1616,9 @@ isp_pci_mbxdma(ispsoftc_t *isp) /* * Allocate and map the request and result queues (and ATIO queue - * if we're a 2400 supporting target mode). + * if we're a 2400 supporting target mode), and a region for + * external dma addressable command/status structures (23XX and + * later). */ len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); len += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); @@ -1589,7 +1627,9 @@ isp_pci_mbxdma(ispsoftc_t *isp) len += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); } #endif - + if (isp->isp_type >= ISP_HA_FC_2300) { + len += (N_XCMDS * XCMD_SIZE); + } ns = (len / PAGE_SIZE) + 1; /* @@ -1650,6 +1690,19 @@ isp_pci_mbxdma(ispsoftc_t *isp) bus_dma_tag_destroy(fc->tdmat); goto bad; } + for (i = 0; i < INITIAL_NEXUS_COUNT; i++) { + struct isp_nexus *n = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_NOWAIT | M_ZERO); + if (n == NULL) { + while (fc->nexus_free_list) { + n = fc->nexus_free_list; + fc->nexus_free_list = n->next; + free(n, M_DEVBUF); + } + goto bad; + } + n->next = fc->nexus_free_list; + fc->nexus_free_list = n; + } } } @@ -1679,6 +1732,11 @@ bad: struct isp_fc *fc = ISP_FC_PC(isp, cmap); bus_dmamem_free(fc->tdmat, base, fc->tdmap); bus_dma_tag_destroy(fc->tdmat); + while (fc->nexus_free_list) { + struct isp_nexus *n = fc->nexus_free_list; + fc->nexus_free_list = n->next; + free(n, M_DEVBUF); + } } bus_dmamem_free(isp->isp_osinfo.cdmat, base, isp->isp_osinfo.cdmap); bus_dma_tag_destroy(isp->isp_osinfo.cdmat); @@ -1733,7 +1791,7 @@ tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) isp = mp->isp; rq = mp->rq; if (nseg) { - if (sizeof (bus_addr_t) > 4) { + if (isp->isp_osinfo.sixtyfourbit) { if (nseg >= ISP_NSEG64_MAX) { isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX); mp->error = EFAULT; @@ -1766,8 +1824,14 @@ tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ddir = ISP_NOXFR; } - if (isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len) != CMD_QUEUED) { + error = isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len); + switch (error) { + case CMD_EAGAIN: mp->error = MUSHERR_NOQENTRIES; + case CMD_QUEUED: + break; + default: + mp->error = EIO; } } #endif @@ -1802,7 +1866,7 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) isp = mp->isp; rq = mp->rq; if (nseg) { - if (sizeof (bus_addr_t) > 4) { + if (isp->isp_osinfo.sixtyfourbit) { if (nseg >= ISP_NSEG64_MAX) { isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX); mp->error = EFAULT; @@ -1835,8 +1899,16 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ddir = ISP_NOXFR; } - if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) != CMD_QUEUED) { + error = isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (ispds64_t *)csio->req_map); + switch (error) { + case CMD_EAGAIN: mp->error = MUSHERR_NOQENTRIES; + break; + case CMD_QUEUED: + break; + default: + mp->error = EIO; + break; } } @@ -1936,11 +2008,11 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) if (mp->error == MUSHERR_NOQENTRIES) { retval = CMD_EAGAIN; } else if (mp->error == EFBIG) { - XS_SETERR(csio, CAM_REQ_TOO_BIG); + csio->ccb_h.status = CAM_REQ_TOO_BIG; } else if (mp->error == EINVAL) { - XS_SETERR(csio, CAM_REQ_INVALID); + csio->ccb_h.status = CAM_REQ_INVALID; } else { - XS_SETERR(csio, CAM_UNREC_HBA_ERROR); + csio->ccb_h.status = CAM_UNREC_HBA_ERROR; } return (retval); } diff --git a/sys/dev/isp/isp_sbus.c b/sys/dev/isp/isp_sbus.c index 26452e6..e63fe7e 100644 --- a/sys/dev/isp/isp_sbus.c +++ b/sys/dev/isp/isp_sbus.c @@ -600,7 +600,7 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ddir = ISP_NOXFR; } - if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) != CMD_QUEUED) { + if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) != CMD_QUEUED) { mp->error = MUSHERR_NOQENTRIES; } } diff --git a/sys/dev/isp/isp_stds.h b/sys/dev/isp/isp_stds.h index 2ed66cb..e53f005 100644 --- a/sys/dev/isp/isp_stds.h +++ b/sys/dev/isp/isp_stds.h @@ -137,9 +137,30 @@ typedef struct { } rft_id_t; /* - * FCP Response IU Bits of interest - * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08) + * FCP Response IU and bits of interest + * Source: NCITS T10, Project 1828D, Revision 02b (aka FCP4r02b) */ +typedef struct { + uint8_t fcp_rsp_reserved[8]; + uint16_t fcp_rsp_status_qualifier; /* SAM-5 Status Qualifier */ + uint8_t fcp_rsp_bits; + uint8_t fcp_rsp_scsi_status; /* SAM-5 SCSI Status Byte */ + uint32_t fcp_rsp_resid; + uint32_t fcp_rsp_snslen; + uint32_t fcp_rsp_rsplen; + /* + * In the bytes that follow, it's going to be + * FCP RESPONSE INFO (max 8 bytes, possibly 0) + * FCP SENSE INFO (if any) + * FCP BIDIRECTIONAL READ RESID (if any) + */ + uint8_t fcp_rsp_extra[0]; +} fcp_rsp_iu_t; +#define MIN_FCP_RESPONSE_SIZE 24 + +#define FCP_BIDIR_RSP 0x80 /* Bi-Directional response */ +#define FCP_BIDIR_RESID_UNDERFLOW 0x40 +#define FCP_BIDIR_RESID_OVERFLOW 0x20 #define FCP_CONF_REQ 0x10 #define FCP_RESID_UNDERFLOW 0x08 #define FCP_RESID_OVERFLOW 0x04 @@ -162,17 +183,41 @@ typedef struct { #define FCP_RSPNS_TMF_SUCCEEDED 8 #define FCP_RSPNS_TMF_INCORRECT_LUN 9 +/* + * R_CTL field definitions + * + * Bits 31-28 are ROUTING + * Bits 27-24 are INFORMATION + * + * These are nibble values, not bits + */ +#define R_CTL_ROUTE_DATA 0x00 +#define R_CTL_ROUTE_ELS 0x02 +#define R_CTL_ROUTE_FC4_LINK 0x03 +#define R_CTL_ROUTE_VDATA 0x04 +#define R_CTL_ROUTE_EXENDED 0x05 +#define R_CTL_ROUTE_BASIC 0x08 +#define R_CTL_ROUTE_LINK 0x0c +#define R_CTL_ROUTE_EXT_ROUTING 0x0f + +#define R_CTL_INFO_UNCATEGORIZED 0x00 +#define R_CTL_INFO_SOLICITED_DATA 0x01 +#define R_CTL_INFO_UNSOLICITED_CONTROL 0x02 +#define R_CTL_INFO_SOLICITED_CONTROL 0x03 +#define R_CTL_INFO_UNSOLICITED_DATA 0x04 +#define R_CTL_INFO_DATA_DESCRIPTOR 0x05 +#define R_CTL_INFO_UNSOLICITED_COMMAND 0x06 +#define R_CTL_INFO_COMMAND_STATUS 0x07 + +#define MAKE_RCTL(a, b) (((a) << 4) | (b)) /* unconverted miscellany */ /* * Basic FC Link Service defines */ -/* - * These are in the R_CTL field. - */ -#define ABTS 0x81 -#define BA_ACC 0x84 /* of ABORT SEQUENCE */ -#define BA_RJT 0x85 /* of ABORT SEQUENCE */ +/* #define ABTS MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_SOLICITED_DATA) */ +#define BA_ACC MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_UNSOLICITED_DATA) /* of ABORT */ +#define BA_RJT MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_DATA_DESCRIPTOR) /* of ABORT */ /* * Link Service Accept/Reject @@ -196,6 +241,23 @@ typedef struct { #define RNC 0x53 /* + * PRLI Word 3 definitions + * FPC4-r02b January, 2011 + */ +#define PRLI_WD3_ENHANCED_DISCOVERY (1 << 11) +#define PRLI_WD3_REC_SUPPORT (1 << 10) +#define PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED (1 << 9) +#define PRLI_WD3_RETRY (1 << 8) +#define PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED (1 << 7) +#define PRLI_WD3_DATA_OVERLAY_ALLOWED (1 << 6) +#define PRLI_WD3_INITIATOR_FUNCTION (1 << 5) +#define PRLI_WD3_TARGET_FUNCTION (1 << 4) +#define PRLI_WD3_READ_FCP_XFER_RDY_DISABLED (1 << 1) /* definitely supposed to be set */ +#define PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED (1 << 0) + + + +/* * FC4 defines */ #define FC4_IP 5 /* ISO/EEC 8802-2 LLC/SNAP */ diff --git a/sys/dev/isp/isp_target.c b/sys/dev/isp/isp_target.c index 8707961..aa34622 100644 --- a/sys/dev/isp/isp_target.c +++ b/sys/dev/isp/isp_target.c @@ -291,7 +291,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) break; case IN_RSRC_UNAVAIL: isp_prt(isp, ISP_LOGINFO, "Firmware out of ATIOs"); - (void) isp_notify_ack(isp, local); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local); break; case IN_RESET: @@ -346,19 +346,29 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) notify.nt_sid = PORT_ANY; notify.nt_did = PORT_ANY; notify.nt_ncode = NT_GLOBAL_LOGOUT; + notify.nt_need_ack = 1; + notify.nt_lreserved = local; isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); - (void) isp_notify_ack(isp, local); break; case IN_PORT_CHANGED: isp_prt(isp, ISP_LOGTINFO, "%s: port changed", __func__); - (void) isp_notify_ack(isp, local); + ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); + notify.nt_hba = isp; + notify.nt_wwn = INI_ANY; + notify.nt_nphdl = NIL_HANDLE; + notify.nt_sid = PORT_ANY; + notify.nt_did = PORT_ANY; + notify.nt_ncode = NT_CHANGED; + notify.nt_need_ack = 1; + notify.nt_lreserved = local; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); break; default: ISP_SNPRINTF(local, sizeof local, "%s: unknown status to RQSTYPE_NOTIFY (0x%x)", __func__, status); isp_print_bytes(isp, local, QENTRY_LEN, vptr); - (void) isp_notify_ack(isp, local); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local); break; } break; @@ -466,23 +476,30 @@ isp_lun_cmd(ispsoftc_t *isp, int cmd, int bus, int lun, int cmd_cnt, int inot_cn if (IS_DUALBUS(isp)) { el.le_rsvd = (bus & 0x1) << 7; } - el.le_cmd_count = cmd_cnt; - el.le_in_count = inot_cnt; + el.le_cmd_count = (cmd_cnt < 0)? -cmd_cnt : cmd_cnt; + el.le_in_count = (inot_cnt < 0)? -inot_cnt : inot_cnt; if (cmd == RQSTYPE_ENABLE_LUN) { if (IS_SCSI(isp)) { el.le_flags = LUN_TQAE|LUN_DISAD; el.le_cdb6len = 12; el.le_cdb7len = 12; } - } else if (cmd == -RQSTYPE_ENABLE_LUN) { - cmd = RQSTYPE_ENABLE_LUN; - el.le_cmd_count = 0; - el.le_in_count = 0; - } else if (cmd == -RQSTYPE_MODIFY_LUN) { - cmd = RQSTYPE_MODIFY_LUN; - el.le_ops = LUN_CCDECR | LUN_INDECR; + } else if (cmd == RQSTYPE_MODIFY_LUN) { + if (cmd_cnt == 0 && inot_cnt == 0) { + isp_prt(isp, ISP_LOGWARN, "makes no sense to modify a lun with both command and immediate notify counts as zero"); + return (0); + } + if (cmd_cnt < 0) + el.le_ops |= LUN_CCDECR; + else + el.le_ops |= LUN_CCINCR; + if (inot_cnt < 0) + el.le_ops |= LUN_INDECR; + else + el.le_ops |= LUN_ININCR; } else { - el.le_ops = LUN_CCINCR | LUN_ININCR; + isp_prt(isp, ISP_LOGWARN, "unknown cmd (0x%x) in %s", cmd, __func__); + return (-1); } el.le_header.rqs_entry_type = cmd; el.le_header.rqs_entry_count = 1; @@ -662,8 +679,8 @@ isp_endcmd(ispsoftc_t *isp, ...) cto->rsp.m1.ct_resp[0] = 0xf0; cto->rsp.m1.ct_resp[2] = (code >> 12) & 0xf; cto->rsp.m1.ct_resp[7] = 8; - cto->rsp.m1.ct_resp[12] = (code >> 24) & 0xff; - cto->rsp.m1.ct_resp[13] = (code >> 16) & 0xff; + cto->rsp.m1.ct_resp[12] = (code >> 16) & 0xff; + cto->rsp.m1.ct_resp[13] = (code >> 24) & 0xff; } else { cto->ct_flags |= CT7_FLAG_MODE1 | CT7_SENDSTATUS; } @@ -837,7 +854,7 @@ isp_target_async(ispsoftc_t *isp, int bus, int event) default: isp_prt(isp, ISP_LOGERR, "%s: unknown event 0x%x", __func__, event); if (isp->isp_state == ISP_RUNSTATE) { - (void) isp_notify_ack(isp, NULL); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, NULL); } break; } @@ -897,13 +914,13 @@ isp_got_msg(ispsoftc_t *isp, in_entry_t *inp) break; default: isp_prt(isp, ISP_LOGERR, "%s: unhandled message 0x%x", __func__, inp->in_msg[0]); - (void) isp_notify_ack(isp, inp); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp); return; } isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); } else { isp_prt(isp, ISP_LOGERR, "%s: unknown immediate notify status 0x%x", __func__, inp->in_status); - (void) isp_notify_ack(isp, inp); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp); } } @@ -946,7 +963,7 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp) if (inp->in_status != IN_MSG_RECEIVED) { isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status", inp->in_status, notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid); - (void) isp_notify_ack(isp, inp); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp); return; } @@ -967,7 +984,7 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp) notify.nt_ncode = NT_CLEAR_ACA; } else { isp_prt(isp, ISP_LOGWARN, f2, "task flag", inp->in_status, notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid); - (void) isp_notify_ack(isp, inp); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp); return; } isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); @@ -1054,10 +1071,12 @@ isp_notify_ack(ispsoftc_t *isp, void *arg) if (IS_24XX(isp)) { na_fcentry_24xx_t *na = (na_fcentry_24xx_t *) storage; + na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK; + na->na_header.rqs_entry_count = 1; if (arg) { in_fcentry_24xx_t *in = arg; na->na_nphdl = in->in_nphdl; - na->na_flags = in->in_flags & IN24XX_FLAG_PUREX_IOCB; + na->na_flags = in->in_flags; na->na_status = in->in_status; na->na_status_subcode = in->in_status_subcode; na->na_rxid = in->in_rxid; @@ -1068,14 +1087,19 @@ isp_notify_ack(ispsoftc_t *isp, void *arg) na->na_srr_reloff_hi = in->in_srr_reloff_hi; na->na_srr_reloff_lo = in->in_srr_reloff_lo; na->na_srr_iu = in->in_srr_iu; - na->na_srr_flags = 1; - na->na_srr_reject_vunique = 0; - na->na_srr_reject_explanation = 1; - na->na_srr_reject_code = 1; + /* + * Whether we're accepting the SRR or rejecting + * it is determined by looking at the in_reserved + * field in the original notify structure. + */ + if (in->in_reserved) { + na->na_srr_flags = 1; + na->na_srr_reject_vunique = 0; + na->na_srr_reject_code = 9; /* unable to perform this command at this time */ + na->na_srr_reject_explanation = 0x2a; /* unable to supply the requested data */ + } } } - na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK; - na->na_header.rqs_entry_count = 1; isp_put_notify_24xx_ack(isp, na, (na_fcentry_24xx_t *)outp); } else if (IS_FC(isp)) { na_fcentry_t *na = (na_fcentry_t *) storage; @@ -1093,10 +1117,10 @@ isp_notify_ack(ispsoftc_t *isp, void *arg) } na->na_task_flags = inp->in_task_flags & TASK_FLAGS_RESERVED_MASK; na->na_seqid = inp->in_seqid; - na->na_flags = NAFC_RCOUNT; na->na_status = inp->in_status; + na->na_flags = NAFC_RCOUNT; if (inp->in_status == IN_RESET) { - na->na_flags |= NAFC_RST_CLRD; + na->na_flags = NAFC_RST_CLRD; /* We do not modify resource counts for LIP resets */ } if (inp->in_status == IN_MSG_RECEIVED) { na->na_flags |= NAFC_TVALID; @@ -1200,7 +1224,7 @@ isp_acknak_abts(ispsoftc_t *isp, void *arg, int errno) ISP_MEMZERO(&rsp->abts_rsp_payload.ba_rjt, sizeof (rsp->abts_rsp_payload.ba_acc)); switch (errno) { case ENOMEM: - rsp->abts_rsp_payload.ba_rjt.reason = 5; /* Logical Busy */ + rsp->abts_rsp_payload.ba_rjt.reason = 5; /* Logical Unit Busy */ break; default: rsp->abts_rsp_payload.ba_rjt.reason = 9; /* Unable to perform command request */ @@ -1771,7 +1795,7 @@ isp_handle_ctio7(ispsoftc_t *isp, ct7_entry_t *ct) break; case CT7_SRR: - isp_prt(isp, ISP_LOGWARN, "SRR received"); + isp_prt(isp, ISP_LOGTDEBUG0, "SRR received"); break; default: @@ -1789,7 +1813,7 @@ isp_handle_ctio7(ispsoftc_t *isp, ct7_entry_t *ct) */ if (ct->ct_syshandle == 0) { if (ct->ct_flags & CT7_TERMINATE) { - isp_prt(isp, ISP_LOGINFO, "termination of 0x%x complete", ct->ct_rxid); + isp_prt(isp, ISP_LOGINFO, "termination of [RX_ID 0x%x] complete", ct->ct_rxid); } else if ((ct->ct_flags & CT7_SENDSTATUS) == 0) { isp_prt(isp, pl, "intermediate CTIO completed ok"); } else { @@ -1844,7 +1868,7 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx) char buf[64]; ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __func__, chan, inot_24xx->in_status); isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx); - (void) isp_notify_ack(isp, inot_24xx); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx); return; } lochan = chan; @@ -1860,12 +1884,13 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx) case IN24XX_LINK_FAILED: case IN24XX_SRR_RCVD: case IN24XX_ELS_RCVD: + inot_24xx->in_reserved = 0; /* clear this for later usage */ inot_24xx->in_vpidx = chan; isp_async(isp, ISPASYNC_TARGET_ACTION, inot_24xx); break; default: isp_prt(isp, ISP_LOGINFO, "%s: unhandled status (0x%x) for chan %d", __func__, inot_24xx->in_status, chan); - (void) isp_notify_ack(isp, inot_24xx); + isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx); break; } } diff --git a/sys/dev/isp/isp_target.h b/sys/dev/isp/isp_target.h index 9905c4f..40a1732 100644 --- a/sys/dev/isp/isp_target.h +++ b/sys/dev/isp/isp_target.h @@ -50,6 +50,7 @@ typedef enum { NT_LINK_DOWN, NT_LOGOUT, NT_GLOBAL_LOGOUT, + NT_CHANGED, NT_ARRIVED, NT_DEPARTED, NT_HBA_RESET diff --git a/sys/dev/isp/ispmbox.h b/sys/dev/isp/ispmbox.h index c86ce60..85b31e5 100644 --- a/sys/dev/isp/ispmbox.h +++ b/sys/dev/isp/ispmbox.h @@ -428,7 +428,8 @@ typedef struct { uint8_t req_target; uint16_t req_scclun; uint16_t req_flags; - uint16_t req_reserved; + uint8_t req_crn; + uint8_t req_reserved; uint16_t req_time; uint16_t req_seg_count; uint8_t req_cdb[16]; @@ -458,7 +459,8 @@ typedef struct { uint8_t req_target; uint16_t req_scclun; uint16_t req_flags; - uint16_t req_reserved; + uint8_t req_crn; + uint8_t req_reserved; uint16_t req_time; uint16_t req_seg_count; uint8_t req_cdb[16]; @@ -473,7 +475,8 @@ typedef struct { uint16_t req_target; uint16_t req_scclun; uint16_t req_flags; - uint16_t req_reserved; + uint8_t req_crn; + uint8_t req_reserved; uint16_t req_time; uint16_t req_seg_count; uint8_t req_cdb[16]; @@ -515,40 +518,10 @@ typedef struct { uint8_t req_cdb[44]; } ispextreq_t; -/* 24XX only */ -typedef struct { - uint16_t fcd_length; - uint16_t fcd_a1500; - uint16_t fcd_a3116; - uint16_t fcd_a4732; - uint16_t fcd_a6348; -} fcp_cmnd_ds_t; - -typedef struct { - isphdr_t req_header; - uint32_t req_handle; - uint16_t req_nphdl; - uint16_t req_time; - uint16_t req_seg_count; - uint16_t req_fc_rsp_dsd_length; - uint8_t req_lun[8]; - uint16_t req_flags; - uint16_t req_fc_cmnd_dsd_length; - uint16_t req_fc_cmnd_dsd_a1500; - uint16_t req_fc_cmnd_dsd_a3116; - uint16_t req_fc_cmnd_dsd_a4732; - uint16_t req_fc_cmnd_dsd_a6348; - uint16_t req_fc_rsp_dsd_a1500; - uint16_t req_fc_rsp_dsd_a3116; - uint16_t req_fc_rsp_dsd_a4732; - uint16_t req_fc_rsp_dsd_a6348; - uint32_t req_totalcnt; - uint16_t req_tidlo; - uint8_t req_tidhi; - uint8_t req_vpidx; - ispds64_t req_dataseg; -} ispreqt6_t; +/* + * ISP24XX structures + */ typedef struct { isphdr_t req_header; uint32_t req_handle; @@ -945,7 +918,7 @@ typedef struct { #define ICBOPT_SRCHDOWN 0x0400 #define ICBOPT_NOLIP 0x0200 #define ICBOPT_PDBCHANGE_AE 0x0100 -#define ICBOPT_INI_TGTTYPE 0x0080 +#define ICBOPT_TGT_TYPE 0x0080 #define ICBOPT_INI_ADISC 0x0040 #define ICBOPT_INI_DISABLE 0x0020 #define ICBOPT_TGT_ENABLE 0x0010 @@ -1044,7 +1017,7 @@ typedef struct { #define ICB_DFLT_RCOUNT 3 #define ICB_LOGIN_TOV 30 -#define ICB_LUN_ENABLE_TOV 180 +#define ICB_LUN_ENABLE_TOV 15 /* @@ -1272,10 +1245,8 @@ typedef struct { #define PDB_STATE_PLOGO 10 #define PDB_STATE_PLOG_ACK 11 -#define SVC3_TGT_ROLE 0x10 -#define SVC3_INI_ROLE 0x20 -#define SVC3_ROLE_MASK 0x30 -#define SVC3_ROLE_SHIFT 4 +#define SVC3_ROLE_MASK 0x30 +#define SVC3_ROLE_SHIFT 4 #define BITS2WORD(x) ((x)[0] << 16 | (x)[3] << 8 | (x)[2]) #define BITS2WORD_24XX(x) ((x)[0] << 16 | (x)[1] << 8 | (x)[2]) @@ -1321,8 +1292,8 @@ typedef struct { */ typedef struct { uint16_t handle; - uint16_t reserved; - uint32_t s3_role : 8, + uint16_t prli_word3; + uint32_t : 8, portid : 24; uint8_t portname[8]; uint8_t nodename[8]; @@ -1781,6 +1752,7 @@ typedef struct { #define IN_PORT_CHANGED 0x2A /* port changed */ #define IN_GLOBAL_LOGO 0x2E /* all ports logged out */ #define IN_NO_NEXUS 0x3B /* Nexus not established */ +#define IN_SRR_RCVD 0x45 /* SRR received */ /* * Values for the in_task_flags field- should only get one at a time! @@ -1811,24 +1783,17 @@ typedef struct { uint16_t in_srr_iu; uint16_t in_srr_oxid; /* - * If bit 2 is set in in_flags, the following - * two tags are valid. If the received ELS is + * If bit 2 is set in in_flags, the N-Port and + * handle tags are valid. If the received ELS is * a LOGO, then these tags contain the N Port ID * from the LOGO payload. If the received ELS * request is TPRLO, these tags contain the * Third Party Originator N Port ID. */ uint16_t in_nport_id_hi; +#define in_prli_options in_nport_id_hi uint8_t in_nport_id_lo; uint8_t in_reserved3; - /* - * If bit 2 is set in in_flags, the following - * tag is valid. If the received ELS is a LOGO, - * then this tag contains the n-port handle - * from the LOGO payload. If the received ELS - * request is TPRLO, this tag contain the - * n-port handle for the Third Party Originator. - */ uint16_t in_np_handle; uint8_t in_reserved4[12]; uint8_t in_reserved5; @@ -2183,7 +2148,7 @@ typedef struct { uint8_t ct_tag_val; /* tag value */ uint8_t ct_tag_type; /* tag type */ uint32_t ct_xfrlen; /* transfer length */ - int32_t ct_resid; /* residual length */ + uint32_t ct_resid; /* residual length */ uint16_t ct_timeout; uint16_t ct_seg_count; ispds_t ct_dataseg[ISP_RQDSEG]; @@ -2206,8 +2171,8 @@ typedef struct { * ct_flags values */ #define CT_TQAE 0x00000002 /* bit 1, Tagged Queue Action enable */ -#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction */ -#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction */ +#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction - *to* initiator */ +#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction - *from* initiator */ #define CT_NO_DATA 0x000000C0 /* bits 6&7, Data direction */ #define CT_CCINCR 0x00000100 /* bit 8, autoincrement atio count */ #define CT_DATAMASK 0x000000C0 /* bits 6&7, Data direction */ @@ -2278,7 +2243,7 @@ typedef struct { uint16_t ct_timeout; uint16_t ct_seg_count; uint32_t ct_reloff; /* relative offset */ - int32_t ct_resid; /* residual length */ + uint32_t ct_resid; /* residual length */ union { /* * The three different modes that the target driver @@ -2317,7 +2282,10 @@ typedef struct { uint16_t _reserved2; uint16_t _reserved3; uint32_t ct_datalen; - ispds_t ct_fcp_rsp_iudata; + union { + ispds_t ct_fcp_rsp_iudata_32; + ispds64_t ct_fcp_rsp_iudata_64; + } u; } m2; } rsp; } ct2_entry_t; @@ -2332,7 +2300,7 @@ typedef struct { uint16_t ct_timeout; uint16_t ct_seg_count; uint32_t ct_reloff; /* relative offset */ - int32_t ct_resid; /* residual length */ + uint32_t ct_resid; /* residual length */ union { struct { uint32_t _reserved; @@ -2358,7 +2326,10 @@ typedef struct { uint16_t _reserved2; uint16_t _reserved3; uint32_t ct_datalen; - ispds_t ct_fcp_rsp_iudata; + union { + ispds_t ct_fcp_rsp_iudata_32; + ispds64_t ct_fcp_rsp_iudata_64; + } u; } m2; } rsp; } ct2e_entry_t; @@ -2370,8 +2341,8 @@ typedef struct { #define CT2_FLAG_MODE1 0x0001 #define CT2_FLAG_MODE2 0x0002 #define CT2_FLAG_MMASK 0x0003 -#define CT2_DATA_IN 0x0040 -#define CT2_DATA_OUT 0x0080 +#define CT2_DATA_IN 0x0040 /* *to* initiator */ +#define CT2_DATA_OUT 0x0080 /* *from* initiator */ #define CT2_NO_DATA 0x00C0 #define CT2_DATAMASK 0x00C0 #define CT2_CCINCR 0x0100 @@ -2412,7 +2383,7 @@ typedef struct { uint32_t ct_rxid; uint16_t ct_senselen; /* mode 1 only */ uint16_t ct_flags; - int32_t ct_resid; /* residual length */ + uint32_t ct_resid; /* residual length */ uint16_t ct_oxid; uint16_t ct_scsi_status; /* modes 0 && 1 only */ union { @@ -2430,8 +2401,9 @@ typedef struct { } m1; struct { uint32_t reserved0; - uint32_t ct_datalen; uint32_t reserved1; + uint32_t ct_datalen; + uint32_t reserved2; ispds64_t ct_fcp_rsp_iudata; } m2; } rsp; @@ -2440,10 +2412,10 @@ typedef struct { /* * ct_flags values for CTIO7 */ -#define CT7_DATA_IN 0x0002 -#define CT7_DATA_OUT 0x0001 #define CT7_NO_DATA 0x0000 -#define CT7_DATAMASK 0x003 +#define CT7_DATA_OUT 0x0001 /* *from* initiator */ +#define CT7_DATA_IN 0x0002 /* *to* initiator */ +#define CT7_DATAMASK 0x3 #define CT7_DSD_ENABLE 0x0004 #define CT7_CONF_STSFD 0x0010 #define CT7_EXPLCT_CONF 0x0020 @@ -2451,9 +2423,9 @@ typedef struct { #define CT7_FLAG_MODE1 0x0040 #define CT7_FLAG_MODE2 0x0080 #define CT7_FLAG_MMASK 0x00C0 -#define CT7_NOACK 0x0100 +#define CT7_NOACK 0x0100 #define CT7_TASK_ATTR_SHIFT 9 -#define CT7_CONFIRM 0x2000 +#define CT7_CONFIRM 0x2000 #define CT7_TERMINATE 0x4000 #define CT7_SENDSTATUS 0x8000 diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h index 253cdd3..2023f61 100644 --- a/sys/dev/isp/ispvar.h +++ b/sys/dev/isp/ispvar.h @@ -77,7 +77,7 @@ struct ispmdvec { */ #define MAX_TARGETS 16 #ifndef MAX_FC_TARG -#define MAX_FC_TARG 512 +#define MAX_FC_TARG 256 #endif #define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS) #define ISP_MAX_LUNS(isp) (isp)->isp_maxluns @@ -400,9 +400,9 @@ typedef struct { * A device is 'autologin' if the firmware automatically logs into * it (re-logins as needed). Basically, local private loop devices. * - * The state is the current state of this entry. + * PRLI word 3 parameters contains role as well as other things. * - * Role is Initiator, Target, Both + * The state is the current state of this entry. * * Portid is obvious, as are node && port WWNs. The new_role and * new_portid is for when we are pending a change. @@ -412,17 +412,18 @@ typedef struct { * You should also never see anything with an initiator role * with this set. */ + uint16_t prli_word3; /* PRLI parameters */ + uint16_t new_prli_word3; /* Incoming new PRLI parameters */ uint16_t dev_map_idx : 12, autologin : 1, /* F/W does PLOGI/PLOGO */ state : 3; - uint32_t reserved : 5, + uint32_t : 7, target_mode : 1, - roles : 2, portid : 24; uint32_t + : 6, + announced : 1, dirty : 1, /* commands have been run */ - new_reserved : 5, - new_roles : 2, new_portid : 24; uint64_t node_wwn; uint64_t port_wwn; @@ -447,6 +448,7 @@ typedef struct { typedef struct { uint32_t + fctape_enabled : 1, link_active : 1, sendmarker : 1, role : 2, @@ -680,21 +682,24 @@ struct ispsoftc { /* * ISP Runtime Configuration Options */ -#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */ -#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */ -#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */ -#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */ #define ISP_CFG_FULL_DUPLEX 0x01 /* Full Duplex (Fibre Channel only) */ -#define ISP_CFG_PORT_PREF 0x0C /* Mask for Port Prefs (2200 only) */ +#define ISP_CFG_PORT_PREF 0x0c /* Mask for Port Prefs (all FC except 2100) */ #define ISP_CFG_LPORT 0x00 /* prefer {N/F}L-Port connection */ #define ISP_CFG_NPORT 0x04 /* prefer {N/F}-Port connection */ #define ISP_CFG_NPORT_ONLY 0x08 /* insist on {N/F}-Port connection */ -#define ISP_CFG_LPORT_ONLY 0x0C /* insist on {N/F}L-Port connection */ +#define ISP_CFG_LPORT_ONLY 0x0c /* insist on {N/F}L-Port connection */ +#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */ +#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */ +#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */ +#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */ +#define ISP_CFG_NOFCTAPE 0x100 /* disable FC-Tape */ +#define ISP_CFG_FCTAPE 0x200 /* enable FC-Tape */ #define ISP_CFG_OWNFSZ 0x400 /* override NVRAM frame size */ #define ISP_CFG_OWNLOOPID 0x800 /* override NVRAM loopid */ #define ISP_CFG_OWNEXCTHROTTLE 0x1000 /* override NVRAM execution throttle */ #define ISP_CFG_FOURGB 0x2000 /* force 4GB connection (24XX only) */ #define ISP_CFG_EIGHTGB 0x4000 /* force 8GB connection (25XX only) */ +#define ISP_CFG_SIXTEENGB 0x8000 /* force 16GB connection (82XX only) */ /* * For each channel, the outer layers should know what role that channel @@ -951,6 +956,7 @@ typedef enum { ISPASYNC_DEV_STAYED, /* FC Device Stayed */ ISPASYNC_DEV_GONE, /* FC Device Departure */ ISPASYNC_TARGET_NOTIFY, /* All target async notification */ + ISPASYNC_TARGET_NOTIFY_ACK, /* All target notify ack required */ ISPASYNC_TARGET_ACTION, /* All target action requested */ ISPASYNC_FW_CRASH, /* All Firmware has crashed */ ISPASYNC_FW_RESTARTED /* All Firmware has been restarted */ @@ -987,8 +993,9 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *); #define ISP_LOGDEBUG1 0x20 /* log intermediate debug messages */ #define ISP_LOGDEBUG2 0x40 /* log most debug messages */ #define ISP_LOGDEBUG3 0x80 /* log high frequency debug messages */ -#define ISP_LOGSANCFG 0x100 /* log SAN configuration */ +#define ISP_LOG_SANCFG 0x100 /* log SAN configuration */ #define ISP_LOG_CWARN 0x200 /* log SCSI command "warnings" (e.g., check conditions) */ +#define ISP_LOG_WARN1 0x400 /* log WARNS we might be interested at some time */ #define ISP_LOGTINFO 0x1000 /* log informational messages (target mode) */ #define ISP_LOGTDEBUG0 0x2000 /* log simple debug messages (target mode) */ #define ISP_LOGTDEBUG1 0x4000 /* log intermediate debug messages (target) */ @@ -1063,7 +1070,8 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *); * XS_GET_RESID(xs, resid) sets the current residual count * XS_STSP(xs) gets a pointer to the SCSI status byte "" * XS_SNSP(xs) gets a pointer to the associate sense data - * XS_SNSLEN(xs) gets the length of sense data storage + * XS_TOT_SNSLEN(xs) gets the total length of sense data storage + * XS_CUR_SNSLEN(xs) gets the currently used lenght of sense data storage * XS_SNSKEY(xs) dereferences XS_SNSP to get the current stored Sense Key * XS_SNSASC(xs) dereferences XS_SNSP to get the current stored Additional Sense Code * XS_SNSASCQ(xs) dereferences XS_SNSP to get the current stored Additional Sense Code Qualifier @@ -1085,7 +1093,9 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *); * XS_NOERR(xs) there is no error currently set * XS_INITERR(xs) initialize error state * - * XS_SAVE_SENSE(xs, sp, len) save sense data + * XS_SAVE_SENSE(xs, sp, total_len, this_len) save sense data (total and current amount) + * + * XS_APPEND_SENSE(xs, sp, len) append more sense data * * XS_SENSE_VALID(xs) indicates whether sense is valid * @@ -1154,8 +1164,8 @@ int isp_acknak_abts(ispsoftc_t *, void *, int); * Enable/Disable/Modify a logical unit. * (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt) */ -#define DFLT_CMND_CNT 0xfe /* unmonitored */ -#define DFLT_INOT_CNT 0xfe /* unmonitored */ +#define DFLT_CMND_CNT 0xff /* unmonitored */ +#define DFLT_INOT_CNT 0xff /* unmonitored */ int isp_lun_cmd(ispsoftc_t *, int, int, int, int, int); /* diff --git a/sys/dev/ispfw/asm_2300.h b/sys/dev/ispfw/asm_2300.h index c108cb4..5903ba3 100644 --- a/sys/dev/ispfw/asm_2300.h +++ b/sys/dev/ispfw/asm_2300.h @@ -27,17 +27,17 @@ /************************************************************************ * * - * --- ISP2300 Initiator/Target Firmware --- * - * with Fabric support (Public Loop), with expanded LUN * - * addressing and 2K port logins. * + * --- ISP2300 Initiator/Target Firmware --- * + * with Fabric (Public Loop), Point-point, * + * expanded LUN addressing for FCTAPE, and 2K port logins * * * ************************************************************************/ /* - * Firmware Version 3.03.26 (16:54 Aug 14, 2007) + * Firmware Version 3.03.26 (16:58 Aug 14, 2007) */ static const uint16_t isp_2300_risc_code[] = { - 0x0470, 0x0000, 0x0000, 0xd048, 0x0000, 0x0003, 0x0003, 0x001a, - 0x0107, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030, + 0x0470, 0x0000, 0x0000, 0xddef, 0x0000, 0x0003, 0x0003, 0x001a, + 0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030, 0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030, @@ -50,487 +50,496 @@ static const uint16_t isp_2300_risc_code[] = { 0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001, 0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78, - 0x7883, 0x0004, 0x2089, 0x2bf2, 0x2051, 0x1800, 0x2a70, 0x20e1, - 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e53, 0x2029, - 0x3500, 0x2031, 0xffff, 0x2039, 0x34c8, 0x2021, 0x0200, 0x20e9, + 0x7883, 0x0004, 0x2089, 0x2c69, 0x2051, 0x1800, 0x2a70, 0x20e1, + 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029, + 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9, 0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9, 0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff, 0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8, 0x4104, 0x8001, 0x1de0, 0x756a, 0x766e, 0x7766, 0x7472, 0x7476, - 0x00e6, 0x2071, 0x1aa0, 0x2472, 0x00ee, 0x20a1, 0x1cc8, 0x716c, + 0x00e6, 0x2071, 0x1aac, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x716c, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001, 0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x716c, 0x3400, 0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e, - 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f19, 0x080c, - 0x5f04, 0x080c, 0x9eae, 0x080c, 0x10d0, 0x080c, 0x12b8, 0x080c, - 0x1a99, 0x080c, 0x0d58, 0x080c, 0x1055, 0x080c, 0x32cc, 0x080c, - 0x75f0, 0x080c, 0x6836, 0x080c, 0x8273, 0x080c, 0x235c, 0x080c, - 0x857b, 0x080c, 0x7c59, 0x080c, 0x2191, 0x080c, 0x22c5, 0x080c, - 0x2351, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880, + 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f25, 0x080c, + 0x5fc1, 0x080c, 0xa333, 0x080c, 0x10dc, 0x080c, 0x12c4, 0x080c, + 0x1ae1, 0x080c, 0x0d55, 0x080c, 0x1061, 0x080c, 0x3368, 0x080c, + 0x7660, 0x080c, 0x695d, 0x080c, 0x83d5, 0x080c, 0x23a4, 0x080c, + 0x874c, 0x080c, 0x7cf9, 0x080c, 0x21d9, 0x080c, 0x230d, 0x080c, + 0x2399, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, - 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1800, 0x7003, + 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c, - 0x4b82, 0x080c, 0x32f3, 0x080c, 0x7661, 0x080c, 0x6d5c, 0x080c, - 0x829f, 0x080c, 0x2b09, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941, - 0x0ade, 0x093e, 0x0b9e, 0x0d57, 0x0d57, 0x0d57, 0x080c, 0x0dc4, + 0x4c32, 0x080c, 0x338f, 0x080c, 0x76d1, 0x080c, 0x6e62, 0x080c, + 0x8401, 0x080c, 0x2b72, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941, + 0x0ade, 0x093e, 0x0b9e, 0x0d54, 0x0d54, 0x0d54, 0x080c, 0x0dc3, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001, - 0x1904, 0x0ab1, 0x080c, 0x0ecd, 0x080c, 0x72e5, 0x0150, 0x080c, - 0x7308, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, - 0x0478, 0x080c, 0x7212, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1, - 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x8253, 0x080c, - 0x8245, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003, + 0x1904, 0x0ab1, 0x080c, 0x0e93, 0x080c, 0x7351, 0x0150, 0x080c, + 0x7374, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a, + 0x0478, 0x080c, 0x727e, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1, + 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x83b5, 0x080c, + 0x83a7, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003, 0x0001, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, - 0x7176, 0x080c, 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x2011, - 0x5d5f, 0x080c, 0x835e, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, - 0x080c, 0x5607, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1, - 0x2011, 0x5d5f, 0x080c, 0x835e, 0x2011, 0x7176, 0x080c, 0x835e, - 0x2011, 0x7169, 0x080c, 0x8474, 0x2001, 0x0265, 0x2001, 0x0205, + 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2011, + 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, + 0x080c, 0x56c4, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1, + 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x71cd, 0x080c, 0x84c2, + 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1983, - 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5eac, - 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x72ed, + 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5f69, + 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x7359, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011, - 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x29ae, - 0x080c, 0x4abd, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, - 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x98cb, 0x2011, 0x0004, 0x080c, - 0xb965, 0x080c, 0x664c, 0x080c, 0x72e5, 0x1120, 0x080c, 0x29f2, - 0x02e0, 0x0400, 0x080c, 0x5eb3, 0x0140, 0x7093, 0x0001, 0x70cf, - 0x0000, 0x080c, 0x57d9, 0x0804, 0x0ab1, 0x080c, 0x55a7, 0xd094, - 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x55ab, - 0xd0d4, 0x1118, 0x080c, 0x29f2, 0x1270, 0x2011, 0x180c, 0x2204, - 0xc0bc, 0x00a8, 0x080c, 0x55ab, 0xd0d4, 0x1db8, 0x2011, 0x180c, + 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x2a17, + 0x080c, 0x4b6d, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, + 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x9b9c, 0x2011, 0x0004, 0x080c, + 0xc1dd, 0x080c, 0x6758, 0x080c, 0x7351, 0x1120, 0x080c, 0x2a5b, + 0x02e0, 0x0400, 0x080c, 0x5f70, 0x0140, 0x7093, 0x0001, 0x70cf, + 0x0000, 0x080c, 0x5896, 0x0804, 0x0ab1, 0x080c, 0x5664, 0xd094, + 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5668, + 0xd0d4, 0x1118, 0x080c, 0x2a5b, 0x1270, 0x2011, 0x180c, 0x2204, + 0xc0bc, 0x00a8, 0x080c, 0x5668, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, - 0x080c, 0x673e, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012, - 0x080c, 0x6704, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b, - 0x0000, 0x080c, 0x72e5, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c, - 0xbc7a, 0x0050, 0x080c, 0xbc7a, 0x70d8, 0xd09c, 0x1128, 0x70ac, - 0x9005, 0x0110, 0x080c, 0x5e89, 0x70e3, 0x0000, 0x70df, 0x0000, - 0x70a3, 0x0000, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204, - 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x72e5, 0x1178, 0x9016, 0x0016, - 0x080c, 0x27b7, 0x2019, 0x194a, 0x211a, 0x001e, 0x705b, 0xffff, - 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x194a, 0x201b, + 0x080c, 0x6865, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012, + 0x080c, 0x682b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b, + 0x0000, 0x080c, 0x7351, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c, + 0xc617, 0x0050, 0x080c, 0xc617, 0x70d8, 0xd09c, 0x1128, 0x70ac, + 0x9005, 0x0110, 0x080c, 0x5f46, 0x70e3, 0x0000, 0x70df, 0x0000, + 0x70a3, 0x0000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, + 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x7351, 0x1178, 0x9016, 0x0016, + 0x080c, 0x2820, 0x2019, 0x1949, 0x211a, 0x001e, 0x705b, 0xffff, + 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x1949, 0x201b, 0x0000, 0x2079, 0x185e, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da, - 0x080c, 0x72e5, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, - 0x080c, 0xb965, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, + 0x080c, 0x7351, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001, + 0x080c, 0xc1dd, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, - 0x00fe, 0x080c, 0x2e5f, 0x2011, 0x0005, 0x080c, 0x99d6, 0x080c, - 0x8c37, 0x080c, 0x72e5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, - 0x080c, 0x27b7, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7, + 0x00fe, 0x080c, 0x2ed6, 0x2011, 0x0005, 0x080c, 0x9ca7, 0x080c, + 0x8e38, 0x080c, 0x7351, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, + 0x080c, 0x2820, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011, - 0x0005, 0x080c, 0x99d6, 0x080c, 0x8c37, 0x080c, 0x72e5, 0x0148, - 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x27b7, 0x61e2, 0x001e, - 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x72e5, - 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x72e5, + 0x0005, 0x080c, 0x9ca7, 0x080c, 0x8e38, 0x080c, 0x7351, 0x0148, + 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2820, 0x61e2, 0x001e, + 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351, + 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180, - 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x3162, + 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x31fe, 0x8108, 0x1f04, 0x0ac5, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b9b, 0x70a8, - 0x9086, 0xffff, 0x0130, 0x080c, 0x2e5f, 0x080c, 0x8c37, 0x0804, + 0x9086, 0xffff, 0x0130, 0x080c, 0x2ed6, 0x080c, 0x8e38, 0x0804, 0x0b9b, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, 0x0508, - 0x080c, 0x31c5, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, - 0x2fd8, 0x080c, 0x8c37, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011, - 0x0001, 0x080c, 0xbef8, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, - 0x3012, 0x080c, 0x8c37, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904, + 0x080c, 0x3261, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, + 0x306e, 0x080c, 0x8e38, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011, + 0x0001, 0x080c, 0xc8ce, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, + 0x30a8, 0x080c, 0x8e38, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904, 0x0b9b, 0x70a4, 0x9005, 0x1904, 0x0b9b, 0x70d8, 0xd0a4, 0x0118, - 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x6704, 0x1904, 0x0b9b, 0x080c, - 0x6757, 0x1904, 0x0b9b, 0x080c, 0x673e, 0x01c0, 0x0156, 0x00c6, - 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6411, 0x1118, 0xb800, + 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x682b, 0x1904, 0x0b9b, 0x080c, + 0x687e, 0x1904, 0x0b9b, 0x080c, 0x6865, 0x01c0, 0x0156, 0x00c6, + 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b3b, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b9b, 0x0006, 0x2001, - 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f89, - 0x2011, 0x19aa, 0x080c, 0x0f89, 0x7030, 0xc08c, 0x7032, 0x7003, - 0x0003, 0x70ab, 0xffff, 0x080c, 0x0ecd, 0x9006, 0x080c, 0x264c, - 0x080c, 0x31c5, 0x0118, 0x080c, 0x4c5a, 0x0050, 0x0036, 0x0046, - 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e, 0x003e, - 0x00f6, 0x2079, 0x0100, 0x080c, 0x7308, 0x0150, 0x080c, 0x72e5, + 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f95, + 0x2011, 0x19aa, 0x080c, 0x0f95, 0x7030, 0xc08c, 0x7032, 0x7003, + 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e75, 0x9006, 0x080c, 0x26b1, + 0x080c, 0x3261, 0x0118, 0x080c, 0x4d0a, 0x0050, 0x0036, 0x0046, + 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e, + 0x00f6, 0x2079, 0x0100, 0x080c, 0x7374, 0x0150, 0x080c, 0x7351, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x2001, 0x19c5, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, - 0x0000, 0x080c, 0x99d6, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c, - 0x8c37, 0x080c, 0x8d06, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, + 0x0000, 0x080c, 0x9ca7, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c, + 0x8e38, 0x080c, 0x8f0e, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, - 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x7940, 0x918c, + 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x7940, 0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac, 0x1904, 0x0c2b, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, 0x080c, - 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x0001, - 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006, 0x080c, - 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85, 0x1d50, - 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x27eb, - 0x0804, 0x0d0a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118, - 0x080c, 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6, - 0x080c, 0x75dc, 0x080c, 0x7212, 0x0058, 0x080c, 0x72e5, 0x0140, - 0x2009, 0x00f8, 0x080c, 0x5e72, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x72e5, 0x0138, - 0x7824, 0xd0ac, 0x1904, 0x0d0f, 0x1f04, 0x0c0a, 0x0070, 0x7824, - 0x080c, 0x72ff, 0x0118, 0xd0ac, 0x1904, 0x0d0f, 0x9084, 0x1800, - 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d0f, 0x2001, 0x0001, 0x080c, - 0x264c, 0x0804, 0x0d22, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, - 0x080c, 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, - 0x0001, 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006, - 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85, + 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001, + 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006, 0x080c, + 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee, 0x1d50, + 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2854, + 0x0804, 0x0d0b, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118, + 0x080c, 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656, + 0x080c, 0x764c, 0x080c, 0x727e, 0x0058, 0x080c, 0x7351, 0x0140, + 0x2009, 0x00f8, 0x080c, 0x5f2f, 0x7843, 0x0090, 0x7843, 0x0010, + 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x7351, 0x0138, + 0x7824, 0xd0ac, 0x1904, 0x0d10, 0x1f04, 0x0c0a, 0x0070, 0x7824, + 0x080c, 0x736b, 0x0118, 0xd0ac, 0x1904, 0x0d10, 0x9084, 0x1800, + 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d10, 0x2001, 0x0001, 0x080c, + 0x26b1, 0x0804, 0x0d23, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, + 0x080c, 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, + 0x0001, 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006, + 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee, 0x1d50, 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, - 0x27eb, 0x0804, 0x0d0a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, - 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000, - 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x8454, + 0x2854, 0x0804, 0x0d0b, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938, + 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000, + 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x85c0, 0x1f04, 0x0c64, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, - 0x793a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118, 0x080c, - 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6, 0x080c, - 0x75dc, 0x080c, 0x7212, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5e72, + 0x793a, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118, 0x080c, + 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656, 0x080c, + 0x764c, 0x080c, 0x727e, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f2f, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c8a, 0x7850, 0x9085, 0x1400, - 0x7852, 0x080c, 0x72e5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, - 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8454, 0x7820, 0xd09c, - 0x1580, 0x080c, 0x72e5, 0x0904, 0x0cef, 0x7824, 0xd0ac, 0x1904, - 0x0d0f, 0x080c, 0x7308, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421, - 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x9084, - 0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004, - 0xd0fc, 0x0110, 0x080c, 0x0d34, 0x8421, 0x1158, 0x1d04, 0x0cca, - 0x080c, 0x8454, 0x080c, 0x75e6, 0x080c, 0x75dc, 0x7003, 0x0001, - 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0cd7, 0x080c, 0x8454, 0x2009, - 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b, - 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2a6e, 0x7924, - 0x080c, 0x2a8d, 0xd19c, 0x0110, 0x080c, 0x29ae, 0x00d8, 0x080c, - 0x72f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x72bd, 0x7003, - 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x080c, - 0x72ff, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003, - 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x264c, 0x0078, 0x2009, - 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906, - 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085, - 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006, 0x78f2, - 0x015e, 0x003e, 0x000e, 0x080c, 0x55b6, 0x090c, 0x0e64, 0x012e, - 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, - 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, - 0x8454, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, - 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004, - 0x9086, 0x0001, 0x1110, 0x080c, 0x32f3, 0x00ee, 0x0005, 0x0005, - 0x2a70, 0x2061, 0x1988, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, - 0x001a, 0x600f, 0x0107, 0x2001, 0x1959, 0x900e, 0x2102, 0x7192, - 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, - 0x0008, 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc7a, - 0x2061, 0x1949, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, - 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, - 0x2061, 0x1951, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, - 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965, - 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, - 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6411, 0x1178, - 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, - 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, - 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, - 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc6, - 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, - 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, - 0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c, - 0x78b2, 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004, - 0x78ba, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000, - 0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84, - 0x7a08, 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c, - 0x226a, 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016, - 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, - 0x1a9e, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, - 0x2019, 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, - 0x2069, 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, - 0x8d68, 0x8318, 0x1f04, 0x0e25, 0x002e, 0x003e, 0x00de, 0x015e, - 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130, - 0x2001, 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a, - 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x55b6, 0x1110, 0x080c, - 0x0e9b, 0x0cd0, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, - 0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, - 0x2001, 0x017f, 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1826, - 0x2f04, 0x8000, 0x207a, 0x080c, 0x2a85, 0x1150, 0x0006, 0x2001, - 0x1974, 0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010, - 0x9082, 0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1829, 0x2f04, - 0x9084, 0x0001, 0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x1829, - 0x2f7c, 0x8fff, 0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0ee1, - 0x002e, 0x0030, 0x0026, 0x2011, 0x0000, 0x080c, 0x0ee1, 0x002e, - 0x000e, 0x00fe, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, - 0x0ee1, 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x2011, 0x0040, 0x04c9, - 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x0c80, 0x2011, 0x0040, 0x0488, - 0x2011, 0x0080, 0x0470, 0x0005, 0x0026, 0x70eb, 0x0000, 0x04b1, - 0x1148, 0x080c, 0x2a85, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, - 0x8282, 0x0040, 0x080c, 0x2a85, 0x1118, 0x2011, 0xcdc5, 0x0010, - 0x2011, 0xcac2, 0x0441, 0x002e, 0x0005, 0x080c, 0x55b6, 0x1140, - 0x0026, 0x2001, 0x1800, 0x2004, 0x9084, 0x0007, 0x0013, 0x002e, - 0x0005, 0x0ecc, 0x0eb0, 0x0eb0, 0x0ead, 0x0e64, 0x0eb0, 0x0eb0, - 0x0e64, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, - 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x1839, - 0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, 0x190c, 0x0dc4, 0x70e4, - 0xd0e4, 0x0108, 0xc2e5, 0x72e6, 0xd0e4, 0x1118, 0x9294, 0x00c0, - 0x0c01, 0x0005, 0x1d04, 0x0f02, 0x2091, 0x6000, 0x1f04, 0x0f02, - 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0, - 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e, - 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188e, 0x600b, - 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009, - 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555, - 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306, - 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98, - 0x000e, 0x200f, 0x2001, 0x189e, 0x928a, 0x000e, 0x1638, 0x928a, - 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006, - 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003, - 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001, - 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0, - 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e, - 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f09, 0x2100, - 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518, - 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e, - 0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0, 0x9006, 0x2009, - 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009, - 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x7078, - 0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c, - 0x23a0, 0x900e, 0x080c, 0x0da4, 0x2001, 0x0000, 0x810f, 0x20a9, - 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000, - 0x0006, 0x080c, 0x1033, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071, - 0x1800, 0x080c, 0x10ac, 0x090c, 0x0dc4, 0x00ee, 0x0005, 0x0086, - 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9, - 0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210, - 0x9906, 0x090c, 0x0dc4, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dc4, - 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e, - 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, - 0x1911, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906, - 0x090c, 0x0dc4, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e, - 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70bc, - 0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800, - 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, - 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, - 0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be, 0x702c, 0x2048, - 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, - 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, - 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, - 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, - 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, - 0x080c, 0x8245, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, - 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, - 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, - 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7000, 0x9005, - 0x11a0, 0x2001, 0x04d4, 0xa802, 0x2048, 0x2009, 0x3500, 0x8940, - 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800, - 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7104, - 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b, - 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802, - 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848, - 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071, - 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00, - 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982, - 0x0440, 0x0278, 0x9982, 0x04d4, 0x0288, 0x9982, 0x0800, 0x1270, - 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188e, 0x7010, 0x9902, - 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8, - 0x00e6, 0x2071, 0x19f7, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022, - 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071, - 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x10e4, 0x702b, - 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0xa073, - 0x0000, 0x2071, 0x19f7, 0x701c, 0x9088, 0x1a01, 0x280a, 0x8000, - 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0dc4, 0x7004, - 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee, - 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x19f7, - 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe, - 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007, - 0x0006, 0x7000, 0x0002, 0x112d, 0x112b, 0x112b, 0x112b, 0x12a7, - 0x12a7, 0x12a7, 0x12a7, 0x080c, 0x0dc4, 0x701c, 0x7120, 0x9106, - 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007, - 0x0000, 0x0005, 0x0096, 0x9180, 0x1a01, 0x2004, 0x700a, 0x2048, - 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa890, 0x7802, - 0xa894, 0x7806, 0xa898, 0x780a, 0xa89c, 0x780e, 0xa87c, 0x700e, - 0xa874, 0x7016, 0xa878, 0x701a, 0xa86c, 0x009e, 0xd084, 0x0120, - 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005, - 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, - 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020, - 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136, - 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000, - 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, - 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203, - 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e, - 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0016, 0x2009, 0x19f7, - 0x2104, 0xc095, 0x200a, 0x080c, 0x110a, 0x001e, 0x0005, 0x0016, - 0x00e6, 0x2071, 0x19f7, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc, - 0x190c, 0x0dbd, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700, - 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x111b, 0x11c5, - 0x11f9, 0x0dc4, 0x0dc4, 0x12b3, 0x0dc4, 0x918c, 0x0700, 0x1550, - 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1, - 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005, - 0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578, - 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x1160, 0x0005, 0x7008, - 0x0096, 0x2048, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c, - 0x111b, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e, - 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800, - 0x7802, 0x7804, 0x7806, 0x080c, 0x1175, 0x0005, 0x7008, 0x0096, - 0x2048, 0xa873, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096, - 0x7008, 0x2048, 0x7800, 0xa892, 0x7804, 0xa896, 0x7808, 0xa89a, - 0x780c, 0xa89e, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096, - 0x00d6, 0x7008, 0x2048, 0x2001, 0x18ba, 0x2004, 0x9906, 0x1128, - 0xa8a0, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096, - 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa8a0, 0x0086, 0x2940, - 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x110a, 0x0005, 0x00de, - 0x009e, 0x080c, 0x110a, 0x0005, 0xa8ac, 0xd08c, 0x0005, 0x0096, - 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0130, - 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0xa898, 0x908e, - 0x006b, 0x090c, 0x469d, 0x080c, 0x6b11, 0xa0a3, 0x0000, 0xa0a7, - 0x0000, 0x2848, 0x080c, 0x1033, 0x009e, 0x0005, 0x00a6, 0xa0a4, - 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0128, 0xa87f, - 0x0001, 0xa887, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, - 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, - 0x9084, 0xffc0, 0x9080, 0x0002, 0xa07a, 0xa176, 0xb000, 0xa07e, - 0x2810, 0x080c, 0x10eb, 0x00c8, 0xa980, 0xa898, 0x0016, 0x0006, - 0x080c, 0x6b11, 0x000e, 0x001e, 0xd1a4, 0x0128, 0x00c6, 0x2060, - 0x080c, 0x9f18, 0x00ce, 0x7008, 0x2048, 0xa8a3, 0x0000, 0xa8a7, - 0x0000, 0x080c, 0x1033, 0x080c, 0x110a, 0x00ae, 0x0005, 0x0126, - 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, - 0x7002, 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x111b, 0x0005, - 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a41, 0x7003, - 0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, - 0x780f, 0x0000, 0x20a9, 0x0259, 0x2061, 0xd387, 0x2c0d, 0x7912, - 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12ce, 0x7807, 0x0007, - 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, - 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a42, - 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab, - 0x0002, 0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, - 0x0031, 0x782b, 0x1a64, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, - 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a64, - 0x602f, 0x1cc8, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cc8, 0x6032, - 0x603b, 0x1f70, 0x2001, 0x31cc, 0xd0fc, 0x190c, 0x0dc4, 0x2001, - 0x1810, 0x2004, 0xd0c4, 0x1128, 0x2001, 0x0003, 0x2004, 0xd0d4, - 0x1118, 0x783f, 0x31cc, 0x0020, 0x9084, 0xc000, 0x783f, 0xb1cc, - 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0030, - 0x190c, 0x0dbd, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15f0, - 0x908a, 0x0024, 0x1a0c, 0x0dc4, 0x0023, 0x012e, 0x0005, 0x012e, - 0x0005, 0x1366, 0x1366, 0x137d, 0x1382, 0x1386, 0x138b, 0x13b3, - 0x13b7, 0x13c5, 0x13c9, 0x1366, 0x1452, 0x1456, 0x14c6, 0x1366, - 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, - 0x1366, 0x1366, 0x1366, 0x1366, 0x138d, 0x1366, 0x1366, 0x1366, - 0x1366, 0x1366, 0x1366, 0x136a, 0x1368, 0x1366, 0x080c, 0x0dc4, - 0x080c, 0x0dbd, 0x080c, 0x14cd, 0x2009, 0x1a59, 0x2104, 0x8000, - 0x200a, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005, 0x2009, 0x0048, - 0x2060, 0x080c, 0x9f88, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, - 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x14cd, - 0x080c, 0x1636, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x14cd, 0x2060, - 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, - 0x080c, 0x9f88, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, - 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, - 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14d2, 0x2001, 0x0307, - 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, - 0x14cd, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, - 0x2009, 0x0048, 0x080c, 0x9f88, 0x0005, 0x080c, 0x14cd, 0x080c, - 0x0dc4, 0x080c, 0x14cd, 0x080c, 0x143d, 0x7827, 0x0018, 0x79ac, - 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, - 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, - 0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b, - 0x0000, 0xd1bc, 0x090c, 0x0dc4, 0x2001, 0x020d, 0x2003, 0x0050, - 0x2003, 0x0020, 0x0478, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, - 0x1456, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dc4, - 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01d8, 0x080c, - 0x7d22, 0x080c, 0x199b, 0x080c, 0xb955, 0x0158, 0xa9b0, 0xa936, - 0xa9b4, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa884, 0xc0bd, - 0xa886, 0xa984, 0x9184, 0x0020, 0x1120, 0xc1ad, 0xa986, 0x080c, - 0xb5c5, 0x0005, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, - 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd314, 0xd5a4, 0x1118, - 0x080c, 0x14d2, 0x0005, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005, - 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, - 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, - 0x0120, 0x2001, 0x0016, 0x080c, 0x1553, 0x00fe, 0x007e, 0x006e, - 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, - 0x0004, 0x190c, 0x0dc4, 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, - 0x7106, 0x0016, 0x080c, 0x1619, 0x001e, 0x0148, 0x2001, 0x020d, - 0x2003, 0x0050, 0x2003, 0x0020, 0x080c, 0x14d2, 0x0005, 0x81ff, - 0x190c, 0x0dc4, 0x0005, 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, - 0x0016, 0x00e6, 0x1904, 0x14bb, 0x2071, 0x0200, 0x080c, 0x160d, - 0x080c, 0x1619, 0x05a8, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, - 0xa868, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, - 0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, - 0x1679, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x17bd, 0x00fe, - 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, - 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040, - 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12de, 0x7803, 0x0001, - 0x00ee, 0x001e, 0x0005, 0x080c, 0x1619, 0x0dd0, 0x2001, 0x020d, - 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060, - 0x2009, 0x0053, 0x080c, 0x9f88, 0x0005, 0x7808, 0xd09c, 0x0de8, - 0x7820, 0x0005, 0x080c, 0x143d, 0x00d6, 0x2069, 0x0200, 0x2009, - 0x01f4, 0x8109, 0x0520, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, - 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff, - 0x0180, 0x9182, 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, - 0x810c, 0x810c, 0x810c, 0x080c, 0x153f, 0x6827, 0x0001, 0x8109, - 0x1dd0, 0x080c, 0x153f, 0x6827, 0x0002, 0x080c, 0x153f, 0x6804, - 0x9005, 0x1170, 0x682c, 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014, - 0x0120, 0x6830, 0x9084, 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8, - 0x79b8, 0xd1ec, 0x1130, 0x0870, 0x080c, 0x7d22, 0x080c, 0x199b, - 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, - 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, - 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, - 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, - 0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, - 0x9084, 0x0003, 0x1de0, 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6, - 0x0804, 0x0dc6, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, - 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, - 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x132a, 0x00ce, - 0x002e, 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, - 0x8080, 0x0059, 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, - 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x2009, 0x180c, 0x2104, - 0xc0f4, 0x200a, 0x2009, 0xff00, 0x8109, 0x0904, 0x15d1, 0x7a18, - 0x9284, 0x0030, 0x0904, 0x15cc, 0x9284, 0x0048, 0x9086, 0x0008, - 0x1904, 0x15cc, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, - 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, - 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208, - 0x200a, 0x080c, 0x8689, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, - 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, - 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, - 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208, - 0x200a, 0x080c, 0x1d94, 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, - 0x01de, 0x01ce, 0x012e, 0x000e, 0x7818, 0xd0bc, 0x1904, 0x157c, - 0x0005, 0x2001, 0x180c, 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, - 0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, - 0x19d3, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086, - 0x0000, 0x0188, 0x2009, 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a, - 0x080c, 0x96a1, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, - 0xff00, 0x0804, 0x157c, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, - 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1575, 0x1108, 0x0005, 0x792c, - 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x7037, 0x0001, 0x7150, - 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, - 0x0005, 0x0006, 0x0046, 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, - 0x7058, 0x9084, 0xff00, 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, - 0x1a5a, 0x2404, 0x8000, 0x0208, 0x2022, 0x080c, 0x7d22, 0x080c, - 0x199b, 0x9006, 0x00ee, 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, - 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0879, 0x6120, 0x9186, - 0x0000, 0x0560, 0x9186, 0x0002, 0x0548, 0x7358, 0x745c, 0x6014, - 0x905d, 0x0520, 0x2b48, 0xab42, 0xac3e, 0x2001, 0x1880, 0x2004, - 0xd0b4, 0x1138, 0x601c, 0xd0e4, 0x1120, 0xa83b, 0x7fff, 0xa837, - 0xffff, 0x080c, 0x1f90, 0x1190, 0x080c, 0x181a, 0x2a00, 0xa816, + 0x7852, 0x080c, 0x7351, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, + 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85c0, 0x7820, 0xd09c, + 0x1588, 0x080c, 0x7351, 0x0904, 0x0cf0, 0x7824, 0xd0ac, 0x1904, + 0x0d10, 0x080c, 0x7374, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421, + 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824, 0x9084, + 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004, + 0x9084, 0x9000, 0x0110, 0x080c, 0x0d31, 0x8421, 0x1158, 0x1d04, + 0x0ccb, 0x080c, 0x85c0, 0x080c, 0x7656, 0x080c, 0x764c, 0x7003, + 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cd8, 0x080c, 0x85c0, + 0x2009, 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, + 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2ad7, + 0x7924, 0x080c, 0x2af6, 0xd19c, 0x0110, 0x080c, 0x2a17, 0x00d8, + 0x080c, 0x7362, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7329, + 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824, + 0x080c, 0x736b, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, + 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x26b1, 0x0078, + 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, + 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, + 0x9085, 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006, + 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e, + 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6, + 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x85c0, 0x015e, 0x00fe, + 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e, + 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004, 0x9086, 0x0001, 0x1110, + 0x080c, 0x338f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x1988, + 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x001a, 0x600f, 0x0117, + 0x2001, 0x1958, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004, + 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a, 0x7063, + 0xffff, 0x717a, 0x717e, 0x080c, 0xc617, 0x70e7, 0x00c0, 0x2061, + 0x1948, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200, + 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061, + 0x1950, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013, + 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965, 0x6003, + 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001, + 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x64fc, 0x1178, 0xb804, + 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6, + 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186, + 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, 0x0000, + 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc5, 0x0006, + 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, 0x7882, + 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, 0x3900, + 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c, 0x78b2, + 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004, 0x78ba, + 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156, + 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84, 0x7a08, + 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a, + 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016, 0x7808, + 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1aaa, + 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019, + 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069, + 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68, + 0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079, + 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, + 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130, 0x2001, + 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a, 0x2003, + 0x0002, 0x2003, 0x1001, 0x080c, 0x5673, 0x1108, 0x0099, 0x0cd8, + 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, + 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, + 0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0eed, + 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x2011, 0x0040, 0x080c, 0x0eed, + 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x0c78, 0x0026, 0x080c, 0x0efa, + 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294, + 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011, + 0x6840, 0xd0e4, 0x70eb, 0x0000, 0x1120, 0x70eb, 0x0fa0, 0x080c, + 0x0eff, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efa, 0x0128, 0xd0a4, + 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0eff, + 0x002e, 0x0005, 0x0026, 0x70eb, 0x0000, 0x080c, 0x0efa, 0x1148, + 0x080c, 0x2aee, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282, + 0x0040, 0x080c, 0x2aee, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011, + 0xcac2, 0x080c, 0x0eff, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071, + 0x1800, 0xd0b4, 0x70e4, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00, + 0x9084, 0xff3f, 0x20d8, 0x000e, 0x70eb, 0x0000, 0xc0e5, 0x0079, + 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e4, + 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e6, + 0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ebc, 0x0e93, 0x0e93, + 0x0e75, 0x0ea2, 0x0e93, 0x0e93, 0x0ea2, 0x0016, 0x3b08, 0x3a00, + 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0, + 0x001e, 0x0005, 0x2001, 0x1839, 0x2004, 0xd0dc, 0x0005, 0x9e86, + 0x1800, 0x190c, 0x0dc3, 0x70e4, 0xd0e4, 0x0108, 0xc2e5, 0x72e6, + 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0f0e, + 0x2091, 0x6000, 0x1f04, 0x0f0e, 0x0005, 0x890e, 0x810e, 0x810f, + 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d, + 0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036, + 0x0096, 0x2061, 0x188e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003, + 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001, + 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02, + 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120, + 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x189e, + 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210, + 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200, + 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026, + 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104, + 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e, + 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096, + 0x3348, 0x080c, 0x0f15, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e, + 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007, + 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4, + 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298, + 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298, + 0x0008, 0x23a0, 0x4001, 0x7078, 0x8007, 0x717c, 0x810f, 0x20a9, + 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0da3, + 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff, + 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x103f, 0x009e, + 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x10b8, 0x090c, + 0x0dc3, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036, + 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c, + 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0dc3, 0x2300, + 0x9202, 0x0120, 0x1a0c, 0x0dc3, 0xa000, 0x0c98, 0x012e, 0x003e, + 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006, + 0x0126, 0x2091, 0x8000, 0x2071, 0x1911, 0x7010, 0x9005, 0x0140, + 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dc3, 0xa000, 0x0cc8, + 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be, 0x702c, + 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, + 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, + 0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268, + 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000, + 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184, + 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, + 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x012e, 0x00ee, + 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, + 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, + 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, + 0x2071, 0x188e, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802, + 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, + 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040, + 0x0c90, 0x2071, 0x188e, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308, + 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800, + 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420, + 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000, + 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005, + 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168, + 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534, + 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250, + 0x2071, 0x188e, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e, + 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19f7, 0x7007, + 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010, + 0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006, 0x20a9, 0x0040, + 0x7022, 0x1f04, 0x10f0, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126, + 0x2091, 0x8000, 0x00e6, 0xa073, 0x0000, 0x2071, 0x19f7, 0x701c, + 0x9088, 0x1a01, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120, + 0x9106, 0x090c, 0x0dc3, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, + 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, + 0x8000, 0x00e6, 0x2071, 0x19f7, 0x7004, 0x9005, 0x1128, 0x00f6, + 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004, + 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1139, + 0x1137, 0x1137, 0x1137, 0x12b3, 0x12b3, 0x12b3, 0x12b3, 0x080c, + 0x0dc3, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001, + 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180, + 0x1a01, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122, + 0x782b, 0x0026, 0xa890, 0x7802, 0xa894, 0x7806, 0xa898, 0x780a, + 0xa89c, 0x780e, 0xa87c, 0x700e, 0xa874, 0x7016, 0xa878, 0x701a, + 0xa86c, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005, + 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011, + 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212, + 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e, + 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0, + 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026, + 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, + 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300, + 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e, + 0x0005, 0x0016, 0x2009, 0x19f7, 0x2104, 0xc095, 0x200a, 0x080c, + 0x1116, 0x001e, 0x0005, 0x0016, 0x00e6, 0x2071, 0x19f7, 0x00f6, + 0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dbc, 0x782b, 0x0002, + 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee, + 0x001e, 0x0005, 0x1127, 0x11d1, 0x1205, 0x0dc3, 0x0dc3, 0x12bf, + 0x0dc3, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014, + 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, + 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e, + 0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806, + 0x080c, 0x116c, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0100, + 0x009e, 0x7007, 0x0000, 0x080c, 0x1127, 0x0005, 0x7008, 0x0096, + 0x2048, 0xa873, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150, + 0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, + 0x1181, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e, + 0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa892, + 0x7804, 0xa896, 0x7808, 0xa89a, 0x780c, 0xa89e, 0xa873, 0x0100, + 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001, + 0x18ba, 0x2004, 0x9906, 0x1128, 0xa8a0, 0x080f, 0x00de, 0x009e, + 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081, + 0x0150, 0xa8a0, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e, + 0x080c, 0x1116, 0x0005, 0x00de, 0x009e, 0x080c, 0x1116, 0x0005, + 0xa8ac, 0xd08c, 0x0005, 0x0096, 0xa0a4, 0x904d, 0x090c, 0x0dc3, + 0xa070, 0x908e, 0x0100, 0x0130, 0xa87f, 0x0030, 0xa887, 0x0000, + 0xa89b, 0x4002, 0xa898, 0x908e, 0x006b, 0x090c, 0x4740, 0x080c, + 0x6bf5, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x2848, 0x080c, 0x103f, + 0x009e, 0x0005, 0x00a6, 0xa0a4, 0x904d, 0x090c, 0x0dc3, 0xa070, + 0x908e, 0x0100, 0x0128, 0xa87f, 0x0001, 0xa887, 0x0000, 0x00c0, + 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, + 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, + 0xa07a, 0xa176, 0xb000, 0xa07e, 0x2810, 0x080c, 0x10f7, 0x00c8, + 0xa980, 0xa898, 0x0016, 0x0006, 0x080c, 0x6bf5, 0x000e, 0x001e, + 0xd1a4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xa39d, 0x00ce, 0x7008, + 0x2048, 0xa8a3, 0x0000, 0xa8a7, 0x0000, 0x080c, 0x103f, 0x080c, + 0x1116, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, + 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007, + 0x0000, 0x080c, 0x1127, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079, + 0x0300, 0x2071, 0x1a41, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b, + 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x0266, + 0x2061, 0xe114, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916, + 0x1f04, 0x12da, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001, + 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110, + 0x7820, 0x0cd8, 0x2001, 0x1a42, 0x2003, 0x0000, 0x78ab, 0x0004, + 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827, + 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a64, 0x781f, + 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110, + 0x781f, 0x0303, 0x2061, 0x1a64, 0x602f, 0x1cd0, 0x2001, 0x1819, + 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1fb8, 0x2001, 0x3268, + 0xd0fc, 0x190c, 0x0dc3, 0x2001, 0x1810, 0x2004, 0xd0c4, 0x1128, + 0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3268, 0x0020, + 0x9084, 0xc000, 0x783f, 0xb268, 0x00ce, 0x0005, 0x0126, 0x2091, + 0x2200, 0x7908, 0x9184, 0x0030, 0x190c, 0x0dbc, 0xd19c, 0x0158, + 0x7820, 0x908c, 0xf000, 0x15f0, 0x908a, 0x0024, 0x1a0c, 0x0dc3, + 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x1372, 0x1372, 0x1389, + 0x138e, 0x1392, 0x1397, 0x13bf, 0x13c3, 0x13d1, 0x13d5, 0x1372, + 0x1467, 0x146b, 0x14db, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, + 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, + 0x1399, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1376, + 0x1374, 0x1372, 0x080c, 0x0dc3, 0x080c, 0x0dbc, 0x080c, 0x14e2, + 0x2009, 0x1a59, 0x2104, 0x8000, 0x200a, 0x080c, 0x7dcd, 0x080c, + 0x19e3, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xa419, 0x012e, + 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, + 0x7006, 0x0005, 0x080c, 0x14e2, 0x080c, 0x164b, 0x0005, 0x080c, + 0x0dc3, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, + 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419, 0x2001, 0x015d, + 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, + 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, + 0x080c, 0x14e7, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004, + 0xc095, 0x7006, 0x0005, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096, + 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419, + 0x0005, 0x080c, 0x14e2, 0x080c, 0x0dc3, 0x080c, 0x14e2, 0x080c, + 0x1452, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, + 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003, + 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab, + 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dc3, + 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x04c0, 0x78ab, + 0x0004, 0x7803, 0x0001, 0x080c, 0x146b, 0x0005, 0x7828, 0x782b, + 0x0000, 0x9065, 0x090c, 0x0dc3, 0x6014, 0x2048, 0x78ab, 0x0004, + 0x918c, 0x0700, 0x01d8, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x080c, + 0xc1cd, 0x0158, 0xa9b0, 0xa936, 0xa9b4, 0xa93a, 0xa83f, 0xffff, + 0xa843, 0xffff, 0xa884, 0xc0bd, 0xa886, 0xa984, 0x9184, 0x0020, + 0x1120, 0xc1ad, 0xa986, 0x080c, 0xbde5, 0x0005, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xc5b0, 0x2029, + 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, + 0x7dbc, 0x080c, 0xe0a1, 0xd5a4, 0x1118, 0x080c, 0x14e7, 0x0005, + 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0005, 0x781f, 0x0300, 0x7803, + 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, + 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016, + 0x080c, 0x1568, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004, + 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0dc3, + 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c, + 0x162e, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, + 0x0020, 0x080c, 0x14e7, 0x0005, 0x81ff, 0x190c, 0x0dc3, 0x0005, + 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904, + 0x14d0, 0x2071, 0x0200, 0x080c, 0x1622, 0x080c, 0x162e, 0x05a8, + 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, 0xa868, 0x009e, 0x9084, + 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1548, 0x601c, + 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, 0x16c1, 0x00fe, 0x00a8, + 0x00f6, 0x2c78, 0x080c, 0x1805, 0x00fe, 0x2009, 0x01f4, 0x8109, + 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, + 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040, 0x2001, 0x020d, 0x2003, + 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, + 0x080c, 0x162e, 0x0dd0, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, + 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, + 0xa419, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, + 0x1452, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0520, + 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, + 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841, + 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, + 0x080c, 0x1554, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x080c, 0x1554, + 0x6827, 0x0002, 0x080c, 0x1554, 0x6804, 0x9005, 0x1170, 0x682c, + 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014, 0x0120, 0x6830, 0x9084, + 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8, 0x79b8, 0xd1ec, 0x1130, + 0x0870, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0090, 0x7827, 0x0015, + 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, + 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, + 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, + 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085, + 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0, + 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6, 0x0804, 0x0dc5, 0x2001, + 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005, + 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016, + 0x0026, 0x00c6, 0x080c, 0x1336, 0x00ce, 0x002e, 0x001e, 0x000e, + 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118, + 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004, + 0x080c, 0x0dc3, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009, + 0xff00, 0x8109, 0x0904, 0x15e6, 0x7a18, 0x9284, 0x0030, 0x0904, + 0x15e1, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x15e1, 0x2001, + 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136, + 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016, + 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x885a, + 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de, + 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006, + 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016, + 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1ddc, + 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, + 0x000e, 0x7818, 0xd0bc, 0x1904, 0x1591, 0x0005, 0x2001, 0x180c, + 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284, + 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19d3, 0x2004, 0x9005, + 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009, + 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x994f, 0x2009, + 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1591, + 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, + 0x080c, 0x158a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, + 0x080c, 0x0dc3, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050, + 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x0006, 0x0046, + 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, 0x7058, 0x9084, 0xff00, + 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, 0x1a5a, 0x2404, 0x8000, + 0x0208, 0x2022, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x9006, 0x00ee, + 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016, + 0x2071, 0x0200, 0x0879, 0x6120, 0x9186, 0x0000, 0x0904, 0x16b6, + 0x9186, 0x0002, 0x0904, 0x16b6, 0x6124, 0xd1dc, 0x01f8, 0x701c, + 0xd08c, 0x0904, 0x16b6, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, + 0xd0bc, 0x0904, 0x16b6, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, + 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x16b6, 0x9c06, 0x15f0, + 0x0126, 0x2091, 0x2600, 0x080c, 0x7d14, 0x012e, 0x7358, 0x745c, + 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x190c, 0xc58b, 0xab42, 0xac3e, 0x2001, 0x1880, + 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, + 0xffff, 0x080c, 0x1fd8, 0x1190, 0x080c, 0x1862, 0x2a00, 0xa816, 0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037, 0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050, - 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14d2, 0x0005, 0x080c, - 0x0dc4, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0, + 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14e7, 0x0005, 0x080c, + 0x0dc3, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0x903e, 0x2730, 0xa868, 0x2068, 0xa81a, 0x9d84, 0x000f, - 0x9088, 0x1f70, 0x2165, 0x0002, 0x16ab, 0x16f8, 0x16ab, 0x16ab, - 0x16ab, 0x16da, 0x16ab, 0x16af, 0x16a4, 0x16ef, 0x16ab, 0x16ab, - 0x16ab, 0x17b5, 0x16c3, 0x16b9, 0xa968, 0x918c, 0x00ff, 0x918e, - 0x0048, 0x0904, 0x16ef, 0x9085, 0x0001, 0x0804, 0x17ab, 0xa880, + 0x9088, 0x1fb8, 0x2165, 0x0002, 0x16f3, 0x1740, 0x16f3, 0x16f3, + 0x16f3, 0x1722, 0x16f3, 0x16f7, 0x16ec, 0x1737, 0x16f3, 0x16f3, + 0x16f3, 0x17fd, 0x170b, 0x1701, 0xa968, 0x918c, 0x00ff, 0x918e, + 0x0048, 0x0904, 0x1737, 0x9085, 0x0001, 0x0804, 0x17f3, 0xa880, 0xd0bc, 0x0dc8, 0xa894, 0xa842, 0xa890, 0xa83e, 0xa88c, 0x0804, - 0x16ff, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e, - 0xa88c, 0x0804, 0x174e, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842, - 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc4, 0xa168, 0xa91a, - 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065, 0xa88c, 0xd19c, 0x1904, - 0x174e, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c, - 0x0dc4, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065, - 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x174e, 0x0080, 0xa880, - 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x0804, 0x174e, - 0xa880, 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x2c05, - 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1722, - 0x1722, 0x1724, 0x1722, 0x1722, 0x1722, 0x172a, 0x1722, 0x1722, - 0x1722, 0x1730, 0x1722, 0x1722, 0x1722, 0x1736, 0x1722, 0x1722, - 0x1722, 0x173c, 0x1722, 0x1722, 0x1722, 0x1742, 0x1722, 0x1722, - 0x1722, 0x1748, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284, - 0x0804, 0x1793, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1793, - 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1793, 0xa5a8, 0xa4ac, - 0xa3b0, 0xa2b4, 0x0804, 0x1793, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, - 0x0804, 0x1793, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1793, - 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1793, 0x2c05, 0x908a, - 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1771, 0x176f, - 0x176f, 0x176f, 0x176f, 0x176f, 0x1778, 0x176f, 0x176f, 0x176f, - 0x176f, 0x176f, 0x177f, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f, - 0x1786, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f, 0x178d, 0x080c, - 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8, + 0x1747, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e, + 0xa88c, 0x0804, 0x1796, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842, + 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc3, 0xa168, 0xa91a, + 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065, 0xa88c, 0xd19c, 0x1904, + 0x1796, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c, + 0x0dc3, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065, + 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1796, 0x0080, 0xa880, + 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1796, + 0xa880, 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x2c05, + 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x176a, + 0x176a, 0x176c, 0x176a, 0x176a, 0x176a, 0x1772, 0x176a, 0x176a, + 0x176a, 0x1778, 0x176a, 0x176a, 0x176a, 0x177e, 0x176a, 0x176a, + 0x176a, 0x1784, 0x176a, 0x176a, 0x176a, 0x178a, 0x176a, 0x176a, + 0x176a, 0x1790, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284, + 0x0804, 0x17db, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x17db, + 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x17db, 0xa5a8, 0xa4ac, + 0xa3b0, 0xa2b4, 0x0804, 0x17db, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, + 0x0804, 0x17db, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x17db, + 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x17db, 0x2c05, 0x908a, + 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x17b9, 0x17b7, + 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c0, 0x17b7, 0x17b7, 0x17b7, + 0x17b7, 0x17b7, 0x17c7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, + 0x17ce, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17d5, 0x080c, + 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8, 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x00a0, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x0068, 0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0030, 0xa5d0, 0xa4d4, 0xa7d8, @@ -538,120 +547,120 @@ static const uint16_t isp_2300_risc_code[] = { 0xae2a, 0xa98c, 0x8c60, 0x2c1d, 0xa8b0, 0xaab4, 0xa836, 0xaa3a, 0x8109, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880, 0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800, - 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16ab, 0x2001, - 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0, 0x0126, 0x2091, + 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16f3, 0x2001, + 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0, 0x0126, 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e, - 0x2061, 0x1f6b, 0xa813, 0x1f6b, 0x2c05, 0xa80a, 0xa968, 0xa91a, - 0xa880, 0xd0ac, 0x090c, 0x0dc4, 0x9006, 0xa842, 0xa83e, 0x2c05, - 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0xadd0, 0xacd4, 0xafd8, 0xaedc, + 0x2061, 0x1fb3, 0xa813, 0x1fb3, 0x2c05, 0xa80a, 0xa968, 0xa91a, + 0xa880, 0xd0ac, 0x090c, 0x0dc3, 0x9006, 0xa842, 0xa83e, 0x2c05, + 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0xadd0, 0xacd4, 0xafd8, 0xaedc, 0xabe0, 0xaae4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0xa8b0, 0xaab4, 0xa836, 0xaa3a, 0xa98c, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0080, 0x918a, 0x0002, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880, 0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804, - 0x9045, 0x090c, 0x0dc4, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f, - 0x9080, 0x1f70, 0x2015, 0x82ff, 0x090c, 0x0dc4, 0xaa12, 0x2205, + 0x9045, 0x090c, 0x0dc3, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f, + 0x9080, 0x1fb8, 0x2015, 0x82ff, 0x090c, 0x0dc3, 0xaa12, 0x2205, 0xa80a, 0x0c08, 0x903e, 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, - 0x0002, 0x190f, 0x1871, 0x1871, 0x190f, 0x190f, 0x1909, 0x190f, - 0x1871, 0x18c0, 0x18c0, 0x18c0, 0x190f, 0x190f, 0x190f, 0x1906, - 0x18c0, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, - 0x0904, 0x1911, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, - 0x001c, 0x0002, 0x185d, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b, - 0x1861, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b, 0x1865, 0x185b, - 0x185b, 0x185b, 0x185b, 0x185b, 0x1869, 0x185b, 0x185b, 0x185b, - 0x185b, 0x185b, 0x186d, 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804, - 0x1911, 0xa790, 0xa694, 0x0804, 0x1911, 0xa7a8, 0xa6ac, 0x0804, - 0x1911, 0xa7c0, 0xa6c4, 0x0804, 0x1911, 0xa7d8, 0xa6dc, 0x0804, - 0x1911, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, - 0x0002, 0x1894, 0x1894, 0x1896, 0x1894, 0x1894, 0x1894, 0x189c, - 0x1894, 0x1894, 0x1894, 0x18a2, 0x1894, 0x1894, 0x1894, 0x18a8, - 0x1894, 0x1894, 0x1894, 0x18ae, 0x1894, 0x1894, 0x1894, 0x18b4, - 0x1894, 0x1894, 0x1894, 0x18ba, 0x080c, 0x0dc4, 0xa578, 0xa47c, - 0xa380, 0xa284, 0x0804, 0x1911, 0xa588, 0xa48c, 0xa390, 0xa294, - 0x0804, 0x1911, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1911, - 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1911, 0xa5b8, 0xa4bc, - 0xa3c0, 0xa2c4, 0x0804, 0x1911, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, - 0x0804, 0x1911, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1911, - 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, - 0x18e3, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18ea, 0x18e1, - 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18f1, 0x18e1, 0x18e1, 0x18e1, - 0x18e1, 0x18e1, 0x18f8, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1, - 0x18ff, 0x080c, 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, + 0x0002, 0x1957, 0x18b9, 0x18b9, 0x1957, 0x1957, 0x1951, 0x1957, + 0x18b9, 0x1908, 0x1908, 0x1908, 0x1957, 0x1957, 0x1957, 0x194e, + 0x1908, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, + 0x0904, 0x1959, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, + 0x001c, 0x0002, 0x18a5, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3, + 0x18a9, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18ad, 0x18a3, + 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18b1, 0x18a3, 0x18a3, 0x18a3, + 0x18a3, 0x18a3, 0x18b5, 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804, + 0x1959, 0xa790, 0xa694, 0x0804, 0x1959, 0xa7a8, 0xa6ac, 0x0804, + 0x1959, 0xa7c0, 0xa6c4, 0x0804, 0x1959, 0xa7d8, 0xa6dc, 0x0804, + 0x1959, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, + 0x0002, 0x18dc, 0x18dc, 0x18de, 0x18dc, 0x18dc, 0x18dc, 0x18e4, + 0x18dc, 0x18dc, 0x18dc, 0x18ea, 0x18dc, 0x18dc, 0x18dc, 0x18f0, + 0x18dc, 0x18dc, 0x18dc, 0x18f6, 0x18dc, 0x18dc, 0x18dc, 0x18fc, + 0x18dc, 0x18dc, 0x18dc, 0x1902, 0x080c, 0x0dc3, 0xa578, 0xa47c, + 0xa380, 0xa284, 0x0804, 0x1959, 0xa588, 0xa48c, 0xa390, 0xa294, + 0x0804, 0x1959, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1959, + 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1959, 0xa5b8, 0xa4bc, + 0xa3c0, 0xa2c4, 0x0804, 0x1959, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, + 0x0804, 0x1959, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1959, + 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, + 0x192b, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929, 0x1932, 0x1929, + 0x1929, 0x1929, 0x1929, 0x1929, 0x1939, 0x1929, 0x1929, 0x1929, + 0x1929, 0x1929, 0x1940, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929, + 0x1947, 0x080c, 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0438, 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0400, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x00c8, 0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0090, 0xa5d0, 0xa4d4, 0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0058, 0x9d86, 0x000e, - 0x1130, 0x080c, 0x1f28, 0x1904, 0x181a, 0x900e, 0x0050, 0x080c, - 0x0dc4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c, - 0x1f28, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e, - 0x2001, 0x000a, 0x080c, 0x854b, 0x8204, 0x1110, 0x2011, 0x0002, + 0x1130, 0x080c, 0x1f70, 0x1904, 0x1862, 0x900e, 0x0050, 0x080c, + 0x0dc3, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c, + 0x1f70, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e, + 0x2001, 0x000a, 0x080c, 0x871c, 0x8204, 0x1110, 0x2011, 0x0002, 0x8211, 0xaa8a, 0x601b, 0x0002, 0xa878, 0x9084, 0x00ff, 0x9084, 0x0008, 0x0150, 0x00e9, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, - 0x0048, 0x080c, 0x9f88, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005, + 0x0048, 0x080c, 0xa419, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa890, 0x9106, 0x1158, 0xa938, 0xa894, 0x9106, 0x1138, - 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x9f88, 0x0005, + 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0xa419, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, - 0xd09c, 0x0120, 0x080c, 0x132a, 0x8631, 0x1db8, 0x00ce, 0x781f, - 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x132a, - 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a2b, 0x7930, 0x9186, 0x0040, - 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc4, 0x2001, 0x001e, 0x8001, - 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a3a, 0x000e, 0x6022, 0x012e, - 0x0005, 0x080c, 0x1a27, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, + 0xd09c, 0x0120, 0x080c, 0x1336, 0x8631, 0x1db8, 0x00ce, 0x781f, + 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1336, + 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a73, 0x7930, 0x9186, 0x0040, + 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc3, 0x2001, 0x001e, 0x8001, + 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a82, 0x000e, 0x6022, 0x012e, + 0x0005, 0x080c, 0x1a6f, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, - 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc4, 0x7aac, - 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x72e5, 0x1188, 0x2001, 0x0138, + 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc3, 0x7aac, + 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x7351, 0x1188, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, - 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x7393, 0x0479, + 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x73fe, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, - 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a99, 0x2009, 0x003c, 0x080c, - 0x22b2, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, - 0x1de0, 0x080c, 0x8245, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, + 0x00e6, 0x2071, 0x0200, 0x080c, 0x2b02, 0x2009, 0x003c, 0x080c, + 0x22fa, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, + 0x1de0, 0x080c, 0x83a7, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, - 0x080c, 0x12de, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, + 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, - 0x0000, 0x080c, 0x72e5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, + 0x0000, 0x080c, 0x7351, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048, 0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c, - 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1553, 0x7930, - 0x0005, 0x2c08, 0x621c, 0x080c, 0x15fe, 0x7930, 0x0005, 0x8001, + 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1568, 0x7930, + 0x0005, 0x2c08, 0x621c, 0x080c, 0x1613, 0x7930, 0x0005, 0x8001, 0x1df0, 0x0005, 0x2031, 0x0064, 0x781c, 0x9084, 0x0007, 0x0170, - 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1a98, 0x2001, - 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc4, 0x781f, 0x0202, + 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1ae0, 0x2001, + 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc3, 0x781f, 0x0202, 0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0dac, 0x0c01, 0x781c, 0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186, 0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001, 0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140, - 0x2001, 0x0030, 0x080c, 0x1a31, 0x9186, 0x0040, 0x190c, 0x0dc4, + 0x2001, 0x0030, 0x080c, 0x1a79, 0x9186, 0x0040, 0x190c, 0x0dc3, 0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160, 0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080, 0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c, - 0x9184, 0x0007, 0x090c, 0x0dc4, 0xa001, 0xa001, 0x781f, 0x0200, + 0x9184, 0x0007, 0x090c, 0x0dc3, 0xa001, 0xa001, 0x781f, 0x0200, 0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a44, 0x2079, 0x0090, 0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048, 0xa980, 0xd1dc, - 0x1904, 0x1b2d, 0xa968, 0x9184, 0x0007, 0x0002, 0x1ab6, 0x1b18, - 0x1acd, 0x1acd, 0x1acd, 0x1b00, 0x1ae0, 0x1acf, 0x918c, 0x00ff, - 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0x9006, - 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1f6b, 0x0804, - 0x1b29, 0x9186, 0x0048, 0x0904, 0x1b18, 0x080c, 0x0dc4, 0xa880, - 0xd0b4, 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, - 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b20, + 0x1904, 0x1b75, 0xa968, 0x9184, 0x0007, 0x0002, 0x1afe, 0x1b60, + 0x1b15, 0x1b15, 0x1b15, 0x1b48, 0x1b28, 0x1b17, 0x918c, 0x00ff, + 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d96, 0x9006, + 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1fb3, 0x0804, + 0x1b71, 0x9186, 0x0048, 0x0904, 0x1b60, 0x080c, 0x0dc3, 0xa880, + 0xd0b4, 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, + 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b68, 0xa868, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1d38, 0xa880, 0xd0b4, - 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836, + 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa068, - 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005, 0xa812, 0xa98c, 0x0448, + 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x0448, 0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa880, 0xd0b4, 0x0904, - 0x1d4e, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080, - 0x1f70, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088, - 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0xa98c, 0x9006, 0xa842, 0xa83e, - 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005, + 0x1d96, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080, + 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088, + 0xa880, 0xd0b4, 0x0904, 0x1d96, 0xa98c, 0x9006, 0xa842, 0xa83e, + 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005, 0xa812, 0xa916, 0xa880, 0xc0dd, 0xa882, 0x0005, 0x00f6, 0x2079, - 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1d94, 0x00e6, 0x2071, 0x1a44, - 0x7000, 0x9005, 0x1904, 0x1b94, 0x7206, 0x9280, 0x0005, 0x204c, + 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1ddc, 0x00e6, 0x2071, 0x1a44, + 0x7000, 0x9005, 0x1904, 0x1bdc, 0x7206, 0x9280, 0x0005, 0x204c, 0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890, 0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001, @@ -663,46 +672,46 @@ static const uint16_t isp_2300_risc_code[] = { 0x0118, 0x001e, 0x000e, 0x0098, 0x001e, 0x000e, 0x8aff, 0x01c8, 0x0126, 0x2091, 0x8000, 0x2009, 0x0306, 0x200b, 0x0808, 0x00d9, 0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036, - 0x0046, 0xab38, 0xac34, 0x080c, 0x1f90, 0x004e, 0x003e, 0x0d30, + 0x0046, 0xab38, 0xac34, 0x080c, 0x1fd8, 0x004e, 0x003e, 0x0d30, 0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027, 0x0000, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036, - 0x0026, 0x8aff, 0x0904, 0x1d47, 0x700c, 0x7214, 0x923a, 0x7010, - 0x7218, 0x9203, 0x0a04, 0x1d46, 0x9705, 0x0904, 0x1d46, 0x903e, - 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1cd6, 0x1c16, - 0x1c16, 0x1cd6, 0x1cd6, 0x1cb3, 0x1cd6, 0x1c16, 0x1cba, 0x1c65, - 0x1c65, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cad, 0x1c65, 0xc0fc, 0xa886, - 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1cd8, 0x2c05, - 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c02, - 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c06, 0x1c00, 0x1c00, - 0x1c00, 0x1c00, 0x1c00, 0x1c0a, 0x1c00, 0x1c00, 0x1c00, 0x1c00, - 0x1c00, 0x1c0e, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c12, - 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804, 0x1cd8, 0xa790, 0xa694, - 0x0804, 0x1cd8, 0xa7a8, 0xa6ac, 0x0804, 0x1cd8, 0xa7c0, 0xa6c4, - 0x0804, 0x1cd8, 0xa7d8, 0xa6dc, 0x0804, 0x1cd8, 0x2c05, 0x908a, - 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c39, 0x1c39, - 0x1c3b, 0x1c39, 0x1c39, 0x1c39, 0x1c41, 0x1c39, 0x1c39, 0x1c39, - 0x1c47, 0x1c39, 0x1c39, 0x1c39, 0x1c4d, 0x1c39, 0x1c39, 0x1c39, - 0x1c53, 0x1c39, 0x1c39, 0x1c39, 0x1c59, 0x1c39, 0x1c39, 0x1c39, - 0x1c5f, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804, - 0x1cd8, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1cd8, 0xa598, - 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1cd8, 0xa5a8, 0xa4ac, 0xa3b0, - 0xa2b4, 0x0804, 0x1cd8, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804, - 0x1cd8, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1cd8, 0xa5d8, - 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1cd8, 0x2c05, 0x908a, 0x0035, - 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c88, 0x1c86, 0x1c86, - 0x1c86, 0x1c86, 0x1c86, 0x1c90, 0x1c86, 0x1c86, 0x1c86, 0x1c86, - 0x1c86, 0x1c98, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c9f, - 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1ca6, 0x080c, 0x0dc4, - 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1cd8, - 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1cd8, + 0x0026, 0x8aff, 0x0904, 0x1d8f, 0x700c, 0x7214, 0x923a, 0x7010, + 0x7218, 0x9203, 0x0a04, 0x1d8e, 0x9705, 0x0904, 0x1d8e, 0x903e, + 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1d1e, 0x1c5e, + 0x1c5e, 0x1d1e, 0x1d1e, 0x1cfb, 0x1d1e, 0x1c5e, 0x1d02, 0x1cad, + 0x1cad, 0x1d1e, 0x1d1e, 0x1d1e, 0x1cf5, 0x1cad, 0xc0fc, 0xa886, + 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1d20, 0x2c05, + 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c4a, + 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c4e, 0x1c48, 0x1c48, + 0x1c48, 0x1c48, 0x1c48, 0x1c52, 0x1c48, 0x1c48, 0x1c48, 0x1c48, + 0x1c48, 0x1c56, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c5a, + 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804, 0x1d20, 0xa790, 0xa694, + 0x0804, 0x1d20, 0xa7a8, 0xa6ac, 0x0804, 0x1d20, 0xa7c0, 0xa6c4, + 0x0804, 0x1d20, 0xa7d8, 0xa6dc, 0x0804, 0x1d20, 0x2c05, 0x908a, + 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c81, 0x1c81, + 0x1c83, 0x1c81, 0x1c81, 0x1c81, 0x1c89, 0x1c81, 0x1c81, 0x1c81, + 0x1c8f, 0x1c81, 0x1c81, 0x1c81, 0x1c95, 0x1c81, 0x1c81, 0x1c81, + 0x1c9b, 0x1c81, 0x1c81, 0x1c81, 0x1ca1, 0x1c81, 0x1c81, 0x1c81, + 0x1ca7, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804, + 0x1d20, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1d20, 0xa598, + 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1d20, 0xa5a8, 0xa4ac, 0xa3b0, + 0xa2b4, 0x0804, 0x1d20, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804, + 0x1d20, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1d20, 0xa5d8, + 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1d20, 0x2c05, 0x908a, 0x0035, + 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1cd0, 0x1cce, 0x1cce, + 0x1cce, 0x1cce, 0x1cce, 0x1cd8, 0x1cce, 0x1cce, 0x1cce, 0x1cce, + 0x1cce, 0x1ce0, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1ce7, + 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cee, 0x080c, 0x0dc3, + 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1d20, + 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1d20, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x04c8, 0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0490, 0xa5d0, 0xa4d4, 0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0458, 0xa868, 0x9084, 0x00ff, - 0x9086, 0x001e, 0x1518, 0x080c, 0x1f28, 0x1904, 0x1bb1, 0x900e, - 0x0804, 0x1d47, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180, + 0x9086, 0x001e, 0x1518, 0x080c, 0x1f70, 0x1904, 0x1bf9, 0x900e, + 0x0804, 0x1d8f, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180, 0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904, - 0x1c65, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040, - 0x9386, 0x0008, 0x0904, 0x1c65, 0x080c, 0x0dc4, 0x080c, 0x0dc4, + 0x1cad, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040, + 0x9386, 0x0008, 0x0904, 0x1cad, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x2009, 0x030f, 0x2104, 0xd0fc, 0x0538, 0x0066, 0x2009, 0x0306, 0x2134, 0x200b, 0x4000, 0x2104, 0x9084, 0x0030, 0x15b8, 0x2031, 0x1000, 0x2600, 0x9302, 0x928b, 0x0000, 0xa82e, 0xa932, 0x0278, @@ -711,169 +720,169 @@ static const uint16_t isp_2300_risc_code[] = { 0x0000, 0xa833, 0x0000, 0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06, 0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c, 0x9300, 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e, - 0x7010, 0x9201, 0x7012, 0x080c, 0x1f28, 0x0448, 0xd6b4, 0x0110, + 0x7010, 0x9201, 0x7012, 0x080c, 0x1f70, 0x0448, 0xd6b4, 0x0110, 0x200b, 0x4040, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632, 0x7124, 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009, - 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1ce9, 0x200b, 0x4040, 0x2009, - 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1ce9, 0x200a, 0x0804, 0x1ce9, - 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1ce9, 0x9006, 0x002e, - 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc4, + 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1d31, 0x200b, 0x4040, 0x2009, + 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1d31, 0x200a, 0x0804, 0x1d31, + 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1d31, 0x9006, 0x002e, + 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc3, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, - 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xb955, 0x0118, - 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1ba4, + 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0118, + 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1bec, 0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89e, - 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xb5c5, 0x00ce, + 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xbde5, 0x00ce, 0x2001, 0x19d3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, - 0x22b2, 0x080c, 0x9b40, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c, - 0x8d06, 0x002e, 0x0804, 0x1ed8, 0x0126, 0x2091, 0x2400, 0xa858, - 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d50, - 0x7000, 0x0002, 0x1ed8, 0x1da6, 0x1e26, 0x1ed6, 0x8001, 0x7002, - 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1df3, 0x080c, - 0x1bab, 0x0904, 0x1ed8, 0x080c, 0x1bab, 0x0804, 0x1ed8, 0x782b, + 0x22fa, 0x080c, 0x9e13, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c, + 0x8f0e, 0x002e, 0x0804, 0x1f20, 0x0126, 0x2091, 0x2400, 0xa858, + 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d98, + 0x7000, 0x0002, 0x1f20, 0x1dee, 0x1e6e, 0x1f1e, 0x8001, 0x7002, + 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1e3b, 0x080c, + 0x1bf3, 0x0904, 0x1f20, 0x080c, 0x1bf3, 0x0804, 0x1f20, 0x782b, 0x0004, 0xd194, 0x0148, 0xa884, 0xc0fc, 0xa886, 0x8aff, 0x1518, 0xa880, 0xc0f5, 0xa882, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x0016, 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101, 0xa832, 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e, - 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f43, + 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f8b, 0xa884, 0xc0fd, 0xa886, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027, - 0x0000, 0x0804, 0x1ed8, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, + 0x0000, 0x0804, 0x1f20, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, - 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc4, 0x7820, + 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc3, 0x7820, 0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006, 0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008, - 0x7003, 0x0000, 0x080c, 0x1ba4, 0x0804, 0x1ed8, 0x8001, 0x7002, + 0x7003, 0x0000, 0x080c, 0x1bec, 0x0804, 0x1f20, 0x8001, 0x7002, 0x7024, 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904, - 0x1d99, 0xd19c, 0x1904, 0x1ed4, 0x8aff, 0x0904, 0x1ed8, 0x080c, - 0x1bab, 0x0804, 0x1ed8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c, - 0x1f43, 0xdd9c, 0x1904, 0x1e93, 0x2c05, 0x908a, 0x0037, 0x1a0c, - 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1e67, 0x1e67, 0x1e69, 0x1e67, - 0x1e67, 0x1e67, 0x1e6f, 0x1e67, 0x1e67, 0x1e67, 0x1e75, 0x1e67, - 0x1e67, 0x1e67, 0x1e7b, 0x1e67, 0x1e67, 0x1e67, 0x1e81, 0x1e67, - 0x1e67, 0x1e67, 0x1e87, 0x1e67, 0x1e67, 0x1e67, 0x1e8d, 0x080c, - 0x0dc4, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa090, - 0x931a, 0xa094, 0x9213, 0x0804, 0x1dc8, 0xa0a0, 0x931a, 0xa0a4, - 0x9213, 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, - 0x1dc8, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1dc8, 0xa0d0, - 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a, 0xa0e4, - 0x9213, 0x0804, 0x1dc8, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, - 0x9082, 0x001c, 0x0002, 0x1eb6, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, - 0x1eb4, 0x1ebc, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec2, - 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec8, 0x1eb4, 0x1eb4, - 0x1eb4, 0x1eb4, 0x1eb4, 0x1ece, 0x080c, 0x0dc4, 0xa080, 0x931a, - 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa098, 0x931a, 0xa09c, 0x9213, - 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1dc8, - 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a, - 0xa0e4, 0x9213, 0x0804, 0x1dc8, 0x0804, 0x1dc4, 0x080c, 0x0dc4, + 0x1de1, 0xd19c, 0x1904, 0x1f1c, 0x8aff, 0x0904, 0x1f20, 0x080c, + 0x1bf3, 0x0804, 0x1f20, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c, + 0x1f8b, 0xdd9c, 0x1904, 0x1edb, 0x2c05, 0x908a, 0x0037, 0x1a0c, + 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1eaf, 0x1eaf, 0x1eb1, 0x1eaf, + 0x1eaf, 0x1eaf, 0x1eb7, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ebd, 0x1eaf, + 0x1eaf, 0x1eaf, 0x1ec3, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ec9, 0x1eaf, + 0x1eaf, 0x1eaf, 0x1ecf, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ed5, 0x080c, + 0x0dc3, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1e10, 0xa090, + 0x931a, 0xa094, 0x9213, 0x0804, 0x1e10, 0xa0a0, 0x931a, 0xa0a4, + 0x9213, 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, + 0x1e10, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1e10, 0xa0d0, + 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a, 0xa0e4, + 0x9213, 0x0804, 0x1e10, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, + 0x9082, 0x001c, 0x0002, 0x1efe, 0x1efc, 0x1efc, 0x1efc, 0x1efc, + 0x1efc, 0x1f04, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f0a, + 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f10, 0x1efc, 0x1efc, + 0x1efc, 0x1efc, 0x1efc, 0x1f16, 0x080c, 0x0dc3, 0xa080, 0x931a, + 0xa084, 0x9213, 0x0804, 0x1e10, 0xa098, 0x931a, 0xa09c, 0x9213, + 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1e10, + 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a, + 0xa0e4, 0x9213, 0x0804, 0x1e10, 0x0804, 0x1e0c, 0x080c, 0x0dc3, 0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086, - 0x0000, 0x0904, 0x1f23, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, + 0x0000, 0x0904, 0x1f6b, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, - 0x080c, 0xd379, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc4, - 0x0016, 0x2009, 0x0040, 0x080c, 0x22b2, 0x001e, 0x2001, 0x020c, + 0x080c, 0xe106, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc3, + 0x0016, 0x2009, 0x0040, 0x080c, 0x22fa, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, - 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc, 0x09a8, - 0x080c, 0x1d94, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, - 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782b, - 0x0002, 0x7003, 0x0000, 0x080c, 0x1ba4, 0x00ee, 0x00fe, 0x0005, + 0x1120, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x09a8, + 0x080c, 0x1ddc, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004, + 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b, + 0x0002, 0x7003, 0x0000, 0x080c, 0x1bec, 0x00ee, 0x00fe, 0x0005, 0xa884, 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51, 0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa068, 0x9084, - 0x000f, 0x9080, 0x1f70, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x8a51, + 0x000f, 0x9080, 0x1fb8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x8a51, 0x0005, 0x2050, 0x0005, 0xa884, 0xd0fc, 0x11b8, 0x8a50, 0x8c61, 0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005, 0x1108, 0x2900, 0x2040, 0xa85a, 0xa068, 0x9084, 0x000f, 0x9080, - 0x1f80, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x0005, 0x0000, 0x001e, + 0x1fc8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x0005, 0x0000, 0x001e, 0x0022, 0x0026, 0x002a, 0x002e, 0x0032, 0x0036, 0x0000, 0x001c, 0x0022, 0x0028, 0x002e, 0x0034, 0x0000, 0x0000, 0x0024, 0x0000, - 0x0000, 0x1f63, 0x1f5f, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f63, - 0x1f6a, 0x1f6a, 0x1f67, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6a, - 0x0000, 0x1f65, 0x1f65, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f65, - 0x1f6b, 0x1f6b, 0x1f6b, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6b, + 0x0000, 0x1fab, 0x1fa7, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fab, + 0x1fb2, 0x1fb2, 0x1faf, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb2, + 0x0000, 0x1fad, 0x1fad, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fad, + 0x1fb3, 0x1fb3, 0x1fb3, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb3, 0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa88c, 0x9055, 0x0904, - 0x216f, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, - 0x0008, 0x1118, 0x2061, 0x1f6b, 0x00d0, 0x9de0, 0x1f70, 0x9d86, + 0x21b7, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086, + 0x0008, 0x1118, 0x2061, 0x1fb3, 0x00d0, 0x9de0, 0x1fb8, 0x9d86, 0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120, 0xa090, 0x9422, 0xa094, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310, - 0x0804, 0x216f, 0xa004, 0x9045, 0x0904, 0x216f, 0x08d8, 0x2c05, - 0x9005, 0x0904, 0x2057, 0xdd9c, 0x1904, 0x2013, 0x908a, 0x0037, - 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1fe8, 0x1fe8, 0x1fea, - 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff0, 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff6, - 0x1fe8, 0x1fe8, 0x1fe8, 0x1ffc, 0x1fe8, 0x1fe8, 0x1fe8, 0x2002, - 0x1fe8, 0x1fe8, 0x1fe8, 0x2008, 0x1fe8, 0x1fe8, 0x1fe8, 0x200e, - 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x204d, - 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x204d, 0xa0a0, 0x9422, - 0xa0a4, 0x931b, 0x0804, 0x204d, 0xa0b0, 0x9422, 0xa0b4, 0x931b, - 0x0804, 0x204d, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x204d, - 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x204d, 0xa0e0, 0x9422, - 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, - 0x001c, 0x0002, 0x2035, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033, - 0x203a, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033, 0x203f, 0x2033, - 0x2033, 0x2033, 0x2033, 0x2033, 0x2044, 0x2033, 0x2033, 0x2033, - 0x2033, 0x2033, 0x2049, 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084, + 0x0804, 0x21b7, 0xa004, 0x9045, 0x0904, 0x21b7, 0x08d8, 0x2c05, + 0x9005, 0x0904, 0x209f, 0xdd9c, 0x1904, 0x205b, 0x908a, 0x0037, + 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x2030, 0x2030, 0x2032, + 0x2030, 0x2030, 0x2030, 0x2038, 0x2030, 0x2030, 0x2030, 0x203e, + 0x2030, 0x2030, 0x2030, 0x2044, 0x2030, 0x2030, 0x2030, 0x204a, + 0x2030, 0x2030, 0x2030, 0x2050, 0x2030, 0x2030, 0x2030, 0x2056, + 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x2095, + 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x2095, 0xa0a0, 0x9422, + 0xa0a4, 0x931b, 0x0804, 0x2095, 0xa0b0, 0x9422, 0xa0b4, 0x931b, + 0x0804, 0x2095, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x2095, + 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x2095, 0xa0e0, 0x9422, + 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, + 0x001c, 0x0002, 0x207d, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b, + 0x2082, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b, 0x2087, 0x207b, + 0x207b, 0x207b, 0x207b, 0x207b, 0x208c, 0x207b, 0x207b, 0x207b, + 0x207b, 0x207b, 0x2091, 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084, 0x931b, 0x0098, 0xa098, 0x9422, 0xa09c, 0x931b, 0x0070, 0xa0b0, 0x9422, 0xa0b4, 0x931b, 0x0048, 0xa0c8, 0x9422, 0xa0cc, 0x931b, 0x0020, 0xa0e0, 0x9422, 0xa0e4, 0x931b, 0x0630, 0x2300, 0x9405, - 0x0160, 0x8a51, 0x0904, 0x216f, 0x8c60, 0x0804, 0x1fbf, 0xa004, - 0x9045, 0x0904, 0x216f, 0x0804, 0x1f9a, 0x8a51, 0x0904, 0x216f, - 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x216f, - 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1f70, 0x2c05, 0x2060, 0xa884, - 0xc0fc, 0xa886, 0x0804, 0x2164, 0x2c05, 0x8422, 0x8420, 0x831a, - 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2101, 0x9082, - 0x001c, 0x0002, 0x209d, 0x209d, 0x209f, 0x209d, 0x209d, 0x209d, - 0x20ad, 0x209d, 0x209d, 0x209d, 0x20bb, 0x209d, 0x209d, 0x209d, - 0x20c9, 0x209d, 0x209d, 0x209d, 0x20d7, 0x209d, 0x209d, 0x209d, - 0x20e5, 0x209d, 0x209d, 0x209d, 0x20f3, 0x080c, 0x0dc4, 0xa180, - 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa078, - 0x9420, 0xa07c, 0x9319, 0x0804, 0x215f, 0xa190, 0x2400, 0x9122, - 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c, - 0x9319, 0x0804, 0x215f, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300, - 0x911b, 0x0a0c, 0x0dc4, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804, - 0x215f, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c, - 0x0dc4, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x215f, 0xa1c0, - 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8, - 0x9420, 0xa0bc, 0x9319, 0x0804, 0x215f, 0xa1d0, 0x2400, 0x9122, - 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0c8, 0x9420, 0xa0cc, - 0x9319, 0x0804, 0x215f, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300, - 0x911b, 0x0a0c, 0x0dc4, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804, - 0x215f, 0x9082, 0x001c, 0x0002, 0x211f, 0x211d, 0x211d, 0x211d, - 0x211d, 0x211d, 0x212c, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d, - 0x2139, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d, 0x2146, 0x211d, - 0x211d, 0x211d, 0x211d, 0x211d, 0x2153, 0x080c, 0x0dc4, 0xa180, - 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa070, + 0x0160, 0x8a51, 0x0904, 0x21b7, 0x8c60, 0x0804, 0x2007, 0xa004, + 0x9045, 0x0904, 0x21b7, 0x0804, 0x1fe2, 0x8a51, 0x0904, 0x21b7, + 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x21b7, + 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1fb8, 0x2c05, 0x2060, 0xa884, + 0xc0fc, 0xa886, 0x0804, 0x21ac, 0x2c05, 0x8422, 0x8420, 0x831a, + 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2149, 0x9082, + 0x001c, 0x0002, 0x20e5, 0x20e5, 0x20e7, 0x20e5, 0x20e5, 0x20e5, + 0x20f5, 0x20e5, 0x20e5, 0x20e5, 0x2103, 0x20e5, 0x20e5, 0x20e5, + 0x2111, 0x20e5, 0x20e5, 0x20e5, 0x211f, 0x20e5, 0x20e5, 0x20e5, + 0x212d, 0x20e5, 0x20e5, 0x20e5, 0x213b, 0x080c, 0x0dc3, 0xa180, + 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa078, + 0x9420, 0xa07c, 0x9319, 0x0804, 0x21a7, 0xa190, 0x2400, 0x9122, + 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c, + 0x9319, 0x0804, 0x21a7, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300, + 0x911b, 0x0a0c, 0x0dc3, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804, + 0x21a7, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c, + 0x0dc3, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x21a7, 0xa1c0, + 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8, + 0x9420, 0xa0bc, 0x9319, 0x0804, 0x21a7, 0xa1d0, 0x2400, 0x9122, + 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0c8, 0x9420, 0xa0cc, + 0x9319, 0x0804, 0x21a7, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300, + 0x911b, 0x0a0c, 0x0dc3, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804, + 0x21a7, 0x9082, 0x001c, 0x0002, 0x2167, 0x2165, 0x2165, 0x2165, + 0x2165, 0x2165, 0x2174, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165, + 0x2181, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165, 0x218e, 0x2165, + 0x2165, 0x2165, 0x2165, 0x2165, 0x219b, 0x080c, 0x0dc3, 0xa180, + 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa070, 0x9420, 0xa074, 0x9319, 0x0498, 0xa198, 0x2400, 0x9122, 0xa19c, - 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c, 0x9319, + 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c, 0x9319, 0x0430, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c, - 0x0dc4, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400, - 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8, 0x9420, + 0x0dc3, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400, + 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8, 0x9420, 0xa0bc, 0x9319, 0x0060, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300, - 0x911b, 0x0a0c, 0x0dc4, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e, + 0x911b, 0x0a0c, 0x0dc3, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e, 0xab22, 0xa884, 0xc0fd, 0xa886, 0x2800, 0xa85a, 0x2c00, 0xa812, 0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e, 0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004, - 0xd0bc, 0x190c, 0x0dbd, 0x9084, 0x0007, 0x0002, 0x2190, 0x1d94, - 0x2190, 0x2186, 0x2189, 0x218c, 0x2189, 0x218c, 0x080c, 0x1d94, - 0x0005, 0x080c, 0x11a7, 0x0005, 0x080c, 0x1d94, 0x080c, 0x11a7, + 0xd0bc, 0x190c, 0x0dbc, 0x9084, 0x0007, 0x0002, 0x21d8, 0x1ddc, + 0x21d8, 0x21ce, 0x21d1, 0x21d4, 0x21d1, 0x21d4, 0x080c, 0x1ddc, + 0x0005, 0x080c, 0x11b3, 0x0005, 0x080c, 0x1ddc, 0x080c, 0x11b3, 0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260, 0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406, 0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, - 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22af, 0x7900, 0xd1dc, - 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x21d7, - 0x21cf, 0x7c74, 0x21cf, 0x21d1, 0x21d1, 0x21d1, 0x21d1, 0x7c5a, - 0x21cf, 0x21d3, 0x21cf, 0x21d1, 0x21cf, 0x21d1, 0x21cf, 0x080c, - 0x0dc4, 0x0031, 0x0020, 0x080c, 0x7c5a, 0x080c, 0x7c74, 0x0005, - 0x0006, 0x0016, 0x0026, 0x080c, 0xd379, 0x7930, 0x9184, 0x0003, + 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22f7, 0x7900, 0xd1dc, + 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x221f, + 0x2217, 0x7d14, 0x2217, 0x2219, 0x2219, 0x2219, 0x2219, 0x7cfa, + 0x2217, 0x221b, 0x2217, 0x2219, 0x2217, 0x2219, 0x2217, 0x080c, + 0x0dc3, 0x0031, 0x0020, 0x080c, 0x7cfa, 0x080c, 0x7d14, 0x0005, + 0x0006, 0x0016, 0x0026, 0x080c, 0xe106, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001, 0x19d3, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, - 0x2004, 0x9005, 0x090c, 0x0dc4, 0x00c6, 0x2001, 0x19d3, 0x2064, - 0x080c, 0xb5c5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22b2, + 0x2004, 0x9005, 0x090c, 0x0dc3, 0x00c6, 0x2001, 0x19d3, 0x2064, + 0x080c, 0xbde5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, - 0x080c, 0x72e5, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, - 0x7212, 0x0010, 0x080c, 0x5db5, 0x080c, 0x7d18, 0x0041, 0x0018, + 0x080c, 0x7351, 0x1138, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, + 0x727e, 0x0010, 0x080c, 0x5e72, 0x080c, 0x7dc3, 0x0041, 0x0018, 0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, - 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x199b, 0x005e, + 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x19e3, 0x005e, 0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, - 0x1800, 0x7128, 0x2001, 0x194c, 0x2102, 0x2001, 0x1954, 0x2102, + 0x1800, 0x7128, 0x2001, 0x194b, 0x2102, 0x2001, 0x1953, 0x2102, 0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e, 0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398, 0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423, @@ -890,1979 +899,1996 @@ static const uint16_t isp_2300_risc_code[] = { 0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4, 0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810, 0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938, - 0x080c, 0x0dbd, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, + 0x080c, 0x0dbc, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800, - 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a93, - 0x080c, 0x29ae, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, + 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2afc, + 0x080c, 0x2a17, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084, 0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084, 0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x1979, 0x2011, 0x197a, - 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x29f2, 0x1238, 0x939d, + 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2a5b, 0x1238, 0x939d, 0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203, - 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x29dd, 0x9006, - 0x080c, 0x29c0, 0x20a9, 0x0012, 0x1d04, 0x2304, 0x2091, 0x6000, - 0x1f04, 0x2304, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, - 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x26d8, - 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x26e8, 0x60e7, 0x0000, + 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2a46, 0x9006, + 0x080c, 0x2a29, 0x20a9, 0x0012, 0x1d04, 0x234c, 0x2091, 0x6000, + 0x1f04, 0x234c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, + 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x2741, + 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2751, 0x60e7, 0x0000, 0x61ea, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110, 0x2001, 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x149f, 0x60bb, 0x0000, 0x20a9, - 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2339, 0x60bb, 0x0000, 0x60bf, + 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2381, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b, 0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e, 0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083, 0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834, 0x2003, 0x0000, 0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, - 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2399, - 0x237f, 0x2382, 0x2385, 0x238a, 0x238c, 0x2390, 0x2394, 0x080c, - 0x85b8, 0x00b8, 0x080c, 0x8689, 0x00a0, 0x080c, 0x8689, 0x080c, - 0x85b8, 0x0078, 0x0099, 0x0068, 0x080c, 0x85b8, 0x0079, 0x0048, - 0x080c, 0x8689, 0x0059, 0x0028, 0x080c, 0x8689, 0x080c, 0x85b8, + 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x23e1, + 0x23c7, 0x23ca, 0x23cd, 0x23d2, 0x23d4, 0x23d8, 0x23dc, 0x080c, + 0x8789, 0x00b8, 0x080c, 0x885a, 0x00a0, 0x080c, 0x885a, 0x080c, + 0x8789, 0x0078, 0x0099, 0x0068, 0x080c, 0x8789, 0x0079, 0x0048, + 0x080c, 0x885a, 0x0059, 0x0028, 0x080c, 0x885a, 0x080c, 0x8789, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, - 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x25f3, 0xd1f4, 0x190c, - 0x0dbd, 0x080c, 0x72e5, 0x0904, 0x23f6, 0x080c, 0xbef8, 0x1120, + 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2654, 0xd1f4, 0x190c, + 0x0dbc, 0x080c, 0x7351, 0x0904, 0x243e, 0x080c, 0xc8ce, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, - 0x080c, 0x7308, 0x0118, 0x080c, 0x72f6, 0x1520, 0x6027, 0x0020, - 0x6043, 0x0000, 0x080c, 0xbef8, 0x0168, 0x080c, 0x7308, 0x1150, - 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x7176, - 0x0804, 0x25f6, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, - 0x2069, 0x0140, 0x080c, 0x733a, 0x00de, 0x1904, 0x25f6, 0x080c, - 0x75e6, 0x0438, 0x080c, 0x7308, 0x1904, 0x242b, 0x6024, 0x9084, - 0x1800, 0x1110, 0x0804, 0x242b, 0x080c, 0x75e6, 0x080c, 0x75dc, - 0x080c, 0x5ef6, 0x080c, 0x7212, 0x0804, 0x25f3, 0xd1ac, 0x1598, + 0x080c, 0x7374, 0x0118, 0x080c, 0x7362, 0x1520, 0x6027, 0x0020, + 0x6043, 0x0000, 0x080c, 0xc8ce, 0x0168, 0x080c, 0x7374, 0x1150, + 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x71cd, + 0x0804, 0x2657, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, + 0x2069, 0x0140, 0x080c, 0x73a5, 0x00de, 0x1904, 0x2657, 0x080c, + 0x7656, 0x0438, 0x080c, 0x7374, 0x1904, 0x2473, 0x6024, 0x9084, + 0x1800, 0x1110, 0x0804, 0x2473, 0x080c, 0x7656, 0x080c, 0x764c, + 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0804, 0x2654, 0xd1ac, 0x1598, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x11c0, 0xd0d4, 0x1520, 0xd0cc, - 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x74c7, 0x0804, - 0x25f3, 0x080c, 0xbef8, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c, - 0x2bbf, 0x004e, 0x080c, 0x75e1, 0x0090, 0x080c, 0xbef8, 0x0130, - 0x0046, 0x2021, 0x0002, 0x080c, 0x2bbf, 0x004e, 0x2001, 0x195a, - 0x2003, 0x0002, 0x0020, 0x080c, 0x7423, 0x0804, 0x25f3, 0x080c, - 0x7569, 0x0804, 0x25f3, 0xd1ac, 0x0904, 0x2514, 0x080c, 0x72e5, - 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xbef8, - 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e, - 0x080c, 0x72ff, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, - 0x7212, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e, - 0x000e, 0x080c, 0x72bd, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, + 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x7532, 0x0804, + 0x2654, 0x080c, 0xc8ce, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c, + 0x2c28, 0x004e, 0x080c, 0x7651, 0x0090, 0x080c, 0xc8ce, 0x0130, + 0x0046, 0x2021, 0x0002, 0x080c, 0x2c28, 0x004e, 0x2001, 0x1959, + 0x2003, 0x0002, 0x0020, 0x080c, 0x748e, 0x0804, 0x2654, 0x080c, + 0x75d4, 0x0804, 0x2654, 0xd1ac, 0x0904, 0x2575, 0x080c, 0x7351, + 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xc8ce, + 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e, + 0x080c, 0x736b, 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, + 0x727e, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e, + 0x000e, 0x080c, 0x7329, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x080c, - 0xbef8, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418, - 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e, 0x003e, 0x080c, 0xbef1, - 0x1904, 0x24f1, 0x9196, 0xff00, 0x01e8, 0x705c, 0x9084, 0x00ff, - 0x810f, 0x81ff, 0x0110, 0x9116, 0x01a8, 0x7130, 0xd18c, 0x1190, - 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132, 0x0060, 0x6240, 0x9294, - 0x0010, 0x0904, 0x24f1, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00, - 0x1904, 0x24f1, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, - 0xd1ac, 0x1904, 0x24f1, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, - 0x8013, 0x080c, 0x4abd, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, + 0xc8ce, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418, + 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e, 0x003e, 0x080c, 0xc8c7, + 0x1904, 0x2552, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff, + 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550, + 0x080c, 0x325c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6865, 0x1510, + 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296, + 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2552, 0x7038, 0xd08c, + 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2552, 0xc1ad, + 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x4b6d, 0x003e, + 0x0804, 0x2552, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, + 0xd1ac, 0x1904, 0x2552, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, + 0x8013, 0x080c, 0x4b6d, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011, 0x185f, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011, - 0x0100, 0x080c, 0x8532, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, - 0x080c, 0xd0d7, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x31cc, 0x200d, + 0x0100, 0x080c, 0x8703, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, + 0x080c, 0xdc90, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, - 0xd156, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004, - 0x080c, 0x3037, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9, 0x007f, - 0x900e, 0x080c, 0x6411, 0x1140, 0x7030, 0xd084, 0x1118, 0xb800, - 0xd0bc, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x24e1, 0x00be, - 0x015e, 0x00ce, 0x004e, 0x080c, 0x9e89, 0x60e3, 0x0000, 0x001e, - 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, - 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, - 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825, - 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x25f3, 0x0016, - 0x6220, 0xd2b4, 0x0904, 0x259c, 0x080c, 0x8420, 0x080c, 0x9623, - 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d, 0x0904, - 0x256b, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, - 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, - 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, - 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b75, 0x2001, 0x001e, 0x8001, - 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a6e, 0x6904, 0xd1dc, 0x1140, - 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, - 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x7814, 0x2048, 0xa86b, 0x0103, - 0x2f60, 0x080c, 0x9f18, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, - 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, - 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061, - 0x19c4, 0x6028, 0x080c, 0xbef8, 0x0120, 0x909a, 0x0003, 0x1258, - 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, - 0x95ff, 0x0804, 0x25f2, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9d0f, - 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c, - 0x9f88, 0x00ce, 0x0804, 0x25f2, 0xd2bc, 0x0904, 0x25df, 0x080c, - 0x842d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027, - 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110, - 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044, 0x080c, - 0xbef8, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8, - 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009, - 0x07d0, 0x080c, 0x8425, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006, - 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0, - 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027, - 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x003e, - 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c, - 0x9f88, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2647, 0x7038, 0xd0ac, - 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2b9f, 0x20a9, - 0x0028, 0xa001, 0x1f04, 0x2601, 0x6150, 0x9185, 0x1400, 0x6052, - 0x20a9, 0x0366, 0x1d04, 0x260a, 0x080c, 0x8454, 0x6020, 0xd09c, - 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c, - 0x2a55, 0x1f04, 0x260a, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, - 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x9e89, 0x60e3, 0x0000, - 0x080c, 0xd33c, 0x080c, 0xd373, 0x080c, 0x55ab, 0xd0fc, 0x1138, - 0x080c, 0xbef1, 0x1120, 0x9085, 0x0001, 0x080c, 0x732a, 0x9006, - 0x080c, 0x2b65, 0x2009, 0x0002, 0x080c, 0x2a93, 0x2001, 0x1800, - 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c, - 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, - 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, - 0x70ce, 0x9116, 0x05e0, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, - 0x2a93, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, - 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4abd, - 0x0430, 0x2001, 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, - 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, - 0x8012, 0x080c, 0x4abd, 0x080c, 0x55ab, 0xd0fc, 0x1180, 0x080c, - 0xbef1, 0x1168, 0x00c6, 0x080c, 0x2733, 0x080c, 0x98cb, 0x2061, - 0x0100, 0x2019, 0x0028, 0x900e, 0x080c, 0x3037, 0x00ce, 0x012e, - 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, - 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, - 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204, - 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584, - 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff, - 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7f2a, 0x0048, - 0x9584, 0x00ff, 0x9080, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f, - 0x9006, 0x0005, 0x9080, 0x31cc, 0x200d, 0x918c, 0x00ff, 0x0005, - 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9, - 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x26e3, 0x00de, 0x0005, - 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102, - 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, - 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xd837, 0x2005, - 0x6856, 0x8211, 0x1f04, 0x26f8, 0x002e, 0x00de, 0x000e, 0x0005, - 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, - 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, - 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, - 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, - 0x680e, 0x1f04, 0x2728, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, - 0x00de, 0x015e, 0x0005, 0x080c, 0x55a7, 0xd0c4, 0x0150, 0xd0a4, - 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xd156, - 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, - 0xd0dc, 0x0904, 0x279f, 0x080c, 0x29f2, 0x0660, 0x9084, 0x0700, - 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, - 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400, - 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120, - 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, - 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, - 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, - 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x854b, - 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, - 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x72e5, 0x1118, - 0x2009, 0x194a, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, - 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, - 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, - 0x080c, 0x0dbd, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001, - 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005, 0x2001, - 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c, - 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f, - 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff, - 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff, - 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000, - 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6, - 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc4, 0x0033, - 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x2805, 0x2823, - 0x2847, 0x2849, 0x2872, 0x2874, 0x2876, 0x2001, 0x0001, 0x080c, - 0x264c, 0x080c, 0x2a50, 0x2001, 0x196e, 0x2003, 0x0000, 0x7828, - 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2a0e, - 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877, - 0x080c, 0x8432, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, - 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a, 0x2001, - 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x29c0, 0x2001, 0xffff, - 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001, 0x196c, 0x2003, 0x0006, - 0x2009, 0x001e, 0x2011, 0x2877, 0x080c, 0x8432, 0x0005, 0x080c, - 0x0dc4, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e, 0x2003, - 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, - 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x2001, 0x1972, 0x2003, - 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001, - 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877, 0x080c, - 0x8432, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x0005, 0x0006, - 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, - 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007, 0x1a0c, - 0x0dc4, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e, - 0x000e, 0x0005, 0x2899, 0x28b5, 0x28f1, 0x291d, 0x293d, 0x2949, - 0x294b, 0x080c, 0x2a02, 0x1190, 0x2009, 0x1974, 0x2104, 0x7a38, - 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085, - 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c, 0x296f, - 0x2001, 0xffff, 0x080c, 0x2814, 0x0005, 0x080c, 0x294d, 0x05c0, - 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a02, 0x1158, - 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1974, - 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000, 0x200a, - 0x9086, 0x0005, 0x0118, 0x080c, 0x2955, 0x00c0, 0x200b, 0x0000, - 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, - 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x196e, 0x2003, 0x0002, - 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c, 0x2836, - 0x0005, 0x080c, 0x294d, 0x0540, 0x2009, 0x1975, 0x2104, 0x8001, - 0x200a, 0x080c, 0x2a02, 0x1148, 0x2001, 0x196c, 0x2003, 0x0003, - 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975, 0x2104, - 0x9005, 0x1118, 0x080c, 0x2992, 0x0010, 0x080c, 0x2962, 0x080c, - 0x2955, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e, 0x2003, - 0x0001, 0x080c, 0x2836, 0x0000, 0x0005, 0x0479, 0x01e8, 0x080c, - 0x2a02, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a, 0x9086, - 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a, 0x2009, - 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001, 0x196e, - 0x2003, 0x0004, 0x080c, 0x2861, 0x0005, 0x0079, 0x0148, 0x080c, - 0x2a02, 0x1118, 0x080c, 0x284d, 0x0018, 0x0079, 0x080c, 0x2861, - 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x2009, 0x1976, 0x2104, - 0x8001, 0x200a, 0x090c, 0x29ae, 0x0005, 0x7a38, 0x9294, 0x0005, - 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, - 0x29dd, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, - 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x0005, 0x2009, - 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068, - 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110, - 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005, - 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, - 0x29dd, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084, 0x7fff, - 0x090c, 0x0dc4, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a, 0x9844, - 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc4, 0x9006, - 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156, - 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04, - 0x29b4, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005, - 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084, - 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c, 0x795a, - 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009, - 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, - 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004, - 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a, - 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007, - 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009, - 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2a8d, - 0xd09c, 0x1110, 0x1f04, 0x2a05, 0x015e, 0x0005, 0x0126, 0x0016, - 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, 0x7850, - 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x7852, - 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090, - 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002, - 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b, - 0x0004, 0x0000, 0x0006, 0x1d04, 0x2a3b, 0x080c, 0x8454, 0x1f04, - 0x2a3b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c, - 0x2a8d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005, - 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6, - 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820, - 0xd0e4, 0x1140, 0x1f04, 0x2a5f, 0x0028, 0x7854, 0xd08c, 0x1110, - 0x1f04, 0x2a65, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a6e, - 0x080c, 0x8454, 0x1f04, 0x2a6e, 0x0005, 0x0006, 0x2001, 0x1978, - 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978, - 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978, - 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001, - 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102, 0x000e, - 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170, - 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, 0x0036, - 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x2100, - 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904, 0x2b06, - 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208, 0x200a, - 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e53, 0x2019, 0x0160, - 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, 0x0007, - 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, 0x1548, - 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e, 0x0148, - 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208, 0x2732, - 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211, 0x19d8, - 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, - 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008, - 0x0421, 0x2001, 0x195e, 0x200c, 0x080c, 0x0e53, 0x004e, 0x003e, - 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160, - 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00, - 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026, - 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100, - 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018, - 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106, - 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, 0x9184, - 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, 0x918c, - 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c, - 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184, - 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c, - 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, - 0x72ff, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, - 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, - 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, - 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, - 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, - 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x72ff, 0x0110, - 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006, - 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, - 0x6052, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, - 0x1d04, 0x2bb0, 0x080c, 0x8454, 0x1f04, 0x2bb0, 0x6050, 0x9085, - 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005, 0x7044, - 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c, 0x4abd, - 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xd348, 0x2001, - 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc4, 0x0096, 0x6014, - 0x2048, 0x080c, 0xb955, 0x0178, 0xa884, 0xc0dd, 0xa886, 0x6020, - 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, - 0x2004, 0xa99a, 0xa89e, 0x009e, 0x080c, 0xb5c5, 0x00ce, 0x000e, - 0x001e, 0x0005, 0x2e5e, 0x2e5e, 0x2c82, 0x2c82, 0x2c8e, 0x2c8e, - 0x2c9a, 0x2c9a, 0x2ca8, 0x2ca8, 0x2cb4, 0x2cb4, 0x2cc2, 0x2cc2, - 0x2cd0, 0x2cd0, 0x2ce2, 0x2ce2, 0x2cee, 0x2cee, 0x2cfc, 0x2cfc, - 0x2d1a, 0x2d1a, 0x2d3a, 0x2d3a, 0x2d0a, 0x2d0a, 0x2d2a, 0x2d2a, - 0x2d48, 0x2d48, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2d5a, 0x2d5a, 0x2d66, 0x2d66, 0x2d74, 0x2d74, - 0x2d82, 0x2d82, 0x2d92, 0x2d92, 0x2da0, 0x2da0, 0x2db0, 0x2db0, - 0x2dc0, 0x2dc0, 0x2dd2, 0x2dd2, 0x2de0, 0x2de0, 0x2df0, 0x2df0, - 0x2e12, 0x2e12, 0x2e34, 0x2e34, 0x2e00, 0x2e00, 0x2e23, 0x2e23, - 0x2e43, 0x2e43, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, - 0x2ce0, 0x2ce0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x21b0, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365, - 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x27a2, 0x0804, 0x2e56, 0x0106, 0x0006, - 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, - 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x132a, 0x0804, 0x2e56, - 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, - 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, - 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, - 0x080c, 0x132a, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, - 0x132a, 0x080c, 0x21b0, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, - 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a, - 0x080c, 0x21b0, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, - 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, - 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0000, 0x015e, 0x014e, - 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, - 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6704, 0x1904, 0x2f62, - 0x72d8, 0x2001, 0x1959, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, - 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2f62, 0x080c, 0x2f67, 0x0804, - 0x2f62, 0xd2cc, 0x1904, 0x2f62, 0x080c, 0x72e5, 0x1120, 0x70ab, - 0xffff, 0x0804, 0x2f62, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804, - 0x2f62, 0x080c, 0x31bb, 0x0160, 0x080c, 0xbef8, 0x0128, 0x2001, - 0x1817, 0x203c, 0x0804, 0x2ef3, 0x70ab, 0xffff, 0x0804, 0x2f62, - 0x2001, 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2ef3, 0xd28c, - 0x1904, 0x2ef3, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, - 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, - 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x0588, - 0x908e, 0x0000, 0x0570, 0x908e, 0x00ff, 0x1150, 0x080c, 0x31c0, - 0x1568, 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x0458, - 0x2009, 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, - 0x080c, 0x6781, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00c8, 0x900e, - 0x080c, 0x269f, 0x080c, 0x63c1, 0x1178, 0x080c, 0x6746, 0x1120, - 0x080c, 0x2f80, 0x0148, 0x0028, 0x080c, 0x30ab, 0x080c, 0x2fac, - 0x0118, 0x8318, 0x0804, 0x2ea9, 0x73aa, 0x0010, 0x70ab, 0xffff, - 0x003e, 0x0804, 0x2f62, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, + 0xdd18, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, + 0x0004, 0x080c, 0x30cd, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9, + 0x007f, 0x900e, 0x080c, 0x64fc, 0x1140, 0x7030, 0xd084, 0x1118, + 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x2542, + 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa30e, 0x60e3, 0x0000, + 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, + 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, + 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, + 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x2654, + 0x0016, 0x6220, 0xd2b4, 0x0904, 0x25fd, 0x080c, 0x858c, 0x080c, + 0x98d1, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d, + 0x0904, 0x25cc, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, + 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, + 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, + 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2bde, 0x2001, 0x001e, + 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2ad7, 0x6904, 0xd1dc, + 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, + 0x2bce, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x7814, 0x2048, 0xa86b, + 0x0103, 0x2f60, 0x080c, 0xa39d, 0x009e, 0x00ee, 0x00ce, 0x00de, + 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, + 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6, + 0x2061, 0x19c4, 0x6028, 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003, + 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, + 0x080c, 0x98ad, 0x0804, 0x2653, 0x2061, 0x0100, 0x62c0, 0x080c, + 0xa194, 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, + 0x080c, 0xa419, 0x00ce, 0x0804, 0x2653, 0xd2bc, 0x0904, 0x2640, + 0x080c, 0x8599, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, + 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, + 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044, + 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, + 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, + 0x2009, 0x07d0, 0x080c, 0x8591, 0x9080, 0x0008, 0x2004, 0x9086, + 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, + 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, + 0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, + 0x003e, 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, + 0x080c, 0xa419, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x26ac, 0x7038, + 0xd0ac, 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2c08, + 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2662, 0x6150, 0x9185, 0x1400, + 0x6052, 0x20a9, 0x0366, 0x1d04, 0x266b, 0x080c, 0x85c0, 0x6020, + 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0, + 0x080c, 0x2abe, 0x1f04, 0x266b, 0x015e, 0x6152, 0x001e, 0x6027, + 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa30e, 0x60e3, + 0x0000, 0x080c, 0xe0c9, 0x080c, 0xe100, 0x080c, 0x5668, 0xd0fc, + 0x1138, 0x080c, 0xc8c7, 0x1120, 0x9085, 0x0001, 0x080c, 0x7395, + 0x9006, 0x080c, 0x2bce, 0x2009, 0x0002, 0x080c, 0x2afc, 0x00e6, + 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ea2, 0x00ee, 0x6027, + 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, + 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126, + 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904, + 0x2700, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2afc, 0x2011, + 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, + 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b6d, 0x0448, 0x2001, + 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, + 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, + 0x4b6d, 0x080c, 0x0ea2, 0x080c, 0x5668, 0xd0fc, 0x1188, 0x080c, + 0xc8c7, 0x1170, 0x00c6, 0x080c, 0x279c, 0x080c, 0x9b9c, 0x2061, + 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, 0x080c, 0x30cd, 0x00ce, + 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, + 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, + 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, + 0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, + 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, + 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8050, + 0x0048, 0x9584, 0x00ff, 0x9080, 0x3268, 0x200d, 0x918c, 0xff00, + 0x810f, 0x9006, 0x0005, 0x9080, 0x3268, 0x200d, 0x918c, 0x00ff, + 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, + 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x274c, 0x00de, + 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, + 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, + 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xe5de, + 0x2005, 0x6856, 0x8211, 0x1f04, 0x2761, 0x002e, 0x00de, 0x000e, + 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, + 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, + 0x0006, 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, + 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, + 0x0404, 0x680e, 0x1f04, 0x2791, 0x680f, 0x0000, 0x000e, 0x001e, + 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, 0x5664, 0xd0c4, 0x0150, + 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, + 0xdd18, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, + 0x78c4, 0xd0dc, 0x0904, 0x2808, 0x080c, 0x2a5b, 0x0660, 0x9084, + 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, + 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, + 0x0400, 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, + 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, + 0x9016, 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, + 0x2009, 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, + 0x2011, 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, + 0x871c, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, + 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x7351, + 0x1118, 0x2009, 0x1949, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, + 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, + 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, + 0x0110, 0x080c, 0x0dbc, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, + 0x2001, 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005, + 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, + 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, + 0x810f, 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, + 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, + 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, + 0x1000, 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, + 0x00e6, 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc3, + 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x286e, + 0x288c, 0x28b0, 0x28b2, 0x28db, 0x28dd, 0x28df, 0x2001, 0x0001, + 0x080c, 0x26b1, 0x080c, 0x2ab9, 0x2001, 0x196e, 0x2003, 0x0000, + 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, + 0x2a77, 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, + 0x28e0, 0x080c, 0x859e, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000, + 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a, + 0x2001, 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x2a29, 0x2001, + 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77, 0x2001, 0x196c, 0x2003, + 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0, 0x080c, 0x859e, 0x0005, + 0x080c, 0x0dc3, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e, + 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, + 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x2001, 0x1972, + 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77, + 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0, + 0x080c, 0x859e, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x0005, + 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, + 0x8000, 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007, + 0x1a0c, 0x0dc3, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, + 0x001e, 0x000e, 0x0005, 0x2902, 0x291e, 0x295a, 0x2986, 0x29a6, + 0x29b2, 0x29b4, 0x080c, 0x2a6b, 0x1190, 0x2009, 0x1974, 0x2104, + 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, + 0xc085, 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c, + 0x29d8, 0x2001, 0xffff, 0x080c, 0x287d, 0x0005, 0x080c, 0x29b6, + 0x05c0, 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a6b, + 0x1158, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, + 0x1974, 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000, + 0x200a, 0x9086, 0x0005, 0x0118, 0x080c, 0x29be, 0x00c0, 0x200b, + 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, + 0x0010, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x196e, 0x2003, + 0x0002, 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c, + 0x289f, 0x0005, 0x080c, 0x29b6, 0x0540, 0x2009, 0x1975, 0x2104, + 0x8001, 0x200a, 0x080c, 0x2a6b, 0x1148, 0x2001, 0x196c, 0x2003, + 0x0003, 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975, + 0x2104, 0x9005, 0x1118, 0x080c, 0x29fb, 0x0010, 0x080c, 0x29cb, + 0x080c, 0x29be, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e, + 0x2003, 0x0001, 0x080c, 0x289f, 0x0000, 0x0005, 0x0479, 0x01e8, + 0x080c, 0x2a6b, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a, + 0x9086, 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a, + 0x2009, 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001, + 0x196e, 0x2003, 0x0004, 0x080c, 0x28ca, 0x0005, 0x0079, 0x0148, + 0x080c, 0x2a6b, 0x1118, 0x080c, 0x28b6, 0x0018, 0x0079, 0x080c, + 0x28ca, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x2009, 0x1976, + 0x2104, 0x8001, 0x200a, 0x090c, 0x2a17, 0x0005, 0x7a38, 0x9294, + 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, + 0x080c, 0x2a46, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, + 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x0005, + 0x2009, 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, + 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, + 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, + 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, + 0x080c, 0x2a46, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084, + 0x7fff, 0x090c, 0x0dc3, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a, + 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc3, + 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, + 0x0156, 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, + 0x1f04, 0x2a1d, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e, + 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, + 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c, + 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, + 0x2009, 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, + 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, + 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, + 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, + 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, + 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, + 0x2af6, 0xd09c, 0x1110, 0x1f04, 0x2a6e, 0x015e, 0x0005, 0x0126, + 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, + 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000, + 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, + 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, + 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, + 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2aa4, 0x080c, 0x85c0, + 0x1f04, 0x2aa4, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, + 0x080c, 0x2af6, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, + 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, + 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, + 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2ac8, 0x0028, 0x7854, 0xd08c, + 0x1110, 0x1f04, 0x2ace, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, + 0x2ad7, 0x080c, 0x85c0, 0x1f04, 0x2ad7, 0x0005, 0x0006, 0x2001, + 0x1978, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, + 0x1978, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, + 0x1978, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, + 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102, + 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, + 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, + 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, + 0x2100, 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904, + 0x2b6f, 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208, + 0x200a, 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e51, 0x2019, + 0x0160, 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, + 0x0007, 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, + 0x1548, 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e, + 0x0148, 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208, + 0x2732, 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211, + 0x19d8, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, + 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, + 0x0008, 0x0421, 0x2001, 0x195d, 0x200c, 0x080c, 0x0e51, 0x004e, + 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, + 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, + 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, + 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, + 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, + 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, + 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, + 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, + 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, + 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, + 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, + 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, + 0x080c, 0x736b, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, + 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, + 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, + 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, + 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, + 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x736b, + 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, + 0x0006, 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, + 0xfbcf, 0x6052, 0x080c, 0x2af6, 0x9085, 0x2000, 0x6052, 0x20a9, + 0x0012, 0x1d04, 0x2c19, 0x080c, 0x85c0, 0x1f04, 0x2c19, 0x6050, + 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005, + 0x7044, 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c, + 0x4b6d, 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xe0d5, + 0x2001, 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc3, 0x0096, + 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0178, 0xa884, 0xc0dd, 0xa886, + 0x6020, 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001, + 0x0131, 0x2004, 0xa99a, 0xa89e, 0x009e, 0x6020, 0x9086, 0x0003, + 0x1150, 0x080c, 0x6823, 0x0138, 0x2031, 0x0001, 0x080c, 0xbe31, + 0x080c, 0xc4fe, 0x0010, 0x080c, 0xbde5, 0x00ce, 0x000e, 0x001e, + 0x0005, 0x2ed5, 0x2ed5, 0x2cf9, 0x2cf9, 0x2d05, 0x2d05, 0x2d11, + 0x2d11, 0x2d1f, 0x2d1f, 0x2d2b, 0x2d2b, 0x2d39, 0x2d39, 0x2d47, + 0x2d47, 0x2d59, 0x2d59, 0x2d65, 0x2d65, 0x2d73, 0x2d73, 0x2d91, + 0x2d91, 0x2db1, 0x2db1, 0x2d81, 0x2d81, 0x2da1, 0x2da1, 0x2dbf, + 0x2dbf, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2dd1, 0x2dd1, 0x2ddd, 0x2ddd, 0x2deb, 0x2deb, 0x2df9, + 0x2df9, 0x2e09, 0x2e09, 0x2e17, 0x2e17, 0x2e27, 0x2e27, 0x2e37, + 0x2e37, 0x2e49, 0x2e49, 0x2e57, 0x2e57, 0x2e67, 0x2e67, 0x2e89, + 0x2e89, 0x2eab, 0x2eab, 0x2e77, 0x2e77, 0x2e9a, 0x2e9a, 0x2eba, + 0x2eba, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, + 0x2d57, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x21f8, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0xa001, + 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c, + 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x280b, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, + 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, + 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x280b, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, + 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, + 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, + 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, + 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, + 0x1336, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, + 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336, + 0x080c, 0x21f8, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, + 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x080c, + 0x21f8, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, + 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, + 0x080c, 0x1336, 0x080c, 0x21f8, 0x0000, 0x015e, 0x014e, 0x013e, + 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, + 0x0026, 0x0046, 0x9026, 0x080c, 0x682b, 0x1904, 0x2fe9, 0x72d8, + 0x2001, 0x1958, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, + 0x1138, 0xd2bc, 0x1904, 0x2fe9, 0x080c, 0x2fee, 0x0804, 0x2fe9, + 0xd2cc, 0x1904, 0x2fe9, 0x080c, 0x7351, 0x1120, 0x70ab, 0xffff, + 0x0804, 0x2fe9, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804, 0x2fe9, + 0x080c, 0x3257, 0x0160, 0x080c, 0xc8ce, 0x0128, 0x2001, 0x1817, + 0x203c, 0x0804, 0x2f73, 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2001, + 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2f73, 0xd28c, 0x1904, + 0x2f73, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001, + 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, + 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e, + 0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0, + 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x04a0, 0x2009, + 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, 0x080c, + 0x68a8, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c, + 0x2708, 0x080c, 0x6497, 0x11c0, 0x080c, 0x686d, 0x1168, 0x7030, + 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x6748, 0x0120, + 0x080c, 0x3007, 0x0148, 0x0028, 0x080c, 0x3147, 0x080c, 0x3033, + 0x0118, 0x8318, 0x0804, 0x2f20, 0x73aa, 0x0010, 0x70ab, 0xffff, + 0x003e, 0x0804, 0x2fe9, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, - 0x70ab, 0xffff, 0x0804, 0x2f62, 0x2700, 0x0156, 0x0016, 0x9106, - 0x0904, 0x2f57, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0150, 0x0026, - 0x2011, 0x0010, 0x080c, 0x6781, 0x002e, 0x0118, 0x2009, 0xffff, - 0x04f0, 0xc484, 0x080c, 0x6411, 0x0150, 0x080c, 0xbef8, 0x1578, - 0x080c, 0x31bb, 0x1560, 0x080c, 0x63c1, 0x1588, 0x0008, 0xc485, - 0x080c, 0x6746, 0x01e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6746, - 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x63eb, 0x0028, - 0x080c, 0x3137, 0x01a0, 0x080c, 0x3162, 0x0088, 0x080c, 0x30ab, - 0x080c, 0xbef8, 0x1160, 0x080c, 0x2fac, 0x0188, 0x0040, 0x080c, - 0xbef8, 0x1118, 0x080c, 0x3137, 0x0110, 0x0451, 0x0140, 0x001e, - 0x8108, 0x015e, 0x1f04, 0x2f0c, 0x70ab, 0xffff, 0x0018, 0x001e, - 0x015e, 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, - 0x0016, 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x63c1, 0x1168, - 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x30ab, 0x04a9, 0x0128, - 0x70d8, 0xc0bd, 0x70da, 0x080c, 0xbc7a, 0x001e, 0x00ce, 0x0005, - 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084, - 0x00ff, 0xb842, 0x080c, 0x9f5b, 0x01d0, 0x2b00, 0x6012, 0x080c, - 0xbc97, 0x6023, 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0000, - 0x080c, 0x6372, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, - 0x012e, 0x2009, 0x0004, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce, - 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, - 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9f5b, - 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023, 0x0001, 0x9006, - 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x0126, 0x2091, - 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, - 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, - 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x63c1, 0x1140, - 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, - 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, - 0x080c, 0x9ec2, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023, - 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, - 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, - 0x0002, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, - 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, - 0x007f, 0x080c, 0x63c1, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, - 0xb8bb, 0x0004, 0x080c, 0x9ec2, 0x0170, 0x2b00, 0x6012, 0x6316, - 0x6023, 0x0001, 0x620a, 0x080c, 0xbc97, 0x2009, 0x0022, 0x080c, - 0x9f88, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, - 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x884e, - 0x080c, 0x87ef, 0x080c, 0x9d56, 0x080c, 0xacec, 0x3e08, 0x2130, - 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, - 0x900e, 0x0016, 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x001e, - 0x8108, 0x1f04, 0x3051, 0x9686, 0x0001, 0x190c, 0x318f, 0x00be, - 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, - 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0, - 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000, - 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xba10, - 0xbb14, 0xbcac, 0x080c, 0x5f10, 0xba12, 0xbb16, 0xbcae, 0x00be, - 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6, - 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, - 0x0150, 0x2071, 0x1800, 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6, - 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0, - 0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, - 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, 0x0156, - 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, 0x55a7, - 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, 0x002d, - 0x080c, 0xd156, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, - 0x0904, 0x3116, 0x928e, 0x007f, 0x0904, 0x3116, 0x928e, 0x0080, - 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148, - 0x2001, 0x196a, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e, 0x2003, - 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6710, - 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, - 0x0000, 0x080c, 0x8748, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, - 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, - 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, - 0x0016, 0x2c08, 0x080c, 0xce89, 0x001e, 0x007e, 0x002e, 0x8210, - 0x1f04, 0x30cd, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be, - 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c, - 0x55a7, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009, - 0x0029, 0x080c, 0xd156, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016, - 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x673e, - 0x11d0, 0x2100, 0x080c, 0x26d2, 0x81ff, 0x01b8, 0x2019, 0x0001, - 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00, - 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff, - 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e, - 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036, - 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065, - 0x0158, 0x0016, 0x00c6, 0x2061, 0x1a92, 0x001e, 0x6112, 0x080c, - 0x3066, 0x001e, 0x080c, 0x63eb, 0x012e, 0x00ce, 0x001e, 0x0005, - 0x0016, 0x0026, 0x2110, 0x080c, 0x9b81, 0x080c, 0xd251, 0x002e, - 0x001e, 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, - 0x00b6, 0x080c, 0x72e5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, - 0x0782, 0x080c, 0x72e5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, - 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, - 0xd0bc, 0x090c, 0x63eb, 0x8108, 0x1f04, 0x31a0, 0x2061, 0x1800, - 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, - 0x00be, 0x00ce, 0x0005, 0x2001, 0x1880, 0x2004, 0xd0bc, 0x0005, - 0x2011, 0x185f, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x187e, - 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, - 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, - 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, - 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, - 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, - 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, - 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, - 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, - 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, - 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, - 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, - 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, - 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, - 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, - 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, - 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, - 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, - 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, - 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, - 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, - 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, - 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, - 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, - 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, - 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, - 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, - 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, - 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2700, 0x0156, 0x0016, 0x9106, + 0x0904, 0x2fde, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0158, 0x0026, + 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0120, 0x2009, 0xffff, + 0x0804, 0x2fe6, 0xc484, 0x080c, 0x64fc, 0x0150, 0x080c, 0xc8ce, + 0x15a8, 0x080c, 0x3257, 0x1590, 0x080c, 0x6497, 0x15b8, 0x0008, + 0xc485, 0x080c, 0x686d, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, + 0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x686d, 0x9082, + 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x64c1, 0x0028, 0x080c, + 0x31d3, 0x01a0, 0x080c, 0x31fe, 0x0088, 0x080c, 0x3147, 0x080c, + 0xc8ce, 0x1160, 0x080c, 0x3033, 0x0188, 0x0040, 0x080c, 0xc8ce, + 0x1118, 0x080c, 0x31d3, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, + 0x015e, 0x1f04, 0x2f8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, + 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, + 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6497, 0x1168, 0xb813, + 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3147, 0x04a9, 0x0128, 0x70d8, + 0xc0bd, 0x70da, 0x080c, 0xc617, 0x001e, 0x00ce, 0x0005, 0x0016, + 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff, + 0xb842, 0x080c, 0xa3ec, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640, + 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0000, 0x080c, + 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, + 0x2009, 0x0004, 0x080c, 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de, + 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, + 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xa3ec, 0x0548, + 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, + 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, + 0x3102, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, + 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4, + 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0xa419, 0x9085, + 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, + 0x0026, 0x2009, 0x0080, 0x080c, 0x6497, 0x1140, 0xb813, 0x00ff, + 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, + 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xa347, + 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006, + 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091, + 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, + 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, + 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, + 0x6497, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004, + 0x080c, 0xa347, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, + 0x620a, 0x080c, 0xc640, 0x2009, 0x0022, 0x080c, 0xa419, 0x9085, + 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, + 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x8a36, 0x080c, 0x89c0, + 0x080c, 0xa1db, 0x080c, 0xb3a0, 0x3e08, 0x2130, 0x81ff, 0x0120, + 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, + 0x080c, 0x64fc, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, + 0x1110, 0x080c, 0x5fcd, 0x001e, 0x8108, 0x1f04, 0x30e7, 0x9686, + 0x0001, 0x190c, 0x322b, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, + 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, + 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, + 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x2c08, 0x080c, + 0xda37, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5fcd, + 0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e, + 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, + 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4, + 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071, + 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800, + 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, + 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, + 0x0001, 0x0078, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4, 0x0130, + 0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xdd18, 0x20a9, 0x0800, + 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x31b2, 0x928e, 0x007f, + 0x0904, 0x31b2, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, + 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x196a, 0x0006, 0x2003, + 0x0001, 0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, + 0x2001, 0x0001, 0x080c, 0x6837, 0x00ce, 0x00be, 0x2019, 0x0029, + 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x00b6, + 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, + 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, + 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xda37, + 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3169, 0x015e, 0x001e, + 0x002e, 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, + 0x0046, 0x0026, 0x0016, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4, + 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xdd18, 0x001e, + 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, + 0x82ff, 0x01e8, 0x080c, 0x6865, 0x11d0, 0x2100, 0x080c, 0x273b, + 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, + 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, + 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, + 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, + 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, + 0x1a92, 0x001e, 0x6112, 0x080c, 0x3102, 0x001e, 0x080c, 0x64c1, + 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, + 0x9e54, 0x080c, 0xdfde, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836, + 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351, 0x1118, + 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351, 0x1110, + 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, + 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x64c1, 0x8108, + 0x1f04, 0x323c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084, + 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, + 0x1880, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x185f, 0x2214, 0xd2ec, + 0x0005, 0x0026, 0x2011, 0x187e, 0x2214, 0xd2dc, 0x002e, 0x0005, + 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, + 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, + 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, + 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, + 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, + 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, + 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, + 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, + 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, + 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, + 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, + 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, + 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, + 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, + 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, + 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, + 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, + 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, + 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, + 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, + 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, + 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, + 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, + 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, + 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, + 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, + 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, + 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, + 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, - 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189f, 0x7003, 0x0002, - 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, - 0x703b, 0x18bb, 0x703f, 0x18bb, 0x7007, 0x0001, 0x080c, 0x101a, - 0x090c, 0x0dc4, 0x2900, 0x706a, 0xa86b, 0x0002, 0xa8af, 0xdcb0, - 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x706e, 0xa86b, 0x0002, - 0xa8af, 0xdcb0, 0x0005, 0x2071, 0x189f, 0x7004, 0x0002, 0x32fb, - 0x32fc, 0x330f, 0x3323, 0x0005, 0x1004, 0x330c, 0x0e04, 0x330c, - 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, - 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, - 0x0000, 0x2061, 0x18b9, 0x2c4c, 0xa870, 0x908e, 0x0100, 0x0128, - 0x9086, 0x0200, 0x0904, 0x33f7, 0x0005, 0x7018, 0x2048, 0x2061, - 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa868, 0x9094, 0x00ff, - 0x9296, 0x0029, 0x1120, 0xaa7c, 0xd2fc, 0x0128, 0x0005, 0x9086, - 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, - 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, - 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33f4, 0x61cc, 0x0804, - 0x3389, 0x33cb, 0x3403, 0x33f4, 0x340f, 0x3419, 0x341f, 0x3423, - 0x3433, 0x3437, 0x344d, 0x3453, 0x3459, 0x3464, 0x346f, 0x347e, - 0x348d, 0x349b, 0x34b2, 0x34cd, 0x33f4, 0x3578, 0x35b6, 0x3658, - 0x3669, 0x368c, 0x33f4, 0x33f4, 0x33f4, 0x36c4, 0x36e0, 0x36e9, - 0x3717, 0x371d, 0x33f4, 0x3763, 0x33f4, 0x33f4, 0x33f4, 0x33f4, - 0x33f4, 0x376e, 0x3777, 0x377f, 0x3781, 0x33f4, 0x33f4, 0x33f4, - 0x33f4, 0x33f4, 0x33f4, 0x37ad, 0x33f4, 0x33f4, 0x33f4, 0x33f4, - 0x33f4, 0x37ca, 0x384c, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, - 0x33f4, 0x0002, 0x3876, 0x3879, 0x38d8, 0x38f1, 0x3921, 0x3bc3, - 0x33f4, 0x5165, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, - 0x33f4, 0x33f4, 0x344d, 0x3453, 0x40f8, 0x55c1, 0x410e, 0x51f4, - 0x5246, 0x5351, 0x33f4, 0x53b3, 0x53ef, 0x5420, 0x5529, 0x544d, - 0x54a9, 0x33f4, 0x4112, 0x42da, 0x42f0, 0x4315, 0x437a, 0x43ee, - 0x440e, 0x4485, 0x44e1, 0x453d, 0x4540, 0x4565, 0x46ec, 0x4751, - 0x4759, 0x488e, 0x49eb, 0x4a1f, 0x4c7f, 0x33f4, 0x4c9c, 0x4d60, - 0x4e3d, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x4ea3, 0x4ebe, 0x4759, - 0x5105, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4a99, 0x0126, - 0x2091, 0x8000, 0x0e04, 0x33d5, 0x0010, 0x012e, 0x0cc0, 0x7c36, - 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, - 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x119d, 0x7007, 0x0001, 0x2091, 0x5000, - 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, - 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, - 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, - 0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804, 0x4aa6, 0x2039, - 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, - 0x4aa9, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x33cb, 0x7984, - 0x2114, 0x0804, 0x33cb, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, - 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, - 0x7b8c, 0x0804, 0x33cb, 0x7884, 0x2060, 0x0804, 0x3480, 0x2009, - 0x0003, 0x2011, 0x0003, 0x2019, 0x001a, 0x789b, 0x0107, 0x7893, - 0xffff, 0x2001, 0x1890, 0x2004, 0x9005, 0x0118, 0x7896, 0x0804, - 0x33cb, 0x7897, 0x0001, 0x0804, 0x33cb, 0x2039, 0x0001, 0x7d98, - 0x7c9c, 0x0804, 0x3407, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804, - 0x3413, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x2138, - 0x7d98, 0x7c9c, 0x0804, 0x3407, 0x79a0, 0x9182, 0x0040, 0x0210, - 0x0804, 0x3400, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3413, 0x79a0, - 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x21e8, 0x7984, 0x7888, - 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x33cb, 0x2061, 0x0800, - 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, - 0x9005, 0x0904, 0x33cb, 0x0804, 0x33fa, 0x79a0, 0x9182, 0x0040, - 0x0210, 0x0804, 0x3400, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, - 0x4012, 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7990, 0x911a, - 0x1a04, 0x3400, 0x8019, 0x0904, 0x3400, 0x684a, 0x6942, 0x788c, - 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x760d, - 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7994, 0x911a, 0x1a04, - 0x3400, 0x8019, 0x0904, 0x3400, 0x684e, 0x6946, 0x788c, 0x6862, - 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, - 0x080c, 0x68f1, 0x012e, 0x0804, 0x33cb, 0x902e, 0x2520, 0x81ff, - 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x7984, 0x7b88, 0x7a8c, - 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a7, 0x4101, 0x080c, - 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020, - 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x34f1, - 0x0005, 0xa868, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, - 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, - 0x0120, 0x9096, 0x0029, 0x1904, 0x33fd, 0x810f, 0x918c, 0x00ff, - 0x0904, 0x33fd, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, - 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020, - 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0x9290, 0x0040, - 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, - 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x352f, 0x0005, 0xa868, - 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, - 0x33fd, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014, 0x2048, 0xa86c, - 0xc0fd, 0xa86e, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1148, - 0xc2fd, 0xaa7e, 0x080c, 0x5ff5, 0x0138, 0xa87e, 0xa986, 0x012e, - 0x0060, 0x080c, 0x6313, 0x1130, 0x7007, 0x0003, 0x701f, 0x355d, - 0x012e, 0x0005, 0x080c, 0x6d45, 0x012e, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a7, 0x400a, 0x2100, - 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, - 0x9080, 0x001a, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x4aa9, - 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, - 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, - 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, - 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, - 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x0180, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0128, 0x2001, - 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, - 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, - 0x33fd, 0x7984, 0x080c, 0x6411, 0x1904, 0x3400, 0x7e98, 0x9682, - 0x4000, 0x1a04, 0x3400, 0x7c88, 0x7d8c, 0x080c, 0x6579, 0x080c, - 0x6548, 0x0000, 0x1518, 0x2061, 0x1cc8, 0x0126, 0x2091, 0x8000, - 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870, - 0x9406, 0x1118, 0xa874, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x000c, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33fd, 0x0c30, 0x080c, - 0xb5c5, 0x012e, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x900e, 0x2001, - 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45, - 0x080c, 0x6b1d, 0x012e, 0x0804, 0x33cb, 0x00a6, 0x2950, 0xb19c, - 0x080c, 0x6411, 0x1904, 0x3645, 0xb6a8, 0x9682, 0x4000, 0x16e8, - 0xb4a0, 0xb5a4, 0x080c, 0x6579, 0x080c, 0x6548, 0x1520, 0x2061, - 0x1cc8, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x2071, 0x189f, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, + 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, 0x18bb, + 0x7007, 0x0001, 0x080c, 0x1026, 0x090c, 0x0dc3, 0x2900, 0x706a, + 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x080c, 0x1026, 0x090c, 0x0dc3, + 0x2900, 0x706e, 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x0005, 0x2071, + 0x189f, 0x7004, 0x0002, 0x3397, 0x3398, 0x33ab, 0x33bf, 0x0005, + 0x1004, 0x33a8, 0x0e04, 0x33a8, 0x2079, 0x0000, 0x0126, 0x2091, + 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, + 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b9, 0x2c4c, + 0xa870, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3493, + 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, + 0x2048, 0xa868, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa7c, + 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, + 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, + 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f, + 0x1a04, 0x3490, 0x61cc, 0x0804, 0x3425, 0x3467, 0x349f, 0x3490, + 0x34ab, 0x34b5, 0x34bb, 0x34bf, 0x34cf, 0x34d3, 0x34e9, 0x34ef, + 0x34f5, 0x3500, 0x350b, 0x351a, 0x3529, 0x3537, 0x354e, 0x3569, + 0x3490, 0x3614, 0x3652, 0x36f4, 0x3705, 0x3728, 0x3490, 0x3490, + 0x3490, 0x3760, 0x377c, 0x3785, 0x37b3, 0x37b9, 0x3490, 0x37ff, + 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x380a, 0x3813, 0x381b, + 0x381d, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3849, + 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3866, 0x38ea, 0x3490, + 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x0002, 0x3914, 0x3917, + 0x3976, 0x398f, 0x39bf, 0x3c61, 0x3490, 0x5222, 0x3490, 0x3490, + 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x34e9, 0x34ef, + 0x4196, 0x567e, 0x41ac, 0x52b1, 0x5303, 0x540e, 0x3490, 0x5470, + 0x54ac, 0x54dd, 0x55e6, 0x550a, 0x5566, 0x3490, 0x41b0, 0x437d, + 0x4393, 0x43b8, 0x441d, 0x4491, 0x44b1, 0x4528, 0x4584, 0x45e0, + 0x45e3, 0x4608, 0x478f, 0x47f4, 0x47fc, 0x4931, 0x4a9b, 0x4acf, + 0x4d2f, 0x3490, 0x4d4d, 0x4e1d, 0x4efa, 0x3490, 0x3490, 0x3490, + 0x3490, 0x4f60, 0x4f7b, 0x47fc, 0x51c2, 0x714c, 0x0000, 0x2021, + 0x4000, 0x080c, 0x4b49, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3471, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, + 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, + 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, + 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, + 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff, + 0x0d98, 0x0804, 0x4b56, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, + 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4b59, 0x7984, 0x7888, 0x2114, + 0x200a, 0x0804, 0x3467, 0x7984, 0x2114, 0x0804, 0x3467, 0x20e1, + 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, + 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3467, 0x7884, + 0x2060, 0x0804, 0x351c, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019, + 0x001a, 0x789b, 0x0117, 0x7893, 0xffff, 0x2001, 0x1890, 0x2004, + 0x9005, 0x0118, 0x7896, 0x0804, 0x3467, 0x7897, 0x0001, 0x0804, + 0x3467, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34a3, 0x2039, + 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040, + 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x34a3, + 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98, + 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, + 0x349c, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, + 0x0804, 0x3467, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, + 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3467, 0x0804, + 0x3496, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x21e0, + 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3467, 0x2069, + 0x185e, 0x7884, 0x7990, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904, + 0x349c, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, + 0x685a, 0x685e, 0x080c, 0x767d, 0x0804, 0x3467, 0x2069, 0x185e, + 0x7884, 0x7994, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904, 0x349c, + 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, + 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d9, 0x012e, 0x0804, + 0x3467, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, + 0x3499, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, + 0x20a1, 0x18a7, 0x4101, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3499, 0x2009, 0x0020, 0xa85c, 0x9080, 0x001a, 0xaf60, + 0x080c, 0x4b56, 0x701f, 0x358d, 0x0005, 0xa868, 0x2008, 0x9084, + 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, + 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, + 0x3499, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3499, 0x7112, 0x7010, + 0x8001, 0x0560, 0x7012, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3499, 0x2009, 0x0020, 0x7068, 0x2040, 0xa290, 0xa394, + 0xa498, 0xa59c, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, + 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56, + 0x701f, 0x35cb, 0x0005, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0002, + 0x0120, 0x9096, 0x000a, 0x1904, 0x3499, 0x0888, 0x0126, 0x2091, + 0x8000, 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0xa868, 0x9084, + 0x00ff, 0x9096, 0x0029, 0x1148, 0xc2fd, 0xaa7e, 0x080c, 0x60c5, + 0x0138, 0xa87e, 0xa986, 0x012e, 0x0060, 0x080c, 0x63e9, 0x1130, + 0x7007, 0x0003, 0x701f, 0x35f9, 0x012e, 0x0005, 0x080c, 0x6e4b, + 0x012e, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, + 0x2099, 0x18a7, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, + 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0x2009, 0x0020, + 0x012e, 0xaf60, 0x0804, 0x4b59, 0x2091, 0x8000, 0x7837, 0x4000, + 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, + 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, + 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, + 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, + 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19f8, + 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, + 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, + 0x0804, 0x0427, 0x81ff, 0x1904, 0x3499, 0x7984, 0x080c, 0x64fc, + 0x1904, 0x349c, 0x7e98, 0x9682, 0x4000, 0x1a04, 0x349c, 0x7c88, + 0x7d8c, 0x080c, 0x6681, 0x080c, 0x6650, 0x0000, 0x1518, 0x2061, + 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506, - 0x0158, 0x012e, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, - 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb5c5, 0x012e, 0x2009, - 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6d45, - 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x012e, - 0x0070, 0xb09b, 0x4005, 0xb19e, 0x0010, 0xb09b, 0x4006, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb09b, - 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, - 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, - 0x64bb, 0x0904, 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x0804, - 0x4405, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a90, 0x0904, 0x3400, - 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0005, 0x79a8, 0x080c, - 0x6592, 0x0904, 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400, - 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x836c, 0x79a8, 0xd184, - 0x1904, 0x33cb, 0x0804, 0x4405, 0x0126, 0x2091, 0x8000, 0x81ff, - 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458, 0x2400, - 0x9506, 0x01f8, 0x2508, 0x080c, 0x6411, 0x11d8, 0x080c, 0x660e, - 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004, - 0x900e, 0x080c, 0x6592, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, - 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, - 0x836c, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x33cb, 0x012e, 0x0804, - 0x33fd, 0x012e, 0x0804, 0x3400, 0x080c, 0x4a78, 0x0904, 0x3400, - 0x080c, 0x64bb, 0x0904, 0x33fd, 0xbaa0, 0x2019, 0x0005, 0x00c6, - 0x9066, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e, - 0x080c, 0xce89, 0x007e, 0x00ce, 0x080c, 0x6579, 0x0804, 0x33cb, - 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6579, 0x2208, 0x0804, - 0x33cb, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1911, 0x6810, 0x6914, - 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, - 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, - 0x8d68, 0x1f04, 0x36fa, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, - 0x0804, 0x33cb, 0x0086, 0x9045, 0x0140, 0x0016, 0x900e, 0x8108, - 0xa000, 0x9045, 0x1de0, 0x2100, 0x001e, 0x008e, 0x0005, 0x2069, - 0x1911, 0x6910, 0x62b8, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009, - 0x0001, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000, 0x080c, 0x55bb, - 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x33fd, 0x012e, 0x6158, - 0x9190, 0x31cc, 0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, - 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, - 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, - 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, - 0x0002, 0x0068, 0x080c, 0x72e5, 0x1118, 0x2031, 0x0004, 0x0038, - 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x33fd, 0x9036, 0x7e9a, - 0x7f9e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x2019, 0x1963, 0x231c, - 0x2001, 0x1964, 0x2004, 0x789a, 0x0804, 0x33cb, 0x0126, 0x2091, - 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x33cb, 0x080c, - 0x4a90, 0x0904, 0x3400, 0xba44, 0xbb38, 0x0804, 0x33cb, 0x080c, - 0x0dc4, 0x080c, 0x4a90, 0x2110, 0x0904, 0x3400, 0xb804, 0x908c, - 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, - 0x2009, 0x0009, 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x2019, - 0x0005, 0x00c6, 0x9066, 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076, - 0x903e, 0x080c, 0x8748, 0x900e, 0x080c, 0xce89, 0x007e, 0x00ce, - 0xb807, 0x0407, 0x012e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x7884, - 0x604a, 0x7b88, 0x634e, 0x2069, 0x185e, 0x831f, 0x9305, 0x6816, - 0x788c, 0x2069, 0x1963, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, - 0x1210, 0x2031, 0x07d0, 0x2069, 0x1964, 0x2d04, 0x266a, 0x789a, - 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, 0x603a, - 0x910e, 0xd1b4, 0x0118, 0x080c, 0x0ecd, 0x7884, 0xd094, 0x0148, - 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0, 0x1208, 0x713e, - 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x1979, 0x200a, - 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, - 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, - 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, - 0x603e, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036, 0x2001, - 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2088, 0x00c6, 0x2061, - 0x1aa0, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, - 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c, - 0x6042, 0x6040, 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x31cc, - 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, - 0x33cb, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf, - 0x9215, 0xa8a0, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, - 0x0140, 0x9215, 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, - 0x9025, 0x0904, 0x3400, 0x788c, 0x902d, 0x0904, 0x3400, 0x900e, - 0x080c, 0x6411, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, - 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4a90, 0x0904, 0x3400, - 0x7888, 0x900d, 0x0904, 0x3400, 0x788c, 0x9005, 0x0904, 0x3400, - 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x33cb, 0x2011, 0xbc09, - 0x0010, 0x2011, 0xbc05, 0x080c, 0x55bb, 0x1904, 0x33fd, 0x00c6, - 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817, - 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, - 0x31cc, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026, - 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, - 0x0006, 0x080c, 0x9ec2, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, - 0x00b6, 0x080c, 0x63c7, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, - 0x0001, 0x080c, 0x4a61, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003, - 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x701f, 0x38d1, 0x2900, 0x6016, - 0x2009, 0x0032, 0x080c, 0x9f88, 0x012e, 0x00ce, 0x0005, 0x012e, - 0x00ce, 0x0804, 0x33fd, 0x00ce, 0x0804, 0x3400, 0x080c, 0x9f18, - 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33fd, 0x0804, 0x33cb, - 0x2061, 0x1a4f, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, - 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc, - 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x33cb, 0x900e, 0x2110, - 0x0c88, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5, 0x0904, 0x33fd, - 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085, - 0x0001, 0x080c, 0x2708, 0x080c, 0x57d9, 0x012e, 0x0804, 0x33cb, - 0x012e, 0x0804, 0x3400, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, - 0x1986, 0x2070, 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011, - 0x1400, 0x080c, 0x854b, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, - 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, - 0x400b, 0x0804, 0x33cd, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, - 0x2004, 0x9005, 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, - 0x3400, 0x2001, 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e, - 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3400, 0x012e, 0x0804, - 0x33fd, 0x080c, 0x9e82, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x39a0, - 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884, - 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, - 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, - 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, - 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, - 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3b26, - 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, - 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, - 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x7023, 0x0001, 0x012e, 0x0005, - 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x080c, 0x390b, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021, - 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, - 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b95, 0x080c, 0x3b54, 0x00f6, - 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, - 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, - 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, - 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3e5e, 0x080c, - 0x3d63, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, - 0x080c, 0x3fb0, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, - 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, - 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, - 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, - 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, - 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, - 0x0138, 0x080c, 0x3d6d, 0x080c, 0x3b4f, 0x0058, 0x080c, 0x3b4f, - 0x080c, 0x3ed4, 0x080c, 0x3e54, 0x2001, 0x020b, 0x2004, 0xd0e4, - 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, - 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, - 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, - 0x918c, 0xfffd, 0x2102, 0x080c, 0x12b8, 0x2009, 0x0028, 0x080c, - 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c, - 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021, - 0x400c, 0x0804, 0x33cd, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, - 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, - 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3abf, 0x2048, - 0x1f04, 0x3a73, 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, + 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, + 0x1a04, 0x3499, 0x0c30, 0x080c, 0xbde5, 0x012e, 0x0904, 0x3499, + 0x0804, 0x3467, 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126, + 0x2091, 0x8000, 0x080c, 0xc4c0, 0x080c, 0x6c02, 0x012e, 0x0804, + 0x3467, 0x00a6, 0x2950, 0xb19c, 0x080c, 0x64fc, 0x1904, 0x36e1, + 0xb6a8, 0x9682, 0x4000, 0x16e8, 0xb4a0, 0xb5a4, 0x080c, 0x6681, + 0x080c, 0x6650, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, + 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870, + 0x9406, 0x1118, 0xa874, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, + 0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, + 0x080c, 0xbde5, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, + 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c, + 0xc4c0, 0x080c, 0x6bf5, 0x012e, 0x0070, 0xb09b, 0x4005, 0xb19e, + 0x0010, 0xb09b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, + 0x2a48, 0x00ae, 0x0005, 0xb09b, 0x4000, 0x9006, 0x918d, 0x0001, + 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x3499, 0x080c, + 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c, + 0x668b, 0x0904, 0x3499, 0x0804, 0x44a8, 0x81ff, 0x1904, 0x3499, + 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499, + 0x2019, 0x0005, 0x79a8, 0x080c, 0x669a, 0x0904, 0x3499, 0x7888, + 0x908a, 0x1000, 0x1a04, 0x349c, 0x8003, 0x800b, 0x810b, 0x9108, + 0x080c, 0x84d0, 0x79a8, 0xd184, 0x1904, 0x3467, 0x0804, 0x44a8, + 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, + 0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, + 0x64fc, 0x11d8, 0x080c, 0x6716, 0x1128, 0x2009, 0x0002, 0x62bc, + 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x1118, + 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, + 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x8529, 0x1ae0, 0x012e, + 0x0804, 0x3467, 0x012e, 0x0804, 0x3499, 0x012e, 0x0804, 0x349c, + 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, + 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x8a2b, 0x0076, + 0x903e, 0x080c, 0x8919, 0x900e, 0x080c, 0xda37, 0x007e, 0x00ce, + 0x080c, 0x6681, 0x0804, 0x3467, 0x080c, 0x4b28, 0x0904, 0x349c, + 0x080c, 0x6681, 0x2208, 0x0804, 0x3467, 0x0156, 0x00d6, 0x00e6, + 0x2069, 0x1911, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, + 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, + 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x3796, 0x2300, + 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3467, 0x0086, 0x9045, + 0x0140, 0x0016, 0x900e, 0x8108, 0xa000, 0x9045, 0x1de0, 0x2100, + 0x001e, 0x008e, 0x0005, 0x2069, 0x1911, 0x6910, 0x62b8, 0x0804, + 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x0126, + 0x2091, 0x8000, 0x080c, 0x5678, 0x0128, 0x2009, 0x0007, 0x012e, + 0x0804, 0x3499, 0x012e, 0x6158, 0x9190, 0x3268, 0x2215, 0x9294, + 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, + 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, + 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, + 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x7351, + 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, + 0x0804, 0x3499, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3467, 0x6148, + 0x624c, 0x2019, 0x1962, 0x231c, 0x2001, 0x1963, 0x2004, 0x789a, + 0x0804, 0x3467, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, + 0x012e, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0xba44, + 0xbb38, 0x0804, 0x3467, 0x080c, 0x0dc3, 0x080c, 0x4b40, 0x2110, + 0x0904, 0x349c, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, + 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3499, + 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, + 0x9e54, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e, + 0x080c, 0xda37, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, + 0x3467, 0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, + 0x185e, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1962, 0x2d1c, + 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, + 0x1963, 0x2d04, 0x266a, 0x789a, 0x0804, 0x3467, 0x0126, 0x2091, + 0x8000, 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ebd, + 0xd094, 0x0148, 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0, + 0x1208, 0x713e, 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, + 0x1979, 0x200a, 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100, + 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, + 0x695a, 0x00de, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036, + 0x2001, 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2450, 0x00c6, + 0x2061, 0x1aac, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888, + 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, + 0x603c, 0x7988, 0x613e, 0x6140, 0x910d, 0x788c, 0x6042, 0x7a88, + 0x9294, 0x1000, 0x9205, 0x910e, 0xd1e4, 0x190c, 0x0ed3, 0x6040, + 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x3268, 0xd0cc, 0x0120, + 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3467, 0x00f6, + 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf, 0x9215, 0xa8a0, + 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, + 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, + 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, + 0x349c, 0x788c, 0x902d, 0x0904, 0x349c, 0x900e, 0x080c, 0x64fc, + 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, + 0x8108, 0x0ca0, 0x080c, 0x4b40, 0x0904, 0x349c, 0x7888, 0x900d, + 0x0904, 0x349c, 0x788c, 0x9005, 0x0904, 0x349c, 0xba44, 0xb946, + 0xbb38, 0xb83a, 0x0804, 0x3467, 0x2011, 0xbc09, 0x0010, 0x2011, + 0xbc05, 0x080c, 0x5678, 0x1904, 0x3499, 0x00c6, 0x2061, 0x0100, + 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085, + 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3268, 0x210d, + 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e, + 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, + 0xa347, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, + 0x649d, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, + 0x4b11, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003, 0xa832, 0xa86c, + 0xc0fd, 0xa86e, 0x701f, 0x396f, 0x2900, 0x6016, 0x2009, 0x0032, + 0x080c, 0xa419, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, + 0x3499, 0x00ce, 0x0804, 0x349c, 0x080c, 0xa39d, 0x0cb0, 0xa830, + 0x9086, 0x0100, 0x0904, 0x3499, 0x0804, 0x3467, 0x2061, 0x1a4f, + 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, + 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, + 0x78aa, 0x012e, 0x0804, 0x3467, 0x900e, 0x2110, 0x0c88, 0x81ff, + 0x1904, 0x3499, 0x080c, 0x7351, 0x0904, 0x3499, 0x0126, 0x2091, + 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, + 0x2771, 0x080c, 0x5896, 0x012e, 0x0804, 0x3467, 0x012e, 0x0804, + 0x349c, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x1986, 0x2070, + 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, + 0x871c, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, + 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, + 0x3469, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005, + 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, 0x349c, 0x2001, + 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e, 0x6908, 0x9102, + 0x1230, 0x012e, 0x0804, 0x349c, 0x012e, 0x0804, 0x3499, 0x080c, + 0xa307, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3a3e, 0x00c6, 0x080c, + 0x4b11, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884, 0xa80a, 0x7898, + 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001, + 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001, + 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001, + 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003, + 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3bc4, 0x0928, 0x7014, + 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, + 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, + 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c, 0x4b56, + 0x701f, 0x3b01, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086, + 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, + 0x39a9, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061, + 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, + 0x0012, 0x080c, 0x3c33, 0x080c, 0x3bf2, 0x00f6, 0x00e6, 0x0086, + 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, + 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001, + 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3fda, + 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc, 0x080c, 0x3e01, 0x05b8, + 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x404e, + 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, + 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086, + 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086, + 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c, + 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168, 0x00c6, + 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, + 0x3e0b, 0x080c, 0x3bed, 0x0058, 0x080c, 0x3bed, 0x080c, 0x3f72, + 0x080c, 0x3ef2, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, + 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e, + 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, + 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, + 0x2102, 0x080c, 0x12c4, 0x2009, 0x0028, 0x080c, 0x22fa, 0x2001, + 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c, 0x2004, 0x9005, + 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804, + 0x3469, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, + 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, + 0x7022, 0xa804, 0x9005, 0x0904, 0x3b5d, 0x2048, 0x1f04, 0x3b11, + 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0xa930, 0xa808, + 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, + 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c, + 0x4b56, 0x701f, 0x3b01, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098, + 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f8a, 0x000e, 0x080c, 0x4b59, + 0x701f, 0x3b01, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, + 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa868, + 0x9086, 0x0103, 0x1118, 0x701f, 0x3bc2, 0x0450, 0x7014, 0x2048, + 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c, 0x6497, 0x0110, + 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xc693, + 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, + 0x002e, 0x001e, 0x0904, 0x3499, 0x0016, 0x0026, 0x0036, 0x0046, + 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3b94, + 0x7007, 0x0003, 0x0804, 0x3b52, 0xa830, 0x9086, 0x0100, 0x2021, + 0x400c, 0x0904, 0x3469, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, - 0x0096, 0x7014, 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x001c, 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x00b0, 0x8906, 0x8006, - 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8, - 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7e, 0x000e, - 0x080c, 0x4aa9, 0x701f, 0x3a63, 0x015e, 0x00de, 0x009e, 0x008e, - 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, - 0x2048, 0xa868, 0x9086, 0x0103, 0x1118, 0x701f, 0x3b24, 0x0450, - 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c, - 0x63c1, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, - 0x080c, 0xbcea, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, - 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33fd, 0x0016, 0x0026, - 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, - 0x701f, 0x3af6, 0x7007, 0x0003, 0x0804, 0x3ab4, 0xa830, 0x9086, - 0x0100, 0x2021, 0x400c, 0x0904, 0x33cd, 0x0076, 0xad10, 0xac0c, - 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, - 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, - 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, - 0x0006, 0x080c, 0x0f7e, 0x000e, 0x080c, 0x4aa9, 0x007e, 0x701f, - 0x3a63, 0x7023, 0x0001, 0x0005, 0x0804, 0x33cb, 0x0156, 0x00c6, - 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, - 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4a61, 0x001e, 0x0130, - 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, - 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, - 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, - 0x197c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, - 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, - 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4a61, - 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, - 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090, - 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040, - 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, - 0x601a, 0xa877, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, - 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4a61, - 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, - 0x0030, 0x2004, 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001, - 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001, - 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, - 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, - 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, - 0x080c, 0x2a85, 0x1130, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c, - 0x29c0, 0x2001, 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007, - 0x0002, 0x3be4, 0x3bed, 0x3bf6, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x012e, 0x0804, 0x3400, 0x2009, 0x0114, 0x2104, 0x9085, - 0x0800, 0x200a, 0x080c, 0x3db7, 0x00c0, 0x2009, 0x0114, 0x2104, - 0x9085, 0x4000, 0x200a, 0x080c, 0x3db7, 0x0078, 0x080c, 0x72e5, - 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x33fd, 0x81ff, 0x0128, - 0x012e, 0x2021, 0x400b, 0x0804, 0x33cd, 0x2001, 0x0141, 0x2004, - 0xd0dc, 0x0db0, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x080c, 0x390b, 0x2009, 0x0101, 0x210c, 0x0016, - 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x408b, - 0x080c, 0x3fdb, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, - 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, - 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, - 0x0001, 0x080c, 0x3f3c, 0x080c, 0x2a8d, 0x080c, 0x2a8d, 0x080c, - 0x2a8d, 0x080c, 0x2a8d, 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe, - 0x080c, 0x3e5e, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3d6d, - 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, - 0x0017, 0x080c, 0x33fd, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, - 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, - 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3e3c, - 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3d6d, 0x0804, 0x3d1a, - 0x080c, 0x3fb0, 0x080c, 0x3ed4, 0x080c, 0x3e1f, 0x080c, 0x3e54, - 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, - 0x3d6d, 0x00fe, 0x0804, 0x3d1a, 0x00fe, 0x080c, 0x3d63, 0x1150, - 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, - 0x3d6d, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, - 0x1908, 0x8739, 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000, - 0x1904, 0x3c6a, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, - 0x8529, 0x2500, 0x9605, 0x0904, 0x3d1a, 0x7884, 0xd0bc, 0x0128, - 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3d1a, 0xa013, 0x001a, 0x2001, - 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41, - 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, - 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, - 0x0040, 0x080c, 0x22b2, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884, - 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, - 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3cf1, - 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, - 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, - 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, - 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, - 0x0804, 0x3c24, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, - 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, - 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, - 0x12b8, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, - 0x0028, 0x080c, 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, - 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, - 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, - 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, - 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021, - 0x400c, 0x0804, 0x33cd, 0x9085, 0x0001, 0x1d04, 0x3d6c, 0x2091, - 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, - 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003, - 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x22b2, 0x2001, 0x0227, - 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, - 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520, - 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, - 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc, - 0x0d88, 0x080c, 0x3fb0, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, - 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2, - 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, - 0x26e8, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, - 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, - 0x20a9, 0x0046, 0x1d04, 0x3dd2, 0x2091, 0x6000, 0x1f04, 0x3dd2, - 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, - 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, - 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, - 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3df2, 0x7850, 0x9085, 0x1400, - 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, - 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, - 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, - 0x2001, 0x0100, 0x080c, 0x2b65, 0x7827, 0x0020, 0x7843, 0x0000, - 0x9006, 0x080c, 0x2b65, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, - 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, - 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, - 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, - 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, - 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, - 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, - 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, - 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, - 0x0100, 0x2001, 0x1987, 0x2004, 0x70e2, 0x080c, 0x3b45, 0x1188, - 0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, - 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, - 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, - 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, - 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, - 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, - 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, - 0x9085, 0x0092, 0x7016, 0x080c, 0x3fb0, 0x00f6, 0x2071, 0x1a41, - 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, - 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x080c, 0x3b45, 0x0140, - 0x2001, 0x197b, 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, - 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, - 0x0004, 0x2011, 0x0011, 0x080c, 0x3f3c, 0x2011, 0x0001, 0x080c, - 0x3f3c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41, - 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3f39, 0x782b, 0x0002, - 0x9026, 0xd19c, 0x1904, 0x3f35, 0x7000, 0x0002, 0x3f39, 0x3eea, - 0x3f1a, 0x3f35, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, - 0x2011, 0x0001, 0x080c, 0x3f3c, 0x0904, 0x3f39, 0x080c, 0x3f3c, - 0x0804, 0x3f39, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, - 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, - 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3e3c, 0x2009, 0x0001, 0x00f6, - 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, - 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, - 0xd0fc, 0x1904, 0x3ede, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, - 0x9092, 0x0004, 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011, - 0x0032, 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, - 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, - 0x0036, 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032, - 0x911a, 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc4, 0x9398, - 0x3f6a, 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, - 0x7102, 0x009e, 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058, - 0x2048, 0xa804, 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085, - 0x0001, 0x0005, 0x3fa7, 0x3f9e, 0x3f95, 0x3f8c, 0x3f83, 0x3f7a, - 0x3f71, 0xa968, 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974, - 0x7916, 0x0005, 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912, - 0xa984, 0x7916, 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990, - 0x7912, 0xa994, 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906, - 0xa9a0, 0x7912, 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac, - 0x7906, 0xa9b0, 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902, - 0xa9bc, 0x7906, 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8, - 0x7902, 0xa9cc, 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005, - 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c, - 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, - 0x3fd7, 0x3fc3, 0x3fce, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, - 0x0001, 0x080c, 0x3f3c, 0x190c, 0x3f3c, 0x0048, 0x8001, 0x7002, - 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x3f3c, 0x008e, - 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, - 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, - 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, - 0x2004, 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, - 0x002f, 0x201c, 0x080c, 0x4a61, 0xa813, 0x001a, 0xaf16, 0x2900, - 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, - 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, - 0x009e, 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, - 0x4a61, 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, - 0x002e, 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001, - 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004, - 0xa876, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, - 0x6036, 0x2009, 0x0040, 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004, - 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, - 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, - 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, - 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, - 0x7306, 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, - 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, - 0x702b, 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, - 0x0096, 0x2940, 0x0086, 0x080c, 0x4a61, 0x008e, 0xa058, 0x00a6, - 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, - 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, - 0x0528, 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, - 0x080c, 0x4a61, 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, - 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, - 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, - 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4a61, - 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, - 0x0030, 0x2004, 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001, - 0x002a, 0x2004, 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004, - 0xa076, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, - 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, - 0x2001, 0x1a41, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, - 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, - 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, - 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, - 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, - 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x33cb, 0x7d98, 0x7c9c, - 0x0804, 0x34cf, 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x2069, 0x185e, + 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, + 0x0f8a, 0x000e, 0x080c, 0x4b59, 0x007e, 0x701f, 0x3b01, 0x7023, + 0x0001, 0x0005, 0x0804, 0x3467, 0x0156, 0x00c6, 0xa814, 0x908a, + 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, + 0x0168, 0x0016, 0x080c, 0x4b11, 0x001e, 0x0130, 0xa800, 0x2040, + 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, + 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, + 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x197c, 0x2003, + 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, + 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004, + 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4b11, 0xa813, 0x001a, + 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa86a, + 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090, 0x2079, 0x0100, + 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x22fa, + 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x601a, 0xa877, + 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, + 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4b11, 0x2940, 0xa013, + 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, + 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004, + 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001, 0x032a, 0x2003, + 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, + 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, + 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2aee, + 0x1130, 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x2001, + 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007, 0x0002, 0x3c82, + 0x3c8b, 0x3c94, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x012e, + 0x0804, 0x349c, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, + 0x080c, 0x3e55, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, + 0x200a, 0x080c, 0x3e55, 0x0078, 0x080c, 0x7351, 0x1128, 0x012e, + 0x2009, 0x0016, 0x0804, 0x3499, 0x81ff, 0x0128, 0x012e, 0x2021, + 0x400b, 0x0804, 0x3469, 0x2001, 0x0141, 0x2004, 0xd0dc, 0x0db0, + 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, + 0x080c, 0x39a9, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, + 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x4129, 0x080c, 0x4079, + 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44, + 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, + 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, + 0x3fda, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c, + 0x2af6, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc, + 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3e0b, 0x2001, 0x0004, + 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, + 0x3499, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, + 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, + 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3eda, 0x2d00, 0x9c05, + 0x9b05, 0x0120, 0x080c, 0x3e0b, 0x0804, 0x3db8, 0x080c, 0x404e, + 0x080c, 0x3f72, 0x080c, 0x3ebd, 0x080c, 0x3ef2, 0x00f6, 0x2079, + 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3e0b, 0x00fe, + 0x0804, 0x3db8, 0x00fe, 0x080c, 0x3e01, 0x1150, 0x8d68, 0x2001, + 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3e0b, 0x0080, + 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, + 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000, 0x1904, 0x3d08, + 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, + 0x9605, 0x0904, 0x3db8, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, + 0x9b05, 0x1904, 0x3db8, 0xa013, 0x001a, 0x2001, 0x032a, 0x2003, + 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41, 0x2003, 0x0003, + 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, + 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, + 0x22fa, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884, 0xd0a4, 0x1180, + 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, + 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3d8f, 0x00ce, 0x0030, + 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, + 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, + 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, + 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3cc2, + 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, + 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, + 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12c4, 0x7884, + 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c, + 0x22fa, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef, + 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, + 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, + 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804, + 0x3469, 0x9085, 0x0001, 0x1d04, 0x3e0a, 0x2091, 0x6000, 0x8420, + 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001, + 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003, 0x0000, 0x0071, + 0x2009, 0x0048, 0x080c, 0x22fa, 0x2001, 0x0227, 0x2024, 0x2402, + 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6, + 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090, + 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, + 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x0d88, 0x080c, + 0x404e, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c, + 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b, 0x0002, + 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100, + 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x2751, 0x7850, + 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319, + 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046, + 0x1d04, 0x3e70, 0x2091, 0x6000, 0x1f04, 0x3e70, 0x7850, 0x9085, + 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084, + 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852, + 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028, + 0xa001, 0x1f04, 0x3e90, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019, + 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8, + 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040, + 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, + 0x080c, 0x2bce, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c, + 0x2bce, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8, + 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, 0x2001, 0x0201, + 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051, + 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee, + 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, + 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a, + 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108, + 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110, + 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001, + 0x1987, 0x2004, 0x70e2, 0x080c, 0x3be3, 0x1188, 0x2001, 0x181f, + 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a, + 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c, + 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063, + 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077, + 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082, + 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab, + 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092, + 0x7016, 0x080c, 0x404e, 0x00f6, 0x2071, 0x1a41, 0x2079, 0x0320, + 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e, + 0x6898, 0x780a, 0x00de, 0x080c, 0x3be3, 0x0140, 0x2001, 0x197b, + 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, 0x2009, 0x03e8, + 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, + 0x0011, 0x080c, 0x3fda, 0x2011, 0x0001, 0x080c, 0x3fda, 0x00fe, + 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, + 0x792c, 0xd1fc, 0x0904, 0x3fd7, 0x782b, 0x0002, 0x9026, 0xd19c, + 0x1904, 0x3fd3, 0x7000, 0x0002, 0x3fd7, 0x3f88, 0x3fb8, 0x3fd3, + 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, + 0x080c, 0x3fda, 0x0904, 0x3fd7, 0x080c, 0x3fda, 0x0804, 0x3fd7, + 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, + 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, + 0x0de8, 0x080c, 0x3eda, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, + 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, + 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, + 0x3f7c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, + 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0032, 0xa212, + 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, + 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, + 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032, 0x911a, 0x831c, + 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc3, 0x9398, 0x4008, 0x231d, + 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, + 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, + 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, + 0x4045, 0x403c, 0x4033, 0x402a, 0x4021, 0x4018, 0x400f, 0xa968, + 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974, 0x7916, 0x0005, + 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912, 0xa984, 0x7916, + 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990, 0x7912, 0xa994, + 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906, 0xa9a0, 0x7912, + 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac, 0x7906, 0xa9b0, + 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902, 0xa9bc, 0x7906, + 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8, 0x7902, 0xa9cc, + 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005, 0x00f6, 0x00e6, + 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, + 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x4075, 0x4061, + 0x406c, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, + 0x3fda, 0x190c, 0x3fda, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, + 0x1d38, 0x2011, 0x0001, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe, + 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, + 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004, + 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, + 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, + 0x080c, 0x4b11, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a, + 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, + 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c, + 0x40f1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4b11, 0xa813, + 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, + 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004, + 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004, 0xa876, 0x2061, + 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, + 0x0040, 0x080c, 0x22fa, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, + 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, + 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, + 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, + 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, + 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, + 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, + 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, + 0x0086, 0x080c, 0x4b11, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, + 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, + 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, + 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4b11, + 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, + 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, + 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c, 0x40f1, + 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4b11, 0x2940, 0xa013, + 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, + 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001, 0x002a, 0x2004, + 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004, 0xa076, 0x2001, + 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, + 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a41, + 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, + 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, + 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, + 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, + 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, + 0x0108, 0x0005, 0x0804, 0x3467, 0x7d98, 0x7c9c, 0x0804, 0x356b, + 0x080c, 0x7351, 0x190c, 0x5f78, 0x2069, 0x185e, 0x2d00, 0x2009, + 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, + 0x4b56, 0x701f, 0x41c4, 0x0005, 0x080c, 0x5673, 0x1130, 0x3b00, + 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x185e, 0x6800, + 0x9005, 0x0904, 0x349c, 0x2001, 0x180d, 0x2004, 0xd08c, 0x6804, + 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118, 0xd0a4, 0x0904, + 0x349c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200, + 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020, + 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118, + 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084, + 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x349c, 0x9288, 0x3268, + 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a, + 0x007f, 0x1a04, 0x349c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004, + 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e, 0x9080, 0x284c, + 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080, 0x2850, 0x2005, + 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x349c, 0x908a, 0x0841, + 0x1a04, 0x349c, 0x9084, 0x0007, 0x1904, 0x349c, 0x680c, 0x9005, + 0x0904, 0x349c, 0x6810, 0x9005, 0x0904, 0x349c, 0x6848, 0x6940, + 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x684c, 0x6944, + 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x2009, 0x195d, + 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0140, 0x7884, + 0x200a, 0x2008, 0x080c, 0x0e51, 0x3b00, 0xc085, 0x20d8, 0x6814, + 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c, + 0x767d, 0x080c, 0x696f, 0x080c, 0x69d9, 0x6808, 0x602a, 0x080c, + 0x226c, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b, + 0x0000, 0x0036, 0x6b08, 0x080c, 0x27ab, 0x003e, 0x6000, 0x9086, + 0x0000, 0x1904, 0x436d, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, + 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, + 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, + 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, + 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, + 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19aa, + 0x20e9, 0x0001, 0x4001, 0x080c, 0x8615, 0x00c6, 0x900e, 0x20a9, + 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c, + 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, + 0x3508, 0x8109, 0x080c, 0x7c58, 0x6878, 0x6016, 0x6874, 0x2008, + 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, + 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x42bd, + 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d, 0x2004, 0xd08c, + 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, + 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001, + 0x080c, 0x2a29, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, + 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0028, 0x9286, + 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, + 0x0ea2, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, + 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, + 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x1958, + 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, + 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2820, + 0x2001, 0x1949, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, + 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x7351, 0x0128, + 0x080c, 0x4f54, 0x0110, 0x080c, 0x2771, 0x60d0, 0x9005, 0x01c0, + 0x6003, 0x0001, 0x2009, 0x4355, 0x00d0, 0x080c, 0x7351, 0x1168, + 0x2011, 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, + 0x080c, 0x7651, 0x080c, 0x727e, 0x0040, 0x080c, 0x5e72, 0x0028, + 0x6003, 0x0004, 0x2009, 0x436d, 0x0010, 0x0804, 0x3467, 0x2001, + 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, + 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, + 0x0904, 0x3499, 0x2069, 0x185e, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, - 0x0001, 0x080c, 0x4aa6, 0x701f, 0x4126, 0x0005, 0x080c, 0x55b6, - 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, - 0x185e, 0x6800, 0x9005, 0x0904, 0x3400, 0x2001, 0x180d, 0x2004, - 0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118, - 0xd0a4, 0x0904, 0x3400, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, - 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, - 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, - 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, - 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3400, - 0x9288, 0x31cc, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, - 0x6828, 0x908a, 0x007f, 0x1a04, 0x3400, 0x605a, 0x6888, 0x9084, - 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e, - 0x9080, 0x27e3, 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080, - 0x27e7, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3400, - 0x908a, 0x0841, 0x1a04, 0x3400, 0x9084, 0x0007, 0x1904, 0x3400, - 0x680c, 0x9005, 0x0904, 0x3400, 0x6810, 0x9005, 0x0904, 0x3400, - 0x6848, 0x6940, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400, - 0x684c, 0x6944, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400, - 0x2009, 0x195e, 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4, - 0x0140, 0x7884, 0x200a, 0x2008, 0x080c, 0x0e53, 0x3b00, 0xc085, - 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, - 0x604e, 0x080c, 0x760d, 0x080c, 0x6862, 0x080c, 0x68f1, 0x6808, - 0x602a, 0x080c, 0x2224, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, - 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2742, 0x003e, - 0x6000, 0x9086, 0x0000, 0x1904, 0x42ca, 0x6818, 0x691c, 0x6a20, - 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, - 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, - 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, - 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, - 0x0004, 0x20a1, 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, - 0x20a1, 0x19aa, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8480, 0x00c6, - 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, - 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, - 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7bb8, 0x6878, 0x6016, - 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, - 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, - 0x1f04, 0x421f, 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d, - 0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, - 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x29dd, - 0x2001, 0x0001, 0x080c, 0x29c0, 0x0088, 0x9286, 0x4000, 0x1148, - 0x2063, 0x0001, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0, - 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, - 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, - 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, - 0x9295, 0x0020, 0x6a82, 0x2001, 0x1959, 0x6a80, 0x9294, 0x0030, - 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, - 0x0140, 0x2003, 0xaaaa, 0x080c, 0x27b7, 0x2001, 0x194a, 0x2102, - 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, - 0x0000, 0x00ce, 0x080c, 0x72e5, 0x0128, 0x080c, 0x4e97, 0x0110, - 0x080c, 0x2708, 0x60d0, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, - 0x42b2, 0x00d0, 0x080c, 0x72e5, 0x1168, 0x2011, 0x7176, 0x080c, - 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x080c, 0x75e1, 0x080c, - 0x7212, 0x0040, 0x080c, 0x5db5, 0x0028, 0x6003, 0x0004, 0x2009, - 0x42ca, 0x0010, 0x0804, 0x33cb, 0x2001, 0x0170, 0x2004, 0x9084, - 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, - 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x33fd, 0x2069, - 0x185e, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4aa9, - 0x9006, 0x080c, 0x2708, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5, - 0x11b0, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, 0x31c0, 0x0118, - 0x6130, 0xc18d, 0x6132, 0x080c, 0xbef8, 0x0130, 0x080c, 0x7308, - 0x1118, 0x080c, 0x72bd, 0x0038, 0x080c, 0x7212, 0x0020, 0x080c, - 0x5ebb, 0x080c, 0x5db5, 0x0804, 0x33cb, 0x81ff, 0x1904, 0x33fd, - 0x080c, 0x72e5, 0x1110, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000, - 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009, - 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, - 0x4aa9, 0x701f, 0x33c9, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, - 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, - 0x2019, 0xffff, 0x4304, 0x6558, 0x9588, 0x31cc, 0x210d, 0x918c, - 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, - 0x080c, 0x6411, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, - 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, - 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, - 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, - 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5e46, - 0x0804, 0x4325, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x4a61, - 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x55a7, 0xd0b4, - 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, - 0x908e, 0x0080, 0x0508, 0x080c, 0x31bb, 0x1148, 0xb800, 0xd08c, - 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa86b, - 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009, - 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x43b0, 0x0005, - 0x080c, 0x4a90, 0x0904, 0x3400, 0x20a9, 0x002b, 0xb8b0, 0x20e0, - 0xb8b4, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, - 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8b0, 0x20e0, - 0xb8b4, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7e, 0x0070, 0x20a9, - 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, - 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0x81ff, 0x1904, - 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6588, 0x0904, - 0x33fd, 0x0058, 0xa87c, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, - 0x33fd, 0xa978, 0xaa98, 0x0804, 0x33cb, 0x080c, 0x55af, 0x0904, - 0x33cb, 0x701f, 0x43fa, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, - 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400, 0x080c, 0x4a90, - 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904, - 0x3400, 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0004, 0x900e, - 0x080c, 0x6592, 0x0904, 0x33fd, 0x7984, 0x7a88, 0x04c9, 0x08a8, - 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4a8e, 0x01e0, 0x080c, - 0x6746, 0x0118, 0x080c, 0x674e, 0x11b0, 0x080c, 0x660e, 0x2009, - 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6592, - 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0, 0x00d1, 0x0060, 0xa89b, - 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x080c, 0x55af, 0x0110, + 0x0001, 0x0804, 0x4b59, 0x9006, 0x080c, 0x2771, 0x81ff, 0x1904, + 0x3499, 0x080c, 0x7351, 0x11b0, 0x080c, 0x764c, 0x080c, 0x5fb3, + 0x080c, 0x325c, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xc8ce, + 0x0130, 0x080c, 0x7374, 0x1118, 0x080c, 0x7329, 0x0038, 0x080c, + 0x727e, 0x0020, 0x080c, 0x5f78, 0x080c, 0x5e72, 0x0804, 0x3467, + 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x1110, 0x0804, 0x3499, + 0x0126, 0x2091, 0x8000, 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000, + 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0x2039, 0x0001, 0x080c, 0x4b59, 0x701f, 0x3465, 0x012e, 0x0005, + 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, + 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558, 0x9588, + 0x3268, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, + 0x2100, 0x9506, 0x01a8, 0x080c, 0x64fc, 0x1190, 0xb814, 0x821c, + 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, + 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, + 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, + 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, + 0x1c80, 0x080c, 0x5f03, 0x0804, 0x43c8, 0x080c, 0x4b40, 0x0904, + 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, + 0x080c, 0x5664, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, + 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3257, + 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, + 0x0006, 0x11a8, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, + 0xc394, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, + 0x701f, 0x4453, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x20a9, + 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, + 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, + 0x0f8a, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, + 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a, + 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, + 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, + 0x4b59, 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b28, 0x0904, 0x349c, + 0x080c, 0x6690, 0x0904, 0x3499, 0x0058, 0xa87c, 0x9005, 0x0120, + 0x2009, 0x0004, 0x0804, 0x3499, 0xa978, 0xaa98, 0x0804, 0x3467, + 0x080c, 0x566c, 0x0904, 0x3467, 0x701f, 0x449d, 0x7007, 0x0003, + 0x0005, 0x81ff, 0x1904, 0x3499, 0x7888, 0x908a, 0x1000, 0x1a04, + 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120, + 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499, + 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x0904, 0x3499, 0x7984, + 0x7a88, 0x04c9, 0x08a8, 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c, + 0x4b3e, 0x01e0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x11b0, + 0x080c, 0x6716, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, + 0x0004, 0x080c, 0x669a, 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0, + 0x00d1, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, + 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, + 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, + 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, 0x0110, + 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x64fc, 0x1138, + 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x0005, + 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195c, 0x918c, 0x8000, + 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120, + 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, + 0x080c, 0x6695, 0x0904, 0x3499, 0x2001, 0x195c, 0x2004, 0xd0fc, + 0x1904, 0x3467, 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195c, 0x918c, + 0x8000, 0xc18d, 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d, + 0x0118, 0x080c, 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002, + 0x0128, 0x080c, 0x6695, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, + 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004, 0xd0fc, + 0x1128, 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3499, 0x798c, + 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904, + 0x349c, 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c, + 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c, 0x668b, 0x0904, 0x3499, + 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1904, 0x3467, 0x0804, 0x44a8, + 0xa9a4, 0x2001, 0x195b, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, + 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1170, + 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c, 0x668b, 0x1170, + 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, + 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, - 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, - 0x1800, 0x6458, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, - 0x1ec8, 0x0005, 0x080c, 0x6411, 0x1138, 0x2200, 0x8003, 0x800b, - 0x810b, 0x9108, 0x080c, 0x836c, 0x0005, 0x81ff, 0x1904, 0x33fd, - 0x798c, 0x2001, 0x195d, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78, - 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904, - 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x080c, 0x658d, 0x0904, - 0x33fd, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1904, 0x33cb, 0x0804, - 0x4405, 0xa9a4, 0x2001, 0x195d, 0x918c, 0x8000, 0xc18d, 0x2102, - 0x080c, 0x4a83, 0x01a0, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, - 0x1170, 0x080c, 0x64bb, 0x2009, 0x0002, 0x0128, 0x080c, 0x658d, - 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, - 0x4000, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x55af, - 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, - 0x0005, 0x81ff, 0x1904, 0x33fd, 0x798c, 0x2001, 0x195c, 0x918c, - 0x8000, 0x2102, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6746, - 0x0120, 0x080c, 0x674e, 0x1904, 0x3400, 0x080c, 0x64bb, 0x0904, - 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x2001, 0x195c, 0x2004, - 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195c, - 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c, - 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009, - 0x0002, 0x0128, 0x080c, 0x6583, 0x1170, 0x2009, 0x0003, 0xa89b, - 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004, - 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x33cb, - 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x55bb, 0x1904, 0x33fd, - 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, - 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, - 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, - 0xb900, 0x918c, 0x0202, 0x0804, 0x33cb, 0x78a8, 0x909c, 0x0003, - 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x33fd, - 0x6258, 0x7884, 0x9206, 0x1904, 0x45d5, 0x2031, 0x1848, 0x2009, - 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080, - 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003, - 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001, - 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, - 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003, - 0x0000, 0x003e, 0x000e, 0x0126, 0x2091, 0x8000, 0x0036, 0x2001, - 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c, - 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e, 0x000e, 0x0804, 0x4aa9, - 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e, - 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb, - 0x7007, 0x0002, 0x701f, 0x45f5, 0x0005, 0x81ff, 0x1904, 0x33fd, - 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x6746, 0x1904, 0x33fd, - 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0904, 0x33fd, 0xa86b, 0x0000, - 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c, 0xbabf, 0x0904, 0x33fd, - 0x7007, 0x0003, 0x701f, 0x462f, 0x0005, 0x0126, 0x2091, 0x8000, - 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, - 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x000e, - 0x012e, 0x080c, 0x40f8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, - 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003, - 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001, - 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, - 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0804, 0x33cb, 0xa830, - 0x9086, 0x0100, 0x0904, 0x33fd, 0x8906, 0x8006, 0x8007, 0x90bc, - 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x2009, 0x000c, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0xa8b4, 0x909c, 0x0003, - 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, 0x4695, - 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031, 0x1848, 0x2009, 0x013c, - 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0xaaa4, 0xaba0, 0xacac, - 0xada8, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1247, 0x080c, - 0xa45b, 0x1528, 0x2009, 0x0002, 0x0420, 0xa99c, 0x080c, 0x6411, - 0x0118, 0x2009, 0x000a, 0x0408, 0x080c, 0x6746, 0x2009, 0x0009, - 0x11c0, 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002, - 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c, 0xc0fc, 0xa86e, 0xaeb4, - 0x96b4, 0x000b, 0x080c, 0xbabf, 0x2009, 0x0003, 0x0110, 0x9006, - 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa87f, 0x0000, 0xa887, - 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091, 0x8000, 0x0006, 0x0036, - 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003, 0x0000, 0x2001, 0x185c, - 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e, 0x000e, 0x012e, 0xa8b4, - 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1, - 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, - 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0xabaa, 0x2003, - 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae, 0x2003, 0x0000, 0x2001, - 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, - 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0xabbe, 0x2003, - 0x0000, 0x003e, 0x000e, 0x0005, 0x9006, 0x080c, 0x2708, 0x78a8, - 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33fd, - 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x7888, 0x908a, 0x1000, 0x1a04, - 0x3400, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, - 0x3400, 0x2100, 0x080c, 0x26d2, 0x0026, 0x00c6, 0x0126, 0x2091, - 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000, 0x601f, 0x0000, 0x607b, - 0x0000, 0x607f, 0x0000, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc, - 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212, - 0x00d0, 0x080c, 0x9e89, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, - 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, - 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, - 0x5de1, 0x080c, 0x8432, 0x7984, 0x080c, 0x72e5, 0x1110, 0x2009, - 0x00ff, 0x7a88, 0x080c, 0x4468, 0x012e, 0x00ce, 0x002e, 0x0804, - 0x33cb, 0x7984, 0x080c, 0x63c1, 0x2b08, 0x1904, 0x3400, 0x0804, - 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8, - 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd, - 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984, - 0x81ff, 0x0904, 0x3400, 0x9192, 0x0021, 0x1a04, 0x3400, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0x702a, 0xaf60, - 0x7736, 0x080c, 0x4aa6, 0x701f, 0x478c, 0x7880, 0x9086, 0x006e, - 0x0110, 0x701f, 0x5049, 0x0005, 0x2009, 0x0080, 0x080c, 0x6411, - 0x1118, 0x080c, 0x6746, 0x0120, 0x2021, 0x400a, 0x0804, 0x33cd, - 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74, 0xac78, 0xad7c, 0xae80, - 0xa888, 0x90be, 0x0100, 0x0904, 0x4825, 0x90be, 0x0112, 0x0904, - 0x4825, 0x90be, 0x0113, 0x0904, 0x4825, 0x90be, 0x0114, 0x0904, - 0x4825, 0x90be, 0x0117, 0x0904, 0x4825, 0x90be, 0x011a, 0x0904, - 0x4825, 0x90be, 0x011c, 0x0904, 0x4825, 0x90be, 0x0121, 0x0904, - 0x480c, 0x90be, 0x0131, 0x0904, 0x480c, 0x90be, 0x0171, 0x0904, - 0x4825, 0x90be, 0x0173, 0x0904, 0x4825, 0x90be, 0x01a1, 0x1128, - 0xa898, 0x8007, 0xa89a, 0x0804, 0x4830, 0x90be, 0x0212, 0x0904, - 0x4819, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, - 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa8a0, 0x8007, 0xa8a2, - 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, - 0x00de, 0x0804, 0x3400, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, - 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x486e, 0x7028, - 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, - 0x0001, 0x080c, 0x486e, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, - 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b, - 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, - 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b, 0x7028, 0x9080, 0x000c, - 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, - 0x00c6, 0x080c, 0x4a61, 0x0550, 0xa86c, 0xc0fd, 0xa86e, 0xa86b, - 0x0119, 0x9006, 0xa886, 0xa883, 0x0020, 0xa88f, 0x0001, 0x810b, - 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2, 0xadc6, 0xa9ca, 0xa8ce, - 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822, 0xa86c, 0xc0fd, 0xa86e, - 0xa804, 0x2048, 0x080c, 0xbada, 0x1120, 0x2009, 0x0003, 0x0804, - 0x33fd, 0x7007, 0x0003, 0x701f, 0x4865, 0x0005, 0x00ce, 0x009e, - 0x00de, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa820, 0x9086, 0x8001, - 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x0016, 0x0026, - 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, - 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, - 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, - 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, - 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8, 0xd0ac, 0x1188, 0x2009, - 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016, - 0x0804, 0x33fd, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd, - 0x7984, 0x78a8, 0x2040, 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f, - 0x0a04, 0x3400, 0x9186, 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800, - 0x1a04, 0x3400, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1158, 0x607c, - 0x924e, 0x0904, 0x3400, 0x080c, 0x9e82, 0x1120, 0x99cc, 0xff00, - 0x0904, 0x3400, 0x0126, 0x2091, 0x8000, 0x2001, 0x180d, 0x2004, - 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178, 0x0026, 0x2011, 0x8008, - 0x080c, 0x6781, 0x002e, 0x0140, 0x918d, 0x8000, 0x080c, 0x67cb, - 0x1118, 0x2001, 0x4009, 0x0420, 0x080c, 0x497d, 0x0528, 0x90c6, - 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c, 0x6643, 0x000e, 0x00ce, - 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008, - 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040, - 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a, - 0x2020, 0x012e, 0x0804, 0x33cd, 0x2b00, 0x7026, 0x0016, 0x00b6, - 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9f5b, 0x05a8, 0x2b00, 0x6012, - 0x080c, 0xbc97, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4a61, - 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9f18, 0x00ee, 0x00ce, 0x00be, - 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33fd, 0x900e, 0xa96a, - 0xa96e, 0x2900, 0x6016, 0xa932, 0xa86c, 0xc0fd, 0xd88c, 0x0108, - 0xc0f5, 0xa86e, 0x080c, 0x3066, 0x6023, 0x0001, 0x9006, 0x080c, - 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2009, 0x0002, 0x080c, - 0x9f88, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, - 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, - 0x495a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, - 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd, - 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, - 0x9294, 0x00ff, 0x0804, 0x54f7, 0x900e, 0xa86c, 0xd0f4, 0x1904, - 0x33cb, 0x080c, 0x6643, 0x0804, 0x33cb, 0x00e6, 0x00d6, 0x0096, - 0x83ff, 0x0904, 0x49c3, 0x902e, 0x080c, 0x9e82, 0x0130, 0x9026, - 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, - 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, - 0x15d8, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1518, - 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11e0, 0x93ce, - 0x00ff, 0x11c8, 0xc5fd, 0x0440, 0x2058, 0xbf10, 0x2700, 0x9306, - 0x11a8, 0xbe14, 0x2600, 0x9206, 0x1188, 0x2400, 0x9106, 0x1140, - 0xd884, 0x0558, 0x080c, 0x6746, 0x1540, 0x2001, 0x4000, 0x0430, + 0x6100, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, + 0x5678, 0x1904, 0x3499, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, + 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, + 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, + 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0202, 0x0804, 0x3467, + 0x78a8, 0x909c, 0x0003, 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a, + 0x0003, 0x1a04, 0x3499, 0x6258, 0x7884, 0x9206, 0x1904, 0x4678, + 0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, + 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, + 0x78a8, 0x9084, 0x0080, 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e, + 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, + 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, + 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, + 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0126, 0x2091, + 0x8000, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, + 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e, + 0x000e, 0x0804, 0x4b59, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9, + 0x2c44, 0xa66e, 0xa17e, 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, + 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f, 0x4698, 0x0005, + 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, + 0x686d, 0x1904, 0x3499, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x0904, + 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c, + 0xc33a, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f, 0x46d2, 0x0005, + 0x0126, 0x2091, 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, + 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, + 0x0000, 0x003e, 0x000e, 0x012e, 0x080c, 0x4196, 0x0006, 0x0036, + 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, + 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, + 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, + 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, + 0x0804, 0x3467, 0xa830, 0x9086, 0x0100, 0x0904, 0x3499, 0x8906, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, + 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59, + 0xa8b4, 0x909c, 0x0003, 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a, + 0x0003, 0x1a04, 0x4738, 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031, + 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, + 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2039, 0x0001, + 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1528, 0x2009, 0x0002, 0x0420, + 0xa99c, 0x080c, 0x64fc, 0x0118, 0x2009, 0x000a, 0x0408, 0x080c, + 0x686d, 0x2009, 0x0009, 0x11c0, 0x0096, 0x080c, 0x100d, 0x1120, + 0x009e, 0x2009, 0x0002, 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c, + 0xc0fc, 0xa86e, 0xaeb4, 0x96b4, 0x000b, 0x080c, 0xc33a, 0x2009, + 0x0003, 0x0110, 0x9006, 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010, + 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, + 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091, + 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003, + 0x0000, 0x2001, 0x185c, 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e, + 0x000e, 0x012e, 0xa8b4, 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000, + 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, + 0x2009, 0x013c, 0x200a, 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e, + 0x201c, 0xabaa, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae, + 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000, + 0x2001, 0x1a5a, 0x201c, 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61, + 0x201c, 0xabbe, 0x2003, 0x0000, 0x003e, 0x000e, 0x0005, 0x9006, + 0x080c, 0x2771, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, + 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x190c, 0x5f78, 0x7888, + 0x908a, 0x1000, 0x1a04, 0x349c, 0x7984, 0x9186, 0x00ff, 0x0138, + 0x9182, 0x007f, 0x1a04, 0x349c, 0x2100, 0x080c, 0x273b, 0x0026, + 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000, + 0x601f, 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x080c, 0x7351, + 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x9085, 0x0001, 0x080c, + 0x7395, 0x080c, 0x727e, 0x00d0, 0x080c, 0xa30e, 0x2061, 0x0100, + 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, + 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, + 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c, 0x859e, 0x7984, 0x080c, + 0x7351, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x450b, 0x012e, + 0x00ce, 0x002e, 0x0804, 0x3467, 0x7984, 0x080c, 0x6497, 0x2b08, + 0x1904, 0x349c, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001, + 0x0804, 0x3499, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, + 0x0005, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, + 0x0804, 0x3499, 0x7984, 0x81ff, 0x0904, 0x349c, 0x9192, 0x0021, + 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, + 0x001a, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4b56, 0x701f, 0x482f, + 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x5106, 0x0005, 0x2009, + 0x0080, 0x080c, 0x64fc, 0x1118, 0x080c, 0x686d, 0x0120, 0x2021, + 0x400a, 0x0804, 0x3469, 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74, + 0xac78, 0xad7c, 0xae80, 0xa888, 0x90be, 0x0100, 0x0904, 0x48c8, + 0x90be, 0x0112, 0x0904, 0x48c8, 0x90be, 0x0113, 0x0904, 0x48c8, + 0x90be, 0x0114, 0x0904, 0x48c8, 0x90be, 0x0117, 0x0904, 0x48c8, + 0x90be, 0x011a, 0x0904, 0x48c8, 0x90be, 0x011c, 0x0904, 0x48c8, + 0x90be, 0x0121, 0x0904, 0x48af, 0x90be, 0x0131, 0x0904, 0x48af, + 0x90be, 0x0171, 0x0904, 0x48c8, 0x90be, 0x0173, 0x0904, 0x48c8, + 0x90be, 0x01a1, 0x1128, 0xa898, 0x8007, 0xa89a, 0x0804, 0x48d3, + 0x90be, 0x0212, 0x0904, 0x48bc, 0x90be, 0x0213, 0x05e8, 0x90be, + 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, + 0xa8a0, 0x8007, 0xa8a2, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, + 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x349c, 0x7028, 0x9080, + 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, + 0x080c, 0x4911, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, + 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4911, 0x00c8, 0x7028, + 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, + 0x0001, 0x080c, 0x491e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, + 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x491e, + 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, + 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4b11, 0x0550, 0xa86c, + 0xc0fd, 0xa86e, 0xa86b, 0x0119, 0x9006, 0xa886, 0xa883, 0x0020, + 0xa88f, 0x0001, 0x810b, 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2, + 0xadc6, 0xa9ca, 0xa8ce, 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822, + 0xa86c, 0xc0fd, 0xa86e, 0xa804, 0x2048, 0x080c, 0xc355, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4908, + 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3499, + 0xa820, 0x9086, 0x8001, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804, + 0x3499, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, + 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, + 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, + 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x60d8, + 0xd0ac, 0x1188, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, + 0x0120, 0x2009, 0x0016, 0x0804, 0x3499, 0xd09c, 0x1120, 0x2009, + 0x0005, 0x0804, 0x3499, 0x7984, 0x78a8, 0x2040, 0x080c, 0xa307, + 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186, 0x00ff, 0x0904, + 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x6078, + 0x9306, 0x1158, 0x607c, 0x924e, 0x0904, 0x349c, 0x080c, 0xa307, + 0x1120, 0x99cc, 0xff00, 0x0904, 0x349c, 0x0126, 0x2091, 0x8000, + 0x2001, 0x180d, 0x2004, 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178, + 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x0140, 0x918d, + 0x8000, 0x080c, 0x68f2, 0x1118, 0x2001, 0x4009, 0x0420, 0x080c, + 0x4a2b, 0x0528, 0x90c6, 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c, + 0x674b, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, + 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, + 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, + 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3469, 0x2b00, + 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xa3ec, + 0x0904, 0x49f9, 0x2b00, 0x6012, 0x080c, 0xc640, 0x2e58, 0x00ee, + 0x00e6, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x2b70, 0x1158, 0x080c, + 0xa39d, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, + 0x0804, 0x3499, 0x900e, 0xa96a, 0xa96e, 0x2900, 0x6016, 0xa932, + 0xa86c, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86e, 0x080c, 0x3102, + 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, + 0x6448, 0x2009, 0x0002, 0x080c, 0xa419, 0x78a8, 0xd094, 0x0138, + 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, + 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, + 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4a08, 0x0005, + 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, + 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3469, 0x9086, 0x0100, + 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, + 0x0804, 0x55b4, 0x900e, 0xa86c, 0xd0f4, 0x1904, 0x3467, 0x080c, + 0x674b, 0x0804, 0x3467, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, + 0x4a73, 0x902e, 0x080c, 0xa307, 0x0130, 0x9026, 0x20a9, 0x0800, + 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, + 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, + 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, + 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, + 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, + 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, + 0xd894, 0x1558, 0x080c, 0x686d, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, - 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0958, 0x080c, 0x9e82, - 0x1940, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4993, + 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0xa307, + 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4a41, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, - 0x080c, 0x63c1, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, + 0x080c, 0x6497, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, - 0x33fd, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, + 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7884, 0x9005, 0x0904, - 0x3400, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x3400, - 0x2010, 0x2918, 0x080c, 0x3012, 0x1120, 0x2009, 0x0003, 0x0804, - 0x33fd, 0x7007, 0x0003, 0x701f, 0x4a16, 0x0005, 0xa830, 0x9086, - 0x0100, 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x7984, - 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3400, 0x9186, - 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800, 0x1a04, 0x3400, 0x2001, - 0x9400, 0x080c, 0x5552, 0x1904, 0x33fd, 0x0804, 0x33cb, 0xa99c, - 0x080c, 0x9e82, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, - 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x5552, + 0x349c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x349c, + 0x2010, 0x2918, 0x080c, 0x30a8, 0x1120, 0x2009, 0x0003, 0x0804, + 0x3499, 0x7007, 0x0003, 0x701f, 0x4ac6, 0x0005, 0xa830, 0x9086, + 0x0100, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804, 0x3499, 0x7984, + 0x080c, 0xa307, 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186, + 0x00ff, 0x0904, 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x2001, + 0x9400, 0x080c, 0x560f, 0x1904, 0x3499, 0x0804, 0x3467, 0xa99c, + 0x080c, 0xa307, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, + 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x560f, 0x11a8, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, - 0x0c48, 0x080c, 0x1001, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, + 0x0c48, 0x080c, 0x100d, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, - 0x7984, 0x080c, 0x6411, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208, - 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x6411, 0x1120, 0xaea0, + 0x7984, 0x080c, 0x64fc, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208, + 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x64fc, 0x1120, 0xaea0, 0x9682, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae9c, 0x0008, - 0x7e84, 0x2608, 0x080c, 0x6411, 0x1108, 0x0008, 0x905e, 0x8bff, + 0x7e84, 0x2608, 0x080c, 0x64fc, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, - 0x1033, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, + 0x103f, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e, - 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb, - 0x7007, 0x0002, 0x701f, 0x33cb, 0x0005, 0x00f6, 0x0126, 0x2091, + 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, + 0x7007, 0x0002, 0x701f, 0x3467, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b1, 0x2004, 0x9005, 0x1190, - 0x0e04, 0x4ada, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, - 0x0804, 0x4b40, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, + 0x0e04, 0x4b8a, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, + 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, + 0x0804, 0x4bf0, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189f, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, - 0x7038, 0x2060, 0x080c, 0x1001, 0x0904, 0x4b38, 0xa84b, 0x0000, - 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846, + 0x7038, 0x2060, 0x080c, 0x100d, 0x0904, 0x4be8, 0xa84b, 0x0000, + 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18bb, 0x9c82, 0x18fb, 0x0210, 0x2061, 0x18bb, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, - 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc4, + 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, - 0x1001, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, + 0x100d, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, - 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846, 0x0058, + 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, - 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4b62, - 0x4b62, 0x4b64, 0x4b62, 0x4b62, 0x4b62, 0x4b68, 0x4b62, 0x4b62, - 0x4b62, 0x4b6c, 0x4b62, 0x4b62, 0x4b62, 0x4b70, 0x4b62, 0x4b62, - 0x4b62, 0x4b74, 0x4b62, 0x4b62, 0x4b62, 0x4b78, 0x4b62, 0x4b62, - 0x4b62, 0x4b7d, 0x080c, 0x0dc4, 0xa27a, 0xa37e, 0xa482, 0x0898, + 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4c12, + 0x4c12, 0x4c14, 0x4c12, 0x4c12, 0x4c12, 0x4c18, 0x4c12, 0x4c12, + 0x4c12, 0x4c1c, 0x4c12, 0x4c12, 0x4c12, 0x4c20, 0x4c12, 0x4c12, + 0x4c12, 0x4c24, 0x4c12, 0x4c12, 0x4c12, 0x4c28, 0x4c12, 0x4c12, + 0x4c12, 0x4c2d, 0x080c, 0x0dc3, 0xa27a, 0xa37e, 0xa482, 0x0898, 0xa28a, 0xa38e, 0xa492, 0x0878, 0xa29a, 0xa39e, 0xa4a2, 0x0858, 0xa2aa, 0xa3ae, 0xa4b2, 0x0838, 0xa2ba, 0xa3be, 0xa4c2, 0x0818, - 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4b3b, 0xa2da, 0xa3de, 0xa4e2, - 0x0804, 0x4b3b, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904, - 0x4c14, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c13, 0x00f6, 0x2079, + 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4beb, 0xa2da, 0xa3de, 0xa4e2, + 0x0804, 0x4beb, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904, + 0x4cc4, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4cc3, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0037, - 0x1a0c, 0x0dc4, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, - 0x1904, 0x4c16, 0xa804, 0x9005, 0x090c, 0x0dc4, 0x7042, 0x2938, - 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, - 0xa04a, 0x0804, 0x4c16, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, + 0x1a0c, 0x0dc3, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, + 0x1904, 0x4cc6, 0xa804, 0x9005, 0x090c, 0x0dc3, 0x7042, 0x2938, + 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, + 0xa04a, 0x0804, 0x4cc6, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, - 0x190c, 0x119d, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1033, 0x7048, + 0x190c, 0x11a9, 0x87ff, 0x0118, 0x2748, 0x080c, 0x103f, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, - 0x080c, 0x1033, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, + 0x080c, 0x103f, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, 0x18bb, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fb, 0x0210, 0x2001, 0x18bb, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, - 0x0dc4, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, - 0x0002, 0x9080, 0x1f70, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, + 0x0dc3, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, + 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, - 0x001c, 0x0002, 0x4c35, 0x4c35, 0x4c37, 0x4c35, 0x4c35, 0x4c35, - 0x4c3c, 0x4c35, 0x4c35, 0x4c35, 0x4c41, 0x4c35, 0x4c35, 0x4c35, - 0x4c46, 0x4c35, 0x4c35, 0x4c35, 0x4c4b, 0x4c35, 0x4c35, 0x4c35, - 0x4c50, 0x4c35, 0x4c35, 0x4c35, 0x4c55, 0x080c, 0x0dc4, 0xaa78, - 0xab7c, 0xac80, 0x0804, 0x4bc1, 0xaa88, 0xab8c, 0xac90, 0x0804, - 0x4bc1, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4bc1, 0xaaa8, 0xabac, - 0xacb0, 0x0804, 0x4bc1, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4bc1, - 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4bc1, 0xaad8, 0xabdc, 0xace0, - 0x0804, 0x4bc1, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, - 0x007e, 0x080c, 0x6411, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, - 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4abd, 0x00ce, 0x00be, - 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x55a7, 0xd0c4, - 0x0120, 0x2011, 0x8014, 0x080c, 0x4abd, 0x002e, 0x0005, 0x81ff, - 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc0ac, - 0x6032, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6, - 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212, 0x0010, 0x080c, - 0x5db5, 0x012e, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, - 0x0804, 0x33fd, 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, - 0x33fd, 0x080c, 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, - 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010, - 0x080c, 0x6781, 0x002e, 0x0140, 0x7984, 0x080c, 0x67cb, 0x1120, - 0x2009, 0x4009, 0x0804, 0x33fd, 0x7984, 0x080c, 0x63c1, 0x1904, - 0x3400, 0x080c, 0x4a90, 0x0904, 0x3400, 0x2b00, 0x7026, 0x080c, - 0x6746, 0x7888, 0x1138, 0x9084, 0x0001, 0x1120, 0x080c, 0x6643, - 0x0804, 0x33cb, 0x080c, 0x4a61, 0x0904, 0x33fd, 0x9006, 0xa86a, - 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x0904, 0x33fd, - 0x7007, 0x0003, 0x701f, 0x4d47, 0x0005, 0x2061, 0x1800, 0x080c, - 0x55bb, 0x2009, 0x0007, 0x11f8, 0x080c, 0x673e, 0x0118, 0x2009, - 0x0008, 0x00c8, 0xa99c, 0x080c, 0x63c1, 0x11c8, 0x080c, 0x4a8e, - 0x01b0, 0x080c, 0x6746, 0xa8a0, 0x1130, 0x9084, 0x0001, 0x1118, - 0x080c, 0x6643, 0x00a0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xbb78, - 0x11b8, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, - 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, - 0x4000, 0xa99e, 0x0039, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, - 0x9006, 0x0005, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098, - 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0, - 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x0005, 0xa830, - 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, - 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd, 0x9086, 0x0100, 0x7024, - 0x2058, 0x1110, 0x0804, 0x54f7, 0x080c, 0x6643, 0x0804, 0x33cb, - 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7f84, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4a61, 0x1120, 0x2009, - 0x0002, 0x0804, 0x33fd, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, - 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, - 0x6411, 0x1904, 0x4dea, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, - 0x1904, 0x4dea, 0x080c, 0x673e, 0x1130, 0x080c, 0x6640, 0x1118, - 0xd79c, 0x0904, 0x4dea, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b0, - 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0198, - 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, - 0x0002, 0x080c, 0x487b, 0x0080, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, - 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, - 0x3d00, 0x20e0, 0x080c, 0x487b, 0x4104, 0xd794, 0x0528, 0xb8b0, - 0x20e0, 0xb8b4, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, - 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, - 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, - 0x3d00, 0x20e0, 0x080c, 0x486e, 0x9c80, 0x0026, 0x2098, 0xb8b0, - 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, - 0x96b0, 0x0005, 0x8108, 0x080c, 0x9e82, 0x0118, 0x9186, 0x0800, - 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, - 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, - 0x0028, 0x0150, 0x0804, 0x4d7f, 0x86ff, 0x1120, 0x7124, 0x810b, - 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, - 0x772e, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034, - 0xa076, 0x7028, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, - 0x10eb, 0x7007, 0x0002, 0x701f, 0x4e26, 0x0005, 0x7030, 0x9005, - 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, - 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804, - 0x4d7f, 0x7124, 0x810b, 0x0804, 0x33cb, 0x2029, 0x007e, 0x7984, - 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, - 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9184, 0x00ff, 0x90e2, - 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9284, 0xff00, - 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, - 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, - 0x3400, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400, - 0x9502, 0x0a04, 0x3400, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, - 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0xff00, 0x8007, 0x90e2, - 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0x00ff, - 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x2061, - 0x1965, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x33cb, 0x0006, - 0x080c, 0x55a7, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab, - 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118, - 0x7986, 0x0804, 0x33cb, 0x83ff, 0x1904, 0x3400, 0x2001, 0xfff0, - 0x9200, 0x1a04, 0x3400, 0x2019, 0xffff, 0x6074, 0x9302, 0x9200, - 0x0a04, 0x3400, 0x7986, 0x6272, 0x0804, 0x33cb, 0x080c, 0x55bb, - 0x1904, 0x33fd, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4a61, - 0x0904, 0x33fd, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, - 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, - 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, - 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, - 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, - 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, - 0x080c, 0x854b, 0x2208, 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122, - 0x7024, 0x9300, 0x7026, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, - 0xa37e, 0x7028, 0xa07a, 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a, - 0xa79e, 0x080c, 0x10eb, 0x7007, 0x0002, 0x701f, 0x4f18, 0x0005, - 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, - 0x20e8, 0x2061, 0x18b9, 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c, - 0x0804, 0x4ed6, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b, - 0x2208, 0x0804, 0x33cb, 0x00f6, 0x00e6, 0x080c, 0x55bb, 0x2009, - 0x0007, 0x1904, 0x4fac, 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009, - 0x000e, 0x1904, 0x4fac, 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096, - 0x080c, 0x101a, 0x2009, 0x0002, 0x0904, 0x4fab, 0x2900, 0x705e, - 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, - 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, - 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148, 0xb814, 0x20a9, - 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, - 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, - 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b, 0x2208, - 0x009e, 0xa89b, 0x4000, 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc4, - 0x2148, 0x080c, 0x1033, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, - 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, - 0x18ba, 0x2c44, 0xa37e, 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492, - 0xa596, 0xa69a, 0xa79e, 0xa0a3, 0x4fb7, 0x000e, 0xa0a6, 0x080c, - 0x10eb, 0x9006, 0x0048, 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, - 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0x00e6, 0x2071, 0x189f, 0xa070, - 0x908e, 0x0100, 0x0138, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, - 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, - 0x901e, 0x7064, 0x20e8, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428, - 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e, - 0x2001, 0x0003, 0x080c, 0x854b, 0xaa9e, 0x715c, 0x81ff, 0x090c, - 0x0dc4, 0x2148, 0x080c, 0x1033, 0x705f, 0x0000, 0xa0a4, 0x2048, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000, - 0xa0a7, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, - 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148, - 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, - 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, - 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000, - 0x715c, 0x81ff, 0x090c, 0x0dc4, 0x2148, 0x080c, 0x1033, 0x9006, - 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, - 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e, - 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10eb, 0x9006, 0x00ee, - 0x0005, 0x0096, 0xa890, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, - 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x3400, 0xa888, - 0xa98c, 0x080c, 0x269f, 0x1518, 0x080c, 0x63c1, 0x1500, 0x7126, - 0xbe12, 0xbd16, 0xae80, 0x080c, 0x4a61, 0x01f0, 0x080c, 0x4a61, - 0x01d8, 0x009e, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823, - 0x0000, 0xa804, 0x2048, 0x080c, 0xbafa, 0x1120, 0x2009, 0x0003, - 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x5085, 0x0005, 0x009e, - 0x2009, 0x0002, 0x0804, 0x33fd, 0x0cd0, 0x7124, 0x080c, 0x3162, - 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, - 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, - 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, - 0x0f7e, 0xaa70, 0xab74, 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44, - 0xa06f, 0x0000, 0xae68, 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6, - 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, - 0x007e, 0x0804, 0x4aa9, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, - 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776, - 0xa07f, 0x002a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb, - 0x7007, 0x0002, 0x701f, 0x50e1, 0x0005, 0x000e, 0x007e, 0x0804, - 0x3400, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, - 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, - 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7e, - 0x2100, 0x2238, 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, - 0xa59c, 0x2009, 0x002a, 0x0804, 0x4aa9, 0x81ff, 0x1904, 0x33fd, - 0x798c, 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78, - 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904, - 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6597, 0x012e, 0x0904, 0x33fd, 0x2001, 0x195b, 0x2004, - 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195b, - 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c, - 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009, - 0x0002, 0x0128, 0x080c, 0x6597, 0x1170, 0x2009, 0x0003, 0xa89b, - 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, - 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195b, 0x2004, - 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e, - 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, - 0xd084, 0x0904, 0x437a, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, - 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x6746, - 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, - 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x55a7, - 0xd0b4, 0x0904, 0x43b4, 0x7884, 0x908e, 0x007e, 0x0904, 0x43b4, - 0x908e, 0x007f, 0x0904, 0x43b4, 0x908e, 0x0080, 0x0904, 0x43b4, - 0xb800, 0xd08c, 0x1904, 0x43b4, 0xa86b, 0x0000, 0xa86c, 0xc0fd, - 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, - 0x7007, 0x0003, 0x701f, 0x51ad, 0x0005, 0x080c, 0x4a90, 0x0904, - 0x3400, 0x0804, 0x43b4, 0x080c, 0x31bb, 0x0108, 0x0005, 0x2009, - 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, - 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x080c, - 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0xb89c, 0xd0a4, - 0x1118, 0xd0ac, 0x1904, 0x43b4, 0x9006, 0xa86a, 0xa832, 0xa86c, - 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x1120, 0x2009, 0x0003, 0x0804, - 0x33fd, 0x7007, 0x0003, 0x701f, 0x51e6, 0x0005, 0xa830, 0x9086, - 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x54f7, 0x080c, 0x4a90, - 0x0904, 0x3400, 0x0804, 0x517f, 0x81ff, 0x2009, 0x0001, 0x1904, - 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd, 0x080c, - 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0x080c, 0x4a90, - 0x0904, 0x3400, 0x080c, 0x6746, 0x2009, 0x0009, 0x1904, 0x33fd, - 0x080c, 0x4a61, 0x2009, 0x0002, 0x0904, 0x33fd, 0x9006, 0xa86a, - 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00, - 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, - 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3400, 0xc0e5, 0xa952, - 0xa956, 0xa83e, 0x080c, 0xbc98, 0x2009, 0x0003, 0x0904, 0x33fd, - 0x7007, 0x0003, 0x701f, 0x523d, 0x0005, 0xa830, 0x9086, 0x0100, - 0x2009, 0x0004, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x7aa8, 0x9284, - 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x55bb, 0x1188, 0x2009, - 0x0014, 0x0804, 0x33fd, 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001, - 0x1904, 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd, - 0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x557d, 0x0804, - 0x33cb, 0xd2fc, 0x0160, 0x080c, 0x4a90, 0x0904, 0x3400, 0x7984, - 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x080c, - 0x4a90, 0x0904, 0x3400, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, - 0x2009, 0x0009, 0x1904, 0x532c, 0x080c, 0x4a61, 0x2009, 0x0002, - 0x0904, 0x532c, 0xa85c, 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa6, 0x701f, 0x5299, - 0x0005, 0xa870, 0x9086, 0x0500, 0x1138, 0xa874, 0x9005, 0x1120, - 0xa878, 0x9084, 0xff00, 0x0110, 0x1904, 0x3400, 0xa86a, 0xa832, - 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0x4a90, 0x1110, 0x0804, 0x3400, - 0x2009, 0x0043, 0x080c, 0xbd04, 0x2009, 0x0003, 0x0904, 0x532c, - 0x7007, 0x0003, 0x701f, 0x52bd, 0x0005, 0xa830, 0x9086, 0x0100, - 0x2009, 0x0004, 0x0904, 0x532c, 0x7984, 0x7aa8, 0x9284, 0x1000, - 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x00c6, 0xaab4, 0x9284, - 0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c, 0x55bb, 0x1158, 0x2009, - 0x0014, 0x0804, 0x531b, 0x2061, 0x1800, 0x080c, 0x55bb, 0x2009, - 0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c, - 0x557d, 0x0058, 0xd2fc, 0x0180, 0x080c, 0x4a8e, 0x0590, 0xa99c, - 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0xa87f, 0x0000, 0xa887, - 0x0000, 0xa89b, 0x4000, 0x0438, 0x080c, 0x4a8e, 0x0510, 0x080c, - 0x6746, 0x2009, 0x0009, 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8, - 0xa8cc, 0x9005, 0x11b0, 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c, - 0x4a8e, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xbd04, 0x2009, - 0x0003, 0x0108, 0x0078, 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e, - 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, - 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x33fd, - 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552, 0x001e, - 0x1904, 0x33fd, 0x0804, 0x33cb, 0x00f6, 0x2d78, 0xaab4, 0x0021, - 0x00fe, 0x0005, 0xaab4, 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c, - 0x9284, 0x1400, 0xc0fd, 0x080c, 0x5552, 0x001e, 0x9085, 0x0001, - 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c, - 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8, - 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f, - 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd, - 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b, - 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a, - 0x080c, 0xbb33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007, - 0x0003, 0x701f, 0x538c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, - 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, 0xa8e4, 0xa86a, 0xa810, - 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, - 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, - 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, - 0x7d98, 0x0804, 0x4aa9, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, - 0x0804, 0x33fd, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, - 0x82ff, 0x1118, 0x7023, 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118, - 0x7023, 0x19aa, 0x0010, 0x0804, 0x3400, 0x2009, 0x001a, 0x7a8c, - 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, - 0x4aa6, 0x701f, 0x53dc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001, - 0xa85c, 0x9080, 0x001a, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, - 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x33cb, 0x080c, - 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984, 0x9194, - 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990, - 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804, - 0x3400, 0xa85c, 0x9080, 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9, - 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, - 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x0804, 0x4aa9, - 0x7884, 0x908a, 0x1000, 0x1a04, 0x3400, 0x0126, 0x2091, 0x8000, - 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a, - 0x00ce, 0x012e, 0x0804, 0x33cb, 0x00c6, 0x080c, 0x72e5, 0x1160, - 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a, - 0x080c, 0x7212, 0x080c, 0x0dc4, 0x2061, 0x1800, 0x6030, 0xc09d, - 0x6032, 0x080c, 0x5db5, 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004, - 0x908e, 0x0000, 0x0904, 0x33fd, 0x00c6, 0x7884, 0x9005, 0x0190, - 0x7888, 0x2061, 0x1978, 0x2c0c, 0x2062, 0x080c, 0x2a75, 0x01a8, - 0x080c, 0x2a7d, 0x0190, 0x080c, 0x2a85, 0x0178, 0x2162, 0x00ce, - 0x0804, 0x3400, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, - 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, - 0x1568, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, - 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x002e, - 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3, - 0x0000, 0x080c, 0xd33c, 0x080c, 0xd373, 0x9085, 0x0001, 0x080c, - 0x732a, 0x9006, 0x080c, 0x2b65, 0x2001, 0x1800, 0x2003, 0x0004, - 0x2001, 0x1984, 0x2003, 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804, - 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c, - 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8, - 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f, - 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd, - 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b, - 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb36, 0x1120, 0x2009, - 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x54e0, 0x0005, - 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, - 0xa8e4, 0xa86a, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, - 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aa9, 0xa89c, - 0x9086, 0x000d, 0x1904, 0x33fd, 0x2021, 0x4005, 0x0126, 0x2091, - 0x8000, 0x0e04, 0x5504, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, - 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, - 0x4005, 0xa99c, 0x7986, 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c, - 0x4a99, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, - 0x119d, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, - 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984, - 0x615a, 0x6156, 0x605f, 0x0000, 0x6053, 0x0009, 0x7898, 0x6072, - 0x789c, 0x606e, 0x7888, 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7, - 0x2044, 0x2001, 0x19ee, 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001, - 0xa083, 0x0002, 0xa06f, 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e, - 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, - 0xc000, 0x0168, 0x0006, 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029, - 0x080c, 0x3180, 0x003e, 0x080c, 0xb99f, 0x000e, 0x1198, 0xd0e4, - 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x5f10, - 0x080c, 0x9e82, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, - 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, - 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, - 0x2004, 0x9005, 0x0188, 0x9186, 0x007e, 0x0170, 0x9186, 0x007f, - 0x0158, 0x9186, 0x0080, 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026, - 0x2200, 0x080c, 0x5552, 0x002e, 0x001e, 0x8108, 0x1f04, 0x5585, - 0x015e, 0x012e, 0x0005, 0x080c, 0xbef8, 0x0db0, 0x0c80, 0x2001, - 0x185f, 0x2004, 0x0005, 0x2001, 0x187e, 0x2004, 0x0005, 0x0006, - 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, - 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, - 0x0005, 0x79a4, 0x81ff, 0x0904, 0x3400, 0x9182, 0x0081, 0x1a04, - 0x3400, 0x810c, 0x0016, 0x080c, 0x4a61, 0x0170, 0x080c, 0x0f09, - 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, - 0x4aa6, 0x701f, 0x55e1, 0x0005, 0x001e, 0x2009, 0x0002, 0x0804, - 0x33fd, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, - 0x810c, 0x2061, 0x18b9, 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f, - 0x080c, 0x4aa9, 0x701f, 0x55f5, 0x0005, 0x2061, 0x18b9, 0x2c44, - 0x0016, 0x0026, 0xa274, 0xa178, 0x080c, 0x0f11, 0x002e, 0x001e, - 0x080c, 0x0fbe, 0x9006, 0xa802, 0xa806, 0x0804, 0x33cb, 0x0126, - 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, - 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, - 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x57b5, 0x0068, 0xd08c, - 0x0118, 0x080c, 0x56be, 0x0040, 0xd094, 0x0118, 0x080c, 0x568e, - 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, - 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030, - 0xd09c, 0x1120, 0x6004, 0x9085, 0x0002, 0x6006, 0x7094, 0x9005, - 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0, - 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, - 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, - 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, - 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x00f0, 0x6040, - 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7083, - 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, - 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087, 0x000f, 0x2009, - 0x000f, 0x2011, 0x5d58, 0x080c, 0x8432, 0x0005, 0x2001, 0x1880, - 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084, 0x9005, 0x1528, - 0x2011, 0x5d58, 0x080c, 0x835e, 0x6040, 0x9094, 0x0010, 0x9285, - 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, - 0x56a4, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, - 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097, 0x0000, 0x708b, - 0x0000, 0x9006, 0x080c, 0x5efb, 0x0000, 0x0005, 0x7088, 0x908a, - 0x0003, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x56c8, 0x5719, 0x57b4, - 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b, 0x0001, 0x2001, - 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, - 0x9084, 0x00fc, 0x0120, 0x1f04, 0x56d7, 0x080c, 0x0dc4, 0x68a0, - 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, - 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5ed7, 0x2079, 0x1c00, - 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, - 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, - 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, - 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, - 0x080c, 0x5d89, 0x00fe, 0x9006, 0x708e, 0x6043, 0x0008, 0x6042, - 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025, 0x0904, 0x5791, - 0x6020, 0xd0b4, 0x1904, 0x578f, 0x719c, 0x81ff, 0x0904, 0x577d, - 0x9486, 0x000c, 0x1904, 0x578a, 0x9480, 0x0018, 0x8004, 0x20a8, - 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, - 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5736, 0x6043, 0x0004, - 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, - 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0, - 0x2011, 0x5d5f, 0x080c, 0x8432, 0x080c, 0x5ed7, 0x04c0, 0x080c, - 0x5ed0, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, - 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, - 0x0190, 0x080c, 0x5ed0, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, - 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, - 0x1f04, 0x5771, 0x0078, 0x709f, 0x0000, 0x080c, 0x5ed0, 0x20e1, - 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, - 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, - 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, - 0x080c, 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, - 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7, - 0x9575, 0x080c, 0x961a, 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d, - 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x57e6, 0x57f9, 0x5822, 0x5842, - 0x5868, 0x5897, 0x58bd, 0x58f5, 0x591b, 0x5949, 0x5984, 0x59bc, - 0x59da, 0x5a05, 0x5a27, 0x5a42, 0x5a4c, 0x5a80, 0x5aa6, 0x5ad5, - 0x5afb, 0x5b33, 0x5b77, 0x5bb4, 0x5bd5, 0x5c2e, 0x5c50, 0x5c7e, - 0x5c7e, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, - 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, - 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, - 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c, 0x8432, - 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, - 0xd0b4, 0x11f0, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, - 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x5d5f, 0x080c, - 0x835e, 0x7097, 0x0010, 0x080c, 0x5a4c, 0x0010, 0x708f, 0x0000, - 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043, 0x0004, 0x2011, - 0x5d5f, 0x080c, 0x835e, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, - 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, - 0x0000, 0x8108, 0x1f04, 0x5837, 0x60c3, 0x0014, 0x080c, 0x5d89, - 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, - 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, - 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, + 0x001c, 0x0002, 0x4ce5, 0x4ce5, 0x4ce7, 0x4ce5, 0x4ce5, 0x4ce5, + 0x4cec, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cf1, 0x4ce5, 0x4ce5, 0x4ce5, + 0x4cf6, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cfb, 0x4ce5, 0x4ce5, 0x4ce5, + 0x4d00, 0x4ce5, 0x4ce5, 0x4ce5, 0x4d05, 0x080c, 0x0dc3, 0xaa78, + 0xab7c, 0xac80, 0x0804, 0x4c71, 0xaa88, 0xab8c, 0xac90, 0x0804, + 0x4c71, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4c71, 0xaaa8, 0xabac, + 0xacb0, 0x0804, 0x4c71, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4c71, + 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4c71, 0xaad8, 0xabdc, 0xace0, + 0x0804, 0x4c71, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, + 0x007e, 0x080c, 0x64fc, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, + 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b6d, 0x00ce, 0x00be, + 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x5664, 0xd0c4, + 0x0120, 0x2011, 0x8014, 0x080c, 0x4b6d, 0x002e, 0x0005, 0x81ff, + 0x1904, 0x3499, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, + 0xc0ac, 0x6032, 0x080c, 0x7351, 0x1158, 0x080c, 0x764c, 0x080c, + 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x0010, + 0x080c, 0x5e72, 0x012e, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009, + 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, 0x0007, + 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, 0x0008, 0x0804, + 0x3499, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, + 0x0010, 0x080c, 0x68a8, 0x002e, 0x0140, 0x7984, 0x080c, 0x68f2, + 0x1120, 0x2009, 0x4009, 0x0804, 0x3499, 0x7984, 0x080c, 0x6497, + 0x1904, 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x2b00, 0x7026, + 0x080c, 0x686d, 0x7888, 0x1138, 0x9084, 0x0005, 0x1120, 0x080c, + 0x674b, 0x0804, 0x3467, 0x080c, 0x4b11, 0x0904, 0x3499, 0x9006, + 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc3f3, 0x0904, + 0x3499, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, + 0x0003, 0x701f, 0x4e04, 0x0005, 0x2061, 0x1800, 0x080c, 0x5678, + 0x2009, 0x0007, 0x1528, 0x080c, 0x6865, 0x0118, 0x2009, 0x0008, + 0x00f8, 0xa99c, 0x080c, 0x6497, 0x11f8, 0x080c, 0x4b3e, 0x01e0, + 0x080c, 0x686d, 0xa8a0, 0x1130, 0x9084, 0x0005, 0x1118, 0x080c, + 0x674b, 0x00d0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xc3f3, 0x11e8, + 0xa8a0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003, + 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, + 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0xa99e, 0x0039, + 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0x20a9, + 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4, + 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9, + 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a, + 0x2098, 0x080c, 0x0f8a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, + 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, + 0x0804, 0x3469, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, + 0x55b4, 0x080c, 0x674b, 0x0804, 0x3467, 0x080c, 0x5678, 0x0120, + 0x2009, 0x0007, 0x0804, 0x3499, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, + 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, + 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x64fc, 0x1904, 0x4ea7, + 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x4ea7, 0x080c, + 0x6865, 0x1130, 0x080c, 0x6748, 0x1118, 0xd79c, 0x0904, 0x4ea7, + 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, + 0x0006, 0x2098, 0x3400, 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003, + 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x491e, + 0x0080, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x3400, + 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, + 0x491e, 0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, + 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, + 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, + 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, + 0x4911, 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, + 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, + 0x080c, 0xa307, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, + 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, + 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, + 0x4e3c, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3467, 0x7033, + 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b9, + 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034, 0xa076, 0x7028, 0xa07a, + 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, + 0x701f, 0x4ee3, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, + 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b9, 0x2c44, + 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804, 0x4e3c, 0x7124, 0x810b, + 0x0804, 0x3467, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, + 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, + 0x0a04, 0x349c, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c, + 0x9502, 0x0a04, 0x349c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, + 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9284, 0x00ff, 0x90e2, + 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9384, 0xff00, + 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, + 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, + 0x349c, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, + 0x9502, 0x0a04, 0x349c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, + 0x349c, 0x9502, 0x0a04, 0x349c, 0x2061, 0x1965, 0x6102, 0x6206, + 0x630a, 0x640e, 0x0804, 0x3467, 0x0006, 0x080c, 0x5664, 0xd0cc, + 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0xd0bc, 0x000e, 0x0005, + 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3467, + 0x83ff, 0x1904, 0x349c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x349c, + 0x2019, 0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x349c, 0x7986, + 0x6272, 0x0804, 0x3467, 0x080c, 0x5678, 0x1904, 0x3499, 0x7c88, + 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4b11, 0x0904, 0x3499, 0x900e, + 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, + 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, + 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0x20a9, 0x0001, + 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, + 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, + 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, + 0x0804, 0x3467, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, + 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa37e, 0x7028, 0xa07a, + 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10f7, + 0x7007, 0x0002, 0x701f, 0x4fd5, 0x0005, 0x7030, 0x9005, 0x1178, + 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b9, + 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0804, 0x4f93, 0x7224, + 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x0804, 0x3467, + 0x00f6, 0x00e6, 0x080c, 0x5678, 0x2009, 0x0007, 0x1904, 0x5069, + 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x5069, + 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096, 0x080c, 0x1026, 0x2009, + 0x0002, 0x0904, 0x5068, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, + 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, + 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x686d, 0x0118, + 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, + 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, + 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, + 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x009e, 0xa89b, 0x4000, + 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c, 0x103f, + 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, + 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18ba, 0x2c44, 0xa37e, + 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e, + 0xa0a3, 0x5074, 0x000e, 0xa0a6, 0x080c, 0x10f7, 0x9006, 0x0048, + 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a4, 0x904d, 0x090c, + 0x0dc3, 0x00e6, 0x2071, 0x189f, 0xa070, 0x908e, 0x0100, 0x0138, + 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0x00d8, 0x7060, + 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, + 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428, 0xa87f, 0x0000, 0xa887, + 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, + 0x871c, 0xaa9e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c, + 0x103f, 0x705f, 0x0000, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6c02, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x00ee, + 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, + 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001, + 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, + 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, + 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000, 0x715c, 0x81ff, 0x090c, + 0x0dc3, 0x2148, 0x080c, 0x103f, 0x9006, 0x705e, 0x918d, 0x0001, + 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, + 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x0070, 0x7063, 0x0001, + 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e, 0xa492, 0xa596, 0xa69a, + 0xa79e, 0x080c, 0x10f7, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa890, + 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, + 0x0118, 0x009e, 0x0804, 0x349c, 0xa888, 0xa98c, 0x080c, 0x2708, + 0x1518, 0x080c, 0x6497, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae80, + 0x080c, 0x4b11, 0x01f0, 0x080c, 0x4b11, 0x01d8, 0x009e, 0xa86b, + 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823, 0x0000, 0xa804, 0x2048, + 0x080c, 0xc375, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, + 0x0003, 0x701f, 0x5142, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, + 0x3499, 0x0cd0, 0x7124, 0x080c, 0x31fe, 0xa820, 0x9086, 0x8001, + 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0x2900, 0x7022, 0xa804, + 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, + 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0xaa70, 0xab74, + 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xae68, + 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, + 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4b59, + 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, + 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776, 0xa07f, 0x002a, 0xa292, + 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f, + 0x519e, 0x0005, 0x000e, 0x007e, 0x0804, 0x349c, 0x7020, 0x2048, + 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, + 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, + 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0x2100, 0x2238, 0x2061, + 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x2009, 0x002a, + 0x0804, 0x4b59, 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195a, + 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, + 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3, + 0x0904, 0x3499, 0x0126, 0x2091, 0x8000, 0x080c, 0x669f, 0x012e, + 0x0904, 0x3499, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1904, 0x3467, + 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195a, 0x918c, 0x8000, 0xc18d, + 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c, + 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c, + 0x669f, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, + 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, + 0xa89b, 0x4000, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1128, 0x080c, + 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, + 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x441d, + 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3499, 0x080c, 0x686d, 0x0130, 0x908e, 0x0004, + 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, + 0xc08c, 0xb802, 0x0028, 0x080c, 0x5664, 0xd0b4, 0x0904, 0x4457, + 0x7884, 0x908e, 0x007e, 0x0904, 0x4457, 0x908e, 0x007f, 0x0904, + 0x4457, 0x908e, 0x0080, 0x0904, 0x4457, 0xb800, 0xd08c, 0x1904, + 0x4457, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc394, + 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, + 0x526a, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804, 0x4457, + 0x080c, 0x3257, 0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, + 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, + 0x2009, 0x0007, 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, + 0x0008, 0x0804, 0x3499, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, + 0x4457, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, + 0xc3f3, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, + 0x701f, 0x52a3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, + 0x0004, 0x0804, 0x55b4, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804, + 0x523c, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c, 0x5678, + 0x2009, 0x0007, 0x1904, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, + 0x0008, 0x0804, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, + 0x686d, 0x2009, 0x0009, 0x1904, 0x3499, 0x080c, 0x4b11, 0x2009, + 0x0002, 0x0904, 0x3499, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd, + 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00, 0x918c, 0x00ff, 0x9006, + 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, + 0x0100, 0x1904, 0x349c, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, + 0xc641, 0x2009, 0x0003, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f, + 0x52fa, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, + 0x3499, 0x0804, 0x3467, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, + 0x01a0, 0x080c, 0x5678, 0x1188, 0x2009, 0x0014, 0x0804, 0x3499, + 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c, + 0x5678, 0x2009, 0x0007, 0x1904, 0x3499, 0xd2f4, 0x0138, 0x9284, + 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0804, 0x3467, 0xd2fc, 0x0160, + 0x080c, 0x4b40, 0x0904, 0x349c, 0x7984, 0x9284, 0x9000, 0xc0d5, + 0x080c, 0x560f, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, + 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, + 0x53e9, 0x080c, 0x4b11, 0x2009, 0x0002, 0x0904, 0x53e9, 0xa85c, + 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0x080c, 0x4b56, 0x701f, 0x5356, 0x0005, 0xa870, 0x9086, + 0x0500, 0x1138, 0xa874, 0x9005, 0x1120, 0xa878, 0x9084, 0xff00, + 0x0110, 0x1904, 0x349c, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, + 0x080c, 0x4b40, 0x1110, 0x0804, 0x349c, 0x2009, 0x0043, 0x080c, + 0xc6ad, 0x2009, 0x0003, 0x0904, 0x53e9, 0x7007, 0x0003, 0x701f, + 0x537a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, + 0x53e9, 0x7984, 0x7aa8, 0x9284, 0x1000, 0xc0d5, 0x080c, 0x560f, + 0x0804, 0x3467, 0x00c6, 0xaab4, 0x9284, 0xc000, 0x0148, 0xd2ec, + 0x0170, 0x080c, 0x5678, 0x1158, 0x2009, 0x0014, 0x0804, 0x53d8, + 0x2061, 0x1800, 0x080c, 0x5678, 0x2009, 0x0007, 0x15c8, 0xd2f4, + 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0058, 0xd2fc, + 0x0180, 0x080c, 0x4b3e, 0x0590, 0xa99c, 0x9284, 0x9000, 0xc0d5, + 0x080c, 0x560f, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, + 0x0438, 0x080c, 0x4b3e, 0x0510, 0x080c, 0x686d, 0x2009, 0x0009, + 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8, 0xa8cc, 0x9005, 0x11b0, + 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c, 0x4b3e, 0x1108, 0x0070, + 0x2009, 0x004b, 0x080c, 0xc6ad, 0x2009, 0x0003, 0x0108, 0x0078, + 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, + 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, + 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x3499, 0x0016, 0x7984, 0x9284, + 0x1000, 0xc0fd, 0x080c, 0x560f, 0x001e, 0x1904, 0x3499, 0x0804, + 0x3467, 0x00f6, 0x2d78, 0xaab4, 0x0021, 0x00fe, 0x0005, 0xaab4, + 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c, 0x9284, 0x1400, 0xc0fd, + 0x080c, 0x560f, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, + 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, + 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d, + 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, + 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc3ae, 0x1120, + 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x5449, + 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, + 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa810, 0x8007, 0x9084, 0x00ff, + 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, + 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, + 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59, + 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, 0x7984, + 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, + 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19aa, 0x0010, + 0x0804, 0x349c, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, + 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56, 0x701f, 0x5499, + 0x0005, 0x2001, 0x182d, 0x2003, 0x0001, 0xa85c, 0x9080, 0x001a, + 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, + 0x0001, 0x4003, 0x0804, 0x3467, 0x080c, 0x4b11, 0x1120, 0x2009, + 0x0002, 0x0804, 0x3499, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, + 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990, 0x0040, 0x92c6, 0x0001, + 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804, 0x349c, 0xa85c, 0x9080, + 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, + 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, + 0x9080, 0x001a, 0xaf60, 0x0804, 0x4b59, 0x7884, 0x908a, 0x1000, + 0x1a04, 0x349c, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, + 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a, 0x00ce, 0x012e, 0x0804, + 0x3467, 0x00c6, 0x080c, 0x7351, 0x1160, 0x080c, 0x764c, 0x080c, + 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x080c, + 0x0dc3, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5e72, + 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, + 0x3499, 0x00c6, 0x7884, 0x9005, 0x0190, 0x7888, 0x2061, 0x1978, + 0x2c0c, 0x2062, 0x080c, 0x2ade, 0x01a8, 0x080c, 0x2ae6, 0x0190, + 0x080c, 0x2aee, 0x0178, 0x2162, 0x00ce, 0x0804, 0x349c, 0x2061, + 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, + 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1568, 0x2061, 0x0100, + 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c, 0x9ca7, + 0x2011, 0x0002, 0x080c, 0x9cb1, 0x002e, 0x080c, 0x9bbf, 0x0036, + 0x901e, 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9, + 0x080c, 0xe100, 0x9085, 0x0001, 0x080c, 0x7395, 0x9006, 0x080c, + 0x2bce, 0x2001, 0x1800, 0x2003, 0x0004, 0x2001, 0x1984, 0x2003, + 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3467, 0x81ff, 0x0120, + 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, + 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, + 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d, + 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, + 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, + 0xa86e, 0x080c, 0xc3b1, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, + 0x7007, 0x0003, 0x701f, 0x559d, 0x0005, 0xa830, 0x9086, 0x0100, + 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa834, + 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, + 0x7d98, 0xaf60, 0x0804, 0x4b59, 0xa89c, 0x9086, 0x000d, 0x1904, + 0x3499, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55c1, + 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, + 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa99c, 0x7986, + 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c, 0x4b49, 0x2091, 0x4080, + 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x7007, 0x0001, + 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, + 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984, 0x615a, 0x6156, 0x605f, + 0x0000, 0x6053, 0x0009, 0x7898, 0x6072, 0x789c, 0x606e, 0x7888, + 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7, 0x2044, 0x2001, 0x19ee, + 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001, 0xa083, 0x0002, 0xa06f, + 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3467, 0x0126, + 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0168, 0x0006, + 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029, 0x080c, 0x321c, 0x003e, + 0x080c, 0xc21a, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, + 0x2004, 0x905d, 0x0160, 0x080c, 0x5fcd, 0x080c, 0xa307, 0x0110, + 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, + 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, + 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0188, + 0x9186, 0x007e, 0x0170, 0x9186, 0x007f, 0x0158, 0x9186, 0x0080, + 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026, 0x2200, 0x080c, 0x560f, + 0x002e, 0x001e, 0x8108, 0x1f04, 0x5642, 0x015e, 0x012e, 0x0005, + 0x080c, 0xc8ce, 0x0db0, 0x0c80, 0x2001, 0x185f, 0x2004, 0x0005, + 0x2001, 0x187e, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, + 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, + 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x79a4, 0x81ff, + 0x0904, 0x349c, 0x9182, 0x0081, 0x1a04, 0x349c, 0x810c, 0x0016, + 0x080c, 0x4b11, 0x0170, 0x080c, 0x0f15, 0x2100, 0x2238, 0x7d84, + 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4b56, 0x701f, 0x569e, + 0x0005, 0x001e, 0x2009, 0x0002, 0x0804, 0x3499, 0x2079, 0x0000, + 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b9, + 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f, 0x080c, 0x4b59, 0x701f, + 0x56b2, 0x0005, 0x2061, 0x18b9, 0x2c44, 0x0016, 0x0026, 0xa274, + 0xa178, 0x080c, 0x0f1d, 0x002e, 0x001e, 0x080c, 0x0fca, 0x9006, + 0xa802, 0xa806, 0x0804, 0x3467, 0x0126, 0x0156, 0x0136, 0x0146, + 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, + 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, + 0x0118, 0x080c, 0x5872, 0x0068, 0xd08c, 0x0118, 0x080c, 0x577b, + 0x0040, 0xd094, 0x0118, 0x080c, 0x574b, 0x0018, 0xd09c, 0x0108, + 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, + 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, + 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030, 0xd09c, 0x1120, 0x6004, + 0x9085, 0x0002, 0x6006, 0x7094, 0x9005, 0x0120, 0x7097, 0x0000, + 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, + 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, + 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, + 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, + 0x00f7, 0x080c, 0x5f2f, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, + 0x0140, 0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, + 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, + 0x7093, 0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e15, + 0x080c, 0x859e, 0x0005, 0x2001, 0x1880, 0x2004, 0xd08c, 0x0110, + 0x705b, 0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5e15, 0x080c, + 0x84c2, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, + 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x5761, 0x6242, 0x7097, + 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, + 0x0048, 0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, + 0x5fb8, 0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0dc3, + 0x000b, 0x0005, 0x5785, 0x57d6, 0x5871, 0x00f6, 0x0016, 0x6900, + 0x918c, 0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, + 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, + 0x1f04, 0x5794, 0x080c, 0x0dc3, 0x68a0, 0x68a2, 0x689c, 0x689e, + 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, + 0x0020, 0x080c, 0x5f94, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, + 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, + 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa190, 0x20e1, 0x0001, + 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, + 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5e46, 0x00fe, + 0x9006, 0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, + 0x708f, 0x0000, 0x9025, 0x0904, 0x584e, 0x6020, 0xd0b4, 0x1904, + 0x584c, 0x719c, 0x81ff, 0x0904, 0x583a, 0x9486, 0x000c, 0x1904, + 0x5847, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5f8d, 0x2011, + 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, + 0x8318, 0x1f04, 0x57f3, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, + 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, + 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, + 0x859e, 0x080c, 0x5f94, 0x04c0, 0x080c, 0x5f8d, 0x2079, 0x0260, + 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, + 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5f8d, + 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, + 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x582e, 0x0078, + 0x709f, 0x0000, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260, + 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, + 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, + 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xa190, 0x20e1, + 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, + 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19ce, 0x2013, 0x0000, + 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8, + 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0dc3, 0x000b, + 0x0005, 0x58a3, 0x58b6, 0x58df, 0x58ff, 0x5925, 0x5954, 0x597a, + 0x59b2, 0x59d8, 0x5a06, 0x5a41, 0x5a79, 0x5a97, 0x5ac2, 0x5ae4, + 0x5aff, 0x5b09, 0x5b3d, 0x5b63, 0x5b92, 0x5bb8, 0x5bf0, 0x5c34, + 0x5c71, 0x5c92, 0x5ceb, 0x5d0d, 0x5d3b, 0x5d3b, 0x00c6, 0x2061, + 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, + 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, + 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, + 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x859e, 0x0005, 0x00f6, 0x708c, + 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, + 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, + 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, + 0x70c3, 0x0001, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0010, + 0x080c, 0x5b09, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, + 0x7097, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e1c, 0x080c, 0x84c2, + 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, + 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, + 0x58f4, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6, + 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, + 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, + 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, + 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, + 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, + 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, + 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158, + 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9, + 0x0168, 0x080c, 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, + 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, + 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, + 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, + 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, + 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, + 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5f69, + 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5f11, 0x2079, + 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c, + 0x5f70, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, + 0x0180, 0x9180, 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, + 0x0008, 0x080c, 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c, + 0x2771, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, + 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, + 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, + 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, - 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, - 0x00f6, 0x7097, 0x0005, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, - 0x1103, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170, - 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, - 0x0008, 0x080c, 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008, - 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, - 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, - 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, - 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, - 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, - 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029, - 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007, - 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, - 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0, - 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c, - 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c, - 0x4e9d, 0x0110, 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000, - 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, - 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, - 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029, 0x0010, 0x080c, - 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009, 0x080c, 0x5e54, - 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5eb3, - 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5c7f, 0x1188, 0x9085, - 0x0001, 0x080c, 0x2708, 0x20a9, 0x0008, 0x080c, 0x5ed0, 0x20e1, - 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, - 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0010, 0x080c, 0x57d9, 0x00fe, - 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011, 0x5d5f, 0x080c, - 0x835e, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ed0, 0x2079, 0x0260, - 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, - 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, - 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005, - 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, - 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c, 0x5a27, 0x0010, - 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011, - 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, - 0x4304, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, - 0x0000, 0x080c, 0x5eb3, 0x0118, 0x2013, 0x0000, 0x0020, 0x705c, - 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, - 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, - 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x59a9, 0x60c3, 0x0084, - 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0, - 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1178, 0x080c, - 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, - 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010, 0x080c, 0x5eac, - 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c, 0x5e54, 0x2079, - 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x20a9, - 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, - 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, - 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x59ed, 0x60c3, - 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, - 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1198, - 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, - 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26, 0x7097, - 0x000e, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x918d, - 0x0001, 0x080c, 0x5efb, 0x7097, 0x000f, 0x708f, 0x0000, 0x2061, - 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, - 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c, - 0x8352, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011, 0x5d5f, 0x080c, - 0x835e, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011, 0x080c, 0x9d0b, - 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, - 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, - 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5eb3, 0x11a0, 0x7178, - 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c, - 0x269f, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, - 0x0008, 0x080c, 0x5d0c, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0005, - 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, - 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, - 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, - 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012, - 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, - 0x0013, 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, - 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170, 0x7080, 0x9005, - 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, - 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008, 0x20e1, 0x0000, - 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, - 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, - 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, - 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, - 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, - 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029, 0x0010, 0x708f, - 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015, 0x080c, 0x5e62, - 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ed0, - 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, - 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f, - 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c, 0x4e9d, 0x0110, - 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, + 0x7097, 0x0008, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, + 0x00f6, 0x7097, 0x0009, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, + 0x1105, 0x7837, 0x0100, 0x080c, 0x5f70, 0x1150, 0x7080, 0x9005, + 0x1138, 0x080c, 0x5d3c, 0x1188, 0x9085, 0x0001, 0x080c, 0x2771, + 0x20a9, 0x0008, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, - 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011, - 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ed0, - 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, - 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, - 0x5efb, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, - 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, - 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x5efb, - 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097, - 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c, - 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, - 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, - 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, - 0x7097, 0x0017, 0x080c, 0x5eb3, 0x1150, 0x7080, 0x9005, 0x1138, - 0x080c, 0x5c7f, 0x1188, 0x9085, 0x0001, 0x080c, 0x2708, 0x20a9, - 0x0008, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, - 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89, - 0x0010, 0x080c, 0x57d9, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8, - 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1190, 0x080c, - 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, - 0x9005, 0x1138, 0x9006, 0x080c, 0x5efb, 0x7097, 0x0018, 0x0029, - 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019, - 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, - 0x080c, 0x5ed0, 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, - 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, - 0x6816, 0x2009, 0x0260, 0x1f04, 0x5be8, 0x2039, 0x1c0e, 0x080c, - 0x5eb3, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, - 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x705c, 0x2310, - 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, - 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, - 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, - 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5c1b, - 0x60c3, 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, - 0x9005, 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, - 0x1198, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, - 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26, - 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, - 0x9085, 0x0001, 0x080c, 0x5efb, 0x7097, 0x001b, 0x080c, 0x9d0b, - 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2009, 0x0240, 0x748c, 0x9480, - 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, - 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, - 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, - 0x5c67, 0x60c3, 0x0084, 0x080c, 0x5d89, 0x0005, 0x0005, 0x0086, - 0x0096, 0x2029, 0x185f, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, - 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, - 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, - 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, - 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5c99, 0x0804, 0x5d08, - 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, - 0x91a6, 0x3fff, 0x0904, 0x5d08, 0x918d, 0xc000, 0x20a9, 0x0010, - 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, - 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, - 0x0008, 0x8318, 0x1f04, 0x5cbf, 0x04d8, 0x23a8, 0x2021, 0x0001, - 0x8426, 0x8425, 0x1f04, 0x5cd1, 0x2328, 0x8529, 0x92be, 0x0007, - 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, - 0x95a8, 0x0010, 0x1f04, 0x5ce0, 0x755a, 0x95c8, 0x31cc, 0x292d, - 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, - 0x26e8, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, - 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, - 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, - 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, - 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, - 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, - 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, - 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, - 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, - 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, - 0x9405, 0x203a, 0x715a, 0x91a0, 0x31cc, 0x242d, 0x95ac, 0x00ff, - 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x26e8, 0x001e, - 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084, 0x0000, 0x0005, - 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6, - 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5e15, 0x080c, - 0x9623, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x0126, - 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000, 0x7840, 0x0026, - 0x0016, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x001e, 0x9094, 0x0010, - 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, - 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x29fa, 0x0228, 0x2011, - 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000, - 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, - 0x961a, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d, 0x2000, 0x0018, - 0x7188, 0x918d, 0x1000, 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0, - 0x2011, 0x5d5f, 0x080c, 0x8432, 0x0005, 0x0016, 0x0026, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9e89, 0x2009, 0x00f7, 0x080c, - 0x5e72, 0x2061, 0x19d7, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e, - 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, - 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, - 0x2011, 0x5de1, 0x080c, 0x8352, 0x012e, 0x00ce, 0x002e, 0x001e, - 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, - 0x0100, 0x080c, 0x9623, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, - 0x0110, 0x080c, 0x2b75, 0x080c, 0x72ed, 0x0188, 0x080c, 0x7308, - 0x1170, 0x080c, 0x75e6, 0x0016, 0x080c, 0x27b7, 0x2001, 0x194a, - 0x2102, 0x001e, 0x080c, 0x75e1, 0x080c, 0x7212, 0x0050, 0x2009, - 0x0001, 0x080c, 0x2a93, 0x2001, 0x0001, 0x080c, 0x264c, 0x080c, - 0x5db5, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, - 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1975, - 0x201c, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, - 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x5ed0, 0x20e9, 0x0000, - 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5eca, 0x2099, - 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5ecd, - 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, - 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, - 0x5e4a, 0x002e, 0x001e, 0x0005, 0x080c, 0x9d0b, 0x20e1, 0x0001, - 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, - 0x4003, 0x0005, 0x080c, 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000, - 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, - 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, - 0x1833, 0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, - 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, - 0x0005, 0x0016, 0x0046, 0x080c, 0x6742, 0x0158, 0x9006, 0x2020, - 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c, 0xc195, - 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x3037, 0x080c, 0xbef8, - 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4c74, - 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5db5, 0x7097, 0x0000, - 0x708f, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, - 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, - 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, - 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, - 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, - 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, - 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, - 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, - 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, - 0x2003, 0x0001, 0x0005, 0x2001, 0x1983, 0x0118, 0x2003, 0x0001, - 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, - 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x5f0a, 0x015e, 0x0005, - 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x185e, 0x9006, - 0xb802, 0xb8ba, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, - 0x31cc, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8ae, - 0x080c, 0x9e82, 0x1120, 0x9192, 0x007e, 0x1208, 0xbbae, 0x20a9, - 0x0004, 0xb8b0, 0x20e8, 0xb9b4, 0x9198, 0x0006, 0x9006, 0x23a0, - 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, - 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, - 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, - 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb9a2, - 0x0096, 0xb8a4, 0x904d, 0x190c, 0x0fb3, 0xb8a7, 0x0000, 0x009e, - 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, - 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, - 0x0126, 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x5fe6, - 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, 0x5fcb, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e, - 0x0006, 0x1560, 0xb8a4, 0x900d, 0x1904, 0x5fec, 0xa888, 0x908a, - 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, - 0xa966, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, - 0x080c, 0x86ed, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, - 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, - 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, - 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, - 0xb900, 0xd1fc, 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, - 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, - 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, - 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, - 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, - 0x900e, 0x9005, 0x012e, 0x0005, 0xae7c, 0x96b4, 0x3fff, 0x080c, - 0x65a2, 0x0904, 0x5fae, 0x0804, 0x5f8e, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6073, 0x9188, - 0x1000, 0x2104, 0x905d, 0x0904, 0x604b, 0xb8a0, 0x9086, 0x007f, - 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x674e, 0x0160, 0xa998, + 0x5e46, 0x0010, 0x080c, 0x5896, 0x00fe, 0x0005, 0x00f6, 0x708c, + 0x9005, 0x05a8, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, + 0x1560, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, + 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, + 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, + 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, + 0x7097, 0x000e, 0x080c, 0x5ae4, 0x0010, 0x080c, 0x5f69, 0x00fe, + 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, + 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f11, + 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f70, + 0x0118, 0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, + 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, + 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, + 0x0240, 0x1f04, 0x5a66, 0x60c3, 0x0084, 0x080c, 0x5e46, 0x00fe, + 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5e1c, 0x080c, + 0x84c2, 0x9086, 0x0084, 0x1178, 0x080c, 0x5f8d, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, + 0x000c, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6, + 0x7097, 0x000d, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1107, + 0x7837, 0x0000, 0x080c, 0x5f8d, 0x20a9, 0x0040, 0x2011, 0x026e, + 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, + 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, + 0x2011, 0x0260, 0x1f04, 0x5aaa, 0x60c3, 0x0084, 0x080c, 0x5e46, + 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5e1c, + 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, + 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x000e, 0x0029, 0x0010, + 0x080c, 0x5f69, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5fb8, + 0x7097, 0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, + 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, + 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x84b6, 0x0005, 0x708c, + 0x9005, 0x0130, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0000, + 0x0005, 0x7097, 0x0011, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x20e1, + 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, + 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, + 0x4003, 0x080c, 0x5f70, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, + 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c, 0x2708, 0x9186, 0x007e, + 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5dc9, + 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0005, 0x00f6, 0x708c, 0x9005, + 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, + 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, + 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, + 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, + 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5f1f, + 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5f8d, + 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, + 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9, 0x0168, 0x080c, + 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, + 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, + 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, + 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, + 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, + 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, + 0x7097, 0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, + 0x00f6, 0x7097, 0x0015, 0x080c, 0x5f1f, 0x2079, 0x0240, 0x7833, + 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x11b8, + 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, + 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, + 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c, 0x2771, 0x20a9, + 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, + 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005, + 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011, 0x5e1c, 0x080c, 0x84c2, + 0x9086, 0x0014, 0x15a8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, + 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, + 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7a38, 0xd2fc, + 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, + 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, + 0x0001, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7093, 0x0000, 0x7a38, + 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, + 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa190, 0x080c, 0x5f8d, + 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, + 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, + 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, + 0x5f70, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5d3c, 0x1188, + 0x9085, 0x0001, 0x080c, 0x2771, 0x20a9, 0x0008, 0x080c, 0x5f8d, + 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, + 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0010, 0x080c, 0x5896, + 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5e1c, 0x080c, + 0x84c2, 0x9086, 0x0084, 0x1190, 0x080c, 0x5f8d, 0x2079, 0x0260, + 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, + 0x080c, 0x5fb8, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, + 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5f1f, 0x2079, + 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x2009, + 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, + 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, + 0x1f04, 0x5ca5, 0x2039, 0x1c0e, 0x080c, 0x5f70, 0x11e8, 0x2728, + 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, + 0x8007, 0x9205, 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e, + 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, + 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, + 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, + 0x6812, 0x2009, 0x0240, 0x1f04, 0x5cd8, 0x60c3, 0x0084, 0x080c, + 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, + 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d, + 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, + 0x1140, 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x001a, 0x0029, + 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, + 0x5fb8, 0x7097, 0x001b, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x2011, + 0x0260, 0x2009, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, + 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, + 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, + 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d24, 0x60c3, 0x0084, + 0x080c, 0x5e46, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x185f, + 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, + 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, + 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, + 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, + 0x8211, 0x1f04, 0x5d56, 0x0804, 0x5dc5, 0x82ff, 0x1160, 0xd5d4, + 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, + 0x5dc5, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, + 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, + 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, + 0x5d7c, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, + 0x5d8e, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, + 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, + 0x5d9d, 0x755a, 0x95c8, 0x3268, 0x292d, 0x95ac, 0x00ff, 0x757e, + 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7, + 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001, + 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, + 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, + 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, + 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, + 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, + 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, + 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, + 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, + 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, + 0x91a0, 0x3268, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, + 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7, 0x0000, 0x65ea, + 0x7083, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, + 0x2071, 0x0140, 0x080c, 0x5ed2, 0x080c, 0x98d1, 0x7004, 0x9084, + 0x4000, 0x0110, 0x080c, 0x2bde, 0x0126, 0x2091, 0x8000, 0x2071, + 0x1825, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, + 0x080c, 0x5f2f, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, + 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, + 0x8000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, + 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, + 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8, 0x6144, 0xd184, + 0x0120, 0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, + 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, + 0x859e, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, + 0x080c, 0xa30e, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x2061, 0x19d7, + 0x900e, 0x611a, 0x611e, 0x617a, 0x617e, 0x2061, 0x1800, 0x6003, + 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, + 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c, + 0x84b6, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, + 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x98d1, + 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde, + 0x080c, 0x7359, 0x0188, 0x080c, 0x7374, 0x1170, 0x080c, 0x7656, + 0x0016, 0x080c, 0x2820, 0x2001, 0x1949, 0x2102, 0x001e, 0x080c, + 0x7651, 0x080c, 0x727e, 0x0050, 0x2009, 0x0001, 0x080c, 0x2afc, + 0x2001, 0x0001, 0x080c, 0x26b1, 0x080c, 0x5e72, 0x012e, 0x000e, + 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, + 0x0036, 0x2011, 0x8017, 0x2001, 0x1975, 0x201c, 0x080c, 0x4b6d, + 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, + 0x1c80, 0x080c, 0x5f8d, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, + 0x20a9, 0x0020, 0x080c, 0x5f87, 0x2099, 0x0260, 0x20a1, 0x1c92, + 0x0051, 0x20a9, 0x000e, 0x080c, 0x5f8a, 0x2099, 0x0260, 0x20a1, + 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, + 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f07, 0x002e, 0x001e, + 0x0005, 0x080c, 0xa190, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, + 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, + 0xa190, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, + 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, + 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, + 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, + 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, + 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, + 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, + 0x900e, 0x080c, 0x30cd, 0x080c, 0xc8ce, 0x0140, 0x0036, 0x2019, + 0xffff, 0x2021, 0x0007, 0x080c, 0x4d24, 0x003e, 0x004e, 0x001e, + 0x0005, 0x080c, 0x5e72, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005, + 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, + 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, + 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, + 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, + 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, + 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, + 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, + 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, + 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, + 0x2001, 0x1983, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, + 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, + 0x8108, 0x1f04, 0x5fc7, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, + 0x0136, 0x0146, 0x2069, 0x185e, 0x9006, 0xb802, 0xb8be, 0xb807, + 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3268, 0x231d, 0x939c, + 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0xa307, 0x1120, + 0x9192, 0x007e, 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, + 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, + 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, + 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, + 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, + 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, + 0x904d, 0x190c, 0x0fbf, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, + 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, + 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, + 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x60a4, 0x2001, 0x180c, + 0x2004, 0x9084, 0x0003, 0x1904, 0x60aa, 0x9188, 0x1000, 0x2104, + 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1560, + 0xb8a4, 0x900d, 0x1904, 0x60bc, 0xa888, 0x908a, 0x199a, 0x0210, + 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0xa966, 0xb850, + 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, 0x080c, 0x88be, + 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803, + 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8, + 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, 0x080c, + 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, + 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028, + 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, + 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029, + 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038, + 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005, + 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188, + 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x686d, 0x1990, 0xb800, + 0xd0bc, 0x0978, 0x0804, 0x6048, 0xae7c, 0x96b4, 0x3fff, 0x080c, + 0x66aa, 0x0904, 0x606c, 0x0804, 0x604c, 0x00b6, 0x00e6, 0x0126, + 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6143, 0x9188, + 0x1000, 0x2104, 0x905d, 0x0904, 0x611b, 0xb8a0, 0x9086, 0x007f, + 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x6875, 0x0160, 0xa998, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, - 0x080c, 0x6746, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005, - 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xb943, 0x002e, 0x1120, - 0x2001, 0x0008, 0x0804, 0x6075, 0x6020, 0x9086, 0x000a, 0x0120, - 0x2001, 0x0008, 0x0804, 0x6075, 0x601a, 0x6003, 0x0008, 0x2900, - 0x6016, 0x0058, 0x080c, 0x9ec2, 0x05e8, 0x2b00, 0x6012, 0x2900, + 0x080c, 0x686d, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005, + 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x002e, 0x1120, + 0x2001, 0x0008, 0x0804, 0x6145, 0x6020, 0x9086, 0x000a, 0x0120, + 0x2001, 0x0008, 0x0804, 0x6145, 0x601a, 0x6003, 0x0008, 0x2900, + 0x6016, 0x0058, 0x080c, 0xa347, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, - 0x9f88, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, - 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, + 0xa419, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, + 0x1290, 0x080c, 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, @@ -2875,163 +2901,170 @@ static const uint16_t isp_2300_risc_code[] = { 0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, - 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x610a, 0x60c5, 0x60dc, - 0x610a, 0x610a, 0x610a, 0x610a, 0x610a, 0x2100, 0x9082, 0x007e, - 0x1278, 0x080c, 0x63c1, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, - 0x6112, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, - 0x080c, 0x497d, 0x0150, 0x04b0, 0x080c, 0x6411, 0x1598, 0xb810, - 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0x9ec2, 0x0530, - 0x2b00, 0x6012, 0x080c, 0xbc97, 0x2900, 0x6016, 0x600b, 0xffff, - 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3066, - 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2001, - 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9f88, + 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x61da, 0x6195, 0x61ac, + 0x61da, 0x61da, 0x61da, 0x61da, 0x61da, 0x2100, 0x9082, 0x007e, + 0x1278, 0x080c, 0x6497, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, + 0x61e2, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, + 0x080c, 0x4a2b, 0x0150, 0x04b0, 0x080c, 0x64fc, 0x1598, 0xb810, + 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xa347, 0x0530, + 0x2b00, 0x6012, 0x080c, 0xc640, 0x2900, 0x6016, 0x600b, 0xffff, + 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3102, + 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x2001, + 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xa419, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, - 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x62e7, 0x90c6, 0x0056, - 0x0904, 0x62eb, 0x90c6, 0x0066, 0x0904, 0x62ef, 0x90c6, 0x0067, - 0x0904, 0x62f3, 0x90c6, 0x0068, 0x0904, 0x62f7, 0x90c6, 0x006b, - 0x0904, 0x62fb, 0x90c6, 0x0071, 0x0904, 0x62ff, 0x90c6, 0x0074, - 0x0904, 0x6303, 0x90c6, 0x007c, 0x0904, 0x6307, 0x90c6, 0x007e, - 0x0904, 0x630b, 0x90c6, 0x0037, 0x0904, 0x630f, 0x9016, 0x2079, - 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x62e2, 0x9182, 0x0800, - 0x1a04, 0x62e2, 0x080c, 0x6411, 0x11b8, 0xb804, 0x9084, 0x00ff, - 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x6254, - 0x90c6, 0x006f, 0x0148, 0x080c, 0x9e82, 0x1904, 0x62cb, 0xb8a0, - 0x9084, 0xff80, 0x1904, 0x62cb, 0xa898, 0x90c6, 0x006f, 0x0158, - 0x90c6, 0x005e, 0x0904, 0x622b, 0x90c6, 0x0064, 0x0904, 0x6254, - 0x2008, 0x0804, 0x61f4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0x9e82, - 0x1120, 0x9182, 0x007f, 0x0a04, 0x61f4, 0x9186, 0x00ff, 0x0904, - 0x61f4, 0x9182, 0x0800, 0x1a04, 0x61f4, 0xaaa4, 0xaba0, 0x7878, + 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x63bd, 0x90c6, 0x0056, + 0x0904, 0x63c1, 0x90c6, 0x0066, 0x0904, 0x63c5, 0x90c6, 0x0067, + 0x0904, 0x63c9, 0x90c6, 0x0068, 0x0904, 0x63cd, 0x90c6, 0x006b, + 0x0904, 0x63d1, 0x90c6, 0x0071, 0x0904, 0x63d5, 0x90c6, 0x0074, + 0x0904, 0x63d9, 0x90c6, 0x007c, 0x0904, 0x63dd, 0x90c6, 0x007e, + 0x0904, 0x63e1, 0x90c6, 0x0037, 0x0904, 0x63e5, 0x9016, 0x2079, + 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x63b8, 0x9182, 0x0800, + 0x1a04, 0x63b8, 0x080c, 0x64fc, 0x11b8, 0xb804, 0x9084, 0x00ff, + 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x632a, + 0x90c6, 0x006f, 0x0148, 0x080c, 0xa307, 0x1904, 0x63a1, 0xb8a0, + 0x9084, 0xff80, 0x1904, 0x63a1, 0xa898, 0x90c6, 0x006f, 0x0158, + 0x90c6, 0x005e, 0x0904, 0x6301, 0x90c6, 0x0064, 0x0904, 0x632a, + 0x2008, 0x0804, 0x62c4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0xa307, + 0x1120, 0x9182, 0x007f, 0x0a04, 0x62c4, 0x9186, 0x00ff, 0x0904, + 0x62c4, 0x9182, 0x0800, 0x1a04, 0x62c4, 0xaaa4, 0xaba0, 0x7878, 0x9306, 0x11a8, 0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, - 0x009e, 0x0804, 0x61f4, 0x080c, 0x9e82, 0x1140, 0x99cc, 0xff00, - 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x61f4, 0x009e, 0x080c, - 0x497d, 0x0904, 0x61fd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528, - 0x0006, 0x080c, 0x6643, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, - 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0036, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x000a, - 0x2098, 0x080c, 0x0f7e, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, + 0x009e, 0x0804, 0x62c4, 0x080c, 0xa307, 0x1140, 0x99cc, 0xff00, + 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x62c4, 0x009e, 0x080c, + 0x4a2b, 0x0904, 0x62cd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528, + 0x0006, 0x080c, 0x674b, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, + 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, + 0x9080, 0x0036, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, + 0x2098, 0x080c, 0x0f8a, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa89a, 0xa99e, - 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0440, 0x080c, 0x9ec2, 0x1130, + 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0xa347, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, - 0x080c, 0xbc97, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c, - 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3066, - 0x012e, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, - 0x2009, 0x0002, 0x080c, 0x9f88, 0x9006, 0x9005, 0x012e, 0x00ee, - 0x00fe, 0x00be, 0x0005, 0x080c, 0x55bb, 0x0118, 0x2009, 0x0007, - 0x00f8, 0xa99c, 0xaeb4, 0x080c, 0x6411, 0x1904, 0x61ef, 0x9186, - 0x007f, 0x0130, 0x080c, 0x6746, 0x0118, 0x2009, 0x0009, 0x0080, - 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, - 0x2900, 0x009e, 0xa806, 0x080c, 0xbb36, 0x19b0, 0x2009, 0x0003, - 0x2001, 0x4005, 0x0804, 0x61f6, 0xa99c, 0xaeb4, 0x080c, 0x6411, - 0x1904, 0x61ef, 0x0096, 0x080c, 0x1001, 0x1128, 0x009e, 0x2009, - 0x0002, 0x0804, 0x62a8, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, - 0x20a9, 0x002b, 0xb8b0, 0x20e0, 0xb8b4, 0x2098, 0xa860, 0x20e8, - 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, - 0x0006, 0x20a0, 0xbbb4, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7e, - 0x009e, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684, - 0x1168, 0x080c, 0x55a7, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0, - 0xb800, 0xd08c, 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x6746, - 0x0118, 0xa89f, 0x0009, 0x0080, 0x080c, 0x55bb, 0x0118, 0xa89f, - 0x0007, 0x0050, 0x080c, 0xbb19, 0x1904, 0x6224, 0x2009, 0x0003, - 0x2001, 0x4005, 0x0804, 0x61f6, 0xa87f, 0x0030, 0xa89b, 0x4005, - 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, - 0x2031, 0x0000, 0x2041, 0x1247, 0x080c, 0xa45b, 0x1904, 0x6224, - 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6225, - 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, - 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, - 0x0804, 0x6225, 0x2001, 0x0029, 0x900e, 0x0804, 0x6225, 0x080c, - 0x35fd, 0x0804, 0x6226, 0x080c, 0x52cd, 0x0804, 0x6226, 0x080c, - 0x4430, 0x0804, 0x6226, 0x080c, 0x44a9, 0x0804, 0x6226, 0x080c, - 0x4505, 0x0804, 0x6226, 0x080c, 0x4645, 0x0804, 0x6226, 0x080c, - 0x4a37, 0x0804, 0x6226, 0x080c, 0x4ced, 0x0804, 0x6226, 0x080c, - 0x4f33, 0x0804, 0x6226, 0x080c, 0x512d, 0x0804, 0x6226, 0x080c, - 0x3831, 0x0804, 0x6226, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268, - 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6746, 0x1148, - 0x00e9, 0x080c, 0x6541, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, - 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, - 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, - 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, - 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, - 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, - 0xb84e, 0xa803, 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800, - 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, - 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, - 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, - 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, - 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, - 0x0158, 0x080c, 0x6742, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, - 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, - 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, - 0x0dc4, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, - 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, - 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x673e, 0x1138, - 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, - 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, - 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, - 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f, - 0x2004, 0x9082, 0x0050, 0x0290, 0x0096, 0x080c, 0x1001, 0x2958, - 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8b6, 0xb860, 0xb8b2, - 0x9006, 0xb8a6, 0x080c, 0x5f10, 0x9006, 0x0010, 0x9085, 0x0001, - 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, - 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00a8, 0x00d6, - 0x9190, 0x1000, 0x2204, 0x905d, 0x0168, 0x2013, 0x0000, 0xb8a4, - 0x904d, 0x190c, 0x0fb3, 0x2b48, 0xb8b4, 0xb85e, 0xb8b0, 0xb862, - 0x080c, 0x1043, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, - 0x0005, 0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, - 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, - 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, - 0xc08c, 0xb802, 0x080c, 0x72e5, 0x1510, 0xb8a0, 0x9086, 0x007e, - 0x0120, 0x080c, 0x9e82, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, - 0x00c6, 0x2061, 0x195f, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, - 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, - 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, - 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, - 0x0276, 0xb8b0, 0x20e8, 0xb8b4, 0x9088, 0x000a, 0x21a0, 0x20a9, - 0x0004, 0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, - 0x0004, 0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, - 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, - 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, - 0x9182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, - 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, - 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, - 0x9182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, - 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, - 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, - 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x00ee, + 0x080c, 0xc640, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c, + 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3102, + 0x012e, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, + 0x2009, 0x0002, 0x080c, 0xa419, 0xa8b4, 0xd094, 0x0118, 0xb8bc, + 0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, + 0x0005, 0x080c, 0x5678, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa99c, + 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf, 0x9186, 0x007f, 0x0130, + 0x080c, 0x686d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, + 0x100d, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, + 0xa806, 0x080c, 0xc3b1, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, + 0x0804, 0x62c6, 0xa99c, 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf, + 0x0096, 0x080c, 0x100d, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, + 0x637e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, + 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, + 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, + 0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f8a, 0x009e, 0xa87f, + 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684, 0x1168, 0x080c, + 0x5664, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0, 0xb800, 0xd08c, + 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x686d, 0x0118, 0xa89f, + 0x0009, 0x0080, 0x080c, 0x5678, 0x0118, 0xa89f, 0x0007, 0x0050, + 0x080c, 0xc394, 0x1904, 0x62fa, 0x2009, 0x0003, 0x2001, 0x4005, + 0x0804, 0x62c6, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa804, 0x8006, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, + 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, + 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1904, 0x62fa, 0x2009, 0x0002, + 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x62fb, 0x2009, 0x180c, + 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, + 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb, + 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb, 0x080c, 0x3699, 0x0804, + 0x62fc, 0x080c, 0x538a, 0x0804, 0x62fc, 0x080c, 0x44d3, 0x0804, + 0x62fc, 0x080c, 0x454c, 0x0804, 0x62fc, 0x080c, 0x45a8, 0x0804, + 0x62fc, 0x080c, 0x46e8, 0x0804, 0x62fc, 0x080c, 0x4ae7, 0x0804, + 0x62fc, 0x080c, 0x4da4, 0x0804, 0x62fc, 0x080c, 0x4ff0, 0x0804, + 0x62fc, 0x080c, 0x51ea, 0x0804, 0x62fc, 0x080c, 0x38cf, 0x0804, + 0x62fc, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268, 0x9188, 0x1000, + 0x2104, 0x905d, 0x0140, 0x080c, 0x686d, 0x1148, 0x00e9, 0x080c, + 0x6649, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, + 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, 0x2009, + 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, + 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0xb850, + 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, 0xa803, + 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803, + 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, + 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, + 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, + 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, + 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, + 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, + 0x6869, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, + 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, + 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dc3, 0x000e, + 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, + 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, + 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6865, 0x1138, 0x9284, 0x00ff, + 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, + 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, + 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, + 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f, 0x2004, 0x9082, + 0x0050, 0x0290, 0x0096, 0x080c, 0x100d, 0x2958, 0x009e, 0x0160, + 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, 0xb8a6, + 0x080c, 0x5fcd, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de, + 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182, + 0x0800, 0x0218, 0x9085, 0x0001, 0x0450, 0x00d6, 0x9190, 0x1000, + 0x2204, 0x905d, 0x0510, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x190c, + 0x0fbf, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c, + 0x0006, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0110, 0x080c, 0x0fbf, + 0x080c, 0xa39d, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8, + 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x104f, 0x00de, 0x9006, 0x002e, + 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218, + 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, + 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, + 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x7351, 0x1510, + 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xa307, 0x11d8, 0x0078, + 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x195e, 0x7048, 0x2062, + 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, + 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, + 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, + 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8, 0x9088, + 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088, + 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817, + 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, + 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, + 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008, + 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, + 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, + 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004, + 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, + 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, + 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, + 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009, 0x187e, + 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, + 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c, + 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x00a6, 0x0126, 0x2091, 0x8000, - 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6509, 0xaa6c, + 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6611, 0xaa6c, 0x9282, 0x001c, 0x0250, 0x2950, 0xa804, 0x904d, 0x1dc0, 0x080c, - 0x1001, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6, + 0x100d, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x001e, 0x2098, 0x2009, 0x001c, 0x20a9, 0x0001, - 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc4, + 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc3, 0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa6e, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1001, 0x0178, - 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x65ca, 0xa86f, 0x0001, + 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x100d, 0x0178, + 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x66d2, 0xa86f, 0x0001, 0xae7a, 0x9085, 0x0001, 0x012e, 0x00ae, 0x009e, 0x0005, 0x9006, 0x0cd0, 0x0126, 0x2091, 0x8000, 0x0096, 0x0036, 0x0046, 0x00a6, - 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x65da, + 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x66e2, 0x1160, 0x2348, 0xa86c, 0x908a, 0x0002, 0x0268, 0x8001, 0xa86e, - 0x0020, 0x080c, 0x1033, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e, + 0x0020, 0x080c, 0x103f, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e, 0x009e, 0x012e, 0x0005, 0xb8a4, 0x9306, 0x1120, 0x2348, 0xa804, - 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x1033, - 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x86ed, 0x012e, 0x0005, + 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x103f, + 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x88be, 0x012e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000, 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff, 0x0120, 0xa87c, 0x9606, 0x0158, 0x0030, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c, - 0x9a08, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, + 0x9cd9, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e, 0x0005, 0x9016, 0x0036, 0x0046, 0x00f9, 0x004e, 0x003e, 0x1110, - 0x2011, 0x0001, 0x0005, 0x080c, 0x6640, 0x1904, 0xba0f, 0x0005, - 0x080c, 0x6640, 0x1904, 0xb9b4, 0x0005, 0x080c, 0x6640, 0x1904, - 0xba0c, 0x0005, 0x080c, 0x6640, 0x1904, 0xb9d3, 0x0005, 0x080c, - 0x6640, 0x1904, 0xba52, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, + 0x2011, 0x0001, 0x0005, 0x080c, 0x6748, 0x1904, 0xc28a, 0x0005, + 0x080c, 0x6748, 0x1904, 0xc22f, 0x0005, 0x080c, 0x6748, 0x1904, + 0xc287, 0x0005, 0x080c, 0x6748, 0x1904, 0xc24e, 0x0005, 0x080c, + 0x6748, 0x1904, 0xc2cd, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001, 0x0005, 0x2918, 0x2320, 0x0136, 0x01c6, 0xa868, 0x9005, 0x11e8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x001e, 0x2098, 0x20a9, 0x0001, 0x2009, 0x001c, @@ -3046,93 +3079,89 @@ static const uint16_t isp_2300_risc_code[] = { 0x0110, 0x2348, 0x0c30, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, - 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x1001, 0x0168, - 0x2900, 0xb8a6, 0x080c, 0x65ca, 0xa86b, 0x0001, 0xa86f, 0x0000, + 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x100d, 0x0168, + 0x2900, 0xb8a6, 0x080c, 0x66d2, 0xa86b, 0x0001, 0xa86f, 0x0000, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, - 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x0c50, + 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fbf, 0x009e, 0x0c50, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, - 0x0000, 0x080c, 0x0fb3, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, + 0x0000, 0x080c, 0x0fbf, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, 0x900e, 0xb89c, 0xd0a4, 0x1108, 0xc185, - 0xd0ac, 0x1108, 0xc195, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x72e5, - 0x01b0, 0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, - 0x007e, 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, - 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, - 0x185e, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x20a9, 0x007f, 0x900e, - 0x0016, 0x080c, 0x6411, 0x1180, 0x080c, 0x676a, 0x1168, 0xb804, - 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006, - 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x6670, - 0x015e, 0x080c, 0x6704, 0x0120, 0x2001, 0x1962, 0x200c, 0x0038, - 0x2079, 0x185e, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011, - 0x669e, 0x080c, 0x8432, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011, - 0x669e, 0x080c, 0x835e, 0x080c, 0x6704, 0x01d8, 0x2001, 0x107e, - 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6742, 0x0130, - 0x2009, 0x07d0, 0x2011, 0x669e, 0x080c, 0x8432, 0x00e6, 0x2071, - 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2e5f, 0x00ee, + 0xd0ac, 0x1108, 0xc195, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0005, + 0x00b6, 0x00f6, 0x080c, 0x7351, 0x01b0, 0x71c0, 0x81ff, 0x1198, + 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, + 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, + 0xb800, 0xc0ed, 0xb802, 0x2079, 0x185e, 0x7804, 0xd0a4, 0x01e8, + 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1180, + 0x080c, 0x6891, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, + 0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, + 0x001e, 0x8108, 0x1f04, 0x677c, 0x015e, 0x080c, 0x682b, 0x0120, + 0x2001, 0x1961, 0x200c, 0x0098, 0x2079, 0x185e, 0x7804, 0xd0a4, + 0x0190, 0x2009, 0x07d0, 0x2001, 0x182b, 0x2004, 0x9005, 0x0138, + 0x2001, 0x187e, 0x2004, 0xd0e4, 0x0110, 0x2009, 0x5dc0, 0x2011, + 0x67b6, 0x080c, 0x859e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011, + 0x67b6, 0x080c, 0x84c2, 0x080c, 0x682b, 0x01d8, 0x2001, 0x107e, + 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6869, 0x0130, + 0x2009, 0x07d0, 0x2011, 0x67b6, 0x080c, 0x859e, 0x00e6, 0x2071, + 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ed6, 0x00ee, 0x04c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, - 0x6411, 0x1550, 0x080c, 0x676a, 0x1538, 0xb800, 0xd0ec, 0x0520, - 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd156, - 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x673e, 0x2001, 0x0707, + 0x64fc, 0x1550, 0x080c, 0x6891, 0x1538, 0xb800, 0xd0ec, 0x0520, + 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xdd18, + 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6865, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, - 0x0029, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e, - 0x080c, 0xce89, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x66c6, + 0x0029, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e, + 0x080c, 0xda37, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x67de, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, - 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, - 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, - 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, - 0x2204, 0x9b06, 0x190c, 0x0dc4, 0x000e, 0xba00, 0x9005, 0x0110, - 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, - 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1960, 0x200c, 0x2011, - 0x6734, 0x080c, 0x8432, 0x0005, 0x2011, 0x6734, 0x080c, 0x835e, - 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x55a7, - 0xd0ac, 0x0005, 0x080c, 0x55a7, 0xd0a4, 0x0005, 0x0016, 0xb904, - 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, - 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, - 0x00f6, 0x080c, 0xbef8, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, - 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8b8, 0xd094, 0x00fe, - 0x00be, 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168, - 0x2009, 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814, - 0x9084, 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e, - 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, - 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, 0x873f, - 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, - 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, - 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, - 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, - 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, - 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, - 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, - 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, - 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, - 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, - 0x2001, 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, - 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, - 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, - 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, - 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, - 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, - 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, - 0x0006, 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, - 0x000e, 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, - 0xa001, 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, - 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911, - 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, - 0x701e, 0x700a, 0x7046, 0x2071, 0x1925, 0x080c, 0x101a, 0x090c, - 0x0dc4, 0xa8af, 0xdcb0, 0xa86b, 0x1911, 0xa86f, 0x0000, 0xa873, - 0x0000, 0xa877, 0x0001, 0xa87b, 0x1928, 0xa87f, 0x0020, 0xa883, - 0x0040, 0xa8a3, 0x0000, 0x2900, 0x708e, 0x2001, 0x1923, 0x2003, - 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a, - 0x080c, 0x55a7, 0xd0fc, 0x1148, 0x080c, 0x55a7, 0x900e, 0xd09c, - 0x0108, 0x8108, 0x7102, 0x0804, 0x68c7, 0x2001, 0x187e, 0x200c, - 0x9184, 0x000f, 0x0006, 0x2001, 0x180d, 0x2004, 0xd08c, 0x000e, - 0x0108, 0x9006, 0x0002, 0x686c, 0x686c, 0x686c, 0x686c, 0x686c, - 0x6893, 0x68a8, 0x68d2, 0x68ab, 0x686c, 0x686c, 0x686c, 0x686c, - 0x686c, 0x686c, 0x686c, 0x7003, 0x0003, 0x2009, 0x187f, 0x210c, - 0x9184, 0xff00, 0x908e, 0xff00, 0x0140, 0x8007, 0x9005, 0x1110, - 0x2001, 0x0002, 0x8003, 0x7006, 0x0410, 0x7007, 0x0001, 0x00f8, - 0x7003, 0x0005, 0x0c50, 0x7003, 0x0004, 0x0136, 0x0146, 0x0156, - 0x20e1, 0x0001, 0x2099, 0x1882, 0x2071, 0x1925, 0x0096, 0x708c, - 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0024, 0x20a0, 0x009e, - 0x20a9, 0x0004, 0x4003, 0x015e, 0x014e, 0x013e, 0x0000, 0x2071, + 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, + 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, + 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, + 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, + 0x9b06, 0x190c, 0x0dc3, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, + 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836, + 0x2204, 0xd0cc, 0x0138, 0x2001, 0x195f, 0x200c, 0x2011, 0x685b, + 0x080c, 0x859e, 0x0005, 0x2011, 0x685b, 0x080c, 0x84c2, 0x2011, + 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x5664, 0xd0ac, + 0x0005, 0x080c, 0x5664, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, + 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, + 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, + 0x080c, 0xc8ce, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, + 0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, + 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168, 0x2009, + 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814, 0x9084, + 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e, 0x0005, + 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, + 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, + 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, + 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, + 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, + 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, + 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, + 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, + 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, + 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, + 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, + 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, + 0x1817, 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, + 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, + 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, + 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, + 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, + 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, + 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x0006, + 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, + 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, + 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001, + 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911, 0x7003, + 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, + 0x700a, 0x7046, 0x2001, 0x1923, 0x2003, 0x0000, 0x0005, 0x0016, + 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a, 0x080c, 0x5664, 0xd0fc, + 0x1140, 0x080c, 0x5664, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, + 0x0470, 0x2001, 0x187e, 0x200c, 0x9184, 0x0007, 0x0006, 0x2001, + 0x180d, 0x2004, 0xd08c, 0x000e, 0x0108, 0x9006, 0x0002, 0x6979, + 0x6979, 0x6979, 0x6979, 0x6979, 0x6997, 0x69ac, 0x69ba, 0x7003, + 0x0003, 0x2009, 0x187f, 0x210c, 0x9184, 0xff00, 0x908e, 0xff00, + 0x0140, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x8003, 0x7006, + 0x0030, 0x7007, 0x0001, 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071, 0x1911, 0x704f, 0x0000, 0x2071, 0x1800, 0x70ef, 0x0001, 0x00ee, 0x001e, 0x0005, 0x7003, 0x0000, 0x2071, 0x1911, 0x2009, 0x187f, 0x210c, 0x9184, 0x7f00, 0x8007, 0x908c, 0x000f, 0x0160, 0x714e, @@ -3140,423 +3169,408 @@ static const uint16_t isp_2300_risc_code[] = { 0x0128, 0x70ee, 0x0c20, 0x704f, 0x000f, 0x0c90, 0x70ef, 0x0005, 0x08f0, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1911, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001, - 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x764e, 0x6a60, 0x9200, + 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x76be, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x001a, 0x702b, 0x0001, 0x00e6, 0x2071, 0x1911, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa86c, 0xd0fc, 0x1508, 0x00e6, - 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6b22, 0xa97c, - 0xa878, 0x9105, 0x1904, 0x6b22, 0x9286, 0x0003, 0x0904, 0x69bd, - 0x9286, 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0bc, 0x1904, 0x6b22, - 0x2200, 0x0002, 0x6b22, 0x6981, 0x69bd, 0x69bd, 0x6ead, 0x69bd, - 0x0005, 0xa86c, 0xd0fc, 0x1520, 0x00e6, 0x0026, 0x2009, 0x1925, - 0x210c, 0x81ff, 0x0904, 0x6b22, 0xa884, 0x9084, 0x00ff, 0x9086, - 0x0001, 0x1904, 0x6b22, 0x9186, 0x0003, 0x0904, 0x69bd, 0x9186, - 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0cc, 0x0904, 0x6b22, 0x9186, - 0x0004, 0x0904, 0x6ead, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, - 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1911, 0x701c, - 0x9005, 0x1904, 0x6cd0, 0x0e04, 0x6d1b, 0x2071, 0x0000, 0xa84c, - 0x7082, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874, 0x708a, - 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, - 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, - 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, - 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, - 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, - 0x2079, 0x0050, 0x2071, 0x1911, 0xa803, 0x0000, 0x7010, 0x9005, - 0x1904, 0x6aa8, 0x782c, 0x908c, 0x0780, 0x190c, 0x6eed, 0x8004, - 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x69db, 0x6aa8, 0x69ff, - 0x6a45, 0x080c, 0x0dc4, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, - 0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, - 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, - 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x0c18, 0x2071, - 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1578, 0x7824, 0x00e6, - 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, - 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, - 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, - 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0, - 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, - 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, - 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, - 0x9200, 0x70be, 0x080c, 0x8245, 0x0808, 0x0096, 0x00e6, 0x7824, - 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, - 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6eed, 0xd09c, 0x1198, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, - 0x1550, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, - 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, - 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, - 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7, + 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6c08, 0xa97c, + 0xa878, 0x9105, 0x1904, 0x6c08, 0x9286, 0x0003, 0x0904, 0x6aa1, + 0x9286, 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0bc, 0x1904, 0x6c08, + 0x2200, 0x0002, 0x6c08, 0x6a65, 0x6aa1, 0x6aa1, 0x6c08, 0x6aa1, + 0x0005, 0xa86c, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1925, + 0x210c, 0x81ff, 0x0904, 0x6c08, 0xa884, 0x9084, 0x00ff, 0x9086, + 0x0001, 0x1904, 0x6c08, 0x9186, 0x0003, 0x0904, 0x6aa1, 0x9186, + 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0cc, 0x0904, 0x6c08, 0xa84f, + 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, + 0x0016, 0x2071, 0x1911, 0x701c, 0x9005, 0x1904, 0x6dd6, 0x0e04, + 0x6e21, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa870, + 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, + 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x2011, 0x0001, + 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, + 0x9200, 0x70be, 0x080c, 0x83a7, 0x002e, 0x00ee, 0x0005, 0x0096, + 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, + 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1911, + 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6b8c, 0x782c, 0x908c, + 0x0780, 0x190c, 0x6f4a, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, + 0x0002, 0x6abf, 0x6b8c, 0x6ae3, 0x6b29, 0x080c, 0x0dc3, 0x2071, + 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, - 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, - 0x9200, 0x70be, 0x080c, 0x8245, 0x00fe, 0x002e, 0x00ee, 0x0005, - 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, - 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6afc, - 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1198, 0x701c, - 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, - 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, - 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, - 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, - 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, - 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x2071, - 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, + 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, + 0x080c, 0x83a7, 0x0c18, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, + 0x900d, 0x1578, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, + 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, + 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, + 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x2071, 0x19d7, 0x7044, 0x9005, + 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, + 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, + 0x0808, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, + 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x1d60, 0x00ee, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x1198, 0x009e, + 0x2900, 0x7822, 0xa804, 0x900d, 0x1550, 0x2071, 0x19d7, 0x7044, + 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, + 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, + 0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, + 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, + 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, + 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, + 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, + 0xa804, 0x900d, 0x1904, 0x6be0, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6f4a, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, + 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d68, 0x782c, 0x9094, + 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, + 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, + 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, + 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, + 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, + 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, + 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, + 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6b9c, 0xa86c, 0xd0fc, 0x1904, + 0x6c56, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fbf, + 0x009e, 0x0020, 0xa86c, 0xd0fc, 0x1904, 0x6c56, 0x00e6, 0x0026, + 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70e8, + 0x8001, 0x0558, 0x1a04, 0x6c53, 0x2071, 0x1911, 0xa803, 0x0000, + 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005, + 0x1904, 0x6d52, 0x782c, 0x908c, 0x0780, 0x190c, 0x6f4a, 0x8004, + 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c57, 0x6d52, 0x6c72, + 0x6ce3, 0x080c, 0x0dc3, 0x2009, 0x1925, 0x2104, 0x0002, 0x6c1e, + 0x6c1e, 0x6c1e, 0x6aaa, 0x6c1e, 0x6aaa, 0x70eb, 0x0fa0, 0x71e4, + 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6, + 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, + 0x9205, 0x20d0, 0x0808, 0x70ea, 0x0804, 0x6c14, 0x0005, 0x2071, + 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, + 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, + 0x83a7, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, + 0x1904, 0x6cd2, 0x7830, 0x8007, 0x908c, 0x001f, 0x70ec, 0x9102, + 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, + 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, + 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, + 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x0e04, + 0x6cc9, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, + 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922, 0x200c, 0xc184, + 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x11a9, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee, + 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, + 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, + 0x83a7, 0x0804, 0x6c85, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, + 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, + 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, + 0x1d60, 0x00ee, 0x0e04, 0x6d25, 0x7838, 0x7938, 0x910e, 0x1de0, + 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, + 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11a9, 0x704b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6f4a, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, + 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, + 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, + 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, + 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804, - 0x6ab8, 0xa86c, 0xd0fc, 0x15e0, 0x0096, 0xa804, 0xa807, 0x0000, - 0x904d, 0x190c, 0x0fb3, 0x009e, 0x0018, 0xa86c, 0xd0fc, 0x1580, - 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, - 0x1911, 0xa803, 0x0000, 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016, - 0x01a8, 0x7010, 0x9005, 0x1904, 0x6c4c, 0x782c, 0x908c, 0x0780, - 0x190c, 0x6eed, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, - 0x6b51, 0x6c4c, 0x6b6c, 0x6bdd, 0x080c, 0x0dc4, 0x2009, 0x1925, - 0x2104, 0x0002, 0x6b31, 0x6b31, 0x6b31, 0x69c6, 0x6b31, 0x69c6, - 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, - 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, - 0x70be, 0x080c, 0x8245, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, - 0xa804, 0x900d, 0x1904, 0x6bcc, 0x7830, 0x8007, 0x908c, 0x001f, - 0x70ec, 0x9102, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, - 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, - 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, - 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, - 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, - 0x19f0, 0x0e04, 0x6bc3, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, - 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922, - 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x119d, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, - 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, - 0x70be, 0x080c, 0x8245, 0x0804, 0x6b7f, 0x0096, 0x00e6, 0x7824, + 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, + 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, + 0x1904, 0x6dc1, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, + 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, + 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d50, 0x782c, + 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x05b8, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, - 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6c1f, 0x7838, 0x7938, + 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, + 0x6f4a, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6dba, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, - 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, - 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, - 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, + 0x2004, 0xd084, 0x190c, 0x11a9, 0x704b, 0x0000, 0x00fe, 0x002e, + 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee, + 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, + 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, + 0x70be, 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6d62, 0x2071, 0x1911, + 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, + 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, + 0x1128, 0x1e04, 0x6e01, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, + 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, + 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x0e04, + 0x6deb, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18, + 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, + 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x002e, 0x00ee, + 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, + 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, + 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, - 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, - 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1904, 0x6cbb, 0x782c, 0x9094, 0x0780, 0x190c, - 0x6eed, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, - 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, - 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, - 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x05b8, - 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, - 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6cb4, - 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, - 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, - 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, - 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, - 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, - 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, - 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804, 0x6c5c, - 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, - 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, - 0xa804, 0x900d, 0x1128, 0x1e04, 0x6cfb, 0x002e, 0x00ee, 0x0005, - 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, - 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, - 0x8245, 0x0e04, 0x6ce5, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c, - 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, - 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9, - 0x002e, 0x00ee, 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, - 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, - 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, - 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, - 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, - 0x080c, 0x8245, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006, - 0xa86b, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x001e, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882, - 0x000e, 0xa87e, 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002, - 0x6d68, 0x6d69, 0x6eac, 0x6e96, 0x6d66, 0x6eac, 0x080c, 0x0dc4, - 0x0005, 0x2001, 0x1925, 0x2004, 0x0002, 0x6d73, 0x6d73, 0x6dc8, - 0x6dc9, 0x6e30, 0x6dc9, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8, - 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6d97, - 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, - 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9, 0x012e, - 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed, - 0xd09c, 0x2071, 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001, - 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, - 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, - 0x6822, 0x00de, 0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001, - 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, - 0x0005, 0x00d6, 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760, - 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, - 0x1aa0, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, - 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6dfb, 0x2069, - 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, - 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2069, - 0x19d7, 0x6847, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, - 0x1e0c, 0x6f69, 0x701c, 0x904d, 0x0548, 0x2001, 0x005b, 0x2004, - 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1500, 0x2071, 0x1911, - 0x700f, 0x0001, 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, - 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, - 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, - 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, - 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8, 0x701c, 0x904d, 0x0568, - 0xa84c, 0x9086, 0x0004, 0x1558, 0x0136, 0x0146, 0x0156, 0x2099, - 0x1882, 0x20e1, 0x0001, 0x2001, 0x1948, 0x2004, 0x2040, 0xa060, - 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x20a9, 0x0004, 0x4003, - 0x015e, 0x014e, 0x013e, 0xa860, 0xa076, 0xa85c, 0x9080, 0x001c, - 0xa07a, 0xa07f, 0x0002, 0xa06f, 0x0002, 0xa073, 0x0000, 0x080c, - 0x10eb, 0x2071, 0x1911, 0x7007, 0x0003, 0x012e, 0x0005, 0x2001, - 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x2071, - 0x1911, 0x1d98, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184, + 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, + 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006, 0xa86b, 0x0103, + 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001e, 0x20a0, + 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882, 0x000e, 0xa87e, + 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002, 0x6e6e, 0x6e6f, + 0x6f35, 0x6e6f, 0x6e6c, 0x6f35, 0x080c, 0x0dc3, 0x0005, 0x2001, + 0x1925, 0x2004, 0x0002, 0x6e79, 0x6e79, 0x6ece, 0x6ecf, 0x6e79, + 0x6ecf, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6f55, 0x701c, 0x904d, + 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6e9d, 0xa94c, 0x2071, + 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874, + 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x012e, 0x0470, 0x2001, + 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x2071, + 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, - 0x701e, 0x9005, 0x1990, 0x701a, 0x012e, 0x0005, 0x2071, 0x1925, - 0x708c, 0x2040, 0xa070, 0x2071, 0x1911, 0x908e, 0x0100, 0x1120, - 0x7007, 0x0001, 0x04b1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e, - 0x0200, 0x1dc8, 0x080c, 0x6eed, 0x0005, 0xa84f, 0x0004, 0xa803, - 0x0000, 0x2908, 0x2071, 0x1911, 0x7010, 0x8000, 0x7012, 0x7018, - 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, - 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, - 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, - 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x002e, 0x00ee, - 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, - 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, - 0x080c, 0x1033, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, - 0x6eef, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcd, - 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, - 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x00fe, 0x009e, - 0x0005, 0x782c, 0x9094, 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x2001, - 0x1925, 0x2004, 0x9086, 0x0004, 0x0130, 0x7148, 0x704c, 0x8108, - 0x714a, 0x9102, 0x0e58, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, - 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, - 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, - 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, - 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0, + 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, + 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760, 0x0158, 0x9186, + 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1aac, 0x210c, + 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, + 0x6838, 0x9106, 0x0190, 0x0e04, 0x6f01, 0x2069, 0x0000, 0x6837, + 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, + 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2069, 0x19d7, 0x6847, + 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6fc0, + 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, + 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, + 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, + 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, + 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, + 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, + 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, + 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x103f, 0x0005, + 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6f4c, 0x0006, 0x0016, + 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcc, 0x0096, 0x00f6, 0x2079, + 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938, + 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, + 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, + 0x11a9, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094, + 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a, + 0x9102, 0x0e88, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, + 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, + 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, + 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, + 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x7838, + 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, + 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, + 0x190c, 0x11a9, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, + 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, - 0xd084, 0x190c, 0x119d, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e, - 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, - 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, - 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, - 0x2004, 0xd084, 0x190c, 0x119d, 0x00fe, 0x0005, 0x782c, 0x9094, - 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, - 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, - 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, - 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925, - 0x6808, 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005, - 0x1320, 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe, - 0x0005, 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc4, 0x9082, 0x001d, - 0x001b, 0x6027, 0x1e00, 0x0005, 0x70aa, 0x7017, 0x7033, 0x705d, - 0x7099, 0x70d9, 0x70eb, 0x7033, 0x70c1, 0x6fd2, 0x7000, 0x7083, - 0x6fd1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, - 0x6808, 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, - 0x7002, 0x080c, 0x7423, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, - 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085, - 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, - 0x080c, 0x199b, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, - 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, - 0x1160, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c, - 0x74c7, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, - 0x2001, 0x0090, 0x080c, 0x2b65, 0x000e, 0x6124, 0xd1e4, 0x1190, - 0x080c, 0x7158, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, - 0x7097, 0x0020, 0x080c, 0x7158, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b65, 0x6124, - 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, - 0x11d8, 0x080c, 0x19c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, - 0x080c, 0x7311, 0x2001, 0x0080, 0x080c, 0x2b65, 0x7097, 0x0029, - 0x0058, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, - 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x19c8, 0x60e3, - 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7311, 0x2001, 0x0080, - 0x080c, 0x2b65, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4, - 0x1148, 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097, - 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, - 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040, - 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, - 0x0005, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x6124, 0xd1dc, 0x1138, - 0xd1e4, 0x0138, 0x080c, 0x19c8, 0x7097, 0x001e, 0x0010, 0x7097, - 0x001d, 0x0005, 0x080c, 0x71db, 0x6124, 0xd1dc, 0x1188, 0x080c, - 0x7158, 0x0016, 0x080c, 0x19c8, 0x001e, 0xd1d4, 0x1128, 0xd1e4, - 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x7158, - 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x000e, 0x6124, - 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, - 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, - 0x0005, 0x080c, 0x71db, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, - 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2b65, - 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, - 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, - 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, - 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x2091, 0x8000, 0x080c, 0x72e5, 0x11d8, 0x2001, 0x180c, - 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, - 0x2a8d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2b65, - 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0428, 0x6028, 0xc0cd, 0x602a, - 0x0408, 0x080c, 0x72ff, 0x0150, 0x080c, 0x72f6, 0x1138, 0x2001, - 0x0001, 0x080c, 0x264c, 0x080c, 0x72bd, 0x00a0, 0x080c, 0x71d8, - 0x0178, 0x2001, 0x0001, 0x080c, 0x264c, 0x7094, 0x9086, 0x001e, - 0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, - 0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, - 0x0026, 0x2011, 0x7169, 0x080c, 0x8474, 0x002e, 0x0016, 0x0026, - 0x2009, 0x0064, 0x2011, 0x7169, 0x080c, 0x846b, 0x002e, 0x001e, - 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9623, 0x2071, 0x1800, - 0x080c, 0x7106, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, - 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800, - 0x080c, 0x9623, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000, - 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, - 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x080c, 0x8420, 0x0036, - 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3, 0x0000, 0x080c, 0xd33c, - 0x080c, 0xd373, 0x2009, 0x0004, 0x080c, 0x2a93, 0x080c, 0x29ae, - 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7169, - 0x080c, 0x8474, 0x080c, 0x72ff, 0x0118, 0x9006, 0x080c, 0x2b65, - 0x080c, 0x0b9e, 0x2001, 0x0001, 0x080c, 0x264c, 0x012e, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, - 0x00e6, 0x2011, 0x7176, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118, - 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, - 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, - 0x0170, 0x2001, 0x00c0, 0x080c, 0x2b65, 0x0156, 0x20a9, 0x002d, - 0x1d04, 0x71e8, 0x2091, 0x6000, 0x1f04, 0x71e8, 0x015e, 0x0005, - 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, - 0x1800, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000, 0x9006, - 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c, 0x2b65, - 0x080c, 0x5db5, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, - 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, - 0x0140, 0x2071, 0x1800, 0x2001, 0x195a, 0x200c, 0x9186, 0x0000, - 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, - 0x0003, 0x0158, 0x0804, 0x72ad, 0x7097, 0x0022, 0x0040, 0x7097, - 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, - 0x0000, 0x6887, 0x0000, 0x2001, 0x0001, 0x080c, 0x2713, 0x0026, - 0x080c, 0x9e89, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, - 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, - 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, - 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0804, 0x72b9, 0x6800, - 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a8d, 0x6904, 0xd1d4, - 0x1140, 0x2001, 0x0100, 0x080c, 0x2b65, 0x1f04, 0x7252, 0x080c, - 0x733a, 0x012e, 0x015e, 0x080c, 0x72f6, 0x01d0, 0x6044, 0x9005, - 0x0190, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6050, - 0x2008, 0x9085, 0x0020, 0x6052, 0x080c, 0x733a, 0x9006, 0x8001, - 0x1df0, 0x6152, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x733a, - 0x080c, 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0016, 0x0026, - 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7176, - 0x080c, 0x8432, 0x002e, 0x001e, 0x080c, 0x823c, 0x7034, 0xc085, - 0x7036, 0x2001, 0x195a, 0x2003, 0x0004, 0x080c, 0x6fb9, 0x080c, - 0x72f6, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, - 0x75e1, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, - 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8253, - 0x080c, 0x8245, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000, - 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c, - 0x2b65, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, - 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x1959, - 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab, - 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, - 0x55ab, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, - 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, - 0x0006, 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, - 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, - 0x0170, 0x9084, 0x0011, 0x0120, 0x080c, 0x2733, 0x900e, 0x0008, - 0x900e, 0x2019, 0x0028, 0x080c, 0x3037, 0x9006, 0x0019, 0x001e, - 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, - 0xbef1, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, - 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, - 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, - 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, - 0x734f, 0x2091, 0x6000, 0x1f04, 0x734f, 0x602f, 0x0100, 0x602f, - 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, - 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, - 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, - 0x0001, 0x2001, 0x0001, 0x080c, 0x2713, 0x2001, 0x00a0, 0x0006, - 0x080c, 0xbef8, 0x000e, 0x0130, 0x080c, 0x2b83, 0x9006, 0x080c, - 0x2b8f, 0x0010, 0x080c, 0x2b65, 0x000e, 0x6052, 0x6050, 0x0006, - 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2a02, 0x00fe, - 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, - 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, - 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, - 0x2102, 0x0804, 0x7415, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, - 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, - 0x080c, 0x2b65, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, - 0x73bc, 0x2091, 0x6000, 0x1f04, 0x73bc, 0x2011, 0x0003, 0x080c, - 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x901e, - 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x080c, 0x75dc, - 0x080c, 0x5ef6, 0x080c, 0xbef8, 0x0110, 0x080c, 0x0d34, 0x9085, - 0x0001, 0x04c8, 0x080c, 0x19c8, 0x60e3, 0x0000, 0x2001, 0x180d, - 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a, 0x2004, - 0x080c, 0x2713, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b65, 0x20a9, - 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, - 0x910c, 0x0140, 0x1d04, 0x73f9, 0x2091, 0x6000, 0x1f04, 0x73f9, - 0x0804, 0x73c5, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, - 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xbef8, 0x0110, - 0x080c, 0x0d34, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, - 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, - 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, - 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, - 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04, 0x8000, 0x206a, 0x2069, - 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, - 0x7488, 0x2001, 0x0088, 0x080c, 0x2b65, 0x9006, 0x60e2, 0x6886, - 0x080c, 0x2713, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, - 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, - 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, - 0x20a9, 0x0002, 0x1d04, 0x746a, 0x2091, 0x6000, 0x1f04, 0x746a, - 0x0804, 0x74bf, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, - 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c, 0x0508, 0x9084, - 0x1a00, 0x11f0, 0x1d04, 0x7476, 0x2091, 0x6000, 0x1f04, 0x7476, - 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, - 0x080c, 0x98ee, 0x901e, 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c, - 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x00f8, - 0x080c, 0x19c8, 0x2001, 0x0080, 0x080c, 0x2b65, 0x2069, 0x0140, - 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, - 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, - 0x2001, 0x194a, 0x2004, 0x080c, 0x2713, 0x60e2, 0x9006, 0x00ee, - 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, - 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, - 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, - 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, - 0x901e, 0x080c, 0x9964, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, - 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0804, 0x7561, 0x2001, - 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x715e, - 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2b65, 0x60e3, 0x0000, - 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, - 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x196b, - 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7561, - 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c, - 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7518, 0x0006, 0x0016, - 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x829f, 0x00ee, 0x00de, 0x00ce, - 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7, 0x7078, 0x00ee, 0x9005, - 0x19f8, 0x0438, 0x0026, 0x2011, 0x7176, 0x080c, 0x835e, 0x2011, - 0x7169, 0x080c, 0x8474, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, - 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, - 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a, - 0x2004, 0x080c, 0x2713, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, - 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, - 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, - 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbef1, 0x1904, 0x75ca, - 0x7130, 0xd18c, 0x1150, 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132, - 0x0020, 0x7030, 0xd08c, 0x0904, 0x75ca, 0x2011, 0x185f, 0x220c, - 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xd0d7, 0x0156, - 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, - 0x0080, 0x0188, 0x080c, 0x6411, 0x1170, 0x2120, 0x9006, 0x0016, - 0x2009, 0x000e, 0x080c, 0xd156, 0x2009, 0x0001, 0x2011, 0x0100, - 0x080c, 0x8532, 0x001e, 0x8108, 0x1f04, 0x7594, 0x00be, 0x015e, - 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004, 0x080c, - 0x3037, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, - 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x75c0, - 0x00be, 0x015e, 0x080c, 0x19c8, 0x080c, 0x9e89, 0x60e3, 0x0000, - 0x080c, 0x5ef6, 0x080c, 0x7212, 0x00ee, 0x00ce, 0x004e, 0x003e, - 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x195a, 0x2003, 0x0001, - 0x0005, 0x2001, 0x195a, 0x2003, 0x0000, 0x0005, 0x2001, 0x1959, - 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005, - 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x101a, - 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x101a, - 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000, + 0xd084, 0x190c, 0x11a9, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, + 0x190c, 0x6f4a, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, + 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, + 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, + 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925, 0x6808, + 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005, 0x1320, + 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc3, 0x9082, 0x001d, 0x001b, + 0x6027, 0x1e00, 0x0005, 0x7101, 0x706e, 0x708a, 0x70b4, 0x70f0, + 0x7130, 0x7142, 0x708a, 0x7118, 0x7029, 0x7057, 0x70da, 0x7028, + 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, + 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, + 0x080c, 0x748e, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, + 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, + 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, + 0x19e3, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, + 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, + 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c, 0x7532, + 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, + 0x0090, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, + 0x71af, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, + 0x0020, 0x080c, 0x71af, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, + 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2bce, 0x6124, 0xd1cc, + 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, + 0x080c, 0x1a10, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, + 0x737d, 0x2001, 0x0080, 0x080c, 0x2bce, 0x7097, 0x0029, 0x0058, + 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, + 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x1a10, 0x60e3, 0x0001, + 0x600c, 0xc0b4, 0x600e, 0x080c, 0x737d, 0x2001, 0x0080, 0x080c, + 0x2bce, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4, 0x1148, + 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097, 0x0028, + 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, + 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, + 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040, 0x7097, + 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, + 0x2001, 0x00a0, 0x080c, 0x2bce, 0x6124, 0xd1dc, 0x1138, 0xd1e4, + 0x0138, 0x080c, 0x1a10, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d, + 0x0005, 0x080c, 0x7232, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x71af, + 0x0016, 0x080c, 0x1a10, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, + 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x71af, 0x0005, + 0x0006, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1d4, + 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, + 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005, + 0x080c, 0x7232, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, + 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, + 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2bce, 0x000e, + 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, + 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, + 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, + 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, + 0x2091, 0x8000, 0x080c, 0x7351, 0x11d8, 0x2001, 0x180c, 0x200c, + 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2af6, + 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, + 0x764c, 0x080c, 0x5fb3, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, + 0x080c, 0x736b, 0x0150, 0x080c, 0x7362, 0x1138, 0x2001, 0x0001, + 0x080c, 0x26b1, 0x080c, 0x7329, 0x00a0, 0x080c, 0x722f, 0x0178, + 0x2001, 0x0001, 0x080c, 0x26b1, 0x7094, 0x9086, 0x001e, 0x0120, + 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, + 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, + 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x0016, 0x0026, 0x2009, + 0x0064, 0x2011, 0x71c0, 0x080c, 0x85d7, 0x002e, 0x001e, 0x0005, + 0x00e6, 0x00f6, 0x0016, 0x080c, 0x98d1, 0x2071, 0x1800, 0x080c, + 0x715d, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c, + 0x98d1, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000, 0x6028, + 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, + 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x080c, 0x858c, 0x0036, 0x901e, + 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9, 0x080c, + 0xe100, 0x2009, 0x0004, 0x080c, 0x2afc, 0x080c, 0x2a17, 0x2001, + 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x71c0, 0x080c, + 0x85e0, 0x080c, 0x736b, 0x0118, 0x9006, 0x080c, 0x2bce, 0x080c, + 0x0b9e, 0x2001, 0x0001, 0x080c, 0x26b1, 0x012e, 0x00fe, 0x00ee, + 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, + 0x2011, 0x71cd, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118, 0x7018, + 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, + 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, + 0x2001, 0x00c0, 0x080c, 0x2bce, 0x0156, 0x20a9, 0x002d, 0x1d04, + 0x723f, 0x2091, 0x6000, 0x1f04, 0x723f, 0x015e, 0x00d6, 0x2069, + 0x1800, 0x6898, 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, + 0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, + 0x1da8, 0x080c, 0x85ec, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, + 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x765b, 0x2001, + 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, + 0x277c, 0x9006, 0x080c, 0x2bce, 0x080c, 0x5e72, 0x6027, 0xffff, + 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, + 0x1959, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, + 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7319, + 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, + 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001, + 0x0001, 0x080c, 0x277c, 0x0026, 0x080c, 0xa30e, 0x002e, 0x7000, + 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, + 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, + 0x0150, 0x012e, 0x015e, 0x080c, 0xc8ce, 0x0118, 0x9006, 0x080c, + 0x2bf8, 0x0804, 0x7325, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, + 0x080c, 0x2af6, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, + 0x2bce, 0x1f04, 0x72be, 0x080c, 0x73a5, 0x012e, 0x015e, 0x080c, + 0x7362, 0x01d0, 0x6044, 0x9005, 0x0190, 0x2011, 0x0114, 0x2204, + 0x9085, 0x0100, 0x2012, 0x6050, 0x2008, 0x9085, 0x0020, 0x6052, + 0x080c, 0x73a5, 0x9006, 0x8001, 0x1df0, 0x6152, 0x0028, 0x6804, + 0xd0d4, 0x1110, 0x080c, 0x73a5, 0x080c, 0xc8ce, 0x0118, 0x9006, + 0x080c, 0x2bf8, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, + 0x2009, 0x00c8, 0x2011, 0x71cd, 0x080c, 0x859e, 0x002e, 0x001e, + 0x080c, 0x839e, 0x7034, 0xc085, 0x7036, 0x2001, 0x1959, 0x2003, + 0x0004, 0x080c, 0x7010, 0x080c, 0x7362, 0x0138, 0x6804, 0xd0d4, + 0x1120, 0xd0dc, 0x1100, 0x080c, 0x7651, 0x00ee, 0x00de, 0x00ce, + 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, + 0x2071, 0x1800, 0x080c, 0x83b5, 0x080c, 0x83a7, 0x080c, 0x765b, + 0x2001, 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, + 0x080c, 0x277c, 0x9006, 0x080c, 0x2bce, 0x6043, 0x0090, 0x6043, + 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, + 0x0005, 0x0006, 0x2001, 0x1958, 0x2004, 0x9086, 0xaaaa, 0x000e, + 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086, 0x0000, + 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086, + 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, + 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, + 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, + 0x180c, 0x2004, 0x908c, 0x0013, 0x0168, 0x0020, 0x080c, 0x279c, + 0x900e, 0x0010, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x30cd, + 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, + 0x2e04, 0x0130, 0x080c, 0xc8c7, 0x1128, 0x9085, 0x0010, 0x0010, + 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, + 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, + 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, + 0x20a9, 0x0012, 0x1d04, 0x73ba, 0x2091, 0x6000, 0x1f04, 0x73ba, + 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, + 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, + 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, + 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x277c, + 0x2001, 0x00a0, 0x0006, 0x080c, 0xc8ce, 0x000e, 0x0130, 0x080c, + 0x2bec, 0x9006, 0x080c, 0x2bf8, 0x0010, 0x080c, 0x2bce, 0x000e, + 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, + 0x080c, 0x2a6b, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, + 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, + 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x7480, 0x2001, 0x180c, + 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, + 0x0200, 0x2001, 0x0090, 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6024, + 0xd0cc, 0x1518, 0x1d04, 0x7427, 0x2091, 0x6000, 0x1f04, 0x7427, + 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1, + 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2001, 0x00a0, 0x080c, + 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, 0xc8ce, 0x0110, + 0x080c, 0x0d31, 0x9085, 0x0001, 0x04c8, 0x080c, 0x1a10, 0x60e3, + 0x0000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, + 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001, 0x0080, + 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, + 0x080c, 0x2af6, 0x6024, 0x910c, 0x0140, 0x1d04, 0x7464, 0x2091, + 0x6000, 0x1f04, 0x7464, 0x0804, 0x7430, 0x6028, 0x9085, 0x1e00, + 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, + 0x080c, 0xc8ce, 0x0110, 0x080c, 0x0d31, 0x9006, 0x00ee, 0x00de, + 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, + 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, + 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, + 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04, + 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, + 0x6884, 0x9005, 0x1904, 0x74f3, 0x2001, 0x0088, 0x080c, 0x2bce, + 0x9006, 0x60e2, 0x6886, 0x080c, 0x277c, 0x2069, 0x0200, 0x6804, + 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, + 0x602a, 0x6027, 0x0400, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, + 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x74d5, 0x2091, + 0x6000, 0x1f04, 0x74d5, 0x0804, 0x752a, 0x2069, 0x0140, 0x20a9, + 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2af6, 0x6024, + 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x74e1, 0x2091, + 0x6000, 0x1f04, 0x74e1, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, + 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, + 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, + 0x9085, 0x0001, 0x00f8, 0x080c, 0x1a10, 0x2001, 0x0080, 0x080c, + 0x2bce, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, + 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, + 0x2001, 0x0002, 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, + 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, + 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, + 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, + 0x01c8, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, + 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2069, 0x0140, + 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, + 0x0804, 0x75cc, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, + 0x2102, 0x080c, 0x71b5, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, + 0x2bce, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, + 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, + 0x0200, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, + 0x0001, 0x0804, 0x75cc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, + 0x2af6, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, + 0x7583, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8401, + 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7, + 0x7078, 0x00ee, 0x9005, 0x19f8, 0x0438, 0x0026, 0x2011, 0x71cd, + 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x2069, + 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, + 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, + 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001, + 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, + 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, + 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, + 0xc8c7, 0x1904, 0x763a, 0x7130, 0xd184, 0x1170, 0x080c, 0x325c, + 0x0138, 0xc18d, 0x7132, 0x2011, 0x185f, 0x2214, 0xd2ac, 0x1120, + 0x7030, 0xd08c, 0x0904, 0x763a, 0x2011, 0x185f, 0x220c, 0xd1a4, + 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xdc90, 0x0156, 0x00b6, + 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, + 0x0188, 0x080c, 0x64fc, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, + 0x000e, 0x080c, 0xdd18, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, + 0x8703, 0x001e, 0x8108, 0x1f04, 0x7603, 0x00be, 0x015e, 0x001e, + 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, + 0x30cd, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, + 0x080c, 0x64fc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x7630, + 0x00be, 0x015e, 0x080c, 0x1a10, 0x080c, 0xa30e, 0x60e3, 0x0000, + 0x080c, 0x5fb3, 0x080c, 0x727e, 0x00ee, 0x00ce, 0x004e, 0x003e, + 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x1959, 0x2003, 0x0001, + 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005, 0x2001, 0x1958, + 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1958, 0x2003, 0x0000, 0x0005, + 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1026, + 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1026, + 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000, 0xa86f, 0x0001, 0xa8a3, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006, @@ -3565,83 +3579,83 @@ static const uint16_t isp_2300_risc_code[] = { 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x001a, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fb, 0x6807, 0x0001, - 0x00de, 0x080c, 0x7bbd, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, + 0x00de, 0x080c, 0x7c5d, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, - 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7652, 0x015e, - 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x7671, - 0x7672, 0x76aa, 0x7705, 0x7850, 0x766f, 0x766f, 0x787a, 0x080c, - 0x0dc4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, - 0x7c49, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, + 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x76c2, 0x015e, + 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x76e1, + 0x76e2, 0x771a, 0x7775, 0x78c0, 0x76df, 0x76df, 0x78ea, 0x080c, + 0x0dc3, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, + 0x7ce9, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa868, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001, - 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x769a, - 0x7674, 0x769a, 0x7698, 0x769a, 0x769a, 0x769a, 0x769a, 0x769a, - 0x080c, 0x7705, 0x782c, 0xd09c, 0x090c, 0x7bbd, 0x0005, 0x9082, - 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x773b, 0x0c90, - 0x00e3, 0x08e8, 0x0005, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, - 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x773b, 0x773b, 0x773b, - 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, - 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7747, - 0x773b, 0x795d, 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x7747, - 0x799e, 0x79df, 0x7a26, 0x7a3a, 0x773b, 0x773b, 0x775d, 0x7747, - 0x773b, 0x773b, 0x7824, 0x7ab3, 0x7ace, 0x773b, 0x775d, 0x773b, - 0x773b, 0x773b, 0x773b, 0x781a, 0x7ace, 0x773b, 0x773b, 0x773b, - 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7771, 0x773b, - 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, - 0x7bed, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7785, 0x773b, - 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x2079, 0x0040, 0x7004, - 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7be6, 0xd0a4, 0x0170, + 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x770a, + 0x76e4, 0x770a, 0x7708, 0x770a, 0x770a, 0x770a, 0x770a, 0x770a, + 0x080c, 0x7775, 0x782c, 0xd09c, 0x090c, 0x7c5d, 0x0005, 0x9082, + 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x77ab, 0x0c90, + 0x00e3, 0x08e8, 0x0005, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77ab, 0x77ab, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77b7, + 0x77ab, 0x79c4, 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77b7, + 0x7a05, 0x7a46, 0x7a8d, 0x7aa1, 0x77ab, 0x77ab, 0x77cd, 0x77b7, + 0x77ab, 0x77ab, 0x7894, 0x7b4c, 0x7b67, 0x77ab, 0x77cd, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x788a, 0x7b67, 0x77ab, 0x77ab, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77e1, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, + 0x7c8d, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77f5, 0x77ab, + 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x2079, 0x0040, 0x7004, + 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7c86, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa868, 0x9084, 0x00ff, - 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7bbd, - 0x0005, 0x773b, 0x7747, 0x7949, 0x773b, 0x7747, 0x773b, 0x7747, - 0x7747, 0x773b, 0x7747, 0x7949, 0x7747, 0x7747, 0x7747, 0x7747, - 0x7747, 0x773b, 0x7747, 0x7949, 0x773b, 0x773b, 0x7747, 0x773b, - 0x773b, 0x773b, 0x7747, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400, + 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c5d, + 0x0005, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77b7, 0x77ab, 0x77b7, + 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77b7, 0x77b7, 0x77b7, 0x77b7, + 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77ab, 0x77b7, 0x77ab, + 0x77ab, 0x77ab, 0x77b7, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa86c, 0x9084, 0x00ff, 0x9105, 0xa86e, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084, - 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x78f9, - 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78f9, + 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084, + 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7969, + 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7969, 0x0005, 0xa868, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, - 0x7007, 0x0001, 0x0804, 0x791d, 0x7007, 0x0003, 0x7012, 0x2900, - 0x7016, 0x701a, 0x704b, 0x791d, 0x0005, 0xa868, 0x8007, 0x9084, - 0x00ff, 0x9086, 0x0001, 0x1904, 0x7743, 0x7007, 0x0001, 0x2009, - 0x1833, 0x210c, 0x81ff, 0x1904, 0x77f1, 0x2001, 0x180d, 0x2004, - 0xd08c, 0x0904, 0x77dc, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998, + 0x7007, 0x0001, 0x0804, 0x7984, 0x7007, 0x0003, 0x7012, 0x2900, + 0x7016, 0x701a, 0x704b, 0x7984, 0x0005, 0xa868, 0x8007, 0x9084, + 0x00ff, 0x9086, 0x0001, 0x1904, 0x77b3, 0x7007, 0x0001, 0x2009, + 0x1833, 0x210c, 0x81ff, 0x1904, 0x7861, 0x2001, 0x180d, 0x2004, + 0xd08c, 0x0904, 0x784c, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011, - 0x0010, 0x080c, 0x6781, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c, - 0x67cb, 0x001e, 0x1548, 0x0400, 0x080c, 0x72e5, 0x0140, 0xa89b, + 0x0010, 0x080c, 0x68a8, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c, + 0x68f2, 0x001e, 0x1548, 0x0400, 0x080c, 0x7351, 0x0140, 0xa89b, 0x4005, 0xa89f, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026, - 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x01b0, 0x0016, 0x0026, - 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x67cb, + 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x01b0, 0x0016, 0x0026, + 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x68f2, 0x003e, 0x002e, 0x001e, 0x1140, 0xa89b, 0x4005, 0xa89f, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa86c, 0x9084, 0x00ff, 0xa86e, - 0xa887, 0x0000, 0x080c, 0x611b, 0x1108, 0x0005, 0x0126, 0x2091, - 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6b1d, 0x012e, - 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7795, 0x9186, 0x0064, - 0x0904, 0x7795, 0x9186, 0x007c, 0x0904, 0x7795, 0x9186, 0x0028, - 0x0904, 0x7795, 0x9186, 0x0038, 0x0904, 0x7795, 0x9186, 0x0078, - 0x0904, 0x7795, 0x9186, 0x005f, 0x0904, 0x7795, 0x9186, 0x0056, - 0x0904, 0x7795, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030, + 0xa887, 0x0000, 0x080c, 0x61eb, 0x1108, 0x0005, 0x0126, 0x2091, + 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e, + 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7805, 0x9186, 0x0064, + 0x0904, 0x7805, 0x9186, 0x007c, 0x0904, 0x7805, 0x9186, 0x0028, + 0x0904, 0x7805, 0x9186, 0x0038, 0x0904, 0x7805, 0x9186, 0x0078, + 0x0904, 0x7805, 0x9186, 0x005f, 0x0904, 0x7805, 0x9186, 0x0056, + 0x0904, 0x7805, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa880, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, - 0x7007, 0x0001, 0x0804, 0x7ae5, 0x2900, 0x7016, 0x701a, 0x20a9, + 0x7007, 0x0001, 0x0804, 0x7b7e, 0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x4003, - 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x774b, 0xaab8, 0x928a, - 0x0002, 0x1a04, 0x774b, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105, - 0x0118, 0x2001, 0x78b7, 0x0018, 0x9280, 0x78ad, 0x2005, 0x7056, - 0x7010, 0x9015, 0x0904, 0x7898, 0x080c, 0x101a, 0x1118, 0x7007, + 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x77bb, 0xaab8, 0x928a, + 0x0002, 0x1a04, 0x77bb, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105, + 0x0118, 0x2001, 0x7927, 0x0018, 0x9280, 0x791d, 0x2005, 0x7056, + 0x7010, 0x9015, 0x0904, 0x7908, 0x080c, 0x1026, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa86a, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa07a, 0xa860, 0xa076, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17e, 0x810b, 0xa182, - 0x080c, 0x10eb, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, - 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1033, - 0x7014, 0x2048, 0x0804, 0x774b, 0x7020, 0x2048, 0x7018, 0xa802, - 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7850, + 0x080c, 0x10f7, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, + 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x103f, + 0x7014, 0x2048, 0x0804, 0x77bb, 0x7020, 0x2048, 0x7018, 0xa802, + 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78c0, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b8, 0x9005, 0x1128, 0xa8bc, 0xa9c0, 0x9105, 0x0108, 0x00b9, 0xa868, 0x9084, 0x00ff, 0x9086, - 0x001e, 0x0904, 0x7ae5, 0x0804, 0x78f9, 0x78af, 0x78b3, 0x0002, + 0x001e, 0x0904, 0x7b7e, 0x0804, 0x7969, 0x791f, 0x7923, 0x0002, 0x001e, 0x0007, 0x0004, 0x000a, 0x001c, 0x0005, 0x0006, 0x000a, 0x001e, 0x0005, 0x0004, 0x0076, 0x0066, 0xafbc, 0xaec0, 0xa804, 0x2050, 0xb0c4, 0xb0e6, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0d6, 0xb0b8, @@ -3651,1370 +3665,1504 @@ static const uint16_t isp_2300_risc_code[] = { 0xb09e, 0xb090, 0xb09a, 0xb08c, 0xb08e, 0xb088, 0xb08a, 0xb696, 0xb792, 0xb084, 0xb086, 0xb080, 0xb082, 0xb07c, 0xb076, 0xb078, 0xb072, 0xb67e, 0xb77a, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e, - 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11c0, 0xa887, 0x0000, - 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0bd, 0xa882, 0x080c, - 0x5f70, 0x1108, 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, - 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x012e, 0x0ca0, 0x080c, 0xbef1, - 0x1d28, 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c, - 0x9005, 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c, - 0x607d, 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x5ff5, 0x1108, - 0x0005, 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6b1d, - 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, - 0x0c80, 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce, - 0x0005, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, - 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, - 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, - 0xa978, 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, - 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, - 0x0002, 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x6411, 0x11b8, - 0x0066, 0xae84, 0x080c, 0x6511, 0x006e, 0x0088, 0x0046, 0x2011, - 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6411, - 0x1110, 0x080c, 0x6630, 0x8108, 0x1f04, 0x7986, 0x00ce, 0xa880, - 0xd084, 0x1120, 0x080c, 0x1033, 0x00be, 0x0005, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6b1d, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, - 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x0580, 0x2061, 0x1a4f, - 0x6100, 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000, - 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, - 0x0000, 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001, - 0x001e, 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006, - 0xa88c, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000, - 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7ba7, 0x012e, 0x0804, - 0x7ba1, 0x012e, 0x0804, 0x7b9b, 0x012e, 0x0804, 0x7b9e, 0x0126, - 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x05e0, 0x2061, - 0x1a4f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, - 0xac7c, 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001, - 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, - 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c, - 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, - 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005, - 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7ba7, - 0x012e, 0x0804, 0x7ba4, 0x012e, 0x0804, 0x7ba1, 0x0126, 0x2091, - 0x8000, 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120, - 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7bb5, 0x012e, - 0x0804, 0x7ba4, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, - 0x0001, 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000, - 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8, - 0xa890, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, - 0x080c, 0x9f42, 0x0068, 0x6017, 0xf400, 0x602b, 0x0000, 0xa980, - 0xd1a4, 0x0110, 0xa984, 0x612a, 0x2009, 0x0041, 0x080c, 0x9f88, - 0xa98c, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, - 0x2011, 0xfdff, 0x080c, 0x8532, 0x002e, 0xa880, 0xd0c4, 0x0148, - 0x2061, 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, - 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7ba7, 0x00ce, 0x012e, - 0x00be, 0x0804, 0x7ba1, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186, - 0x002d, 0x0d18, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c, - 0xc194, 0x2102, 0x08d0, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029, - 0x1d28, 0xa978, 0x080c, 0x6411, 0x1980, 0xb800, 0xc0e4, 0xb802, - 0x0860, 0xa890, 0x9065, 0x09d0, 0x6007, 0x0024, 0x2001, 0x1963, - 0x2004, 0x601a, 0x0810, 0x2061, 0x1a4f, 0x6000, 0xd084, 0x0190, - 0xd08c, 0x1904, 0x7bb5, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, - 0x0220, 0x6206, 0x012e, 0x0804, 0x7bb5, 0x012e, 0xa887, 0x0016, - 0x0804, 0x7bae, 0xa887, 0x0007, 0x0804, 0x7bae, 0xa868, 0x8007, - 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, - 0x0005, 0x080c, 0x7743, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, - 0x7016, 0x701a, 0x704b, 0x7ae5, 0x0005, 0x00b6, 0x00e6, 0x0126, - 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, - 0x7b63, 0x6130, 0xd194, 0x1904, 0x7b8d, 0xa87c, 0x2070, 0x9e82, - 0x1cc8, 0x0a04, 0x7b57, 0x6064, 0x9e02, 0x1a04, 0x7b57, 0x7120, - 0x9186, 0x0006, 0x1904, 0x7b49, 0x7010, 0x905d, 0x0904, 0x7b63, - 0xb800, 0xd0e4, 0x1904, 0x7b87, 0x2061, 0x1a4f, 0x6100, 0x9184, - 0x0301, 0x9086, 0x0001, 0x1580, 0xa887, 0x0000, 0xa803, 0x0000, - 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904, - 0x7b90, 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882, - 0x2e60, 0x080c, 0x848e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, - 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904, - 0x7b90, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887, - 0x0006, 0x00be, 0x0804, 0x7bae, 0xd184, 0x0db8, 0xd1c4, 0x1190, - 0x00a0, 0xa978, 0x080c, 0x6411, 0x15d0, 0xb800, 0xd0e4, 0x15b8, - 0x7120, 0x9186, 0x0007, 0x1118, 0xa887, 0x0002, 0x0490, 0xa887, - 0x0008, 0x0478, 0xa887, 0x000e, 0x0460, 0xa887, 0x0017, 0x0448, - 0xa887, 0x0035, 0x0430, 0x080c, 0x55ab, 0xd0fc, 0x01e8, 0xa87c, - 0x2070, 0x9e82, 0x1cc8, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, - 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, - 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7af1, - 0x7003, 0x0002, 0x0804, 0x7af1, 0xa887, 0x0028, 0x0010, 0xa887, - 0x0029, 0x012e, 0x00ee, 0x00be, 0x0408, 0xa887, 0x002a, 0x0cc8, - 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xccc8, 0x012e, + 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x602e, + 0x1108, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c, + 0xc4ba, 0x080c, 0x6c02, 0x012e, 0x0ca0, 0x080c, 0xc8c7, 0x1d70, + 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c, 0x9005, + 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c, 0x614d, + 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x60c5, 0x1108, 0x0005, + 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e, + 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, + 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce, 0x0005, + 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, + 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, + 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa978, + 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, + 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, + 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x64fc, 0x11b8, 0x0066, + 0xae84, 0x080c, 0x6619, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, + 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x64fc, 0x1110, + 0x080c, 0x6738, 0x8108, 0x1f04, 0x79ed, 0x00ce, 0xa880, 0xd084, + 0x1120, 0x080c, 0x103f, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6c02, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, + 0x7007, 0x0001, 0x080c, 0x6869, 0x0580, 0x2061, 0x1a4f, 0x6100, + 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, + 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, + 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001, 0x001e, + 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa88c, + 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000, 0x1108, + 0xc28d, 0x6202, 0x012e, 0x0804, 0x7c47, 0x012e, 0x0804, 0x7c41, + 0x012e, 0x0804, 0x7c3b, 0x012e, 0x0804, 0x7c3e, 0x0126, 0x2091, + 0x8000, 0x7007, 0x0001, 0x080c, 0x6869, 0x05e0, 0x2061, 0x1a4f, + 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac7c, + 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001, 0x1120, + 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, + 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c, 0x00ff, + 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, + 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005, 0x0110, + 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7c47, 0x012e, + 0x0804, 0x7c44, 0x012e, 0x0804, 0x7c41, 0x0126, 0x2091, 0x8000, + 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120, 0x6308, + 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7c55, 0x012e, 0x0804, + 0x7c44, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, + 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x9084, + 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8, 0xa890, + 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, + 0xa3cf, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa980, 0xd1a4, + 0x0110, 0xa984, 0x615a, 0x2009, 0x0041, 0x080c, 0xa419, 0xa98c, + 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, + 0xfdff, 0x080c, 0x8703, 0x002e, 0xa880, 0xd0c4, 0x0148, 0x2061, + 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, + 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c47, 0x00ce, 0x012e, 0x00be, + 0x0804, 0x7c41, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, + 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, + 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, + 0x9186, 0x0029, 0x1d10, 0xa978, 0x080c, 0x64fc, 0x1968, 0xb800, + 0xc0e4, 0xb802, 0x0848, 0xa890, 0x9065, 0x09b8, 0x6007, 0x0024, + 0x2001, 0x1962, 0x2004, 0x601a, 0x0804, 0x7adc, 0xa890, 0x9065, + 0x0960, 0x00e6, 0xa894, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, + 0x0150, 0x080c, 0xa3cf, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xa3cf, + 0x00ee, 0x0804, 0x7adc, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, + 0x6007, 0x003a, 0xa8a4, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a8, + 0x602e, 0xa8ac, 0x6016, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, + 0x8e38, 0x00ee, 0x0804, 0x7adc, 0x2061, 0x1a4f, 0x6000, 0xd084, + 0x0190, 0xd08c, 0x1904, 0x7c55, 0x0126, 0x2091, 0x8000, 0x6204, + 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x7c55, 0x012e, 0xa887, + 0x0016, 0x0804, 0x7c4e, 0xa887, 0x0007, 0x0804, 0x7c4e, 0xa868, + 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, + 0x0069, 0x0005, 0x080c, 0x77b3, 0x0040, 0x7007, 0x0003, 0x7012, + 0x2900, 0x7016, 0x701a, 0x704b, 0x7b7e, 0x0005, 0x00b6, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, + 0x1904, 0x7c00, 0x6130, 0xd194, 0x1904, 0x7c2a, 0xa87c, 0x2070, + 0x9e82, 0x1cd0, 0x0a04, 0x7bf4, 0x6064, 0x9e02, 0x1a04, 0x7bf4, + 0x7120, 0x9186, 0x0006, 0x1904, 0x7be6, 0x7010, 0x905d, 0x0904, + 0x7c00, 0xb800, 0xd0e4, 0x1904, 0x7c24, 0x2061, 0x1a4f, 0x6100, + 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, + 0x7c2d, 0xa887, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, + 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x080c, 0x5664, + 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882, 0x2e60, 0x080c, 0x8623, + 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, + 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x012e, 0x00ee, + 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887, 0x0006, 0x00be, 0x0804, + 0x7c4e, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa978, 0x080c, + 0x64fc, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, + 0x1118, 0xa887, 0x0002, 0x0490, 0xa887, 0x0008, 0x0478, 0xa887, + 0x000e, 0x0460, 0xa887, 0x0017, 0x0448, 0xa887, 0x0035, 0x0430, + 0x080c, 0x5668, 0xd0fc, 0x01e8, 0xa87c, 0x2070, 0x9e82, 0x1cd0, + 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, + 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, + 0x7000, 0x9086, 0x0007, 0x1904, 0x7b8a, 0x7003, 0x0002, 0x0804, + 0x7b8a, 0xa887, 0x0028, 0x0010, 0xa887, 0x0029, 0x012e, 0x00ee, + 0x00be, 0x0420, 0xa887, 0x002a, 0x0cc8, 0xa887, 0x0045, 0x0cb0, + 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd86f, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa888, 0x9084, 0xff00, 0x9105, 0xa88a, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0x080c, 0x1033, 0x0005, - 0x00d6, 0x080c, 0x8485, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, + 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0x080c, 0x103f, 0x0005, + 0x00d6, 0x080c, 0x861a, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, - 0x0780, 0x190c, 0x7c49, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc, + 0x0780, 0x190c, 0x7ce9, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, - 0x0780, 0x190c, 0x7c49, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, + 0x0780, 0x190c, 0x7ce9, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa78, 0x9282, 0x0004, - 0x1a04, 0x7c3a, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, + 0x1a04, 0x7cda, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, - 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ec2, 0x1118, 0x080c, 0x9f5b, - 0x05a8, 0x6212, 0xa878, 0x0002, 0x7c18, 0x7c1d, 0x7c20, 0x7c26, - 0x2019, 0x0002, 0x080c, 0xd0d7, 0x0060, 0x080c, 0xd077, 0x0048, - 0x2019, 0x0002, 0xa984, 0x080c, 0xd08f, 0x0018, 0xa984, 0x080c, - 0xd077, 0x080c, 0x9f18, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000, - 0x080c, 0x6b1d, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, + 0x1108, 0x04b0, 0x2b10, 0x080c, 0xa347, 0x1118, 0x080c, 0xa3ec, + 0x05a8, 0x6212, 0xa878, 0x0002, 0x7cb8, 0x7cbd, 0x7cc0, 0x7cc6, + 0x2019, 0x0002, 0x080c, 0xdc90, 0x0060, 0x080c, 0xdc27, 0x0048, + 0x2019, 0x0002, 0xa984, 0x080c, 0xdc42, 0x0018, 0xa984, 0x080c, + 0xdc27, 0x080c, 0xa39d, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000, + 0x080c, 0x6c02, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa88b, 0x0006, 0x0c80, 0xa88b, 0x0002, 0x0c68, 0xa88b, 0x0005, 0x0c50, 0xa88b, 0x0004, 0x0c38, 0xa88b, 0x0007, - 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7c4b, 0x0006, 0x0016, 0x2001, - 0x8003, 0x0006, 0x0804, 0x0dcd, 0x2001, 0x1833, 0x2004, 0x9005, + 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7ceb, 0x0006, 0x0016, 0x2001, + 0x8003, 0x0006, 0x0804, 0x0dcc, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, - 0x080c, 0x14d2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, - 0x781f, 0x0300, 0x00fe, 0x0005, 0x68bc, 0x90aa, 0x0005, 0x0a04, - 0x823c, 0x7d44, 0x7c40, 0x9484, 0x0fff, 0x688e, 0x9584, 0x00f6, - 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584, - 0x0700, 0x8007, 0x0804, 0x7cd0, 0x7000, 0x9084, 0xff00, 0x9086, - 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, - 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd314, 0x080c, 0x8171, - 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x81cf, - 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7d22, 0x080c, - 0x2217, 0x005e, 0x004e, 0x0020, 0x080c, 0xd314, 0x7817, 0x0140, - 0x080c, 0x72e5, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, - 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, - 0x04d1, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, - 0x0002, 0x7ce2, 0x7f8f, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9, - 0x7cd9, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, - 0x8c37, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, - 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, - 0x5607, 0x0040, 0x080c, 0x7d42, 0x0028, 0x9286, 0x8000, 0x1110, - 0x080c, 0x80bc, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, - 0x090c, 0x8c37, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, - 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, - 0x2011, 0x8048, 0x2518, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005, - 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, - 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, - 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, - 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, - 0x2011, 0x8048, 0x080c, 0x4abd, 0x002e, 0x00fe, 0x005e, 0x004e, - 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, - 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ef7, 0x688c, - 0x9082, 0x0004, 0x0a04, 0x7ef7, 0x9186, 0x0023, 0x15e8, 0x080c, - 0x815f, 0x0904, 0x7ef7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, - 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, - 0x7ef7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, - 0x0015, 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x908e, 0x0214, 0x0118, - 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9f88, 0x0804, - 0x7ef7, 0x908e, 0x0100, 0x1904, 0x7ef7, 0x7034, 0x9005, 0x1904, - 0x7ef7, 0x688c, 0x9082, 0x0008, 0x0a04, 0x7ef7, 0x2009, 0x0016, - 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x9186, 0x0022, 0x1904, 0x7ef7, - 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5, - 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6, - 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, - 0x2008, 0x080c, 0x26e8, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, - 0x080c, 0x269f, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, - 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ef7, - 0x2009, 0x0017, 0x0804, 0x7ea7, 0x908e, 0x0400, 0x1190, 0x7034, - 0x9005, 0x1904, 0x7ef7, 0x080c, 0x72e5, 0x0120, 0x2009, 0x001d, - 0x0804, 0x7ea7, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804, - 0x7ea7, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7, - 0x2009, 0x0018, 0x0804, 0x7ea7, 0x908e, 0x2010, 0x1120, 0x2009, - 0x0019, 0x0804, 0x7ea7, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, - 0x0804, 0x7ea7, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, - 0x7ef7, 0x2009, 0x001b, 0x0804, 0x7ea7, 0x908e, 0x5000, 0x1140, - 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009, 0x001c, 0x0804, 0x7ea7, - 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009, - 0x0024, 0x0804, 0x7ea7, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, - 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7ea7, - 0x080c, 0xc52f, 0x1904, 0x7ef7, 0x0804, 0x7ea5, 0x908c, 0xff00, - 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7ea7, 0x908e, - 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7ea7, 0x908e, 0x6104, - 0x1588, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9092, - 0x0401, 0x1a04, 0x7ef7, 0x9094, 0x0003, 0x1904, 0x7ef7, 0x6a8c, - 0x9212, 0x0a04, 0x7ef7, 0x9082, 0x0004, 0x0904, 0x7ef7, 0x8004, - 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x080c, - 0x4abd, 0x8108, 0x0f04, 0x7e6d, 0x9186, 0x0280, 0x1d98, 0x2504, - 0x8000, 0x202a, 0x2009, 0x0260, 0x0c68, 0x202b, 0x0000, 0x2009, - 0x0023, 0x04a8, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0478, - 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0448, 0x908e, 0x1000, - 0x1118, 0x2009, 0x004e, 0x0418, 0x908e, 0x6300, 0x1118, 0x2009, - 0x004a, 0x00e8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009, - 0x004f, 0x00a8, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009, - 0x0050, 0x0068, 0x908e, 0x7d00, 0x1118, 0x2009, 0x0053, 0x0038, - 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1904, - 0x7efa, 0x080c, 0x63c1, 0x1904, 0x7efa, 0xbe12, 0xbd16, 0x001e, - 0x0016, 0x080c, 0x72e5, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000, - 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040, - 0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120, - 0x9584, 0x00ff, 0xb8ae, 0x0080, 0xb8ac, 0x9005, 0x1168, 0x9186, - 0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084, - 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ec2, 0x01c8, 0x2b08, - 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, - 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9f88, 0x00ce, - 0x00be, 0x0005, 0x001e, 0x0cd8, 0x9085, 0x0001, 0x001e, 0x0cb8, - 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, - 0x4abd, 0x080c, 0x9f5b, 0x0d70, 0x2b08, 0x6112, 0x6023, 0x0004, - 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, - 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, - 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, - 0x8718, 0x0880, 0x00b6, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, - 0x00ff, 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, - 0x2009, 0x007f, 0x0804, 0x7f87, 0x9596, 0xfffe, 0x1120, 0x2009, - 0x007e, 0x0804, 0x7f87, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, - 0x04f0, 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, - 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, - 0x20a9, 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, - 0x82ff, 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, - 0xbf10, 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, - 0x00b0, 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, - 0x0118, 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7f5c, - 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, - 0x00de, 0x00ee, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x2001, + 0x080c, 0x14e7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, + 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7d6e, + 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x839e, 0x7d44, 0x7c40, 0x9484, + 0x0fff, 0x688e, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, + 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7d75, + 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, + 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, + 0x080c, 0xe0a1, 0x080c, 0x82d3, 0x7817, 0x0140, 0x00a8, 0x9584, + 0x0076, 0x1118, 0x080c, 0x8331, 0x19c0, 0xd5a4, 0x0148, 0x0046, + 0x0056, 0x080c, 0x7dcd, 0x080c, 0x225f, 0x005e, 0x004e, 0x0020, + 0x080c, 0xe0a1, 0x7817, 0x0140, 0x080c, 0x7351, 0x0168, 0x2001, + 0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110, + 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7dae, 0x2001, 0x19cd, + 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x0002, 0x7d87, 0x80b7, + 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7817, 0x0140, + 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x7000, + 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9286, 0x2000, 0x1150, + 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x56c4, 0x0070, 0x080c, + 0x7ded, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7fde, 0x0028, + 0x9286, 0x8000, 0x1110, 0x080c, 0x81ec, 0x7817, 0x0140, 0x2001, + 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x2001, 0x1810, + 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, + 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b6d, + 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, + 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, + 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, + 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, + 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b6d, 0x002e, + 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, + 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, + 0x1904, 0x7fab, 0x688c, 0x9082, 0x0004, 0x0a04, 0x7fab, 0x9186, + 0x0023, 0x15e8, 0x080c, 0x8292, 0x0904, 0x7fab, 0x6120, 0x9186, + 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, + 0x9186, 0x000a, 0x1904, 0x7fab, 0x7124, 0x610a, 0x7030, 0x908e, + 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xa419, 0x0804, 0x7fab, + 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, + 0x080c, 0xa419, 0x0804, 0x7fab, 0x908e, 0x0100, 0x1904, 0x7fab, + 0x7034, 0x9005, 0x1904, 0x7fab, 0x688c, 0x9082, 0x0008, 0x0a04, + 0x7fab, 0x2009, 0x0016, 0x080c, 0xa419, 0x0804, 0x7fab, 0x9186, + 0x0022, 0x1904, 0x7fab, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, + 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, + 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, + 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2751, 0x7932, 0x7936, + 0x001e, 0x000e, 0x00fe, 0x080c, 0x2708, 0x695a, 0x703c, 0x00e6, + 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, + 0x9005, 0x1904, 0x7fab, 0x2009, 0x0017, 0x0804, 0x7f5b, 0x908e, + 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7fab, 0x080c, 0x7351, + 0x0120, 0x2009, 0x001d, 0x0804, 0x7f5b, 0x68d8, 0xc0a5, 0x68da, + 0x2009, 0x0030, 0x0804, 0x7f5b, 0x908e, 0x0500, 0x1140, 0x7034, + 0x9005, 0x1904, 0x7fab, 0x2009, 0x0018, 0x0804, 0x7f5b, 0x908e, + 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7f5b, 0x908e, 0x2110, + 0x1120, 0x2009, 0x001a, 0x0804, 0x7f5b, 0x908e, 0x5200, 0x1140, + 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009, 0x001b, 0x0804, 0x7f5b, + 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009, + 0x001c, 0x0804, 0x7f5b, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, + 0x0804, 0x7f5b, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, + 0x7fab, 0x2009, 0x0024, 0x0804, 0x7f5b, 0x908c, 0xff00, 0x918e, + 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, + 0x0904, 0x7f5b, 0x080c, 0xd02f, 0x1904, 0x7fab, 0x0804, 0x7f59, + 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, + 0x7f5b, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7f5b, + 0x908e, 0x6104, 0x1598, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, + 0x2204, 0x9092, 0x0401, 0x1a04, 0x7fab, 0x9094, 0x0003, 0x1904, + 0x7fab, 0x6a8c, 0x9212, 0x0a04, 0x7fab, 0x9082, 0x0004, 0x0904, + 0x7fab, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, + 0x0046, 0x2124, 0x080c, 0x4b6d, 0x004e, 0x8108, 0x0f04, 0x7f21, + 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, + 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x04a8, 0x908e, 0x6000, + 0x1118, 0x2009, 0x003f, 0x0478, 0x908e, 0x7800, 0x1118, 0x2009, + 0x0045, 0x0448, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x0418, + 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00e8, 0x908c, 0xff00, + 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x00a8, 0x908c, 0xff00, + 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0068, 0x908e, 0x7d00, + 0x1118, 0x2009, 0x0053, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, + 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, + 0x220c, 0x080c, 0x2708, 0x1904, 0x7fae, 0x080c, 0x6497, 0x1904, + 0x7fae, 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x7351, 0x01c0, + 0x68d8, 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, + 0x9084, 0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c, + 0x9506, 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb8b2, 0x0080, + 0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606, + 0x1138, 0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, + 0x080c, 0xa347, 0x01c8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, + 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, + 0x001e, 0x080c, 0xa419, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, + 0x9085, 0x0001, 0x001e, 0x0cb8, 0x2001, 0x180e, 0x2004, 0xd0ec, + 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d, 0x080c, 0xa3ec, 0x0d70, + 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016, + 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009, + 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f, + 0x0009, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0880, 0x080c, 0x83bd, + 0x1158, 0x080c, 0x3226, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, + 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, + 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x1538, 0x080c, + 0x8292, 0x0904, 0x804c, 0x7124, 0x610a, 0x688c, 0x9082, 0x0004, + 0x0a04, 0x804c, 0x7030, 0x908e, 0x0200, 0x1148, 0x7034, 0x9005, + 0x1904, 0x804c, 0x2009, 0x0015, 0x080c, 0xa419, 0x04e8, 0x908e, + 0x0100, 0x15d0, 0x7034, 0x9005, 0x15b8, 0x688c, 0x9082, 0x0008, + 0x0698, 0x2009, 0x0016, 0x080c, 0xa419, 0x0470, 0x9186, 0x0032, + 0x1558, 0x7030, 0x908e, 0x1400, 0x1538, 0x688c, 0x9082, 0x0010, + 0x0618, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, + 0x220c, 0x080c, 0x2708, 0x11b8, 0x080c, 0x6497, 0x11a0, 0xbe12, + 0xbd16, 0x080c, 0xa347, 0x0178, 0x2b08, 0x6112, 0x080c, 0xc640, + 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xa419, 0x080c, + 0x8e38, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, + 0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, + 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, + 0x007f, 0x0804, 0x80ae, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, + 0x0804, 0x80ae, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, + 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026, + 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, + 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, + 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, + 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, + 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, + 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8083, 0x82ff, + 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, + 0x00ee, 0x004e, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc0, 0x2001, 0x1836, 0x200c, 0x9184, 0x0080, 0x0110, 0xd18c, 0x0138, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140, - 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, 0x7fb7, - 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fc0, 0x7ff3, 0x8081, 0x7fb7, - 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7817, - 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, - 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0003, - 0x11e8, 0x9c8a, 0x1cc8, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, + 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x80df, + 0x80df, 0x80df, 0x82a4, 0x80df, 0x80e8, 0x811b, 0x81af, 0x80df, + 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x7817, + 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, + 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0007, + 0x11e8, 0x9c8a, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c, 0xb914, 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280, - 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9f88, 0x7817, 0x0140, - 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005, - 0x080c, 0x826a, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904, - 0x8054, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, - 0xff00, 0x15b8, 0x81ff, 0x15a8, 0x9080, 0x31cc, 0x200d, 0x918c, - 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8054, 0x9484, - 0x0fff, 0x9082, 0x0020, 0x0a04, 0x805f, 0x080c, 0x63c1, 0x15e0, - 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00, - 0x9286, 0x0600, 0x1180, 0x080c, 0x9ec2, 0x05e0, 0x2b08, 0x6112, - 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x2009, 0x0044, - 0x080c, 0xc7a6, 0x0408, 0x080c, 0x6746, 0x1138, 0xb807, 0x0606, - 0x0c50, 0x190c, 0x7f2a, 0x11c0, 0x08c0, 0x080c, 0x9ec2, 0x2b08, - 0x0198, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, - 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x7817, 0x0140, 0x2001, 0x19cd, - 0x2004, 0x9005, 0x090c, 0x8c37, 0x00ce, 0x00be, 0x0005, 0x080c, - 0x826a, 0x0c90, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, - 0x8049, 0x080c, 0x4abd, 0x080c, 0x9f5b, 0x0d30, 0x2b08, 0x6112, - 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x6017, 0xf300, - 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, 0x8c37, - 0x0898, 0x00b6, 0x7110, 0xd1bc, 0x0500, 0x7020, 0x2060, 0x9c84, - 0x0003, 0x11d8, 0x9c82, 0x1cc8, 0x02c0, 0x6864, 0x9c02, 0x12a8, - 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1168, - 0x700c, 0xb914, 0x9106, 0x1148, 0x9484, 0x0fff, 0x9082, 0x000c, - 0x0270, 0x2009, 0x0045, 0x080c, 0x9f88, 0x7817, 0x0140, 0x2001, - 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005, 0x080c, - 0x826a, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005, - 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x825b, 0x1180, 0x080c, - 0x318a, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, + 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xa419, 0x7817, 0x0140, + 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, + 0x080c, 0x83cc, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904, + 0x8182, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, + 0xff00, 0x15e8, 0x81ff, 0x15d8, 0x9080, 0x3268, 0x200d, 0x918c, + 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8182, 0x9484, + 0x0fff, 0x9082, 0x0020, 0x0a04, 0x818d, 0x080c, 0x6497, 0x1904, + 0x8182, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04, 0x9294, + 0xff00, 0x9286, 0x0600, 0x11a8, 0x080c, 0xa347, 0x0904, 0x8190, + 0x2b08, 0x7028, 0x6046, 0x702c, 0x604a, 0x6112, 0x6023, 0x0006, + 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xd2ad, + 0x0408, 0x080c, 0x686d, 0x1138, 0xb807, 0x0606, 0x0c28, 0x190c, + 0x8050, 0x11c0, 0x0890, 0x080c, 0xa347, 0x2b08, 0x0198, 0x6112, + 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, + 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, + 0x080c, 0x8e38, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, + 0x090c, 0x8e38, 0x00ce, 0x00be, 0x0005, 0x080c, 0x83cc, 0x0c90, + 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, + 0x4b6d, 0x080c, 0xa3ec, 0x0d30, 0x2b08, 0x6112, 0x6023, 0x0006, + 0x7120, 0x610a, 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001, + 0x6007, 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0898, 0x00b6, + 0x7110, 0xd1bc, 0x0510, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11e8, + 0x9c82, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, 0x9084, + 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c, 0xb914, + 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280, 0x7124, + 0x610a, 0x2009, 0x0045, 0x080c, 0xa419, 0x7817, 0x0140, 0x2001, + 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, 0x080c, + 0x83cc, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005, + 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x83bd, 0x1180, 0x080c, + 0x3226, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005, - 0x80d6, 0x80d7, 0x80d6, 0x80d6, 0x8139, 0x814c, 0x0005, 0x00b6, - 0x700c, 0x7108, 0x080c, 0x269f, 0x1904, 0x8137, 0x080c, 0x63c1, - 0x1904, 0x8137, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0528, 0x702c, - 0xd084, 0x1904, 0x8137, 0x080c, 0x6746, 0x0148, 0x9086, 0x0004, - 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, - 0x080c, 0x815f, 0x00ce, 0x05d8, 0x080c, 0x9ec2, 0x2b08, 0x05b8, - 0x6112, 0x080c, 0xbc97, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, - 0x0088, 0x080c, 0x9f88, 0x0458, 0x080c, 0x6746, 0x0148, 0x9086, - 0x0004, 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1180, - 0x080c, 0x9ec2, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbc97, 0x6023, - 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9f88, 0x0078, - 0x080c, 0x9ec2, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbc97, 0x6023, - 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9f88, 0x00be, - 0x0005, 0x688c, 0x9082, 0x000c, 0x0270, 0x7110, 0xd1bc, 0x0158, - 0x00f1, 0x0148, 0x080c, 0x80b2, 0x1130, 0x7124, 0x610a, 0x2009, - 0x0089, 0x080c, 0x9f88, 0x0005, 0x688c, 0x9082, 0x0004, 0x0270, - 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x80b2, 0x1130, - 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x9f88, 0x0005, 0x7020, - 0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82, 0x1cc8, 0x0240, 0x2001, - 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, - 0x0ce8, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, - 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, - 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, - 0xc000, 0x05d0, 0x080c, 0x9ec2, 0x05b8, 0x0066, 0x00c6, 0x0046, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x15a0, - 0x080c, 0x63c1, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, - 0x6012, 0x080c, 0xbc97, 0x080c, 0x1001, 0x0510, 0x2900, 0x602a, - 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8, 0x001c, 0x20a9, - 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, - 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x00fe, 0x009e, 0x00ce, 0x0005, - 0x080c, 0x9f18, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, - 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, - 0x1904, 0x8226, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, - 0x9005, 0x1904, 0x8228, 0x7030, 0x908e, 0x0400, 0x0904, 0x8228, - 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, - 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, - 0x080c, 0x6704, 0x0588, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, - 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105, - 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, - 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, - 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x815f, - 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, - 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, 0x0300, 0x0118, - 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, - 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079, 0x0200, 0x7800, - 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, - 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, - 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, - 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836, 0x200c, 0x9184, - 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, 0x0005, 0x9085, - 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104, 0x8000, 0x0208, - 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003, 0x0003, 0x700f, - 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, 0x1cc8, 0x7007, - 0x0000, 0x7026, 0x702b, 0x9639, 0x7032, 0x703a, 0x703f, 0x0064, - 0x7037, 0x96a1, 0x7047, 0xffff, 0x704a, 0x704f, 0x5434, 0x7052, - 0x7063, 0x843b, 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x7042, - 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0, 0x0005, 0x2071, - 0x19d7, 0x1d04, 0x834d, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e, - 0x1500, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, - 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, - 0x0dc4, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000, - 0x7048, 0x900d, 0x0148, 0x8109, 0x714a, 0x1130, 0x704c, 0x080f, - 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020, - 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186, - 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, - 0x7030, 0x900d, 0x05a8, 0x702c, 0x8001, 0x702e, 0x1588, 0x0016, - 0x2009, 0x0306, 0x210c, 0x9184, 0x0030, 0x01e8, 0x9184, 0x0048, - 0x9086, 0x0008, 0x11c0, 0x7038, 0x9005, 0x01a8, 0x8001, 0x703a, - 0x1190, 0x080c, 0x72e5, 0x0178, 0x00e6, 0x2071, 0x19c4, 0x080c, - 0x971d, 0x00ee, 0x1140, 0x2009, 0x1a61, 0x2104, 0x8000, 0x0208, - 0x200a, 0x001e, 0x0068, 0x001e, 0x702f, 0x0009, 0x8109, 0x7132, - 0x0128, 0x9184, 0x007f, 0x090c, 0x97ec, 0x0010, 0x7034, 0x080f, - 0x7044, 0x9005, 0x0118, 0x0310, 0x8001, 0x7046, 0x7054, 0x900d, - 0x0168, 0x7050, 0x8001, 0x7052, 0x1148, 0x7053, 0x0009, 0x8109, - 0x7156, 0x1120, 0x7158, 0x7156, 0x7060, 0x080f, 0x7018, 0x900d, - 0x01d8, 0x0016, 0x7078, 0x900d, 0x0158, 0x7074, 0x8001, 0x7076, - 0x1138, 0x7077, 0x0009, 0x8109, 0x717a, 0x1110, 0x707c, 0x080f, - 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, - 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8375, - 0x8376, 0x83dc, 0x00e6, 0x2071, 0x19d7, 0x7018, 0x9005, 0x1120, - 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, - 0x2071, 0x19d7, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x707a, - 0x707e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19d7, 0xb888, - 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, - 0x0126, 0x2091, 0x8000, 0x080c, 0x6411, 0x1904, 0x83d1, 0xb888, - 0x8001, 0x0230, 0xb88a, 0x1120, 0x0016, 0x080c, 0x8c37, 0x001e, - 0x901e, 0xb84c, 0x904d, 0x0904, 0x83d1, 0xa864, 0x9005, 0x0118, - 0x8001, 0xa866, 0x0128, 0x2918, 0xa800, 0x904d, 0x05d0, 0x0ca8, - 0xa888, 0x90a2, 0x199a, 0x0270, 0x9082, 0x1999, 0xa88a, 0x90a2, - 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8023, 0x8423, 0x9420, - 0xac66, 0x0c48, 0xac00, 0xa803, 0x0000, 0x83ff, 0x1150, 0xb850, - 0x9906, 0x1128, 0xb84f, 0x0000, 0xb853, 0x0000, 0x0050, 0xbc4e, - 0x0040, 0x0096, 0x2348, 0xac02, 0x009e, 0xb850, 0x9906, 0x1108, - 0xbb52, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0x0016, - 0x0036, 0x0046, 0x080c, 0x6b1d, 0x004e, 0x003e, 0x001e, 0x2400, - 0x0820, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007, - 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091, - 0x8000, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120, - 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xb955, - 0x01b0, 0x6014, 0x2048, 0xa888, 0x908a, 0x199a, 0x0280, 0x9082, - 0x1999, 0xa88a, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, - 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0xd0e4, 0x0110, 0x080c, - 0xb68c, 0x012e, 0x9c88, 0x000c, 0x7116, 0x2001, 0x1819, 0x2004, - 0x9102, 0x0220, 0x7017, 0x1cc8, 0x7007, 0x0000, 0x0005, 0x00e6, - 0x2071, 0x19d7, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, - 0x2001, 0x19e0, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, - 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19e3, 0x2013, - 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x711a, 0x721e, 0x700b, - 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x705c, 0x8000, 0x705e, - 0x2001, 0x19e7, 0x2044, 0xa070, 0x9086, 0x0000, 0x0150, 0x7070, - 0xa09e, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092, 0x080c, - 0x10eb, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, - 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x829f, - 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, - 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x717a, 0x727e, - 0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7, - 0x707c, 0x9206, 0x1110, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005, - 0x00c6, 0x2061, 0x1a4f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, - 0x8003, 0x8003, 0x9080, 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a, - 0x199a, 0x1630, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014, - 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, - 0x01a8, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0x908c, - 0x00c0, 0x918e, 0x00c0, 0x0904, 0x84ec, 0xd0b4, 0x1160, 0xd0bc, - 0x1528, 0x2009, 0x0006, 0x080c, 0x8509, 0x0005, 0x900e, 0x0c68, - 0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0138, 0x908c, 0x0003, 0x0120, - 0x918e, 0x0003, 0x1904, 0x8503, 0x2009, 0x1880, 0x2104, 0xd084, - 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0x9f88, 0x0005, - 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9f88, 0xd0fc, 0x0130, - 0x908c, 0x0003, 0x0118, 0x918e, 0x0003, 0x1528, 0x0076, 0x00f6, - 0x2c78, 0x080c, 0x1679, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, - 0x0042, 0x080c, 0x9f88, 0x0005, 0xd0fc, 0x0160, 0x9084, 0x0003, - 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, - 0x9f88, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, - 0x080c, 0x9f88, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009, - 0x0001, 0x0096, 0x080c, 0xb955, 0x0518, 0x6014, 0x2048, 0xa986, - 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c, 0x8100, - 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200, 0xd28c, - 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x6959, - 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x848e, 0x007e, - 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x81ff, - 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, - 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a, - 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, - 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039, - 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, - 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8556, 0x0028, 0x911a, - 0x2308, 0x8210, 0x1f04, 0x8556, 0x0006, 0x3200, 0x9084, 0xefff, - 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200, - 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19c4, - 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156, 0x0146, - 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x0401, - 0x080c, 0x9cf6, 0x00e9, 0x080c, 0x9cf9, 0x00d1, 0x080c, 0x9cfc, - 0x00b9, 0x080c, 0x9cff, 0x00a1, 0x080c, 0x9d02, 0x0089, 0x080c, - 0x9d05, 0x0071, 0x080c, 0x9d08, 0x0059, 0x01de, 0x014e, 0x015e, - 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005, - 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, - 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x85cb, - 0x85ef, 0x8630, 0x85d1, 0x85ef, 0x85cb, 0x85c9, 0x85c7, 0x080c, - 0x0dc4, 0x00ce, 0x0005, 0x080c, 0x8420, 0x080c, 0x8c37, 0x00ce, - 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x5d5f, - 0x080c, 0x835e, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a, - 0x080c, 0x5d9f, 0x0c88, 0x62c0, 0x080c, 0x9d0f, 0x080c, 0x5d5f, - 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c, - 0x8420, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, 0x0000, - 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c, 0x9f88, - 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x7828, - 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x29fa, - 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dc4, - 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8c37, 0x0c00, - 0x080c, 0x95ff, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0x9d0f, - 0x080c, 0xd36d, 0x2009, 0x0014, 0x080c, 0x9f88, 0x00ce, 0x0880, - 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b, - 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c, - 0x9fda, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005, - 0x090c, 0x0dc4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a, - 0x00de, 0x00ce, 0x00be, 0x080c, 0x29fa, 0x02f0, 0x00b6, 0x00c6, - 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc4, 0xb800, 0xc0dc, 0xb802, - 0x7924, 0x2160, 0x080c, 0x9f18, 0xb93c, 0x81ff, 0x090c, 0x0dc4, - 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce, - 0x00be, 0x080c, 0x8c37, 0x0868, 0x080c, 0x95ff, 0x0850, 0x2011, - 0x0130, 0x2214, 0x080c, 0x9d0f, 0x080c, 0xd36d, 0x7824, 0x9065, - 0x2009, 0x0014, 0x080c, 0x9f88, 0x00de, 0x00ce, 0x00be, 0x0804, - 0x8641, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d94, - 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205, - 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x9f88, - 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8, 0x793c, - 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946, - 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, - 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084, - 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009, - 0x004a, 0x080c, 0x9f88, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880, - 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, - 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, - 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19c4, - 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, - 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8c37, 0x00de, 0x0005, - 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, - 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, - 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, - 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, - 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, - 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, - 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, - 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, - 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, - 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, - 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, - 0x87c4, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x87bf, 0x87ff, - 0x0120, 0x6024, 0x9106, 0x1904, 0x87bf, 0x703c, 0x9c06, 0x1178, - 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x7033, 0x0000, 0x9006, - 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, - 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x080c, 0xb955, 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086, - 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30, 0xa86b, - 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, - 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x007e, 0x003e, 0x001e, - 0x080c, 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x0804, 0x875e, 0x2c78, - 0x600c, 0x2060, 0x0804, 0x875e, 0x85ff, 0x0120, 0x0036, 0x080c, - 0x8d06, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, - 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, - 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, - 0x080c, 0xd242, 0x080c, 0xd101, 0x007e, 0x003e, 0x001e, 0x0890, - 0x6020, 0x9086, 0x000a, 0x0904, 0x87a9, 0x0804, 0x87a2, 0x0006, - 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, - 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0578, 0x600c, 0x0006, - 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, - 0x080c, 0x9964, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, - 0x7b4a, 0x003e, 0x080c, 0xb955, 0x01a0, 0x6014, 0x2048, 0x6020, - 0x9086, 0x0003, 0x11e0, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30, - 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, - 0xbb39, 0x080c, 0x9f42, 0x000e, 0x0878, 0x7e3a, 0x7e36, 0x012e, + 0x8206, 0x8207, 0x8206, 0x8206, 0x826c, 0x827f, 0x0005, 0x00b6, + 0x700c, 0x7108, 0x080c, 0x2708, 0x1904, 0x826a, 0x080c, 0x6497, + 0x1904, 0x826a, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0540, 0x702c, + 0xd084, 0x1120, 0xb800, 0xd0bc, 0x1904, 0x826a, 0x080c, 0x686d, + 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118, 0x9086, + 0x0004, 0x1588, 0x00c6, 0x080c, 0x8292, 0x00ce, 0x05d8, 0x080c, + 0xa347, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xc640, 0x6023, 0x0002, + 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xa419, 0x0458, 0x080c, + 0x686d, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118, + 0x9086, 0x0004, 0x1180, 0x080c, 0xa347, 0x2b08, 0x01d8, 0x6112, + 0x080c, 0xc640, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, + 0x080c, 0xa419, 0x0078, 0x080c, 0xa347, 0x2b08, 0x0158, 0x6112, + 0x080c, 0xc640, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, + 0x080c, 0xa419, 0x00be, 0x0005, 0x688c, 0x9082, 0x000c, 0x0270, + 0x7110, 0xd1bc, 0x0158, 0x00f1, 0x0148, 0x080c, 0x81e2, 0x1130, + 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xa419, 0x0005, 0x688c, + 0x9082, 0x0004, 0x0270, 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, + 0x080c, 0x81e2, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, + 0xa419, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82, + 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, + 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11f0, + 0x7024, 0x2060, 0x9c84, 0x0007, 0x11c8, 0x9c82, 0x1cd0, 0x02b0, + 0x6864, 0x9c02, 0x1298, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, + 0xb910, 0x9106, 0x1158, 0x700c, 0xb914, 0x9106, 0x1138, 0x698c, + 0x81ff, 0x1170, 0x2009, 0x0051, 0x080c, 0xa419, 0x7817, 0x0140, + 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, + 0x080c, 0x83cc, 0x0c98, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, + 0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, + 0x0213, 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, + 0xf000, 0x9086, 0xc000, 0x05d0, 0x080c, 0xa347, 0x05b8, 0x0066, + 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, + 0x2708, 0x15a0, 0x080c, 0x6497, 0x1588, 0xbe12, 0xbd16, 0x2b00, + 0x004e, 0x00ce, 0x6012, 0x080c, 0xc640, 0x080c, 0x100d, 0x0510, + 0x2900, 0x605a, 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8, + 0x001c, 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, + 0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, + 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00fe, 0x009e, + 0x00ce, 0x0005, 0x080c, 0xa39d, 0x006e, 0x0cc0, 0x004e, 0x00ce, + 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, + 0x9086, 0x2000, 0x1904, 0x8388, 0x9186, 0x0022, 0x15f0, 0x2001, + 0x0111, 0x2004, 0x9005, 0x1904, 0x838a, 0x7030, 0x908e, 0x0400, + 0x0904, 0x838a, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, + 0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, + 0xd1a4, 0x1580, 0x080c, 0x682b, 0x0588, 0x68ac, 0x9084, 0x00ff, + 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, + 0xff00, 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, + 0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, + 0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, + 0x080c, 0x8292, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, + 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, + 0x0300, 0x0118, 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004, + 0x9084, 0x0009, 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079, + 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, + 0x2079, 0x1800, 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, + 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, + 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836, + 0x200c, 0x9184, 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, + 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104, + 0x8000, 0x0208, 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003, + 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, + 0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x98e7, 0x7032, 0x703a, + 0x703f, 0x0064, 0x7037, 0x994f, 0x7047, 0xffff, 0x704a, 0x704f, + 0x54f1, 0x7052, 0x7063, 0x85a7, 0x080c, 0x1026, 0x090c, 0x0dc3, + 0x2900, 0x7042, 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0, + 0x0005, 0x2071, 0x19d7, 0x1d04, 0x84b1, 0x2091, 0x6000, 0x700c, + 0x8001, 0x700e, 0x1510, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158, + 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, + 0x0000, 0x080c, 0x0dc3, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, + 0x2091, 0x8000, 0x080c, 0x85ec, 0x7048, 0x900d, 0x0148, 0x8109, + 0x714a, 0x1130, 0x704c, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, + 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, + 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, + 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x05a8, 0x702c, + 0x8001, 0x702e, 0x1588, 0x0016, 0x2009, 0x0306, 0x210c, 0x9184, + 0x0030, 0x01e8, 0x9184, 0x0048, 0x9086, 0x0008, 0x11c0, 0x7038, + 0x9005, 0x01a8, 0x8001, 0x703a, 0x1190, 0x080c, 0x7351, 0x0178, + 0x00e6, 0x2071, 0x19c4, 0x080c, 0x99cb, 0x00ee, 0x1140, 0x2009, + 0x1a61, 0x2104, 0x8000, 0x0208, 0x200a, 0x001e, 0x0068, 0x001e, + 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, + 0x9a9a, 0x0010, 0x7034, 0x080f, 0x7044, 0x9005, 0x0118, 0x0310, + 0x8001, 0x7046, 0x7054, 0x900d, 0x0168, 0x7050, 0x8001, 0x7052, + 0x1148, 0x7053, 0x0009, 0x8109, 0x7156, 0x1120, 0x7158, 0x7156, + 0x7060, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7078, 0x900d, + 0x0158, 0x7074, 0x8001, 0x7076, 0x1138, 0x7077, 0x0009, 0x8109, + 0x717a, 0x1110, 0x707c, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, + 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, + 0x012e, 0x7004, 0x0002, 0x84d9, 0x84da, 0x8540, 0x00e6, 0x2071, + 0x19d7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, + 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7, 0x701c, 0x9206, + 0x1120, 0x701a, 0x701e, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005, + 0x00e6, 0x2071, 0x19d7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, + 0x0005, 0x0005, 0x00b6, 0x7110, 0x0126, 0x2091, 0x8000, 0x080c, + 0x64fc, 0x1904, 0x8535, 0xb888, 0x8001, 0x0230, 0xb88a, 0x1120, + 0x0016, 0x080c, 0x8e38, 0x001e, 0x901e, 0xb84c, 0x904d, 0x0904, + 0x8535, 0xa864, 0x9005, 0x0118, 0x8001, 0xa866, 0x0128, 0x2918, + 0xa800, 0x904d, 0x05d0, 0x0ca8, 0xa888, 0x90a2, 0x199a, 0x0270, + 0x9082, 0x1999, 0xa88a, 0x90a2, 0x199a, 0x0210, 0x2001, 0x1999, + 0x8003, 0x8023, 0x8423, 0x9420, 0xac66, 0x0c48, 0xac00, 0xa803, + 0x0000, 0x83ff, 0x1150, 0xb850, 0x9906, 0x1128, 0xb84f, 0x0000, + 0xb853, 0x0000, 0x0050, 0xbc4e, 0x0040, 0x0096, 0x2348, 0xac02, + 0x009e, 0xb850, 0x9906, 0x1108, 0xbb52, 0xa86b, 0x0103, 0xa87f, + 0x0006, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0046, 0x080c, 0x6c02, + 0x004e, 0x003e, 0x001e, 0x2400, 0x0820, 0x012e, 0x8108, 0x9182, + 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, + 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, + 0x8001, 0x6042, 0x1110, 0x080c, 0xc4d1, 0x6018, 0x9005, 0x0528, + 0x8001, 0x601a, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186, + 0x0006, 0x11c8, 0x080c, 0xc1cd, 0x01b0, 0x6014, 0x2048, 0xa888, + 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa88a, 0x908a, 0x199a, + 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, + 0xa880, 0xd0e4, 0x0110, 0x080c, 0xbeae, 0x012e, 0x9c88, 0x0018, + 0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, + 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7027, 0x07d0, + 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19e0, 0x2003, 0x0000, + 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7132, 0x702f, 0x0009, 0x00ee, + 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, + 0x19d7, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, + 0x0026, 0x705c, 0x8000, 0x705e, 0x2001, 0x19e7, 0x2044, 0xa070, + 0x9086, 0x0000, 0x0150, 0x7070, 0xa09e, 0x706c, 0xa09a, 0x7068, + 0xa096, 0x7064, 0xa092, 0x080c, 0x10f7, 0x002e, 0x008e, 0x0005, + 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, + 0x00f6, 0x0156, 0x080c, 0x8401, 0x015e, 0x00fe, 0x00ee, 0x00de, + 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, + 0x2071, 0x19d7, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005, + 0x00e6, 0x0006, 0x2071, 0x19d7, 0x707c, 0x9206, 0x1110, 0x707a, + 0x707e, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e4, 0xd1e4, + 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a50, 0x6870, 0x9202, 0x0288, + 0x8117, 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109, + 0x9184, 0x0007, 0x0110, 0x69e6, 0x0070, 0x8107, 0x9084, 0x0007, + 0x910d, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, + 0x68e6, 0x080c, 0x0eed, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a4f, + 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080, + 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a, 0x199a, 0x1638, 0x9005, + 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014, 0x00ce, 0x9005, 0x1130, + 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b, + 0x810b, 0x9108, 0x611a, 0xa880, 0x908c, 0x00c0, 0x918e, 0x00c0, + 0x0904, 0x86ad, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8686, 0x2009, + 0x0006, 0x080c, 0x86da, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999, + 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, + 0x1904, 0x86d4, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024, + 0xd0d4, 0x11e8, 0x2009, 0x1880, 0x2104, 0xd084, 0x1138, 0x87ff, + 0x1120, 0x2009, 0x0043, 0x0804, 0xa419, 0x0005, 0x87ff, 0x1de8, + 0x2009, 0x0042, 0x0804, 0xa419, 0x6110, 0x00b6, 0x2158, 0xb900, + 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4, + 0x6026, 0xa894, 0x602e, 0xa890, 0x6032, 0x08e0, 0xd0fc, 0x0160, + 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x86d4, 0x908c, + 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c, + 0x16c1, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c, + 0xa419, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, + 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c, + 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002, + 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xa419, 0x0005, + 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xa419, + 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, + 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005, + 0x2009, 0x0001, 0x0096, 0x080c, 0xc1cd, 0x0518, 0x6014, 0x2048, + 0xa986, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c, + 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200, + 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, + 0x6a41, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x8623, + 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000, + 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, + 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, + 0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, + 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, + 0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, + 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8727, 0x0028, + 0x911a, 0x2308, 0x8210, 0x1f04, 0x8727, 0x0006, 0x3200, 0x9084, + 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, + 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, + 0x19c4, 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156, + 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa190, + 0x0401, 0x080c, 0xa17b, 0x00e9, 0x080c, 0xa17e, 0x00d1, 0x080c, + 0xa181, 0x00b9, 0x080c, 0xa184, 0x00a1, 0x080c, 0xa187, 0x0089, + 0x080c, 0xa18a, 0x0071, 0x080c, 0xa18d, 0x0059, 0x01de, 0x014e, + 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, + 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, + 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, + 0x879c, 0x87c0, 0x8801, 0x87a2, 0x87c0, 0x879c, 0x879a, 0x8798, + 0x080c, 0x0dc3, 0x00ce, 0x0005, 0x080c, 0x858c, 0x080c, 0x8e38, + 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, + 0x5e1c, 0x080c, 0x84c2, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, + 0x782a, 0x080c, 0x5e5c, 0x0c88, 0x62c0, 0x080c, 0xa194, 0x080c, + 0x5e1c, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, + 0x080c, 0x858c, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, + 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013, 0x080c, + 0xa419, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc3, + 0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, + 0x2a63, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, + 0x0dc3, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8e38, + 0x0c00, 0x080c, 0x98ad, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, + 0xa194, 0x080c, 0xe0fa, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce, + 0x0880, 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, + 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013, + 0x080c, 0xa46b, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, + 0x9005, 0x090c, 0x0dc3, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, + 0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2a63, 0x02f0, 0x00b6, + 0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc3, 0xb800, 0xc0dc, + 0xb802, 0x7924, 0x2160, 0x080c, 0xa39d, 0xb93c, 0x81ff, 0x090c, + 0x0dc3, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, + 0x00ce, 0x00be, 0x080c, 0x8e38, 0x0868, 0x080c, 0x98ad, 0x0850, + 0x2011, 0x0130, 0x2214, 0x080c, 0xa194, 0x080c, 0xe0fa, 0x7824, + 0x9065, 0x2009, 0x0014, 0x080c, 0xa419, 0x00de, 0x00ce, 0x00be, + 0x0804, 0x8812, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, + 0x1ddc, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, + 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, + 0xa419, 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8, + 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, + 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, + 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, + 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, + 0x2009, 0x004a, 0x080c, 0xa419, 0x08a0, 0x7848, 0xc085, 0x784a, + 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, + 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010, + 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, + 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, + 0x19c4, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, + 0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8e38, 0x00de, + 0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, + 0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, + 0x2069, 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, + 0x08d8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, + 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008, + 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, + 0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, + 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080, + 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, + 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, + 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, + 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, + 0x0904, 0x8995, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8990, + 0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x8990, 0x703c, 0x9c06, + 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000, + 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, + 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, + 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, + 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, + 0x600f, 0x0000, 0x080c, 0xc1cd, 0x01f0, 0x6014, 0x2048, 0x6020, + 0x9086, 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03, + 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076, + 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x007e, 0x003e, + 0x001e, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x0804, 0x892f, + 0x2c78, 0x600c, 0x2060, 0x0804, 0x892f, 0x85ff, 0x0120, 0x0036, + 0x080c, 0x8f0e, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, + 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, + 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, + 0x0076, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x007e, 0x003e, 0x001e, + 0x0890, 0x6020, 0x9086, 0x000a, 0x0904, 0x897a, 0x0804, 0x8973, + 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, + 0x2091, 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0904, 0x8a15, + 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, + 0x2019, 0x0001, 0x080c, 0x9c35, 0x7833, 0x0000, 0x901e, 0x7b3e, + 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xc1cd, 0x0548, 0x6014, + 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0x3e08, 0x918e, 0x0002, + 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be, + 0xd0bc, 0x0140, 0x6040, 0x9005, 0x11a8, 0x2001, 0x1964, 0x2004, + 0x6042, 0x0080, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03, 0xa86b, + 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6bf5, 0x080c, 0xc3b4, + 0x080c, 0xa3cf, 0x000e, 0x0804, 0x89cd, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1118, 0x080c, 0xd101, 0x0c58, 0x6020, 0x9086, - 0x000a, 0x0d00, 0x08c0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, - 0x080c, 0x892e, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, - 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x89c5, 0x080c, 0x8a4f, + 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x6020, 0x9086, + 0x000a, 0x09f8, 0x08b8, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, + 0x080c, 0x8b16, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, + 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x8bad, 0x080c, 0x8c3d, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, - 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x88f3, 0x6010, - 0x2058, 0xb8a0, 0x9206, 0x1904, 0x88ee, 0x88ff, 0x0120, 0x6024, - 0x9106, 0x1904, 0x88ee, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100, - 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c, - 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, + 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x8adb, 0x6010, + 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8ad6, 0x88ff, 0x0120, 0x6054, + 0x9106, 0x1904, 0x8ad6, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100, + 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c, + 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, - 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, + 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, - 0x630a, 0x0804, 0x88ee, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, + 0x630a, 0x0804, 0x8ad6, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, - 0xb955, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xbb56, - 0x1118, 0x080c, 0xa717, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b, - 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xbc3f, 0x080c, 0xd242, - 0x080c, 0x6b1d, 0x008e, 0x003e, 0x001e, 0x080c, 0xbb39, 0x080c, - 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804, 0x886c, 0x2c78, 0x600c, - 0x2060, 0x0804, 0x886c, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, + 0xc1cd, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xc3d1, + 0x1118, 0x080c, 0xadb3, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b, + 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xc4ba, 0x080c, 0xdfcf, + 0x080c, 0x6c02, 0x008e, 0x003e, 0x001e, 0x080c, 0xc3b4, 0x080c, + 0xa3cf, 0x080c, 0x9cd9, 0x00ce, 0x0804, 0x8a54, 0x2c78, 0x600c, + 0x2060, 0x0804, 0x8a54, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, - 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xd242, 0x080c, - 0xd101, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xa717, 0x6020, + 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xdfcf, 0x080c, + 0xdcc3, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xadb3, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, - 0x0904, 0x88d4, 0x9086, 0x008b, 0x0904, 0x88d4, 0x0840, 0x6020, + 0x0904, 0x8abc, 0x9086, 0x008b, 0x0904, 0x8abc, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, - 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x88e7, 0x00b6, 0x00a6, + 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x8acf, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, - 0x2004, 0x905d, 0x0904, 0x89be, 0x00f6, 0x00e6, 0x00d6, 0x0066, + 0x2004, 0x905d, 0x0904, 0x8ba6, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19c4, 0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, - 0xb802, 0x080c, 0x6354, 0x0904, 0x89ba, 0x7624, 0x86ff, 0x0904, - 0x89a9, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, - 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x8420, 0x080c, 0x9623, - 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, + 0xb802, 0x080c, 0x642a, 0x0904, 0x8ba2, 0x7624, 0x86ff, 0x0904, + 0x8b91, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, + 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x858c, 0x080c, 0x98d1, + 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, - 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, + 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, - 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f42, 0x00ce, 0x0048, + 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa3cf, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, - 0x8961, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, - 0x080c, 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x080c, 0x9a08, - 0x0804, 0x8961, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, + 0x8b49, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, + 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x080c, 0x9cd9, + 0x0804, 0x8b49, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, - 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8a22, 0x600c, - 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1568, 0x2069, 0x0100, - 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c, - 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036, + 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8c10, 0x600c, + 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1580, 0x2069, 0x0100, + 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c, + 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, - 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, - 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, - 0x630a, 0x2c30, 0x00e0, 0x6014, 0x2048, 0x080c, 0xb953, 0x0198, - 0x6020, 0x9086, 0x0003, 0x11f0, 0x080c, 0xbb56, 0x1118, 0x080c, - 0xa717, 0x0048, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, - 0x6b1d, 0x080c, 0xbb39, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x000e, - 0x0804, 0x89cc, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, - 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd101, - 0x0c50, 0x080c, 0xa717, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, - 0x0006, 0x9086, 0x0085, 0x000e, 0x09a8, 0x9086, 0x008b, 0x0990, - 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, - 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, - 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, - 0x8abc, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, - 0xc0dc, 0xb802, 0x080c, 0x6354, 0x0904, 0x8ab9, 0x7e24, 0x86ff, - 0x0904, 0x8aac, 0x9680, 0x0005, 0x2004, 0x9906, 0x15e8, 0x00d6, - 0x2069, 0x0100, 0x68c0, 0x9005, 0x0570, 0x080c, 0x8420, 0x080c, - 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036, + 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, + 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c, 0x6823, + 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014, 0x2048, + 0x080c, 0xc1cb, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, + 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0060, 0x080c, 0x6823, 0x1168, + 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, + 0xc3b4, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x000e, 0x0804, 0x8bb4, + 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, + 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x080c, + 0xadb3, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, + 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, + 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, + 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, 0x0096, + 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x8cbd, 0xb854, + 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802, + 0x080c, 0x642a, 0x0904, 0x8cba, 0x7e24, 0x86ff, 0x0904, 0x8cad, + 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x8cad, 0x00d6, 0x2069, + 0x0100, 0x68c0, 0x9005, 0x0904, 0x8ca4, 0x080c, 0x858c, 0x080c, + 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, - 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, - 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, - 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000, 0x080c, - 0x9f42, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, - 0x630a, 0x00ce, 0x0804, 0x8a62, 0x89ff, 0x0138, 0xa86b, 0x0103, - 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c, 0x9a08, 0x0804, - 0x8a62, 0x000e, 0x0804, 0x8a56, 0x781e, 0x781a, 0x00de, 0x00ce, - 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, - 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa87c, - 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148, 0x9080, - 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029, - 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, - 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, - 0x00ce, 0x04b8, 0x080c, 0x9623, 0x78c3, 0x0000, 0x080c, 0x9b30, - 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000, - 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, - 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c, - 0x9b30, 0x003e, 0x080c, 0x6354, 0x00c6, 0xb83c, 0x9005, 0x0110, - 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f18, 0x00ce, 0xa86b, 0x0103, - 0xab7e, 0xa87b, 0x0000, 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x080c, - 0x9a08, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101, - 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, - 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8b48, 0x8b4c, - 0x8b6a, 0x8b93, 0x8bd1, 0x8b48, 0x8b63, 0x8b46, 0x080c, 0x0dc4, - 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020, - 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000, - 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, - 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, - 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc, - 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, - 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, - 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8c37, - 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8c37, 0x0c80, 0xc2ec, 0x2202, - 0x080c, 0x8d06, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, - 0x1160, 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, - 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, - 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, - 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, - 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc, 0xb802, 0x080c, - 0x9a08, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, - 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, - 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9a08, 0x600c, 0x9015, - 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, - 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, - 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8bf4, 0x8bf6, - 0x8c1a, 0x8bf2, 0x080c, 0x0dc4, 0x00de, 0x0005, 0x00c6, 0x6840, - 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, - 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, - 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, - 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, - 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, - 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, - 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, - 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, - 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x8d06, - 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, - 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8c57, 0x8cee, 0x8cee, - 0x8cee, 0x8cee, 0x8cf0, 0x8cee, 0x8c55, 0x080c, 0x0dc4, 0x6820, - 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150, - 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce, - 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826, - 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x00b6, - 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8cd8, 0xb84c, 0x900d, - 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e, - 0x0904, 0x8cd8, 0x0028, 0x6818, 0x920e, 0x0904, 0x8cd8, 0x2058, - 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e, - 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x9eef, 0x05c8, 0x8318, - 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xab64, 0xa867, + 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, + 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08, + 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, 0x0010, + 0x200c, 0x81ff, 0x1518, 0x2009, 0x1964, 0x210c, 0x2102, 0x00f0, + 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000, + 0x080c, 0xa3cf, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, + 0x0009, 0x630a, 0x00ce, 0x0804, 0x8c50, 0x89ff, 0x0138, 0xa86b, + 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0x9cd9, + 0x0804, 0x8c50, 0x000e, 0x0804, 0x8c44, 0x781e, 0x781a, 0x00de, + 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, + 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, + 0xa87c, 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148, + 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802, + 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, + 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, + 0x630a, 0x00ce, 0x04b8, 0x080c, 0x98d1, 0x78c3, 0x0000, 0x080c, + 0x9e03, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, + 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, + 0x2bce, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, + 0x080c, 0x9e03, 0x003e, 0x080c, 0x642a, 0x00c6, 0xb83c, 0x9005, + 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa39d, 0x00ce, 0xa86b, + 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xc4ba, 0x080c, 0x6c02, + 0x080c, 0x9cd9, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, + 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, + 0x2202, 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8d49, + 0x8d4d, 0x8d6b, 0x8d94, 0x8dd2, 0x8d49, 0x8d64, 0x8d47, 0x080c, + 0x0dc3, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, + 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, + 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, + 0x0005, 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000, + 0x7020, 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800, + 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, + 0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, + 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, + 0x8e38, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8e38, 0x0c80, 0xc2ec, + 0x2202, 0x080c, 0x8f0e, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, + 0x9c06, 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x720e, + 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, + 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, + 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, + 0x1198, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800, 0xc0dc, 0xb802, + 0x080c, 0x9cd9, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, + 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, + 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9cd9, 0x600c, + 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9e03, 0x7027, + 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, + 0x00d6, 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8df5, + 0x8df7, 0x8e1b, 0x8df3, 0x080c, 0x0dc3, 0x00de, 0x0005, 0x00c6, + 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, + 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, + 0x0000, 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, + 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, + 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, + 0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, + 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, + 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, + 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, + 0x8f0e, 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, + 0x2069, 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8e58, 0x8ef6, + 0x8ef6, 0x8ef6, 0x8ef6, 0x8ef8, 0x8ef6, 0x8e56, 0x080c, 0x0dc3, + 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, + 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65, + 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, + 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005, + 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8ee0, 0xb84c, + 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, + 0x920e, 0x0904, 0x8ee0, 0x0028, 0x6818, 0x920e, 0x0904, 0x8ee0, + 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, + 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0xa374, 0x0904, + 0x8ee0, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, + 0xa884, 0x9084, 0x00ff, 0x605e, 0xa887, 0x0000, 0xab64, 0xa867, 0x0000, 0x009e, 0x631a, 0x6114, 0x0096, 0x2148, 0xa968, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061, - 0x0100, 0xbaac, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, - 0x92c9, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002, + 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c, + 0x94f6, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0x6807, 0x0006, 0x2c18, 0x6b26, - 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x6354, 0x080c, - 0x9d2f, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, + 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x642a, 0x080c, + 0xa1b4, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b, - 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, + 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6, 0x2069, 0x19c4, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c, - 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8c46, 0x2069, + 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8e47, 0x2069, 0x19c4, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d, 0x01b0, 0x6a04, 0x9296, 0x0000, 0x1568, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, - 0x002e, 0x080c, 0x1b2e, 0x1158, 0x012e, 0x080c, 0x94a3, 0x00de, - 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x7393, 0x08f8, 0x012e, + 0x002e, 0x080c, 0x1b76, 0x1158, 0x012e, 0x080c, 0x972e, 0x00de, + 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x73fe, 0x08f8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c40, 0x683a, - 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8cfe, 0x6a30, - 0x9296, 0x0000, 0x0950, 0x0804, 0x8cfe, 0x6020, 0x9084, 0x000f, - 0x000b, 0x0005, 0x8d71, 0x8d76, 0x91f9, 0x9292, 0x8d76, 0x91f9, - 0x9292, 0x8d71, 0x8d76, 0x8d71, 0x8d71, 0x8d71, 0x8d71, 0x8d71, - 0x8d71, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0005, 0x00b6, 0x0156, + 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8f06, 0x6a30, + 0x9296, 0x0000, 0x0950, 0x0804, 0x8f06, 0x6020, 0x9084, 0x000f, + 0x000b, 0x0005, 0x8f79, 0x8f7e, 0x9426, 0x94bf, 0x8f7e, 0x9426, + 0x94bf, 0x8f79, 0x8f7e, 0x8f79, 0x8f79, 0x8f79, 0x8f79, 0x8f79, + 0x8f79, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0054, 0x1a0c, - 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061, 0x0100, 0x619a, - 0x908a, 0x0040, 0x1a04, 0x8de2, 0x005b, 0x00fe, 0x00ee, 0x00de, + 0x0dc3, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, + 0x908a, 0x0040, 0x1a04, 0x8fea, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, - 0x8f7f, 0x8fba, 0x8fe3, 0x90a7, 0x90c6, 0x90cc, 0x90d6, 0x90de, - 0x90ea, 0x90f0, 0x9101, 0x90f0, 0x9140, 0x90de, 0x914c, 0x9152, - 0x90ea, 0x9152, 0x915e, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, - 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x983e, - 0x984f, 0x986f, 0x98a1, 0x90d6, 0x8de0, 0x90d6, 0x90f0, 0x8de0, - 0x8fe3, 0x90a7, 0x8de0, 0x9c27, 0x90f0, 0x8de0, 0x9c43, 0x90f0, - 0x8de0, 0x90ea, 0x8f79, 0x8e05, 0x8de0, 0x8de0, 0x8de0, 0x8de0, - 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x98ab, 0x9c79, 0x8de0, - 0x080c, 0x0dc4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, - 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8e03, - 0x8e03, 0x8e03, 0x8e3d, 0x8ee9, 0x8ef4, 0x8e03, 0x8e03, 0x8e03, - 0x8f4e, 0x8f5a, 0x8e58, 0x8e03, 0x8e73, 0x8ea7, 0x9df6, 0x9e3b, - 0x90f0, 0x8e03, 0x9c5f, 0x080c, 0x0dc4, 0x00d6, 0x0096, 0x080c, - 0x9171, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138, + 0x9187, 0x91c2, 0x91eb, 0x92b5, 0x92d7, 0x92dd, 0x92ea, 0x92f2, + 0x92fe, 0x9304, 0x9315, 0x9304, 0x936d, 0x92f2, 0x9379, 0x937f, + 0x92fe, 0x937f, 0x938b, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, + 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x9aec, 0x9b0f, + 0x9b20, 0x9b40, 0x9b72, 0x92ea, 0x8fe8, 0x92ea, 0x9304, 0x8fe8, + 0x91eb, 0x92b5, 0x8fe8, 0x9efa, 0x9304, 0x8fe8, 0x9f16, 0x9304, + 0x8fe8, 0x92fe, 0x9181, 0x900d, 0x8fe8, 0x9f32, 0x9f9f, 0xa07a, + 0x8fe8, 0xa087, 0x92e7, 0xa0b2, 0x8fe8, 0x9b7c, 0xa0f9, 0x8fe8, + 0x080c, 0x0dc3, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, + 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x900b, + 0x900b, 0x900b, 0x9045, 0x90f1, 0x90fc, 0x900b, 0x900b, 0x900b, + 0x9156, 0x9162, 0x9060, 0x900b, 0x907b, 0x90af, 0xa27b, 0xa2c0, + 0x9304, 0x900b, 0xa0df, 0x080c, 0x0dc3, 0x00d6, 0x0096, 0x080c, + 0x939e, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138, 0x2009, 0x2414, 0x2011, 0x0018, 0x2019, 0x0018, 0x0030, 0x2009, 0x2410, 0x2011, 0x0014, 0x2019, 0x0014, 0x7102, 0x7206, 0x700b, 0x0800, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x63c2, - 0x080c, 0x95f7, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810, - 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0x9e82, 0x1118, 0x9084, + 0x080c, 0x98a5, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810, + 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xa307, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, - 0x9171, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c, + 0x939e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c, 0x700e, 0xa880, 0x7012, 0xa884, 0x7016, 0xa888, 0x701a, 0xa88c, - 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7, 0x009e, 0x00de, 0x0005, - 0x00d6, 0x0096, 0x080c, 0x9171, 0x7003, 0x0500, 0x7814, 0x2048, + 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5, 0x009e, 0x00de, 0x0005, + 0x00d6, 0x0096, 0x080c, 0x939e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8d0, 0x700a, 0xa8d4, 0x700e, 0xa8d8, 0x7012, 0xa8dc, 0x7016, - 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7, + 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, - 0x080c, 0x9171, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000, + 0x080c, 0x939e, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016, - 0x200c, 0x2001, 0x0001, 0x080c, 0x2297, 0x080c, 0xc491, 0x9006, - 0x080c, 0x2297, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, - 0x04d9, 0x080c, 0x95f7, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, - 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x91bc, 0x20e9, 0x0000, + 0x200c, 0x2001, 0x0001, 0x080c, 0x22df, 0x080c, 0xcf91, 0x9006, + 0x080c, 0x22df, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, + 0x04d9, 0x080c, 0x98a5, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, + 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x93e9, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000, 0x7814, 0x2048, 0xa873, 0x0200, 0xa877, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016, - 0x200c, 0x080c, 0xc491, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, - 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb3, 0x080c, 0x95f7, + 0x200c, 0x080c, 0xcf91, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, + 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fbf, 0x080c, 0x98a5, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, - 0x0005, 0x080c, 0x9171, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, - 0x60c3, 0x0008, 0x0804, 0x95f7, 0x00d6, 0x00e6, 0x080c, 0x91bc, + 0x0005, 0x080c, 0x939e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, + 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x00e6, 0x080c, 0x93e9, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9096, 0xdf00, 0x0138, 0x9096, 0xe000, 0x0120, 0x2073, 0x0010, 0x8e70, 0x0030, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, - 0x8f14, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, - 0x1f04, 0x8f1d, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118, + 0x911c, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, + 0x1f04, 0x9125, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118, 0x60c3, 0x0018, 0x00f0, 0x2069, 0x1990, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19aa, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, - 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8f34, 0x60c3, - 0x004c, 0x080c, 0x95f7, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9171, + 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x913c, 0x60c3, + 0x004c, 0x080c, 0x98a5, 0x00ee, 0x00de, 0x0005, 0x080c, 0x939e, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, - 0x0804, 0x95f7, 0x00d6, 0x0026, 0x0016, 0x080c, 0x91bc, 0x7003, + 0x0804, 0x98a5, 0x00d6, 0x0026, 0x0016, 0x080c, 0x93e9, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, 0x00ee, - 0x7206, 0x710a, 0x62c2, 0x080c, 0x95f7, 0x001e, 0x002e, 0x00de, - 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x95f7, 0x080c, - 0x9171, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130, - 0x6828, 0x0016, 0x080c, 0x26d2, 0x710e, 0x001e, 0x20a9, 0x0004, + 0x7206, 0x710a, 0x62c2, 0x080c, 0x98a5, 0x001e, 0x002e, 0x00de, + 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x98a5, 0x080c, + 0x939e, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130, + 0x6828, 0x0016, 0x080c, 0x273b, 0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, 0x4003, - 0x080c, 0x9e82, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, + 0x080c, 0xa307, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x001c, - 0x0804, 0x95f7, 0x080c, 0x9171, 0x7003, 0x0500, 0x080c, 0x9e82, + 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003, 0x0500, 0x080c, 0xa307, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3, - 0x0010, 0x0804, 0x95f7, 0x080c, 0x9171, 0x9006, 0x080c, 0x6710, + 0x0010, 0x0804, 0x98a5, 0x080c, 0x939e, 0x9006, 0x080c, 0x6837, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011, 0x0240, 0x2013, 0x22ff, 0x2011, 0x0241, 0x2013, 0xfffe, 0x7003, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006, 0xa89e, 0xa8aa, 0xa8ae, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086, 0x007e, - 0x1904, 0x9067, 0x00d6, 0x2069, 0x1949, 0x2001, 0x1836, 0x2004, + 0x1904, 0x9275, 0x00d6, 0x2069, 0x1948, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000, 0x7012, - 0x080c, 0x9e99, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022, + 0x080c, 0xa31e, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0428, 0x6800, 0x700a, 0x6804, 0x700e, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0110, 0x2001, 0x0002, 0x00f6, 0x2079, - 0x0100, 0x080c, 0x72e5, 0x1128, 0x78e3, 0x0000, 0x080c, 0x2713, - 0x78e2, 0x00fe, 0x6808, 0x080c, 0x72e5, 0x1118, 0x9084, 0x37ff, - 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0x9e99, 0x680c, 0x7016, + 0x0100, 0x080c, 0x7351, 0x1128, 0x78e3, 0x0000, 0x080c, 0x277c, + 0x78e2, 0x00fe, 0x6808, 0x080c, 0x7351, 0x1118, 0x9084, 0x37ff, + 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xa31e, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, - 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9cf6, 0x2069, 0x1951, - 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x00de, 0x04e0, 0x2001, - 0x1836, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004, - 0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x194a, 0x200c, 0x60e0, - 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2713, 0x61e2, - 0x001e, 0x20e1, 0x0001, 0x2099, 0x1949, 0x20e9, 0x0000, 0x20a1, - 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, - 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, - 0x025a, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x024e, 0x20a9, 0x0008, - 0x2099, 0x1951, 0x4003, 0x60c3, 0x0074, 0x0804, 0x95f7, 0x080c, - 0x9171, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, - 0x2000, 0x9006, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, - 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, - 0x0002, 0x7026, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x9171, - 0x7003, 0x5000, 0x0804, 0x9005, 0x080c, 0x9171, 0x7003, 0x2110, - 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc, - 0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x080c, 0x91bc, - 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, - 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200, 0x0804, 0x9005, - 0x080c, 0x91bc, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, - 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, - 0x95f7, 0x00d6, 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014, - 0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, - 0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, - 0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, - 0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, - 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, - 0x0110, 0x9085, 0x0010, 0x2009, 0x1880, 0x210c, 0xd184, 0x1110, - 0x9085, 0x0002, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x95f7, - 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, - 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200, - 0x0804, 0x8f83, 0x080c, 0x91bc, 0x7003, 0x0100, 0x700b, 0x0003, - 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x080c, 0x91bc, - 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x95f7, - 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, - 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, - 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, - 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, - 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x9f95, - 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, - 0x0026, 0x080c, 0x9d0b, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, - 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, - 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, - 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, - 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, - 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305, - 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, - 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, - 0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, - 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, - 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x95e5, - 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, - 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, - 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a, - 0x0092, 0x1a0c, 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061, - 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, - 0x00ce, 0x00be, 0x0005, 0x922a, 0x9239, 0x9244, 0x9228, 0x9228, - 0x9228, 0x922a, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, - 0x080c, 0x0dc4, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x29fa, - 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, - 0x95f7, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, - 0x60c3, 0x000c, 0x0804, 0x95f7, 0x04a1, 0x7003, 0x0003, 0x7007, - 0x0300, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x0026, 0x080c, 0x9d0b, - 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, - 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x918c, - 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, - 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, - 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, - 0x91ee, 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8500, 0x7002, - 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, - 0x2001, 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, - 0x0804, 0x91ee, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, - 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, - 0x0dc4, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x7910, 0x2158, 0xb9ac, - 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, - 0x00de, 0x00ce, 0x00be, 0x0005, 0x92c9, 0x9375, 0x9348, 0x9454, - 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x99ef, - 0x99f4, 0x99f9, 0x99fe, 0x92c7, 0x92c7, 0x92c7, 0x99ea, 0x080c, - 0x0dc4, 0x0096, 0x080c, 0x932c, 0x7914, 0x2148, 0xa97c, 0x7926, - 0xae68, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032, - 0xa8bc, 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132, - 0xa980, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, - 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x7042, - 0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686, 0x0008, 0x1118, 0x080c, - 0x17b7, 0x0010, 0x080c, 0x1679, 0x0050, 0xd1b4, 0x0118, 0x7047, - 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4, - 0xaeb0, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, - 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069, - 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, - 0x6017, 0x0009, 0x2001, 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df, - 0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, + 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa17b, 0x2069, 0x1950, + 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x5668, 0xd0e4, + 0x0110, 0x680c, 0x700e, 0x00de, 0x04e0, 0x2001, 0x1836, 0x2004, + 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2009, + 0x0002, 0x1118, 0x2001, 0x1949, 0x200c, 0x60e0, 0x9106, 0x0130, + 0x2100, 0x60e3, 0x0000, 0x080c, 0x277c, 0x61e2, 0x001e, 0x20e1, + 0x0001, 0x2099, 0x1948, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9, + 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256, + 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, + 0x080c, 0xa17b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1950, + 0x4003, 0x60c3, 0x0074, 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003, + 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006, + 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, + 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6, + 0x0804, 0x934e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c, + 0x939e, 0x7003, 0x5000, 0x0804, 0x920d, 0x080c, 0x939e, 0x7003, + 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c, + 0x93e0, 0x0010, 0x080c, 0x93e9, 0x7003, 0x0200, 0x60c3, 0x0004, + 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003, + 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9, + 0x7003, 0x0200, 0x0804, 0x920d, 0x080c, 0x93e9, 0x7003, 0x0100, + 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814, + 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x080c, 0x93e9, + 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086, + 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184, + 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f, + 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010, + 0x700f, 0x0800, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, + 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009, + 0x1880, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009, + 0x187e, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108, + 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130, + 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026, + 0x60c3, 0x0014, 0x00de, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, + 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804, + 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0200, 0x0804, 0x918b, 0x080c, + 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, + 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b, + 0x000b, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0026, 0x00d6, 0x0036, + 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, + 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa190, + 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, + 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e, + 0x00de, 0x080c, 0x9893, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027, + 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa190, + 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878, + 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003, + 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005, + 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800, + 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021, + 0x0100, 0x080c, 0xa190, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, + 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128, + 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c, + 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de, + 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, + 0x024c, 0x002e, 0x0005, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, + 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, + 0x908a, 0x0085, 0x0a0c, 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3, + 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082, + 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, + 0x9457, 0x9466, 0x9471, 0x9455, 0x9455, 0x9455, 0x9457, 0x9455, + 0x9455, 0x9455, 0x9455, 0x9455, 0x9455, 0x080c, 0x0dc3, 0x0411, + 0x60c3, 0x0000, 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, + 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x98a5, 0x0431, 0x7808, + 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804, + 0x98a5, 0x04a1, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004, + 0x0804, 0x98a5, 0x0026, 0x080c, 0xa190, 0xb810, 0x9085, 0x8100, + 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, + 0x700e, 0x7013, 0x0009, 0x0804, 0x93b9, 0x0026, 0x080c, 0xa190, + 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, + 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20, 0x9296, + 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x0026, 0x080c, + 0xa190, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069, + 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20, + 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x00b6, + 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, + 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dc3, 0x908a, 0x0054, + 0x1a0c, 0x0dc3, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a, + 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, + 0x0005, 0x94f6, 0x95bd, 0x9590, 0x96df, 0x94f4, 0x94f4, 0x94f4, + 0x94f4, 0x94f4, 0x94f4, 0x94f4, 0x9cc0, 0x9cc5, 0x9cca, 0x9ccf, + 0x94f4, 0xa0be, 0x94f4, 0x9cbb, 0x080c, 0x0dc3, 0x0096, 0x780b, + 0xffff, 0x080c, 0x9561, 0x7914, 0x2148, 0xa97c, 0x7956, 0xae68, + 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032, 0xa8bc, + 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132, 0xa980, + 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, + 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, + 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047, + 0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x17ff, 0x0010, 0x080c, + 0x16c1, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047, + 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4, 0xaeb0, 0x726a, 0x766e, + 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080, + 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018, + 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001, + 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df, 0x2003, 0x0009, 0x009e, + 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0180, + 0x2001, 0x1aab, 0x200c, 0x8108, 0x2102, 0x2001, 0x1aaa, 0x201c, + 0x1218, 0x8318, 0x2302, 0x0ea0, 0x794a, 0x712e, 0x7b46, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa894, 0x7002, 0xa890, 0x7006, 0xa8b4, 0x700a, 0xa8b0, 0x700e, 0x60c3, 0x000c, 0x009e, - 0x00de, 0x0804, 0x95f7, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500, + 0x00de, 0x0804, 0x98a5, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, - 0x700e, 0x7013, 0x0889, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, + 0x700e, 0x7013, 0x0889, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c, - 0x9438, 0x7814, 0x2048, 0x080c, 0xb953, 0x1130, 0x7814, 0x9084, + 0x96bd, 0x7814, 0x2048, 0x080c, 0xc1cb, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de, - 0x0005, 0x9393, 0x93f0, 0x93fa, 0x9412, 0x9418, 0x9424, 0x9427, - 0x9391, 0x080c, 0x0dc4, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003, - 0x0118, 0x9186, 0x0003, 0x1170, 0xabac, 0x7316, 0xa89c, 0x701a, - 0xa898, 0x701e, 0x003e, 0x001e, 0x2001, 0x198e, 0x2004, 0x60c2, - 0x0804, 0x95f7, 0x9186, 0x0001, 0x190c, 0x0dc4, 0xabac, 0x7316, - 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0, 0x702e, - 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8b0, - 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085, 0x0010, - 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, - 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098, 0x4003, - 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, - 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118, - 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0x95f7, - 0x7017, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x7017, - 0x0028, 0x00d0, 0x7017, 0x0302, 0x7027, 0x0012, 0x702f, 0x0008, + 0x0005, 0x95db, 0x9644, 0x9654, 0x967a, 0x9686, 0x9697, 0x969f, + 0x95d9, 0x080c, 0x0dc3, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003, + 0x0118, 0x9186, 0x0003, 0x1198, 0xabac, 0x7824, 0xd0cc, 0x1168, + 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0x003e, 0x001e, 0x2001, + 0x198e, 0x2004, 0x60c2, 0x0804, 0x98a5, 0xc3e5, 0x0c88, 0x9186, + 0x0001, 0x190c, 0x0dc3, 0xabac, 0x7824, 0xd0cc, 0x1904, 0x9641, + 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0, + 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, + 0xa8b0, 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085, + 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, + 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098, + 0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, + 0x0005, 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003, + 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, + 0x98a5, 0xc3e5, 0x0804, 0x9600, 0x2011, 0x0008, 0x2001, 0x180f, + 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110, + 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c, + 0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824, + 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032, - 0x0804, 0x95f7, 0x7017, 0x0028, 0x60c3, 0x0018, 0x0804, 0x95f7, - 0x7017, 0x0100, 0x702f, 0x0008, 0x7828, 0x9084, 0x00ff, 0x7036, - 0x60c3, 0x0020, 0x0804, 0x95f7, 0x7017, 0x0008, 0x0c68, 0x0036, - 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1118, - 0x7216, 0x003e, 0x0c08, 0x7017, 0x0800, 0x701e, 0x003e, 0x08e0, - 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814, - 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, - 0x0898, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, - 0x2071, 0x024c, 0x00de, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700, - 0x8007, 0x0013, 0x001e, 0x0005, 0x9464, 0x9464, 0x9466, 0x9464, - 0x9464, 0x9464, 0x9480, 0x9464, 0x080c, 0x0dc4, 0x7914, 0x918c, - 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, - 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, - 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x95f7, - 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, - 0x9d0b, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, - 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, - 0x918d, 0x0008, 0x7116, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, - 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, - 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, - 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, - 0x90be, 0x0006, 0x0904, 0x9577, 0x90be, 0x000a, 0x1904, 0x9533, - 0xb8ac, 0x609e, 0x7814, 0x2048, 0xa880, 0xd0fc, 0x0558, 0xaf94, - 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, - 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf98, - 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, - 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, - 0x6077, 0x0000, 0xb8ac, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, - 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa880, - 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, - 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, - 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838, - 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, - 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x9cf0, 0x2009, - 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, - 0x080c, 0x8425, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, - 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x95aa, - 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, - 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, - 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, - 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834, - 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbaac, - 0x629e, 0x080c, 0x9cf0, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, - 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8425, 0x003e, 0x004e, - 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, - 0x2048, 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x05d8, 0x9185, - 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, - 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, - 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa894, 0x608a, - 0xa890, 0x608e, 0xa8b4, 0x60c6, 0xa8b0, 0x60ca, 0xb86c, 0x60ce, - 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac, 0x629e, 0x080c, 0x9cd2, - 0x0804, 0x9563, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e, + 0x0804, 0x98a5, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216, + 0x60c3, 0x0018, 0x0804, 0x98a5, 0x0cd0, 0xc2e5, 0x2011, 0x0100, + 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, + 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x98a5, 0x2011, + 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036, + 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, + 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046, + 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, + 0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008, + 0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, + 0x6878, 0x700a, 0x687c, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013, + 0x0898, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, + 0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, + 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x96ef, + 0x96ef, 0x96f1, 0x96ef, 0x96ef, 0x96ef, 0x970b, 0x96ef, 0x080c, + 0x0dc3, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, + 0x0003, 0x00b9, 0x2069, 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c, + 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, + 0x0001, 0x0804, 0x98a5, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, + 0x0cb0, 0x0016, 0x080c, 0xa190, 0x001e, 0xb810, 0x9085, 0x0100, + 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, + 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9893, + 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, + 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, + 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, + 0x7378, 0x747c, 0x7820, 0x90be, 0x0006, 0x0904, 0x9802, 0x90be, + 0x000a, 0x1904, 0x97be, 0xb8b0, 0x609e, 0x7814, 0x2048, 0xa880, + 0xd0fc, 0x0558, 0xaf94, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, + 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005, + 0x000e, 0x1160, 0xaf98, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, + 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, + 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8b0, 0x609e, 0x0050, + 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, + 0x6073, 0x2029, 0xa880, 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120, + 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, + 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, + 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, + 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, + 0x080c, 0xa175, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, + 0x0110, 0x2009, 0x1b58, 0x080c, 0x8591, 0x003e, 0x004e, 0x005e, + 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, + 0x0040, 0x0904, 0x983e, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, + 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, + 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, + 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, + 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, + 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0xa175, 0x2009, 0x07d0, + 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, + 0x8591, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, + 0x00be, 0x0005, 0x7814, 0x2048, 0xa880, 0x9084, 0x0003, 0x9086, + 0x0002, 0x0904, 0x985a, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, + 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, + 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086, + 0x7808, 0x6082, 0xa894, 0x608a, 0xa890, 0x608e, 0xa8b4, 0x60c6, + 0xa8b0, 0x60ca, 0xa8b0, 0x7930, 0x9108, 0x7932, 0xa8b4, 0x792c, + 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, + 0xbab0, 0x629e, 0x080c, 0xa152, 0x0804, 0x97ee, 0xb8bc, 0xd084, + 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x784a, 0xa836, 0x2900, + 0xa83a, 0xb046, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000, - 0x0804, 0x9546, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, - 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, - 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, - 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, - 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac, - 0x629e, 0x080c, 0x9cd2, 0x0804, 0x9563, 0x7a10, 0x00b6, 0x2258, - 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, - 0x00d6, 0x2069, 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, - 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8417, 0x0005, 0x0016, - 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, - 0x0089, 0x080c, 0x8417, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, - 0x2102, 0x2001, 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003, - 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, - 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, - 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, - 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, - 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, - 0x0140, 0x080c, 0x72e5, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005, - 0x15d0, 0x080c, 0x7393, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, - 0x1120, 0x6024, 0xd084, 0x090c, 0x0dc4, 0x080c, 0x8417, 0x0458, - 0x00c6, 0x2061, 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, - 0x0811, 0x080c, 0x2b75, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, - 0x0008, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, - 0x080c, 0x8417, 0x080c, 0x961a, 0x0070, 0x6124, 0x91e5, 0x0000, - 0x0140, 0x080c, 0xd36d, 0x080c, 0x8420, 0x2009, 0x0014, 0x080c, - 0x9f88, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, - 0x2001, 0x19e0, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4, - 0x6128, 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, - 0x8417, 0x080c, 0x5db5, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a, - 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, - 0x842d, 0x2071, 0x19c4, 0x713c, 0x81ff, 0x0904, 0x9711, 0x2061, - 0x0100, 0x2069, 0x0140, 0x080c, 0x72e5, 0x1198, 0x0036, 0x2019, - 0x0002, 0x080c, 0x9964, 0x003e, 0x080c, 0xd36d, 0x703c, 0x9065, - 0x0120, 0x2009, 0x004a, 0x080c, 0x9f88, 0x080c, 0x7393, 0x0804, - 0x9711, 0x080c, 0x971d, 0x0904, 0x9711, 0x6904, 0xd1f4, 0x0904, - 0x9718, 0x080c, 0x2b75, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc4, - 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, - 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, - 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4, - 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2aa7, 0x6014, 0x9084, 0xe7fd, - 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, - 0x9f88, 0x0078, 0x080c, 0xd36d, 0x0036, 0x2019, 0x0001, 0x080c, - 0x9964, 0x003e, 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c, - 0x9f88, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, - 0xd1ec, 0x1904, 0x96d1, 0x0804, 0x96d3, 0x00d6, 0x00c6, 0x0096, - 0x703c, 0x9065, 0x090c, 0x0dc4, 0x2001, 0x0306, 0x200c, 0x9184, - 0x0030, 0x0904, 0x97e9, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, - 0x97e9, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, - 0x1904, 0x97e9, 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c, - 0x9116, 0x9084, 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110, - 0x9102, 0x0030, 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102, - 0x9082, 0x0005, 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004, - 0x8004, 0x8004, 0x9102, 0x1a04, 0x97e9, 0x2009, 0x1a5f, 0x2104, - 0x8000, 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984, - 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, - 0x1904, 0x97c2, 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800, - 0x00c6, 0x2061, 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e, - 0x200c, 0x2001, 0x012c, 0x080c, 0x1a37, 0x602c, 0xd0b4, 0x1d98, - 0x2001, 0x022e, 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce, - 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000, - 0x2001, 0x1a4d, 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, - 0x1170, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884, - 0xc0fc, 0xa886, 0x009e, 0x2c10, 0x080c, 0x1aa2, 0x0040, 0x6014, - 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, - 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1b2e, 0x190c, 0x0dc4, - 0x012e, 0x0090, 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a, - 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, - 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, - 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, - 0x2009, 0x07d0, 0x080c, 0x8425, 0x9006, 0x009e, 0x00ce, 0x00de, - 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4, - 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, - 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, - 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, - 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, - 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058, - 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, - 0x6014, 0x0096, 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c, - 0x6548, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, - 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9171, - 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, - 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x0156, - 0x080c, 0x91bc, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312, - 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002, - 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, - 0x1f04, 0x9860, 0x60c3, 0x001c, 0x015e, 0x0804, 0x95f7, 0x0016, - 0x0026, 0x080c, 0x9198, 0x080c, 0x91aa, 0x9e80, 0x0004, 0x20e9, - 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, - 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808, 0x9088, - 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, - 0x8003, 0x60c2, 0x080c, 0x95f7, 0x002e, 0x001e, 0x0005, 0x20a9, - 0x0010, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x0240, 0x22a8, 0x4003, - 0x0c68, 0x080c, 0x9171, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, - 0x0008, 0x0804, 0x95f7, 0x0016, 0x0026, 0x080c, 0x9171, 0x20e9, - 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, - 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e, 0x7808, - 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x95f7, - 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c, - 0xbb56, 0x1110, 0x080c, 0xa717, 0x600c, 0x0006, 0x080c, 0xbc8f, - 0x080c, 0x9f18, 0x080c, 0x9a08, 0x00ce, 0x0c78, 0x2c00, 0x700e, - 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, - 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, - 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, - 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024, 0x2060, - 0x8cff, 0x01f8, 0x080c, 0x9623, 0x6ac0, 0x68c3, 0x0000, 0x080c, - 0x8420, 0x00c6, 0x2061, 0x0100, 0x080c, 0x9d0f, 0x00ce, 0x20a9, - 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0x9f88, 0x000e, 0x001e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, - 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, - 0x0004, 0x0d60, 0x080c, 0x8420, 0x6814, 0x9084, 0x0001, 0x0110, - 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5d5f, - 0x080c, 0x835e, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, - 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75, - 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04, 0x9946, - 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, - 0x9006, 0x080c, 0x2b65, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, - 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, - 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff, 0x0904, - 0x99cb, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, - 0x99cb, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, - 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x842d, 0x080c, 0x1eda, - 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8, 0x692c, - 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, - 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75, 0x0090, - 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x99a5, 0x7804, - 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, - 0x080c, 0x2b65, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, 0x2009, - 0x0049, 0x080c, 0x9f88, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, - 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, - 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de, 0x0005, - 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32, 0x012e, - 0x00de, 0x0005, 0x080c, 0x932c, 0x7047, 0x1000, 0x0098, 0x080c, - 0x932c, 0x7047, 0x4000, 0x0070, 0x080c, 0x932c, 0x7047, 0x2000, - 0x0048, 0x080c, 0x932c, 0x7047, 0x0400, 0x0020, 0x080c, 0x932c, - 0x7047, 0x0200, 0x7824, 0x7032, 0x60c3, 0x0020, 0x0804, 0x95f7, - 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, - 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614, 0x2660, - 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9aab, 0x8cff, 0x0904, - 0x9aab, 0x6020, 0x9086, 0x0006, 0x1904, 0x9aa6, 0x88ff, 0x0138, - 0x2800, 0x9c06, 0x1904, 0x9aa6, 0x2039, 0x0000, 0x0050, 0x6010, - 0x9b06, 0x1904, 0x9aa6, 0x85ff, 0x0120, 0x6024, 0x9106, 0x1904, - 0x9aa6, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, - 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8420, - 0x080c, 0x9b30, 0x7027, 0x0000, 0x0428, 0x080c, 0x8420, 0x6820, - 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, - 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, - 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, - 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, - 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, - 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, - 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, - 0xb953, 0x0110, 0x080c, 0xd101, 0x009e, 0x080c, 0x9f42, 0x080c, - 0x9a08, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9a23, 0x2c78, 0x600c, - 0x2060, 0x0804, 0x9a23, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, - 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, - 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, - 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, - 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9b1f, 0x6020, 0x9086, - 0x0006, 0x1904, 0x9b1a, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, - 0x9b1a, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6024, - 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, - 0x080c, 0x9964, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046, - 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, - 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, - 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, - 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb953, - 0x0110, 0x080c, 0xd101, 0x080c, 0x9f42, 0x87ff, 0x1198, 0x00ce, - 0x0804, 0x9acb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9acb, 0x9006, - 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, - 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, - 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, - 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, - 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff, - 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038, 0x9c36, 0x1110, 0x660c, - 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, - 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, - 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6004, 0x9086, 0x0040, - 0x090c, 0x8b2b, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, - 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, - 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c, 0x2660, - 0x2678, 0x8cff, 0x0904, 0x9c16, 0x6010, 0x00b6, 0x2058, 0xb8a0, - 0x00be, 0x9206, 0x1904, 0x9c11, 0x7024, 0x9c06, 0x1520, 0x2069, - 0x0100, 0x68c0, 0x9005, 0x0904, 0x9be8, 0x080c, 0x9623, 0x68c3, - 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, - 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, - 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, - 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, - 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, - 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, - 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbb45, 0x1180, - 0x080c, 0x308f, 0x080c, 0xbb56, 0x1518, 0x080c, 0xa717, 0x0400, - 0x080c, 0x9b30, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, 0x0898, - 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0090, 0x6014, 0x2048, - 0x080c, 0xb953, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa86b, - 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, 0xbb39, - 0x080c, 0xbc8f, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804, - 0x9b91, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9b91, 0x012e, 0x000e, - 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, - 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd101, 0x0c08, 0x00d6, - 0x080c, 0x91bc, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, - 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9, 0x0000, 0x20a1, 0x0250, - 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, - 0x95f7, 0x00de, 0x0005, 0x080c, 0x91bc, 0x700b, 0x0800, 0x7814, - 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, - 0x7026, 0x7828, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7828, - 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x95f7, 0x080c, - 0x91bc, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238, + 0x0804, 0x97d1, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e, + 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073, + 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, + 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, + 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, + 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e, + 0x7824, 0xd0cc, 0x0120, 0x080c, 0xa175, 0x0804, 0x97ee, 0x080c, + 0xa152, 0x0804, 0x97ee, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210, + 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069, + 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, + 0x9575, 0x00f1, 0x080c, 0x8583, 0x0005, 0x0016, 0x2001, 0x180c, + 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, + 0x8583, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, + 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003, 0x0000, 0x0c88, + 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e, + 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7, + 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e, + 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, + 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, + 0x7351, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005, 0x15d0, 0x080c, + 0x73fe, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, + 0xd084, 0x090c, 0x0dc3, 0x080c, 0x8583, 0x0458, 0x00c6, 0x2061, + 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, 0x0811, 0x080c, + 0x2bde, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, 0x0008, 0x1258, + 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8583, + 0x080c, 0x98c8, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, + 0xe0fa, 0x080c, 0x858c, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce, + 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19e0, + 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, + 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8583, 0x080c, + 0x5e72, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, + 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8599, 0x2071, + 0x19c4, 0x713c, 0x81ff, 0x0904, 0x99bf, 0x2061, 0x0100, 0x2069, + 0x0140, 0x080c, 0x7351, 0x1198, 0x0036, 0x2019, 0x0002, 0x080c, + 0x9c35, 0x003e, 0x080c, 0xe0fa, 0x703c, 0x9065, 0x0120, 0x2009, + 0x004a, 0x080c, 0xa419, 0x080c, 0x73fe, 0x0804, 0x99bf, 0x080c, + 0x99cb, 0x0904, 0x99bf, 0x6904, 0xd1f4, 0x0904, 0x99c6, 0x080c, + 0x2bde, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc3, 0x6020, 0x00ce, + 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, + 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, + 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4, 0x200a, 0xd0cc, + 0x0110, 0x080c, 0x2b10, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, + 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0xa419, 0x0078, + 0x080c, 0xe0fa, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x003e, + 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c, 0xa419, 0x002e, + 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, + 0x997f, 0x0804, 0x9981, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065, + 0x090c, 0x0dc3, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904, + 0x9a97, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9a97, 0x2009, + 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1904, 0x9a97, + 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c, 0x9116, 0x9084, + 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110, 0x9102, 0x0030, + 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102, 0x9082, 0x0005, + 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004, 0x8004, 0x8004, + 0x9102, 0x1a04, 0x9a97, 0x2009, 0x1a5f, 0x2104, 0x8000, 0x0208, + 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984, 0x918d, 0x0010, + 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1904, 0x9a70, + 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800, 0x00c6, 0x2061, + 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e, 0x200c, 0x2001, + 0x012c, 0x080c, 0x1a7f, 0x602c, 0xd0b4, 0x1d98, 0x2001, 0x022e, + 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce, 0x2001, 0x009a, + 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000, 0x2001, 0x1a4d, + 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1170, 0x0096, + 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884, 0xc0fc, 0xa886, + 0x009e, 0x2c10, 0x080c, 0x1aea, 0x0040, 0x6014, 0x2048, 0xaa3a, + 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091, + 0x2400, 0x002e, 0x080c, 0x1b76, 0x190c, 0x0dc3, 0x012e, 0x0090, + 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011, + 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8, + 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048, + 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0, + 0x080c, 0x8591, 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085, + 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4, 0x7048, 0xd084, + 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, + 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, + 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, + 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, + 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, + 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058, 0x8bff, 0x0190, + 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, + 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c, 0x6650, 0x0110, + 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, + 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x939e, 0x7003, 0x1200, + 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, + 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, + 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, 0x9084, 0x00ff, + 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x98a5, 0x080c, + 0x939e, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, + 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, + 0x0156, 0x080c, 0x93e9, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, + 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, + 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, + 0x0002, 0x1f04, 0x9b31, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5, + 0x0016, 0x0026, 0x080c, 0x93c5, 0x080c, 0x93d7, 0x9e80, 0x0004, + 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, + 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808, + 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, + 0x0004, 0x8003, 0x60c2, 0x080c, 0x98a5, 0x002e, 0x001e, 0x0005, + 0x20a9, 0x0010, 0x4003, 0x080c, 0xa17b, 0x20a1, 0x0240, 0x22a8, + 0x4003, 0x0c68, 0x080c, 0x939e, 0x7003, 0x6200, 0x7808, 0x700e, + 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0016, 0x0026, 0x080c, 0x939e, + 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, + 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e, + 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, + 0x98a5, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, + 0x2091, 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178, + 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x600c, 0x0006, 0x080c, + 0xc638, 0x080c, 0xa39d, 0x080c, 0x9cd9, 0x00ce, 0x0c78, 0x2c00, + 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, + 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, + 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, + 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024, + 0x2060, 0x8cff, 0x01f8, 0x080c, 0x98d1, 0x6ac0, 0x68c3, 0x0000, + 0x080c, 0x858c, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa194, 0x00ce, + 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xa419, 0x000e, + 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, + 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, + 0x9096, 0x0004, 0x0d60, 0x080c, 0x858c, 0x6814, 0x9084, 0x0001, + 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, + 0x5e1c, 0x080c, 0x84c2, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, + 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, + 0x2bde, 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04, + 0x9c17, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2bce, 0x9006, 0x080c, 0x2bce, 0x0005, 0x0126, 0x0156, 0x00f6, + 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, + 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, + 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff, + 0x0904, 0x9c9c, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, + 0x0904, 0x9c9c, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, + 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8599, 0x080c, + 0x1f22, 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8, + 0x692c, 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094, + 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bde, + 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x9c76, + 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, + 0x9006, 0x080c, 0x2bce, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, + 0x2009, 0x0049, 0x080c, 0xa419, 0x000e, 0x001e, 0x002e, 0x006e, + 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, + 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de, + 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32, + 0x012e, 0x00de, 0x0005, 0x080c, 0x9561, 0x7047, 0x1000, 0x0098, + 0x080c, 0x9561, 0x7047, 0x4000, 0x0070, 0x080c, 0x9561, 0x7047, + 0x2000, 0x0048, 0x080c, 0x9561, 0x7047, 0x0400, 0x0020, 0x080c, + 0x9561, 0x7047, 0x0200, 0x7854, 0x7032, 0x60c3, 0x0020, 0x0804, + 0x98a5, 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001, + 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, + 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614, + 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9d7e, 0x8cff, + 0x0904, 0x9d7e, 0x6020, 0x9086, 0x0006, 0x1904, 0x9d79, 0x88ff, + 0x0138, 0x2800, 0x9c06, 0x1904, 0x9d79, 0x2039, 0x0000, 0x0050, + 0x6010, 0x9b06, 0x1904, 0x9d79, 0x85ff, 0x0120, 0x6054, 0x9106, + 0x1904, 0x9d79, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, + 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, + 0x858c, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0428, 0x080c, 0x858c, + 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, + 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, + 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, + 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, + 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, + 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, + 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, + 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, + 0x0096, 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x009e, + 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x88ff, 0x1190, 0x00ce, 0x0804, + 0x9cf4, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9cf4, 0x9006, 0x012e, + 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, + 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, + 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, + 0x8000, 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, + 0x9df2, 0x6020, 0x9086, 0x0006, 0x1904, 0x9ded, 0x87ff, 0x0128, + 0x2700, 0x9c06, 0x1904, 0x9ded, 0x0040, 0x6010, 0x9b06, 0x15e8, + 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, + 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000, 0x9006, + 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, + 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, + 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, + 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, + 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x080c, 0xa3cf, + 0x87ff, 0x1198, 0x00ce, 0x0804, 0x9d9e, 0x2c78, 0x600c, 0x2060, + 0x0804, 0x9d9e, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, + 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, + 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800, + 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, + 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638, + 0x2660, 0x2678, 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038, + 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, + 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, + 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, + 0x6004, 0x9086, 0x0040, 0x090c, 0x8d2c, 0x9085, 0x0001, 0x0020, + 0x2c78, 0x600c, 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, + 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, + 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, + 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9ee9, 0x6010, + 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9ee4, 0x7024, + 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9ebb, + 0x080c, 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, + 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, + 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, + 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, + 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, + 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, + 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, + 0x080c, 0xc3c0, 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518, + 0x080c, 0xadb3, 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0, + 0x6827, 0x0001, 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, + 0x0090, 0x6014, 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086, + 0x0003, 0x1508, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, + 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c, + 0x9cd9, 0x00ce, 0x0804, 0x9e64, 0x2c78, 0x600c, 0x2060, 0x0804, + 0x9e64, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, + 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, + 0xdcc3, 0x0c08, 0x00d6, 0x080c, 0x93e9, 0x7003, 0x0200, 0x7007, + 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9, + 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, + 0x7027, 0x7878, 0x080c, 0x98a5, 0x00de, 0x0005, 0x080c, 0x93e9, + 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, + 0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, + 0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, + 0x0804, 0x98a5, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, + 0x0035, 0x080c, 0xc83f, 0x00de, 0x1904, 0x9f97, 0x080c, 0x939e, + 0x7003, 0x1300, 0x782c, 0x080c, 0xa09d, 0x2068, 0x6820, 0x9086, + 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xa307, 0x11d8, + 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, + 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, + 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, + 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, + 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xa307, + 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, + 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, + 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, + 0x000c, 0x001e, 0x00de, 0x080c, 0x98a5, 0x00be, 0x0005, 0x781b, + 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, + 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, + 0x0904, 0xa012, 0x9186, 0x0005, 0x0904, 0x9ffa, 0x9186, 0x0004, + 0x05d8, 0x9186, 0x0008, 0x0904, 0xa003, 0x7807, 0x0037, 0x782f, + 0x0003, 0x7817, 0x1700, 0x080c, 0xa07a, 0x0005, 0x080c, 0xa03b, + 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, + 0x9fdb, 0x9fe6, 0x9fdd, 0x9fe6, 0x9fe2, 0x9fdb, 0x9fdb, 0x9fe6, + 0x9fe6, 0x9fe6, 0x9fe6, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb, + 0x9fe6, 0x9fdb, 0x9fe6, 0x080c, 0x0dc3, 0x6824, 0xd0e4, 0x0110, + 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, + 0x6830, 0x7026, 0x0804, 0xa034, 0x080c, 0xa03b, 0x00d6, 0x0026, + 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, + 0x900e, 0x04d0, 0x080c, 0xa03b, 0x00d6, 0x0026, 0x792c, 0x2168, + 0x2009, 0x4000, 0x0488, 0x04b9, 0x00d6, 0x0026, 0x792c, 0x2168, + 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, + 0x900e, 0x0410, 0x0441, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, + 0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9b0, 0xa834, 0x9112, + 0xa9b4, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180, + 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, + 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, + 0x00de, 0x0804, 0x98a5, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, + 0x080c, 0x93e9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, + 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xa307, 0x1118, 0x9092, + 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34, + 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, + 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, + 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, + 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, + 0x00be, 0x0005, 0x080c, 0x93e9, 0x7003, 0x0100, 0x782c, 0x700a, + 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c, + 0x9395, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, + 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, + 0x701a, 0x60c3, 0x0010, 0x0804, 0x98a5, 0x00e6, 0x2071, 0x0240, + 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084, + 0x0120, 0x7844, 0x702a, 0x7848, 0x702e, 0x00be, 0x00fe, 0x000e, + 0x00ee, 0x0005, 0x080c, 0x93e0, 0x7003, 0x0100, 0x782c, 0x700a, + 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0021, 0x60c3, + 0x0000, 0x0804, 0x98a5, 0x00d6, 0x080c, 0xa190, 0xb810, 0x9085, + 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, + 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9893, 0x721a, 0x2f10, + 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x080c, + 0x93e9, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238, 0x9286, 0x0004, 0x2001, 0x8000, 0x0138, 0x9286, 0x0007, 0x2001, 0x4000, 0x0110, 0x2001, 0x0002, 0x700e, 0x60c3, 0x0008, 0x0804, - 0x95f7, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, - 0x0026, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, - 0x2012, 0x002e, 0x080c, 0x961a, 0x080c, 0x8417, 0x0005, 0x0036, - 0x0096, 0x00d6, 0x00e6, 0x7828, 0x2048, 0xaa80, 0x9296, 0x00c0, + 0x98a5, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, + 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, + 0x2012, 0x002e, 0x080c, 0x98c8, 0x080c, 0x8583, 0x0005, 0x0036, + 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa80, 0x9296, 0x00c0, 0x9294, 0x00fd, 0xaa82, 0xaa84, 0x9294, 0x0300, 0xaa86, 0xa970, 0x9194, 0x00ff, 0xab78, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa972, 0x9384, 0xff00, 0x9215, 0xaa7a, 0xa874, 0xaa7c, 0xa87e, 0xaa76, - 0x00d6, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x00de, 0x20e9, 0x0000, + 0x00d6, 0x2069, 0x0200, 0x080c, 0xa190, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa6c, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa880, 0xd0fc, - 0x0198, 0x9084, 0x0003, 0x1180, 0x2001, 0x180c, 0x2004, 0xd0bc, - 0x0158, 0xa8ac, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, - 0x2102, 0x2009, 0x198f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, - 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, - 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, - 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, - 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, - 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, - 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, - 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, - 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, - 0x0096, 0x6014, 0x2048, 0xa87c, 0x6026, 0x9006, 0xa836, 0xa83a, - 0xa9a0, 0xa946, 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, - 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, - 0xa85a, 0xa813, 0x1f6e, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000, - 0x080c, 0x8d06, 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, - 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, - 0x2071, 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9de2, - 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, - 0x9db4, 0x080c, 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, - 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, - 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, - 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, - 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, - 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, - 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, - 0x0000, 0x080c, 0xbb45, 0x1180, 0x080c, 0x308f, 0x080c, 0xbb56, - 0x1518, 0x080c, 0xa717, 0x0400, 0x080c, 0x9b30, 0x6824, 0xd084, - 0x09b0, 0x6827, 0x0001, 0x0898, 0x080c, 0xbb56, 0x1118, 0x080c, - 0xa717, 0x0090, 0x6014, 0x2048, 0x080c, 0xb953, 0x0168, 0x6020, - 0x9086, 0x0003, 0x1520, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, - 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x080c, 0xbc8f, 0x080c, 0x9f42, - 0x080c, 0x9a08, 0x00ce, 0x0804, 0x9d65, 0x2c78, 0x600c, 0x2060, - 0x0804, 0x9d65, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, - 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, - 0x9086, 0x0006, 0x1d08, 0x080c, 0xd101, 0x08f0, 0x00d6, 0x0156, - 0x080c, 0x91bc, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, - 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, - 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, - 0x0060, 0x080c, 0x72e5, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, - 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, - 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, - 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, - 0x9290, 0x0002, 0x1f04, 0x9e2a, 0x60c3, 0x0020, 0x080c, 0x95f7, - 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x91bc, 0x7a14, 0x82ff, - 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, - 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, - 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x199a, 0x2204, 0x8007, - 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, - 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, - 0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, - 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, - 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, - 0x0804, 0x95f7, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, - 0x0005, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, - 0x99e0, 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e, - 0x0005, 0x080c, 0x31c5, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, - 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6411, 0xb85c, - 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188e, - 0x7000, 0x9005, 0x0140, 0x2001, 0x12ee, 0x2071, 0x1800, 0x7072, - 0x7076, 0x7067, 0xfff0, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, - 0x1cc8, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, - 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, - 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, 0x0cb0, - 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, - 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, - 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, - 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, - 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, - 0x1208, 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, - 0x7552, 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, - 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc8, 0x9006, 0x0cc8, - 0x9c82, 0x1cc8, 0x0a0c, 0x0dc4, 0x2001, 0x1819, 0x2004, 0x9c02, - 0x1a0c, 0x0dc4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, - 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6026, 0x602a, - 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001, 0x0108, - 0x0005, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8c37, 0x001e, - 0x012e, 0x0cb0, 0x0006, 0x6000, 0x9086, 0x0000, 0x0190, 0x601c, - 0xd084, 0x190c, 0x1950, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, - 0x1963, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, - 0x601a, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, - 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060, 0x6000, - 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, - 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, - 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, - 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0, - 0x6020, 0x9084, 0x000f, 0x0002, 0x9f9b, 0x9fa4, 0x9fbf, 0x9fda, - 0xbf64, 0xbf81, 0xbf9c, 0x9f9b, 0x9fa4, 0x9f9b, 0x9ff3, 0x9f9b, - 0x9f9b, 0x9f9b, 0x9f9b, 0x9186, 0x0013, 0x1128, 0x080c, 0x8b2b, - 0x080c, 0x8c37, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0010, - 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005, 0x9fbd, 0xa57b, 0xa75e, - 0x9fbd, 0xa7dd, 0x9fbd, 0x9fbd, 0x9fbd, 0xa505, 0xadb7, 0x9fbd, - 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x080c, 0x0dc4, 0x0066, - 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005, - 0x9fd8, 0xb3cf, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, - 0xb37f, 0xb4c6, 0x9fd8, 0xb410, 0xb474, 0xb410, 0xb474, 0x9fd8, - 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc4, 0x6000, - 0x0002, 0x9ff1, 0xadfc, 0xaeb8, 0xafac, 0xb14e, 0x9ff1, 0x9ff1, - 0x9ff1, 0xadd2, 0xb304, 0xb307, 0x9ff1, 0x9ff1, 0x9ff1, 0x9ff1, - 0xb336, 0x080c, 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, - 0x0dc4, 0x0013, 0x006e, 0x0005, 0xa00c, 0xa00c, 0xa04f, 0xa0e7, - 0xa17c, 0xa00c, 0xa00c, 0xa00c, 0xa00e, 0xa00c, 0xa00c, 0xa00c, - 0xa00c, 0xa00c, 0xa00c, 0xa00c, 0x080c, 0x0dc4, 0x9186, 0x004c, - 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc4, 0x0096, 0x601c, 0xc0ed, - 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880, 0x9084, - 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0x9006, - 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, - 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, - 0x1aa2, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d06, - 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, - 0x080c, 0xa19e, 0x080c, 0xbf10, 0x6003, 0x0007, 0x0005, 0x00d6, - 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa880, - 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046, 0xa8e4, - 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f, 0x0007, - 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000, 0x8214, - 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, - 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, - 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, - 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, - 0x0002, 0xa0af, 0xa0af, 0xa0a6, 0xa0a9, 0xa0af, 0xa0a3, 0xa0a1, - 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, - 0xa0a1, 0x080c, 0x0dc4, 0x080c, 0xa9ce, 0x0048, 0x080c, 0xab05, - 0x0030, 0x080c, 0xabf3, 0x2001, 0x0004, 0x080c, 0x6372, 0x00fe, - 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a, 0x000e, - 0x080c, 0xa25c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, - 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, - 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031, 0x0000, - 0x2041, 0x1266, 0x080c, 0xa45b, 0x0160, 0x000e, 0x9005, 0x0120, - 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, - 0x9f18, 0x2001, 0x002c, 0x900e, 0x080c, 0xa2c2, 0x0c70, 0x91b6, - 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, - 0x0dc4, 0x91b2, 0x0050, 0x1a0c, 0x0dc4, 0x9182, 0x0047, 0x00ca, - 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, - 0x0006, 0x0016, 0x0026, 0x080c, 0x8689, 0x002e, 0x001e, 0x000e, - 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xa04f, - 0x0005, 0xa11a, 0xa11a, 0xa11c, 0xa152, 0xa11a, 0xa11a, 0xa11a, - 0xa11a, 0xa165, 0x080c, 0x0dc4, 0x00d6, 0x0016, 0x0096, 0x080c, - 0x8be7, 0x080c, 0x8d06, 0x6003, 0x0004, 0x6114, 0x2148, 0xa880, - 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898, 0x9005, - 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa2c2, 0x080c, 0x9f18, - 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178, 0xa8b2, - 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8, 0xa8b2, - 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e, 0x001e, - 0x00de, 0x0005, 0x080c, 0x8be7, 0x00d6, 0x0096, 0x6114, 0x2148, - 0x080c, 0xb955, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6b1d, 0x009e, - 0x00de, 0x080c, 0x9f18, 0x0804, 0x8d06, 0x080c, 0x8be7, 0x080c, - 0x3066, 0x080c, 0xbf0d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, - 0xb955, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x00de, - 0x080c, 0x9f18, 0x0804, 0x8d06, 0x9182, 0x0047, 0x0002, 0xa18c, - 0xa18e, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, - 0xa18c, 0xa18c, 0xa18c, 0xa18e, 0x080c, 0x0dc4, 0x00d6, 0x0096, - 0x080c, 0x154a, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887, 0x0000, - 0x080c, 0x6b1d, 0x009e, 0x00de, 0x0804, 0x9f18, 0x0026, 0x0036, - 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1001, - 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x001a, - 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079, 0x1800, - 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a, 0x2950, - 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, - 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xb54b, 0x04c0, - 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xb54b, 0x96b2, - 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c, 0x1001, - 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406, - 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c, 0xb54b, - 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c, - 0x080c, 0xb54b, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, - 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076, 0x0048, - 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, - 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6b1d, - 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, - 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, - 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c, - 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa6a, - 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182, - 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976, 0xac7a, - 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205, 0x200c, - 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6b1d, - 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, - 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, - 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80, 0x000c, - 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, - 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1001, - 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, - 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, - 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, - 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, - 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, - 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa271, 0x0804, - 0xa273, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, - 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87e, - 0xa986, 0x080c, 0x6b11, 0x009e, 0x003e, 0x00de, 0x0005, 0x20a9, - 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804, - 0x9005, 0x15c0, 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8, - 0xa85c, 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, - 0x9080, 0x001c, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, - 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, - 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, - 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xb955, - 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e, - 0x0804, 0x9f18, 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c, - 0xa717, 0x0804, 0x9f18, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198, - 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080, - 0x000e, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0, - 0x4003, 0x3318, 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e, - 0x20a0, 0x3318, 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8, - 0x6014, 0x0096, 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c, - 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, - 0x000e, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, - 0x1247, 0x080c, 0xa45b, 0x0120, 0x008e, 0x009e, 0x0804, 0x9f18, - 0x080c, 0xa717, 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, - 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0000, 0x00be, - 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, - 0xab32, 0x080c, 0x9f18, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, - 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbef8, 0x0178, 0x6014, - 0x9005, 0x1160, 0x600b, 0x0003, 0x601b, 0x0000, 0x2009, 0x0022, - 0x080c, 0xa551, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, + 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, + 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8ac, 0x9005, + 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x198f, + 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, + 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, + 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, + 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, + 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, + 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, + 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, + 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, + 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, + 0xa87c, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa9a0, 0xa946, 0xa84a, + 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, + 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1fb6, + 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c, 0x8f0e, 0x012e, + 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, + 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c, + 0x2660, 0x2678, 0x8cff, 0x0904, 0xa267, 0x7024, 0x9c06, 0x1520, + 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa239, 0x080c, 0x98d1, + 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, + 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, + 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, + 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, + 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, + 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, + 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xc3c0, + 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518, 0x080c, 0xadb3, + 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, + 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0090, 0x6014, + 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, + 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, + 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x00ce, + 0x0804, 0xa1ea, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa1ea, 0x700f, + 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, + 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, + 0x080c, 0xdcc3, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x93e9, 0x7a14, + 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, + 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, + 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x7351, + 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac, + 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, + 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376, + 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, + 0xa2af, 0x60c3, 0x0020, 0x080c, 0x98a5, 0x015e, 0x00de, 0x0005, + 0x0156, 0x080c, 0x93e9, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, + 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, + 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, + 0x0001, 0x2011, 0x199a, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, + 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, + 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026, + 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, + 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, + 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5, 0x0006, + 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, + 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf, + 0x0036, 0x901e, 0x080c, 0x9c35, 0x003e, 0x0005, 0x080c, 0x3261, + 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012, + 0x2009, 0x007e, 0x080c, 0x64fc, 0xb85c, 0xc0ac, 0xb85e, 0x00ce, + 0x00be, 0x001e, 0x0005, 0x2071, 0x188e, 0x7000, 0x9005, 0x0140, + 0x2001, 0x0976, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffe0, + 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6, + 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010, + 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, + 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, + 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, + 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, + 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, + 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, + 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, + 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, + 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, + 0x7057, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, + 0x0dc3, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0dc3, 0x9006, + 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, + 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e, + 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x6050, + 0x8000, 0x6052, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091, + 0x8000, 0x0016, 0x080c, 0x8e38, 0x001e, 0x012e, 0x0cb0, 0x0006, + 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, 0x1998, + 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1962, 0x2004, 0x0006, + 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xdf7c, + 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, + 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060, + 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, + 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, + 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, + 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006, + 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xa42c, 0xa435, 0xa450, + 0xa46b, 0xc93f, 0xc95c, 0xc977, 0xa42c, 0xa435, 0xa42c, 0xa484, + 0xa42c, 0xa42c, 0xa42c, 0xa42c, 0x9186, 0x0013, 0x1128, 0x080c, + 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, + 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa44e, 0xac0f, + 0xadfa, 0xa44e, 0xae89, 0xa760, 0xa44e, 0xa44e, 0xab8f, 0xb472, + 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0x080c, 0x0dc3, + 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e, + 0x0005, 0xa469, 0xbb61, 0xa469, 0xa469, 0xa469, 0xa469, 0xa469, + 0xa469, 0xbaf8, 0xbce3, 0xa469, 0xbba2, 0xbc21, 0xbba2, 0xbc21, + 0xa469, 0x080c, 0x0dc3, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc3, + 0x6000, 0x0002, 0xa482, 0xb4b9, 0xb581, 0xb6b7, 0xb866, 0xa482, + 0xa482, 0xa482, 0xb48d, 0xba7d, 0xba80, 0xa482, 0xa482, 0xa482, + 0xa482, 0xbaaf, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010, + 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa49d, 0xa49d, 0xa4e0, + 0xa578, 0xa60d, 0xa49d, 0xa49d, 0xa49d, 0xa49f, 0xa49d, 0xa49d, + 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0x080c, 0x0dc3, 0x9186, + 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc3, 0x0096, 0x601c, + 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880, + 0x9084, 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, + 0x9006, 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001, + 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, + 0x080c, 0x1aea, 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c, + 0x8f0e, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, + 0x2c00, 0x080c, 0xa62f, 0x080c, 0xc8e6, 0x6003, 0x0007, 0x0005, + 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, + 0xa880, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046, + 0xa8e4, 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f, + 0x0007, 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000, + 0x8214, 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, + 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, + 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, + 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, + 0x9405, 0x0002, 0xa540, 0xa540, 0xa537, 0xa53a, 0xa540, 0xa534, + 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, + 0xa532, 0xa532, 0x080c, 0x0dc3, 0x080c, 0xb082, 0x0048, 0x080c, + 0xb1b9, 0x0030, 0x080c, 0xb2a7, 0x2001, 0x0004, 0x080c, 0x6448, + 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a, + 0x000e, 0x080c, 0xa6ed, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, + 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, + 0xffc0, 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031, + 0x0000, 0x2041, 0x1272, 0x080c, 0xa8fb, 0x0160, 0x000e, 0x9005, + 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, + 0x0804, 0xa39d, 0x2001, 0x002c, 0x900e, 0x080c, 0xa753, 0x0c70, + 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, + 0x0a0c, 0x0dc3, 0x91b2, 0x0050, 0x1a0c, 0x0dc3, 0x9182, 0x0047, + 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, + 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x885a, 0x002e, 0x001e, + 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, + 0xa4e0, 0x0005, 0xa5ab, 0xa5ab, 0xa5ad, 0xa5e3, 0xa5ab, 0xa5ab, + 0xa5ab, 0xa5ab, 0xa5f6, 0x080c, 0x0dc3, 0x00d6, 0x0016, 0x0096, + 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x6003, 0x0004, 0x6114, 0x2148, + 0xa880, 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898, + 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa753, 0x080c, + 0xa39d, 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178, + 0xa8b2, 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8, + 0xa8b2, 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e, + 0x001e, 0x00de, 0x0005, 0x080c, 0x8de8, 0x00d6, 0x0096, 0x6114, + 0x2148, 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6c02, + 0x009e, 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x080c, 0x8de8, + 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00d6, 0x0096, 0x6114, 0x2148, + 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e, + 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x9182, 0x0047, 0x0002, + 0xa61d, 0xa61f, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d, + 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61f, 0x080c, 0x0dc3, 0x00d6, + 0x0096, 0x080c, 0x155f, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887, + 0x0000, 0x080c, 0x6c02, 0x009e, 0x00de, 0x0804, 0xa39d, 0x0026, + 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, + 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8, 0xa95c, 0x9188, + 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079, + 0x1800, 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a, + 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, + 0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xbd68, + 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xbd68, + 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c, + 0x100d, 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, + 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c, + 0xbd68, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, + 0x001c, 0x080c, 0xbd68, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, + 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076, + 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, + 0x0050, 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, + 0x6c02, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, + 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, + 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8, + 0xa95c, 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, + 0xaa6a, 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, + 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976, + 0xac7a, 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205, + 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, + 0x6c02, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, + 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, + 0x001e, 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80, + 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, + 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, + 0x100d, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, + 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, + 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, + 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, + 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, + 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, + 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa702, + 0x0804, 0xa704, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, + 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, + 0xa87e, 0xa986, 0x080c, 0x6bf5, 0x009e, 0x003e, 0x00de, 0x0005, + 0x91b6, 0x0015, 0x1118, 0x080c, 0xa39d, 0x0030, 0x91b6, 0x0016, + 0x190c, 0x0dc3, 0x080c, 0xa39d, 0x0005, 0x20a9, 0x000e, 0x20e1, + 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804, 0x9005, 0x15c0, + 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, + 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080, 0x001c, + 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0, + 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006, + 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318, + 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc1cd, 0x0130, 0x6014, + 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d, + 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c, 0xadb3, 0x0804, + 0xa39d, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198, 0x0096, 0x2048, + 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080, 0x000e, 0x20a0, + 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0, 0x4003, 0x3318, + 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, + 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8, 0x6014, 0x0096, + 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c, 0x8806, 0x8006, + 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000e, 0xaaa4, + 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x080c, + 0xa8fb, 0x0120, 0x008e, 0x009e, 0x0804, 0xa39d, 0x080c, 0xadb3, + 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, + 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005, + 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xab32, 0x080c, + 0xa39d, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, + 0x0006, 0x0016, 0x080c, 0xc8ce, 0x0188, 0x6014, 0x9005, 0x1170, + 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022, + 0x080c, 0xabe5, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099, @@ -5022,449 +5170,528 @@ static const uint16_t isp_2300_risc_code[] = { 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, - 0x080c, 0x9f18, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e, + 0x080c, 0xa39d, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b, - 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb54b, - 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xb955, 0x0140, 0x6014, + 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xbd68, + 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc1cd, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, - 0x9f18, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, + 0xa39d, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, - 0x9005, 0x0108, 0x2048, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013, - 0x0000, 0x009e, 0x080c, 0xb955, 0x0148, 0xa804, 0x9005, 0x1158, - 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0x9f18, + 0x9005, 0x0108, 0x2048, 0x080c, 0xbd68, 0x2011, 0x0205, 0x2013, + 0x0000, 0x009e, 0x080c, 0xc1cd, 0x0148, 0xa804, 0x9005, 0x1158, + 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0xa39d, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, - 0x0100, 0x1118, 0x080c, 0xa717, 0x00e0, 0xa034, 0x8007, 0x800c, + 0x0100, 0x1118, 0x080c, 0xadb3, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xaaa4, - 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247, 0x0019, - 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1001, 0x000e, + 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x0019, + 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x100d, 0x000e, 0x01b0, 0xa8af, 0x0dcb, 0xa87a, 0x000e, 0xa8a6, 0x0006, 0xae6e, 0x2800, 0xa8a2, 0xa97e, 0xaf76, 0xaa92, 0xab96, 0xac9a, 0xad9e, - 0x0086, 0x2940, 0x080c, 0x10eb, 0x008e, 0x9085, 0x0001, 0x009e, - 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, - 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, - 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, - 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xad8d, 0x002e, 0x003e, - 0x015e, 0x009e, 0x1904, 0xa4e4, 0x0096, 0x0156, 0x0036, 0x0026, - 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, - 0xad8d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, 0x7238, 0xba0a, - 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, 0xbc02, 0xa804, - 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0xa305, 0x0096, - 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, - 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, - 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247, - 0x080c, 0xa45b, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9f18, 0x00be, - 0x0005, 0x080c, 0xa717, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3066, - 0x080c, 0xbf0d, 0x00fe, 0x00c6, 0x080c, 0x9ec2, 0x2f00, 0x6012, - 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, - 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x639e, 0x080c, 0x8718, - 0x080c, 0x8c37, 0x00ce, 0x0804, 0xa4b7, 0x2100, 0x91b2, 0x0054, - 0x1a0c, 0x0dc4, 0x91b2, 0x0040, 0x1a04, 0xa563, 0x0002, 0xa551, - 0xa551, 0xa551, 0xa551, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, - 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, - 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, - 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f, - 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, - 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, - 0xa54f, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, - 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f, 0xa54f, 0x080c, - 0x0dc4, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, - 0x8718, 0x0010, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, - 0x8c37, 0x012e, 0x0005, 0x2600, 0x0002, 0xa579, 0xa579, 0xa579, - 0xa551, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa551, 0xa579, - 0xa551, 0xa579, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa579, - 0xa579, 0x080c, 0x0dc4, 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4, - 0x91b6, 0x0013, 0x0904, 0xa64e, 0x91b6, 0x0027, 0x1904, 0xa5f8, - 0x080c, 0x8b2b, 0x6004, 0x080c, 0xbb45, 0x01b0, 0x080c, 0xbb56, - 0x01a8, 0x908e, 0x0021, 0x0904, 0xa5f5, 0x908e, 0x0022, 0x1130, - 0x080c, 0xa382, 0x0904, 0xa5f1, 0x0804, 0xa5f2, 0x908e, 0x003d, - 0x0904, 0xa5f5, 0x0804, 0xa5eb, 0x080c, 0x308f, 0x2001, 0x0007, - 0x080c, 0x6372, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, - 0xa717, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, - 0x080c, 0x72e5, 0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, - 0x0028, 0x2110, 0x080c, 0xd251, 0x002e, 0x003e, 0x0016, 0x0026, - 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8843, 0x0076, 0x903e, - 0x080c, 0x8748, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, - 0x080c, 0xce89, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xbf0d, - 0x0016, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x001e, 0x080c, 0x3162, - 0x080c, 0x8c37, 0x0030, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x080c, - 0x8c37, 0x0005, 0x080c, 0xa717, 0x0cb0, 0x080c, 0xa753, 0x0c98, - 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, 0xbf19, - 0x0d80, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0c50, 0x9186, - 0x0014, 0x1d38, 0x080c, 0x8b2b, 0x6004, 0x908e, 0x0022, 0x1118, - 0x080c, 0xa382, 0x09f0, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c, - 0xbb45, 0x1198, 0x080c, 0x308f, 0x6010, 0x00b6, 0x2058, 0xb9a0, - 0x00be, 0x080c, 0xa717, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, - 0x200c, 0xc185, 0x2102, 0x0804, 0xa5eb, 0x080c, 0xbb56, 0x1120, - 0x080c, 0xa717, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0032, 0x1160, - 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd, - 0x00fe, 0x00ee, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0021, 0x0d40, - 0x908e, 0x0022, 0x090c, 0xa717, 0x0804, 0xa5eb, 0x90b2, 0x0040, - 0x1a04, 0xa6fe, 0x2008, 0x0002, 0xa696, 0xa697, 0xa69a, 0xa69d, - 0xa6a0, 0xa6ad, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, - 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, - 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, - 0xa694, 0xa694, 0xa6b0, 0xa6b3, 0xa694, 0xa6b5, 0xa6b3, 0xa694, - 0xa694, 0xa694, 0xa694, 0xa694, 0xa6b3, 0xa6b3, 0xa694, 0xa694, - 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa6e5, 0xa6b3, - 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, - 0xa694, 0xa6b3, 0xa6dc, 0xa694, 0x080c, 0x0dc4, 0x00e0, 0x2001, - 0x000b, 0x0420, 0x2001, 0x0003, 0x0408, 0x2001, 0x0005, 0x00f0, - 0x6010, 0x00b6, 0x2058, 0xb804, 0x00be, 0x9084, 0x00ff, 0x9086, - 0x0000, 0x11b0, 0x2001, 0x0001, 0x0088, 0x2001, 0x0009, 0x0070, - 0x080c, 0x0dc4, 0x0050, 0x0804, 0xa6f6, 0x080c, 0x8b2b, 0x080c, - 0xbf10, 0x6003, 0x0004, 0x080c, 0x8c37, 0x0005, 0x080c, 0x6372, - 0x080c, 0x8b2b, 0x6003, 0x0002, 0x0036, 0x2019, 0x1869, 0x2304, - 0x9084, 0xff00, 0x1120, 0x2001, 0x1963, 0x201c, 0x0040, 0x8007, - 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, - 0x003e, 0x080c, 0x8c37, 0x0c08, 0x080c, 0x8b2b, 0x080c, 0xbc8f, - 0x080c, 0x9f18, 0x080c, 0x8c37, 0x08c0, 0x00e6, 0x00f6, 0x2071, - 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd, 0x00fe, 0x00ee, 0x080c, - 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0838, 0x080c, 0x8b2b, - 0x6003, 0x0002, 0x080c, 0xbf10, 0x0804, 0x8c37, 0x2600, 0x2008, - 0x0002, 0xa715, 0xa715, 0xa715, 0xa6f6, 0xa6f6, 0xa715, 0xa715, - 0xa715, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715, - 0xa715, 0xa715, 0xa715, 0xa715, 0xa715, 0x080c, 0x0dc4, 0x00e6, - 0x0096, 0x0026, 0x0016, 0x080c, 0xb955, 0x0568, 0x6014, 0x2048, - 0xa868, 0x9086, 0x0139, 0x11a8, 0xa898, 0x9086, 0x0056, 0x1148, - 0x080c, 0x533c, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, - 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe00, - 0x0090, 0xa86c, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, - 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa86b, - 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, - 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, - 0xa86b, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, - 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0dc4, - 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd1f, 0x0804, 0xa7cb, - 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbd68, 0x0804, 0xa7cb, - 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbd94, 0x0804, 0xa7cb, - 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcb1, 0x0804, 0xa7cb, - 0x6604, 0x96b6, 0x0028, 0x1118, 0x080c, 0xbb94, 0x04e0, 0x6604, - 0x96b6, 0x0029, 0x1118, 0x080c, 0xbbd5, 0x04a8, 0x6604, 0x96b6, - 0x001f, 0x1118, 0x080c, 0xa2cf, 0x0470, 0x6604, 0x96b6, 0x0000, - 0x1118, 0x080c, 0xa479, 0x0438, 0x6604, 0x96b6, 0x0022, 0x1118, - 0x080c, 0xa363, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, - 0xa399, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa3d5, - 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa404, 0x0058, - 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, - 0x00be, 0x0804, 0xaaac, 0x00be, 0x0005, 0x080c, 0x9fa3, 0x0cd8, - 0xa7e9, 0xa7f7, 0xa7e9, 0xa834, 0xa7e9, 0xa9ce, 0xaab9, 0xa7e9, - 0xa7e9, 0xa7e9, 0xaa86, 0xa7e9, 0xaa9a, 0x0096, 0x080c, 0x154a, - 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0x009e, 0x0804, - 0x9f18, 0xa001, 0xa001, 0x0005, 0x6604, 0x96b6, 0x0004, 0x1130, - 0x2001, 0x0001, 0x080c, 0x635e, 0x0804, 0x9f18, 0x0005, 0x00e6, - 0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1500, 0x080c, 0xce5a, - 0x1170, 0x6010, 0x00b6, 0x2058, 0x00e9, 0x00be, 0x2001, 0x0006, - 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0088, 0x2001, - 0x000a, 0x080c, 0x6372, 0x080c, 0x308f, 0x6003, 0x0001, 0x6007, - 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0xa9b9, - 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c, - 0x635e, 0x2069, 0x185e, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006, - 0x080c, 0x639e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011, - 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa990, 0x6010, 0x2058, - 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xabfe, 0x0804, 0xa8fd, - 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xa89f, 0x00d6, 0x080c, - 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781, 0x002e, - 0x0904, 0xa89e, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048, 0xa807, - 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, - 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, - 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, - 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, - 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00, 0x0040, - 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, - 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c, 0x9f18, - 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xa993, 0x00de, 0x080c, - 0xabf3, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, - 0x9005, 0x01a8, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, - 0x0030, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x2001, - 0x0006, 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0804, - 0xa993, 0x080c, 0xa9a1, 0x6014, 0x9005, 0x0190, 0x2048, 0xa86c, - 0xd0f4, 0x01e8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, - 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x08f8, - 0x080c, 0xa997, 0x0160, 0x9006, 0x080c, 0x635e, 0x2001, 0x0004, - 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x08a0, 0x2001, - 0x0004, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, - 0x8718, 0x080c, 0x8c37, 0x0804, 0xa993, 0xb85c, 0xd0e4, 0x0178, - 0x080c, 0xbc49, 0x080c, 0x72e5, 0x0118, 0xd0dc, 0x1904, 0xa8bf, - 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x0804, 0xa8bf, 0x080c, - 0xbc7a, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, - 0xcffa, 0x000e, 0x1904, 0xa8bf, 0xc0b5, 0x2012, 0x2001, 0x0006, - 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x00c6, 0x2001, 0x180f, - 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, - 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea, - 0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, - 0x080c, 0x26e8, 0x00f6, 0x2100, 0x900e, 0x080c, 0x269f, 0x795a, - 0x00fe, 0x9186, 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009, - 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932, - 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26e8, 0x00f6, - 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x797a, 0x080c, 0x269f, - 0x795a, 0x00fe, 0x8108, 0x080c, 0x63c1, 0x2b00, 0x00ce, 0x1904, - 0xa8bf, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, - 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, - 0xb916, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0018, - 0x080c, 0xa717, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, - 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x185f, 0x2004, 0xd0ac, - 0x0005, 0x00e6, 0x080c, 0xd2aa, 0x0190, 0x2071, 0x0260, 0x7108, - 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, - 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, - 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x55bb, - 0x1120, 0x2001, 0x0007, 0x080c, 0x639e, 0x080c, 0x308f, 0x6020, - 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9f18, 0x00b6, 0x00e6, - 0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, - 0xaa7d, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xaa30, 0x00d6, - 0x080c, 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781, - 0x002e, 0x0904, 0xaa2f, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048, - 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, - 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, - 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005, - 0x090c, 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, - 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00, - 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, - 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c, - 0x9f18, 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xaa81, 0x00de, - 0x080c, 0x55bb, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, - 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e, - 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x64ac, 0x080c, 0xa822, - 0x00de, 0x080c, 0xacce, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, - 0x0560, 0x2001, 0x0006, 0x080c, 0x6372, 0x0096, 0x6014, 0x904d, - 0x01d0, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, - 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x0060, 0xa868, - 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa86b, - 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x308f, 0x6020, 0x9086, - 0x000a, 0x0138, 0x080c, 0x9f18, 0x0020, 0x080c, 0xa717, 0x080c, - 0xa9b9, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, - 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6372, - 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37, - 0x0804, 0xa9b9, 0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, - 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x6372, - 0x0804, 0x9f18, 0x0804, 0xa9b9, 0x0002, 0xa7e9, 0xaac4, 0xa7e9, - 0xab05, 0xa7e9, 0xabb0, 0xaab9, 0xa7ec, 0xa7e9, 0xabc2, 0xa7e9, - 0xabd2, 0x6604, 0x9686, 0x0003, 0x0904, 0xa9ce, 0x96b6, 0x001e, - 0x1110, 0x080c, 0x9f18, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, - 0xabe2, 0x11a0, 0x9006, 0x080c, 0x635e, 0x080c, 0x3066, 0x080c, - 0xbf0d, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007, - 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0418, 0x2009, 0x026e, - 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, - 0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088, - 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e, 0x1900, 0x0148, - 0x908e, 0x1e00, 0x0990, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c, - 0xa9b9, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, - 0x9016, 0x080c, 0xabf0, 0x00d6, 0x2069, 0x1959, 0x2d04, 0x9005, - 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, - 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, - 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0804, - 0xab80, 0x080c, 0xb955, 0x01b0, 0x6014, 0x2048, 0xa868, 0x2010, - 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, - 0xbe57, 0x00b0, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0118, 0x2001, - 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, - 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, - 0x080c, 0xa717, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, - 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, - 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900, - 0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x6372, - 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa9b9, - 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, - 0x2048, 0x080c, 0xb955, 0x0140, 0xa868, 0x9086, 0x0139, 0x0118, - 0xa86c, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084, - 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, - 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, - 0x1800, 0x080c, 0x5e89, 0x00ee, 0x0010, 0x080c, 0x3066, 0x0870, - 0x2001, 0x0004, 0x080c, 0x6372, 0x04d9, 0x1140, 0x6003, 0x0001, - 0x6007, 0x0003, 0x080c, 0x8718, 0x0804, 0x8c37, 0x080c, 0xa717, - 0x0804, 0xa9b9, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c, 0x6372, - 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x8718, 0x0804, 0x8c37, - 0x0804, 0xa9b9, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c, 0x6372, - 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37, - 0x0804, 0xa9b9, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, - 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, - 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, - 0x080c, 0x6420, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, - 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1836, - 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaca0, 0x05d0, 0x2009, - 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6742, 0x0158, 0x9006, - 0x2020, 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c, - 0xc195, 0x2102, 0x6120, 0x0016, 0x6023, 0x0007, 0x2019, 0x002a, - 0x2009, 0x0001, 0x00e6, 0x2071, 0x1800, 0x00c6, 0x2061, 0x0100, - 0x080c, 0x3037, 0x00ce, 0x6010, 0x9005, 0x090c, 0x0dc4, 0x080c, - 0x2e5f, 0x00ee, 0x001e, 0x6122, 0x00c6, 0x0156, 0x20a9, 0x0781, - 0x2009, 0x007f, 0x080c, 0x3162, 0x8108, 0x1f04, 0xac42, 0x015e, - 0x00ce, 0x080c, 0xabf3, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, - 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, - 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, - 0x2001, 0x1836, 0x2102, 0x9184, 0x0050, 0x9086, 0x0050, 0x0588, - 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e, 0x206a, - 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea, - 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, - 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x26e8, - 0x080c, 0x72e5, 0x0170, 0x2071, 0x0260, 0x2069, 0x195f, 0x7048, - 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, - 0xbc49, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, - 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c, - 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, - 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, - 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x1148, 0x2011, - 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xad8d, 0x1100, - 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, - 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, - 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, - 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, - 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, - 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, - 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, - 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xad63, 0x080c, 0xd187, - 0x0904, 0xad5c, 0x6720, 0x9786, 0x0007, 0x0904, 0xad5c, 0x2500, - 0x9c06, 0x0904, 0xad5c, 0x2400, 0x9c06, 0x0904, 0xad5c, 0x3e08, - 0x81ff, 0x0190, 0x6010, 0x9005, 0x0178, 0x00b6, 0x2058, 0x9186, - 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e, 0x1128, 0x6004, 0x9086, - 0x0002, 0x0904, 0xad77, 0x00be, 0x00c6, 0x6000, 0x9086, 0x0004, - 0x1110, 0x080c, 0x1950, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56, - 0x1130, 0x00ce, 0x080c, 0xa717, 0x080c, 0x9f42, 0x00e8, 0x6014, - 0x2048, 0x080c, 0xb955, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa86b, - 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, - 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, - 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02, - 0x1210, 0x0804, 0xad01, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, - 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, - 0x080c, 0xd101, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x0880, 0x00be, - 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, - 0xad79, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, - 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, - 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, - 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, - 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, - 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, - 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004, - 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c, 0xbb45, 0x0120, 0x080c, - 0xbb56, 0x0168, 0x0028, 0x080c, 0x308f, 0x080c, 0xbb56, 0x0138, - 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c, - 0xa717, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, - 0x000a, 0x0005, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, - 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadf0, 0xadf0, - 0xadf0, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadee, 0x080c, 0x0dc4, - 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, - 0x080c, 0x8c37, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, - 0x9082, 0x0040, 0x0804, 0xae86, 0x9186, 0x0027, 0x1520, 0x080c, - 0x8b2b, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x0096, 0x6114, 0x2148, - 0x080c, 0xb955, 0x0198, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, - 0x0068, 0xa86b, 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980, - 0xc1c5, 0xa982, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c, - 0x9f18, 0x0804, 0x8c37, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, - 0x0040, 0x00b8, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, - 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dc4, 0x080c, - 0xbf19, 0x0130, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaeb8, - 0x0005, 0x0002, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, - 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae7b, 0xae7b, - 0xae7b, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae5e, 0x080c, 0x0dc4, - 0x080c, 0x8b2b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0168, - 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec, - 0xa886, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f18, - 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x080c, 0xbb56, 0x090c, - 0xa717, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x0002, 0xae9d, - 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, - 0xae9b, 0xae9b, 0xaeb0, 0xaeb0, 0xaeb0, 0xaeb0, 0xae9b, 0xae9b, - 0xae9b, 0xaeb0, 0xae9b, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b, - 0x6014, 0x2048, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa880, - 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8, - 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x000f, 0x0804, 0x8c37, - 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, - 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed6, 0xaf79, 0xaed4, - 0xafab, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, - 0xaed4, 0xaed4, 0xaed4, 0xafab, 0x080c, 0x0dc4, 0x00b6, 0x0096, - 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x11d8, 0xa87f, - 0x0000, 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834, - 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x6210, 0x2258, - 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x080c, 0x9f18, 0x009e, - 0x00be, 0x0005, 0x080c, 0xbf3b, 0x1dd0, 0x968c, 0x0c00, 0x0120, - 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002, - 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8, 0xd6dc, - 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938, 0xaa34, - 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, - 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87f, - 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a, 0x901e, - 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, - 0xc6c4, 0x0804, 0xaedd, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, - 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, - 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x0904, 0xaeec, - 0x7154, 0xa98e, 0x81ff, 0x0904, 0xaeec, 0x9192, 0x0021, 0x1278, - 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, - 0x0205, 0x2013, 0x0000, 0x080c, 0xbe96, 0x0804, 0xaeec, 0xa86c, - 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6, 0x2950, - 0x080c, 0xb4ea, 0x00ae, 0x080c, 0xbe96, 0x080c, 0xb53b, 0x0804, - 0xaeee, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043, 0x2079, - 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa880, - 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005, 0x2130, - 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4, 0x9213, - 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46, - 0xad4a, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c, - 0x8d06, 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, - 0x0040, 0x0208, 0x000a, 0x0005, 0xafc8, 0xafc8, 0xafc8, 0xafc8, - 0xafc8, 0xafca, 0xb060, 0xafc8, 0xafc8, 0xb077, 0xb0fc, 0xafc8, - 0xafc8, 0xafc8, 0xafc8, 0xb10f, 0xafc8, 0xafc8, 0xafc8, 0xafc8, - 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, - 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5, - 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, - 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb05b, 0x9694, 0xff00, 0x9284, - 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, - 0x0904, 0xb05b, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e, - 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070, - 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c, 0x0c00, 0x0120, 0x7348, - 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, - 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x0060, 0xd6dc, 0x0118, - 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87f, 0x0007, 0x0010, - 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, 0xb088, 0xa88a, 0x901e, - 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, 0x0009, - 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, - 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98e, - 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, - 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013, 0x0000, - 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c68, - 0x2950, 0x080c, 0xb4ea, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, - 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, - 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, - 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x0804, 0x95f0, 0x6003, - 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, - 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, - 0x2078, 0x080c, 0x1679, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, - 0x0002, 0x009e, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0096, 0x080c, - 0x8be7, 0x080c, 0x8d06, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904, - 0xb0fa, 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016, - 0xa880, 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, - 0x001a, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, - 0x9184, 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020, - 0x4003, 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e, - 0xa878, 0x0006, 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0448, 0x0016, - 0x080c, 0x0fb3, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016, - 0x080c, 0xb53b, 0x001e, 0x00e0, 0xa86b, 0x0103, 0xa978, 0x9184, - 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f, - 0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4, - 0x0118, 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x080c, 0x6934, - 0x080c, 0x9f18, 0x009e, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120, - 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019, 0x0001, 0x080c, 0x9964, - 0x6003, 0x0002, 0x080c, 0x8be7, 0x080c, 0x8d06, 0x0005, 0x6004, - 0x9086, 0x0040, 0x1120, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019, - 0x0001, 0x080c, 0x9964, 0x080c, 0x8be7, 0x080c, 0x3066, 0x080c, - 0xbf0d, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0150, 0xa86b, - 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c, - 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8d06, 0x0005, 0xa87f, + 0x0086, 0x2940, 0x080c, 0x10f7, 0x008e, 0x9085, 0x0001, 0x009e, + 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, + 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, + 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000, + 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc83f, 0x001e, 0x1158, + 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, + 0x9386, 0x0006, 0x0128, 0x080c, 0xa39d, 0x0020, 0x0039, 0x0010, + 0x080c, 0xaa1c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, + 0x2048, 0x9186, 0x0015, 0x0904, 0xaa02, 0x918e, 0x0016, 0x1904, + 0xaa1a, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, + 0x0300, 0x1904, 0xa9dc, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, + 0x0904, 0xa9bf, 0x0804, 0xaa18, 0x6808, 0x9086, 0xffff, 0x1904, + 0xaa04, 0xa880, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, + 0xa940, 0x9105, 0x1904, 0xaa04, 0x6824, 0xd084, 0x1904, 0xaa04, + 0xd0b4, 0x0158, 0x0016, 0x2001, 0x1962, 0x200c, 0x6018, 0x9102, + 0x9082, 0x0005, 0x001e, 0x1a04, 0xaa04, 0x080c, 0xc3b4, 0x685c, + 0xa886, 0xa880, 0xc0dc, 0xc0f4, 0xc0d4, 0xa882, 0x0026, 0x900e, + 0x6a18, 0x2001, 0x000a, 0x080c, 0x871c, 0xa888, 0x920a, 0x0208, + 0x8011, 0xaa8a, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, + 0xbed5, 0x00ce, 0x0804, 0xaa18, 0x00c6, 0xa86c, 0xd0fc, 0x1118, + 0x080c, 0x602e, 0x0010, 0x080c, 0x63e9, 0x00ce, 0x1904, 0xaa04, + 0x00c6, 0x2d60, 0x080c, 0xa39d, 0x00ce, 0x0804, 0xaa18, 0x00c6, + 0x080c, 0xa3ec, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, + 0xc640, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xa39d, + 0x00ce, 0x080c, 0xa419, 0x00ce, 0x0804, 0xaa18, 0x2001, 0x1964, + 0x2004, 0x6842, 0x00ce, 0x04e0, 0x7008, 0x9086, 0x000b, 0x11c8, + 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, + 0x2d60, 0xa87f, 0x0003, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, + 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, + 0x00f8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1964, 0x2004, + 0x6842, 0x00b0, 0x0489, 0x00b0, 0x89ff, 0x090c, 0x0dc3, 0x00c6, + 0x00d6, 0x2d60, 0xa86b, 0x0103, 0xa87f, 0x0003, 0xa87b, 0x0000, + 0x080c, 0x6a1c, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00de, 0x00ce, + 0x080c, 0xa39d, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, + 0x1964, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, + 0x2d00, 0x2060, 0x080c, 0xdf7c, 0x080c, 0x86d8, 0x080c, 0xa39d, + 0x00ce, 0x080c, 0xa39d, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, + 0xacb4, 0xabb0, 0xd2f4, 0x0130, 0x2001, 0x1964, 0x2004, 0x6842, + 0x0804, 0xaa96, 0x00c6, 0x2d60, 0x080c, 0xbdd8, 0x00ce, 0x6804, + 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, + 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x04f0, + 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dc3, 0x6800, + 0x9086, 0x0004, 0x1190, 0xa880, 0xd0ac, 0x0178, 0xa843, 0x0fff, + 0xa83f, 0x0fff, 0xa884, 0xc0fc, 0xa886, 0x2001, 0x0001, 0x6832, + 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa880, 0xd0b4, 0x1150, + 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, + 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, + 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, + 0x6832, 0x080c, 0xc537, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d, + 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, + 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, + 0x1904, 0xaafd, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, + 0x9206, 0x1904, 0xaafd, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, + 0x6a20, 0x9286, 0x0007, 0x0904, 0xaafd, 0x9286, 0x0002, 0x05e8, + 0x9286, 0x0000, 0x05d0, 0x6808, 0x633c, 0x9306, 0x15b0, 0x2071, + 0x026c, 0x9186, 0x0015, 0x0558, 0x00c6, 0x6038, 0x2060, 0x6104, + 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, + 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, + 0x0096, 0x2048, 0x080c, 0xc1cd, 0x090c, 0x0dc3, 0xa87f, 0x0003, + 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, + 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x0030, 0x6038, + 0x2070, 0x2001, 0x1964, 0x2004, 0x7042, 0x080c, 0xa39d, 0x002e, + 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, + 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, + 0xc48c, 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, + 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xb448, + 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xab6e, 0x0096, 0x0156, + 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, + 0x0004, 0x080c, 0xb448, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, + 0x7238, 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, + 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, + 0xa7a3, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, + 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, + 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, + 0x2041, 0x1253, 0x080c, 0xa8fb, 0x0130, 0x00fe, 0x009e, 0x080c, + 0xa39d, 0x00be, 0x0005, 0x080c, 0xadb3, 0x0cb8, 0x2b78, 0x00f6, + 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00fe, 0x00c6, 0x080c, 0xa347, + 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, + 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6448, 0x080c, 0x6474, + 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ce, 0x0804, 0xab41, 0x2100, + 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b2, 0x0040, 0x1a04, 0xabf7, + 0x0002, 0xabe5, 0xabe5, 0xabdb, 0xabe5, 0xabe5, 0xabe5, 0xabd9, + 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, + 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, + 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, + 0xabe5, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9, 0xabd9, + 0xabd9, 0xabdb, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, + 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9, + 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabd9, + 0xabd9, 0x080c, 0x0dc3, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8bc, + 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, + 0x9186, 0x0032, 0x0118, 0x080c, 0x88e9, 0x0010, 0x080c, 0x88a1, + 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x2600, + 0x0002, 0xac0d, 0xac0d, 0xac0d, 0xabe5, 0xabe5, 0xac0d, 0xac0d, + 0xac0d, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d, + 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0x080c, 0x0dc3, 0x6004, + 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x0904, 0xace2, + 0x91b6, 0x0027, 0x1904, 0xac8c, 0x080c, 0x8d2c, 0x6004, 0x080c, + 0xc3c0, 0x01b0, 0x080c, 0xc3d1, 0x01a8, 0x908e, 0x0021, 0x0904, + 0xac89, 0x908e, 0x0022, 0x1130, 0x080c, 0xa820, 0x0904, 0xac85, + 0x0804, 0xac86, 0x908e, 0x003d, 0x0904, 0xac89, 0x0804, 0xac7f, + 0x080c, 0x312b, 0x2001, 0x0007, 0x080c, 0x6448, 0x6010, 0x00b6, + 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186, 0x007e, 0x1148, + 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x7351, 0x1108, 0xc2ad, + 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xdfde, + 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, + 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x6010, 0x00b6, + 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xda37, 0x007e, 0x003e, + 0x002e, 0x001e, 0x080c, 0xc8e3, 0x0016, 0x080c, 0xc638, 0x080c, + 0xa39d, 0x001e, 0x080c, 0x31fe, 0x080c, 0x8e38, 0x0030, 0x080c, + 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xadb3, + 0x0cb0, 0x080c, 0xadef, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, + 0x0016, 0x1148, 0x080c, 0xc8f4, 0x0d80, 0x6000, 0x9086, 0x0002, + 0x0904, 0xadfa, 0x0c50, 0x9186, 0x0014, 0x1d38, 0x080c, 0x8d2c, + 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa820, 0x09f0, 0x080c, + 0x3102, 0x080c, 0xc8e3, 0x080c, 0xc3c0, 0x1198, 0x080c, 0x312b, + 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186, + 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0804, + 0xac7f, 0x080c, 0xc3d1, 0x1120, 0x080c, 0xadb3, 0x0804, 0xac7f, + 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189f, + 0x2079, 0x0000, 0x080c, 0x3499, 0x00fe, 0x00ee, 0x0804, 0xac7f, + 0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xadb3, + 0x0804, 0xac7f, 0x90b2, 0x0040, 0x1a04, 0xad9a, 0x2008, 0x0002, + 0xad2a, 0xad2b, 0xad2e, 0xad31, 0xad34, 0xad41, 0xad28, 0xad28, + 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, + 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, + 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad44, 0xad4f, + 0xad28, 0xad51, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, + 0xad4f, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, + 0xad28, 0xad28, 0xad81, 0xad4f, 0xad28, 0xad4d, 0xad28, 0xad28, + 0xad28, 0xad4e, 0xad28, 0xad28, 0xad28, 0xad4f, 0xad78, 0xad28, + 0x080c, 0x0dc3, 0x0420, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003, + 0x0448, 0x2001, 0x0005, 0x0430, 0x6010, 0x00b6, 0x2058, 0xb804, + 0x00be, 0x9084, 0x00ff, 0x9086, 0x0000, 0x11f0, 0x2001, 0x0001, + 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8d2c, 0x6003, 0x0005, + 0x080c, 0xc8e6, 0x080c, 0x8e38, 0x0060, 0x0008, 0x0000, 0x0804, + 0xad92, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0004, 0x080c, + 0x8e38, 0x0005, 0x080c, 0x6448, 0x080c, 0x8d2c, 0x6003, 0x0002, + 0x0036, 0x2019, 0x1869, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, + 0x1962, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, + 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8e38, 0x0c08, + 0x080c, 0x8d2c, 0x080c, 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38, + 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c, + 0x3499, 0x00fe, 0x00ee, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c, + 0x8e38, 0x0838, 0x080c, 0x8d2c, 0x6003, 0x0002, 0x080c, 0xc8e6, + 0x0804, 0x8e38, 0x2600, 0x2008, 0x0002, 0xadb1, 0xadb1, 0xadb1, + 0xad92, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xad92, 0xadb1, + 0xad92, 0xadb1, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xadb1, + 0xadb1, 0x080c, 0x0dc3, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, + 0xc1cd, 0x0568, 0x6014, 0x2048, 0xa868, 0x9086, 0x0139, 0x11a8, + 0xa898, 0x9086, 0x0056, 0x1148, 0x080c, 0x53f9, 0x0130, 0x2001, + 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, + 0x2011, 0x4005, 0x080c, 0xc7a9, 0x0090, 0xa86c, 0xd0fc, 0x0178, + 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e, + 0x003d, 0x0150, 0x001e, 0xa86b, 0x0103, 0xa833, 0x0100, 0x001e, + 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, + 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0xa823, 0x8001, + 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, + 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x6604, 0x96b6, 0x004d, 0x1120, + 0x080c, 0xc6c8, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0043, 0x1120, + 0x080c, 0xc711, 0x0804, 0xae77, 0x6604, 0x96b6, 0x004b, 0x1120, + 0x080c, 0xc73d, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0033, 0x1120, + 0x080c, 0xc65a, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0028, 0x1120, + 0x080c, 0xc40f, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0029, 0x1120, + 0x080c, 0xc450, 0x0804, 0xae77, 0x6604, 0x96b6, 0x001f, 0x1118, + 0x080c, 0xa76d, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, + 0xab03, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xa801, + 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa919, 0x0438, + 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xaa9c, 0x0400, 0x6604, + 0x96b6, 0x003d, 0x1118, 0x080c, 0xa839, 0x00c8, 0x6604, 0x96b6, + 0x0044, 0x1118, 0x080c, 0xa875, 0x0090, 0x6604, 0x96b6, 0x0049, + 0x1118, 0x080c, 0xa8a4, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, + 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xb160, 0x00be, + 0x0005, 0x080c, 0xa434, 0x0cd8, 0xae95, 0xaea3, 0xae95, 0xaee8, + 0xae95, 0xb082, 0xb16d, 0xae95, 0xae95, 0xae95, 0xb13a, 0xae95, + 0xb14e, 0x0096, 0x080c, 0x155f, 0x6014, 0x2048, 0xa800, 0x2048, + 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d, 0xa001, 0xa001, 0x0005, + 0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001, 0x080c, 0x6434, + 0x0804, 0xa39d, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086, + 0x0074, 0x1540, 0x080c, 0xda08, 0x11b0, 0x6010, 0x00b6, 0x2058, + 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, + 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c, 0x312b, + 0x080c, 0xa39d, 0x0088, 0x2001, 0x000a, 0x080c, 0x6448, 0x080c, + 0x312b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x88e9, 0x080c, + 0x8e38, 0x0010, 0x080c, 0xb06d, 0x00ee, 0x0005, 0x00d6, 0xb800, + 0xd084, 0x0160, 0x9006, 0x080c, 0x6434, 0x2069, 0x185e, 0x6804, + 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x6474, 0x00de, 0x0005, + 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, + 0x1904, 0xb044, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, + 0x080c, 0xb2b2, 0x0804, 0xafb1, 0x2001, 0x180d, 0x2004, 0xd08c, + 0x0904, 0xaf53, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026, 0x2011, + 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xaf52, 0x080c, 0x5678, + 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, + 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186, + 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, + 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868, 0x9084, + 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, + 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, + 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, + 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe, 0x00de, + 0x0804, 0xb047, 0x00de, 0x080c, 0xb2a7, 0x6010, 0x2058, 0xbaa0, + 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa868, + 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, + 0x2011, 0x4000, 0x080c, 0xc7a9, 0x0030, 0xa807, 0x0000, 0xa86b, + 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c, + 0x312b, 0x080c, 0xa39d, 0x0804, 0xb047, 0x080c, 0xb055, 0x6014, + 0x9005, 0x0190, 0x2048, 0xa86c, 0xd0f4, 0x01e8, 0xa868, 0x9084, + 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, + 0x4000, 0x080c, 0xc7a9, 0x08f8, 0x080c, 0xb04b, 0x0160, 0x9006, + 0x080c, 0x6434, 0x2001, 0x0004, 0x080c, 0x6474, 0x2001, 0x0007, + 0x080c, 0x6448, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6448, 0x6003, + 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0804, + 0xb047, 0xb85c, 0xd0e4, 0x0178, 0x080c, 0xc5da, 0x080c, 0x7351, + 0x0118, 0xd0dc, 0x1904, 0xaf73, 0x2011, 0x1836, 0x2204, 0xc0ad, + 0x2012, 0x0804, 0xaf73, 0x080c, 0xc617, 0x2011, 0x1836, 0x2204, + 0xc0a5, 0x2012, 0x0006, 0x080c, 0xdba8, 0x000e, 0x1904, 0xaf73, + 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6448, 0x9006, 0x080c, + 0x6434, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, + 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, + 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee, + 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2100, + 0x900e, 0x080c, 0x2708, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01f0, + 0x2009, 0x0081, 0x00e0, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, + 0x79ea, 0x78e7, 0x0000, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, + 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, + 0x900e, 0x797a, 0x080c, 0x2708, 0x795a, 0x00fe, 0x8108, 0x080c, + 0x6497, 0x2b00, 0x00ce, 0x1904, 0xaf73, 0x6012, 0x2009, 0x180f, + 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, + 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, + 0x6448, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x88e9, 0x080c, 0x8e38, 0x0018, 0x080c, 0xadb3, 0x0431, 0x00de, + 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, + 0x2001, 0x185f, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe037, + 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, + 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, + 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007, + 0x080c, 0x6448, 0x080c, 0x5678, 0x1120, 0x2001, 0x0007, 0x080c, + 0x6474, 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005, + 0x0804, 0xa39d, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, + 0x708c, 0x9086, 0x0014, 0x1904, 0xb131, 0x2001, 0x180d, 0x2004, + 0xd08c, 0x0904, 0xb0e4, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026, + 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xb0e3, 0x080c, + 0x5678, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, + 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, + 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, + 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868, + 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, + 0x2011, 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807, + 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, + 0x0016, 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe, + 0x00de, 0x0804, 0xb135, 0x00de, 0x080c, 0x5678, 0x1170, 0x6014, + 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, + 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, + 0x080c, 0x6597, 0x080c, 0xaed6, 0x00de, 0x080c, 0xb382, 0x1588, + 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, + 0x6448, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa868, 0x9084, 0x00ff, + 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, + 0x080c, 0xc7a9, 0x0060, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0029, + 0x0130, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x009e, + 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0xa39d, + 0x0020, 0x080c, 0xadb3, 0x080c, 0xb06d, 0x001e, 0x002e, 0x00ee, + 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160, + 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001, + 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2030, 0x2011, + 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, + 0x2001, 0x0007, 0x080c, 0x6448, 0x0804, 0xa39d, 0x0804, 0xb06d, + 0x0002, 0xae95, 0xb178, 0xae95, 0xb1b9, 0xae95, 0xb264, 0xb16d, + 0xae98, 0xae95, 0xb276, 0xae95, 0xb286, 0x6604, 0x9686, 0x0003, + 0x0904, 0xb082, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005, + 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xb296, 0x11a0, 0x9006, 0x080c, + 0x6434, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x2001, 0x0002, 0x080c, + 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, + 0x8e38, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, + 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, 0x8001, + 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084, + 0xff00, 0x908e, 0x1900, 0x0148, 0x908e, 0x1e00, 0x0990, 0x080c, + 0x3102, 0x080c, 0xc8e3, 0x080c, 0xb06d, 0x00ce, 0x00de, 0x00be, + 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xb2a4, 0x00d6, + 0x2069, 0x1958, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, + 0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, + 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6434, 0x2001, + 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, + 0x88e9, 0x080c, 0x8e38, 0x0804, 0xb234, 0x080c, 0xc1cd, 0x01b0, + 0x6014, 0x2048, 0xa868, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, + 0x0016, 0x2001, 0x0002, 0x080c, 0xc800, 0x00b0, 0x6014, 0x2048, + 0xa868, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, + 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xadb3, 0x2009, 0x026e, + 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b, + 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, + 0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180, + 0x2001, 0x0004, 0x080c, 0x6448, 0x2001, 0x0028, 0x601a, 0x6007, + 0x0052, 0x0010, 0x080c, 0xb06d, 0x002e, 0x00be, 0x009e, 0x0005, + 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140, + 0xa868, 0x9086, 0x0139, 0x0118, 0xa86c, 0xd0fc, 0x0108, 0x0c50, + 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, + 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, + 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee, + 0x0010, 0x080c, 0x3102, 0x0870, 0x2001, 0x0004, 0x080c, 0x6448, + 0x04d9, 0x1140, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, + 0x0804, 0x8e38, 0x080c, 0xadb3, 0x0804, 0xb06d, 0x0469, 0x1160, + 0x2001, 0x0008, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0005, + 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x00e9, 0x1160, + 0x2001, 0x000a, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001, + 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2009, 0x026e, + 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, + 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, + 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x650b, 0x001e, 0x00ce, + 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, + 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a, + 0x080c, 0xb354, 0x05d0, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, + 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, + 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x6120, 0x0016, + 0x6023, 0x0007, 0x2019, 0x002a, 0x2009, 0x0001, 0x00e6, 0x2071, + 0x1800, 0x00c6, 0x2061, 0x0100, 0x080c, 0x30cd, 0x00ce, 0x6010, + 0x9005, 0x090c, 0x0dc3, 0x080c, 0x2ed6, 0x00ee, 0x001e, 0x6122, + 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x31fe, + 0x8108, 0x1f04, 0xb2f6, 0x015e, 0x00ce, 0x080c, 0xb2a7, 0x2071, + 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c, + 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, + 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x9184, + 0x0050, 0x9086, 0x0050, 0x0588, 0x2079, 0x0100, 0x2e04, 0x9084, + 0x00ff, 0x2069, 0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, + 0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, + 0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, + 0x00ff, 0x2008, 0x080c, 0x2751, 0x080c, 0x7351, 0x0170, 0x2071, + 0x0260, 0x2069, 0x195e, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, + 0x680a, 0x7054, 0x680e, 0x080c, 0xc5da, 0x001e, 0x003e, 0x00de, + 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, + 0x0156, 0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, + 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, + 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, + 0x080c, 0xb448, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, + 0x0006, 0x080c, 0xb448, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, + 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, + 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, + 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, + 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, + 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, + 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, + 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, + 0x1a04, 0xb41e, 0x080c, 0xdd49, 0x0904, 0xb417, 0x6720, 0x9786, + 0x0007, 0x0904, 0xb417, 0x2500, 0x9c06, 0x0904, 0xb417, 0x2400, + 0x9c06, 0x0904, 0xb417, 0x3e08, 0x81ff, 0x01c8, 0x6010, 0x9005, + 0x01b0, 0x00b6, 0x2058, 0x9186, 0x0002, 0x1120, 0xb800, 0xd0bc, + 0x1904, 0xb432, 0x9186, 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e, + 0x1128, 0x6004, 0x9086, 0x0002, 0x0904, 0xb432, 0x00be, 0x00c6, + 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1998, 0x9786, 0x000a, + 0x0148, 0x080c, 0xc3d1, 0x1130, 0x00ce, 0x080c, 0xadb3, 0x080c, + 0xa3cf, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01a8, 0x9786, + 0x0003, 0x1530, 0xa86b, 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, + 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, 0xab7e, 0xa87b, 0x0000, + 0x080c, 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x9ce0, + 0x0018, 0x7064, 0x9c02, 0x1210, 0x0804, 0xb3b5, 0x012e, 0x000e, + 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, + 0x9786, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c30, 0x9786, 0x000a, + 0x09e0, 0x0880, 0x00be, 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130, + 0x8210, 0x8318, 0x1f04, 0xb434, 0x9006, 0x0005, 0x2304, 0x9102, + 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, + 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, + 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, + 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, + 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, + 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, + 0x013e, 0x0005, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c, + 0xc3c0, 0x0120, 0x080c, 0xc3d1, 0x0168, 0x0028, 0x080c, 0x312b, + 0x080c, 0xc3d1, 0x0138, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c, + 0x8e38, 0x0005, 0x080c, 0xadb3, 0x0cb0, 0x9182, 0x0054, 0x1220, + 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb4a9, 0xb4a9, 0xb4a9, + 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, + 0xb4ab, 0xb4ab, 0xb4ab, 0xb4ab, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4ab, + 0xb4a9, 0x080c, 0x0dc3, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106, + 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, + 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, + 0xb543, 0x9186, 0x0027, 0x1520, 0x080c, 0x8d2c, 0x080c, 0x3102, + 0x080c, 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0198, + 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0068, 0xa86b, 0x0103, + 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980, 0xc1c5, 0xa982, 0x080c, + 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x0804, 0x8e38, + 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x00b8, 0x9186, + 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120, + 0x9186, 0x0048, 0x190c, 0x0dc3, 0x080c, 0xc8f4, 0x0130, 0x6000, + 0x9086, 0x0002, 0x1110, 0x0804, 0xb581, 0x0005, 0x0002, 0xb51d, + 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, + 0xb51b, 0xb51b, 0xb538, 0xb538, 0xb538, 0xb538, 0xb51b, 0xb538, + 0xb51b, 0xb538, 0xb51b, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x0096, + 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0168, 0xa86b, 0x0103, 0xa87f, + 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec, 0xa886, 0x080c, 0x6c02, + 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005, + 0x080c, 0x8d2c, 0x080c, 0xc3d1, 0x090c, 0xadb3, 0x080c, 0xa39d, + 0x080c, 0x8e38, 0x0005, 0x0002, 0xb55a, 0xb558, 0xb558, 0xb558, + 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb571, + 0xb571, 0xb571, 0xb571, 0xb558, 0xb57b, 0xb558, 0xb571, 0xb558, + 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014, 0x2048, 0x2001, + 0x1964, 0x2004, 0x6042, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004, + 0xa880, 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002, + 0x0cb8, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x080c, 0xc8eb, 0x6003, + 0x000f, 0x0804, 0x8e38, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x0804, + 0x8e38, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, + 0x0005, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59f, 0xb682, + 0xb59d, 0xb6b6, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, + 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb6b6, 0x080c, 0x0dc3, 0x00b6, + 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, + 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb671, 0xa87f, 0x0000, + 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, + 0x9115, 0x190c, 0xb84f, 0x080c, 0x6a1c, 0x6210, 0x2258, 0xba3c, + 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xb652, + 0x080c, 0xa39d, 0x009e, 0x00be, 0x0005, 0x080c, 0xc916, 0x1dd0, + 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, + 0xb656, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, + 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8, + 0xd6dc, 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938, + 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, + 0x9206, 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118, + 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a, + 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, + 0x1118, 0xc6c4, 0x0804, 0xb5a6, 0x735c, 0xab8a, 0x83ff, 0x0170, + 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, + 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, 0x0904, + 0xb5bb, 0x7154, 0xa98e, 0x81ff, 0x0904, 0xb5bb, 0x9192, 0x0021, + 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, + 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc86c, 0x0804, 0xb5bb, + 0xa86c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6, + 0x2950, 0x080c, 0xbd07, 0x00ae, 0x080c, 0xc86c, 0x080c, 0xbd58, + 0x0804, 0xb5bd, 0x080c, 0xc4c4, 0x0804, 0xb5ca, 0xa880, 0xd0ac, + 0x0904, 0xb5d9, 0xa884, 0xd0bc, 0x1904, 0xb5d9, 0x9684, 0x0400, + 0x0130, 0xa838, 0xab34, 0x9305, 0x0904, 0xb5d9, 0x00b8, 0x7348, + 0xa838, 0x9306, 0x1198, 0x734c, 0xa834, 0x931e, 0x0904, 0xb5d9, + 0x0068, 0xa880, 0xd0ac, 0x0904, 0xb5ae, 0xa838, 0xa934, 0x9105, + 0x0904, 0xb5ae, 0xa884, 0xd0bc, 0x1904, 0xb5ae, 0x080c, 0xc4fe, + 0x0804, 0xb5ca, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043, + 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048, + 0xa880, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005, + 0x2130, 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4, + 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a, + 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x1aea, + 0x080c, 0x8906, 0x080c, 0x8f0e, 0x009e, 0x0005, 0x0005, 0x9182, + 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb6d3, + 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d5, 0xb76b, 0xb6d3, 0xb6d3, + 0xb782, 0xb812, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb827, 0xb6d3, + 0xb6d3, 0xb6d3, 0xb6d3, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6, + 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4, + 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, + 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb766, + 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c, + 0xb092, 0x9284, 0x0300, 0x0904, 0xb766, 0x080c, 0x100d, 0x090c, + 0x0dc3, 0x2900, 0xb07e, 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103, + 0xb06c, 0xa86e, 0xb070, 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c, + 0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, + 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, + 0x0060, 0xd6dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118, + 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, + 0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, + 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, + 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, + 0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, + 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011, + 0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, + 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x009e, 0x00ee, + 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079, + 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436, + 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aea, + 0x0804, 0x989e, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, + 0x0096, 0x6014, 0x2048, 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084, + 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x16c1, 0x00fe, 0x6003, + 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x8d2c, 0x080c, + 0x8e38, 0x0096, 0x2001, 0x1964, 0x2004, 0x6042, 0x080c, 0x8de8, + 0x080c, 0x8f0e, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904, 0xb80d, + 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016, 0xa880, + 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, + 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, + 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020, 0x4003, + 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e, 0xa878, + 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0458, 0x0016, 0x080c, + 0x0fbf, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016, 0x080c, + 0xbd58, 0x001e, 0x00f0, 0xa86b, 0x0103, 0xa978, 0x9184, 0x00ff, + 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f, 0x001c, + 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4, 0x0118, + 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x0016, 0x080c, 0x6a1c, + 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c, + 0xc4c4, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c, + 0x080c, 0x8e38, 0x2019, 0x0001, 0x080c, 0x9c35, 0x6003, 0x0002, + 0x080c, 0xc8eb, 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x0005, 0x6004, + 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x2019, + 0x0001, 0x080c, 0x9c35, 0x080c, 0x8de8, 0x080c, 0x3102, 0x080c, + 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0150, 0xa86b, + 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, + 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8f0e, 0x0005, 0xa87f, 0x0015, 0xd1fc, 0x0180, 0xa87f, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a58, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa996, 0xa892, 0x0005, 0x9182, 0x0054, - 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb16a, 0xb16a, - 0xb16a, 0xb16a, 0xb16a, 0xb16c, 0xb16a, 0xb16a, 0xb21a, 0xb16a, - 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, - 0xb16a, 0xb2fb, 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096, - 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb215, + 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb882, 0xb882, + 0xb882, 0xb882, 0xb882, 0xb884, 0xb882, 0xb882, 0xb932, 0xb882, + 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, + 0xb882, 0xba74, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6, 0x0096, + 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb92d, 0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, - 0x0904, 0xb20e, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, - 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb20e, 0x9686, + 0x0904, 0xb926, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, + 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb926, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb67a, 0x0c38, - 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e, 0xb780, 0x97bd, + 0x080c, 0x100d, 0x090c, 0x0dc3, 0x2900, 0xb07e, 0xb780, 0x97bd, 0x0200, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070, 0xa872, 0xb074, 0xa876, 0x7044, 0x9084, 0xf000, 0x9635, 0xae7a, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, @@ -5473,1234 +5700,1444 @@ static const uint16_t isp_2300_risc_code[] = { 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, 0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, - 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, + 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, - 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, + 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, - 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xb4ea, 0x080c, 0x191a, - 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xbf3b, 0x0904, - 0xb178, 0x0cb0, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, - 0x1118, 0xa880, 0xc0dc, 0xa882, 0x6003, 0x0002, 0xa980, 0xd1e4, - 0x0904, 0xb2f9, 0xd1cc, 0x0904, 0xb2cd, 0xa97c, 0xa86c, 0xd0fc, - 0x0904, 0xb28e, 0x0016, 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6, - 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, - 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc, - 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118, - 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007, - 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, - 0x9115, 0x190c, 0xb137, 0xa880, 0xb082, 0xa894, 0xb096, 0xa890, - 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9, - 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, - 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa886, - 0x000e, 0xc0cc, 0xa882, 0x080c, 0xbe96, 0x001e, 0xa878, 0x0006, - 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0804, 0xb2f7, 0x0016, 0x00a6, - 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, - 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc, - 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118, - 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007, - 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, - 0x9115, 0x190c, 0xb137, 0xa894, 0xb096, 0xa890, 0xb092, 0xa880, - 0xb082, 0x00ae, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbe96, 0xa978, - 0x0016, 0x080c, 0xb53b, 0x001e, 0x0450, 0xa86b, 0x0103, 0xa978, - 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, - 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015, 0x080c, - 0xbde9, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4, 0x0118, - 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac, 0x0128, - 0xa834, 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x080c, - 0x9f18, 0x009e, 0x0005, 0x6114, 0x0096, 0x2148, 0xa980, 0xd1e4, - 0x190c, 0x193c, 0x009e, 0x0005, 0x080c, 0x8b2b, 0x0010, 0x080c, - 0x8be7, 0x080c, 0xb955, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, - 0xbb56, 0x1118, 0x080c, 0xa717, 0x00a0, 0xa86b, 0x0103, 0x2009, - 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97e, - 0x918e, 0x0029, 0x1110, 0x080c, 0xd242, 0xa87b, 0x0000, 0x080c, - 0x6b1d, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0804, 0x8d06, - 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182, 0x0054, - 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb352, 0xb352, - 0xb352, 0xb352, 0xb352, 0xb354, 0xb352, 0xb352, 0xb352, 0xb352, - 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, - 0xb352, 0xb352, 0x080c, 0x0dc4, 0x080c, 0x55af, 0x0528, 0x7144, - 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xbf3b, 0x006e, 0x11f0, - 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, - 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139, 0x0128, - 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000, 0xa99e, - 0xaaa2, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x0005, 0x9182, - 0x0085, 0x0002, 0xb391, 0xb38f, 0xb38f, 0xb39d, 0xb38f, 0xb38f, - 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0x080c, - 0x0dc4, 0x6003, 0x000b, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, - 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, - 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb943, - 0x01c8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01a0, 0x6010, 0x6d10, - 0x952e, 0x1180, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xb5b8, 0x00de, - 0x00ce, 0x0128, 0x080c, 0xb578, 0x6007, 0x0086, 0x0028, 0x080c, - 0xb5a7, 0x0dc0, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x86d0, - 0x080c, 0x8c37, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, - 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a, - 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, - 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c, 0x8b2b, 0x0096, - 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87b, - 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x080c, 0x9f42, - 0x0804, 0x8c37, 0xb407, 0xb409, 0xb409, 0xb407, 0xb407, 0xb407, - 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0x080c, - 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, - 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04ba, - 0x9186, 0x0027, 0x11f8, 0x080c, 0x8b2b, 0x080c, 0x3066, 0x080c, - 0xbf0d, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955, 0x0150, 0xa86b, - 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x080c, - 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c, - 0x9fa3, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8b2b, 0x0096, - 0x6014, 0x2048, 0x080c, 0xb955, 0x0d60, 0xa86b, 0x0103, 0xa87b, - 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886, 0x08f0, 0xb45e, - 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb469, 0xb45c, 0xb45c, - 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0x080c, 0x0dc4, 0x080c, 0x8b2b, - 0x2001, 0x1964, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8c37, - 0x0005, 0x080c, 0x8b2b, 0x2001, 0x1964, 0x2004, 0x601a, 0x6003, - 0x000e, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, - 0x0085, 0x0208, 0x0012, 0x0804, 0x9fa3, 0xb48a, 0xb48a, 0xb48a, - 0xb48a, 0xb48c, 0xb4a4, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, - 0xb48a, 0xb48a, 0x080c, 0x0dc4, 0x0096, 0x080c, 0xb955, 0x1118, - 0x080c, 0xbb39, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4, 0x1110, - 0x080c, 0xbb39, 0xa86b, 0x0103, 0x080c, 0xbed3, 0x080c, 0x6b1d, - 0x080c, 0x9f18, 0x009e, 0x0005, 0x0096, 0x6014, 0x2048, 0x080c, - 0xb955, 0x01c8, 0xa86b, 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec, - 0xa886, 0xa87f, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002, - 0x0020, 0xa87f, 0x0005, 0x080c, 0xbc45, 0xa87b, 0x0000, 0x080c, - 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x0804, 0x9f18, 0x0016, 0x0096, - 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87f, - 0x0028, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x009e, 0x001e, 0x9186, - 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, - 0x080c, 0x9fa3, 0x0030, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, - 0x8c37, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, - 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, - 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x002a, 0x080c, 0xb54b, - 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c, - 0x1001, 0x0520, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, - 0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001c, 0x0499, - 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c, - 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, - 0x95ad, 0x0003, 0xb56a, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, - 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e, - 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, - 0x0130, 0xa807, 0x0000, 0x080c, 0x6b1d, 0x2a48, 0x0cb8, 0x080c, - 0x6b1d, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, - 0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, - 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, - 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, - 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, - 0x8109, 0x1d80, 0x7814, 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005, - 0x6920, 0x9186, 0x0003, 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6, - 0x00d6, 0x00e6, 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955, - 0x0158, 0x0089, 0x2001, 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6d45, - 0x080c, 0x6b11, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f42, 0x00ee, - 0x00de, 0x00ce, 0x0005, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c, - 0x2048, 0x080c, 0x0fb3, 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6, + 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x080c, 0x1962, + 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xc916, 0x0904, + 0xb890, 0x0cb0, 0x2001, 0x1964, 0x2004, 0x6042, 0x0096, 0x6114, + 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa880, 0xc0dc, 0xa882, + 0x6003, 0x0002, 0xa980, 0xd1e4, 0x0904, 0xba6f, 0x6043, 0x0000, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, + 0x0904, 0xba3e, 0xa97c, 0xa86c, 0xd0fc, 0x0904, 0xb9ff, 0x0016, + 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6, 0x2150, 0xb178, 0x9184, + 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb9cc, 0x9086, 0x0028, 0x1904, + 0xb9b8, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x0804, 0xb9d4, 0x6024, + 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa94, + 0x9206, 0x1120, 0xa890, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, + 0x1148, 0xa9b0, 0xa834, 0x9102, 0x603a, 0xa9b4, 0xa838, 0x9103, + 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, + 0x8000, 0xb83e, 0x00be, 0x9006, 0xa87a, 0xa896, 0xa892, 0xa880, + 0xc0e4, 0xa882, 0xd0cc, 0x0140, 0xc0cc, 0xa882, 0x0096, 0xa87c, + 0x2048, 0x080c, 0x0fbf, 0x009e, 0x6218, 0x82ff, 0x0168, 0x2001, + 0x1964, 0x2004, 0x9202, 0x1240, 0xa86b, 0x0103, 0xa87f, 0x0006, + 0xa87b, 0x0000, 0x0804, 0xba66, 0x080c, 0xc4fe, 0x0804, 0xba6f, + 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792, + 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, + 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xb84f, 0xa880, 0xb082, 0xa894, 0xb096, + 0xa890, 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0, + 0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, + 0x9084, 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e, + 0xa886, 0x000e, 0xc0cc, 0xa882, 0x080c, 0xc86c, 0x001e, 0xa878, + 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0804, 0xba6b, 0x0016, + 0x00a6, 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, + 0x9086, 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, + 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792, + 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, + 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, + 0xa938, 0x9115, 0x190c, 0xb84f, 0xa894, 0xb096, 0xa890, 0xb092, + 0xa880, 0xb082, 0x00ae, 0x080c, 0x0fbf, 0x009e, 0x080c, 0xc86c, + 0xa978, 0x0016, 0x080c, 0xbd58, 0x001e, 0x0468, 0xa86b, 0x0103, + 0xa978, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, + 0x1118, 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015, + 0x080c, 0xc792, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4, + 0x0118, 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac, + 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xb84f, 0xa978, 0x0016, + 0x080c, 0x6a1c, 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e, + 0x0005, 0x080c, 0xc4c4, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa980, + 0xd1e4, 0x190c, 0x1984, 0x009e, 0x0005, 0x080c, 0x8d2c, 0x0010, + 0x080c, 0x8de8, 0x080c, 0xc1cd, 0x01f0, 0x0096, 0x6114, 0x2148, + 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x00a0, 0xa86b, 0x0103, + 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, + 0xa97e, 0x918e, 0x0029, 0x1110, 0x080c, 0xdfcf, 0xa87b, 0x0000, + 0x080c, 0x6c02, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0804, + 0x8f0e, 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182, + 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbacb, + 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacd, 0xbacb, 0xbacb, 0xbacb, + 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, + 0xbacb, 0xbacb, 0xbacb, 0x080c, 0x0dc3, 0x080c, 0x566c, 0x0528, + 0x7144, 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xc916, 0x006e, + 0x11f0, 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, + 0x0096, 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139, + 0x0128, 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000, + 0xa99e, 0xaaa2, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x0005, + 0x9182, 0x0085, 0x0002, 0xbb0a, 0xbb08, 0xbb08, 0xbb16, 0xbb08, + 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, + 0x080c, 0x0dc3, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x0026, 0x0056, + 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, + 0xc1bb, 0x01f8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01d0, 0x6010, + 0x6d10, 0x952e, 0x11b0, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xbdd8, + 0x00de, 0x00ce, 0x0158, 0x702c, 0xd084, 0x1118, 0x080c, 0xbd95, + 0x0010, 0x6803, 0x0002, 0x6007, 0x0086, 0x0028, 0x080c, 0xbdc4, + 0x0d90, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, + 0x8e38, 0x7220, 0x080c, 0xc1bb, 0x0178, 0x6810, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, + 0x2d60, 0x080c, 0xc4fe, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, + 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, + 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00e2, + 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c, + 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140, 0xa86b, + 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e, + 0x080c, 0xa3cf, 0x0804, 0x8e38, 0xbb99, 0xbb9b, 0xbb9b, 0xbb99, + 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, + 0xbb99, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, + 0x8e38, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, + 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8d2c, 0x080c, + 0x3102, 0x080c, 0xc8e3, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, + 0x0150, 0xa86b, 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, + 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, + 0x0005, 0x080c, 0xa434, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, + 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0d60, 0xa86b, + 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886, + 0x08f0, 0x0002, 0xbbf1, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, + 0xbc09, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0x080c, + 0x0dc3, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, + 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010, + 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8e38, + 0x0005, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, + 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010, + 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8e38, + 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, + 0x0804, 0xa434, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc39, 0xbc86, + 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0x080c, + 0x0dc3, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, + 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, + 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xbc9a, 0x080c, 0xc1cd, + 0x1118, 0x080c, 0xc3b4, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4, + 0x1110, 0x080c, 0xc3b4, 0xa86b, 0x0103, 0x080c, 0xc8a9, 0x080c, + 0x6c02, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01d0, 0x6003, 0x0001, + 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, + 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xc640, + 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, + 0x2d60, 0x00de, 0x080c, 0xa39d, 0x009e, 0x0005, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, + 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, + 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc83f, 0x11f0, 0x080c, + 0xa347, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, + 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, + 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c, + 0xc640, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x00de, 0x0804, + 0xa39d, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c8, 0xa86b, + 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec, 0xa886, 0xa87f, 0x0006, + 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0020, 0xa87f, 0x0005, + 0x080c, 0xc4c0, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0xc3b4, + 0x009e, 0x0804, 0xa39d, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, + 0xc1cd, 0x0140, 0xa86b, 0x0103, 0xa87f, 0x0028, 0xa87b, 0x0000, + 0x080c, 0x6c02, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, + 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030, + 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0056, + 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, + 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, + 0x0020, 0x2011, 0x002a, 0x080c, 0xbd68, 0x96b2, 0x0020, 0xb004, + 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c, 0x100d, 0x0520, 0x8528, + 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, + 0x1228, 0x2608, 0x2011, 0x001c, 0x0499, 0x00a8, 0x96b2, 0x003c, + 0x2009, 0x003c, 0x2950, 0x2011, 0x001c, 0x0451, 0x0c28, 0x2001, + 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a, + 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, + 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e, 0x006e, 0x005e, 0x0005, + 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, + 0x080c, 0x6c02, 0x2a48, 0x0cb8, 0x080c, 0x6c02, 0x00ae, 0x0005, + 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, + 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, + 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, + 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, + 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7814, + 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005, 0x6920, 0x9186, 0x0003, + 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6, 0x00d6, 0x00e6, 0x2d60, + 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0158, 0x0089, 0x2001, + 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6e4b, 0x080c, 0x6bf5, 0x080c, + 0xc3b4, 0x009e, 0x080c, 0xa3cf, 0x00ee, 0x00de, 0x00ce, 0x0005, + 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf, + 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6, 0x702c, 0xd084, 0x1170, 0x6008, 0x2060, 0x6020, 0x9086, 0x0002, 0x1140, 0x6104, 0x9186, 0x0085, 0x0118, 0x9186, 0x008b, 0x1108, 0x9006, 0x00ce, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, - 0x012e, 0x0005, 0xb5ef, 0xb5ef, 0xb5ea, 0xb60f, 0xb5e1, 0xb5ea, - 0xb5e3, 0xb5ea, 0xb5ea, 0xb5e1, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5e1, - 0xb5e1, 0x080c, 0x0dc4, 0x0036, 0x2019, 0x0010, 0x080c, 0xccbc, + 0x012e, 0x0005, 0xbe0f, 0xbe0f, 0xbe0a, 0xbe31, 0xbe01, 0xbe0a, + 0xbe31, 0xbe0a, 0xbe0a, 0xbe01, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe01, + 0xbe01, 0x080c, 0x0dc3, 0x0036, 0x2019, 0x0010, 0x080c, 0xd861, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, - 0x6014, 0x2048, 0x080c, 0xb955, 0x01c0, 0xa868, 0x9086, 0x0139, - 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028, 0x900e, 0x2001, - 0x0005, 0x080c, 0x6d45, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x080c, - 0x9f42, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000, - 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002, 0xb625, 0xb655, 0xb627, - 0xb676, 0xb650, 0xb625, 0xb5ea, 0xb5ef, 0xb5ef, 0xb5ea, 0xb5ea, - 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0x080c, 0x0dc4, 0x86ff, - 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048, - 0x080c, 0xb955, 0x0168, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xc0cc, - 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbc45, - 0x009e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, - 0x0002, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x9085, 0x0001, 0x0005, - 0x0066, 0x080c, 0x1950, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19c4, - 0x7024, 0x9c06, 0x1120, 0x080c, 0x98ee, 0x00ee, 0x0840, 0x6020, - 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, - 0x0001, 0x2c40, 0x080c, 0x9a12, 0x009e, 0x008e, 0x0010, 0x080c, - 0x980e, 0x00ee, 0x1904, 0xb627, 0x0804, 0xb5ea, 0x0036, 0x00e6, - 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x9964, - 0x00ee, 0x003e, 0x0804, 0xb627, 0x080c, 0x9b40, 0x00ee, 0x003e, - 0x1904, 0xb627, 0x0804, 0xb5ea, 0x00c6, 0x6020, 0x9084, 0x000f, - 0x0013, 0x00ce, 0x0005, 0xb6a9, 0xb776, 0xb8a8, 0xb6b3, 0x9f42, - 0xb6a9, 0xccb6, 0xbf15, 0xb776, 0xb6a2, 0xb91a, 0xb6a2, 0xb6a2, - 0xb6a2, 0xb6a2, 0x080c, 0x0dc4, 0x080c, 0xbb56, 0x1110, 0x080c, - 0xa717, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0804, 0x9f18, - 0x601b, 0x0001, 0x0005, 0x080c, 0xb955, 0x0130, 0x6014, 0x0096, - 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a, 0x0010, 0x1a0c, - 0x0dc4, 0x0002, 0xb6d2, 0xb6d4, 0xb6f8, 0xb70c, 0xb732, 0xb6d2, - 0xb6a9, 0xb6a9, 0xb6a9, 0xb70c, 0xb70c, 0xb6d2, 0xb6d2, 0xb6d2, - 0xb6d2, 0xb716, 0x080c, 0x0dc4, 0x00e6, 0x6014, 0x0096, 0x2048, - 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4, 0x7024, 0x9c06, - 0x01a0, 0x080c, 0x980e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003, - 0x000b, 0x6023, 0x0002, 0x2001, 0x1964, 0x2004, 0x601a, 0x080c, - 0x86d0, 0x080c, 0x8c37, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, - 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x080c, - 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, - 0x86d0, 0x080c, 0x8c37, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, - 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005, 0x080c, 0x55af, - 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868, 0xa86b, 0x0103, - 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b, 0x0139, 0xa87f, - 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c, 0x6b1d, 0x009e, - 0x0804, 0x9f18, 0x6014, 0x0096, 0x904d, 0x05d8, 0xa980, 0xd1e4, - 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, - 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, - 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1553, 0x2001, 0x030c, - 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014, 0x0096, 0x904d, - 0x090c, 0x0dc4, 0xa884, 0xd0f4, 0x1130, 0xc0f5, 0xa886, 0x009e, - 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c, 0x2217, 0x00ce, - 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9f88, - 0x0005, 0x009e, 0x080c, 0x1950, 0x0804, 0xb6f8, 0x6000, 0x908a, - 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xb78d, 0xb6b0, 0xb78f, - 0xb78d, 0xb78f, 0xb78d, 0xb6aa, 0xb78d, 0xb6a4, 0xb6a4, 0xb78d, - 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0x080c, 0x0dc4, 0x6010, - 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, - 0x1a0c, 0x0dc4, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb7aa, 0xb86e, - 0xb7ac, 0xb7e1, 0xb7ac, 0xb7e1, 0xb7ac, 0xb7ba, 0xb7aa, 0xb7e1, - 0xb7aa, 0xb7d0, 0x080c, 0x0dc4, 0x6004, 0x908e, 0x0016, 0x0568, - 0x908e, 0x0004, 0x0550, 0x908e, 0x0002, 0x0538, 0x908e, 0x0052, - 0x0904, 0xb86a, 0x6004, 0x080c, 0xbb56, 0x0904, 0xb887, 0x908e, - 0x0004, 0x1110, 0x080c, 0x308f, 0x908e, 0x0021, 0x0904, 0xb88b, - 0x908e, 0x0022, 0x0904, 0xb8a4, 0x908e, 0x003d, 0x0904, 0xb88b, - 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, - 0x9086, 0x0006, 0x0110, 0x080c, 0x3066, 0x080c, 0xa717, 0x0804, - 0x9f42, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb85b, - 0x9186, 0x0002, 0x1904, 0xb830, 0x2001, 0x1836, 0x2004, 0xd08c, - 0x11c8, 0x080c, 0x72e5, 0x11b0, 0x080c, 0xbef8, 0x0138, 0x080c, - 0x7308, 0x1120, 0x080c, 0x71f0, 0x0804, 0xb88f, 0x2001, 0x195a, - 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x7212, - 0x0804, 0xb88f, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, - 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb88f, 0xb8a0, 0x9082, - 0x0081, 0x1a04, 0xb88f, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, - 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, - 0x080c, 0x9ec2, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, - 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, - 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, - 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x00ee, 0x080c, - 0xa717, 0x0030, 0x080c, 0xa717, 0x080c, 0x3066, 0x080c, 0xbf0d, - 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x308f, 0x012e, 0x00ee, - 0x080c, 0x9f42, 0x0005, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, - 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de, - 0x00ce, 0x0c80, 0x080c, 0x308f, 0x0804, 0xb7dd, 0x00c6, 0x00d6, - 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, - 0x00ff, 0x9005, 0x0904, 0xb830, 0x8001, 0xb842, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de, 0x00ce, 0x0898, 0x080c, - 0xa717, 0x0804, 0xb7df, 0x080c, 0xa753, 0x0804, 0xb7df, 0x00de, - 0x00ce, 0x080c, 0xa717, 0x080c, 0x3066, 0x00e6, 0x0126, 0x2091, - 0x8000, 0x080c, 0x308f, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, - 0x0398, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa382, 0x1d00, 0x0005, - 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0096, 0x00d6, 0x001b, - 0x00de, 0x009e, 0x0005, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, - 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb6a9, 0xb8c3, 0xb6b0, 0xb8c5, - 0xb6b0, 0xb8d2, 0xb8c3, 0x080c, 0x0dc4, 0x6004, 0x9086, 0x008b, - 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x86d0, 0x080c, - 0x8c37, 0x0005, 0x080c, 0xbeec, 0x0118, 0x080c, 0xbeff, 0x0010, - 0x080c, 0xbf0d, 0x080c, 0xbb39, 0x080c, 0xb955, 0x0570, 0x080c, - 0x3066, 0x080c, 0xb955, 0x0168, 0x6014, 0x2048, 0xa86b, 0x0103, - 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ed, 0xa886, 0x080c, - 0x6b1d, 0x2c68, 0x080c, 0x9ec2, 0x0150, 0x6810, 0x6012, 0x080c, - 0xbc97, 0x00c6, 0x2d60, 0x080c, 0x9f42, 0x00ce, 0x0008, 0x2d60, - 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x0060, 0x080c, 0xbeec, 0x0138, - 0x602c, 0x9086, 0x4000, 0x1118, 0x080c, 0x3066, 0x08d0, 0x080c, - 0x9f42, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002, - 0xb930, 0xb930, 0xb934, 0xb932, 0xb93e, 0xb930, 0xb930, 0x9f42, - 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, - 0x080c, 0x0dc4, 0x080c, 0x9b40, 0x6114, 0x0096, 0x2148, 0xa87f, - 0x0006, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x601c, 0xd084, - 0x190c, 0x1950, 0x0c88, 0x9284, 0x0003, 0x1158, 0x9282, 0x1cc8, + 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c0, 0xa868, + 0x9086, 0x0139, 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028, + 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x080c, 0xc4c0, 0x080c, + 0x6bf5, 0x080c, 0xa3cf, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, + 0x0ce0, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbe47, + 0xbe77, 0xbe49, 0xbe98, 0xbe72, 0xbe47, 0xbe0a, 0xbe0f, 0xbe0f, + 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0x080c, + 0x0dc3, 0x86ff, 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, + 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0168, 0xa880, 0xd0cc, 0x0140, + 0x0096, 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, + 0x080c, 0xc4c0, 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, + 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x9085, + 0x0001, 0x0005, 0x0066, 0x080c, 0x1998, 0x006e, 0x0890, 0x00e6, + 0x2071, 0x19c4, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9bbf, 0x00ee, + 0x0840, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, + 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9ce3, 0x009e, 0x008e, + 0x0010, 0x080c, 0x9abc, 0x00ee, 0x1904, 0xbe49, 0x0804, 0xbe0a, + 0x0036, 0x00e6, 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e, + 0x080c, 0x9c35, 0x00ee, 0x003e, 0x0804, 0xbe49, 0x080c, 0x9e13, + 0x00ee, 0x003e, 0x1904, 0xbe49, 0x0804, 0xbe0a, 0x00c6, 0x6020, + 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb, 0xbf98, 0xc106, + 0xbed5, 0xa3cf, 0xbecb, 0xd857, 0xc8f0, 0xbf98, 0xbec4, 0xc192, + 0xbec4, 0xbec4, 0xbec4, 0xbec4, 0x080c, 0x0dc3, 0x080c, 0xc3d1, + 0x1110, 0x080c, 0xadb3, 0x0005, 0x080c, 0x8d2c, 0x080c, 0x8e38, + 0x0804, 0xa39d, 0x601b, 0x0001, 0x0005, 0x080c, 0xc1cd, 0x0130, + 0x6014, 0x0096, 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a, + 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbef4, 0xbef6, 0xbf1a, 0xbf2e, + 0xbf54, 0xbef4, 0xbecb, 0xbecb, 0xbecb, 0xbf2e, 0xbf2e, 0xbef4, + 0xbef4, 0xbef4, 0xbef4, 0xbf38, 0x080c, 0x0dc3, 0x00e6, 0x6014, + 0x0096, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4, + 0x7024, 0x9c06, 0x01a0, 0x080c, 0x9abc, 0x080c, 0xc883, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1963, 0x2004, + 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ee, 0x0005, 0x601b, + 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, + 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, + 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x601b, + 0x0001, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005, + 0x080c, 0x566c, 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868, + 0xa86b, 0x0103, 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b, + 0x0139, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c, + 0x6c02, 0x009e, 0x0804, 0xa39d, 0x6014, 0x0096, 0x904d, 0x05d8, + 0xa980, 0xd1e4, 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, + 0x009e, 0x0005, 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, + 0x611a, 0x2001, 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1568, + 0x2001, 0x030c, 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014, + 0x0096, 0x904d, 0x090c, 0x0dc3, 0xa884, 0xd0f4, 0x1130, 0xc0f5, + 0xa886, 0x009e, 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c, + 0x225f, 0x00ce, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, + 0x080c, 0xa419, 0x0005, 0x009e, 0x080c, 0x1998, 0x0804, 0xbf1a, + 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xbfaf, + 0xbed2, 0xbfb1, 0xbfaf, 0xbfb1, 0xbfb1, 0xbecc, 0xbfaf, 0xbec6, + 0xbec6, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0x080c, + 0x0dc3, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, + 0x908a, 0x000c, 0x1a0c, 0x0dc3, 0x00b6, 0x0013, 0x00be, 0x0005, + 0xbfcc, 0xc09d, 0xbfce, 0xc00e, 0xbfce, 0xc00e, 0xbfce, 0xbfdc, + 0xbfcc, 0xc00e, 0xbfcc, 0xbffd, 0x080c, 0x0dc3, 0x6004, 0x908e, + 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, + 0x908e, 0x0052, 0x0904, 0xc099, 0x6004, 0x080c, 0xc3d1, 0x0904, + 0xc0b6, 0x908e, 0x0004, 0x1110, 0x080c, 0x312b, 0x908e, 0x0021, + 0x0904, 0xc0ba, 0x908e, 0x0022, 0x0904, 0xc101, 0x908e, 0x003d, + 0x0904, 0xc0ba, 0x908e, 0x0039, 0x0904, 0xc0be, 0x908e, 0x0035, + 0x0904, 0xc0be, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, + 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, + 0x080c, 0x3102, 0x080c, 0xadb3, 0x0804, 0xa3cf, 0x00c6, 0x00d6, + 0x6104, 0x9186, 0x0016, 0x0904, 0xc08a, 0x9186, 0x0002, 0x1904, + 0xc05f, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x7351, + 0x11b0, 0x080c, 0xc8ce, 0x0138, 0x080c, 0x7374, 0x1120, 0x080c, + 0x725c, 0x0804, 0xc0ea, 0x2001, 0x1959, 0x2003, 0x0001, 0x2001, + 0x1800, 0x2003, 0x0001, 0x080c, 0x727e, 0x0804, 0xc0ea, 0x6010, + 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, 0x2001, 0x1836, 0x2004, + 0xd0ac, 0x1904, 0xc0ea, 0xb8a0, 0x9082, 0x0081, 0x1a04, 0xc0ea, + 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, + 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, + 0xa347, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, + 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, + 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a, + 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee, 0x080c, 0xadb3, + 0x0030, 0x080c, 0xadb3, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00e6, + 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x012e, 0x00ee, 0x080c, + 0xa3cf, 0x0005, 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, + 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce, + 0x0c80, 0x080c, 0x312b, 0x0804, 0xc00a, 0x00c6, 0x00d6, 0x6104, + 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, + 0x9005, 0x0904, 0xc05f, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, + 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce, 0x0898, 0x080c, 0xadb3, + 0x0804, 0xc00c, 0x080c, 0xadef, 0x0804, 0xc00c, 0x00d6, 0x2c68, + 0x6104, 0x080c, 0xc83f, 0x00de, 0x0118, 0x080c, 0xa39d, 0x0408, + 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, + 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, + 0x1963, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xd0b4, + 0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x88a1, 0x080c, + 0x8e38, 0x0005, 0x00de, 0x00ce, 0x080c, 0xadb3, 0x080c, 0x3102, + 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x6017, 0x0000, + 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee, + 0x0005, 0x080c, 0xa820, 0x1904, 0xc0b6, 0x0005, 0x6000, 0x908a, + 0x0010, 0x1a0c, 0x0dc3, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, + 0x0005, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, + 0xc121, 0xc121, 0xbecb, 0xc121, 0xbed2, 0xc123, 0xbed2, 0xc13d, + 0xc121, 0x080c, 0x0dc3, 0x6004, 0x9086, 0x008b, 0x01b0, 0x6034, + 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x1130, 0x602c, 0x9080, + 0x0009, 0x200c, 0xc185, 0x2102, 0x6007, 0x008b, 0x6003, 0x000d, + 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x080c, 0xc8c2, 0x0118, + 0x080c, 0xc8d5, 0x0010, 0x080c, 0xc8e3, 0x080c, 0xc3b4, 0x080c, + 0xc1cd, 0x0570, 0x080c, 0x3102, 0x080c, 0xc1cd, 0x0168, 0x6014, + 0x2048, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, + 0xc0ed, 0xa886, 0x080c, 0x6c02, 0x2c68, 0x080c, 0xa347, 0x0150, + 0x6810, 0x6012, 0x080c, 0xc640, 0x00c6, 0x2d60, 0x080c, 0xa3cf, + 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, + 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00c8, + 0x080c, 0xc8c2, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, + 0x3102, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, + 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3102, 0x0868, 0x080c, + 0xa3cf, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002, + 0xc1a8, 0xc1a8, 0xc1ac, 0xc1aa, 0xc1b6, 0xc1a8, 0xc1a8, 0xa3cf, + 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, + 0x080c, 0x0dc3, 0x080c, 0x9e13, 0x6114, 0x0096, 0x2148, 0xa87f, + 0x0006, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x601c, 0xd084, + 0x190c, 0x1998, 0x0c88, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, - 0x080c, 0x10ac, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, - 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cc8, 0x2071, 0x1800, - 0x7350, 0x7070, 0x9302, 0x1628, 0x6020, 0x9206, 0x11e0, 0x080c, - 0xbef8, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, - 0x1148, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x00c6, 0x080c, 0x9f42, - 0x00ce, 0x0048, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, 0x00c6, - 0x080c, 0x9f18, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, - 0x08b8, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, - 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, - 0x1a92, 0x6112, 0x080c, 0x3066, 0x9006, 0x0010, 0x9085, 0x0001, - 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x080c, 0x9ec2, 0x01b0, 0x6626, 0x2b00, 0x6012, 0x080c, 0x55af, - 0x0118, 0x080c, 0xba81, 0x0168, 0x080c, 0xbc97, 0x6023, 0x0003, - 0x2009, 0x004b, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, - 0x080c, 0x9f5b, 0x0560, 0x6027, 0x0000, 0x2b00, 0x6012, 0x080c, - 0xbc97, 0x6023, 0x0003, 0x0016, 0x080c, 0x8843, 0x0076, 0x903e, - 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xd184, - 0x0128, 0x080c, 0x9f18, 0x9085, 0x0001, 0x0070, 0x080c, 0x55af, - 0x0128, 0xd18c, 0x1170, 0x080c, 0xba81, 0x0148, 0x2009, 0x004c, - 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, - 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9ec2, 0x2c78, - 0x05a0, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0016, 0x2021, - 0x0005, 0x080c, 0xba93, 0x001e, 0x9186, 0x004d, 0x0118, 0x9186, - 0x004e, 0x0148, 0x2001, 0x195d, 0x200c, 0xd1fc, 0x0168, 0x2f60, - 0x080c, 0x9f18, 0x00d0, 0x2001, 0x195c, 0x200c, 0xd1fc, 0x0120, - 0x2f60, 0x080c, 0x9f18, 0x0088, 0x2f60, 0x080c, 0x55af, 0x0138, - 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, - 0x0016, 0x080c, 0x9f88, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, - 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9ec2, 0x2c78, - 0x0508, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, - 0x0004, 0x0489, 0x009e, 0x2001, 0x195b, 0x200c, 0xd1fc, 0x0120, - 0x2f60, 0x080c, 0x9f18, 0x0060, 0x2f60, 0x080c, 0x55af, 0x0120, - 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9f88, - 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, - 0x0c98, 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x1120, 0x080c, 0x9f18, - 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f, 0x8000, 0x2900, 0x6016, - 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, - 0x080c, 0x654a, 0x0138, 0x900e, 0x2400, 0x080c, 0x6d45, 0x080c, - 0x6b1d, 0x0cb0, 0x2418, 0x080c, 0x8ac5, 0xbaa0, 0x0086, 0x2041, - 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x885b, 0x008e, 0x080c, - 0x8748, 0x2f08, 0x2648, 0x080c, 0xce89, 0xb93c, 0x81ff, 0x090c, - 0x892e, 0x080c, 0x8c37, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, - 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0190, 0x660a, 0x2b08, - 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, - 0x001f, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, - 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0008, - 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1679, 0x00fe, 0x2009, - 0x0021, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, - 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, - 0x8000, 0x080c, 0x9ec2, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, - 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, - 0x9f88, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0188, - 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, - 0x2009, 0x0000, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, - 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, - 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, - 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, - 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, - 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0086, - 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, 0x6014, 0x904d, 0x080c, - 0xb955, 0x0180, 0xa868, 0x9086, 0x0139, 0x0170, 0x6020, 0x90c6, - 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, 0xa86c, 0xd0fc, 0x0110, - 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x008e, 0x000e, 0x0005, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0198, 0x2b08, - 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, - 0x3066, 0x2009, 0x0028, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, - 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa9a1, - 0x00be, 0x080c, 0xabf3, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, - 0x8718, 0x080c, 0x8c37, 0x0078, 0x6014, 0x0096, 0x2048, 0xa86c, - 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe57, 0x080c, - 0xa717, 0x080c, 0x9f18, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, - 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, - 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d, - 0x012e, 0x009e, 0x080c, 0x9f18, 0x0c30, 0x0096, 0x9186, 0x0016, - 0x1128, 0x2001, 0x0004, 0x080c, 0x6372, 0x00e8, 0x9186, 0x0015, - 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, - 0x00b6, 0x2058, 0x080c, 0x64ac, 0x00be, 0x080c, 0xacce, 0x1198, - 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, - 0x0006, 0x080c, 0x6372, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0170, - 0x080c, 0xa305, 0x0048, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0500, - 0x080c, 0xa717, 0x080c, 0x9f18, 0x009e, 0x0005, 0x6014, 0x6310, - 0x2358, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0000, 0xa887, 0x0000, - 0xa89b, 0x4000, 0x080c, 0x6643, 0xa99e, 0x080c, 0x4d2a, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0c20, - 0x6014, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000, + 0x080c, 0x10b8, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, + 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800, + 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, + 0xc8ce, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, + 0x1148, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00c6, 0x080c, 0xa3cf, + 0x00ce, 0x0060, 0x080c, 0xc5ba, 0x0148, 0x080c, 0xc3d1, 0x1110, + 0x080c, 0xadb3, 0x00c6, 0x080c, 0xa39d, 0x00ce, 0x9ce0, 0x0018, + 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, + 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, + 0x81ff, 0x0128, 0x2061, 0x1a92, 0x6112, 0x080c, 0x3102, 0x9006, + 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, + 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x01b0, 0x6656, 0x2b00, + 0x6012, 0x080c, 0x566c, 0x0118, 0x080c, 0xc2fc, 0x0168, 0x080c, + 0xc640, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xa419, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, + 0x2091, 0x8000, 0xbaa0, 0x080c, 0xa3ec, 0x0560, 0x6057, 0x0000, + 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0003, 0x0016, 0x080c, + 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37, + 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xa39d, 0x9085, 0x0001, + 0x0070, 0x080c, 0x566c, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc2fc, + 0x0148, 0x2009, 0x004c, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e, + 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, + 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, + 0x080c, 0xa347, 0x2c78, 0x05a0, 0x7e56, 0x2b00, 0x7812, 0x7823, + 0x0003, 0x0016, 0x2021, 0x0005, 0x080c, 0xc30e, 0x001e, 0x9186, + 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x195c, 0x200c, + 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xa39d, 0x00d0, 0x2001, 0x195b, + 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0088, 0x2f60, + 0x080c, 0x566c, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, + 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001, + 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, + 0x080c, 0xa347, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, + 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x195a, + 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0060, 0x2f60, + 0x080c, 0x566c, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, + 0x0052, 0x080c, 0xa419, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, + 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4b11, 0x00ce, + 0x1120, 0x080c, 0xa39d, 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f, + 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, + 0x0126, 0x2091, 0x8000, 0x080c, 0x6652, 0x0138, 0x900e, 0x2400, + 0x080c, 0x6e4b, 0x080c, 0x6c02, 0x0cb0, 0x2418, 0x080c, 0x8cc6, + 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, + 0x8a43, 0x008e, 0x080c, 0x8919, 0x2f08, 0x2648, 0x080c, 0xda37, + 0xb93c, 0x81ff, 0x090c, 0x8b16, 0x080c, 0x8e38, 0x012e, 0x007e, + 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, + 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, + 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xa419, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x080c, 0xa3ec, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, + 0xc640, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, + 0x16c1, 0x00fe, 0x2009, 0x0021, 0x080c, 0xa419, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, + 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xa347, 0x0198, 0x660a, + 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, 0x2900, 0x6016, + 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001, 0x001e, 0x012e, + 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, + 0x080c, 0xa3ec, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, + 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xa419, 0x9085, + 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, + 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, + 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, + 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, + 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, + 0x0005, 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, + 0x6014, 0x904d, 0x080c, 0xc1cd, 0x0180, 0xa868, 0x9086, 0x0139, + 0x0170, 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, + 0xa86c, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, + 0x008e, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0xa3ec, 0x0198, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, + 0x2900, 0x6016, 0x080c, 0x3102, 0x2009, 0x0028, 0x080c, 0xa419, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, + 0x0015, 0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, + 0x00b6, 0x080c, 0xb055, 0x00be, 0x080c, 0xb2a7, 0x6003, 0x0001, + 0x6007, 0x0029, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0078, 0x6014, + 0x0096, 0x2048, 0xa86c, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, + 0x080c, 0xc800, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x0005, 0x0096, + 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091, - 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0868, 0xa87c, - 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0xa884, 0xc0ad, 0xa886, - 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x195f, - 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x854b, 0x2001, - 0x1963, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1961, - 0x200c, 0x8000, 0x2014, 0x2071, 0x1949, 0x711a, 0x721e, 0x2001, - 0x0064, 0x080c, 0x854b, 0x2001, 0x1964, 0x82ff, 0x1110, 0x2011, - 0x0014, 0x2202, 0x080c, 0x6727, 0x00ee, 0x003e, 0x002e, 0x001e, - 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1963, 0x2003, - 0x0028, 0x2001, 0x1964, 0x2003, 0x0014, 0x2071, 0x1949, 0x701b, - 0x0000, 0x701f, 0x07d0, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, - 0x6028, 0x904d, 0x0110, 0x080c, 0x1033, 0x009e, 0x0005, 0x0005, - 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0180, 0x2b08, - 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033, - 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, - 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, - 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086, 0x0014, - 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, - 0x8e2f, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54, - 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, - 0x080c, 0x30af, 0x080c, 0xa305, 0x0020, 0x080c, 0xa717, 0x080c, - 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206, - 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, - 0x0188, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, - 0x6016, 0x2009, 0x004d, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, - 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, - 0x0016, 0x080c, 0x9ec2, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbc97, - 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9f88, 0x9085, - 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, - 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, - 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048, - 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x197d, - 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, - 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001c, - 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xc443, 0x001e, - 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa86b, - 0x0103, 0x0010, 0x080c, 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee, - 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, - 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, - 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, - 0x8e2f, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c, 0xaa7c, - 0x9206, 0x1110, 0x080c, 0x3066, 0x080c, 0xa305, 0x0020, 0x080c, - 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, - 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, - 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530, - 0x6014, 0x2048, 0x2c78, 0x080c, 0x8e2f, 0x05f0, 0x7078, 0xaad0, - 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c, 0x3066, - 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552, - 0x001e, 0x0010, 0x080c, 0x533c, 0x080c, 0xb955, 0x0508, 0xa87f, - 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c, 0xb955, - 0x01b8, 0x6014, 0x2048, 0x080c, 0x533c, 0x1d70, 0xa87f, 0x0030, - 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126, 0x2091, - 0x8000, 0xa86b, 0x0139, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, - 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206, 0x0930, - 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938, 0xaa34, - 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890, 0x9206, - 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005, - 0x00b6, 0x00d6, 0x0036, 0x080c, 0xb955, 0x0904, 0xbe53, 0x0096, - 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550, 0x6310, - 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110, 0x080c, - 0x6643, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, - 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, - 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036, - 0x20a0, 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x00ce, - 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, - 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358, 0xb804, - 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c, 0x6b11, - 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026, - 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210, - 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084, - 0x00ff, 0x900e, 0x080c, 0x269f, 0x2118, 0x831f, 0x939c, 0xff00, - 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c, - 0x4abd, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89f, - 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096, 0x0002, - 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x00fe, - 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0xa978, 0xd1cc, - 0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c, - 0x000f, 0x918e, 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834, - 0xa938, 0x9115, 0x190c, 0xb137, 0x0005, 0x0036, 0x2019, 0x0001, - 0x0010, 0x0036, 0x901e, 0x04c1, 0x01e0, 0x080c, 0xb955, 0x01c8, - 0x080c, 0xbb39, 0x602f, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, - 0x2048, 0xa880, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0040, - 0xa86b, 0x0103, 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6b1d, - 0x009e, 0x003e, 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006, - 0xc0ec, 0xa886, 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048, - 0xd0dc, 0x0118, 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c, - 0xbc45, 0xa87b, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, - 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, - 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, - 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, - 0x080c, 0x4c74, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, - 0x2001, 0x1963, 0x2004, 0x601a, 0x0005, 0x080c, 0x9f18, 0x0804, - 0x8c37, 0x2001, 0x0109, 0x2004, 0xd084, 0x01e0, 0x0126, 0x2091, - 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, - 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x85b8, - 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, - 0x9085, 0x0001, 0x0005, 0x0016, 0x0026, 0x2009, 0x1823, 0x210c, - 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010, 0x02c8, 0x9016, 0xd6cc, - 0x0120, 0x9182, 0x0014, 0x0298, 0x7254, 0x9006, 0xd6c4, 0x0120, - 0x9182, 0x0018, 0x0260, 0x705c, 0x9200, 0x0248, 0x0128, 0x9080, - 0x0018, 0x9102, 0x0220, 0x9006, 0x002e, 0x001e, 0x0005, 0x080c, - 0x826a, 0x9085, 0x0001, 0x0cc0, 0x00b6, 0x0066, 0x6000, 0x90b2, - 0x0010, 0x1a0c, 0x0dc4, 0x001b, 0x006e, 0x00be, 0x0005, 0xbf7f, - 0xc5a8, 0xc71d, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbfb6, - 0xc79a, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0x080c, - 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013, - 0x006e, 0x0005, 0xbf9a, 0xcc4f, 0xbf9a, 0xbf9a, 0xbf9a, 0xbf9a, - 0xbf9a, 0xbf9a, 0xcbfc, 0xcca3, 0xbf9a, 0xd1a5, 0xd1db, 0xd1a5, - 0xd1db, 0xbf9a, 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c, - 0x0dc4, 0x6000, 0x000a, 0x0005, 0xbfb4, 0xc96b, 0xca29, 0xca43, - 0xcace, 0xbfb4, 0xcb6f, 0xcb27, 0xc7a6, 0xcbd2, 0xcbe7, 0xbfb4, - 0xbfb4, 0xbfb4, 0xbfb4, 0xbfb4, 0x080c, 0x0dc4, 0x91b2, 0x0054, - 0x1a0c, 0x0dc4, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc34c, 0x0002, - 0xc000, 0xc214, 0xc000, 0xc000, 0xc000, 0xc21d, 0xc000, 0xc000, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc002, - 0xc065, 0xc074, 0xc0dd, 0xc113, 0xc18c, 0xc1ff, 0xc000, 0xc000, - 0xc220, 0xc000, 0xc000, 0xc235, 0xc242, 0xc000, 0xc000, 0xc000, - 0xc000, 0xc000, 0xc2e8, 0xc000, 0xc000, 0xc2fc, 0xc000, 0xc000, - 0xc2b7, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc314, - 0x080c, 0x0dc4, 0x080c, 0x6704, 0x1150, 0x2001, 0x1836, 0x2004, - 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, - 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc20d, 0x080c, - 0x66fc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, - 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x903e, - 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0x001e, - 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6420, - 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026, - 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd2d2, - 0x002e, 0x001e, 0x1178, 0x080c, 0xcdbb, 0x1904, 0xc0d5, 0x080c, - 0xcd57, 0x1120, 0x6007, 0x0008, 0x0804, 0xc20d, 0x6007, 0x0009, - 0x0804, 0xc20d, 0x080c, 0xcffa, 0x0128, 0x080c, 0xcdbb, 0x0d78, - 0x0804, 0xc0d5, 0x6017, 0x1900, 0x0c88, 0x080c, 0x318a, 0x1904, - 0xc349, 0x6106, 0x080c, 0xccfb, 0x6007, 0x0006, 0x0804, 0xc20d, - 0x6007, 0x0007, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349, - 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x6610, 0x2658, 0xbe04, - 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c, - 0x635e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686, - 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140, - 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x04a8, - 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1168, 0x7034, - 0x908a, 0x0014, 0x0248, 0x2009, 0x1823, 0x210c, 0x9102, 0x0220, - 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, - 0x0007, 0x00b0, 0x00ee, 0x080c, 0xce1f, 0x1190, 0x9686, 0x0006, - 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x30af, - 0x002e, 0x080c, 0x64ac, 0x6007, 0x000a, 0x00de, 0x0804, 0xc20d, - 0x6007, 0x000b, 0x00de, 0x0804, 0xc20d, 0x080c, 0x3066, 0x080c, - 0xbf0d, 0x6007, 0x0001, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, - 0xc349, 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x00e6, 0x2071, - 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938, 0x2031, 0x1823, 0x2634, - 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04, 0xc0b4, 0x7030, 0x9084, - 0x0003, 0x1904, 0xc0b4, 0x00ee, 0x00de, 0x6610, 0x2658, 0xbe04, - 0x9686, 0x0707, 0x0990, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, - 0x080c, 0x30af, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c, - 0xd2b1, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001, 0x1836, - 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc00f, - 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, - 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x639e, - 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, - 0x9686, 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce2c, 0x1120, 0x6007, - 0x000e, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, - 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016, 0x9006, 0x2009, - 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xd156, - 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, - 0x0001, 0x0804, 0xc20d, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156, - 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, - 0x0270, 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, - 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc0d5, - 0x9682, 0x0007, 0x0a04, 0xc13c, 0x0804, 0xc0d5, 0x6017, 0x1900, - 0x6007, 0x0009, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001, - 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, - 0xc00f, 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, - 0x0006, 0x0016, 0x908e, 0x0001, 0x0118, 0x908e, 0x0000, 0x1118, - 0x001e, 0x000e, 0x0080, 0x001e, 0x000e, 0x9082, 0x0006, 0x06a0, - 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, - 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce5a, 0x1138, 0x080c, 0xcd57, - 0x1120, 0x6007, 0x0010, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458, - 0xbca0, 0x0046, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016, - 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, - 0x080c, 0xd156, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, - 0x004e, 0x6007, 0x0001, 0x0448, 0x080c, 0xcffa, 0x0198, 0x0016, - 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186, 0x0003, 0x0148, - 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0920, 0x0804, - 0xc0d5, 0x001e, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, - 0x318a, 0x1904, 0xc349, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, - 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, - 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x0cb0, 0x6007, 0x0005, 0x0c68, - 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a, 0x1904, 0xc349, - 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0020, 0x6003, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x080c, 0x318a, 0x1904, - 0xc349, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, - 0x8c37, 0x0005, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a, - 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x0016, 0x0026, - 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, 0x181f, 0x2214, 0x703c, - 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214, 0x7038, 0x9084, 0x00ff, - 0x9206, 0x11a0, 0x7240, 0x080c, 0xb943, 0x0570, 0x2260, 0x6008, - 0x9086, 0xffff, 0x0120, 0x7244, 0x6008, 0x9206, 0x1528, 0x6020, - 0x9086, 0x0007, 0x1508, 0x080c, 0x9f18, 0x04a0, 0x7244, 0x9286, - 0xffff, 0x0180, 0x2c08, 0x080c, 0xb943, 0x01b0, 0x2260, 0x7240, - 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, - 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd128, 0x1180, - 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, - 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, - 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, - 0x080c, 0x9f18, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, - 0x8718, 0x080c, 0x8c37, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, - 0x0001, 0x080c, 0x635e, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, - 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xad79, 0x003e, - 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc20d, - 0x080c, 0xa9b9, 0x080c, 0x72e5, 0x1190, 0x0006, 0x0026, 0x0036, - 0x080c, 0x72ff, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, - 0x7212, 0x0010, 0x080c, 0x72bd, 0x003e, 0x002e, 0x000e, 0x0005, - 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, - 0x6106, 0x080c, 0xc4fc, 0x1120, 0x6007, 0x002b, 0x0804, 0xc20d, - 0x6007, 0x002c, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349, - 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, - 0x6106, 0x080c, 0xc501, 0x1120, 0x6007, 0x002e, 0x0804, 0xc20d, - 0x6007, 0x002f, 0x0804, 0xc20d, 0x00e6, 0x0026, 0x080c, 0x6704, - 0x0550, 0x080c, 0x66fc, 0x080c, 0xd205, 0x1518, 0x2071, 0x1800, - 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, - 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, - 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6742, 0x0120, - 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2e5f, - 0x0010, 0x080c, 0xd239, 0x002e, 0x00ee, 0x080c, 0x9f18, 0x0804, - 0xc213, 0x080c, 0x9f18, 0x0005, 0x2600, 0x0002, 0xc362, 0xc362, - 0xc362, 0xc362, 0xc362, 0xc364, 0xc362, 0xc362, 0xc362, 0xc362, - 0xc37e, 0xc362, 0xc362, 0xc362, 0xc390, 0xc3a6, 0xc3d7, 0xc362, - 0xc362, 0xc3dc, 0x080c, 0x0dc4, 0x080c, 0xd1fc, 0x1d10, 0x080c, - 0x318a, 0x19f8, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, - 0x080c, 0x8718, 0x0005, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x6007, - 0x0001, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005, 0x080c, 0xd1fc, - 0x1940, 0x080c, 0x318a, 0x1928, 0x080c, 0xc4e0, 0x1d60, 0x703c, - 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005, - 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1, 0x1268, 0x080c, 0xc3ea, - 0x0904, 0xc349, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x8718, - 0x080c, 0x8c37, 0x0005, 0x6007, 0x0012, 0x0cb0, 0x6007, 0x004f, - 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, - 0x0001, 0x1160, 0x7140, 0x2001, 0x199a, 0x2004, 0x9106, 0x11b0, - 0x7144, 0x2001, 0x199b, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, - 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, - 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x0110, 0x6017, 0x0001, - 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007, - 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c, 0xd1fc, 0x1904, 0xc349, - 0x080c, 0x318a, 0x1904, 0xc349, 0x6007, 0x0053, 0x6003, 0x0001, - 0x0804, 0x8718, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, + 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e, 0x080c, 0xa39d, 0x0c30, + 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6448, + 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, + 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x6597, 0x00be, + 0x080c, 0xb382, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, + 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, 0x6448, 0x6014, 0x2048, + 0xa86c, 0xd0fc, 0x0170, 0x080c, 0xa7a3, 0x0048, 0x6014, 0x2048, + 0xa86c, 0xd0fc, 0x0500, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x009e, + 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0dc3, 0xa87f, + 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x080c, 0x674b, 0xa99e, + 0x080c, 0x4de7, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, + 0x080c, 0xa39d, 0x0c20, 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f, + 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b, + 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x080c, + 0xa39d, 0x0868, 0xa87c, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, + 0xa884, 0xc0ad, 0xa886, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000, + 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38, + 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, + 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb, + 0xc4f0, 0xc4f0, 0xc4f3, 0xdd67, 0xdd82, 0xdd85, 0xbecb, 0xbecb, + 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0x080c, 0x0dc3, + 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa880, + 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004, + 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xa347, 0x0508, 0x7810, + 0x6012, 0x080c, 0xc640, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, + 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, + 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954, + 0x6156, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2f60, 0x00fe, 0x0005, + 0x2f60, 0x00fe, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005, 0x0016, + 0x0096, 0x6814, 0x2048, 0xa880, 0xd0e4, 0x0180, 0xc0e4, 0xa882, + 0xa87b, 0x0000, 0xa897, 0x0000, 0xa893, 0x0000, 0xd0cc, 0x0130, + 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x6830, 0x6036, + 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170, + 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803, + 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048, + 0xa8b0, 0x6938, 0x9102, 0xa8b4, 0x693c, 0x9103, 0x1e48, 0x683c, + 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a, + 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001, + 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, + 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8, + 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024, + 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046, + 0x0036, 0x2400, 0xacb0, 0x9402, 0xa836, 0x2300, 0xabb4, 0x9303, + 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005, + 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5, + 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8, + 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037, + 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e, + 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e, + 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, + 0x195e, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x871c, + 0x2001, 0x1962, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, + 0x1960, 0x200c, 0x8000, 0x2014, 0x2071, 0x1948, 0x711a, 0x721e, + 0x2001, 0x0064, 0x080c, 0x871c, 0x2001, 0x1963, 0x82ff, 0x1110, + 0x2011, 0x0014, 0x2202, 0x2001, 0x1964, 0x9288, 0x000a, 0x2102, + 0x2001, 0x1a73, 0x2102, 0x2001, 0x0032, 0x080c, 0x1568, 0x080c, + 0x684e, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, + 0x0016, 0x00e6, 0x2001, 0x1962, 0x2003, 0x0028, 0x2001, 0x1963, + 0x2003, 0x0014, 0x2071, 0x1948, 0x701b, 0x0000, 0x701f, 0x07d0, + 0x2001, 0x1964, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a73, 0x2102, + 0x2001, 0x0032, 0x080c, 0x1568, 0x00ee, 0x001e, 0x000e, 0x0005, + 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x103f, 0x009e, 0x0005, + 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x0180, + 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, + 0x0033, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, + 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, + 0x0015, 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086, + 0x0014, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, + 0x080c, 0x9037, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, + 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, + 0x900e, 0x080c, 0x314b, 0x080c, 0xa7a3, 0x0020, 0x080c, 0xadb3, + 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, + 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, + 0xa347, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, + 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xa419, 0x9085, 0x0001, + 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, + 0x8000, 0x0016, 0x080c, 0xa347, 0x0180, 0x2b08, 0x6112, 0x080c, + 0xc640, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xa419, + 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, + 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, + 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, + 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, + 0x197d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, + 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, + 0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xcf43, + 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, + 0xa86b, 0x0103, 0x0010, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe, + 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, + 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, + 0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, + 0x080c, 0x9037, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c, + 0xaa7c, 0x9206, 0x1110, 0x080c, 0x3102, 0x080c, 0xa7a3, 0x0020, + 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, + 0x705c, 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, + 0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, + 0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9037, 0x05f0, 0x7078, + 0xaad0, 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c, + 0x3102, 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c, + 0x560f, 0x001e, 0x0010, 0x080c, 0x53f9, 0x080c, 0xc1cd, 0x0508, + 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c, + 0xc1cd, 0x01b8, 0x6014, 0x2048, 0x080c, 0x53f9, 0x1d70, 0xa87f, + 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126, + 0x2091, 0x8000, 0xa86b, 0x0139, 0x080c, 0x6c02, 0x012e, 0x080c, + 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206, + 0x0930, 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938, + 0xaa34, 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890, + 0x9206, 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e, + 0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc1cd, 0x0904, 0xc7fc, + 0x0096, 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550, + 0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110, + 0x080c, 0x674b, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8, + 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, + 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa85c, 0x9080, + 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a, + 0x00ce, 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, + 0x9086, 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358, + 0xb804, 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c, + 0x6bf5, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, + 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, + 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, + 0x9084, 0x00ff, 0x900e, 0x080c, 0x2708, 0x2118, 0x831f, 0x939c, + 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, + 0x080c, 0x4b6d, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, + 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096, + 0x0002, 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, + 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, + 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, + 0x080c, 0xc1bb, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, + 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, + 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, + 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, + 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa978, 0xd1cc, 0x0198, 0x918c, + 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c, 0x000f, 0x918e, + 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, + 0x190c, 0xb84f, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, + 0x901e, 0x04c1, 0x01e0, 0x080c, 0xc1cd, 0x01c8, 0x080c, 0xc3b4, + 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa880, + 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0040, 0xa86b, 0x0103, + 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6c02, 0x009e, 0x003e, + 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006, 0xc0ec, 0xa886, + 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048, 0xd0dc, 0x0118, + 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c, 0xc4c0, 0xa87b, + 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006, + 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001, + 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010, + 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4d24, + 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1962, + 0x2004, 0x601a, 0x0005, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005, + 0x080c, 0xa39d, 0x0804, 0x8e38, 0x2001, 0x0109, 0x2004, 0xd084, + 0x01e0, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, + 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061, + 0x0100, 0x080c, 0x8789, 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, + 0x001e, 0x000e, 0x012e, 0x9085, 0x0001, 0x0005, 0x0016, 0x0026, + 0x2009, 0x1823, 0x210c, 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010, + 0x02c8, 0x9016, 0xd6cc, 0x0120, 0x9182, 0x0014, 0x0298, 0x7254, + 0x9006, 0xd6c4, 0x0120, 0x9182, 0x0018, 0x0260, 0x705c, 0x9200, + 0x0248, 0x0128, 0x9080, 0x0018, 0x9102, 0x0220, 0x9006, 0x002e, + 0x001e, 0x0005, 0x080c, 0x83cc, 0x9085, 0x0001, 0x0cc0, 0x00b6, + 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x001b, 0x006e, + 0x00be, 0x0005, 0xc95a, 0xd0a8, 0xd21d, 0xc95a, 0xc95a, 0xc95a, + 0xc95a, 0xc95a, 0xc991, 0xd2a1, 0xc95a, 0xc95a, 0xc95a, 0xc95a, + 0xc95a, 0xc95a, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010, + 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xc975, 0xd7f0, 0xc975, + 0xc975, 0xc975, 0xc975, 0xc975, 0xc975, 0xd79d, 0xd844, 0xc975, + 0xde9a, 0xded0, 0xde9a, 0xded0, 0xc975, 0x080c, 0x0dc3, 0x6000, + 0x9082, 0x0010, 0x1a0c, 0x0dc3, 0x6000, 0x000a, 0x0005, 0xc98f, + 0xd47f, 0xd54e, 0xd571, 0xd631, 0xc98f, 0xd710, 0xd6b9, 0xd2ad, + 0xd773, 0xd788, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0x080c, + 0x0dc3, 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x2100, 0x91b2, 0x0040, + 0x1a04, 0xce2f, 0x0002, 0xc9db, 0xcbef, 0xc9db, 0xc9db, 0xc9db, + 0xcbf8, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, + 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, + 0xc9db, 0xc9db, 0xc9dd, 0xca40, 0xca4f, 0xcab8, 0xcaee, 0xcb67, + 0xcbda, 0xc9db, 0xc9db, 0xcbfb, 0xc9db, 0xc9db, 0xcc10, 0xcc1d, + 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xccc3, 0xc9db, 0xc9db, + 0xccd7, 0xc9db, 0xc9db, 0xcc92, 0xc9db, 0xc9db, 0xc9db, 0xccef, + 0xc9db, 0xc9db, 0xc9db, 0xcd6c, 0xc9db, 0xc9db, 0xc9db, 0xc9db, + 0xc9db, 0xc9db, 0xcdf7, 0x080c, 0x0dc3, 0x080c, 0x682b, 0x1150, + 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, + 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, + 0x0804, 0xcbe8, 0x080c, 0x6814, 0x00e6, 0x00c6, 0x0036, 0x0026, + 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, + 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37, + 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, + 0x2658, 0x080c, 0x650b, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, + 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, + 0x2c08, 0x080c, 0xe05f, 0x002e, 0x001e, 0x1178, 0x080c, 0xd969, + 0x1904, 0xcab0, 0x080c, 0xd905, 0x1120, 0x6007, 0x0008, 0x0804, + 0xcbe8, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c, 0xdba8, 0x0128, + 0x080c, 0xd969, 0x0d78, 0x0804, 0xcab0, 0x6017, 0x1900, 0x0c88, + 0x080c, 0x3226, 0x1904, 0xce2c, 0x6106, 0x080c, 0xd8a9, 0x6007, + 0x0006, 0x0804, 0xcbe8, 0x6007, 0x0007, 0x0804, 0xcbe8, 0x080c, + 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x00d6, + 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, + 0x2001, 0x0001, 0x080c, 0x6434, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, + 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, + 0x0110, 0x00de, 0x04a8, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, + 0x0003, 0x1168, 0x7034, 0x908a, 0x0014, 0x0248, 0x2009, 0x1823, + 0x210c, 0x9102, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, + 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xd9cd, + 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, + 0x900e, 0x080c, 0x314b, 0x002e, 0x080c, 0x6597, 0x6007, 0x000a, + 0x00de, 0x0804, 0xcbe8, 0x6007, 0x000b, 0x00de, 0x0804, 0xcbe8, + 0x080c, 0x3102, 0x080c, 0xc8e3, 0x6007, 0x0001, 0x0804, 0xcbe8, + 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, + 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938, + 0x2031, 0x1823, 0x2634, 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04, + 0xca8f, 0x7030, 0x9084, 0x0003, 0x1904, 0xca8f, 0x00ee, 0x00de, + 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x0990, 0x0026, 0x6210, + 0x2258, 0xbaa0, 0x900e, 0x080c, 0x314b, 0x002e, 0x6007, 0x000c, + 0x2001, 0x0001, 0x080c, 0xe03e, 0x0804, 0xcbe8, 0x080c, 0x682b, + 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, + 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658, 0xbe04, + 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, + 0x0006, 0x080c, 0x6474, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, + 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c, + 0xd9da, 0x1120, 0x6007, 0x000e, 0x0804, 0xcbe8, 0x0046, 0x6410, + 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x004e, + 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, + 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, + 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xcbe8, 0x2001, 0x0001, + 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, + 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xb434, 0x003e, 0x002e, + 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, + 0x0004, 0x0a04, 0xcab0, 0x9682, 0x0007, 0x0a04, 0xcb17, 0x0804, + 0xcab0, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c, + 0x682b, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, + 0x0008, 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658, + 0xbe04, 0x9684, 0x00ff, 0x0006, 0x0016, 0x908e, 0x0001, 0x0118, + 0x908e, 0x0000, 0x1118, 0x001e, 0x000e, 0x0080, 0x001e, 0x000e, + 0x9082, 0x0006, 0x06a0, 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c, 0xda08, + 0x1138, 0x080c, 0xd905, 0x1120, 0x6007, 0x0010, 0x0804, 0xcbe8, + 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c, + 0xc8e3, 0x004e, 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, + 0x0148, 0x2009, 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800, + 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0448, 0x080c, + 0xdba8, 0x0198, 0x0016, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, + 0x9186, 0x0003, 0x0148, 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, + 0x0006, 0x0920, 0x0804, 0xcab0, 0x001e, 0x6017, 0x1900, 0x6007, + 0x0009, 0x0070, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xdf0c, + 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007, 0x0012, + 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007, + 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0cb0, + 0x6007, 0x0005, 0x0c68, 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c, + 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007, + 0x0020, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, + 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007, 0x0023, 0x6003, 0x0001, + 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf0c, 0x1904, + 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, + 0xcab0, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, + 0x181f, 0x2214, 0x703c, 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214, + 0x7038, 0x9084, 0x00ff, 0x9206, 0x11a0, 0x7240, 0x080c, 0xc1bb, + 0x0570, 0x2260, 0x6008, 0x9086, 0xffff, 0x0120, 0x7244, 0x6008, + 0x9206, 0x1528, 0x6020, 0x9086, 0x0007, 0x1508, 0x080c, 0xa39d, + 0x04a0, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc1bb, + 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, + 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, + 0x080c, 0xdcea, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, + 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, + 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, + 0x9086, 0x0024, 0x1110, 0x080c, 0xa39d, 0x2160, 0x6007, 0x0025, + 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ee, 0x002e, + 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016, + 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, + 0x080c, 0xb434, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, + 0x0031, 0x0804, 0xcbe8, 0x080c, 0xb06d, 0x080c, 0x7351, 0x1190, + 0x0006, 0x0026, 0x0036, 0x080c, 0x736b, 0x1138, 0x080c, 0x764c, + 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0010, 0x080c, 0x7329, 0x003e, + 0x002e, 0x000e, 0x0005, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, + 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xcffc, 0x1120, 0x6007, + 0x002b, 0x0804, 0xcbe8, 0x6007, 0x002c, 0x0804, 0xcbe8, 0x080c, + 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, + 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xd001, 0x1120, 0x6007, + 0x002e, 0x0804, 0xcbe8, 0x6007, 0x002f, 0x0804, 0xcbe8, 0x080c, + 0x3226, 0x1904, 0xce2c, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, + 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, + 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, + 0xcbef, 0x080c, 0x5668, 0xd0e4, 0x0904, 0xcd69, 0x2071, 0x026c, + 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6869, + 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, + 0x0510, 0x080c, 0x6865, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206, + 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xc1bb, 0x0590, + 0x080c, 0xcecd, 0x0578, 0x080c, 0xdd94, 0x0560, 0x622e, 0x6007, + 0x0036, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, + 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, + 0xc1bb, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, + 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10, + 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, + 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, + 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3226, 0x1904, 0xce2c, + 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, + 0x1904, 0xcbef, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5668, 0xd0e4, + 0x0904, 0xcdef, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, + 0x720c, 0x623e, 0x9286, 0xffff, 0x1158, 0x7208, 0x00c6, 0x2c08, + 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10, 0x00ce, 0x0904, 0xcde2, + 0x080c, 0xc1bb, 0x0904, 0xcde2, 0x7108, 0x9280, 0x0002, 0x2004, + 0x9106, 0x1904, 0xcde2, 0x00c6, 0x0026, 0x2260, 0x0066, 0x2031, + 0x0001, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x190c, 0x0dc3, + 0x080c, 0xbe31, 0x006e, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, + 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, + 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, + 0xcecd, 0x0904, 0xcd62, 0x0056, 0x7510, 0x7614, 0x080c, 0xddad, + 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, + 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, + 0x8e38, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, + 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0c10, 0x6007, + 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xcd39, 0x00e6, + 0x0026, 0x080c, 0x682b, 0x0550, 0x080c, 0x6814, 0x080c, 0xdf92, + 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, + 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, + 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, + 0x080c, 0x6869, 0x0120, 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac, + 0x1128, 0x080c, 0x2ed6, 0x0010, 0x080c, 0xdfc6, 0x002e, 0x00ee, + 0x080c, 0xa39d, 0x0804, 0xcbee, 0x080c, 0xa39d, 0x0005, 0x2600, + 0x0002, 0xce45, 0xce45, 0xce45, 0xce45, 0xce45, 0xce47, 0xce45, + 0xce45, 0xce45, 0xce45, 0xce61, 0xce45, 0xce45, 0xce45, 0xce73, + 0xce89, 0xceba, 0xce45, 0xce45, 0xcebf, 0x080c, 0x0dc3, 0x080c, + 0xdf0c, 0x1d10, 0x080c, 0x3226, 0x19f8, 0x7038, 0x6016, 0x6007, + 0x0045, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0005, 0x080c, 0x3102, + 0x080c, 0xc8e3, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, + 0x0005, 0x080c, 0xdf0c, 0x1940, 0x080c, 0x3226, 0x1928, 0x080c, + 0xcfe0, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, + 0x080c, 0x88e9, 0x0005, 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1, + 0x1268, 0x080c, 0xceea, 0x0904, 0xce2c, 0x6007, 0x004e, 0x6003, + 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007, 0x0012, + 0x0cb0, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, + 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x199a, + 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x199b, 0x2004, 0x9106, + 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, + 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xb448, 0x009e, + 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, + 0x8e38, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c, + 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007, + 0x0053, 0x6003, 0x0001, 0x0804, 0x88e9, 0x0016, 0x00e6, 0x2071, + 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084, + 0x0150, 0x7128, 0x6044, 0x9106, 0x1120, 0x712c, 0x6048, 0x9106, + 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, + 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x20e1, 0x0000, 0x2001, - 0x197d, 0x2003, 0x0000, 0x080c, 0x101a, 0x05a0, 0x2900, 0x6016, + 0x197d, 0x2003, 0x0000, 0x080c, 0x1026, 0x05a0, 0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x0471, 0x001e, 0x81ff, 0x01b8, - 0x2940, 0x080c, 0x101a, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18, + 0x2940, 0x080c, 0x1026, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048, - 0x080c, 0x0fb3, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, + 0x080c, 0x0fbf, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, - 0x918c, 0xffff, 0x11b0, 0x080c, 0x228b, 0x2099, 0x026c, 0x2001, + 0x918c, 0xffff, 0x11b0, 0x080c, 0x22d3, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0400, - 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260, - 0x0ca8, 0x080c, 0x228b, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008, + 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260, + 0x0ca8, 0x080c, 0x22d3, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, - 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260, 0x0ca8, + 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x197d, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8, - 0x080c, 0x22a3, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, + 0x080c, 0x22eb, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, - 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x080c, - 0x22a3, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, + 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x080c, + 0x22eb, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, - 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x2061, + 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x1980, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, - 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc578, 0x00de, - 0x0005, 0x00d6, 0x080c, 0xc585, 0x1520, 0x680c, 0x908c, 0xff00, + 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd078, 0x00de, + 0x0005, 0x00d6, 0x080c, 0xd085, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, - 0x0130, 0x9006, 0x080c, 0xd2b1, 0x2009, 0x0001, 0x0078, 0xd1ec, - 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x269f, 0x1148, - 0x2001, 0x0001, 0x080c, 0xd2b1, 0x2110, 0x900e, 0x080c, 0x30af, + 0x0130, 0x9006, 0x080c, 0xe03e, 0x2009, 0x0001, 0x0078, 0xd1ec, + 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2708, 0x1148, + 0x2001, 0x0001, 0x080c, 0xe03e, 0x2110, 0x900e, 0x080c, 0x314b, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, - 0x00c6, 0x080c, 0x9f5b, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, - 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1578, 0x080c, - 0x63c1, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, - 0x6012, 0x080c, 0xd1fc, 0x11d8, 0x080c, 0x318a, 0x11c0, 0x080c, - 0xc4e0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6372, 0x2001, 0x0007, - 0x080c, 0x639e, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, - 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, - 0x9f18, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9f18, - 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9f18, 0x9006, 0x0c98, + 0x00c6, 0x080c, 0xa3ec, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, + 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x1578, 0x080c, + 0x6497, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, + 0x6012, 0x080c, 0xdf0c, 0x11d8, 0x080c, 0x3226, 0x11c0, 0x080c, + 0xcfe0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6448, 0x2001, 0x0007, + 0x080c, 0x6474, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, + 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c, + 0xa39d, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xa39d, + 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xa39d, 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x11c0, 0x6804, 0x2009, 0x1823, 0x210c, 0x9102, 0x0290, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, - 0x910d, 0x612a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, - 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4, 0x91b6, 0x0013, 0x1130, - 0x2008, 0x91b2, 0x0040, 0x1a04, 0xc6eb, 0x040a, 0x91b6, 0x0027, + 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005, + 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x1130, + 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd1eb, 0x040a, 0x91b6, 0x0027, 0x0198, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, - 0xbf19, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0005, - 0x91b6, 0x0014, 0x190c, 0x0dc4, 0x2001, 0x0007, 0x080c, 0x639e, - 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0xc617, - 0xc619, 0xc617, 0xc617, 0xc617, 0xc619, 0xc628, 0xc6e4, 0xc66c, - 0xc6e4, 0xc692, 0xc6e4, 0xc628, 0xc6e4, 0xc6dc, 0xc6e4, 0xc6dc, - 0xc6e4, 0xc6e4, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, - 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc6e4, - 0xc617, 0xc617, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc617, - 0xc617, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617, - 0xc623, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, - 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0x080c, - 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x0002, 0x080c, - 0x8c37, 0x0804, 0xc6ea, 0x9006, 0x080c, 0x635e, 0x0804, 0xc6e4, - 0x080c, 0x673e, 0x1904, 0xc6e4, 0x9006, 0x080c, 0x635e, 0x6010, + 0xc8f4, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xadfa, 0x0005, + 0x91b6, 0x0014, 0x190c, 0x0dc3, 0x2001, 0x0007, 0x080c, 0x6474, + 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0xd117, + 0xd119, 0xd117, 0xd117, 0xd117, 0xd119, 0xd128, 0xd1e4, 0xd16c, + 0xd1e4, 0xd192, 0xd1e4, 0xd128, 0xd1e4, 0xd1dc, 0xd1e4, 0xd1dc, + 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, + 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd119, 0xd117, 0xd1e4, + 0xd117, 0xd117, 0xd1e4, 0xd117, 0xd1e1, 0xd1e4, 0xd117, 0xd117, + 0xd117, 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd1e4, 0xd1e4, 0xd117, + 0xd123, 0xd117, 0xd117, 0xd117, 0xd117, 0xd1e0, 0xd1e4, 0xd117, + 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0x080c, + 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0002, 0x080c, + 0x8e38, 0x0804, 0xd1ea, 0x9006, 0x080c, 0x6434, 0x0804, 0xd1e4, + 0x080c, 0x6865, 0x1904, 0xd1e4, 0x9006, 0x080c, 0x6434, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, - 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8ac, - 0x9005, 0x0904, 0xc6e4, 0x080c, 0x31bb, 0x1904, 0xc6e4, 0x2001, + 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8b0, + 0x9005, 0x0904, 0xd1e4, 0x080c, 0x3257, 0x1904, 0xd1e4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, - 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6372, - 0x080c, 0x8b2b, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x6110, 0x2158, 0x2009, 0x0001, - 0x080c, 0x836c, 0x0804, 0xc6ea, 0x6610, 0x2658, 0xbe04, 0x96b4, + 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6448, + 0x080c, 0x8d2c, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, + 0x080c, 0x88e9, 0x080c, 0x8e38, 0x6110, 0x2158, 0x2009, 0x0001, + 0x080c, 0x84d0, 0x0804, 0xd1ea, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0138, 0x9686, 0x0004, 0x0120, - 0x2001, 0x0004, 0x080c, 0x639e, 0x080c, 0xd300, 0x0904, 0xc6e4, - 0x080c, 0x8b2b, 0x2001, 0x0004, 0x080c, 0x6372, 0x6023, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8718, 0x080c, 0x8c37, - 0x0804, 0xc6ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, + 0x2001, 0x0004, 0x080c, 0x6474, 0x080c, 0xe08d, 0x0904, 0xd1e4, + 0x080c, 0x8d2c, 0x2001, 0x0004, 0x080c, 0x6448, 0x6023, 0x0001, + 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38, + 0x0804, 0xd1ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, - 0x4c74, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc70a, 0x6610, + 0x4d24, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd20a, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, - 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x639e, 0x9284, 0x00ff, + 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x6474, 0x9284, 0x00ff, 0x908e, 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006, - 0x080c, 0x6372, 0x080c, 0x673e, 0x11f8, 0x2001, 0x1836, 0x2004, + 0x080c, 0x6448, 0x080c, 0x6865, 0x11f8, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804, - 0xc654, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020, - 0x0018, 0x0010, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f18, - 0x080c, 0x8c37, 0x0005, 0x2600, 0x0002, 0xc701, 0xc701, 0xc701, - 0xc701, 0xc701, 0xc703, 0xc701, 0xc701, 0xc701, 0xc701, 0xc703, - 0xc701, 0xc701, 0xc701, 0xc703, 0xc703, 0xc703, 0xc703, 0xc701, - 0xc703, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, - 0x8c37, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, - 0xd184, 0x0138, 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x080c, - 0x308f, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, - 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc4, 0x91b6, - 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc4, - 0x006b, 0x0005, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xc798, 0xa7e9, - 0xa7e9, 0xc74a, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, - 0xa7e9, 0xa7e9, 0xc798, 0xa7e9, 0xa7e9, 0xc789, 0xa7e9, 0xa7e9, - 0xa7e9, 0xa7e9, 0x00f6, 0x080c, 0x673e, 0x11d8, 0x080c, 0xbef8, - 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8ac, 0x9005, 0x0190, 0x9006, - 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001, - 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, - 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, - 0x11b0, 0x080c, 0x6411, 0x0118, 0x080c, 0x9f18, 0x0080, 0xb810, - 0x0006, 0xb814, 0x0006, 0xb8ac, 0x0006, 0x080c, 0x5f10, 0x000e, - 0xb8ae, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9f18, 0x00fe, - 0x0005, 0x080c, 0xabf0, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, - 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0x9f18, 0x0005, - 0x0804, 0x9f18, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c, - 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0040, - 0x0002, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bf, 0xc7bd, 0xc7bd, - 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, - 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0dc4, 0x0096, - 0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6106, 0x2071, - 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc81c, 0x080c, 0xd2a5, - 0x1150, 0x9486, 0x2000, 0x1138, 0x2009, 0x0001, 0x2011, 0x0200, - 0x080c, 0x8532, 0x0000, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x6003, + 0xd154, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020, + 0x0018, 0x0010, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa39d, + 0x080c, 0x8e38, 0x0005, 0x2600, 0x0002, 0xd201, 0xd201, 0xd201, + 0xd201, 0xd201, 0xd203, 0xd201, 0xd201, 0xd201, 0xd201, 0xd203, + 0xd201, 0xd201, 0xd201, 0xd203, 0xd203, 0xd203, 0xd203, 0xd201, + 0xd203, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c, + 0x8e38, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, + 0xd184, 0x0138, 0x080c, 0x6448, 0x9006, 0x080c, 0x6434, 0x080c, + 0x312b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, + 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x91b6, + 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc3, + 0x006b, 0x0005, 0xae95, 0xae95, 0xae95, 0xae95, 0xd29f, 0xae95, + 0xd289, 0xd24a, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95, + 0xae95, 0xae95, 0xd29f, 0xae95, 0xd289, 0xd290, 0xae95, 0xae95, + 0xae95, 0xae95, 0x00f6, 0x080c, 0x6865, 0x11d8, 0x080c, 0xc8ce, + 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006, + 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x6023, 0x0001, + 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38, + 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, + 0x11b0, 0x080c, 0x64fc, 0x0118, 0x080c, 0xa39d, 0x0080, 0xb810, + 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5fcd, 0x000e, + 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xa39d, 0x00fe, + 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005, + 0x080c, 0xb2a4, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, + 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d, 0x0005, 0x0804, + 0xa39d, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c, 0x8d2c, + 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x9182, 0x0040, 0x0002, + 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c6, 0xd2c4, 0xd2c4, 0xd2c4, + 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, + 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0x080c, 0x0dc3, 0x0096, 0x00b6, + 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, + 0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, + 0x0904, 0xd32c, 0x080c, 0xe032, 0x1170, 0x9486, 0x2000, 0x1158, + 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8703, 0x0020, 0x9026, + 0x080c, 0xdf55, 0x0c38, 0x080c, 0x100d, 0x090c, 0x0dc3, 0x6003, 0x0007, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e, 0xac8e, 0x2c00, 0xa892, 0x6008, 0xa8e6, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97e, 0x0016, 0xa87a, 0xa883, 0x0000, 0xa887, 0x0000, 0xa88b, 0x0036, - 0x080c, 0x6b1d, 0x001e, 0x080c, 0xd2a5, 0x1904, 0xc87c, 0x9486, - 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd0d7, 0x0804, 0xc87c, - 0x9486, 0x0200, 0x1120, 0x080c, 0xd077, 0x0804, 0xc87c, 0x9486, - 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xc87c, 0x2019, 0x0002, - 0x080c, 0xd08f, 0x0804, 0xc87c, 0x2069, 0x1a4f, 0x6a00, 0xd284, - 0x0904, 0xc8e2, 0x9284, 0x0300, 0x1904, 0xc8db, 0x6804, 0x9005, - 0x0904, 0xc8c3, 0x2d78, 0x6003, 0x0007, 0x080c, 0x101a, 0x0904, - 0xc888, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, - 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xc8e6, 0x9006, + 0x080c, 0x6c02, 0x001e, 0x080c, 0xe032, 0x1904, 0xd38c, 0x9486, + 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xdc90, 0x0804, 0xd38c, + 0x9486, 0x0200, 0x1120, 0x080c, 0xdc27, 0x0804, 0xd38c, 0x9486, + 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd38c, 0x2019, 0x0002, + 0x080c, 0xdc42, 0x0804, 0xd38c, 0x2069, 0x1a4f, 0x6a00, 0xd284, + 0x0904, 0xd3f6, 0x9284, 0x0300, 0x1904, 0xd3ef, 0x6804, 0x9005, + 0x0904, 0xd3d7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1026, 0x0904, + 0xd398, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, + 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd3fa, 0x9006, 0xa802, 0xa86b, 0x0116, 0xa86e, 0x6008, 0xa8e6, 0x2c00, 0xa87e, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9ba, 0xa87a, 0xb928, 0xa9be, 0xb92c, 0xa9c2, 0xb930, 0xa9c6, 0xb934, 0xa9ca, 0xa887, 0x003d, - 0x7044, 0x9084, 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x20a9, + 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005, 0xa882, 0x20a9, 0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0022, 0x2009, 0x0205, 0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b6, 0x8000, - 0x200c, 0xa9b2, 0x080c, 0x6b1d, 0x002e, 0x004e, 0x00fe, 0x00ee, + 0x200c, 0xa9b2, 0x080c, 0x6c02, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, - 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x1001, 0x1904, - 0xc831, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, - 0x86d0, 0x080c, 0x8c37, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, + 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x100d, 0x1904, + 0xd341, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, + 0x88a1, 0x080c, 0x8e38, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, - 0x6007, 0x0043, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x0828, 0x6017, - 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, - 0x8c37, 0x0804, 0xc87c, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, - 0x2011, 0x8049, 0x080c, 0x4abd, 0x6017, 0xf300, 0x0010, 0x6017, - 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, - 0x8c37, 0x0804, 0xc87c, 0x6017, 0xf500, 0x0c98, 0x6017, 0xf600, - 0x0804, 0xc89c, 0x6017, 0xf200, 0x0804, 0xc89c, 0xa86b, 0x0146, - 0xa86f, 0x0000, 0x6008, 0xa88a, 0x2c00, 0xa87e, 0x7044, 0x9084, - 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x2928, 0x6010, 0x2058, - 0xb8a0, 0xa87a, 0xb828, 0xa88e, 0xb82c, 0xa892, 0xb830, 0xa896, - 0xb834, 0xa89a, 0xa887, 0x003d, 0x2009, 0x0205, 0x2104, 0x9085, - 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214, 0x9294, - 0x0fff, 0xaaa6, 0x9282, 0x0111, 0x1a0c, 0x0dc4, 0x8210, 0x821c, - 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x002a, - 0x20a0, 0x2011, 0xc962, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff, - 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210, - 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68, - 0x2950, 0x080c, 0x101a, 0x0170, 0x2900, 0xb002, 0xa86b, 0x0147, - 0xa86f, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0, - 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, 0x1033, - 0x0cc8, 0x080c, 0x1033, 0x0804, 0xc888, 0x2548, 0x8847, 0x9885, - 0x0046, 0xa86a, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, 0xd101, - 0x0804, 0xc87c, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008, - 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, - 0x0054, 0x1a0c, 0x0dc4, 0x9082, 0x0040, 0x0a0c, 0x0dc4, 0x2008, - 0x0804, 0xc9ee, 0x0048, 0x080c, 0xbf19, 0x0500, 0x6000, 0x9086, - 0x0002, 0x11e0, 0x0804, 0xca29, 0x9186, 0x0027, 0x0190, 0x9186, - 0x0048, 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc4, 0x080c, - 0xbf19, 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc4, 0x0804, - 0xcace, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9fa3, - 0x0005, 0xc9b5, 0xc9b7, 0xc9b7, 0xc9de, 0xc9b5, 0xc9b5, 0xc9b5, - 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, - 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0x080c, 0x0dc4, 0x080c, - 0x8b2b, 0x080c, 0x8c37, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, - 0x080c, 0xb955, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd101, - 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1964, 0x2004, - 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, - 0x8b2b, 0x080c, 0x8c37, 0x080c, 0xb955, 0x0120, 0x6014, 0x2048, - 0x080c, 0x1033, 0x080c, 0x9f42, 0x009e, 0x0005, 0x0002, 0xca03, - 0xca1a, 0xca05, 0xca23, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, - 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, - 0xca03, 0xca03, 0xca03, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b, - 0x6014, 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, - 0x0043, 0x080c, 0x9f88, 0x0010, 0x6003, 0x0004, 0x080c, 0x8c37, - 0x009e, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8507, 0x080c, 0x9f18, - 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x2009, 0x0041, 0x0804, - 0xcb27, 0x9182, 0x0040, 0x0002, 0xca40, 0xca42, 0xca40, 0xca40, - 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, - 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, - 0x080c, 0x0dc4, 0x0005, 0x9182, 0x0040, 0x0002, 0xca5a, 0xca5a, - 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5c, - 0xcaae, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xcaae, 0xca5a, 0xca5a, - 0xca5a, 0xca5a, 0x080c, 0x0dc4, 0x2001, 0x0105, 0x2004, 0x9084, - 0x1800, 0x01c0, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, - 0x9105, 0x1904, 0xcaae, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x05f0, - 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, - 0x0010, 0x200a, 0x080c, 0x8be7, 0x6014, 0x0096, 0x2048, 0xa880, - 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x01b0, 0x2001, - 0x180c, 0x2004, 0xd0d4, 0x1188, 0x080c, 0x8d06, 0x2009, 0x0041, - 0x009e, 0x0804, 0xcb27, 0x080c, 0x8d06, 0x6003, 0x0007, 0x601b, - 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, - 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2aa7, 0x080c, 0x8d06, - 0x080c, 0x8507, 0x080c, 0x9f18, 0x009e, 0x0005, 0x2001, 0x180c, - 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8be7, 0x080c, 0x8d06, - 0x6014, 0x0096, 0x2048, 0x2019, 0x0004, 0x080c, 0xd101, 0x6018, - 0x9005, 0x1128, 0x2001, 0x1964, 0x2004, 0x8003, 0x601a, 0x6017, - 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, - 0x0002, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, - 0xcae5, 0xcae7, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, - 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcb0c, 0x080c, 0x0dc4, 0x6014, - 0x0096, 0x2048, 0xa834, 0xaa38, 0x920d, 0x1178, 0xa880, 0xd0fc, - 0x0120, 0x2009, 0x0041, 0x009e, 0x0490, 0x6003, 0x0007, 0x601b, - 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2009, 0x180e, 0x210c, - 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0081, - 0x080c, 0x8509, 0x009e, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, - 0xa938, 0x009e, 0x9105, 0x1118, 0x080c, 0x154a, 0x1980, 0x0005, - 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, - 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a, 0x0005, 0x9182, - 0x0040, 0x0208, 0x0012, 0x080c, 0x0dc4, 0xcb41, 0xcb48, 0xcb54, - 0xcb60, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb43, 0xcb41, 0xcb41, - 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, - 0xcb43, 0x080c, 0x0dc4, 0x6014, 0x9005, 0x190c, 0x0dc4, 0x0005, - 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, - 0x080c, 0x8c37, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, - 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005, - 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x0126, 0x2091, - 0x8000, 0x080c, 0x8735, 0x080c, 0x8d06, 0x012e, 0x0005, 0x0126, - 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, - 0x003e, 0x012e, 0x0005, 0xcb8f, 0xcb91, 0xcba3, 0xcbbd, 0xcb8f, - 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, - 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0x080c, - 0x0dc4, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c, 0x0003, - 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, - 0x080c, 0x8c37, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x0168, - 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, - 0x080c, 0x86d0, 0x080c, 0x8c37, 0x00e0, 0x901e, 0x6316, 0x631a, - 0x2019, 0x0004, 0x080c, 0xd101, 0x00a0, 0x6014, 0x2048, 0xa880, - 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, - 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c, - 0x8d06, 0x0005, 0x080c, 0x8b2b, 0x6114, 0x81ff, 0x0158, 0x0096, - 0x2148, 0x080c, 0xd242, 0x0036, 0x2019, 0x0029, 0x080c, 0xd101, - 0x003e, 0x009e, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x080c, - 0x8be7, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd242, - 0x0036, 0x2019, 0x0029, 0x080c, 0xd101, 0x003e, 0x009e, 0x080c, - 0x9f42, 0x080c, 0x8d06, 0x0005, 0x9182, 0x0085, 0x0002, 0xcc0e, - 0xcc0c, 0xcc0c, 0xcc1a, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, - 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0x080c, 0x0dc4, 0x6003, 0x000b, - 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37, - 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd1fc, 0x0118, 0x080c, - 0x9f18, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e, - 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, - 0x2c00, 0x2011, 0x014e, 0x080c, 0xa224, 0x7220, 0x080c, 0xcf6a, - 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296, - 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x86d0, - 0x080c, 0x8c37, 0x080c, 0x8d06, 0x00ee, 0x002e, 0x0005, 0x9186, - 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a, - 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027, - 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9fa3, 0x0050, 0x2001, - 0x0007, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, - 0x8c37, 0x0005, 0xcc7f, 0xcc81, 0xcc81, 0xcc7f, 0xcc7f, 0xcc7f, - 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0x080c, - 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, - 0x9182, 0x0085, 0x0a0c, 0x0dc4, 0x9182, 0x0092, 0x1a0c, 0x0dc4, - 0x9182, 0x0085, 0x0002, 0xcca0, 0xcca0, 0xcca0, 0xcca2, 0xcca0, - 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, - 0x080c, 0x0dc4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, - 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9fa3, 0x0030, 0x080c, - 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x0036, 0x2019, - 0x000b, 0x0011, 0x003e, 0x0005, 0x6010, 0x0006, 0x0049, 0x000e, - 0x6012, 0x6023, 0x0006, 0x6003, 0x0007, 0x601b, 0x0000, 0x0005, - 0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x080c, 0x9a12, - 0x008e, 0x1530, 0x0076, 0x2c38, 0x080c, 0x9abb, 0x007e, 0x1500, - 0x6000, 0x9086, 0x0000, 0x01e0, 0x6020, 0x9086, 0x0007, 0x01c0, - 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c, 0x1950, - 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0110, 0x080c, - 0xd101, 0x009e, 0x6017, 0x0000, 0x6023, 0x0007, 0x080c, 0xbf10, - 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, - 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x269f, 0x1904, 0xcd51, - 0x0016, 0x00c6, 0x080c, 0x6411, 0x1904, 0xcd4f, 0x001e, 0x00c6, - 0x080c, 0xbef8, 0x1130, 0xb8ac, 0x9005, 0x0118, 0x080c, 0x31bb, - 0x0148, 0x2b10, 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xbeff, - 0x000e, 0x6012, 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, - 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, - 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xce89, 0x007e, 0x0026, - 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, - 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3124, 0x002e, 0xbcac, 0x001e, - 0x080c, 0x5f10, 0xbe12, 0xbd16, 0xbcae, 0x9006, 0x0010, 0x00ce, - 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, - 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074, - 0x1904, 0xcdb0, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, - 0x6940, 0x9184, 0x8000, 0x0904, 0xcdad, 0x2001, 0x1959, 0x2004, - 0x9005, 0x1140, 0x6010, 0x2058, 0xb8ac, 0x9005, 0x0118, 0x9184, - 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xd2aa, - 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, - 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, - 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, - 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, - 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, - 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, - 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, - 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, - 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, - 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, - 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6420, 0x0804, 0xce18, - 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, - 0x080c, 0xad8d, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004, - 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xad8d, 0x009e, 0x1548, - 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c, - 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xd156, 0xb800, 0xc0e5, - 0xb802, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000, - 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x2001, 0x0007, - 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x001e, 0x004e, - 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, - 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, - 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, - 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x269f, - 0x11d0, 0x080c, 0x6411, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, - 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158, - 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, - 0x080c, 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, - 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, - 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x11d0, - 0x080c, 0x6411, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, - 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158, 0x2011, - 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, - 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, - 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, - 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c, - 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650, - 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128, - 0x8001, 0x9602, 0x1a04, 0xcf23, 0x0018, 0x9606, 0x0904, 0xcf23, - 0x2100, 0x9c06, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0007, 0x0904, - 0xcf1a, 0x080c, 0xd197, 0x1904, 0xcf1a, 0x080c, 0xd2c8, 0x0904, - 0xcf1a, 0x080c, 0xd187, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0001, - 0x1148, 0x080c, 0x31bb, 0x0904, 0xcf3e, 0x6004, 0x9086, 0x0000, - 0x1904, 0xcf3e, 0x9786, 0x0004, 0x0904, 0xcf3e, 0x2500, 0x9c06, - 0x0904, 0xcf1a, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6024, - 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, - 0x080c, 0x1950, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56, - 0x1130, 0x080c, 0xa717, 0x009e, 0x080c, 0x9f42, 0x0418, 0x6014, - 0x2048, 0x080c, 0xb955, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b, - 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, - 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xd242, 0x0016, - 0x080c, 0xbc3f, 0x080c, 0x6b11, 0x001e, 0x080c, 0xbb39, 0x009e, - 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, - 0x1210, 0x0804, 0xce9d, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, - 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, - 0x9386, 0x0005, 0x0128, 0x080c, 0xd242, 0x080c, 0xd101, 0x08f8, - 0x009e, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0, - 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, - 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950, - 0x080c, 0xbb45, 0x0130, 0x080c, 0xbb56, 0x1920, 0x080c, 0xa717, - 0x0038, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, - 0x080c, 0x9f42, 0x0804, 0xcf1a, 0xa868, 0x9084, 0x00ff, 0x9086, - 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, - 0x080c, 0xd128, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, - 0x00ee, 0x00ce, 0x0005, 0xcf89, 0xcf89, 0xcf89, 0xcf89, 0xcf89, - 0xcf89, 0xcf8b, 0xcf89, 0xcf89, 0xcf89, 0xcfb4, 0x9f42, 0x9f42, - 0xcf89, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, - 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd156, - 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xccc8, 0x003e, 0x9085, - 0x0001, 0x0005, 0x0096, 0x080c, 0xb955, 0x0140, 0x6014, 0x904d, - 0x080c, 0xb5c5, 0x687f, 0x0005, 0x080c, 0x6b1d, 0x009e, 0x080c, - 0x9f42, 0x9085, 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, - 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xcfcf, - 0xcfcf, 0xcfe6, 0xcfd6, 0xcff5, 0xcfcf, 0xcfcf, 0xcfd1, 0xcfcf, - 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0x080c, - 0x0dc4, 0x080c, 0x9f42, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, - 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, - 0x9964, 0x0010, 0x080c, 0x9b40, 0x00ee, 0x003e, 0x0096, 0x00d6, - 0x6014, 0x2048, 0xa87f, 0x0005, 0x080c, 0x6b1d, 0x080c, 0x9f42, - 0x00de, 0x009e, 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, - 0x1950, 0x0c60, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156, 0x0016, - 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, - 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, - 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, - 0x2091, 0x8000, 0x2740, 0x2061, 0x1cc8, 0x2079, 0x0001, 0x8fff, - 0x0904, 0xd06a, 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602, - 0x1a04, 0xd06a, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, - 0x080c, 0xd187, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, - 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1150, 0xd58c, - 0x1118, 0x6010, 0x9b06, 0x11e8, 0xd584, 0x0118, 0x6024, 0x9106, - 0x11c0, 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c, - 0x1950, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0120, - 0x0046, 0x080c, 0xd101, 0x004e, 0x009e, 0x080c, 0x9f42, 0x88ff, - 0x1198, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, - 0x0804, 0xd01f, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, + 0x6007, 0x0043, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0828, 0x6868, + 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, + 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x2001, + 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d, + 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, + 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x6017, + 0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd3ac, 0x6017, 0xf200, + 0x0804, 0xd3ac, 0xa86b, 0x0146, 0xa86f, 0x0000, 0x6008, 0xa88a, + 0x2c00, 0xa87e, 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005, + 0xa882, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa87a, 0xb828, 0xa88e, + 0xb82c, 0xa892, 0xb830, 0xa896, 0xb834, 0xa89a, 0xa887, 0x003d, + 0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, + 0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa6, 0x9282, 0x0111, + 0x1a0c, 0x0dc3, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, + 0x20e8, 0xa85c, 0x9080, 0x002a, 0x20a0, 0x2011, 0xd476, 0x2041, + 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, + 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, + 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1026, 0x0170, + 0x2900, 0xb002, 0xa86b, 0x0147, 0xa86f, 0x0000, 0xa860, 0x20e8, + 0xa85c, 0x9080, 0x001c, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, + 0x902d, 0x0118, 0x080c, 0x103f, 0x0cc8, 0x080c, 0x103f, 0x0804, + 0xd398, 0x2548, 0x8847, 0x9885, 0x0046, 0xa86a, 0x2009, 0x0205, + 0x200b, 0x0000, 0x080c, 0xdcc3, 0x0804, 0xd38c, 0x8010, 0x0004, + 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, + 0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x9082, + 0x0040, 0x0a0c, 0x0dc3, 0x2008, 0x0804, 0xd505, 0x9186, 0x0051, + 0x0108, 0x0048, 0x080c, 0xc8f4, 0x0500, 0x6000, 0x9086, 0x0002, + 0x11e0, 0x0804, 0xd54e, 0x9186, 0x0027, 0x0190, 0x9186, 0x0048, + 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc3, 0x080c, 0xc8f4, + 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc3, 0x0804, 0xd631, + 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xa434, 0x0005, + 0xd4cc, 0xd4ce, 0xd4ce, 0xd4f5, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, + 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, + 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0x080c, 0x0dc3, 0x080c, 0x8d2c, + 0x080c, 0x8e38, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, + 0xc1cd, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, + 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x6017, + 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1963, 0x2004, 0x601a, + 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8d2c, + 0x080c, 0x8e38, 0x080c, 0xc1cd, 0x0120, 0x6014, 0x2048, 0x080c, + 0x103f, 0x080c, 0xa3cf, 0x009e, 0x0005, 0x0002, 0xd51a, 0xd531, + 0xd51c, 0xd548, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, + 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, + 0xd51a, 0xd51a, 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014, + 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, + 0x080c, 0xa419, 0x0010, 0x6003, 0x0004, 0x080c, 0x8e38, 0x009e, + 0x0005, 0x080c, 0x8d2c, 0x080c, 0xc1cd, 0x0138, 0x6114, 0x0096, + 0x2148, 0xa980, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x86d8, 0x080c, + 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf15, 0x0db0, 0x0cc8, + 0x080c, 0x8d2c, 0x2009, 0x0041, 0x0804, 0xd6b9, 0x9182, 0x0040, + 0x0002, 0xd565, 0xd567, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, + 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, + 0xd565, 0xd565, 0xd568, 0xd565, 0xd565, 0x080c, 0x0dc3, 0x0005, + 0x00d6, 0x080c, 0x86d8, 0x00de, 0x080c, 0xdf7c, 0x080c, 0xa39d, + 0x0005, 0x9182, 0x0040, 0x0002, 0xd588, 0xd588, 0xd588, 0xd588, + 0xd588, 0xd588, 0xd588, 0xd588, 0xd588, 0xd58a, 0xd5f9, 0xd588, + 0xd588, 0xd588, 0xd588, 0xd5f9, 0xd588, 0xd588, 0xd588, 0xd588, + 0x080c, 0x0dc3, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, + 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, + 0xd5f9, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xd5f9, 0xc0d4, + 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, + 0x200a, 0x2001, 0x187e, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, + 0x080c, 0x8de8, 0x6014, 0x0096, 0x2048, 0xa880, 0xd0fc, 0x0188, + 0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, + 0xd0d4, 0x11e0, 0x080c, 0x8f0e, 0x2009, 0x0041, 0x009e, 0x0804, + 0xd6b9, 0x080c, 0x8f0e, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, + 0x86d8, 0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, + 0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, + 0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2b10, 0x080c, + 0x8f0e, 0x6014, 0x2048, 0xa980, 0xd1ec, 0x1130, 0x080c, 0x86d8, + 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c, 0xdf15, 0x0db8, 0x009e, + 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, + 0x8de8, 0x080c, 0x8f0e, 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, + 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa880, 0x9084, 0x0003, + 0x9086, 0x0002, 0x0140, 0xa8b0, 0x6330, 0x931a, 0x6332, 0xa8b4, + 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004, + 0x080c, 0xdcc3, 0x6018, 0x9005, 0x1128, 0x2001, 0x1963, 0x2004, + 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, + 0x0005, 0x9182, 0x0040, 0x0002, 0xd648, 0xd648, 0xd648, 0xd648, + 0xd648, 0xd648, 0xd648, 0xd648, 0xd64a, 0xd648, 0xd648, 0xd648, + 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd695, + 0x080c, 0x0dc3, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, + 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, + 0xa880, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xd6b9, + 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x86d8, 0x009e, 0x0005, + 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacb0, 0x9422, 0xa9b4, + 0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c, 0x9109, 0x612e, + 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, + 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, + 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x86da, 0x009e, + 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, + 0x080c, 0x155f, 0x1904, 0xd64a, 0x0005, 0x6014, 0x0096, 0x2048, + 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x155f, 0x1904, + 0xd64a, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, + 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a, + 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186, 0x0013, 0x0120, + 0x9186, 0x0014, 0x190c, 0x0dc3, 0x6024, 0xd0dc, 0x090c, 0x0dc3, + 0x0005, 0xd6dd, 0xd6e9, 0xd6f5, 0xd701, 0xd6dd, 0xd6dd, 0xd6dd, + 0xd6dd, 0xd6e4, 0xd6df, 0xd6df, 0xd6dd, 0xd6dd, 0xd6dd, 0xd6dd, + 0xd6df, 0xd6dd, 0xd6df, 0xd6dd, 0xd6e4, 0x080c, 0x0dc3, 0x6024, + 0xd0dc, 0x090c, 0x0dc3, 0x0005, 0x6014, 0x9005, 0x190c, 0x0dc3, + 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091, + 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, + 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, + 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x0126, + 0x2091, 0x8000, 0x080c, 0x8906, 0x080c, 0x8f0e, 0x012e, 0x0005, + 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, + 0x009e, 0x003e, 0x012e, 0x0005, 0xd730, 0xd732, 0xd744, 0xd75e, + 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, + 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, + 0x080c, 0x0dc3, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c, + 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, + 0x88a1, 0x080c, 0x8e38, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc, + 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, + 0x6106, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00e0, 0x901e, 0x6316, + 0x631a, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x00a0, 0x6014, 0x2048, + 0xa880, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, + 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x080c, 0x8906, + 0x080c, 0x8f0e, 0x0005, 0x080c, 0x8d2c, 0x6114, 0x81ff, 0x0158, + 0x0096, 0x2148, 0x080c, 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c, + 0xdcc3, 0x003e, 0x009e, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, + 0x080c, 0x8de8, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, + 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c, 0xdcc3, 0x003e, 0x009e, + 0x080c, 0xa3cf, 0x080c, 0x8f0e, 0x0005, 0x9182, 0x0085, 0x0002, + 0xd7af, 0xd7ad, 0xd7ad, 0xd7bb, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, + 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0x080c, 0x0dc3, 0x6003, + 0x000b, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, + 0x8e38, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xdf0c, 0x0118, + 0x080c, 0xa39d, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, + 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, + 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa6b5, 0x7220, 0x080c, + 0xdb18, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, + 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, + 0x88a1, 0x080c, 0x8e38, 0x080c, 0x8f0e, 0x00ee, 0x002e, 0x0005, + 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc3, + 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00a2, 0x9186, + 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xa434, 0x0050, + 0x2001, 0x0007, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa3cf, + 0x080c, 0x8e38, 0x0005, 0xd820, 0xd822, 0xd822, 0xd820, 0xd820, + 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, + 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, + 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dc3, 0x9182, 0x0092, 0x1a0c, + 0x0dc3, 0x9182, 0x0085, 0x0002, 0xd841, 0xd841, 0xd841, 0xd843, + 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, + 0xd841, 0x080c, 0x0dc3, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, + 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030, + 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0036, + 0x080c, 0xdf7c, 0x6043, 0x0000, 0x2019, 0x000b, 0x0011, 0x003e, + 0x0005, 0x6010, 0x0006, 0x0059, 0x000e, 0x6012, 0x6023, 0x0006, + 0x6003, 0x0007, 0x601b, 0x0000, 0x6043, 0x0000, 0x0005, 0x0126, + 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, + 0x9ce3, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9d8e, + 0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, + 0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c, + 0x080c, 0xc8e6, 0x080c, 0x1998, 0x6023, 0x0007, 0x6014, 0x2048, + 0x080c, 0xc1cd, 0x0110, 0x080c, 0xdcc3, 0x009e, 0x6017, 0x0000, + 0x080c, 0xdf7c, 0x6023, 0x0007, 0x080c, 0xc8e6, 0x003e, 0x012e, + 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, + 0x7938, 0x783c, 0x080c, 0x2708, 0x1904, 0xd8ff, 0x0016, 0x00c6, + 0x080c, 0x64fc, 0x1904, 0xd8fd, 0x001e, 0x00c6, 0x080c, 0xc8ce, + 0x1130, 0xb8b0, 0x9005, 0x0118, 0x080c, 0x3257, 0x0148, 0x2b10, + 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xc8d5, 0x000e, 0x6012, + 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x9e54, + 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x007e, 0x001e, + 0x0076, 0x903e, 0x080c, 0xda37, 0x007e, 0x0026, 0xba04, 0x9294, + 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, + 0xbaa0, 0x080c, 0x31c0, 0x002e, 0xbcb0, 0x001e, 0x080c, 0x5fcd, + 0xbe12, 0xbd16, 0xbcb2, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, + 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, + 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xd95e, + 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, + 0x8000, 0x0904, 0xd95b, 0x2001, 0x1958, 0x2004, 0x9005, 0x1140, + 0x6010, 0x2058, 0xb8b0, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, + 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe037, 0x0118, 0x6978, + 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, + 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, + 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298, + 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, + 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040, + 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, + 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, + 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258, + 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004, + 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, + 0x0004, 0x0120, 0x080c, 0x650b, 0x0804, 0xd9c6, 0x2011, 0x0276, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xb448, + 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x0006, 0x080c, 0xb448, 0x009e, 0x1548, 0x0046, 0x0016, + 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0138, + 0x2009, 0x0029, 0x080c, 0xdd18, 0xb800, 0xc0e5, 0xb802, 0x2019, + 0x0029, 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, + 0x2c08, 0x080c, 0xda37, 0x007e, 0x2001, 0x0007, 0x080c, 0x6474, + 0x2001, 0x0007, 0x080c, 0x6448, 0x001e, 0x004e, 0x9006, 0x015e, + 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, + 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, + 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, + 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2708, 0x11d0, 0x080c, + 0x64fc, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, + 0x2019, 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x0274, + 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448, + 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, + 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, + 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x11d0, 0x080c, 0x64fc, + 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, + 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, + 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448, 0x009e, + 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, + 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, + 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, + 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff, + 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128, 0x8001, 0x9602, + 0x1a04, 0xdad1, 0x0018, 0x9606, 0x0904, 0xdad1, 0x2100, 0x9c06, + 0x0904, 0xdac8, 0x6720, 0x9786, 0x0007, 0x0904, 0xdac8, 0x080c, + 0xdd59, 0x1904, 0xdac8, 0x080c, 0xe055, 0x0904, 0xdac8, 0x080c, + 0xdd49, 0x0904, 0xdac8, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, + 0x3257, 0x0904, 0xdaec, 0x6004, 0x9086, 0x0000, 0x1904, 0xdaec, + 0x9786, 0x0004, 0x0904, 0xdaec, 0x2500, 0x9c06, 0x0904, 0xdac8, + 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, + 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1998, + 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xc3d1, 0x1130, 0x080c, + 0xadb3, 0x009e, 0x080c, 0xa3cf, 0x0418, 0x6014, 0x2048, 0x080c, + 0xc1cd, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b, 0x0103, 0xa880, + 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, + 0xab7e, 0xa87b, 0x0000, 0x080c, 0xdfcf, 0x0016, 0x080c, 0xc4ba, + 0x080c, 0x6bf5, 0x001e, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa3cf, + 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, + 0xda4b, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, + 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, + 0x0128, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x08f8, 0x009e, 0x0c00, + 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0, 0x9180, 0x0001, + 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086, + 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xc3c0, + 0x0130, 0x080c, 0xc3d1, 0x1920, 0x080c, 0xadb3, 0x0038, 0x080c, + 0x312b, 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf, + 0x0804, 0xdac8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, + 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xdcea, + 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, + 0x0005, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb39, + 0xdb37, 0xdb37, 0xdb37, 0xdb62, 0xa3cf, 0xa3cf, 0xdb37, 0x9006, + 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, + 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xdd18, 0x001e, 0x004e, + 0x2019, 0x0002, 0x080c, 0xd86f, 0x003e, 0x9085, 0x0001, 0x0005, + 0x0096, 0x080c, 0xc1cd, 0x0140, 0x6014, 0x904d, 0x080c, 0xbde5, + 0x687f, 0x0005, 0x080c, 0x6c02, 0x009e, 0x080c, 0xa3cf, 0x9085, + 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, 0x6000, 0x908a, + 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xdb7d, 0xdb7d, 0xdb94, + 0xdb84, 0xdba3, 0xdb7d, 0xdb7d, 0xdb7f, 0xdb7d, 0xdb7d, 0xdb7d, + 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0x080c, 0x0dc3, 0x080c, + 0xa3cf, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, 0x2071, 0x19c4, + 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, 0x9c35, 0x0010, + 0x080c, 0x9e13, 0x00ee, 0x003e, 0x0096, 0x00d6, 0x6014, 0x2048, + 0xa87f, 0x0005, 0x080c, 0x6c02, 0x080c, 0xa3cf, 0x00de, 0x009e, + 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, 0x1998, 0x0c60, + 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036, + 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xb434, + 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, + 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, + 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xdc1a, + 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xdc1a, + 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0, 0x2078, 0x080c, 0xdd49, + 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720, 0x9786, 0x0006, 0x1548, + 0x9786, 0x0007, 0x0530, 0x88ff, 0x1150, 0xd58c, 0x1118, 0x6010, + 0x9b06, 0x11f8, 0xd584, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, + 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c, 0x080c, 0xc8e6, 0x080c, + 0x1998, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0120, + 0x0046, 0x080c, 0xdcc3, 0x004e, 0x009e, 0x080c, 0xa3cf, 0x88ff, + 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, + 0x0804, 0xdbcd, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, - 0x0002, 0x6210, 0x2258, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, - 0x9abb, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, - 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, - 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1168, 0x0056, - 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x080c, 0x9a12, 0x008e, - 0x903e, 0x080c, 0x9abb, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, - 0xd09a, 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xd010, 0x003e, - 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, - 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, - 0x2019, 0x0048, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb, - 0x2c20, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, - 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, - 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1148, 0x0086, 0x9046, - 0x2828, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb, 0x003e, - 0x001e, 0x8108, 0x1f04, 0xd0e1, 0x0036, 0x2029, 0x0002, 0x080c, - 0xd010, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, - 0x0005, 0x0016, 0x00f6, 0x080c, 0xb953, 0x0198, 0xa868, 0x9084, - 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, - 0x0000, 0xab86, 0x080c, 0x6b1d, 0x2f48, 0x0cb0, 0xab86, 0x080c, - 0x6b1d, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, - 0x0000, 0x080c, 0x6b1d, 0x2f48, 0x0cb8, 0x080c, 0x6b1d, 0x0c88, - 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cc8, 0x9005, 0x1138, 0x2071, - 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, - 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130, - 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x000c, - 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, - 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, - 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xaae6, 0xa86b, 0x010d, - 0xa892, 0x0026, 0x2010, 0x080c, 0xb943, 0x2001, 0x0000, 0x0120, - 0x2200, 0x9080, 0x0009, 0x2004, 0x002e, 0xa87e, 0x9186, 0x0020, - 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883, 0x0000, 0x2001, - 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e, 0xa88e, 0x0126, - 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x009e, 0x0005, 0x6700, - 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a, - 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, - 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, - 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x9186, 0x0013, 0x1128, - 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, - 0x080c, 0x8b2b, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, - 0x080c, 0xd101, 0x009e, 0x003e, 0x080c, 0x8c37, 0x0005, 0x9186, - 0x0014, 0x0d70, 0x080c, 0x9fa3, 0x0005, 0xd1d4, 0xd1d2, 0xd1d2, - 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d4, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, - 0xd1d2, 0xd1d2, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x6003, 0x000c, - 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, - 0x0208, 0x001a, 0x080c, 0x9fa3, 0x0005, 0xd1f2, 0xd1f2, 0xd1f2, - 0xd1f2, 0xd1f4, 0xd1f9, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, - 0xd1f2, 0xd1f2, 0x080c, 0x0dc4, 0x00d6, 0x080c, 0x9f18, 0x00de, - 0x0005, 0x080c, 0x9f18, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, - 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x0026, 0x0036, 0x0156, - 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, - 0x96b4, 0x00ff, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, - 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, - 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1168, - 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, - 0x0006, 0x080c, 0xad8d, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, - 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x080c, 0x2e5f, - 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, - 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886, - 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, - 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, - 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650, - 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, - 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, - 0x080c, 0xd187, 0x01b8, 0x080c, 0xd197, 0x11a0, 0x6000, 0x9086, - 0x0004, 0x1120, 0x0016, 0x080c, 0x1950, 0x001e, 0x080c, 0xbb45, - 0x1110, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, - 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, - 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, - 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, - 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, - 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbef8, 0x0168, 0x2019, - 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, - 0x2021, 0x0004, 0x080c, 0x4c74, 0x004e, 0x003e, 0x000e, 0x0005, - 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9b81, 0x080c, 0x9f42, - 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cc8, - 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, - 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6010, 0x2058, - 0xb8a0, 0x9206, 0x1120, 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, - 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, - 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, - 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004, - 0xd0a4, 0x0138, 0x2001, 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085, - 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, - 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000, - 0x7056, 0xd5b4, 0x0118, 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178, - 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, - 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0469, 0x001e, - 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, - 0x8000, 0x2071, 0x1842, 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005, - 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x706c, - 0x8000, 0x706e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, - 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7070, 0x8000, 0x7072, - 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, - 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840, - 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee, - 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, - 0x7064, 0x8000, 0x7066, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, - 0x000b, 0x04b0, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, - 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, - 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x799e, 0x000b, 0x50eb, - 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, - 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, - 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x162c, 0x000b, 0x808c, - 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, - 0x0008, 0x0002, 0x0000, 0x0821, 0x0003, 0x4022, 0x0000, 0x0022, - 0x000b, 0x4122, 0x0008, 0x4447, 0x0002, 0x0e54, 0x000b, 0x0bfe, - 0x0008, 0x11a0, 0x0001, 0x1232, 0x0003, 0x0ca0, 0x0001, 0x1232, - 0x0003, 0x9180, 0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, - 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4430, - 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, - 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4438, - 0x0003, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0e2f, 0x000b, 0xc2c0, - 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0e2f, 0x000b, 0x9180, - 0x0001, 0x0005, 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, - 0x0008, 0x8066, 0x0000, 0x0019, 0x0000, 0x4447, 0x000b, 0x0240, - 0x0002, 0x0a2c, 0x0003, 0x00fe, 0x0000, 0x322f, 0x000b, 0x112a, - 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, - 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, - 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4458, - 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e22, 0x0003, 0x00fe, - 0x0000, 0x43e0, 0x0001, 0x0e22, 0x0003, 0x1734, 0x0000, 0x1530, - 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x808a, 0x0008, 0x0003, - 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5868, - 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x446b, 0x0003, 0x586c, - 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x0872, 0x0003, 0x0d00, - 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, - 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8, - 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x3482, 0x0003, 0x1a60, - 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, - 0x0008, 0x4481, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cbc, - 0x0003, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, - 0x0000, 0x089a, 0x0003, 0x14c4, 0x0003, 0x01fe, 0x0008, 0x0580, - 0x0009, 0x7f06, 0x0000, 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, - 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, - 0x0009, 0x109a, 0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, - 0x0008, 0x08bc, 0x000b, 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cab, - 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6, - 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0409, 0x0000, 0x44a4, - 0x0003, 0x80fe, 0x0008, 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066, - 0x0000, 0x040a, 0x0000, 0x44aa, 0x000b, 0x00fe, 0x0000, 0x34b2, - 0x0003, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08ad, - 0x000b, 0x00b6, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, - 0x000a, 0x08b2, 0x0003, 0x3946, 0x000a, 0x0cc3, 0x000b, 0x0000, - 0x0007, 0x3943, 0x000a, 0x08c3, 0x0003, 0x00b6, 0x0003, 0x00fe, - 0x0000, 0x34c1, 0x000b, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c3, - 0x000b, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, - 0x0009, 0xfc00, 0x0008, 0x08bc, 0x000b, 0x009a, 0x000b, 0x1c60, - 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc, - 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, - 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, - 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, - 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446, - 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x58df, 0x000b, 0x3efe, - 0x0008, 0x7f4f, 0x0002, 0x08e6, 0x000b, 0x8000, 0x0000, 0x0001, - 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, - 0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, - 0x0003, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x58ef, 0x000b, 0x8054, - 0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x093d, 0x0003, 0x3a45, - 0x000a, 0x092c, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, - 0x000a, 0x08fc, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, - 0x000a, 0x7f3c, 0x0000, 0x0927, 0x000b, 0x1d00, 0x0002, 0x7f3a, - 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, - 0x0008, 0x4505, 0x0003, 0x00fe, 0x0000, 0x3524, 0x000b, 0x1c60, - 0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, - 0x0008, 0x450d, 0x000b, 0x00fe, 0x0000, 0x320c, 0x0003, 0x0038, - 0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x001a, 0x0000, 0x8066, - 0x0000, 0x0009, 0x0008, 0x4516, 0x000b, 0x80c0, 0x0009, 0x00ff, - 0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, - 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4520, - 0x000b, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0101, 0x000b, 0x0036, - 0x0008, 0x00c8, 0x000c, 0x013d, 0x000b, 0x8074, 0x0000, 0x2000, - 0x0000, 0x8072, 0x0000, 0x2000, 0x0000, 0x013d, 0x000b, 0x3a44, - 0x0002, 0x0a35, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, - 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3609, - 0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, - 0x0008, 0x00d0, 0x0009, 0x0d4f, 0x000b, 0x8074, 0x0000, 0x4040, - 0x0008, 0x593d, 0x0003, 0x50eb, 0x000b, 0x3a46, 0x000a, 0x0d4f, - 0x000b, 0x3a47, 0x0002, 0x094a, 0x0003, 0x8054, 0x0008, 0x0004, - 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, - 0x0008, 0x0192, 0x000b, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, - 0x0003, 0x1246, 0x000a, 0x0e06, 0x0003, 0x1a60, 0x0000, 0x8062, - 0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4554, - 0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, - 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, - 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, - 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, - 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, - 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, - 0x0000, 0x0052, 0x0000, 0x456e, 0x000b, 0x92c0, 0x0009, 0x0780, - 0x0008, 0x0e1f, 0x000b, 0x124b, 0x0002, 0x0977, 0x000b, 0x2e4d, - 0x0002, 0x2e4d, 0x0002, 0x0a09, 0x000b, 0x3a46, 0x000a, 0x0d84, - 0x0003, 0x5979, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, - 0x000a, 0x098e, 0x000b, 0x8010, 0x0008, 0x000d, 0x0000, 0x01fa, - 0x000c, 0x1810, 0x0000, 0x01fa, 0x000c, 0x018e, 0x0003, 0x194d, - 0x000a, 0x0988, 0x000b, 0x1243, 0x000a, 0x0a13, 0x0003, 0x5988, - 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x01ef, 0x0004, 0x1810, - 0x0000, 0x01fa, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, - 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0d98, - 0x000b, 0x15fe, 0x0008, 0x3451, 0x000b, 0x000a, 0x000b, 0x8074, - 0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa, - 0x000c, 0x000a, 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0dae, - 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x15fe, - 0x0008, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x01ea, 0x0004, 0x8076, - 0x0008, 0x0040, 0x0000, 0x01e7, 0x0003, 0x8076, 0x0008, 0x0041, - 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dcc, - 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0dab, 0x000b, 0x8076, - 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, - 0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, - 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, - 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45c3, 0x0003, 0x01ef, - 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, - 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x0192, 0x000b, 0xbbe0, - 0x0009, 0x0038, 0x0000, 0x0dde, 0x0003, 0x18fe, 0x0000, 0x3ce0, - 0x0009, 0x09db, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0da7, - 0x000b, 0x01ea, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, - 0x0000, 0x8000, 0x0000, 0x022c, 0x000b, 0x8076, 0x0008, 0x0042, - 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0de7, - 0x0003, 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, - 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, - 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, - 0x0001, 0x0007, 0x0000, 0x01f3, 0x0003, 0x1930, 0x000a, 0x7f00, - 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, - 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x45f8, - 0x000b, 0x4000, 0x000f, 0x21fa, 0x000b, 0x0870, 0x0008, 0x4000, - 0x000f, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a03, 0x000b, 0x8074, - 0x0000, 0x0706, 0x0000, 0x0205, 0x0003, 0x8074, 0x0000, 0x0703, - 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x023a, - 0x0003, 0x8010, 0x0008, 0x0022, 0x0008, 0x023a, 0x0003, 0x01ef, - 0x0004, 0x8010, 0x0008, 0x0007, 0x0000, 0x01fa, 0x000c, 0x1810, - 0x0000, 0x01fa, 0x000c, 0x0246, 0x000b, 0x01ef, 0x0004, 0x8010, - 0x0008, 0x001b, 0x0008, 0x01fa, 0x000c, 0x1810, 0x0000, 0x01fa, - 0x000c, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, - 0x0008, 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, - 0x0008, 0x023a, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, - 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44, - 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x023a, 0x0003, 0x8010, - 0x0008, 0x0003, 0x0008, 0x023e, 0x000b, 0x8010, 0x0008, 0x000b, - 0x0000, 0x023e, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x023e, - 0x000b, 0x3a47, 0x0002, 0x0d3d, 0x000b, 0x8010, 0x0008, 0x0006, - 0x0008, 0x023e, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, - 0x0000, 0x3000, 0x0008, 0x01fa, 0x000c, 0x01fd, 0x0004, 0x3a40, - 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa, - 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, - 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, - 0x0002, 0x0a51, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, - 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, - 0x0002, 0x0c0a, 0x000b, 0x022f, 0x000b, 0xf8aa, 0xf3d5, 0x0001, - 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, - 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x5d31 + 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, + 0x008e, 0x903e, 0x080c, 0x9d8e, 0x080c, 0xdbbe, 0x005e, 0x007e, + 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, + 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, + 0x64fc, 0x1180, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, + 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c, + 0x9d8e, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc4d, 0x0036, + 0x2508, 0x2029, 0x0003, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce, + 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056, + 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, + 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c, + 0x9d8e, 0x2c20, 0x080c, 0xdbbe, 0x005e, 0x007e, 0x00be, 0x0005, + 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, + 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x64fc, 0x1190, 0x0086, + 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xdf55, 0x004e, + 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c, + 0x9d8e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc9a, 0x0036, 0x2029, + 0x0002, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, + 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc1cb, 0x0198, + 0xa868, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, + 0x0138, 0xa803, 0x0000, 0xab86, 0x080c, 0x6c02, 0x2f48, 0x0cb0, + 0xab86, 0x080c, 0x6c02, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, + 0x0130, 0xa803, 0x0000, 0x080c, 0x6c02, 0x2f48, 0x0cb8, 0x080c, + 0x6c02, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, + 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, + 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, + 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, + 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, + 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, + 0x0096, 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xaae6, + 0xa86b, 0x010d, 0xa892, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x2001, + 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87e, + 0x9186, 0x0020, 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883, + 0x0000, 0x2001, 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e, + 0xa88e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e, + 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, + 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, + 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, + 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, + 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, + 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005, + 0x2001, 0x1963, 0x2004, 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38, + 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, + 0xd0cc, 0x0118, 0x080c, 0xc4fe, 0x0030, 0x080c, 0xdf7c, 0x080c, + 0x86d8, 0x080c, 0xa39d, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, + 0x000f, 0x0002, 0xdda8, 0xdda8, 0xdda8, 0xddaa, 0xdda8, 0xddaa, + 0xddaa, 0xdda8, 0xddaa, 0xdda8, 0xdda8, 0xdda8, 0xdda8, 0xdda8, + 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, + 0x9084, 0x000f, 0x0002, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, + 0xddc1, 0xddce, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, + 0xddc1, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, + 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x00c6, + 0x2260, 0x080c, 0xdf7c, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, + 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, + 0x1904, 0xde27, 0x6814, 0x9005, 0x0138, 0x2048, 0xa880, 0xd0fc, + 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, + 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186, + 0x0002, 0x1904, 0xde96, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, + 0x0007, 0x190c, 0x0dc3, 0x0804, 0xde96, 0x2048, 0x080c, 0xc1cd, + 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, + 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa880, 0xc0dc, + 0xc0f4, 0xa882, 0xa884, 0xc0fc, 0xa886, 0x2009, 0x0043, 0x080c, + 0xd6b9, 0x0804, 0xde96, 0x2009, 0x0041, 0x0804, 0xde90, 0x9186, + 0x0005, 0x15a0, 0x6814, 0x2048, 0xa880, 0xd0bc, 0x1120, 0x00de, + 0x009e, 0x0804, 0xddc1, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dc3, + 0x0804, 0xdde2, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x88a1, + 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, + 0x9186, 0x0004, 0x1904, 0xde96, 0x6814, 0x2048, 0xa980, 0xc1f4, + 0xc1dc, 0xa982, 0xa984, 0xc1fc, 0xc1bc, 0xa986, 0x00f6, 0x2c78, + 0x080c, 0x16c1, 0x00fe, 0x2009, 0x0042, 0x0490, 0x0036, 0x080c, + 0x100d, 0x090c, 0x0dc3, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e, + 0xa88e, 0x2d18, 0xab92, 0xa88b, 0x0045, 0x2c00, 0xa896, 0x6038, + 0xa8a6, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, + 0xb8a0, 0x00be, 0x6354, 0xab7e, 0xa87a, 0x9006, 0xa882, 0xa886, + 0xad9e, 0xae9a, 0xa8a3, 0x0001, 0x080c, 0x6c02, 0x2019, 0x0045, + 0x6008, 0x2068, 0x080c, 0xd861, 0x2d00, 0x600a, 0x003e, 0x0038, + 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xd6b9, 0x00ce, 0x00de, + 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, + 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x8d2c, 0x0036, + 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x009e, + 0x003e, 0x080c, 0x8e38, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, + 0xa434, 0x0005, 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, + 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0x080c, + 0x0dc3, 0x080c, 0x8d2c, 0x6003, 0x000c, 0x080c, 0x8e38, 0x0005, + 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, + 0xa434, 0x0005, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee9, 0xdf09, + 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0x080c, + 0x0dc3, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01b0, 0x6003, 0x0001, + 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, + 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, + 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x080c, 0xa39d, 0x00de, + 0x0005, 0x080c, 0xa39d, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, + 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x187e, 0x210c, + 0xd1ec, 0x05d0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, + 0x0150, 0x2001, 0x1964, 0x2004, 0x6042, 0x2009, 0x187e, 0x210c, + 0xd1f4, 0x1540, 0x00a0, 0x2009, 0x187e, 0x210c, 0xd1f4, 0x0128, + 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00f8, 0x2001, 0x1964, 0x200c, + 0x2001, 0x1962, 0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010, + 0x00b6, 0x2058, 0xb8ac, 0x9005, 0x1130, 0x2c00, 0xb8ae, 0x0038, + 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x00be, + 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, + 0x6154, 0xb8ac, 0x9005, 0x01e0, 0x2060, 0x9006, 0x2070, 0xb8ae, + 0x8cff, 0x01b0, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1148, 0x600c, + 0x8eff, 0x0108, 0x2072, 0x080c, 0x86d8, 0x080c, 0xa39d, 0x0030, + 0x8eff, 0x1110, 0x2c00, 0xb8ae, 0x9cf0, 0x0003, 0x2e64, 0x0c40, + 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, + 0xb8ac, 0x9c06, 0x1118, 0x600c, 0xb8ae, 0x0048, 0xb8ac, 0x906d, + 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, + 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204, + 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636, + 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0, + 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, + 0x000a, 0x080c, 0xb448, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, + 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xb448, + 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, + 0x1800, 0x080c, 0x5f46, 0x080c, 0x2ed6, 0x00ee, 0x0005, 0x00e6, + 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, + 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886, 0x0005, 0x00e6, 0x00d6, + 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, + 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424, + 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, 0x0578, + 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, + 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xdd49, 0x01b8, + 0x080c, 0xdd59, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, + 0x080c, 0x1998, 0x001e, 0x080c, 0xc3c0, 0x1110, 0x080c, 0x312b, + 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf, 0x9ce0, + 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, + 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, + 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, + 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036, + 0x0046, 0x080c, 0xc8ce, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, + 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c, + 0x4d24, 0x004e, 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001, + 0x1128, 0x080c, 0x9e54, 0x080c, 0xa3cf, 0x9006, 0x0005, 0x00e6, + 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7450, + 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, + 0x9086, 0x0000, 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120, + 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819, + 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, + 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, + 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0138, 0x2001, + 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006, + 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, + 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000, 0x7056, 0xd5b4, 0x0118, + 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, + 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, + 0x0118, 0x2071, 0x184a, 0x0469, 0x001e, 0x00ee, 0x000e, 0x012e, + 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1842, + 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, + 0x2091, 0x8000, 0x2071, 0x1840, 0x706c, 0x8000, 0x706e, 0x00ee, + 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, + 0x2071, 0x1840, 0x7070, 0x8000, 0x7072, 0x00ee, 0x000e, 0x012e, + 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, + 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, + 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, + 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7064, 0x8000, 0x7066, + 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, 0x000b, 0x04ca, 0x0000, + 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, 0x0000, 0x8066, 0x0000, + 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, + 0x580d, 0x000b, 0x79a6, 0x0003, 0x50f3, 0x000b, 0x4c0a, 0x0003, + 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b, 0x15fe, 0x0008, + 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffa0, 0x0001, + 0x2000, 0x0000, 0x1639, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, + 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, + 0x0821, 0x0003, 0x4022, 0x0000, 0x0022, 0x000b, 0x4122, 0x0008, + 0x4447, 0x0002, 0x0e61, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001, + 0x123f, 0x000b, 0x0ca0, 0x0001, 0x123f, 0x000b, 0x9180, 0x0001, + 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0009, 0x0008, 0x4430, 0x000b, 0x808c, 0x0008, + 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, + 0x8066, 0x0000, 0x0411, 0x0000, 0x4438, 0x0003, 0x03fe, 0x0000, + 0x43e0, 0x0001, 0x0e3c, 0x0003, 0xc2c0, 0x0009, 0x00ff, 0x0008, + 0x02e0, 0x0001, 0x0e3c, 0x0003, 0x9180, 0x0001, 0x0005, 0x0008, + 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, + 0x0019, 0x0000, 0x4447, 0x000b, 0x0240, 0x0002, 0x0a39, 0x000b, + 0x00fe, 0x0000, 0x323c, 0x0003, 0x112a, 0x0000, 0x002e, 0x0008, + 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, + 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0008, + 0x8066, 0x0000, 0x0011, 0x0008, 0x4458, 0x0003, 0x01fe, 0x0008, + 0x42e0, 0x0009, 0x0e2f, 0x000b, 0x00fe, 0x0000, 0x43e0, 0x0001, + 0x0e2f, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632, 0x0008, + 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060, 0x0000, + 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008, + 0x446a, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60, 0x0000, + 0x8062, 0x0008, 0x0002, 0x0000, 0x5870, 0x000b, 0x8066, 0x0000, + 0x3679, 0x0000, 0x4473, 0x0003, 0x5874, 0x0003, 0x3efe, 0x0008, + 0x7f4f, 0x0002, 0x087a, 0x000b, 0x0d00, 0x0000, 0x0082, 0x0004, + 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008, + 0x1efe, 0x0000, 0x300a, 0x000b, 0x00d0, 0x000c, 0x000a, 0x000b, + 0x00fe, 0x0000, 0x348a, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, + 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x4489, 0x0003, + 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc4, 0x0003, 0x82c0, 0x0001, + 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, 0x0000, 0x08a2, 0x000b, + 0x14cc, 0x000b, 0x01fe, 0x0008, 0x0580, 0x0009, 0x7f06, 0x0000, + 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, 0x0000, 0x02fe, 0x0008, + 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, 0x0009, 0x10a2, 0x000b, + 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008, 0x08c4, 0x000b, + 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cb3, 0x0003, 0x8060, 0x0000, + 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6, 0x0001, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0409, 0x0000, 0x44ac, 0x000b, 0x80fe, 0x0008, + 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x040a, 0x0000, + 0x44b2, 0x000b, 0x00fe, 0x0000, 0x34ba, 0x000b, 0x8072, 0x0000, + 0x1010, 0x0008, 0x3944, 0x0002, 0x08b5, 0x000b, 0x00be, 0x000b, + 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, 0x000a, 0x08ba, 0x000b, + 0x3946, 0x000a, 0x0ccb, 0x0003, 0x0000, 0x0007, 0x3943, 0x000a, + 0x08cb, 0x000b, 0x00be, 0x000b, 0x00fe, 0x0000, 0x34c9, 0x0003, + 0x8072, 0x0000, 0x1000, 0x0000, 0x00cb, 0x0003, 0x8072, 0x0000, + 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, 0x0009, 0xfc00, 0x0008, + 0x08c4, 0x000b, 0x00a2, 0x0003, 0x1c60, 0x0000, 0x1b62, 0x0000, + 0x8066, 0x0000, 0x0231, 0x0008, 0x44d4, 0x000b, 0x58d5, 0x000b, + 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0ce3, 0x0003, + 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a, 0x0008, + 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, 0x0000, 0x0d08, 0x0008, + 0x00e7, 0x000b, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548, 0x0008, + 0x064a, 0x0000, 0x58e7, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, + 0x08ee, 0x0003, 0x8000, 0x0000, 0x0001, 0x0000, 0x0082, 0x0004, + 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008, + 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008, + 0x2b24, 0x0008, 0x58f7, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000, + 0x1242, 0x0002, 0x0945, 0x0003, 0x3a45, 0x000a, 0x0934, 0x0003, + 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x0904, 0x0003, + 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000, + 0x092f, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000, + 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x450d, 0x000b, + 0x00fe, 0x0000, 0x352c, 0x0003, 0x1c60, 0x0000, 0x8062, 0x0008, + 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4515, 0x000b, + 0x00fe, 0x0000, 0x3219, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008, + 0x8062, 0x0008, 0x001a, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, + 0x451e, 0x0003, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008, + 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008, + 0x8066, 0x0000, 0x0009, 0x0008, 0x4528, 0x0003, 0x003a, 0x0008, + 0x1dfe, 0x0000, 0x0109, 0x0003, 0x0036, 0x0008, 0x00d0, 0x000c, + 0x0145, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000, + 0x2000, 0x0000, 0x0145, 0x000b, 0x3a44, 0x0002, 0x0a42, 0x000b, + 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000, + 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3616, 0x0003, 0x26fe, 0x0008, + 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009, + 0x0d57, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5945, 0x0003, + 0x50f3, 0x000b, 0x3a46, 0x000a, 0x0d57, 0x000b, 0x3a47, 0x0002, + 0x0952, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, + 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019a, 0x0003, + 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a, + 0x0e13, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, + 0x8066, 0x0000, 0x362a, 0x0000, 0x455c, 0x0003, 0x2000, 0x0000, + 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000, + 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000, + 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000, + 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000, + 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000, + 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000, + 0x4576, 0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e2c, 0x000b, + 0x124b, 0x0002, 0x097f, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002, + 0x0a16, 0x0003, 0x3a46, 0x000a, 0x0d8c, 0x000b, 0x5981, 0x000b, + 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0996, 0x000b, + 0x8010, 0x0008, 0x000d, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000, + 0x0207, 0x0004, 0x0196, 0x0003, 0x194d, 0x000a, 0x0990, 0x000b, + 0x1243, 0x000a, 0x0a20, 0x0003, 0x5990, 0x000b, 0x8054, 0x0008, + 0x0004, 0x0000, 0x01fc, 0x000c, 0x1810, 0x0000, 0x0207, 0x0004, + 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, + 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da0, 0x0003, 0x15fe, 0x0008, + 0x3451, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, + 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004, 0x000a, 0x000b, + 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db6, 0x000b, 0x18fe, 0x0000, + 0x3ce0, 0x0009, 0x09b3, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, + 0x09b3, 0x0003, 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, + 0x01f4, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x01f4, 0x000b, + 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbb, 0x0003, 0x3c1e, 0x0008, + 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dd9, 0x000b, + 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db3, 0x000b, 0x8076, 0x0008, + 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, 0x0000, + 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, 0x0008, + 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, 0x0000, + 0x8066, 0x0000, 0x0422, 0x0000, 0x45d0, 0x000b, 0x01fc, 0x000c, + 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, 0x0008, + 0x8072, 0x0000, 0xb000, 0x0000, 0x019a, 0x0003, 0xbbe0, 0x0009, + 0x0038, 0x0000, 0x0deb, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, + 0x09e8, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0daf, 0x0003, + 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, 0x0000, + 0x8000, 0x0000, 0x0239, 0x0003, 0x8076, 0x0008, 0x0042, 0x0008, + 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0df4, 0x000b, + 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, + 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, + 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001, + 0x0007, 0x0000, 0x0200, 0x0003, 0x1930, 0x000a, 0x7f00, 0x0000, + 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, + 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x4605, 0x0003, + 0x4000, 0x000f, 0x2207, 0x0003, 0x0870, 0x0008, 0x4000, 0x000f, + 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a10, 0x0003, 0x8074, 0x0000, + 0x0706, 0x0000, 0x0212, 0x0003, 0x8074, 0x0000, 0x0703, 0x0000, + 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0247, 0x0003, + 0x8010, 0x0008, 0x0022, 0x0008, 0x0247, 0x0003, 0x01fc, 0x000c, + 0x8010, 0x0008, 0x0007, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000, + 0x0207, 0x0004, 0x0253, 0x0003, 0x01fc, 0x000c, 0x8010, 0x0008, + 0x001b, 0x0008, 0x0207, 0x0004, 0x1810, 0x0000, 0x0207, 0x0004, + 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, + 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008, + 0x0247, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, 0x0008, + 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44, 0x0002, + 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0247, 0x0003, 0x8010, 0x0008, + 0x0003, 0x0008, 0x024b, 0x0003, 0x8010, 0x0008, 0x000b, 0x0000, + 0x024b, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x024b, 0x0003, + 0x3a47, 0x0002, 0x0d45, 0x000b, 0x8010, 0x0008, 0x0006, 0x0008, + 0x024b, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, + 0x3000, 0x0008, 0x0207, 0x0004, 0x020a, 0x000c, 0x3a40, 0x000a, + 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004, + 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, + 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, 0x0002, + 0x0a5e, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b, + 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, 0x0002, + 0x0c0a, 0x000b, 0x023c, 0x0003, 0x6c3e, 0xf40f, 0x0001, 0x0002, + 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, + 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x0e6c }; #ifdef ISP_2300_RISC_CODE #undef ISP_2300_RISC_CODE diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 4d4c22c..f1fd93f 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -1090,7 +1090,7 @@ mdresize(struct md_s *sc, struct md_ioctl *mdio) case MD_VNODE: break; case MD_SWAP: - if (mdio->md_mediasize == 0 || + if (mdio->md_mediasize <= 0 || (mdio->md_mediasize % PAGE_SIZE) != 0) return (EDOM); oldpages = OFF_TO_IDX(round_page(sc->mediasize)); @@ -1148,7 +1148,7 @@ mdcreate_swap(struct md_s *sc, struct md_ioctl *mdio, struct thread *td) * Range check. Disallow negative sizes or any size less then the * size of a page. Then round to a page. */ - if (sc->mediasize == 0 || (sc->mediasize % PAGE_SIZE) != 0) + if (sc->mediasize <= 0 || (sc->mediasize % PAGE_SIZE) != 0) return (EDOM); /* @@ -1189,6 +1189,7 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread struct md_ioctl *mdio; struct md_s *sc; int error, i; + unsigned sectsize; if (md_debug) printf("mdctlioctl(%s %lx %p %x %p)\n", @@ -1217,6 +1218,12 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread default: return (EINVAL); } + if (mdio->md_sectorsize == 0) + sectsize = DEV_BSIZE; + else + sectsize = mdio->md_sectorsize; + if (sectsize > MAXPHYS || mdio->md_mediasize < sectsize) + return (EINVAL); if (mdio->md_options & MD_AUTOUNIT) sc = mdnew(-1, &error, mdio->md_type); else { @@ -1229,10 +1236,7 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread if (mdio->md_options & MD_AUTOUNIT) mdio->md_unit = sc->unit; sc->mediasize = mdio->md_mediasize; - if (mdio->md_sectorsize == 0) - sc->sectorsize = DEV_BSIZE; - else - sc->sectorsize = mdio->md_sectorsize; + sc->sectorsize = sectsize; error = EDOOFUS; switch (sc->type) { case MD_MALLOC: @@ -1282,6 +1286,8 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread sc = mdfind(mdio->md_unit); if (sc == NULL) return (ENOENT); + if (mdio->md_mediasize < sc->sectorsize) + return (EINVAL); if (mdio->md_mediasize < sc->mediasize && !(sc->flags & MD_FORCE) && !(mdio->md_options & MD_FORCE)) diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c index 5b0ede3..9437793 100644 --- a/sys/dev/mge/if_mge.c +++ b/sys/dev/mge/if_mge.c @@ -258,7 +258,9 @@ mge_ver_params(struct mge_softc *sc) uint32_t d, r; soc_id(&d, &r); - if (d == MV_DEV_88F6281 || d == MV_DEV_MV78100 || + if (d == MV_DEV_88F6281 || + d == MV_DEV_88F6282 || + d == MV_DEV_MV78100 || d == MV_DEV_MV78100_Z0) { sc->mge_ver = 2; sc->mge_mtu = 0x4e8; diff --git a/sys/dev/mii/e1000phy.c b/sys/dev/mii/e1000phy.c index 91ae44d..b7fe730 100644 --- a/sys/dev/mii/e1000phy.c +++ b/sys/dev/mii/e1000phy.c @@ -106,6 +106,7 @@ static const struct mii_phydesc e1000phys[] = { MII_PHY_DESC(xxMARVELL, E1111), MII_PHY_DESC(xxMARVELL, E1116), MII_PHY_DESC(xxMARVELL, E1116R), + MII_PHY_DESC(xxMARVELL, E1116R_29), MII_PHY_DESC(xxMARVELL, E1118), MII_PHY_DESC(xxMARVELL, E1149R), MII_PHY_DESC(xxMARVELL, E3016), @@ -208,6 +209,7 @@ e1000phy_reset(struct mii_softc *sc) case MII_MODEL_xxMARVELL_E1111: case MII_MODEL_xxMARVELL_E1112: case MII_MODEL_xxMARVELL_E1116: + case MII_MODEL_xxMARVELL_E1116R_29: case MII_MODEL_xxMARVELL_E1118: case MII_MODEL_xxMARVELL_E1149: case MII_MODEL_xxMARVELL_E1149R: @@ -215,7 +217,8 @@ e1000phy_reset(struct mii_softc *sc) /* Disable energy detect mode. */ reg &= ~E1000_SCR_EN_DETECT_MASK; reg |= E1000_SCR_AUTO_X_MODE; - if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116) + if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 || + sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29) reg &= ~E1000_SCR_POWER_DOWN; reg |= E1000_SCR_ASSERT_CRS_ON_TX; break; @@ -243,6 +246,7 @@ e1000phy_reset(struct mii_softc *sc) PHY_WRITE(sc, E1000_SCR, reg); if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 || + sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29 || sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149 || sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149R) { PHY_WRITE(sc, E1000_EADR, 2); @@ -259,6 +263,7 @@ e1000phy_reset(struct mii_softc *sc) case MII_MODEL_xxMARVELL_E1118: break; case MII_MODEL_xxMARVELL_E1116: + case MII_MODEL_xxMARVELL_E1116R_29: page = PHY_READ(sc, E1000_EADR); /* Select page 3, LED control register. */ PHY_WRITE(sc, E1000_EADR, 3); diff --git a/sys/dev/mlx/mlxvar.h b/sys/dev/mlx/mlxvar.h index a09f907..dbb7666 100644 --- a/sys/dev/mlx/mlxvar.h +++ b/sys/dev/mlx/mlxvar.h @@ -47,7 +47,7 @@ * making that fit cleanly without crossing page boundaries requires rounding up * to the next power of two. */ -#define MLX_MAXPHYS (128 * 124) +#define MLX_MAXPHYS (128 * 1024) #define MLX_NSEG 64 #define MLX_NSLOTS 256 /* max number of command slots */ diff --git a/sys/dev/mps/mps.c b/sys/dev/mps/mps.c index 1d935be..ce94a06 100644 --- a/sys/dev/mps/mps.c +++ b/sys/dev/mps/mps.c @@ -924,7 +924,7 @@ mps_alloc_requests(struct mps_softc *sc) NULL, NULL, /* filter, filterarg */ BUS_SPACE_MAXSIZE_32BIT,/* maxsize */ nsegs, /* nsegments */ - BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */ + BUS_SPACE_MAXSIZE_24BIT,/* maxsegsize */ BUS_DMA_ALLOCNOW, /* flags */ busdma_lock_mutex, /* lockfunc */ &sc->mps_mtx, /* lockarg */ @@ -2014,7 +2014,6 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) MPI2_SGE_SIMPLE64 *sge = sgep; int error, type; uint32_t saved_buf_len, saved_address_low, saved_address_high; - u32 sge_flags; type = (tc->Flags & MPI2_SGE_FLAGS_ELEMENT_MASK); @@ -2034,14 +2033,12 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) break; case MPI2_SGE_FLAGS_SIMPLE_ELEMENT: /* Driver only uses 64-bit SGE simple elements */ - sge = sgep; if (len != MPS_SGE64_SIZE) panic("SGE simple %p length %u or %zu?", sge, MPS_SGE64_SIZE, len); - if (((sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT) & + if (((le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT) & MPI2_SGE_FLAGS_ADDRESS_SIZE) == 0) - panic("SGE simple %p flags %02x not marked 64-bit?", - sge, sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT); + panic("SGE simple %p not marked 64-bit?", sge); break; default: @@ -2073,8 +2070,8 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) * Mark as last element in this chain if necessary. */ if (type == MPI2_SGE_FLAGS_SIMPLE_ELEMENT) { - sge->FlagsLength |= - (MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT); + sge->FlagsLength |= htole32( + MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT); } /* @@ -2083,11 +2080,6 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) * understanding the code. */ cm->cm_sglsize -= len; - /* Endian Safe code */ - sge_flags = sge->FlagsLength; - sge->FlagsLength = htole32(sge_flags); - sge->Address.High = htole32(sge->Address.High); - sge->Address.Low = htole32(sge->Address.Low); bcopy(sgep, cm->cm_sge, len); cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len); return (mps_add_chain(cm)); @@ -2127,27 +2119,22 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) * 2 SGL's for a bi-directional request, they both use the same * DMA buffer (same cm command). */ - saved_buf_len = sge->FlagsLength & 0x00FFFFFF; + saved_buf_len = le32toh(sge->FlagsLength) & 0x00FFFFFF; saved_address_low = sge->Address.Low; saved_address_high = sge->Address.High; if (cm->cm_out_len) { - sge->FlagsLength = cm->cm_out_len | + sge->FlagsLength = htole32(cm->cm_out_len | ((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT | MPI2_SGE_FLAGS_END_OF_BUFFER | MPI2_SGE_FLAGS_HOST_TO_IOC | MPI2_SGE_FLAGS_64_BIT_ADDRESSING) << - MPI2_SGE_FLAGS_SHIFT); + MPI2_SGE_FLAGS_SHIFT)); cm->cm_sglsize -= len; - /* Endian Safe code */ - sge_flags = sge->FlagsLength; - sge->FlagsLength = htole32(sge_flags); - sge->Address.High = htole32(sge->Address.High); - sge->Address.Low = htole32(sge->Address.Low); bcopy(sgep, cm->cm_sge, len); cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len); } - sge->FlagsLength = saved_buf_len | + saved_buf_len |= ((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT | MPI2_SGE_FLAGS_END_OF_BUFFER | MPI2_SGE_FLAGS_LAST_ELEMENT | @@ -2155,24 +2142,20 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft) MPI2_SGE_FLAGS_64_BIT_ADDRESSING) << MPI2_SGE_FLAGS_SHIFT); if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) { - sge->FlagsLength |= + saved_buf_len |= ((uint32_t)(MPI2_SGE_FLAGS_IOC_TO_HOST) << MPI2_SGE_FLAGS_SHIFT); } else { - sge->FlagsLength |= + saved_buf_len |= ((uint32_t)(MPI2_SGE_FLAGS_HOST_TO_IOC) << MPI2_SGE_FLAGS_SHIFT); } + sge->FlagsLength = htole32(saved_buf_len); sge->Address.Low = saved_address_low; sge->Address.High = saved_address_high; } cm->cm_sglsize -= len; - /* Endian Safe code */ - sge_flags = sge->FlagsLength; - sge->FlagsLength = htole32(sge_flags); - sge->Address.High = htole32(sge->Address.High); - sge->Address.Low = htole32(sge->Address.Low); bcopy(sgep, cm->cm_sge, len); cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len); return (0); @@ -2190,10 +2173,10 @@ mps_add_dmaseg(struct mps_command *cm, vm_paddr_t pa, size_t len, u_int flags, /* * This driver always uses 64-bit address elements for simplicity. */ + bzero(&sge, sizeof(sge)); flags |= MPI2_SGE_FLAGS_SIMPLE_ELEMENT | MPI2_SGE_FLAGS_64_BIT_ADDRESSING; - /* Set Endian safe macro in mps_push_sge */ - sge.FlagsLength = len | (flags << MPI2_SGE_FLAGS_SHIFT); + sge.FlagsLength = htole32(len | (flags << MPI2_SGE_FLAGS_SHIFT)); mps_from_u64(pa, &sge.Address); return (mps_push_sge(cm, &sge, sizeof sge, segsleft)); @@ -2290,7 +2273,6 @@ mps_data_cb2(void *arg, bus_dma_segment_t *segs, int nsegs, bus_size_t mapsize, int mps_map_command(struct mps_softc *sc, struct mps_command *cm) { - MPI2_SGE_SIMPLE32 *sge; int error = 0; if (cm->cm_flags & MPS_CM_FLAGS_USE_UIO) { @@ -2301,15 +2283,8 @@ mps_map_command(struct mps_softc *sc, struct mps_command *cm) cm->cm_data, cm->cm_length, mps_data_cb, cm, 0); } else { /* Add a zero-length element as needed */ - if (cm->cm_sge != NULL) { - sge = (MPI2_SGE_SIMPLE32 *)cm->cm_sge; - sge->FlagsLength = htole32((MPI2_SGE_FLAGS_LAST_ELEMENT | - MPI2_SGE_FLAGS_END_OF_BUFFER | - MPI2_SGE_FLAGS_END_OF_LIST | - MPI2_SGE_FLAGS_SIMPLE_ELEMENT) << - MPI2_SGE_FLAGS_SHIFT); - sge->Address = 0; - } + if (cm->cm_sge != NULL) + mps_add_dmaseg(cm, 0, 0, 0, 1); mps_enqueue_request(sc, cm); } diff --git a/sys/dev/mps/mps_sas.c b/sys/dev/mps/mps_sas.c index ecdc10e..dba981e 100644 --- a/sys/dev/mps/mps_sas.c +++ b/sys/dev/mps/mps_sas.c @@ -3003,6 +3003,7 @@ mpssas_action_resetdev(struct mpssas_softc *sassc, union ccb *ccb) tm->cm_desc.HighPriority.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY; tm->cm_complete = mpssas_resetdev_complete; tm->cm_complete_data = ccb; + tm->cm_targ = targ; mps_map_command(sc, tm); } diff --git a/sys/dev/mps/mps_sas_lsi.c b/sys/dev/mps/mps_sas_lsi.c index 9cedcd3..4763192 100644 --- a/sys/dev/mps/mps_sas_lsi.c +++ b/sys/dev/mps/mps_sas_lsi.c @@ -796,8 +796,10 @@ mpssas_get_sata_identify(struct mps_softc *sc, u16 handle, if (!buffer) return ENOMEM; - if ((cm = mps_alloc_command(sc)) == NULL) + if ((cm = mps_alloc_command(sc)) == NULL) { + free(buffer, M_MPT2); return (EBUSY); + } mpi_request = (MPI2_SATA_PASSTHROUGH_REQUEST *)cm->cm_req; bzero(mpi_request,sizeof(MPI2_SATA_PASSTHROUGH_REQUEST)); mpi_request->Function = MPI2_FUNCTION_SATA_PASSTHROUGH; diff --git a/sys/dev/mps/mps_table.c b/sys/dev/mps/mps_table.c index c9acefe..e004f8d 100644 --- a/sys/dev/mps/mps_table.c +++ b/sys/dev/mps/mps_table.c @@ -463,10 +463,12 @@ mps_print_sgl(struct mps_softc *sc, struct mps_command *cm, int offset) sge = (MPI2_SGE_SIMPLE64 *)&frame[offset * 4]; printf("SGL for command %p\n", cm); + hexdump(frame, 128, NULL, 0); while (frame != NULL) { - flags = sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT; - printf("seg%d flags=0x%x len=0x%x addr=0x%jx\n", i, flags, - sge->FlagsLength & 0xffffff, mps_to_u64(&sge->Address)); + flags = le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT; + printf("seg%d flags=0x%02x len=0x%06x addr=0x%016jx\n", + i, flags, le32toh(sge->FlagsLength) & 0xffffff, + mps_to_u64(&sge->Address)); if (flags & (MPI2_SGE_FLAGS_END_OF_LIST | MPI2_SGE_FLAGS_END_OF_BUFFER)) break; @@ -475,8 +477,8 @@ mps_print_sgl(struct mps_softc *sc, struct mps_command *cm, int offset) if (flags & MPI2_SGE_FLAGS_LAST_ELEMENT) { sgc = (MPI2_SGE_CHAIN32 *)sge; printf("chain flags=0x%x len=0x%x Offset=0x%x " - "Address=0x%x\n", sgc->Flags, sgc->Length, - sgc->NextChainOffset, sgc->Address); + "Address=0x%x\n", sgc->Flags, le16toh(sgc->Length), + sgc->NextChainOffset, le32toh(sgc->Address)); if (chain == NULL) chain = TAILQ_FIRST(&cm->cm_chain_list); else diff --git a/sys/dev/mps/mps_user.c b/sys/dev/mps/mps_user.c index 98dc511..ee03573 100644 --- a/sys/dev/mps/mps_user.c +++ b/sys/dev/mps/mps_user.c @@ -534,11 +534,6 @@ mpi_pre_fw_upload(struct mps_command *cm, struct mps_usr_command *cmd) return (EINVAL); mpi_init_sge(cm, req, &req->SGL); - if (cmd->len == 0) { - /* Perhaps just asking what the size of the fw is? */ - return (0); - } - bzero(&tc, sizeof tc); /* @@ -554,6 +549,8 @@ mpi_pre_fw_upload(struct mps_command *cm, struct mps_usr_command *cmd) tc.ImageOffset = 0; tc.ImageSize = cmd->len; + cm->cm_flags |= MPS_CM_FLAGS_DATAIN; + return (mps_push_sge(cm, &tc, sizeof tc, 0)); } @@ -692,13 +689,6 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd) mps_dprint(sc, MPS_INFO, "mps_user_command: Function %02X " "MsgFlags %02X\n", hdr->Function, hdr->MsgFlags ); - err = mps_user_setup_request(cm, cmd); - if (err != 0) { - mps_printf(sc, "mps_user_command: unsupported function 0x%X\n", - hdr->Function ); - goto RetFreeUnlocked; - } - if (cmd->len > 0) { buf = malloc(cmd->len, M_MPSUSER, M_WAITOK|M_ZERO); if(!buf) { @@ -716,8 +706,15 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd) cm->cm_flags = MPS_CM_FLAGS_SGE_SIMPLE; cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; + err = mps_user_setup_request(cm, cmd); + if (err != 0) { + mps_printf(sc, "mps_user_command: unsupported function 0x%X\n", + hdr->Function ); + goto RetFreeUnlocked; + } + mps_lock(sc); - err = mps_wait_command(sc, cm, 30); + err = mps_wait_command(sc, cm, 60); if (err) { mps_printf(sc, "%s: invalid request: error %d\n", @@ -726,7 +723,10 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd) } rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply; - sz = rpl->MsgLength * 4; + if (rpl != NULL) + sz = rpl->MsgLength * 4; + else + sz = 0; if (sz > cmd->rpl_len) { mps_printf(sc, diff --git a/sys/dev/mps/mpsvar.h b/sys/dev/mps/mpsvar.h index 2acb75b..ac0f0da 100644 --- a/sys/dev/mps/mpsvar.h +++ b/sys/dev/mps/mpsvar.h @@ -32,7 +32,7 @@ #ifndef _MPSVAR_H #define _MPSVAR_H -#define MPS_DRIVER_VERSION "14.00.00.01-fbsd" +#define MPS_DRIVER_VERSION "14.00.00.02-fbsd" #define MPS_DB_MAX_WAIT 2500 @@ -627,15 +627,15 @@ do { \ static __inline void mps_from_u64(uint64_t data, U64 *mps) { - (mps)->High = (uint32_t)((data) >> 32); - (mps)->Low = (uint32_t)((data) & 0xffffffff); + (mps)->High = htole32((uint32_t)((data) >> 32)); + (mps)->Low = htole32((uint32_t)((data) & 0xffffffff)); } static __inline uint64_t mps_to_u64(U64 *data) { - return (((uint64_t)data->High << 32) | data->Low); + return (((uint64_t)le32toh(data->High) << 32) | le32toh(data->Low)); } static __inline void diff --git a/sys/dev/mvs/mvs_soc.c b/sys/dev/mvs/mvs_soc.c index 9e9f93e..9f48fdd 100644 --- a/sys/dev/mvs/mvs_soc.c +++ b/sys/dev/mvs/mvs_soc.c @@ -63,6 +63,7 @@ static struct { } mvs_ids[] = { {MV_DEV_88F5182, 0x00, "Marvell 88F5182", 2, MVS_Q_GENIIE|MVS_Q_SOC}, {MV_DEV_88F6281, 0x00, "Marvell 88F6281", 2, MVS_Q_GENIIE|MVS_Q_SOC}, + {MV_DEV_88F6282, 0x00, "Marvell 88F6282", 2, MVS_Q_GENIIE|MVS_Q_SOC}, {MV_DEV_MV78100, 0x00, "Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC}, {MV_DEV_MV78100_Z0, 0x00,"Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC}, {0, 0x00, NULL, 0, 0} diff --git a/sys/dev/netmap/if_em_netmap.h b/sys/dev/netmap/if_em_netmap.h index 8a3893e..b4b268a 100644 --- a/sys/dev/netmap/if_em_netmap.h +++ b/sys/dev/netmap/if_em_netmap.h @@ -171,7 +171,7 @@ em_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock) u_int j, k, l, n = 0, lim = kring->nkr_num_slots - 1; /* generate an interrupt approximately every half ring */ - int report_frequency = kring->nkr_num_slots >> 1; + u_int report_frequency = kring->nkr_num_slots >> 1; k = ring->cur; if (k > lim) diff --git a/sys/dev/netmap/if_igb_netmap.h b/sys/dev/netmap/if_igb_netmap.h index 8ba13ee..bd83563 100644 --- a/sys/dev/netmap/if_igb_netmap.h +++ b/sys/dev/netmap/if_igb_netmap.h @@ -125,7 +125,7 @@ igb_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock) u_int j, k, l, n = 0, lim = kring->nkr_num_slots - 1; /* generate an interrupt approximately every half ring */ - int report_frequency = kring->nkr_num_slots >> 1; + u_int report_frequency = kring->nkr_num_slots >> 1; k = ring->cur; if (k > lim) diff --git a/sys/dev/netmap/ixgbe_netmap.h b/sys/dev/netmap/ixgbe_netmap.h index fb53963..eefb4df 100644 --- a/sys/dev/netmap/ixgbe_netmap.h +++ b/sys/dev/netmap/ixgbe_netmap.h @@ -233,7 +233,7 @@ ixgbe_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock) * seems very expensive, so we interrupt once every half ring, * or when requested with NS_REPORT */ - int report_frequency = kring->nkr_num_slots >> 1; + u_int report_frequency = kring->nkr_num_slots >> 1; if (k > lim) return netmap_ring_reinit(kring); diff --git a/sys/dev/netmap/netmap.c b/sys/dev/netmap/netmap.c index 1cd0a92..cbf6852 100644 --- a/sys/dev/netmap/netmap.c +++ b/sys/dev/netmap/netmap.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Matteo Landi, Luigi Rizzo. All rights reserved. + * Copyright (C) 2011-2012 Matteo Landi, Luigi Rizzo. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -23,6 +23,8 @@ * SUCH DAMAGE. */ +#define NM_BRIDGE + /* * This module supports memory mapped access to network devices, * see netmap(4). @@ -52,6 +54,16 @@ * transmit or receive queues (or all queues for a given interface). */ +#ifdef linux +#include "bsd_glue.h" +static netdev_tx_t linux_netmap_start(struct sk_buff *skb, struct net_device *dev); +#endif /* linux */ + +#ifdef __APPLE__ +#include "osx_glue.h" +#endif /* __APPLE__ */ + +#ifdef __FreeBSD__ #include <sys/cdefs.h> /* prerequisite */ __FBSDID("$FreeBSD$"); @@ -78,11 +90,13 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/bpf.h> /* BIOCIMMEDIATE */ #include <net/vnet.h> -#include <net/netmap.h> -#include <dev/netmap/netmap_kern.h> #include <machine/bus.h> /* bus_dmamap_* */ MALLOC_DEFINE(M_NETMAP, "netmap", "Network memory map"); +#endif /* __FreeBSD__ */ + +#include <net/netmap.h> +#include <dev/netmap/netmap_kern.h> /* * lock and unlock for the netmap memory allocator @@ -105,8 +119,8 @@ SYSCTL_INT(_dev_netmap, OID_AUTO, verbose, CTLFLAG_RW, &netmap_verbose, 0, "Verbose mode"); SYSCTL_INT(_dev_netmap, OID_AUTO, no_timestamp, CTLFLAG_RW, &netmap_no_timestamp, 0, "no_timestamp"); -int netmap_buf_size = 2048; -TUNABLE_INT("hw.netmap.buf_size", &netmap_buf_size); +u_int netmap_buf_size = 2048; +TUNABLE_INT("hw.netmap.buf_size", (u_int *)&netmap_buf_size); SYSCTL_INT(_dev_netmap, OID_AUTO, buf_size, CTLFLAG_RD, &netmap_buf_size, 0, "Size of packet buffers"); int netmap_mitigate = 1; @@ -115,6 +129,162 @@ int netmap_no_pendintr = 1; SYSCTL_INT(_dev_netmap, OID_AUTO, no_pendintr, CTLFLAG_RW, &netmap_no_pendintr, 0, "Always look for new received packets."); +int netmap_drop = 0; /* debugging */ +int netmap_flags = 0; /* debug flags */ +int netmap_copy = 0; /* debugging, copy content */ + +SYSCTL_INT(_dev_netmap, OID_AUTO, drop, CTLFLAG_RW, &netmap_drop, 0 , ""); +SYSCTL_INT(_dev_netmap, OID_AUTO, flags, CTLFLAG_RW, &netmap_flags, 0 , ""); +SYSCTL_INT(_dev_netmap, OID_AUTO, copy, CTLFLAG_RW, &netmap_copy, 0 , ""); + +#ifdef NM_BRIDGE /* support for netmap bridge */ + +/* + * system parameters. + * + * All switched ports have prefix NM_NAME. + * The switch has a max of NM_BDG_MAXPORTS ports (often stored in a bitmap, + * so a practical upper bound is 64). + * Each tx ring is read-write, whereas rx rings are readonly (XXX not done yet). + * The virtual interfaces use per-queue lock instead of core lock. + * In the tx loop, we aggregate traffic in batches to make all operations + * faster. The batch size is NM_BDG_BATCH + */ +#define NM_NAME "vale" /* prefix for the interface */ +#define NM_BDG_MAXPORTS 16 /* up to 64 ? */ +#define NM_BRIDGE_RINGSIZE 1024 /* in the device */ +#define NM_BDG_HASH 1024 /* forwarding table entries */ +#define NM_BDG_BATCH 1024 /* entries in the forwarding buffer */ +#define NM_BRIDGES 4 /* number of bridges */ +int netmap_bridge = NM_BDG_BATCH; /* bridge batch size */ +SYSCTL_INT(_dev_netmap, OID_AUTO, bridge, CTLFLAG_RW, &netmap_bridge, 0 , ""); + +#ifdef linux +#define ADD_BDG_REF(ifp) (NA(ifp)->if_refcount++) +#define DROP_BDG_REF(ifp) (NA(ifp)->if_refcount-- <= 1) +#else /* !linux */ +#define ADD_BDG_REF(ifp) (ifp)->if_refcount++ +#define DROP_BDG_REF(ifp) refcount_release(&(ifp)->if_refcount) +#ifdef __FreeBSD__ +#include <sys/endian.h> +#include <sys/refcount.h> +#endif /* __FreeBSD__ */ +#define prefetch(x) __builtin_prefetch(x) +#endif /* !linux */ + +static void bdg_netmap_attach(struct ifnet *ifp); +static int bdg_netmap_reg(struct ifnet *ifp, int onoff); +/* per-tx-queue entry */ +struct nm_bdg_fwd { /* forwarding entry for a bridge */ + void *buf; + uint64_t dst; /* dst mask */ + uint32_t src; /* src index ? */ + uint16_t len; /* src len */ +}; + +struct nm_hash_ent { + uint64_t mac; /* the top 2 bytes are the epoch */ + uint64_t ports; +}; + +/* + * Interfaces for a bridge are all in ports[]. + * The array has fixed size, an empty entry does not terminate + * the search. + */ +struct nm_bridge { + struct ifnet *bdg_ports[NM_BDG_MAXPORTS]; + int n_ports; + uint64_t act_ports; + int freelist; /* first buffer index */ + NM_SELINFO_T si; /* poll/select wait queue */ + NM_LOCK_T bdg_lock; /* protect the selinfo ? */ + + /* the forwarding table, MAC+ports */ + struct nm_hash_ent ht[NM_BDG_HASH]; + + int namelen; /* 0 means free */ + char basename[IFNAMSIZ]; +}; + +struct nm_bridge nm_bridges[NM_BRIDGES]; + +#define BDG_LOCK(b) mtx_lock(&(b)->bdg_lock) +#define BDG_UNLOCK(b) mtx_unlock(&(b)->bdg_lock) + +/* + * NA(ifp)->bdg_port port index + */ + +// XXX only for multiples of 64 bytes, non overlapped. +static inline void +pkt_copy(void *_src, void *_dst, int l) +{ + uint64_t *src = _src; + uint64_t *dst = _dst; + if (unlikely(l >= 1024)) { + bcopy(src, dst, l); + return; + } + for (; likely(l > 0); l-=64) { + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + } +} + +/* + * locate a bridge among the existing ones. + * a ':' in the name terminates the bridge name. Otherwise, just NM_NAME. + * We assume that this is called with a name of at least NM_NAME chars. + */ +static struct nm_bridge * +nm_find_bridge(const char *name) +{ + int i, l, namelen, e; + struct nm_bridge *b = NULL; + + namelen = strlen(NM_NAME); /* base length */ + l = strlen(name); /* actual length */ + for (i = namelen + 1; i < l; i++) { + if (name[i] == ':') { + namelen = i; + break; + } + } + if (namelen >= IFNAMSIZ) + namelen = IFNAMSIZ; + ND("--- prefix is '%.*s' ---", namelen, name); + + /* use the first entry for locking */ + BDG_LOCK(nm_bridges); // XXX do better + for (e = -1, i = 1; i < NM_BRIDGES; i++) { + b = nm_bridges + i; + if (b->namelen == 0) + e = i; /* record empty slot */ + else if (strncmp(name, b->basename, namelen) == 0) { + ND("found '%.*s' at %d", namelen, name, i); + break; + } + } + if (i == NM_BRIDGES) { /* all full */ + if (e == -1) { /* no empty slot */ + b = NULL; + } else { + b = nm_bridges + e; + strncpy(b->basename, name, namelen); + b->namelen = namelen; + } + } + BDG_UNLOCK(nm_bridges); + return b; +} +#endif /* NM_BRIDGE */ /*------------- memory allocator -----------------*/ #ifdef NETMAP_MEM2 @@ -200,6 +370,46 @@ netmap_dtor_locked(void *data) netmap_if_free(nifp); } +static void +nm_if_rele(struct ifnet *ifp) +{ +#ifndef NM_BRIDGE + if_rele(ifp); +#else /* NM_BRIDGE */ + int i, full; + struct nm_bridge *b; + + if (strncmp(ifp->if_xname, NM_NAME, sizeof(NM_NAME) - 1)) { + if_rele(ifp); + return; + } + if (!DROP_BDG_REF(ifp)) + return; + b = ifp->if_bridge; + BDG_LOCK(nm_bridges); + BDG_LOCK(b); + ND("want to disconnect %s from the bridge", ifp->if_xname); + full = 0; + for (i = 0; i < NM_BDG_MAXPORTS; i++) { + if (b->bdg_ports[i] == ifp) { + b->bdg_ports[i] = NULL; + bzero(ifp, sizeof(*ifp)); + free(ifp, M_DEVBUF); + break; + } + else if (b->bdg_ports[i] != NULL) + full = 1; + } + BDG_UNLOCK(b); + if (full == 0) { + ND("freeing bridge %d", b - nm_bridges); + b->namelen = 0; + } + BDG_UNLOCK(nm_bridges); + if (i == NM_BDG_MAXPORTS) + D("ouch, cannot find ifp to remove"); +#endif /* NM_BRIDGE */ +} static void netmap_dtor(void *data) @@ -212,7 +422,7 @@ netmap_dtor(void *data) netmap_dtor_locked(data); na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0); - if_rele(ifp); + nm_if_rele(ifp); bzero(priv, sizeof(*priv)); /* XXX for safety */ free(priv, M_DEVBUF); } @@ -228,6 +438,7 @@ netmap_dtor(void *data) * Return 0 on success, -1 otherwise. */ +#ifdef __FreeBSD__ static int netmap_mmap(__unused struct cdev *dev, #if __FreeBSD_version < 900000 @@ -246,6 +457,7 @@ netmap_mmap(__unused struct cdev *dev, return (0); } +#endif /* __FreeBSD__ */ /* @@ -316,15 +528,19 @@ netmap_sync_to_host(struct netmap_adapter *na) * * This routine also does the selrecord if called from the poll handler * (we know because td != NULL). + * + * NOTE: on linux, selrecord() is defined as a macro and uses pwait + * as an additional hidden argument. */ static void -netmap_sync_from_host(struct netmap_adapter *na, struct thread *td) +netmap_sync_from_host(struct netmap_adapter *na, struct thread *td, void *pwait) { struct netmap_kring *kring = &na->rx_rings[na->num_rx_rings]; struct netmap_ring *ring = kring->ring; u_int j, n, lim = kring->nkr_num_slots; u_int k = ring->cur, resvd = ring->reserved; + (void)pwait; /* disable unused warnings */ na->nm_lock(na->ifp, NETMAP_CORE_LOCK, 0); if (k >= lim) { netmap_ring_reinit(kring); @@ -363,6 +579,64 @@ netmap_sync_from_host(struct netmap_adapter *na, struct thread *td) static int get_ifp(const char *name, struct ifnet **ifp) { +#ifdef NM_BRIDGE + struct ifnet *iter = NULL; + + do { + struct nm_bridge *b; + int i, l, cand = -1; + + if (strncmp(name, NM_NAME, sizeof(NM_NAME) - 1)) + break; + b = nm_find_bridge(name); + if (b == NULL) { + D("no bridges available for '%s'", name); + return (ENXIO); + } + /* XXX locking */ + BDG_LOCK(b); + /* lookup in the local list of ports */ + for (i = 0; i < NM_BDG_MAXPORTS; i++) { + iter = b->bdg_ports[i]; + if (iter == NULL) { + if (cand == -1) + cand = i; /* potential insert point */ + continue; + } + if (!strcmp(iter->if_xname, name)) { + ADD_BDG_REF(iter); + ND("found existing interface"); + BDG_UNLOCK(b); + break; + } + } + if (i < NM_BDG_MAXPORTS) /* already unlocked */ + break; + if (cand == -1) { + D("bridge full, cannot create new port"); +no_port: + BDG_UNLOCK(b); + *ifp = NULL; + return EINVAL; + } + ND("create new bridge port %s", name); + /* space for forwarding list after the ifnet */ + l = sizeof(*iter) + + sizeof(struct nm_bdg_fwd)*NM_BDG_BATCH ; + iter = malloc(l, M_DEVBUF, M_NOWAIT | M_ZERO); + if (!iter) + goto no_port; + strcpy(iter->if_xname, name); + bdg_netmap_attach(iter); + b->bdg_ports[cand] = iter; + iter->if_bridge = b; + ADD_BDG_REF(iter); + BDG_UNLOCK(b); + ND("attaching virtual bridge %p", b); + } while (0); + *ifp = iter; + if (! *ifp) +#endif /* NM_BRIDGE */ *ifp = ifunit_ref(name); if (*ifp == NULL) return (ENXIO); @@ -371,7 +645,7 @@ get_ifp(const char *name, struct ifnet **ifp) */ if ((*ifp)->if_capabilities & IFCAP_NETMAP && NA(*ifp)) return 0; /* valid pointer, we hold the refcount */ - if_rele(*ifp); + nm_if_rele(*ifp); return EINVAL; // not NETMAP capable } @@ -491,8 +765,8 @@ netmap_set_ringid(struct netmap_priv_d *priv, u_int ringid) * Return 0 on success, errno otherwise. */ static int -netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, - __unused int fflag, struct thread *td) +netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data, + int fflag, struct thread *td) { struct netmap_priv_d *priv = NULL; struct ifnet *ifp; @@ -502,6 +776,23 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, u_int i, lim; struct netmap_if *nifp; + (void)dev; /* UNUSED */ + (void)fflag; /* UNUSED */ +#ifdef linux +#define devfs_get_cdevpriv(pp) \ + ({ *(struct netmap_priv_d **)pp = ((struct file *)td)->private_data; \ + (*pp ? 0 : ENOENT); }) + +/* devfs_set_cdevpriv cannot fail on linux */ +#define devfs_set_cdevpriv(p, fn) \ + ({ ((struct file *)td)->private_data = p; (p ? 0 : EINVAL); }) + + +#define devfs_clear_cdevpriv() do { \ + netmap_dtor(priv); ((struct file *)td)->private_data = 0; \ + } while (0) +#endif /* linux */ + CURVNET_SET(TD_TO_VNET(td)); error = devfs_get_cdevpriv((void **)&priv); @@ -511,6 +802,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, } error = 0; /* Could be ENOENT */ + nmr->nr_name[sizeof(nmr->nr_name) - 1] = '\0'; /* truncate name */ switch (cmd) { case NIOCGINFO: /* return capabilities etc */ /* memsize is always valid */ @@ -535,7 +827,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, nmr->nr_tx_rings = na->num_tx_rings; nmr->nr_rx_slots = na->num_rx_desc; nmr->nr_tx_slots = na->num_tx_desc; - if_rele(ifp); /* return the refcount */ + nm_if_rele(ifp); /* return the refcount */ break; case NIOCREGIF: @@ -561,7 +853,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, M_NOWAIT | M_ZERO); if (priv == NULL) { error = ENOMEM; - if_rele(ifp); /* return the refcount */ + nm_if_rele(ifp); /* return the refcount */ break; } @@ -576,7 +868,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, D("too many NIOCREGIF attempts, give up"); error = EINVAL; free(priv, M_DEVBUF); - if_rele(ifp); /* return the refcount */ + nm_if_rele(ifp); /* return the refcount */ break; } @@ -593,6 +885,11 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, /* Otherwise set the card in netmap mode * and make it use the shared buffers. */ + for (i = 0 ; i < na->num_tx_rings + 1; i++) + mtx_init(&na->tx_rings[i].q_lock, "nm_txq_lock", MTX_NETWORK_LOCK, MTX_DEF); + for (i = 0 ; i < na->num_rx_rings + 1; i++) { + mtx_init(&na->rx_rings[i].q_lock, "nm_rxq_lock", MTX_NETWORK_LOCK, MTX_DEF); + } error = na->nm_register(ifp, 1); /* mode on */ if (error) netmap_dtor_locked(priv); @@ -601,7 +898,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data, if (error) { /* reg. failed, release priv and ref */ error: na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0); - if_rele(ifp); /* return the refcount */ + nm_if_rele(ifp); /* return the refcount */ bzero(priv, sizeof(*priv)); free(priv, M_DEVBUF); break; @@ -650,7 +947,7 @@ error: if (cmd == NIOCTXSYNC) netmap_sync_to_host(na); else - netmap_sync_from_host(na, NULL); + netmap_sync_from_host(na, NULL, NULL); break; } /* find the last ring to scan */ @@ -679,6 +976,7 @@ error: break; +#ifdef __FreeBSD__ case BIOCIMMEDIATE: case BIOCGHDRCMPLT: case BIOCSHDRCMPLT: @@ -696,9 +994,14 @@ error: so.so_vnet = ifp->if_vnet; // so->so_proto not null. error = ifioctl(&so, cmd, data, td); - if_rele(ifp); + nm_if_rele(ifp); break; } + +#else /* linux */ + default: + error = EOPNOTSUPP; +#endif /* linux */ } CURVNET_RESTORE(); @@ -715,9 +1018,13 @@ error: * selfd or on the global one. * Device-dependent parts (locking and sync of tx/rx rings) * are done through callbacks. + * + * On linux, arguments are really pwait, the poll table, and 'td' is struct file * + * The first one is remapped to pwait as selrecord() uses the name as an + * hidden argument. */ static int -netmap_poll(__unused struct cdev *dev, int events, struct thread *td) +netmap_poll(struct cdev *dev, int events, struct thread *td) { struct netmap_priv_d *priv = NULL; struct netmap_adapter *na; @@ -726,6 +1033,9 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td) u_int core_lock, i, check_all, want_tx, want_rx, revents = 0; u_int lim_tx, lim_rx; enum {NO_CL, NEED_CL, LOCKED_CL }; /* see below */ + void *pwait = dev; /* linux compatibility */ + + (void)pwait; if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL) return POLLERR; @@ -755,7 +1065,7 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td) if (want_rx) { kring = &na->rx_rings[lim_rx]; if (kring->ring->avail == 0) - netmap_sync_from_host(na, td); + netmap_sync_from_host(na, td, dev); if (kring->ring->avail > 0) { revents |= want_rx; } @@ -801,6 +1111,13 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td) * LOCKED_CL core lock is set, so we need to release it. */ core_lock = (check_all || !na->separate_locks) ? NEED_CL : NO_CL; +#ifdef NM_BRIDGE + /* the bridge uses separate locks */ + if (na->nm_register == bdg_netmap_reg) { + ND("not using core lock for %s", ifp->if_xname); + core_lock = NO_CL; + } +#endif /* NM_BRIDGE */ if (priv->np_qlast != NETMAP_HW_RING) { lim_tx = lim_rx = priv->np_qlast; } @@ -970,7 +1287,7 @@ netmap_lock_wrapper(struct ifnet *dev, int what, u_int queueid) int netmap_attach(struct netmap_adapter *na, int num_queues) { - int i, n, size; + int n, size; void *buf; struct ifnet *ifp = na->ifp; @@ -999,19 +1316,22 @@ netmap_attach(struct netmap_adapter *na, int num_queues) ifp->if_capabilities |= IFCAP_NETMAP; na = buf; - if (na->nm_lock == NULL) + if (na->nm_lock == NULL) { + ND("using default locks for %s", ifp->if_xname); na->nm_lock = netmap_lock_wrapper; - mtx_init(&na->core_lock, "netmap core lock", NULL, MTX_DEF); - for (i = 0 ; i < na->num_tx_rings + 1; i++) - mtx_init(&na->tx_rings[i].q_lock, "netmap txq lock", NULL, MTX_DEF); - for (i = 0 ; i < na->num_rx_rings + 1; i++) - mtx_init(&na->rx_rings[i].q_lock, "netmap rxq lock", NULL, MTX_DEF); + /* core lock initialized here. + * others initialized after netmap_if_new + */ + mtx_init(&na->core_lock, "netmap core lock", MTX_NETWORK_LOCK, MTX_DEF); + } } #ifdef linux - D("netdev_ops %p", ifp->netdev_ops); - /* prepare a clone of the netdev ops */ - na->nm_ndo = *ifp->netdev_ops; - na->nm_ndo.ndo_start_xmit = netmap_start_linux; + if (ifp->netdev_ops) { + D("netdev_ops %p", ifp->netdev_ops); + /* prepare a clone of the netdev ops */ + na->nm_ndo = *ifp->netdev_ops; + } + na->nm_ndo.ndo_start_xmit = linux_netmap_start; #endif D("%s for %s", buf ? "ok" : "failed", ifp->if_xname); @@ -1059,7 +1379,7 @@ netmap_start(struct ifnet *ifp, struct mbuf *m) struct netmap_adapter *na = NA(ifp); struct netmap_kring *kring = &na->rx_rings[na->num_rx_rings]; u_int i, len = MBUF_LEN(m); - int error = EBUSY, lim = kring->nkr_num_slots - 1; + u_int error = EBUSY, lim = kring->nkr_num_slots - 1; struct netmap_slot *slot; if (netmap_verbose & NM_VERB_HOST) @@ -1137,6 +1457,16 @@ netmap_reset(struct netmap_adapter *na, enum txrx tx, int n, kring->nkr_hwofs, na->ifp->if_xname, tx == NR_TX ? "TX" : "RX", n); +#if 0 // def linux + /* XXX check that the mappings are correct */ + /* need ring_nr, adapter->pdev, direction */ + buffer_info->dma = dma_map_single(&pdev->dev, addr, adapter->rx_buffer_len, DMA_FROM_DEVICE); + if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) { + D("error mapping rx netmap buffer %d", i); + // XXX fix error handling + } + +#endif /* linux */ /* * Wakeup on the individual and global lock * We do the wakeup here, but the ring is not yet reconfigured. @@ -1201,6 +1531,154 @@ netmap_rx_irq(struct ifnet *ifp, int q, int *work_done) } +#ifdef linux /* linux-specific routines */ + +/* + * Remap linux arguments into the FreeBSD call. + * - pwait is the poll table, passed as 'dev'; + * If pwait == NULL someone else already woke up before. We can report + * events but they are filtered upstream. + * If pwait != NULL, then pwait->key contains the list of events. + * - events is computed from pwait as above. + * - file is passed as 'td'; + */ +static u_int +linux_netmap_poll(struct file * file, struct poll_table_struct *pwait) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0) + int events = pwait ? pwait->key : POLLIN | POLLOUT; +#else /* in 3.4.0 field 'key' was renamed to '_key' */ + int events = pwait ? pwait->_key : POLLIN | POLLOUT; +#endif + return netmap_poll((void *)pwait, events, (void *)file); +} + +static int +linux_netmap_mmap(struct file *f, struct vm_area_struct *vma) +{ + int lut_skip, i, j; + int user_skip = 0; + struct lut_entry *l_entry; + const struct netmap_obj_pool *p[] = { + nm_mem->nm_if_pool, + nm_mem->nm_ring_pool, + nm_mem->nm_buf_pool }; + /* + * vma->vm_start: start of mapping user address space + * vma->vm_end: end of the mapping user address space + */ + + (void)f; /* UNUSED */ + // XXX security checks + + for (i = 0; i < 3; i++) { /* loop through obj_pools */ + /* + * In each pool memory is allocated in clusters + * of size _clustsize , each containing clustentries + * entries. For each object k we already store the + * vtophys malling in lut[k] so we use that, scanning + * the lut[] array in steps of clustentries, + * and we map each cluster (not individual pages, + * it would be overkill). + */ + for (lut_skip = 0, j = 0; j < p[i]->_numclusters; j++) { + l_entry = &p[i]->lut[lut_skip]; + if (remap_pfn_range(vma, vma->vm_start + user_skip, + l_entry->paddr >> PAGE_SHIFT, p[i]->_clustsize, + vma->vm_page_prot)) + return -EAGAIN; // XXX check return value + lut_skip += p[i]->clustentries; + user_skip += p[i]->_clustsize; + } + } + + return 0; +} + +static netdev_tx_t +linux_netmap_start(struct sk_buff *skb, struct net_device *dev) +{ + netmap_start(dev, skb); + return (NETDEV_TX_OK); +} + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) // XXX was 38 +#define LIN_IOCTL_NAME .ioctl +int +linux_netmap_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long data /* arg */) +#else +#define LIN_IOCTL_NAME .unlocked_ioctl +long +linux_netmap_ioctl(struct file *file, u_int cmd, u_long data /* arg */) +#endif +{ + int ret; + struct nmreq nmr; + bzero(&nmr, sizeof(nmr)); + + if (data && copy_from_user(&nmr, (void *)data, sizeof(nmr) ) != 0) + return -EFAULT; + ret = netmap_ioctl(NULL, cmd, (caddr_t)&nmr, 0, (void *)file); + if (data && copy_to_user((void*)data, &nmr, sizeof(nmr) ) != 0) + return -EFAULT; + return -ret; +} + + +static int +netmap_release(struct inode *inode, struct file *file) +{ + (void)inode; /* UNUSED */ + if (file->private_data) + netmap_dtor(file->private_data); + return (0); +} + + +static struct file_operations netmap_fops = { + .mmap = linux_netmap_mmap, + LIN_IOCTL_NAME = linux_netmap_ioctl, + .poll = linux_netmap_poll, + .release = netmap_release, +}; + +static struct miscdevice netmap_cdevsw = { /* same name as FreeBSD */ + MISC_DYNAMIC_MINOR, + "netmap", + &netmap_fops, +}; + +static int netmap_init(void); +static void netmap_fini(void); + +/* Errors have negative values on linux */ +static int linux_netmap_init(void) +{ + return -netmap_init(); +} + +module_init(linux_netmap_init); +module_exit(netmap_fini); +/* export certain symbols to other modules */ +EXPORT_SYMBOL(netmap_attach); // driver attach routines +EXPORT_SYMBOL(netmap_detach); // driver detach routines +EXPORT_SYMBOL(netmap_ring_reinit); // ring init on error +EXPORT_SYMBOL(netmap_buffer_lut); +EXPORT_SYMBOL(netmap_total_buffers); // index check +EXPORT_SYMBOL(netmap_buffer_base); +EXPORT_SYMBOL(netmap_reset); // ring init routines +EXPORT_SYMBOL(netmap_buf_size); +EXPORT_SYMBOL(netmap_rx_irq); // default irq handler +EXPORT_SYMBOL(netmap_no_pendintr); // XXX mitigation - should go away + + +MODULE_AUTHOR("http://info.iet.unipi.it/~luigi/netmap/"); +MODULE_DESCRIPTION("The netmap packet I/O framework"); +MODULE_LICENSE("Dual BSD/GPL"); /* the code here is all BSD. */ + +#else /* __FreeBSD__ */ + static struct cdevsw netmap_cdevsw = { .d_version = D_VERSION, .d_name = "netmap", @@ -1208,7 +1686,345 @@ static struct cdevsw netmap_cdevsw = { .d_ioctl = netmap_ioctl, .d_poll = netmap_poll, }; +#endif /* __FreeBSD__ */ + +#ifdef NM_BRIDGE +/* + *---- support for virtual bridge ----- + */ + +/* ----- FreeBSD if_bridge hash function ------- */ + +/* + * The following hash function is adapted from "Hash Functions" by Bob Jenkins + * ("Algorithm Alley", Dr. Dobbs Journal, September 1997). + * + * http://www.burtleburtle.net/bob/hash/spooky.html + */ +#define mix(a, b, c) \ +do { \ + a -= b; a -= c; a ^= (c >> 13); \ + b -= c; b -= a; b ^= (a << 8); \ + c -= a; c -= b; c ^= (b >> 13); \ + a -= b; a -= c; a ^= (c >> 12); \ + b -= c; b -= a; b ^= (a << 16); \ + c -= a; c -= b; c ^= (b >> 5); \ + a -= b; a -= c; a ^= (c >> 3); \ + b -= c; b -= a; b ^= (a << 10); \ + c -= a; c -= b; c ^= (b >> 15); \ +} while (/*CONSTCOND*/0) + +static __inline uint32_t +nm_bridge_rthash(const uint8_t *addr) +{ + uint32_t a = 0x9e3779b9, b = 0x9e3779b9, c = 0; // hask key + + b += addr[5] << 8; + b += addr[4]; + a += addr[3] << 24; + a += addr[2] << 16; + a += addr[1] << 8; + a += addr[0]; + + mix(a, b, c); +#define BRIDGE_RTHASH_MASK (NM_BDG_HASH-1) + return (c & BRIDGE_RTHASH_MASK); +} + +#undef mix + + +static int +bdg_netmap_reg(struct ifnet *ifp, int onoff) +{ + int i, err = 0; + struct nm_bridge *b = ifp->if_bridge; + + BDG_LOCK(b); + if (onoff) { + /* the interface must be already in the list. + * only need to mark the port as active + */ + ND("should attach %s to the bridge", ifp->if_xname); + for (i=0; i < NM_BDG_MAXPORTS; i++) + if (b->bdg_ports[i] == ifp) + break; + if (i == NM_BDG_MAXPORTS) { + D("no more ports available"); + err = EINVAL; + goto done; + } + ND("setting %s in netmap mode", ifp->if_xname); + ifp->if_capenable |= IFCAP_NETMAP; + NA(ifp)->bdg_port = i; + b->act_ports |= (1<<i); + b->bdg_ports[i] = ifp; + } else { + /* should be in the list, too -- remove from the mask */ + ND("removing %s from netmap mode", ifp->if_xname); + ifp->if_capenable &= ~IFCAP_NETMAP; + i = NA(ifp)->bdg_port; + b->act_ports &= ~(1<<i); + } +done: + BDG_UNLOCK(b); + return err; +} + + +static int +nm_bdg_flush(struct nm_bdg_fwd *ft, int n, struct ifnet *ifp) +{ + int i, ifn; + uint64_t all_dst, dst; + uint32_t sh, dh; + uint64_t mysrc = 1 << NA(ifp)->bdg_port; + uint64_t smac, dmac; + struct netmap_slot *slot; + struct nm_bridge *b = ifp->if_bridge; + + ND("prepare to send %d packets, act_ports 0x%x", n, b->act_ports); + /* only consider valid destinations */ + all_dst = (b->act_ports & ~mysrc); + /* first pass: hash and find destinations */ + for (i = 0; likely(i < n); i++) { + uint8_t *buf = ft[i].buf; + dmac = le64toh(*(uint64_t *)(buf)) & 0xffffffffffff; + smac = le64toh(*(uint64_t *)(buf + 4)); + smac >>= 16; + if (unlikely(netmap_verbose)) { + uint8_t *s = buf+6, *d = buf; + D("%d len %4d %02x:%02x:%02x:%02x:%02x:%02x -> %02x:%02x:%02x:%02x:%02x:%02x", + i, + ft[i].len, + s[0], s[1], s[2], s[3], s[4], s[5], + d[0], d[1], d[2], d[3], d[4], d[5]); + } + /* + * The hash is somewhat expensive, there might be some + * worthwhile optimizations here. + */ + if ((buf[6] & 1) == 0) { /* valid src */ + uint8_t *s = buf+6; + sh = nm_bridge_rthash(buf+6); // XXX hash of source + /* update source port forwarding entry */ + b->ht[sh].mac = smac; /* XXX expire ? */ + b->ht[sh].ports = mysrc; + if (netmap_verbose) + D("src %02x:%02x:%02x:%02x:%02x:%02x on port %d", + s[0], s[1], s[2], s[3], s[4], s[5], NA(ifp)->bdg_port); + } + dst = 0; + if ( (buf[0] & 1) == 0) { /* unicast */ + uint8_t *d = buf; + dh = nm_bridge_rthash(buf); // XXX hash of dst + if (b->ht[dh].mac == dmac) { /* found dst */ + dst = b->ht[dh].ports; + if (netmap_verbose) + D("dst %02x:%02x:%02x:%02x:%02x:%02x to port %x", + d[0], d[1], d[2], d[3], d[4], d[5], (uint32_t)(dst >> 16)); + } + } + if (dst == 0) + dst = all_dst; + dst &= all_dst; /* only consider valid ports */ + if (unlikely(netmap_verbose)) + D("pkt goes to ports 0x%x", (uint32_t)dst); + ft[i].dst = dst; + } + + /* second pass, scan interfaces and forward */ + all_dst = (b->act_ports & ~mysrc); + for (ifn = 0; all_dst; ifn++) { + struct ifnet *dst_ifp = b->bdg_ports[ifn]; + struct netmap_adapter *na; + struct netmap_kring *kring; + struct netmap_ring *ring; + int j, lim, sent, locked; + + if (!dst_ifp) + continue; + ND("scan port %d %s", ifn, dst_ifp->if_xname); + dst = 1 << ifn; + if ((dst & all_dst) == 0) /* skip if not set */ + continue; + all_dst &= ~dst; /* clear current node */ + na = NA(dst_ifp); + + ring = NULL; + kring = NULL; + lim = sent = locked = 0; + /* inside, scan slots */ + for (i = 0; likely(i < n); i++) { + if ((ft[i].dst & dst) == 0) + continue; /* not here */ + if (!locked) { + kring = &na->rx_rings[0]; + ring = kring->ring; + lim = kring->nkr_num_slots - 1; + na->nm_lock(dst_ifp, NETMAP_RX_LOCK, 0); + locked = 1; + } + if (unlikely(kring->nr_hwavail >= lim)) { + if (netmap_verbose) + D("rx ring full on %s", ifp->if_xname); + break; + } + j = kring->nr_hwcur + kring->nr_hwavail; + if (j > lim) + j -= kring->nkr_num_slots; + slot = &ring->slot[j]; + ND("send %d %d bytes at %s:%d", i, ft[i].len, dst_ifp->if_xname, j); + pkt_copy(ft[i].buf, NMB(slot), ft[i].len); + slot->len = ft[i].len; + kring->nr_hwavail++; + sent++; + } + if (locked) { + ND("sent %d on %s", sent, dst_ifp->if_xname); + if (sent) + selwakeuppri(&kring->si, PI_NET); + na->nm_lock(dst_ifp, NETMAP_RX_UNLOCK, 0); + } + } + return 0; +} + +/* + * main dispatch routine + */ +static int +bdg_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock) +{ + struct netmap_adapter *na = NA(ifp); + struct netmap_kring *kring = &na->tx_rings[ring_nr]; + struct netmap_ring *ring = kring->ring; + int i, j, k, lim = kring->nkr_num_slots - 1; + struct nm_bdg_fwd *ft = (struct nm_bdg_fwd *)(ifp + 1); + int ft_i; /* position in the forwarding table */ + + k = ring->cur; + if (k > lim) + return netmap_ring_reinit(kring); + if (do_lock) + na->nm_lock(ifp, NETMAP_TX_LOCK, ring_nr); + + if (netmap_bridge <= 0) { /* testing only */ + j = k; // used all + goto done; + } + if (netmap_bridge > NM_BDG_BATCH) + netmap_bridge = NM_BDG_BATCH; + + ft_i = 0; /* start from 0 */ + for (j = kring->nr_hwcur; likely(j != k); j = unlikely(j == lim) ? 0 : j+1) { + struct netmap_slot *slot = &ring->slot[j]; + int len = ft[ft_i].len = slot->len; + char *buf = ft[ft_i].buf = NMB(slot); + + prefetch(buf); + if (unlikely(len < 14)) + continue; + if (unlikely(++ft_i == netmap_bridge)) + ft_i = nm_bdg_flush(ft, ft_i, ifp); + } + if (ft_i) + ft_i = nm_bdg_flush(ft, ft_i, ifp); + /* count how many packets we sent */ + i = k - j; + if (i < 0) + i += kring->nkr_num_slots; + kring->nr_hwavail = kring->nkr_num_slots - 1 - i; + if (j != k) + D("early break at %d/ %d, avail %d", j, k, kring->nr_hwavail); + +done: + kring->nr_hwcur = j; + ring->avail = kring->nr_hwavail; + if (do_lock) + na->nm_lock(ifp, NETMAP_TX_UNLOCK, ring_nr); + + if (netmap_verbose) + D("%s ring %d lock %d", ifp->if_xname, ring_nr, do_lock); + return 0; +} + +static int +bdg_netmap_rxsync(struct ifnet *ifp, u_int ring_nr, int do_lock) +{ + struct netmap_adapter *na = NA(ifp); + struct netmap_kring *kring = &na->rx_rings[ring_nr]; + struct netmap_ring *ring = kring->ring; + u_int j, n, lim = kring->nkr_num_slots - 1; + u_int k = ring->cur, resvd = ring->reserved; + + ND("%s ring %d lock %d avail %d", + ifp->if_xname, ring_nr, do_lock, kring->nr_hwavail); + + if (k > lim) + return netmap_ring_reinit(kring); + if (do_lock) + na->nm_lock(ifp, NETMAP_RX_LOCK, ring_nr); + + /* skip past packets that userspace has released */ + j = kring->nr_hwcur; /* netmap ring index */ + if (resvd > 0) { + if (resvd + ring->avail >= lim + 1) { + D("XXX invalid reserve/avail %d %d", resvd, ring->avail); + ring->reserved = resvd = 0; // XXX panic... + } + k = (k >= resvd) ? k - resvd : k + lim + 1 - resvd; + } + + if (j != k) { /* userspace has released some packets. */ + n = k - j; + if (n < 0) + n += kring->nkr_num_slots; + ND("userspace releases %d packets", n); + for (n = 0; likely(j != k); n++) { + struct netmap_slot *slot = &ring->slot[j]; + void *addr = NMB(slot); + + if (addr == netmap_buffer_base) { /* bad buf */ + if (do_lock) + na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr); + return netmap_ring_reinit(kring); + } + /* decrease refcount for buffer */ + + slot->flags &= ~NS_BUF_CHANGED; + j = unlikely(j == lim) ? 0 : j + 1; + } + kring->nr_hwavail -= n; + kring->nr_hwcur = k; + } + /* tell userspace that there are new packets */ + ring->avail = kring->nr_hwavail - resvd; + if (do_lock) + na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr); + return 0; +} + +static void +bdg_netmap_attach(struct ifnet *ifp) +{ + struct netmap_adapter na; + + ND("attaching virtual bridge"); + bzero(&na, sizeof(na)); + + na.ifp = ifp; + na.separate_locks = 1; + na.num_tx_desc = NM_BRIDGE_RINGSIZE; + na.num_rx_desc = NM_BRIDGE_RINGSIZE; + na.nm_txsync = bdg_netmap_txsync; + na.nm_rxsync = bdg_netmap_rxsync; + na.nm_register = bdg_netmap_reg; + netmap_attach(&na, 1); +} + +#endif /* NM_BRIDGE */ static struct cdev *netmap_dev; /* /dev/netmap character device. */ @@ -1228,13 +2044,21 @@ netmap_init(void) error = netmap_memory_init(); if (error != 0) { - printf("netmap: unable to initialize the memory allocator."); + printf("netmap: unable to initialize the memory allocator.\n"); return (error); } printf("netmap: loaded module with %d Mbytes\n", (int)(nm_mem->nm_totalsize >> 20)); netmap_dev = make_dev(&netmap_cdevsw, 0, UID_ROOT, GID_WHEEL, 0660, "netmap"); + +#ifdef NM_BRIDGE + { + int i; + for (i = 0; i < NM_BRIDGES; i++) + mtx_init(&nm_bridges[i].bdg_lock, "bdg lock", "bdg_lock", MTX_DEF); + } +#endif return (error); } @@ -1253,6 +2077,7 @@ netmap_fini(void) } +#ifdef __FreeBSD__ /* * Kernel entry point. * @@ -1284,3 +2109,4 @@ netmap_loader(__unused struct module *module, int event, __unused void *arg) DEV_MODULE(netmap, netmap_loader, NULL); +#endif /* __FreeBSD__ */ diff --git a/sys/dev/netmap/netmap_kern.h b/sys/dev/netmap/netmap_kern.h index a1ac925..ebd4f71 100644 --- a/sys/dev/netmap/netmap_kern.h +++ b/sys/dev/netmap/netmap_kern.h @@ -25,7 +25,7 @@ /* * $FreeBSD$ - * $Id: netmap_kern.h 10602 2012-02-21 16:47:55Z luigi $ + * $Id: netmap_kern.h 11343 2012-07-03 09:08:38Z luigi $ * * The header contains the definitions of constants and function * prototypes used only in kernelspace. @@ -37,6 +37,9 @@ #define NETMAP_MEM2 // use the new memory allocator #if defined(__FreeBSD__) +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) + #define NM_LOCK_T struct mtx #define NM_SELINFO_T struct selinfo #define MBUF_LEN(m) ((m)->m_pkthdr.len) @@ -46,12 +49,35 @@ #define NM_SELINFO_T wait_queue_head_t #define MBUF_LEN(m) ((m)->len) #define NM_SEND_UP(ifp, m) netif_rx(m) + +#ifndef DEV_NETMAP +#define DEV_NETMAP +#endif + +/* + * IFCAP_NETMAP goes into net_device's flags (if_capabilities) + * and priv_flags (if_capenable). The latter used to be 16 bits + * up to linux 2.6.36, so we need to use a 16 bit value on older + * platforms and tolerate the clash with IFF_DYNAMIC and IFF_BRIDGE_PORT. + * For the 32-bit value, 0x100000 (bit 20) has no clashes up to 3.3.1 + */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) +#define IFCAP_NETMAP 0x8000 #else -#error unsupported platform +#define IFCAP_NETMAP 0x100000 #endif -#ifdef MALLOC_DECLARE -MALLOC_DECLARE(M_NETMAP); +#elif defined (__APPLE__) +#warning apple support is experimental +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#define NM_LOCK_T IOLock * +#define NM_SELINFO_T struct selinfo +#define MBUF_LEN(m) ((m)->m_pkthdr.len) +#define NM_SEND_UP(ifp, m) ((ifp)->if_input)(ifp, m) + +#else +#error unsupported platform #endif #define ND(format, ...) @@ -150,8 +176,11 @@ struct netmap_adapter { void (*nm_lock)(struct ifnet *, int what, u_int ringid); int (*nm_txsync)(struct ifnet *, u_int ring, int lock); int (*nm_rxsync)(struct ifnet *, u_int ring, int lock); + + int bdg_port; #ifdef linux struct net_device_ops nm_ndo; + int if_refcount; // XXX additions for bridge #endif /* linux */ }; @@ -212,7 +241,7 @@ struct netmap_slot *netmap_reset(struct netmap_adapter *na, enum txrx tx, int n, u_int new_cur); int netmap_ring_reinit(struct netmap_kring *); -extern int netmap_buf_size; +extern u_int netmap_buf_size; #define NETMAP_BUF_SIZE netmap_buf_size extern int netmap_mitigate; extern int netmap_no_pendintr; @@ -240,6 +269,7 @@ enum { /* verbose flags */ #define NA(_ifp) ((struct netmap_adapter *)WNA(_ifp)) +#ifdef __FreeBSD__ /* Callback invoked by the dma machinery after a successfull dmamap_load */ static void netmap_dmamap_cb(__unused void *arg, __unused bus_dma_segment_t * segs, __unused int nseg, __unused int error) @@ -267,6 +297,48 @@ netmap_reload_map(bus_dma_tag_t tag, bus_dmamap_t map, void *buf) netmap_dmamap_cb, NULL, BUS_DMA_NOWAIT); } } +#else /* linux */ + +/* + * XXX How do we redefine these functions: + * + * on linux we need + * dma_map_single(&pdev->dev, virt_addr, len, direction) + * dma_unmap_single(&adapter->pdev->dev, phys_addr, len, direction + * The len can be implicit (on netmap it is NETMAP_BUF_SIZE) + * unfortunately the direction is not, so we need to change + * something to have a cross API + */ +#define netmap_load_map(_t, _m, _b) +#define netmap_reload_map(_t, _m, _b) +#if 0 + struct e1000_buffer *buffer_info = &tx_ring->buffer_info[l]; + /* set time_stamp *before* dma to help avoid a possible race */ + buffer_info->time_stamp = jiffies; + buffer_info->mapped_as_page = false; + buffer_info->length = len; + //buffer_info->next_to_watch = l; + /* reload dma map */ + dma_unmap_single(&adapter->pdev->dev, buffer_info->dma, + NETMAP_BUF_SIZE, DMA_TO_DEVICE); + buffer_info->dma = dma_map_single(&adapter->pdev->dev, + addr, NETMAP_BUF_SIZE, DMA_TO_DEVICE); + + if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) { + D("dma mapping error"); + /* goto dma_error; See e1000_put_txbuf() */ + /* XXX reset */ + } + tx_desc->buffer_addr = htole64(buffer_info->dma); //XXX + +#endif + +/* + * The bus_dmamap_sync() can be one of wmb() or rmb() depending on direction. + */ +#define bus_dmamap_sync(_a, _b, _c) + +#endif /* linux */ /* * functions to map NIC to KRING indexes (n2k) and vice versa (k2n) @@ -322,7 +394,7 @@ static inline void * NMB(struct netmap_slot *slot) { uint32_t i = slot->buf_idx; - return (i >= netmap_total_buffers) ? NMB_VA(0) : NMB_VA(i); + return (unlikely(i >= netmap_total_buffers)) ? NMB_VA(0) : NMB_VA(i); } static inline void * @@ -341,4 +413,6 @@ PNMB(struct netmap_slot *slot, uint64_t *pp) /* default functions to handle rx/tx interrupts */ int netmap_rx_irq(struct ifnet *, int, int *); #define netmap_tx_irq(_n, _q) netmap_rx_irq(_n, _q, NULL) + +extern int netmap_copy; #endif /* _NET_NETMAP_KERN_H_ */ diff --git a/sys/dev/netmap/netmap_mem2.c b/sys/dev/netmap/netmap_mem2.c index 76ef62e..03a665a 100644 --- a/sys/dev/netmap/netmap_mem2.c +++ b/sys/dev/netmap/netmap_mem2.c @@ -25,7 +25,7 @@ /* * $FreeBSD$ - * $Id: netmap_mem2.c 10830 2012-03-22 18:06:01Z luigi $ + * $Id: netmap_mem2.c 11445 2012-07-30 10:49:07Z luigi $ * * New memory allocator for netmap */ @@ -300,12 +300,13 @@ netmap_obj_free_va(struct netmap_obj_pool *p, void *vaddr) static void -netmap_new_bufs(struct netmap_if *nifp __unused, +netmap_new_bufs(struct netmap_if *nifp, struct netmap_slot *slot, u_int n) { struct netmap_obj_pool *p = nm_mem->nm_buf_pool; uint32_t i = 0; /* slot counter */ + (void)nifp; /* UNUSED */ for (i = 0; i < n; i++) { void *vaddr = netmap_buf_malloc(); if (vaddr == NULL) { @@ -679,11 +680,11 @@ netmap_if_new(const char *ifname, struct netmap_adapter *na) #ifdef linux // XXX initialize the selrecord structs. for (i = 0; i < ntx; i++) - init_waitqueue_head(&na->rx_rings[i].si); - for (i = 0; i < nrx; i++) init_waitqueue_head(&na->tx_rings[i].si); - init_waitqueue_head(&na->rx_si); + for (i = 0; i < nrx; i++) + init_waitqueue_head(&na->rx_rings[i].si); init_waitqueue_head(&na->tx_si); + init_waitqueue_head(&na->rx_si); #endif final: /* diff --git a/sys/dev/pccbb/pccbb_pci.c b/sys/dev/pccbb/pccbb_pci.c index eca5ed7..542dea6 100644 --- a/sys/dev/pccbb/pccbb_pci.c +++ b/sys/dev/pccbb/pccbb_pci.c @@ -465,6 +465,11 @@ cbb_chipinit(struct cbb_softc *sc) if (pci_read_config(sc->dev, PCIR_LATTIMER, 1) < 0x20) pci_write_config(sc->dev, PCIR_LATTIMER, 0x20, 1); + /* Restore bus configuration */ + pci_write_config(sc->dev, PCIR_PRIBUS_2, sc->pribus, 1); + pci_write_config(sc->dev, PCIR_SECBUS_2, sc->secbus, 1); + pci_write_config(sc->dev, PCIR_SUBBUS_2, sc->subbus, 1); + /* Enable memory access */ PCI_MASK_CONFIG(sc->dev, PCIR_COMMAND, | PCIM_CMD_MEMEN diff --git a/sys/dev/puc/puc_cfg.h b/sys/dev/puc/puc_cfg.h index f4969f64..4c2c65e 100644 --- a/sys/dev/puc/puc_cfg.h +++ b/sys/dev/puc/puc_cfg.h @@ -79,7 +79,7 @@ struct puc_cfg { int8_t ports; int8_t rid; /* Rid of first port */ int8_t d_rid; /* Delta rid of next ports */ - int16_t d_ofs; /* Delta offset of next ports */ + int8_t d_ofs; /* Delta offset of next ports */ puc_config_f *config_function; }; diff --git a/sys/dev/puc/pucdata.c b/sys/dev/puc/pucdata.c index 4040a2f..54577ab 100644 --- a/sys/dev/puc/pucdata.c +++ b/sys/dev/puc/pucdata.c @@ -510,13 +510,15 @@ const struct puc_cfg puc_pci_devices[] = { { 0x1393, 0x1024, 0xffff, 0, "Moxa Technologies, Smartio CP-102E/PCIe", DEFAULT_RCLK * 8, - PUC_PORT_2S, 0x14, 0, 0x200 + PUC_PORT_2S, 0x14, 0, -1, + .config_function = puc_config_moxa }, { 0x1393, 0x1025, 0xffff, 0, "Moxa Technologies, Smartio CP-102EL/PCIe", DEFAULT_RCLK * 8, - PUC_PORT_2S, 0x14, 0, 0x200, + PUC_PORT_2S, 0x14, 0, -1, + .config_function = puc_config_moxa }, { 0x1393, 0x1040, 0xffff, 0, @@ -572,7 +574,8 @@ const struct puc_cfg puc_pci_devices[] = { { 0x1393, 0x1182, 0xffff, 0, "Moxa Technologies, Smartio CP-118EL-A/PCIe", DEFAULT_RCLK * 8, - PUC_PORT_8S, 0x14, 0, 0x200, + PUC_PORT_8S, 0x14, 0, -1, + .config_function = puc_config_moxa }, { 0x1393, 0x1680, 0xffff, 0, @@ -596,7 +599,8 @@ const struct puc_cfg puc_pci_devices[] = { { 0x1393, 0x1683, 0xffff, 0, "Moxa Technologies, Smartio CP-168EL-A/PCIe", DEFAULT_RCLK * 8, - PUC_PORT_8S, 0x14, 0, 0x200, + PUC_PORT_8S, 0x14, 0, -1, + .config_function = puc_config_moxa }, { 0x13a8, 0x0152, 0xffff, 0, @@ -1159,7 +1163,12 @@ puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port, intptr_t *res) { if (cmd == PUC_CFG_GET_OFS) { - *res = ((port == 3) ? 7 : port) * 0x200; + const struct puc_cfg *cfg = sc->sc_cfg; + + if (port == 3 && (cfg->device == 0x1045 || cfg->device == 0x1144)) + port = 7; + *res = port * 0x200; + return 0; } return (ENXIO); diff --git a/sys/dev/sdhci/sdhci.c b/sys/dev/sdhci/sdhci.c index 0bbf608..0c78dba 100644 --- a/sys/dev/sdhci/sdhci.c +++ b/sys/dev/sdhci/sdhci.c @@ -364,7 +364,7 @@ sdhci_lower_frequency(device_t dev) /* * Some SD/MMC cards don't work with the default base - * clock frequency of 200MHz. Lower it to 50Hz. + * clock frequency of 200MHz. Lower it to 50MHz. */ pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x01, 1); pci_write_config(dev, SDHC_PCI_BASE_FREQ, 50, 1); diff --git a/sys/dev/spibus/spi.h b/sys/dev/spibus/spi.h index 663f5ff..4f89e94 100644 --- a/sys/dev/spibus/spi.h +++ b/sys/dev/spibus/spi.h @@ -1,6 +1,7 @@ /* $FreeBSD$ */ struct spi_command { + int cs; void *tx_cmd; uint32_t tx_cmd_sz; void *rx_cmd; @@ -10,3 +11,5 @@ struct spi_command { void *rx_data; uint32_t rx_data_sz; }; + +#define SPI_CHIP_SELECT_HIGH 0x1 /* Chip select high (else low) */ diff --git a/sys/dev/spibus/spibus.c b/sys/dev/spibus/spibus.c index 43b4e7e..0f8e359 100644 --- a/sys/dev/spibus/spibus.c +++ b/sys/dev/spibus/spibus.c @@ -158,6 +158,9 @@ spibus_hinted_child(device_t bus, const char *dname, int dunit) static int spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd) { + /* Maybe set flags too? spi mode? */ + spibus_get_cs(dev, &cmd->cs); + return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd)); } diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c index 8ac59b9..3c8be40 100644 --- a/sys/dev/sym/sym_hipd.c +++ b/sys/dev/sym/sym_hipd.c @@ -8537,8 +8537,8 @@ sym_pci_attach(device_t dev) */ if (bus_dma_tag_create(np->bus_dmat, 1, SYM_CONF_DMA_BOUNDARY, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - BUS_SPACE_MAXSIZE, SYM_CONF_MAX_SG, SYM_CONF_DMA_BOUNDARY, - BUS_DMA_ALLOCNOW, busdma_lock_mutex, &np->mtx, &np->data_dmat)) { + BUS_SPACE_MAXSIZE_32BIT, SYM_CONF_MAX_SG, SYM_CONF_DMA_BOUNDARY, + 0, busdma_lock_mutex, &np->mtx, &np->data_dmat)) { device_printf(dev, "failed to create DMA tag.\n"); goto attach_failed; } diff --git a/sys/dev/usb/controller/at91dci_atmelarm.c b/sys/dev/usb/controller/at91dci_atmelarm.c index da9ba36..468644c 100644 --- a/sys/dev/usb/controller/at91dci_atmelarm.c +++ b/sys/dev/usb/controller/at91dci_atmelarm.c @@ -61,12 +61,12 @@ __FBSDID("$FreeBSD$"); #include <arm/at91/at91_pmcvar.h> #include <arm/at91/at91rm92reg.h> -#include <arm/at91/at91_pio_rm9200.h> +#include <arm/at91/at91_pioreg.h> #include <arm/at91/at91_piovar.h> #define MEM_RID 0 -/* Pin Definitions - do they belong here or somewhere else ? */ +/* Pin Definitions - do they belong here or somewhere else ? -- YES! */ #define VBUS_MASK AT91C_PIO_PB24 #define VBUS_BASE AT91RM92_PIOB_BASE diff --git a/sys/dev/usb/controller/ohci_atmelarm.c b/sys/dev/usb/controller/ohci_atmelarm.c index 643b4d1..4b271c3 100644 --- a/sys/dev/usb/controller/ohci_atmelarm.c +++ b/sys/dev/usb/controller/ohci_atmelarm.c @@ -76,6 +76,7 @@ struct at91_ohci_softc { static int ohci_atmelarm_probe(device_t dev) { + device_set_desc(dev, "AT91 integrated OHCI controller"); return (BUS_PROBE_DEFAULT); } diff --git a/sys/dev/usb/controller/xhci_pci.c b/sys/dev/usb/controller/xhci_pci.c index c9e067e..db74b1c 100644 --- a/sys/dev/usb/controller/xhci_pci.c +++ b/sys/dev/usb/controller/xhci_pci.c @@ -101,6 +101,8 @@ xhci_pci_match(device_t self) case 0x1e318086: return ("Intel Panther Point USB 3.0 controller"); + case 0x8c318086: + return ("Intel Lynx Point USB 3.0 controller"); default: break; @@ -245,6 +247,7 @@ static int xhci_pci_take_controller(device_t self) { struct xhci_softc *sc = device_get_softc(self); + uint32_t device_id = pci_get_devid(self); uint32_t cparams; uint32_t eecp; uint32_t eec; @@ -285,5 +288,13 @@ xhci_pci_take_controller(device_t self) usb_pause_mtx(NULL, hz / 100); /* wait 10ms */ } } + + /* On Intel chipsets reroute ports from EHCI to XHCI controller. */ + if (device_id == 0x1e318086 /* Panther Point */ || + device_id == 0x8c318086 /* Lynx Point */) { + pci_write_config(self, PCI_XHCI_INTEL_USB3_PSSEN, 0xffffffff, 4); + pci_write_config(self, PCI_XHCI_INTEL_XUSB2PR, 0xffffffff, 4); + } + return (0); } diff --git a/sys/dev/usb/controller/xhcireg.h b/sys/dev/usb/controller/xhcireg.h index b14dabc..a130f65 100644 --- a/sys/dev/usb/controller/xhcireg.h +++ b/sys/dev/usb/controller/xhcireg.h @@ -34,6 +34,9 @@ #define PCI_USB_REV_3_0 0x30 /* USB 3.0 */ #define PCI_XHCI_FLADJ 0x61 /* RW frame length adjust */ +#define PCI_XHCI_INTEL_XUSB2PR 0xD0 /* Intel USB2 Port Routing */ +#define PCI_XHCI_INTEL_USB3_PSSEN 0xD8 /* Intel USB3 Port SuperSpeed Enable */ + /* XHCI capability registers */ #define XHCI_CAPLENGTH 0x00 /* RO capability */ #define XHCI_RESERVED 0x01 /* Reserved */ diff --git a/sys/dev/usb/net/if_udav.c b/sys/dev/usb/net/if_udav.c index 2507846..c6f0811 100644 --- a/sys/dev/usb/net/if_udav.c +++ b/sys/dev/usb/net/if_udav.c @@ -169,7 +169,7 @@ MODULE_DEPEND(udav, ether, 1, 1, 1); MODULE_DEPEND(udav, miibus, 1, 1, 1); MODULE_VERSION(udav, 1); -static const struct usb_ether_methods udav_ue_methods = { +static struct usb_ether_methods udav_ue_methods = { .ue_attach_post = udav_attach_post, .ue_start = udav_start, .ue_init = udav_init, @@ -206,7 +206,8 @@ static const STRUCT_USB_HOST_ID udav_devs[] = { {USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515, 0)}, /* Kontron AG USB Ethernet */ {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_DM9601, 0)}, - {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082, 0)}, + {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082, + UDAV_FLAG_NO_PHY)}, }; static void @@ -259,6 +260,16 @@ udav_attach(device_t dev) goto detach; } + /* + * The JP1082 has an unusable PHY and provides no link information. + */ + if (sc->sc_flags & UDAV_FLAG_NO_PHY) { + udav_ue_methods.ue_tick = NULL; + udav_ue_methods.ue_mii_upd = NULL; + udav_ue_methods.ue_mii_sts = NULL; + sc->sc_flags |= UDAV_FLAG_LINK; + } + ue->ue_sc = sc; ue->ue_dev = dev; ue->ue_udev = uaa->device; @@ -712,7 +723,8 @@ udav_stop(struct usb_ether *ue) UDAV_LOCK_ASSERT(sc, MA_OWNED); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; - sc->sc_flags &= ~UDAV_FLAG_LINK; + if (!(sc->sc_flags & UDAV_FLAG_NO_PHY)) + sc->sc_flags &= ~UDAV_FLAG_LINK; /* * stop all the transfers, if not already stopped: diff --git a/sys/dev/usb/net/if_udavreg.h b/sys/dev/usb/net/if_udavreg.h index 82715e8..7c35829 100644 --- a/sys/dev/usb/net/if_udavreg.h +++ b/sys/dev/usb/net/if_udavreg.h @@ -159,6 +159,7 @@ struct udav_softc { int sc_flags; #define UDAV_FLAG_LINK 0x0001 #define UDAV_FLAG_EXT_PHY 0x0040 +#define UDAV_FLAG_NO_PHY 0x0080 }; #define UDAV_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c index 41f5002..b269f60 100644 --- a/sys/dev/usb/quirk/usb_quirk.c +++ b/sys/dev/usb/quirk/usb_quirk.c @@ -123,6 +123,7 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = { USB_QUIRK(METAGEEK2, WISPYDBX, 0x0000, 0xffff, UQ_KBD_IGNORE, UQ_HID_IGNORE), USB_QUIRK(TENX, UAUDIO0, 0x0101, 0x0101, UQ_AUDIO_SWAP_LR), /* MS keyboards do weird things */ + USB_QUIRK(MICROSOFT, NATURAL4000, 0x0000, 0xFFFF, UQ_KBD_BOOTPROTO), USB_QUIRK(MICROSOFT, WLINTELLIMOUSE, 0x0000, 0xffff, UQ_MS_LEADING_BYTE), /* umodem(4) device quirks */ USB_QUIRK(METRICOM, RICOCHET_GS, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA), diff --git a/sys/dev/usb/serial/u3g.c b/sys/dev/usb/serial/u3g.c index cb39ba0..c524531 100644 --- a/sys/dev/usb/serial/u3g.c +++ b/sys/dev/usb/serial/u3g.c @@ -282,9 +282,12 @@ static const STRUCT_USB_HOST_ID u3g_devs[] = { U3G_DEV(HUAWEI, E143F, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E173, 0), U3G_DEV(HUAWEI, E173_INIT, U3GINIT_HUAWEISCSI), + U3G_DEV(HUAWEI, E3131, 0), + U3G_DEV(HUAWEI, E3131_INIT, U3GINIT_HUAWEISCSI), U3G_DEV(HUAWEI, E180V, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E220, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E220BIS, U3GINIT_HUAWEI), + U3G_DEV(HUAWEI, E392, U3GINIT_HUAWEISCSI), U3G_DEV(HUAWEI, MOBILE, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E1752, U3GINIT_HUAWEISCSI), U3G_DEV(HUAWEI, E1820, U3GINIT_HUAWEISCSI), @@ -357,6 +360,8 @@ static const STRUCT_USB_HOST_ID u3g_devs[] = { U3G_DEV(QUALCOMM2, MF330, 0), U3G_DEV(QUALCOMM2, SIM5218, 0), U3G_DEV(QUALCOMM2, VW110L, U3GINIT_SCSIEJECT), + U3G_DEV(QUALCOMM2, GOBI2000_QDL, 0), + U3G_DEV(QUALCOMM2, GOBI2000, 0), U3G_DEV(QUALCOMMINC, AC2726, 0), U3G_DEV(QUALCOMMINC, AC8700, 0), U3G_DEV(QUALCOMMINC, AC8710, 0), diff --git a/sys/dev/usb/serial/uplcom.c b/sys/dev/usb/serial/uplcom.c index 37a91ae..c08a18e 100644 --- a/sys/dev/usb/serial/uplcom.c +++ b/sys/dev/usb/serial/uplcom.c @@ -279,6 +279,7 @@ static const STRUCT_USB_HOST_ID uplcom_devs[] = { UPLCOM_DEV(PROLIFIC, DCU11), /* DCU-11 Phone Cable */ UPLCOM_DEV(PROLIFIC, HCR331), /* HCR331 Card Reader */ UPLCOM_DEV(PROLIFIC, MICROMAX_610U), /* Micromax 610U modem */ + UPLCOM_DEV(PROLIFIC, MOTOROLA), /* Motorola cable */ UPLCOM_DEV(PROLIFIC, PHAROS), /* Prolific Pharos */ UPLCOM_DEV(PROLIFIC, PL2303), /* Generic adapter */ UPLCOM_DEV(PROLIFIC, RSAQ2), /* I/O DATA USB-RSAQ2 */ diff --git a/sys/dev/usb/serial/uslcom.c b/sys/dev/usb/serial/uslcom.c index 848f2d5..9a67b79 100644 --- a/sys/dev/usb/serial/uslcom.c +++ b/sys/dev/usb/serial/uslcom.c @@ -70,12 +70,13 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, debug, CTLFLAG_RW, /* Request codes */ #define USLCOM_UART 0x00 -#define USLCOM_BAUD_RATE 0x01 +#define USLCOM_SET_BAUD_DIV 0x01 #define USLCOM_DATA 0x03 #define USLCOM_BREAK 0x05 #define USLCOM_CTRL 0x07 #define USLCOM_RCTRL 0x08 #define USLCOM_SET_FLOWCTRL 0x13 +#define USLCOM_SET_BAUD_RATE 0x1e #define USLCOM_VENDOR_SPECIFIC 0xff /* USLCOM_UART values */ @@ -92,8 +93,8 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, debug, CTLFLAG_RW, #define USLCOM_CTRL_RI 0x0040 #define USLCOM_CTRL_DCD 0x0080 -/* USLCOM_BAUD_RATE values */ -#define USLCOM_BAUD_REF 0x384000 +/* USLCOM_SET_BAUD_DIV values */ +#define USLCOM_BAUD_REF 3686400 /* 3.6864 MHz */ /* USLCOM_DATA values */ #define USLCOM_STOP_BITS_1 0x00 @@ -213,7 +214,13 @@ static struct ucom_callback uslcom_callback = { static const STRUCT_USB_HOST_ID uslcom_devs[] = { #define USLCOM_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) } USLCOM_DEV(BALTECH, CARDREADER), + USLCOM_DEV(CLIPSAL, 5000CT2), + USLCOM_DEV(CLIPSAL, 5500PACA), USLCOM_DEV(CLIPSAL, 5500PCU), + USLCOM_DEV(CLIPSAL, 560884), + USLCOM_DEV(CLIPSAL, 5800PC), + USLCOM_DEV(CLIPSAL, C5000CT2), + USLCOM_DEV(CLIPSAL, L51xx), USLCOM_DEV(DATAAPEX, MULTICOM), USLCOM_DEV(DELL, DW700), USLCOM_DEV(DIGIANSWER, ZIGBEE802154), @@ -221,17 +228,27 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = { USLCOM_DEV(DYNASTREAM, ANTDEVBOARD2), USLCOM_DEV(DYNASTREAM, ANT2USB), USLCOM_DEV(ELV, USBI2C), + USLCOM_DEV(FESTO, CMSP), + USLCOM_DEV(FESTO, CPX_USB), USLCOM_DEV(FOXCONN, PIRELLI_DP_L10), USLCOM_DEV(FOXCONN, TCOM_TC_300), USLCOM_DEV(GEMALTO, PROXPU), USLCOM_DEV(JABLOTRON, PC60B), + USLCOM_DEV(KAMSTRUP, OPTICALEYE), + USLCOM_DEV(KAMSTRUP, MBUS_250D), + USLCOM_DEV(LINKINSTRUMENTS, MSO19), + USLCOM_DEV(LINKINSTRUMENTS, MSO28), + USLCOM_DEV(LINKINSTRUMENTS, MSO28_2), USLCOM_DEV(MEI, CASHFLOW_SC), USLCOM_DEV(MEI, S2000), - USLCOM_DEV(JABLOTRON, PC60B), USLCOM_DEV(OWEN, AC4), USLCOM_DEV(PHILIPS, ACE1001), USLCOM_DEV(PLX, CA42), USLCOM_DEV(RENESAS, RX610), + USLCOM_DEV(SILABS, AC_SERV_CAN), + USLCOM_DEV(SILABS, AC_SERV_CIS), + USLCOM_DEV(SILABS, AC_SERV_IBUS), + USLCOM_DEV(SILABS, AC_SERV_OBD), USLCOM_DEV(SILABS, AEROCOMM), USLCOM_DEV(SILABS, AMBER_AMB2560), USLCOM_DEV(SILABS, ARGUSISP), @@ -247,16 +264,21 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = { USLCOM_DEV(SILABS, C2_EDGE_MODEM), USLCOM_DEV(SILABS, CP2102), USLCOM_DEV(SILABS, CP210X_2), + USLCOM_DEV(SILABS, CP210X_3), + USLCOM_DEV(SILABS, CP210X_4), USLCOM_DEV(SILABS, CRUMB128), USLCOM_DEV(SILABS, CYGNAL), USLCOM_DEV(SILABS, CYGNAL_DEBUG), USLCOM_DEV(SILABS, CYGNAL_GPS), USLCOM_DEV(SILABS, DEGREE), + USLCOM_DEV(SILABS, DEKTEK_DTAPLUS), USLCOM_DEV(SILABS, EMS_C1007), + USLCOM_DEV(SILABS, HAMLINKUSB), USLCOM_DEV(SILABS, HELICOM), USLCOM_DEV(SILABS, IMS_USB_RS422), USLCOM_DEV(SILABS, INFINITY_MIC), USLCOM_DEV(SILABS, INSYS_MODEM), + USLCOM_DEV(SILABS, IRZ_SG10), USLCOM_DEV(SILABS, KYOCERA_GPS), USLCOM_DEV(SILABS, LIPOWSKY_HARP), USLCOM_DEV(SILABS, LIPOWSKY_JTAG), @@ -264,12 +286,14 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = { USLCOM_DEV(SILABS, MC35PU), USLCOM_DEV(SILABS, MJS_TOSLINK), USLCOM_DEV(SILABS, MSD_DASHHAWK), + USLCOM_DEV(SILABS, MULTIPLEX_RC), + USLCOM_DEV(SILABS, OPTRIS_MSPRO), USLCOM_DEV(SILABS, POLOLU), USLCOM_DEV(SILABS, PROCYON_AVS), USLCOM_DEV(SILABS, SB_PARAMOUNT_ME), USLCOM_DEV(SILABS, SUUNTO), USLCOM_DEV(SILABS, TAMSMASTER), - USLCOM_DEV(SILABS, TELEGESYS_ETRX2), + USLCOM_DEV(SILABS, TELEGESIS_ETRX2), USLCOM_DEV(SILABS, TRACIENT), USLCOM_DEV(SILABS, TRAQMATE), USLCOM_DEV(SILABS, USBCOUNT50), @@ -511,19 +535,20 @@ uslcom_param(struct ucom_softc *ucom, struct termios *t) { struct uslcom_softc *sc = ucom->sc_parent; struct usb_device_request req; - uint32_t flowctrl[4]; + uint32_t baudrate, flowctrl[4]; uint16_t data; DPRINTF("\n"); + baudrate = t->c_ospeed; req.bmRequestType = USLCOM_WRITE; - req.bRequest = USLCOM_BAUD_RATE; - USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed); + req.bRequest = USLCOM_SET_BAUD_RATE; + USETW(req.wValue, 0); USETW(req.wIndex, USLCOM_PORT_NO); - USETW(req.wLength, 0); + USETW(req.wLength, sizeof(baudrate)); - if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, - &req, NULL, 0, 1000)) { + if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, + &req, &baudrate, 0, 1000)) { DPRINTF("Set baudrate failed (ignored)\n"); } diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index aedea58..56a47b9 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -659,6 +659,7 @@ vendor SENAO 0x1740 Senao vendor ASUS2 0x1761 ASUS vendor SWEEX2 0x177f Sweex vendor METAGEEK 0x1781 MetaGeek +vendor KAMSTRUP 0x17a8 Kamstrup A/S vendor WAVESENSE 0x17f4 WaveSense vendor VAISALA 0x1843 Vaisala vendor AMIT 0x18c5 AMIT @@ -672,6 +673,7 @@ vendor STELERA 0x1a8d Stelera Wireless vendor MATRIXORBITAL 0x1b3d Matrix Orbital vendor OVISLINK 0x1b75 OvisLink vendor TCTMOBILE 0x1bbb TCT Mobile +vendor SUNPLUS 0x1bcf Sunplus Innovation Technology Inc. vendor WAGO 0x1be3 WAGO Kontakttechnik GmbH. vendor TELIT 0x1bc7 Telit vendor LONGCHEER 0x1c9e Longcheer Holdings, Ltd. @@ -683,6 +685,7 @@ vendor QISDA 0x1da5 Qisda vendor METAGEEK2 0x1dd5 MetaGeek vendor ALINK 0x1e0e Alink vendor AIRTIES 0x1eda AirTies +vendor FESTO 0x1e29 Festo vendor VERTEX 0x1fe7 Vertex Wireless Co., Ltd. vendor DLINK 0x2001 D-Link vendor PLANEX2 0x2019 Planex Communications @@ -699,6 +702,7 @@ vendor HIROSE 0x2631 Hirose Electric vendor NHJ 0x2770 NHJ vendor PLANEX 0x2c02 Planex Communications vendor VIDZMEDIA 0x3275 VidzMedia Pte Ltd +vendor LINKINSTRUMENTS 0x3195 Link Instruments Inc. vendor AEI 0x3334 AEI vendor HANK 0x3353 Hank Connection vendor PQI 0x3538 PQI @@ -1245,7 +1249,13 @@ product CISCOLINKSYS2 RT3070 0x4001 RT3070 product CISCOLINKSYS3 RT3070 0x0101 RT3070 /* Clipsal products */ -product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus +product CLIPSAL 560884 0x0101 560884 C-Bus Audio Matrix Switch +product CLIPSAL 5500PACA 0x0201 5500PACA C-Bus Pascal Automation Controller +product CLIPSAL 5800PC 0x0301 5800PC C-Bus Wireless Interface +product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus Interface +product CLIPSAL 5000CT2 0x0304 5000CT2 C-Bus Touch Screen +product CLIPSAL C5000CT2 0x0305 C5000CT2 C-Bus Touch Screen +product CLIPSAL L51xx 0x0401 L51xx C-Bus Dimmer /* CMOTECH products */ product CMOTECH CNU510 0x5141 CDMA Technologies USB modem @@ -1591,6 +1601,10 @@ product FEIYA DUMMY 0x0000 Dummy product product FEIYA 5IN1 0x1132 5-in-1 Card Reader product FEIYA AC110 0x6300 AC-110 Card Reader +/* Festo */ +product FESTO CPX_USB 0x0102 CPX-USB +product FESTO CMSP 0x0501 CMSP + /* Fiberline */ product FIBERLINE WL430U 0x6003 WL-430U @@ -1658,7 +1672,7 @@ product FUJITSUSIEMENS SCR 0x0009 Fujitsu-Siemens SCR USB Reader product GARMIN IQUE_3600 0x0004 iQue 3600 /* Gemalto products */ -product GEMALTO PROXPU 0x5501 Prox-PU/CU +product GEMALTO PROXPU 0x5501 Prox-PU/CU RFID Card Reader /* General Instruments (Motorola) products */ product GENERALINSTMNTS SB5100 0x5100 SURFboard SB5100 Cable modem @@ -1894,6 +1908,9 @@ product HUAWEI E143F 0x143f 3G modem product HUAWEI E1752 0x1446 3G modem product HUAWEI K3765 0x1465 3G modem product HUAWEI E1820 0x14ac E1820 HSPA+ USB Slider +product HUAWEI E3131_INIT 0x14fe 3G modem initial +product HUAWEI E392 0x1505 LTE modem +product HUAWEI E3131 0x1506 3G modem product HUAWEI K3765_INIT 0x1520 K3765 Initial product HUAWEI ETS2055 0x1803 CDMA modem product HUAWEI E173 0x1c05 3G modem @@ -1988,6 +2005,10 @@ product JVC MP_PRX1 0x3008 MP-PRX1 Ethernet /* JRC products */ product JRC AH_J3001V_J3002V 0x0001 AirH PHONE AH-J3001V/J3002V +/* Kamstrrup products */ +product KAMSTRUP OPTICALEYE 0x0001 Optical Eye/3-wire +product KAMSTRUP MBUS_250D 0x0005 M-Bus Master MultiPort 250D + /* Kawatsu products */ product KAWATSU MH4000P 0x0003 MiniHub 4000P @@ -2083,6 +2104,11 @@ product LEXMARK S2450 0x0009 Optra S 2450 /* Liebert products */ product LIEBERT POWERSURE_PXT 0xffff PowerSure Personal XT +/* Link Instruments Inc. products */ +product LINKINSTRUMENTS MSO19 0xf190 Link Instruments MSO-19 +product LINKINSTRUMENTS MSO28 0xf280 Link Instruments MSO-28 +product LINKINSTRUMENTS MSO28_2 0xf281 Link Instruments MSO-28 + /* Linksys products */ product LINKSYS MAUSB2 0x0105 Camedia MAUSB-2 product LINKSYS USB10TX1 0x200c USB10TX @@ -2225,7 +2251,7 @@ product MGE UPS2 0xffff MGE UPS SYSTEMS PROTECTIONCENTER 2 /* MEI products */ product MEI CASHFLOW_SC 0x1100 Cashflow-SC Cash Acceptor -product MEI S2000 0x1101 Seies 2000 Combo Acceptor +product MEI S2000 0x1101 Series 2000 Combo Acceptor /* Micro Star International products */ product MSI BT_DONGLE 0x1967 Bluetooth USB dongle @@ -2338,6 +2364,10 @@ product MOTOROLA2 USBLAN2 0x6027 USBLAN product MOTOROLA4 RT2770 0x9031 RT2770 product MOTOROLA4 RT3070 0x9032 RT3070 +/* MpMan products */ +product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go +product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go + /* MultiTech products */ product MULTITECH ATLAS 0xf101 MT5634ZBA-USB modem @@ -2664,6 +2694,7 @@ product PRIMAX HP_RH304AA 0x4d17 HP RH304AA mouse /* Prolific products */ product PROLIFIC PL2301 0x0000 PL2301 Host-Host interface product PROLIFIC PL2302 0x0001 PL2302 Host-Host interface +product PROLIFIC MOTOROLA 0x0307 Motorola Cable product PROLIFIC RSAQ2 0x04bb PL2303 Serial (IODATA USB-RSAQ2) product PROLIFIC ALLTRONIX_GPRS 0x0609 Alltronix ACM003U00 modem product PROLIFIC ALDIGA_AL11U 0x0611 AlDiga AL-11U modem @@ -2703,6 +2734,8 @@ product QUALCOMM2 CDMA_MSM 0x3196 CDMA Technologies MSM modem product QUALCOMM2 AC8700 0x6000 AC8700 product QUALCOMM2 VW110L 0x1000 Vertex Wireless 110L modem product QUALCOMM2 SIM5218 0x9000 SIM5218 +product QUALCOMM2 GOBI2000_QDL 0x9204 Qualcomm Gobi 2000 QDL +product QUALCOMM2 GOBI2000 0x9205 Qualcomm Gobi 2000 modem product QUALCOMMINC CDMA_MSM 0x0001 CDMA Technologies MSM modem product QUALCOMMINC E0002 0x0002 3G modem product QUALCOMMINC E0003 0x0003 3G modem @@ -3050,10 +3083,10 @@ product SILICOM U2E 0x0001 U2E product SILICOM GPE 0x0002 Psion Gold Port Ethernet /* SI Labs */ -product SILABS VSTABI 0x0f91 Vstabi +product SILABS VSTABI 0x0f91 VStabi Controller product SILABS ARKHAM_DS101_M 0x1101 Arkham DS101 Monitor product SILABS ARKHAM_DS101_A 0x1601 Arkham DS101 Adapter -product SILABS BSM7DUSB 0x800a BSM7-D-USB +product SILABS BSM7DUSB 0x800a SPORTident BSM7-D USB product SILABS POLOLU 0x803b Pololu Serial product SILABS CYGNAL_DEBUG 0x8044 Cygnal Debug Adapter product SILABS SB_PARAMOUNT_ME 0x8043 Software Bisque Paramount ME @@ -3062,6 +3095,7 @@ product SILABS GSM2228 0x8054 Enfora GSM2228 USB product SILABS ARGUSISP 0x8066 Argussoft ISP product SILABS IMS_USB_RS422 0x806f IMS USB-RS422 product SILABS CRUMB128 0x807a Crumb128 board +product SILABS OPTRIS_MSPRO 0x80c4 Optris MSpro LT Thermometer product SILABS DEGREE 0x80ca Degree Controls Inc product SILABS TRACIENT 0x80dd Tracient RFID product SILABS TRAQMATE 0x80ed Track Systems Traqmate @@ -3074,9 +3108,11 @@ product SILABS WMRRIGBLASTER 0x814a WMR RIGblaster Plug&Play product SILABS WMRRIGTALK 0x814b WMR RIGtalk RT1 product SILABS B_G_H3000 0x8156 B&G H3000 Data Cable product SILABS HELICOM 0x815e Helicomm IP-Link 1220-DVM +product SILABS HAMLINKUSB 0x815f Timewave HamLinkUSB product SILABS AVIT_USB_TTL 0x818b AVIT Research USB-TTL -product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINk +product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINK product SILABS WAVIT 0x81a6 ThinkOptics WavIt +product SILABS MULTIPLEX_RC 0x81a9 Multiplex RC adapter product SILABS MSD_DASHHAWK 0x81ac MSD DashHawk product SILABS INSYS_MODEM 0x81ad INSYS Modem product SILABS LIPOWSKY_JTAG 0x81c8 Lipowsky Baby-JTAG @@ -3087,16 +3123,24 @@ product SILABS EMS_C1007 0x81f2 EMS C1007 HF RFID controller product SILABS LIPOWSKY_HARP 0x8218 Lipowsky HARP-1 product SILABS C2_EDGE_MODEM 0x822b Commander 2 EDGE(GSM) Modem product SILABS CYGNAL_GPS 0x826b Cygnal Fasttrax GPS -product SILABS TELEGESYS_ETRX2 0x8293 Telegesys ETRX2USB +product SILABS TELEGESIS_ETRX2 0x8293 Telegesis ETRX2USB product SILABS PROCYON_AVS 0x82f9 Procyon AVS product SILABS MC35PU 0x8341 MC35pu product SILABS CYGNAL 0x8382 Cygnal product SILABS AMBER_AMB2560 0x83a8 Amber Wireless AMB2560 +product SILABS DEKTEK_DTAPLUS 0x83d8 DekTec DTA Plus VHF/UHF Booster product SILABS KYOCERA_GPS 0x8411 Kyocera GPS +product SILABS IRZ_SG10 0x8418 IRZ SG-10 GSM/GPRS Modem product SILABS BEI_VCP 0x846e BEI USB Sensor (VCP) product SILABS BALLUFF_RFID 0x8477 Balluff RFID reader +product SILABS AC_SERV_IBUS 0x85ea AC-Services IBUS Interface +product SILABS AC_SERV_CIS 0x85eb AC-Services CIS-IBUS +product SILABS AC_SERV_CAN 0x8664 AC-Services CAN Interface +product SILABS AC_SERV_OBD 0x8665 AC-Services OBD Interface product SILABS CP2102 0xea60 SILABS USB UART product SILABS CP210X_2 0xea61 CP210x Serial +product SILABS CP210X_3 0xea70 CP210x Serial +product SILABS CP210X_4 0xea80 CP210x Serial product SILABS INFINITY_MIC 0xea71 Infinity GPS-MIC-1 Radio Monophone product SILABS USBSCOPE50 0xf001 USBscope50 product SILABS USBWAVE12 0xf002 USBwave12 @@ -3236,10 +3280,6 @@ product STELERA E1010 0x1010 3G modem product STELERA E1011 0x1011 3G modem product STELERA E1012 0x1012 3G modem -/* MpMan products */ -product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go -product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go - /* STMicroelectronics products */ product STMICRO BIOCPU 0x2016 Biometric Coprocessor product STMICRO COMMUNICATOR 0x7554 USB Communicator @@ -3262,6 +3302,9 @@ product SUN KEYBOARD_TYPE_7 0x00a2 Type 7 USB keyboard product SUN MOUSE 0x0100 Type 6 USB mouse product SUN KBD_HUB 0x100e Kbd Hub +/* Sunplus Innovation Technology Inc. products */ +product SUNPLUS USBMOUSE 0x0007 USB Optical Mouse + /* Super Top products */ product SUPERTOP IDE 0x6600 USB-IDE diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c index 5b5d355..9439930 100644 --- a/sys/dev/wtap/if_wtap.c +++ b/sys/dev/wtap/if_wtap.c @@ -230,8 +230,10 @@ wtap_beacon_intrp(void *arg) struct ieee80211vap *vap = arg; struct mbuf *m; - KASSERT(vap->iv_state >= IEEE80211_S_RUN, - ("not running, state %d", vap->iv_state)); + if (vap->iv_state < IEEE80211_S_RUN) { + DWTAP_PRINTF("Skip beacon, not running, state %d", vap->iv_state); + return ; + } DWTAP_PRINTF("[%d] beacon intrp\n", avp->id); //burst mode /* * Update dynamic beacon contents. If this returns @@ -289,6 +291,8 @@ wtap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg) default: goto bad; } + } else if (nstate == IEEE80211_S_INIT) { + callout_stop(&avp->av_swba); } return 0; bad: diff --git a/sys/fs/cd9660/cd9660_vfsops.c b/sys/fs/cd9660/cd9660_vfsops.c index 737bf26..7780b04 100644 --- a/sys/fs/cd9660/cd9660_vfsops.c +++ b/sys/fs/cd9660/cd9660_vfsops.c @@ -133,7 +133,7 @@ cd9660_mount(struct mount *mp) int error; accmode_t accmode; struct nameidata ndp; - struct iso_mnt *imp = 0; + struct iso_mnt *imp = NULL; td = curthread; @@ -214,7 +214,7 @@ iso_mountfs(devvp, mp) int iso_bsize; int iso_blknum; int joliet_level; - struct iso_volume_descriptor *vdp = 0; + struct iso_volume_descriptor *vdp = NULL; struct iso_primary_descriptor *pri = NULL; struct iso_sierra_primary_descriptor *pri_sierra = NULL; struct iso_supplementary_descriptor *sup = NULL; diff --git a/sys/fs/ext2fs/ext2_vfsops.c b/sys/fs/ext2fs/ext2_vfsops.c index 17ffb62..576a1f59 100644 --- a/sys/fs/ext2fs/ext2_vfsops.c +++ b/sys/fs/ext2fs/ext2_vfsops.c @@ -112,7 +112,7 @@ ext2_mount(struct mount *mp) struct vfsoptlist *opts; struct vnode *devvp; struct thread *td; - struct ext2mount *ump = 0; + struct ext2mount *ump = NULL; struct m_ext2fs *fs; struct nameidata nd, *ndp = &nd; accmode_t accmode; diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c index 0b065a6..bdb1367 100644 --- a/sys/fs/fifofs/fifo_vnops.c +++ b/sys/fs/fifofs/fifo_vnops.c @@ -59,23 +59,13 @@ * Notes about locking: * - fi_pipe is invariant since init time. * - fi_readers and fi_writers are protected by the vnode lock. - * - fi_wgen and fi_seqcount are protected by the pipe mutex. */ struct fifoinfo { struct pipe *fi_pipe; long fi_readers; long fi_writers; - int fi_wgen; - int fi_seqcount; }; -#define FIFO_UPDWGEN(fip, pip) do { \ - if ((fip)->fi_wgen == (fip)->fi_seqcount) \ - (pip)->pipe_state |= PIPE_SAMEWGEN; \ - else \ - (pip)->pipe_state &= ~PIPE_SAMEWGEN; \ -} while (0) - static vop_print_t fifo_print; static vop_open_t fifo_open; static vop_close_t fifo_close; @@ -161,7 +151,7 @@ fifo_open(ap) return (error); fip = malloc(sizeof(*fip), M_VNODE, M_WAITOK); fip->fi_pipe = fpipe; - fip->fi_wgen = fip->fi_readers = fip->fi_writers = 0; + fpipe->pipe_wgen = fip->fi_readers = fip->fi_writers = 0; KASSERT(vp->v_fifoinfo == NULL, ("fifo_open: v_fifoinfo race")); vp->v_fifoinfo = fip; } @@ -181,8 +171,7 @@ fifo_open(ap) if (fip->fi_writers > 0) wakeup(&fip->fi_writers); } - fip->fi_seqcount = fip->fi_wgen - fip->fi_writers; - FIFO_UPDWGEN(fip, fpipe); + fp->f_seqcount = fpipe->pipe_wgen - fip->fi_writers; } if (ap->a_mode & FWRITE) { if ((ap->a_mode & O_NONBLOCK) && fip->fi_readers == 0) { @@ -235,8 +224,7 @@ fifo_open(ap) fpipe->pipe_state |= PIPE_EOF; if (fpipe->pipe_state & PIPE_WANTR) wakeup(fpipe); - fip->fi_wgen++; - FIFO_UPDWGEN(fip, fpipe); + fpipe->pipe_wgen++; PIPE_UNLOCK(fpipe); fifo_cleanup(vp); } @@ -283,8 +271,11 @@ fifo_close(ap) if (fip->fi_readers == 0) { PIPE_LOCK(cpipe); cpipe->pipe_state |= PIPE_EOF; - if (cpipe->pipe_state & PIPE_WANTW) + if ((cpipe->pipe_state & PIPE_WANTW)) { + cpipe->pipe_state &= ~PIPE_WANTW; wakeup(cpipe); + } + pipeselwakeup(cpipe); PIPE_UNLOCK(cpipe); } } @@ -293,10 +284,12 @@ fifo_close(ap) if (fip->fi_writers == 0) { PIPE_LOCK(cpipe); cpipe->pipe_state |= PIPE_EOF; - if (cpipe->pipe_state & PIPE_WANTR) + if ((cpipe->pipe_state & PIPE_WANTR)) { + cpipe->pipe_state &= ~PIPE_WANTR; wakeup(cpipe); - fip->fi_wgen++; - FIFO_UPDWGEN(fip, cpipe); + } + cpipe->pipe_wgen++; + pipeselwakeup(cpipe); PIPE_UNLOCK(cpipe); } } diff --git a/sys/fs/msdosfs/msdosfs_lookup.c b/sys/fs/msdosfs/msdosfs_lookup.c index d923c89..27c76e1 100644 --- a/sys/fs/msdosfs/msdosfs_lookup.c +++ b/sys/fs/msdosfs/msdosfs_lookup.c @@ -108,7 +108,7 @@ msdosfs_lookup_(struct vnode *vdp, struct vnode **vpp, struct denode *dp; struct denode *tdp; struct msdosfsmount *pmp; - struct buf *bp = 0; + struct buf *bp = NULL; struct direntry *dep = NULL; u_char dosfilename[12]; int flags = cnp->cn_flags; diff --git a/sys/fs/portalfs/portal_vnops.c b/sys/fs/portalfs/portal_vnops.c index f9ef08a..6b70dae 100644 --- a/sys/fs/portalfs/portal_vnops.c +++ b/sys/fs/portalfs/portal_vnops.c @@ -110,7 +110,7 @@ portal_lookup(ap) char *pname = cnp->cn_nameptr; struct portalnode *pt; int error; - struct vnode *fvp = 0; + struct vnode *fvp = NULL; char *path; int size; @@ -217,14 +217,14 @@ portal_open(ap) struct thread *a_td; } */ *ap; { - struct socket *so = 0; + struct socket *so = NULL; struct portalnode *pt; struct thread *td = ap->a_td; struct vnode *vp = ap->a_vp; struct uio auio; struct iovec aiov[2]; int res; - struct mbuf *cm = 0; + struct mbuf *cm = NULL; struct cmsghdr *cmsg; int newfds; int *ip; @@ -356,7 +356,7 @@ portal_open(ap) len = auio.uio_resid = sizeof(int); do { - struct mbuf *m = 0; + struct mbuf *m = NULL; int flags = MSG_WAITALL; error = soreceive(so, (struct sockaddr **) 0, &auio, &m, &cm, &flags); diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c index bf1776a..1b727a5 100644 --- a/sys/fs/smbfs/smbfs_node.c +++ b/sys/fs/smbfs/smbfs_node.c @@ -223,19 +223,16 @@ loop: if (fap == NULL) return ENOENT; - np = malloc(sizeof *np, M_SMBNODE, M_WAITOK); error = getnewvnode("smbfs", mp, &smbfs_vnodeops, &vp); - if (error) { - free(np, M_SMBNODE); - return error; - } + if (error != 0) + return (error); error = insmntque(vp, mp); /* XXX: Too early for mpsafe fs */ - if (error != 0) { - free(np, M_SMBNODE); + if (error != 0) return (error); - } + + np = malloc(sizeof *np, M_SMBNODE, M_WAITOK | M_ZERO); + vp->v_type = fap->fa_attr & SMB_FA_DIR ? VDIR : VREG; - bzero(np, sizeof(*np)); vp->v_data = np; np->n_vnode = vp; np->n_mount = VFSTOSMBFS(mp); diff --git a/sys/fs/udf/udf_vfsops.c b/sys/fs/udf/udf_vfsops.c index bb2c09d..ddf3b99 100644 --- a/sys/fs/udf/udf_vfsops.c +++ b/sys/fs/udf/udf_vfsops.c @@ -190,7 +190,7 @@ udf_mount(struct mount *mp) { struct vnode *devvp; /* vnode of the mount device */ struct thread *td; - struct udf_mnt *imp = 0; + struct udf_mnt *imp = NULL; struct vfsoptlist *opts; char *fspec, *cs_disk, *cs_local; int error, len, *udf_flags; diff --git a/sys/geom/gate/g_gate.c b/sys/geom/gate/g_gate.c index b3c09df..7282ac9 100644 --- a/sys/geom/gate/g_gate.c +++ b/sys/geom/gate/g_gate.c @@ -470,6 +470,44 @@ g_gate_create(struct g_gate_ctl_create *ggio) return (EINVAL); } + sc = malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO); + sc->sc_flags = (ggio->gctl_flags & G_GATE_USERFLAGS); + strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info)); + sc->sc_seq = 1; + bioq_init(&sc->sc_inqueue); + bioq_init(&sc->sc_outqueue); + mtx_init(&sc->sc_queue_mtx, "gg:queue", NULL, MTX_DEF); + sc->sc_queue_count = 0; + sc->sc_queue_size = ggio->gctl_maxcount; + if (sc->sc_queue_size > G_GATE_MAX_QUEUE_SIZE) + sc->sc_queue_size = G_GATE_MAX_QUEUE_SIZE; + sc->sc_timeout = ggio->gctl_timeout; + callout_init(&sc->sc_callout, CALLOUT_MPSAFE); + + mtx_lock(&g_gate_units_lock); + sc->sc_unit = g_gate_getunit(ggio->gctl_unit, &error); + if (sc->sc_unit < 0) + goto fail1; + if (ggio->gctl_unit == G_GATE_NAME_GIVEN) + snprintf(name, sizeof(name), "%s", ggio->gctl_name); + else { + snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME, + sc->sc_unit); + } + /* Check for name collision. */ + for (unit = 0; unit < g_gate_maxunits; unit++) { + if (g_gate_units[unit] == NULL) + continue; + if (strcmp(name, g_gate_units[unit]->sc_name) != 0) + continue; + error = EEXIST; + goto fail1; + } + sc->sc_name = name; + g_gate_units[sc->sc_unit] = sc; + g_gate_nunits++; + mtx_unlock(&g_gate_units_lock); + g_topology_lock(); if (ggio->gctl_readprov[0] == '\0') { @@ -477,38 +515,24 @@ g_gate_create(struct g_gate_ctl_create *ggio) } else { ropp = g_provider_by_name(ggio->gctl_readprov); if (ropp == NULL) { - g_topology_unlock(); G_GATE_DEBUG(1, "Provider %s doesn't exist.", ggio->gctl_readprov); - return (EINVAL); + error = EINVAL; + goto fail2; } if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) != 0) { - g_topology_unlock(); G_GATE_DEBUG(1, "Invalid read offset."); - return (EINVAL); + error = EINVAL; + goto fail2; } if (ggio->gctl_mediasize + ggio->gctl_readoffset > ropp->mediasize) { - g_topology_unlock(); G_GATE_DEBUG(1, "Invalid read offset or media size."); - return (EINVAL); + error = EINVAL; + goto fail2; } } - sc = malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO); - sc->sc_flags = (ggio->gctl_flags & G_GATE_USERFLAGS); - strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info)); - sc->sc_seq = 1; - bioq_init(&sc->sc_inqueue); - bioq_init(&sc->sc_outqueue); - mtx_init(&sc->sc_queue_mtx, "gg:queue", NULL, MTX_DEF); - sc->sc_queue_count = 0; - sc->sc_queue_size = ggio->gctl_maxcount; - if (sc->sc_queue_size > G_GATE_MAX_QUEUE_SIZE) - sc->sc_queue_size = G_GATE_MAX_QUEUE_SIZE; - sc->sc_timeout = ggio->gctl_timeout; - callout_init(&sc->sc_callout, CALLOUT_MPSAFE); - gp = g_new_geomf(&g_gate_class, "%s", name); gp->start = g_gate_start; gp->access = g_gate_access; @@ -521,70 +545,18 @@ g_gate_create(struct g_gate_ctl_create *ggio) error = g_attach(cp, ropp); if (error != 0) { G_GATE_DEBUG(1, "Unable to attach to %s.", ropp->name); - } else { - error = g_access(cp, 1, 0, 0); - if (error != 0) { - G_GATE_DEBUG(1, "Unable to access %s.", - ropp->name); - g_detach(cp); - } + goto fail3; } + error = g_access(cp, 1, 0, 0); if (error != 0) { - g_destroy_consumer(cp); - g_destroy_geom(gp); - g_topology_unlock(); - mtx_destroy(&sc->sc_queue_mtx); - free(sc, M_GATE); - return (error); + G_GATE_DEBUG(1, "Unable to access %s.", ropp->name); + g_detach(cp); + goto fail3; } sc->sc_readcons = cp; sc->sc_readoffset = ggio->gctl_readoffset; } - mtx_lock(&g_gate_units_lock); - sc->sc_unit = g_gate_getunit(ggio->gctl_unit, &error); - if (sc->sc_unit < 0) { - mtx_unlock(&g_gate_units_lock); - if (sc->sc_readcons != NULL) { - (void)g_access(sc->sc_readcons, -1, 0, 0); - g_detach(sc->sc_readcons); - g_destroy_consumer(sc->sc_readcons); - } - g_destroy_geom(gp); - g_topology_unlock(); - mtx_destroy(&sc->sc_queue_mtx); - free(sc, M_GATE); - return (error); - } - if (ggio->gctl_unit == G_GATE_NAME_GIVEN) - snprintf(name, sizeof(name), "%s", ggio->gctl_name); - else { - snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME, - sc->sc_unit); - } - /* Check for name collision. */ - for (unit = 0; unit < g_gate_maxunits; unit++) { - if (g_gate_units[unit] == NULL) - continue; - if (strcmp(name, g_gate_units[unit]->sc_name) != 0) - continue; - mtx_unlock(&g_gate_units_lock); - if (sc->sc_readcons != NULL) { - (void)g_access(sc->sc_readcons, -1, 0, 0); - g_detach(sc->sc_readcons); - g_destroy_consumer(sc->sc_readcons); - } - g_destroy_geom(gp); - g_topology_unlock(); - mtx_destroy(&sc->sc_queue_mtx); - free(sc, M_GATE); - return (EEXIST); - } - sc->sc_name = name; - g_gate_units[sc->sc_unit] = sc; - g_gate_nunits++; - mtx_unlock(&g_gate_units_lock); - ggio->gctl_unit = sc->sc_unit; pp = g_new_providerf(gp, "%s", name); @@ -604,6 +576,20 @@ g_gate_create(struct g_gate_ctl_create *ggio) g_gate_guard, sc); } return (0); +fail3: + g_destroy_consumer(cp); + g_destroy_geom(gp); +fail2: + g_topology_unlock(); + mtx_lock(&g_gate_units_lock); + g_gate_units[sc->sc_unit] = NULL; + KASSERT(g_gate_nunits > 0, ("negative g_gate_nunits?")); + g_gate_nunits--; +fail1: + mtx_unlock(&g_gate_units_lock); + mtx_destroy(&sc->sc_queue_mtx); + free(sc, M_GATE); + return (error); } static int diff --git a/sys/geom/geom.h b/sys/geom/geom.h index 5d97f50..6a447ae 100644 --- a/sys/geom/geom.h +++ b/sys/geom/geom.h @@ -110,6 +110,8 @@ struct g_class { g_ioctl_t *ioctl; g_provgone_t *providergone; g_resize_t *resize; + void *spare1; + void *spare2; /* * The remaining elements are private */ @@ -141,6 +143,8 @@ struct g_geom { g_ioctl_t *ioctl; g_provgone_t *providergone; g_resize_t *resize; + void *spare0; + void *spare1; void *softc; unsigned flags; #define G_GEOM_WITHER 1 @@ -170,7 +174,9 @@ struct g_consumer { struct g_provider *provider; LIST_ENTRY(g_consumer) consumers; /* XXX: better name */ int acr, acw, ace; - int spoiled; + int flags; +#define G_CF_SPOILED 0x1 +#define G_CF_ORPHAN 0x4 struct devstat *stat; u_int nstart, nend; @@ -243,6 +249,8 @@ int g_post_event(g_event_t *func, void *arg, int flag, ...); int g_waitfor_event(g_event_t *func, void *arg, int flag, ...); void g_cancel_event(void *ref); int g_attr_changed(struct g_provider *pp, const char *attr, int flag); +int g_media_changed(struct g_provider *pp, int flag); +int g_media_gone(struct g_provider *pp, int flag); void g_orphan_provider(struct g_provider *pp, int error); void g_waitidlelock(void); diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index f3165a0..7936740 100644 --- a/sys/geom/geom_dev.c +++ b/sys/geom/geom_dev.c @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); #include <sys/conf.h> #include <sys/ctype.h> #include <sys/bio.h> +#include <sys/bus.h> #include <sys/lock.h> #include <sys/mutex.h> #include <sys/proc.h> @@ -105,6 +106,21 @@ g_dev_print(void) static void g_dev_attrchanged(struct g_consumer *cp, const char *attr) { + struct cdev *dev; + char buf[SPECNAMELEN + 6]; + + if (strcmp(attr, "GEOM::media") == 0) { + dev = cp->geom->softc; + snprintf(buf, sizeof(buf), "cdev=%s", dev->si_name); + devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf, M_WAITOK); + dev = cp->cp_alias_dev; + if (dev != NULL) { + snprintf(buf, sizeof(buf), "cdev=%s", dev->si_name); + devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf, + M_WAITOK); + } + return; + } if (strcmp(attr, "GEOM::physpath") != 0) return; @@ -119,7 +135,6 @@ g_dev_attrchanged(struct g_consumer *cp, const char *attr) g_io_getattr("GEOM::physpath", cp, &physpath_len, physpath); g_access(cp, -1, 0, 0); if (error == 0 && strlen(physpath) != 0) { - struct cdev *dev; struct cdev *old_alias_dev; struct cdev **alias_devp; @@ -161,9 +176,6 @@ g_dev_taste(struct g_class *mp, struct g_provider *pp, int insist __unused) g_trace(G_T_TOPOLOGY, "dev_taste(%s,%s)", mp->name, pp->name); g_topology_assert(); - LIST_FOREACH(cp, &pp->consumers, consumers) - if (cp->geom->class == mp) - return (NULL); gp = g_new_geomf(mp, pp->name); cp = g_new_consumer(gp); error = g_attach(cp, pp); diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index 1d6f867..f863b2c 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -660,6 +660,32 @@ disk_attr_changed(struct disk *dp, const char *attr, int flag) } void +disk_media_changed(struct disk *dp, int flag) +{ + struct g_geom *gp; + struct g_provider *pp; + + gp = dp->d_geom; + if (gp != NULL) { + LIST_FOREACH(pp, &gp->provider, provider) + g_media_changed(pp, flag); + } +} + +void +disk_media_gone(struct disk *dp, int flag) +{ + struct g_geom *gp; + struct g_provider *pp; + + gp = dp->d_geom; + if (gp != NULL) { + LIST_FOREACH(pp, &gp->provider, provider) + g_media_gone(pp, flag); + } +} + +void disk_resize(struct disk *dp) { struct g_geom *gp; diff --git a/sys/geom/geom_disk.h b/sys/geom/geom_disk.h index 4862fc5..cf53839 100644 --- a/sys/geom/geom_disk.h +++ b/sys/geom/geom_disk.h @@ -109,6 +109,8 @@ void disk_create(struct disk *disk, int version); void disk_destroy(struct disk *disk); void disk_gone(struct disk *disk); void disk_attr_changed(struct disk *dp, const char *attr, int flag); +void disk_media_changed(struct disk *dp, int flag); +void disk_media_gone(struct disk *dp, int flag); void disk_resize(struct disk *dp); #define DISK_VERSION_00 0x58561059 diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c index 1c92ccb..b02d088 100644 --- a/sys/geom/geom_event.c +++ b/sys/geom/geom_event.c @@ -202,14 +202,12 @@ g_orphan_register(struct g_provider *pp) * Tell all consumers the bad news. * Don't be surprised if they self-destruct. */ - cp = LIST_FIRST(&pp->consumers); - while (cp != NULL) { - cp2 = LIST_NEXT(cp, consumers); + LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) { KASSERT(cp->geom->orphan != NULL, ("geom %s has no orphan, class %s", cp->geom->name, cp->geom->class->name)); + cp->flags |= G_CF_ORPHAN; cp->geom->orphan(cp); - cp = cp2; } if (LIST_EMPTY(&pp->consumers) && wf) g_destroy_provider(pp); diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c index b4044a7..1e0f28e 100644 --- a/sys/geom/geom_io.c +++ b/sys/geom/geom_io.c @@ -305,6 +305,8 @@ g_io_check(struct bio *bp) /* if provider is marked for error, don't disturb. */ if (pp->error) return (pp->error); + if (cp->flags & G_CF_ORPHAN) + return (ENXIO); switch(bp->bio_cmd) { case BIO_READ: diff --git a/sys/geom/geom_slice.c b/sys/geom/geom_slice.c index 407afdc..1100854 100644 --- a/sys/geom/geom_slice.c +++ b/sys/geom/geom_slice.c @@ -465,6 +465,7 @@ g_slice_spoiled(struct g_consumer *cp) g_topology_assert(); gp = cp->geom; g_trace(G_T_TOPOLOGY, "g_slice_spoiled(%p/%s)", cp, gp->name); + cp->flags |= G_CF_ORPHAN; gsp = gp->softc; gp->softc = NULL; g_slice_free(gsp); diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c index 37a9ce0..4d8623f 100644 --- a/sys/geom/geom_subr.c +++ b/sys/geom/geom_subr.c @@ -262,10 +262,11 @@ g_modevent(module_t mod, int type, void *data) static void g_retaste_event(void *arg, int flag) { - struct g_class *cp, *mp; - struct g_geom *gp, *gp2; + struct g_class *mp, *mp2; + struct g_geom *gp; struct g_hh00 *hh; struct g_provider *pp; + struct g_consumer *cp; g_topology_assert(); if (flag == EV_CANCEL) /* XXX: can't happen ? */ @@ -282,17 +283,20 @@ g_retaste_event(void *arg, int flag) } g_trace(G_T_TOPOLOGY, "g_retaste(%s)", mp->name); - LIST_FOREACH(cp, &g_classes, class) { - LIST_FOREACH(gp, &cp->geom, geom) { + LIST_FOREACH(mp2, &g_classes, class) { + LIST_FOREACH(gp, &mp2->geom, geom) { LIST_FOREACH(pp, &gp->provider, provider) { if (pp->acr || pp->acw || pp->ace) continue; - LIST_FOREACH(gp2, &mp->geom, geom) { - if (!strcmp(pp->name, gp2->name)) + LIST_FOREACH(cp, &pp->consumers, consumers) { + if (cp->geom->class == mp && + (cp->flags & G_CF_ORPHAN) == 0) break; } - if (gp2 != NULL) - g_wither_geom(gp2, ENXIO); + if (cp != NULL) { + cp->flags |= G_CF_ORPHAN; + g_wither_geom(cp->geom, ENXIO); + } mp->taste(mp, pp, 0); g_topology_assert(); } @@ -534,7 +538,7 @@ g_new_provider_event(void *arg, int flag) { struct g_class *mp; struct g_provider *pp; - struct g_consumer *cp; + struct g_consumer *cp, *next_cp; g_topology_assert(); if (flag == EV_CANCEL) @@ -545,11 +549,17 @@ g_new_provider_event(void *arg, int flag) G_VALID_PROVIDER(pp); KASSERT(!(pp->flags & G_PF_WITHER), ("g_new_provider_event but withered")); + LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, next_cp) { + if ((cp->flags & G_CF_ORPHAN) == 0 && + cp->geom->attrchanged != NULL) + cp->geom->attrchanged(cp, "GEOM::media"); + } LIST_FOREACH(mp, &g_classes, class) { if (mp->taste == NULL) continue; LIST_FOREACH(cp, &pp->consumers, consumers) - if (cp->geom->class == mp) + if (cp->geom->class == mp && + (cp->flags & G_CF_ORPHAN) == 0) break; if (cp != NULL) continue; @@ -615,22 +625,23 @@ g_resize_provider_event(void *arg, int flag) off_t size; g_topology_assert(); - if (flag == EV_CANCEL) - return; if (g_shutdown) return; hh = arg; pp = hh->pp; size = hh->size; + g_free(hh); G_VALID_PROVIDER(pp); g_trace(G_T_TOPOLOGY, "g_resize_provider_event(%p)", pp); LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) { gp = cp->geom; - if (gp->resize == NULL && size < pp->mediasize) + if (gp->resize == NULL && size < pp->mediasize) { + cp->flags |= G_CF_ORPHAN; cp->geom->orphan(cp); + } } pp->mediasize = size; @@ -649,7 +660,8 @@ g_resize_provider_event(void *arg, int flag) if (mp->taste == NULL) continue; LIST_FOREACH(cp, &pp->consumers, consumers) - if (cp->geom->class == mp) + if (cp->geom->class == mp && + (cp->flags & G_CF_ORPHAN) == 0) break; if (cp != NULL) continue; @@ -868,7 +880,7 @@ g_access(struct g_consumer *cp, int dcr, int dcw, int dce) * are probably just ahead of the event telling us that. Fail * now rather than having to unravel this later. */ - if (cp->geom->spoiled != NULL && cp->spoiled && + if (cp->geom->spoiled != NULL && (cp->flags & G_CF_SPOILED) && (dcr > 0 || dcw > 0 || dce > 0)) return (ENXIO); @@ -1018,6 +1030,7 @@ g_std_spoiled(struct g_consumer *cp) g_topology_assert(); G_VALID_CONSUMER(cp); g_trace(G_T_TOPOLOGY, "g_std_spoiled(%p)", cp); + cp->flags |= G_CF_ORPHAN; g_detach(cp); gp = cp->geom; LIST_FOREACH(pp, &gp->provider, provider) @@ -1053,9 +1066,9 @@ g_spoil_event(void *arg, int flag) G_VALID_PROVIDER(pp); for (cp = LIST_FIRST(&pp->consumers); cp != NULL; cp = cp2) { cp2 = LIST_NEXT(cp, consumers); - if (!cp->spoiled) + if ((cp->flags & G_CF_SPOILED) == 0) continue; - cp->spoiled = 0; + cp->flags &= ~G_CF_SPOILED; if (cp->geom->spoiled == NULL) continue; cp->geom->spoiled(cp); @@ -1080,11 +1093,54 @@ g_spoil(struct g_provider *pp, struct g_consumer *cp) KASSERT(cp2->acw == 0, ("spoiling cp->acw = %d", cp2->acw)); */ KASSERT(cp2->ace == 0, ("spoiling cp->ace = %d", cp2->ace)); - cp2->spoiled++; + cp2->flags |= G_CF_SPOILED; } g_post_event(g_spoil_event, pp, M_WAITOK, pp, NULL); } +static void +g_media_changed_event(void *arg, int flag) +{ + struct g_provider *pp; + int retaste; + + g_topology_assert(); + if (flag == EV_CANCEL) + return; + pp = arg; + G_VALID_PROVIDER(pp); + + /* + * If provider was not open for writing, queue retaste after spoiling. + * If it was, retaste will happen automatically on close. + */ + retaste = (pp->acw == 0 && pp->error == 0 && + !(pp->geom->flags & G_GEOM_WITHER)); + g_spoil_event(arg, flag); + if (retaste) + g_post_event(g_new_provider_event, pp, M_WAITOK, pp, NULL); +} + +int +g_media_changed(struct g_provider *pp, int flag) +{ + struct g_consumer *cp; + + LIST_FOREACH(cp, &pp->consumers, consumers) + cp->flags |= G_CF_SPOILED; + return (g_post_event(g_media_changed_event, pp, flag, pp, NULL)); +} + +int +g_media_gone(struct g_provider *pp, int flag) +{ + struct g_consumer *cp; + + LIST_FOREACH(cp, &pp->consumers, consumers) + cp->flags |= G_CF_SPOILED; + return (g_post_event(g_spoil_event, pp, flag, pp, NULL)); +} + int g_getattr__(const char *attr, struct g_consumer *cp, void *var, int len) { @@ -1240,15 +1296,15 @@ db_show_geom_consumer(int indent, struct g_consumer *cp) cp->provider); } gprintln(" access: r%dw%de%d", cp->acr, cp->acw, cp->ace); - gprintln(" spoiled: %d", cp->spoiled); + gprintln(" flags: 0x%04x", cp->flags); gprintln(" nstart: %u", cp->nstart); gprintln(" nend: %u", cp->nend); } else { gprintf("consumer: %p (%s), access=r%dw%de%d", cp, cp->provider != NULL ? cp->provider->name : "none", cp->acr, cp->acw, cp->ace); - if (cp->spoiled) - db_printf(", spoiled=%d", cp->spoiled); + if (cp->flags) + db_printf(", flags=0x%04x", cp->flags); db_printf("\n"); } } diff --git a/sys/geom/multipath/g_multipath.c b/sys/geom/multipath/g_multipath.c index 913dad7..b50367e 100644 --- a/sys/geom/multipath/g_multipath.c +++ b/sys/geom/multipath/g_multipath.c @@ -849,6 +849,78 @@ g_multipath_ctl_add_name(struct gctl_req *req, struct g_class *mp, } static void +g_multipath_ctl_prefer(struct gctl_req *req, struct g_class *mp) +{ + struct g_geom *gp; + struct g_multipath_softc *sc; + struct g_consumer *cp; + const char *name, *mpname; + static const char devpf[6] = "/dev/"; + int *nargs; + + g_topology_assert(); + + mpname = gctl_get_asciiparam(req, "arg0"); + if (mpname == NULL) { + gctl_error(req, "No 'arg0' argument"); + return; + } + gp = g_multipath_find_geom(mp, mpname); + if (gp == NULL) { + gctl_error(req, "Device %s is invalid", mpname); + return; + } + sc = gp->softc; + + nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); + if (nargs == NULL) { + gctl_error(req, "No 'nargs' argument"); + return; + } + if (*nargs != 2) { + gctl_error(req, "missing device"); + return; + } + + name = gctl_get_asciiparam(req, "arg1"); + if (name == NULL) { + gctl_error(req, "No 'arg1' argument"); + return; + } + if (strncmp(name, devpf, 5) == 0) { + name += 5; + } + + LIST_FOREACH(cp, &gp->consumer, consumer) { + if (cp->provider != NULL + && strcmp(cp->provider->name, name) == 0) + break; + } + + if (cp == NULL) { + gctl_error(req, "Provider %s not found", name); + return; + } + + mtx_lock(&sc->sc_mtx); + + if (cp->index & MP_BAD) { + gctl_error(req, "Consumer %s is invalid", name); + mtx_unlock(&sc->sc_mtx); + return; + } + + /* Here when the consumer is present and in good shape */ + + sc->sc_active = cp; + if (!sc->sc_active_active) + printf("GEOM_MULTIPATH: %s now active path in %s\n", + sc->sc_active->provider->name, sc->sc_name); + + mtx_unlock(&sc->sc_mtx); +} + +static void g_multipath_ctl_add(struct gctl_req *req, struct g_class *mp) { struct g_multipath_softc *sc; @@ -1278,6 +1350,8 @@ g_multipath_config(struct gctl_req *req, struct g_class *mp, const char *verb) gctl_error(req, "Userland and kernel parts are out of sync"); } else if (strcmp(verb, "add") == 0) { g_multipath_ctl_add(req, mp); + } else if (strcmp(verb, "prefer") == 0) { + g_multipath_ctl_prefer(req, mp); } else if (strcmp(verb, "create") == 0) { g_multipath_ctl_create(req, mp); } else if (strcmp(verb, "configure") == 0) { diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c index 8d86c4a..48ae931 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -1257,6 +1257,7 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp) struct sbuf *sb; quad_t end; int error; + off_t mediasize; gp = gpp->gpp_geom; G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, gp->name)); @@ -1301,8 +1302,11 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp) pp = entry->gpe_pp; if ((g_debugflags & 16) == 0 && (pp->acr > 0 || pp->acw > 0 || pp->ace > 0)) { - gctl_error(req, "%d", EBUSY); - return (EBUSY); + if (entry->gpe_end - entry->gpe_start + 1 > gpp->gpp_size) { + /* Deny shrinking of an opened partition. */ + gctl_error(req, "%d", EBUSY); + return (EBUSY); + } } error = G_PART_RESIZE(table, entry, gpp); @@ -1315,8 +1319,9 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp) entry->gpe_modified = 1; /* update mediasize of changed provider */ - pp->mediasize = (entry->gpe_end - entry->gpe_start + 1) * + mediasize = (entry->gpe_end - entry->gpe_start + 1) * pp->sectorsize; + g_resize_provider(pp, mediasize); /* Provide feedback if so requested. */ if (gpp->gpp_parms & G_PART_PARM_OUTPUT) { @@ -2050,6 +2055,7 @@ g_part_spoiled(struct g_consumer *cp) G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, cp->provider->name)); g_topology_assert(); + cp->flags |= G_CF_ORPHAN; g_part_wither(cp->geom, ENXIO); } diff --git a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c index e98ed48..825111e 100644 --- a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c +++ b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c @@ -227,7 +227,7 @@ reiserfs_unmount(struct mount *mp, int mntflags) DROP_GIANT(); g_topology_lock(); - g_wither_geom_close(rmp->rm_cp->geom, ENXIO); + g_vfs_close(rmp->rm_cp); g_topology_unlock(); PICKUP_GIANT(); vrele(rmp->rm_devvp); @@ -611,7 +611,7 @@ out: if (cp != NULL) { DROP_GIANT(); g_topology_lock(); - g_wither_geom_close(cp->geom, ENXIO); + g_vfs_close(cp); g_topology_unlock(); PICKUP_GIANT(); } diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index 40c8c46..c194567 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -1606,7 +1606,7 @@ exec_setregs(struct thread *td, struct image_params *imgp, u_long stack) pcb->pcb_dr3 = 0; pcb->pcb_dr6 = 0; pcb->pcb_dr7 = 0; - if (pcb == PCPU_GET(curpcb)) { + if (pcb == curpcb) { /* * Clear the debug registers on the running * CPU, otherwise they will end up affecting diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index af69431..0743ea9 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -2025,7 +2025,7 @@ pmap_lazyfix_action(void) (*ipi_lazypmap_counts[PCPU_GET(cpuid)])++; #endif if (rcr3() == lazyptd) - load_cr3(PCPU_GET(curpcb)->pcb_cr3); + load_cr3(curpcb->pcb_cr3); CPU_CLR_ATOMIC(PCPU_GET(cpuid), lazymask); atomic_store_rel_int(&lazywait, 1); } @@ -2035,7 +2035,7 @@ pmap_lazyfix_self(u_int cpuid) { if (rcr3() == lazyptd) - load_cr3(PCPU_GET(curpcb)->pcb_cr3); + load_cr3(curpcb->pcb_cr3); CPU_CLR_ATOMIC(cpuid, lazymask); } @@ -2102,7 +2102,7 @@ pmap_lazyfix(pmap_t pmap) cr3 = vtophys(pmap->pm_pdir); if (cr3 == rcr3()) { - load_cr3(PCPU_GET(curpcb)->pcb_cr3); + load_cr3(curpcb->pcb_cr3); CPU_CLR(PCPU_GET(cpuid), &pmap->pm_active); } } diff --git a/sys/i386/i386/ptrace_machdep.c b/sys/i386/i386/ptrace_machdep.c index 4608c9b..5965a69 100644 --- a/sys/i386/i386/ptrace_machdep.c +++ b/sys/i386/i386/ptrace_machdep.c @@ -54,10 +54,12 @@ cpu_ptrace(struct thread *td, int req, void *addr, int data) fpstate = &td->td_pcb->pcb_user_save.sv_xmm; switch (req) { case PT_GETXMMREGS: + npxgetregs(td); error = copyout(fpstate, addr, sizeof(*fpstate)); break; case PT_SETXMMREGS: + npxgetregs(td); error = copyin(addr, fpstate, sizeof(*fpstate)); fpstate->sv_env.en_mxcsr &= cpu_mxcsr_mask; break; diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c index 41495b4..c0c5678 100644 --- a/sys/i386/i386/trap.c +++ b/sys/i386/i386/trap.c @@ -344,7 +344,7 @@ trap(struct trapframe *frame) if ((ISPL(frame->tf_cs) == SEL_UPL) || ((frame->tf_eflags & PSL_VM) && - !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL))) { + !(curpcb->pcb_flags & PCB_VM86CALL))) { /* user trap */ td->td_pticks = 0; @@ -369,7 +369,7 @@ trap(struct trapframe *frame) case T_ARITHTRAP: /* arithmetic trap */ #ifdef DEV_NPX - ucode = npxtrap(); + ucode = npxtrap_x87(); if (ucode == -1) goto userout; #else @@ -532,7 +532,13 @@ trap(struct trapframe *frame) break; case T_XMMFLT: /* SIMD floating-point exception */ - ucode = 0; /* XXX */ +#if defined(DEV_NPX) && !defined(CPU_DISABLE_SSE) && defined(I686_CPU) + ucode = npxtrap_sse(); + if (ucode == -1) + goto userout; +#else + ucode = 0; +#endif i = SIGFPE; break; } @@ -587,7 +593,7 @@ trap(struct trapframe *frame) /* FALL THROUGH */ case T_SEGNPFLT: /* segment not present fault */ - if (PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL) + if (curpcb->pcb_flags & PCB_VM86CALL) break; /* @@ -600,7 +606,7 @@ trap(struct trapframe *frame) * a signal. */ if (frame->tf_eip == (int)cpu_switch_load_gs) { - PCPU_GET(curpcb)->pcb_gs = 0; + curpcb->pcb_gs = 0; #if 0 PROC_LOCK(p); kern_psignal(p, SIGBUS); @@ -638,9 +644,9 @@ trap(struct trapframe *frame) frame->tf_eip = (int)doreti_popl_fs_fault; goto out; } - if (PCPU_GET(curpcb)->pcb_onfault != NULL) { + if (curpcb->pcb_onfault != NULL) { frame->tf_eip = - (int)PCPU_GET(curpcb)->pcb_onfault; + (int)curpcb->pcb_onfault; goto out; } break; @@ -690,7 +696,7 @@ trap(struct trapframe *frame) * debugging the kernel. */ if (user_dbreg_trap() && - !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)) { + !(curpcb->pcb_flags & PCB_VM86CALL)) { /* * Reset breakpoint bits because the * processor doesn't @@ -871,7 +877,7 @@ trap_pfault(frame, usermode, eva) * it normally, and panic immediately. */ if (!usermode && (td->td_intr_nesting_level != 0 || - PCPU_GET(curpcb)->pcb_onfault == NULL)) { + curpcb->pcb_onfault == NULL)) { trap_fatal(frame, eva); return (-1); } @@ -929,8 +935,8 @@ trap_pfault(frame, usermode, eva) nogo: if (!usermode) { if (td->td_intr_nesting_level == 0 && - PCPU_GET(curpcb)->pcb_onfault != NULL) { - frame->tf_eip = (int)PCPU_GET(curpcb)->pcb_onfault; + curpcb->pcb_onfault != NULL) { + frame->tf_eip = (int)curpcb->pcb_onfault; return (0); } trap_fatal(frame, eva); diff --git a/sys/i386/i386/vm86.c b/sys/i386/i386/vm86.c index 1aaf31a..93ff855 100644 --- a/sys/i386/i386/vm86.c +++ b/sys/i386/i386/vm86.c @@ -143,9 +143,9 @@ vm86_emulate(vmf) * the extension is not present. (This check should not be needed, * as we can't enter vm86 mode until we set up an extension area) */ - if (PCPU_GET(curpcb)->pcb_ext == 0) + if (curpcb->pcb_ext == 0) return (SIGBUS); - vm86 = &PCPU_GET(curpcb)->pcb_ext->ext_vm86; + vm86 = &curpcb->pcb_ext->ext_vm86; if (vmf->vmf_eflags & PSL_T) retcode = SIGTRAP; @@ -535,7 +535,7 @@ vm86_prepcall(struct vm86frame *vmf) vmf->kernel_fs = vmf->kernel_es = vmf->kernel_ds = 0; vmf->vmf_eflags = PSL_VIF | PSL_VM | PSL_USER; - vm86 = &PCPU_GET(curpcb)->pcb_ext->ext_vm86; + vm86 = &curpcb->pcb_ext->ext_vm86; if (!vm86->vm86_has_vme) vm86->vm86_eflags = vmf->vmf_eflags; /* save VIF, VIP */ } diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c index 0a7bc21..dfaaa8b 100644 --- a/sys/i386/i386/vm_machdep.c +++ b/sys/i386/i386/vm_machdep.c @@ -106,6 +106,10 @@ __FBSDID("$FreeBSD$"); #define NSFBUFS (512 + maxusers * 16) #endif +CTASSERT((struct thread **)OFFSETOF_CURTHREAD == + &((struct pcpu *)NULL)->pc_curthread); +CTASSERT((struct pcb **)OFFSETOF_CURPCB == &((struct pcpu *)NULL)->pc_curpcb); + static void cpu_reset_real(void); #ifdef SMP static void cpu_reset_proxy(void); diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h index 62d268d..7cd3663 100644 --- a/sys/i386/include/cpufunc.h +++ b/sys/i386/include/cpufunc.h @@ -155,6 +155,13 @@ cpu_mwait(u_long extensions, u_int hints) } static __inline void +lfence(void) +{ + + __asm __volatile("lfence" : : : "memory"); +} + +static __inline void mfence(void) { diff --git a/sys/i386/include/npx.h b/sys/i386/include/npx.h index 86ac477..33a47b3 100644 --- a/sys/i386/include/npx.h +++ b/sys/i386/include/npx.h @@ -55,7 +55,8 @@ int npxgetregs(struct thread *td); void npxinit(void); void npxsave(union savefpu *addr); void npxsetregs(struct thread *td, union savefpu *addr); -int npxtrap(void); +int npxtrap_x87(void); +int npxtrap_sse(void); void npxuserinited(struct thread *); struct fpu_kern_ctx *fpu_kern_alloc_ctx(u_int flags); void fpu_kern_free_ctx(struct fpu_kern_ctx *ctx); diff --git a/sys/i386/include/pcpu.h b/sys/i386/include/pcpu.h index aaba413..aa1066d 100644 --- a/sys/i386/include/pcpu.h +++ b/sys/i386/include/pcpu.h @@ -236,16 +236,36 @@ extern struct pcpu *pcpup; #define PCPU_PTR(member) __PCPU_PTR(pc_ ## member) #define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val) +#define OFFSETOF_CURTHREAD 0 +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wnull-dereference" +#endif static __inline __pure2 struct thread * __curthread(void) { struct thread *td; - __asm("movl %%fs:0,%0" : "=r" (td)); + __asm("movl %%fs:%1,%0" : "=r" (td) + : "m" (*(char *)OFFSETOF_CURTHREAD)); return (td); } +#ifdef __clang__ +#pragma clang diagnostic pop +#endif #define curthread (__curthread()) +#define OFFSETOF_CURPCB 16 +static __inline __pure2 struct pcb * +__curpcb(void) +{ + struct pcb *pcb; + + __asm("movl %%fs:%1,%0" : "=r" (pcb) : "m" (*(char *)OFFSETOF_CURPCB)); + return (pcb); +} +#define curpcb (__curpcb()) + #else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */ #error "this file needs to be ported to your compiler" diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c index 50c812c..3b86d84 100644 --- a/sys/i386/isa/npx.c +++ b/sys/i386/isa/npx.c @@ -99,6 +99,7 @@ __FBSDID("$FreeBSD$"); #ifdef CPU_ENABLE_SSE #define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr))) #define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr))) +#define stmxcsr(addr) __asm __volatile("stmxcsr %0" : : "m" (*(addr))) #endif #else /* !(__GNUCLIKE_ASM && !lint) */ @@ -113,6 +114,7 @@ void frstor(caddr_t addr); #ifdef CPU_ENABLE_SSE void fxsave(caddr_t addr); void fxrstor(caddr_t addr); +void stmxcsr(u_int *csr); #endif #endif /* __GNUCLIKE_ASM && !lint */ @@ -376,7 +378,7 @@ npxexit(td) critical_enter(); if (curthread == PCPU_GET(fpcurthread)) - npxsave(PCPU_GET(curpcb)->pcb_save); + npxsave(curpcb->pcb_save); critical_exit(); #ifdef NPX_DEBUG if (hw_float) { @@ -581,29 +583,30 @@ static char fpetable[128] = { }; /* - * Preserve the FP status word, clear FP exceptions, then generate a SIGFPE. + * Read the FP status and control words, then generate si_code value + * for SIGFPE. The error code chosen will be one of the + * FPE_... macros. It will be sent as the second argument to old + * BSD-style signal handlers and as "siginfo_t->si_code" (second + * argument) to SA_SIGINFO signal handlers. * - * Clearing exceptions is necessary mainly to avoid IRQ13 bugs. We now - * depend on longjmp() restoring a usable state. Restoring the state - * or examining it might fail if we didn't clear exceptions. + * Some time ago, we cleared the x87 exceptions with FNCLEX there. + * Clearing exceptions was necessary mainly to avoid IRQ13 bugs. The + * usermode code which understands the FPU hardware enough to enable + * the exceptions, can also handle clearing the exception state in the + * handler. The only consequence of not clearing the exception is the + * rethrow of the SIGFPE on return from the signal handler and + * reexecution of the corresponding instruction. * - * The error code chosen will be one of the FPE_... macros. It will be - * sent as the second argument to old BSD-style signal handlers and as - * "siginfo_t->si_code" (second argument) to SA_SIGINFO signal handlers. - * - * XXX the FP state is not preserved across signal handlers. So signal - * handlers cannot afford to do FP unless they preserve the state or - * longjmp() out. Both preserving the state and longjmp()ing may be - * destroyed by IRQ13 bugs. Clearing FP exceptions is not an acceptable - * solution for signals other than SIGFPE. + * For XMM traps, the exceptions were never cleared. */ int -npxtrap() +npxtrap_x87(void) { u_short control, status; if (!hw_float) { - printf("npxtrap: fpcurthread = %p, curthread = %p, hw_float = %d\n", + printf( + "npxtrap_x87: fpcurthread = %p, curthread = %p, hw_float = %d\n", PCPU_GET(fpcurthread), curthread, hw_float); panic("npxtrap from nowhere"); } @@ -621,13 +624,32 @@ npxtrap() fnstcw(&control); fnstsw(&status); } - - if (PCPU_GET(fpcurthread) == curthread) - fnclex(); critical_exit(); return (fpetable[status & ((~control & 0x3f) | 0x40)]); } +#ifdef CPU_ENABLE_SSE +int +npxtrap_sse(void) +{ + u_int mxcsr; + + if (!hw_float) { + printf( + "npxtrap_sse: fpcurthread = %p, curthread = %p, hw_float = %d\n", + PCPU_GET(fpcurthread), curthread, hw_float); + panic("npxtrap from nowhere"); + } + critical_enter(); + if (PCPU_GET(fpcurthread) != curthread) + mxcsr = curthread->td_pcb->pcb_save->sv_xmm.sv_env.en_mxcsr; + else + stmxcsr(&mxcsr); + critical_exit(); + return (fpetable[(mxcsr & (~mxcsr >> 7)) & 0x3f]); +} +#endif + /* * Implement device not available (DNA) exception * @@ -641,7 +663,6 @@ static int err_count = 0; int npxdna(void) { - struct pcb *pcb; if (!hw_float) return (0); @@ -665,25 +686,24 @@ npxdna(void) * Record new context early in case frstor causes an IRQ13. */ PCPU_SET(fpcurthread, curthread); - pcb = PCPU_GET(curpcb); #ifdef CPU_ENABLE_SSE if (cpu_fxsr) fpu_clean_state(); #endif - if ((pcb->pcb_flags & PCB_NPXINITDONE) == 0) { + if ((curpcb->pcb_flags & PCB_NPXINITDONE) == 0) { /* * This is the first time this thread has used the FPU or * the PCB doesn't contain a clean FPU state. Explicitly * load an initial state. */ fpurstor(&npx_initialstate); - if (pcb->pcb_initial_npxcw != __INITIAL_NPXCW__) - fldcw(pcb->pcb_initial_npxcw); - pcb->pcb_flags |= PCB_NPXINITDONE; - if (PCB_USER_FPU(pcb)) - pcb->pcb_flags |= PCB_NPXUSERINITDONE; + if (curpcb->pcb_initial_npxcw != __INITIAL_NPXCW__) + fldcw(curpcb->pcb_initial_npxcw); + curpcb->pcb_flags |= PCB_NPXINITDONE; + if (PCB_USER_FPU(curpcb)) + curpcb->pcb_flags |= PCB_NPXUSERINITDONE; } else { /* * The following fpurstor() may cause an IRQ13 when the @@ -699,7 +719,7 @@ npxdna(void) * fnclex if it is the first FPU instruction after a context * switch. */ - fpurstor(pcb->pcb_save); + fpurstor(curpcb->pcb_save); } critical_exit(); @@ -1077,13 +1097,14 @@ fpu_kern_thread(u_int flags) { struct pcb *pcb; - pcb = PCPU_GET(curpcb); + pcb = curpcb; KASSERT((curthread->td_pflags & TDP_KTHREAD) != 0, ("Only kthread may use fpu_kern_thread")); - KASSERT(pcb->pcb_save == &pcb->pcb_user_save, ("mangled pcb_save")); - KASSERT(PCB_USER_FPU(pcb), ("recursive call")); + KASSERT(curpcb->pcb_save == &curpcb->pcb_user_save, + ("mangled pcb_save")); + KASSERT(PCB_USER_FPU(curpcb), ("recursive call")); - pcb->pcb_flags |= PCB_KERNNPX; + curpcb->pcb_flags |= PCB_KERNNPX; return (0); } @@ -1093,5 +1114,5 @@ is_fpu_kern_thread(u_int flags) if ((curthread->td_pflags & TDP_KTHREAD) == 0) return (0); - return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNNPX) != 0); + return ((curpcb->pcb_flags & PCB_KERNNPX) != 0); } diff --git a/sys/i386/linux/linux_proto.h b/sys/i386/linux/linux_proto.h index b99dd96..9373d3e 100644 --- a/sys/i386/linux/linux_proto.h +++ b/sys/i386/linux/linux_proto.h @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim + * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb */ #ifndef _LINUX_SYSPROTO_H_ @@ -261,7 +261,7 @@ struct linux_symlink_args { }; struct linux_lstat_args { char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; - char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(struct ostat *)]; + char up_l_[PADL_(struct l_stat *)]; struct l_stat * up; char up_r_[PADR_(struct l_stat *)]; }; struct linux_readlink_args { char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)]; diff --git a/sys/i386/linux/linux_syscall.h b/sys/i386/linux/linux_syscall.h index 3e33c17..c02e40b 100644 --- a/sys/i386/linux/linux_syscall.h +++ b/sys/i386/linux/linux_syscall.h @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim + * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb */ #define LINUX_SYS_exit 1 diff --git a/sys/i386/linux/linux_syscalls.c b/sys/i386/linux/linux_syscalls.c index e54ba67..4e7646a 100644 --- a/sys/i386/linux/linux_syscalls.c +++ b/sys/i386/linux/linux_syscalls.c @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim + * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb */ const char *linux_syscallnames[] = { diff --git a/sys/i386/linux/linux_sysent.c b/sys/i386/linux/linux_sysent.c index 692c91e..fc64fdd 100644 --- a/sys/i386/linux/linux_sysent.c +++ b/sys/i386/linux/linux_sysent.c @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim + * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb */ #include <sys/param.h> diff --git a/sys/i386/linux/linux_systrace_args.c b/sys/i386/linux/linux_systrace_args.c index 063b2f7..dfdd430 100644 --- a/sys/i386/linux/linux_systrace_args.c +++ b/sys/i386/linux/linux_systrace_args.c @@ -570,7 +570,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args) case 84: { struct linux_lstat_args *p = params; uarg[0] = (intptr_t) p->path; /* char * */ - uarg[1] = (intptr_t) p->up; /* struct ostat * */ + uarg[1] = (intptr_t) p->up; /* struct l_stat * */ *n_args = 2; break; } @@ -3192,7 +3192,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) p = "char *"; break; case 1: - p = "struct ostat *"; + p = "struct l_stat *"; break; default: break; diff --git a/sys/i386/linux/syscalls.master b/sys/i386/linux/syscalls.master index 0f2139c..bb17166 100644 --- a/sys/i386/linux/syscalls.master +++ b/sys/i386/linux/syscalls.master @@ -158,7 +158,7 @@ struct l_old_select_argv *ptr); } 83 AUE_SYMLINK STD { int linux_symlink(char *path, char *to); } ; 84: oldlstat -84 AUE_LSTAT STD { int linux_lstat(char *path, struct ostat *up); } +84 AUE_LSTAT STD { int linux_lstat(char *path, struct l_stat *up); } 85 AUE_READLINK STD { int linux_readlink(char *name, char *buf, \ l_int count); } 86 AUE_USELIB STD { int linux_uselib(char *library); } diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c index 3ade6a2..3ae78de 100644 --- a/sys/kern/imgact_aout.c +++ b/sys/kern/imgact_aout.c @@ -106,6 +106,7 @@ struct sysentvec aout_sysvec = { #define AOUT32_USRSTACK 0xbfc00000 #define AOUT32_PS_STRINGS \ (AOUT32_USRSTACK - sizeof(struct freebsd32_ps_strings)) +#define AOUT32_MINUSER FREEBSD32_MINUSER extern const char *freebsd32_syscallnames[]; extern u_long ia32_maxssiz; @@ -129,7 +130,7 @@ struct sysentvec aout_sysvec = { .sv_imgact_try = NULL, .sv_minsigstksz = MINSIGSTKSZ, .sv_pagesize = IA32_PAGE_SIZE, - .sv_minuser = 0, + .sv_minuser = AOUT32_MINUSER, .sv_maxuser = AOUT32_USRSTACK, .sv_usrstack = AOUT32_USRSTACK, .sv_psstrings = AOUT32_PS_STRINGS, diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index 5d0f494..b626610 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -83,7 +83,7 @@ __FBSDID("$FreeBSD$"); static int __elfN(check_header)(const Elf_Ehdr *hdr); static Elf_Brandinfo *__elfN(get_brandinfo)(struct image_params *imgp, - const char *interp, int32_t *osrel); + const char *interp, int interp_name_len, int32_t *osrel); static int __elfN(load_file)(struct proc *p, const char *file, u_long *addr, u_long *entry, size_t pagesize); static int __elfN(load_section)(struct image_params *imgp, vm_offset_t offset, @@ -254,7 +254,7 @@ __elfN(brand_inuse)(Elf_Brandinfo *entry) static Elf_Brandinfo * __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, - int32_t *osrel) + int interp_name_len, int32_t *osrel) { const Elf_Ehdr *hdr = (const Elf_Ehdr *)imgp->image_header; Elf_Brandinfo *bi; @@ -300,7 +300,10 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY) continue; if (hdr->e_machine == bi->machine && - strcmp(interp, bi->interp_path) == 0) + /* ELF image p_filesz includes terminating zero */ + strlen(bi->interp_path) + 1 == interp_name_len && + strncmp(interp, bi->interp_path, interp_name_len) + == 0) return (bi); } } @@ -722,7 +725,7 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp) u_long seg_size, seg_addr; u_long addr, baddr, et_dyn_addr, entry = 0, proghdr = 0; int32_t osrel = 0; - int error = 0, i, n; + int error = 0, i, n, interp_name_len = 0; const char *interp = NULL, *newinterp = NULL; Elf_Brandinfo *brand_info; char *path; @@ -763,9 +766,11 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp) case PT_INTERP: /* Path to interpreter */ if (phdr[i].p_filesz > MAXPATHLEN || - phdr[i].p_offset + phdr[i].p_filesz > PAGE_SIZE) + phdr[i].p_offset >= PAGE_SIZE || + phdr[i].p_offset + phdr[i].p_filesz >= PAGE_SIZE) return (ENOEXEC); interp = imgp->image_header + phdr[i].p_offset; + interp_name_len = phdr[i].p_filesz; break; case PT_GNU_STACK: if (__elfN(nxstack)) @@ -775,7 +780,8 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp) } } - brand_info = __elfN(get_brandinfo)(imgp, interp, &osrel); + brand_info = __elfN(get_brandinfo)(imgp, interp, interp_name_len, + &osrel); if (brand_info == NULL) { uprintf("ELF binary type \"%u\" not known.\n", hdr->e_ident[EI_OSABI]); @@ -1562,6 +1568,7 @@ __elfN(parse_notes)(struct image_params *imgp, Elf_Brandnote *checknote, int i; if (pnote == NULL || pnote->p_offset >= PAGE_SIZE || + pnote->p_filesz > PAGE_SIZE || pnote->p_offset + pnote->p_filesz >= PAGE_SIZE) return (FALSE); @@ -1569,15 +1576,17 @@ __elfN(parse_notes)(struct image_params *imgp, Elf_Brandnote *checknote, note_end = (const Elf_Note *)(imgp->image_header + pnote->p_offset + pnote->p_filesz); for (i = 0; i < 100 && note >= note0 && note < note_end; i++) { - if (!aligned(note, Elf32_Addr)) + if (!aligned(note, Elf32_Addr) || (const char *)note_end - + (const char *)note < sizeof(Elf_Note)) return (FALSE); if (note->n_namesz != checknote->hdr.n_namesz || note->n_descsz != checknote->hdr.n_descsz || note->n_type != checknote->hdr.n_type) goto nextnote; note_name = (const char *)(note + 1); - if (strncmp(checknote->vendor, note_name, - checknote->hdr.n_namesz) != 0) + if (note_name + checknote->hdr.n_namesz >= + (const char *)note_end || strncmp(checknote->vendor, + note_name, checknote->hdr.n_namesz) != 0) goto nextnote; /* diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c index 26279a4..a7a0da4 100644 --- a/sys/kern/kern_clocksource.c +++ b/sys/kern/kern_clocksource.c @@ -205,19 +205,21 @@ handleevents(struct bintime *now, int fake) runs = 0; while (bintime_cmp(now, &state->nexthard, >=)) { - bintime_add(&state->nexthard, &hardperiod); + bintime_addx(&state->nexthard, hardperiod.frac); runs++; } - if ((timer->et_flags & ET_FLAGS_PERCPU) == 0 && - bintime_cmp(&state->nexthard, &nexthard, >)) - nexthard = state->nexthard; - if (runs && fake < 2) { - hardclock_cnt(runs, usermode); - done = 1; + if (runs) { + if ((timer->et_flags & ET_FLAGS_PERCPU) == 0 && + bintime_cmp(&state->nexthard, &nexthard, >)) + nexthard = state->nexthard; + if (fake < 2) { + hardclock_cnt(runs, usermode); + done = 1; + } } runs = 0; while (bintime_cmp(now, &state->nextstat, >=)) { - bintime_add(&state->nextstat, &statperiod); + bintime_addx(&state->nextstat, statperiod.frac); runs++; } if (runs && fake < 2) { @@ -227,7 +229,7 @@ handleevents(struct bintime *now, int fake) if (profiling) { runs = 0; while (bintime_cmp(now, &state->nextprof, >=)) { - bintime_add(&state->nextprof, &profperiod); + bintime_addx(&state->nextprof, profperiod.frac); runs++; } if (runs && !fake) { @@ -356,7 +358,7 @@ timercb(struct eventtimer *et, void *arg) next = &nexttick; if (periodic) { now = *next; /* Ex-next tick time becomes present time. */ - bintime_add(next, &timerperiod); /* Next tick in 1 period. */ + bintime_addx(next, timerperiod.frac); /* Next tick in 1 period. */ } else { binuptime(&now); /* Get present time from hardware. */ next->sec = -1; /* Next tick is not scheduled yet. */ @@ -433,7 +435,7 @@ loadtimer(struct bintime *now, int start) new.sec = 0; new.frac = timerperiod.frac - tmp; if (new.frac < tmp) /* Left less then passed. */ - bintime_add(&new, &timerperiod); + bintime_addx(&new, timerperiod.frac); CTR5(KTR_SPARE2, "load p at %d: now %d.%08x first in %d.%08x", curcpu, now->sec, (unsigned int)(now->frac >> 32), new.sec, (unsigned int)(new.frac >> 32)); @@ -531,7 +533,7 @@ configtimer(int start) if (start) { /* Initialize time machine parameters. */ next = now; - bintime_add(&next, &timerperiod); + bintime_addx(&next, timerperiod.frac); if (periodic) nexttick = next; else diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index f8e3f3d..9ed6369 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -113,6 +113,7 @@ static uma_zone_t file_zone; /* Flags for do_dup() */ #define DUP_FIXED 0x1 /* Force fixed allocation */ #define DUP_FCNTL 0x2 /* fcntl()-style errors */ +#define DUP_CLOEXEC 0x4 /* Atomically set FD_CLOEXEC. */ static int closefp(struct filedesc *fdp, int fd, struct file *fp, struct thread *td, int holdleaders); @@ -366,7 +367,7 @@ int sys_fcntl(struct thread *td, struct fcntl_args *uap) { struct flock fl; - struct oflock ofl; + struct __oflock ofl; intptr_t arg; int error; int cmd; @@ -479,11 +480,23 @@ kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg) error = do_dup(td, DUP_FCNTL, fd, tmp, td->td_retval); break; + case F_DUPFD_CLOEXEC: + tmp = arg; + error = do_dup(td, DUP_FCNTL | DUP_CLOEXEC, fd, tmp, + td->td_retval); + break; + case F_DUP2FD: tmp = arg; error = do_dup(td, DUP_FIXED, fd, tmp, td->td_retval); break; + case F_DUP2FD_CLOEXEC: + tmp = arg; + error = do_dup(td, DUP_FIXED | DUP_CLOEXEC, fd, tmp, + td->td_retval); + break; + case F_GETFD: FILEDESC_SLOCK(fdp); if ((fp = fget_locked(fdp, fd)) == NULL) { @@ -842,6 +855,8 @@ do_dup(struct thread *td, int flags, int old, int new, } if (flags & DUP_FIXED && old == new) { *retval = new; + if (flags & DUP_CLOEXEC) + fdp->fd_ofileflags[new] |= UF_EXCLOSE; FILEDESC_XUNLOCK(fdp); return (0); } @@ -895,7 +910,10 @@ do_dup(struct thread *td, int flags, int old, int new, * Duplicate the source descriptor. */ fdp->fd_ofiles[new] = fp; - fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] &~ UF_EXCLOSE; + if ((flags & DUP_CLOEXEC) != 0) + fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] | UF_EXCLOSE; + else + fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] & ~UF_EXCLOSE; if (new > fdp->fd_lastfile) fdp->fd_lastfile = new; *retval = new; diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index b25c678..6a920ca 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -513,6 +513,10 @@ knote_fork(struct knlist *list, int pid) list->kl_unlock(list->kl_lockarg); } +/* + * XXX: EVFILT_TIMER should perhaps live in kern_time.c beside the + * interval timer support code. + */ static int timertoticks(intptr_t data) { @@ -526,7 +530,6 @@ timertoticks(intptr_t data) return tticks; } -/* XXX - move to kern_timeout.c? */ static void filt_timerexpire(void *knx) { @@ -536,9 +539,16 @@ filt_timerexpire(void *knx) kn->kn_data++; KNOTE_ACTIVATE(kn, 0); /* XXX - handle locking */ + /* + * timertoticks() uses tvtohz() which always adds 1 to allow + * for the time until the next clock interrupt being strictly + * less than 1 clock tick. We don't want that here since we + * want to appear to be in sync with the clock interrupt even + * when we're delayed. + */ if ((kn->kn_flags & EV_ONESHOT) != EV_ONESHOT) { calloutp = (struct callout *)kn->kn_hook; - callout_reset_curcpu(calloutp, timertoticks(kn->kn_sdata), + callout_reset_curcpu(calloutp, timertoticks(kn->kn_sdata) - 1, filt_timerexpire, kn); } } @@ -546,7 +556,6 @@ filt_timerexpire(void *knx) /* * data contains amount of time to sleep, in milliseconds */ -/* XXX - move to kern_timeout.c? */ static int filt_timerattach(struct knote *kn) { @@ -570,7 +579,6 @@ filt_timerattach(struct knote *kn) return (0); } -/* XXX - move to kern_timeout.c? */ static void filt_timerdetach(struct knote *kn) { @@ -583,7 +591,6 @@ filt_timerdetach(struct knote *kn) kn->kn_status |= KN_DETACHED; /* knlist_remove usually clears it */ } -/* XXX - move to kern_timeout.c? */ static int filt_timer(struct knote *kn, long hint) { diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index 60bc9c8..6adca69 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -283,7 +283,7 @@ ktr_tracepoint(u_int mask, const char *file, int line, const char *format, { do { saveindex = ktr_idx; - newindex = (saveindex + 1) & (KTR_ENTRIES - 1); + newindex = (saveindex + 1) % KTR_ENTRIES; } while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) == 0); entry = &ktr_buf[saveindex]; } @@ -338,7 +338,7 @@ static int db_mach_vtrace(void); DB_SHOW_COMMAND(ktr, db_ktr_all) { - tstate.cur = (ktr_idx - 1) & (KTR_ENTRIES - 1); + tstate.cur = (ktr_idx - 1) % KTR_ENTRIES; tstate.first = -1; db_ktr_verbose = 0; db_ktr_verbose |= (strchr(modif, 'v') != NULL) ? 2 : 0; diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c index 18428c0..e06fa59 100644 --- a/sys/kern/kern_malloc.c +++ b/sys/kern/kern_malloc.c @@ -744,7 +744,7 @@ kmeminit(void *dummy) vm_kmem_size = 2 * mem_size * PAGE_SIZE; #ifdef DEBUG_MEMGUARD - tmp = memguard_fudge(vm_kmem_size, vm_kmem_size_max); + tmp = memguard_fudge(vm_kmem_size, kernel_map); #else tmp = vm_kmem_size; #endif diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 153b310..9d419c7 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -2189,6 +2189,10 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_ARGS) kve->kve_flags |= KVME_FLAG_NEEDS_COPY; if (entry->eflags & MAP_ENTRY_NOCOREDUMP) kve->kve_flags |= KVME_FLAG_NOCOREDUMP; + if (entry->eflags & MAP_ENTRY_GROWS_UP) + kve->kve_flags |= KVME_FLAG_GROWS_UP; + if (entry->eflags & MAP_ENTRY_GROWS_DOWN) + kve->kve_flags |= KVME_FLAG_GROWS_DOWN; last_timestamp = map->timestamp; vm_map_unlock_read(map); diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c index 4a75af5..a08b218 100644 --- a/sys/kern/kern_tc.c +++ b/sys/kern/kern_tc.c @@ -122,6 +122,8 @@ SYSCTL_INT(_kern_timecounter, OID_AUTO, stepwarnings, CTLFLAG_RW, static void tc_windup(void); static void cpu_tick_calibrate(int); +void dtrace_getnanotime(struct timespec *tsp); + static int sysctl_kern_boottime(SYSCTL_HANDLER_ARGS) { @@ -960,6 +962,24 @@ getmicrotime(struct timeval *tvp) #endif /* FFCLOCK */ /* + * This is a clone of getnanotime and used for walltimestamps. + * The dtrace_ prefix prevents fbt from creating probes for + * it so walltimestamp can be safely used in all fbt probes. + */ +void +dtrace_getnanotime(struct timespec *tsp) +{ + struct timehands *th; + u_int gen; + + do { + th = timehands; + gen = th->th_generation; + *tsp = th->th_nanotime; + } while (gen == 0 || gen != th->th_generation); +} + +/* * System clock currently providing time to the system. Modifiable via sysctl * when the FFCLOCK option is defined. */ diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 43c39fc..338256c 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -227,7 +227,6 @@ static int pipe_create(struct pipe *pipe, int backing); static int pipe_paircreate(struct thread *td, struct pipepair **p_pp); static __inline int pipelock(struct pipe *cpipe, int catch); static __inline void pipeunlock(struct pipe *cpipe); -static __inline void pipeselwakeup(struct pipe *cpipe); #ifndef PIPE_NODIRECT static int pipe_build_write_buffer(struct pipe *wpipe, struct uio *uio); static void pipe_destroy_write_buffer(struct pipe *wpipe); @@ -607,7 +606,7 @@ pipeunlock(cpipe) } } -static __inline void +void pipeselwakeup(cpipe) struct pipe *cpipe; { @@ -738,7 +737,7 @@ pipe_read(fp, uio, active_cred, flags, td) rpipe->pipe_map.pos += size; rpipe->pipe_map.cnt -= size; if (rpipe->pipe_map.cnt == 0) { - rpipe->pipe_state &= ~PIPE_DIRECTW; + rpipe->pipe_state &= ~(PIPE_DIRECTW|PIPE_WANTW); wakeup(rpipe); } #endif @@ -1001,6 +1000,7 @@ retry: wakeup(wpipe); } pipeselwakeup(wpipe); + wpipe->pipe_state |= PIPE_WANTW; pipeunlock(wpipe); error = msleep(wpipe, PIPE_MTX(wpipe), PRIBIO | PCATCH, "pipdwt", 0); @@ -1442,7 +1442,7 @@ pipe_poll(fp, events, active_cred, td) levents = events & (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND); if (rpipe->pipe_state & PIPE_NAMED && fp->f_flag & FREAD && levents && - rpipe->pipe_state & PIPE_SAMEWGEN) + fp->f_seqcount == rpipe->pipe_wgen) events |= POLLINIGNEOF; if ((events & POLLINIGNEOF) == 0) { diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 66ab5a3..cc6d93c 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1093,8 +1093,7 @@ kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg, struct file *fp; struct vnode *vp; int cmode; - int type, indx = -1, error; - struct flock lf; + int indx = -1, error; struct nameidata nd; int vfslocked; cap_rights_t rights_needed = CAP_LOOKUP; @@ -1180,26 +1179,11 @@ kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg, if (fp->f_ops == &badfileops) { KASSERT(vp->v_type != VFIFO, ("Unexpected fifo.")); fp->f_seqcount = 1; - finit(fp, flags & FMASK, DTYPE_VNODE, vp, &vnops); + finit(fp, (flags & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE, + vp, &vnops); } VOP_UNLOCK(vp, 0); - if (fp->f_type == DTYPE_VNODE && (flags & (O_EXLOCK | O_SHLOCK)) != 0) { - lf.l_whence = SEEK_SET; - lf.l_start = 0; - lf.l_len = 0; - if (flags & O_EXLOCK) - lf.l_type = F_WRLCK; - else - lf.l_type = F_RDLCK; - type = F_FLOCK; - if ((flags & FNONBLOCK) == 0) - type |= F_WAIT; - if ((error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, - type)) != 0) - goto bad; - atomic_set_int(&fp->f_flag, FHASLOCK); - } if (flags & O_TRUNC) { error = fo_truncate(fp, 0, td->td_ucred, td); if (error) @@ -4483,9 +4467,8 @@ sys_fhopen(td, uap) struct mount *mp; struct vnode *vp; struct fhandle fhp; - struct flock lf; struct file *fp; - int fmode, error, type; + int fmode, error; int vfslocked; int indx; @@ -4542,24 +4525,9 @@ sys_fhopen(td, uap) #endif fp->f_vnode = vp; fp->f_seqcount = 1; - finit(fp, fmode & FMASK, DTYPE_VNODE, vp, &vnops); + finit(fp, (fmode & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE, vp, + &vnops); VOP_UNLOCK(vp, 0); - if (fmode & (O_EXLOCK | O_SHLOCK)) { - lf.l_whence = SEEK_SET; - lf.l_start = 0; - lf.l_len = 0; - if (fmode & O_EXLOCK) - lf.l_type = F_WRLCK; - else - lf.l_type = F_RDLCK; - type = F_FLOCK; - if ((fmode & FNONBLOCK) == 0) - type |= F_WAIT; - if ((error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, - type)) != 0) - goto bad; - atomic_set_int(&fp->f_flag, FHASLOCK); - } if (fmode & O_TRUNC) { error = fo_truncate(fp, 0, td->td_ucred, td); if (error) diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index b5dcadf..0ad2db8 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -229,8 +229,10 @@ int vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred, struct thread *td, struct file *fp) { + struct mount *mp; accmode_t accmode; - int error; + struct flock lf; + int error, have_flock, lock_flags, type; VFS_ASSERT_GIANT(vp->v_mount); if (vp->v_type == VLNK) @@ -271,6 +273,51 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred, if ((error = VOP_OPEN(vp, fmode, cred, td, fp)) != 0) return (error); + if (fmode & (O_EXLOCK | O_SHLOCK)) { + KASSERT(fp != NULL, ("open with flock requires fp")); + lock_flags = VOP_ISLOCKED(vp); + VOP_UNLOCK(vp, 0); + lf.l_whence = SEEK_SET; + lf.l_start = 0; + lf.l_len = 0; + if (fmode & O_EXLOCK) + lf.l_type = F_WRLCK; + else + lf.l_type = F_RDLCK; + type = F_FLOCK; + if ((fmode & FNONBLOCK) == 0) + type |= F_WAIT; + error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, type); + have_flock = (error == 0); + vn_lock(vp, lock_flags | LK_RETRY); + if (error == 0 && vp->v_iflag & VI_DOOMED) + error = ENOENT; + /* + * Another thread might have used this vnode as an + * executable while the vnode lock was dropped. + * Ensure the vnode is still able to be opened for + * writing after the lock has been obtained. + */ + if (error == 0 && accmode & VWRITE) + error = vn_writechk(vp); + if (error) { + VOP_UNLOCK(vp, 0); + if (have_flock) { + lf.l_whence = SEEK_SET; + lf.l_start = 0; + lf.l_len = 0; + lf.l_type = F_UNLCK; + (void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, + F_FLOCK); + } + vn_start_write(vp, &mp, V_WAIT); + vn_lock(vp, lock_flags | LK_RETRY); + (void)VOP_CLOSE(vp, fmode, cred, td); + vn_finished_write(mp); + return (error); + } + fp->f_flag |= FHASLOCK; + } if (fmode & FWRITE) { vp->v_writecount++; CTR3(KTR_VFS, "%s: vp %p v_writecount increased to %d", @@ -1400,19 +1447,22 @@ vn_closefile(fp, td) int error; vp = fp->f_vnode; + fp->f_ops = &badfileops; vfslocked = VFS_LOCK_GIANT(vp->v_mount); + if (fp->f_type == DTYPE_VNODE && fp->f_flag & FHASLOCK) + vref(vp); + + error = vn_close(vp, fp->f_flag, fp->f_cred, td); + if (fp->f_type == DTYPE_VNODE && fp->f_flag & FHASLOCK) { lf.l_whence = SEEK_SET; lf.l_start = 0; lf.l_len = 0; lf.l_type = F_UNLCK; (void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, F_FLOCK); + vrele(vp); } - - fp->f_ops = &badfileops; - - error = vn_close(vp, fp->f_flag, fp->f_cred, td); VFS_UNLOCK_GIANT(vfslocked); return (error); } diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c index d00f1a3..d4b364b 100644 --- a/sys/mips/mips/pmap.c +++ b/sys/mips/mips/pmap.c @@ -1034,9 +1034,9 @@ pmap_grow_direct_page_cache() { #ifdef __mips_n64 - vm_contig_grow_cache(3, 0, MIPS_XKPHYS_LARGEST_PHYS); + vm_pageout_grow_cache(3, 0, MIPS_XKPHYS_LARGEST_PHYS); #else - vm_contig_grow_cache(3, 0, MIPS_KSEG0_LARGEST_PHYS); + vm_pageout_grow_cache(3, 0, MIPS_KSEG0_LARGEST_PHYS); #endif } @@ -3146,16 +3146,16 @@ init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot) pt_entry_t rw; if (!(prot & VM_PROT_WRITE)) - rw = PTE_V | PTE_RO | PTE_C_CACHE; + rw = PTE_V | PTE_RO; else if ((m->oflags & VPO_UNMANAGED) == 0) { if ((m->md.pv_flags & PV_TABLE_MOD) != 0) - rw = PTE_V | PTE_D | PTE_C_CACHE; + rw = PTE_V | PTE_D; else - rw = PTE_V | PTE_C_CACHE; + rw = PTE_V; vm_page_aflag_set(m, PGA_WRITEABLE); } else /* Needn't emulate a modified bit for unmanaged pages. */ - rw = PTE_V | PTE_D | PTE_C_CACHE; + rw = PTE_V | PTE_D; return (rw); } diff --git a/sys/modules/ahci/Makefile b/sys/modules/ahci/Makefile index d682839..ab2a0ed 100644 --- a/sys/modules/ahci/Makefile +++ b/sys/modules/ahci/Makefile @@ -3,6 +3,6 @@ .PATH: ${.CURDIR}/../../dev/ahci KMOD= ahci -SRCS= ahci.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h +SRCS= ahci.c ahciem.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h .include <bsd.kmod.mk> diff --git a/sys/modules/ath/Makefile b/sys/modules/ath/Makefile index 44be449..e3e62c4 100644 --- a/sys/modules/ath/Makefile +++ b/sys/modules/ath/Makefile @@ -37,7 +37,7 @@ ATH_RATE?= sample # tx rate control algorithm KMOD= if_ath SRCS= if_ath.c if_ath_debug.c if_ath_keycache.c if_ath_sysctl.c SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c if_ath_rx.c if_ath_tdma.c -SRCS+= if_ath_beacon.c if_ath_rx_edma.c +SRCS+= if_ath_beacon.c if_ath_rx_edma.c if_ath_tx_edma.c # NB: v3 eeprom support used by both AR5211 and AR5212; just include it SRCS+= ah_osdep.c ah.c ah_regdomain.c ah_eeprom_v3.c SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h diff --git a/sys/modules/cam/Makefile b/sys/modules/cam/Makefile index 30c03ff..00a531a 100644 --- a/sys/modules/cam/Makefile +++ b/sys/modules/cam/Makefile @@ -14,7 +14,6 @@ SRCS+= opt_scsi.h SRCS+= opt_cd.h SRCS+= opt_pt.h SRCS+= opt_sa.h -SRCS+= opt_enc.h SRCS+= device_if.h bus_if.h vnode_if.h SRCS+= cam.c .if exists($S/${MACHINE}/${MACHINE}/cam_machdep.c) diff --git a/sys/net/flowtable.c b/sys/net/flowtable.c index 0e50377..2e209ef 100644 --- a/sys/net/flowtable.c +++ b/sys/net/flowtable.c @@ -1258,7 +1258,7 @@ uncached: else l3addr = (struct sockaddr_storage *)&ro->ro_dst; - llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp); + lle = llentry_alloc(ifp, LLTABLE6(ifp), l3addr); } #endif #ifdef INET @@ -1267,7 +1267,7 @@ uncached: l3addr = (struct sockaddr_storage *)rt->rt_gateway; else l3addr = (struct sockaddr_storage *)&ro->ro_dst; - llentry_update(&lle, LLTABLE(ifp), l3addr, ifp); + lle = llentry_alloc(ifp, LLTABLE(ifp), l3addr); } #endif diff --git a/sys/net/if_llatbl.c b/sys/net/if_llatbl.c index 8092f0f..bb49fdd 100644 --- a/sys/net/if_llatbl.c +++ b/sys/net/if_llatbl.c @@ -106,10 +106,19 @@ llentry_free(struct llentry *lle) size_t pkts_dropped; struct mbuf *next; - pkts_dropped = 0; + IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp); LLE_WLOCK_ASSERT(lle); + + /* XXX: guard against race with other llentry_free(). */ + if (!(lle->la_flags & LLE_LINKED)) { + LLE_FREE_LOCKED(lle); + return (0); + } + LIST_REMOVE(lle, lle_next); + lle->la_flags &= ~(LLE_VALID | LLE_LINKED); + pkts_dropped = 0; while ((lle->la_numheld > 0) && (lle->la_hold != NULL)) { next = lle->la_hold->m_nextpkt; m_freem(lle->la_hold); @@ -118,53 +127,43 @@ llentry_free(struct llentry *lle) pkts_dropped++; } - KASSERT(lle->la_numheld == 0, - ("%s: la_numheld %d > 0, pkts_droped %zd", __func__, + KASSERT(lle->la_numheld == 0, + ("%s: la_numheld %d > 0, pkts_droped %zd", __func__, lle->la_numheld, pkts_dropped)); - lle->la_flags &= ~LLE_VALID; LLE_FREE_LOCKED(lle); return (pkts_dropped); } /* - * Update an llentry for address dst (equivalent to rtalloc for new-arp) - * Caller must pass in a valid struct llentry * (or NULL) + * (al)locate an llentry for address dst (equivalent to rtalloc for new-arp). * - * if found the llentry * is returned referenced and unlocked + * If found the llentry * is returned referenced and unlocked. */ -int -llentry_update(struct llentry **llep, struct lltable *lt, - struct sockaddr_storage *dst, struct ifnet *ifp) +struct llentry * +llentry_alloc(struct ifnet *ifp, struct lltable *lt, + struct sockaddr_storage *dst) { struct llentry *la; - IF_AFDATA_RLOCK(ifp); - la = lla_lookup(lt, LLE_EXCLUSIVE, - (struct sockaddr *)dst); + IF_AFDATA_RLOCK(ifp); + la = lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst); IF_AFDATA_RUNLOCK(ifp); - if ((la == NULL) && + if ((la == NULL) && (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) { IF_AFDATA_WLOCK(ifp); - la = lla_lookup(lt, - (LLE_CREATE | LLE_EXCLUSIVE), + la = lla_lookup(lt, (LLE_CREATE | LLE_EXCLUSIVE), (struct sockaddr *)dst); - IF_AFDATA_WUNLOCK(ifp); + IF_AFDATA_WUNLOCK(ifp); } - if (la != NULL && (*llep != la)) { - if (*llep != NULL) - LLE_FREE(*llep); + + if (la != NULL) { LLE_ADDREF(la); LLE_WUNLOCK(la); - *llep = la; - } else if (la != NULL) - LLE_WUNLOCK(la); - - if (la == NULL) - return (ENOENT); + } - return (0); + return (la); } /* @@ -182,17 +181,16 @@ lltable_free(struct lltable *llt) SLIST_REMOVE(&V_lltables, llt, lltable, llt_link); LLTABLE_WUNLOCK(); - for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + IF_AFDATA_WLOCK(llt->llt_ifp); + for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { - int canceled; - - canceled = callout_drain(&lle->la_timer); LLE_WLOCK(lle); - if (canceled) + if (callout_stop(&lle->la_timer)) LLE_REMREF(lle); llentry_free(lle); } } + IF_AFDATA_WUNLOCK(llt->llt_ifp); free(llt, M_LLTABLE); } @@ -227,7 +225,7 @@ lltable_drain(int af) void lltable_prefix_free(int af, struct sockaddr *prefix, struct sockaddr *mask, - u_int flags) + u_int flags) { struct lltable *llt; @@ -297,7 +295,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info) if (rtm->rtm_flags & RTF_ANNOUNCE) { flags |= LLE_PUB; #ifdef INET - if (dst->sa_family == AF_INET && + if (dst->sa_family == AF_INET && ((struct sockaddr_inarp *)dst)->sin_other != 0) { struct rtentry *rt; ((struct sockaddr_inarp *)dst)->sin_other = 0; @@ -342,7 +340,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info) if (flags & LLE_CREATE) flags |= LLE_EXCLUSIVE; - + IF_AFDATA_LOCK(ifp); lle = lla_lookup(llt, flags, dst); IF_AFDATA_UNLOCK(ifp); @@ -378,7 +376,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info) #ifdef INET /* gratuitous ARP */ if ((laflags & LLE_PUB) && dst->sa_family == AF_INET) { - arprequest(ifp, + arprequest(ifp, &((struct sockaddr_in *)dst)->sin_addr, &((struct sockaddr_in *)dst)->sin_addr, ((laflags & LLE_PROXY) ? @@ -451,7 +449,7 @@ llatbl_lle_show(struct llentry_sa *la) sin = (struct sockaddr_in *)&la->l3_addr; inet_ntoa_r(sin->sin_addr, l3s); - db_printf(" l3_addr=%s\n", l3s); + db_printf(" l3_addr=%s\n", l3s); break; } #endif @@ -463,7 +461,7 @@ llatbl_lle_show(struct llentry_sa *la) sin6 = (struct sockaddr_in6 *)&la->l3_addr; ip6_sprintf(l3s, &sin6->sin6_addr); - db_printf(" l3_addr=%s\n", l3s); + db_printf(" l3_addr=%s\n", l3s); break; } #endif diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h index e90b29c..8da08ba 100644 --- a/sys/net/if_llatbl.h +++ b/sys/net/if_llatbl.h @@ -61,17 +61,17 @@ struct llentry { struct llentries *lle_head; void (*lle_free)(struct lltable *, struct llentry *); struct mbuf *la_hold; - int la_numheld; /* # of packets currently held */ + int la_numheld; /* # of packets currently held */ time_t la_expire; - uint16_t la_flags; + uint16_t la_flags; uint16_t la_asked; uint16_t la_preempt; uint16_t ln_byhint; int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */ - uint16_t ln_router; + uint16_t ln_router; time_t ln_ntick; int lle_refcnt; - + union { uint64_t mac_aligned; uint16_t mac16[3]; @@ -103,25 +103,28 @@ struct llentry { #define LLE_ADDREF(lle) do { \ LLE_WLOCK_ASSERT(lle); \ KASSERT((lle)->lle_refcnt >= 0, \ - ("negative refcnt %d", (lle)->lle_refcnt)); \ + ("negative refcnt %d on lle %p", \ + (lle)->lle_refcnt, (lle))); \ (lle)->lle_refcnt++; \ } while (0) + #define LLE_REMREF(lle) do { \ LLE_WLOCK_ASSERT(lle); \ - KASSERT((lle)->lle_refcnt > 1, \ - ("bogus refcnt %d", (lle)->lle_refcnt)); \ + KASSERT((lle)->lle_refcnt > 0, \ + ("bogus refcnt %d on lle %p", \ + (lle)->lle_refcnt, (lle))); \ (lle)->lle_refcnt--; \ } while (0) #define LLE_FREE_LOCKED(lle) do { \ - if ((lle)->lle_refcnt <= 1) \ - (lle)->lle_free((lle)->lle_tbl, (lle));\ + if ((lle)->lle_refcnt == 1) \ + (lle)->lle_free((lle)->lle_tbl, (lle)); \ else { \ - (lle)->lle_refcnt--; \ + LLE_REMREF(lle); \ LLE_WUNLOCK(lle); \ } \ /* guard against invalid refs */ \ - lle = NULL; \ + (lle) = NULL; \ } while (0) #define LLE_FREE(lle) do { \ @@ -158,7 +161,7 @@ struct lltable { struct llentry * (*llt_lookup)(struct lltable *, u_int flags, const struct sockaddr *l3addr); int (*llt_dump)(struct lltable *, - struct sysctl_req *); + struct sysctl_req *); }; MALLOC_DECLARE(M_LLTABLE); @@ -171,25 +174,26 @@ MALLOC_DECLARE(M_LLTABLE); #define LLE_VALID 0x0008 /* ll_addr is valid */ #define LLE_PROXY 0x0010 /* proxy entry ??? */ #define LLE_PUB 0x0020 /* publish entry ??? */ +#define LLE_LINKED 0x0040 /* linked to lookup structure */ +#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */ #define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */ #define LLE_CREATE 0x8000 /* create on a lookup miss */ -#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */ #define LLATBL_HASH(key, mask) \ (((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask) struct lltable *lltable_init(struct ifnet *, int); void lltable_free(struct lltable *); -void lltable_prefix_free(int, struct sockaddr *, - struct sockaddr *, u_int); +void lltable_prefix_free(int, struct sockaddr *, + struct sockaddr *, u_int); #if 0 void lltable_drain(int); #endif int lltable_sysctl_dumparp(int, struct sysctl_req *); size_t llentry_free(struct llentry *); -int llentry_update(struct llentry **, struct lltable *, - struct sockaddr_storage *, struct ifnet *); +struct llentry *llentry_alloc(struct ifnet *, struct lltable *, + struct sockaddr_storage *); /* * Generic link layer address lookup function. diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c index 8d371eb..2850b38 100644 --- a/sys/net/if_loop.c +++ b/sys/net/if_loop.c @@ -257,10 +257,20 @@ looutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES; break; case AF_INET6: +#if 0 + /* + * XXX-BZ for now always claim the checksum is good despite + * any interface flags. This is a workaround for 9.1-R and + * a proper solution ought to be sought later. + */ if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) { m->m_pkthdr.csum_data = 0xffff; m->m_pkthdr.csum_flags = LO_CSUM_SET; } +#else + m->m_pkthdr.csum_data = 0xffff; + m->m_pkthdr.csum_flags = LO_CSUM_SET; +#endif m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES6; break; case AF_IPX: @@ -446,15 +456,29 @@ loioctl(struct ifnet *ifp, u_long cmd, caddr_t data) ifp->if_capenable ^= IFCAP_RXCSUM; if ((mask & IFCAP_TXCSUM) != 0) ifp->if_capenable ^= IFCAP_TXCSUM; - if ((mask & IFCAP_RXCSUM_IPV6) != 0) + if ((mask & IFCAP_RXCSUM_IPV6) != 0) { +#if 0 ifp->if_capenable ^= IFCAP_RXCSUM_IPV6; - if ((mask & IFCAP_TXCSUM_IPV6) != 0) +#else + error = EOPNOTSUPP; + break; +#endif + } + if ((mask & IFCAP_TXCSUM_IPV6) != 0) { +#if 0 ifp->if_capenable ^= IFCAP_TXCSUM_IPV6; +#else + error = EOPNOTSUPP; + break; +#endif + } ifp->if_hwassist = 0; if (ifp->if_capenable & IFCAP_TXCSUM) ifp->if_hwassist = LO_CSUM_FEATURES; +#if 0 if (ifp->if_capenable & IFCAP_TXCSUM_IPV6) ifp->if_hwassist |= LO_CSUM_FEATURES6; +#endif break; default: diff --git a/sys/net/if_stf.c b/sys/net/if_stf.c index fa8ee64..fc8c6fa 100644 --- a/sys/net/if_stf.c +++ b/sys/net/if_stf.c @@ -793,7 +793,7 @@ stf_rtrequest(cmd, rt, info) struct rt_addrinfo *info; { RT_LOCK_ASSERT(rt); - rt->rt_rmx.rmx_mtu = IPV6_MMTU; + rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu; } static int @@ -806,7 +806,7 @@ stf_ioctl(ifp, cmd, data) struct ifreq *ifr; struct sockaddr_in6 *sin6; struct in_addr addr; - int error; + int error, mtu; error = 0; switch (cmd) { @@ -840,6 +840,18 @@ stf_ioctl(ifp, cmd, data) error = EAFNOSUPPORT; break; + case SIOCGIFMTU: + break; + + case SIOCSIFMTU: + ifr = (struct ifreq *)data; + mtu = ifr->ifr_mtu; + /* RFC 4213 3.2 ideal world MTU */ + if (mtu < IPV6_MINMTU || mtu > IF_MAXMTU - 20) + return (EINVAL); + ifp->if_mtu = mtu; + break; + default: error = EINVAL; break; diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 3d57953..a244359 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -415,6 +415,8 @@ EVENTHANDLER_DECLARE(group_change_event, group_change_event_handler_t); #define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock) #define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED) +#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED) +#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED) #define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED) int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, diff --git a/sys/net80211/ieee80211_hwmp.c b/sys/net80211/ieee80211_hwmp.c index 3a7b94f..4e2508e 100644 --- a/sys/net80211/ieee80211_hwmp.c +++ b/sys/net80211/ieee80211_hwmp.c @@ -840,7 +840,7 @@ hwmp_rootmode_cb(void *arg) IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, vap->iv_bss, "%s", "send broadcast PREQ"); - preq.preq_flags = IEEE80211_MESHPREQ_FLAGS_AM; + preq.preq_flags = 0; if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE) preq.preq_flags |= IEEE80211_MESHPREQ_FLAGS_GATE; if (hs->hs_rootmode == IEEE80211_HWMP_ROOTMODE_PROACTIVE) @@ -912,6 +912,7 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni, struct ieee80211_hwmp_state *hs = vap->iv_hwmp; struct ieee80211_meshprep_ie prep; ieee80211_hwmp_seq preqid; /* last seen preqid for orig */ + uint32_t metric = 0; if (ni == vap->iv_bss || ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) @@ -951,7 +952,7 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni, hrtarg = IEEE80211_MESH_ROUTE_PRIV(rttarg, struct ieee80211_hwmp_route); /* Address mode: ucast */ - if((preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM) == 0 && + if(preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM && rttarg == NULL && !IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0))) { IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP, @@ -985,13 +986,13 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni, /* Data creation and update of forwarding information * according to Table 11C-8 for originator mesh STA. */ + metric = preq->preq_metric + ms->ms_pmetric->mpm_metric(ni); if (HWMP_SEQ_GT(preq->preq_origseq, hrorig->hr_seq) || (HWMP_SEQ_EQ(preq->preq_origseq, hrorig->hr_seq) && - preq->preq_metric < rtorig->rt_metric)) { + metric < rtorig->rt_metric)) { hrorig->hr_seq = preq->preq_origseq; IEEE80211_ADDR_COPY(rtorig->rt_nexthop, wh->i_addr2); - rtorig->rt_metric = preq->preq_metric + - ms->ms_pmetric->mpm_metric(ni); + rtorig->rt_metric = metric; rtorig->rt_nhops = preq->preq_hopcount + 1; ieee80211_mesh_rt_update(rtorig, preq->preq_lifetime); /* path to orig is valid now */ @@ -1029,6 +1030,8 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni, hs->hs_seq = HWMP_SEQ_MAX(hs->hs_seq, PREQ_TSEQ(0)) + 1; prep.prep_flags = 0; + prep.prep_hopcount = 0; + IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr); if (rttarg != NULL && /* if NULL it means we are the target */ rttarg->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) { IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni, @@ -1038,13 +1041,13 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni, rttarg->rt_dest); /* update proxy seqno to HWMP seqno */ rttarg->rt_ext_seq = hs->hs_seq; + prep.prep_hopcount = rttarg->rt_nhops; + IEEE80211_ADDR_COPY(prep.prep_targetaddr, rttarg->rt_mesh_gate); } /* * Build and send a PREP frame. */ - prep.prep_hopcount = 0; prep.prep_ttl = ms->ms_ttl; - IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr); prep.prep_targetseq = hs->hs_seq; prep.prep_lifetime = preq->preq_lifetime; prep.prep_metric = IEEE80211_MESHLMETRIC_INITIALVAL; @@ -1286,7 +1289,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni, IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni, "discard PREP from %6D, new metric %u > %u", prep->prep_targetaddr, ":", - prep->prep_metric, rt->rt_metric); + metric, rt->rt_metric); return; } } @@ -1296,7 +1299,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni, rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ? "prefer" : "update", prep->prep_targetaddr, ":", - rt->rt_nhops, prep->prep_hopcount, + rt->rt_nhops, prep->prep_hopcount + 1, rt->rt_metric, metric); hr->hr_seq = prep->prep_targetseq; @@ -1368,7 +1371,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni, rtext->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ? "prefer" : "update", prep->prep_target_ext_addr, ":", - rtext->rt_nhops, prep->prep_hopcount, + rtext->rt_nhops, prep->prep_hopcount + 1, rtext->rt_metric, metric); rtext->rt_flags = IEEE80211_MESHRT_FLAGS_PROXY | diff --git a/sys/netgraph/ng_ether.c b/sys/netgraph/ng_ether.c index 15e8b2d..ed928fe 100644 --- a/sys/netgraph/ng_ether.c +++ b/sys/netgraph/ng_ether.c @@ -71,6 +71,8 @@ #include <netgraph/ng_parse.h> #include <netgraph/ng_ether.h> +MODULE_VERSION(ng_ether, 1); + #define IFP2NG(ifp) (IFP2AC((ifp))->ac_netgraph) /* Per-node private data */ diff --git a/sys/netgraph/ng_pptpgre.c b/sys/netgraph/ng_pptpgre.c index a640b6e..f48b80c 100644 --- a/sys/netgraph/ng_pptpgre.c +++ b/sys/netgraph/ng_pptpgre.c @@ -562,7 +562,7 @@ ng_pptpgre_xmit(hpriv_p hpriv, item_p item) } /* Sanity check frame length */ - if (m != NULL && m->m_pkthdr.len > PPTP_MAX_PAYLOAD) { + if (m->m_pkthdr.len > PPTP_MAX_PAYLOAD) { priv->stats.xmitTooBig++; ERROUT(EMSGSIZE); } diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index d6a7fd1..8e2daeb 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -87,8 +87,8 @@ static VNET_DEFINE(int, arp_maxtries) = 5; VNET_DEFINE(int, useloopback) = 1; /* use loopback interface for * local traffic */ static VNET_DEFINE(int, arp_proxyall) = 0; -static VNET_DEFINE(int, arpt_down) = 20; /* keep incomplete entries for - * 20 seconds */ +static VNET_DEFINE(int, arpt_down) = 20; /* keep incomplete entries for + * 20 seconds */ VNET_DEFINE(struct arpstat, arpstat); /* ARP statistics, see if_arp.h */ static VNET_DEFINE(int, arp_maxhold) = 1; @@ -119,7 +119,7 @@ SYSCTL_VNET_STRUCT(_net_link_ether_arp, OID_AUTO, stats, CTLFLAG_RW, &VNET_NAME(arpstat), arpstat, "ARP statistics (struct arpstat, net/if_arp.h)"); SYSCTL_VNET_INT(_net_link_ether_inet, OID_AUTO, maxhold, CTLFLAG_RW, - &VNET_NAME(arp_maxhold), 0, + &VNET_NAME(arp_maxhold), 0, "Number of packets to hold per ARP entry"); static void arp_init(void); @@ -163,49 +163,40 @@ arp_ifscrub(struct ifnet *ifp, uint32_t addr) static void arptimer(void *arg) { + struct llentry *lle = (struct llentry *)arg; struct ifnet *ifp; - struct llentry *lle; - int pkts_dropped; + size_t pkts_dropped; + + if (lle->la_flags & LLE_STATIC) { + LLE_WUNLOCK(lle); + return; + } - KASSERT(arg != NULL, ("%s: arg NULL", __func__)); - lle = (struct llentry *)arg; ifp = lle->lle_tbl->llt_ifp; CURVNET_SET(ifp->if_vnet); + + if (lle->la_flags != LLE_DELETED) { + int evt; + + if (lle->la_flags & LLE_VALID) + evt = LLENTRY_EXPIRED; + else + evt = LLENTRY_TIMEDOUT; + EVENTHANDLER_INVOKE(lle_event, lle, evt); + } + + callout_stop(&lle->la_timer); + + /* XXX: LOR avoidance. We still have ref on lle. */ + LLE_WUNLOCK(lle); IF_AFDATA_LOCK(ifp); LLE_WLOCK(lle); - if (lle->la_flags & LLE_STATIC) - LLE_WUNLOCK(lle); - else { - if (!callout_pending(&lle->la_timer) && - callout_active(&lle->la_timer)) { - callout_stop(&lle->la_timer); - LLE_REMREF(lle); - - if (lle->la_flags != LLE_DELETED) { - int evt; - - if (lle->la_flags & LLE_VALID) - evt = LLENTRY_EXPIRED; - else - evt = LLENTRY_TIMEDOUT; - EVENTHANDLER_INVOKE(lle_event, lle, evt); - } - pkts_dropped = llentry_free(lle); - ARPSTAT_ADD(dropped, pkts_dropped); - ARPSTAT_INC(timeouts); - } else { -#ifdef DIAGNOSTIC - struct sockaddr *l3addr = L3_ADDR(lle); - log(LOG_INFO, - "arptimer issue: %p, IPv4 address: \"%s\"\n", lle, - inet_ntoa( - ((const struct sockaddr_in *)l3addr)->sin_addr)); -#endif - LLE_WUNLOCK(lle); - } - } + LLE_REMREF(lle); + pkts_dropped = llentry_free(lle); IF_AFDATA_UNLOCK(ifp); + ARPSTAT_ADD(dropped, pkts_dropped); + ARPSTAT_INC(timeouts); CURVNET_RESTORE(); } @@ -250,7 +241,7 @@ arprequest(struct ifnet *ifp, struct in_addr *sip, struct in_addr *tip, break; /* found it. */ } IF_ADDR_RUNLOCK(ifp); - if (sip == NULL) { + if (sip == NULL) { printf("%s: cannot find matching address\n", __func__); return; } @@ -322,15 +313,15 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m, } } retry: - IF_AFDATA_RLOCK(ifp); + IF_AFDATA_RLOCK(ifp); la = lla_lookup(LLTABLE(ifp), flags, dst); - IF_AFDATA_RUNLOCK(ifp); + IF_AFDATA_RUNLOCK(ifp); if ((la == NULL) && ((flags & LLE_EXCLUSIVE) == 0) - && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0)) { + && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0)) { flags |= (LLE_CREATE | LLE_EXCLUSIVE); - IF_AFDATA_WLOCK(ifp); + IF_AFDATA_WLOCK(ifp); la = lla_lookup(LLTABLE(ifp), flags, dst); - IF_AFDATA_WUNLOCK(ifp); + IF_AFDATA_WUNLOCK(ifp); } if (la == NULL) { if (flags & LLE_CREATE) @@ -339,7 +330,7 @@ retry: inet_ntoa(SIN(dst)->sin_addr)); m_freem(m); return (EINVAL); - } + } if ((la->la_flags & LLE_VALID) && ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) { @@ -354,12 +345,12 @@ retry: arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL); la->la_preempt--; } - + *lle = la; error = 0; goto done; - } - + } + if (la->la_flags & LLE_STATIC) { /* should not happen! */ log(LOG_DEBUG, "arpresolve: ouch, empty static llinfo for %s\n", inet_ntoa(SIN(dst)->sin_addr)); @@ -389,20 +380,20 @@ retry: la->la_numheld--; ARPSTAT_INC(dropped); } - } + } if (la->la_hold != NULL) { curr = la->la_hold; while (curr->m_nextpkt != NULL) curr = curr->m_nextpkt; curr->m_nextpkt = m; - } else + } else la->la_hold = m; la->la_numheld++; if (renew == 0 && (flags & LLE_EXCLUSIVE)) { flags &= ~LLE_EXCLUSIVE; LLE_DOWNGRADE(la); } - + } /* * Return EWOULDBLOCK if we have tried less than arp_maxtries. It @@ -510,11 +501,11 @@ SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_wrong_iface, CTLFLAG_RW, &log_arp_wrong_iface, 0, "log arp packets arriving on the wrong interface"); SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_movements, CTLFLAG_RW, - &log_arp_movements, 0, - "log arp replies from MACs different than the one in the cache"); + &log_arp_movements, 0, + "log arp replies from MACs different than the one in the cache"); SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_permanent_modify, CTLFLAG_RW, - &log_arp_permanent_modify, 0, - "log arp replies from MACs different than the one in the permanent arp entry"); + &log_arp_permanent_modify, 0, + "log arp replies from MACs different than the one in the permanent arp entry"); static void @@ -550,7 +541,7 @@ in_arpinput(struct mbuf *m) } ah = mtod(m, struct arphdr *); - /* + /* * ARP is only for IPv4 so we can reject packets with * a protocol length not equal to an IPv4 address. */ @@ -686,7 +677,7 @@ match: sin.sin_addr = isaddr; flags = (itaddr.s_addr == myaddr.s_addr) ? LLE_CREATE : 0; flags |= LLE_EXCLUSIVE; - IF_AFDATA_LOCK(ifp); + IF_AFDATA_LOCK(ifp); la = lla_lookup(LLTABLE(ifp), flags, (struct sockaddr *)&sin); IF_AFDATA_UNLOCK(ifp); if (la != NULL) { @@ -716,7 +707,7 @@ match: goto reply; } if (log_arp_movements) { - log(LOG_INFO, "arp: %s moved from %*D " + log(LOG_INFO, "arp: %s moved from %*D " "to %*D on %s\n", inet_ntoa(isaddr), ifp->if_addrlen, @@ -725,7 +716,7 @@ match: ifp->if_xname); } } - + if (ifp->if_addrlen != ah->ar_hln) { LLE_WUNLOCK(la); log(LOG_WARNING, "arp from %*D: addr len: new %d, " @@ -751,7 +742,7 @@ match: } la->la_asked = 0; la->la_preempt = V_arp_maxtries; - /* + /* * The packets are all freed within the call to the output * routine. * @@ -787,7 +778,7 @@ reply: struct llentry *lle = NULL; sin.sin_addr = itaddr; - IF_AFDATA_LOCK(ifp); + IF_AFDATA_LOCK(ifp); lle = lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin); IF_AFDATA_UNLOCK(ifp); @@ -802,7 +793,7 @@ reply: if (!V_arp_proxyall) goto drop; - + sin.sin_addr = itaddr; /* XXX MRT use table 0 for arp reply */ rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0); @@ -830,7 +821,7 @@ reply: * wrong network. */ sin.sin_addr = isaddr; - + /* XXX MRT use table 0 for arp checks */ rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0); if (!rt) @@ -846,8 +837,7 @@ reply: RTFREE_LOCKED(rt); #ifdef DEBUG_PROXY - printf("arp: proxying for %s\n", - inet_ntoa(itaddr)); + printf("arp: proxying for %s\n", inet_ntoa(itaddr)); #endif } } @@ -869,8 +859,8 @@ reply: (void)memcpy(ar_spa(ah), &itaddr, ah->ar_pln); ah->ar_op = htons(ARPOP_REPLY); ah->ar_pro = htons(ETHERTYPE_IP); /* let's be sure! */ - m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); - m->m_pkthdr.len = m->m_len; + m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); + m->m_pkthdr.len = m->m_len; m->m_pkthdr.rcvif = NULL; sa.sa_family = AF_ARP; sa.sa_len = 2; @@ -894,7 +884,7 @@ arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa) if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) != INADDR_ANY) { arprequest(ifp, &IA_SIN(ifa)->sin_addr, &IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp)); - /* + /* * interface address is considered static entry * because the output of the arp utility shows * that L2 entry as permanent diff --git a/sys/netinet/in.c b/sys/netinet/in.c index 1beddd6..69f40b9 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -489,20 +489,20 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp, ia->ia_addr.sin_addr.s_addr) hostIsNew = 0; if (ifra->ifra_mask.sin_len) { - /* + /* * QL: XXX * Need to scrub the prefix here in case * the issued command is SIOCAIFADDR with * the same address, but with a different * prefix length. And if the prefix length - * is the same as before, then the call is + * is the same as before, then the call is * un-necessarily executed here. */ in_ifscrub(ifp, ia, LLE_STATIC); ia->ia_sockmask = ifra->ifra_mask; ia->ia_sockmask.sin_family = AF_INET; ia->ia_subnetmask = - ntohl(ia->ia_sockmask.sin_addr.s_addr); + ntohl(ia->ia_sockmask.sin_addr.s_addr); maskIsNew = 1; } if ((ifp->if_flags & IFF_POINTOPOINT) && @@ -886,8 +886,8 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin, RT_ADDREF(ia_ro.ro_rt); RTFREE_LOCKED(ia_ro.ro_rt); } else - error = ifa_add_loopback_route((struct ifaddr *)ia, - (struct sockaddr *)&ia->ia_addr); + error = ifa_add_loopback_route((struct ifaddr *)ia, + (struct sockaddr *)&ia->ia_addr); if (error == 0) ia->ia_flags |= IFA_RTSELF; if (ia_ro.ro_rt != NULL) @@ -902,10 +902,10 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin, ? RTF_HOST : 0) /* - * Generate a routing message when inserting or deleting + * Generate a routing message when inserting or deleting * an interface address alias. */ -static void in_addralias_rtmsg(int cmd, struct in_addr *prefix, +static void in_addralias_rtmsg(int cmd, struct in_addr *prefix, struct in_ifaddr *target) { struct route pfx_ro; @@ -928,16 +928,13 @@ static void in_addralias_rtmsg(int cmd, struct in_addr *prefix, /* QL: XXX * Point the gateway to the new interface - * address as if a new prefix route entry has - * been added through the new address alias. - * All other parts of the rtentry is accurate, + * address as if a new prefix route entry has + * been added through the new address alias. + * All other parts of the rtentry is accurate, * e.g., rt_key, rt_mask, rt_ifp etc. */ - msg_rt.rt_gateway = - (struct sockaddr *)&target->ia_addr; - rt_newaddrmsg(cmd, - (struct ifaddr *)target, - 0, &msg_rt); + msg_rt.rt_gateway = (struct sockaddr *)&target->ia_addr; + rt_newaddrmsg(cmd, (struct ifaddr *)target, 0, &msg_rt); RTFREE(pfx_ro.ro_rt); } return; @@ -985,7 +982,7 @@ in_addprefix(struct in_ifaddr *target, int flags) */ if (ia->ia_flags & IFA_ROUTE) { #ifdef RADIX_MPATH - if (ia->ia_addr.sin_addr.s_addr == + if (ia->ia_addr.sin_addr.s_addr == target->ia_addr.sin_addr.s_addr) { IN_IFADDR_RUNLOCK(); return (EEXIST); @@ -1058,7 +1055,7 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags) } if (freeit && (flags & LLE_STATIC)) { error = ifa_del_loopback_route((struct ifaddr *)target, - (struct sockaddr *)&target->ia_addr); + (struct sockaddr *)&target->ia_addr); if (error == 0) target->ia_flags &= ~IFA_RTSELF; } @@ -1141,8 +1138,8 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags) mask0.sin_len = sizeof(mask0); mask0.sin_family = AF_INET; mask0.sin_addr.s_addr = target->ia_subnetmask; - lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0, - (struct sockaddr *)&mask0, flags); + lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0, + (struct sockaddr *)&mask0, flags); /* * As no-one seem to have this prefix, we can remove the route. @@ -1184,14 +1181,14 @@ in_broadcast(struct in_addr in, struct ifnet *ifp) * Check for old-style (host 0) broadcast, but * taking into account that RFC 3021 obsoletes it. */ - (ia->ia_subnetmask != IN_RFC3021_MASK && - t == ia->ia_subnet)) && + (ia->ia_subnetmask != IN_RFC3021_MASK && + t == ia->ia_subnet)) && /* * Check for an all one subnetmask. These * only exist when an interface gets a secondary * address. */ - ia->ia_subnetmask != (u_long)0xffffffff) + ia->ia_subnetmask != (u_long)0xffffffff) return (1); return (0); #undef ia @@ -1283,7 +1280,6 @@ in_lltable_new(const struct sockaddr *l3addr, u_int flags) if (lle == NULL) /* NB: caller generates msg */ return NULL; - callout_init(&lle->base.la_timer, CALLOUT_MPSAFE); /* * For IPv4 this will trigger "arpresolve" to generate * an ARP request. @@ -1293,45 +1289,44 @@ in_lltable_new(const struct sockaddr *l3addr, u_int flags) lle->base.lle_refcnt = 1; lle->base.lle_free = in_lltable_free; LLE_LOCK_INIT(&lle->base); - return &lle->base; + callout_init_rw(&lle->base.la_timer, &lle->base.lle_lock, + CALLOUT_RETURNUNLOCKED); + + return (&lle->base); } #define IN_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \ (((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_addr.s_addr)) == 0 ) static void -in_lltable_prefix_free(struct lltable *llt, - const struct sockaddr *prefix, - const struct sockaddr *mask, - u_int flags) +in_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix, + const struct sockaddr *mask, u_int flags) { const struct sockaddr_in *pfx = (const struct sockaddr_in *)prefix; const struct sockaddr_in *msk = (const struct sockaddr_in *)mask; struct llentry *lle, *next; - register int i; + int i; size_t pkts_dropped; - for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + IF_AFDATA_WLOCK(llt->llt_ifp); + for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { - - /* + /* * (flags & LLE_STATIC) means deleting all entries - * including static ARP entries + * including static ARP entries. */ - if (IN_ARE_MASKED_ADDR_EQUAL((struct sockaddr_in *)L3_ADDR(lle), - pfx, msk) && - ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) { - int canceled; - - canceled = callout_drain(&lle->la_timer); + if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)), + pfx, msk) && ((flags & LLE_STATIC) || + !(lle->la_flags & LLE_STATIC))) { LLE_WLOCK(lle); - if (canceled) + if (callout_stop(&lle->la_timer)) LLE_REMREF(lle); pkts_dropped = llentry_free(lle); ARPSTAT_ADD(dropped, pkts_dropped); } } } + IF_AFDATA_WUNLOCK(llt->llt_ifp); } @@ -1357,19 +1352,18 @@ in_lltable_rtcheck(struct ifnet *ifp, u_int flags, const struct sockaddr *l3addr */ if (rt->rt_flags & RTF_GATEWAY) { if (!(rt->rt_flags & RTF_HOST) || !rt->rt_ifp || - rt->rt_ifp->if_type != IFT_ETHER || - (rt->rt_ifp->if_flags & - (IFF_NOARP | IFF_STATICARP)) != 0 || - memcmp(rt->rt_gateway->sa_data, l3addr->sa_data, - sizeof(in_addr_t)) != 0) { + rt->rt_ifp->if_type != IFT_ETHER || + (rt->rt_ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) != 0 || + memcmp(rt->rt_gateway->sa_data, l3addr->sa_data, + sizeof(in_addr_t)) != 0) { RTFREE_LOCKED(rt); return (EINVAL); } } /* - * Make sure that at least the destination address is covered - * by the route. This is for handling the case where 2 or more + * Make sure that at least the destination address is covered + * by the route. This is for handling the case where 2 or more * interfaces have the same prefix. An incoming packet arrives * on one interface and the corresponding outgoing packet leaves * another interface. @@ -1429,7 +1423,7 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add hashkey = sin->sin_addr.s_addr; lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)]; LIST_FOREACH(lle, lleh, lle_next) { - struct sockaddr_in *sa2 = (struct sockaddr_in *)L3_ADDR(lle); + struct sockaddr_in *sa2 = satosin(L3_ADDR(lle)); if (lle->la_flags & LLE_DELETED) continue; if (sa2->sin_addr.s_addr == sin->sin_addr.s_addr) @@ -1438,7 +1432,7 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add if (lle == NULL) { #ifdef DIAGNOSTIC if (flags & LLE_DELETE) - log(LOG_INFO, "interface address is missing from cache = %p in delete\n", lle); + log(LOG_INFO, "interface address is missing from cache = %p in delete\n", lle); #endif if (!(flags & LLE_CREATE)) return (NULL); @@ -1464,19 +1458,20 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add lle->lle_tbl = llt; lle->lle_head = lleh; + lle->la_flags |= LLE_LINKED; LIST_INSERT_HEAD(lleh, lle, lle_next); } else if (flags & LLE_DELETE) { if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) { LLE_WLOCK(lle); - lle->la_flags = LLE_DELETED; + lle->la_flags |= LLE_DELETED; EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED); LLE_WUNLOCK(lle); #ifdef DIAGNOSTIC - log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); + log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); #endif } lle = (void *)-1; - + } if (LLE_IS_VALID(lle)) { if (flags & LLE_EXCLUSIVE) @@ -1508,7 +1503,7 @@ in_lltable_dump(struct lltable *llt, struct sysctl_req *wr) for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { LIST_FOREACH(lle, &llt->lle_head[i], lle_next) { struct sockaddr_dl *sdl; - + /* skip deleted entries */ if ((lle->la_flags & LLE_DELETED) == LLE_DELETED) continue; diff --git a/sys/netinet/in_cksum.c b/sys/netinet/in_cksum.c index 8fe05d9..2ae3573 100644 --- a/sys/netinet/in_cksum.c +++ b/sys/netinet/in_cksum.c @@ -88,7 +88,7 @@ in_cksum(struct mbuf *m, int len) /* * Force to even boundary. */ - if ((1 & (int) w) && (mlen > 0)) { + if ((1 & (uintptr_t) w) && (mlen > 0)) { REDUCE; sum <<= 8; s_util.c[0] = *(u_char *)w; diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h index 26803d9..976b3f7 100644 --- a/sys/netinet/in_var.h +++ b/sys/netinet/in_var.h @@ -161,14 +161,16 @@ do { \ #define IFP_TO_IA(ifp, ia) \ /* struct ifnet *ifp; */ \ /* struct in_ifaddr *ia; */ \ -{ \ +do { \ + IN_IFADDR_RLOCK(); \ for ((ia) = TAILQ_FIRST(&V_in_ifaddrhead); \ (ia) != NULL && (ia)->ia_ifp != (ifp); \ (ia) = TAILQ_NEXT((ia), ia_link)) \ continue; \ if ((ia) != NULL) \ ifa_ref(&(ia)->ia_ifa); \ -} + IN_IFADDR_RUNLOCK(); \ +} while (0) #endif /* diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c index c5e2758..bc1cc30 100644 --- a/sys/netinet/ip_carp.c +++ b/sys/netinet/ip_carp.c @@ -1027,23 +1027,31 @@ carp_send_na(struct carp_softc *sc) } } +/* + * Returns ifa in case it's a carp address and it is MASTER, or if the address + * matches and is not a carp address. Returns NULL otherwise. + */ struct ifaddr * carp_iamatch6(struct ifnet *ifp, struct in6_addr *taddr) { struct ifaddr *ifa; + ifa = NULL; IF_ADDR_RLOCK(ifp); - IFNET_FOREACH_IFA(ifp, ifa) - if (ifa->ifa_addr->sa_family == AF_INET6 && - ifa->ifa_carp->sc_state == MASTER && - IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa))) { + TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { + if (ifa->ifa_addr->sa_family != AF_INET6) + continue; + if (!IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa))) + continue; + if (ifa->ifa_carp && ifa->ifa_carp->sc_state != MASTER) + ifa = NULL; + else ifa_ref(ifa); - IF_ADDR_RUNLOCK(ifp); - return (ifa); - } + break; + } IF_ADDR_RUNLOCK(ifp); - return (NULL); + return (ifa); } caddr_t diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index cc38dcf..eeea58c 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -124,7 +124,7 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags, int n; /* scratchpad */ int error = 0; struct sockaddr_in *dst; - struct in_ifaddr *ia = NULL; + struct in_ifaddr *ia; int isbroadcast, sw_csum; struct route iproute; struct rtentry *rte; /* cache for ro->ro_rt */ @@ -198,6 +198,7 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags, dst = (struct sockaddr_in *)&ro->ro_dst; again: + ia = NULL; /* * If there is a cached route, * check that it is to the same destination @@ -533,8 +534,11 @@ sendit: #endif error = netisr_queue(NETISR_IP, m); goto done; - } else + } else { + if (ia != NULL) + ifa_free(&ia->ia_ifa); goto again; /* Redo the routing table lookup. */ + } } #ifdef IPFIREWALL_FORWARD @@ -564,6 +568,8 @@ sendit: bcopy((fwd_tag+1), dst, sizeof(struct sockaddr_in)); m->m_flags |= M_SKIP_FIREWALL; m_tag_delete(m, fwd_tag); + if (ia != NULL) + ifa_free(&ia->ia_ifa); goto again; } #endif /* IPFIREWALL_FORWARD */ diff --git a/sys/netinet/ipfw/ip_dummynet.c b/sys/netinet/ipfw/ip_dummynet.c index 928176e..e1c7a08 100644 --- a/sys/netinet/ipfw/ip_dummynet.c +++ b/sys/netinet/ipfw/ip_dummynet.c @@ -77,9 +77,10 @@ static struct task dn_task; static struct taskqueue *dn_tq = NULL; static void -dummynet(void * __unused unused) +dummynet(void *arg) { + (void)arg; /* UNUSED */ taskqueue_enqueue(dn_tq, &dn_task); } @@ -1286,7 +1287,7 @@ config_fs(struct dn_fs *nfs, struct dn_id *arg, int locked) } if (nfs->flags & DN_HAVE_MASK) { /* make sure we have some buckets */ - ipdn_bound_var(&nfs->buckets, dn_cfg.hash_size, + ipdn_bound_var((int *)&nfs->buckets, dn_cfg.hash_size, 1, dn_cfg.max_hash_size, "flowset buckets"); } else { nfs->buckets = 1; /* we only need 1 */ @@ -1371,7 +1372,7 @@ config_sched(struct dn_sch *_nsch, struct dn_id *arg) return EINVAL; /* make sure we have some buckets */ if (a.sch->flags & DN_HAVE_MASK) - ipdn_bound_var(&a.sch->buckets, dn_cfg.hash_size, + ipdn_bound_var((int *)&a.sch->buckets, dn_cfg.hash_size, 1, dn_cfg.max_hash_size, "sched buckets"); /* XXX other sanity checks */ bzero(&p, sizeof(p)); diff --git a/sys/netinet/ipfw/ip_fw2.c b/sys/netinet/ipfw/ip_fw2.c index 21a00bb..7559a50 100644 --- a/sys/netinet/ipfw/ip_fw2.c +++ b/sys/netinet/ipfw/ip_fw2.c @@ -176,7 +176,7 @@ SYSCTL_INT(_net_inet_ip_fw, OID_AUTO, default_to_accept, CTLFLAG_RDTUN, &default_to_accept, 0, "Make the default rule accept all packets."); TUNABLE_INT("net.inet.ip.fw.default_to_accept", &default_to_accept); -TUNABLE_INT("net.inet.ip.fw.tables_max", &default_fw_tables); +TUNABLE_INT("net.inet.ip.fw.tables_max", (int *)&default_fw_tables); SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count, CTLFLAG_RD, &VNET_NAME(layer3_chain.n_rules), 0, "Number of static rules"); diff --git a/sys/netinet/ipfw/ip_fw_dynamic.c b/sys/netinet/ipfw/ip_fw_dynamic.c index 7cff94f..edf7639 100644 --- a/sys/netinet/ipfw/ip_fw_dynamic.c +++ b/sys/netinet/ipfw/ip_fw_dynamic.c @@ -275,9 +275,9 @@ unlink_dyn_rule_print(struct ipfw_flow_id *id) #endif { da.s_addr = htonl(id->src_ip); - inet_ntoa_r(da, src); + inet_ntop(AF_INET, &da, src, sizeof(src)); da.s_addr = htonl(id->dst_ip); - inet_ntoa_r(da, dst); + inet_ntop(AF_INET, &da, dst, sizeof(dst)); } printf("ipfw: unlink entry %s %d -> %s %d, %d left\n", src, id->src_port, dst, id->dst_port, V_dyn_count - 1); @@ -656,9 +656,9 @@ add_dyn_rule(struct ipfw_flow_id *id, u_int8_t dyn_type, struct ip_fw *rule) #endif { da.s_addr = htonl(r->id.src_ip); - inet_ntoa_r(da, src); + inet_ntop(AF_INET, &da, src, sizeof(src)); da.s_addr = htonl(r->id.dst_ip); - inet_ntoa_r(da, dst); + inet_ntop(AF_INET, &da, dst, sizeof(dst)); } printf("ipfw: add dyn entry ty %d %s %d -> %s %d, total %d\n", dyn_type, src, r->id.src_port, dst, r->id.dst_port, @@ -740,9 +740,9 @@ ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd, #endif { da.s_addr = htonl(args->f_id.src_ip); - inet_ntoa_r(da, src); + inet_ntop(AF_INET, &da, src, sizeof(src)); da.s_addr = htonl(args->f_id.dst_ip); - inet_ntoa_r(da, dst); + inet_ntop(AF_INET, &da, dst, sizeof(dst)); } printf("ipfw: %s: type %d %s %u -> %s %u\n", __func__, cmd->o.opcode, src, args->f_id.src_port, @@ -850,10 +850,12 @@ ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd, { da.s_addr = htonl(args->f_id.src_ip); - inet_ntoa_r(da, src); + inet_ntop(AF_INET, &da, src, + sizeof(src)); da.s_addr = htonl(args->f_id.dst_ip); - inet_ntoa_r(da, dst); + inet_ntop(AF_INET, &da, dst, + sizeof(dst)); } log(LOG_SECURITY | LOG_DEBUG, "ipfw: %d %s %s:%u -> %s:%u, %s\n", diff --git a/sys/netinet/ipfw/ip_fw_log.c b/sys/netinet/ipfw/ip_fw_log.c index 14eb2a2..95b8a25 100644 --- a/sys/netinet/ipfw/ip_fw_log.c +++ b/sys/netinet/ipfw/ip_fw_log.c @@ -450,8 +450,8 @@ ipfw_log(struct ip_fw *f, u_int hlen, struct ip_fw_args *args, tcp = L3HDR(struct tcphdr, ip); udp = L3HDR(struct udphdr, ip); - inet_ntoa_r(ip->ip_src, src); - inet_ntoa_r(ip->ip_dst, dst); + inet_ntop(AF_INET, &ip->ip_src, src, sizeof(src)); + inet_ntop(AF_INET, &ip->ip_dst, dst, sizeof(dst)); } switch (args->f_id.proto) { diff --git a/sys/netinet/sctp_asconf.c b/sys/netinet/sctp_asconf.c index 1a1aa96..daec8f9 100644 --- a/sys/netinet/sctp_asconf.c +++ b/sys/netinet/sctp_asconf.c @@ -2747,13 +2747,14 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, struct sctp_paramhdr tmp_param, *ph; uint16_t plen, ptype; struct sctp_ifa *sctp_ifa; - struct sctp_ipv6addr_param addr_store; #ifdef INET6 + struct sctp_ipv6addr_param addr6_store; struct sockaddr_in6 sin6; #endif #ifdef INET + struct sctp_ipv4addr_param addr4_store; struct sockaddr_in sin; #endif @@ -2802,7 +2803,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, a6p = (struct sctp_ipv6addr_param *) sctp_m_getptr(m, offset, sizeof(struct sctp_ipv6addr_param), - (uint8_t *) & addr_store); + (uint8_t *) & addr6_store); if (plen != sizeof(struct sctp_ipv6addr_param) || a6p == NULL) { return; @@ -2821,7 +2822,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m, /* get the entire IPv4 address param */ a4p = (struct sctp_ipv4addr_param *)sctp_m_getptr(m, offset, sizeof(struct sctp_ipv4addr_param), - (uint8_t *) & addr_store); + (uint8_t *) & addr4_store); if (plen != sizeof(struct sctp_ipv4addr_param) || a4p == NULL) { return; @@ -2899,16 +2900,17 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so { struct sctp_paramhdr tmp_param, *ph; uint16_t plen, ptype; - struct sctp_ipv6addr_param addr_store; #ifdef INET struct sockaddr_in *sin; struct sctp_ipv4addr_param *a4p; + struct sctp_ipv6addr_param addr4_store; #endif #ifdef INET6 struct sockaddr_in6 *sin6; struct sctp_ipv6addr_param *a6p; + struct sctp_ipv6addr_param addr6_store; struct sockaddr_in6 sin6_tmp; #endif @@ -2954,7 +2956,7 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so a6p = (struct sctp_ipv6addr_param *) sctp_m_getptr(m, offset, sizeof(struct sctp_ipv6addr_param), - (uint8_t *) & addr_store); + (uint8_t *) & addr6_store); if (a6p == NULL) { return (0); } @@ -2984,7 +2986,7 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so a4p = (struct sctp_ipv4addr_param *) sctp_m_getptr(m, offset, sizeof(struct sctp_ipv4addr_param), - (uint8_t *) & addr_store); + (uint8_t *) & addr4_store); if (a4p == NULL) { return (0); } diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c index 6d2ec6d..3263efb 100644 --- a/sys/netinet/sctp_input.c +++ b/sys/netinet/sctp_input.c @@ -2874,14 +2874,12 @@ sctp_handle_cookie_echo(struct mbuf *m, int iphlen, int offset, return (m); } } - if ((*inp_p)->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) { - if (notification) { - sctp_ulp_notify(notification, *stcb, 0, NULL, SCTP_SO_NOT_LOCKED); - } - if (send_int_conf) { - sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_CONFIRMED, - (*stcb), 0, (void *)netl, SCTP_SO_NOT_LOCKED); - } + if (notification) { + sctp_ulp_notify(notification, *stcb, 0, NULL, SCTP_SO_NOT_LOCKED); + } + if (send_int_conf) { + sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_CONFIRMED, + (*stcb), 0, (void *)netl, SCTP_SO_NOT_LOCKED); } return (m); } diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index 10e3959..7e09b6e 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -3799,6 +3799,7 @@ sctp_get_ect(struct sctp_tcb *stcb) } } +#if defined(INET) || defined(INET6) static void sctp_handle_no_route(struct sctp_tcb *stcb, struct sctp_nets *net, @@ -3843,6 +3844,8 @@ sctp_handle_no_route(struct sctp_tcb *stcb, } } +#endif + static int sctp_lowlevel_chunk_output(struct sctp_inpcb *inp, struct sctp_tcb *stcb, /* may be NULL */ @@ -3882,14 +3885,18 @@ sctp_lowlevel_chunk_output(struct sctp_inpcb *inp, * interface and smallest_mtu size as well. */ /* Will need ifdefs around this */ - struct mbuf *o_pak; struct mbuf *newm; struct sctphdr *sctphdr; int packet_length; int ret; uint32_t vrf_id; + +#if defined(INET) || defined(INET6) + struct mbuf *o_pak; sctp_route_t *ro = NULL; struct udphdr *udp = NULL; + +#endif uint8_t tos_value; #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING) @@ -8432,12 +8439,14 @@ again_one_more_time: } /* now lets add any data within the MTU constraints */ switch (((struct sockaddr *)&net->ro._l_addr)->sa_family) { +#ifdef INET case AF_INET: if (net->mtu > (sizeof(struct ip) + sizeof(struct sctphdr))) omtu = net->mtu - (sizeof(struct ip) + sizeof(struct sctphdr)); else omtu = 0; break; +#endif #ifdef INET6 case AF_INET6: if (net->mtu > (sizeof(struct ip6_hdr) + sizeof(struct sctphdr))) @@ -12165,7 +12174,7 @@ sctp_lower_sosend(struct socket *so, union sctp_sockstore *raddr = (union sctp_sockstore *)addr; switch (raddr->sa.sa_family) { -#if defined(INET) +#ifdef INET case AF_INET: if (raddr->sin.sin_len != sizeof(struct sockaddr_in)) { SCTP_LTRACE_ERR_RET(inp, stcb, net, SCTP_FROM_SCTP_OUTPUT, EINVAL); @@ -12175,7 +12184,7 @@ sctp_lower_sosend(struct socket *so, port = raddr->sin.sin_port; break; #endif -#if defined(INET6) +#ifdef INET6 case AF_INET6: if (raddr->sin6.sin6_len != sizeof(struct sockaddr_in6)) { SCTP_LTRACE_ERR_RET(inp, stcb, net, SCTP_FROM_SCTP_OUTPUT, EINVAL); diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index e9d99ed..2630d89 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -1203,11 +1203,18 @@ sctp_findassociation_ep_addr(struct sctp_inpcb **inp_p, struct sockaddr *remote, uint16_t rport; inp = *inp_p; - if (remote->sa_family == AF_INET) { + switch (remote->sa_family) { +#ifdef INET + case AF_INET: rport = (((struct sockaddr_in *)remote)->sin_port); - } else if (remote->sa_family == AF_INET6) { + break; +#endif +#ifdef INET6 + case AF_INET6: rport = (((struct sockaddr_in6 *)remote)->sin6_port); - } else { + break; +#endif + default: return (NULL); } if (locked_tcb) { @@ -3009,6 +3016,7 @@ continue_anyway: memset(&store_sa, 0, sizeof(store_sa)); switch (addr->sa_family) { +#ifdef INET case AF_INET: { struct sockaddr_in *sin; @@ -3018,6 +3026,8 @@ continue_anyway: sin->sin_port = 0; break; } +#endif +#ifdef INET6 case AF_INET6: { struct sockaddr_in6 *sin6; @@ -3027,6 +3037,7 @@ continue_anyway: sin6->sin6_port = 0; break; } +#endif default: break; } @@ -4864,6 +4875,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre /* now clean up any chunks here */ TAILQ_FOREACH_SAFE(sp, &outs->outqueue, next, nsp) { TAILQ_REMOVE(&outs->outqueue, sp, next); + sctp_free_spbufspace(stcb, asoc, sp); if (sp->data) { if (so) { /* Still an open socket - report */ @@ -4874,19 +4886,14 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre sctp_m_freem(sp->data); sp->data = NULL; sp->tail_mbuf = NULL; + sp->length = 0; } } if (sp->net) { sctp_free_remote_addr(sp->net); sp->net = NULL; } - sctp_free_spbufspace(stcb, asoc, sp); - if (sp->holds_key_ref) - sctp_auth_key_release(stcb, sp->auth_keyid, SCTP_SO_LOCKED); - /* Free the zone stuff */ - SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_strmoq), sp); - SCTP_DECR_STRMOQ_COUNT(); - /* sa_ignore FREED_MEMORY */ + sctp_free_a_strmoq(stcb, sp, SCTP_SO_LOCKED); } } /* sa_ignore FREED_MEMORY */ @@ -5188,12 +5195,16 @@ sctp_destination_is_reachable(struct sctp_tcb *stcb, struct sockaddr *destaddr) } /* NOTE: all "scope" checks are done when local addresses are added */ switch (destaddr->sa_family) { +#ifdef INET6 case AF_INET6: answer = inp->ip_inp.inp.inp_vflag & INP_IPV6; break; +#endif +#ifdef INET case AF_INET: answer = inp->ip_inp.inp.inp_vflag & INP_IPV4; break; +#endif default: /* invalid family, so it's unreachable */ answer = 0; @@ -5284,7 +5295,7 @@ sctp_add_local_addr_ep(struct sctp_inpcb *inp, struct sctp_ifa *ifa, uint32_t ac inp->ip_inp.inp.inp_vflag |= INP_IPV6; break; #endif -#ifdef INET6 +#ifdef INET case AF_INET: inp->ip_inp.inp.inp_vflag |= INP_IPV4; break; diff --git a/sys/netinet/sctp_uio.h b/sys/netinet/sctp_uio.h index 95b8978..80b5e60 100644 --- a/sys/netinet/sctp_uio.h +++ b/sys/netinet/sctp_uio.h @@ -1124,12 +1124,8 @@ struct sctpstat { #define SCTP_STAT_DECR_GAUGE32(_x) SCTP_STAT_DECR(_x) union sctp_sockstore { -#if defined(INET) || !defined(_KERNEL) struct sockaddr_in sin; -#endif -#if defined(INET6) || !defined(_KERNEL) struct sockaddr_in6 sin6; -#endif struct sockaddr sa; }; diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index dc01f2d..94e99c0 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$"); #include <netinet/sctp_pcb.h> #include <netinet/sctp_header.h> #include <netinet/sctp_var.h> -#if defined(INET6) +#ifdef INET6 #endif #include <netinet/sctp_sysctl.h> #include <netinet/sctp_output.h> @@ -5258,7 +5258,6 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, case SCTP_BINDX_ADD_ADDR: { struct sctp_getaddresses *addrs; - size_t sz; struct thread *td; td = (struct thread *)p; @@ -5266,8 +5265,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, optsize); #ifdef INET if (addrs->addr->sa_family == AF_INET) { - sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in); - if (optsize < sz) { + if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in)) { SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); error = EINVAL; break; @@ -5280,8 +5278,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, #endif #ifdef INET6 if (addrs->addr->sa_family == AF_INET6) { - sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6); - if (optsize < sz) { + if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6)) { SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); error = EINVAL; break; @@ -5305,7 +5302,6 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, case SCTP_BINDX_REM_ADDR: { struct sctp_getaddresses *addrs; - size_t sz; struct thread *td; td = (struct thread *)p; @@ -5313,8 +5309,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, SCTP_CHECK_AND_CAST(addrs, optval, struct sctp_getaddresses, optsize); #ifdef INET if (addrs->addr->sa_family == AF_INET) { - sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in); - if (optsize < sz) { + if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in)) { SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); error = EINVAL; break; @@ -5327,8 +5322,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, #endif #ifdef INET6 if (addrs->addr->sa_family == AF_INET6) { - sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6); - if (optsize < sz) { + if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6)) { SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); error = EINVAL; break; diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index c89eb82..d8ce16e 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -2951,7 +2951,7 @@ sctp_notify_send_failed2(struct sctp_tcb *stcb, uint32_t error, SCTP_BUF_LEN(m_notify) = 0; if (sctp_stcb_is_feature_on(stcb->sctp_ep, stcb, SCTP_PCB_FLAGS_RECVNSENDFAILEVNT)) { ssfe = mtod(m_notify, struct sctp_send_failed_event *); - ssfe->ssfe_type = SCTP_SEND_FAILED; + ssfe->ssfe_type = SCTP_SEND_FAILED_EVENT; ssfe->ssfe_flags = SCTP_DATA_UNSENT; ssfe->ssfe_length = length; ssfe->ssfe_error = error; @@ -3774,6 +3774,8 @@ sctp_report_all_outbound(struct sctp_tcb *stcb, uint16_t error, int holds_lock, if (sp->data) { sctp_m_freem(sp->data); sp->data = NULL; + sp->tail_mbuf = NULL; + sp->length = 0; } } if (sp->net) { @@ -4833,7 +4835,7 @@ sctp_release_pr_sctp_chunk(struct sctp_tcb *stcb, struct sctp_tmit_chunk *tp1, /* * Pull any data to free up the SB * and allow sender to "add more" - * whilc we will throw away :-) + * while we will throw away :-) */ sctp_free_spbufspace(stcb, &stcb->asoc, sp); @@ -4841,9 +4843,9 @@ sctp_release_pr_sctp_chunk(struct sctp_tcb *stcb, struct sctp_tmit_chunk *tp1, do_wakeup_routine = 1; sp->some_taken = 1; sctp_m_freem(sp->data); - sp->length = 0; sp->data = NULL; sp->tail_mbuf = NULL; + sp->length = 0; } break; } @@ -5637,7 +5639,7 @@ found_one: memcpy(from, &sin6, sizeof(struct sockaddr_in6)); } #endif -#if defined(INET6) +#ifdef INET6 { struct sockaddr_in6 lsa6, *from6; @@ -6534,7 +6536,7 @@ sctp_bindx_delete_address(struct sctp_inpcb *inp, return; } addr_touse = sa; -#if defined(INET6) +#ifdef INET6 if (sa->sa_family == AF_INET6) { struct sockaddr_in6 *sin6; diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 6d8ebee..1840b08 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -909,7 +909,7 @@ findpcb: /* * A previous connection in TIMEWAIT state is supposed to catch stray * or duplicate segments arriving late. If this segment was a - * legitimate new connection attempt the old INPCB gets removed and + * legitimate new connection attempt, the old INPCB gets removed and * we can try again to find a listening socket. * * At this point, due to earlier optimism, we may hold only an inpcb @@ -1438,15 +1438,8 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, /* * If this is either a state-changing packet or current state isn't * established, we require a write lock on tcbinfo. Otherwise, we - * allow either a read lock or a write lock, as we may have acquired - * a write lock due to a race. - * - * Require a global write lock for SYN/FIN/RST segments or - * non-established connections; otherwise accept either a read or - * write lock, as we may have conservatively acquired a write lock in - * certain cases in tcp_input() (is this still true?). Currently we - * will never enter with no lock, so we try to drop it quickly in the - * common pure ack/pure data cases. + * allow the tcbinfo to be in either alocked or unlocked, as the + * caller may have unnecessarily acquired a write lock due to a race. */ if ((thflags & (TH_SYN | TH_FIN | TH_RST)) != 0 || tp->t_state != TCPS_ESTABLISHED) { diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c index 1881c54..9876ef8 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -180,7 +180,7 @@ tcp_output(struct tcpcb *tp) int idle, sendalot; int sack_rxmit, sack_bytes_rxmt; struct sackhole *p; - int tso; + int tso, mtu; struct tcpopt to; #if 0 int maxburst = TCP_MAXBURST; @@ -226,6 +226,7 @@ again: tcp_sack_adjust(tp); sendalot = 0; tso = 0; + mtu = 0; off = tp->snd_nxt - tp->snd_una; sendwin = min(tp->snd_wnd, tp->snd_cwnd); @@ -1209,6 +1210,9 @@ timer: */ #ifdef INET6 if (isipv6) { + struct route_in6 ro; + + bzero(&ro, sizeof(ro)); /* * we separately set hoplimit for every segment, since the * user might want to change the value via setsockopt. @@ -1218,10 +1222,13 @@ timer: ip6->ip6_hlim = in6_selecthlim(tp->t_inpcb, NULL); /* TODO: IPv6 IP6TOS_ECT bit on */ - error = ip6_output(m, - tp->t_inpcb->in6p_outputopts, NULL, - ((so->so_options & SO_DONTROUTE) ? - IP_ROUTETOIF : 0), NULL, NULL, tp->t_inpcb); + error = ip6_output(m, tp->t_inpcb->in6p_outputopts, &ro, + ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0), + NULL, NULL, tp->t_inpcb); + + if (error == EMSGSIZE && ro.ro_rt != NULL) + mtu = ro.ro_rt->rt_rmx.rmx_mtu; + RO_RTFREE(&ro); } #endif /* INET6 */ #if defined(INET) && defined(INET6) @@ -1229,6 +1236,9 @@ timer: #endif #ifdef INET { + struct route ro; + + bzero(&ro, sizeof(ro)); ip->ip_len = m->m_pkthdr.len; #ifdef INET6 if (tp->t_inpcb->inp_vflag & INP_IPV6PROTO) @@ -1245,9 +1255,13 @@ timer: if (V_path_mtu_discovery && tp->t_maxopd > V_tcp_minmss) ip->ip_off |= IP_DF; - error = ip_output(m, tp->t_inpcb->inp_options, NULL, + error = ip_output(m, tp->t_inpcb->inp_options, &ro, ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0), 0, tp->t_inpcb); + + if (error == EMSGSIZE && ro.ro_rt != NULL) + mtu = ro.ro_rt->rt_rmx.rmx_mtu; + RO_RTFREE(&ro); } #endif /* INET */ if (error) { @@ -1294,21 +1308,18 @@ out: * For some reason the interface we used initially * to send segments changed to another or lowered * its MTU. - * - * tcp_mtudisc() will find out the new MTU and as - * its last action, initiate retransmission, so it - * is important to not do so here. - * * If TSO was active we either got an interface * without TSO capabilits or TSO was turned off. - * Disable it for this connection as too and - * immediatly retry with MSS sized segments generated - * by this function. + * If we obtained mtu from ip_output() then update + * it and try again. */ if (tso) tp->t_flags &= ~TF_TSO; - tcp_mtudisc(tp->t_inpcb, -1); - return (0); + if (mtu != 0) { + tcp_mss_update(tp, -1, mtu, NULL, NULL); + goto again; + } + return (error); case EHOSTDOWN: case EHOSTUNREACH: case ENETDOWN: diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index 960b887..a7df9f8 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -257,10 +257,10 @@ in6_mask2len(struct in6_addr *mask, u_char *lim0) #ifdef COMPAT_FREEBSD32 struct in6_ndifreq32 { - char ifname[IFNAMSIZ]; - uint32_t ifindex; + char ifname[IFNAMSIZ]; + uint32_t ifindex; }; -#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32) +#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32) #endif int @@ -284,7 +284,7 @@ in6_control(struct socket *so, u_long cmd, caddr_t data, switch (cmd) { case SIOCGETSGCNT_IN6: case SIOCGETMIFCNT_IN6: - /* + /* * XXX mrt_ioctl has a 3rd, unused, FIB argument in route.c. * We cannot see how that would be needed, so do not adjust the * KPI blindly; more likely should clean up the IPv4 variant. @@ -485,7 +485,7 @@ in6_control(struct socket *so, u_long cmd, caddr_t data, } if (td != NULL) { - error = priv_check(td, (cmd == SIOCDIFADDR_IN6) ? + error = priv_check(td, (cmd == SIOCDIFADDR_IN6) ? PRIV_NET_DELIFADDR : PRIV_NET_ADDIFADDR); if (error) goto out; @@ -1365,7 +1365,7 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0) bzero(&sin6, sizeof(sin6)); sin6.sin6_len = sizeof(sin6); sin6.sin6_family = AF_INET6; - memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr, + memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr, sizeof(sin6.sin6_addr)); error = in6_setscope(&sin6.sin6_addr, ifa0->ifa_ifp, NULL); if (error != 0) @@ -1374,16 +1374,17 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0) rt = in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB); if (rt != NULL && rt->rt_gateway != NULL && - (memcmp(&satosin6(rt->rt_gateway)->sin6_addr, + (memcmp(&satosin6(rt->rt_gateway)->sin6_addr, &ia->ia_addr.sin6_addr, sizeof(ia->ia_addr.sin6_addr)) == 0)) { - /* + /* * If no more IPv6 address exists on this interface then * remove the multicast address route. */ if (ifa0 == NULL) { - memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr, - sizeof(mltaddr.sin6_addr)); + memcpy(&mltaddr.sin6_addr, + &satosin6(rt_key(rt))->sin6_addr, + sizeof(mltaddr.sin6_addr)); RTFREE_LOCKED(rt); error = in6_rtrequest(RTM_DELETE, (struct sockaddr *)&mltaddr, @@ -1415,16 +1416,17 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0) rt = in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB); if (rt != NULL && rt->rt_gateway != NULL && - (memcmp(&satosin6(rt->rt_gateway)->sin6_addr, + (memcmp(&satosin6(rt->rt_gateway)->sin6_addr, &ia->ia_addr.sin6_addr, sizeof(ia->ia_addr.sin6_addr)) == 0)) { - /* + /* * If no more IPv6 address exists on this interface then * remove the multicast address route. */ if (ifa0 == NULL) { - memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr, - sizeof(mltaddr.sin6_addr)); + memcpy(&mltaddr.sin6_addr, + &satosin6(rt_key(rt))->sin6_addr, + sizeof(mltaddr.sin6_addr)); RTFREE_LOCKED(rt); error = in6_rtrequest(RTM_DELETE, @@ -1471,8 +1473,7 @@ in6_purgeaddr(struct ifaddr *ifa) TAILQ_FOREACH(ifa0, &ifp->if_addrhead, ifa_link) { if ((ifa0->ifa_addr->sa_family != AF_INET6) || memcmp(&satosin6(ifa0->ifa_addr)->sin6_addr, - &ia->ia_addr.sin6_addr, - sizeof(struct in6_addr)) == 0) + &ia->ia_addr.sin6_addr, sizeof(struct in6_addr)) == 0) continue; else break; @@ -1483,12 +1484,12 @@ in6_purgeaddr(struct ifaddr *ifa) /* * Remove the loopback route to the interface address. - * The check for the current setting of "nd6_useloopback" + * The check for the current setting of "nd6_useloopback" * is not needed. */ if (ia->ia_flags & IFA_RTSELF) { error = ifa_del_loopback_route((struct ifaddr *)ia, - (struct sockaddr *)&ia->ia_addr); + (struct sockaddr *)&ia->ia_addr); if (error == 0) ia->ia_flags &= ~IFA_RTSELF; } @@ -1890,7 +1891,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia, * Special case: * If a new destination address is specified for a point-to-point * interface, install a route to the destination as an interface - * direct route. + * direct route. * XXX: the logic below rejects assigning multiple addresses on a p2p * interface that share the same destination. */ @@ -1914,7 +1915,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia, */ if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) { error = ifa_add_loopback_route((struct ifaddr *)ia, - (struct sockaddr *)&ia->ia_addr); + (struct sockaddr *)&ia->ia_addr); if (error == 0) ia->ia_flags |= IFA_RTSELF; } @@ -1941,7 +1942,7 @@ in6ifa_ifpforlinklocal(struct ifnet *ifp, int ignoreflags) continue; if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) { if ((((struct in6_ifaddr *)ifa)->ia6_flags & - ignoreflags) != 0) + ignoreflags) != 0) continue; ifa_ref(ifa); break; @@ -2108,7 +2109,7 @@ in6_is_addr_deprecated(struct sockaddr_in6 *sa6) IN6_IFADDR_RLOCK(); TAILQ_FOREACH(ia, &V_in6_ifaddrhead, ia_link) { if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr, - &sa6->sin6_addr) && + &sa6->sin6_addr) && (ia->ia6_flags & IN6_IFF_DEPRECATED) != 0) { IN6_IFADDR_RUNLOCK(); return (1); /* true */ @@ -2379,7 +2380,7 @@ in6_setmaxmtu(void) maxmtu = IN6_LINKMTU(ifp); } IFNET_RUNLOCK_NOSLEEP(); - if (maxmtu) /* update only when maxmtu is positive */ + if (maxmtu) /* update only when maxmtu is positive */ V_in6_maxmtu = maxmtu; } @@ -2469,8 +2470,7 @@ in6_lltable_new(const struct sockaddr *l3addr, u_int flags) { struct in6_llentry *lle; - lle = malloc(sizeof(struct in6_llentry), M_LLTABLE, - M_DONTWAIT | M_ZERO); + lle = malloc(sizeof(struct in6_llentry), M_LLTABLE, M_NOWAIT | M_ZERO); if (lle == NULL) /* NB: caller generates msg */ return NULL; @@ -2481,46 +2481,43 @@ in6_lltable_new(const struct sockaddr *l3addr, u_int flags) callout_init_rw(&lle->base.ln_timer_ch, &lle->base.lle_lock, CALLOUT_RETURNUNLOCKED); - return &lle->base; + return (&lle->base); } static void -in6_lltable_prefix_free(struct lltable *llt, - const struct sockaddr *prefix, - const struct sockaddr *mask, - u_int flags) +in6_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix, + const struct sockaddr *mask, u_int flags) { const struct sockaddr_in6 *pfx = (const struct sockaddr_in6 *)prefix; const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask; struct llentry *lle, *next; - register int i; + int i; /* - * (flags & LLE_STATIC) means deleting all entries - * including static ND6 entries + * (flags & LLE_STATIC) means deleting all entries + * including static ND6 entries. */ - for (i=0; i < LLTBL_HASHTBL_SIZE; i++) { + IF_AFDATA_WLOCK(llt->llt_ifp); + for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) { LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) { if (IN6_ARE_MASKED_ADDR_EQUAL( - &((struct sockaddr_in6 *)L3_ADDR(lle))->sin6_addr, - &pfx->sin6_addr, - &msk->sin6_addr) && - ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) { - int canceled; - - canceled = callout_drain(&lle->la_timer); + &satosin6(L3_ADDR(lle))->sin6_addr, + &pfx->sin6_addr, &msk->sin6_addr) && + ((flags & LLE_STATIC) || + !(lle->la_flags & LLE_STATIC))) { LLE_WLOCK(lle); - if (canceled) + if (callout_stop(&lle->la_timer)) LLE_REMREF(lle); llentry_free(lle); } } } + IF_AFDATA_WUNLOCK(llt->llt_ifp); } static int -in6_lltable_rtcheck(struct ifnet *ifp, - u_int flags, +in6_lltable_rtcheck(struct ifnet *ifp, + u_int flags, const struct sockaddr *l3addr) { struct rtentry *rt; @@ -2535,8 +2532,8 @@ in6_lltable_rtcheck(struct ifnet *ifp, RT_DEFAULT_FIB); if (rt == NULL || (rt->rt_flags & RTF_GATEWAY) || rt->rt_ifp != ifp) { struct ifaddr *ifa; - /* - * Create an ND6 cache for an IPv6 neighbor + /* + * Create an ND6 cache for an IPv6 neighbor * that is not covered by our own prefix. */ /* XXX ifaof_ifpforaddr should take a const param */ @@ -2577,8 +2574,8 @@ in6_lltable_lookup(struct lltable *llt, u_int flags, struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)L3_ADDR(lle); if (lle->la_flags & LLE_DELETED) continue; - if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr, - sizeof(struct in6_addr)) == 0) + if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr, + sizeof(struct in6_addr)) == 0) break; } @@ -2607,15 +2604,16 @@ in6_lltable_lookup(struct lltable *llt, u_int flags, lle->lle_tbl = llt; lle->lle_head = lleh; + lle->la_flags |= LLE_LINKED; LIST_INSERT_HEAD(lleh, lle, lle_next); } else if (flags & LLE_DELETE) { if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) { LLE_WLOCK(lle); - lle->la_flags = LLE_DELETED; + lle->la_flags |= LLE_DELETED; LLE_WUNLOCK(lle); #ifdef DIAGNOSTIC - log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); -#endif + log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); +#endif } lle = (void *)-1; } @@ -2801,8 +2799,7 @@ in6_sin_2_v4mapsin6_in_sock(struct sockaddr **nam) struct sockaddr_in *sin_p; struct sockaddr_in6 *sin6_p; - sin6_p = malloc(sizeof *sin6_p, M_SONAME, - M_WAITOK); + sin6_p = malloc(sizeof *sin6_p, M_SONAME, M_WAITOK); sin_p = (struct sockaddr_in *)*nam; in6_sin_2_v4mapsin6(sin_p, sin6_p); free(*nam, M_SONAME); diff --git a/sys/netinet6/ip6_ipsec.c b/sys/netinet6/ip6_ipsec.c index 757f1cc..911ea8d 100644 --- a/sys/netinet6/ip6_ipsec.c +++ b/sys/netinet6/ip6_ipsec.c @@ -263,7 +263,7 @@ ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *flags, int *error, mtag->m_tag_id != PACKET_TAG_IPSEC_OUT_CRYPTO_NEEDED) continue; /* - * Check if policy has an SA associated with it. + * Check if policy has no SA associated with it. * This can happen when an SP has yet to acquire * an SA; e.g. on first reference. If it occurs, * then we let ipsec4_process_packet do its thing. @@ -291,16 +291,16 @@ ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *flags, int *error, /* * Do delayed checksums now because we send before * this is done in the normal processing path. - * XXX-BZ CSUM_DELAY_DATA_IPV6? + * For IPv6 we do delayed checksums in ip6_output.c. */ +#ifdef INET if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { ipseclog((LOG_DEBUG, "%s: we do not support IPv4 over IPv6", __func__)); -#ifdef INET in_delayed_cksum(*m); -#endif (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA; } +#endif /* * Preserve KAME behaviour: ENOENT can be returned diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c index e1569b0..1fdedf1 100644 --- a/sys/netinet6/ip6_output.c +++ b/sys/netinet6/ip6_output.c @@ -195,8 +195,9 @@ in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset) offset += m->m_pkthdr.csum_data; /* checksum offset */ if (offset + sizeof(u_short) > m->m_len) { - printf("%s: delayed m_pullup, m->len: %d off: %d\n", - __func__, m->m_len, offset); + printf("%s: delayed m_pullup, m->len: %d plen %u off %u " + "csum_flags=0x%04x\n", __func__, m->m_len, plen, offset, + m->m_pkthdr.csum_flags); /* * XXX this should not happen, but if it does, the correct * behavior may be to insert the checksum in the appropriate @@ -294,17 +295,31 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt, MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2); } +#ifdef IPSEC /* * IPSec checking which handles several cases. * FAST IPSEC: We re-injected the packet. */ -#ifdef IPSEC switch(ip6_ipsec_output(&m, inp, &flags, &error, &ifp, &sp)) { case 1: /* Bad packet */ goto freehdrs; case -1: /* Do IPSec */ needipsec = 1; + /* + * Do delayed checksums now, as we may send before returning. + */ + if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { + plen = m->m_pkthdr.len - sizeof(*ip6); + in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr)); + m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6; + } +#ifdef SCTP + if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) { + sctp_delayed_cksum(m, sizeof(struct ip6_hdr)); + m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6; + } +#endif case 0: /* No IPSec */ default: break; diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c index 28e0746..58fe3a3 100644 --- a/sys/netinet6/sctp6_usrreq.c +++ b/sys/netinet6/sctp6_usrreq.c @@ -34,11 +34,12 @@ __FBSDID("$FreeBSD$"); #include <netinet/sctp_os.h> +#ifdef INET6 #include <sys/proc.h> #include <netinet/sctp_pcb.h> #include <netinet/sctp_header.h> #include <netinet/sctp_var.h> -#if defined(INET6) +#ifdef INET6 #include <netinet6/sctp6_var.h> #endif #include <netinet/sctp_sysctl.h> @@ -57,7 +58,7 @@ __FBSDID("$FreeBSD$"); #ifdef IPSEC #include <netipsec/ipsec.h> -#if defined(INET6) +#ifdef INET6 #include <netipsec/ipsec6.h> #endif /* INET6 */ #endif /* IPSEC */ @@ -1240,3 +1241,5 @@ struct pr_usrreqs sctp6_usrreqs = { .pru_sosend = sctp_sosend, .pru_soreceive = sctp_soreceive }; + +#endif diff --git a/sys/netipsec/ipsec_output.c b/sys/netipsec/ipsec_output.c index 38268f7..1a1b646 100644 --- a/sys/netipsec/ipsec_output.c +++ b/sys/netipsec/ipsec_output.c @@ -165,8 +165,7 @@ ipsec_process_done(struct mbuf *m, struct ipsecrequest *isr) */ if (isr->next) { V_ipsec4stat.ips_out_bundlesa++; - sav = isr->next->sav; - saidx = &sav->sah->saidx; + /* XXX-BZ currently only support same AF bundles. */ switch (saidx->dst.sa.sa_family) { #ifdef INET case AF_INET: diff --git a/sys/powerpc/powerpc/busdma_machdep.c b/sys/powerpc/powerpc/busdma_machdep.c index 2063b1d..7953f91 100644 --- a/sys/powerpc/powerpc/busdma_machdep.c +++ b/sys/powerpc/powerpc/busdma_machdep.c @@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <vm/vm.h> +#include <vm/vm_extern.h> +#include <vm/vm_kern.h> #include <vm/vm_page.h> #include <vm/vm_map.h> @@ -130,6 +132,7 @@ struct bus_dmamap { bus_dmamap_callback_t *callback; void *callback_arg; STAILQ_ENTRY(bus_dmamap) links; + int contigalloc; }; static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist; @@ -489,6 +492,7 @@ int bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, bus_dmamap_t *mapp) { + vm_memattr_t attr; int mflags; if (flags & BUS_DMA_NOWAIT) @@ -500,6 +504,12 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, if (flags & BUS_DMA_ZERO) mflags |= M_ZERO; +#ifdef NOTYET + if (flags & BUS_DMA_NOCACHE) + attr = VM_MEMATTR_UNCACHEABLE; + else +#endif + attr = VM_MEMATTR_DEFAULT; /* * XXX: @@ -511,7 +521,8 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, */ if ((dmat->maxsize <= PAGE_SIZE) && (dmat->alignment < dmat->maxsize) && - dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) { + dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) && + attr == VM_MEMATTR_DEFAULT) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); } else { /* @@ -520,9 +531,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, * multi-seg allocations yet though. * XXX Certain AGP hardware does. */ - *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags, - 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul, - dmat->boundary); + *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize, + mflags, 0ul, dmat->lowaddr, dmat->alignment ? + dmat->alignment : 1ul, dmat->boundary, attr); + (*mapp)->contigalloc = 1; } if (*vaddr == NULL) { CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", @@ -531,11 +543,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, } else if (vtophys(*vaddr) & (dmat->alignment - 1)) { printf("bus_dmamem_alloc failed to align memory properly.\n"); } -#ifdef NOTYET - if (flags & BUS_DMA_NOCACHE) - pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize, - VM_MEMATTR_UNCACHEABLE); -#endif CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, 0); return (0); @@ -548,18 +555,12 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, void bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) { - bus_dmamap_destroy(dmat, map); -#ifdef NOTYET - pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, VM_MEMATTR_DEFAULT); -#endif - if ((dmat->maxsize <= PAGE_SIZE) && - (dmat->alignment < dmat->maxsize) && - dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) + if (!map->contigalloc) free(vaddr, M_DEVBUF); - else { - contigfree(vaddr, dmat->maxsize, M_DEVBUF); - } + else + kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize); + bus_dmamap_destroy(dmat, map); CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags); } diff --git a/sys/sys/ata.h b/sys/sys/ata.h index 9b2d867..23781ef 100644 --- a/sys/sys/ata.h +++ b/sys/sys/ata.h @@ -261,6 +261,20 @@ struct ata_params { /*255*/ u_int16_t integrity; } __packed; +/* + * ATA Device Register + * + * bit 7 Obsolete (was 1 in early ATA specs) + * bit 6 Sets LBA/CHS mode. 1=LBA, 0=CHS + * bit 5 Obsolete (was 1 in early ATA specs) + * bit 4 1 = Slave Drive, 0 = Master Drive + * bit 3-0 In LBA mode, 27-24 of address. In CHS mode, head number +*/ + +#define ATA_DEV_MASTER 0x00 +#define ATA_DEV_SLAVE 0x10 +#define ATA_DEV_LBA 0x40 + /* ATA transfer modes */ #define ATA_MODE_MASK 0x0f diff --git a/sys/sys/fcntl.h b/sys/sys/fcntl.h index 29b2a0c..8ecb3c9 100644 --- a/sys/sys/fcntl.h +++ b/sys/sys/fcntl.h @@ -111,7 +111,7 @@ typedef __pid_t pid_t; #if __BSD_VISIBLE /* Attempt to bypass buffer cache */ -#define O_DIRECT 0x00010000 +#define O_DIRECT 0x00010000 #endif /* Defined by POSIX Extended API Set Part 2 */ @@ -213,18 +213,28 @@ typedef __pid_t pid_t; #define F_SETFL 4 /* set file status flags */ #if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112 #define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */ -#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ +#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */ #endif +#if __BSD_VISIBLE #define F_OGETLK 7 /* get record locking information */ #define F_OSETLK 8 /* set record locking information */ #define F_OSETLKW 9 /* F_SETLK; wait if blocked */ #define F_DUP2FD 10 /* duplicate file descriptor to arg */ +#endif #define F_GETLK 11 /* get record locking information */ #define F_SETLK 12 /* set record locking information */ #define F_SETLKW 13 /* F_SETLK; wait if blocked */ +#if __BSD_VISIBLE #define F_SETLK_REMOTE 14 /* debugging support for remote locks */ #define F_READAHEAD 15 /* read ahead */ #define F_RDAHEAD 16 /* Darwin compatible read ahead */ +#endif +#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 +#define F_DUPFD_CLOEXEC 17 /* Like F_DUPFD, but FD_CLOEXEC is set */ +#endif +#if __BSD_VISIBLE +#define F_DUP2FD_CLOEXEC 18 /* Like F_DUP2FD, but FD_CLOEXEC is set */ +#endif /* file descriptor flags (F_GETFD, F_SETFD) */ #define FD_CLOEXEC 1 /* close-on-exec flag */ @@ -233,14 +243,16 @@ typedef __pid_t pid_t; #define F_RDLCK 1 /* shared or read lock */ #define F_UNLCK 2 /* unlock */ #define F_WRLCK 3 /* exclusive or write lock */ +#if __BSD_VISIBLE #define F_UNLCKSYS 4 /* purge locks for a given system ID */ #define F_CANCEL 5 /* cancel an async lock request */ +#endif #ifdef _KERNEL #define F_WAIT 0x010 /* Wait until lock is granted */ #define F_FLOCK 0x020 /* Use flock(2) semantics for lock */ #define F_POSIX 0x040 /* Use POSIX semantics for lock */ #define F_REMOTE 0x080 /* Lock owner is remote NFS client */ -#define F_NOINTR 0x100 /* Ignore signals when waiting */ +#define F_NOINTR 0x100 /* Ignore signals when waiting */ #endif /* @@ -256,18 +268,19 @@ struct flock { int l_sysid; /* remote system id or zero for local */ }; +#if __BSD_VISIBLE /* * Old advisory file segment locking data type, * before adding l_sysid. */ -struct oflock { +struct __oflock { off_t l_start; /* starting offset */ off_t l_len; /* len = 0 means until end of file */ pid_t l_pid; /* lock owner */ short l_type; /* lock type: read/write, etc. */ short l_whence; /* type of l_start */ }; - +#endif #if __BSD_VISIBLE /* lock operations for flock(2) */ diff --git a/sys/sys/param.h b/sys/sys/param.h index ff0a7d2..c620814 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 1000014 /* Master, propagated to newvers */ +#define __FreeBSD_version 1000015 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, diff --git a/sys/sys/pipe.h b/sys/sys/pipe.h index d60185a..dfe7f2f 100644 --- a/sys/sys/pipe.h +++ b/sys/sys/pipe.h @@ -96,7 +96,6 @@ struct pipemapping { #define PIPE_DIRECTW 0x400 /* Pipe direct write active. */ #define PIPE_DIRECTOK 0x800 /* Direct mode ok. */ #define PIPE_NAMED 0x1000 /* Is a named pipe. */ -#define PIPE_SAMEWGEN 0x2000 /* same write generation for named pipes. */ /* * Per-pipe data structure. @@ -115,6 +114,7 @@ struct pipe { u_int pipe_state; /* pipe status info */ int pipe_busy; /* busy flag, mostly to handle rundown sanely */ int pipe_present; /* still present? */ + int pipe_wgen; /* writer generation for named pipe */ ino_t pipe_ino; /* fake inode for stat(2) */ }; @@ -143,5 +143,5 @@ struct pipepair { void pipe_dtor(struct pipe *dpipe); int pipe_named_ctor(struct pipe **ppipe, struct thread *td); - +void pipeselwakeup(struct pipe *cpipe); #endif /* !_SYS_PIPE_H_ */ diff --git a/sys/sys/refcount.h b/sys/sys/refcount.h index c6b2a8e..68f62a0 100644 --- a/sys/sys/refcount.h +++ b/sys/sys/refcount.h @@ -32,6 +32,7 @@ #ifndef __SYS_REFCOUNT_H__ #define __SYS_REFCOUNT_H__ +#include <sys/limits.h> #include <machine/atomic.h> #ifdef _KERNEL @@ -51,6 +52,7 @@ static __inline void refcount_acquire(volatile u_int *count) { + KASSERT(*count < UINT_MAX, ("refcount %p overflowed", count)); atomic_add_acq_int(count, 1); } diff --git a/sys/sys/stat.h b/sys/sys/stat.h index 1b03bd2..ba4f4d4 100644 --- a/sys/sys/stat.h +++ b/sys/sys/stat.h @@ -99,7 +99,7 @@ typedef __uid_t uid_t; #include <sys/time.h> #endif -#if __BSD_VISIBLE +#ifdef _KERNEL struct ostat { __uint16_t st_dev; /* inode's device */ ino_t st_ino; /* inode's number */ @@ -117,7 +117,7 @@ struct ostat { fflags_t st_flags; /* user defined flags for file */ __uint32_t st_gen; /* file generation number */ }; -#endif /* __BSD_VISIBLE */ +#endif struct stat { __dev_t st_dev; /* inode's device */ @@ -149,7 +149,7 @@ struct stat { unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); }; -#if __BSD_VISIBLE +#ifdef _KERNEL struct nstat { __dev_t st_dev; /* inode's device */ ino_t st_ino; /* inode's number */ diff --git a/sys/sys/user.h b/sys/sys/user.h index 42733a6..accb7c3 100644 --- a/sys/sys/user.h +++ b/sys/sys/user.h @@ -413,6 +413,8 @@ struct kinfo_file { #define KVME_FLAG_NEEDS_COPY 0x00000002 #define KVME_FLAG_NOCOREDUMP 0x00000004 #define KVME_FLAG_SUPER 0x00000008 +#define KVME_FLAG_GROWS_UP 0x00000010 +#define KVME_FLAG_GROWS_DOWN 0x00000020 #if defined(__amd64__) #define KINFO_OVMENTRY_SIZE 1168 diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 9d03f03..56648af 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -1742,7 +1742,7 @@ ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, wkhd) enum vtype vtype; struct workhead *wkhd; { - struct buf *ibp, *cbp, *savedcbp = 0; + struct buf *ibp, *cbp, *savedcbp = NULL; struct thread *td = curthread; struct inode *ip; struct vnode *vp = NULL; @@ -2236,11 +2236,11 @@ ffs_copyonwrite(devvp, bp) struct buf *bp; { struct snapdata *sn; - struct buf *ibp, *cbp, *savedcbp = 0; + struct buf *ibp, *cbp, *savedcbp = NULL; struct thread *td = curthread; struct fs *fs; struct inode *ip; - struct vnode *vp = 0; + struct vnode *vp = NULL; ufs2_daddr_t lbn, blkno, *snapblklist; int lower, upper, mid, indiroff, error = 0; int launched_async_io, prev_norunningbuf; diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index fee8012..cc8d826 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -142,7 +142,7 @@ ffs_mount(struct mount *mp) { struct vnode *devvp; struct thread *td; - struct ufsmount *ump = 0; + struct ufsmount *ump = NULL; struct fs *fs; pid_t fsckpid = 0; int error, flags; diff --git a/sys/vm/memguard.c b/sys/vm/memguard.c index 5a690e7..b1740c3 100644 --- a/sys/vm/memguard.c +++ b/sys/vm/memguard.c @@ -159,16 +159,18 @@ SYSCTL_ULONG(_vm_memguard, OID_AUTO, frequency_hits, CTLFLAG_RD, * the kmem_map. The memguard memory will be a submap. */ unsigned long -memguard_fudge(unsigned long km_size, unsigned long km_max) +memguard_fudge(unsigned long km_size, const struct vm_map *parent_map) { - u_long mem_pgs = cnt.v_page_count; + u_long mem_pgs, parent_size; vm_memguard_divisor = 10; TUNABLE_INT_FETCH("vm.memguard.divisor", &vm_memguard_divisor); + parent_size = vm_map_max(parent_map) - vm_map_min(parent_map) + + PAGE_SIZE; /* Pick a conservative value if provided value sucks. */ if ((vm_memguard_divisor <= 0) || - ((km_size / vm_memguard_divisor) == 0)) + ((parent_size / vm_memguard_divisor) == 0)) vm_memguard_divisor = 10; /* * Limit consumption of physical pages to @@ -177,21 +179,19 @@ memguard_fudge(unsigned long km_size, unsigned long km_max) * This prevents memguard's page promotions from completely * using up memory, since most malloc(9) calls are sub-page. */ + mem_pgs = cnt.v_page_count; memguard_physlimit = (mem_pgs / vm_memguard_divisor) * PAGE_SIZE; /* * We want as much KVA as we can take safely. Use at most our - * allotted fraction of kmem_max. Limit this to twice the - * physical memory to avoid using too much memory as pagetable - * pages. + * allotted fraction of the parent map's size. Limit this to + * twice the physical memory to avoid using too much memory as + * pagetable pages (size must be multiple of PAGE_SIZE). */ - memguard_mapsize = km_max / vm_memguard_divisor; - /* size must be multiple of PAGE_SIZE */ - memguard_mapsize = round_page(memguard_mapsize); - if (memguard_mapsize == 0 || - memguard_mapsize / (2 * PAGE_SIZE) > mem_pgs) + memguard_mapsize = round_page(parent_size / vm_memguard_divisor); + if (memguard_mapsize / (2 * PAGE_SIZE) > mem_pgs) memguard_mapsize = mem_pgs * 2 * PAGE_SIZE; - if (km_max > 0 && km_size + memguard_mapsize > km_max) - return (km_max); + if (km_size + memguard_mapsize > parent_size) + memguard_mapsize = 0; return (km_size + memguard_mapsize); } diff --git a/sys/vm/memguard.h b/sys/vm/memguard.h index 335e237..9ec4ffd 100644 --- a/sys/vm/memguard.h +++ b/sys/vm/memguard.h @@ -35,7 +35,7 @@ struct malloc_type; struct vm_map; #ifdef DEBUG_MEMGUARD -unsigned long memguard_fudge(unsigned long, unsigned long); +unsigned long memguard_fudge(unsigned long, const struct vm_map *); void memguard_init(struct vm_map *); void *memguard_alloc(unsigned long, int); void *memguard_realloc(void *, unsigned long, struct malloc_type *, int); diff --git a/sys/vm/vm_contig.c b/sys/vm/vm_contig.c deleted file mode 100644 index e29aaf7..0000000 --- a/sys/vm/vm_contig.c +++ /dev/null @@ -1,351 +0,0 @@ -/*- - * Copyright (c) 1991 Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * The Mach Operating System project at Carnegie-Mellon University. - * - * 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. - * 4. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. - * - * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91 - */ - -/*- - * Copyright (c) 1987, 1990 Carnegie-Mellon University. - * All rights reserved. - * - * Authors: Avadis Tevanian, Jr., Michael Wayne Young - * - * Permission to use, copy, modify and distribute this software and - * its documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND - * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie the - * rights to redistribute these changes. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/lock.h> -#include <sys/mount.h> -#include <sys/mutex.h> -#include <sys/proc.h> -#include <sys/kernel.h> -#include <sys/sysctl.h> -#include <sys/vmmeter.h> -#include <sys/vnode.h> - -#include <vm/vm.h> -#include <vm/vm_param.h> -#include <vm/vm_kern.h> -#include <vm/pmap.h> -#include <vm/vm_map.h> -#include <vm/vm_object.h> -#include <vm/vm_page.h> -#include <vm/vm_pageout.h> -#include <vm/vm_pager.h> -#include <vm/vm_extern.h> - -static int -vm_contig_launder_page(vm_page_t m, vm_page_t *next) -{ - vm_object_t object; - vm_page_t m_tmp; - struct vnode *vp; - struct mount *mp; - int vfslocked; - - mtx_assert(&vm_page_queue_mtx, MA_OWNED); - vm_page_lock_assert(m, MA_OWNED); - object = m->object; - if (!VM_OBJECT_TRYLOCK(object) && - (!vm_pageout_fallback_object_lock(m, next) || m->hold_count != 0)) { - vm_page_unlock(m); - VM_OBJECT_UNLOCK(object); - return (EAGAIN); - } - if (vm_page_sleep_if_busy(m, TRUE, "vpctw0")) { - VM_OBJECT_UNLOCK(object); - vm_page_lock_queues(); - return (EBUSY); - } - vm_page_test_dirty(m); - if (m->dirty == 0) - pmap_remove_all(m); - if (m->dirty != 0) { - vm_page_unlock(m); - if ((object->flags & OBJ_DEAD) != 0) { - VM_OBJECT_UNLOCK(object); - return (EAGAIN); - } - if (object->type == OBJT_VNODE) { - vm_page_unlock_queues(); - vp = object->handle; - vm_object_reference_locked(object); - VM_OBJECT_UNLOCK(object); - (void) vn_start_write(vp, &mp, V_WAIT); - vfslocked = VFS_LOCK_GIANT(vp->v_mount); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); - VM_OBJECT_LOCK(object); - vm_object_page_clean(object, 0, 0, OBJPC_SYNC); - VM_OBJECT_UNLOCK(object); - VOP_UNLOCK(vp, 0); - VFS_UNLOCK_GIANT(vfslocked); - vm_object_deallocate(object); - vn_finished_write(mp); - vm_page_lock_queues(); - return (0); - } else if (object->type == OBJT_SWAP || - object->type == OBJT_DEFAULT) { - vm_page_unlock_queues(); - m_tmp = m; - vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC, 0, - NULL, NULL); - VM_OBJECT_UNLOCK(object); - vm_page_lock_queues(); - return (0); - } - } else { - vm_page_cache(m); - vm_page_unlock(m); - } - VM_OBJECT_UNLOCK(object); - return (0); -} - -static int -vm_contig_launder(int queue, vm_paddr_t low, vm_paddr_t high) -{ - vm_page_t m, next; - vm_paddr_t pa; - int error; - - TAILQ_FOREACH_SAFE(m, &vm_page_queues[queue].pl, pageq, next) { - - /* Skip marker pages */ - if ((m->flags & PG_MARKER) != 0) - continue; - - pa = VM_PAGE_TO_PHYS(m); - if (pa < low || pa + PAGE_SIZE > high) - continue; - - if (!vm_pageout_page_lock(m, &next) || m->hold_count != 0) { - vm_page_unlock(m); - continue; - } - KASSERT(m->queue == queue, - ("vm_contig_launder: page %p's queue is not %d", m, queue)); - error = vm_contig_launder_page(m, &next); - vm_page_lock_assert(m, MA_NOTOWNED); - if (error == 0) - return (TRUE); - if (error == EBUSY) - return (FALSE); - } - return (FALSE); -} - -/* - * Increase the number of cached pages. - */ -void -vm_contig_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high) -{ - int actl, actmax, inactl, inactmax; - - vm_page_lock_queues(); - inactl = 0; - inactmax = tries < 1 ? 0 : cnt.v_inactive_count; - actl = 0; - actmax = tries < 2 ? 0 : cnt.v_active_count; -again: - if (inactl < inactmax && vm_contig_launder(PQ_INACTIVE, low, high)) { - inactl++; - goto again; - } - if (actl < actmax && vm_contig_launder(PQ_ACTIVE, low, high)) { - actl++; - goto again; - } - vm_page_unlock_queues(); -} - -/* - * Allocates a region from the kernel address map and pages within the - * specified physical address range to the kernel object, creates a wired - * mapping from the region to these pages, and returns the region's starting - * virtual address. The allocated pages are not necessarily physically - * contiguous. If M_ZERO is specified through the given flags, then the pages - * are zeroed before they are mapped. - */ -vm_offset_t -kmem_alloc_attr(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low, - vm_paddr_t high, vm_memattr_t memattr) -{ - vm_object_t object = kernel_object; - vm_offset_t addr; - vm_ooffset_t end_offset, offset; - vm_page_t m; - int pflags, tries; - - size = round_page(size); - vm_map_lock(map); - if (vm_map_findspace(map, vm_map_min(map), size, &addr)) { - vm_map_unlock(map); - return (0); - } - offset = addr - VM_MIN_KERNEL_ADDRESS; - vm_object_reference(object); - vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL, - VM_PROT_ALL, 0); - if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; - else - pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY; - if (flags & M_ZERO) - pflags |= VM_ALLOC_ZERO; - VM_OBJECT_LOCK(object); - end_offset = offset + size; - for (; offset < end_offset; offset += PAGE_SIZE) { - tries = 0; -retry: - m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, 1, - low, high, PAGE_SIZE, 0, memattr); - if (m == NULL) { - VM_OBJECT_UNLOCK(object); - if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) { - vm_map_unlock(map); - vm_contig_grow_cache(tries, low, high); - vm_map_lock(map); - VM_OBJECT_LOCK(object); - tries++; - goto retry; - } - /* - * Since the pages that were allocated by any previous - * iterations of this loop are not busy, they can be - * freed by vm_object_page_remove(), which is called - * by vm_map_delete(). - */ - vm_map_delete(map, addr, addr + size); - vm_map_unlock(map); - return (0); - } - if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) - pmap_zero_page(m); - m->valid = VM_PAGE_BITS_ALL; - } - VM_OBJECT_UNLOCK(object); - vm_map_unlock(map); - vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM | - VM_MAP_WIRE_NOHOLES); - return (addr); -} - -/* - * Allocates a region from the kernel address map, inserts the - * given physically contiguous pages into the kernel object, - * creates a wired mapping from the region to the pages, and - * returns the region's starting virtual address. If M_ZERO is - * specified through the given flags, then the pages are zeroed - * before they are mapped. - */ -vm_offset_t -kmem_alloc_contig(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low, - vm_paddr_t high, u_long alignment, vm_paddr_t boundary, - vm_memattr_t memattr) -{ - vm_object_t object = kernel_object; - vm_offset_t addr; - vm_ooffset_t offset; - vm_page_t end_m, m; - int pflags, tries; - - size = round_page(size); - vm_map_lock(map); - if (vm_map_findspace(map, vm_map_min(map), size, &addr)) { - vm_map_unlock(map); - return (0); - } - offset = addr - VM_MIN_KERNEL_ADDRESS; - vm_object_reference(object); - vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL, - VM_PROT_ALL, 0); - if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT) - pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; - else - pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY; - if (flags & M_ZERO) - pflags |= VM_ALLOC_ZERO; - if (flags & M_NODUMP) - pflags |= VM_ALLOC_NODUMP; - VM_OBJECT_LOCK(object); - tries = 0; -retry: - m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, - atop(size), low, high, alignment, boundary, memattr); - if (m == NULL) { - VM_OBJECT_UNLOCK(object); - if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) { - vm_map_unlock(map); - vm_contig_grow_cache(tries, low, high); - vm_map_lock(map); - VM_OBJECT_LOCK(object); - tries++; - goto retry; - } - vm_map_delete(map, addr, addr + size); - vm_map_unlock(map); - return (0); - } - end_m = m + atop(size); - for (; m < end_m; m++) { - if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) - pmap_zero_page(m); - m->valid = VM_PAGE_BITS_ALL; - } - VM_OBJECT_UNLOCK(object); - vm_map_unlock(map); - vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM | - VM_MAP_WIRE_NOHOLES); - return (addr); -} diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c index 5e157a6..46e7f1c 100644 --- a/sys/vm/vm_kern.c +++ b/sys/vm/vm_kern.c @@ -195,6 +195,148 @@ kmem_alloc(map, size) } /* + * Allocates a region from the kernel address map and physical pages + * within the specified address range to the kernel object. Creates a + * wired mapping from this region to these pages, and returns the + * region's starting virtual address. The allocated pages are not + * necessarily physically contiguous. If M_ZERO is specified through the + * given flags, then the pages are zeroed before they are mapped. + */ +vm_offset_t +kmem_alloc_attr(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low, + vm_paddr_t high, vm_memattr_t memattr) +{ + vm_object_t object = kernel_object; + vm_offset_t addr; + vm_ooffset_t end_offset, offset; + vm_page_t m; + int pflags, tries; + + size = round_page(size); + vm_map_lock(map); + if (vm_map_findspace(map, vm_map_min(map), size, &addr)) { + vm_map_unlock(map); + return (0); + } + offset = addr - VM_MIN_KERNEL_ADDRESS; + vm_object_reference(object); + vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL, + VM_PROT_ALL, 0); + if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT) + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; + else + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY; + if (flags & M_ZERO) + pflags |= VM_ALLOC_ZERO; + VM_OBJECT_LOCK(object); + end_offset = offset + size; + for (; offset < end_offset; offset += PAGE_SIZE) { + tries = 0; +retry: + m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, 1, + low, high, PAGE_SIZE, 0, memattr); + if (m == NULL) { + VM_OBJECT_UNLOCK(object); + if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) { + vm_map_unlock(map); + vm_pageout_grow_cache(tries, low, high); + vm_map_lock(map); + VM_OBJECT_LOCK(object); + tries++; + goto retry; + } + + /* + * Since the pages that were allocated by any previous + * iterations of this loop are not busy, they can be + * freed by vm_object_page_remove(), which is called + * by vm_map_delete(). + */ + vm_map_delete(map, addr, addr + size); + vm_map_unlock(map); + return (0); + } + if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) + pmap_zero_page(m); + m->valid = VM_PAGE_BITS_ALL; + } + VM_OBJECT_UNLOCK(object); + vm_map_unlock(map); + vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM | + VM_MAP_WIRE_NOHOLES); + return (addr); +} + +/* + * Allocates a region from the kernel address map and physically + * contiguous pages within the specified address range to the kernel + * object. Creates a wired mapping from this region to these pages, and + * returns the region's starting virtual address. If M_ZERO is specified + * through the given flags, then the pages are zeroed before they are + * mapped. + */ +vm_offset_t +kmem_alloc_contig(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low, + vm_paddr_t high, u_long alignment, vm_paddr_t boundary, + vm_memattr_t memattr) +{ + vm_object_t object = kernel_object; + vm_offset_t addr; + vm_ooffset_t offset; + vm_page_t end_m, m; + int pflags, tries; + + size = round_page(size); + vm_map_lock(map); + if (vm_map_findspace(map, vm_map_min(map), size, &addr)) { + vm_map_unlock(map); + return (0); + } + offset = addr - VM_MIN_KERNEL_ADDRESS; + vm_object_reference(object); + vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL, + VM_PROT_ALL, 0); + if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT) + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; + else + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY; + if (flags & M_ZERO) + pflags |= VM_ALLOC_ZERO; + if (flags & M_NODUMP) + pflags |= VM_ALLOC_NODUMP; + VM_OBJECT_LOCK(object); + tries = 0; +retry: + m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, + atop(size), low, high, alignment, boundary, memattr); + if (m == NULL) { + VM_OBJECT_UNLOCK(object); + if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) { + vm_map_unlock(map); + vm_pageout_grow_cache(tries, low, high); + vm_map_lock(map); + VM_OBJECT_LOCK(object); + tries++; + goto retry; + } + vm_map_delete(map, addr, addr + size); + vm_map_unlock(map); + return (0); + } + end_m = m + atop(size); + for (; m < end_m; m++) { + if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0) + pmap_zero_page(m); + m->valid = VM_PAGE_BITS_ALL; + } + VM_OBJECT_UNLOCK(object); + vm_map_unlock(map); + vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM | + VM_MAP_WIRE_NOHOLES); + return (addr); +} + +/* * kmem_free: * * Release a region of kernel virtual memory allocated diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h index 056eac5..b3b1ad4 100644 --- a/sys/vm/vm_map.h +++ b/sys/vm/vm_map.h @@ -200,13 +200,13 @@ struct vm_map { #ifdef _KERNEL static __inline vm_offset_t -vm_map_max(vm_map_t map) +vm_map_max(const struct vm_map *map) { return (map->max_offset); } static __inline vm_offset_t -vm_map_min(vm_map_t map) +vm_map_min(const struct vm_map *map) { return (map->min_offset); } diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index ec96135..ccadd8d 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -451,63 +451,6 @@ vm_page_startup(vm_offset_t vaddr) return (vaddr); } - -CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) == 0); - -void -vm_page_aflag_set(vm_page_t m, uint8_t bits) -{ - uint32_t *addr, val; - - /* - * The PGA_WRITEABLE flag can only be set if the page is managed and - * VPO_BUSY. Currently, this flag is only set by pmap_enter(). - */ - KASSERT((bits & PGA_WRITEABLE) == 0 || - (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == VPO_BUSY, - ("PGA_WRITEABLE and !VPO_BUSY")); - - /* - * We want to use atomic updates for m->aflags, which is a - * byte wide. Not all architectures provide atomic operations - * on the single-byte destination. Punt and access the whole - * 4-byte word with an atomic update. Parallel non-atomic - * updates to the fields included in the update by proximity - * are handled properly by atomics. - */ - addr = (void *)&m->aflags; - MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0); - val = bits; -#if BYTE_ORDER == BIG_ENDIAN - val <<= 24; -#endif - atomic_set_32(addr, val); -} - -void -vm_page_aflag_clear(vm_page_t m, uint8_t bits) -{ - uint32_t *addr, val; - - /* - * The PGA_REFERENCED flag can only be cleared if the object - * containing the page is locked. - */ - KASSERT((bits & PGA_REFERENCED) == 0 || VM_OBJECT_LOCKED(m->object), - ("PGA_REFERENCED and !VM_OBJECT_LOCKED")); - - /* - * See the comment in vm_page_aflag_set(). - */ - addr = (void *)&m->aflags; - MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0); - val = bits; -#if BYTE_ORDER == BIG_ENDIAN - val <<= 24; -#endif - atomic_clear_32(addr, val); -} - void vm_page_reference(vm_page_t m) { @@ -1480,7 +1423,7 @@ retry: cpindex = pindex; for (m = m_ret; m < &m_ret[npages]; m++) { m->aflags = 0; - m->flags &= flags; + m->flags = (m->flags | PG_NODUMP) & flags; if ((req & VM_ALLOC_WIRED) != 0) m->wire_count = 1; /* Unmanaged pages don't use "act_count". */ diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index da7fd89..e95f173 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -237,13 +237,14 @@ extern struct vpglocks pa_lock[]; #define vm_page_queue_free_mtx vm_page_queue_free_lock.data /* - * These are the flags defined for vm_page. - * - * aflags are updated by atomic accesses. Use the vm_page_aflag_set() - * and vm_page_aflag_clear() functions to set and clear the flags. + * The vm_page's aflags are updated using atomic operations. To set or clear + * these flags, the functions vm_page_aflag_set() and vm_page_aflag_clear() + * must be used. Neither these flags nor these functions are part of the KBI. * * PGA_REFERENCED may be cleared only if the object containing the page is - * locked. It is set by both the MI and MD VM layers. + * locked. It is set by both the MI and MD VM layers. However, kernel + * loadable modules should not directly set this flag. They should call + * vm_page_reference() instead. * * PGA_WRITEABLE is set exclusively on managed pages by pmap_enter(). When it * does so, the page must be VPO_BUSY. The MI VM layer must never access this @@ -279,8 +280,12 @@ extern struct vpglocks pa_lock[]; #ifdef _KERNEL +#include <sys/systm.h> + #include <vm/vm_param.h> +#include <machine/atomic.h> + /* * Each pageable resident page falls into one of five lists: * @@ -308,7 +313,6 @@ extern struct vpglocks pa_lock[]; * */ -struct vnode; extern int vm_page_zero_count; extern vm_page_t vm_page_array; /* First resident page in table */ @@ -348,8 +352,6 @@ extern struct vpglocks vm_page_queue_lock; #define VM_ALLOC_COUNT_SHIFT 16 #define VM_ALLOC_COUNT(count) ((count) << VM_ALLOC_COUNT_SHIFT) -void vm_page_aflag_set(vm_page_t m, uint8_t bits); -void vm_page_aflag_clear(vm_page_t m, uint8_t bits); void vm_page_busy(vm_page_t m); void vm_page_flash(vm_page_t m); void vm_page_io_start(vm_page_t m); @@ -425,6 +427,75 @@ void vm_page_object_lock_assert(vm_page_t m); #endif /* + * We want to use atomic updates for the aflags field, which is 8 bits wide. + * However, not all architectures support atomic operations on 8-bit + * destinations. In order that we can easily use a 32-bit operation, we + * require that the aflags field be 32-bit aligned. + */ +CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) == 0); + +/* + * Clear the given bits in the specified page. + */ +static inline void +vm_page_aflag_clear(vm_page_t m, uint8_t bits) +{ + uint32_t *addr, val; + + /* + * The PGA_REFERENCED flag can only be cleared if the object + * containing the page is locked. + */ + if ((bits & PGA_REFERENCED) != 0) + VM_PAGE_OBJECT_LOCK_ASSERT(m); + + /* + * Access the whole 32-bit word containing the aflags field with an + * atomic update. Parallel non-atomic updates to the other fields + * within this word are handled properly by the atomic update. + */ + addr = (void *)&m->aflags; + KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0, + ("vm_page_aflag_clear: aflags is misaligned")); + val = bits; +#if BYTE_ORDER == BIG_ENDIAN + val <<= 24; +#endif + atomic_clear_32(addr, val); +} + +/* + * Set the given bits in the specified page. + */ +static inline void +vm_page_aflag_set(vm_page_t m, uint8_t bits) +{ + uint32_t *addr, val; + + /* + * The PGA_WRITEABLE flag can only be set if the page is managed and + * VPO_BUSY. Currently, this flag is only set by pmap_enter(). + */ + KASSERT((bits & PGA_WRITEABLE) == 0 || + (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == VPO_BUSY, + ("vm_page_aflag_set: PGA_WRITEABLE and !VPO_BUSY")); + + /* + * Access the whole 32-bit word containing the aflags field with an + * atomic update. Parallel non-atomic updates to the other fields + * within this word are handled properly by the atomic update. + */ + addr = (void *)&m->aflags; + KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0, + ("vm_page_aflag_set: aflags is misaligned")); + val = bits; +#if BYTE_ORDER == BIG_ENDIAN + val <<= 24; +#endif + atomic_set_32(addr, val); +} + +/* * vm_page_dirty: * * Set all bits in the page's dirty field. diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 11d040d..3994ce1 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -209,11 +209,14 @@ int vm_page_max_wired; /* XXX max # of wired pages system-wide */ SYSCTL_INT(_vm, OID_AUTO, max_wired, CTLFLAG_RW, &vm_page_max_wired, 0, "System-wide limit to wired page count"); +static boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *); +static boolean_t vm_pageout_launder(int, int, vm_paddr_t, vm_paddr_t); #if !defined(NO_SWAPPING) static void vm_pageout_map_deactivate_pages(vm_map_t, long); static void vm_pageout_object_deactivate_pages(pmap_t, vm_object_t, long); static void vm_req_vmdaemon(int req); #endif +static boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *); static void vm_pageout_page_stats(void); /* @@ -247,7 +250,7 @@ vm_pageout_init_marker(vm_page_t marker, u_short queue) * This function depends on both the lock portion of struct vm_object * and normal struct vm_page being type stable. */ -boolean_t +static boolean_t vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next) { struct vm_page marker; @@ -286,7 +289,7 @@ vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next) * * This function depends on normal struct vm_page being type stable. */ -boolean_t +static boolean_t vm_pageout_page_lock(vm_page_t m, vm_page_t *next) { struct vm_page marker; @@ -558,6 +561,138 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, int mreq, int *prunlen, return (numpagedout); } +static boolean_t +vm_pageout_launder(int queue, int tries, vm_paddr_t low, vm_paddr_t high) +{ + struct mount *mp; + struct vnode *vp; + vm_object_t object; + vm_paddr_t pa; + vm_page_t m, m_tmp, next; + int vfslocked; + + vm_page_lock_queues(); + TAILQ_FOREACH_SAFE(m, &vm_page_queues[queue].pl, pageq, next) { + KASSERT(m->queue == queue, + ("vm_pageout_launder: page %p's queue is not %d", m, + queue)); + if ((m->flags & PG_MARKER) != 0) + continue; + pa = VM_PAGE_TO_PHYS(m); + if (pa < low || pa + PAGE_SIZE > high) + continue; + if (!vm_pageout_page_lock(m, &next) || m->hold_count != 0) { + vm_page_unlock(m); + continue; + } + object = m->object; + if (!VM_OBJECT_TRYLOCK(object) && + (!vm_pageout_fallback_object_lock(m, &next) || + m->hold_count != 0)) { + vm_page_unlock(m); + VM_OBJECT_UNLOCK(object); + continue; + } + if ((m->oflags & VPO_BUSY) != 0 || m->busy != 0) { + if (tries == 0) { + vm_page_unlock(m); + VM_OBJECT_UNLOCK(object); + continue; + } + vm_page_sleep(m, "vpctw0"); + VM_OBJECT_UNLOCK(object); + return (FALSE); + } + vm_page_test_dirty(m); + if (m->dirty == 0) + pmap_remove_all(m); + if (m->dirty != 0) { + vm_page_unlock(m); + if (tries == 0 || (object->flags & OBJ_DEAD) != 0) { + VM_OBJECT_UNLOCK(object); + continue; + } + if (object->type == OBJT_VNODE) { + vm_page_unlock_queues(); + vp = object->handle; + vm_object_reference_locked(object); + VM_OBJECT_UNLOCK(object); + (void)vn_start_write(vp, &mp, V_WAIT); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); + VM_OBJECT_LOCK(object); + vm_object_page_clean(object, 0, 0, OBJPC_SYNC); + VM_OBJECT_UNLOCK(object); + VOP_UNLOCK(vp, 0); + VFS_UNLOCK_GIANT(vfslocked); + vm_object_deallocate(object); + vn_finished_write(mp); + return (TRUE); + } else if (object->type == OBJT_SWAP || + object->type == OBJT_DEFAULT) { + vm_page_unlock_queues(); + m_tmp = m; + vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC, + 0, NULL, NULL); + VM_OBJECT_UNLOCK(object); + return (TRUE); + } + } else { + vm_page_cache(m); + vm_page_unlock(m); + } + VM_OBJECT_UNLOCK(object); + } + vm_page_unlock_queues(); + return (FALSE); +} + +/* + * Increase the number of cached pages. The specified value, "tries", + * determines which categories of pages are cached: + * + * 0: All clean, inactive pages within the specified physical address range + * are cached. Will not sleep. + * 1: The vm_lowmem handlers are called. All inactive pages within + * the specified physical address range are cached. May sleep. + * 2: The vm_lowmem handlers are called. All inactive and active pages + * within the specified physical address range are cached. May sleep. + */ +void +vm_pageout_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high) +{ + int actl, actmax, inactl, inactmax; + + if (tries > 0) { + /* + * Decrease registered cache sizes. The vm_lowmem handlers + * may acquire locks and/or sleep, so they can only be invoked + * when "tries" is greater than zero. + */ + EVENTHANDLER_INVOKE(vm_lowmem, 0); + + /* + * We do this explicitly after the caches have been drained + * above. + */ + uma_reclaim(); + } + inactl = 0; + inactmax = cnt.v_inactive_count; + actl = 0; + actmax = tries < 2 ? 0 : cnt.v_active_count; +again: + if (inactl < inactmax && vm_pageout_launder(PQ_INACTIVE, tries, low, + high)) { + inactl++; + goto again; + } + if (actl < actmax && vm_pageout_launder(PQ_ACTIVE, tries, low, high)) { + actl++; + goto again; + } +} + #if !defined(NO_SWAPPING) /* * vm_pageout_object_deactivate_pages @@ -738,7 +873,7 @@ vm_pageout_scan(int pass) vm_page_t m, next; struct vm_page marker; int page_shortage, maxscan, pcount; - int addl_page_shortage, addl_page_shortage_init; + int addl_page_shortage; vm_object_t object; int actcount; int vnodes_skipped = 0; @@ -754,13 +889,19 @@ vm_pageout_scan(int pass) */ uma_reclaim(); - addl_page_shortage_init = atomic_readandclear_int(&vm_pageout_deficit); + /* + * The addl_page_shortage is the the number of temporarily + * stuck pages in the inactive queue. In other words, the + * number of pages from cnt.v_inactive_count that should be + * discounted in setting the target for the active queue scan. + */ + addl_page_shortage = atomic_readandclear_int(&vm_pageout_deficit); /* * Calculate the number of pages we want to either free or move * to the cache. */ - page_shortage = vm_paging_target() + addl_page_shortage_init; + page_shortage = vm_paging_target() + addl_page_shortage; vm_pageout_init_marker(&marker, PQ_INACTIVE); @@ -786,8 +927,6 @@ vm_pageout_scan(int pass) maxlaunder = 10000; vm_page_lock_queues(); queues_locked = TRUE; -rescan0: - addl_page_shortage = addl_page_shortage_init; maxscan = cnt.v_inactive_count; for (m = TAILQ_FIRST(&vm_page_queues[PQ_INACTIVE].pl); @@ -795,12 +934,9 @@ rescan0: m = next) { KASSERT(queues_locked, ("unlocked queues")); mtx_assert(&vm_page_queue_mtx, MA_OWNED); + KASSERT(m->queue == PQ_INACTIVE, ("Inactive queue %p", m)); cnt.v_pdpages++; - - if (m->queue != PQ_INACTIVE) - goto rescan0; - next = TAILQ_NEXT(m, pageq); /* @@ -815,38 +951,31 @@ rescan0: ("Unmanaged page %p cannot be in inactive queue", m)); /* - * Lock the page. + * The page or object lock acquisitions fail if the + * page was removed from the queue or moved to a + * different position within the queue. In either + * case, addl_page_shortage should not be incremented. */ if (!vm_pageout_page_lock(m, &next)) { vm_page_unlock(m); - addl_page_shortage++; continue; } - - /* - * A held page may be undergoing I/O, so skip it. - */ - if (m->hold_count) { + object = m->object; + if (!VM_OBJECT_TRYLOCK(object) && + !vm_pageout_fallback_object_lock(m, &next)) { vm_page_unlock(m); - vm_page_requeue(m); - addl_page_shortage++; + VM_OBJECT_UNLOCK(object); continue; } /* - * Don't mess with busy pages, keep in the front of the - * queue, most likely are being paged out. + * Don't mess with busy pages, keep them at at the + * front of the queue, most likely they are being + * paged out. Increment addl_page_shortage for busy + * pages, because they may leave the inactive queue + * shortly after page scan is finished. */ - object = m->object; - if (!VM_OBJECT_TRYLOCK(object) && - (!vm_pageout_fallback_object_lock(m, &next) || - m->hold_count != 0)) { - VM_OBJECT_UNLOCK(object); - vm_page_unlock(m); - addl_page_shortage++; - continue; - } - if (m->busy || (m->oflags & VPO_BUSY)) { + if (m->busy != 0 || (m->oflags & VPO_BUSY) != 0) { vm_page_unlock(m); VM_OBJECT_UNLOCK(object); addl_page_shortage++; @@ -906,6 +1035,21 @@ rescan0: goto relock_queues; } + if (m->hold_count != 0) { + vm_page_unlock(m); + VM_OBJECT_UNLOCK(object); + + /* + * Held pages are essentially stuck in the + * queue. So, they ought to be discounted + * from cnt.v_inactive_count. See the + * calculation of the page_shortage for the + * loop over the active queue below. + */ + addl_page_shortage++; + goto relock_queues; + } + /* * If the upper level VM system does not believe that the page * is fully dirty, but it is mapped for write access, then we diff --git a/sys/vm/vm_pageout.h b/sys/vm/vm_pageout.h index 6897bbb..c7b4e90 100644 --- a/sys/vm/vm_pageout.h +++ b/sys/vm/vm_pageout.h @@ -101,10 +101,8 @@ extern void vm_wait(void); extern void vm_waitpfault(void); #ifdef _KERNEL -boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *); int vm_pageout_flush(vm_page_t *, int, int, int, int *, boolean_t *); +void vm_pageout_grow_cache(int, vm_paddr_t, vm_paddr_t); void vm_pageout_oom(int shortage); -boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *); -void vm_contig_grow_cache(int, vm_paddr_t, vm_paddr_t); #endif #endif /* _VM_VM_PAGEOUT_H_ */ diff --git a/sys/vm/vm_reserv.c b/sys/vm/vm_reserv.c index 10db93c..549e710 100644 --- a/sys/vm/vm_reserv.c +++ b/sys/vm/vm_reserv.c @@ -445,7 +445,7 @@ vm_reserv_alloc_contig(vm_object_t object, vm_pindex_t pindex, u_long npages, m += VM_LEVEL_0_NPAGES; first += VM_LEVEL_0_NPAGES; allocpages -= VM_LEVEL_0_NPAGES; - } while (allocpages > VM_LEVEL_0_NPAGES); + } while (allocpages > 0); return (m_ret); /* diff --git a/sys/x86/include/specialreg.h b/sys/x86/include/specialreg.h index ff6a777..7084e30 100644 --- a/sys/x86/include/specialreg.h +++ b/sys/x86/include/specialreg.h @@ -247,6 +247,11 @@ #define CPUID_TYPE_CORE 2 /* + * CPUID instruction 0xd Processor Extended State Enumeration Sub-leaf 1 + */ +#define CPUID_EXTSTATE_XSAVEOPT 0x00000001 + +/* * AMD extended function 8000_0007h edx info */ #define AMDPM_TS 0x00000001 diff --git a/sys/x86/x86/busdma_machdep.c b/sys/x86/x86/busdma_machdep.c index 76d4926..8735b15 100644 --- a/sys/x86/x86/busdma_machdep.c +++ b/sys/x86/x86/busdma_machdep.c @@ -42,6 +42,8 @@ __FBSDID("$FreeBSD$"); #include <sys/sysctl.h> #include <vm/vm.h> +#include <vm/vm_extern.h> +#include <vm/vm_kern.h> #include <vm/vm_page.h> #include <vm/vm_map.h> @@ -131,7 +133,7 @@ struct bus_dmamap { static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist; static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist; -static struct bus_dmamap nobounce_dmamap; +static struct bus_dmamap nobounce_dmamap, contig_dmamap; static void init_bounce_pages(void *dummy); static int alloc_bounce_zone(bus_dma_tag_t dmat); @@ -465,7 +467,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp) int bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map) { - if (map != NULL && map != &nobounce_dmamap) { + if (map != NULL && map != &nobounce_dmamap && map != &contig_dmamap) { if (STAILQ_FIRST(&map->bpages) != NULL) { CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, EBUSY); @@ -490,6 +492,7 @@ int bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, bus_dmamap_t *mapp) { + vm_memattr_t attr; int mflags; if (flags & BUS_DMA_NOWAIT) @@ -512,6 +515,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, } if (flags & BUS_DMA_ZERO) mflags |= M_ZERO; + if (flags & BUS_DMA_NOCACHE) + attr = VM_MEMATTR_UNCACHEABLE; + else + attr = VM_MEMATTR_DEFAULT; /* * XXX: @@ -523,7 +530,8 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, */ if ((dmat->maxsize <= PAGE_SIZE) && (dmat->alignment < dmat->maxsize) && - dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) { + dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) && + attr == VM_MEMATTR_DEFAULT) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); } else { /* @@ -532,9 +540,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, * multi-seg allocations yet though. * XXX Certain AGP hardware does. */ - *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags, - 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul, - dmat->boundary); + *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize, + mflags, 0ul, dmat->lowaddr, dmat->alignment ? + dmat->alignment : 1ul, dmat->boundary, attr); + *mapp = &contig_dmamap; } if (*vaddr == NULL) { CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", @@ -543,9 +552,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, } else if (vtophys(*vaddr) & (dmat->alignment - 1)) { printf("bus_dmamem_alloc failed to align memory properly.\n"); } - if (flags & BUS_DMA_NOCACHE) - pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize, - PAT_UNCACHEABLE); CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, 0); return (0); @@ -560,18 +566,15 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) { /* * dmamem does not need to be bounced, so the map should be - * NULL + * NULL if malloc() was used and contig_dmamap if + * contigmalloc() was used. */ - if (map != NULL) + if (!(map == NULL || map == &contig_dmamap)) panic("bus_dmamem_free: Invalid map freed\n"); - pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, PAT_WRITE_BACK); - if ((dmat->maxsize <= PAGE_SIZE) && - (dmat->alignment < dmat->maxsize) && - dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) + if (map == NULL) free(vaddr, M_DEVBUF); - else { - contigfree(vaddr, dmat->maxsize, M_DEVBUF); - } + else + kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize); CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags); } @@ -662,7 +665,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, vm_offset_t vaddr; int seg, error; - if (map == NULL) + if (map == NULL || map == &contig_dmamap) map = &nobounce_dmamap; if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) { @@ -1139,7 +1142,7 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, struct bounce_page *bpage; KASSERT(dmat->bounce_zone != NULL, ("no bounce zone in dma tag")); - KASSERT(map != NULL && map != &nobounce_dmamap, + KASSERT(map != NULL && map != &nobounce_dmamap && map != &contig_dmamap, ("add_bounce_page: bad map %p", map)); bz = dmat->bounce_zone; diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 99a681b..e994172 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -119,6 +119,7 @@ struct lapic { u_long *la_timer_count; u_long la_timer_period; u_int la_timer_mode; + uint32_t lvt_timer_cache; /* Include IDT_SYSCALL to make indexing easier. */ int la_ioint_irqs[APIC_NUM_IOINTS + 1]; } static lapics[MAX_APIC_ID + 1]; @@ -160,9 +161,11 @@ static struct eventtimer lapic_et; static void lapic_enable(void); static void lapic_resume(struct pic *pic); -static void lapic_timer_oneshot(u_int count, int enable_int); -static void lapic_timer_periodic(u_int count, int enable_int); -static void lapic_timer_stop(void); +static void lapic_timer_oneshot(struct lapic *, + u_int count, int enable_int); +static void lapic_timer_periodic(struct lapic *, + u_int count, int enable_int); +static void lapic_timer_stop(struct lapic *); static void lapic_timer_set_divisor(u_int divisor); static uint32_t lvt_mode(struct lapic *la, u_int pin, uint32_t value); static int lapic_et_start(struct eventtimer *et, @@ -370,7 +373,8 @@ lapic_setup(int boot) lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); /* Program timer LVT and setup handler. */ - lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer); + la->lvt_timer_cache = lapic->lvt_timer = + lvt_mode(la, LVT_TIMER, lapic->lvt_timer); if (boot) { snprintf(buf, sizeof(buf), "cpu%d:timer", PCPU_GET(cpuid)); intrcnt_add(buf, &la->la_timer_count); @@ -382,9 +386,9 @@ lapic_setup(int boot) lapic_id())); lapic_timer_set_divisor(lapic_timer_divisor); if (la->la_timer_mode == 1) - lapic_timer_periodic(la->la_timer_period, 1); + lapic_timer_periodic(la, la->la_timer_period, 1); else - lapic_timer_oneshot(la->la_timer_period, 1); + lapic_timer_oneshot(la, la->la_timer_period, 1); } /* Program error LVT and clear any existing errors. */ @@ -489,13 +493,14 @@ lapic_et_start(struct eventtimer *et, struct lapic *la; u_long value; + la = &lapics[PCPU_GET(apic_id)]; if (et->et_frequency == 0) { /* Start off with a divisor of 2 (power on reset default). */ lapic_timer_divisor = 2; /* Try to calibrate the local APIC timer. */ do { lapic_timer_set_divisor(lapic_timer_divisor); - lapic_timer_oneshot(APIC_TIMER_MAX_COUNT, 0); + lapic_timer_oneshot(la, APIC_TIMER_MAX_COUNT, 0); DELAY(1000000); value = APIC_TIMER_MAX_COUNT - lapic->ccr_timer; if (value != APIC_TIMER_MAX_COUNT) @@ -515,22 +520,22 @@ lapic_et_start(struct eventtimer *et, et->et_max_period.frac = ((0xfffffffeLLU << 32) / et->et_frequency) << 32; } - lapic_timer_set_divisor(lapic_timer_divisor); - la = &lapics[lapic_id()]; + if (la->la_timer_mode == 0) + lapic_timer_set_divisor(lapic_timer_divisor); if (period != NULL) { la->la_timer_mode = 1; la->la_timer_period = (et->et_frequency * (period->frac >> 32)) >> 32; if (period->sec != 0) la->la_timer_period += et->et_frequency * period->sec; - lapic_timer_periodic(la->la_timer_period, 1); + lapic_timer_periodic(la, la->la_timer_period, 1); } else { la->la_timer_mode = 2; la->la_timer_period = (et->et_frequency * (first->frac >> 32)) >> 32; if (first->sec != 0) la->la_timer_period += et->et_frequency * first->sec; - lapic_timer_oneshot(la->la_timer_period, 1); + lapic_timer_oneshot(la, la->la_timer_period, 1); } return (0); } @@ -538,10 +543,10 @@ lapic_et_start(struct eventtimer *et, static int lapic_et_stop(struct eventtimer *et) { - struct lapic *la = &lapics[lapic_id()]; + struct lapic *la = &lapics[PCPU_GET(apic_id)]; la->la_timer_mode = 0; - lapic_timer_stop(); + lapic_timer_stop(la); return (0); } @@ -835,11 +840,11 @@ lapic_timer_set_divisor(u_int divisor) } static void -lapic_timer_oneshot(u_int count, int enable_int) +lapic_timer_oneshot(struct lapic *la, u_int count, int enable_int) { u_int32_t value; - value = lapic->lvt_timer; + value = la->lvt_timer_cache; value &= ~APIC_LVTT_TM; value |= APIC_LVTT_TM_ONE_SHOT; if (enable_int) @@ -849,11 +854,11 @@ lapic_timer_oneshot(u_int count, int enable_int) } static void -lapic_timer_periodic(u_int count, int enable_int) +lapic_timer_periodic(struct lapic *la, u_int count, int enable_int) { u_int32_t value; - value = lapic->lvt_timer; + value = la->lvt_timer_cache; value &= ~APIC_LVTT_TM; value |= APIC_LVTT_TM_PERIODIC; if (enable_int) @@ -863,11 +868,11 @@ lapic_timer_periodic(u_int count, int enable_int) } static void -lapic_timer_stop(void) +lapic_timer_stop(struct lapic *la) { u_int32_t value; - value = lapic->lvt_timer; + value = la->lvt_timer_cache; value &= ~APIC_LVTT_TM; value |= APIC_LVT_M; lapic->lvt_timer = value; diff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c index 085c339..94bd520 100644 --- a/sys/x86/x86/tsc.c +++ b/sys/x86/x86/tsc.c @@ -82,7 +82,11 @@ static void tsc_freq_changed(void *arg, const struct cf_level *level, static void tsc_freq_changing(void *arg, const struct cf_level *level, int *status); static unsigned tsc_get_timecount(struct timecounter *tc); -static unsigned tsc_get_timecount_low(struct timecounter *tc); +static inline unsigned tsc_get_timecount_low(struct timecounter *tc); +static unsigned tsc_get_timecount_lfence(struct timecounter *tc); +static unsigned tsc_get_timecount_low_lfence(struct timecounter *tc); +static unsigned tsc_get_timecount_mfence(struct timecounter *tc); +static unsigned tsc_get_timecount_low_mfence(struct timecounter *tc); static void tsc_levels_changed(void *arg, int unit); static struct timecounter tsc_timecounter = { @@ -262,6 +266,10 @@ probe_tsc_freq(void) (vm_guest == VM_GUEST_NO && CPUID_TO_FAMILY(cpu_id) >= 0x10)) tsc_is_invariant = 1; + if (cpu_feature & CPUID_SSE2) { + tsc_timecounter.tc_get_timecount = + tsc_get_timecount_mfence; + } break; case CPU_VENDOR_INTEL: if ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 || @@ -271,6 +279,10 @@ probe_tsc_freq(void) (CPUID_TO_FAMILY(cpu_id) == 0xf && CPUID_TO_MODEL(cpu_id) >= 0x3)))) tsc_is_invariant = 1; + if (cpu_feature & CPUID_SSE2) { + tsc_timecounter.tc_get_timecount = + tsc_get_timecount_lfence; + } break; case CPU_VENDOR_CENTAUR: if (vm_guest == VM_GUEST_NO && @@ -278,6 +290,10 @@ probe_tsc_freq(void) CPUID_TO_MODEL(cpu_id) >= 0xf && (rdmsr(0x1203) & 0x100000000ULL) == 0) tsc_is_invariant = 1; + if (cpu_feature & CPUID_SSE2) { + tsc_timecounter.tc_get_timecount = + tsc_get_timecount_lfence; + } break; } @@ -328,14 +344,30 @@ init_TSC(void) #ifdef SMP -#define TSC_READ(x) \ -static void \ -tsc_read_##x(void *arg) \ -{ \ - uint32_t *tsc = arg; \ - u_int cpu = PCPU_GET(cpuid); \ - \ - tsc[cpu * 3 + x] = rdtsc32(); \ +/* + * RDTSC is not a serializing instruction, and does not drain + * instruction stream, so we need to drain the stream before executing + * it. It could be fixed by use of RDTSCP, except the instruction is + * not available everywhere. + * + * Use CPUID for draining in the boot-time SMP constistency test. The + * timecounters use MFENCE for AMD CPUs, and LFENCE for others (Intel + * and VIA) when SSE2 is present, and nothing on older machines which + * also do not issue RDTSC prematurely. There, testing for SSE2 and + * vendor is too cumbersome, and we learn about TSC presence from CPUID. + * + * Do not use do_cpuid(), since we do not need CPUID results, which + * have to be written into memory with do_cpuid(). + */ +#define TSC_READ(x) \ +static void \ +tsc_read_##x(void *arg) \ +{ \ + uint32_t *tsc = arg; \ + u_int cpu = PCPU_GET(cpuid); \ + \ + __asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx"); \ + tsc[cpu * 3 + x] = rdtsc32(); \ } TSC_READ(0) TSC_READ(1) @@ -485,7 +517,16 @@ init: for (shift = 0; shift < 31 && (tsc_freq >> shift) > max_freq; shift++) ; if (shift > 0) { - tsc_timecounter.tc_get_timecount = tsc_get_timecount_low; + if (cpu_feature & CPUID_SSE2) { + if (cpu_vendor_id == CPU_VENDOR_AMD) { + tsc_timecounter.tc_get_timecount = + tsc_get_timecount_low_mfence; + } else { + tsc_timecounter.tc_get_timecount = + tsc_get_timecount_low_lfence; + } + } else + tsc_timecounter.tc_get_timecount = tsc_get_timecount_low; tsc_timecounter.tc_name = "TSC-low"; if (bootverbose) printf("TSC timecounter discards lower %d bit(s)\n", @@ -597,16 +638,48 @@ tsc_get_timecount(struct timecounter *tc __unused) return (rdtsc32()); } -static u_int +static inline u_int tsc_get_timecount_low(struct timecounter *tc) { uint32_t rv; __asm __volatile("rdtsc; shrd %%cl, %%edx, %0" - : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx"); + : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx"); return (rv); } +static u_int +tsc_get_timecount_lfence(struct timecounter *tc __unused) +{ + + lfence(); + return (rdtsc32()); +} + +static u_int +tsc_get_timecount_low_lfence(struct timecounter *tc) +{ + + lfence(); + return (tsc_get_timecount_low(tc)); +} + +static u_int +tsc_get_timecount_mfence(struct timecounter *tc __unused) +{ + + mfence(); + return (rdtsc32()); +} + +static u_int +tsc_get_timecount_low_mfence(struct timecounter *tc) +{ + + mfence(); + return (tsc_get_timecount_low(tc)); +} + uint32_t cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th) { |