From owner-freebsd-fs@FreeBSD.ORG Mon Dec 31 17:27:52 2012 Return-Path: Delivered-To: fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 13C82C95; Mon, 31 Dec 2012 17:27:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id 49CB68FC0A; Mon, 31 Dec 2012 17:27:51 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.5/8.14.5) with ESMTP id qBVHRjqa055540; Mon, 31 Dec 2012 19:27:45 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.7.3 kib.kiev.ua qBVHRjqa055540 Received: (from kostik@localhost) by tom.home (8.14.5/8.14.5/Submit) id qBVHRiCr055539; Mon, 31 Dec 2012 19:27:44 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 31 Dec 2012 19:27:44 +0200 From: Konstantin Belousov To: Ronald Klop Subject: Re: Nandfs use of MNT_VNODE_FOREACH Message-ID: <20121231172744.GQ82219@kib.kiev.ua> References: <20121227230223.GN82219@kib.kiev.ua> <20121231162145.GA29588@dft-labs.eu> <20121231162540.GB29588@dft-labs.eu> <20121231163039.GN82219@kib.kiev.ua> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="1xJJiECQTZ8+YlWm" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: cognet@freebsd.org, fs@freebsd.org, gber@freebsd.org X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 31 Dec 2012 17:27:52 -0000 --1xJJiECQTZ8+YlWm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Dec 31, 2012 at 05:50:48PM +0100, Ronald Klop wrote: > On Mon, 31 Dec 2012 17:30:39 +0100, Konstantin Belousov =20 > wrote: >=20 > > On Mon, Dec 31, 2012 at 05:25:40PM +0100, Mateusz Guzik wrote: > >> On Mon, Dec 31, 2012 at 05:21:45PM +0100, Mateusz Guzik wrote: > >> > Can you adjust this function so that 'if (mp->mnt_syncer =3D=3D vp)' > >> > performs VI_UNLOCK as well? > >> > > >> > Something like: > >> > if (mp->mnt_syncer =3D=3D vp || VOP_ISLOCKED(vp)) { > >> > VI_UNLOCK(mp); > >> > continue; > >> > } > >> > > >> > I will have time to dig into this next week. > >> > >> Err.. I meant VI_UNLOCK(vp). > > > > This is definitely a bug, thank you for noticing. Updated patch below. > > > > diff --git a/sys/fs/nandfs/nandfs_segment.c =20 > > b/sys/fs/nandfs/nandfs_segment.c > > index 836bead..7433e77 100644 > > --- a/sys/fs/nandfs/nandfs_segment.c > > +++ b/sys/fs/nandfs/nandfs_segment.c > > @@ -478,39 +478,19 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, =20 > > struct nandfs_seginfo *seginfo) > > struct nandfs_node *nandfs_node; > > struct vnode *vp, *mvp; > > struct thread *td; > > - int error, lockreq, update; > > + int error, update; > > td =3D curthread; > > - lockreq =3D LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY; > > - MNT_ILOCK(mp); > > - > > - MNT_VNODE_FOREACH(vp, mp, mvp) { > > + MNT_VNODE_FOREACH_ACTIVE(vp, mp, mvp) { > > update =3D 0; > > - if (mp->mnt_syncer =3D=3D vp) > > - continue; > > - if (VOP_ISLOCKED(vp)) > > - continue; > > - > > - VI_LOCK(vp); > > - MNT_IUNLOCK(mp); > > - if (vp->v_iflag & VI_DOOMED) { > > + if (mp->mnt_syncer =3D=3D vp || VOP_ISLOCKED(vp)) { > > VI_UNLOCK(vp); > > - MNT_ILOCK(mp); > > - continue; > > - } > > - > > - if ((error =3D vget(vp, lockreq, td)) !=3D 0) { > > - MNT_ILOCK(mp); > > continue; > > } > > - > > - if (vp->v_iflag & VI_DOOMED) { > > - vput(vp); > > - MNT_ILOCK(mp); > > + if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK | LK_NOWAIT, td) !=3D 0) > > continue; > > - } > > nandfs_node =3D VTON(vp); > > if (nandfs_node->nn_flags & IN_MODIFIED) { > > @@ -532,12 +512,8 @@ nandfs_iterate_dirty_vnodes(struct mount *mp, =20 > > struct nandfs_seginfo *seginfo) > > if (update) > > nandfs_node_update(nandfs_node); > > - > > - MNT_ILOCK(mp); > > } > > - MNT_IUNLOCK(mp); > > - > > return (0); > > } > > >=20 > This boots fine. I added some options from the kernel debugging handbook.= =20 > Some LORs appear. I will copy-paste them here. Yes, the LORs are genuine nandfs bugs, not caused by the change I posted. Thank you for the testing. >=20 > Trying to mount root from nandfs:/dev/gnand0s.root []... > WARNING: NANDFS is considered to be a highly experimental feature in =20 > FreeBSD. > (probe0:umass-sim0:0:0:0): Down reving Protocol Version from 2 to 0? > pass0 at umass-sim0 bus 0 scbus0 target 0 lun 0 > pass0: Removable Direct Access SCSI-0 devi= ce > pass0: Serial Number AA00000000002542 > pass0: 40.000MB/s transfers > da0 at umass-sim0 bus 0 scbus0 target 0 lun 0 > da0: Removable Direct Access SCSI-0 device > da0: Serial Number AA00000000002542 > da0: 40.000MB/s transfers > da0: 3894MB (7975296 512 byte sectors: 255H 63S/T 496C) > GEOM: new disk da0 > lock order reversal: > 1st 0xcc334d40 bufwait (bufwait) @ /usr/src/sys/kern/vfs_bio.c:1898 > 2nd 0xc3ef4a30 snandfs (snandfs) @ =20 > /usr/src/sys/fs/nandfs/nandfs_subr.c:444 > 3rd 0xcc334860 bufwait (bufwait) @ /usr/src/sys/kern/vfs_bio.c:2631 > KDB: stack backtrace: > db_trace_self() at db_trace_self+0x10 > scp=3D0xc0bb462c rlv=3D0xc09334d8 (X_db_sym_numargs+0x1bc) > rsp=3D0xd35ae3ec rfp=3D0xd35ae508 > X_db_sym_numargs() at X_db_sym_numargs+0x198 > scp=3D0xc09334b4 rlv=3D0xc0a6ed5c (kdb_backtrace+0x3c) > rsp=3D0xd35ae50c rfp=3D0xd35ae51c > r4=3D0xc0cc7838 > kdb_backtrace() at kdb_backtrace+0x10 > scp=3D0xc0a6ed30 rlv=3D0xc0a853e8 (witness_display_spinlock+0x80) > rsp=3D0xd35ae520 rfp=3D0xd35ae534 > r4=3D0x00000001 > witness_display_spinlock() at witness_display_spinlock+0x60 > scp=3D0xc0a853c8 rlv=3D0xc0a861c4 (witness_checkorder+0x8b4) > rsp=3D0xd35ae538 rfp=3D0xd35ae588 > r5=3D0xc3ef4a30 r4=3D0xc0c27690 > witness_checkorder() at witness_checkorder+0x10 > scp=3D0xc0a85920 rlv=3D0xc0a253bc (__lockmgr_args+0x828) > rsp=3D0xd35ae58c rfp=3D0xd35ae5e8 > r10=3D0x00000000 r9=3D0xc3ef4ad0 > r8=3D0x00081900 r7=3D0xc3685000 r6=3D0xcc334860 r5=3D0x00000100 > r4=3D0x00080000 > __lockmgr_args() at __lockmgr_args+0x10 > scp=3D0xc0a24ba4 rlv=3D0xc0ab9ff0 (getblk+0x128) > rsp=3D0xd35ae5ec rfp=3D0xd35ae630 > r10=3D0x00000000 r9=3D0x00000000 > r8=3D0x000002a4 r7=3D0xc3ef4ad0 r6=3D0xcc334800 r5=3D0x00000000 > r4=3D0x00000000 > getblk() at getblk+0x10 > scp=3D0xc0ab9ed8 rlv=3D0xc0aba918 (breadn_flags+0x30) > rsp=3D0xd35ae634 rfp=3D0xd35ae658 > r10=3D0xd35ae6e4 r9=3D0x0001500a > r8=3D0xc3fe8000 r7=3D0x00000000 r6=3D0xc3ef49d8 r5=3D0x00000000 > r4=3D0x00000000 > breadn_flags() at breadn_flags+0x10 > scp=3D0xc0aba8f8 rlv=3D0xc098ea58 (nandfs_bread+0x80) > rsp=3D0xd35ae65c rfp=3D0xd35ae6a0 > r6=3D0x000002a4 r5=3D0xc3fe8000 > r4=3D0x00000000 > nandfs_bread() at nandfs_bread+0x10 > scp=3D0xc098e9e8 rlv=3D0xc098efb0 (nandfs_vtop+0xfc) > rsp=3D0xd35ae6a4 rfp=3D0xd35ae710 > r10=3D0x00000000 r8=3D0xc3fe8000 > r7=3D0x00000000 r6=3D0xd35ae72c r5=3D0xc3fe7db0 r4=3D0x00000000 > nandfs_vtop() at nandfs_vtop+0x10 > scp=3D0xc098eec4 rlv=3D0xc099551c (nandfs_itimes+0x304) > rsp=3D0xd35ae714 rfp=3D0xd35ae764 > r10=3D0x00001000 r9=3D0xc3fc5000 > r8=3D0xc3fe7db0 r7=3D0x00000000 r6=3D0x00000000 r5=3D0xcc334ce0 > r4=3D0x00001000 > nandfs_itimes() at nandfs_itimes+0x228 > scp=3D0xc0995440 rlv=3D0xc0be0284 (VOP_STRATEGY_APV+0xbc) > rsp=3D0xd35ae768 rfp=3D0xd35ae780 > r10=3D0xd35ae9ec r9=3D0x00000000 > r8=3D0xc36e25c0 r7=3D0x00000000 r6=3D0xd35ae788 r5=3D0xc0c91a00 > r4=3D0xc0c42434 > VOP_STRATEGY_APV() at VOP_STRATEGY_APV+0x10 > scp=3D0xc0be01d8 rlv=3D0xc0ab47a8 (bufstrategy+0x68) > rsp=3D0xd35ae784 rfp=3D0xd35ae7a8 > r6=3D0xc3ef4870 r5=3D0xcc334ce0 > r4=3D0xc3ef4870 > bufstrategy() at bufstrategy+0x10 > scp=3D0xc0ab4750 rlv=3D0xc0abaa34 (breadn_flags+0x14c) > rsp=3D0xd35ae7ac rfp=3D0xd35ae7d0 > r5=3D0x00000000 r4=3D0xcc334ce0 > breadn_flags() at breadn_flags+0x10 > scp=3D0xc0aba8f8 rlv=3D0xc098ea58 (nandfs_bread+0x80) > rsp=3D0xd35ae7d4 rfp=3D0xd35ae818 > r6=3D0x00000000 r5=3D0xc3fe7db0 > r4=3D0x00000000 > nandfs_bread() at nandfs_bread+0x10 > scp=3D0xc098e9e8 rlv=3D0xc0993afc (nandfs_wakeup_wait_sync+0x2e0c) > rsp=3D0xd35ae81c rfp=3D0xd35aea9c > r10=3D0xc3fe7db0 r8=3D0xc36e25c0 > r7=3D0x00000000 r6=3D0xd35ae9bc r5=3D0x00000000 r4=3D0xc3fda360 > nandfs_wakeup_wait_sync() at nandfs_wakeup_wait_sync+0xc9c > scp=3D0xc099198c rlv=3D0xc0ac8390 (vfs_donmount+0x9c8) > rsp=3D0xd35aeaa0 rfp=3D0xd35aec80 > r10=3D0xd35aec84 r9=3D0x00000000 > r8=3D0xc3fe0bc0 r7=3D0x00000000 r6=3D0x00004001 r5=3D0xd35aebbc > r4=3D0x00000000 > vfs_donmount() at vfs_donmount+0x10 > scp=3D0xc0ac79d8 rlv=3D0xc0ac8ec4 (kernel_mount+0x90) > rsp=3D0xd35aec84 rfp=3D0xd35aecc4 > r10=3D0xc3fe5a00 r9=3D0x00000000 > r8=3D0x00000000 r7=3D0x00004000 r6=3D0x00000000 r5=3D0xc3fda400 > r4=3D0xffffffff > kernel_mount() at kernel_mount+0x10 > scp=3D0xc0ac8e44 rlv=3D0xc0ac99a0 (root_mount_hold+0x684) > rsp=3D0xd35aecc8 rfp=3D0xd35aecfc > r8=3D0xc36e2427 r7=3D0xc36e2420 > r6=3D0xc3fda400 r5=3D0xd35aecd0 r4=3D0xffffffff > root_mount_hold() at root_mount_hold+0x3a0 > scp=3D0xc0ac96bc rlv=3D0xc0aca734 (vfs_mountroot+0xca0) > rsp=3D0xd35aed00 rfp=3D0xd35aee2c > r10=3D0xc36e23c0 r9=3D0xc3683000 > r8=3D0xd35aeeac r7=3D0xc3fe1000 r6=3D0xc0c29240 r5=3D0x00000000 > r4=3D0x00000000 > vfs_mountroot() at vfs_mountroot+0x10 > scp=3D0xc0ac9aa4 rlv=3D0xc09f8754 (exec_shell_imgact+0x7ac) > rsp=3D0xd35aee30 rfp=3D0xd35aee84 > r10=3D0x00000000 r9=3D0xc3683000 > r8=3D0xd35aeeac r7=3D0x00000000 r6=3D0xc09f86fc r5=3D0xc0c1167c > r4=3D0xc0cb9448 > exec_shell_imgact() at exec_shell_imgact+0x764 > scp=3D0xc09f870c rlv=3D0xc0a14fd4 (fork_exit+0x98) > rsp=3D0xd35aee88 rfp=3D0xd35aeea8 > r10=3D0x00000000 r9=3D0x00000000 > r8=3D0xd35aeeac r7=3D0x00000000 r6=3D0xc09f86fc r5=3D0xc3683000 > r4=3D0xc3685000 > fork_exit() at fork_exit+0x10 > scp=3D0xc0a14f4c rlv=3D0xc0bc4ad4 (fork_trampoline+0x14) > rsp=3D0xd35aeeac rfp=3D0x00000000 > r8=3D0x00000000 r7=3D0x00000000 > r6=3D0x00000000 r5=3D0x00000000 r4=3D0xc09f86fc > after vfs_mountroot() > start_init: trying /sbin/init > sys_execve returned 0 > (da0:umass-sim0:0:0:0): PREVENT ALLOW MEDIUM REMOVAL. CDB: 1e 0 0 0 1 0 > (da0:umass-sim0:0:0:0): CAM status: Auto-Sense Retrieval Failed > (da0:umass-sim0:0:0:0): Error 5, Unretryable error > Dec 31 16:42:47 init: init started > Setting hostuuid: 64f53bc5-bfde-11d3-902f-005043016d4c. > Setting hostid: 0x2afd1481. > No suitable dump device was found. > Entropy harvesting: interrupts ethernet point_to_pointsha256: /kernel: No= =20 > such file or directory > kickstart. > Starting file system checks: > /dev/da0s2: FILE SYSTEM CLEAN; SKIPPING CHECKS > /dev/da0s2: clean, 894115 free (2531 frags, 111448 blocks, 0.3% =20 > fragmentation) > /dev/da0s1: FILESYSTEM CLEAN; SKIPPING CHECKS > lock order reversal: > 1st 0xc3ef4a30 snandfs (snandfs) @ =20 > /usr/src/sys/fs/nandfs/nandfs_segment.c:1199 > 2nd 0xc3ef4b98 devfs (devfs) @ /usr/src/sys/fs/nandfs/nandfs_segment.c:= 793 > KDB: stack backtrace: > db_trace_self() at db_trace_self+0x10 > scp=3D0xc0bb462c rlv=3D0xc09334d8 (X_db_sym_numargs+0x1bc) > rsp=3D0xd5bf8b1c rfp=3D0xd5bf8c38 > X_db_sym_numargs() at X_db_sym_numargs+0x198 > scp=3D0xc09334b4 rlv=3D0xc0a6ed5c (kdb_backtrace+0x3c) > rsp=3D0xd5bf8c3c rfp=3D0xd5bf8c4c > r4=3D0xc0cc7838 > kdb_backtrace() at kdb_backtrace+0x10 > scp=3D0xc0a6ed30 rlv=3D0xc0a853e8 (witness_display_spinlock+0x80) > rsp=3D0xd5bf8c50 rfp=3D0xd5bf8c64 > r4=3D0x00000001 > witness_display_spinlock() at witness_display_spinlock+0x60 > scp=3D0xc0a853c8 rlv=3D0xc0a861c4 (witness_checkorder+0x8b4) > rsp=3D0xd5bf8c68 rfp=3D0xd5bf8cb8 > r5=3D0xc3ef4a30 r4=3D0xc0c14ad8 > witness_checkorder() at witness_checkorder+0x10 > scp=3D0xc0a85920 rlv=3D0xc0a253bc (__lockmgr_args+0x828) > rsp=3D0xd5bf8cbc rfp=3D0xd5bf8d18 > r10=3D0xc36e2680 r9=3D0xc3ef4c04 > r8=3D0x00080000 r7=3D0xc400dc00 r6=3D0xc3ef4b98 r5=3D0x00000000 > r4=3D0x00080000 > __lockmgr_args() at __lockmgr_args+0x10 > scp=3D0xc0a24ba4 rlv=3D0xc0abfc30 (vop_stdlock+0x48) > rsp=3D0xd5bf8d1c rfp=3D0xd5bf8d38 > r10=3D0xc36e2680 r9=3D0xc4011880 > r8=3D0xc3fc5000 r7=3D0x00000001 r6=3D0x00000000 r5=3D0xd5bf8d68 > r4=3D0xc0ca4dfc > vop_stdlock() at vop_stdlock+0x10 > scp=3D0xc0abfbf8 rlv=3D0xc0be0500 (VOP_LOCK1_APV+0xa0) > rsp=3D0xd5bf8d3c rfp=3D0xd5bf8d50 > VOP_LOCK1_APV() at VOP_LOCK1_APV+0x10 > scp=3D0xc0be0470 rlv=3D0xc098b824 (nandfs_node_create+0x1994) > rsp=3D0xd5bf8d54 rfp=3D0xd5bf8da4 > r5=3D0xc4011880 r4=3D0xd5bf8e14 > nandfs_node_create() at nandfs_node_create+0x194c > scp=3D0xc098b7dc rlv=3D0xc098bb90 (nandfs_node_create+0x1d00) > rsp=3D0xd5bf8da8 rfp=3D0xd5bf8dcc > r10=3D0xc36e2680 r9=3D0xc3fc5000 > r8=3D0xc3fc5000 r7=3D0x00000001 r6=3D0x00000000 r5=3D0xc4011880 > r4=3D0xd5bf8e14 > nandfs_node_create() at nandfs_node_create+0x1c48 > scp=3D0xc098bad8 rlv=3D0xc098c354 (nandfs_segment_constructor+0x740) > rsp=3D0xd5bf8dd0 rfp=3D0xd5bf8e64 > r10=3D0xc36e2680 r8=3D0xc3fc5000 > r7=3D0xc36e2680 r6=3D0x00000000 r5=3D0x0003c9ca r4=3D0xd5bf8e14 > nandfs_segment_constructor() at nandfs_segment_constructor+0x10 > scp=3D0xc098bc24 rlv=3D0xc0990bc4 (nandfs_get_seg_stat+0x518) > rsp=3D0xd5bf8e68 rfp=3D0xd5bf8e84 > r10=3D0x00000104 r9=3D0x00000000 > r8=3D0xd5bf8eac r7=3D0xc36e25c0 r6=3D0xc3fc5000 r5=3D0xc36e25c0 > r4=3D0x00000000 > nandfs_get_seg_stat() at nandfs_get_seg_stat+0x49c > scp=3D0xc0990b48 rlv=3D0xc0a14fd4 (fork_exit+0x98) > rsp=3D0xd5bf8e88 rfp=3D0xd5bf8ea8 > r6=3D0xc0990b38 r5=3D0xc0cb74c4 > r4=3D0xc400dc00 > fork_exit() at fork_exit+0x10 > scp=3D0xc0a14f4c rlv=3D0xc0bc4ad4 (fork_trampoline+0x14) > rsp=3D0xd5bf8eac rfp=3D0x00000000 > r8=3D0xc0cb77b0 r7=3D0x00000000 > r6=3D0x00000000 r5=3D0xc36e25c0 r4=3D0xc0990b38 > Mounting local file systems:. > Writing entropy file:. > Setting hostname: sh10.klop.ws. > Starting Network: lo0 mge0. > lo0: flags=3D8049 metric 0 mtu 16384 > options=3D600003 > inet 127.0.0.1 netmask 0xff000000 > mge0: flags=3D8843 metric mge0: l= ink =20 > state changed to UP > 0 mtu 1500 > options=3D8000b > ether 00:50:43:01:6d:4c > media: Ethernet autoselect (100baseTX ) > status: active > Starting devd. > Starting dhclient. > DHCPDISCOVER on mge0 to 255.255.255.255 port 67 interval 6 > DHCPOFFER from 192.168.1.254 > DHCPREQUEST on mge0 to 255.255.255.255 port 67 > DHCPACK from 192.168.1.254 > bound to 192.168.1.35 -- renewal in 43200 seconds. > Creating and/or trimming log files. > Starting syslogd. > realpath: /dev/dumpdev: No such file or directory > /etc/rc: WARNING: Dump device does not exist. Savecore not run. > ELF ldconfig path: /lib /usr/lib /usr/lib/compat > Clearing /tmp (X related). > Updating motd:. > Starting ntpd. > Performing sanity check on sshd configuration. > Starting sshd. > Starting cron. >=20 > Mon Dec 31 16:43:48 UTC 2012 >=20 > FreeBSD/arm (sh10.klop.ws) (ttyu0) >=20 > login: >=20 >=20 > Regards, > Ronald. --1xJJiECQTZ8+YlWm Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJQ4csQAAoJEJDCuSvBvK1BdbUQAKAHLHj8AzpQrebU9JlZbGLG 5LbIus9Gytz/sdayIAdYU5+GStYFagbr0c9gvY4d+SmZtRyQ7gcM08Jtdq+pYlWI ANHM2wHWIVAiDEQeyNIygjUCOxwC77A+di/mNRvuQHo6rX7LCPfEYi7wUwEF3Hbv H2VUG7SgnOsIcIEbyHDW4IOVi+HMrESEuZ/ROlBOpz0MVNESblbBdFahyaoslQrk zls5K5vZPYNgzx9/9b0/0v42MlBZ9TkLopk6zKXtVGd/3nn2IRdoUhw1b9/pc5y2 pUmCUovVA4uV6oaZzFUAYNv6eV1lChA3o5lQwNfFJBDmjUp3KIvF5VaWj27Q/6eb /XQ1J4Q6ylvO1Va/j5/YAbFjoVWRZlJkIEyE7TPz5SanptBlVCAd2F03nIwkk558 +/NmIxCsg6pf3IGrg5mOXasbbjYbwA1ftsrl8czwa2rOcmUNY388VsmUIs+O97Wu 0Rb/xvNhmwZH8aLd5SvqVmzefYcoAX7IG9pRoB4If07pt01hC/HaCpY2DuSzLPjA O4OXcJ8BK+7sNJfMJdlweHHclPgLKvQKNllgRom4jEJfyUZNLPazGPqGIrRAVgEF qZElnVfSzI5COBGUT/NJ5crcO2PgwpMWa+vDtfn/+zlm9UL2a8Omi2FYpSIRzzbn xONMIUJBnSO/8rKCvpU1 =y5WL -----END PGP SIGNATURE----- --1xJJiECQTZ8+YlWm--