From owner-svn-src-stable@FreeBSD.ORG Sun Jul 17 10:13:34 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 22605106566B; Sun, 17 Jul 2011 10:13:34 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1133A8FC19; Sun, 17 Jul 2011 10:13:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6HADXrp069600; Sun, 17 Jul 2011 10:13:33 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6HADXaK069597; Sun, 17 Jul 2011 10:13:33 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201107171013.p6HADXaK069597@svn.freebsd.org> From: Konstantin Belousov Date: Sun, 17 Jul 2011 10:13:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224127 - stable/8/sys/vm X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jul 2011 10:13:34 -0000 Author: kib Date: Sun Jul 17 10:13:33 2011 New Revision: 224127 URL: http://svn.freebsd.org/changeset/base/224127 Log: MFC r223914: Extract the code to translate VM error into errno, into an exported function vm_mmap_to_errno(). Sponsored by: The FreeBSD Foundation Modified: stable/8/sys/vm/vm_extern.h stable/8/sys/vm/vm_mmap.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/vm/vm_extern.h ============================================================================== --- stable/8/sys/vm/vm_extern.h Sun Jul 17 08:19:19 2011 (r224126) +++ stable/8/sys/vm/vm_extern.h Sun Jul 17 10:13:33 2011 (r224127) @@ -66,6 +66,7 @@ int vm_fault_wire(vm_map_t, vm_offset_t, int vm_forkproc(struct thread *, struct proc *, struct thread *, struct vmspace *, int); void vm_waitproc(struct proc *); int vm_mmap(vm_map_t, vm_offset_t *, vm_size_t, vm_prot_t, vm_prot_t, int, objtype_t, void *, vm_ooffset_t); +int vm_mmap_to_errno(int rv); void vm_set_page_size(void); void vm_sync_icache(vm_map_t, vm_offset_t, vm_size_t); struct vmspace *vmspace_alloc(vm_offset_t, vm_offset_t); Modified: stable/8/sys/vm/vm_mmap.c ============================================================================== --- stable/8/sys/vm/vm_mmap.c Sun Jul 17 08:19:19 2011 (r224126) +++ stable/8/sys/vm/vm_mmap.c Sun Jul 17 10:13:33 2011 (r224127) @@ -1434,6 +1434,13 @@ vm_mmap(vm_map_t map, vm_offset_t *addr, vm_map_wire(map, *addr, *addr + size, VM_MAP_WIRE_USER|VM_MAP_WIRE_NOHOLES); + return (vm_mmap_to_errno(rv)); +} + +int +vm_mmap_to_errno(int rv) +{ + switch (rv) { case KERN_SUCCESS: return (0); From owner-svn-src-stable@FreeBSD.ORG Sun Jul 17 20:02:29 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A7504106566B; Sun, 17 Jul 2011 20:02:29 +0000 (UTC) (envelope-from hrs@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7C0408FC08; Sun, 17 Jul 2011 20:02:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6HK2TgK088064; Sun, 17 Jul 2011 20:02:29 GMT (envelope-from hrs@svn.freebsd.org) Received: (from hrs@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6HK2Tak088063; Sun, 17 Jul 2011 20:02:29 GMT (envelope-from hrs@svn.freebsd.org) Message-Id: <201107172002.p6HK2Tak088063@svn.freebsd.org> From: Hiroki Sato Date: Sun, 17 Jul 2011 20:02:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224146 - in stable/8: share/man/man4 sys X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jul 2011 20:02:29 -0000 Author: hrs Date: Sun Jul 17 20:02:29 2011 New Revision: 224146 URL: http://svn.freebsd.org/changeset/base/224146 Log: Fix svn:mergeinfo for merge of r216057. Modified: Directory Properties: stable/8/share/man/man4/ (props changed) stable/8/sys/ (props changed) From owner-svn-src-stable@FreeBSD.ORG Sun Jul 17 20:49:39 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4B8BE106566B; Sun, 17 Jul 2011 20:49:39 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 383268FC12; Sun, 17 Jul 2011 20:49:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6HKndCt089606; Sun, 17 Jul 2011 20:49:39 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6HKndJj089602; Sun, 17 Jul 2011 20:49:39 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201107172049.p6HKndJj089602@svn.freebsd.org> From: Rick Macklem Date: Sun, 17 Jul 2011 20:49:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224149 - in stable/8/sys/fs: nfs nfsclient X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jul 2011 20:49:39 -0000 Author: rmacklem Date: Sun Jul 17 20:49:38 2011 New Revision: 224149 URL: http://svn.freebsd.org/changeset/base/224149 Log: MFC: r223747 Modify the new NFSv4 client so that it appends a file handle to the lock_owner4 string that goes on the wire. Also, add code to do a ReleaseLockOwner Op on the lock_owner4 string before a Close. Apparently not all NFSv4 servers handle multiple instances of the same lock_owner4 string, at least not in a compatible way. This patch avoids having multiple instances, except for one unusual case, which will be fixed by a future commit. Found at the recent NFSv4 interoperability Bakeathon. Modified: stable/8/sys/fs/nfs/nfs_var.h stable/8/sys/fs/nfsclient/nfs_clrpcops.c stable/8/sys/fs/nfsclient/nfs_clstate.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/fs/nfs/nfs_var.h ============================================================================== --- stable/8/sys/fs/nfs/nfs_var.h Sun Jul 17 20:47:34 2011 (r224148) +++ stable/8/sys/fs/nfs/nfs_var.h Sun Jul 17 20:49:38 2011 (r224149) @@ -438,6 +438,7 @@ int nfscl_getcl(vnode_t, struct ucred *, struct nfsclclient *nfscl_findcl(struct nfsmount *); void nfscl_clientrelease(struct nfsclclient *); void nfscl_freelock(struct nfscllock *, int); +void nfscl_freelockowner(struct nfscllockowner *, int); int nfscl_getbytelock(vnode_t, u_int64_t, u_int64_t, short, struct ucred *, NFSPROC_T *, struct nfsclclient *, int, void *, int, u_int8_t *, u_int8_t *, struct nfscllockowner **, int *, int *); Modified: stable/8/sys/fs/nfsclient/nfs_clrpcops.c ============================================================================== --- stable/8/sys/fs/nfsclient/nfs_clrpcops.c Sun Jul 17 20:47:34 2011 (r224148) +++ stable/8/sys/fs/nfsclient/nfs_clrpcops.c Sun Jul 17 20:49:38 2011 (r224149) @@ -585,7 +585,7 @@ APPLESTATIC void nfsrpc_doclose(struct nfsmount *nmp, struct nfsclopen *op, NFSPROC_T *p) { struct nfsrv_descript nfsd, *nd = &nfsd; - struct nfscllockowner *lp; + struct nfscllockowner *lp, *nlp; struct nfscllock *lop, *nlop; struct ucred *tcred; u_int64_t off = 0, len = 0; @@ -642,6 +642,14 @@ nfsrpc_doclose(struct nfsmount *nmp, str } nfscl_freelock(lop, 0); } + /* + * Do a ReleaseLockOwner. + * The lock owner name nfsl_owner may be used by other opens for + * other files but the lock_owner4 name that nfsrpc_rellockown() + * puts on the wire has the file handle for this file appended + * to it, so it can be done now. + */ + (void)nfsrpc_rellockown(nmp, lp, tcred, p); } /* @@ -659,20 +667,8 @@ nfsrpc_doclose(struct nfsmount *nmp, str NFSLOCKCLSTATE(); nfscl_lockunlock(&op->nfso_own->nfsow_rwlock); - /* - * Move the lockowner to nfsc_defunctlockowner, - * so the Renew thread will do the ReleaseLockOwner - * Op on it later. There might still be other - * opens using the same lockowner name. - */ - lp = LIST_FIRST(&op->nfso_lock); - if (lp != NULL) { - while (LIST_NEXT(lp, nfsl_list) != NULL) - lp = LIST_NEXT(lp, nfsl_list); - LIST_PREPEND(&nmp->nm_clp->nfsc_defunctlockowner, - &op->nfso_lock, lp, nfsl_list); - LIST_INIT(&op->nfso_lock); - } + LIST_FOREACH_SAFE(lp, &op->nfso_lock, nfsl_list, nlp) + nfscl_freelockowner(lp, 0); nfscl_freeopen(op, 0); NFSUNLOCKCLSTATE(); NFSFREECRED(tcred); @@ -3629,7 +3625,8 @@ nfsrpc_lockt(struct nfsrv_descript *nd, { u_int32_t *tl; int error, type, size; - u_int8_t own[NFSV4CL_LOCKNAMELEN]; + uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX]; + struct nfsnode *np; NFSCL_REQSTART(nd, NFSPROC_LOCKT, vp); NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED); @@ -3644,7 +3641,10 @@ nfsrpc_lockt(struct nfsrv_descript *nd, *tl++ = clp->nfsc_clientid.lval[0]; *tl = clp->nfsc_clientid.lval[1]; nfscl_filllockowner(id, own, flags); - (void) nfsm_strtom(nd, own, NFSV4CL_LOCKNAMELEN); + np = VTONFS(vp); + NFSBCOPY(np->n_fhp->nfh_fh, &own[NFSV4CL_LOCKNAMELEN], + np->n_fhp->nfh_len); + (void)nfsm_strtom(nd, own, NFSV4CL_LOCKNAMELEN + np->n_fhp->nfh_len); error = nfscl_request(nd, vp, p, cred, NULL); if (error) return (error); @@ -3744,6 +3744,7 @@ nfsrpc_lock(struct nfsrv_descript *nd, s { u_int32_t *tl; int error, size; + uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX]; nfscl_reqstart(nd, NFSPROC_LOCK, nmp, nfhp, fhlen, NULL); NFSM_BUILD(tl, u_int32_t *, 7 * NFSX_UNSIGNED); @@ -3768,7 +3769,9 @@ nfsrpc_lock(struct nfsrv_descript *nd, s *tl++ = txdr_unsigned(lp->nfsl_seqid); *tl++ = lp->nfsl_open->nfso_own->nfsow_clp->nfsc_clientid.lval[0]; *tl = lp->nfsl_open->nfso_own->nfsow_clp->nfsc_clientid.lval[1]; - (void) nfsm_strtom(nd, lp->nfsl_owner, NFSV4CL_LOCKNAMELEN); + NFSBCOPY(lp->nfsl_owner, own, NFSV4CL_LOCKNAMELEN); + NFSBCOPY(nfhp, &own[NFSV4CL_LOCKNAMELEN], fhlen); + (void)nfsm_strtom(nd, own, NFSV4CL_LOCKNAMELEN + fhlen); } else { *tl = newnfs_false; NFSM_BUILD(tl, u_int32_t *, NFSX_STATEID + NFSX_UNSIGNED); @@ -4029,12 +4032,17 @@ nfsrpc_rellockown(struct nfsmount *nmp, struct nfsrv_descript nfsd, *nd = &nfsd; u_int32_t *tl; int error; + uint8_t own[NFSV4CL_LOCKNAMELEN + NFSX_V4FHMAX]; nfscl_reqstart(nd, NFSPROC_RELEASELCKOWN, nmp, NULL, 0, NULL); NFSM_BUILD(tl, u_int32_t *, 2 * NFSX_UNSIGNED); *tl++ = nmp->nm_clp->nfsc_clientid.lval[0]; *tl = nmp->nm_clp->nfsc_clientid.lval[1]; - (void) nfsm_strtom(nd, lp->nfsl_owner, NFSV4CL_LOCKNAMELEN); + NFSBCOPY(lp->nfsl_owner, own, NFSV4CL_LOCKNAMELEN); + NFSBCOPY(lp->nfsl_open->nfso_fh, &own[NFSV4CL_LOCKNAMELEN], + lp->nfsl_open->nfso_fhlen); + (void)nfsm_strtom(nd, own, NFSV4CL_LOCKNAMELEN + + lp->nfsl_open->nfso_fhlen); nd->nd_flag |= ND_USEGSSNAME; error = newnfs_request(nd, nmp, NULL, &nmp->nm_sockreq, NULL, p, cred, NFS_PROG, NFS_VER4, NULL, 1, NULL); Modified: stable/8/sys/fs/nfsclient/nfs_clstate.c ============================================================================== --- stable/8/sys/fs/nfsclient/nfs_clstate.c Sun Jul 17 20:47:34 2011 (r224148) +++ stable/8/sys/fs/nfsclient/nfs_clstate.c Sun Jul 17 20:49:38 2011 (r224149) @@ -114,7 +114,6 @@ static struct nfscldeleg *nfscl_finddele int); static int nfscl_checkconflict(struct nfscllockownerhead *, struct nfscllock *, u_int8_t *, struct nfscllock **); -static void nfscl_freelockowner(struct nfscllockowner *, int); static void nfscl_freealllocks(struct nfscllockownerhead *, int); static int nfscl_localconflict(struct nfsclclient *, u_int8_t *, int, struct nfscllock *, u_int8_t *, struct nfscldeleg *, struct nfscllock **); @@ -1450,7 +1449,7 @@ nfscl_freeopenowner(struct nfsclowner *o /* * Free up a byte range lock owner structure. */ -static void +APPLESTATIC void nfscl_freelockowner(struct nfscllockowner *lp, int local) { struct nfscllock *lop, *nlop; From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 04:54:13 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6B27E106564A; Mon, 18 Jul 2011 04:54:13 +0000 (UTC) (envelope-from avatar@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4004A8FC14; Mon, 18 Jul 2011 04:54:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6I4sDRt006440; Mon, 18 Jul 2011 04:54:13 GMT (envelope-from avatar@svn.freebsd.org) Received: (from avatar@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6I4sDam006438; Mon, 18 Jul 2011 04:54:13 GMT (envelope-from avatar@svn.freebsd.org) Message-Id: <201107180454.p6I4sDam006438@svn.freebsd.org> From: Tai-hwa Liang Date: Mon, 18 Jul 2011 04:54:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224173 - stable/8/usr.bin/find X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 04:54:13 -0000 Author: avatar Date: Mon Jul 18 04:54:12 2011 New Revision: 224173 URL: http://svn.freebsd.org/changeset/base/224173 Log: MFC r223035: Using statfs.f_fstypename rather than statfs.f_type whilst performing fstype comparsion as nullfs will copy f_type from underlayer FS. PR: bin/156258 Submitted by: Marcin Wisnicki Modified: stable/8/usr.bin/find/function.c Directory Properties: stable/8/usr.bin/find/ (props changed) Modified: stable/8/usr.bin/find/function.c ============================================================================== --- stable/8/usr.bin/find/function.c Mon Jul 18 03:40:49 2011 (r224172) +++ stable/8/usr.bin/find/function.c Mon Jul 18 04:54:12 2011 (r224173) @@ -851,7 +851,8 @@ f_fstype(PLAN *plan, FTSENT *entry) static dev_t curdev; /* need a guaranteed illegal dev value */ static int first = 1; struct statfs sb; - static int val_type, val_flags; + static int val_flags; + static char fstype[sizeof(sb.f_fstypename)]; char *p, save[2] = {0,0}; if ((plan->flags & F_MTMASK) == F_MTUNKNOWN) @@ -893,13 +894,13 @@ f_fstype(PLAN *plan, FTSENT *entry) * always copy both of them. */ val_flags = sb.f_flags; - val_type = sb.f_type; + strlcpy(fstype, sb.f_fstypename, sizeof(fstype)); } switch (plan->flags & F_MTMASK) { case F_MTFLAG: return val_flags & plan->mt_data; case F_MTTYPE: - return val_type == plan->mt_data; + return (strncmp(fstype, plan->c_data, sizeof(fstype)) == 0); default: abort(); } @@ -910,22 +911,11 @@ c_fstype(OPTION *option, char ***argvp) { char *fsname; PLAN *new; - struct xvfsconf vfc; fsname = nextarg(option, argvp); ftsoptions &= ~FTS_NOSTAT; new = palloc(option); - - /* - * Check first for a filesystem name. - */ - if (getvfsbyname(fsname, &vfc) == 0) { - new->flags |= F_MTTYPE; - new->mt_data = vfc.vfc_typenum; - return new; - } - switch (*fsname) { case 'l': if (!strcmp(fsname, "local")) { @@ -943,12 +933,8 @@ c_fstype(OPTION *option, char ***argvp) break; } - /* - * We need to make filesystem checks for filesystems - * that exists but aren't in the kernel work. - */ - fprintf(stderr, "Warning: Unknown filesystem type %s\n", fsname); - new->flags |= F_MTUNKNOWN; + new->flags |= F_MTTYPE; + new->c_data = fsname; return new; } From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 08:38:08 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DEE6A106564A; Mon, 18 Jul 2011 08:38:08 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CBF468FC13; Mon, 18 Jul 2011 08:38:08 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6I8c8hP013323; Mon, 18 Jul 2011 08:38:08 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6I8c8jC013319; Mon, 18 Jul 2011 08:38:08 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107180838.p6I8c8jC013319@svn.freebsd.org> From: Hans Petter Selasky Date: Mon, 18 Jul 2011 08:38:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224178 - in stable/8/sys/dev/usb: . input X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 08:38:09 -0000 Author: hselasky Date: Mon Jul 18 08:38:08 2011 New Revision: 224178 URL: http://svn.freebsd.org/changeset/base/224178 Log: MFC r223755: - Make the USB keyboard driver more HID compliant. - Try to auto-detect keyboards which should use the BOOT protocol. Modified: stable/8/sys/dev/usb/input/ukbd.c stable/8/sys/dev/usb/usb_hid.c stable/8/sys/dev/usb/usbhid.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/input/ukbd.c ============================================================================== --- stable/8/sys/dev/usb/input/ukbd.c Mon Jul 18 08:29:49 2011 (r224177) +++ stable/8/sys/dev/usb/input/ukbd.c Mon Jul 18 08:38:08 2011 (r224178) @@ -108,9 +108,10 @@ TUNABLE_INT("hw.usb.ukbd.no_leds", &ukbd #define UKBD_IN_BUF_SIZE (2*(UKBD_NMOD + (2*UKBD_NKEYCODE))) /* bytes */ #define UKBD_IN_BUF_FULL (UKBD_IN_BUF_SIZE / 2) /* bytes */ #define UKBD_NFKEY (sizeof(fkey_tab)/sizeof(fkey_tab[0])) /* units */ +#define UKBD_BUFFER_SIZE 64 /* bytes */ struct ukbd_data { - uint8_t modifiers; + uint16_t modifiers; #define MOD_CONTROL_L 0x01 #define MOD_CONTROL_R 0x10 #define MOD_SHIFT_L 0x02 @@ -119,9 +120,10 @@ struct ukbd_data { #define MOD_ALT_R 0x40 #define MOD_WIN_L 0x08 #define MOD_WIN_R 0x80 - uint8_t reserved; +/* internal */ +#define MOD_EJECT 0x0100 +#define MOD_FN 0x0200 uint8_t keycode[UKBD_NKEYCODE]; - uint8_t exten[8]; }; enum { @@ -137,6 +139,18 @@ struct ukbd_softc { fkeytab_t sc_fkeymap[UKBD_NFKEY]; struct hid_location sc_loc_apple_eject; struct hid_location sc_loc_apple_fn; + struct hid_location sc_loc_ctrl_l; + struct hid_location sc_loc_ctrl_r; + struct hid_location sc_loc_shift_l; + struct hid_location sc_loc_shift_r; + struct hid_location sc_loc_alt_l; + struct hid_location sc_loc_alt_r; + struct hid_location sc_loc_win_l; + struct hid_location sc_loc_win_r; + struct hid_location sc_loc_events; + struct hid_location sc_loc_numlock; + struct hid_location sc_loc_capslock; + struct hid_location sc_loc_scrolllock; struct usb_callout sc_callout; struct ukbd_data sc_ndata; struct ukbd_data sc_odata; @@ -155,31 +169,64 @@ struct ukbd_softc { uint32_t sc_buffered_char[2]; #endif uint32_t sc_flags; /* flags */ -#define UKBD_FLAG_COMPOSE 0x0001 -#define UKBD_FLAG_POLLING 0x0002 -#define UKBD_FLAG_SET_LEDS 0x0004 -#define UKBD_FLAG_ATTACHED 0x0010 -#define UKBD_FLAG_GONE 0x0020 -#define UKBD_FLAG_APPLE_EJECT 0x0040 -#define UKBD_FLAG_APPLE_FN 0x0080 -#define UKBD_FLAG_APPLE_SWAP 0x0100 -#define UKBD_FLAG_TIMER_RUNNING 0x0200 +#define UKBD_FLAG_COMPOSE 0x00000001 +#define UKBD_FLAG_POLLING 0x00000002 +#define UKBD_FLAG_SET_LEDS 0x00000004 +#define UKBD_FLAG_ATTACHED 0x00000010 +#define UKBD_FLAG_GONE 0x00000020 + +#define UKBD_FLAG_HID_MASK 0x003fffc0 +#define UKBD_FLAG_APPLE_EJECT 0x00000040 +#define UKBD_FLAG_APPLE_FN 0x00000080 +#define UKBD_FLAG_APPLE_SWAP 0x00000100 +#define UKBD_FLAG_TIMER_RUNNING 0x00000200 +#define UKBD_FLAG_CTRL_L 0x00000400 +#define UKBD_FLAG_CTRL_R 0x00000800 +#define UKBD_FLAG_SHIFT_L 0x00001000 +#define UKBD_FLAG_SHIFT_R 0x00002000 +#define UKBD_FLAG_ALT_L 0x00004000 +#define UKBD_FLAG_ALT_R 0x00008000 +#define UKBD_FLAG_WIN_L 0x00010000 +#define UKBD_FLAG_WIN_R 0x00020000 +#define UKBD_FLAG_EVENTS 0x00040000 +#define UKBD_FLAG_NUMLOCK 0x00080000 +#define UKBD_FLAG_CAPSLOCK 0x00100000 +#define UKBD_FLAG_SCROLLLOCK 0x00200000 int sc_mode; /* input mode (K_XLATE,K_RAW,K_CODE) */ int sc_state; /* shift/lock key state */ int sc_accents; /* accent key index (> 0) */ int sc_poll_tick_last; + int sc_led_size; + int sc_kbd_size; uint16_t sc_inputs; uint16_t sc_inputhead; uint16_t sc_inputtail; + uint16_t sc_modifiers; uint8_t sc_leds; /* store for async led requests */ uint8_t sc_iface_index; uint8_t sc_iface_no; + uint8_t sc_id_apple_eject; + uint8_t sc_id_apple_fn; + uint8_t sc_id_ctrl_l; + uint8_t sc_id_ctrl_r; + uint8_t sc_id_shift_l; + uint8_t sc_id_shift_r; + uint8_t sc_id_alt_l; + uint8_t sc_id_alt_r; + uint8_t sc_id_win_l; + uint8_t sc_id_win_r; + uint8_t sc_id_event; + uint8_t sc_id_numlock; + uint8_t sc_id_capslock; + uint8_t sc_id_scrolllock; + uint8_t sc_id_events; uint8_t sc_kbd_id; - uint8_t sc_led_id; + uint8_t sc_poll_detected; + uint8_t sc_buffer[UKBD_BUFFER_SIZE]; }; #define KEY_ERROR 0x01 @@ -261,6 +308,22 @@ static const uint8_t ukbd_trtab[256] = { NN, NN, NN, NN, NN, NN, NN, NN, /* F8 - FF */ }; +static const uint8_t ukbd_boot_desc[] = { + 0x05, 0x01, 0x09, 0x06, 0xa1, + 0x01, 0x05, 0x07, 0x19, 0xe0, + 0x29, 0xe7, 0x15, 0x00, 0x25, + 0x01, 0x75, 0x01, 0x95, 0x08, + 0x81, 0x02, 0x95, 0x01, 0x75, + 0x08, 0x81, 0x01, 0x95, 0x03, + 0x75, 0x01, 0x05, 0x08, 0x19, + 0x01, 0x29, 0x03, 0x91, 0x02, + 0x95, 0x05, 0x75, 0x01, 0x91, + 0x01, 0x95, 0x06, 0x75, 0x08, + 0x15, 0x00, 0x26, 0xff, 0x00, + 0x05, 0x07, 0x19, 0x00, 0x2a, + 0xff, 0x00, 0x81, 0x00, 0xc0 +}; + /* prototypes */ static void ukbd_timeout(void *); static void ukbd_set_leds(struct ukbd_softc *, uint8_t); @@ -561,8 +624,6 @@ ukbd_intr_callback(struct usb_xfer *xfer uint8_t i; uint8_t offset; uint8_t id; - uint8_t apple_fn; - uint8_t apple_eject; int len; usbd_xfer_status(xfer, &len, NULL, NULL, NULL); @@ -580,73 +641,145 @@ ukbd_intr_callback(struct usb_xfer *xfer if (sc->sc_kbd_id != 0) { /* check and remove HID ID byte */ usbd_copy_out(pc, 0, &id, 1); - if (id != sc->sc_kbd_id) { - DPRINTF("wrong HID ID\n"); - goto tr_setup; - } offset = 1; len--; + if (len == 0) { + DPRINTF("zero length data\n"); + goto tr_setup; + } } else { offset = 0; + id = 0; } - if (len > sizeof(sc->sc_ndata)) { - len = sizeof(sc->sc_ndata); - } + if (len > UKBD_BUFFER_SIZE) + len = UKBD_BUFFER_SIZE; - if (len) { - memset(&sc->sc_ndata, 0, sizeof(sc->sc_ndata)); - usbd_copy_out(pc, offset, &sc->sc_ndata, len); - - if ((sc->sc_flags & UKBD_FLAG_APPLE_EJECT) && - hid_get_data((uint8_t *)&sc->sc_ndata, - len, &sc->sc_loc_apple_eject)) - apple_eject = 1; - else - apple_eject = 0; + /* get data */ + usbd_copy_out(pc, offset, sc->sc_buffer, len); + + /* clear temporary storage */ + memset(&sc->sc_ndata, 0, sizeof(sc->sc_ndata)); - if ((sc->sc_flags & UKBD_FLAG_APPLE_FN) && - hid_get_data((uint8_t *)&sc->sc_ndata, - len, &sc->sc_loc_apple_fn)) - apple_fn = 1; + /* scan through HID data */ + if ((sc->sc_flags & UKBD_FLAG_APPLE_EJECT) && + (id == sc->sc_id_apple_eject)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_apple_eject)) + sc->sc_modifiers |= MOD_EJECT; else - apple_fn = 0; -#ifdef USB_DEBUG - DPRINTF("apple_eject=%u apple_fn=%u\n", - apple_eject, apple_fn); + sc->sc_modifiers &= ~MOD_EJECT; + } + if ((sc->sc_flags & UKBD_FLAG_APPLE_FN) && + (id == sc->sc_id_apple_fn)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_apple_fn)) + sc->sc_modifiers |= MOD_FN; + else + sc->sc_modifiers &= ~MOD_FN; + } + if ((sc->sc_flags & UKBD_FLAG_CTRL_L) && + (id == sc->sc_id_ctrl_l)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_ctrl_l)) + sc-> sc_modifiers |= MOD_CONTROL_L; + else + sc-> sc_modifiers &= ~MOD_CONTROL_L; + } + if ((sc->sc_flags & UKBD_FLAG_CTRL_R) && + (id == sc->sc_id_ctrl_r)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_ctrl_r)) + sc->sc_modifiers |= MOD_CONTROL_R; + else + sc->sc_modifiers &= ~MOD_CONTROL_R; + } + if ((sc->sc_flags & UKBD_FLAG_SHIFT_L) && + (id == sc->sc_id_shift_l)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_shift_l)) + sc->sc_modifiers |= MOD_SHIFT_L; + else + sc->sc_modifiers &= ~MOD_SHIFT_L; + } + if ((sc->sc_flags & UKBD_FLAG_SHIFT_R) && + (id == sc->sc_id_shift_r)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_shift_r)) + sc->sc_modifiers |= MOD_SHIFT_R; + else + sc->sc_modifiers &= ~MOD_SHIFT_R; + } + if ((sc->sc_flags & UKBD_FLAG_ALT_L) && + (id == sc->sc_id_alt_l)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_alt_l)) + sc->sc_modifiers |= MOD_ALT_L; + else + sc->sc_modifiers &= ~MOD_ALT_L; + } + if ((sc->sc_flags & UKBD_FLAG_ALT_R) && + (id == sc->sc_id_alt_r)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_alt_r)) + sc->sc_modifiers |= MOD_ALT_R; + else + sc->sc_modifiers &= ~MOD_ALT_R; + } + if ((sc->sc_flags & UKBD_FLAG_WIN_L) && + (id == sc->sc_id_win_l)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_win_l)) + sc->sc_modifiers |= MOD_WIN_L; + else + sc->sc_modifiers &= ~MOD_WIN_L; + } + if ((sc->sc_flags & UKBD_FLAG_WIN_R) && + (id == sc->sc_id_win_r)) { + if (hid_get_data(sc->sc_buffer, len, &sc->sc_loc_win_r)) + sc->sc_modifiers |= MOD_WIN_R; + else + sc->sc_modifiers &= ~MOD_WIN_R; + } - if (sc->sc_ndata.modifiers) { - DPRINTF("mod: 0x%04x\n", sc->sc_ndata.modifiers); - } - for (i = 0; i < UKBD_NKEYCODE; i++) { - if (sc->sc_ndata.keycode[i]) { - DPRINTF("[%d] = %d\n", i, sc->sc_ndata.keycode[i]); - } + sc->sc_ndata.modifiers = sc->sc_modifiers; + + if ((sc->sc_flags & UKBD_FLAG_EVENTS) && + (id == sc->sc_id_events)) { + i = sc->sc_loc_events.count; + if (i > UKBD_NKEYCODE) + i = UKBD_NKEYCODE; + if (i > len) + i = len; + while (i--) { + sc->sc_ndata.keycode[i] = + hid_get_data(sc->sc_buffer + i, len - i, + &sc->sc_loc_events); } -#endif /* USB_DEBUG */ + } - if (apple_fn) { - for (i = 0; i < UKBD_NKEYCODE; i++) { - sc->sc_ndata.keycode[i] = - ukbd_apple_fn(sc->sc_ndata.keycode[i]); - } +#ifdef USB_DEBUG + DPRINTF("modifiers = 0x%04x\n", (int)sc->sc_modifiers); + for (i = 0; i < UKBD_NKEYCODE; i++) { + if (sc->sc_ndata.keycode[i]) { + DPRINTF("[%d] = 0x%02x\n", + (int)i, (int)sc->sc_ndata.keycode[i]); } + } +#endif + if (sc->sc_modifiers & MOD_FN) { + for (i = 0; i < UKBD_NKEYCODE; i++) { + sc->sc_ndata.keycode[i] = + ukbd_apple_fn(sc->sc_ndata.keycode[i]); + } + } - if (sc->sc_flags & UKBD_FLAG_APPLE_SWAP) { - for (i = 0; i < UKBD_NKEYCODE; i++) { - sc->sc_ndata.keycode[i] = - ukbd_apple_swap(sc->sc_ndata.keycode[i]); - } + if (sc->sc_flags & UKBD_FLAG_APPLE_SWAP) { + for (i = 0; i < UKBD_NKEYCODE; i++) { + sc->sc_ndata.keycode[i] = + ukbd_apple_swap(sc->sc_ndata.keycode[i]); } + } - ukbd_interrupt(sc); + ukbd_interrupt(sc); - if (!(sc->sc_flags & UKBD_FLAG_TIMER_RUNNING)) { - if (ukbd_any_key_pressed(sc)) { - ukbd_start_timer(sc); - } + if (!(sc->sc_flags & UKBD_FLAG_TIMER_RUNNING)) { + if (ukbd_any_key_pressed(sc)) { + ukbd_start_timer(sc); } } + case USB_ST_SETUP: tr_setup: if (sc->sc_inputs < UKBD_IN_BUF_FULL) { @@ -672,10 +805,12 @@ tr_setup: static void ukbd_set_leds_callback(struct usb_xfer *xfer, usb_error_t error) { + struct ukbd_softc *sc = usbd_xfer_softc(xfer); struct usb_device_request req; struct usb_page_cache *pc; - uint8_t buf[2]; - struct ukbd_softc *sc = usbd_xfer_softc(xfer); + uint8_t id; + uint8_t any; + int len; #ifdef USB_DEBUG if (ukbd_no_leds) @@ -685,37 +820,83 @@ ukbd_set_leds_callback(struct usb_xfer * switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: case USB_ST_SETUP: - if (sc->sc_flags & UKBD_FLAG_SET_LEDS) { - sc->sc_flags &= ~UKBD_FLAG_SET_LEDS; + if (!(sc->sc_flags & UKBD_FLAG_SET_LEDS)) + break; + sc->sc_flags &= ~UKBD_FLAG_SET_LEDS; - req.bmRequestType = UT_WRITE_CLASS_INTERFACE; - req.bRequest = UR_SET_REPORT; - USETW2(req.wValue, UHID_OUTPUT_REPORT, 0); - req.wIndex[0] = sc->sc_iface_no; - req.wIndex[1] = 0; - req.wLength[1] = 0; - - /* check if we need to prefix an ID byte */ - if (sc->sc_led_id != 0) { - req.wLength[0] = 2; - buf[0] = sc->sc_led_id; - buf[1] = sc->sc_leds; - } else { - req.wLength[0] = 1; - buf[0] = sc->sc_leds; - buf[1] = 0; + req.bmRequestType = UT_WRITE_CLASS_INTERFACE; + req.bRequest = UR_SET_REPORT; + USETW2(req.wValue, UHID_OUTPUT_REPORT, 0); + req.wIndex[0] = sc->sc_iface_no; + req.wIndex[1] = 0; + req.wLength[1] = 0; + + memset(sc->sc_buffer, 0, UKBD_BUFFER_SIZE); + + id = 0; + any = 0; + + /* Assumption: All led bits must be in the same ID. */ + + if (sc->sc_flags & UKBD_FLAG_NUMLOCK) { + if (sc->sc_leds & NLKED) { + hid_put_data_unsigned(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1, + &sc->sc_loc_numlock, 1); } + id = sc->sc_id_numlock; + any = 1; + } - pc = usbd_xfer_get_frame(xfer, 0); - usbd_copy_in(pc, 0, &req, sizeof(req)); - pc = usbd_xfer_get_frame(xfer, 1); - usbd_copy_in(pc, 0, buf, sizeof(buf)); - - usbd_xfer_set_frame_len(xfer, 0, sizeof(req)); - usbd_xfer_set_frame_len(xfer, 1, req.wLength[0]); - usbd_xfer_set_frames(xfer, 2); - usbd_transfer_submit(xfer); + if (sc->sc_flags & UKBD_FLAG_SCROLLLOCK) { + if (sc->sc_leds & SLKED) { + hid_put_data_unsigned(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1, + &sc->sc_loc_scrolllock, 1); + } + id = sc->sc_id_scrolllock; + any = 1; + } + + if (sc->sc_flags & UKBD_FLAG_CAPSLOCK) { + if (sc->sc_leds & CLKED) { + hid_put_data_unsigned(sc->sc_buffer + 1, UKBD_BUFFER_SIZE - 1, + &sc->sc_loc_capslock, 1); + } + id = sc->sc_id_capslock; + any = 1; + } + + /* if no leds, nothing to do */ + if (!any) + break; + + /* range check output report length */ + len = sc->sc_led_size; + if (len > (UKBD_BUFFER_SIZE - 1)) + len = (UKBD_BUFFER_SIZE - 1); + + /* check if we need to prefix an ID byte */ + sc->sc_buffer[0] = id; + + pc = usbd_xfer_get_frame(xfer, 1); + if (id != 0) { + len++; + usbd_copy_in(pc, 0, sc->sc_buffer, len); + } else { + usbd_copy_in(pc, 0, sc->sc_buffer + 1, len); } + req.wLength[0] = len; + usbd_xfer_set_frame_len(xfer, 1, len); + + DPRINTF("len=%d, id=%d\n", len, id); + + /* setup control request last */ + pc = usbd_xfer_get_frame(xfer, 0); + usbd_copy_in(pc, 0, &req, sizeof(req)); + usbd_xfer_set_frame_len(xfer, 0, sizeof(req)); + + /* start data transfer */ + usbd_xfer_set_frames(xfer, 2); + usbd_transfer_submit(xfer); break; default: /* Error */ @@ -739,7 +920,7 @@ static const struct usb_config ukbd_conf .type = UE_CONTROL, .endpoint = 0x00, /* Control pipe */ .direction = UE_DIR_ANY, - .bufsize = sizeof(struct usb_device_request) + 8, + .bufsize = sizeof(struct usb_device_request) + UKBD_BUFFER_SIZE, .callback = &ukbd_set_leds_callback, .timeout = 1000, /* 1 second */ }, @@ -808,6 +989,140 @@ ukbd_probe(device_t dev) return (error); } +static void +ukbd_parse_hid(struct ukbd_softc *sc, const uint8_t *ptr, uint32_t len) +{ + uint32_t flags; + + /* reset detected bits */ + sc->sc_flags &= ~UKBD_FLAG_HID_MASK; + + /* check if there is an ID byte */ + sc->sc_kbd_size = hid_report_size(ptr, len, + hid_input, &sc->sc_kbd_id); + + /* investigate if this is an Apple Keyboard */ + if (hid_locate(ptr, len, + HID_USAGE2(HUP_CONSUMER, HUG_APPLE_EJECT), + hid_input, 0, &sc->sc_loc_apple_eject, &flags, + &sc->sc_id_apple_eject)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_APPLE_EJECT | + UKBD_FLAG_APPLE_SWAP; + DPRINTFN(1, "Found Apple eject-key\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(0xFFFF, 0x0003), + hid_input, 0, &sc->sc_loc_apple_fn, &flags, + &sc->sc_id_apple_fn)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_APPLE_FN; + DPRINTFN(1, "Found Apple FN-key\n"); + } + /* figure out some keys */ + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE0), + hid_input, 0, &sc->sc_loc_ctrl_l, &flags, + &sc->sc_id_ctrl_l)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_CTRL_L; + DPRINTFN(1, "Found left control\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE4), + hid_input, 0, &sc->sc_loc_ctrl_r, &flags, + &sc->sc_id_ctrl_r)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_CTRL_R; + DPRINTFN(1, "Found right control\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE1), + hid_input, 0, &sc->sc_loc_shift_l, &flags, + &sc->sc_id_shift_l)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_SHIFT_L; + DPRINTFN(1, "Found left shift\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE5), + hid_input, 0, &sc->sc_loc_shift_r, &flags, + &sc->sc_id_shift_r)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_SHIFT_R; + DPRINTFN(1, "Found right shift\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE2), + hid_input, 0, &sc->sc_loc_alt_l, &flags, + &sc->sc_id_alt_l)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_ALT_L; + DPRINTFN(1, "Found left alt\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE6), + hid_input, 0, &sc->sc_loc_alt_r, &flags, + &sc->sc_id_alt_r)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_ALT_R; + DPRINTFN(1, "Found right alt\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE3), + hid_input, 0, &sc->sc_loc_win_l, &flags, + &sc->sc_id_win_l)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_WIN_L; + DPRINTFN(1, "Found left GUI\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0xE7), + hid_input, 0, &sc->sc_loc_win_r, &flags, + &sc->sc_id_win_r)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_WIN_R; + DPRINTFN(1, "Found right GUI\n"); + } + /* figure out event buffer */ + if (hid_locate(ptr, len, + HID_USAGE2(HUP_KEYBOARD, 0x00), + hid_input, 0, &sc->sc_loc_events, &flags, + &sc->sc_id_events)) { + sc->sc_flags |= UKBD_FLAG_EVENTS; + DPRINTFN(1, "Found keyboard events\n"); + } + + /* figure out leds on keyboard */ + sc->sc_led_size = hid_report_size(ptr, len, + hid_output, NULL); + + if (hid_locate(ptr, len, + HID_USAGE2(HUP_LEDS, 0x01), + hid_output, 0, &sc->sc_loc_numlock, &flags, + &sc->sc_id_numlock)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_NUMLOCK; + DPRINTFN(1, "Found keyboard numlock\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_LEDS, 0x02), + hid_output, 0, &sc->sc_loc_capslock, &flags, + &sc->sc_id_capslock)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_CAPSLOCK; + DPRINTFN(1, "Found keyboard capslock\n"); + } + if (hid_locate(ptr, len, + HID_USAGE2(HUP_LEDS, 0x03), + hid_output, 0, &sc->sc_loc_scrolllock, &flags, + &sc->sc_id_scrolllock)) { + if (flags & HIO_VARIABLE) + sc->sc_flags |= UKBD_FLAG_SCROLLLOCK; + DPRINTFN(1, "Found keyboard scrolllock\n"); + } +} + static int ukbd_attach(device_t dev) { @@ -817,7 +1132,6 @@ ukbd_attach(device_t dev) keyboard_t *kbd = &sc->sc_kbd; void *hid_ptr = NULL; usb_error_t err; - uint32_t flags; uint16_t n; uint16_t hid_len; @@ -864,64 +1178,38 @@ ukbd_attach(device_t dev) */ KBD_PROBE_DONE(kbd); - /* - * Set boot protocol if we need the quirk. - */ - if (usb_test_quirk(uaa, UQ_KBD_BOOTPROTO)) { - err = usbd_req_set_protocol(sc->sc_udev, NULL, - sc->sc_iface_index, 0); - if (err != USB_ERR_NORMAL_COMPLETION) { - DPRINTF("set protocol error=%s\n", usbd_errstr(err)); - goto detach; - } - } - - /* figure out if there is an ID byte in the data */ + /* get HID descriptor */ err = usbd_req_get_hid_desc(uaa->device, NULL, &hid_ptr, &hid_len, M_TEMP, uaa->info.bIfaceIndex); - if (err == 0) { - uint8_t apple_keys = 0; - uint8_t temp_id; - /* investigate if this is an Apple Keyboard */ - if (hid_locate(hid_ptr, hid_len, - HID_USAGE2(HUP_CONSUMER, HUG_APPLE_EJECT), - hid_input, 0, &sc->sc_loc_apple_eject, &flags, - &temp_id)) { - if (flags & HIO_VARIABLE) - sc->sc_flags |= UKBD_FLAG_APPLE_EJECT | - UKBD_FLAG_APPLE_SWAP; - DPRINTFN(1, "Found Apple eject-key\n"); - apple_keys = 1; - sc->sc_kbd_id = temp_id; - } - if (hid_locate(hid_ptr, hid_len, - HID_USAGE2(0xFFFF, 0x0003), - hid_input, 0, &sc->sc_loc_apple_fn, &flags, - &temp_id)) { - if (flags & HIO_VARIABLE) - sc->sc_flags |= UKBD_FLAG_APPLE_FN; - DPRINTFN(1, "Found Apple FN-key\n"); - apple_keys = 1; - sc->sc_kbd_id = temp_id; - } - if (apple_keys == 0) { - /* - * Assume the first HID ID contains the - * keyboard data - */ - hid_report_size(hid_ptr, hid_len, - hid_input, &sc->sc_kbd_id); - } + if (err == 0) { + DPRINTF("Parsing HID descriptor of %d bytes\n", + (int)hid_len); - /* investigate if we need an ID-byte for the leds */ - hid_report_size(hid_ptr, hid_len, hid_output, &sc->sc_led_id); + ukbd_parse_hid(sc, hid_ptr, hid_len); free(hid_ptr, M_TEMP); } + /* check if we should use the boot protocol */ + if (usb_test_quirk(uaa, UQ_KBD_BOOTPROTO) || + (err != 0) || (!(sc->sc_flags & UKBD_FLAG_EVENTS))) { + + DPRINTF("Forcing boot protocol\n"); + + err = usbd_req_set_protocol(sc->sc_udev, NULL, + sc->sc_iface_index, 0); + + if (err != 0) { + DPRINTF("Set protocol error=%s (ignored)\n", + usbd_errstr(err)); + } + + ukbd_parse_hid(sc, ukbd_boot_desc, sizeof(ukbd_boot_desc)); + } + /* ignore if SETIDLE fails, hence it is not crucial */ - err = usbd_req_set_idle(sc->sc_udev, NULL, sc->sc_iface_index, 0, 0); + usbd_req_set_idle(sc->sc_udev, NULL, sc->sc_iface_index, 0, 0); mtx_lock(&Giant); @@ -1468,10 +1756,6 @@ errkey: static int ukbd_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) { - /* translate LED_XXX bits into the device specific bits */ - static const uint8_t ledmap[8] = { - 0, 2, 1, 3, 4, 6, 5, 7, - }; struct ukbd_softc *sc = kbd->kb_data; int i; @@ -1547,10 +1831,11 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, #endif case KDSETLED: /* set keyboard LED */ /* NOTE: lock key state in "sc_state" won't be changed */ - if (*(int *)arg & ~LOCK_MASK) { + if (*(int *)arg & ~LOCK_MASK) return (EINVAL); - } + i = *(int *)arg; + /* replace CAPS LED with ALTGR LED for ALTGR keyboards */ if (sc->sc_mode == K_XLATE && kbd->kb_keymap->n_keys > ALTGR_OFFSET) { @@ -1559,9 +1844,9 @@ ukbd_ioctl(keyboard_t *kbd, u_long cmd, else i &= ~CLKED; } - if (KBD_HAS_DEVICE(kbd)) { - ukbd_set_leds(sc, ledmap[i & LED_MASK]); - } + if (KBD_HAS_DEVICE(kbd)) + ukbd_set_leds(sc, i); + KBD_LED_VAL(kbd) = *(int *)arg; break; case KDGKBSTATE: /* get lock key state */ Modified: stable/8/sys/dev/usb/usb_hid.c ============================================================================== --- stable/8/sys/dev/usb/usb_hid.c Mon Jul 18 08:29:49 2011 (r224177) +++ stable/8/sys/dev/usb/usb_hid.c Mon Jul 18 08:38:08 2011 (r224178) @@ -702,6 +702,43 @@ hid_get_data_unsigned(const uint8_t *buf } /*------------------------------------------------------------------------* + * hid_put_data + *------------------------------------------------------------------------*/ +void +hid_put_data_unsigned(uint8_t *buf, usb_size_t len, + struct hid_location *loc, unsigned int value) +{ + uint32_t hpos = loc->pos; + uint32_t hsize = loc->size; + uint64_t data; + uint64_t mask; + uint32_t rpos; + uint8_t n; + + DPRINTFN(11, "hid_put_data: loc %d/%d = %u\n", hpos, hsize, value); + + /* Range check and limit */ + if (hsize == 0) + return; + if (hsize > 32) + hsize = 32; + + /* Put data in a safe way */ + rpos = (hpos / 8); + n = (hsize + 7) / 8; + data = ((uint64_t)value) << (hpos % 8); + mask = ((1ULL << hsize) - 1ULL) << (hpos % 8); + rpos += n; + while (n--) { + rpos--; + if (rpos < len) { + buf[rpos] &= ~(mask >> (8 * n)); + buf[rpos] |= (data >> (8 * n)); + } + } +} + +/*------------------------------------------------------------------------* * hid_is_collection *------------------------------------------------------------------------*/ int Modified: stable/8/sys/dev/usb/usbhid.h ============================================================================== --- stable/8/sys/dev/usb/usbhid.h Mon Jul 18 08:29:49 2011 (r224177) +++ stable/8/sys/dev/usb/usbhid.h Mon Jul 18 08:38:08 2011 (r224178) @@ -233,6 +233,8 @@ int32_t hid_get_data(const uint8_t *buf, struct hid_location *loc); uint32_t hid_get_data_unsigned(const uint8_t *buf, usb_size_t len, struct hid_location *loc); +void hid_put_data_unsigned(uint8_t *buf, usb_size_t len, + struct hid_location *loc, unsigned int value); int hid_is_collection(const void *desc, usb_size_t size, uint32_t usage); struct usb_hid_descriptor *hid_get_descriptor_from_usb( struct usb_config_descriptor *cd, From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 18:06:39 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8472E106564A; Mon, 18 Jul 2011 18:06:39 +0000 (UTC) (envelope-from mdf@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 71DB28FC0C; Mon, 18 Jul 2011 18:06:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6II6d2r033499; Mon, 18 Jul 2011 18:06:39 GMT (envelope-from mdf@svn.freebsd.org) Received: (from mdf@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6II6dUH033497; Mon, 18 Jul 2011 18:06:39 GMT (envelope-from mdf@svn.freebsd.org) Message-Id: <201107181806.p6II6dUH033497@svn.freebsd.org> From: Matthew D Fleming Date: Mon, 18 Jul 2011 18:06:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224190 - stable/8/sys/kern X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 18:06:39 -0000 Author: mdf Date: Mon Jul 18 18:06:39 2011 New Revision: 224190 URL: http://svn.freebsd.org/changeset/base/224190 Log: MFC r223875, r223876: style(9) and cleanup fixes. Add an option to have a fail point term only execute when run by a specified pid. This is helpful for automated testing involving a global knob that would otherwise be executed by many other threads. Modified: stable/8/sys/kern/kern_fail.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/kern/kern_fail.c ============================================================================== --- stable/8/sys/kern/kern_fail.c Mon Jul 18 18:02:06 2011 (r224189) +++ stable/8/sys/kern/kern_fail.c Mon Jul 18 18:06:39 2011 (r224190) @@ -52,6 +52,7 @@ #include __FBSDID("$FreeBSD$"); +#include #include #include #include @@ -59,6 +60,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -88,16 +90,20 @@ enum fail_point_t { FAIL_POINT_BREAK, /**< break into the debugger */ FAIL_POINT_PRINT, /**< print a message */ FAIL_POINT_SLEEP, /**< sleep for some msecs */ - FAIL_POINT_INVALID, /**< placeholder */ + FAIL_POINT_NUMTYPES }; -static const char *fail_type_strings[] = { - "off", - "panic", - "return", - "break", - "print", - "sleep", +static struct { + const char *name; + int nmlen; +} fail_type_strings[] = { +#define FP_TYPE_NM_LEN(s) { s, sizeof(s) - 1 } + [FAIL_POINT_OFF] = FP_TYPE_NM_LEN("off"), + [FAIL_POINT_PANIC] = FP_TYPE_NM_LEN("panic"), + [FAIL_POINT_RETURN] = FP_TYPE_NM_LEN("return"), + [FAIL_POINT_BREAK] = FP_TYPE_NM_LEN("break"), + [FAIL_POINT_PRINT] = FP_TYPE_NM_LEN("print"), + [FAIL_POINT_SLEEP] = FP_TYPE_NM_LEN("sleep"), }; /** @@ -109,7 +115,7 @@ struct fail_point_entry { int fe_arg; /**< argument to type (e.g. return value) */ int fe_prob; /**< likelihood of firing in millionths */ int fe_count; /**< number of times to fire, 0 means always */ - + pid_t fe_pid; /**< only fail for this process */ TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */ }; @@ -120,7 +126,7 @@ fail_point_sleep(struct fail_point *fp, /* convert from millisecs to ticks, rounding up */ int timo = ((msecs * hz) + 999) / 1000; - if (timo) { + if (timo > 0) { if (fp->fp_sleep_fn == NULL) { msleep(fp, &g_fp_mtx, PWAIT, "failpt", timo); } else { @@ -191,19 +197,13 @@ fail_point_init(struct fail_point *fp, c void fail_point_destroy(struct fail_point *fp) { - struct fail_point_entry *ent; - if (fp->fp_flags & FAIL_POINT_DYNAMIC_NAME && fp->fp_name != NULL) { - fp_free((void *)(intptr_t)fp->fp_name); + if ((fp->fp_flags & FAIL_POINT_DYNAMIC_NAME) != 0) { + fp_free(__DECONST(void *, fp->fp_name)); fp->fp_name = NULL; } fp->fp_flags = 0; - - while (!TAILQ_EMPTY(&fp->fp_entries)) { - ent = TAILQ_FIRST(&fp->fp_entries); - TAILQ_REMOVE(&fp->fp_entries, ent, fe_entries); - fp_free(ent); - } + clear_entries(&fp->fp_entries); } /** @@ -222,16 +222,14 @@ fail_point_eval_nontrivial(struct fail_p FP_LOCK(); - ent = TAILQ_FIRST(&fp->fp_entries); - while (ent) { + TAILQ_FOREACH_SAFE(ent, &fp->fp_entries, fe_entries, next) { int cont = 0; /* don't continue by default */ - next = TAILQ_NEXT(ent, fe_entries); if (ent->fe_prob < PROB_MAX && - ent->fe_prob < random() % PROB_MAX) { - cont = 1; - goto loop_end; - } + ent->fe_prob < random() % PROB_MAX) + continue; + if (ent->fe_pid != NO_PID && ent->fe_pid != curproc->p_pid) + continue; switch (ent->fe_type) { case FAIL_POINT_PANIC: @@ -239,13 +237,14 @@ fail_point_eval_nontrivial(struct fail_p /* NOTREACHED */ case FAIL_POINT_RETURN: - if (return_value) + if (return_value != NULL) *return_value = ent->fe_arg; ret = FAIL_POINT_RC_RETURN; break; case FAIL_POINT_BREAK: - printf("fail point %s breaking to debugger\n", fp->fp_name); + printf("fail point %s breaking to debugger\n", + fp->fp_name); breakpoint(); break; @@ -273,13 +272,9 @@ fail_point_eval_nontrivial(struct fail_p break; } - if (ent && ent->fe_count > 0 && --ent->fe_count == 0) + if (ent != NULL && ent->fe_count > 0 && --ent->fe_count == 0) free_entry(&fp->fp_entries, ent); - -loop_end: - if (cont) - ent = next; - else + if (cont == 0) break; } @@ -290,7 +285,7 @@ loop_end: FP_UNLOCK(); - return ret; + return (ret); } /** @@ -320,9 +315,11 @@ fail_point_get(struct fail_point *fp, st } if (ent->fe_count > 0) sbuf_printf(sb, "%d*", ent->fe_count); - sbuf_printf(sb, "%s", fail_type_strings[ent->fe_type]); + sbuf_printf(sb, "%s", fail_type_strings[ent->fe_type].name); if (ent->fe_arg) sbuf_printf(sb, "(%d)", ent->fe_arg); + if (ent->fe_pid != NO_PID) + sbuf_printf(sb, "[pid %d]", ent->fe_pid); if (TAILQ_NEXT(ent, fe_entries)) sbuf_printf(sb, "->"); } @@ -380,7 +377,7 @@ fail_point_set(struct fail_point *fp, ch fp->fp_name, fp->fp_location, buf); #endif /* IWARNING */ - return error; + return (error); } #define MAX_FAIL_POINT_BUF 1023 @@ -422,9 +419,8 @@ fail_point_sysctl(SYSCTL_HANDLER_ARGS) } out: - if (buf) - fp_free(buf); - return error; + fp_free(buf); + return (error); } /** @@ -437,12 +433,17 @@ parse_fail_point(struct fail_point_entri /* :: * ( "->" )* */ - if (!(p = parse_term(ents, p))) - return 0; - while (*p) - if (p[0] != '-' || p[1] != '>' || !(p = parse_term(ents, p+2))) - return 0; - return p; + p = parse_term(ents, p); + if (p == NULL) + return (NULL); + while (*p != '\0') { + if (p[0] != '-' || p[1] != '>') + return (NULL); + p = parse_term(ents, p + 2); + if (p == NULL) + return (NULL); + } + return (p); } /** @@ -455,6 +456,7 @@ parse_term(struct fail_point_entries *en ent = fp_malloc(sizeof *ent, M_WAITOK | M_ZERO); ent->fe_prob = PROB_MAX; + ent->fe_pid = NO_PID; TAILQ_INSERT_TAIL(ents, ent, fe_entries); /* @@ -462,14 +464,16 @@ parse_term(struct fail_point_entries *en * ( ( "%") | ( "*" ) )* * * [ "(" ")" ] + * [ "[pid " "]" ] */ /* ( ( "%") | ( "*" ) )* */ - while (('0' <= *p && *p <= '9') || *p == '.') { + while (isdigit(*p) || *p == '.') { int units, decimal; - if (!(p = parse_number(&units, &decimal, p))) - return 0; + p = parse_number(&units, &decimal, p); + if (p == NULL) + return (NULL); if (*p == '%') { if (units > 100) /* prevent overflow early */ @@ -477,37 +481,44 @@ parse_term(struct fail_point_entries *en ent->fe_prob = units * (PROB_MAX / 100) + decimal; if (ent->fe_prob > PROB_MAX) ent->fe_prob = PROB_MAX; - } else if (*p == '*') { if (!units || decimal) - return 0; + return (NULL); ent->fe_count = units; - - } else { - return 0; - } - + } else + return (NULL); p++; } /* */ - if (!(p = parse_type(ent, p))) - return 0; + p = parse_type(ent, p); + if (p == NULL) + return (NULL); if (*p == '\0') - return p; + return (p); /* [ "(" ")" ] */ if (*p != '(') return p; p++; - if (('0' <= *p && *p <= '9') || *p == '-') - ent->fe_arg = strtol(p, &p, 0); - else - return 0; + if (!isdigit(*p) && *p != '-') + return (NULL); + ent->fe_arg = strtol(p, &p, 0); if (*p++ != ')') - return 0; + return (NULL); + + /* [ "[pid " "]" ] */ +#define PID_STRING "[pid " + if (strncmp(p, PID_STRING, sizeof(PID_STRING) - 1) != 0) + return (p); + p += sizeof(PID_STRING) - 1; + if (!isdigit(*p)) + return (NULL); + ent->fe_pid = strtol(p, &p, 0); + if (*p++ != ']') + return (NULL); - return p; + return (p); } /** @@ -528,14 +539,14 @@ parse_number(int *out_units, int *out_de old_p = p; *out_units = strtol(p, &p, 10); if (p == old_p && *p != '.') - return 0; + return (NULL); /* fractional part */ *out_decimal = 0; if (*p == '.') { int digits = 0; p++; - while ('0' <= *p && *p <= '9') { + while (isdigit(*p)) { int digit = *p - '0'; if (digits < PROB_DIGITS - 2) *out_decimal = *out_decimal * 10 + digit; @@ -545,12 +556,12 @@ parse_number(int *out_units, int *out_de p++; } if (!digits) /* need at least one digit after '.' */ - return 0; + return (NULL); while (digits++ < PROB_DIGITS - 2) /* add implicit zeros */ *out_decimal *= 10; } - return p; /* success */ + return (p); /* success */ } /** @@ -560,21 +571,16 @@ static char * parse_type(struct fail_point_entry *ent, char *beg) { enum fail_point_t type; - char *end = beg; - while ('a' <= *end && *end <= 'z') - end++; - if (beg == end) - return 0; - for (type = FAIL_POINT_OFF; type != FAIL_POINT_INVALID; type++) { - const char *p = fail_type_strings[type]; - const char *q = beg; - while (q < end && *p++ == *q++); - if (q == end && *p == '\0') { + int len; + + for (type = FAIL_POINT_OFF; type < FAIL_POINT_NUMTYPES; type++) { + len = fail_type_strings[type].nmlen; + if (strncmp(fail_type_strings[type].name, beg, len) == 0) { ent->fe_type = type; - return end; + return (beg + len); } } - return 0; + return (NULL); } /** @@ -595,6 +601,7 @@ static void clear_entries(struct fail_point_entries *ents) { struct fail_point_entry *ent, *ent_next; + TAILQ_FOREACH_SAFE(ent, ents, fe_entries, ent_next) fp_free(ent); TAILQ_INIT(ents); From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 18:09:10 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BCFF7106564A; Mon, 18 Jul 2011 18:09:10 +0000 (UTC) (envelope-from mdf@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA7468FC1C; Mon, 18 Jul 2011 18:09:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6II9Are033654; Mon, 18 Jul 2011 18:09:10 GMT (envelope-from mdf@svn.freebsd.org) Received: (from mdf@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6II9A4u033652; Mon, 18 Jul 2011 18:09:10 GMT (envelope-from mdf@svn.freebsd.org) Message-Id: <201107181809.p6II9A4u033652@svn.freebsd.org> From: Matthew D Fleming Date: Mon, 18 Jul 2011 18:09:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224191 - stable/7/sys/kern X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 18:09:10 -0000 Author: mdf Date: Mon Jul 18 18:09:10 2011 New Revision: 224191 URL: http://svn.freebsd.org/changeset/base/224191 Log: MFC r223875, r223876: style(9) and cleanup fixes. Add an option to have a fail point term only execute when run by a specified pid. This is helpful for automated testing involving a global knob that would otherwise be executed by many other threads. Modified: stable/7/sys/kern/kern_fail.c Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/kern/kern_fail.c ============================================================================== --- stable/7/sys/kern/kern_fail.c Mon Jul 18 18:06:39 2011 (r224190) +++ stable/7/sys/kern/kern_fail.c Mon Jul 18 18:09:10 2011 (r224191) @@ -52,6 +52,7 @@ #include __FBSDID("$FreeBSD$"); +#include #include #include #include @@ -59,6 +60,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -88,16 +90,20 @@ enum fail_point_t { FAIL_POINT_BREAK, /**< break into the debugger */ FAIL_POINT_PRINT, /**< print a message */ FAIL_POINT_SLEEP, /**< sleep for some msecs */ - FAIL_POINT_INVALID, /**< placeholder */ + FAIL_POINT_NUMTYPES }; -static const char *fail_type_strings[] = { - "off", - "panic", - "return", - "break", - "print", - "sleep", +static struct { + const char *name; + int nmlen; +} fail_type_strings[] = { +#define FP_TYPE_NM_LEN(s) { s, sizeof(s) - 1 } + [FAIL_POINT_OFF] = FP_TYPE_NM_LEN("off"), + [FAIL_POINT_PANIC] = FP_TYPE_NM_LEN("panic"), + [FAIL_POINT_RETURN] = FP_TYPE_NM_LEN("return"), + [FAIL_POINT_BREAK] = FP_TYPE_NM_LEN("break"), + [FAIL_POINT_PRINT] = FP_TYPE_NM_LEN("print"), + [FAIL_POINT_SLEEP] = FP_TYPE_NM_LEN("sleep"), }; /** @@ -109,7 +115,7 @@ struct fail_point_entry { int fe_arg; /**< argument to type (e.g. return value) */ int fe_prob; /**< likelihood of firing in millionths */ int fe_count; /**< number of times to fire, 0 means always */ - + pid_t fe_pid; /**< only fail for this process */ TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */ }; @@ -120,7 +126,7 @@ fail_point_sleep(struct fail_point *fp, /* convert from millisecs to ticks, rounding up */ int timo = ((msecs * hz) + 999) / 1000; - if (timo) { + if (timo > 0) { if (fp->fp_sleep_fn == NULL) { msleep(fp, &g_fp_mtx, PWAIT, "failpt", timo); } else { @@ -191,19 +197,13 @@ fail_point_init(struct fail_point *fp, c void fail_point_destroy(struct fail_point *fp) { - struct fail_point_entry *ent; - if (fp->fp_flags & FAIL_POINT_DYNAMIC_NAME && fp->fp_name != NULL) { - fp_free((void *)(intptr_t)fp->fp_name); + if ((fp->fp_flags & FAIL_POINT_DYNAMIC_NAME) != 0) { + fp_free(__DECONST(void *, fp->fp_name)); fp->fp_name = NULL; } fp->fp_flags = 0; - - while (!TAILQ_EMPTY(&fp->fp_entries)) { - ent = TAILQ_FIRST(&fp->fp_entries); - TAILQ_REMOVE(&fp->fp_entries, ent, fe_entries); - fp_free(ent); - } + clear_entries(&fp->fp_entries); } /** @@ -222,16 +222,14 @@ fail_point_eval_nontrivial(struct fail_p FP_LOCK(); - ent = TAILQ_FIRST(&fp->fp_entries); - while (ent) { + TAILQ_FOREACH_SAFE(ent, &fp->fp_entries, fe_entries, next) { int cont = 0; /* don't continue by default */ - next = TAILQ_NEXT(ent, fe_entries); if (ent->fe_prob < PROB_MAX && - ent->fe_prob < random() % PROB_MAX) { - cont = 1; - goto loop_end; - } + ent->fe_prob < random() % PROB_MAX) + continue; + if (ent->fe_pid != NO_PID && ent->fe_pid != curproc->p_pid) + continue; switch (ent->fe_type) { case FAIL_POINT_PANIC: @@ -239,13 +237,14 @@ fail_point_eval_nontrivial(struct fail_p /* NOTREACHED */ case FAIL_POINT_RETURN: - if (return_value) + if (return_value != NULL) *return_value = ent->fe_arg; ret = FAIL_POINT_RC_RETURN; break; case FAIL_POINT_BREAK: - printf("fail point %s breaking to debugger\n", fp->fp_name); + printf("fail point %s breaking to debugger\n", + fp->fp_name); breakpoint(); break; @@ -273,13 +272,9 @@ fail_point_eval_nontrivial(struct fail_p break; } - if (ent && ent->fe_count > 0 && --ent->fe_count == 0) + if (ent != NULL && ent->fe_count > 0 && --ent->fe_count == 0) free_entry(&fp->fp_entries, ent); - -loop_end: - if (cont) - ent = next; - else + if (cont == 0) break; } @@ -290,7 +285,7 @@ loop_end: FP_UNLOCK(); - return ret; + return (ret); } /** @@ -320,9 +315,11 @@ fail_point_get(struct fail_point *fp, st } if (ent->fe_count > 0) sbuf_printf(sb, "%d*", ent->fe_count); - sbuf_printf(sb, "%s", fail_type_strings[ent->fe_type]); + sbuf_printf(sb, "%s", fail_type_strings[ent->fe_type].name); if (ent->fe_arg) sbuf_printf(sb, "(%d)", ent->fe_arg); + if (ent->fe_pid != NO_PID) + sbuf_printf(sb, "[pid %d]", ent->fe_pid); if (TAILQ_NEXT(ent, fe_entries)) sbuf_printf(sb, "->"); } @@ -380,7 +377,7 @@ fail_point_set(struct fail_point *fp, ch fp->fp_name, fp->fp_location, buf); #endif /* IWARNING */ - return error; + return (error); } #define MAX_FAIL_POINT_BUF 1023 @@ -422,9 +419,8 @@ fail_point_sysctl(SYSCTL_HANDLER_ARGS) } out: - if (buf) - fp_free(buf); - return error; + fp_free(buf); + return (error); } /** @@ -437,12 +433,17 @@ parse_fail_point(struct fail_point_entri /* :: * ( "->" )* */ - if (!(p = parse_term(ents, p))) - return 0; - while (*p) - if (p[0] != '-' || p[1] != '>' || !(p = parse_term(ents, p+2))) - return 0; - return p; + p = parse_term(ents, p); + if (p == NULL) + return (NULL); + while (*p != '\0') { + if (p[0] != '-' || p[1] != '>') + return (NULL); + p = parse_term(ents, p + 2); + if (p == NULL) + return (NULL); + } + return (p); } /** @@ -455,6 +456,7 @@ parse_term(struct fail_point_entries *en ent = fp_malloc(sizeof *ent, M_WAITOK | M_ZERO); ent->fe_prob = PROB_MAX; + ent->fe_pid = NO_PID; TAILQ_INSERT_TAIL(ents, ent, fe_entries); /* @@ -462,14 +464,16 @@ parse_term(struct fail_point_entries *en * ( ( "%") | ( "*" ) )* * * [ "(" ")" ] + * [ "[pid " "]" ] */ /* ( ( "%") | ( "*" ) )* */ - while (('0' <= *p && *p <= '9') || *p == '.') { + while (isdigit(*p) || *p == '.') { int units, decimal; - if (!(p = parse_number(&units, &decimal, p))) - return 0; + p = parse_number(&units, &decimal, p); + if (p == NULL) + return (NULL); if (*p == '%') { if (units > 100) /* prevent overflow early */ @@ -477,37 +481,44 @@ parse_term(struct fail_point_entries *en ent->fe_prob = units * (PROB_MAX / 100) + decimal; if (ent->fe_prob > PROB_MAX) ent->fe_prob = PROB_MAX; - } else if (*p == '*') { if (!units || decimal) - return 0; + return (NULL); ent->fe_count = units;; - - } else { - return 0; - } - + } else + return (NULL); p++; } /* */ - if (!(p = parse_type(ent, p))) - return 0; + p = parse_type(ent, p); + if (p == NULL) + return (NULL); if (*p == '\0') - return p; + return (p); /* [ "(" ")" ] */ if (*p != '(') return p; p++; - if (('0' <= *p && *p <= '9') || *p == '-') - ent->fe_arg = strtol(p, &p, 0); - else - return 0; + if (!isdigit(*p) && *p != '-') + return (NULL); + ent->fe_arg = strtol(p, &p, 0); if (*p++ != ')') - return 0; + return (NULL); + + /* [ "[pid " "]" ] */ +#define PID_STRING "[pid " + if (strncmp(p, PID_STRING, sizeof(PID_STRING) - 1) != 0) + return (p); + p += sizeof(PID_STRING) - 1; + if (!isdigit(*p)) + return (NULL); + ent->fe_pid = strtol(p, &p, 0); + if (*p++ != ']') + return (NULL); - return p; + return (p); } /** @@ -528,14 +539,14 @@ parse_number(int *out_units, int *out_de old_p = p; *out_units = strtol(p, &p, 10);; if (p == old_p && *p != '.') - return 0; + return (NULL); /* fractional part */ *out_decimal = 0; if (*p == '.') { int digits = 0; p++; - while ('0' <= *p && *p <= '9') { + while (isdigit(*p)) { int digit = *p - '0'; if (digits < PROB_DIGITS - 2) *out_decimal = *out_decimal * 10 + digit; @@ -545,12 +556,12 @@ parse_number(int *out_units, int *out_de p++; } if (!digits) /* need at least one digit after '.' */ - return 0; + return (NULL); while (digits++ < PROB_DIGITS - 2) /* add implicit zeros */ *out_decimal *= 10; } - return p; /* success */ + return (p); /* success */ } /** @@ -560,21 +571,16 @@ static char * parse_type(struct fail_point_entry *ent, char *beg) { enum fail_point_t type; - char *end = beg; - while ('a' <= *end && *end <= 'z') - end++; - if (beg == end) - return 0; - for (type = FAIL_POINT_OFF; type != FAIL_POINT_INVALID; type++) { - const char *p = fail_type_strings[type]; - const char *q = beg; - while (q < end && *p++ == *q++); - if (q == end && *p == '\0') { + int len; + + for (type = FAIL_POINT_OFF; type < FAIL_POINT_NUMTYPES; type++) { + len = fail_type_strings[type].nmlen; + if (strncmp(fail_type_strings[type].name, beg, len) == 0) { ent->fe_type = type; - return end; + return (beg + len); } } - return 0; + return (NULL); } /** @@ -595,6 +601,7 @@ static void clear_entries(struct fail_point_entries *ents) { struct fail_point_entry *ent, *ent_next; + TAILQ_FOREACH_SAFE(ent, ents, fe_entries, ent_next) fp_free(ent); TAILQ_INIT(ents); From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 18:25:25 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C58EE106566B; Mon, 18 Jul 2011 18:25:25 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B3D1E8FC15; Mon, 18 Jul 2011 18:25:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6IIPPdW034154; Mon, 18 Jul 2011 18:25:25 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6IIPP8B034152; Mon, 18 Jul 2011 18:25:25 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201107181825.p6IIPP8B034152@svn.freebsd.org> From: John Baldwin Date: Mon, 18 Jul 2011 18:25:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224192 - stable/8/sys/dev/uart X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 18:25:25 -0000 Author: jhb Date: Mon Jul 18 18:25:25 2011 New Revision: 224192 URL: http://svn.freebsd.org/changeset/base/224192 Log: MFC 223874: Add device ID for the Davicom 56PDV PCI Modem. Modified: stable/8/sys/dev/uart/uart_bus_pci.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/uart/uart_bus_pci.c ============================================================================== --- stable/8/sys/dev/uart/uart_bus_pci.c Mon Jul 18 18:09:10 2011 (r224191) +++ stable/8/sys/dev/uart/uart_bus_pci.c Mon Jul 18 18:25:25 2011 (r224192) @@ -83,6 +83,7 @@ static struct pci_id pci_ns8250_ids[] = { 0x103c, 0x1290, 0xffff, 0, "HP Auxiliary Diva Serial Port", 0x18 }, { 0x11c1, 0x0480, 0xffff, 0, "Agere Systems Venus Modem (V90, 56KFlex)", 0x14 }, { 0x115d, 0x0103, 0xffff, 0, "Xircom Cardbus Ethernet + 56k Modem", 0x10 }, +{ 0x1282, 0x6585, 0xffff, 0, "Davicom 56PDV PCI Modem", 0x10 }, { 0x12b9, 0x1008, 0xffff, 0, "3Com 56K FaxModem Model 5610", 0x10 }, { 0x131f, 0x1000, 0xffff, 0, "Siig CyberSerial (1-port) 16550", 0x18 }, { 0x131f, 0x1001, 0xffff, 0, "Siig CyberSerial (1-port) 16650", 0x18 }, From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 18:29:39 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7D02E106564A; Mon, 18 Jul 2011 18:29:39 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6BA518FC14; Mon, 18 Jul 2011 18:29:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6IITdaj034311; Mon, 18 Jul 2011 18:29:39 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6IITdlI034309; Mon, 18 Jul 2011 18:29:39 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201107181829.p6IITdlI034309@svn.freebsd.org> From: John Baldwin Date: Mon, 18 Jul 2011 18:29:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224193 - stable/8/sys/dev/pci X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 18:29:39 -0000 Author: jhb Date: Mon Jul 18 18:29:39 2011 New Revision: 224193 URL: http://svn.freebsd.org/changeset/base/224193 Log: MFC 223952: Properly align the end of a candidate back region based on the window's granularity when growing a PCI-PCI window up. Modified: stable/8/sys/dev/pci/pci_pci.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/pci/pci_pci.c ============================================================================== --- stable/8/sys/dev/pci/pci_pci.c Mon Jul 18 18:25:25 2011 (r224192) +++ stable/8/sys/dev/pci/pci_pci.c Mon Jul 18 18:29:39 2011 (r224193) @@ -822,7 +822,7 @@ pcib_grow_window(struct pcib_softc *sc, if (bootverbose) printf("\tback candidate range: %#lx-%#lx\n", start_free, back); - back = roundup2(back + 1, w->step) - 1; + back = roundup2(back + 1, 1ul << w->step) - 1; back -= rman_get_end(w->res); } else back = 0; From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 18:37:16 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0EE001065749; Mon, 18 Jul 2011 18:37:16 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F08078FC15; Mon, 18 Jul 2011 18:37:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6IIbFQe034618; Mon, 18 Jul 2011 18:37:15 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6IIbFHm034612; Mon, 18 Jul 2011 18:37:15 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201107181837.p6IIbFHm034612@svn.freebsd.org> From: John Baldwin Date: Mon, 18 Jul 2011 18:37:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224194 - in stable/7: contrib/top usr.bin/top X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 18:37:16 -0000 Author: jhb Date: Mon Jul 18 18:37:15 2011 New Revision: 224194 URL: http://svn.freebsd.org/changeset/base/224194 Log: MFC 222530,223841: Add a new option to toggle the display of the system idle process (per-CPU idle threads). The process is displayed by default (subject to whether or not system processes are displayed) to preserve existing behavior. The system idle process can be hidden via the '-z' command line argument or the 'z' key while top is running. When it is hidden, top more closely matches the behavior of FreeBSD <= 4.x where idle time was not accounted to any process. Modified: stable/7/contrib/top/commands.c stable/7/contrib/top/machine.h stable/7/contrib/top/top.X stable/7/contrib/top/top.c stable/7/usr.bin/top/machine.c Directory Properties: stable/7/contrib/top/ (props changed) stable/7/usr.bin/top/ (props changed) Modified: stable/7/contrib/top/commands.c ============================================================================== --- stable/7/contrib/top/commands.c Mon Jul 18 18:29:39 2011 (r224193) +++ stable/7/contrib/top/commands.c Mon Jul 18 18:37:15 2011 (r224194) @@ -94,6 +94,7 @@ S - toggle the displaying of syste a - toggle the displaying of process titles\n\ t - toggle the display of this process\n\ u - display processes for only one user (+ selects all users)\n\ +z - toggle the displaying of the system idle process\n\ \n\ \n", stdout); } Modified: stable/7/contrib/top/machine.h ============================================================================== --- stable/7/contrib/top/machine.h Mon Jul 18 18:29:39 2011 (r224193) +++ stable/7/contrib/top/machine.h Mon Jul 18 18:37:15 2011 (r224194) @@ -65,6 +65,7 @@ struct process_select int uid; /* only this uid (unless uid == -1) */ int wcpu; /* show weighted cpu */ int jail; /* show jail ID */ + int kidle; /* show per-CPU idle threads */ char *command; /* only this command (unless == NULL) */ }; Modified: stable/7/contrib/top/top.X ============================================================================== --- stable/7/contrib/top/top.X Mon Jul 18 18:29:39 2011 (r224193) +++ stable/7/contrib/top/top.X Mon Jul 18 18:37:15 2011 (r224194) @@ -10,7 +10,7 @@ top \- display and update information ab .SH SYNOPSIS .B top [ -.B \-abCHIijnPqStuv +.B \-abCHIijnPqStuvz ] [ .BI \-d count ] [ @@ -146,6 +146,9 @@ Write version number information to stde No other processing takes place when this option is used. To see current revision information while top is running, use the help command \*(lq?\*(rq. .TP +.B \-z +Do not display the system idle process. +.TP .BI \-d count Show only .I count @@ -204,8 +207,9 @@ The options .BR \-j , .BR \-S , .BR \-t , +.BR \-u , and -.B \-u +.B \-z are actually toggles. A second specification of any of these options will negate the first. Thus a user who has the environment variable .B TOP @@ -314,6 +318,9 @@ ID. Toggle the display of the .I top process. +.TP +.B z +Toggle the display of the system idle process. .SH "THE DISPLAY" The actual display varies depending on the specific variant of Unix that the machine is running. This description may not exactly match Modified: stable/7/contrib/top/top.c ============================================================================== --- stable/7/contrib/top/top.c Mon Jul 18 18:29:39 2011 (r224193) +++ stable/7/contrib/top/top.c Mon Jul 18 18:37:15 2011 (r224194) @@ -196,9 +196,9 @@ char *argv[]; fd_set readfds; #ifdef ORDER - static char command_chars[] = "\f qh?en#sdkriIutHmSCajo"; + static char command_chars[] = "\f qh?en#sdkriIutHmSCajzo"; #else - static char command_chars[] = "\f qh?en#sdkriIutHmSCaj"; + static char command_chars[] = "\f qh?en#sdkriIutHmSCajz"; #endif /* these defines enumerate the "strchr"s of the commands in command_chars */ #define CMD_redraw 0 @@ -224,8 +224,9 @@ char *argv[]; #define CMD_wcputog 19 #define CMD_showargs 20 #define CMD_jidtog 21 +#define CMD_kidletog 22 #ifdef ORDER -#define CMD_order 22 +#define CMD_order 23 #endif /* set the buffer for stdout */ @@ -258,6 +259,7 @@ char *argv[]; ps.thread = No; ps.wcpu = 1; ps.jail = No; + ps.kidle = Yes; ps.command = NULL; /* get preset options from the environment */ @@ -283,7 +285,7 @@ char *argv[]; optind = 1; } - while ((i = getopt(ac, av, "CSIHPabijnquvs:d:U:m:o:t")) != EOF) + while ((i = getopt(ac, av, "CSIHPabijnquvzs:d:U:m:o:t")) != EOF) { switch(i) { @@ -412,10 +414,14 @@ char *argv[]; pcpu_stats = Yes; break; + case 'z': + ps.kidle = !ps.kidle; + break; + default: fprintf(stderr, "Top version %s\n" -"Usage: %s [-abCHIijnPqStuv] [-d count] [-m io | cpu] [-o field] [-s time]\n" +"Usage: %s [-abCHIijnPqStuvz] [-d count] [-m io | cpu] [-o field] [-s time]\n" " [-U username] [number]\n", version_string(), myname); exit(1); @@ -1075,7 +1081,13 @@ restart: reset_display(); putchar('\r'); break; - + case CMD_kidletog: + ps.kidle = !ps.kidle; + new_message(MT_standout | MT_delayed, + " %sisplaying system idle process.", + ps.kidle ? "D" : "Not d"); + putchar('\r'); + break; default: new_message(MT_standout, " BAD CASE IN SWITCH!"); putchar('\r'); Modified: stable/7/usr.bin/top/machine.c ============================================================================== --- stable/7/usr.bin/top/machine.c Mon Jul 18 18:29:39 2011 (r224193) +++ stable/7/usr.bin/top/machine.c Mon Jul 18 18:37:15 2011 (r224194) @@ -624,6 +624,7 @@ get_process_info(struct system_info *si, int show_system; int show_uid; int show_command; + int show_kidle; /* * Save the previous process info. @@ -664,6 +665,7 @@ get_process_info(struct system_info *si, show_system = sel->system; show_uid = sel->uid != -1; show_command = sel->command != NULL; + show_kidle = sel->kidle; /* count up process states and get pointers to interesting procs */ total_procs = 0; @@ -699,6 +701,10 @@ get_process_info(struct system_info *si, /* skip zombies */ continue; + if (!show_kidle && pp->ki_tdflags & TDF_IDLETD) + /* skip kernel idle process */ + continue; + if (displaymode == DISP_CPU && !show_idle && (pp->ki_pctcpu == 0 || pp->ki_stat == SSTOP || pp->ki_stat == SIDL)) From owner-svn-src-stable@FreeBSD.ORG Mon Jul 18 21:04:35 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 910301065677; Mon, 18 Jul 2011 21:04:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7F0968FC13; Mon, 18 Jul 2011 21:04:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6IL4Z3Y039267; Mon, 18 Jul 2011 21:04:35 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6IL4ZQU039265; Mon, 18 Jul 2011 21:04:35 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201107182104.p6IL4ZQU039265@svn.freebsd.org> From: Rick Macklem Date: Mon, 18 Jul 2011 21:04:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224203 - stable/8/sys/fs/nfsclient X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2011 21:04:35 -0000 Author: rmacklem Date: Mon Jul 18 21:04:35 2011 New Revision: 224203 URL: http://svn.freebsd.org/changeset/base/224203 Log: MFC: r223774 The algorithm used by nfscl_getopen() could have resulted in multiple instances of the same lock_owner when a process both inherited an open file descriptor plus opened the same file itself. Since some NFSv4 servers cannot handle multiple instances of the same lock_owner string, this patch changes the algorithm used by nfscl_getopen() in the new NFSv4 client to keep that from happening. The new algorithm is simpler, since there is no longer any need to ascend the process's parentage tree because all NFSv4 Closes for a file are done at VOP_INACTIVE()/VOP_RECLAIM(), making the Opens indistinct w.r.t. use with Lock Ops. This problem was discovered at the recent NFSv4 interoperability Bakeathon. Modified: stable/8/sys/fs/nfsclient/nfs_clstate.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/fs/nfsclient/nfs_clstate.c ============================================================================== --- stable/8/sys/fs/nfsclient/nfs_clstate.c Mon Jul 18 20:57:43 2011 (r224202) +++ stable/8/sys/fs/nfsclient/nfs_clstate.c Mon Jul 18 21:04:35 2011 (r224203) @@ -95,7 +95,7 @@ int nfscl_deleghighwater = NFSCLDELEGHIG static int nfscl_delegcnt = 0; static int nfscl_getopen(struct nfsclownerhead *, u_int8_t *, int, u_int8_t *, - NFSPROC_T *, u_int32_t, struct nfsclowner **, struct nfsclopen **); + u_int8_t *, u_int32_t, struct nfscllockowner **, struct nfsclopen **); static void nfscl_clrelease(struct nfsclclient *); static void nfscl_cleanclient(struct nfsclclient *); static void nfscl_expireclient(struct nfsclclient *, struct nfsmount *, @@ -521,25 +521,20 @@ nfscl_getstateid(vnode_t vp, u_int8_t *n * for a matching OpenOwner and use that. */ nfscl_filllockowner(p->td_proc, own, F_POSIX); - error = nfscl_getopen(&clp->nfsc_owner, nfhp, fhlen, NULL, p, - mode, NULL, &op); - if (error == 0) { - /* now look for a lockowner */ - LIST_FOREACH(lp, &op->nfso_lock, nfsl_list) { - if (!NFSBCMP(lp->nfsl_owner, own, - NFSV4CL_LOCKNAMELEN)) { - stateidp->seqid = - lp->nfsl_stateid.seqid; - stateidp->other[0] = - lp->nfsl_stateid.other[0]; - stateidp->other[1] = - lp->nfsl_stateid.other[1]; - stateidp->other[2] = - lp->nfsl_stateid.other[2]; - NFSUNLOCKCLSTATE(); - return (0); - } - } + lp = NULL; + error = nfscl_getopen(&clp->nfsc_owner, nfhp, fhlen, own, own, + mode, &lp, &op); + if (error == 0 && lp != NULL) { + stateidp->seqid = + lp->nfsl_stateid.seqid; + stateidp->other[0] = + lp->nfsl_stateid.other[0]; + stateidp->other[1] = + lp->nfsl_stateid.other[1]; + stateidp->other[2] = + lp->nfsl_stateid.other[2]; + NFSUNLOCKCLSTATE(); + return (0); } } if (op == NULL) { @@ -578,55 +573,74 @@ nfscl_getstateid(vnode_t vp, u_int8_t *n } /* - * Get an existing open. Search up the parentage tree for a match and - * return with the first one found. + * Search for a matching file, mode and, optionally, lockowner. */ static int nfscl_getopen(struct nfsclownerhead *ohp, u_int8_t *nfhp, int fhlen, - u_int8_t *rown, NFSPROC_T *p, u_int32_t mode, struct nfsclowner **owpp, - struct nfsclopen **opp) + u_int8_t *openown, u_int8_t *lockown, u_int32_t mode, + struct nfscllockowner **lpp, struct nfsclopen **opp) { - struct nfsclowner *owp = NULL; - struct nfsclopen *op; - NFSPROC_T *nproc; - u_int8_t own[NFSV4CL_LOCKNAMELEN], *ownp; + struct nfsclowner *owp; + struct nfsclopen *op, *rop, *rop2; + struct nfscllockowner *lp; + int keep_looping; - nproc = p; - op = NULL; - while (op == NULL && (nproc != NULL || rown != NULL)) { - if (nproc != NULL) { - nfscl_filllockowner(nproc->td_proc, own, F_POSIX); - ownp = own; - } else { - ownp = rown; - } - /* Search the client list */ - LIST_FOREACH(owp, ohp, nfsow_list) { - if (!NFSBCMP(owp->nfsow_owner, ownp, - NFSV4CL_LOCKNAMELEN)) - break; - } - if (owp != NULL) { - /* and look for the correct open */ - LIST_FOREACH(op, &owp->nfsow_open, nfso_list) { - if (op->nfso_fhlen == fhlen && - !NFSBCMP(op->nfso_fh, nfhp, fhlen) - && (op->nfso_mode & mode) == mode) { - break; + if (lpp != NULL) + *lpp = NULL; + /* + * rop will be set to the open to be returned. There are three + * variants of this, all for an open of the correct file: + * 1 - A match of lockown. + * 2 - A match of the openown, when no lockown match exists. + * 3 - A match for any open, if no openown or lockown match exists. + * Looking for #2 over #3 probably isn't necessary, but since + * RFC3530 is vague w.r.t. the relationship between openowners and + * lockowners, I think this is the safer way to go. + */ + rop = NULL; + rop2 = NULL; + keep_looping = 1; + /* Search the client list */ + owp = LIST_FIRST(ohp); + while (owp != NULL && keep_looping != 0) { + /* and look for the correct open */ + op = LIST_FIRST(&owp->nfsow_open); + while (op != NULL && keep_looping != 0) { + if (op->nfso_fhlen == fhlen && + !NFSBCMP(op->nfso_fh, nfhp, fhlen) + && (op->nfso_mode & mode) == mode) { + if (lpp != NULL) { + /* Now look for a matching lockowner. */ + LIST_FOREACH(lp, &op->nfso_lock, + nfsl_list) { + if (!NFSBCMP(lp->nfsl_owner, + lockown, + NFSV4CL_LOCKNAMELEN)) { + *lpp = lp; + rop = op; + keep_looping = 0; + break; + } + } } + if (rop == NULL && !NFSBCMP(owp->nfsow_owner, + openown, NFSV4CL_LOCKNAMELEN)) { + rop = op; + if (lpp == NULL) + keep_looping = 0; + } + if (rop2 == NULL) + rop2 = op; } + op = LIST_NEXT(op, nfso_list); } - if (rown != NULL) - break; - if (op == NULL) - nproc = nfscl_getparent(nproc); + owp = LIST_NEXT(owp, nfsow_list); } - if (op == NULL) { + if (rop == NULL) + rop = rop2; + if (rop == NULL) return (EBADF); - } - if (owpp) - *owpp = owp; - *opp = op; + *opp = rop; return (0); } @@ -891,16 +905,16 @@ nfscl_getbytelock(vnode_t vp, u_int64_t struct nfscldeleg *dp = NULL, *ldp = NULL; struct nfscllockownerhead *lhp = NULL; struct nfsnode *np; - u_int8_t own[NFSV4CL_LOCKNAMELEN], *ownp; + u_int8_t own[NFSV4CL_LOCKNAMELEN], *ownp, openown[NFSV4CL_LOCKNAMELEN]; + u_int8_t *openownp; int error = 0, ret, donelocally = 0; u_int32_t mode; - if (type == F_WRLCK) - mode = NFSV4OPEN_ACCESSWRITE; - else - mode = NFSV4OPEN_ACCESSREAD; + /* For Lock Ops, the open mode doesn't matter, so use 0 to match any. */ + mode = 0; np = VTONFS(vp); *lpp = NULL; + lp = NULL; *newonep = 0; *donelocallyp = 0; @@ -940,9 +954,12 @@ nfscl_getbytelock(vnode_t vp, u_int64_t op = NULL; if (recovery) { ownp = rownp; + openownp = ropenownp; } else { nfscl_filllockowner(id, own, flags); ownp = own; + nfscl_filllockowner(p->td_proc, openown, F_POSIX); + openownp = openown; } if (!recovery) { NFSLOCKCLSTATE(); @@ -961,13 +978,13 @@ nfscl_getbytelock(vnode_t vp, u_int64_t dp = NULL; } if (dp != NULL) { - /* Now, find the associated open to get the correct openowner */ + /* Now, find an open and maybe a lockowner. */ ret = nfscl_getopen(&dp->nfsdl_owner, np->n_fhp->nfh_fh, - np->n_fhp->nfh_len, NULL, p, mode, NULL, &op); + np->n_fhp->nfh_len, openownp, ownp, mode, NULL, &op); if (ret) ret = nfscl_getopen(&clp->nfsc_owner, - np->n_fhp->nfh_fh, np->n_fhp->nfh_len, NULL, p, - mode, NULL, &op); + np->n_fhp->nfh_fh, np->n_fhp->nfh_len, openownp, + ownp, mode, NULL, &op); if (!ret) { lhp = &dp->nfsdl_lock; TAILQ_REMOVE(&clp->nfsc_deleg, dp, nfsdl_list); @@ -980,16 +997,11 @@ nfscl_getbytelock(vnode_t vp, u_int64_t } if (!donelocally) { /* - * Get the related Open. + * Get the related Open and maybe lockowner. */ - if (recovery) - error = nfscl_getopen(&clp->nfsc_owner, - np->n_fhp->nfh_fh, np->n_fhp->nfh_len, ropenownp, - NULL, mode, NULL, &op); - else - error = nfscl_getopen(&clp->nfsc_owner, - np->n_fhp->nfh_fh, np->n_fhp->nfh_len, NULL, p, - mode, NULL, &op); + error = nfscl_getopen(&clp->nfsc_owner, + np->n_fhp->nfh_fh, np->n_fhp->nfh_len, openownp, + ownp, mode, &lp, &op); if (!error) lhp = &op->nfso_lock; } @@ -1010,10 +1022,11 @@ nfscl_getbytelock(vnode_t vp, u_int64_t /* * Ok, see if a lockowner exists and create one, as required. */ - LIST_FOREACH(lp, lhp, nfsl_list) { - if (!NFSBCMP(lp->nfsl_owner, ownp, NFSV4CL_LOCKNAMELEN)) - break; - } + if (lp == NULL) + LIST_FOREACH(lp, lhp, nfsl_list) { + if (!NFSBCMP(lp->nfsl_owner, ownp, NFSV4CL_LOCKNAMELEN)) + break; + } if (lp == NULL) { NFSBCOPY(ownp, nlp->nfsl_owner, NFSV4CL_LOCKNAMELEN); if (recovery) From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 03:30:43 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 321A9106566B; Tue, 19 Jul 2011 03:30:43 +0000 (UTC) (envelope-from avatar@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 06F9D8FC0A; Tue, 19 Jul 2011 03:30:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6J3Ug5Y051441; Tue, 19 Jul 2011 03:30:42 GMT (envelope-from avatar@svn.freebsd.org) Received: (from avatar@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6J3UgQp051439; Tue, 19 Jul 2011 03:30:42 GMT (envelope-from avatar@svn.freebsd.org) Message-Id: <201107190330.p6J3UgQp051439@svn.freebsd.org> From: Tai-hwa Liang Date: Tue, 19 Jul 2011 03:30:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224208 - stable/7/usr.bin/find X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 03:30:43 -0000 Author: avatar Date: Tue Jul 19 03:30:42 2011 New Revision: 224208 URL: http://svn.freebsd.org/changeset/base/224208 Log: MFC r223035: Using statfs.f_fstypename rather than statfs.f_type whilst performing fstype comparsion as nullfs will copy f_type from underlayer FS. PR: bin/156258 Submitted by: Marcin Wisnicki Modified: stable/7/usr.bin/find/function.c Directory Properties: stable/7/usr.bin/find/ (props changed) Modified: stable/7/usr.bin/find/function.c ============================================================================== --- stable/7/usr.bin/find/function.c Tue Jul 19 00:37:24 2011 (r224207) +++ stable/7/usr.bin/find/function.c Tue Jul 19 03:30:42 2011 (r224208) @@ -841,7 +841,8 @@ f_fstype(PLAN *plan, FTSENT *entry) static dev_t curdev; /* need a guaranteed illegal dev value */ static int first = 1; struct statfs sb; - static int val_type, val_flags; + static int val_flags; + static char fstype[sizeof(sb.f_fstypename)]; char *p, save[2] = {0,0}; if ((plan->flags & F_MTMASK) == F_MTUNKNOWN) @@ -883,13 +884,13 @@ f_fstype(PLAN *plan, FTSENT *entry) * always copy both of them. */ val_flags = sb.f_flags; - val_type = sb.f_type; + strlcpy(fstype, sb.f_fstypename, sizeof(fstype)); } switch (plan->flags & F_MTMASK) { case F_MTFLAG: return val_flags & plan->mt_data; case F_MTTYPE: - return val_type == plan->mt_data; + return (strncmp(fstype, plan->c_data, sizeof(fstype)) == 0); default: abort(); } @@ -900,22 +901,11 @@ c_fstype(OPTION *option, char ***argvp) { char *fsname; PLAN *new; - struct xvfsconf vfc; fsname = nextarg(option, argvp); ftsoptions &= ~FTS_NOSTAT; new = palloc(option); - - /* - * Check first for a filesystem name. - */ - if (getvfsbyname(fsname, &vfc) == 0) { - new->flags |= F_MTTYPE; - new->mt_data = vfc.vfc_typenum; - return new; - } - switch (*fsname) { case 'l': if (!strcmp(fsname, "local")) { @@ -933,12 +923,8 @@ c_fstype(OPTION *option, char ***argvp) break; } - /* - * We need to make filesystem checks for filesystems - * that exists but aren't in the kernel work. - */ - fprintf(stderr, "Warning: Unknown filesystem type %s\n", fsname); - new->flags |= F_MTUNKNOWN; + new->flags |= F_MTTYPE; + new->c_data = fsname; return new; } From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 10:41:26 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D49BA106566B; Tue, 19 Jul 2011 10:41:26 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AB05B8FC0A; Tue, 19 Jul 2011 10:41:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6JAfQwa066938; Tue, 19 Jul 2011 10:41:26 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6JAfQEs066935; Tue, 19 Jul 2011 10:41:26 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201107191041.p6JAfQEs066935@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 19 Jul 2011 10:41:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224211 - in stable/8/sys: kern sys X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 10:41:26 -0000 Author: kib Date: Tue Jul 19 10:41:26 2011 New Revision: 224211 URL: http://svn.freebsd.org/changeset/base/224211 Log: MFC r223966: Implement an RFTSIGZMB flag to rfork(2) to specify a signal that is delivered to parent when the child exists. Modified: stable/8/sys/kern/kern_fork.c stable/8/sys/sys/unistd.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/kern/kern_fork.c ============================================================================== --- stable/8/sys/kern/kern_fork.c Tue Jul 19 09:27:37 2011 (r224210) +++ stable/8/sys/kern/kern_fork.c Tue Jul 19 10:41:26 2011 (r224211) @@ -218,10 +218,22 @@ fork1(td, flags, pages, procp) vm_ooffset_t mem_charged; int error; + /* Check for the undefined or unimplemented flags. */ + if ((flags & ~(RFFLAGS | RFTSIGFLAGS(RFTSIGMASK))) != 0) + return (EINVAL); + + /* Signal value requires RFTSIGZMB. */ + if ((flags & RFTSIGFLAGS(RFTSIGMASK)) != 0 && (flags & RFTSIGZMB) == 0) + return (EINVAL); + /* Can't copy and clear. */ if ((flags & (RFFDG|RFCFDG)) == (RFFDG|RFCFDG)) return (EINVAL); + /* Check the validity of the signal number. */ + if ((flags & RFTSIGZMB) != 0 && (u_int)RFTSIGNUM(flags) > _SIG_MAXSIG) + return (EINVAL); + p2_held = 0; p1 = td->td_proc; @@ -567,7 +579,10 @@ again: sigacts_copy(newsigacts, p1->p_sigacts); p2->p_sigacts = newsigacts; } - if (flags & RFLINUXTHPN) + + if (flags & RFTSIGZMB) + p2->p_sigparent = RFTSIGNUM(flags); + else if (flags & RFLINUXTHPN) p2->p_sigparent = SIGUSR1; else p2->p_sigparent = SIGCHLD; Modified: stable/8/sys/sys/unistd.h ============================================================================== --- stable/8/sys/sys/unistd.h Tue Jul 19 09:27:37 2011 (r224210) +++ stable/8/sys/sys/unistd.h Tue Jul 19 10:41:26 2011 (r224211) @@ -180,8 +180,16 @@ #define RFLINUXTHPN (1<<16) /* do linux clone exit parent notification */ #define RFSTOPPED (1<<17) /* leave child in a stopped state */ #define RFHIGHPID (1<<18) /* use a pid higher than 10 (idleproc) */ +#define RFTSIGZMB (1<<19) /* select signal for exit parent notification */ +#define RFTSIGSHIFT 20 /* selected signal number is in bits 20-27 */ +#define RFTSIGMASK 0xFF +#define RFTSIGNUM(flags) (((flags) >> RFTSIGSHIFT) & RFTSIGMASK) +#define RFTSIGFLAGS(signum) ((signum) << RFTSIGSHIFT) #define RFPPWAIT (1<<31) /* parent sleeps until child exits (vfork) */ #define RFKERNELONLY (RFSTOPPED | RFHIGHPID | RFPPWAIT) +#define RFFLAGS (RFFDG | RFPROC | RFMEM | RFNOWAIT | RFCFDG | \ + RFTHREAD | RFSIGSHARE | RFLINUXTHPN | RFSTOPPED | RFHIGHPID | RFTSIGZMB | \ + RFPPWAIT) #endif /* __BSD_VISIBLE */ From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 10:45:31 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9741D106564A; Tue, 19 Jul 2011 10:45:31 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 870768FC16; Tue, 19 Jul 2011 10:45:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6JAjVQD067112; Tue, 19 Jul 2011 10:45:31 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6JAjVAT067110; Tue, 19 Jul 2011 10:45:31 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201107191045.p6JAjVAT067110@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 19 Jul 2011 10:45:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224212 - stable/8/lib/libc/sys X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 10:45:31 -0000 Author: kib Date: Tue Jul 19 10:45:31 2011 New Revision: 224212 URL: http://svn.freebsd.org/changeset/base/224212 Log: MFC r223967: Document RFTSIGZMB. Modified: stable/8/lib/libc/sys/rfork.2 Directory Properties: stable/8/lib/libc/ (props changed) stable/8/lib/libc/stdtime/ (props changed) Modified: stable/8/lib/libc/sys/rfork.2 ============================================================================== --- stable/8/lib/libc/sys/rfork.2 Tue Jul 19 10:41:26 2011 (r224211) +++ stable/8/lib/libc/sys/rfork.2 Tue Jul 19 10:45:31 2011 (r224212) @@ -5,7 +5,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 14, 2007 +.Dd July 12, 2011 .Dt RFORK 2 .Os .Sh NAME @@ -83,8 +83,18 @@ for information. .It Dv RFSIGSHARE If set, the kernel will force sharing the sigacts structure between the child and the parent. +.It Dv RFTSIGZMB +If set, the kernel will deliver a specified signal to the parent +upon the child exit, instead of default SIGCHLD. +The signal number +.Dv signum +is specified by oring the +.Dv RFTSIGFLAGS(signum) +expression into +.Fa flags . +Specifying signal number 0 disables signal delivery upon the child exit. .It Dv RFLINUXTHPN -If set, the kernel will return SIGUSR1 instead of SIGCHILD upon thread +If set, the kernel will deliver SIGUSR1 instead of SIGCHLD upon thread exit for the child. This is intended to mimic certain Linux clone behaviour. .El @@ -163,6 +173,8 @@ would be exceeded (see Both the RFFDG and the RFCFDG flags were specified. .It Bq Er EINVAL Any flags not listed above were specified. +.It Bq Er EINVAL +An invalid signal number was specified. .It Bq Er ENOMEM There is insufficient swap space for the new process. .El From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 10:48:40 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1D97A1065672; Tue, 19 Jul 2011 10:48:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0CE7A8FC1A; Tue, 19 Jul 2011 10:48:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6JAmdEt067257; Tue, 19 Jul 2011 10:48:39 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6JAmdPC067250; Tue, 19 Jul 2011 10:48:39 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107191048.p6JAmdPC067250@svn.freebsd.org> From: Hans Petter Selasky Date: Tue, 19 Jul 2011 10:48:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224213 - stable/8/lib/libusb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 10:48:40 -0000 Author: hselasky Date: Tue Jul 19 10:48:39 2011 New Revision: 224213 URL: http://svn.freebsd.org/changeset/base/224213 Log: MFC r224085: - Add missing APIs. - Add some rangechecks. Modified: stable/8/lib/libusb/libusb.3 stable/8/lib/libusb/libusb01.c stable/8/lib/libusb/libusb10.c stable/8/lib/libusb/libusb10_desc.c stable/8/lib/libusb/libusb20.c stable/8/lib/libusb/usb.h (contents, props changed) Directory Properties: stable/8/lib/libusb/ (props changed) Modified: stable/8/lib/libusb/libusb.3 ============================================================================== --- stable/8/lib/libusb/libusb.3 Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/libusb.3 Tue Jul 19 10:48:39 2011 (r224213) @@ -542,6 +542,8 @@ The library is also compliant with LibUS .Fn usb_device .Fn usb_get_busses .Fn usb_check_connected +.Fn usb_get_driver_np +.Fn usb_detach_kernel_driver_np . .Sh SEE ALSO .Xr libusb20 3 , Modified: stable/8/lib/libusb/libusb01.c ============================================================================== --- stable/8/lib/libusb/libusb01.c Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/libusb01.c Tue Jul 19 10:48:39 2011 (r224213) @@ -203,6 +203,12 @@ usb_get_string(usb_dev_handle * dev, int { int err; + if (dev == NULL) + return (-1); + + if (buflen > 65535) + buflen = 65535; + err = libusb20_dev_req_string_sync((void *)dev, strindex, langid, buf, buflen); @@ -218,6 +224,12 @@ usb_get_string_simple(usb_dev_handle * d { int err; + if (dev == NULL) + return (-1); + + if (buflen > 65535) + buflen = 65535; + err = libusb20_dev_req_string_simple_sync((void *)dev, strindex, buf, buflen); @@ -233,6 +245,12 @@ usb_get_descriptor_by_endpoint(usb_dev_h { memset(buf, 0, size); + if (udev == NULL) + return (-1); + + if (size > 65535) + size = 65535; + return (usb_control_msg(udev, ep | USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (type << 8) + ep_index, 0, buf, size, 1000)); @@ -244,6 +262,12 @@ usb_get_descriptor(usb_dev_handle * udev { memset(buf, 0, size); + if (udev == NULL) + return (-1); + + if (size > 65535) + size = 65535; + return (usb_control_msg(udev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (type << 8) + desc_index, 0, buf, size, 1000)); } @@ -943,3 +967,49 @@ usb_get_busses(void) { return (usb_busses); } + +int +usb_get_driver_np(usb_dev_handle * dev, int interface, char *name, int namelen) +{ + struct libusb20_device *pdev; + char *ptr; + int err; + + pdev = (void *)dev; + + if (pdev == NULL) + return (-1); + if (namelen < 1) + return (-1); + if (namelen > 255) + namelen = 255; + + err = libusb20_dev_get_iface_desc(pdev, interface, name, namelen); + if (err != 0) + return (-1); + + /* we only want the driver name */ + ptr = strstr(name, ":"); + if (ptr != NULL) + *ptr = 0; + + return (0); +} + +int +usb_detach_kernel_driver_np(usb_dev_handle * dev, int interface) +{ + struct libusb20_device *pdev; + int err; + + pdev = (void *)dev; + + if (pdev == NULL) + return (-1); + + err = libusb20_dev_detach_kernel_driver(pdev, interface); + if (err != 0) + return (-1); + + return (0); +} Modified: stable/8/lib/libusb/libusb10.c ============================================================================== --- stable/8/lib/libusb/libusb10.c Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/libusb10.c Tue Jul 19 10:48:39 2011 (r224213) @@ -719,6 +719,8 @@ libusb_get_driver(struct libusb20_device return (LIBUSB_ERROR_INVALID_PARAM); if (namelen < 1) return (LIBUSB_ERROR_INVALID_PARAM); + if (namelen > 255) + namelen = 255; err = libusb20_dev_get_iface_desc( pdev, interface, name, namelen); Modified: stable/8/lib/libusb/libusb10_desc.c ============================================================================== --- stable/8/lib/libusb/libusb10_desc.c Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/libusb10_desc.c Tue Jul 19 10:48:39 2011 (r224213) @@ -300,6 +300,9 @@ libusb_get_string_descriptor_ascii(libus if (pdev == NULL || data == NULL || length < 1) return (LIBUSB20_ERROR_INVALID_PARAM); + if (length > 65535) + length = 65535; + /* put some default data into the destination buffer */ data[0] = 0; @@ -314,6 +317,12 @@ int libusb_get_descriptor(libusb_device_handle * devh, uint8_t desc_type, uint8_t desc_index, uint8_t *data, int length) { + if (devh == NULL || data == NULL || length < 1) + return (LIBUSB20_ERROR_INVALID_PARAM); + + if (length > 65535) + length = 65535; + return (libusb_control_transfer(devh, LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_DESCRIPTOR, (desc_type << 8) | desc_index, 0, data, length, 1000)); Modified: stable/8/lib/libusb/libusb20.c ============================================================================== --- stable/8/lib/libusb/libusb20.c Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/libusb20.c Tue Jul 19 10:48:39 2011 (r224213) @@ -1081,6 +1081,8 @@ libusb20_dev_get_iface_desc(struct libus if ((buf == NULL) || (len == 0)) return (LIBUSB20_ERROR_INVALID_PARAM); + buf[0] = 0; /* set default string value */ + return (pdev->beMethods->dev_get_iface_desc( pdev, iface_index, buf, len)); } Modified: stable/8/lib/libusb/usb.h ============================================================================== --- stable/8/lib/libusb/usb.h Tue Jul 19 10:45:31 2011 (r224212) +++ stable/8/lib/libusb/usb.h Tue Jul 19 10:48:39 2011 (r224213) @@ -299,6 +299,8 @@ int usb_find_busses(void); int usb_find_devices(void); struct usb_device *usb_device(usb_dev_handle * dev); struct usb_bus *usb_get_busses(void); +int usb_get_driver_np(usb_dev_handle * dev, int interface, char *name, int namelen); +int usb_detach_kernel_driver_np(usb_dev_handle * dev, int interface); #if 0 { /* style */ From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 10:53:47 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B35131065672; Tue, 19 Jul 2011 10:53:47 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A3A248FC08; Tue, 19 Jul 2011 10:53:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6JArlWW067434; Tue, 19 Jul 2011 10:53:47 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6JArllU067432; Tue, 19 Jul 2011 10:53:47 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201107191053.p6JArllU067432@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 19 Jul 2011 10:53:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224214 - stable/8/sys/sys X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 10:53:47 -0000 Author: kib Date: Tue Jul 19 10:53:47 2011 New Revision: 224214 URL: http://svn.freebsd.org/changeset/base/224214 Log: Bump __FreeBSD_version for RFTSIGZMB flag for rfork(2). Modified: stable/8/sys/sys/param.h Modified: stable/8/sys/sys/param.h ============================================================================== --- stable/8/sys/sys/param.h Tue Jul 19 10:48:39 2011 (r224213) +++ stable/8/sys/sys/param.h Tue Jul 19 10:53:47 2011 (r224214) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 802509 /* Master, propagated to newvers */ +#define __FreeBSD_version 802510 /* Master, propagated to newvers */ #ifdef _KERNEL #define P_OSREL_SIGSEGV 700004 From owner-svn-src-stable@FreeBSD.ORG Tue Jul 19 11:04:58 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 969F31065733; Tue, 19 Jul 2011 11:04:58 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 84B938FC0A; Tue, 19 Jul 2011 11:04:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6JB4w7r070021; Tue, 19 Jul 2011 11:04:58 GMT (envelope-from zec@svn.freebsd.org) Received: (from zec@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6JB4waO070019; Tue, 19 Jul 2011 11:04:58 GMT (envelope-from zec@svn.freebsd.org) Message-Id: <201107191104.p6JB4waO070019@svn.freebsd.org> From: Marko Zec Date: Tue, 19 Jul 2011 11:04:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224215 - stable/8/sys/netgraph X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2011 11:04:58 -0000 Author: zec Date: Tue Jul 19 11:04:58 2011 New Revision: 224215 URL: http://svn.freebsd.org/changeset/base/224215 Log: MFC r224107: Clear pending ifnet events, in an attempt at preventing ng_ether_link_state() from being dispatched after we have cleared our IFP2NG(ifp). Modified: stable/8/sys/netgraph/ng_ether.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/netgraph/ng_ether.c ============================================================================== --- stable/8/sys/netgraph/ng_ether.c Tue Jul 19 10:53:47 2011 (r224214) +++ stable/8/sys/netgraph/ng_ether.c Tue Jul 19 11:04:58 2011 (r224215) @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -336,6 +337,7 @@ ng_ether_detach(struct ifnet *ifp) const node_p node = IFP2NG(ifp); const priv_p priv = NG_NODE_PRIVATE(node); + taskqueue_drain(taskqueue_swi, &ifp->if_linktask); NG_NODE_REALLY_DIE(node); /* Force real removal of node */ /* * We can't assume the ifnet is still around when we run shutdown From owner-svn-src-stable@FreeBSD.ORG Wed Jul 20 04:57:41 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 21A12106566B; Wed, 20 Jul 2011 04:57:41 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 111408FC13; Wed, 20 Jul 2011 04:57:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6K4veFQ001683; Wed, 20 Jul 2011 04:57:40 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6K4vets001681; Wed, 20 Jul 2011 04:57:40 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107200457.p6K4vets001681@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 20 Jul 2011 04:57:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224223 - stable/8/sys/dev/usb/input X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jul 2011 04:57:41 -0000 Author: hselasky Date: Wed Jul 20 04:57:40 2011 New Revision: 224223 URL: http://svn.freebsd.org/changeset/base/224223 Log: MFC r223989: Fix for dump after shutdown with USB keyboard plugged in. Modified: stable/8/sys/dev/usb/input/ukbd.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/input/ukbd.c ============================================================================== --- stable/8/sys/dev/usb/input/ukbd.c Wed Jul 20 00:36:47 2011 (r224222) +++ stable/8/sys/dev/usb/input/ukbd.c Wed Jul 20 04:57:40 2011 (r224223) @@ -59,6 +59,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include @@ -386,6 +388,33 @@ ukbd_put_key(struct ukbd_softc *sc, uint } static void +ukbd_yield(void) +{ + struct thread *td = curthread; + uint32_t old_prio; + + DROP_GIANT(); + + thread_lock(td); + + /* get current priority */ + old_prio = td->td_base_pri; + + /* set new priority */ + sched_prio(td, td->td_user_pri); + + /* cause a task switch */ + mi_switch(SW_INVOL | SWT_RELINQUISH, NULL); + + /* restore priority */ + sched_prio(td, old_prio); + + thread_unlock(td); + + PICKUP_GIANT(); +} + +static void ukbd_do_poll(struct ukbd_softc *sc, uint8_t wait) { DPRINTFN(2, "polling\n"); @@ -396,8 +425,9 @@ ukbd_do_poll(struct ukbd_softc *sc, uint if (kdb_active == 0) { while (sc->sc_inputs == 0) { - /* make sure the USB code gets a chance to run */ - pause("UKBD", 1); + + /* give USB threads a chance to run */ + ukbd_yield(); /* check if we should wait */ if (!wait) From owner-svn-src-stable@FreeBSD.ORG Wed Jul 20 20:24:30 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B3B8D106566C; Wed, 20 Jul 2011 20:24:30 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A2D978FC17; Wed, 20 Jul 2011 20:24:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6KKOULT030891; Wed, 20 Jul 2011 20:24:30 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6KKOUPW030889; Wed, 20 Jul 2011 20:24:30 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <201107202024.p6KKOUPW030889@svn.freebsd.org> From: Andrew Gallatin Date: Wed, 20 Jul 2011 20:24:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224233 - stable/8/sys/dev/mxge X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jul 2011 20:24:30 -0000 Author: gallatin Date: Wed Jul 20 20:24:30 2011 New Revision: 224233 URL: http://svn.freebsd.org/changeset/base/224233 Log: MFC r223957: Fix media reporting for dual port CX4 myri10ge NICs Modified: stable/8/sys/dev/mxge/if_mxge.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/mxge/if_mxge.c ============================================================================== --- stable/8/sys/dev/mxge/if_mxge.c Wed Jul 20 18:51:18 2011 (r224232) +++ stable/8/sys/dev/mxge/if_mxge.c Wed Jul 20 20:24:30 2011 (r224233) @@ -2837,7 +2837,7 @@ mxge_media_init(mxge_softc_t *sc) return; } } - if (*ptr == 'C') { + if (*ptr == 'C' || *(ptr +1) == 'C') { /* -C is CX4 */ sc->connector = MXGE_CX4; mxge_media_set(sc, IFM_10G_CX4); From owner-svn-src-stable@FreeBSD.ORG Wed Jul 20 20:24:40 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 95BE1106566C; Wed, 20 Jul 2011 20:24:40 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 84BA28FC08; Wed, 20 Jul 2011 20:24:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6KKOeEQ030932; Wed, 20 Jul 2011 20:24:40 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6KKOe4u030930; Wed, 20 Jul 2011 20:24:40 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <201107202024.p6KKOe4u030930@svn.freebsd.org> From: Andrew Gallatin Date: Wed, 20 Jul 2011 20:24:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224234 - stable/7/sys/dev/mxge X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jul 2011 20:24:40 -0000 Author: gallatin Date: Wed Jul 20 20:24:40 2011 New Revision: 224234 URL: http://svn.freebsd.org/changeset/base/224234 Log: MFC r223957: Fix media reporting for dual port CX4 myri10ge NICs Modified: stable/7/sys/dev/mxge/if_mxge.c Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/dev/mxge/if_mxge.c ============================================================================== --- stable/7/sys/dev/mxge/if_mxge.c Wed Jul 20 20:24:30 2011 (r224233) +++ stable/7/sys/dev/mxge/if_mxge.c Wed Jul 20 20:24:40 2011 (r224234) @@ -2651,7 +2651,7 @@ mxge_media_init(mxge_softc_t *sc) return; } } - if (*ptr == 'C') { + if (*ptr == 'C' || *(ptr +1) == 'C') { /* -C is CX4 */ sc->connector = MXGE_CX4; mxge_media_set(sc, IFM_10G_CX4); From owner-svn-src-stable@FreeBSD.ORG Wed Jul 20 21:17:55 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7105D106564A; Wed, 20 Jul 2011 21:17:55 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5F7578FC0A; Wed, 20 Jul 2011 21:17:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6KLHtgT032534; Wed, 20 Jul 2011 21:17:55 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6KLHtgL032531; Wed, 20 Jul 2011 21:17:55 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <201107202117.p6KLHtgL032531@svn.freebsd.org> From: Andrew Gallatin Date: Wed, 20 Jul 2011 21:17:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224235 - stable/8/sys/dev/mxge X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jul 2011 21:17:55 -0000 Author: gallatin Date: Wed Jul 20 21:17:55 2011 New Revision: 224235 URL: http://svn.freebsd.org/changeset/base/224235 Log: MFC r223958: Update mxge(4) firmware to the latest version available from Myricom (1.4.53a). Modified: stable/8/sys/dev/mxge/eth_z8e.h stable/8/sys/dev/mxge/ethp_z8e.h stable/8/sys/dev/mxge/rss_eth_z8e.h stable/8/sys/dev/mxge/rss_ethp_z8e.h Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/mxge/eth_z8e.h ============================================================================== --- stable/8/sys/dev/mxge/eth_z8e.h Wed Jul 20 20:24:40 2011 (r224234) +++ stable/8/sys/dev/mxge/eth_z8e.h Wed Jul 20 21:17:55 2011 (r224235) @@ -1,6 +1,6 @@ /******************************************************************************* -Copyright (c) 2006-2010, Myricom Inc. +Copyright (c) 2006-2011, Myricom Inc. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -28,7287 +28,7495 @@ POSSIBILITY OF SUCH DAMAGE. $FreeBSD$ ***************************************************************************/ -static unsigned int eth_z8e_uncompressed_length = 367564 ; -static unsigned int eth_z8e_length = 116477 ; -static unsigned char eth_z8e[116477 + 1] = - "\x78\x9c\xec\xbd\x7f\x78\x54\x45\xb2\x37\x5e\x99\x0c\x32\x89\x81" - "\x19\x31\xe2\x88\xb8\x0e\x8a\x1a\x5d\x90\xa8\xb8\x1b\x5d\xd0\x28" - "\xe0\xa2\xf2\x23\xab\xe8\x46\x45\x03\x1a\x70\xd0\x88\x11\x02\x0c" - "\x10\x32\x61\xc0\xdd\x04\xf9\xa5\x46\x8d\x10\x48\x80\xe0\xc5\x5d" - "\x54\x44\xbc\x46\x05\x9c\xdd\x64\xbf\x0f\xf7\x5e\x92\x61\xf7\xb2" - "\xef\x9b\xdd\x2f\x7b\x77\xc4\xc8\x8e\xbc\x01\x46\x32\x90\x31\x99" - "\x39\xfd\xfd\x54\xf7\x39\xc9\xcc\x30\x41\x79\xef\x7d\x9e\xef\x3f" - "\x9b\xe7\x99\x9c\x73\xfa\x74\x57\x57\x57\x57\x55\x57\x77\x57\xd7" - "\x21\xba\xf0\x3f\x3f\x59\xf8\x92\x42\xa6\x86\xe0\xef\xfe\x2f\xca" +static unsigned int eth_z8e_uncompressed_length = 375636 ; +static unsigned int eth_z8e_length = 119802 ; +static unsigned char eth_z8e[119802 + 1] = + "\x78\x9c\xec\xbd\x7f\x78\x54\xd5\xb5\x3f\xbc\x32\x99\xc8\x24\x06" + "\x26\x62\xc4\x29\xc5\x76\xb0\x41\xa3\x05\x89\x16\xdb\xd4\x42\x0d" + "\x02\x1a\x2c\xbf\x14\x6c\xa3\xa2\x09\x1a\xe8\xa0\x11\x22\x44\x18" + "\x20\x64\xc2\x80\x36\x41\x20\xa9\xa0\x46\x09\x09\xbd\xf2\x23\x56" + "\xac\xd8\x02\x62\x45\x19\x24\xf6\x4b\x7b\x93\x0c\xed\x8b\xf7\x9b" + "\xdb\x17\x6f\x47\x6e\x84\x94\x1b\x60\x4a\x06\x32\x26\x33\x67\xbf" + "\x9f\xb5\xf7\x39\xc9\xcc\x30\x41\xb9\xf7\x3e\xcf\xfb\x4f\xf3\x3c" + "\x93\x73\xce\x3e\x7b\xaf\xbd\xf6\xda\x6b\xad\xbd\xf6\xde\x6b\xaf" + "\x43\x74\xe5\x7f\x3e\xb2\xf0\x25\x81\x4c\x07\x8a\x0f\xfd\x37\xca" "\xff\xf3\xef\x9f\x7f\xff\xfc\xfb\xe7\xdf\x3f\xff\xfe\xf9\xf7\xcf" - "\xbf\xff\x7f\xff\x82\x29\x34\xfa\xb4\xc9\x4c\xbf\x5f\x4f\xd4\xe9" - "\xb1\x0c\xf5\x53\x57\xf1\x5b\xaf\x8b\x08\x5e\xa5\x60\x9c\x1f\xca" - "\x57\xfe\xbd\x86\x34\xd3\x7a\xb2\x5c\x63\xa3\x8c\x71\x9b\x88\xaa" - "\x06\x8b\xf6\xd7\xdf\x14\xc1\x15\x6f\x8a\xf6\xf1\xdb\x89\x9a\x86" - "\x13\xbd\x3e\x58\x84\x00\x63\xba\x9f\x9e\x9a\xc6\x30\x56\xe0\x99" - "\xdf\xaf\x1c\x2c\x82\x48\x2f\x41\xfa\x41\x4e\x5f\x3e\x18\xb0\x32" - "\x89\x3c\x6f\x8a\x70\x0c\x5c\x0b\x97\x67\x98\xe3\x87\x49\x5c\xea" - "\x13\xe0\x30\x8c\x06\x3f\x15\x8c\x3f\x0f\x8c\x0c\x03\xaf\x90\x89" - "\x52\x18\x5e\x87\x87\xec\x21\x8f\xf7\x32\x94\x0d\xa1\x3d\x59\x5c" - "\x76\x1d\xf2\x08\x0f\xa5\x36\xb9\x22\xe4\xb8\x86\x52\x8e\x51\xfa" - "\x16\x5c\x4d\xb8\xbe\xc1\x6d\x5d\xa1\xca\x0d\x67\x18\x28\x9b\xd2" - "\xe9\x49\xcb\xee\x29\x0b\xd8\x8e\x32\x32\x23\xef\x9c\x90\xc9\x6b" - "\x52\x79\x6d\x69\x7a\x5e\x13\xf2\x4e\x37\xf2\xaa\x77\xa6\xfb\xf5" - "\x77\x17\xe3\x9d\x2b\xfe\x9d\xf9\x35\xfd\x5d\x06\xde\x55\x25\xe0" - "\x67\xf6\x75\x45\xe8\x18\xa5\xed\x04\x2e\x8e\x46\xf4\x08\x97\xd1" - "\xf3\x5f\x82\xfc\x4d\xf1\xb0\x88\xf4\x77\x83\xf0\xce\x1f\xff\x6e" - "\x7f\xb6\xfe\xee\x72\xbc\x8b\xc4\xbf\x4b\x31\xca\xd9\x3b\x3d\xe9" - "\xf6\x24\xed\xe4\xfa\x53\x54\xdd\xdc\x86\xf4\x31\xc8\x53\xce\x79" - "\xa6\x39\xca\x89\xfb\x8a\xdf\x35\xd6\xf5\xd4\xcf\x79\x66\x18\x70" - "\xfc\x28\x1f\x43\x53\xd0\x32\xbd\xd4\x28\x3f\xde\xc1\x30\x48\xd2" - "\x90\xe1\xf8\x29\x6d\x22\xc3\xe1\x67\xdc\x0f\xe5\x76\xeb\xf7\x0e" - "\x6e\x5f\x6c\x9f\x13\x99\x01\xb6\x1f\x0c\xd1\x8b\xf0\xeb\x6f\x31" - "\x78\x60\xbe\x5d\x68\xee\x2b\xc8\x2c\x56\x6d\xa9\xd3\x3c\x82\x7c" - "\xae\x30\x39\x86\x90\xfb\x28\x5d\x6c\x07\x7e\xb4\x76\x09\x59\xdc" - "\xc5\x22\xec\x73\xb5\x53\x4b\xb0\x9d\xdc\x41\x11\xf0\x45\xce\x50" - "\xd9\x19\xb2\xf8\x22\x27\xa8\xec\x25\xb2\x37\x95\x7e\x4d\xc9\xf8" - "\x4b\x33\x09\x72\x0f\xe5\xb2\x6d\xd4\x52\xd3\x46\xee\x9a\xf8\xb2" - "\xee\xab\xc8\xde\x8c\x67\xf4\x9d\x95\xf1\x68\x72\x44\x28\x92\xbe" - "\xa5\xae\xf4\x6d\x32\xbb\x87\x91\xa9\xb9\xd0\x6b\xe0\xe2\x67\x5c" - "\x56\x1e\x27\xcb\xb6\xd9\xe0\xa1\xe3\x8c\xef\xbb\x75\x1f\x2c\x09" - "\x9b\x1a\xed\x93\xa8\xd1\x7e\x84\x9a\xec\x63\xa9\xc9\x35\x9e\xd6" - "\x1e\xa7\x8c\xc6\xf0\x18\x6a\x32\xdf\x07\x19\x1b\x4f\xbe\x76\xdc" - "\x3b\xa2\xc8\x13\x22\xc7\x42\x02\x7f\x5c\x7c\xa8\xea\x39\xb2\xf8" - "\x15\x4c\xd0\xf7\xe2\x23\xbf\x2b\x21\x62\xfa\xf2\x73\xb2\x76\xcc" - "\xbf\x82\xec\xc0\x2f\x00\x5c\xee\x38\x4a\x19\x97\x0d\xb7\x53\x36" - "\x70\xee\xef\xab\x8e\x90\xb9\x94\xd2\xfa\x90\xad\x4c\xcd\x23\x65" - "\xbc\x7d\xf3\x9b\x22\xc0\x3c\xda\xb1\x34\x1f\x72\x9a\x31\x09\x75" - "\xb7\x73\x7d\x6b\x21\xeb\xee\x2d\x64\xee\x58\x94\x9f\x52\xfb\xa6" - "\x68\xc3\x3b\xa7\xf1\x0e\xfc\xd4\x86\xf7\x81\x51\x99\x64\xf3\x45" - "\x72\xe9\x8b\xae\x80\x99\x61\x0c\x0c\x51\x0a\xc3\xb3\xba\x28\x15" - "\xed\xe9\x07\x7c\xee\xa8\x45\xfa\xb5\xc8\x87\xf2\x3b\xfc\xf4\x9a" - "\x9d\xcb\x8b\xcb\x9f\x08\x69\x97\x3f\x71\x46\x7b\xeb\x89\x0e\xf1" - "\xd6\x13\xa7\xa3\x6f\x3d\xf1\xad\x7b\x31\x59\xa2\x97\x3f\x11\x6c" - "\x29\x96\x7d\x60\x6b\x29\x46\x1f\x44\xc9\xb2\xec\x04\xd9\x9e\x7a" - "\x09\x7d\x1f\xf9\x1b\x2d\x9b\x43\x76\x2d\x6d\x47\xbe\x2f\xf2\x67" - "\x7a\xaa\x94\x04\xee\x9d\xc9\xda\xd7\x91\xfe\xae\x5f\xc9\x90\x05" - "\x6d\x1a\xe0\xf0\x9b\xea\xaa\xb9\xde\x60\xda\x87\x7e\xfc\xda\xf0" - "\x0b\xe0\xd7\x2e\xd2\xdf\x65\xd9\x74\x0f\x5c\x9e\x42\x9b\xbb\x88" - "\x46\x69\x94\x72\x9c\x06\x8c\x01\xfe\xb6\x3e\xe8\x36\x54\x5b\xb5" - "\xf7\xd0\x0d\xe5\x54\xd6\xd9\xe9\x24\xd6\x4d\xac\x97\x58\x4f\xa1" - "\x9e\x0a\xd4\xd3\x2a\x65\xf1\x4d\x11\x12\xe9\x7b\x0f\x21\x3d\x10" - "\x5a\xea\x4c\x09\x2e\x75\x9a\x3a\xd2\xf7\xfe\x27\xf2\xec\xf4\x9b" - "\xb6\xd8\x74\x1a\x06\x18\x16\x64\x22\x38\x20\x42\xa9\x80\x59\xfc" - "\xc9\xd9\x56\xf3\xa6\x37\xc5\x11\xe4\x3b\xdc\x03\x0b\xb0\x01\x07" - "\xf4\x1f\x10\x30\xd2\x40\xeb\xb6\x35\xc8\xc7\xe5\x7d\xe1\x5c\xd6" - "\xdf\x7e\x5f\x51\x80\xac\x11\x4a\x17\xdd\xaa\x3e\xe4\x09\xb0\x9e" - "\x1d\x10\xa6\x8b\x3a\x3d\x94\xc7\xb0\xb9\x9c\xaf\x3d\x40\x28\xf7" - "\x9f\xc2\xed\x84\x7e\xa3\x29\x9d\xc2\x99\x02\x9d\xde\xd6\x88\xf2" - "\xaa\xee\x81\x79\x06\x8e\x5c\x07\xf7\xb5\xc4\x13\xfc\xd0\x58\x14" - "\xa6\x01\xd5\x94\x8a\x72\x0f\x33\x3c\x86\x05\x3e\xf0\xa3\xad\xff" - "\xd9\x58\x14\x24\x4d\xc4\xc1\xf4\xeb\xf0\xea\xe2\xe0\x21\x5d\x00" - "\x1e\xf3\x5f\x13\xca\x0c\xa8\x93\xf0\x1e\xfa\x44\x63\x78\x61\x32" - "\x3b\x24\xbe\x8f\x32\x8c\x4e\xd6\x31\x80\xe9\x5d\x78\x2f\xb5\x93" - "\xd5\x12\x74\x3b\x53\x5b\x4a\x89\xb8\xfc\x07\x65\x81\x7e\xa2\x23" - "\x3f\x95\x79\x8e\xdf\xfb\x22\xa7\x91\x67\xe0\x37\xa2\xc3\x99\x3a" - "\xa0\x9d\xcc\x8c\x33\xca\xbb\x18\xcf\xd8\xbe\x7c\x68\xc2\xa3\x63" - "\xe9\xd1\xf1\xf7\x8f\x1f\x4b\x93\xef\x19\x37\x96\xb2\xef\x18\x99" - "\x7d\xdb\x4f\x73\x6e\xa3\xbc\x5f\x3e\x34\x96\xf2\xa6\x8c\xa5\x87" - "\xf1\xcb\x7b\x78\xc2\x43\xe3\x27\x3c\x3c\x96\xf2\xef\xbb\x1f\x4f" - "\xe3\xc6\xde\x92\xfd\xf3\x91\x79\xe3\xee\x9f\x40\xbf\x98\x76\x6b" - "\xf6\xad\xb7\xd2\x3d\x13\x26\xdd\x92\x9d\xad\x5f\x6f\xc9\xe6\x2c" - "\x8f\xe7\x4c\x78\x78\x64\xde\xbc\x17\x4b\x5e\x1c\x39\xe5\xfe\x71" - "\x9c\xc2\x63\x72\x0c\xef\x64\x45\xcf\x6a\x4c\xe3\x90\x38\x35\x91" - "\x34\xe8\x8c\xcd\xe8\x7b\xfc\xda\xbd\x65\x47\x21\xfb\xb6\x3f\x6f" - "\xe6\x3e\x93\xba\xd5\xca\xe3\x95\xb9\xd3\x63\x3d\x02\xda\xe5\x31" - "\xed\x30\xa6\x21\xcf\xe0\xc5\x78\x77\xa3\x3e\x76\xf4\xc3\xfb\x48" - "\xfc\xfb\x41\xd0\xb3\xd6\x51\x2d\x0e\x22\x1f\x7e\xa0\x77\x08\x3a" - "\x10\x74\x0d\x52\x87\x3b\xbf\x1f\xf8\x3a\x05\x75\xb4\x41\x26\x41" - "\x1b\x5b\x4e\x8c\xac\xb7\xa1\x5f\x0e\x39\x96\x50\xea\x49\xb2\x5d" - "\xd2\x52\x92\x4b\xdc\x3f\xbe\x12\x1d\xc6\x99\x1e\x18\xe9\x12\x06" - "\xfa\x1c\x70\x0e\xeb\x70\xca\x63\xf4\x82\x9f\xe1\xac\xc5\x3b\x1d" - "\xd6\x23\x2d\xd0\x0f\xd0\xdf\xbf\xd1\xdc\x59\x24\xd2\xb7\xec\xd0" - "\xba\xb3\xe4\x98\x80\x72\x0d\x06\x3f\xa3\xfe\x50\x13\xea\x14\xdb" - "\x26\xa6\xa0\xff\x53\x30\x56\xa1\x2d\xd6\x26\xf0\x35\xe4\xe8\xc3" - "\xa0\xe8\xce\x27\x95\x76\x89\x39\xba\x0a\xcf\xab\x3e\xfc\x56\xb8" - "\x91\xb6\x44\xa6\xf5\xc3\x33\xec\x09\xf0\x91\x70\x52\xf4\x14\xd2" - "\xe7\x52\x2a\xd2\xff\x00\x5a\xb7\xca\xfc\xa7\x64\xf9\xfe\x48\xdb" - "\x0e\x78\xdf\x6a\xe9\x1f\x9e\x06\xef\x70\x1a\xec\x84\x4b\x2a\x51" - "\xbe\x83\xf5\x9d\xd2\xc1\x83\xdf\xe6\x31\x0e\xed\x08\x2a\xf8\xfa" - "\x33\xe4\x55\xe1\x30\xf8\xed\x46\xd0\xa5\x11\xa3\x56\x53\x29\xdb" - "\x36\x97\xa0\xfd\x03\xf2\xd5\xf8\x38\xb8\x9a\xf3\x6a\x22\x9f\x84" - "\x25\x7a\x00\x70\x43\xde\x25\xed\x74\xac\x98\x4c\x7e\xba\x64\x8c" - "\xe6\x76\x52\x4c\x5b\xb2\x18\x0f\xe0\x6d\xee\xec\x76\x62\xbc\xbc" - "\x64\x84\x2c\x0b\xfc\x74\xdc\x38\x8f\x9d\xf1\x67\x1d\x81\x7e\x1d" - "\x8d\x3e\x4f\x43\x7d\xc1\x84\x3e\xcf\x60\x7a\x00\xdf\x56\x0d\x57" - "\xc0\xc9\x14\x8b\x9c\xc0\x8b\x4c\x4c\x0f\x7f\x2f\x8c\x90\xe2\xa9" - "\x41\xd9\x09\x3c\xf5\x24\x60\x8f\x8d\x79\x9f\x97\xf0\xfe\x1e\xbc" - "\xbf\x57\x7f\x0f\x59\x1d\x54\x9c\x50\xff\x6a\xbc\xbf\x8f\xfb\x10" - "\xb2\x98\xea\x27\xdb\x8e\xcd\x6c\x4b\xf6\xe6\xaf\x4b\xc8\xbf\x17" - "\xf9\x1f\x00\xbe\x21\x1e\x27\x38\x7f\xad\xce\xf7\xc8\x6f\x41\xfe" - "\x43\x09\xf5\x0f\x43\xfe\x87\x63\xf0\x4b\x68\xff\xa5\x0d\x78\x9f" - "\xcf\x7c\x8a\x6b\x21\xf2\xf4\x67\xf9\x67\xdd\xd3\x58\xc4\xfd\x73" - "\xa9\x23\x21\x7f\x2e\xf2\x3d\xcf\x74\x96\x34\xea\x60\x1a\xd9\x76" - "\xe8\x76\xcd\x11\x85\xc3\xa5\xd3\x12\xca\x94\xa0\xcc\x7c\xa6\xaf" - "\xe4\xb3\xce\xa4\x65\x2a\x12\xca\xec\x90\x7c\xaa\xea\xd1\xfb\x58" - "\x95\xd1\xf5\x5a\x2c\x0c\x6e\x1b\x6c\xad\x4b\x0f\xc6\xc3\xb8\x6c" - "\x07\xea\x5d\xba\x46\xe9\x8c\x8b\xc1\x13\xb7\x22\xed\x6d\xc0\x3c" - "\xc3\x7c\x04\x39\x0b\xf9\x82\x61\xe8\xdd\x89\x19\x8a\x77\x33\x47" - "\x5a\x4b\x89\xef\x47\xf2\x3d\xc3\x16\xdd\x93\x74\x79\xca\x1c\x89" - "\x2b\xa7\x67\x72\x3a\xcb\xb1\xe8\x7e\x50\x53\x30\x33\x7f\x01\x79" - "\x37\xe1\x39\xaa\xd7\xf1\x2a\x9e\x53\x80\xff\x69\xe8\x74\xf0\xec" - "\x44\xe6\xc7\xd1\x48\xaf\xd4\xdf\x2f\xe7\xfc\xb8\xbf\x45\xbf\x4f" - "\x01\x8f\x9d\xd6\xe5\x0c\x32\x75\xd9\x62\x59\x37\xe4\xca\x28\xaf" - "\x29\xbe\x1f\x87\x77\xb3\x70\xbd\x1f\xd7\x5f\xe0\xfa\x0b\x5c\x47" - "\xba\xcf\x90\xdd\x1d\x95\xf2\xc5\xcf\x57\xe0\xfa\x10\xae\xfd\x70" - "\x7d\x18\xb8\x7d\x0b\xba\x07\x83\xe0\xe9\x04\x9e\x69\x47\x1f\xb2" - "\xdc\xf7\x57\x7d\x98\xe9\xe7\x3a\xa3\x86\x2e\x38\xd5\x9b\xa6\xeb" - "\x07\x5d\x1e\xf4\xb4\xee\x89\x4c\x97\x3c\xc0\xdf\xcb\xf5\x0b\x05" - "\xab\x9f\xea\x27\x95\x47\x53\xe5\xcc\xaa\xbf\xf5\x34\x95\x2f\x25" - "\xb6\x4e\x5c\xd7\x97\x85\x84\xc0\xb5\x94\xe9\xea\xa7\xcb\xca\x41" - "\x13\x33\x9e\xf3\x98\x4e\x32\xbf\x84\x7b\x69\x7b\x4c\x7f\xc3\xb6" - "\xbf\x6c\x6f\x42\x7f\xb3\x9c\xaf\x91\xfd\x0d\xda\x19\x38\x33\xfe" - "\xe0\x69\x1e\x27\x2f\x32\xf8\x06\xfc\xdd\xde\x2b\x63\x83\xcd\xf1" - "\x70\x14\x5f\x31\x7f\x0c\x2c\xd6\x65\x12\xf4\x82\x0e\x0b\xa5\x96" - "\x32\xaf\x0e\x1e\xed\xa7\xdf\x4e\x94\xb6\xd8\xaa\x0f\xcf\xf2\xfb" - "\x10\x74\x13\xe7\x4f\x2d\x66\x19\x1b\x3c\xcd\x78\x2f\xdf\xa5\xed" - "\xcb\x63\x9c\x52\x8b\xe4\xbb\x62\x3f\x58\xcc\x78\x27\xeb\xe1\x77" - "\x25\xf2\xdd\xea\x5e\xb8\x5b\x0e\xe8\x70\x53\x93\xd9\x52\xa2\x62" - "\x4b\x03\x18\xd4\x74\x53\x39\xf5\xf3\x45\x0e\xd3\xd4\x88\x88\x8e" - "\x2c\xa7\x34\x5f\x64\x27\xdd\x48\x74\x89\x2f\x72\x84\x6e\x22\x1a" - "\xe6\x8b\x54\x61\x6c\xaf\xe7\xf7\x5f\xdc\x40\x29\x29\xb8\xba\xaf" - "\x2f\x37\xa5\xf8\x22\x25\x34\xbc\xdc\x8c\x6b\x11\xdd\xd7\x4f\x74" - "\xfa\x22\x93\x90\xaf\x90\xa6\x46\xc5\xa9\xf1\xfd\xc4\xdf\x0b\xa2" - "\x64\x9b\xf4\xb2\x70\xfb\x22\xb0\xb3\x23\x07\x91\xae\x89\xa9\xd1" - "\xef\xf0\xeb\x14\x5a\xc5\x96\x03\x53\xa3\xa7\xc4\xb8\x97\xbf\xc0" - "\xf3\xdf\x85\x30\x91\xf0\x45\xc6\x50\x4b\x28\x84\x7c\x6e\x21\x2a" - "\xb7\x34\x3c\x75\xc6\x44\xdd\x18\xa3\xb5\xca\x2d\xd0\xe3\x5b\x5a" - "\xbb\xd1\x0e\x8c\x5f\xff\xbb\x7b\x29\xae\xab\xb6\xfc\x2f\xf9\x5c" - "\xb1\x25\x20\x2c\x5b\x5a\x6f\xc6\xa4\x85\xdb\xe0\x8b\xb4\x51\x01" - "\xcc\xee\xa9\x8b\x83\x82\xf1\x1f\xb8\x9c\xe7\x2c\x63\x08\x7a\xd1" - "\x3a\x75\xb1\x5b\xe0\x9d\x45\xa4\x6d\x69\xf5\x45\xda\x09\x75\x04" - "\x00\xef\x6b\x09\xaf\x62\xab\x05\x79\x83\x9c\x2f\x16\x0e\xc3\xe0" - "\xbc\x53\xa3\x64\x15\x95\x5b\x2d\xdd\x69\x5b\xc2\xdd\x69\x5b\xed" - "\xf8\x4d\x14\xe9\x5b\x1f\x17\x9e\xcc\xdf\x09\x8c\xa7\x28\xef\xc4" - "\xb3\x2b\x8c\x39\x82\xa4\x65\x94\xfa\x23\xbf\x13\xfc\x32\x1e\x7c" - "\x07\x7c\xb7\x56\x4b\x7c\x57\x6d\x7d\x2b\x2c\xdb\xb1\xf5\x4d\xd5" - "\x8e\xad\x6f\x70\x7a\x07\x6c\x09\xdc\x37\x74\xa8\x77\x9f\xa0\xdc" - "\x34\x59\xae\x62\x6b\x83\xb0\x6c\x3d\x10\x86\x3c\x81\xae\xe5\x4c" - "\x47\xd0\xb5\x9c\x69\x09\xf8\x0d\x3e\xd7\x6a\x12\x69\x5b\x0f\x00" - "\x9f\x56\x94\x3f\xde\x2d\xc7\xf8\xad\xe1\xb0\x82\xdd\x09\x38\xd3" - "\xc1\xaf\xa9\x80\x11\x16\x15\xdb\x2c\xdd\x1e\x07\x4d\x5d\x2c\xc2" - "\x53\x23\xcb\x23\x05\x8b\x29\x75\x04\x95\x03\xdf\x7d\xa0\x51\x21" - "\xda\xd9\x84\xeb\x78\xbc\xa7\x4b\x51\xd7\x17\x80\x1b\xe6\xfa\x44" - "\xe5\x36\x8b\x48\xdf\x06\x5b\x87\x0a\x19\xa7\xef\x3c\x64\xc3\xb3" - "\xfd\x3b\x89\xdf\xb6\x1c\xad\x62\x5b\xbe\x66\xd9\x36\xd1\xe0\x21" - "\xe6\x1f\x45\xb7\x2a\x9a\x12\x12\x11\x5f\x64\x13\x81\xc7\x6c\x2d" - "\xa1\x23\xfc\x1e\xf3\x8a\x9d\xe8\x67\xe6\xa9\x12\x5c\xeb\x89\xf9" - "\xa7\xa5\xf8\x65\xce\xfb\x05\xf3\xd0\x94\xe2\xd0\xf2\x91\x54\x9c" - "\x82\x67\x77\x41\xc4\x42\x4f\x15\x9b\xcb\xa3\x15\xdb\xb2\x5a\x8a" - "\xb9\x5f\x0e\xa3\x0c\x97\x2b\x22\x6b\x0a\x6c\xeb\x14\x11\xb1\xba" - "\x82\xe6\x01\x4e\xb7\x68\x09\x4d\x42\xde\x62\xe2\xf6\x30\x1f\x71" - "\xfe\xc9\xed\xc2\x1f\xb5\x6c\x6b\xe5\xb6\x89\x81\xe5\xd4\xdc\x7e" - "\x3b\xf1\xfc\xa6\xb9\xbd\x9e\xf9\x54\x13\x96\x6d\x3b\xc0\xa3\xdd" - "\x93\xdb\xcb\xfb\x3d\x75\x86\x52\x90\x16\x6d\x76\xee\xc4\xfb\x26" - "\xe4\x3b\x28\xf9\x76\xca\x99\x88\x35\x62\xd9\x66\x8f\x54\x6c\x6b" - "\x98\x72\xa6\x5b\x34\x3b\xab\xe8\xc9\xf6\x72\xd0\x6a\x27\x4d\x3e" - "\x11\x49\x6d\x29\x2e\x44\x9e\x4e\xa4\xd7\x4b\xfe\x9f\x7c\xa2\x43" - "\x4c\x79\x49\x9c\x9a\x72\xe6\xef\x62\xb2\x53\x7c\x51\xe0\xa2\x81" - "\x17\x2f\x17\x1a\xcb\xc5\xc1\xb6\x9d\x74\xf1\x11\x3f\xb1\x4c\x4c" - "\x9a\xa9\x89\xc9\x27\x4e\x89\xa7\x5e\x62\xda\x8c\xa1\x66\x27\xe4" - "\xc7\x55\xc5\xf4\xce\x69\x76\xee\x45\xfd\xe3\x01\xd7\x2d\x7c\xae" - "\x4d\xc8\xeb\xb5\x3e\x79\xc2\x46\x07\xdb\xaa\x28\x92\xb6\xcd\x1e" - "\xad\xdc\x96\xa5\xa5\x6d\x9b\xa8\x55\x6e\xcb\x17\x69\xdb\x76\x44" - "\x2a\xb7\x35\x44\xd3\xb6\x81\x07\xea\xb3\xd0\x4f\x69\xdc\xe7\x5d" - "\x98\xef\xe3\xf9\xfa\x2e\xee\xff\x8a\xfa\x1c\x61\xa9\xcf\x87\x2e" - "\x14\x8a\xf7\xeb\x73\x78\xce\x2e\xd2\xea\xf3\xbb\xd3\xea\x27\x22" - "\x5f\xbe\x92\xaf\x7a\x27\xf3\xa5\x1c\x8b\x56\xd5\x3f\x8b\xb1\x23" - "\x15\xef\x5d\xf8\x55\xe0\x57\x8d\xb4\x00\xe0\x5f\xd2\xa9\x60\x06" - "\xc4\x5d\xeb\x61\xa3\x62\x8e\x9e\xb6\xdd\x32\x35\x7a\xb7\x00\x0d" - "\x21\x27\xf5\x01\xad\xb2\x3e\x2c\xd2\xb7\x67\x85\x25\xef\x6f\xbf" - "\x81\x61\x77\x2f\xcd\xe2\xb9\xbc\x59\x54\x6e\xcf\x41\xda\x6f\xc2" - "\xcc\xab\x96\xed\x3b\x34\xcb\x3b\xd0\x45\xdb\x1b\x1e\x7c\x59\x04" - "\xa3\x15\xdb\x5b\xb5\x8a\xed\x07\x22\x17\xc1\xf6\x75\xed\x25\xd6" - "\x4f\x91\xfd\x02\x34\xf8\x03\xe8\x51\x2f\xfb\xdf\xe7\x82\x0c\x2c" - "\x1e\x52\xde\xdc\x0e\x5e\x28\x7e\x4f\xea\xa6\x96\xd0\x61\x49\x53" - "\xe0\xb1\x83\x79\x8a\xfb\xf7\xa9\x62\x2a\x47\x5d\x0d\x5a\xe5\xf6" - "\x03\xd1\x4a\xc0\x4d\x43\x3d\xe9\x3b\x1e\x08\x4b\x79\xdd\x01\x7e" - "\xdd\x8b\x32\x7f\x20\xc5\xe3\x3b\x26\xf6\xa5\x23\x59\x57\xb1\x7e" - "\x9a\x1a\x09\x33\xcf\xfc\x83\xf5\x9a\xd2\x53\x54\x60\xe8\x29\xd6" - "\x51\x3c\x9f\x60\x3d\xa5\xe9\x7a\x4a\xd3\xf5\x94\x7c\xb6\x40\xd7" - "\x54\x6c\x69\x65\x7d\x34\xd5\xa5\xf4\xcc\xd4\x68\xb6\x00\x6f\x64" - "\x00\x46\xab\xea\x0b\xe4\x59\xb5\xe5\x6b\x99\x5f\xd2\x69\xab\x45" - "\x83\xbe\xd1\xa0\x6f\x34\xa5\x6f\xf2\x75\x7d\x63\x32\xf4\x4d\x14" - "\xe3\x1a\x64\x4a\x4b\xa6\x6f\x34\x5d\xdf\x44\x85\xd2\x37\x9a\xae" - "\x6f\x38\x3d\xaa\xeb\x9b\x68\x12\x7d\xa3\x55\x6c\xe5\xf6\xa6\xea" - "\x7a\xa6\x9c\xf5\x0c\xb7\x57\xab\xdc\x7a\x40\x53\x7a\x26\x80\xb9" - "\x84\x89\xf5\x4c\x14\x65\x34\x43\xcf\x74\x4a\x7d\x60\x61\x5d\xd3" - "\xfd\x2b\x82\xfe\x74\x10\xeb\x18\xa9\x4f\x22\xc3\x22\xac\x4f\x40" - "\xbf\xbb\x13\xf5\x89\x58\xb5\xcd\x8e\x7b\x9b\xd2\x53\xdb\x26\x5a" - "\x97\x8b\x08\xf4\x49\xd6\x54\x57\x08\x7d\xfd\x37\xcc\xa9\xa1\xb7" - "\x5d\x25\xe5\x3e\x57\x84\xa0\x07\xf2\x45\x4b\x39\x41\xe7\x80\x7f" - "\xa3\xd0\x15\x44\x90\xcb\x1d\x90\xcf\x56\xd4\xdd\xd0\x52\xfc\x67" - "\x82\xbc\xdb\x27\xb7\x77\xf8\x9e\x0a\x65\xd9\x26\x9f\x10\x41\xd0" - "\xc7\xff\x54\x71\x39\xf4\x4b\x56\xb0\xb9\x7d\x1f\x4d\x6a\x13\xda" - "\xa4\x19\x7e\x07\xf0\x68\x98\x3c\xc7\x6b\x7d\xea\x25\x1b\xe4\x4c" - "\x78\xa1\x17\xff\x73\xf2\x09\x9b\x75\x7a\x1b\xfd\x68\xd2\x4c\xa1" - "\x41\x9e\x40\x77\xc8\x19\xe4\x11\x32\x36\x11\x32\x97\x0f\x39\xdb" - "\x11\x49\x90\x33\xc8\xcc\xf5\xb8\x77\x28\xfa\xd5\xe7\x43\xce\x72" - "\x34\x39\x9e\xb5\xc9\x39\x1c\xe4\x21\x9f\xd7\xb8\x20\x6b\x39\x90" - "\x0b\x29\x6b\x9a\x2a\xe7\xd4\x98\x7e\x26\x5d\xd6\xd0\x17\x78\xef" - "\xc2\xaf\x02\xbf\xe4\xb2\x56\x1c\x23\x6b\x2f\xe9\xb2\x96\xa6\x64" - "\x0d\x7d\x9a\x1a\x5d\xaa\xe4\x8d\xe1\xf3\x3c\xaf\x47\xde\xd2\xb7" - "\xef\x10\x6c\x4f\x4a\xde\x61\x99\xdb\x8e\x71\x65\x7b\x2b\xe4\xed" - "\x80\x56\xf1\x0e\xe0\x89\x20\xeb\x4d\xf0\xe6\x7f\xf1\x58\x37\xa5" - "\x58\xfc\x57\x41\x74\x48\x39\xea\x6a\x85\x2e\xfb\x3b\xf4\xe8\x7f" - "\x3d\x15\xa2\x3a\xc0\xda\xa1\xa5\x6d\x6f\x80\x3c\x1d\xd0\x2a\xa5" - "\x3c\x4d\x8c\x2e\x65\x98\x3b\x26\xf6\xc0\x90\x63\x65\xbc\x3c\xf5" - "\xb5\xbe\xd8\xe9\xb9\x7a\x8c\x9f\x3e\x29\x61\x7b\x05\xf7\x13\xfd" - "\xd4\x30\x51\xbf\x87\xfd\x53\x23\xd7\xa6\x59\x06\x8b\xcb\xe8\xb2" - "\xe3\xe4\xb0\x80\xdf\x09\xf7\x19\xb8\xcf\x98\x7a\xe3\x17\xb0\x23" - "\x02\xcc\x53\x9d\x2c\x87\xc2\x33\x9a\xe7\x5c\xb9\xe0\x43\x8b\xe8" - "\xcc\xca\x10\xe9\xbb\xcb\x44\xb7\x9d\xd7\xb0\xac\x78\x1e\x88\xf6" - "\x0f\xc7\x75\xd0\xa6\xb3\x94\x89\x9f\x7d\x93\x47\x2b\x67\xdb\x09" - "\xf7\xd9\x62\x91\x3d\x7d\xed\x42\x1a\x61\x0d\x91\xa5\xd6\xa3\xe5" - "\x5b\x97\xdb\x78\x2d\x27\x93\xef\x85\xa7\xce\x59\x7b\x96\xcc\x6c" - "\x57\x6a\x69\xa8\xcf\x65\x15\x62\x7e\x16\xd5\xce\x83\x7e\xf0\x90" - "\xbd\xd6\x23\x76\x45\x3b\x99\x06\x5b\x1a\x0c\x5c\x18\x37\xe0\x79" - "\x15\xf0\x1c\xfa\xc8\xe2\x5c\xfa\x83\x8b\x92\xae\x81\x76\x7a\x1c" - "\x3d\xed\xef\xe3\xfd\x74\x83\x26\x7d\xbc\x2f\x35\xe8\xd4\xc7\x7a" - "\x99\x99\xc7\xe8\xe8\x42\x11\x5c\xf7\x1c\x31\x2d\xec\xee\x88\xf8" - "\x0a\x74\x2c\x2f\x8b\xd2\x55\x53\x17\x5f\x2d\x7c\xed\xc2\xeb\x73" - "\x9d\xa0\x5a\xbc\x2f\x2b\x15\x9a\x96\xb6\x7b\x86\xa8\xdc\x3d\xbd" - "\x63\xa1\x88\xf0\x5a\x09\xea\xf0\xfb\xe9\xce\x72\xd5\x17\xdb\x72" - "\xe4\x3c\xcf\xb2\x7b\x3a\x60\x5d\xc2\xb0\x9a\x51\x3e\x5a\xb9\xbb" - "\xb0\xd3\x33\xcc\xe2\xa7\x3f\x4c\x97\xf9\x2c\xdb\x72\x8a\x97\xd0" - "\x95\xc7\x69\x58\xae\xb4\xf5\x2b\x76\x97\xb0\x3e\x40\x9a\x0d\x69" - "\x93\x00\xdf\x85\xfc\x39\x7e\xfa\xb0\x5a\xd9\xb1\xc3\x26\x19\xf9" - "\x70\xef\xe0\xfb\x38\xfe\x49\x91\xdb\x2b\xe8\x2f\x47\xef\x66\x0b" - "\xa7\x99\x63\x36\x5f\x6c\xf8\xe5\x26\x7f\xdd\xab\xcf\xb7\x35\xc0" - "\xd6\x22\xf7\x32\x1a\x8a\xfe\x61\xfc\x7e\xe7\x76\x89\x63\xc2\x33" - "\x2c\x7f\xdb\x92\x30\xe6\x09\xc3\x0e\xfa\xa9\xa2\xa6\x2f\x7a\x0a" - "\xb6\x75\xce\x8a\xc0\xba\x85\x3d\xb4\xfc\x72\xea\x62\x4d\xf0\x3d" - "\xeb\xa3\x5a\xa4\x33\xdd\x3a\x3d\xd7\x64\x1a\x34\xeb\xbb\x5f\x76" - "\x17\xab\x79\xe1\x35\x25\xc2\x23\xc8\xfb\x23\xde\x9f\xb8\x66\x81" - "\xa2\x43\xfd\xc4\x0e\xe8\x11\x5e\x7f\xad\x05\xbd\xe7\xdb\x45\x18" - "\x30\x9d\x7e\xba\x29\xa8\xaf\xf3\x84\x7c\x91\x09\xac\x5b\x92\x8e" - "\x5b\xbc\xff\xd3\x0b\xff\xda\xaa\x96\xa1\xd0\x43\x52\x37\xed\xab" - "\x2a\x53\x78\x87\x19\xae\xb7\xec\x34\xb5\xe1\xfd\xfc\x90\xc0\xf8" - "\xb4\xaf\x82\xe7\x11\xde\x85\x5d\x9c\xf6\x06\x78\x5b\x78\xe7\x31" - "\x4e\xd7\xbe\xe1\xfd\x51\x17\x1d\xc3\xbc\xaf\xb6\x67\x4d\xe6\xda" - "\x72\x5e\x83\x51\xeb\x48\xd7\x62\x3e\x34\xa2\xc1\xc0\x8b\x6d\x0c" - "\xd0\xd7\xc2\x36\x07\xdb\x1a\xbc\xa6\x3f\xbf\x54\x84\xd9\xe6\x40" - "\xde\x11\x46\x1b\xb8\x7d\xaa\x5d\xd7\xe6\xc6\xb6\x0b\x38\x04\x31" - "\x87\x96\x34\x98\xbf\x98\x2c\x0e\x45\x6b\x0b\xb7\x97\xdb\xc2\x6d" - "\x96\x6d\x91\x3a\x16\x63\x44\xe4\x76\xd4\x2f\xd3\xf3\x01\x0b\xf3" - "\x9f\x1f\x4f\x53\x3c\x75\x2d\x25\xf2\x51\x4f\x3f\x5a\xb6\x59\xdc" - "\xdf\xd1\x8f\xdc\x9a\x38\x7a\x8c\x86\xf3\x7c\x37\x95\xaf\x1a\xdb" - "\xd9\x61\xe6\xdf\x86\x7c\x1e\x93\x7d\xa5\xac\x6f\x65\xde\x4b\x91" - "\xb7\x0d\x79\xd2\xf4\xbc\x69\x6a\x3f\x47\x5e\xfb\xf3\x15\xe3\x58" - "\x3f\x3f\x0d\x77\x04\xe5\x78\xbf\x2f\xcf\x78\x16\x78\x06\x2e\xad" - "\xa2\xb2\x21\x3f\x39\x2e\xef\x58\x78\x3c\x8b\x9e\x15\xed\xa8\xe7" - "\x72\xe6\x29\xf7\x62\xba\x02\x7c\xf9\x65\xd9\x32\xba\x94\xf9\x49" - "\xa4\xed\x2e\x55\x74\x1f\x5e\x24\x3c\xb0\x3d\xa1\x51\x8b\x17\xd2" - "\x95\x90\xa3\x92\xe3\x34\x7c\x79\x41\xa9\x03\xb8\x12\xad\x3b\x49" - "\x24\x75\x50\xda\x6e\x97\x2f\xf2\x35\xd5\x9e\xe4\xf5\x97\xe1\x75" - "\x06\x2f\xe2\x7e\xe7\xf9\xf4\x05\xe8\x5a\xa1\xd6\x0f\xae\xbb\x82" - "\xd7\xef\x8f\xd2\x75\x66\x6e\x2f\x7e\x29\xa8\xfb\x8c\x38\x2b\xa6" - "\x0b\x35\xa6\xb9\xfc\x74\x5d\x36\xae\x15\xf2\xe7\xa1\x19\xfa\xb3" - "\x0b\xf9\xda\xc4\x59\x8d\xf3\x54\xa0\xfd\x11\xe1\x49\x61\x99\xd8" - "\xdb\xe9\xb9\x2e\xcb\x4f\x63\x75\x79\x1f\x1e\x62\x58\x7d\xe0\xe0" - "\x42\xdf\x12\xf3\x26\xf0\x78\xd5\x51\x96\xc2\x78\xcc\x92\x72\x01" - "\x58\xb5\x26\xa5\xb7\x35\xe0\xba\xd9\xa3\x39\xa1\xa3\x9d\xda\xaa" - "\xcf\x1a\xe4\xbd\xfe\x4e\xe8\xe3\x68\x72\xf8\xfb\xaa\xbc\x43\x98" - "\xc7\xaf\x6b\x57\x70\xf6\x55\x78\x87\x1c\xe7\xe7\x13\xfc\x1c\xb2" - "\x7c\xde\xe0\xab\xce\x45\xfd\xc7\xb9\xde\x76\x35\x9f\xbf\xee\x44" - "\x07\xea\x40\x1b\xda\xfd\x34\xb2\x49\xed\x65\x7c\xde\xd0\x87\xec" - "\xd9\x58\x76\x58\xe6\x94\x4c\xdf\xf0\x5e\x73\x9d\x94\x3f\x27\x78" - "\xbe\x42\xd7\x1b\xbc\xd6\x92\x71\x94\x6e\xd8\xd9\x6c\x97\xfc\x6d" - "\x12\xa6\xeb\x27\xbd\xaf\x05\x4d\xbc\xdf\xa4\xd4\xd7\x0d\x3b\xcf" - "\xfd\x5d\x8f\xf6\x5d\xbf\x1e\xbf\x1a\xfd\x19\xf3\xff\xeb\xf7\xe2" - "\x3e\x03\xbf\x1a\x49\xbb\x8d\x85\x29\x7e\xbc\xeb\x80\xcd\xce\xcf" - "\x7e\xba\xbe\x42\x6c\x1c\x6e\x82\x5d\x22\xef\x6b\xaf\xe0\x75\x82" - "\xeb\xf7\xa0\xbf\xc6\xa8\xbe\xb8\x41\xee\x29\x02\x37\xa6\xbb\x70" - "\x57\x8b\x70\x53\x59\x08\x78\x5f\xdf\xd6\x54\x1d\x22\xc7\xf5\xdc" - "\xfe\xeb\x03\xdc\xa6\x10\xe8\xcf\xd7\xf9\xd5\x22\xd8\x58\x13\x21" - "\xde\xf7\xea\xf4\xdc\x00\xf9\x73\x92\x5a\x73\xd8\xb7\x8b\xe1\xe9" - "\x3c\x21\x8c\xf6\x2b\x9d\xf6\x79\x03\xf7\x25\x9e\x6f\x47\xdb\xad" - "\x27\xe9\x86\x05\x22\xfd\xb3\x86\x46\x27\xd1\x26\xe8\x11\x8c\x35" - "\x72\x2d\x1e\x7a\x89\x61\x62\xfc\xbf\xae\xc6\xd8\xa7\x59\x83\xf7" - "\x6b\xf1\x0e\x63\x4f\xb0\xd9\x19\x26\x86\x15\xe5\xf6\xa1\xfc\x3e" - "\x2d\x68\xc6\x58\x8d\x3e\xff\xbc\xa1\xac\x18\x7a\xa6\x47\x6f\xdd" - "\x30\x74\xd9\x09\x11\x36\xda\xc7\x7b\xa1\x80\x0b\xfe\x7f\xce\xde" - "\x27\xff\xf7\xe0\x9c\xf5\x6f\x8d\xc3\x55\x9f\x69\xa0\x4b\x7c\x9f" - "\x65\x1d\x50\xfd\x75\x43\x24\xbe\xbf\xb2\x0e\xe0\x37\x1e\xbf\xe9" - "\xf8\x15\xe9\xcf\xb1\xbf\xec\x98\x7b\x48\x6b\xd6\x9e\x4e\x4f\x16" - "\xc6\xff\xe1\x0d\xaa\x1f\x38\x1d\xed\x60\x1e\xf9\x96\x2c\xbc\x5e" - "\xc7\xfb\xa0\x9c\xce\xfc\xcc\xe9\x1a\xec\x19\x3c\xe7\xe1\xbd\x8d" - "\x65\x75\x9d\x46\x71\xef\x7d\x2b\xc1\x73\x4b\xba\x18\xff\x2d\x72" - "\x8d\x71\x79\x45\x05\xf3\x29\xf2\x4c\xb3\x46\x2a\x2a\x50\xdf\x4e" - "\x83\xae\x48\xab\xe2\xf7\xcc\x93\x48\x6f\x02\x5d\xe4\x1a\x7a\x08" - "\xf3\xbd\xe4\xb6\x46\x56\xa0\xc7\x26\xb3\xd4\x07\x58\x1f\xb5\xd3" - "\x8d\x21\xe8\x2c\xf4\xed\x67\xbb\xd4\x58\x73\xe3\x19\x7e\x86\xae" - "\xfc\x12\xf7\xc1\x66\xb4\xb2\x6b\xd5\x87\xfe\x6e\x13\xf5\xef\x32" - "\x51\x6e\x64\xd5\x37\x43\x23\xe9\xef\xb6\xfb\x02\x7b\xa8\x25\xb2" - "\x9b\x1c\xcf\x49\x18\xdf\xf8\xc0\x03\xee\xc5\x22\xfa\x41\xd7\x0e" - "\xb3\x2f\x72\xca\x8b\xb1\xf9\xea\xe3\x74\xa3\xa4\xc7\x2b\x47\x31" - "\xea\x3f\x25\x61\xeb\xf4\x09\x84\xd7\xce\x16\x91\xb5\xc7\x44\x08" - "\xf6\x5d\xfa\x9a\x2e\x1a\xb1\x61\x09\x65\xd7\x74\xd1\xf0\xcd\x5d" - "\x94\x25\xfe\x91\x65\xaa\x81\xdd\xf6\xd4\x19\x1b\x41\x27\xe4\x0f" - "\x2c\x26\xcb\xe6\x25\x24\x79\x24\x5a\x09\xfb\x2d\x02\xfb\xed\x54" - "\x16\xeb\xc6\x1e\xfb\xad\x5b\xda\xc5\xbb\xdb\x14\x1f\xed\x6e\x1b" - "\xe0\xa4\x94\x8c\x19\x64\x03\x7e\xee\x93\x74\xe3\x8d\x19\x6d\xb0" - "\x1d\xd1\x66\xbf\xde\x5e\x5c\xc7\x58\x9d\xd4\x5f\xb6\x15\xfa\x5a" - "\x54\x7e\xb6\xab\xcf\x71\xd8\xc4\x3c\x15\x62\xb9\x41\x1b\x6e\xba" - "\x87\xf7\x62\xf7\x0c\x09\x9b\xe7\xd7\x88\x30\xa7\x97\x0c\x13\x61" - "\xa4\x67\x71\xdd\xbb\x90\xde\xe9\xb9\x29\xcf\x6f\xda\xb4\xb3\x2f" - "\x1e\xc5\xfc\x48\xd7\x2b\x37\xfd\x51\x98\xca\xc1\xa3\xdb\xb3\x96" - "\x45\x60\x7b\x9f\x64\x99\xbd\xe9\xd0\xd4\x22\x11\x71\xcc\xe5\x7d" - "\xf1\x9b\xbc\xbc\x67\xcf\x7b\x75\xef\xc3\xb6\xf9\xbe\x7d\x7a\x1e" - "\x2f\x78\xae\x60\x2d\x02\xcc\x55\xdb\xb3\x04\xe6\xe7\xf1\x36\x3c" - "\x51\x5f\x76\x3c\xfb\x8a\xbc\x2e\xfd\x52\x7e\x9c\xe1\xa7\x07\x0b" - "\x19\x77\xde\x93\x65\xdd\x09\x7b\xeb\xd2\x63\xf4\xe3\x89\x21\xd0" - "\x01\xef\x31\xfe\x4f\xcc\xd1\xf7\x55\xa5\xbf\x0b\xd2\x30\xfe\xdf" - "\x5f\xca\x69\x25\xc3\xc8\x5e\xe2\x10\x81\xbe\x6c\x26\xe9\x83\x62" - "\xa2\xcb\x51\xa6\xc4\x80\x83\x71\xea\x37\x1d\xa6\x47\x1e\x41\x5a" - "\x85\x01\x07\x79\x2e\xc3\x73\x75\x4f\x1e\x55\x66\x47\x4c\x99\x47" - "\x3a\x4c\x37\xfd\x06\x69\x7b\x13\xca\x1c\x4c\x28\x73\x24\xa6\x4c" - "\xb9\x5e\x4f\x30\xbe\xcc\x08\x8a\x2f\x33\xc2\x76\x2e\x6e\x23\x86" - "\x27\x94\x19\x9d\x50\x66\xfc\xb9\xb8\x8d\xc8\x4f\x28\xe3\x4c\x28" - "\xe3\x8a\xa1\x25\xfb\x83\x64\x23\x6d\x75\x42\x99\x9a\x84\x32\x3b" - "\x8d\xe7\xbe\x7c\x7e\xe6\x6f\x22\x3b\x78\x33\xc0\xfd\xf9\x3a\xfa" - "\xa7\xe3\xad\xe7\x3b\xf5\xb2\x81\x24\xed\x8a\xc4\xd7\x37\x32\x23" - "\xbe\xbe\x91\x43\xcf\x6d\xd7\xc8\xec\x84\x32\xb9\x09\x65\xf2\x62" - "\xca\xd4\xa9\x7a\x46\x16\x26\x94\x29\x49\x28\xb3\xf2\x5c\xbe\x1a" - "\x59\x9d\x50\x66\x47\x42\x99\x86\xef\xa1\x05\x8f\xe3\xca\x37\x6b" - "\x30\xdb\xca\xf7\xc2\x46\xb8\x79\x18\xfb\x1c\xf0\xde\xe4\xb6\xae" - "\x70\x3f\xde\x0f\xe1\xf1\xaa\xd1\x15\xc6\xd8\x72\x33\xe6\x3f\xb7" - "\x95\x1b\x63\x16\xfb\x63\xb0\x4c\x2b\x1b\x7b\x64\xa0\x2f\x5b\x94" - "\xeb\x31\x7c\xb5\xb8\xae\xc6\xa1\x3c\x4e\xdd\x3c\xad\xc7\x26\x56" - "\xfe\x4b\xa4\xe0\xdc\xfc\xae\xb1\x37\x5a\xab\xfc\x3c\x52\xd8\x26" - "\x6f\x74\xc9\x32\x15\x31\x76\x34\xd7\x1f\xda\xb3\x24\x6c\x8e\xc7" - "\xe3\x66\xe7\x79\xf0\xc8\x80\x6d\xe4\x6a\x81\x65\xc1\xfb\xd7\xcd" - "\x35\xb0\x81\x60\xf7\x33\x6e\x47\xe9\xe6\xa0\xb4\xc9\xe6\x76\x11" - "\xdf\xfb\x4a\xef\x94\xfb\xdb\xca\x26\x1d\x95\xd5\x84\xfa\xd9\x76" - "\x6f\x2a\x3e\x4d\x1d\x72\xfc\x65\xdb\x6d\xd4\x23\x8d\xa5\x41\xe0" - "\x35\xaa\xc7\xff\xc3\x4f\xa3\xa6\x49\x5b\xa3\x62\x5f\x31\xef\xbd" - "\xf3\x1e\x52\x63\x28\x87\xf3\x80\xff\x6f\x1e\x61\xb4\x17\x63\x3d" - "\x64\xec\xe6\xc8\xf9\x68\xa6\xfa\x70\x54\x69\x3c\x4f\xf6\x03\xaf" - "\x8c\x5a\x1f\xdf\xef\xa3\xea\xe2\xfb\x7d\xd4\xae\x78\x9e\x34\x81" - "\x27\x47\x35\x25\x94\x39\x9c\x50\xa6\x2d\xa6\xcc\x7a\xbd\x9e\x70" - "\x7c\x99\x6c\x4b\x7c\x99\x6c\x7b\xcc\x33\xda\x98\x9d\xd5\x33\xf7" - "\x91\xbe\x45\xd9\x39\x31\xcf\xa6\x2a\xa9\x3f\xb3\x27\x19\x69\xbc" - "\x76\xb4\xf9\x4d\xe5\xdb\xa2\xc3\x73\x26\xc8\x3b\xe7\x2f\x4d\xc0" - "\x61\x75\x02\x0e\x3d\xf2\xaf\xef\xa7\xff\xfe\x18\xdd\x52\xa2\xef" - "\xa7\xb7\x63\xcc\x9e\xca\xcf\x80\x55\x8d\xfc\xa0\x43\xf6\xc1\x04" - "\x78\x47\x12\xe0\xb5\xc7\x3c\xdb\xf0\x1c\x89\x69\x83\x2d\xd5\x2e" - "\xfd\x04\x61\xbf\xdd\x92\x69\xa4\xf3\x9c\x12\xf8\x06\xdc\x72\xac" - "\xc9\x65\x9f\xad\x41\x47\xe9\x16\xf6\x69\xd2\x75\xf9\x2d\xb1\xf2" - "\x4f\xaa\x5d\xb7\x4c\x8b\xc7\xe3\x96\xc2\x78\x3c\x6e\x29\x89\x69" - "\x57\xc8\xba\x9c\x7e\x61\x8d\x3c\xf4\x18\xdb\x3e\xec\x6b\x27\x7d" - "\xa7\x96\xc1\x66\x3b\x43\x36\xf6\x59\x3b\x56\x42\xa9\x3e\x57\x00" - "\x73\xb9\xdd\xfe\x3e\xf9\x29\x7d\x5f\xb9\xee\xf7\xe7\x00\xfc\xc3" - "\x06\x3f\x6a\xab\xf6\x95\x6b\x95\x9f\xd6\x23\x0d\xfa\x6f\xd4\x0c" - "\x65\xe7\x36\x04\x85\x3b\xbf\x1a\xf4\xc4\xbc\xe8\xd6\x3f\xeb\xf3" - "\x88\x2a\xf6\xbd\x82\xee\x09\x60\x8c\xcf\x50\x7b\xe5\xb7\x0e\x8d" - "\xe1\xeb\x90\x63\xc9\xdd\xe2\x28\xdd\xfa\x25\xdb\x00\x2c\xa3\xec" - "\xc3\xd5\x18\x09\x12\xcf\xbd\x7d\x91\xe3\xd2\x76\xc3\x7b\xbf\x5e" - "\x36\x3f\xa6\x6c\x50\x9f\x1b\x07\xf8\xdd\xa8\x08\x99\x1b\x43\x41" - "\x02\x9c\x4c\x65\xef\xdd\xfa\x65\x23\xe4\x15\x65\x56\x1b\x65\x78" - "\x1e\xcd\x65\xac\x25\x64\xbe\xb9\x94\xcc\xde\x25\x47\x25\x6c\xc3" - "\x97\x02\xb6\x74\xbb\xaf\x34\x40\xbe\x50\x2b\xaf\x75\x99\x95\x0f" - "\xcc\xad\xfe\xd4\x30\x59\x3a\x2a\xf7\x15\xfb\x71\x1f\xad\xdc\xe7" - "\x02\x6e\x90\xa7\x5b\xcd\xac\x6f\x62\x69\x37\x61\x42\xde\x43\x53" - "\x27\x8f\xfc\xe5\x43\xf7\x4f\x9b\x70\xa7\x63\xda\x9c\x17\x66\x15" - "\x8e\x7c\x71\x41\x89\x63\xd1\xbc\x39\x25\x73\xe6\x3e\xeb\xc8\x76" - "\x5d\xe7\x72\xcc\x2c\x51\xd7\xac\xa2\x99\xf3\x4b\xc6\xf2\xed\x08" - "\x47\xf1\xbc\x59\x0b\xe5\xed\x8d\xe9\x14\x0f\x64\x4e\xc9\xac\x79" - "\x8e\xeb\x0a\x47\x38\xee\x9b\x39\xa7\x68\xc1\xbc\x59\x49\x61\xdd" - "\xe9\x98\x37\x6b\xde\xac\x99\x85\x8e\xb1\x8e\x6c\x86\x1c\x0b\x2e" - "\xa6\x3f\xb3\x8d\x71\x8c\xc7\xaf\x75\x1e\x71\x48\x1f\xcf\xfc\x8a" - "\x7f\x6e\xdb\x73\xee\x58\x76\xdb\x81\x78\x9e\xbb\xad\x35\x9e\xe7" - "\x6e\x0b\x9c\x3b\x96\xdd\x96\x30\xfe\x8d\x4e\x18\xff\x46\x0f\x3d" - "\x77\x2c\x1b\x9d\x30\xfe\x8d\x4e\x18\xff\x46\xf7\x8c\x7f\xe0\x25" - "\xff\x0a\xa9\x17\x46\x27\x8c\x7f\xa3\x13\xc6\xbf\xd1\x2b\x13\x9e" - "\xab\x62\x9e\x2f\xc5\x73\x7d\xec\xf8\x88\xe7\x3d\x86\x7c\xf6\xea" - "\x97\xd1\x07\x8c\x3c\xac\xeb\xa1\x9b\xdb\xf4\xbc\xfe\x98\xbc\x01" - "\x3d\x6f\xa8\x47\xfe\xc0\x47\xec\xeb\xa6\xe6\xeb\xb7\x3f\xc6\x3a" - "\x9d\xfd\xdc\x78\x6c\x82\x7c\x5c\x7d\x92\x46\xff\x91\x61\x31\x0f" - "\xb3\xdf\xa3\x78\xeb\x89\xce\xda\x41\x64\xe1\x32\xb5\xaf\x91\x59" - "\x78\x6e\x6d\xc7\x95\x90\x96\x81\x1f\x74\xca\xed\xb0\x7f\x37\x97" - "\xaa\xf1\xe2\xf6\x3a\x69\xf3\xa3\x8c\x0e\x5f\xce\x6b\x00\xc7\x8e" - "\x32\x96\x75\x6a\x2c\x6e\xc3\x7d\x06\xf3\x34\xca\x9b\x85\xe9\xb6" - "\x5b\x70\x25\xa4\xd9\xf0\xcb\x04\xbc\x3a\x03\xde\xca\xc1\xc9\x6d" - "\xcb\x44\x3b\xb7\x67\x3e\x68\x22\xeb\x3a\x8f\xd6\xea\xd3\xd8\xb6" - "\xbe\xfd\xb0\x5a\x5b\xd8\x0d\x5b\xfe\x8b\xfc\x5a\xa4\x27\x9f\x27" - "\xfd\x04\xf6\xdf\xed\x07\xd4\x7a\xcb\x4f\xd0\xff\x0f\x86\xd4\xda" - "\xe9\x6e\xf6\xbf\xe8\x3a\x46\x3f\xf9\x18\xd7\x6e\x5c\xdf\x36\xe0" - "\x7b\xe5\x7c\xfb\x27\xa3\x85\x27\xe5\x61\x86\x9b\x90\x3e\x09\xfa" - "\xad\xcb\x1a\x29\xcf\x4f\xf2\xce\x29\x3c\xa9\x0f\x25\x49\x2f\x87" - "\xcd\xd0\xe5\xa7\x9f\xec\x61\x7c\x63\xd2\xab\x85\x67\xe0\x34\xce" - "\xef\xe7\xfa\x50\xa6\x2f\x5b\xdb\xf0\x6b\x55\x7e\xe8\x3f\x69\x4b" - "\x68\xc7\x77\xc7\xe8\xa7\x33\x55\x3b\x7e\xba\x2f\xa1\xee\x48\xf2" - "\x76\xfc\x34\x13\xed\xf8\x2e\x79\x3b\x7e\x9a\x2d\x69\x6b\x42\x5b" - "\x4c\xe7\xbc\x9b\x84\xb6\x7c\x27\xe9\x1e\x9f\x5e\xa8\xdb\x42\x3c" - "\x27\xb3\xe1\x9d\x2c\xfb\x70\x69\x6f\xbf\xe9\xf9\x56\x5b\xab\x29" - "\x2f\x49\x9d\xf5\xc2\xd3\xff\x61\x3f\xfd\xf4\x88\x84\xd3\x9b\xbe" - "\x57\xe1\x02\x3a\x99\x24\x9d\x58\x1e\xac\x7d\xf5\xb7\x31\x2f\x51" - "\x6b\x21\x39\x90\xff\x9f\x78\x8d\xb5\xcc\xf9\xa5\x22\x68\xd0\x11" - "\xef\xb2\x12\xde\x85\x63\xde\x8d\x8f\x7b\xb7\xac\x27\x7d\xba\x91" - "\xfe\xc3\xfa\x29\x67\x75\x42\x3f\xa1\x7f\xee\xb8\x2a\xbe\xdd\x39" - "\x35\xaa\x7d\xe8\xa3\x73\x68\x9d\xd3\x80\x3e\xea\x4e\xde\x47\x39" - "\x87\x93\xf3\x5a\x8e\x5c\x47\x13\x83\x28\x09\xbc\x3b\x78\x8e\xdd" - "\x2d\x79\x50\xef\xa7\x73\xfb\xe7\x8e\x11\x46\xff\xfc\xb0\x36\xde" - "\x51\x9c\xd0\xc6\x28\x60\x9c\x50\x6d\xbd\x73\x6c\x02\xec\x8a\xe4" - "\xbc\x78\x47\x1d\xda\x19\x4d\xde\xce\x3b\xf6\xf6\xcd\x8b\x77\xb4" - "\xa2\x3d\xd1\x73\x79\xf1\x8e\xa0\x2a\x43\x49\xca\xdc\x99\x21\x3c" - "\xc9\xea\xb9\x73\xb8\x3b\xc2\x76\xee\x9d\xbc\x97\x62\x8f\x49\x1f" - "\x13\xcf\x7f\x68\x03\x97\x63\xfa\x45\x94\x9e\xe5\x7e\x38\xe6\x20" - "\xd3\xf7\xf1\x64\xa7\xe7\xce\x9a\x04\x5a\x9d\x3a\x46\x3f\xbb\xaa" - "\xc3\x94\x52\xaf\xe8\xf5\xb3\x2f\x13\x70\x6a\x48\x4e\xaf\x3b\x0f" - "\x81\x5e\xa7\x92\xd3\xeb\xce\xf6\xbe\xe9\xf5\x33\xee\xff\x53\xe7" - "\xd2\xeb\x67\x8e\x58\x7a\xc1\xd6\x95\xed\xbb\xd6\x0e\xde\xe8\x2e" - "\x10\xb5\xdc\xd6\x28\xd9\xac\xe0\x15\x55\xa6\x9d\xcb\x4c\xb3\x86" - "\x15\x9f\xc0\x86\xb4\x9c\xa4\x9f\x8d\x31\xe4\x7f\x60\x35\xf5\x17" - "\xdd\x4f\xb0\x1f\x51\x0a\x97\xf3\xb9\x4e\x79\x7d\x91\x6c\xe2\xf9" - "\x47\x42\xbd\xd5\xc9\x75\xc1\xcf\x76\x81\xa6\xaf\x25\x49\x3f\xa0" - "\xfc\xcb\xc6\x50\xbc\x8e\xf8\x99\x3f\xbe\x8f\x40\x37\x94\xd3\xb7" - "\x9d\xbe\xf7\x77\xfe\x3e\x1b\x93\x77\x6e\x9f\x8d\xf9\x56\xf5\xd7" - "\x98\x3f\xc6\xe3\x37\xc6\x99\xbc\xbf\xc6\x94\xf7\xdd\x5f\x63\x6a" - "\xfa\xee\xaf\x31\x0d\xdc\x5f\x68\x6f\x30\x7e\xdc\x18\x73\x28\xbe" - "\xbd\xa8\x17\xe5\x84\xe9\xa2\x4b\xf9\xf9\x87\xb6\xdb\xf8\xb1\x8e" - "\xe3\xbe\xaa\x2d\x23\xf0\x72\xca\x30\xc6\xf1\x42\x61\xf4\x09\x1b" - "\x34\x5c\xbf\x24\xf9\x7e\x2b\xcf\x71\x5b\xaa\x89\x78\x1f\xd9\xf1" - "\x23\xb6\xdd\xc7\xfe\x41\x33\x51\x2b\xee\x4d\xc7\xe8\xee\x57\x35" - "\x93\xa9\x94\xf7\x3c\xa5\x5f\xb8\x5c\x43\x18\x7b\x24\xb6\x2f\x78" - "\xef\x93\xe7\xa6\x6b\xd5\xdc\xe9\xef\xc7\xe8\xae\x59\xaa\x5f\xee" - "\x7e\x29\x9e\x8e\x77\x51\xf2\x7e\xb9\xcb\x8e\x7e\xf9\x7b\xf2\x7e" - "\xb9\x6b\x74\xdf\xfd\x72\x57\x1e\xfa\xe5\xef\xe7\xca\xd1\x5d\x4e" - "\x5d\x8e\x56\x70\x19\xc7\x5c\x9e\x8f\xdf\xf5\x17\xce\x83\x7b\xc8" - "\xc8\x5d\x7c\xa4\x3c\x65\x64\xbb\x21\x47\xb2\x4c\x0d\x60\xc9\xfa" - "\xf5\x3c\xd5\x3a\x8c\x58\xb8\x5e\x6b\x7b\x32\x39\xb9\x4b\xf6\xd3" - "\xcd\xc5\xc4\x7b\xf1\xf9\x9b\x18\xc6\x3c\xa2\x93\x74\xf7\x48\xce" - "\xc7\xe9\x37\x87\x62\xe5\xe4\xee\x9e\x7c\xac\xeb\xf4\xbc\x24\x3a" - "\x9d\xc4\xf9\xe2\x61\xdf\xad\xb7\xbf\xbf\x1c\x47\x38\x3f\xe7\x4b" - "\xc8\x93\xaf\xe4\xf1\xee\x9a\x78\x79\xbc\xbb\x38\x9e\x3f\xef\x92" - "\xe5\x34\xe8\x39\x3f\x8d\x6d\x02\x0e\x3f\x98\xbf\xce\x2f\x9b\x77" - "\xb7\x27\xc8\x26\x78\x20\x77\x8d\xe2\x81\xdc\x17\xe2\x71\xcd\x35" - "\x27\xe7\x81\xdc\xa1\x7d\xf3\x40\x6e\x4e\xdf\x3c\x90\x3b\x8d\x79" - "\xc0\x4f\xb9\xab\xe3\x65\x33\xb7\x28\xbe\xed\xa8\x57\xca\x26\x5d" - "\x72\x21\xb2\x09\x5b\xe8\xd2\xbe\xe4\x90\x65\x8a\xfd\x47\x6a\xbb" - "\x8c\xbd\x8e\x1f\x44\x33\x0b\xe4\x0a\xf8\xdd\xe3\xe0\x35\x25\xe8" - "\xf8\x1c\xa6\xe1\x66\x79\xf6\xf0\x9e\xd1\xb1\x74\x5c\xab\xce\xc7" - "\xb9\x91\xf7\x53\xde\x57\x56\xf4\xbc\x77\x79\x7c\xfb\xef\x99\x96" - "\x9c\x9e\xf7\x14\x81\x9e\xee\xe4\xf4\xbc\xa7\xa2\x6f\x7a\xde\x53" - "\xcf\x67\x8f\xce\x95\xa9\x7b\xf6\x3a\x16\x4a\x1b\x45\x96\x39\x49" - "\xf7\x5e\xf6\xc3\xc6\xa7\x7b\x42\xf1\xe3\xd3\x3d\x47\x2e\x7c\x7c" - "\xba\x37\x27\xf9\xf8\x74\x6f\x5e\xf2\xf1\xe9\x5e\xa7\x92\x87\x7b" - "\xeb\xe2\xe5\xe1\xde\xf2\x78\x9e\x00\xed\xfe\xc7\xc6\xa7\x7b\x83" - "\x09\x32\xb0\xee\x18\x8d\x7b\x09\x36\x45\xb9\xea\xb7\xf1\xb7\xc7" - "\xe3\x38\x2e\x23\x79\xbf\x8d\x1b\x8e\x7e\x5b\x97\xbc\xdf\xc6\xe5" - "\xf6\xdd\x6f\xe3\x78\x0f\x7a\xdd\xb9\xfd\x36\xae\xe4\xc2\x6d\x8a" - "\x71\x3b\xe2\xfb\x6c\xdc\xfa\x0b\xef\xb3\x71\xed\xc9\xfb\x6c\xbc" - "\x39\x79\x9f\x8d\x1f\xaa\xfa\x6c\xfc\xb4\xf8\x3e\x1b\x3f\x3a\xbe" - "\xcf\x40\xb7\xff\x66\x9f\xa1\x7f\xcc\xca\x3f\x61\xfc\xc7\x98\xb7" - "\xf7\xef\xf4\x8c\xdf\xe9\xa7\x09\x25\x6a\x6e\x3d\x41\x8d\x1d\xaa" - "\x0f\x3f\x40\x9e\xba\x73\xc7\x81\xf1\x07\xf4\xb4\x5f\x9e\xdb\x0f" - "\xe3\xdb\xa0\xa3\xdb\x9b\x4a\xe5\xde\x96\xea\x43\xa6\x39\xf2\x79" - "\x97\xf0\xfe\xd4\x04\xde\x2c\x4a\x41\x1f\x0b\x5f\x38\x42\xac\xd7" - "\x91\x3f\xc4\x70\xf8\xcc\x65\x3c\xac\x09\xd9\x17\x32\xc6\x9f\xc7" - "\xa7\xc6\xec\x2d\xbb\x15\xf0\xee\x9b\xa0\x78\x75\x42\xa2\xfd\x5b" - "\x8b\x77\x57\x28\x3e\xfd\xf9\xd7\x09\x38\xec\x49\xce\xa7\x13\x0e" - "\xa2\x0d\xb5\xc9\xf9\x74\x42\xa0\x6f\x3e\xbd\x0f\xfd\x4f\xb5\x31" - "\x73\x9f\x41\x4f\x45\xfc\x09\x73\x9f\xfb\xb2\xac\x21\xc5\x3b\xd2" - "\x26\xaa\xdc\x6d\xee\xf4\xdc\x97\x68\xff\xa1\x6f\xee\x6b\xd6\x71" - "\xfe\x43\x42\xf9\x3e\xec\xbf\xfb\xd8\xfe\xfb\x20\x39\xce\xf7\x9d" - "\xc7\xfe\xbb\x8f\xed\xbf\x0f\xce\x95\xad\xfb\x74\xfb\x2f\xd9\x1c" - "\xef\xbe\xf6\xe4\xfd\xff\xf3\x84\xfe\xa7\xfc\x12\xcc\x87\x65\xf9" - "\xf8\x7c\x23\x62\xf3\xb1\x6f\x12\xe7\x65\x1e\x49\x92\x37\x3f\x11" - "\x66\x1f\xf9\xca\xcf\xe1\x3d\xf6\xa5\x4a\xca\x7b\x3f\xdf\xa9\xe4" - "\x71\xa2\x39\x5e\x1e\x7f\xde\x14\x2f\x8f\xf7\x39\x13\xca\xb5\xc5" - "\xbf\x07\xff\xfc\x8f\xe9\xd8\x89\xd3\x12\x78\xe0\x8b\x63\x34\xf1" - "\x8f\x8a\x07\xee\xbf\x31\x1e\x8f\x89\x45\xc9\x79\x60\xe2\x4a\xb4" - "\xff\x8b\xe4\x3c\x30\xb1\xae\x6f\x1e\x98\xb8\x17\xb4\xfc\x22\x96" - "\x6f\x1f\x2e\xcd\xed\x9f\x90\xc7\x9f\x5c\xe7\x4d\x0c\x27\x5f\x23" - "\xb8\xdf\xa6\x68\x7c\xff\xc4\x78\x1a\xdf\x9f\x15\x4f\x43\xb4\xe5" - "\xbf\x4f\xc3\x9e\xd8\x07\x9d\x9e\xfb\x13\xe5\xdf\x77\x8c\x1e\xd0" - "\xe5\xff\xc1\x4b\x12\x70\xdc\xa3\x70\x49\xb6\x2e\x72\x3f\xcf\x7f" - "\x7d\xc9\x69\x79\x7f\x7b\xf2\x36\x3f\x60\xc6\x18\xe4\xd3\xce\x91" - "\xa5\x07\x86\x22\xfd\x61\x5e\x0f\xe5\xf5\x90\xcd\x48\x7f\x38\x42" - "\x16\x39\x5e\xf5\x8c\x4b\x0f\xe4\xb2\x2f\x0a\xd3\x9f\xf9\xd7\x3a" - "\x94\xf2\x78\x0c\x62\xbc\x0a\x4a\xa5\xdf\x82\x75\x25\xf3\xfa\x35" - "\xcc\xeb\x0f\x48\xfb\x8f\xf7\x59\xd8\x8f\xd0\xea\xa2\x3c\x5f\x28" - "\x42\x06\xbf\x73\xfe\x04\xd8\x35\x2c\x17\x9c\xdf\xc8\xab\xd6\xcd" - "\xca\x13\x74\xd3\x03\x4d\xc9\xfb\xf8\x81\x23\x7d\xf3\xce\x03\x61" - "\xd5\xcf\x0f\x8e\x88\xef\xe7\x07\x6d\x9a\x67\xe0\x34\x6e\x2b\x78" - "\xe0\x82\xe4\xa4\xc4\x21\x82\x7d\xea\xfb\x15\x4f\xb4\x16\x97\xd1" - "\x8f\x8e\xd3\x83\x55\xb2\x3e\x93\x08\x5b\x97\xa7\x50\x93\xd4\x01" - "\x0f\x7e\x23\xf1\x44\x9e\x82\x08\x99\xc4\x8a\xe7\x5b\xf9\x5d\xad" - "\x47\x84\x91\xef\x10\xef\x09\xf0\x99\x65\xf0\xc2\xa5\x47\xe9\xc1" - "\xf7\xe2\xca\x43\x13\xf8\x14\x8c\x40\xad\x94\xc7\x07\xdb\x8c\x35" - "\xdd\x95\x78\x4e\xbe\xee\x3b\xc9\x62\xf8\x3e\x28\x9f\xb1\x07\xfb" - "\xdc\xbf\x64\x9c\xf8\xac\x0c\xe3\x74\x7e\x3d\x30\x69\xba\xc1\xbf" - "\xca\xd7\x72\x52\x51\xaf\x2f\xdf\x24\x97\x9f\x26\x39\xce\xb3\x36" - "\x18\x23\x07\x93\xea\x63\xe1\xa8\xf8\x1f\x93\x1a\x0c\x7f\x3c\xdc" - "\x37\x7d\x0f\x2c\x03\x9f\xf6\x04\x7c\x60\x47\xdc\x7b\x58\xc1\x98" - "\x6c\x39\x1f\x0c\xee\x73\xc5\xb3\xcc\x0f\x93\x1d\xe7\x5b\xf3\x4b" - "\xb5\x53\xde\xeb\xe7\xf0\xd6\x64\x69\x2f\x31\x8c\xf3\xe3\x38\x79" - "\x7d\xdc\xdc\x42\xee\xdd\xf3\xde\xd6\x94\x27\x95\xdc\x4f\x49\x58" - "\x23\x9c\xbc\x53\xfa\x53\xe9\x72\xff\x54\x24\x51\x0e\x26\x1f\x34" - "\xc6\xe8\x84\xf4\x36\x43\xee\x31\xaf\x65\xb8\x09\xeb\xac\x53\xcc" - "\x4a\x16\xa6\x4c\xd7\xd2\x62\xe7\x6b\x53\xa4\xfd\x67\xac\x97\xe2" - "\xbd\x39\xa1\x5c\xc2\xfa\xdf\xe4\x9d\xa2\xef\x75\xfa\x0c\xf4\x6f" - "\x88\xf7\xb6\x54\x0c\x84\x29\xab\x13\xd6\x2b\x82\x6b\xe5\xf9\xf6" - "\xbf\x02\xee\x54\x5d\xef\xe5\x25\xd8\x78\x53\x76\xba\x4f\x9c\xaf" - "\xfd\x53\xfa\x68\xff\x94\xde\xf6\xcf\x65\xb8\x53\x13\xd6\x12\xa7" - "\xca\xf6\x47\xcf\xd1\x7f\x53\x87\x42\x7f\x19\x74\x83\xcd\x3d\x75" - "\x81\x61\xab\xf3\xfa\x41\xdf\xb6\xfa\xd4\xde\xf5\x3f\x55\xae\x77" - "\xfd\x2f\x98\xcc\x56\xf7\x93\xdc\x5b\x8d\xaf\xbb\xda\x5a\x93\xac" - "\x2d\x53\xfb\x58\xff\x9b\xaa\xaf\xff\xe5\x39\xe2\xf5\xd9\x54\x7f" - "\x7c\x1f\x4e\x4d\xe8\xc3\x3c\x8a\xef\xc3\x29\x3b\xff\x6f\xc7\x35" - "\x06\x94\x9a\x9a\x6a\x4a\x4d\x31\xa5\xa4\xe2\x35\x9a\x48\xfd\x53" - "\xcd\xa9\xfd\xf0\xbb\x48\xbf\xf6\x37\xa5\x9a\xcc\xf8\xf5\xd3\xaf" - "\x17\x25\x3c\xf7\xe7\xb2\xf8\x99\xf5\x6b\xbf\x84\xe7\x8b\xbe\xe7" - "\x7d\x7f\xbd\x5e\xa3\x7e\x73\xc2\x73\xbf\xef\x79\x7f\xd1\x7f\xb3" - "\x3c\x9d\xf3\x1c\xef\x87\x76\xff\xdc\x85\x33\x8b\xe6\x14\xca\xfd" - "\xe2\x59\x8e\x99\xcf\x3c\x33\x6b\xfe\x7c\x47\xc9\x8b\x8e\x7b\xef" - "\x79\xe8\xd6\x3b\x1d\x6a\xdb\xb9\x68\xec\x75\x85\xe9\x34\x79\xd1" - "\x3c\x7e\x31\xf9\xe1\xfb\xf3\x1d\x79\xf7\xde\x13\xff\xd2\x00\x23" - "\xb7\x97\xcf\x07\x25\x46\xfe\x72\x2b\x07\x13\xad\x7e\x53\xea\x9e" - "\x36\xf6\xf3\x55\x6b\x1e\x8f\x2e\x3f\xc8\xfe\xa3\x5d\x6e\xe1\xbd" - "\x86\xf7\xf4\x1f\xba\x8e\x1b\x31\xb2\xae\x9c\x8a\x9f\xe6\xf3\x2b" - "\x0f\xdd\x23\xf6\x07\xc9\xf1\x00\x99\x8e\xd2\x13\xaf\x36\xc1\x2a" - "\xe2\x67\x9f\x3f\x42\x0e\x37\x59\x50\xfe\x16\xbc\x4b\x11\x77\x69" - "\x48\x0b\xe9\xbe\xd0\x8f\xdc\x23\xd3\xf6\x97\x1b\xf9\xac\xc7\xe8" - "\xa1\xaf\xc5\x7e\x21\x9f\xf9\x7c\x90\xca\xf7\xd0\xa7\xc2\xf4\x0b" - "\x17\xeb\x86\x9a\x41\x64\xe6\xbd\xd0\xb7\x07\x91\xe5\xed\xc1\x1c" - "\x0b\xe4\xa1\x9d\xc6\x5e\x68\x25\x9e\xfd\xf4\xc4\x7a\xae\x9b\xf3" - "\x6a\xa6\x5f\x6c\xe5\xfc\x9b\xe3\xf3\x1f\xe9\xdd\x8b\x7d\x68\xa7" - "\x09\xf9\xa6\x7e\x49\x56\x6b\x54\x7c\x1b\x4e\x7f\xd7\x7f\xf3\x44" - "\x4a\xf1\xa1\x2b\x0e\x46\xca\x49\xf9\xfc\x3c\x7c\xdd\xe2\xa8\x88" - "\xb0\x7f\xfa\xe4\x76\xb7\x58\xf7\x02\x99\x21\xd3\x29\xde\x79\xec" - "\xa3\xf0\x70\x46\xed\x2c\x32\xa3\xfd\x43\x8f\xd3\xb4\x31\x8e\x29" - "\x44\xee\xc9\x64\xfe\x77\x17\xfb\x1b\xee\x2e\x5b\xfb\x27\x32\xff" - "\xb6\xab\xdc\xd4\x25\xec\x54\x5a\x22\x02\x82\xe3\x03\x85\x44\x98" - "\x7d\xfc\x0f\xce\x88\x72\x9e\xb9\x9d\x6e\x3b\xb5\x94\x84\x68\xd9" - "\x11\x11\xae\xf8\x93\x3a\x1b\xd0\xdc\x1e\x62\xff\x45\xcb\xb2\xc9" - "\x94\x7a\x2c\x9f\x4c\xcd\xce\x6a\xf2\x4d\x0f\x51\xe9\x11\x11\x38" - "\x38\xe3\x6b\x6a\x71\xee\xa2\x82\x56\x32\x1d\x6c\xfb\x1b\xc9\x18" - "\x37\xab\xbe\xb1\x95\x9d\x21\xfb\xb2\x39\x9c\x76\x86\x96\x2c\xa3" - "\x01\x4b\xfe\x4c\x56\x5f\xa0\x15\xf5\x9c\xa0\xc7\x0f\x53\x0a\xe0" - "\x99\x96\xfe\x8d\xec\x4b\x1f\x63\x3f\xdf\x5c\xaa\x29\x23\xbb\x70" - "\x67\x65\x74\xb9\xb3\x6c\x5d\x22\x6b\x50\xa7\x3b\x2b\xb3\xa5\x18" - "\xf9\xdb\xf6\xd1\xc0\x56\xca\xdc\x7f\xbc\xd5\x54\x7d\x9a\x86\x72" - "\x9b\x8e\xa1\x6d\x35\xa7\x91\x7f\xd5\x7e\xaf\x86\xb2\xb1\x65\x22" - "\x69\xfb\x5b\x7d\xf9\x61\xd2\x00\xab\xba\x8b\x86\xd6\x74\x91\x5d" - "\xab\xdc\xef\xe5\x72\xed\xf4\xc8\x1d\xbe\x83\x44\xa5\xcb\x44\xb4" - "\x7b\xd5\x87\x7e\xe8\xc4\xfe\x1f\x3c\xdd\x60\xf6\x1d\x6c\xa7\xe6" - "\x50\x17\xb5\xd0\x5f\xc9\xe7\xfa\x87\xf7\xb7\x4f\x37\xf4\xd3\x20" - "\x04\xde\x25\x6d\xa8\x4b\xf1\x8e\xbb\x99\xcf\x2a\x97\xd3\xba\x32" - "\xca\x28\x5e\x42\xfd\x8f\x23\x5d\xcd\xed\xeb\x03\xbe\xc8\x3f\xbc" - "\x4b\xa4\x3f\xee\x13\xeb\xcb\x9a\x29\xb5\x25\x54\xcd\x7e\x9f\xa6" - "\x68\xfa\x37\x36\x5f\xe8\x10\xf9\x8a\xff\xee\xd5\x2c\x81\xf0\x6a" - "\x8d\x2c\xef\x9d\x3d\x64\xf2\x99\xcf\x92\x2f\x3f\x44\x5f\xa0\x6e" - "\xb1\xea\x9b\xa1\xd0\x5b\xb9\x2d\xa1\x30\x9f\x77\xca\x16\x1d\xf6" - "\xf4\x75\xf3\x68\xc4\xe6\xd3\x34\x7c\xd3\x69\xca\x12\x9d\x59\x26" - "\xf6\xb1\xe5\xb3\xa9\x9b\x70\xcd\x68\x23\x0b\xda\xae\xfc\xb1\xd3" - "\x74\x5f\xdb\xee\x2c\xaa\xed\xea\xf5\xb5\xed\xea\xe8\xf5\xb5\x05" - "\x4f\xed\x62\x7f\x5b\x3f\x4d\x1b\x6f\x3d\x48\xfd\x21\x27\x4e\xe6" - "\xef\x75\x27\xc9\xbc\xe2\x24\xd1\xcd\xe5\x26\x72\xcc\xe6\x73\x16" - "\x8f\x5e\xe7\x43\xdf\xf0\xfd\x51\x7a\xe4\x08\xae\x19\xf8\xa5\x40" - "\x26\xfe\xc8\xed\x6c\xd3\xf9\x18\x69\x26\xa4\xfd\x01\xd7\x54\x5c" - "\xf7\xb9\x6b\x44\x50\x54\x7c\x94\xd3\x61\xa2\x74\xe6\x67\xe5\xdf" - "\xfb\x51\x4e\xa7\xe7\x91\x3d\x7e\x7a\x7e\xb8\xc1\xd7\x4a\xc7\x3f" - "\xb4\xeb\x8b\xa3\x27\x38\x0e\x55\x50\xe2\xd5\xed\x4c\xe1\x98\x54" - "\x7a\x3a\xe3\x70\x15\xd7\x7b\x94\x1e\xe5\x7a\xac\xf8\x41\x4e\x1f" - "\xa9\x32\xca\x76\x74\x3b\x51\xe7\xa3\x97\x21\x5d\x18\xe9\x68\xb7" - "\x99\xdf\x7d\x74\xf4\x84\x49\xe5\xc9\x32\x01\x66\x58\x87\x0f\xd9" - "\x7f\x68\x1a\xcb\x78\x87\xc9\x2a\x1a\x67\x8c\xa6\x9a\x37\xc5\xc1" - "\x4d\x6f\x8a\x26\x25\x7b\x8f\xe6\xfb\xa9\xc8\xc9\x38\x62\x1c\x6f" - "\x5a\x8d\x77\x8d\x18\x85\x98\x2e\x4d\x85\xec\x4f\xf6\x28\xec\xbf" - "\x8b\xe3\xda\x20\x3c\x79\x7c\xc6\xd7\xfa\x7e\xd9\x81\x7e\xd0\x01" - "\xf9\x2d\x6d\xed\xf4\xdb\xae\x40\x3f\xf7\xbf\x91\xc9\x17\x39\x4a" - "\xa3\x32\xc9\xce\xf6\x60\xed\x9b\xc2\x8f\x6b\x80\xfd\x3b\xc1\x2f" - "\x57\x1d\xa7\x47\xff\xf0\xe3\x4c\xca\xfc\x0f\x17\xe9\xfa\xe9\xd1" - "\xbf\xc5\xe8\xa7\x59\xcd\xfe\x86\x18\xdd\xf4\xc4\x65\xe7\xea\xa6" - "\xc7\x2f\x51\xba\x09\xb2\x2f\x75\x51\xd4\xaf\xd2\x1f\x8b\x26\xa4" - "\xeb\x7e\x22\x8f\x7d\x99\x90\x1e\xd6\xd3\x9b\x13\xd2\x83\x7a\xfa" - "\x00\x43\xf7\xb5\x30\x1e\x8b\x58\xf7\xe5\x7f\xcb\xba\xaf\x65\x86" - "\xae\xfb\xa4\xfe\xc9\xff\xb3\xd8\x0a\x5d\xb4\x90\xf5\x4d\xfe\x7b" - "\x8c\xbf\xd8\x4f\x06\xee\x69\x48\x7b\x81\xd3\xd6\xff\x95\xcc\xf8" - "\x19\x7a\xef\x0b\xd6\x7b\xac\xf3\x58\xf7\x6d\x1c\x2c\x5a\x37\xbe" - "\x29\x0e\xd7\xc8\xd8\x3a\xbf\xec\xd1\x7f\xaf\x20\x6d\x35\xd2\x5e" - "\xc1\x7b\xd6\x83\x4c\x93\xe6\xfc\x06\x9e\x23\xb7\x81\x9f\x4b\x35" - "\x53\x36\xad\x45\x7f\xf3\x79\xc3\x95\xa0\xaf\x35\x85\x8a\x7d\x25" - "\x7c\x86\x35\xca\x3e\x69\x6d\x2d\x25\x6d\x2c\x77\x83\x57\x40\xce" - "\x7c\xae\xaf\xa9\x2c\x24\x8e\xf3\xb9\x3b\xc6\xa1\x60\xf1\x03\x1c" - "\x8f\x28\xa5\xc9\x49\xc4\x7e\xe1\xac\xb3\x81\x8b\x79\x3d\x70\x52" - "\x31\x54\xf2\x0b\xfd\x54\xb7\x53\xf5\xf5\x13\xeb\x39\xde\xd9\x51" - "\xfa\xe5\x0e\xcc\xf7\xc2\xdc\x36\x6b\xb4\x9c\xf8\x1c\x0c\x64\x8c" - "\xcf\x2f\x3a\x37\x9a\x34\xe7\x7a\xe3\x2c\x0c\xc7\xbe\x43\x1e\x5f" - "\x6b\x98\x18\x67\x3f\xfd\x32\xd4\x5c\xda\xc0\xe5\xab\x99\x36\xc2" - "\xe3\x36\x60\xa4\x48\x18\x26\x39\x6f\x74\xfa\x29\x5f\xad\x9d\xa7" - "\x7f\xe8\x6f\x9e\x1e\x24\xd6\xfb\xbe\x00\x60\x94\x1e\x55\x30\x00" - "\x4b\x60\x0c\x88\x7b\xa7\xc3\x1f\xb0\x4c\x7c\x0b\xf8\x85\xdc\x5f" - "\x7c\x2e\x92\xf7\xdb\x40\x97\x0c\xf6\x95\x57\xb6\xe8\x2f\x4f\xd4" - "\xfe\x95\x48\x3f\xdb\x09\x7e\xfb\x65\x3b\x9f\x5b\xe2\xf3\x9c\xe7" - "\x3b\xcb\x09\x1a\x0d\x37\xce\x73\x6a\x8b\xfe\x67\xcf\x72\x02\xb6" - "\x7d\xb3\x49\xec\x02\xfe\xed\x7c\x9e\x13\xf8\x4f\x62\x3e\xd4\xdb" - "\x14\x7c\xe3\x71\x49\xf3\xd1\x9c\x86\xb9\xe3\x01\xa3\xff\xb9\xbd" - "\xdc\x16\xbc\xb3\x2b\x1b\x51\x1c\xf2\xd3\x63\x41\x7e\x8f\x34\x33" - "\xe7\x1f\x05\x3d\xe6\xc3\x18\xf6\xc1\xd1\xa8\x69\xdd\x12\x32\x2b" - "\x9d\xf6\x44\x1a\x97\x57\x3a\xed\x71\x6f\xaf\x4e\x7b\xfc\x63\xa5" - "\xd3\x14\x8d\x95\x4e\x7b\xfc\x5d\xa5\xd3\x1e\xdf\x22\xf7\xc5\xa0" - "\xd3\xf8\x1d\xeb\x35\x43\xa7\x6d\x1a\x2c\x0e\xb0\xee\xe8\xf4\x3c" - "\xbe\xde\xd0\x6d\x6b\x90\xc6\xba\x83\x71\x54\x7a\x2a\x3f\x20\xfe" - "\xdf\x2c\x52\x7e\x07\x7c\xef\xe4\xf3\x0b\x01\xfd\x9e\xc7\x93\x14" - "\xa5\xe3\x1e\x6f\xeb\xd5\x71\x8f\x3b\x7b\xcb\xb2\x8e\x7b\xfc\x3b" - "\xa5\xe3\x54\x7a\xed\xe3\xac\xe3\xf2\x03\x4c\x03\x1d\xbe\x89\xd7" - "\xf0\xf4\xfc\xa0\xe3\xa3\xc1\x58\x1d\x17\x2f\x5f\x4f\x8c\x31\x74" - "\x1c\xeb\x36\x3c\x4f\xf2\x53\xba\x9c\x67\xb3\x9c\x55\x81\xe6\x86" - "\xdc\x71\x1f\x70\x9b\x39\xae\x19\xd3\x6d\xdc\x09\xea\xaf\x9f\x1d" - "\xd2\xdb\xfd\x44\x85\xe1\xfb\xe8\xa7\xc7\xd7\x27\xb3\xa3\x7b\x63" - "\x0f\xd2\xd5\x7c\x76\xde\x57\x7e\x94\x7c\xd5\xa2\xbc\x25\x72\x84" - "\x0a\x4a\xa0\x2b\x52\x9f\xff\x92\xfb\x16\xf3\x8e\x9f\xf1\x95\x75" - "\x0f\xc6\xd2\xe6\x82\x10\x5d\x84\xb9\xfa\x97\xeb\x4c\x78\xe7\x8a" - "\x7b\x27\xd7\x18\x6e\x9e\xc7\x71\xeb\x9e\xd8\xd5\xd7\x7c\xff\xc2" - "\xea\x9b\x3e\xb6\xef\xfa\xa6\x3f\x26\xeb\x83\x4d\x85\x39\xd0\x25" - "\x27\x69\xba\x9c\x97\xc8\xf8\x36\x2b\x92\xc2\xaa\xd4\xdf\xf7\xeb" - "\xe3\xfd\xbb\xdf\x53\xfe\xdf\xbe\xa7\xfc\x37\xac\x8b\xd0\x3e\x6b" - "\xd4\x13\x0f\x67\x60\xc4\xc8\x77\x1c\xf9\x9e\xbc\x44\x5f\x8b\xf9" - "\xd2\x3d\x4c\xce\xd1\xec\x06\x4c\xe6\xbf\xb5\xc8\x27\x63\x86\x40" - "\x57\x8e\x5f\x4c\x1c\xaf\x25\xb6\xec\xe4\x5e\x1a\x3f\x49\xe7\x59" - "\xf7\xcb\xf0\x55\x93\x8c\xa1\xd9\x08\x9b\x14\x63\x1c\xc7\xed\xd3" - "\xd7\x3f\x9e\xac\x87\xde\xac\x8b\xf1\x8b\x6d\x87\x9e\xbb\x9a\xe3" - "\x1a\xb0\x7d\xb9\x4e\xcd\x37\x2f\x87\x7e\x1e\xc4\xe7\x61\xf8\x6c" - "\x4c\x41\x34\xcf\xd4\x28\xe3\x8b\x3d\xe9\x37\xca\xf6\xb5\xce\xc2" - "\xf5\xea\x75\xb2\x8f\x69\xa8\xd3\xf3\x54\xa6\x51\x86\x61\xb3\x9f" - "\x22\xc6\xe5\xab\xe5\x99\xd2\x48\x3b\xeb\xc2\xcb\x61\x8b\x0e\x52" - "\xf5\xcc\x20\x55\xcf\x53\x13\xfd\x34\xdd\x76\xbe\xb3\x19\x7d\xb7" - "\xef\xa9\x95\x17\xde\x3e\xd2\xdb\xf7\x94\xf7\x7b\xda\x77\xbe\x7a" - "\x23\x17\x5e\xaf\x4d\xaf\xb7\x20\xe7\xc2\xe9\x5a\x50\xf4\xc3\xe9" - "\x9a\xad\xd3\xb5\xa0\xee\x7b\xe8\x9a\xac\x9e\xc3\x3f\xbc\x1e\x87" - "\x5e\xcf\x0c\x4b\xb2\x7a\x48\xfe\xf5\x79\x6e\xca\x62\xc4\xb0\xe4" - "\x78\xae\x2a\xbe\xdc\x8c\xbc\xd8\x58\xbd\x2a\xce\xeb\x8c\x42\x23" - "\x56\xaf\x1e\x4b\x16\xba\x7a\xc6\xf2\x82\x3a\x1e\xdf\x85\xe6\xa7" - "\x19\x2b\x39\x3e\xea\xf8\x65\xea\x4c\xb6\x5e\xa6\xfa\x7c\x31\x82" - "\x39\xa6\x95\x10\xf9\xd4\x58\x2d\xf7\xdb\xa1\xd7\x67\xfc\x91\xfd" - "\xef\xd5\x7e\xe1\x8c\x23\x4a\xee\x67\x60\x8e\x38\x23\xab\x6f\x18" - "\xfb\x76\xd5\x97\x65\xf7\xeb\xcb\xa7\xbe\xd3\x33\x73\xa8\x9f\xe6" - "\x66\x48\x3f\xfa\xf4\xcf\x0f\x60\xfe\xa0\xc7\xd5\x7b\xe6\xed\x98" - "\x18\x82\x18\x0b\x9f\xfe\x9d\xee\xfb\x0f\x1a\x94\x83\x96\x33\xa7" - "\x19\x34\x30\xd2\x91\xe6\x34\x68\x00\x9b\x26\xc3\x57\x17\xe1\xb3" - "\x39\x21\x75\x0e\x7b\xe6\x1a\x51\xb9\xaf\x4e\xc1\x9e\xd9\xaa\xec" - "\x16\xd4\xd7\x9d\x6f\x96\x73\xa5\x32\x9e\x2b\x3d\x5d\x1c\x4c\xdb" - "\x57\x67\xe0\x21\xe6\xdb\x4d\x7c\xde\x7b\x54\x44\xc5\xe9\x62\x9b" - "\x80\xcf\xc6\xc9\xf7\xf3\xb3\x4c\x98\x5b\x82\x26\x33\xbf\x15\x1d" - "\x1c\x2f\x46\xc2\xce\x00\xde\xd5\x0c\xd7\x8f\x6b\x70\x69\x16\xc7" - "\xba\xd0\xdb\x33\xf3\x2f\xda\xaa\xcf\x0f\x68\x9d\x76\x93\x81\xef" - "\x66\x79\x8e\xf5\x69\xb4\xbf\x40\xda\x6d\x0a\x1f\xbb\x89\x7d\xf8" - "\xb5\xf4\x7d\xbb\xc4\x52\x3b\xed\x99\x17\x90\x73\x25\xae\x73\x14" - "\xc7\x83\xe3\xb9\x11\xec\x11\x94\x9b\xd6\x43\x37\xc0\x15\x9d\x06" - "\xdd\x9e\x26\x35\x16\xab\x36\x86\x96\xda\x4d\x8d\x41\x79\xc6\x8e" - "\x86\x3b\xdc\xdf\xa9\x58\xcf\x4f\xaf\x37\x68\xd7\x83\x13\xf0\xe1" - "\x3c\xca\xa7\xe9\xe9\x5d\x06\x4e\x52\x5e\xd3\xf9\xcc\xee\xcc\x7a" - "\x3e\x2b\xa4\xe8\xdf\x98\x81\x3c\x87\xcf\xa5\xff\xd3\x81\x18\xfa" - "\xa7\x32\xbf\x31\xfd\x79\x7d\x03\x74\xb9\x04\xb4\xb4\xa8\x33\x0e" - "\x6c\xc3\x3c\xc3\x67\xe9\x33\x18\x4f\xad\xd2\xa0\x79\xbe\x59\xad" - "\x8d\x3d\x33\x29\xa6\x1f\xd0\x5e\x3b\xdb\x67\x29\x46\xfb\xb9\x0c" - "\xd3\x80\xe3\x3b\x72\xdd\xc0\xe7\xe2\x4e\xcf\x33\x85\x89\x6d\x5a" - "\xa1\xce\x8f\x90\xf2\x27\x79\x66\x65\x8f\x7c\x0c\x16\xc1\x12\x87" - "\x08\xab\xb3\xc8\xcf\x8c\xd8\x53\x16\x34\xf7\x25\xf7\xcc\x83\x32" - "\x56\xa4\x49\xae\x25\xc0\xce\x9a\xb5\x58\x00\x37\xd5\xf7\xb3\x7e" - "\xa1\xd2\x0a\x37\xe1\x0a\x1e\x7b\xe6\x8c\x40\xdd\x41\xb7\x8c\xab" - "\x82\xb6\xcd\xaa\x62\x9e\x33\xf8\x8c\xd7\x1e\x95\x9f\x78\xe1\x63" - "\xac\x47\x0c\x9a\x03\xff\xf4\x4e\x4f\xe1\x70\x03\x7f\x23\x3f\xf7" - "\x1d\xe7\xe1\x7d\x9a\x26\x47\x58\xea\x57\x75\x4e\xa8\x30\xcf\x90" - "\x5b\xae\x83\xfb\x99\xf5\x0b\xd3\x43\xd1\xa2\xb0\x38\x1e\x96\xdd" - "\xa4\xe2\x53\x32\xcf\x43\x1e\x97\x84\xfb\x21\x4f\x55\x2f\x8c\x42" - "\x9b\x7a\xd7\x83\x27\xfb\xf6\x4b\xff\x3b\xd5\x1f\x85\x51\x6e\x57" - "\x2f\xbe\x2c\x7f\x85\x3d\xfd\xcf\xef\x42\x6e\x3b\xc7\xb3\x95\x7a" - "\xa5\x64\x18\xe3\x1b\xe4\x38\xb1\x92\xd7\x01\x7f\x3c\xe3\xce\x79" - "\x8c\x3e\xeb\xe5\xc5\x59\x43\x63\xe1\x08\xb7\xdd\x64\xe8\x27\xa5" - "\x3b\x82\x98\xa7\x92\x43\xed\xb1\xcc\x9a\x18\x83\xb3\xd7\xc0\xa7" - "\x57\x27\xcc\x72\x26\xf2\x24\xd7\xcd\xf1\xf7\x74\xd8\xac\x4b\x6c" - "\x47\x69\xd6\x34\x85\xd7\x33\x07\xb9\x1f\xfb\x1a\xd3\x8c\x38\x9f" - "\xaf\x2b\x1d\x82\x7e\x9e\xfd\xe7\xd7\xd5\xd9\xa1\x90\x8a\xe5\x38" - "\xeb\x2f\xc2\xb4\x85\x69\xc5\x6b\xe8\x41\x19\xa3\x43\x9e\x2b\x9f" - "\x25\xcf\x98\x0f\x2c\xde\x22\xe3\xc7\xea\xfe\x80\xc1\xa6\xe2\x88" - "\xdc\x6b\x70\x97\xf0\x39\xdb\x08\xcf\xef\xa4\xbf\x5b\x63\x49\x84" - "\x1e\x0e\xb3\x4c\xcc\xce\xe2\xf3\xf3\x21\x29\x4b\xb3\x47\x1b\x67" - "\xe6\x39\xa6\xa5\xe8\xcc\x27\xe8\xa1\x54\xb6\x8b\x1c\x6e\x8e\x77" - "\xf0\x2c\x9f\x1f\x22\xbd\x7f\x69\xad\x49\x1c\x52\xf2\x3f\x7b\x99" - "\x8c\x23\x28\xf7\xae\x8e\x42\x27\xa4\xfe\xe3\x28\xcd\x7e\x43\xad" - "\xf5\x18\x3a\xea\xd9\x01\xbc\x7f\xe5\xd7\x61\xa0\x2e\x8c\x7f\x33" - "\xcd\xe7\xea\x92\xd9\xcb\x8c\xf9\x0a\x9f\xb9\x53\x7b\x61\xbd\xf0" - "\xfc\x34\xbb\x94\xaf\xbd\x7d\xf0\x7b\x86\xd5\x7e\xae\x5e\x78\x96" - "\x0c\xd9\x2b\xbe\x86\xcf\x6d\xcf\x6a\xe2\xfa\xfb\x1a\x2f\x84\xfb" - "\x31\xee\x27\xcb\x31\x47\xf2\xbe\x49\xbe\xb7\xf6\x6c\xa1\xd1\x06" - "\x83\x26\xaa\x0d\xcf\xee\xeb\x48\xdf\x6d\x89\x69\xfb\x3e\x49\x8b" - "\xde\xf7\x67\x62\x68\xc3\xcf\x21\x35\xae\x3d\xbb\x07\xfc\x51\xaf" - "\x78\x4d\xa5\x41\x76\xb6\x89\xa5\xd0\x05\x12\xc7\x39\x64\xc8\x3a" - "\xf2\xc2\xfe\xfb\x76\xa8\xda\xe3\x7a\x16\xed\x7f\x56\x8f\x9b\xf0" - "\x6c\x05\xe3\x92\xb4\x9d\x71\x38\x3a\x8b\xd8\xbe\x50\x71\x14\x9c" - "\x2f\x30\xbe\x8e\xeb\xb9\x8f\x9d\x77\x48\x1d\xce\x31\x15\xba\x9d" - "\xfd\x42\xdd\x59\xd4\xd1\xed\x84\x5e\xc8\x32\x75\x7a\x9c\xd0\xff" - "\xa7\xc2\xaa\x4e\xe7\x0c\x03\x57\xc6\x0d\x76\xb3\xa5\x53\xcc\x49" - "\x4e\x5f\xae\x57\xc6\x79\x72\xf6\xc7\xcf\x82\xdf\x45\x3f\x24\x0e" - "\x13\xec\xf2\x40\xb0\xb2\x61\xbd\xb6\x50\x1c\xe0\x78\x62\x98\x7b" - "\x04\xd6\x81\x77\x07\x2e\xf7\xc2\x16\x7f\xd2\x54\xb0\x98\x72\x31" - "\x47\x26\x71\x56\xe4\x6c\xd6\x70\x5d\x28\x46\x73\xbc\x6e\x3c\x67" - "\xeb\xcf\x23\xf8\xb9\x63\xa1\x98\xde\xe9\x99\x63\x33\xf6\x04\x55" - "\x2c\x9c\x39\x8e\x9e\xf8\x41\xa9\x4f\xf0\xf9\x21\x8e\x33\xa5\x61" - "\xee\x13\xe0\x7a\x0b\x78\xfe\x8a\xfa\x90\x0f\xf2\x3f\x43\xb6\x33" - "\x98\x7a\xd3\x20\xfc\xb2\xfa\xd8\x3b\x0d\x30\x5e\x1d\x69\x0d\xeb" - "\x0d\x5c\x07\x86\x72\x4d\x3f\x10\xb7\x9d\x06\x6e\x48\x3f\xb0\x4e" - "\xa5\x47\x38\xde\x21\xfb\x36\xe2\xfd\x41\x03\x57\x03\x07\xae\x8f" - "\xcf\x6b\x8a\xf4\xdd\x76\x8e\x35\xc3\xf5\x05\x97\x72\x7c\xdf\x39" - "\x61\x03\xdf\x1f\xca\xc7\x65\x35\x42\xf0\xd8\xc9\xba\xd7\x31\x84" - "\xa8\x25\xc4\xfa\xe4\xb9\x49\x8d\x35\x21\x5e\xdf\x1e\x82\x3a\xae" - "\xe8\x10\x4e\xd2\xba\x9d\x49\xfb\x97\xcb\x20\x7f\x85\xd4\x0d\xab" - "\x76\x5f\xa1\x89\x89\xd0\x11\x28\xd7\x3d\x91\xd7\x96\x20\xb3\xcf" - "\xed\x69\x2a\x0d\xf0\x19\x4b\xe8\x9b\xe7\xf6\x20\x8f\x9d\x6d\x2c" - "\xcc\xaf\x58\x67\xa5\xb2\x5e\xf2\x2e\x1c\xcd\x30\x3e\x36\xbb\xc8" - "\xdc\xe4\xfa\x61\xdf\x01\x00\xdc\x76\x25\x37\xcf\xb5\x1b\x76\x09" - "\xee\xc3\xf1\xfb\xdd\xcf\xf9\x13\xe7\x66\x4f\xbf\xf8\x62\x49\xc1" - "\xbc\x59\x7c\xc9\xba\x6e\xc1\x8d\xe9\xb1\x73\x70\xd6\xc1\x2a\x3e" - "\xc2\xf3\x36\x5e\xef\x7a\x7d\x90\xb1\x7f\xfb\x7c\xcf\xf9\x2f\xdd" - "\x4f\xfc\x6e\x9e\x4b\xb0\xcd\x8d\x77\x45\xbf\x2b\x5d\x26\x6d\xa0" - "\x2f\x2d\x64\x4a\xac\x6f\xf6\xcc\x92\x99\x45\x77\xf2\x4e\x4d\x7a" - "\xb2\x7a\xca\x13\xea\x69\xe8\xa9\x47\xe9\xc0\x90\x89\xf3\x55\x76" - "\xef\x12\x69\x6d\x79\xea\x8c\xee\xf3\x47\x8c\xb5\x94\x3e\xfc\xeb" - "\xf2\xa3\xab\xbe\x60\x7a\x73\x4c\x29\xd3\x47\x4b\x5a\x4d\x6c\xcb" - "\x94\xe1\x9e\xe7\xb4\x72\x6d\x46\x8f\x53\xb4\xff\x74\x2b\xc6\x98" - "\xa2\x6c\x51\xb9\x9b\xd7\x75\xb3\xfa\x9a\xc7\xc6\xfa\x26\xb0\x2f" - "\x5b\x1b\x15\x4d\xec\xd3\x8f\xa0\xe2\xf3\x56\xa5\x63\x8a\x36\x35" - "\xd9\x89\xf1\xf8\xf5\x51\x2a\x7a\xdb\x6c\xc7\x38\x32\x84\xfe\x05" - "\xf7\x9b\xb8\x2c\xbf\x8b\xeb\xe7\xab\x4e\xd4\x99\xc1\x85\xe0\xc6" - "\x14\xa1\xfe\xc8\xac\xdf\xa4\xe2\x67\x12\x29\x72\x97\x2d\x15\x14" - "\xee\x7f\x91\x99\xac\x03\x33\x2c\x57\xff\x68\xa8\xfd\xee\xbb\xc6" - "\xe4\xb8\xcb\x4a\x21\xbd\x91\xb0\x55\xc4\xc6\xd5\xfa\x2a\xfc\xc8" - "\x8d\xe5\x24\xfd\x2c\x2a\xbf\x0a\x27\xc3\x75\x8d\x47\x14\xf3\x99" - "\x66\x2d\xbd\xdb\xe1\x5e\x40\xa6\x0f\xba\xfc\x26\x8e\x1d\xcf\x36" - "\x16\x7f\x5b\xe0\x28\xbd\x70\xe3\x17\x48\x43\xfb\x5d\xa2\xa2\xdb" - "\xa1\x6c\x93\x17\xe6\x68\xab\xba\x1d\xbd\xf0\xcd\xc4\xf0\xdd\x6f" - "\x93\xa9\xbe\x2c\x60\xf2\x99\xef\x22\x9f\x23\x44\x5f\xe0\x3e\x29" - "\x2d\x51\x27\xdb\x3b\x0c\xa3\xd6\xa3\x55\xb8\xbf\x23\x93\x7e\x2e" - "\xd1\x74\x92\x5e\xd8\xb2\xab\x8f\x72\x7c\x0e\xb8\x23\xbd\xe1\xd1" - "\x4e\xcf\x0b\xe8\xff\x7b\xcc\xfa\x78\x07\xbd\xfc\x02\xf8\xbf\x48" - "\xea\x7f\xbc\x7f\xa4\x43\xc6\x16\x9e\x4b\x46\x9e\xe4\x63\x1e\xaf" - "\xcd\x0a\x2f\xf7\xab\x38\xfb\x4d\x80\xcf\x3c\xf4\xe1\x1f\xd1\xdf" - "\xe7\xba\x95\xf7\xa8\xfa\x0d\x0c\x53\x86\xfb\x8c\xe8\x8e\x7a\x28" - "\x13\xec\x6e\x8a\x62\x4e\x1d\x39\x2b\xf2\x9b\xdb\x4f\xcb\x58\x97" - "\xac\x3f\xde\x9f\xfd\x7b\x93\x2f\x7c\xca\xeb\x5b\xa9\x51\x0b\x6c" - "\x0f\x5f\xcd\x29\xaf\x8a\x89\x19\xa5\x66\xfa\x2b\x35\xbb\xfe\x77" - "\xb9\xaf\xfc\xaf\x48\x17\xe5\x4c\xe7\xee\xb3\x62\x9a\xcf\xfc\xbf" - "\x88\xbf\x7d\xc2\xba\x10\x74\x77\x9c\xa4\xb9\xff\xb6\x1f\x70\x3e" - "\xf8\x2f\xc0\x92\xb1\xb4\xc6\xd2\x17\xb8\x47\x9b\x0e\x1b\x7a\x32" - "\x69\x0c\x92\x14\xef\x1a\xab\xeb\x49\x93\x06\x9d\xcb\x31\xcf\xa0" - "\x6b\x47\x73\xbb\xf0\x9c\xcd\xcf\xb8\x8e\xe0\xab\x75\xb9\x77\x93" - "\x35\xf2\x24\xeb\xe0\x7c\xd6\xaf\x48\x9f\x56\x7b\x56\xea\xe4\x3c" - "\xfd\x79\x92\xfe\x3c\x51\x7f\x1e\xaf\x3f\xe7\xea\xcf\x63\xf8\x59" - "\xe9\xee\x17\x9d\x3d\xe3\x8a\xa9\xff\x21\x3c\xbb\x8c\xbe\x00\x3e" - "\x03\xac\xae\x65\x72\x0c\xd0\xf1\x18\xad\xe3\x95\xad\x3f\x1b\xf8" - "\x5c\x65\x8d\x2c\xfb\x9f\xc2\x27\x1c\x8f\x4f\xb1\x25\x06\x1f\xb2" - "\xba\x72\x7f\x08\x3e\x36\x2b\xc7\xe7\xff\x6f\xe0\xc3\xb8\x70\x1a" - "\xea\xaf\x48\xc0\xa7\xda\xc0\x27\x29\xbf\x2d\x14\x01\x1e\xff\xe6" - "\x5f\x21\xe3\xfd\xf6\xe7\xb1\xad\xb6\xcb\x88\x5f\x57\x7c\xf8\x7c" - "\xf1\xeb\x20\x0b\x76\xe4\x41\xfb\x8b\xeb\xf5\x71\x7e\xaf\xb2\x05" - "\x5f\xca\x30\x7c\x8a\xd0\xd6\x1d\xeb\x54\x5b\x77\xae\xe4\x18\x6e" - "\x8b\xe9\x4a\xb7\x4b\x04\x30\x37\xfb\x8a\xe7\x0f\xb1\x70\x8b\x4a" - "\xe6\xcf\x7f\xe1\x4e\x47\xd1\xcc\xb9\xb3\x1c\xd7\x15\x3a\xe6\x3b" - "\xe7\xcc\x2e\x99\x15\xbf\xcf\x6e\xd3\xbf\x97\x22\xcf\x0f\xb0\xbd" - "\x2d\xe7\x5b\xe0\x7f\xd6\xdb\xca\xe7\xf3\xa5\x66\xe1\x79\x29\x87" - "\x75\xfd\xe6\xd7\xc8\xcc\x67\x8a\x81\x4f\x8d\xa1\xe3\x8d\x39\x12" - "\xeb\x78\xa4\xc3\xfe\x9b\x3b\x3a\x26\x9d\xf3\x1e\x30\xd2\x18\xbe" - "\xae\x9b\xfa\x1f\xa5\x97\xe6\x70\x9d\x49\x69\x78\x56\xd4\x61\x7c" - "\xe5\xef\x0d\x98\xa0\x53\x04\xc7\x63\xe2\x73\x79\x28\x27\x8e\xd1" - "\xbc\x2b\x58\xf7\xf2\x37\x79\x94\x5d\x2f\x80\xe3\xbc\x91\x28\x53" - "\x8f\x34\xf3\x5a\xe4\xc5\x5c\x81\xe3\x28\x71\xde\x09\x1c\x1f\x01" - "\xe9\x16\x3d\xce\x14\xa7\x3d\xc6\xf1\x0b\x90\x66\x8b\x49\x7b\x81" - "\x63\xa5\x23\xcd\xa1\xc3\x5b\xc6\x74\xc6\x73\xae\xbe\x96\xc2\x79" - "\x5e\xd5\xeb\x2d\x8f\xc5\x99\x3f\x9e\x71\xeb\xcd\xd9\x8e\x69\x0f" - "\xff\x64\xec\x5d\xcf\xbc\x38\x77\x76\x3a\x49\xb2\x67\x61\xb8\xcc" - "\xbe\xd5\x75\xe3\x9d\x8e\xe2\x59\xb3\xe6\x39\x16\xcd\x9a\x5b\xe2" - "\x98\xb9\x68\xe6\xe2\x74\x9a\xfd\xe2\xbc\x67\xf8\xf4\x3d\x77\xcb" - "\xfc\x82\x67\x66\x3f\xcb\xce\x10\x2a\x77\x7a\xdc\x38\x3e\x8d\x75" - "\x9b\x1e\xaf\xe2\xc0\x3a\xb6\x35\xd2\xf6\xd6\xe1\x9e\xe3\x38\xd9" - "\x71\x6d\xc2\x6f\x2f\x7e\x0d\xf8\x1d\xc6\xef\xd0\x71\x72\x4d\xc7" - "\x75\x4f\xa7\x67\xfe\x18\xc3\x9e\xe8\xe5\xa1\xf9\x79\x06\x0f\x61" - "\xfc\xdf\xa3\xc6\xb7\xf9\xe5\x2d\x11\x29\x3f\x3d\x3c\xb5\xee\x6c" - "\x2f\x4f\x71\x1c\xca\x16\xf6\xf5\x59\x88\xf7\xe0\x61\xd0\x9f\xe7" - "\xd5\x69\x4c\xb7\x63\xb4\x70\x01\xe6\xe3\x07\x39\x86\x0a\xae\x4d" - "\xe0\x97\x83\x2a\x6e\xc9\xfc\x08\xf2\x0d\x43\x1d\x7b\xf5\x3a\xd4" - "\xf3\x60\x71\x80\xbf\x9d\x71\x54\x7f\x66\x58\x80\x31\x80\xef\xf9" - "\xaa\xef\xa9\x59\xd9\x6f\x52\xcd\x1b\x8d\x77\x25\xdb\xf5\x3a\xbc" - "\xa0\x45\xf9\x66\x8f\x5c\xfb\x93\xf3\x2b\x5e\x3b\xb4\xa6\xdc\x2d" - "\x80\xcf\x29\x2d\xf5\x09\x19\x7f\xdc\x57\xde\x05\x1d\x71\xdb\x6d" - "\x3e\x97\xcc\x9f\xc2\x6b\x8b\x53\x8a\x85\xc6\xf1\xa9\xb5\xd4\xe7" - "\x5b\xb9\x9c\xb0\xec\xad\xd3\xd6\x0e\xc8\x55\xb6\x00\xc7\xa3\x2b" - "\x29\xd7\x61\x86\x99\xb6\xc7\x69\xfe\x2d\x6a\xae\xe6\x9a\xae\xec" - "\xb3\x92\xd5\x86\x0f\x1e\x64\x34\x0b\xcf\x35\x86\x0e\xf0\x53\x89" - "\x53\xf7\x97\xf2\xaa\xf6\x97\x1c\xd6\x9f\x1b\x74\x1c\x53\x38\x46" - "\x06\xf0\x3f\xc4\x7d\x87\x79\x6f\x03\xee\x0f\x83\x3e\x07\x15\x7d" - "\x4a\xa4\x0d\x08\xbb\x86\xdf\x1f\xe6\xef\x8c\xe0\xdd\x61\x15\x7f" - "\xa2\x24\x83\xdb\xdc\xeb\x53\x59\x93\x0b\x5c\x07\xf0\xde\x23\x64" - "\xa9\xc1\x77\x96\xe5\xb3\x84\x63\x59\xee\x32\xf4\x0e\xeb\x99\x82" - "\x28\xe4\x54\xda\xdd\x0b\xc6\x1b\xfa\xa6\x97\x0f\x16\xe4\x27\xd3" - "\x25\xc9\xfa\x5d\xd1\x7f\xc1\xef\x84\x67\x5e\x0d\x70\xda\x25\xfb" - "\x80\xe3\x74\x9e\xed\xb1\xef\xbb\x95\x8e\x5c\xb0\xb3\x67\x2e\xa2" - "\xe3\xc1\x31\xbf\xfd\x8c\x5b\x97\xdc\x0f\xd6\xf5\xc6\x82\xc3\x86" - "\xde\x30\xe0\x58\x53\x84\x66\x75\xe1\x5f\xc5\xee\x30\xaf\x9d\xf3" - "\x78\x29\xed\x11\xc0\x19\x78\x46\x9d\x8d\xd2\x2a\x77\x43\x27\x2e" - "\x58\x0d\x1d\x63\x96\x36\xa7\x67\xde\x07\xbd\xba\x68\x61\x56\x2c" - "\x4c\x61\xd9\x1d\x66\xb8\xac\x8f\xd8\x26\x29\x88\x9a\x39\x3e\x49" - "\x58\x1f\x5f\xa0\x83\x17\xe6\x1b\xb8\x82\x86\x07\x0c\x7c\xf5\x6f" - "\x3c\x41\x57\x2d\x68\x98\x1a\xed\x66\x1f\xe1\x26\xd5\x9f\x2e\xa9" - "\x6f\xf0\x6e\x27\xca\x56\xf9\xe9\xa5\x80\x2e\x43\x07\x51\x7e\x67" - "\x63\xd9\x78\xe4\x59\xb8\x4b\xf7\x73\x3d\x84\xfe\x3d\x1c\xc3\xfb" - "\xdb\x63\xd6\x02\x0e\xab\x3e\xbc\xab\xfc\x28\x2d\x0c\xc6\xa4\xeb" - "\x7d\xdb\x98\x77\x94\x16\x6d\x57\xf3\xea\xdd\x0d\xaa\xfc\x22\x75" - "\x76\x45\xc7\x91\x75\x01\x9f\xe3\x62\x19\x97\xb4\x97\x7d\xbc\x28" - "\xcb\x18\x2f\x00\x6b\x8f\xa4\xf9\x60\xb1\x97\xe9\xa4\xe2\x40\xcc" - "\x6b\x51\x74\x5a\x94\x17\x47\x7b\x1e\x37\x51\x0f\xd3\x69\xe0\x72" - "\xa1\x0d\x0c\xa5\x88\x82\xc5\x66\x62\x79\x61\x19\xe7\x3d\x23\xf0" - "\x87\xb4\xab\x14\xdd\x16\xad\x37\xe8\x66\xf4\x1d\xd3\xc9\x4f\x8b" - "\x88\x69\x1b\xdf\xc6\xfe\x87\x8e\x1a\x6d\x07\x4d\x79\x1d\x1c\xcf" - "\xf5\xba\x5c\x1c\xf4\x0e\x61\x9f\x82\xf9\xef\x36\x9a\x7f\x42\x8d" - "\xae\xd1\xa4\x68\xbb\x28\x08\xda\xe6\xc5\xcc\x1b\x0e\x30\x7d\x59" - "\x56\x80\x67\x48\x8f\xc9\x74\x40\xf9\xb7\xcc\xaf\x87\xbd\x1f\x92" - "\xb2\xbc\x50\xc6\xce\x60\x19\x38\xc4\x34\x62\xbd\xc8\xb2\xc4\x32" - "\xc0\xf2\xa4\x68\xe4\x9a\x14\x43\xa3\x26\xa6\x8f\x4e\xa7\x3d\x09" - "\xba\x7c\x96\xa3\x68\xac\xd2\xc5\x8e\xac\xeb\x0a\x47\xc9\x00\x28" - "\x8e\xfb\xc6\xdd\xe9\xc8\x1b\x7b\x9d\xcb\x39\x62\x8a\xba\x8c\xcb" - "\x9b\xc4\xd7\xf4\xf8\x79\x97\x03\xf5\xec\x89\x9f\xbb\x95\xe5\x2a" - "\xfd\xe1\x3a\xe8\x4f\xe9\xbf\x83\xd3\x39\x1e\xe9\xba\xb9\x44\x51" - "\xe0\xbd\xf6\x38\xfa\xd4\xb2\xbb\x8a\xe3\xdf\x4e\xc5\x9c\x71\xca" - "\x19\xf1\x5d\x2d\xde\x6d\x46\xfa\xc0\x62\x8e\x9b\xff\x77\xa1\xa5" - "\xed\xae\xe2\xb9\xbd\xa8\xdc\x96\x1f\x4c\xfb\x2a\x8c\x9f\x37\x98" - "\xd6\xe0\x9c\x70\xa3\x5b\x74\x7a\x16\x0f\x37\xda\xc5\x6b\x00\xa0" - "\x53\xd5\x54\x97\x88\x32\x8d\x0a\x5c\x1c\xa3\x1a\xb0\x53\x79\x0d" - "\x60\x31\xda\xff\x42\x85\x9a\x5f\x2e\x06\xff\xcf\x6b\xd7\x75\x59" - "\x1e\x9e\x61\xff\xdd\xbe\x4b\xf6\xab\xc7\x2e\x63\x5b\x6b\x2b\x6e" - "\x7a\x08\xf3\x01\xaf\x01\x13\xb0\x2e\xd2\x63\xf8\x49\x78\x3f\xd4" - "\xdf\x52\x5b\xf5\x51\xbd\x35\x45\xc5\x0b\x84\x8c\x97\xd7\x9a\xb4" - "\xfc\x1e\xff\x09\xbc\x1b\xb8\xdc\xc6\xfe\x15\xf9\xe0\xbd\x72\xce" - "\x63\xbc\x5b\xe7\xd1\xfc\xeb\x4c\x5a\x18\xfd\x68\x53\xf6\x73\x3b" - "\xeb\x4f\xcc\x2d\x97\x64\x1a\xe3\x9a\x1c\x0f\x4d\x54\xae\xe6\x33" - "\x4b\x6e\xe7\x72\xa7\x3d\x66\xcc\x19\x5c\xf5\xd7\x64\xca\x39\x4a" - "\x58\xf3\xa4\x90\xf2\x71\x5d\x92\x66\xe8\x58\xde\x47\xb3\x2e\x17" - "\x41\x5e\x47\xb4\x46\x44\x50\xc6\x60\xe7\xb1\x83\x8e\x93\xaf\xb4" - "\xb3\x9c\x7d\xec\xa4\x0d\x84\x7a\xd5\xb8\x11\x55\xe3\x06\xea\x0f" - "\xa6\xde\x34\x03\xe3\x43\xca\x71\x5a\xdc\xca\xf8\x33\x6d\x78\x3d" - "\x5e\x03\xad\x7c\x3c\x4e\x32\x7d\xd2\x3f\x1e\xce\xbe\x11\xdc\x56" - "\x6b\x04\x6d\x8e\x6d\x97\x49\xf3\xaf\xf5\xa0\x5d\x26\xb4\xcb\x75" - "\x82\x65\x26\xcc\x3e\x2b\x90\xb7\xc1\x32\xce\xb1\x9c\x3f\x2f\x09" - "\xc7\xb6\x91\xf5\xbf\x6a\xc3\xd2\x2b\x92\xb5\x51\x98\xb8\x8d\x92" - "\x06\x27\x74\x79\x93\x78\xb2\xfe\x68\xa7\x25\x3b\x07\x2e\x67\x5f" - "\x91\xdd\x55\xd0\x6f\xe3\xb8\x0f\x31\x7e\xae\x67\x3c\x93\xf5\x17" - "\xc3\x53\xb0\x96\x36\x58\x97\x97\xcf\xe8\xf4\x2c\x5d\x99\x9c\xde" - "\x4b\xb7\x9f\x9f\xde\x4b\x17\x73\x79\xc6\x83\xf7\x00\xac\x11\x4c" - "\xd6\xc1\xb7\x98\xaf\x55\x24\xab\x77\xe0\xf2\x3a\xc6\x2b\xe9\x3b" - "\xc1\xf2\xa2\xeb\x20\xf0\xa1\x80\x9c\x08\xd6\x49\x9d\x9e\xd2\x9e" - "\xf5\x2f\x6b\x8a\x23\x55\xea\x07\x93\x58\x9f\x0c\x86\x75\xf9\x7a" - "\xde\x0b\x19\x87\xfa\x93\xbe\xd7\xf8\x9b\x0e\x15\xbb\xcb\xb5\x15" - "\x3f\xbe\xc6\x9a\x42\x77\x07\x53\x7f\x9c\x6e\x75\x45\x86\x33\x0d" - "\x01\xd3\x05\x39\x1e\xc9\xf3\x54\xb5\x76\x51\x0a\xfb\x7f\x8d\x8c" - "\xc7\x1d\x4c\xdb\x5d\xae\xf6\x16\x4a\x31\xfe\x55\x4d\x32\xd6\x6f" - "\xf1\x0c\xfd\xf2\x75\x91\x92\xcb\x2b\x37\x88\x55\x0d\xa3\x35\x8f" - "\x55\x38\x96\x58\x61\x47\x2e\x7b\x44\x13\x1c\xe7\xbf\x61\x74\x2f" - "\x9f\x28\x3f\x1a\x83\x4f\x50\x3e\x92\x9c\x07\x96\x5d\x75\x7e\x1e" - "\x28\xfd\x96\xdf\x33\xdd\xd5\x5c\x65\xd9\x78\xc3\x4e\x11\x2b\xae" - "\xdc\xe0\x28\xe3\xfa\x4b\x5b\x55\xdd\x4c\x93\x5c\xde\x57\x98\x04" - "\xba\x94\x23\x6f\xb1\xa1\x07\x98\x5f\xac\x51\xfe\x06\x02\x49\x9e" - "\xc6\x3b\xd8\x3f\xc5\x7e\xb5\x56\xda\x10\x94\xdf\x0b\xf4\xb8\x9c" - "\x41\xb7\x73\x23\xc6\x61\x0a\xa5\xed\x86\x5e\x59\xb6\xcb\x4f\x5e" - "\x19\xcf\x08\x63\x70\x08\x30\xc2\x55\xca\x4f\xd6\x22\xe3\x08\x41" - "\xa6\x39\x76\x10\xcb\x35\xd2\x32\x81\x37\xc7\x11\xc2\x7c\x67\x59" - "\xa0\x67\x5c\xf2\xe4\x42\x57\x08\xf9\xed\x1d\x8c\x4b\x43\x3b\x40" - "\xbb\x37\x4c\xda\x8e\xb3\xa3\xec\xc4\x6d\x3e\xbb\x62\xc8\x8e\x5f" - "\xdf\x4c\xe6\xff\xc7\xfe\x34\x15\xdf\x4a\x99\xcb\x7f\x62\xa6\xff" - "\x93\x43\x26\xa6\x83\x9f\x96\x85\x15\xed\xca\x72\x8c\xfe\xf1\x53" - "\x69\x9d\xd4\x9d\x2b\x9e\x08\x4c\x8d\x88\xef\xd4\x7a\x68\x19\xf4" - "\xdf\x73\x87\xd4\x7b\x97\x37\x71\x0d\x88\xed\x79\xc7\x9c\xf9\x8e" - "\xc2\x17\x17\xcd\x1d\x36\x2c\x6e\xae\x64\x96\x67\x63\x3c\x65\x45" - "\x6a\x3c\x2d\xeb\x89\x7f\xc4\x76\x09\x9e\xd1\x7e\xd7\x39\x31\xce" - "\x27\x15\xe8\xee\xcf\x05\xd9\xd4\x7b\x7f\x0b\x4d\xba\x25\xe6\xf1" - "\x36\x9a\x74\xeb\x6d\x05\x0f\xcd\x9a\x59\xb8\x38\x26\xf5\xf6\xd8" - "\x75\xbd\x75\x1b\x50\x77\xea\x90\x7b\xa1\x2b\x52\xa6\x2c\xe5\xb1" - "\xc5\xfd\x46\x59\x44\xfc\x03\xfa\x3a\x07\x32\x56\xd0\x5c\x12\xa1" - "\x66\xe8\x32\x71\x25\xeb\xf0\xfe\xea\xcc\x1f\xec\x29\xf0\x96\x15" - "\x6d\x0f\xc2\xae\x3b\xc3\xeb\x33\x28\xf7\x69\x4b\x35\xc7\xfa\x6d" - "\xd0\xe3\x98\xbb\x4b\x90\x7e\x09\xae\x9b\x70\xbd\x08\xd7\x2d\x8e" - "\xb9\x98\xf7\xb0\x8f\xf5\x42\xf6\xb1\x76\x4b\x5f\x97\x9b\x43\xe5" - "\xc4\xbe\x22\x78\x3f\x82\x6d\x10\x3f\xb9\xf9\xfb\x60\xfc\x4d\xba" - "\x5c\xa4\x2d\x70\x3c\x47\xd9\x7c\x15\x72\xff\x08\x33\xb0\xca\x86" - "\x62\xb1\x31\x9f\xbf\xa5\x35\x1c\xe9\x7f\x49\x4d\xf9\x92\x52\xed" - "\xfd\xa3\x9d\x1e\x77\xab\x9f\x9e\x5f\xcd\x74\xea\xeb\xdb\x9f\x4c" - "\xe7\x44\xfb\xb0\xd7\x36\x5c\x45\xd2\xbe\xd5\xed\xb9\xcd\x72\x5c" - "\x28\x1f\x11\x63\xd3\xf1\xfe\x65\xba\xb2\x4f\x44\x54\xd9\xa7\xe5" - "\x93\x0c\x39\xc0\x7d\xbe\xc1\xa7\x71\x71\xd7\xe6\x96\xcc\x9a\x37" - "\xab\xd0\x71\xdd\xfc\x74\x8a\x89\xba\xe6\x9c\x35\xd7\x31\x6f\xd6" - "\x4b\x0b\x66\xcd\x97\x11\xd3\xf8\x6d\xdc\x98\x9f\x29\xd2\xff\xb5" - "\xde\x38\x0f\xe4\x18\xc2\xf4\x2d\xdf\xc7\xb1\xba\xc4\xaa\x4f\x86" - "\xb3\x4f\x87\x9a\x6f\x74\xe7\xc4\xcf\x37\x3c\x79\xca\xce\x6b\x98" - "\xa1\xe6\x3a\xcb\xbf\xe6\xe7\xa3\xb4\xdc\xd9\x1b\x17\x7c\xf9\x15" - "\xa0\xa5\x49\xd1\xcd\x72\xac\xd3\xb3\xdc\x66\xd0\xcd\x4f\x9e\x6a" - "\xdd\x96\x6a\x97\xfa\x03\x63\x2c\xf4\x5f\xdc\xf8\xaa\xbe\xf9\xb9" - "\xdc\x0e\xde\x48\x95\xeb\xbd\x69\x0d\x85\x5c\x17\xc3\x3c\x86\xf2" - "\xe8\x9f\x19\xd0\x9b\xac\xdf\x2a\x0c\x78\xa8\x93\xb8\x3e\x7d\x1e" - "\x74\x39\xca\xcb\xfd\x70\xad\xa2\xa1\x90\x75\x0a\xc7\x96\xd0\x2a" - "\x01\x47\xee\xe3\x79\xaa\xd9\xc6\x94\xb1\xe9\x01\x8b\xd7\x69\xa1" - "\x1b\x4a\xf8\xfb\xb0\x9c\xa6\x62\x86\x95\x17\xf2\xda\x30\xea\x9a" - "\x0e\xfc\x0f\xf5\xfa\xbc\x7b\xaa\xd9\xee\x64\xb8\x7e\x5a\x5e\xc5" - "\xf0\x54\x4c\xb4\xe5\x21\x3f\x95\x45\x7a\xed\x27\x4f\x4e\xcc\xbc" - "\x0c\xf8\x28\x3c\x43\xc0\x45\xc6\xdf\x54\x3e\x88\xb2\xdd\xac\x3f" - "\xab\xf4\xb6\x1b\xed\xe9\xf4\x78\xa0\xff\xdc\x01\x63\x6f\xdd\xaf" - "\xb7\x9b\xf1\x63\xdc\x63\x71\xd6\xf1\x2d\x66\x7c\x51\xae\x34\x46" - "\xb6\x79\x5d\xa6\x1f\xd2\xd6\xf7\xfa\x36\x97\xb7\x26\xea\x8d\x17" - "\xe7\x3a\x8a\xe6\xcc\x7d\xbe\x60\xd1\xcc\xe7\x67\x15\x2c\x28\x1e" - "\xe1\x58\x30\xf7\xe9\xa2\x17\x9f\x79\x9e\xb9\x66\x7e\xc9\x82\x67" - "\x9e\x77\xb0\x66\x29\x18\x3f\x69\x52\xc1\xbd\x8f\x3c\xfc\x58\x3a" - "\xdd\x3b\x13\x69\x98\xf9\x4f\xca\x1e\xa1\x5e\x3d\x34\x61\xdc\xa3" - "\x05\xe3\xa6\x3e\x32\x65\x9a\x3c\x0c\xd1\xf3\x7e\xfc\xdc\xe4\x19" - "\xe2\xf8\xd0\x06\x5e\x9a\x8e\xfe\xed\x77\x94\x7e\x95\xa9\xe2\x68" - "\xaf\x18\x1f\x1f\x47\x7b\x05\xe6\xb2\x2b\x60\x65\xae\xc0\xd8\xbf" - "\xf2\x00\x7e\x98\xa7\xfe\xca\xa2\xf8\x2b\x6d\x6a\xa7\x67\x45\x71" - "\x2f\x7f\xfd\x2a\x53\xee\x8f\x57\xcb\x7d\x67\x13\xde\x41\xff\x97" - "\xaf\x8f\x7d\xd7\x3b\x9f\x5c\xb1\xa3\x67\x3e\xd9\xa3\x53\x56\x1c" - "\x36\xe6\x96\x48\x73\x62\x5e\x99\xc6\xf3\x4a\xb5\x9e\xf4\xab\xcb" - "\x24\x4f\xf5\x29\xdf\x16\x32\xe6\x95\x2c\xdb\xbc\x4f\xac\xe6\x1f" - "\x2b\x6d\xb1\x32\x2e\x63\x37\xea\x32\xce\xe5\xe4\xfa\x9d\xa5\x7b" - "\x38\xaf\x69\xc3\x3e\x9e\x0e\x5b\x01\xe3\x57\xa7\x10\x69\xdd\xc3" - "\x15\x4e\x2b\xf3\x78\x8d\x9b\xed\x66\x9d\x9f\x06\x1e\xa7\x95\x6b" - "\x84\xc7\x53\xaf\xe6\x94\x9e\x3f\xb3\x5e\x17\x2b\x86\xdc\xcb\xfe" - "\x27\x3c\x77\x42\x9d\x2b\x7b\x79\xf6\x57\x99\xcc\x0b\xbd\x73\xd9" - "\x95\x71\xfa\xbf\x43\x7e\xaf\x6e\xe5\x1e\x23\x0e\x40\xc9\x30\x32" - "\x99\x87\xad\xa7\x2a\x93\x28\xf7\xd3\xca\x42\xae\x83\xe9\xe9\xa7" - "\x15\x6c\x33\x98\x7b\xe9\xb7\x32\xd0\x43\x3f\x7d\x9d\xc5\x58\x63" - "\x51\x78\xff\xea\xb2\xbe\x68\x95\x9c\x4e\x2f\xe7\x7c\x2f\x9d\x3c" - "\xd4\x8f\x65\xd2\xa0\xd7\xb9\xb4\x7a\xb9\xf4\x5c\x5a\xbd\xdc\x1c" - "\x43\xab\x33\xe7\xd2\xea\xe5\x5d\x31\xfb\x3e\xfa\x3a\xca\xaf\x2e" - "\x63\x9a\x31\x8f\xa1\xdd\x85\xe0\xb3\xca\x5e\xfa\xbd\xec\x3f\x97" - "\x7e\x2f\x87\x92\xd3\xef\xe5\xf5\xd7\xc4\xc3\x59\x97\x6c\xdc\x18" - "\xb8\xdc\xa4\x9f\x13\xfa\xd5\x9c\xa6\xa1\x72\x4e\x1a\x7e\xdd\xa4" - "\x39\x5f\xf7\xe0\x87\x2b\xcf\x23\x7a\x6d\x71\x11\xd6\xe9\xeb\x6c" - "\xc2\x9c\x97\xd7\x95\xce\x33\x16\x1d\x31\xd6\x3c\x70\xdf\xca\x73" - "\x67\xfe\x56\x10\xa7\x33\x3d\xf9\xdb\x53\xe0\xf7\x56\x65\x97\xfe" - "\xaa\xa1\x67\xcd\xe5\xfa\x07\x8a\x53\x97\x93\xa3\xb1\xe6\x56\x4e" - "\x3f\x04\x1e\x92\x6b\x48\xec\xdf\xd3\x17\xcc\x82\x68\x2e\x25\x87" - "\xfb\xeb\x1e\xfe\xef\xeb\xac\x6c\x82\x3e\x72\xce\x9c\x5b\xf8\xe2" - "\xec\xd9\xdf\xaf\x8a\x62\x7d\x77\xd6\x7b\xb4\x8a\x4e\xfe\x1e\xe3" - "\x8a\xe7\x96\xa0\x4e\xd8\xff\x2f\x78\xd5\xb8\xf9\x6b\xe8\x3f\xa7" - "\x4b\xd9\x92\x4f\x04\xd4\xf9\xe0\x5f\xb7\xc7\xe8\x67\xf0\xc8\xaf" - "\xc3\xc2\xf3\xeb\xd1\xbd\x7d\xfc\xeb\xa6\x73\xfb\xf8\xd7\xad\xc9" - "\xfb\xf8\xd7\x11\x6d\x21\x9f\xcf\xf8\x35\xcf\x7f\xa4\xad\xc9\xcf" - "\xbc\x5f\x8e\x39\x73\x00\xf3\xe5\xf6\xa9\x8b\xbd\x77\x17\x2c\x4e" - "\x61\xbf\x72\xf9\x4d\x8e\xc8\x59\xd1\xc6\x7b\xd6\xbc\x3f\xc6\xdf" - "\xe4\xe0\x6f\xf1\xf0\xb7\x5a\x65\x1e\xdc\xaf\x3b\x46\x72\xee\x88" - "\xf7\x8e\xda\x63\xf2\xbb\xc4\xb0\x15\x2a\xf2\x0d\xdb\xda\xba\xdc" - "\x21\xcf\x2d\xaf\x55\xfd\xd1\xca\x7d\xc1\xf5\x15\x2c\xf6\xaa\x3a" - "\xce\xf2\xf7\xb6\xc8\xaa\x6c\x88\x8a\xf5\xe7\x5d\xbb\x4f\xfb\xaa" *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Wed Jul 20 21:18:05 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CB09A106567E; Wed, 20 Jul 2011 21:18:05 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B997C8FC15; Wed, 20 Jul 2011 21:18:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6KLI5uX032581; Wed, 20 Jul 2011 21:18:05 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6KLI5Ej032578; Wed, 20 Jul 2011 21:18:05 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <201107202118.p6KLI5Ej032578@svn.freebsd.org> From: Andrew Gallatin Date: Wed, 20 Jul 2011 21:18:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224236 - stable/7/sys/dev/mxge X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jul 2011 21:18:05 -0000 Author: gallatin Date: Wed Jul 20 21:18:05 2011 New Revision: 224236 URL: http://svn.freebsd.org/changeset/base/224236 Log: MFC r223958: Update mxge(4) firmware to the latest version available from Myricom (1.4.53a). Modified: stable/7/sys/dev/mxge/eth_z8e.h stable/7/sys/dev/mxge/ethp_z8e.h stable/7/sys/dev/mxge/rss_eth_z8e.h stable/7/sys/dev/mxge/rss_ethp_z8e.h Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/dev/mxge/eth_z8e.h ============================================================================== --- stable/7/sys/dev/mxge/eth_z8e.h Wed Jul 20 21:17:55 2011 (r224235) +++ stable/7/sys/dev/mxge/eth_z8e.h Wed Jul 20 21:18:05 2011 (r224236) @@ -1,6 +1,6 @@ /******************************************************************************* -Copyright (c) 2006-2010, Myricom Inc. +Copyright (c) 2006-2011, Myricom Inc. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -28,7287 +28,7495 @@ POSSIBILITY OF SUCH DAMAGE. $FreeBSD$ ***************************************************************************/ -static unsigned int eth_z8e_uncompressed_length = 367564 ; -static unsigned int eth_z8e_length = 116477 ; -static unsigned char eth_z8e[116477 + 1] = - "\x78\x9c\xec\xbd\x7f\x78\x54\x45\xb2\x37\x5e\x99\x0c\x32\x89\x81" - "\x19\x31\xe2\x88\xb8\x0e\x8a\x1a\x5d\x90\xa8\xb8\x1b\x5d\xd0\x28" - "\xe0\xa2\xf2\x23\xab\xe8\x46\x45\x03\x1a\x70\xd0\x88\x11\x02\x0c" - "\x10\x32\x61\xc0\xdd\x04\xf9\xa5\x46\x8d\x10\x48\x80\xe0\xc5\x5d" - "\x54\x44\xbc\x46\x05\x9c\xdd\x64\xbf\x0f\xf7\x5e\x92\x61\xf7\xb2" - "\xef\x9b\xdd\x2f\x7b\x77\xc4\xc8\x8e\xbc\x01\x46\x32\x90\x31\x99" - "\x39\xfd\xfd\x54\xf7\x39\xc9\xcc\x30\x41\x79\xef\x7d\x9e\xef\x3f" - "\x9b\xe7\x99\x9c\x73\xfa\x74\x57\x57\x57\x57\x55\x57\x77\x57\xd7" - "\x21\xba\xf0\x3f\x3f\x59\xf8\x92\x42\xa6\x86\xe0\xef\xfe\x2f\xca" +static unsigned int eth_z8e_uncompressed_length = 375636 ; +static unsigned int eth_z8e_length = 119802 ; +static unsigned char eth_z8e[119802 + 1] = + "\x78\x9c\xec\xbd\x7f\x78\x54\xd5\xb5\x3f\xbc\x32\x99\xc8\x24\x06" + "\x26\x62\xc4\x29\xc5\x76\xb0\x41\xa3\x05\x89\x16\xdb\xd4\x42\x0d" + "\x02\x1a\x2c\xbf\x14\x6c\xa3\xa2\x09\x1a\xe8\xa0\x11\x22\x44\x18" + "\x20\x64\xc2\x80\x36\x41\x20\xa9\xa0\x46\x09\x09\xbd\xf2\x23\x56" + "\xac\xd8\x02\x62\x45\x19\x24\xf6\x4b\x7b\x93\x0c\xed\x8b\xf7\x9b" + "\xdb\x17\x6f\x47\x6e\x84\x94\x1b\x60\x4a\x06\x32\x26\x33\x67\xbf" + "\x9f\xb5\xf7\x39\xc9\xcc\x30\x41\xb9\xf7\x3e\xcf\xfb\x4f\xf3\x3c" + "\x93\x73\xce\x3e\x7b\xaf\xbd\xf6\xda\x6b\xad\xbd\xf6\xde\x6b\xaf" + "\x43\x74\xe5\x7f\x3e\xb2\xf0\x25\x81\x4c\x07\x8a\x0f\xfd\x37\xca" "\xff\xf3\xef\x9f\x7f\xff\xfc\xfb\xe7\xdf\x3f\xff\xfe\xf9\xf7\xcf" - "\xbf\xff\x7f\xff\x82\x29\x34\xfa\xb4\xc9\x4c\xbf\x5f\x4f\xd4\xe9" - "\xb1\x0c\xf5\x53\x57\xf1\x5b\xaf\x8b\x08\x5e\xa5\x60\x9c\x1f\xca" - "\x57\xfe\xbd\x86\x34\xd3\x7a\xb2\x5c\x63\xa3\x8c\x71\x9b\x88\xaa" - "\x06\x8b\xf6\xd7\xdf\x14\xc1\x15\x6f\x8a\xf6\xf1\xdb\x89\x9a\x86" - "\x13\xbd\x3e\x58\x84\x00\x63\xba\x9f\x9e\x9a\xc6\x30\x56\xe0\x99" - "\xdf\xaf\x1c\x2c\x82\x48\x2f\x41\xfa\x41\x4e\x5f\x3e\x18\xb0\x32" - "\x89\x3c\x6f\x8a\x70\x0c\x5c\x0b\x97\x67\x98\xe3\x87\x49\x5c\xea" - "\x13\xe0\x30\x8c\x06\x3f\x15\x8c\x3f\x0f\x8c\x0c\x03\xaf\x90\x89" - "\x52\x18\x5e\x87\x87\xec\x21\x8f\xf7\x32\x94\x0d\xa1\x3d\x59\x5c" - "\x76\x1d\xf2\x08\x0f\xa5\x36\xb9\x22\xe4\xb8\x86\x52\x8e\x51\xfa" - "\x16\x5c\x4d\xb8\xbe\xc1\x6d\x5d\xa1\xca\x0d\x67\x18\x28\x9b\xd2" - "\xe9\x49\xcb\xee\x29\x0b\xd8\x8e\x32\x32\x23\xef\x9c\x90\xc9\x6b" - "\x52\x79\x6d\x69\x7a\x5e\x13\xf2\x4e\x37\xf2\xaa\x77\xa6\xfb\xf5" - "\x77\x17\xe3\x9d\x2b\xfe\x9d\xf9\x35\xfd\x5d\x06\xde\x55\x25\xe0" - "\x67\xf6\x75\x45\xe8\x18\xa5\xed\x04\x2e\x8e\x46\xf4\x08\x97\xd1" - "\xf3\x5f\x82\xfc\x4d\xf1\xb0\x88\xf4\x77\x83\xf0\xce\x1f\xff\x6e" - "\x7f\xb6\xfe\xee\x72\xbc\x8b\xc4\xbf\x4b\x31\xca\xd9\x3b\x3d\xe9" - "\xf6\x24\xed\xe4\xfa\x53\x54\xdd\xdc\x86\xf4\x31\xc8\x53\xce\x79" - "\xa6\x39\xca\x89\xfb\x8a\xdf\x35\xd6\xf5\xd4\xcf\x79\x66\x18\x70" - "\xfc\x28\x1f\x43\x53\xd0\x32\xbd\xd4\x28\x3f\xde\xc1\x30\x48\xd2" - "\x90\xe1\xf8\x29\x6d\x22\xc3\xe1\x67\xdc\x0f\xe5\x76\xeb\xf7\x0e" - "\x6e\x5f\x6c\x9f\x13\x99\x01\xb6\x1f\x0c\xd1\x8b\xf0\xeb\x6f\x31" - "\x78\x60\xbe\x5d\x68\xee\x2b\xc8\x2c\x56\x6d\xa9\xd3\x3c\x82\x7c" - "\xae\x30\x39\x86\x90\xfb\x28\x5d\x6c\x07\x7e\xb4\x76\x09\x59\xdc" - "\xc5\x22\xec\x73\xb5\x53\x4b\xb0\x9d\xdc\x41\x11\xf0\x45\xce\x50" - "\xd9\x19\xb2\xf8\x22\x27\xa8\xec\x25\xb2\x37\x95\x7e\x4d\xc9\xf8" - "\x4b\x33\x09\x72\x0f\xe5\xb2\x6d\xd4\x52\xd3\x46\xee\x9a\xf8\xb2" - "\xee\xab\xc8\xde\x8c\x67\xf4\x9d\x95\xf1\x68\x72\x44\x28\x92\xbe" - "\xa5\xae\xf4\x6d\x32\xbb\x87\x91\xa9\xb9\xd0\x6b\xe0\xe2\x67\x5c" - "\x56\x1e\x27\xcb\xb6\xd9\xe0\xa1\xe3\x8c\xef\xbb\x75\x1f\x2c\x09" - "\x9b\x1a\xed\x93\xa8\xd1\x7e\x84\x9a\xec\x63\xa9\xc9\x35\x9e\xd6" - "\x1e\xa7\x8c\xc6\xf0\x18\x6a\x32\xdf\x07\x19\x1b\x4f\xbe\x76\xdc" - "\x3b\xa2\xc8\x13\x22\xc7\x42\x02\x7f\x5c\x7c\xa8\xea\x39\xb2\xf8" - "\x15\x4c\xd0\xf7\xe2\x23\xbf\x2b\x21\x62\xfa\xf2\x73\xb2\x76\xcc" - "\xbf\x82\xec\xc0\x2f\x00\x5c\xee\x38\x4a\x19\x97\x0d\xb7\x53\x36" - "\x70\xee\xef\xab\x8e\x90\xb9\x94\xd2\xfa\x90\xad\x4c\xcd\x23\x65" - "\xbc\x7d\xf3\x9b\x22\xc0\x3c\xda\xb1\x34\x1f\x72\x9a\x31\x09\x75" - "\xb7\x73\x7d\x6b\x21\xeb\xee\x2d\x64\xee\x58\x94\x9f\x52\xfb\xa6" - "\x68\xc3\x3b\xa7\xf1\x0e\xfc\xd4\x86\xf7\x81\x51\x99\x64\xf3\x45" - "\x72\xe9\x8b\xae\x80\x99\x61\x0c\x0c\x51\x0a\xc3\xb3\xba\x28\x15" - "\xed\xe9\x07\x7c\xee\xa8\x45\xfa\xb5\xc8\x87\xf2\x3b\xfc\xf4\x9a" - "\x9d\xcb\x8b\xcb\x9f\x08\x69\x97\x3f\x71\x46\x7b\xeb\x89\x0e\xf1" - "\xd6\x13\xa7\xa3\x6f\x3d\xf1\xad\x7b\x31\x59\xa2\x97\x3f\x11\x6c" - "\x29\x96\x7d\x60\x6b\x29\x46\x1f\x44\xc9\xb2\xec\x04\xd9\x9e\x7a" - "\x09\x7d\x1f\xf9\x1b\x2d\x9b\x43\x76\x2d\x6d\x47\xbe\x2f\xf2\x67" - "\x7a\xaa\x94\x04\xee\x9d\xc9\xda\xd7\x91\xfe\xae\x5f\xc9\x90\x05" - "\x6d\x1a\xe0\xf0\x9b\xea\xaa\xb9\xde\x60\xda\x87\x7e\xfc\xda\xf0" - "\x0b\xe0\xd7\x2e\xd2\xdf\x65\xd9\x74\x0f\x5c\x9e\x42\x9b\xbb\x88" - "\x46\x69\x94\x72\x9c\x06\x8c\x01\xfe\xb6\x3e\xe8\x36\x54\x5b\xb5" - "\xf7\xd0\x0d\xe5\x54\xd6\xd9\xe9\x24\xd6\x4d\xac\x97\x58\x4f\xa1" - "\x9e\x0a\xd4\xd3\x2a\x65\xf1\x4d\x11\x12\xe9\x7b\x0f\x21\x3d\x10" - "\x5a\xea\x4c\x09\x2e\x75\x9a\x3a\xd2\xf7\xfe\x27\xf2\xec\xf4\x9b" - "\xb6\xd8\x74\x1a\x06\x18\x16\x64\x22\x38\x20\x42\xa9\x80\x59\xfc" - "\xc9\xd9\x56\xf3\xa6\x37\xc5\x11\xe4\x3b\xdc\x03\x0b\xb0\x01\x07" - "\xf4\x1f\x10\x30\xd2\x40\xeb\xb6\x35\xc8\xc7\xe5\x7d\xe1\x5c\xd6" - "\xdf\x7e\x5f\x51\x80\xac\x11\x4a\x17\xdd\xaa\x3e\xe4\x09\xb0\x9e" - "\x1d\x10\xa6\x8b\x3a\x3d\x94\xc7\xb0\xb9\x9c\xaf\x3d\x40\x28\xf7" - "\x9f\xc2\xed\x84\x7e\xa3\x29\x9d\xc2\x99\x02\x9d\xde\xd6\x88\xf2" - "\xaa\xee\x81\x79\x06\x8e\x5c\x07\xf7\xb5\xc4\x13\xfc\xd0\x58\x14" - "\xa6\x01\xd5\x94\x8a\x72\x0f\x33\x3c\x86\x05\x3e\xf0\xa3\xad\xff" - "\xd9\x58\x14\x24\x4d\xc4\xc1\xf4\xeb\xf0\xea\xe2\xe0\x21\x5d\x00" - "\x1e\xf3\x5f\x13\xca\x0c\xa8\x93\xf0\x1e\xfa\x44\x63\x78\x61\x32" - "\x3b\x24\xbe\x8f\x32\x8c\x4e\xd6\x31\x80\xe9\x5d\x78\x2f\xb5\x93" - "\xd5\x12\x74\x3b\x53\x5b\x4a\x89\xb8\xfc\x07\x65\x81\x7e\xa2\x23" - "\x3f\x95\x79\x8e\xdf\xfb\x22\xa7\x91\x67\xe0\x37\xa2\xc3\x99\x3a" - "\xa0\x9d\xcc\x8c\x33\xca\xbb\x18\xcf\xd8\xbe\x7c\x68\xc2\xa3\x63" - "\xe9\xd1\xf1\xf7\x8f\x1f\x4b\x93\xef\x19\x37\x96\xb2\xef\x18\x99" - "\x7d\xdb\x4f\x73\x6e\xa3\xbc\x5f\x3e\x34\x96\xf2\xa6\x8c\xa5\x87" - "\xf1\xcb\x7b\x78\xc2\x43\xe3\x27\x3c\x3c\x96\xf2\xef\xbb\x1f\x4f" - "\xe3\xc6\xde\x92\xfd\xf3\x91\x79\xe3\xee\x9f\x40\xbf\x98\x76\x6b" - "\xf6\xad\xb7\xd2\x3d\x13\x26\xdd\x92\x9d\xad\x5f\x6f\xc9\xe6\x2c" - "\x8f\xe7\x4c\x78\x78\x64\xde\xbc\x17\x4b\x5e\x1c\x39\xe5\xfe\x71" - "\x9c\xc2\x63\x72\x0c\xef\x64\x45\xcf\x6a\x4c\xe3\x90\x38\x35\x91" - "\x34\xe8\x8c\xcd\xe8\x7b\xfc\xda\xbd\x65\x47\x21\xfb\xb6\x3f\x6f" - "\xe6\x3e\x93\xba\xd5\xca\xe3\x95\xb9\xd3\x63\x3d\x02\xda\xe5\x31" - "\xed\x30\xa6\x21\xcf\xe0\xc5\x78\x77\xa3\x3e\x76\xf4\xc3\xfb\x48" - "\xfc\xfb\x41\xd0\xb3\xd6\x51\x2d\x0e\x22\x1f\x7e\xa0\x77\x08\x3a" - "\x10\x74\x0d\x52\x87\x3b\xbf\x1f\xf8\x3a\x05\x75\xb4\x41\x26\x41" - "\x1b\x5b\x4e\x8c\xac\xb7\xa1\x5f\x0e\x39\x96\x50\xea\x49\xb2\x5d" - "\xd2\x52\x92\x4b\xdc\x3f\xbe\x12\x1d\xc6\x99\x1e\x18\xe9\x12\x06" - "\xfa\x1c\x70\x0e\xeb\x70\xca\x63\xf4\x82\x9f\xe1\xac\xc5\x3b\x1d" - "\xd6\x23\x2d\xd0\x0f\xd0\xdf\xbf\xd1\xdc\x59\x24\xd2\xb7\xec\xd0" - "\xba\xb3\xe4\x98\x80\x72\x0d\x06\x3f\xa3\xfe\x50\x13\xea\x14\xdb" - "\x26\xa6\xa0\xff\x53\x30\x56\xa1\x2d\xd6\x26\xf0\x35\xe4\xe8\xc3" - "\xa0\xe8\xce\x27\x95\x76\x89\x39\xba\x0a\xcf\xab\x3e\xfc\x56\xb8" - "\x91\xb6\x44\xa6\xf5\xc3\x33\xec\x09\xf0\x91\x70\x52\xf4\x14\xd2" - "\xe7\x52\x2a\xd2\xff\x00\x5a\xb7\xca\xfc\xa7\x64\xf9\xfe\x48\xdb" - "\x0e\x78\xdf\x6a\xe9\x1f\x9e\x06\xef\x70\x1a\xec\x84\x4b\x2a\x51" - "\xbe\x83\xf5\x9d\xd2\xc1\x83\xdf\xe6\x31\x0e\xed\x08\x2a\xf8\xfa" - "\x33\xe4\x55\xe1\x30\xf8\xed\x46\xd0\xa5\x11\xa3\x56\x53\x29\xdb" - "\x36\x97\xa0\xfd\x03\xf2\xd5\xf8\x38\xb8\x9a\xf3\x6a\x22\x9f\x84" - "\x25\x7a\x00\x70\x43\xde\x25\xed\x74\xac\x98\x4c\x7e\xba\x64\x8c" - "\xe6\x76\x52\x4c\x5b\xb2\x18\x0f\xe0\x6d\xee\xec\x76\x62\xbc\xbc" - "\x64\x84\x2c\x0b\xfc\x74\xdc\x38\x8f\x9d\xf1\x67\x1d\x81\x7e\x1d" - "\x8d\x3e\x4f\x43\x7d\xc1\x84\x3e\xcf\x60\x7a\x00\xdf\x56\x0d\x57" - "\xc0\xc9\x14\x8b\x9c\xc0\x8b\x4c\x4c\x0f\x7f\x2f\x8c\x90\xe2\xa9" - "\x41\xd9\x09\x3c\xf5\x24\x60\x8f\x8d\x79\x9f\x97\xf0\xfe\x1e\xbc" - "\xbf\x57\x7f\x0f\x59\x1d\x54\x9c\x50\xff\x6a\xbc\xbf\x8f\xfb\x10" - "\xb2\x98\xea\x27\xdb\x8e\xcd\x6c\x4b\xf6\xe6\xaf\x4b\xc8\xbf\x17" - "\xf9\x1f\x00\xbe\x21\x1e\x27\x38\x7f\xad\xce\xf7\xc8\x6f\x41\xfe" - "\x43\x09\xf5\x0f\x43\xfe\x87\x63\xf0\x4b\x68\xff\xa5\x0d\x78\x9f" - "\xcf\x7c\x8a\x6b\x21\xf2\xf4\x67\xf9\x67\xdd\xd3\x58\xc4\xfd\x73" - "\xa9\x23\x21\x7f\x2e\xf2\x3d\xcf\x74\x96\x34\xea\x60\x1a\xd9\x76" - "\xe8\x76\xcd\x11\x85\xc3\xa5\xd3\x12\xca\x94\xa0\xcc\x7c\xa6\xaf" - "\xe4\xb3\xce\xa4\x65\x2a\x12\xca\xec\x90\x7c\xaa\xea\xd1\xfb\x58" - "\x95\xd1\xf5\x5a\x2c\x0c\x6e\x1b\x6c\xad\x4b\x0f\xc6\xc3\xb8\x6c" - "\x07\xea\x5d\xba\x46\xe9\x8c\x8b\xc1\x13\xb7\x22\xed\x6d\xc0\x3c" - "\xc3\x7c\x04\x39\x0b\xf9\x82\x61\xe8\xdd\x89\x19\x8a\x77\x33\x47" - "\x5a\x4b\x89\xef\x47\xf2\x3d\xc3\x16\xdd\x93\x74\x79\xca\x1c\x89" - "\x2b\xa7\x67\x72\x3a\xcb\xb1\xe8\x7e\x50\x53\x30\x33\x7f\x01\x79" - "\x37\xe1\x39\xaa\xd7\xf1\x2a\x9e\x53\x80\xff\x69\xe8\x74\xf0\xec" - "\x44\xe6\xc7\xd1\x48\xaf\xd4\xdf\x2f\xe7\xfc\xb8\xbf\x45\xbf\x4f" - "\x01\x8f\x9d\xd6\xe5\x0c\x32\x75\xd9\x62\x59\x37\xe4\xca\x28\xaf" - "\x29\xbe\x1f\x87\x77\xb3\x70\xbd\x1f\xd7\x5f\xe0\xfa\x0b\x5c\x47" - "\xba\xcf\x90\xdd\x1d\x95\xf2\xc5\xcf\x57\xe0\xfa\x10\xae\xfd\x70" - "\x7d\x18\xb8\x7d\x0b\xba\x07\x83\xe0\xe9\x04\x9e\x69\x47\x1f\xb2" - "\xdc\xf7\x57\x7d\x98\xe9\xe7\x3a\xa3\x86\x2e\x38\xd5\x9b\xa6\xeb" - "\x07\x5d\x1e\xf4\xb4\xee\x89\x4c\x97\x3c\xc0\xdf\xcb\xf5\x0b\x05" - "\xab\x9f\xea\x27\x95\x47\x53\xe5\xcc\xaa\xbf\xf5\x34\x95\x2f\x25" - "\xb6\x4e\x5c\xd7\x97\x85\x84\xc0\xb5\x94\xe9\xea\xa7\xcb\xca\x41" - "\x13\x33\x9e\xf3\x98\x4e\x32\xbf\x84\x7b\x69\x7b\x4c\x7f\xc3\xb6" - "\xbf\x6c\x6f\x42\x7f\xb3\x9c\xaf\x91\xfd\x0d\xda\x19\x38\x33\xfe" - "\xe0\x69\x1e\x27\x2f\x32\xf8\x06\xfc\xdd\xde\x2b\x63\x83\xcd\xf1" - "\x70\x14\x5f\x31\x7f\x0c\x2c\xd6\x65\x12\xf4\x82\x0e\x0b\xa5\x96" - "\x32\xaf\x0e\x1e\xed\xa7\xdf\x4e\x94\xb6\xd8\xaa\x0f\xcf\xf2\xfb" - "\x10\x74\x13\xe7\x4f\x2d\x66\x19\x1b\x3c\xcd\x78\x2f\xdf\xa5\xed" - "\xcb\x63\x9c\x52\x8b\xe4\xbb\x62\x3f\x58\xcc\x78\x27\xeb\xe1\x77" - "\x25\xf2\xdd\xea\x5e\xb8\x5b\x0e\xe8\x70\x53\x93\xd9\x52\xa2\x62" - "\x4b\x03\x18\xd4\x74\x53\x39\xf5\xf3\x45\x0e\xd3\xd4\x88\x88\x8e" - "\x2c\xa7\x34\x5f\x64\x27\xdd\x48\x74\x89\x2f\x72\x84\x6e\x22\x1a" - "\xe6\x8b\x54\x61\x6c\xaf\xe7\xf7\x5f\xdc\x40\x29\x29\xb8\xba\xaf" - "\x2f\x37\xa5\xf8\x22\x25\x34\xbc\xdc\x8c\x6b\x11\xdd\xd7\x4f\x74" - "\xfa\x22\x93\x90\xaf\x90\xa6\x46\xc5\xa9\xf1\xfd\xc4\xdf\x0b\xa2" - "\x64\x9b\xf4\xb2\x70\xfb\x22\xb0\xb3\x23\x07\x91\xae\x89\xa9\xd1" - "\xef\xf0\xeb\x14\x5a\xc5\x96\x03\x53\xa3\xa7\xc4\xb8\x97\xbf\xc0" - "\xf3\xdf\x85\x30\x91\xf0\x45\xc6\x50\x4b\x28\x84\x7c\x6e\x21\x2a" - "\xb7\x34\x3c\x75\xc6\x44\xdd\x18\xa3\xb5\xca\x2d\xd0\xe3\x5b\x5a" - "\xbb\xd1\x0e\x8c\x5f\xff\xbb\x7b\x29\xae\xab\xb6\xfc\x2f\xf9\x5c" - "\xb1\x25\x20\x2c\x5b\x5a\x6f\xc6\xa4\x85\xdb\xe0\x8b\xb4\x51\x01" - "\xcc\xee\xa9\x8b\x83\x82\xf1\x1f\xb8\x9c\xe7\x2c\x63\x08\x7a\xd1" - "\x3a\x75\xb1\x5b\xe0\x9d\x45\xa4\x6d\x69\xf5\x45\xda\x09\x75\x04" - "\x00\xef\x6b\x09\xaf\x62\xab\x05\x79\x83\x9c\x2f\x16\x0e\xc3\xe0" - "\xbc\x53\xa3\x64\x15\x95\x5b\x2d\xdd\x69\x5b\xc2\xdd\x69\x5b\xed" - "\xf8\x4d\x14\xe9\x5b\x1f\x17\x9e\xcc\xdf\x09\x8c\xa7\x28\xef\xc4" - "\xb3\x2b\x8c\x39\x82\xa4\x65\x94\xfa\x23\xbf\x13\xfc\x32\x1e\x7c" - "\x07\x7c\xb7\x56\x4b\x7c\x57\x6d\x7d\x2b\x2c\xdb\xb1\xf5\x4d\xd5" - "\x8e\xad\x6f\x70\x7a\x07\x6c\x09\xdc\x37\x74\xa8\x77\x9f\xa0\xdc" - "\x34\x59\xae\x62\x6b\x83\xb0\x6c\x3d\x10\x86\x3c\x81\xae\xe5\x4c" - "\x47\xd0\xb5\x9c\x69\x09\xf8\x0d\x3e\xd7\x6a\x12\x69\x5b\x0f\x00" - "\x9f\x56\x94\x3f\xde\x2d\xc7\xf8\xad\xe1\xb0\x82\xdd\x09\x38\xd3" - "\xc1\xaf\xa9\x80\x11\x16\x15\xdb\x2c\xdd\x1e\x07\x4d\x5d\x2c\xc2" - "\x53\x23\xcb\x23\x05\x8b\x29\x75\x04\x95\x03\xdf\x7d\xa0\x51\x21" - "\xda\xd9\x84\xeb\x78\xbc\xa7\x4b\x51\xd7\x17\x80\x1b\xe6\xfa\x44" - "\xe5\x36\x8b\x48\xdf\x06\x5b\x87\x0a\x19\xa7\xef\x3c\x64\xc3\xb3" - "\xfd\x3b\x89\xdf\xb6\x1c\xad\x62\x5b\xbe\x66\xd9\x36\xd1\xe0\x21" - "\xe6\x1f\x45\xb7\x2a\x9a\x12\x12\x11\x5f\x64\x13\x81\xc7\x6c\x2d" - "\xa1\x23\xfc\x1e\xf3\x8a\x9d\xe8\x67\xe6\xa9\x12\x5c\xeb\x89\xf9" - "\xa7\xa5\xf8\x65\xce\xfb\x05\xf3\xd0\x94\xe2\xd0\xf2\x91\x54\x9c" - "\x82\x67\x77\x41\xc4\x42\x4f\x15\x9b\xcb\xa3\x15\xdb\xb2\x5a\x8a" - "\xb9\x5f\x0e\xa3\x0c\x97\x2b\x22\x6b\x0a\x6c\xeb\x14\x11\xb1\xba" - "\x82\xe6\x01\x4e\xb7\x68\x09\x4d\x42\xde\x62\xe2\xf6\x30\x1f\x71" - "\xfe\xc9\xed\xc2\x1f\xb5\x6c\x6b\xe5\xb6\x89\x81\xe5\xd4\xdc\x7e" - "\x3b\xf1\xfc\xa6\xb9\xbd\x9e\xf9\x54\x13\x96\x6d\x3b\xc0\xa3\xdd" - "\x93\xdb\xcb\xfb\x3d\x75\x86\x52\x90\x16\x6d\x76\xee\xc4\xfb\x26" - "\xe4\x3b\x28\xf9\x76\xca\x99\x88\x35\x62\xd9\x66\x8f\x54\x6c\x6b" - "\x98\x72\xa6\x5b\x34\x3b\xab\xe8\xc9\xf6\x72\xd0\x6a\x27\x4d\x3e" - "\x11\x49\x6d\x29\x2e\x44\x9e\x4e\xa4\xd7\x4b\xfe\x9f\x7c\xa2\x43" - "\x4c\x79\x49\x9c\x9a\x72\xe6\xef\x62\xb2\x53\x7c\x51\xe0\xa2\x81" - "\x17\x2f\x17\x1a\xcb\xc5\xc1\xb6\x9d\x74\xf1\x11\x3f\xb1\x4c\x4c" - "\x9a\xa9\x89\xc9\x27\x4e\x89\xa7\x5e\x62\xda\x8c\xa1\x66\x27\xe4" - "\xc7\x55\xc5\xf4\xce\x69\x76\xee\x45\xfd\xe3\x01\xd7\x2d\x7c\xae" - "\x4d\xc8\xeb\xb5\x3e\x79\xc2\x46\x07\xdb\xaa\x28\x92\xb6\xcd\x1e" - "\xad\xdc\x96\xa5\xa5\x6d\x9b\xa8\x55\x6e\xcb\x17\x69\xdb\x76\x44" - "\x2a\xb7\x35\x44\xd3\xb6\x81\x07\xea\xb3\xd0\x4f\x69\xdc\xe7\x5d" - "\x98\xef\xe3\xf9\xfa\x2e\xee\xff\x8a\xfa\x1c\x61\xa9\xcf\x87\x2e" - "\x14\x8a\xf7\xeb\x73\x78\xce\x2e\xd2\xea\xf3\xbb\xd3\xea\x27\x22" - "\x5f\xbe\x92\xaf\x7a\x27\xf3\xa5\x1c\x8b\x56\xd5\x3f\x8b\xb1\x23" - "\x15\xef\x5d\xf8\x55\xe0\x57\x8d\xb4\x00\xe0\x5f\xd2\xa9\x60\x06" - "\xc4\x5d\xeb\x61\xa3\x62\x8e\x9e\xb6\xdd\x32\x35\x7a\xb7\x00\x0d" - "\x21\x27\xf5\x01\xad\xb2\x3e\x2c\xd2\xb7\x67\x85\x25\xef\x6f\xbf" - "\x81\x61\x77\x2f\xcd\xe2\xb9\xbc\x59\x54\x6e\xcf\x41\xda\x6f\xc2" - "\xcc\xab\x96\xed\x3b\x34\xcb\x3b\xd0\x45\xdb\x1b\x1e\x7c\x59\x04" - "\xa3\x15\xdb\x5b\xb5\x8a\xed\x07\x22\x17\xc1\xf6\x75\xed\x25\xd6" - "\x4f\x91\xfd\x02\x34\xf8\x03\xe8\x51\x2f\xfb\xdf\xe7\x82\x0c\x2c" - "\x1e\x52\xde\xdc\x0e\x5e\x28\x7e\x4f\xea\xa6\x96\xd0\x61\x49\x53" - "\xe0\xb1\x83\x79\x8a\xfb\xf7\xa9\x62\x2a\x47\x5d\x0d\x5a\xe5\xf6" - "\x03\xd1\x4a\xc0\x4d\x43\x3d\xe9\x3b\x1e\x08\x4b\x79\xdd\x01\x7e" - "\xdd\x8b\x32\x7f\x20\xc5\xe3\x3b\x26\xf6\xa5\x23\x59\x57\xb1\x7e" - "\x9a\x1a\x09\x33\xcf\xfc\x83\xf5\x9a\xd2\x53\x54\x60\xe8\x29\xd6" - "\x51\x3c\x9f\x60\x3d\xa5\xe9\x7a\x4a\xd3\xf5\x94\x7c\xb6\x40\xd7" - "\x54\x6c\x69\x65\x7d\x34\xd5\xa5\xf4\xcc\xd4\x68\xb6\x00\x6f\x64" - "\x00\x46\xab\xea\x0b\xe4\x59\xb5\xe5\x6b\x99\x5f\xd2\x69\xab\x45" - "\x83\xbe\xd1\xa0\x6f\x34\xa5\x6f\xf2\x75\x7d\x63\x32\xf4\x4d\x14" - "\xe3\x1a\x64\x4a\x4b\xa6\x6f\x34\x5d\xdf\x44\x85\xd2\x37\x9a\xae" - "\x6f\x38\x3d\xaa\xeb\x9b\x68\x12\x7d\xa3\x55\x6c\xe5\xf6\xa6\xea" - "\x7a\xa6\x9c\xf5\x0c\xb7\x57\xab\xdc\x7a\x40\x53\x7a\x26\x80\xb9" - "\x84\x89\xf5\x4c\x14\x65\x34\x43\xcf\x74\x4a\x7d\x60\x61\x5d\xd3" - "\xfd\x2b\x82\xfe\x74\x10\xeb\x18\xa9\x4f\x22\xc3\x22\xac\x4f\x40" - "\xbf\xbb\x13\xf5\x89\x58\xb5\xcd\x8e\x7b\x9b\xd2\x53\xdb\x26\x5a" - "\x97\x8b\x08\xf4\x49\xd6\x54\x57\x08\x7d\xfd\x37\xcc\xa9\xa1\xb7" - "\x5d\x25\xe5\x3e\x57\x84\xa0\x07\xf2\x45\x4b\x39\x41\xe7\x80\x7f" - "\xa3\xd0\x15\x44\x90\xcb\x1d\x90\xcf\x56\xd4\xdd\xd0\x52\xfc\x67" - "\x82\xbc\xdb\x27\xb7\x77\xf8\x9e\x0a\x65\xd9\x26\x9f\x10\x41\xd0" - "\xc7\xff\x54\x71\x39\xf4\x4b\x56\xb0\xb9\x7d\x1f\x4d\x6a\x13\xda" - "\xa4\x19\x7e\x07\xf0\x68\x98\x3c\xc7\x6b\x7d\xea\x25\x1b\xe4\x4c" - "\x78\xa1\x17\xff\x73\xf2\x09\x9b\x75\x7a\x1b\xfd\x68\xd2\x4c\xa1" - "\x41\x9e\x40\x77\xc8\x19\xe4\x11\x32\x36\x11\x32\x97\x0f\x39\xdb" - "\x11\x49\x90\x33\xc8\xcc\xf5\xb8\x77\x28\xfa\xd5\xe7\x43\xce\x72" - "\x34\x39\x9e\xb5\xc9\x39\x1c\xe4\x21\x9f\xd7\xb8\x20\x6b\x39\x90" - "\x0b\x29\x6b\x9a\x2a\xe7\xd4\x98\x7e\x26\x5d\xd6\xd0\x17\x78\xef" - "\xc2\xaf\x02\xbf\xe4\xb2\x56\x1c\x23\x6b\x2f\xe9\xb2\x96\xa6\x64" - "\x0d\x7d\x9a\x1a\x5d\xaa\xe4\x8d\xe1\xf3\x3c\xaf\x47\xde\xd2\xb7" - "\xef\x10\x6c\x4f\x4a\xde\x61\x99\xdb\x8e\x71\x65\x7b\x2b\xe4\xed" - "\x80\x56\xf1\x0e\xe0\x89\x20\xeb\x4d\xf0\xe6\x7f\xf1\x58\x37\xa5" - "\x58\xfc\x57\x41\x74\x48\x39\xea\x6a\x85\x2e\xfb\x3b\xf4\xe8\x7f" - "\x3d\x15\xa2\x3a\xc0\xda\xa1\xa5\x6d\x6f\x80\x3c\x1d\xd0\x2a\xa5" - "\x3c\x4d\x8c\x2e\x65\x98\x3b\x26\xf6\xc0\x90\x63\x65\xbc\x3c\xf5" - "\xb5\xbe\xd8\xe9\xb9\x7a\x8c\x9f\x3e\x29\x61\x7b\x05\xf7\x13\xfd" - "\xd4\x30\x51\xbf\x87\xfd\x53\x23\xd7\xa6\x59\x06\x8b\xcb\xe8\xb2" - "\xe3\xe4\xb0\x80\xdf\x09\xf7\x19\xb8\xcf\x98\x7a\xe3\x17\xb0\x23" - "\x02\xcc\x53\x9d\x2c\x87\xc2\x33\x9a\xe7\x5c\xb9\xe0\x43\x8b\xe8" - "\xcc\xca\x10\xe9\xbb\xcb\x44\xb7\x9d\xd7\xb0\xac\x78\x1e\x88\xf6" - "\x0f\xc7\x75\xd0\xa6\xb3\x94\x89\x9f\x7d\x93\x47\x2b\x67\xdb\x09" - "\xf7\xd9\x62\x91\x3d\x7d\xed\x42\x1a\x61\x0d\x91\xa5\xd6\xa3\xe5" - "\x5b\x97\xdb\x78\x2d\x27\x93\xef\x85\xa7\xce\x59\x7b\x96\xcc\x6c" - "\x57\x6a\x69\xa8\xcf\x65\x15\x62\x7e\x16\xd5\xce\x83\x7e\xf0\x90" - "\xbd\xd6\x23\x76\x45\x3b\x99\x06\x5b\x1a\x0c\x5c\x18\x37\xe0\x79" - "\x15\xf0\x1c\xfa\xc8\xe2\x5c\xfa\x83\x8b\x92\xae\x81\x76\x7a\x1c" - "\x3d\xed\xef\xe3\xfd\x74\x83\x26\x7d\xbc\x2f\x35\xe8\xd4\xc7\x7a" - "\x99\x99\xc7\xe8\xe8\x42\x11\x5c\xf7\x1c\x31\x2d\xec\xee\x88\xf8" - "\x0a\x74\x2c\x2f\x8b\xd2\x55\x53\x17\x5f\x2d\x7c\xed\xc2\xeb\x73" - "\x9d\xa0\x5a\xbc\x2f\x2b\x15\x9a\x96\xb6\x7b\x86\xa8\xdc\x3d\xbd" - "\x63\xa1\x88\xf0\x5a\x09\xea\xf0\xfb\xe9\xce\x72\xd5\x17\xdb\x72" - "\xe4\x3c\xcf\xb2\x7b\x3a\x60\x5d\xc2\xb0\x9a\x51\x3e\x5a\xb9\xbb" - "\xb0\xd3\x33\xcc\xe2\xa7\x3f\x4c\x97\xf9\x2c\xdb\x72\x8a\x97\xd0" - "\x95\xc7\x69\x58\xae\xb4\xf5\x2b\x76\x97\xb0\x3e\x40\x9a\x0d\x69" - "\x93\x00\xdf\x85\xfc\x39\x7e\xfa\xb0\x5a\xd9\xb1\xc3\x26\x19\xf9" - "\x70\xef\xe0\xfb\x38\xfe\x49\x91\xdb\x2b\xe8\x2f\x47\xef\x66\x0b" - "\xa7\x99\x63\x36\x5f\x6c\xf8\xe5\x26\x7f\xdd\xab\xcf\xb7\x35\xc0" - "\xd6\x22\xf7\x32\x1a\x8a\xfe\x61\xfc\x7e\xe7\x76\x89\x63\xc2\x33" - "\x2c\x7f\xdb\x92\x30\xe6\x09\xc3\x0e\xfa\xa9\xa2\xa6\x2f\x7a\x0a" - "\xb6\x75\xce\x8a\xc0\xba\x85\x3d\xb4\xfc\x72\xea\x62\x4d\xf0\x3d" - "\xeb\xa3\x5a\xa4\x33\xdd\x3a\x3d\xd7\x64\x1a\x34\xeb\xbb\x5f\x76" - "\x17\xab\x79\xe1\x35\x25\xc2\x23\xc8\xfb\x23\xde\x9f\xb8\x66\x81" - "\xa2\x43\xfd\xc4\x0e\xe8\x11\x5e\x7f\xad\x05\xbd\xe7\xdb\x45\x18" - "\x30\x9d\x7e\xba\x29\xa8\xaf\xf3\x84\x7c\x91\x09\xac\x5b\x92\x8e" - "\x5b\xbc\xff\xd3\x0b\xff\xda\xaa\x96\xa1\xd0\x43\x52\x37\xed\xab" - "\x2a\x53\x78\x87\x19\xae\xb7\xec\x34\xb5\xe1\xfd\xfc\x90\xc0\xf8" - "\xb4\xaf\x82\xe7\x11\xde\x85\x5d\x9c\xf6\x06\x78\x5b\x78\xe7\x31" - "\x4e\xd7\xbe\xe1\xfd\x51\x17\x1d\xc3\xbc\xaf\xb6\x67\x4d\xe6\xda" - "\x72\x5e\x83\x51\xeb\x48\xd7\x62\x3e\x34\xa2\xc1\xc0\x8b\x6d\x0c" - "\xd0\xd7\xc2\x36\x07\xdb\x1a\xbc\xa6\x3f\xbf\x54\x84\xd9\xe6\x40" - "\xde\x11\x46\x1b\xb8\x7d\xaa\x5d\xd7\xe6\xc6\xb6\x0b\x38\x04\x31" - "\x87\x96\x34\x98\xbf\x98\x2c\x0e\x45\x6b\x0b\xb7\x97\xdb\xc2\x6d" - "\x96\x6d\x91\x3a\x16\x63\x44\xe4\x76\xd4\x2f\xd3\xf3\x01\x0b\xf3" - "\x9f\x1f\x4f\x53\x3c\x75\x2d\x25\xf2\x51\x4f\x3f\x5a\xb6\x59\xdc" - "\xdf\xd1\x8f\xdc\x9a\x38\x7a\x8c\x86\xf3\x7c\x37\x95\xaf\x1a\xdb" - "\xd9\x61\xe6\xdf\x86\x7c\x1e\x93\x7d\xa5\xac\x6f\x65\xde\x4b\x91" - "\xb7\x0d\x79\xd2\xf4\xbc\x69\x6a\x3f\x47\x5e\xfb\xf3\x15\xe3\x58" - "\x3f\x3f\x0d\x77\x04\xe5\x78\xbf\x2f\xcf\x78\x16\x78\x06\x2e\xad" - "\xa2\xb2\x21\x3f\x39\x2e\xef\x58\x78\x3c\x8b\x9e\x15\xed\xa8\xe7" - "\x72\xe6\x29\xf7\x62\xba\x02\x7c\xf9\x65\xd9\x32\xba\x94\xf9\x49" - "\xa4\xed\x2e\x55\x74\x1f\x5e\x24\x3c\xb0\x3d\xa1\x51\x8b\x17\xd2" - "\x95\x90\xa3\x92\xe3\x34\x7c\x79\x41\xa9\x03\xb8\x12\xad\x3b\x49" - "\x24\x75\x50\xda\x6e\x97\x2f\xf2\x35\xd5\x9e\xe4\xf5\x97\xe1\x75" - "\x06\x2f\xe2\x7e\xe7\xf9\xf4\x05\xe8\x5a\xa1\xd6\x0f\xae\xbb\x82" - "\xd7\xef\x8f\xd2\x75\x66\x6e\x2f\x7e\x29\xa8\xfb\x8c\x38\x2b\xa6" - "\x0b\x35\xa6\xb9\xfc\x74\x5d\x36\xae\x15\xf2\xe7\xa1\x19\xfa\xb3" - "\x0b\xf9\xda\xc4\x59\x8d\xf3\x54\xa0\xfd\x11\xe1\x49\x61\x99\xd8" - "\xdb\xe9\xb9\x2e\xcb\x4f\x63\x75\x79\x1f\x1e\x62\x58\x7d\xe0\xe0" - "\x42\xdf\x12\xf3\x26\xf0\x78\xd5\x51\x96\xc2\x78\xcc\x92\x72\x01" - "\x58\xb5\x26\xa5\xb7\x35\xe0\xba\xd9\xa3\x39\xa1\xa3\x9d\xda\xaa" - "\xcf\x1a\xe4\xbd\xfe\x4e\xe8\xe3\x68\x72\xf8\xfb\xaa\xbc\x43\x98" - "\xc7\xaf\x6b\x57\x70\xf6\x55\x78\x87\x1c\xe7\xe7\x13\xfc\x1c\xb2" - "\x7c\xde\xe0\xab\xce\x45\xfd\xc7\xb9\xde\x76\x35\x9f\xbf\xee\x44" - "\x07\xea\x40\x1b\xda\xfd\x34\xb2\x49\xed\x65\x7c\xde\xd0\x87\xec" - "\xd9\x58\x76\x58\xe6\x94\x4c\xdf\xf0\x5e\x73\x9d\x94\x3f\x27\x78" - "\xbe\x42\xd7\x1b\xbc\xd6\x92\x71\x94\x6e\xd8\xd9\x6c\x97\xfc\x6d" - "\x12\xa6\xeb\x27\xbd\xaf\x05\x4d\xbc\xdf\xa4\xd4\xd7\x0d\x3b\xcf" - "\xfd\x5d\x8f\xf6\x5d\xbf\x1e\xbf\x1a\xfd\x19\xf3\xff\xeb\xf7\xe2" - "\x3e\x03\xbf\x1a\x49\xbb\x8d\x85\x29\x7e\xbc\xeb\x80\xcd\xce\xcf" - "\x7e\xba\xbe\x42\x6c\x1c\x6e\x82\x5d\x22\xef\x6b\xaf\xe0\x75\x82" - "\xeb\xf7\xa0\xbf\xc6\xa8\xbe\xb8\x41\xee\x29\x02\x37\xa6\xbb\x70" - "\x57\x8b\x70\x53\x59\x08\x78\x5f\xdf\xd6\x54\x1d\x22\xc7\xf5\xdc" - "\xfe\xeb\x03\xdc\xa6\x10\xe8\xcf\xd7\xf9\xd5\x22\xd8\x58\x13\x21" - "\xde\xf7\xea\xf4\xdc\x00\xf9\x73\x92\x5a\x73\xd8\xb7\x8b\xe1\xe9" - "\x3c\x21\x8c\xf6\x2b\x9d\xf6\x79\x03\xf7\x25\x9e\x6f\x47\xdb\xad" - "\x27\xe9\x86\x05\x22\xfd\xb3\x86\x46\x27\xd1\x26\xe8\x11\x8c\x35" - "\x72\x2d\x1e\x7a\x89\x61\x62\xfc\xbf\xae\xc6\xd8\xa7\x59\x83\xf7" - "\x6b\xf1\x0e\x63\x4f\xb0\xd9\x19\x26\x86\x15\xe5\xf6\xa1\xfc\x3e" - "\x2d\x68\xc6\x58\x8d\x3e\xff\xbc\xa1\xac\x18\x7a\xa6\x47\x6f\xdd" - "\x30\x74\xd9\x09\x11\x36\xda\xc7\x7b\xa1\x80\x0b\xfe\x7f\xce\xde" - "\x27\xff\xf7\xe0\x9c\xf5\x6f\x8d\xc3\x55\x9f\x69\xa0\x4b\x7c\x9f" - "\x65\x1d\x50\xfd\x75\x43\x24\xbe\xbf\xb2\x0e\xe0\x37\x1e\xbf\xe9" - "\xf8\x15\xe9\xcf\xb1\xbf\xec\x98\x7b\x48\x6b\xd6\x9e\x4e\x4f\x16" - "\xc6\xff\xe1\x0d\xaa\x1f\x38\x1d\xed\x60\x1e\xf9\x96\x2c\xbc\x5e" - "\xc7\xfb\xa0\x9c\xce\xfc\xcc\xe9\x1a\xec\x19\x3c\xe7\xe1\xbd\x8d" - "\x65\x75\x9d\x46\x71\xef\x7d\x2b\xc1\x73\x4b\xba\x18\xff\x2d\x72" - "\x8d\x71\x79\x45\x05\xf3\x29\xf2\x4c\xb3\x46\x2a\x2a\x50\xdf\x4e" - "\x83\xae\x48\xab\xe2\xf7\xcc\x93\x48\x6f\x02\x5d\xe4\x1a\x7a\x08" - "\xf3\xbd\xe4\xb6\x46\x56\xa0\xc7\x26\xb3\xd4\x07\x58\x1f\xb5\xd3" - "\x8d\x21\xe8\x2c\xf4\xed\x67\xbb\xd4\x58\x73\xe3\x19\x7e\x86\xae" - "\xfc\x12\xf7\xc1\x66\xb4\xb2\x6b\xd5\x87\xfe\x6e\x13\xf5\xef\x32" - "\x51\x6e\x64\xd5\x37\x43\x23\xe9\xef\xb6\xfb\x02\x7b\xa8\x25\xb2" - "\x9b\x1c\xcf\x49\x18\xdf\xf8\xc0\x03\xee\xc5\x22\xfa\x41\xd7\x0e" - "\xb3\x2f\x72\xca\x8b\xb1\xf9\xea\xe3\x74\xa3\xa4\xc7\x2b\x47\x31" - "\xea\x3f\x25\x61\xeb\xf4\x09\x84\xd7\xce\x16\x91\xb5\xc7\x44\x08" - "\xf6\x5d\xfa\x9a\x2e\x1a\xb1\x61\x09\x65\xd7\x74\xd1\xf0\xcd\x5d" - "\x94\x25\xfe\x91\x65\xaa\x81\xdd\xf6\xd4\x19\x1b\x41\x27\xe4\x0f" - "\x2c\x26\xcb\xe6\x25\x24\x79\x24\x5a\x09\xfb\x2d\x02\xfb\xed\x54" - "\x16\xeb\xc6\x1e\xfb\xad\x5b\xda\xc5\xbb\xdb\x14\x1f\xed\x6e\x1b" - "\xe0\xa4\x94\x8c\x19\x64\x03\x7e\xee\x93\x74\xe3\x8d\x19\x6d\xb0" - "\x1d\xd1\x66\xbf\xde\x5e\x5c\xc7\x58\x9d\xd4\x5f\xb6\x15\xfa\x5a" - "\x54\x7e\xb6\xab\xcf\x71\xd8\xc4\x3c\x15\x62\xb9\x41\x1b\x6e\xba" - "\x87\xf7\x62\xf7\x0c\x09\x9b\xe7\xd7\x88\x30\xa7\x97\x0c\x13\x61" - "\xa4\x67\x71\xdd\xbb\x90\xde\xe9\xb9\x29\xcf\x6f\xda\xb4\xb3\x2f" - "\x1e\xc5\xfc\x48\xd7\x2b\x37\xfd\x51\x98\xca\xc1\xa3\xdb\xb3\x96" - "\x45\x60\x7b\x9f\x64\x99\xbd\xe9\xd0\xd4\x22\x11\x71\xcc\xe5\x7d" - "\xf1\x9b\xbc\xbc\x67\xcf\x7b\x75\xef\xc3\xb6\xf9\xbe\x7d\x7a\x1e" - "\x2f\x78\xae\x60\x2d\x02\xcc\x55\xdb\xb3\x04\xe6\xe7\xf1\x36\x3c" - "\x51\x5f\x76\x3c\xfb\x8a\xbc\x2e\xfd\x52\x7e\x9c\xe1\xa7\x07\x0b" - "\x19\x77\xde\x93\x65\xdd\x09\x7b\xeb\xd2\x63\xf4\xe3\x89\x21\xd0" - "\x01\xef\x31\xfe\x4f\xcc\xd1\xf7\x55\xa5\xbf\x0b\xd2\x30\xfe\xdf" - "\x5f\xca\x69\x25\xc3\xc8\x5e\xe2\x10\x81\xbe\x6c\x26\xe9\x83\x62" - "\xa2\xcb\x51\xa6\xc4\x80\x83\x71\xea\x37\x1d\xa6\x47\x1e\x41\x5a" - "\x85\x01\x07\x79\x2e\xc3\x73\x75\x4f\x1e\x55\x66\x47\x4c\x99\x47" - "\x3a\x4c\x37\xfd\x06\x69\x7b\x13\xca\x1c\x4c\x28\x73\x24\xa6\x4c" - "\xb9\x5e\x4f\x30\xbe\xcc\x08\x8a\x2f\x33\xc2\x76\x2e\x6e\x23\x86" - "\x27\x94\x19\x9d\x50\x66\xfc\xb9\xb8\x8d\xc8\x4f\x28\xe3\x4c\x28" - "\xe3\x8a\xa1\x25\xfb\x83\x64\x23\x6d\x75\x42\x99\x9a\x84\x32\x3b" - "\x8d\xe7\xbe\x7c\x7e\xe6\x6f\x22\x3b\x78\x33\xc0\xfd\xf9\x3a\xfa" - "\xa7\xe3\xad\xe7\x3b\xf5\xb2\x81\x24\xed\x8a\xc4\xd7\x37\x32\x23" - "\xbe\xbe\x91\x43\xcf\x6d\xd7\xc8\xec\x84\x32\xb9\x09\x65\xf2\x62" - "\xca\xd4\xa9\x7a\x46\x16\x26\x94\x29\x49\x28\xb3\xf2\x5c\xbe\x1a" - "\x59\x9d\x50\x66\x47\x42\x99\x86\xef\xa1\x05\x8f\xe3\xca\x37\x6b" - "\x30\xdb\xca\xf7\xc2\x46\xb8\x79\x18\xfb\x1c\xf0\xde\xe4\xb6\xae" - "\x70\x3f\xde\x0f\xe1\xf1\xaa\xd1\x15\xc6\xd8\x72\x33\xe6\x3f\xb7" - "\x95\x1b\x63\x16\xfb\x63\xb0\x4c\x2b\x1b\x7b\x64\xa0\x2f\x5b\x94" - "\xeb\x31\x7c\xb5\xb8\xae\xc6\xa1\x3c\x4e\xdd\x3c\xad\xc7\x26\x56" - "\xfe\x4b\xa4\xe0\xdc\xfc\xae\xb1\x37\x5a\xab\xfc\x3c\x52\xd8\x26" - "\x6f\x74\xc9\x32\x15\x31\x76\x34\xd7\x1f\xda\xb3\x24\x6c\x8e\xc7" - "\xe3\x66\xe7\x79\xf0\xc8\x80\x6d\xe4\x6a\x81\x65\xc1\xfb\xd7\xcd" - "\x35\xb0\x81\x60\xf7\x33\x6e\x47\xe9\xe6\xa0\xb4\xc9\xe6\x76\x11" - "\xdf\xfb\x4a\xef\x94\xfb\xdb\xca\x26\x1d\x95\xd5\x84\xfa\xd9\x76" - "\x6f\x2a\x3e\x4d\x1d\x72\xfc\x65\xdb\x6d\xd4\x23\x8d\xa5\x41\xe0" - "\x35\xaa\xc7\xff\xc3\x4f\xa3\xa6\x49\x5b\xa3\x62\x5f\x31\xef\xbd" - "\xf3\x1e\x52\x63\x28\x87\xf3\x80\xff\x6f\x1e\x61\xb4\x17\x63\x3d" - "\x64\xec\xe6\xc8\xf9\x68\xa6\xfa\x70\x54\x69\x3c\x4f\xf6\x03\xaf" - "\x8c\x5a\x1f\xdf\xef\xa3\xea\xe2\xfb\x7d\xd4\xae\x78\x9e\x34\x81" - "\x27\x47\x35\x25\x94\x39\x9c\x50\xa6\x2d\xa6\xcc\x7a\xbd\x9e\x70" - "\x7c\x99\x6c\x4b\x7c\x99\x6c\x7b\xcc\x33\xda\x98\x9d\xd5\x33\xf7" - "\x91\xbe\x45\xd9\x39\x31\xcf\xa6\x2a\xa9\x3f\xb3\x27\x19\x69\xbc" - "\x76\xb4\xf9\x4d\xe5\xdb\xa2\xc3\x73\x26\xc8\x3b\xe7\x2f\x4d\xc0" - "\x61\x75\x02\x0e\x3d\xf2\xaf\xef\xa7\xff\xfe\x18\xdd\x52\xa2\xef" - "\xa7\xb7\x63\xcc\x9e\xca\xcf\x80\x55\x8d\xfc\xa0\x43\xf6\xc1\x04" - "\x78\x47\x12\xe0\xb5\xc7\x3c\xdb\xf0\x1c\x89\x69\x83\x2d\xd5\x2e" - "\xfd\x04\x61\xbf\xdd\x92\x69\xa4\xf3\x9c\x12\xf8\x06\xdc\x72\xac" - "\xc9\x65\x9f\xad\x41\x47\xe9\x16\xf6\x69\xd2\x75\xf9\x2d\xb1\xf2" - "\x4f\xaa\x5d\xb7\x4c\x8b\xc7\xe3\x96\xc2\x78\x3c\x6e\x29\x89\x69" - "\x57\xc8\xba\x9c\x7e\x61\x8d\x3c\xf4\x18\xdb\x3e\xec\x6b\x27\x7d" - "\xa7\x96\xc1\x66\x3b\x43\x36\xf6\x59\x3b\x56\x42\xa9\x3e\x57\x00" - "\x73\xb9\xdd\xfe\x3e\xf9\x29\x7d\x5f\xb9\xee\xf7\xe7\x00\xfc\xc3" - "\x06\x3f\x6a\xab\xf6\x95\x6b\x95\x9f\xd6\x23\x0d\xfa\x6f\xd4\x0c" - "\x65\xe7\x36\x04\x85\x3b\xbf\x1a\xf4\xc4\xbc\xe8\xd6\x3f\xeb\xf3" - "\x88\x2a\xf6\xbd\x82\xee\x09\x60\x8c\xcf\x50\x7b\xe5\xb7\x0e\x8d" - "\xe1\xeb\x90\x63\xc9\xdd\xe2\x28\xdd\xfa\x25\xdb\x00\x2c\xa3\xec" - "\xc3\xd5\x18\x09\x12\xcf\xbd\x7d\x91\xe3\xd2\x76\xc3\x7b\xbf\x5e" - "\x36\x3f\xa6\x6c\x50\x9f\x1b\x07\xf8\xdd\xa8\x08\x99\x1b\x43\x41" - "\x02\x9c\x4c\x65\xef\xdd\xfa\x65\x23\xe4\x15\x65\x56\x1b\x65\x78" - "\x1e\xcd\x65\xac\x25\x64\xbe\xb9\x94\xcc\xde\x25\x47\x25\x6c\xc3" - "\x97\x02\xb6\x74\xbb\xaf\x34\x40\xbe\x50\x2b\xaf\x75\x99\x95\x0f" - "\xcc\xad\xfe\xd4\x30\x59\x3a\x2a\xf7\x15\xfb\x71\x1f\xad\xdc\xe7" - "\x02\x6e\x90\xa7\x5b\xcd\xac\x6f\x62\x69\x37\x61\x42\xde\x43\x53" - "\x27\x8f\xfc\xe5\x43\xf7\x4f\x9b\x70\xa7\x63\xda\x9c\x17\x66\x15" - "\x8e\x7c\x71\x41\x89\x63\xd1\xbc\x39\x25\x73\xe6\x3e\xeb\xc8\x76" - "\x5d\xe7\x72\xcc\x2c\x51\xd7\xac\xa2\x99\xf3\x4b\xc6\xf2\xed\x08" - "\x47\xf1\xbc\x59\x0b\xe5\xed\x8d\xe9\x14\x0f\x64\x4e\xc9\xac\x79" - "\x8e\xeb\x0a\x47\x38\xee\x9b\x39\xa7\x68\xc1\xbc\x59\x49\x61\xdd" - "\xe9\x98\x37\x6b\xde\xac\x99\x85\x8e\xb1\x8e\x6c\x86\x1c\x0b\x2e" - "\xa6\x3f\xb3\x8d\x71\x8c\xc7\xaf\x75\x1e\x71\x48\x1f\xcf\xfc\x8a" - "\x7f\x6e\xdb\x73\xee\x58\x76\xdb\x81\x78\x9e\xbb\xad\x35\x9e\xe7" - "\x6e\x0b\x9c\x3b\x96\xdd\x96\x30\xfe\x8d\x4e\x18\xff\x46\x0f\x3d" - "\x77\x2c\x1b\x9d\x30\xfe\x8d\x4e\x18\xff\x46\xf7\x8c\x7f\xe0\x25" - "\xff\x0a\xa9\x17\x46\x27\x8c\x7f\xa3\x13\xc6\xbf\xd1\x2b\x13\x9e" - "\xab\x62\x9e\x2f\xc5\x73\x7d\xec\xf8\x88\xe7\x3d\x86\x7c\xf6\xea" - "\x97\xd1\x07\x8c\x3c\xac\xeb\xa1\x9b\xdb\xf4\xbc\xfe\x98\xbc\x01" - "\x3d\x6f\xa8\x47\xfe\xc0\x47\xec\xeb\xa6\xe6\xeb\xb7\x3f\xc6\x3a" - "\x9d\xfd\xdc\x78\x6c\x82\x7c\x5c\x7d\x92\x46\xff\x91\x61\x31\x0f" - "\xb3\xdf\xa3\x78\xeb\x89\xce\xda\x41\x64\xe1\x32\xb5\xaf\x91\x59" - "\x78\x6e\x6d\xc7\x95\x90\x96\x81\x1f\x74\xca\xed\xb0\x7f\x37\x97" - "\xaa\xf1\xe2\xf6\x3a\x69\xf3\xa3\x8c\x0e\x5f\xce\x6b\x00\xc7\x8e" - "\x32\x96\x75\x6a\x2c\x6e\xc3\x7d\x06\xf3\x34\xca\x9b\x85\xe9\xb6" - "\x5b\x70\x25\xa4\xd9\xf0\xcb\x04\xbc\x3a\x03\xde\xca\xc1\xc9\x6d" - "\xcb\x44\x3b\xb7\x67\x3e\x68\x22\xeb\x3a\x8f\xd6\xea\xd3\xd8\xb6" - "\xbe\xfd\xb0\x5a\x5b\xd8\x0d\x5b\xfe\x8b\xfc\x5a\xa4\x27\x9f\x27" - "\xfd\x04\xf6\xdf\xed\x07\xd4\x7a\xcb\x4f\xd0\xff\x0f\x86\xd4\xda" - "\xe9\x6e\xf6\xbf\xe8\x3a\x46\x3f\xf9\x18\xd7\x6e\x5c\xdf\x36\xe0" - "\x7b\xe5\x7c\xfb\x27\xa3\x85\x27\xe5\x61\x86\x9b\x90\x3e\x09\xfa" - "\xad\xcb\x1a\x29\xcf\x4f\xf2\xce\x29\x3c\xa9\x0f\x25\x49\x2f\x87" - "\xcd\xd0\xe5\xa7\x9f\xec\x61\x7c\x63\xd2\xab\x85\x67\xe0\x34\xce" - "\xef\xe7\xfa\x50\xa6\x2f\x5b\xdb\xf0\x6b\x55\x7e\xe8\x3f\x69\x4b" - "\x68\xc7\x77\xc7\xe8\xa7\x33\x55\x3b\x7e\xba\x2f\xa1\xee\x48\xf2" - "\x76\xfc\x34\x13\xed\xf8\x2e\x79\x3b\x7e\x9a\x2d\x69\x6b\x42\x5b" - "\x4c\xe7\xbc\x9b\x84\xb6\x7c\x27\xe9\x1e\x9f\x5e\xa8\xdb\x42\x3c" - "\x27\xb3\xe1\x9d\x2c\xfb\x70\x69\x6f\xbf\xe9\xf9\x56\x5b\xab\x29" - "\x2f\x49\x9d\xf5\xc2\xd3\xff\x61\x3f\xfd\xf4\x88\x84\xd3\x9b\xbe" - "\x57\xe1\x02\x3a\x99\x24\x9d\x58\x1e\xac\x7d\xf5\xb7\x31\x2f\x51" - "\x6b\x21\x39\x90\xff\x9f\x78\x8d\xb5\xcc\xf9\xa5\x22\x68\xd0\x11" - "\xef\xb2\x12\xde\x85\x63\xde\x8d\x8f\x7b\xb7\xac\x27\x7d\xba\x91" - "\xfe\xc3\xfa\x29\x67\x75\x42\x3f\xa1\x7f\xee\xb8\x2a\xbe\xdd\x39" - "\x35\xaa\x7d\xe8\xa3\x73\x68\x9d\xd3\x80\x3e\xea\x4e\xde\x47\x39" - "\x87\x93\xf3\x5a\x8e\x5c\x47\x13\x83\x28\x09\xbc\x3b\x78\x8e\xdd" - "\x2d\x79\x50\xef\xa7\x73\xfb\xe7\x8e\x11\x46\xff\xfc\xb0\x36\xde" - "\x51\x9c\xd0\xc6\x28\x60\x9c\x50\x6d\xbd\x73\x6c\x02\xec\x8a\xe4" - "\xbc\x78\x47\x1d\xda\x19\x4d\xde\xce\x3b\xf6\xf6\xcd\x8b\x77\xb4" - "\xa2\x3d\xd1\x73\x79\xf1\x8e\xa0\x2a\x43\x49\xca\xdc\x99\x21\x3c" - "\xc9\xea\xb9\x73\xb8\x3b\xc2\x76\xee\x9d\xbc\x97\x62\x8f\x49\x1f" - "\x13\xcf\x7f\x68\x03\x97\x63\xfa\x45\x94\x9e\xe5\x7e\x38\xe6\x20" - "\xd3\xf7\xf1\x64\xa7\xe7\xce\x9a\x04\x5a\x9d\x3a\x46\x3f\xbb\xaa" - "\xc3\x94\x52\xaf\xe8\xf5\xb3\x2f\x13\x70\x6a\x48\x4e\xaf\x3b\x0f" - "\x81\x5e\xa7\x92\xd3\xeb\xce\xf6\xbe\xe9\xf5\x33\xee\xff\x53\xe7" - "\xd2\xeb\x67\x8e\x58\x7a\xc1\xd6\x95\xed\xbb\xd6\x0e\xde\xe8\x2e" - "\x10\xb5\xdc\xd6\x28\xd9\xac\xe0\x15\x55\xa6\x9d\xcb\x4c\xb3\x86" - "\x15\x9f\xc0\x86\xb4\x9c\xa4\x9f\x8d\x31\xe4\x7f\x60\x35\xf5\x17" - "\xdd\x4f\xb0\x1f\x51\x0a\x97\xf3\xb9\x4e\x79\x7d\x91\x6c\xe2\xf9" - "\x47\x42\xbd\xd5\xc9\x75\xc1\xcf\x76\x81\xa6\xaf\x25\x49\x3f\xa0" - "\xfc\xcb\xc6\x50\xbc\x8e\xf8\x99\x3f\xbe\x8f\x40\x37\x94\xd3\xb7" - "\x9d\xbe\xf7\x77\xfe\x3e\x1b\x93\x77\x6e\x9f\x8d\xf9\x56\xf5\xd7" - "\x98\x3f\xc6\xe3\x37\xc6\x99\xbc\xbf\xc6\x94\xf7\xdd\x5f\x63\x6a" - "\xfa\xee\xaf\x31\x0d\xdc\x5f\x68\x6f\x30\x7e\xdc\x18\x73\x28\xbe" - "\xbd\xa8\x17\xe5\x84\xe9\xa2\x4b\xf9\xf9\x87\xb6\xdb\xf8\xb1\x8e" - "\xe3\xbe\xaa\x2d\x23\xf0\x72\xca\x30\xc6\xf1\x42\x61\xf4\x09\x1b" - "\x34\x5c\xbf\x24\xf9\x7e\x2b\xcf\x71\x5b\xaa\x89\x78\x1f\xd9\xf1" - "\x23\xb6\xdd\xc7\xfe\x41\x33\x51\x2b\xee\x4d\xc7\xe8\xee\x57\x35" - "\x93\xa9\x94\xf7\x3c\xa5\x5f\xb8\x5c\x43\x18\x7b\x24\xb6\x2f\x78" - "\xef\x93\xe7\xa6\x6b\xd5\xdc\xe9\xef\xc7\xe8\xae\x59\xaa\x5f\xee" - "\x7e\x29\x9e\x8e\x77\x51\xf2\x7e\xb9\xcb\x8e\x7e\xf9\x7b\xf2\x7e" - "\xb9\x6b\x74\xdf\xfd\x72\x57\x1e\xfa\xe5\xef\xe7\xca\xd1\x5d\x4e" - "\x5d\x8e\x56\x70\x19\xc7\x5c\x9e\x8f\xdf\xf5\x17\xce\x83\x7b\xc8" - "\xc8\x5d\x7c\xa4\x3c\x65\x64\xbb\x21\x47\xb2\x4c\x0d\x60\xc9\xfa" - "\xf5\x3c\xd5\x3a\x8c\x58\xb8\x5e\x6b\x7b\x32\x39\xb9\x4b\xf6\xd3" - "\xcd\xc5\xc4\x7b\xf1\xf9\x9b\x18\xc6\x3c\xa2\x93\x74\xf7\x48\xce" - "\xc7\xe9\x37\x87\x62\xe5\xe4\xee\x9e\x7c\xac\xeb\xf4\xbc\x24\x3a" - "\x9d\xc4\xf9\xe2\x61\xdf\xad\xb7\xbf\xbf\x1c\x47\x38\x3f\xe7\x4b" - "\xc8\x93\xaf\xe4\xf1\xee\x9a\x78\x79\xbc\xbb\x38\x9e\x3f\xef\x92" - "\xe5\x34\xe8\x39\x3f\x8d\x6d\x02\x0e\x3f\x98\xbf\xce\x2f\x9b\x77" - "\xb7\x27\xc8\x26\x78\x20\x77\x8d\xe2\x81\xdc\x17\xe2\x71\xcd\x35" - "\x27\xe7\x81\xdc\xa1\x7d\xf3\x40\x6e\x4e\xdf\x3c\x90\x3b\x8d\x79" - "\xc0\x4f\xb9\xab\xe3\x65\x33\xb7\x28\xbe\xed\xa8\x57\xca\x26\x5d" - "\x72\x21\xb2\x09\x5b\xe8\xd2\xbe\xe4\x90\x65\x8a\xfd\x47\x6a\xbb" - "\x8c\xbd\x8e\x1f\x44\x33\x0b\xe4\x0a\xf8\xdd\xe3\xe0\x35\x25\xe8" - "\xf8\x1c\xa6\xe1\x66\x79\xf6\xf0\x9e\xd1\xb1\x74\x5c\xab\xce\xc7" - "\xb9\x91\xf7\x53\xde\x57\x56\xf4\xbc\x77\x79\x7c\xfb\xef\x99\x96" - "\x9c\x9e\xf7\x14\x81\x9e\xee\xe4\xf4\xbc\xa7\xa2\x6f\x7a\xde\x53" - "\xcf\x67\x8f\xce\x95\xa9\x7b\xf6\x3a\x16\x4a\x1b\x45\x96\x39\x49" - "\xf7\x5e\xf6\xc3\xc6\xa7\x7b\x42\xf1\xe3\xd3\x3d\x47\x2e\x7c\x7c" - "\xba\x37\x27\xf9\xf8\x74\x6f\x5e\xf2\xf1\xe9\x5e\xa7\x92\x87\x7b" - "\xeb\xe2\xe5\xe1\xde\xf2\x78\x9e\x00\xed\xfe\xc7\xc6\xa7\x7b\x83" - "\x09\x32\xb0\xee\x18\x8d\x7b\x09\x36\x45\xb9\xea\xb7\xf1\xb7\xc7" - "\xe3\x38\x2e\x23\x79\xbf\x8d\x1b\x8e\x7e\x5b\x97\xbc\xdf\xc6\xe5" - "\xf6\xdd\x6f\xe3\x78\x0f\x7a\xdd\xb9\xfd\x36\xae\xe4\xc2\x6d\x8a" - "\x71\x3b\xe2\xfb\x6c\xdc\xfa\x0b\xef\xb3\x71\xed\xc9\xfb\x6c\xbc" - "\x39\x79\x9f\x8d\x1f\xaa\xfa\x6c\xfc\xb4\xf8\x3e\x1b\x3f\x3a\xbe" - "\xcf\x40\xb7\xff\x66\x9f\xa1\x7f\xcc\xca\x3f\x61\xfc\xc7\x98\xb7" - "\xf7\xef\xf4\x8c\xdf\xe9\xa7\x09\x25\x6a\x6e\x3d\x41\x8d\x1d\xaa" - "\x0f\x3f\x40\x9e\xba\x73\xc7\x81\xf1\x07\xf4\xb4\x5f\x9e\xdb\x0f" - "\xe3\xdb\xa0\xa3\xdb\x9b\x4a\xe5\xde\x96\xea\x43\xa6\x39\xf2\x79" - "\x97\xf0\xfe\xd4\x04\xde\x2c\x4a\x41\x1f\x0b\x5f\x38\x42\xac\xd7" - "\x91\x3f\xc4\x70\xf8\xcc\x65\x3c\xac\x09\xd9\x17\x32\xc6\x9f\xc7" - "\xa7\xc6\xec\x2d\xbb\x15\xf0\xee\x9b\xa0\x78\x75\x42\xa2\xfd\x5b" - "\x8b\x77\x57\x28\x3e\xfd\xf9\xd7\x09\x38\xec\x49\xce\xa7\x13\x0e" - "\xa2\x0d\xb5\xc9\xf9\x74\x42\xa0\x6f\x3e\xbd\x0f\xfd\x4f\xb5\x31" - "\x73\x9f\x41\x4f\x45\xfc\x09\x73\x9f\xfb\xb2\xac\x21\xc5\x3b\xd2" - "\x26\xaa\xdc\x6d\xee\xf4\xdc\x97\x68\xff\xa1\x6f\xee\x6b\xd6\x71" - "\xfe\x43\x42\xf9\x3e\xec\xbf\xfb\xd8\xfe\xfb\x20\x39\xce\xf7\x9d" - "\xc7\xfe\xbb\x8f\xed\xbf\x0f\xce\x95\xad\xfb\x74\xfb\x2f\xd9\x1c" - "\xef\xbe\xf6\xe4\xfd\xff\xf3\x84\xfe\xa7\xfc\x12\xcc\x87\x65\xf9" - "\xf8\x7c\x23\x62\xf3\xb1\x6f\x12\xe7\x65\x1e\x49\x92\x37\x3f\x11" - "\x66\x1f\xf9\xca\xcf\xe1\x3d\xf6\xa5\x4a\xca\x7b\x3f\xdf\xa9\xe4" - "\x71\xa2\x39\x5e\x1e\x7f\xde\x14\x2f\x8f\xf7\x39\x13\xca\xb5\xc5" - "\xbf\x07\xff\xfc\x8f\xe9\xd8\x89\xd3\x12\x78\xe0\x8b\x63\x34\xf1" - "\x8f\x8a\x07\xee\xbf\x31\x1e\x8f\x89\x45\xc9\x79\x60\xe2\x4a\xb4" - "\xff\x8b\xe4\x3c\x30\xb1\xae\x6f\x1e\x98\xb8\x17\xb4\xfc\x22\x96" - "\x6f\x1f\x2e\xcd\xed\x9f\x90\xc7\x9f\x5c\xe7\x4d\x0c\x27\x5f\x23" - "\xb8\xdf\xa6\x68\x7c\xff\xc4\x78\x1a\xdf\x9f\x15\x4f\x43\xb4\xe5" - "\xbf\x4f\xc3\x9e\xd8\x07\x9d\x9e\xfb\x13\xe5\xdf\x77\x8c\x1e\xd0" - "\xe5\xff\xc1\x4b\x12\x70\xdc\xa3\x70\x49\xb6\x2e\x72\x3f\xcf\x7f" - "\x7d\xc9\x69\x79\x7f\x7b\xf2\x36\x3f\x60\xc6\x18\xe4\xd3\xce\x91" - "\xa5\x07\x86\x22\xfd\x61\x5e\x0f\xe5\xf5\x90\xcd\x48\x7f\x38\x42" - "\x16\x39\x5e\xf5\x8c\x4b\x0f\xe4\xb2\x2f\x0a\xd3\x9f\xf9\xd7\x3a" - "\x94\xf2\x78\x0c\x62\xbc\x0a\x4a\xa5\xdf\x82\x75\x25\xf3\xfa\x35" - "\xcc\xeb\x0f\x48\xfb\x8f\xf7\x59\xd8\x8f\xd0\xea\xa2\x3c\x5f\x28" - "\x42\x06\xbf\x73\xfe\x04\xd8\x35\x2c\x17\x9c\xdf\xc8\xab\xd6\xcd" - "\xca\x13\x74\xd3\x03\x4d\xc9\xfb\xf8\x81\x23\x7d\xf3\xce\x03\x61" - "\xd5\xcf\x0f\x8e\x88\xef\xe7\x07\x6d\x9a\x67\xe0\x34\x6e\x2b\x78" - "\xe0\x82\xe4\xa4\xc4\x21\x82\x7d\xea\xfb\x15\x4f\xb4\x16\x97\xd1" - "\x8f\x8e\xd3\x83\x55\xb2\x3e\x93\x08\x5b\x97\xa7\x50\x93\xd4\x01" - "\x0f\x7e\x23\xf1\x44\x9e\x82\x08\x99\xc4\x8a\xe7\x5b\xf9\x5d\xad" - "\x47\x84\x91\xef\x10\xef\x09\xf0\x99\x65\xf0\xc2\xa5\x47\xe9\xc1" - "\xf7\xe2\xca\x43\x13\xf8\x14\x8c\x40\xad\x94\xc7\x07\xdb\x8c\x35" - "\xdd\x95\x78\x4e\xbe\xee\x3b\xc9\x62\xf8\x3e\x28\x9f\xb1\x07\xfb" - "\xdc\xbf\x64\x9c\xf8\xac\x0c\xe3\x74\x7e\x3d\x30\x69\xba\xc1\xbf" - "\xca\xd7\x72\x52\x51\xaf\x2f\xdf\x24\x97\x9f\x26\x39\xce\xb3\x36" - "\x18\x23\x07\x93\xea\x63\xe1\xa8\xf8\x1f\x93\x1a\x0c\x7f\x3c\xdc" - "\x37\x7d\x0f\x2c\x03\x9f\xf6\x04\x7c\x60\x47\xdc\x7b\x58\xc1\x98" - "\x6c\x39\x1f\x0c\xee\x73\xc5\xb3\xcc\x0f\x93\x1d\xe7\x5b\xf3\x4b" - "\xb5\x53\xde\xeb\xe7\xf0\xd6\x64\x69\x2f\x31\x8c\xf3\xe3\x38\x79" - "\x7d\xdc\xdc\x42\xee\xdd\xf3\xde\xd6\x94\x27\x95\xdc\x4f\x49\x58" - "\x23\x9c\xbc\x53\xfa\x53\xe9\x72\xff\x54\x24\x51\x0e\x26\x1f\x34" - "\xc6\xe8\x84\xf4\x36\x43\xee\x31\xaf\x65\xb8\x09\xeb\xac\x53\xcc" - "\x4a\x16\xa6\x4c\xd7\xd2\x62\xe7\x6b\x53\xa4\xfd\x67\xac\x97\xe2" - "\xbd\x39\xa1\x5c\xc2\xfa\xdf\xe4\x9d\xa2\xef\x75\xfa\x0c\xf4\x6f" - "\x88\xf7\xb6\x54\x0c\x84\x29\xab\x13\xd6\x2b\x82\x6b\xe5\xf9\xf6" - "\xbf\x02\xee\x54\x5d\xef\xe5\x25\xd8\x78\x53\x76\xba\x4f\x9c\xaf" - "\xfd\x53\xfa\x68\xff\x94\xde\xf6\xcf\x65\xb8\x53\x13\xd6\x12\xa7" - "\xca\xf6\x47\xcf\xd1\x7f\x53\x87\x42\x7f\x19\x74\x83\xcd\x3d\x75" - "\x81\x61\xab\xf3\xfa\x41\xdf\xb6\xfa\xd4\xde\xf5\x3f\x55\xae\x77" - "\xfd\x2f\x98\xcc\x56\xf7\x93\xdc\x5b\x8d\xaf\xbb\xda\x5a\x93\xac" - "\x2d\x53\xfb\x58\xff\x9b\xaa\xaf\xff\xe5\x39\xe2\xf5\xd9\x54\x7f" - "\x7c\x1f\x4e\x4d\xe8\xc3\x3c\x8a\xef\xc3\x29\x3b\xff\x6f\xc7\x35" - "\x06\x94\x9a\x9a\x6a\x4a\x4d\x31\xa5\xa4\xe2\x35\x9a\x48\xfd\x53" - "\xcd\xa9\xfd\xf0\xbb\x48\xbf\xf6\x37\xa5\x9a\xcc\xf8\xf5\xd3\xaf" - "\x17\x25\x3c\xf7\xe7\xb2\xf8\x99\xf5\x6b\xbf\x84\xe7\x8b\xbe\xe7" - "\x7d\x7f\xbd\x5e\xa3\x7e\x73\xc2\x73\xbf\xef\x79\x7f\xd1\x7f\xb3" - "\x3c\x9d\xf3\x1c\xef\x87\x76\xff\xdc\x85\x33\x8b\xe6\x14\xca\xfd" - "\xe2\x59\x8e\x99\xcf\x3c\x33\x6b\xfe\x7c\x47\xc9\x8b\x8e\x7b\xef" - "\x79\xe8\xd6\x3b\x1d\x6a\xdb\xb9\x68\xec\x75\x85\xe9\x34\x79\xd1" - "\x3c\x7e\x31\xf9\xe1\xfb\xf3\x1d\x79\xf7\xde\x13\xff\xd2\x00\x23" - "\xb7\x97\xcf\x07\x25\x46\xfe\x72\x2b\x07\x13\xad\x7e\x53\xea\x9e" - "\x36\xf6\xf3\x55\x6b\x1e\x8f\x2e\x3f\xc8\xfe\xa3\x5d\x6e\xe1\xbd" - "\x86\xf7\xf4\x1f\xba\x8e\x1b\x31\xb2\xae\x9c\x8a\x9f\xe6\xf3\x2b" - "\x0f\xdd\x23\xf6\x07\xc9\xf1\x00\x99\x8e\xd2\x13\xaf\x36\xc1\x2a" - "\xe2\x67\x9f\x3f\x42\x0e\x37\x59\x50\xfe\x16\xbc\x4b\x11\x77\x69" - "\x48\x0b\xe9\xbe\xd0\x8f\xdc\x23\xd3\xf6\x97\x1b\xf9\xac\xc7\xe8" - "\xa1\xaf\xc5\x7e\x21\x9f\xf9\x7c\x90\xca\xf7\xd0\xa7\xc2\xf4\x0b" - "\x17\xeb\x86\x9a\x41\x64\xe6\xbd\xd0\xb7\x07\x91\xe5\xed\xc1\x1c" - "\x0b\xe4\xa1\x9d\xc6\x5e\x68\x25\x9e\xfd\xf4\xc4\x7a\xae\x9b\xf3" - "\x6a\xa6\x5f\x6c\xe5\xfc\x9b\xe3\xf3\x1f\xe9\xdd\x8b\x7d\x68\xa7" - "\x09\xf9\xa6\x7e\x49\x56\x6b\x54\x7c\x1b\x4e\x7f\xd7\x7f\xf3\x44" - "\x4a\xf1\xa1\x2b\x0e\x46\xca\x49\xf9\xfc\x3c\x7c\xdd\xe2\xa8\x88" - "\xb0\x7f\xfa\xe4\x76\xb7\x58\xf7\x02\x99\x21\xd3\x29\xde\x79\xec" - "\xa3\xf0\x70\x46\xed\x2c\x32\xa3\xfd\x43\x8f\xd3\xb4\x31\x8e\x29" - "\x44\xee\xc9\x64\xfe\x77\x17\xfb\x1b\xee\x2e\x5b\xfb\x27\x32\xff" - "\xb6\xab\xdc\xd4\x25\xec\x54\x5a\x22\x02\x82\xe3\x03\x85\x44\x98" - "\x7d\xfc\x0f\xce\x88\x72\x9e\xb9\x9d\x6e\x3b\xb5\x94\x84\x68\xd9" - "\x11\x11\xae\xf8\x93\x3a\x1b\xd0\xdc\x1e\x62\xff\x45\xcb\xb2\xc9" - "\x94\x7a\x2c\x9f\x4c\xcd\xce\x6a\xf2\x4d\x0f\x51\xe9\x11\x11\x38" - "\x38\xe3\x6b\x6a\x71\xee\xa2\x82\x56\x32\x1d\x6c\xfb\x1b\xc9\x18" - "\x37\xab\xbe\xb1\x95\x9d\x21\xfb\xb2\x39\x9c\x76\x86\x96\x2c\xa3" - "\x01\x4b\xfe\x4c\x56\x5f\xa0\x15\xf5\x9c\xa0\xc7\x0f\x53\x0a\xe0" - "\x99\x96\xfe\x8d\xec\x4b\x1f\x63\x3f\xdf\x5c\xaa\x29\x23\xbb\x70" - "\x67\x65\x74\xb9\xb3\x6c\x5d\x22\x6b\x50\xa7\x3b\x2b\xb3\xa5\x18" - "\xf9\xdb\xf6\xd1\xc0\x56\xca\xdc\x7f\xbc\xd5\x54\x7d\x9a\x86\x72" - "\x9b\x8e\xa1\x6d\x35\xa7\x91\x7f\xd5\x7e\xaf\x86\xb2\xb1\x65\x22" - "\x69\xfb\x5b\x7d\xf9\x61\xd2\x00\xab\xba\x8b\x86\xd6\x74\x91\x5d" - "\xab\xdc\xef\xe5\x72\xed\xf4\xc8\x1d\xbe\x83\x44\xa5\xcb\x44\xb4" - "\x7b\xd5\x87\x7e\xe8\xc4\xfe\x1f\x3c\xdd\x60\xf6\x1d\x6c\xa7\xe6" - "\x50\x17\xb5\xd0\x5f\xc9\xe7\xfa\x87\xf7\xb7\x4f\x37\xf4\xd3\x20" - "\x04\xde\x25\x6d\xa8\x4b\xf1\x8e\xbb\x99\xcf\x2a\x97\xd3\xba\x32" - "\xca\x28\x5e\x42\xfd\x8f\x23\x5d\xcd\xed\xeb\x03\xbe\xc8\x3f\xbc" - "\x4b\xa4\x3f\xee\x13\xeb\xcb\x9a\x29\xb5\x25\x54\xcd\x7e\x9f\xa6" - "\x68\xfa\x37\x36\x5f\xe8\x10\xf9\x8a\xff\xee\xd5\x2c\x81\xf0\x6a" - "\x8d\x2c\xef\x9d\x3d\x64\xf2\x99\xcf\x92\x2f\x3f\x44\x5f\xa0\x6e" - "\xb1\xea\x9b\xa1\xd0\x5b\xb9\x2d\xa1\x30\x9f\x77\xca\x16\x1d\xf6" - "\xf4\x75\xf3\x68\xc4\xe6\xd3\x34\x7c\xd3\x69\xca\x12\x9d\x59\x26" - "\xf6\xb1\xe5\xb3\xa9\x9b\x70\xcd\x68\x23\x0b\xda\xae\xfc\xb1\xd3" - "\x74\x5f\xdb\xee\x2c\xaa\xed\xea\xf5\xb5\xed\xea\xe8\xf5\xb5\x05" - "\x4f\xed\x62\x7f\x5b\x3f\x4d\x1b\x6f\x3d\x48\xfd\x21\x27\x4e\xe6" - "\xef\x75\x27\xc9\xbc\xe2\x24\xd1\xcd\xe5\x26\x72\xcc\xe6\x73\x16" - "\x8f\x5e\xe7\x43\xdf\xf0\xfd\x51\x7a\xe4\x08\xae\x19\xf8\xa5\x40" - "\x26\xfe\xc8\xed\x6c\xd3\xf9\x18\x69\x26\xa4\xfd\x01\xd7\x54\x5c" - "\xf7\xb9\x6b\x44\x50\x54\x7c\x94\xd3\x61\xa2\x74\xe6\x67\xe5\xdf" - "\xfb\x51\x4e\xa7\xe7\x91\x3d\x7e\x7a\x7e\xb8\xc1\xd7\x4a\xc7\x3f" - "\xb4\xeb\x8b\xa3\x27\x38\x0e\x55\x50\xe2\xd5\xed\x4c\xe1\x98\x54" - "\x7a\x3a\xe3\x70\x15\xd7\x7b\x94\x1e\xe5\x7a\xac\xf8\x41\x4e\x1f" - "\xa9\x32\xca\x76\x74\x3b\x51\xe7\xa3\x97\x21\x5d\x18\xe9\x68\xb7" - "\x99\xdf\x7d\x74\xf4\x84\x49\xe5\xc9\x32\x01\x66\x58\x87\x0f\xd9" - "\x7f\x68\x1a\xcb\x78\x87\xc9\x2a\x1a\x67\x8c\xa6\x9a\x37\xc5\xc1" - "\x4d\x6f\x8a\x26\x25\x7b\x8f\xe6\xfb\xa9\xc8\xc9\x38\x62\x1c\x6f" - "\x5a\x8d\x77\x8d\x18\x85\x98\x2e\x4d\x85\xec\x4f\xf6\x28\xec\xbf" - "\x8b\xe3\xda\x20\x3c\x79\x7c\xc6\xd7\xfa\x7e\xd9\x81\x7e\xd0\x01" - "\xf9\x2d\x6d\xed\xf4\xdb\xae\x40\x3f\xf7\xbf\x91\xc9\x17\x39\x4a" - "\xa3\x32\xc9\xce\xf6\x60\xed\x9b\xc2\x8f\x6b\x80\xfd\x3b\xc1\x2f" - "\x57\x1d\xa7\x47\xff\xf0\xe3\x4c\xca\xfc\x0f\x17\xe9\xfa\xe9\xd1" - "\xbf\xc5\xe8\xa7\x59\xcd\xfe\x86\x18\xdd\xf4\xc4\x65\xe7\xea\xa6" - "\xc7\x2f\x51\xba\x09\xb2\x2f\x75\x51\xd4\xaf\xd2\x1f\x8b\x26\xa4" - "\xeb\x7e\x22\x8f\x7d\x99\x90\x1e\xd6\xd3\x9b\x13\xd2\x83\x7a\xfa" - "\x00\x43\xf7\xb5\x30\x1e\x8b\x58\xf7\xe5\x7f\xcb\xba\xaf\x65\x86" - "\xae\xfb\xa4\xfe\xc9\xff\xb3\xd8\x0a\x5d\xb4\x90\xf5\x4d\xfe\x7b" - "\x8c\xbf\xd8\x4f\x06\xee\x69\x48\x7b\x81\xd3\xd6\xff\x95\xcc\xf8" - "\x19\x7a\xef\x0b\xd6\x7b\xac\xf3\x58\xf7\x6d\x1c\x2c\x5a\x37\xbe" - "\x29\x0e\xd7\xc8\xd8\x3a\xbf\xec\xd1\x7f\xaf\x20\x6d\x35\xd2\x5e" - "\xc1\x7b\xd6\x83\x4c\x93\xe6\xfc\x06\x9e\x23\xb7\x81\x9f\x4b\x35" - "\x53\x36\xad\x45\x7f\xf3\x79\xc3\x95\xa0\xaf\x35\x85\x8a\x7d\x25" - "\x7c\x86\x35\xca\x3e\x69\x6d\x2d\x25\x6d\x2c\x77\x83\x57\x40\xce" - "\x7c\xae\xaf\xa9\x2c\x24\x8e\xf3\xb9\x3b\xc6\xa1\x60\xf1\x03\x1c" - "\x8f\x28\xa5\xc9\x49\xc4\x7e\xe1\xac\xb3\x81\x8b\x79\x3d\x70\x52" - "\x31\x54\xf2\x0b\xfd\x54\xb7\x53\xf5\xf5\x13\xeb\x39\xde\xd9\x51" - "\xfa\xe5\x0e\xcc\xf7\xc2\xdc\x36\x6b\xb4\x9c\xf8\x1c\x0c\x64\x8c" - "\xcf\x2f\x3a\x37\x9a\x34\xe7\x7a\xe3\x2c\x0c\xc7\xbe\x43\x1e\x5f" - "\x6b\x98\x18\x67\x3f\xfd\x32\xd4\x5c\xda\xc0\xe5\xab\x99\x36\xc2" - "\xe3\x36\x60\xa4\x48\x18\x26\x39\x6f\x74\xfa\x29\x5f\xad\x9d\xa7" - "\x7f\xe8\x6f\x9e\x1e\x24\xd6\xfb\xbe\x00\x60\x94\x1e\x55\x30\x00" - "\x4b\x60\x0c\x88\x7b\xa7\xc3\x1f\xb0\x4c\x7c\x0b\xf8\x85\xdc\x5f" - "\x7c\x2e\x92\xf7\xdb\x40\x97\x0c\xf6\x95\x57\xb6\xe8\x2f\x4f\xd4" - "\xfe\x95\x48\x3f\xdb\x09\x7e\xfb\x65\x3b\x9f\x5b\xe2\xf3\x9c\xe7" - "\x3b\xcb\x09\x1a\x0d\x37\xce\x73\x6a\x8b\xfe\x67\xcf\x72\x02\xb6" - "\x7d\xb3\x49\xec\x02\xfe\xed\x7c\x9e\x13\xf8\x4f\x62\x3e\xd4\xdb" - "\x14\x7c\xe3\x71\x49\xf3\xd1\x9c\x86\xb9\xe3\x01\xa3\xff\xb9\xbd" - "\xdc\x16\xbc\xb3\x2b\x1b\x51\x1c\xf2\xd3\x63\x41\x7e\x8f\x34\x33" - "\xe7\x1f\x05\x3d\xe6\xc3\x18\xf6\xc1\xd1\xa8\x69\xdd\x12\x32\x2b" - "\x9d\xf6\x44\x1a\x97\x57\x3a\xed\x71\x6f\xaf\x4e\x7b\xfc\x63\xa5" - "\xd3\x14\x8d\x95\x4e\x7b\xfc\x5d\xa5\xd3\x1e\xdf\x22\xf7\xc5\xa0" - "\xd3\xf8\x1d\xeb\x35\x43\xa7\x6d\x1a\x2c\x0e\xb0\xee\xe8\xf4\x3c" - "\xbe\xde\xd0\x6d\x6b\x90\xc6\xba\x83\x71\x54\x7a\x2a\x3f\x20\xfe" - "\xdf\x2c\x52\x7e\x07\x7c\xef\xe4\xf3\x0b\x01\xfd\x9e\xc7\x93\x14" - "\xa5\xe3\x1e\x6f\xeb\xd5\x71\x8f\x3b\x7b\xcb\xb2\x8e\x7b\xfc\x3b" - "\xa5\xe3\x54\x7a\xed\xe3\xac\xe3\xf2\x03\x4c\x03\x1d\xbe\x89\xd7" - "\xf0\xf4\xfc\xa0\xe3\xa3\xc1\x58\x1d\x17\x2f\x5f\x4f\x8c\x31\x74" - "\x1c\xeb\x36\x3c\x4f\xf2\x53\xba\x9c\x67\xb3\x9c\x55\x81\xe6\x86" - "\xdc\x71\x1f\x70\x9b\x39\xae\x19\xd3\x6d\xdc\x09\xea\xaf\x9f\x1d" - "\xd2\xdb\xfd\x44\x85\xe1\xfb\xe8\xa7\xc7\xd7\x27\xb3\xa3\x7b\x63" - "\x0f\xd2\xd5\x7c\x76\xde\x57\x7e\x94\x7c\xd5\xa2\xbc\x25\x72\x84" - "\x0a\x4a\xa0\x2b\x52\x9f\xff\x92\xfb\x16\xf3\x8e\x9f\xf1\x95\x75" - "\x0f\xc6\xd2\xe6\x82\x10\x5d\x84\xb9\xfa\x97\xeb\x4c\x78\xe7\x8a" - "\x7b\x27\xd7\x18\x6e\x9e\xc7\x71\xeb\x9e\xd8\xd5\xd7\x7c\xff\xc2" - "\xea\x9b\x3e\xb6\xef\xfa\xa6\x3f\x26\xeb\x83\x4d\x85\x39\xd0\x25" - "\x27\x69\xba\x9c\x97\xc8\xf8\x36\x2b\x92\xc2\xaa\xd4\xdf\xf7\xeb" - "\xe3\xfd\xbb\xdf\x53\xfe\xdf\xbe\xa7\xfc\x37\xac\x8b\xd0\x3e\x6b" - "\xd4\x13\x0f\x67\x60\xc4\xc8\x77\x1c\xf9\x9e\xbc\x44\x5f\x8b\xf9" - "\xd2\x3d\x4c\xce\xd1\xec\x06\x4c\xe6\xbf\xb5\xc8\x27\x63\x86\x40" - "\x57\x8e\x5f\x4c\x1c\xaf\x25\xb6\xec\xe4\x5e\x1a\x3f\x49\xe7\x59" - "\xf7\xcb\xf0\x55\x93\x8c\xa1\xd9\x08\x9b\x14\x63\x1c\xc7\xed\xd3" - "\xd7\x3f\x9e\xac\x87\xde\xac\x8b\xf1\x8b\x6d\x87\x9e\xbb\x9a\xe3" - "\x1a\xb0\x7d\xb9\x4e\xcd\x37\x2f\x87\x7e\x1e\xc4\xe7\x61\xf8\x6c" - "\x4c\x41\x34\xcf\xd4\x28\xe3\x8b\x3d\xe9\x37\xca\xf6\xb5\xce\xc2" - "\xf5\xea\x75\xb2\x8f\x69\xa8\xd3\xf3\x54\xa6\x51\x86\x61\xb3\x9f" - "\x22\xc6\xe5\xab\xe5\x99\xd2\x48\x3b\xeb\xc2\xcb\x61\x8b\x0e\x52" - "\xf5\xcc\x20\x55\xcf\x53\x13\xfd\x34\xdd\x76\xbe\xb3\x19\x7d\xb7" - "\xef\xa9\x95\x17\xde\x3e\xd2\xdb\xf7\x94\xf7\x7b\xda\x77\xbe\x7a" - "\x23\x17\x5e\xaf\x4d\xaf\xb7\x20\xe7\xc2\xe9\x5a\x50\xf4\xc3\xe9" - "\x9a\xad\xd3\xb5\xa0\xee\x7b\xe8\x9a\xac\x9e\xc3\x3f\xbc\x1e\x87" - "\x5e\xcf\x0c\x4b\xb2\x7a\x48\xfe\xf5\x79\x6e\xca\x62\xc4\xb0\xe4" - "\x78\xae\x2a\xbe\xdc\x8c\xbc\xd8\x58\xbd\x2a\xce\xeb\x8c\x42\x23" - "\x56\xaf\x1e\x4b\x16\xba\x7a\xc6\xf2\x82\x3a\x1e\xdf\x85\xe6\xa7" - "\x19\x2b\x39\x3e\xea\xf8\x65\xea\x4c\xb6\x5e\xa6\xfa\x7c\x31\x82" - "\x39\xa6\x95\x10\xf9\xd4\x58\x2d\xf7\xdb\xa1\xd7\x67\xfc\x91\xfd" - "\xef\xd5\x7e\xe1\x8c\x23\x4a\xee\x67\x60\x8e\x38\x23\xab\x6f\x18" - "\xfb\x76\xd5\x97\x65\xf7\xeb\xcb\xa7\xbe\xd3\x33\x73\xa8\x9f\xe6" - "\x66\x48\x3f\xfa\xf4\xcf\x0f\x60\xfe\xa0\xc7\xd5\x7b\xe6\xed\x98" - "\x18\x82\x18\x0b\x9f\xfe\x9d\xee\xfb\x0f\x1a\x94\x83\x96\x33\xa7" - "\x19\x34\x30\xd2\x91\xe6\x34\x68\x00\x9b\x26\xc3\x57\x17\xe1\xb3" - "\x39\x21\x75\x0e\x7b\xe6\x1a\x51\xb9\xaf\x4e\xc1\x9e\xd9\xaa\xec" - "\x16\xd4\xd7\x9d\x6f\x96\x73\xa5\x32\x9e\x2b\x3d\x5d\x1c\x4c\xdb" - "\x57\x67\xe0\x21\xe6\xdb\x4d\x7c\xde\x7b\x54\x44\xc5\xe9\x62\x9b" - "\x80\xcf\xc6\xc9\xf7\xf3\xb3\x4c\x98\x5b\x82\x26\x33\xbf\x15\x1d" - "\x1c\x2f\x46\xc2\xce\x00\xde\xd5\x0c\xd7\x8f\x6b\x70\x69\x16\xc7" - "\xba\xd0\xdb\x33\xf3\x2f\xda\xaa\xcf\x0f\x68\x9d\x76\x93\x81\xef" - "\x66\x79\x8e\xf5\x69\xb4\xbf\x40\xda\x6d\x0a\x1f\xbb\x89\x7d\xf8" - "\xb5\xf4\x7d\xbb\xc4\x52\x3b\xed\x99\x17\x90\x73\x25\xae\x73\x14" - "\xc7\x83\xe3\xb9\x11\xec\x11\x94\x9b\xd6\x43\x37\xc0\x15\x9d\x06" - "\xdd\x9e\x26\x35\x16\xab\x36\x86\x96\xda\x4d\x8d\x41\x79\xc6\x8e" - "\x86\x3b\xdc\xdf\xa9\x58\xcf\x4f\xaf\x37\x68\xd7\x83\x13\xf0\xe1" - "\x3c\xca\xa7\xe9\xe9\x5d\x06\x4e\x52\x5e\xd3\xf9\xcc\xee\xcc\x7a" - "\x3e\x2b\xa4\xe8\xdf\x98\x81\x3c\x87\xcf\xa5\xff\xd3\x81\x18\xfa" - "\xa7\x32\xbf\x31\xfd\x79\x7d\x03\x74\xb9\x04\xb4\xb4\xa8\x33\x0e" - "\x6c\xc3\x3c\xc3\x67\xe9\x33\x18\x4f\xad\xd2\xa0\x79\xbe\x59\xad" - "\x8d\x3d\x33\x29\xa6\x1f\xd0\x5e\x3b\xdb\x67\x29\x46\xfb\xb9\x0c" - "\xd3\x80\xe3\x3b\x72\xdd\xc0\xe7\xe2\x4e\xcf\x33\x85\x89\x6d\x5a" - "\xa1\xce\x8f\x90\xf2\x27\x79\x66\x65\x8f\x7c\x0c\x16\xc1\x12\x87" - "\x08\xab\xb3\xc8\xcf\x8c\xd8\x53\x16\x34\xf7\x25\xf7\xcc\x83\x32" - "\x56\xa4\x49\xae\x25\xc0\xce\x9a\xb5\x58\x00\x37\xd5\xf7\xb3\x7e" - "\xa1\xd2\x0a\x37\xe1\x0a\x1e\x7b\xe6\x8c\x40\xdd\x41\xb7\x8c\xab" - "\x82\xb6\xcd\xaa\x62\x9e\x33\xf8\x8c\xd7\x1e\x95\x9f\x78\xe1\x63" - "\xac\x47\x0c\x9a\x03\xff\xf4\x4e\x4f\xe1\x70\x03\x7f\x23\x3f\xf7" - "\x1d\xe7\xe1\x7d\x9a\x26\x47\x58\xea\x57\x75\x4e\xa8\x30\xcf\x90" - "\x5b\xae\x83\xfb\x99\xf5\x0b\xd3\x43\xd1\xa2\xb0\x38\x1e\x96\xdd" - "\xa4\xe2\x53\x32\xcf\x43\x1e\x97\x84\xfb\x21\x4f\x55\x2f\x8c\x42" - "\x9b\x7a\xd7\x83\x27\xfb\xf6\x4b\xff\x3b\xd5\x1f\x85\x51\x6e\x57" - "\x2f\xbe\x2c\x7f\x85\x3d\xfd\xcf\xef\x42\x6e\x3b\xc7\xb3\x95\x7a" - "\xa5\x64\x18\xe3\x1b\xe4\x38\xb1\x92\xd7\x01\x7f\x3c\xe3\xce\x79" - "\x8c\x3e\xeb\xe5\xc5\x59\x43\x63\xe1\x08\xb7\xdd\x64\xe8\x27\xa5" - "\x3b\x82\x98\xa7\x92\x43\xed\xb1\xcc\x9a\x18\x83\xb3\xd7\xc0\xa7" - "\x57\x27\xcc\x72\x26\xf2\x24\xd7\xcd\xf1\xf7\x74\xd8\xac\x4b\x6c" - "\x47\x69\xd6\x34\x85\xd7\x33\x07\xb9\x1f\xfb\x1a\xd3\x8c\x38\x9f" - "\xaf\x2b\x1d\x82\x7e\x9e\xfd\xe7\xd7\xd5\xd9\xa1\x90\x8a\xe5\x38" - "\xeb\x2f\xc2\xb4\x85\x69\xc5\x6b\xe8\x41\x19\xa3\x43\x9e\x2b\x9f" - "\x25\xcf\x98\x0f\x2c\xde\x22\xe3\xc7\xea\xfe\x80\xc1\xa6\xe2\x88" - "\xdc\x6b\x70\x97\xf0\x39\xdb\x08\xcf\xef\xa4\xbf\x5b\x63\x49\x84" - "\x1e\x0e\xb3\x4c\xcc\xce\xe2\xf3\xf3\x21\x29\x4b\xb3\x47\x1b\x67" - "\xe6\x39\xa6\xa5\xe8\xcc\x27\xe8\xa1\x54\xb6\x8b\x1c\x6e\x8e\x77" - "\xf0\x2c\x9f\x1f\x22\xbd\x7f\x69\xad\x49\x1c\x52\xf2\x3f\x7b\x99" - "\x8c\x23\x28\xf7\xae\x8e\x42\x27\xa4\xfe\xe3\x28\xcd\x7e\x43\xad" - "\xf5\x18\x3a\xea\xd9\x01\xbc\x7f\xe5\xd7\x61\xa0\x2e\x8c\x7f\x33" - "\xcd\xe7\xea\x92\xd9\xcb\x8c\xf9\x0a\x9f\xb9\x53\x7b\x61\xbd\xf0" - "\xfc\x34\xbb\x94\xaf\xbd\x7d\xf0\x7b\x86\xd5\x7e\xae\x5e\x78\x96" - "\x0c\xd9\x2b\xbe\x86\xcf\x6d\xcf\x6a\xe2\xfa\xfb\x1a\x2f\x84\xfb" - "\x31\xee\x27\xcb\x31\x47\xf2\xbe\x49\xbe\xb7\xf6\x6c\xa1\xd1\x06" - "\x83\x26\xaa\x0d\xcf\xee\xeb\x48\xdf\x6d\x89\x69\xfb\x3e\x49\x8b" - "\xde\xf7\x67\x62\x68\xc3\xcf\x21\x35\xae\x3d\xbb\x07\xfc\x51\xaf" - "\x78\x4d\xa5\x41\x76\xb6\x89\xa5\xd0\x05\x12\xc7\x39\x64\xc8\x3a" - "\xf2\xc2\xfe\xfb\x76\xa8\xda\xe3\x7a\x16\xed\x7f\x56\x8f\x9b\xf0" - "\x6c\x05\xe3\x92\xb4\x9d\x71\x38\x3a\x8b\xd8\xbe\x50\x71\x14\x9c" - "\x2f\x30\xbe\x8e\xeb\xb9\x8f\x9d\x77\x48\x1d\xce\x31\x15\xba\x9d" - "\xfd\x42\xdd\x59\xd4\xd1\xed\x84\x5e\xc8\x32\x75\x7a\x9c\xd0\xff" - "\xa7\xc2\xaa\x4e\xe7\x0c\x03\x57\xc6\x0d\x76\xb3\xa5\x53\xcc\x49" - "\x4e\x5f\xae\x57\xc6\x79\x72\xf6\xc7\xcf\x82\xdf\x45\x3f\x24\x0e" - "\x13\xec\xf2\x40\xb0\xb2\x61\xbd\xb6\x50\x1c\xe0\x78\x62\x98\x7b" - "\x04\xd6\x81\x77\x07\x2e\xf7\xc2\x16\x7f\xd2\x54\xb0\x98\x72\x31" - "\x47\x26\x71\x56\xe4\x6c\xd6\x70\x5d\x28\x46\x73\xbc\x6e\x3c\x67" - "\xeb\xcf\x23\xf8\xb9\x63\xa1\x98\xde\xe9\x99\x63\x33\xf6\x04\x55" - "\x2c\x9c\x39\x8e\x9e\xf8\x41\xa9\x4f\xf0\xf9\x21\x8e\x33\xa5\x61" - "\xee\x13\xe0\x7a\x0b\x78\xfe\x8a\xfa\x90\x0f\xf2\x3f\x43\xb6\x33" - "\x98\x7a\xd3\x20\xfc\xb2\xfa\xd8\x3b\x0d\x30\x5e\x1d\x69\x0d\xeb" - "\x0d\x5c\x07\x86\x72\x4d\x3f\x10\xb7\x9d\x06\x6e\x48\x3f\xb0\x4e" - "\xa5\x47\x38\xde\x21\xfb\x36\xe2\xfd\x41\x03\x57\x03\x07\xae\x8f" - "\xcf\x6b\x8a\xf4\xdd\x76\x8e\x35\xc3\xf5\x05\x97\x72\x7c\xdf\x39" - "\x61\x03\xdf\x1f\xca\xc7\x65\x35\x42\xf0\xd8\xc9\xba\xd7\x31\x84" - "\xa8\x25\xc4\xfa\xe4\xb9\x49\x8d\x35\x21\x5e\xdf\x1e\x82\x3a\xae" - "\xe8\x10\x4e\xd2\xba\x9d\x49\xfb\x97\xcb\x20\x7f\x85\xd4\x0d\xab" - "\x76\x5f\xa1\x89\x89\xd0\x11\x28\xd7\x3d\x91\xd7\x96\x20\xb3\xcf" - "\xed\x69\x2a\x0d\xf0\x19\x4b\xe8\x9b\xe7\xf6\x20\x8f\x9d\x6d\x2c" - "\xcc\xaf\x58\x67\xa5\xb2\x5e\xf2\x2e\x1c\xcd\x30\x3e\x36\xbb\xc8" - "\xdc\xe4\xfa\x61\xdf\x01\x00\xdc\x76\x25\x37\xcf\xb5\x1b\x76\x09" - "\xee\xc3\xf1\xfb\xdd\xcf\xf9\x13\xe7\x66\x4f\xbf\xf8\x62\x49\xc1" - "\xbc\x59\x7c\xc9\xba\x6e\xc1\x8d\xe9\xb1\x73\x70\xd6\xc1\x2a\x3e" - "\xc2\xf3\x36\x5e\xef\x7a\x7d\x90\xb1\x7f\xfb\x7c\xcf\xf9\x2f\xdd" - "\x4f\xfc\x6e\x9e\x4b\xb0\xcd\x8d\x77\x45\xbf\x2b\x5d\x26\x6d\xa0" - "\x2f\x2d\x64\x4a\xac\x6f\xf6\xcc\x92\x99\x45\x77\xf2\x4e\x4d\x7a" - "\xb2\x7a\xca\x13\xea\x69\xe8\xa9\x47\xe9\xc0\x90\x89\xf3\x55\x76" - "\xef\x12\x69\x6d\x79\xea\x8c\xee\xf3\x47\x8c\xb5\x94\x3e\xfc\xeb" - "\xf2\xa3\xab\xbe\x60\x7a\x73\x4c\x29\xd3\x47\x4b\x5a\x4d\x6c\xcb" - "\x94\xe1\x9e\xe7\xb4\x72\x6d\x46\x8f\x53\xb4\xff\x74\x2b\xc6\x98" - "\xa2\x6c\x51\xb9\x9b\xd7\x75\xb3\xfa\x9a\xc7\xc6\xfa\x26\xb0\x2f" - "\x5b\x1b\x15\x4d\xec\xd3\x8f\xa0\xe2\xf3\x56\xa5\x63\x8a\x36\x35" - "\xd9\x89\xf1\xf8\xf5\x51\x2a\x7a\xdb\x6c\xc7\x38\x32\x84\xfe\x05" - "\xf7\x9b\xb8\x2c\xbf\x8b\xeb\xe7\xab\x4e\xd4\x99\xc1\x85\xe0\xc6" - "\x14\xa1\xfe\xc8\xac\xdf\xa4\xe2\x67\x12\x29\x72\x97\x2d\x15\x14" - "\xee\x7f\x91\x99\xac\x03\x33\x2c\x57\xff\x68\xa8\xfd\xee\xbb\xc6" - "\xe4\xb8\xcb\x4a\x21\xbd\x91\xb0\x55\xc4\xc6\xd5\xfa\x2a\xfc\xc8" - "\x8d\xe5\x24\xfd\x2c\x2a\xbf\x0a\x27\xc3\x75\x8d\x47\x14\xf3\x99" - "\x66\x2d\xbd\xdb\xe1\x5e\x40\xa6\x0f\xba\xfc\x26\x8e\x1d\xcf\x36" - "\x16\x7f\x5b\xe0\x28\xbd\x70\xe3\x17\x48\x43\xfb\x5d\xa2\xa2\xdb" - "\xa1\x6c\x93\x17\xe6\x68\xab\xba\x1d\xbd\xf0\xcd\xc4\xf0\xdd\x6f" - "\x93\xa9\xbe\x2c\x60\xf2\x99\xef\x22\x9f\x23\x44\x5f\xe0\x3e\x29" - "\x2d\x51\x27\xdb\x3b\x0c\xa3\xd6\xa3\x55\xb8\xbf\x23\x93\x7e\x2e" - "\xd1\x74\x92\x5e\xd8\xb2\xab\x8f\x72\x7c\x0e\xb8\x23\xbd\xe1\xd1" - "\x4e\xcf\x0b\xe8\xff\x7b\xcc\xfa\x78\x07\xbd\xfc\x02\xf8\xbf\x48" - "\xea\x7f\xbc\x7f\xa4\x43\xc6\x16\x9e\x4b\x46\x9e\xe4\x63\x1e\xaf" - "\xcd\x0a\x2f\xf7\xab\x38\xfb\x4d\x80\xcf\x3c\xf4\xe1\x1f\xd1\xdf" - "\xe7\xba\x95\xf7\xa8\xfa\x0d\x0c\x53\x86\xfb\x8c\xe8\x8e\x7a\x28" - "\x13\xec\x6e\x8a\x62\x4e\x1d\x39\x2b\xf2\x9b\xdb\x4f\xcb\x58\x97" - "\xac\x3f\xde\x9f\xfd\x7b\x93\x2f\x7c\xca\xeb\x5b\xa9\x51\x0b\x6c" - "\x0f\x5f\xcd\x29\xaf\x8a\x89\x19\xa5\x66\xfa\x2b\x35\xbb\xfe\x77" - "\xb9\xaf\xfc\xaf\x48\x17\xe5\x4c\xe7\xee\xb3\x62\x9a\xcf\xfc\xbf" - "\x88\xbf\x7d\xc2\xba\x10\x74\x77\x9c\xa4\xb9\xff\xb6\x1f\x70\x3e" - "\xf8\x2f\xc0\x92\xb1\xb4\xc6\xd2\x17\xb8\x47\x9b\x0e\x1b\x7a\x32" - "\x69\x0c\x92\x14\xef\x1a\xab\xeb\x49\x93\x06\x9d\xcb\x31\xcf\xa0" - "\x6b\x47\x73\xbb\xf0\x9c\xcd\xcf\xb8\x8e\xe0\xab\x75\xb9\x77\x93" - "\x35\xf2\x24\xeb\xe0\x7c\xd6\xaf\x48\x9f\x56\x7b\x56\xea\xe4\x3c" - "\xfd\x79\x92\xfe\x3c\x51\x7f\x1e\xaf\x3f\xe7\xea\xcf\x63\xf8\x59" - "\xe9\xee\x17\x9d\x3d\xe3\x8a\xa9\xff\x21\x3c\xbb\x8c\xbe\x00\x3e" - "\x03\xac\xae\x65\x72\x0c\xd0\xf1\x18\xad\xe3\x95\xad\x3f\x1b\xf8" - "\x5c\x65\x8d\x2c\xfb\x9f\xc2\x27\x1c\x8f\x4f\xb1\x25\x06\x1f\xb2" - "\xba\x72\x7f\x08\x3e\x36\x2b\xc7\xe7\xff\x6f\xe0\xc3\xb8\x70\x1a" - "\xea\xaf\x48\xc0\xa7\xda\xc0\x27\x29\xbf\x2d\x14\x01\x1e\xff\xe6" - "\x5f\x21\xe3\xfd\xf6\xe7\xb1\xad\xb6\xcb\x88\x5f\x57\x7c\xf8\x7c" - "\xf1\xeb\x20\x0b\x76\xe4\x41\xfb\x8b\xeb\xf5\x71\x7e\xaf\xb2\x05" - "\x5f\xca\x30\x7c\x8a\xd0\xd6\x1d\xeb\x54\x5b\x77\xae\xe4\x18\x6e" - "\x8b\xe9\x4a\xb7\x4b\x04\x30\x37\xfb\x8a\xe7\x0f\xb1\x70\x8b\x4a" - "\xe6\xcf\x7f\xe1\x4e\x47\xd1\xcc\xb9\xb3\x1c\xd7\x15\x3a\xe6\x3b" - "\xe7\xcc\x2e\x99\x15\xbf\xcf\x6e\xd3\xbf\x97\x22\xcf\x0f\xb0\xbd" - "\x2d\xe7\x5b\xe0\x7f\xd6\xdb\xca\xe7\xf3\xa5\x66\xe1\x79\x29\x87" - "\x75\xfd\xe6\xd7\xc8\xcc\x67\x8a\x81\x4f\x8d\xa1\xe3\x8d\x39\x12" - "\xeb\x78\xa4\xc3\xfe\x9b\x3b\x3a\x26\x9d\xf3\x1e\x30\xd2\x18\xbe" - "\xae\x9b\xfa\x1f\xa5\x97\xe6\x70\x9d\x49\x69\x78\x56\xd4\x61\x7c" - "\xe5\xef\x0d\x98\xa0\x53\x04\xc7\x63\xe2\x73\x79\x28\x27\x8e\xd1" - "\xbc\x2b\x58\xf7\xf2\x37\x79\x94\x5d\x2f\x80\xe3\xbc\x91\x28\x53" - "\x8f\x34\xf3\x5a\xe4\xc5\x5c\x81\xe3\x28\x71\xde\x09\x1c\x1f\x01" - "\xe9\x16\x3d\xce\x14\xa7\x3d\xc6\xf1\x0b\x90\x66\x8b\x49\x7b\x81" - "\x63\xa5\x23\xcd\xa1\xc3\x5b\xc6\x74\xc6\x73\xae\xbe\x96\xc2\x79" - "\x5e\xd5\xeb\x2d\x8f\xc5\x99\x3f\x9e\x71\xeb\xcd\xd9\x8e\x69\x0f" - "\xff\x64\xec\x5d\xcf\xbc\x38\x77\x76\x3a\x49\xb2\x67\x61\xb8\xcc" - "\xbe\xd5\x75\xe3\x9d\x8e\xe2\x59\xb3\xe6\x39\x16\xcd\x9a\x5b\xe2" - "\x98\xb9\x68\xe6\xe2\x74\x9a\xfd\xe2\xbc\x67\xf8\xf4\x3d\x77\xcb" - "\xfc\x82\x67\x66\x3f\xcb\xce\x10\x2a\x77\x7a\xdc\x38\x3e\x8d\x75" - "\x9b\x1e\xaf\xe2\xc0\x3a\xb6\x35\xd2\xf6\xd6\xe1\x9e\xe3\x38\xd9" - "\x71\x6d\xc2\x6f\x2f\x7e\x0d\xf8\x1d\xc6\xef\xd0\x71\x72\x4d\xc7" - "\x75\x4f\xa7\x67\xfe\x18\xc3\x9e\xe8\xe5\xa1\xf9\x79\x06\x0f\x61" - "\xfc\xdf\xa3\xc6\xb7\xf9\xe5\x2d\x11\x29\x3f\x3d\x3c\xb5\xee\x6c" - "\x2f\x4f\x71\x1c\xca\x16\xf6\xf5\x59\x88\xf7\xe0\x61\xd0\x9f\xe7" - "\xd5\x69\x4c\xb7\x63\xb4\x70\x01\xe6\xe3\x07\x39\x86\x0a\xae\x4d" - "\xe0\x97\x83\x2a\x6e\xc9\xfc\x08\xf2\x0d\x43\x1d\x7b\xf5\x3a\xd4" - "\xf3\x60\x71\x80\xbf\x9d\x71\x54\x7f\x66\x58\x80\x31\x80\xef\xf9" - "\xaa\xef\xa9\x59\xd9\x6f\x52\xcd\x1b\x8d\x77\x25\xdb\xf5\x3a\xbc" - "\xa0\x45\xf9\x66\x8f\x5c\xfb\x93\xf3\x2b\x5e\x3b\xb4\xa6\xdc\x2d" - "\x80\xcf\x29\x2d\xf5\x09\x19\x7f\xdc\x57\xde\x05\x1d\x71\xdb\x6d" - "\x3e\x97\xcc\x9f\xc2\x6b\x8b\x53\x8a\x85\xc6\xf1\xa9\xb5\xd4\xe7" - "\x5b\xb9\x9c\xb0\xec\xad\xd3\xd6\x0e\xc8\x55\xb6\x00\xc7\xa3\x2b" - "\x29\xd7\x61\x86\x99\xb6\xc7\x69\xfe\x2d\x6a\xae\xe6\x9a\xae\xec" - "\xb3\x92\xd5\x86\x0f\x1e\x64\x34\x0b\xcf\x35\x86\x0e\xf0\x53\x89" - "\x53\xf7\x97\xf2\xaa\xf6\x97\x1c\xd6\x9f\x1b\x74\x1c\x53\x38\x46" - "\x06\xf0\x3f\xc4\x7d\x87\x79\x6f\x03\xee\x0f\x83\x3e\x07\x15\x7d" - "\x4a\xa4\x0d\x08\xbb\x86\xdf\x1f\xe6\xef\x8c\xe0\xdd\x61\x15\x7f" - "\xa2\x24\x83\xdb\xdc\xeb\x53\x59\x93\x0b\x5c\x07\xf0\xde\x23\x64" - "\xa9\xc1\x77\x96\xe5\xb3\x84\x63\x59\xee\x32\xf4\x0e\xeb\x99\x82" - "\x28\xe4\x54\xda\xdd\x0b\xc6\x1b\xfa\xa6\x97\x0f\x16\xe4\x27\xd3" - "\x25\xc9\xfa\x5d\xd1\x7f\xc1\xef\x84\x67\x5e\x0d\x70\xda\x25\xfb" - "\x80\xe3\x74\x9e\xed\xb1\xef\xbb\x95\x8e\x5c\xb0\xb3\x67\x2e\xa2" - "\xe3\xc1\x31\xbf\xfd\x8c\x5b\x97\xdc\x0f\xd6\xf5\xc6\x82\xc3\x86" - "\xde\x30\xe0\x58\x53\x84\x66\x75\xe1\x5f\xc5\xee\x30\xaf\x9d\xf3" - "\x78\x29\xed\x11\xc0\x19\x78\x46\x9d\x8d\xd2\x2a\x77\x43\x27\x2e" - "\x58\x0d\x1d\x63\x96\x36\xa7\x67\xde\x07\xbd\xba\x68\x61\x56\x2c" - "\x4c\x61\xd9\x1d\x66\xb8\xac\x8f\xd8\x26\x29\x88\x9a\x39\x3e\x49" - "\x58\x1f\x5f\xa0\x83\x17\xe6\x1b\xb8\x82\x86\x07\x0c\x7c\xf5\x6f" - "\x3c\x41\x57\x2d\x68\x98\x1a\xed\x66\x1f\xe1\x26\xd5\x9f\x2e\xa9" - "\x6f\xf0\x6e\x27\xca\x56\xf9\xe9\xa5\x80\x2e\x43\x07\x51\x7e\x67" - "\x63\xd9\x78\xe4\x59\xb8\x4b\xf7\x73\x3d\x84\xfe\x3d\x1c\xc3\xfb" - "\xdb\x63\xd6\x02\x0e\xab\x3e\xbc\xab\xfc\x28\x2d\x0c\xc6\xa4\xeb" - "\x7d\xdb\x98\x77\x94\x16\x6d\x57\xf3\xea\xdd\x0d\xaa\xfc\x22\x75" - "\x76\x45\xc7\x91\x75\x01\x9f\xe3\x62\x19\x97\xb4\x97\x7d\xbc\x28" - "\xcb\x18\x2f\x00\x6b\x8f\xa4\xf9\x60\xb1\x97\xe9\xa4\xe2\x40\xcc" - "\x6b\x51\x74\x5a\x94\x17\x47\x7b\x1e\x37\x51\x0f\xd3\x69\xe0\x72" - "\xa1\x0d\x0c\xa5\x88\x82\xc5\x66\x62\x79\x61\x19\xe7\x3d\x23\xf0" - "\x87\xb4\xab\x14\xdd\x16\xad\x37\xe8\x66\xf4\x1d\xd3\xc9\x4f\x8b" - "\x88\x69\x1b\xdf\xc6\xfe\x87\x8e\x1a\x6d\x07\x4d\x79\x1d\x1c\xcf" - "\xf5\xba\x5c\x1c\xf4\x0e\x61\x9f\x82\xf9\xef\x36\x9a\x7f\x42\x8d" - "\xae\xd1\xa4\x68\xbb\x28\x08\xda\xe6\xc5\xcc\x1b\x0e\x30\x7d\x59" - "\x56\x80\x67\x48\x8f\xc9\x74\x40\xf9\xb7\xcc\xaf\x87\xbd\x1f\x92" - "\xb2\xbc\x50\xc6\xce\x60\x19\x38\xc4\x34\x62\xbd\xc8\xb2\xc4\x32" - "\xc0\xf2\xa4\x68\xe4\x9a\x14\x43\xa3\x26\xa6\x8f\x4e\xa7\x3d\x09" - "\xba\x7c\x96\xa3\x68\xac\xd2\xc5\x8e\xac\xeb\x0a\x47\xc9\x00\x28" - "\x8e\xfb\xc6\xdd\xe9\xc8\x1b\x7b\x9d\xcb\x39\x62\x8a\xba\x8c\xcb" - "\x9b\xc4\xd7\xf4\xf8\x79\x97\x03\xf5\xec\x89\x9f\xbb\x95\xe5\x2a" - "\xfd\xe1\x3a\xe8\x4f\xe9\xbf\x83\xd3\x39\x1e\xe9\xba\xb9\x44\x51" - "\xe0\xbd\xf6\x38\xfa\xd4\xb2\xbb\x8a\xe3\xdf\x4e\xc5\x9c\x71\xca" - "\x19\xf1\x5d\x2d\xde\x6d\x46\xfa\xc0\x62\x8e\x9b\xff\x77\xa1\xa5" - "\xed\xae\xe2\xb9\xbd\xa8\xdc\x96\x1f\x4c\xfb\x2a\x8c\x9f\x37\x98" - "\xd6\xe0\x9c\x70\xa3\x5b\x74\x7a\x16\x0f\x37\xda\xc5\x6b\x00\xa0" - "\x53\xd5\x54\x97\x88\x32\x8d\x0a\x5c\x1c\xa3\x1a\xb0\x53\x79\x0d" - "\x60\x31\xda\xff\x42\x85\x9a\x5f\x2e\x06\xff\xcf\x6b\xd7\x75\x59" - "\x1e\x9e\x61\xff\xdd\xbe\x4b\xf6\xab\xc7\x2e\x63\x5b\x6b\x2b\x6e" - "\x7a\x08\xf3\x01\xaf\x01\x13\xb0\x2e\xd2\x63\xf8\x49\x78\x3f\xd4" - "\xdf\x52\x5b\xf5\x51\xbd\x35\x45\xc5\x0b\x84\x8c\x97\xd7\x9a\xb4" - "\xfc\x1e\xff\x09\xbc\x1b\xb8\xdc\xc6\xfe\x15\xf9\xe0\xbd\x72\xce" - "\x63\xbc\x5b\xe7\xd1\xfc\xeb\x4c\x5a\x18\xfd\x68\x53\xf6\x73\x3b" - "\xeb\x4f\xcc\x2d\x97\x64\x1a\xe3\x9a\x1c\x0f\x4d\x54\xae\xe6\x33" - "\x4b\x6e\xe7\x72\xa7\x3d\x66\xcc\x19\x5c\xf5\xd7\x64\xca\x39\x4a" - "\x58\xf3\xa4\x90\xf2\x71\x5d\x92\x66\xe8\x58\xde\x47\xb3\x2e\x17" - "\x41\x5e\x47\xb4\x46\x44\x50\xc6\x60\xe7\xb1\x83\x8e\x93\xaf\xb4" - "\xb3\x9c\x7d\xec\xa4\x0d\x84\x7a\xd5\xb8\x11\x55\xe3\x06\xea\x0f" - "\xa6\xde\x34\x03\xe3\x43\xca\x71\x5a\xdc\xca\xf8\x33\x6d\x78\x3d" - "\x5e\x03\xad\x7c\x3c\x4e\x32\x7d\xd2\x3f\x1e\xce\xbe\x11\xdc\x56" - "\x6b\x04\x6d\x8e\x6d\x97\x49\xf3\xaf\xf5\xa0\x5d\x26\xb4\xcb\x75" - "\x82\x65\x26\xcc\x3e\x2b\x90\xb7\xc1\x32\xce\xb1\x9c\x3f\x2f\x09" - "\xc7\xb6\x91\xf5\xbf\x6a\xc3\xd2\x2b\x92\xb5\x51\x98\xb8\x8d\x92" - "\x06\x27\x74\x79\x93\x78\xb2\xfe\x68\xa7\x25\x3b\x07\x2e\x67\x5f" - "\x91\xdd\x55\xd0\x6f\xe3\xb8\x0f\x31\x7e\xae\x67\x3c\x93\xf5\x17" - "\xc3\x53\xb0\x96\x36\x58\x97\x97\xcf\xe8\xf4\x2c\x5d\x99\x9c\xde" - "\x4b\xb7\x9f\x9f\xde\x4b\x17\x73\x79\xc6\x83\xf7\x00\xac\x11\x4c" - "\xd6\xc1\xb7\x98\xaf\x55\x24\xab\x77\xe0\xf2\x3a\xc6\x2b\xe9\x3b" - "\xc1\xf2\xa2\xeb\x20\xf0\xa1\x80\x9c\x08\xd6\x49\x9d\x9e\xd2\x9e" - "\xf5\x2f\x6b\x8a\x23\x55\xea\x07\x93\x58\x9f\x0c\x86\x75\xf9\x7a" - "\xde\x0b\x19\x87\xfa\x93\xbe\xd7\xf8\x9b\x0e\x15\xbb\xcb\xb5\x15" - "\x3f\xbe\xc6\x9a\x42\x77\x07\x53\x7f\x9c\x6e\x75\x45\x86\x33\x0d" - "\x01\xd3\x05\x39\x1e\xc9\xf3\x54\xb5\x76\x51\x0a\xfb\x7f\x8d\x8c" - "\xc7\x1d\x4c\xdb\x5d\xae\xf6\x16\x4a\x31\xfe\x55\x4d\x32\xd6\x6f" - "\xf1\x0c\xfd\xf2\x75\x91\x92\xcb\x2b\x37\x88\x55\x0d\xa3\x35\x8f" - "\x55\x38\x96\x58\x61\x47\x2e\x7b\x44\x13\x1c\xe7\xbf\x61\x74\x2f" - "\x9f\x28\x3f\x1a\x83\x4f\x50\x3e\x92\x9c\x07\x96\x5d\x75\x7e\x1e" - "\x28\xfd\x96\xdf\x33\xdd\xd5\x5c\x65\xd9\x78\xc3\x4e\x11\x2b\xae" - "\xdc\xe0\x28\xe3\xfa\x4b\x5b\x55\xdd\x4c\x93\x5c\xde\x57\x98\x04" - "\xba\x94\x23\x6f\xb1\xa1\x07\x98\x5f\xac\x51\xfe\x06\x02\x49\x9e" - "\xc6\x3b\xd8\x3f\xc5\x7e\xb5\x56\xda\x10\x94\xdf\x0b\xf4\xb8\x9c" - "\x41\xb7\x73\x23\xc6\x61\x0a\xa5\xed\x86\x5e\x59\xb6\xcb\x4f\x5e" - "\x19\xcf\x08\x63\x70\x08\x30\xc2\x55\xca\x4f\xd6\x22\xe3\x08\x41" - "\xa6\x39\x76\x10\xcb\x35\xd2\x32\x81\x37\xc7\x11\xc2\x7c\x67\x59" - "\xa0\x67\x5c\xf2\xe4\x42\x57\x08\xf9\xed\x1d\x8c\x4b\x43\x3b\x40" - "\xbb\x37\x4c\xda\x8e\xb3\xa3\xec\xc4\x6d\x3e\xbb\x62\xc8\x8e\x5f" - "\xdf\x4c\xe6\xff\xc7\xfe\x34\x15\xdf\x4a\x99\xcb\x7f\x62\xa6\xff" - "\x93\x43\x26\xa6\x83\x9f\x96\x85\x15\xed\xca\x72\x8c\xfe\xf1\x53" - "\x69\x9d\xd4\x9d\x2b\x9e\x08\x4c\x8d\x88\xef\xd4\x7a\x68\x19\xf4" - "\xdf\x73\x87\xd4\x7b\x97\x37\x71\x0d\x88\xed\x79\xc7\x9c\xf9\x8e" - "\xc2\x17\x17\xcd\x1d\x36\x2c\x6e\xae\x64\x96\x67\x63\x3c\x65\x45" - "\x6a\x3c\x2d\xeb\x89\x7f\xc4\x76\x09\x9e\xd1\x7e\xd7\x39\x31\xce" - "\x27\x15\xe8\xee\xcf\x05\xd9\xd4\x7b\x7f\x0b\x4d\xba\x25\xe6\xf1" - "\x36\x9a\x74\xeb\x6d\x05\x0f\xcd\x9a\x59\xb8\x38\x26\xf5\xf6\xd8" - "\x75\xbd\x75\x1b\x50\x77\xea\x90\x7b\xa1\x2b\x52\xa6\x2c\xe5\xb1" - "\xc5\xfd\x46\x59\x44\xfc\x03\xfa\x3a\x07\x32\x56\xd0\x5c\x12\xa1" - "\x66\xe8\x32\x71\x25\xeb\xf0\xfe\xea\xcc\x1f\xec\x29\xf0\x96\x15" - "\x6d\x0f\xc2\xae\x3b\xc3\xeb\x33\x28\xf7\x69\x4b\x35\xc7\xfa\x6d" - "\xd0\xe3\x98\xbb\x4b\x90\x7e\x09\xae\x9b\x70\xbd\x08\xd7\x2d\x8e" - "\xb9\x98\xf7\xb0\x8f\xf5\x42\xf6\xb1\x76\x4b\x5f\x97\x9b\x43\xe5" - "\xc4\xbe\x22\x78\x3f\x82\x6d\x10\x3f\xb9\xf9\xfb\x60\xfc\x4d\xba" - "\x5c\xa4\x2d\x70\x3c\x47\xd9\x7c\x15\x72\xff\x08\x33\xb0\xca\x86" - "\x62\xb1\x31\x9f\xbf\xa5\x35\x1c\xe9\x7f\x49\x4d\xf9\x92\x52\xed" - "\xfd\xa3\x9d\x1e\x77\xab\x9f\x9e\x5f\xcd\x74\xea\xeb\xdb\x9f\x4c" - "\xe7\x44\xfb\xb0\xd7\x36\x5c\x45\xd2\xbe\xd5\xed\xb9\xcd\x72\x5c" - "\x28\x1f\x11\x63\xd3\xf1\xfe\x65\xba\xb2\x4f\x44\x54\xd9\xa7\xe5" - "\x93\x0c\x39\xc0\x7d\xbe\xc1\xa7\x71\x71\xd7\xe6\x96\xcc\x9a\x37" - "\xab\xd0\x71\xdd\xfc\x74\x8a\x89\xba\xe6\x9c\x35\xd7\x31\x6f\xd6" - "\x4b\x0b\x66\xcd\x97\x11\xd3\xf8\x6d\xdc\x98\x9f\x29\xd2\xff\xb5" - "\xde\x38\x0f\xe4\x18\xc2\xf4\x2d\xdf\xc7\xb1\xba\xc4\xaa\x4f\x86" - "\xb3\x4f\x87\x9a\x6f\x74\xe7\xc4\xcf\x37\x3c\x79\xca\xce\x6b\x98" - "\xa1\xe6\x3a\xcb\xbf\xe6\xe7\xa3\xb4\xdc\xd9\x1b\x17\x7c\xf9\x15" - "\xa0\xa5\x49\xd1\xcd\x72\xac\xd3\xb3\xdc\x66\xd0\xcd\x4f\x9e\x6a" - "\xdd\x96\x6a\x97\xfa\x03\x63\x2c\xf4\x5f\xdc\xf8\xaa\xbe\xf9\xb9" - "\xdc\x0e\xde\x48\x95\xeb\xbd\x69\x0d\x85\x5c\x17\xc3\x3c\x86\xf2" - "\xe8\x9f\x19\xd0\x9b\xac\xdf\x2a\x0c\x78\xa8\x93\xb8\x3e\x7d\x1e" - "\x74\x39\xca\xcb\xfd\x70\xad\xa2\xa1\x90\x75\x0a\xc7\x96\xd0\x2a" - "\x01\x47\xee\xe3\x79\xaa\xd9\xc6\x94\xb1\xe9\x01\x8b\xd7\x69\xa1" - "\x1b\x4a\xf8\xfb\xb0\x9c\xa6\x62\x86\x95\x17\xf2\xda\x30\xea\x9a" - "\x0e\xfc\x0f\xf5\xfa\xbc\x7b\xaa\xd9\xee\x64\xb8\x7e\x5a\x5e\xc5" - "\xf0\x54\x4c\xb4\xe5\x21\x3f\x95\x45\x7a\xed\x27\x4f\x4e\xcc\xbc" - "\x0c\xf8\x28\x3c\x43\xc0\x45\xc6\xdf\x54\x3e\x88\xb2\xdd\xac\x3f" - "\xab\xf4\xb6\x1b\xed\xe9\xf4\x78\xa0\xff\xdc\x01\x63\x6f\xdd\xaf" - "\xb7\x9b\xf1\x63\xdc\x63\x71\xd6\xf1\x2d\x66\x7c\x51\xae\x34\x46" - "\xb6\x79\x5d\xa6\x1f\xd2\xd6\xf7\xfa\x36\x97\xb7\x26\xea\x8d\x17" - "\xe7\x3a\x8a\xe6\xcc\x7d\xbe\x60\xd1\xcc\xe7\x67\x15\x2c\x28\x1e" - "\xe1\x58\x30\xf7\xe9\xa2\x17\x9f\x79\x9e\xb9\x66\x7e\xc9\x82\x67" - "\x9e\x77\xb0\x66\x29\x18\x3f\x69\x52\xc1\xbd\x8f\x3c\xfc\x58\x3a" - "\xdd\x3b\x13\x69\x98\xf9\x4f\xca\x1e\xa1\x5e\x3d\x34\x61\xdc\xa3" - "\x05\xe3\xa6\x3e\x32\x65\x9a\x3c\x0c\xd1\xf3\x7e\xfc\xdc\xe4\x19" - "\xe2\xf8\xd0\x06\x5e\x9a\x8e\xfe\xed\x77\x94\x7e\x95\xa9\xe2\x68" - "\xaf\x18\x1f\x1f\x47\x7b\x05\xe6\xb2\x2b\x60\x65\xae\xc0\xd8\xbf" - "\xf2\x00\x7e\x98\xa7\xfe\xca\xa2\xf8\x2b\x6d\x6a\xa7\x67\x45\x71" - "\x2f\x7f\xfd\x2a\x53\xee\x8f\x57\xcb\x7d\x67\x13\xde\x41\xff\x97" - "\xaf\x8f\x7d\xd7\x3b\x9f\x5c\xb1\xa3\x67\x3e\xd9\xa3\x53\x56\x1c" - "\x36\xe6\x96\x48\x73\x62\x5e\x99\xc6\xf3\x4a\xb5\x9e\xf4\xab\xcb" - "\x24\x4f\xf5\x29\xdf\x16\x32\xe6\x95\x2c\xdb\xbc\x4f\xac\xe6\x1f" - "\x2b\x6d\xb1\x32\x2e\x63\x37\xea\x32\xce\xe5\xe4\xfa\x9d\xa5\x7b" - "\x38\xaf\x69\xc3\x3e\x9e\x0e\x5b\x01\xe3\x57\xa7\x10\x69\xdd\xc3" - "\x15\x4e\x2b\xf3\x78\x8d\x9b\xed\x66\x9d\x9f\x06\x1e\xa7\x95\x6b" - "\x84\xc7\x53\xaf\xe6\x94\x9e\x3f\xb3\x5e\x17\x2b\x86\xdc\xcb\xfe" - "\x27\x3c\x77\x42\x9d\x2b\x7b\x79\xf6\x57\x99\xcc\x0b\xbd\x73\xd9" - "\x95\x71\xfa\xbf\x43\x7e\xaf\x6e\xe5\x1e\x23\x0e\x40\xc9\x30\x32" - "\x99\x87\xad\xa7\x2a\x93\x28\xf7\xd3\xca\x42\xae\x83\xe9\xe9\xa7" - "\x15\x6c\x33\x98\x7b\xe9\xb7\x32\xd0\x43\x3f\x7d\x9d\xc5\x58\x63" - "\x51\x78\xff\xea\xb2\xbe\x68\x95\x9c\x4e\x2f\xe7\x7c\x2f\x9d\x3c" - "\xd4\x8f\x65\xd2\xa0\xd7\xb9\xb4\x7a\xb9\xf4\x5c\x5a\xbd\xdc\x1c" - "\x43\xab\x33\xe7\xd2\xea\xe5\x5d\x31\xfb\x3e\xfa\x3a\xca\xaf\x2e" - "\x63\x9a\x31\x8f\xa1\xdd\x85\xe0\xb3\xca\x5e\xfa\xbd\xec\x3f\x97" - "\x7e\x2f\x87\x92\xd3\xef\xe5\xf5\xd7\xc4\xc3\x59\x97\x6c\xdc\x18" - "\xb8\xdc\xa4\x9f\x13\xfa\xd5\x9c\xa6\xa1\x72\x4e\x1a\x7e\xdd\xa4" - "\x39\x5f\xf7\xe0\x87\x2b\xcf\x23\x7a\x6d\x71\x11\xd6\xe9\xeb\x6c" - "\xc2\x9c\x97\xd7\x95\xce\x33\x16\x1d\x31\xd6\x3c\x70\xdf\xca\x73" - "\x67\xfe\x56\x10\xa7\x33\x3d\xf9\xdb\x53\xe0\xf7\x56\x65\x97\xfe" - "\xaa\xa1\x67\xcd\xe5\xfa\x07\x8a\x53\x97\x93\xa3\xb1\xe6\x56\x4e" - "\x3f\x04\x1e\x92\x6b\x48\xec\xdf\xd3\x17\xcc\x82\x68\x2e\x25\x87" - "\xfb\xeb\x1e\xfe\xef\xeb\xac\x6c\x82\x3e\x72\xce\x9c\x5b\xf8\xe2" - "\xec\xd9\xdf\xaf\x8a\x62\x7d\x77\xd6\x7b\xb4\x8a\x4e\xfe\x1e\xe3" - "\x8a\xe7\x96\xa0\x4e\xd8\xff\x2f\x78\xd5\xb8\xf9\x6b\xe8\x3f\xa7" - "\x4b\xd9\x92\x4f\x04\xd4\xf9\xe0\x5f\xb7\xc7\xe8\x67\xf0\xc8\xaf" - "\xc3\xc2\xf3\xeb\xd1\xbd\x7d\xfc\xeb\xa6\x73\xfb\xf8\xd7\xad\xc9" - "\xfb\xf8\xd7\x11\x6d\x21\x9f\xcf\xf8\x35\xcf\x7f\xa4\xad\xc9\xcf" - "\xbc\x5f\x8e\x39\x73\x00\xf3\xe5\xf6\xa9\x8b\xbd\x77\x17\x2c\x4e" - "\x61\xbf\x72\xf9\x4d\x8e\xc8\x59\xd1\xc6\x7b\xd6\xbc\x3f\xc6\xdf" - "\xe4\xe0\x6f\xf1\xf0\xb7\x5a\x65\x1e\xdc\xaf\x3b\x46\x72\xee\x88" - "\xf7\x8e\xda\x63\xf2\xbb\xc4\xb0\x15\x2a\xf2\x0d\xdb\xda\xba\xdc" - "\x21\xcf\x2d\xaf\x55\xfd\xd1\xca\x7d\xc1\xf5\x15\x2c\xf6\xaa\x3a" - "\xce\xf2\xf7\xb6\xc8\xaa\x6c\x88\x8a\xf5\xe7\x5d\xbb\x4f\xfb\xaa" *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@FreeBSD.ORG Thu Jul 21 00:37:32 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D465F1065674; Thu, 21 Jul 2011 00:37:32 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C3C638FC12; Thu, 21 Jul 2011 00:37:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6L0bWf5038441; Thu, 21 Jul 2011 00:37:32 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6L0bWit038439; Thu, 21 Jul 2011 00:37:32 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201107210037.p6L0bWit038439@svn.freebsd.org> From: Xin LI Date: Thu, 21 Jul 2011 00:37:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224238 - stable/8/lib/libz X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jul 2011 00:37:32 -0000 Author: delphij Date: Thu Jul 21 00:37:32 2011 New Revision: 224238 URL: http://svn.freebsd.org/changeset/base/224238 Log: MFC r224196: Disable gvmat64.S, the assembler version of longest_match for now. PR: kern/154073 Modified: stable/8/lib/libz/Makefile Directory Properties: stable/8/lib/libz/ (props changed) stable/8/lib/libz/contrib/ (props changed) Modified: stable/8/lib/libz/Makefile ============================================================================== --- stable/8/lib/libz/Makefile Wed Jul 20 22:48:48 2011 (r224237) +++ stable/8/lib/libz/Makefile Thu Jul 21 00:37:32 2011 (r224238) @@ -25,11 +25,12 @@ SRCS+= match.S CFLAGS+= -DASMV -DNO_UNDERLINE .endif -.if ${MACHINE_ARCH} == "amd64" -.PATH: ${.CURDIR}/contrib/gcc_gvmat64 -SRCS+= gvmat64.S -CFLAGS+= -DASMV -DNO_UNDERLINE -.endif +#.if ${MACHINE_ARCH} == "amd64" +#.PATH: ${.CURDIR}/contrib/gcc_gvmat64 +#SRCS+= gvmat64.S +#CFLAGS+= -DASMV -DNO_UNDERLINE +#ACFLAGS+= -Wa,--noexecstack +#.endif minigzip: all minigzip.o $(CC) -o minigzip minigzip.o -L. -lz From owner-svn-src-stable@FreeBSD.ORG Thu Jul 21 07:04:52 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 29B5C106564A; Thu, 21 Jul 2011 07:04:52 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 18A728FC0A; Thu, 21 Jul 2011 07:04:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6L74pMV049918; Thu, 21 Jul 2011 07:04:51 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6L74p5u049916; Thu, 21 Jul 2011 07:04:51 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107210704.p6L74p5u049916@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 21 Jul 2011 07:04:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224240 - stable/8/sys/dev/sound/usb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jul 2011 07:04:52 -0000 Author: hselasky Date: Thu Jul 21 07:04:51 2011 New Revision: 224240 URL: http://svn.freebsd.org/changeset/base/224240 Log: MFC r224024: Restore USB MIDI transmit buffer size to 1Kbyte. Modified: stable/8/sys/dev/sound/usb/uaudio.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/8/sys/dev/sound/usb/uaudio.c Thu Jul 21 06:55:43 2011 (r224239) +++ stable/8/sys/dev/sound/usb/uaudio.c Thu Jul 21 07:04:51 2011 (r224240) @@ -192,7 +192,7 @@ struct uaudio_chan { }; #define UMIDI_CABLES_MAX 16 /* units */ -#define UMIDI_TX_FRAMES 128 /* units */ +#define UMIDI_TX_FRAMES 256 /* units */ #define UMIDI_TX_BUFFER (UMIDI_TX_FRAMES * 4) /* bytes */ enum { From owner-svn-src-stable@FreeBSD.ORG Thu Jul 21 07:08:39 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D64DA1065700; Thu, 21 Jul 2011 07:08:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AB9178FC13; Thu, 21 Jul 2011 07:08:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6L78dI5050075; Thu, 21 Jul 2011 07:08:39 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6L78d7C050070; Thu, 21 Jul 2011 07:08:39 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107210708.p6L78d7C050070@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 21 Jul 2011 07:08:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224241 - stable/8/sys/dev/usb/net X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jul 2011 07:08:40 -0000 Author: hselasky Date: Thu Jul 21 07:08:39 2011 New Revision: 224241 URL: http://svn.freebsd.org/changeset/base/224241 Log: MFC r224180: Only the USB root HUB thread is allowed to attach and detach drivers to and from USB devices. Remove related DEVMETHOD() lines from USB drivers. Modified: stable/8/sys/dev/usb/net/if_aue.c stable/8/sys/dev/usb/net/if_axe.c stable/8/sys/dev/usb/net/if_rue.c stable/8/sys/dev/usb/net/if_udav.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/net/if_aue.c ============================================================================== --- stable/8/sys/dev/usb/net/if_aue.c Thu Jul 21 07:04:51 2011 (r224240) +++ stable/8/sys/dev/usb/net/if_aue.c Thu Jul 21 07:08:39 2011 (r224241) @@ -256,7 +256,6 @@ static device_method_t aue_methods[] = { /* bus interface */ DEVMETHOD(bus_print_child, bus_generic_print_child), - DEVMETHOD(bus_driver_added, bus_generic_driver_added), /* MII interface */ DEVMETHOD(miibus_readreg, aue_miibus_readreg), Modified: stable/8/sys/dev/usb/net/if_axe.c ============================================================================== --- stable/8/sys/dev/usb/net/if_axe.c Thu Jul 21 07:04:51 2011 (r224240) +++ stable/8/sys/dev/usb/net/if_axe.c Thu Jul 21 07:08:39 2011 (r224241) @@ -225,7 +225,6 @@ static device_method_t axe_methods[] = { /* bus interface */ DEVMETHOD(bus_print_child, bus_generic_print_child), - DEVMETHOD(bus_driver_added, bus_generic_driver_added), /* MII interface */ DEVMETHOD(miibus_readreg, axe_miibus_readreg), Modified: stable/8/sys/dev/usb/net/if_rue.c ============================================================================== --- stable/8/sys/dev/usb/net/if_rue.c Thu Jul 21 07:04:51 2011 (r224240) +++ stable/8/sys/dev/usb/net/if_rue.c Thu Jul 21 07:08:39 2011 (r224241) @@ -188,7 +188,6 @@ static device_method_t rue_methods[] = { /* Bus interface */ DEVMETHOD(bus_print_child, bus_generic_print_child), - DEVMETHOD(bus_driver_added, bus_generic_driver_added), /* MII interface */ DEVMETHOD(miibus_readreg, rue_miibus_readreg), Modified: stable/8/sys/dev/usb/net/if_udav.c ============================================================================== --- stable/8/sys/dev/usb/net/if_udav.c Thu Jul 21 07:04:51 2011 (r224240) +++ stable/8/sys/dev/usb/net/if_udav.c Thu Jul 21 07:08:39 2011 (r224241) @@ -147,7 +147,6 @@ static device_method_t udav_methods[] = /* bus interface */ DEVMETHOD(bus_print_child, bus_generic_print_child), - DEVMETHOD(bus_driver_added, bus_generic_driver_added), /* MII interface */ DEVMETHOD(miibus_readreg, udav_miibus_readreg), From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 00:57:37 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6FF7F106564A; Fri, 22 Jul 2011 00:57:37 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5ECFA8FC13; Fri, 22 Jul 2011 00:57:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6M0vbnE092653; Fri, 22 Jul 2011 00:57:37 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6M0vbNF092649; Fri, 22 Jul 2011 00:57:37 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201107220057.p6M0vbNF092649@svn.freebsd.org> From: Glen Barber Date: Fri, 22 Jul 2011 00:57:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224259 - stable/8/sbin/shutdown X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 00:57:37 -0000 Author: gjb (doc committer) Date: Fri Jul 22 00:57:37 2011 New Revision: 224259 URL: http://svn.freebsd.org/changeset/base/224259 Log: MFC 216823, 223991, 223992: 216823 (by pjd): - For compatibility with Linux and Solaris add poweroff(8). It is implemented as a hard link to shutdown(8) and it is equivalent of: # shutdown -p now While I'm here put one line of usage into one line of C code so it is easier to grep(1) and separate unrelated code with empty line. 223991: - Improvements to the shutdown(8) manual. 223992: - Remove trailing whitespace in the shutdown(8) manual. Approved by: delphij Modified: stable/8/sbin/shutdown/Makefile stable/8/sbin/shutdown/shutdown.8 stable/8/sbin/shutdown/shutdown.c Directory Properties: stable/8/sbin/shutdown/ (props changed) Modified: stable/8/sbin/shutdown/Makefile ============================================================================== --- stable/8/sbin/shutdown/Makefile Fri Jul 22 00:29:12 2011 (r224258) +++ stable/8/sbin/shutdown/Makefile Fri Jul 22 00:57:37 2011 (r224259) @@ -3,6 +3,8 @@ PROG= shutdown MAN= shutdown.8 +LINKS= ${BINDIR}/shutdown ${BINDIR}/poweroff +MLINKS= shutdown.8 poweroff.8 WARNS?= 6 Modified: stable/8/sbin/shutdown/shutdown.8 ============================================================================== --- stable/8/sbin/shutdown/shutdown.8 Fri Jul 22 00:29:12 2011 (r224258) +++ stable/8/sbin/shutdown/shutdown.8 Fri Jul 22 00:57:37 2011 (r224259) @@ -28,11 +28,12 @@ .\" @(#)shutdown.8 8.2 (Berkeley) 4/27/95 .\" $FreeBSD$ .\" -.Dd December 23, 2008 +.Dd July 13, 2011 .Dt SHUTDOWN 8 .Os .Sh NAME -.Nm shutdown +.Nm shutdown , +.Nm poweroff .Nd "close down the system at a given time" .Sh SYNOPSIS .Nm @@ -47,6 +48,7 @@ .Oc .Ar time .Op Ar warning-message ... +.Nm poweroff .Sh DESCRIPTION The .Nm @@ -81,20 +83,20 @@ If one of the .Fl p or .Fl r -is specified, +options are specified, .Nm will execute .Xr halt 8 or .Xr reboot 8 -instead of sending signal to +instead of sending a signal to .Xr init 8 . .It Fl n If the .Fl o -is specified, prevent the file system cache from being flushed by passing +option is specified, prevent the file system cache from being flushed by passing .Fl n -option to +to .Xr halt 8 or .Xr reboot 8 . @@ -104,10 +106,10 @@ This option should probably not be used. is the time at which .Nm will bring the system down and -may be the word +may be the case-insensitive word .Ar now (indicating an immediate shutdown) or -specify a future time in one of two formats: +a future time in one of two formats: .Ar +number , or .Ar yymmddhhmm , @@ -146,7 +148,7 @@ exits. .Pp At shutdown time a message is written to the system log, containing the time of shutdown, the person who initiated the shutdown and the reason. -Corresponding signal is then sent to +The corresponding signal is then sent to .Xr init 8 to respectively halt, reboot or bring the system down to single-user state (depending on the above options). @@ -168,15 +170,24 @@ file that .Nm created will be removed automatically. .Pp -When run without options, the +When run without options, the .Nm -utility will place the system into single user mode at the +utility will place the system into single user mode at the .Ar time specified. +.Pp +Calling +.Dq Nm poweroff +is equivalent to running: +.Bd -literal -offset indent +shutdown -p now +.Ed .Sh FILES .Bl -tag -width /var/run/nologin -compact .It Pa /var/run/nologin -tells login not to let anyone log in +tells +.Xr login 1 +not to let anyone log in .El .Sh COMPATIBILITY The hours and minutes in the second time format may be separated by Modified: stable/8/sbin/shutdown/shutdown.c ============================================================================== --- stable/8/sbin/shutdown/shutdown.c Fri Jul 22 00:29:12 2011 (r224258) +++ stable/8/sbin/shutdown/shutdown.c Fri Jul 22 00:57:37 2011 (r224259) @@ -115,8 +115,31 @@ main(int argc, char **argv) if (geteuid()) errx(1, "NOT super-user"); #endif + nosync = NULL; readstdin = 0; + + /* + * Test for the special case where the utility is called as + * "poweroff", for which it runs 'shutdown -p now'. + */ + if ((p = rindex(argv[0], '/')) == NULL) + p = argv[0]; + else + ++p; + if (strcmp(p, "poweroff") == 0) { + if (getopt(argc, argv, "") != -1) + usage((char *)NULL); + argc -= optind; + argv += optind; + if (argc != 0) + usage((char *)NULL); + dopower = 1; + offset = 0; + (void)time(&shuttime); + goto poweroff; + } + while ((ch = getopt(argc, argv, "-hknopr")) != -1) switch (ch) { case '-': @@ -161,6 +184,7 @@ main(int argc, char **argv) getoffset(*argv++); +poweroff: if (*argv) { for (p = mbuf, len = sizeof(mbuf); *argv; ++argv) { arglen = strlen(*argv); @@ -510,7 +534,7 @@ usage(const char *cp) if (cp != NULL) warnx("%s", cp); (void)fprintf(stderr, - "usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]]" - " time [warning-message ...]\n"); + "usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]\n" + " poweroff\n"); exit(1); } From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 00:58:09 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CF5F51065674; Fri, 22 Jul 2011 00:58:09 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BE9678FC15; Fri, 22 Jul 2011 00:58:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6M0w9wj092716; Fri, 22 Jul 2011 00:58:09 GMT (envelope-from gjb@svn.freebsd.org) Received: (from gjb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6M0w96w092712; Fri, 22 Jul 2011 00:58:09 GMT (envelope-from gjb@svn.freebsd.org) Message-Id: <201107220058.p6M0w96w092712@svn.freebsd.org> From: Glen Barber Date: Fri, 22 Jul 2011 00:58:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224260 - stable/7/sbin/shutdown X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 00:58:09 -0000 Author: gjb (doc committer) Date: Fri Jul 22 00:58:09 2011 New Revision: 224260 URL: http://svn.freebsd.org/changeset/base/224260 Log: MFC 216823, 223991, 223992: 216823 (by pjd): - For compatibility with Linux and Solaris add poweroff(8). It is implemented as a hard link to shutdown(8) and it is equivalent of: # shutdown -p now While I'm here put one line of usage into one line of C code so it is easier to grep(1) and separate unrelated code with empty line. 223991: - Improvements to the shutdown(8) manual. 223992: - Remove trailing whitespace in the shutdown(8) manual. Approved by: delphij Modified: stable/7/sbin/shutdown/Makefile stable/7/sbin/shutdown/shutdown.8 stable/7/sbin/shutdown/shutdown.c Directory Properties: stable/7/sbin/shutdown/ (props changed) Modified: stable/7/sbin/shutdown/Makefile ============================================================================== --- stable/7/sbin/shutdown/Makefile Fri Jul 22 00:57:37 2011 (r224259) +++ stable/7/sbin/shutdown/Makefile Fri Jul 22 00:58:09 2011 (r224260) @@ -3,6 +3,8 @@ PROG= shutdown MAN= shutdown.8 +LINKS= ${BINDIR}/shutdown ${BINDIR}/poweroff +MLINKS= shutdown.8 poweroff.8 WARNS?= 6 Modified: stable/7/sbin/shutdown/shutdown.8 ============================================================================== --- stable/7/sbin/shutdown/shutdown.8 Fri Jul 22 00:57:37 2011 (r224259) +++ stable/7/sbin/shutdown/shutdown.8 Fri Jul 22 00:58:09 2011 (r224260) @@ -28,11 +28,12 @@ .\" @(#)shutdown.8 8.2 (Berkeley) 4/27/95 .\" $FreeBSD$ .\" -.Dd December 23, 2008 +.Dd July 13, 2011 .Dt SHUTDOWN 8 .Os .Sh NAME -.Nm shutdown +.Nm shutdown , +.Nm poweroff .Nd "close down the system at a given time" .Sh SYNOPSIS .Nm @@ -47,6 +48,7 @@ .Oc .Ar time .Op Ar warning-message ... +.Nm poweroff .Sh DESCRIPTION The .Nm @@ -81,20 +83,20 @@ If one of the .Fl p or .Fl r -is specified, +options are specified, .Nm will execute .Xr halt 8 or .Xr reboot 8 -instead of sending signal to +instead of sending a signal to .Xr init 8 . .It Fl n If the .Fl o -is specified, prevent the file system cache from being flushed by passing +option is specified, prevent the file system cache from being flushed by passing .Fl n -option to +to .Xr halt 8 or .Xr reboot 8 . @@ -104,10 +106,10 @@ This option should probably not be used. is the time at which .Nm will bring the system down and -may be the word +may be the case-insensitive word .Ar now (indicating an immediate shutdown) or -specify a future time in one of two formats: +a future time in one of two formats: .Ar +number , or .Ar yymmddhhmm , @@ -146,7 +148,7 @@ exits. .Pp At shutdown time a message is written to the system log, containing the time of shutdown, the person who initiated the shutdown and the reason. -Corresponding signal is then sent to +The corresponding signal is then sent to .Xr init 8 to respectively halt, reboot or bring the system down to single-user state (depending on the above options). @@ -168,15 +170,24 @@ file that .Nm created will be removed automatically. .Pp -When run without options, the +When run without options, the .Nm -utility will place the system into single user mode at the +utility will place the system into single user mode at the .Ar time specified. +.Pp +Calling +.Dq Nm poweroff +is equivalent to running: +.Bd -literal -offset indent +shutdown -p now +.Ed .Sh FILES .Bl -tag -width /var/run/nologin -compact .It Pa /var/run/nologin -tells login not to let anyone log in +tells +.Xr login 1 +not to let anyone log in .El .Sh COMPATIBILITY The hours and minutes in the second time format may be separated by Modified: stable/7/sbin/shutdown/shutdown.c ============================================================================== --- stable/7/sbin/shutdown/shutdown.c Fri Jul 22 00:57:37 2011 (r224259) +++ stable/7/sbin/shutdown/shutdown.c Fri Jul 22 00:58:09 2011 (r224260) @@ -115,8 +115,31 @@ main(int argc, char **argv) if (geteuid()) errx(1, "NOT super-user"); #endif + nosync = NULL; readstdin = 0; + + /* + * Test for the special case where the utility is called as + * "poweroff", for which it runs 'shutdown -p now'. + */ + if ((p = rindex(argv[0], '/')) == NULL) + p = argv[0]; + else + ++p; + if (strcmp(p, "poweroff") == 0) { + if (getopt(argc, argv, "") != -1) + usage((char *)NULL); + argc -= optind; + argv += optind; + if (argc != 0) + usage((char *)NULL); + dopower = 1; + offset = 0; + (void)time(&shuttime); + goto poweroff; + } + while ((ch = getopt(argc, argv, "-hknopr")) != -1) switch (ch) { case '-': @@ -161,6 +184,7 @@ main(int argc, char **argv) getoffset(*argv++); +poweroff: if (*argv) { for (p = mbuf, len = sizeof(mbuf); *argv; ++argv) { arglen = strlen(*argv); @@ -510,7 +534,7 @@ usage(const char *cp) if (cp != NULL) warnx("%s", cp); (void)fprintf(stderr, - "usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]]" - " time [warning-message ...]\n"); + "usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]\n" + " poweroff\n"); exit(1); } From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:40:55 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6D0B5106566C; Fri, 22 Jul 2011 21:40:55 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5C9748FC14; Fri, 22 Jul 2011 21:40:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLetU8033423; Fri, 22 Jul 2011 21:40:55 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLetOU033421; Fri, 22 Jul 2011 21:40:55 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222140.p6MLetOU033421@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:40:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224274 - stable/8/usr.sbin/named X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:40:55 -0000 Author: dougb Date: Fri Jul 22 21:40:55 2011 New Revision: 224274 URL: http://svn.freebsd.org/changeset/base/224274 Log: MFC r224122: Fix the location of the default pid file in named.8 Modified: stable/8/usr.sbin/named/Makefile Directory Properties: stable/8/usr.sbin/named/ (props changed) Modified: stable/8/usr.sbin/named/Makefile ============================================================================== --- stable/8/usr.sbin/named/Makefile Fri Jul 22 21:08:19 2011 (r224273) +++ stable/8/usr.sbin/named/Makefile Fri Jul 22 21:40:55 2011 (r224274) @@ -56,7 +56,8 @@ LDADD+= ${BIND_LDADD} ${CRYPTO_LDADD} $ MAN= named.8 lwresd.8 named.conf.5 -MANFILTER= sed -e "s@/etc/named\.conf@/etc/namedb/named.conf@g" +MANFILTER= sed -e "s@/etc/named\.conf@/etc/namedb/named.conf@g" \ + -e "s@/var\/run\/named\/named.pid@/var/run/named/pid@" LINKS= ${BINDIR}/named ${BINDIR}/lwresd From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:41:09 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 84AC51065676; Fri, 22 Jul 2011 21:41:09 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 746308FC08; Fri, 22 Jul 2011 21:41:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLf9Dd033472; Fri, 22 Jul 2011 21:41:09 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLf9Qr033470; Fri, 22 Jul 2011 21:41:09 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222141.p6MLf9Qr033470@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:41:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224275 - stable/7/usr.sbin/named X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:41:09 -0000 Author: dougb Date: Fri Jul 22 21:41:09 2011 New Revision: 224275 URL: http://svn.freebsd.org/changeset/base/224275 Log: MFC r224122: Fix the location of the default pid file in named.8 Modified: stable/7/usr.sbin/named/Makefile Directory Properties: stable/7/usr.sbin/named/ (props changed) Modified: stable/7/usr.sbin/named/Makefile ============================================================================== --- stable/7/usr.sbin/named/Makefile Fri Jul 22 21:40:55 2011 (r224274) +++ stable/7/usr.sbin/named/Makefile Fri Jul 22 21:41:09 2011 (r224275) @@ -33,7 +33,8 @@ LDADD+= ${BIND_LDADD} ${CRYPTO_LDADD} $ MAN= named.8 lwresd.8 named.conf.5 -MANFILTER= sed -e "s@/etc/named\.conf@/etc/namedb/named.conf@g" +MANFILTER= sed -e "s@/etc/named\.conf@/etc/namedb/named.conf@g" \ + -e "s@/var\/run\/named\/named.pid@/var/run/named/pid@" LINKS= ${BINDIR}/named ${BINDIR}/lwresd From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:43:16 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 76432106566C; Fri, 22 Jul 2011 21:43:16 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 662138FC08; Fri, 22 Jul 2011 21:43:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLhGka033597; Fri, 22 Jul 2011 21:43:16 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLhGRo033595; Fri, 22 Jul 2011 21:43:16 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222143.p6MLhGRo033595@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:43:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224276 - stable/8/etc/namedb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:43:16 -0000 Author: dougb Date: Fri Jul 22 21:43:16 2011 New Revision: 224276 URL: http://svn.freebsd.org/changeset/base/224276 Log: MFC r224124: Pick up the 2011-06-08 update to this file, the addition of an IPv6 address for D. Modified: stable/8/etc/namedb/named.root Directory Properties: stable/8/etc/ (props changed) Modified: stable/8/etc/namedb/named.root ============================================================================== --- stable/8/etc/namedb/named.root Fri Jul 22 21:41:09 2011 (r224275) +++ stable/8/etc/namedb/named.root Fri Jul 22 21:43:16 2011 (r224276) @@ -13,8 +13,8 @@ ; on server FTP.INTERNIC.NET ; -OR- RS.INTERNIC.NET ; -; last update: Jun 17, 2010 -; related version of root zone: 2010061700 +; last update: Jun 8, 2011 +; related version of root zone: 2011060800 ; ; formerly NS.INTERNIC.NET ; @@ -36,6 +36,7 @@ C.ROOT-SERVERS.NET. 3600000 A ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 +D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2D::D ; ; FORMERLY NS.NASA.GOV ; From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:43:24 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9B6111065770; Fri, 22 Jul 2011 21:43:23 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9C09E8FC18; Fri, 22 Jul 2011 21:43:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLhNkl033637; Fri, 22 Jul 2011 21:43:23 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLhN0J033636; Fri, 22 Jul 2011 21:43:23 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222143.p6MLhN0J033636@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:43:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224277 - stable/7/etc/namedb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:43:24 -0000 Author: dougb Date: Fri Jul 22 21:43:23 2011 New Revision: 224277 URL: http://svn.freebsd.org/changeset/base/224277 Log: MFC r224124: Pick up the 2011-06-08 update to this file, the addition of an IPv6 address for D. Modified: stable/7/etc/namedb/named.root Directory Properties: stable/7/etc/ (props changed) Modified: stable/7/etc/namedb/named.root ============================================================================== --- stable/7/etc/namedb/named.root Fri Jul 22 21:43:16 2011 (r224276) +++ stable/7/etc/namedb/named.root Fri Jul 22 21:43:23 2011 (r224277) @@ -13,8 +13,8 @@ ; on server FTP.INTERNIC.NET ; -OR- RS.INTERNIC.NET ; -; last update: Jun 17, 2010 -; related version of root zone: 2010061700 +; last update: Jun 8, 2011 +; related version of root zone: 2011060800 ; ; formerly NS.INTERNIC.NET ; @@ -36,6 +36,7 @@ C.ROOT-SERVERS.NET. 3600000 A ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 +D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2D::D ; ; FORMERLY NS.NASA.GOV ; From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:45:12 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C219E106564A; Fri, 22 Jul 2011 21:45:12 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A862F8FC0A; Fri, 22 Jul 2011 21:45:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLjCSK033768; Fri, 22 Jul 2011 21:45:12 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLjCCM033766; Fri, 22 Jul 2011 21:45:12 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222145.p6MLjCCM033766@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:45:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224278 - stable/8/etc/namedb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:45:13 -0000 Author: dougb Date: Fri Jul 22 21:45:12 2011 New Revision: 224278 URL: http://svn.freebsd.org/changeset/base/224278 Log: MFC r224125: Commemorate the release of RFC 6303 by updating the comments regarding our default empty zones. No functional changes. Modified: stable/8/etc/namedb/named.conf Directory Properties: stable/8/etc/ (props changed) Modified: stable/8/etc/namedb/named.conf ============================================================================== --- stable/8/etc/namedb/named.conf Fri Jul 22 21:43:23 2011 (r224277) +++ stable/8/etc/namedb/named.conf Fri Jul 22 21:45:12 2011 (r224278) @@ -122,18 +122,18 @@ zone "arpa" { 1. Faster local resolution for your users 2. No spurious traffic will be sent from your network to the roots */ -// RFCs 1912 and 5735 (and BCP 32 for localhost) +// RFCs 1912, 5735 and 6303 (and BCP 32 for localhost) zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// RFC 1912-style zone for IPv6 localhost address +// RFC 1912-style zone for IPv6 localhost address (RFC 6303) zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; -// "This" Network (RFCs 1912 and 5735) +// "This" Network (RFCs 1912, 5735 and 6303) zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// Private Use Networks (RFCs 1918 and 5735) +// Private Use Networks (RFCs 1918, 5735 and 6303) zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; @@ -153,18 +153,18 @@ zone "30.172.in-addr.arpa" { type master zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// Link-local/APIPA (RFCs 3927 and 5735) +// Link-local/APIPA (RFCs 3927, 5735 and 6303) zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IETF protocol assignments (RFCs 5735 and 5736) zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737) +// TEST-NET-[1-3] for Documentation (RFCs 5735, 5737 and 6303) zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Range for Documentation (RFC 3849) +// IPv6 Example Range for Documentation (RFCs 3849 and 6303) zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Domain Names for Documentation and Testing (BCP 32) @@ -231,17 +231,17 @@ zone "5.e.f.ip6.arpa" { type master; fil zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 ULA (RFC 4193) +// IPv6 ULA (RFCs 4193 and 6303) zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Link Local (RFC 4291) +// IPv6 Link Local (RFCs 4291 and 6303) zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Deprecated Site-Local Addresses (RFC 3879) +// IPv6 Deprecated Site-Local Addresses (RFCs 3879 and 6303) zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; From owner-svn-src-stable@FreeBSD.ORG Fri Jul 22 21:45:29 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 35A1B106564A; Fri, 22 Jul 2011 21:45:29 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1B5EC8FC13; Fri, 22 Jul 2011 21:45:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6MLjTtu033811; Fri, 22 Jul 2011 21:45:29 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6MLjSUk033809; Fri, 22 Jul 2011 21:45:28 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201107222145.p6MLjSUk033809@svn.freebsd.org> From: Doug Barton Date: Fri, 22 Jul 2011 21:45:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224279 - stable/7/etc/namedb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Jul 2011 21:45:29 -0000 Author: dougb Date: Fri Jul 22 21:45:28 2011 New Revision: 224279 URL: http://svn.freebsd.org/changeset/base/224279 Log: MFC r224125: Commemorate the release of RFC 6303 by updating the comments regarding our default empty zones. No functional changes. Modified: stable/7/etc/namedb/named.conf Directory Properties: stable/7/etc/ (props changed) Modified: stable/7/etc/namedb/named.conf ============================================================================== --- stable/7/etc/namedb/named.conf Fri Jul 22 21:45:12 2011 (r224278) +++ stable/7/etc/namedb/named.conf Fri Jul 22 21:45:28 2011 (r224279) @@ -122,18 +122,18 @@ zone "arpa" { 1. Faster local resolution for your users 2. No spurious traffic will be sent from your network to the roots */ -// RFCs 1912 and 5735 (and BCP 32 for localhost) +// RFCs 1912, 5735 and 6303 (and BCP 32 for localhost) zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// RFC 1912-style zone for IPv6 localhost address +// RFC 1912-style zone for IPv6 localhost address (RFC 6303) zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; -// "This" Network (RFCs 1912 and 5735) +// "This" Network (RFCs 1912, 5735 and 6303) zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// Private Use Networks (RFCs 1918 and 5735) +// Private Use Networks (RFCs 1918, 5735 and 6303) zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; @@ -153,18 +153,18 @@ zone "30.172.in-addr.arpa" { type master zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// Link-local/APIPA (RFCs 3927 and 5735) +// Link-local/APIPA (RFCs 3927, 5735 and 6303) zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IETF protocol assignments (RFCs 5735 and 5736) zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737) +// TEST-NET-[1-3] for Documentation (RFCs 5735, 5737 and 6303) zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Range for Documentation (RFC 3849) +// IPv6 Example Range for Documentation (RFCs 3849 and 6303) zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Domain Names for Documentation and Testing (BCP 32) @@ -231,17 +231,17 @@ zone "5.e.f.ip6.arpa" { type master; fil zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 ULA (RFC 4193) +// IPv6 ULA (RFCs 4193 and 6303) zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Link Local (RFC 4291) +// IPv6 Link Local (RFCs 4291 and 6303) zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; -// IPv6 Deprecated Site-Local Addresses (RFC 3879) +// IPv6 Deprecated Site-Local Addresses (RFCs 3879 and 6303) zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; From owner-svn-src-stable@FreeBSD.ORG Sat Jul 23 08:55:06 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3594E1065675; Sat, 23 Jul 2011 08:55:06 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 000A38FC1C; Sat, 23 Jul 2011 08:55:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6N8t5k7053497; Sat, 23 Jul 2011 08:55:05 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6N8t5R6053496; Sat, 23 Jul 2011 08:55:05 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107230855.p6N8t5R6053496@svn.freebsd.org> From: Hans Petter Selasky Date: Sat, 23 Jul 2011 08:55:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224280 - stable/8/sys/dev/usb X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Jul 2011 08:55:06 -0000 Author: hselasky Date: Sat Jul 23 08:55:05 2011 New Revision: 224280 URL: http://svn.freebsd.org/changeset/base/224280 Log: MFC r224095: Fix for VirtualBox 4.x and other virtual machines that fail to generate a port reset change event. Modified: stable/8/sys/dev/usb/usb_request.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/usb_request.c ============================================================================== --- stable/8/sys/dev/usb/usb_request.c Fri Jul 22 21:45:28 2011 (r224279) +++ stable/8/sys/dev/usb/usb_request.c Sat Jul 23 08:55:05 2011 (r224280) @@ -779,10 +779,17 @@ usbd_req_reset_port(struct usb_device *u uint16_t pr_recovery_delay; #endif - err = usbd_req_set_port_feature(udev, mtx, port, UHF_PORT_RESET); - if (err) { + /* clear any leftover port reset changes first */ + usbd_req_clear_port_feature( + udev, mtx, port, UHF_C_PORT_RESET); + + /* assert port reset on the given port */ + err = usbd_req_set_port_feature( + udev, mtx, port, UHF_PORT_RESET); + + /* check for errors */ + if (err) goto done; - } #ifdef USB_DEBUG /* range check input parameters */ pr_poll_delay = usb_pr_poll_delay; @@ -798,6 +805,9 @@ usbd_req_reset_port(struct usb_device *u #endif n = 0; while (1) { + uint16_t status; + uint16_t change; + #ifdef USB_DEBUG /* wait for the device to recover from reset */ usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_poll_delay)); @@ -811,14 +821,25 @@ usbd_req_reset_port(struct usb_device *u if (err) { goto done; } + status = UGETW(ps.wPortStatus); + change = UGETW(ps.wPortChange); + /* if the device disappeared, just give up */ - if (!(UGETW(ps.wPortStatus) & UPS_CURRENT_CONNECT_STATUS)) { + if (!(status & UPS_CURRENT_CONNECT_STATUS)) goto done; - } + /* check if reset is complete */ - if (UGETW(ps.wPortChange) & UPS_C_PORT_RESET) { + if (change & UPS_C_PORT_RESET) break; - } + + /* + * Some Virtual Machines like VirtualBox 4.x fail to + * generate a port reset change event. Check if reset + * is no longer asserted. + */ + if (!(status & UPS_RESET)) + break; + /* check for timeout */ if (n > 1000) { n = 0; From owner-svn-src-stable@FreeBSD.ORG Sat Jul 23 12:55:02 2011 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 264C3106566B; Sat, 23 Jul 2011 12:55:02 +0000 (UTC) (envelope-from deischen@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0EB758FC08; Sat, 23 Jul 2011 12:55:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6NCt1ew062874; Sat, 23 Jul 2011 12:55:01 GMT (envelope-from deischen@svn.freebsd.org) Received: (from deischen@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6NCt14a062873; Sat, 23 Jul 2011 12:55:01 GMT (envelope-from deischen@svn.freebsd.org) Message-Id: <201107231255.p6NCt14a062873@svn.freebsd.org> From: Daniel Eischen Date: Sat, 23 Jul 2011 12:55:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224281 - stable/8/sys/kern X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Jul 2011 12:55:02 -0000 Author: deischen Date: Sat Jul 23 12:55:01 2011 New Revision: 224281 URL: http://svn.freebsd.org/changeset/base/224281 Log: MFC r218627 Allow SO_SETFIB to select/set the default routing table. Requested by: Andrew Boyer aboyer at averesystems dot com. Modified: stable/8/sys/kern/uipc_socket.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/kern/uipc_socket.c ============================================================================== --- stable/8/sys/kern/uipc_socket.c Sat Jul 23 08:55:05 2011 (r224280) +++ stable/8/sys/kern/uipc_socket.c Sat Jul 23 12:55:01 2011 (r224281) @@ -2490,15 +2490,16 @@ sosetopt(struct socket *so, struct socko case SO_SETFIB: error = sooptcopyin(sopt, &optval, sizeof optval, sizeof optval); - if (optval < 1 || optval > rt_numfibs) { + if (optval < 0 || optval > rt_numfibs) { error = EINVAL; goto bad; } - if ((so->so_proto->pr_domain->dom_family == PF_INET) || - (so->so_proto->pr_domain->dom_family == PF_ROUTE)) { + if (so->so_proto != NULL && + ((so->so_proto->pr_domain->dom_family == PF_INET) || + (so->so_proto->pr_domain->dom_family == PF_ROUTE))) { so->so_fibnum = optval; /* Note: ignore error */ - if (so->so_proto && so->so_proto->pr_ctloutput) + if (so->so_proto->pr_ctloutput) (*so->so_proto->pr_ctloutput)(so, sopt); } else { so->so_fibnum = 0;