From owner-freebsd-bugs@FreeBSD.ORG Thu Aug 30 16:04:49 2007 Return-Path: Delivered-To: bugs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D0DE516A418 for ; Thu, 30 Aug 2007 16:04:49 +0000 (UTC) (envelope-from tzhuan@gmail.com) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.191]) by mx1.freebsd.org (Postfix) with ESMTP id 04F5513C481 for ; Thu, 30 Aug 2007 16:04:48 +0000 (UTC) (envelope-from tzhuan@gmail.com) Received: by nf-out-0910.google.com with SMTP id k4so445680nfd for ; Thu, 30 Aug 2007 09:04:47 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:references:x-google-sender-auth; b=iMEQxYofV2pkISwDnwgK+vg8/P0Vn2kQIk+AwNiHseuNIg3QJ9Z5mi1M3XG2PMAOy5VvHy9jqxYDsCVhWjp2l5zXf0f83wVcvOKlWDQmkXPl8HUI/+X+TXmu2+a4rkj4tsCdvqr8VLeUkjhX31/5PxYaXu/Seq9v+aN81r8/FWs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:references:x-google-sender-auth; b=CmgL7OppOq75LVowqGqZk99Y+nvjis2Kwg5QUIpffJyEOKsyus4b1ZrSi3fSOxjpS0R/4GBG0fA2Toe7ybieLqtL+kd8TdPlgmGGSj2FEtF43Y0XQyq4zQZAGh8jpL1OvE5xBTMBTsPx4c3ZYuynOCu3ksdJ8lVTyKCZ1OIuxpw= Received: by 10.86.100.7 with SMTP id x7mr492608fgb.1188488159543; Thu, 30 Aug 2007 08:35:59 -0700 (PDT) Received: by 10.86.30.5 with HTTP; Thu, 30 Aug 2007 08:35:59 -0700 (PDT) Message-ID: <6a7033710708300835n5ac95063o6331ede5fcc80662@mail.gmail.com> Date: Thu, 30 Aug 2007 23:35:59 +0800 From: "Tz-Huan Huang" Sender: tzhuan@gmail.com To: "Bruce Evans" In-Reply-To: <20070814154812.J24186@besplex.bde.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1837_22684143.1188488159514" References: <20070712084115.GA2200@deviant.kiev.zoral.com.ua> <20070716195556.P12807@besplex.bde.org> <20070721063434.GI2200@deviant.kiev.zoral.com.ua> <20070721233613.Q3366@besplex.bde.org> <20070804075730.GP2738@deviant.kiev.zoral.com.ua> <20070808004001.O926@besplex.bde.org> <20070807170259.GJ2738@deviant.kiev.zoral.com.ua> <20070810133946.H769@besplex.bde.org> <20070810124153.GW2738@deviant.kiev.zoral.com.ua> <20070814154812.J24186@besplex.bde.org> X-Google-Sender-Auth: aa805301d233eda1 Cc: Kostik Belousov , bugs@freebsd.org, fs@freebsd.org Subject: Re: msdosfs not MPSAFE X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Aug 2007 16:04:49 -0000 ------=_Part_1837_22684143.1188488159514 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline hi, I have a patch that remove the global variables nambuf_ptr, nambuf_len and nambuf_last_id entirely. It should be applied on recent 7-current. Please give it a try, thanks a lot. http://w.csie.org/~tzhuan/freebsd/msdosfs.diff Tz-Huan 2007/8/14, Bruce Evans : > On Fri, 10 Aug 2007, Kostik Belousov wrote: > > > On Fri, Aug 10, 2007 at 01:54:48PM +1000, Bruce Evans wrote: > >> I wrote yet another patch, with allocation on the stack so that no locking > >> is required. This is simpler and doesn't require any new functions. > >> Unfortunately, it is larger because it changes the interfaces for most > >> functions. The interface changes are routine, so this is probably better. > >> Note that 'struct dirent's are already allocated on the stack. This > >> patch adds allocation of 'struct mbnambuf's which are slightly smaller > >> (~256 bytes). I think this is just small enough for stack allocation. > > > > I agree that this is the best approach. The size of the on-stack > > structure still make me worry, although ~270 bytes seems to be not too > > large for 3-pages stack. > > Stack growth seems to be nowhere near a problem. With the extra ~270 > bytes. ls -lR on i386 uses less than a 1-page stack (about 3.5K, > including 0x270 bytes for the pcb). I think the maximum stack depth > is attained when a debugger trap traps a fast interrupt interrupting > a page fault in an i/o routine called from msdosfs_readdir(). Unlike > in RELENG_4, nested interrupts can't occur, so a 1-page stack should > be enough for everything on i386 (but of course isn't quite enough). > I didn't try hard to attain the maximum depth, and just looked at where > the stack got to after running a large ls -lR for a while. msdosfs_readdir() > now allocates 0x2b0 bytes on the stack using "subl $0x2b0,%esp" and > that is now the largest single allocation. This is without INVARIANTS > etc. > > Bruce > _______________________________________________ > freebsd-fs@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-fs > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org" > ------=_Part_1837_22684143.1188488159514 Content-Type: application/octet-stream; name="msdosfs.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="msdosfs.diff"; filename="msdosfs.diff" X-Attachment-Id: f_f5zf53v6 ZGlmZiAtcnVOIG1zZG9zZnMub3JpZy9kaXJlbnRyeS5oIG1zZG9zZnMvZGlyZW50cnkuaAotLS0g bXNkb3Nmcy5vcmlnL2RpcmVudHJ5LmgJMjAwNi0xMC0yNCAxOToxNDowNS4wMDAwMDAwMDAgKzA4 MDAKKysrIG1zZG9zZnMvZGlyZW50cnkuaAkyMDA3LTA4LTMwIDE1OjE0OjA0LjAwMDAwMDAwMCAr MDgwMApAQCAtMTM2LDE4ICsxMzYsMTUgQEAKIHN0cnVjdCBkaXJlbnQ7CiBzdHJ1Y3QgbXNkb3Nm c21vdW50OwogCi1jaGFyCSptYm5hbWJ1Zl9mbHVzaChzdHJ1Y3QgZGlyZW50ICpkcCk7Ci12b2lk CW1ibmFtYnVmX2luaXQodm9pZCk7Ci12b2lkCW1ibmFtYnVmX3dyaXRlKGNoYXIgKm5hbWUsIGlu dCBpZCk7CiBpbnQJZG9zMnVuaXhmbih1X2NoYXIgZG5bMTFdLCB1X2NoYXIgKnVuLCBpbnQgbG93 ZXIsCiAJICAgIHN0cnVjdCBtc2Rvc2ZzbW91bnQgKnBtcCk7CiBpbnQJdW5peDJkb3Nmbihjb25z dCB1X2NoYXIgKnVuLCB1X2NoYXIgZG5bMTJdLCBzaXplX3QgdW5sZW4sIHVfaW50IGdlbiwKIAkg ICAgc3RydWN0IG1zZG9zZnNtb3VudCAqcG1wKTsKIGludAl1bml4MndpbmZuKGNvbnN0IHVfY2hh ciAqdW4sIHNpemVfdCB1bmxlbiwgc3RydWN0IHdpbmVudHJ5ICp3ZXAsIGludCBjbnQsCiAJICAg IGludCBjaGtzdW0sIHN0cnVjdCBtc2Rvc2ZzbW91bnQgKnBtcCk7Ci1pbnQJd2luQ2hrTmFtZShj b25zdCB1X2NoYXIgKnVuLCBzaXplX3QgdW5sZW4sIGludCBjaGtzdW0sCitpbnQJd2luQ2hrTmFt ZShjb25zdCB1X2NoYXIgKnVuLCBzaXplX3QgdW5sZW4sIHN0cnVjdCBkaXJlbnQgKmRpcmJ1ZnB0 ciwgaW50IGNoa3N1bSwKIAkgICAgc3RydWN0IG1zZG9zZnNtb3VudCAqcG1wKTsKLWludAl3aW4y dW5peGZuKHN0cnVjdCB3aW5lbnRyeSAqd2VwLCBpbnQgY2hrc3VtLCBzdHJ1Y3QgbXNkb3Nmc21v dW50ICpwbXApOworaW50CXdpbjJ1bml4Zm4oc3RydWN0IHdpbmVudHJ5ICp3ZXAsIHN0cnVjdCBk aXJlbnQgKmRpcmJ1ZnB0ciwgaW50IGNoa3N1bSwgc3RydWN0IG1zZG9zZnNtb3VudCAqcG1wKTsK IHVfaW50OF90IHdpbkNoa3N1bShzdHJ1Y3QgZGlyZW50cnkgKmRlcCk7CiBpbnQJd2luU2xvdENu dChjb25zdCB1X2NoYXIgKnVuLCBzaXplX3QgdW5sZW4sIHN0cnVjdCBtc2Rvc2ZzbW91bnQgKnBt cCk7CiBzaXplX3QJd2luTGVuRml4dXAoY29uc3QgdV9jaGFyICp1biwgc2l6ZV90IHVubGVuKTsK ZGlmZiAtcnVOIG1zZG9zZnMub3JpZy9tc2Rvc2ZzX2NvbnYuYyBtc2Rvc2ZzL21zZG9zZnNfY29u di5jCi0tLSBtc2Rvc2ZzLm9yaWcvbXNkb3Nmc19jb252LmMJMjAwNy0wOC0zMCAxMTozMzoyMi4w MDAwMDAwMDAgKzA4MDAKKysrIG1zZG9zZnMvbXNkb3Nmc19jb252LmMJMjAwNy0wOC0zMCAxNjo1 NzoxNS4wMDAwMDAwMDAgKzA4MDAKQEAgLTY0LDEzICs2NCw5IEBACiBzdGF0aWMgaW50IG1ic2Fk anBvcyhjb25zdCBjaGFyICoqLCBzaXplX3QsIHNpemVfdCwgaW50LCBpbnQsIHZvaWQgKmhhbmRs ZSk7CiBzdGF0aWMgdV9pbnQxNl90IGRvczJ1bml4Y2hyKGNvbnN0IHVfY2hhciAqKiwgc2l6ZV90 ICosIGludCwgc3RydWN0IG1zZG9zZnNtb3VudCAqKTsKIHN0YXRpYyB1X2ludDE2X3QgdW5peDJk b3NjaHIoY29uc3QgdV9jaGFyICoqLCBzaXplX3QgKiwgc3RydWN0IG1zZG9zZnNtb3VudCAqKTsK LXN0YXRpYyB1X2ludDE2X3Qgd2luMnVuaXhjaHIodV9pbnQxNl90LCBzdHJ1Y3QgbXNkb3Nmc21v dW50ICopOworc3RhdGljIHNpemVfdCB3aW4ydW5peGNocih1X2ludDE2X3Qgd2MsIHN0cnVjdCBk aXJlbnQgKmRpcmJ1ZnB0ciwgc3RydWN0IG1zZG9zZnNtb3VudCAqcG1wKTsKIHN0YXRpYyB1X2lu dDE2X3QgdW5peDJ3aW5jaHIoY29uc3QgdV9jaGFyICoqLCBzaXplX3QgKiwgaW50LCBzdHJ1Y3Qg bXNkb3Nmc21vdW50ICopOwogCi1zdGF0aWMgY2hhcgkqbmFtYnVmX3B0cjsKLXN0YXRpYyBzaXpl X3QJbmFtYnVmX2xlbjsKLXN0YXRpYyBpbnQJbmFtYnVmX2xhc3RfaWQ7Ci0KIC8qCiAgKiAwIC0g Y2hhcmFjdGVyIGRpc2FsbG93ZWQgaW4gbG9uZyBmaWxlIG5hbWUuCiAgKiAxIC0gY2hhcmFjdGVy IHNob3VsZCBiZSByZXBsYWNlZCBieSAnXycgaW4gRE9TIGZpbGUgbmFtZSwgCkBAIC0yNDksNiAr MjQ1LDExIEBACiAJaW50IHRoaXNsb25nID0gMDsKIAl1X2ludDE2X3QgYzsKIAorI2lmZGVmIE1T RE9TRlNfREVCVUcKKwl1X2NoYXIgKnVuX3B0ciA9IHVuOworCXByaW50ZigiZG9zMnVuaXhmbigp OiBkbiAlcyIsIGRuKTsKKyNlbmRpZiAKKwogCS8qCiAJICogSWYgZmlyc3QgY2hhciBvZiB0aGUg ZmlsZW5hbWUgaXMgU0xPVF9FNSAoMHgwNSksIHRoZW4gdGhlIHJlYWwKIAkgKiBmaXJzdCBjaGFy IG9mIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgMHhlNS4gQnV0LCB0aGV5IGNvdWxkbid0CkBAIC0y OTMsNiArMjk0LDEwIEBACiAJfQogCSp1bisrID0gMDsKIAorI2lmZGVmIE1TRE9TRlNfREVCVUcK KwlwcmludGYoIiAtPiB1biAlcywgc2l6ZSAlZFxuIiwgdW5fcHRyLCB0aGlzbG9uZyk7CisjZW5k aWYgCisKIAlyZXR1cm4gKHRoaXNsb25nKTsKIH0KIApAQCAtNjAxLDM3ICs2MDYsMzggQEAKICAq IFJldHVybnMgdGhlIGNoZWNrc3VtIG9yIC0xIGlmIG5vIG1hdGNoCiAgKi8KIGludAotd2luQ2hr TmFtZSh1biwgdW5sZW4sIGNoa3N1bSwgcG1wKQord2luQ2hrTmFtZSh1biwgdW5sZW4sIGRpcmJ1 ZnB0ciwgY2hrc3VtLCBwbXApCiAJY29uc3QgdV9jaGFyICp1bjsKIAlzaXplX3QgdW5sZW47CisJ c3RydWN0IGRpcmVudCAqZGlyYnVmcHRyOwogCWludCBjaGtzdW07CiAJc3RydWN0IG1zZG9zZnNt b3VudCAqcG1wOwogewogCXNpemVfdCBsZW47CiAJdV9pbnQxNl90IGMxLCBjMjsKIAl1X2NoYXIg Km5wOwotCXN0cnVjdCBkaXJlbnQgZGlyYnVmOwogCi0JLyoKLQkgKiBXZSBhbHJlYWQgaGF2ZSB3 aW5lbnRyeSBpbiBtYm5hbWJ1ZgotCSAqLwotCWlmICghbWJuYW1idWZfZmx1c2goJmRpcmJ1Zikg fHwgIWRpcmJ1Zi5kX25hbWxlbikKKwlpZiAoIWRpcmJ1ZnB0ci0+ZF9uYW1sZW4pCiAJCXJldHVy biAtMTsKIAogI2lmZGVmIE1TRE9TRlNfREVCVUcKLQlwcmludGYoIndpbkNoa05hbWUoKTogdW49 JXM6JWQsZF9uYW1lPSVzOiVkXG4iLCB1biwgdW5sZW4sCi0JCQkJCQkJZGlyYnVmLmRfbmFtZSwK LQkJCQkJCQlkaXJidWYuZF9uYW1sZW4pOworCXByaW50Zigid2luQ2hrTmFtZSgpOiB1bj0weCIp OworCWZvciAoY29uc3QgdV9jaGFyICpjID0gdW47ICpjOyArK2MpCisJCXByaW50ZigiJTAyeCIs ICh1bnNpZ25lZCBjaGFyKSpjKTsKKwlwcmludGYoIjolZCwgZF9uYW1lPTB4IiwgdW5sZW4pOwor CWZvciAoY2hhciAqYyA9IGRpcmJ1ZnB0ci0+ZF9uYW1lOyAqYzsgKytjKQorCQlwcmludGYoIiUw MngiLCAodW5zaWduZWQgY2hhcikqYyk7CisJcHJpbnRmKCI6JWRcbiIsIGRpcmJ1ZnB0ci0+ZF9u YW1sZW4pOwogI2VuZGlmCiAKIAkvKgogCSAqIENvbXBhcmUgdGhlIG5hbWUgcGFydHMKIAkgKi8K LQlsZW4gPSBkaXJidWYuZF9uYW1sZW47CisJbGVuID0gZGlyYnVmcHRyLT5kX25hbWxlbjsKIAlp ZiAodW5sZW4gIT0gbGVuKQogCQlyZXR1cm4gLTI7CiAKLQlmb3IgKG5wID0gZGlyYnVmLmRfbmFt ZTsgdW5sZW4gPiAwICYmIGxlbiA+IDA7KSB7CisJZm9yIChucCA9IGRpcmJ1ZnB0ci0+ZF9uYW1l OyB1bmxlbiA+IDAgJiYgbGVuID4gMDspIHsKIAkJLyoKIAkJICogQ29tcGFyaXNvbiBtdXN0IGJl IGNhc2UgaW5zZW5zaXRpdmUsIGJlY2F1c2UgRkFUIGRpc2FsbG93cwogCQkgKiB0byBsb29rIHVw IG9yIGNyZWF0ZSBmaWxlcyBpbiBjYXNlIHNlbnNpdGl2ZSBldmVuIHdoZW4KQEAgLTY0NiwxOSAr NjUyLDM2IEBACiB9CiAKIC8qCi0gKiBDb252ZXJ0IFdpbjk1IGZpbGVuYW1lIHRvIGRpcmJ1Zi4K KyAqIFJldmVyc2UgQy1TdHJpbmcKKyAqIGZvciBleGFtcGxlLCAxMjM0NSAtPiA1NDMyMQorICov CitzdGF0aWMgdm9pZAorc3RycmV2ZXJzZShjaGFyICpzdHIsIHNpemVfdCBuKQoreworCWNoYXIg YzsKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbi8yOyArK2kpIHsKKwkJYyA9IHN0cltp XTsKKwkJc3RyW2ldID0gc3RyW24taS0xXTsKKwkJc3RyW24taS0xXSA9IGM7CisJfQorfQorCisv KgorICogQ29udmVydCBXaW45NSBmaWxlbmFtZSB0byBkaXJidWYgKCpkaXJidWZwdHIpLgogICog UmV0dXJucyB0aGUgY2hlY2tzdW0gb3IgLTEgaWYgaW1wb3NzaWJsZQogICovCiBpbnQKLXdpbjJ1 bml4Zm4od2VwLCBjaGtzdW0sIHBtcCkKK3dpbjJ1bml4Zm4od2VwLCBkaXJidWZwdHIsIGNoa3N1 bSwgcG1wKQogCXN0cnVjdCB3aW5lbnRyeSAqd2VwOworCXN0cnVjdCBkaXJlbnQgKmRpcmJ1ZnB0 cjsKIAlpbnQgY2hrc3VtOwogCXN0cnVjdCBtc2Rvc2ZzbW91bnQgKnBtcDsKIHsKIAl1X2ludDhf dCAqY3A7Ci0JdV9pbnQ4X3QgKm5wLCBuYW1lW1dJTl9DSEFSUyAqIDIgKyAxXTsKIAl1X2ludDE2 X3QgY29kZTsKIAlpbnQgaTsKKwljb25zdCBzaXplX3QgZF9uYW1sZW4gPSBkaXJidWZwdHItPmRf bmFtbGVuOyAvKiBzYXZlIGZvciByZXZlcnNlICovCiAKIAlpZiAoKHdlcC0+d2VDbnQmV0lOX0NO VCkgPiBob3dtYW55KFdJTl9NQVhMRU4sIFdJTl9DSEFSUykKIAkgICAgfHwgISh3ZXAtPndlQ250 JldJTl9DTlQpKQpAQCAtNjc3LDIyICs3MDAsMTggQEAKIAkvKgogCSAqIENvbnZlcnQgdGhlIG5h bWUgcGFydHMKIAkgKi8KLQlucCA9IG5hbWU7CiAJZm9yIChjcCA9IHdlcC0+d2VQYXJ0MSwgaSA9 IHNpemVvZih3ZXAtPndlUGFydDEpLzI7IC0taSA+PSAwOykgewogCQljb2RlID0gKGNwWzFdIDw8 IDgpIHwgY3BbMF07CiAJCXN3aXRjaCAoY29kZSkgewogCQljYXNlIDA6Ci0JCQkqbnAgPSAnXDAn OwotCQkJbWJuYW1idWZfd3JpdGUobmFtZSwgKHdlcC0+d2VDbnQgJiBXSU5fQ05UKSAtIDEpOwor CQkJZGlyYnVmcHRyLT5kX25hbWVbZGlyYnVmcHRyLT5kX25hbWxlbl0gPSAnXDAnOwogCQkJcmV0 dXJuIGNoa3N1bTsKIAkJY2FzZSAnLyc6Ci0JCQkqbnAgPSAnXDAnOworCQkJZGlyYnVmcHRyLT5k X25hbWVbZGlyYnVmcHRyLT5kX25hbWxlbl0gPSAnXDAnOwogCQkJcmV0dXJuIC0xOwogCQlkZWZh dWx0OgotCQkJY29kZSA9IHdpbjJ1bml4Y2hyKGNvZGUsIHBtcCk7Ci0JCQlpZiAoY29kZSAmIDB4 ZmYwMCkKLQkJCQkqbnArKyA9IGNvZGUgPj4gODsKLQkJCSpucCsrID0gY29kZTsKKwkJCWNvZGUg PSB3aW4ydW5peGNocihjb2RlLCBkaXJidWZwdHIsIHBtcCk7CisJCQlpZiAoY29kZSkgcmV0dXJu IC0xOwogCQkJYnJlYWs7CiAJCX0KIAkJY3AgKz0gMjsKQEAgLTcwMSwxNyArNzIwLDE0IEBACiAJ CWNvZGUgPSAoY3BbMV0gPDwgOCkgfCBjcFswXTsKIAkJc3dpdGNoIChjb2RlKSB7CiAJCWNhc2Ug MDoKLQkJCSpucCA9ICdcMCc7Ci0JCQltYm5hbWJ1Zl93cml0ZShuYW1lLCAod2VwLT53ZUNudCAm IFdJTl9DTlQpIC0gMSk7CisJCQlkaXJidWZwdHItPmRfbmFtZVtkaXJidWZwdHItPmRfbmFtbGVu XSA9ICdcMCc7CiAJCQlyZXR1cm4gY2hrc3VtOwogCQljYXNlICcvJzoKLQkJCSpucCA9ICdcMCc7 CisJCQlkaXJidWZwdHItPmRfbmFtZVtkaXJidWZwdHItPmRfbmFtbGVuXSA9ICdcMCc7CiAJCQly ZXR1cm4gLTE7CiAJCWRlZmF1bHQ6Ci0JCQljb2RlID0gd2luMnVuaXhjaHIoY29kZSwgcG1wKTsK LQkJCWlmIChjb2RlICYgMHhmZjAwKQotCQkJCSpucCsrID0gY29kZSA+PiA4OwotCQkJKm5wKysg PSBjb2RlOworCQkJY29kZSA9IHdpbjJ1bml4Y2hyKGNvZGUsIGRpcmJ1ZnB0ciwgcG1wKTsKKwkJ CWlmIChjb2RlKSByZXR1cm4gLTE7CiAJCQlicmVhazsKIAkJfQogCQljcCArPSAyOwpAQCAtNzIw LDIzICs3MzYsMjUgQEAKIAkJY29kZSA9IChjcFsxXSA8PCA4KSB8IGNwWzBdOwogCQlzd2l0Y2gg KGNvZGUpIHsKIAkJY2FzZSAwOgotCQkJKm5wID0gJ1wwJzsKLQkJCW1ibmFtYnVmX3dyaXRlKG5h bWUsICh3ZXAtPndlQ250ICYgV0lOX0NOVCkgLSAxKTsKKwkJCWRpcmJ1ZnB0ci0+ZF9uYW1lW2Rp cmJ1ZnB0ci0+ZF9uYW1sZW5dID0gJ1wwJzsKIAkJCXJldHVybiBjaGtzdW07CiAJCWNhc2UgJy8n OgotCQkJKm5wID0gJ1wwJzsKKwkJCWRpcmJ1ZnB0ci0+ZF9uYW1lW2RpcmJ1ZnB0ci0+ZF9uYW1s ZW5dID0gJ1wwJzsKIAkJCXJldHVybiAtMTsKIAkJZGVmYXVsdDoKLQkJCWNvZGUgPSB3aW4ydW5p eGNocihjb2RlLCBwbXApOwotCQkJaWYgKGNvZGUgJiAweGZmMDApCi0JCQkJKm5wKysgPSBjb2Rl ID4+IDg7Ci0JCQkqbnArKyA9IGNvZGU7CisJCQljb2RlID0gd2luMnVuaXhjaHIoY29kZSwgZGly YnVmcHRyLCBwbXApOworCQkJaWYgKGNvZGUpIHJldHVybiAtMTsKIAkJCWJyZWFrOwogCQl9CiAJ CWNwICs9IDI7CiAJfQotCSpucCA9ICdcMCc7Ci0JbWJuYW1idWZfd3JpdGUobmFtZSwgKHdlcC0+ d2VDbnQgJiBXSU5fQ05UKSAtIDEpOworCWRpcmJ1ZnB0ci0+ZF9uYW1lW2RpcmJ1ZnB0ci0+ZF9u YW1sZW5dID0gJ1wwJzsKKworCS8qIHN3YXAgdGhlIGRpcmJ1ZnB0ci0+ZF9uYW1lICovCisJc3Ry cmV2ZXJzZShkaXJidWZwdHItPmRfbmFtZSwgZGlyYnVmcHRyLT5kX25hbWxlbik7CisJc3RycmV2 ZXJzZShkaXJidWZwdHItPmRfbmFtZSwgZGlyYnVmcHRyLT5kX25hbWxlbiAtIGRfbmFtbGVuKTsK KwlzdHJyZXZlcnNlKGRpcmJ1ZnB0ci0+ZF9uYW1lICsgZGlyYnVmcHRyLT5kX25hbWxlbiAtIGRf bmFtbGVuLCBkX25hbWxlbik7CisKIAlyZXR1cm4gY2hrc3VtOwogfQogCkBAIC05NTIsMTAgKzk3 MCwxMCBAQAogLyoKICAqIENvbnZlcnQgV2luZG93cyBjaGFyIHRvIExvY2FsIGNoYXIKICAqLwot c3RhdGljIHVfaW50MTZfdAotd2luMnVuaXhjaHIodV9pbnQxNl90IHdjLCBzdHJ1Y3QgbXNkb3Nm c21vdW50ICpwbXApCitzdGF0aWMgc2l6ZV90Cit3aW4ydW5peGNocih1X2ludDE2X3Qgd2MsIHN0 cnVjdCBkaXJlbnQgKmRpcmJ1ZnB0ciwgc3RydWN0IG1zZG9zZnNtb3VudCAqcG1wKQogewotCXVf Y2hhciAqaW5wLCAqb3V0cCwgaW5idWZbM10sIG91dGJ1ZlszXTsKKwl1X2NoYXIgKmlucCwgKm91 dHAsIGluYnVmWzNdOwogCXNpemVfdCBpbGVuLCBvbGVuLCBsZW47CiAKIAlpZiAod2MgPT0gMCkK QEAgLTk2NiwzMSArOTg0LDQ5IEBACiAJCWluYnVmWzFdID0gKHVfY2hhcil3YzsKIAkJaW5idWZb Ml0gPSAnXDAnOwogCi0JCWlsZW4gPSBvbGVuID0gbGVuID0gMjsKKwkJaWxlbiA9IDI7CisJCW9s ZW4gPSBsZW4gPSBzaXplb2YoZGlyYnVmcHRyLT5kX25hbWUpIC0gZGlyYnVmcHRyLT5kX25hbWxl biAtIDE7CiAJCWlucCA9IGluYnVmOwotCQlvdXRwID0gb3V0YnVmOworCQlvdXRwID0gZGlyYnVm cHRyLT5kX25hbWUgKyBkaXJidWZwdHItPmRfbmFtbGVuOworCiAJCW1zZG9zZnNfaWNvbnYtPmNv bnZjaHIocG1wLT5wbV93MnUsIChjb25zdCBjaGFyICoqKSZpbnAsICZpbGVuLAogCQkJCSAgICAg KGNoYXIgKiopJm91dHAsICZvbGVuKTsKLQkJbGVuIC09IG9sZW47CiAKLQkJLyoKLQkJICogcmV0 dXJuICc/JyBpZiBmYWlsZWQgdG8gY29udmVydAotCQkgKi8KLQkJaWYgKGxlbiA9PSAwKSB7Ci0J CQl3YyA9ICc/JzsKLQkJCXJldHVybiAod2MpOwotCQl9CisJCWRpcmJ1ZnB0ci0+ZF9uYW1sZW4g Kz0gbGVuIC0gb2xlbjsKIAotCQl3YyA9IDA7Ci0JCXdoaWxlKGxlbi0tKQotCQkJd2MgfD0gKCoo b3V0cCAtIGxlbiAtIDEpICYgMHhmZikgPDwgKGxlbiA8PCAzKTsKLQkJcmV0dXJuICh3Yyk7CisJ CWlmIChpbGVuICE9IDApIHsgCisJCQkvKiBmYWlsZWQgdG8gY29udmVydCAqLworCQkJaWYgKG9s ZW4gPT0gMCkgeyAKKwkJCQkvKiBmaWxlbmFtZSBsb25nZXIgdGhlbiBNQVhOQU1MRU4gKi8KKwkJ CQlnb3RvIHRvb19sb25nOworCQkJfSBlbHNlIHsgCisJCQkJLyogc29tZSBjaGFyYWN0ZXIgY2Fu bm90IGJlIGNvbnZlcnRlZCAqLworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQl9IAorCisJCWdv dG8gb2s7CiAJfQogCi0JaWYgKHdjICYgMHhmZjAwKQotCQl3YyA9ICc/JzsKKwlpZiAoc2l6ZW9m KGRpcmJ1ZnB0ci0+ZF9uYW1lKSA8PSBkaXJidWZwdHItPmRfbmFtbGVuICsgMikgeworCQkvKiBm aWxlbmFtZSBsb25nZXIgdGhlbiBNQVhOQU1MRU4gKi8KKwkJZ290byB0b29fbG9uZzsKKwl9IGVs c2UgaWYgKHdjICYgMHhmZjAwKSB7CisJCWdvdG8gZmFpbGVkOworCX0KKwlkaXJidWZwdHItPmRf bmFtZVtkaXJidWZwdHItPmRfbmFtbGVuKytdID0gKHVfY2hhcikod2M+PjgpOworCWRpcmJ1ZnB0 ci0+ZF9uYW1lW2RpcmJ1ZnB0ci0+ZF9uYW1sZW4rK10gPSAodV9jaGFyKXdjOworCWdvdG8gb2s7 CiAKLQlyZXR1cm4gKHdjKTsKK29rOgorCXJldHVybiAwOworCit0b29fbG9uZzoKKwlyZXR1cm4g MTsKKworZmFpbGVkOgorCWRpcmJ1ZnB0ci0+ZF9uYW1lW2RpcmJ1ZnB0ci0+ZF9uYW1sZW4rK10g PSAnPyc7CisJcmV0dXJuIDI7CiB9CiAKIC8qCkBAIC0xMDM1LDc4ICsxMDcxLDMgQEAKIAkoKmlu c3RyKSsrOwogCXJldHVybiAod2MpOwogfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgdGVtcG9y YXJ5IGNvbmNhdGVuYXRpb24gYnVmZmVyIChvbmNlKSBhbmQgbWFyayBpdCBhcwotICogZW1wdHkg b24gc3Vic2VxdWVudCBjYWxscy4KLSAqLwotdm9pZAotbWJuYW1idWZfaW5pdCh2b2lkKQotewot Ci0gICAgICAgIGlmIChuYW1idWZfcHRyID09IE5VTEwpIHsgCi0JCW5hbWJ1Zl9wdHIgPSBtYWxs b2MoTUFYTkFNTEVOICsgMSwgTV9NU0RPU0ZTTU5ULCBNX1dBSVRPSyk7Ci0JCW5hbWJ1Zl9wdHJb TUFYTkFNTEVOXSA9ICdcMCc7Ci0JfQotCW5hbWJ1Zl9sZW4gPSAwOwotCW5hbWJ1Zl9sYXN0X2lk ID0gLTE7Ci19Ci0KLS8qCi0gKiBGaWxsIG91dCBvdXIgY29uY2F0ZW5hdGlvbiBidWZmZXIgd2l0 aCB0aGUgZ2l2ZW4gc3Vic3RyaW5nLCBhdCB0aGUgb2Zmc2V0Ci0gKiBzcGVjaWZpZWQgYnkgaXRz IGlkLiAgU2luY2UgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGlkcyBpbgotICog ZGVzY2VuZGluZyBvcmRlciwgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBBU0NJ SSBzdWJzdHJpbmdzIGFyZQotICogZXhhY3RseSBXSU5fQ0hBUlMgaW4gbGVuZ3RoLiAgRm9yIG5v bi1BU0NJSSBzdWJzdHJpbmdzLCB3ZSBzaGlmdCBhbGwKLSAqIHByZXZpb3VzIChpLmUuIGhpZ2hl ciBpZCkgc3Vic3RyaW5ncyB1cHdhcmRzIHRvIG1ha2Ugcm9vbSBmb3IgdGhpcyBvbmUuCi0gKiBU aGlzIG9ubHkgcGVuYWxpemVzIHBvcnRpb25zIG9mIHN1YnN0cmluZ3MgdGhhdCBjb250YWluIG1v cmUgdGhhbgotICogV0lOX0NIQVJTIGJ5dGVzIHdoZW4gdGhleSBhcmUgZmlyc3QgZW5jb3VudGVy ZWQuCi0gKi8KLXZvaWQKLW1ibmFtYnVmX3dyaXRlKGNoYXIgKm5hbWUsIGludCBpZCkKLXsKLQlz aXplX3QgY291bnQ7Ci0JY2hhciAqc2xvdDsKLQotCUtBU1NFUlQobmFtYnVmX2xlbiA9PSAwIHx8 IGlkID09IG5hbWJ1Zl9sYXN0X2lkIC0gMSwKLQkgICAgKCJub24tZGVjcmVhc2luZyBpZCwgaWQg JWQgbGFzdCBpZCAlZCIsIGlkLCBuYW1idWZfbGFzdF9pZCkpOwotCi0JLyogU3RvcmUgdGhpcyBz dWJzdHJpbmcgaW4gYSBXSU5fQ0hBUi1hbGlnbmVkIHNsb3QuICovCi0Jc2xvdCA9IG5hbWJ1Zl9w dHIgKyAoaWQgKiBXSU5fQ0hBUlMpOwotCWNvdW50ID0gc3RybGVuKG5hbWUpOwotCWlmIChuYW1i dWZfbGVuICsgY291bnQgPiBNQVhOQU1MRU4pIHsKLQkJcHJpbnRmKCJtc2Rvc2ZzOiBmaWxlIG5h bWUgJXp1IHRvbyBsb25nXG4iLCBuYW1idWZfbGVuICsgY291bnQpOwotCQlyZXR1cm47Ci0JfQot Ci0JLyogU2hpZnQgc3VmZml4IHVwd2FyZHMgYnkgdGhlIGFtb3VudCBsZW5ndGggZXhjZWVkcyBX SU5fQ0hBUlMuICovCi0JaWYgKGNvdW50ID4gV0lOX0NIQVJTICYmIG5hbWJ1Zl9sZW4gIT0gMCkK LQkJYmNvcHkoc2xvdCArIFdJTl9DSEFSUywgc2xvdCArIGNvdW50LCBuYW1idWZfbGVuKTsKLQot CS8qIENvcHkgaW4gdGhlIHN1YnN0cmluZyB0byBpdHMgc2xvdCBhbmQgdXBkYXRlIGxlbmd0aCBz byBmYXIuICovCi0JYmNvcHkobmFtZSwgc2xvdCwgY291bnQpOwotCW5hbWJ1Zl9sZW4gKz0gY291 bnQ7Ci0JbmFtYnVmX2xhc3RfaWQgPSBpZDsKLX0KLQotLyoKLSAqIFRha2UgdGhlIGNvbXBsZXRl ZCBzdHJpbmcgYW5kIHVzZSBpdCB0byBzZXR1cCB0aGUgc3RydWN0IGRpcmVudC4KLSAqIEJlIHN1 cmUgdG8gYWx3YXlzIG51bC10ZXJtaW5hdGUgdGhlIGRfbmFtZSBhbmQgdGhlbiBjb3B5IHRoZSBz dHJpbmcKLSAqIGZyb20gb3VyIGJ1ZmZlci4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFzc3Vt ZXMgdGhlIGZ1bGwgc3RyaW5nIGhhcwotICogYmVlbiByZWFzc2VtYmxlZCBpbiB0aGUgYnVmZmVy LiAgSWYgaXQncyBjYWxsZWQgYmVmb3JlIGFsbCBzdWJzdHJpbmdzCi0gKiBoYXZlIGJlZW4gd3Jp dHRlbiB2aWEgbWJuYW1idWZfd3JpdGUoKSwgdGhlIHJlc3VsdCB3aWxsIGJlIGluY29ycmVjdC4K LSAqLwotY2hhciAqCi1tYm5hbWJ1Zl9mbHVzaChzdHJ1Y3QgZGlyZW50ICpkcCkKLXsKLQotCWlm IChuYW1idWZfbGVuID4gc2l6ZW9mKGRwLT5kX25hbWUpIC0gMSkgewotCQltYm5hbWJ1Zl9pbml0 KCk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWJjb3B5KG5hbWJ1Zl9wdHIsIGRwLT5kX25hbWUs IG5hbWJ1Zl9sZW4pOwotCWRwLT5kX25hbWVbbmFtYnVmX2xlbl0gPSAnXDAnOwotCWRwLT5kX25h bWxlbiA9IG5hbWJ1Zl9sZW47Ci0KLQltYm5hbWJ1Zl9pbml0KCk7Ci0JcmV0dXJuIChkcC0+ZF9u YW1lKTsKLX0KZGlmZiAtcnVOIG1zZG9zZnMub3JpZy9tc2Rvc2ZzX2xvb2t1cC5jIG1zZG9zZnMv bXNkb3Nmc19sb29rdXAuYwotLS0gbXNkb3Nmcy5vcmlnL21zZG9zZnNfbG9va3VwLmMJMjAwNy0w OC0wNyAxMDoyNTo1Ni4wMDAwMDAwMDAgKzA4MDAKKysrIG1zZG9zZnMvbXNkb3Nmc19sb29rdXAu YwkyMDA3LTA4LTMwIDE2OjQ0OjUwLjAwMDAwMDAwMCArMDgwMApAQCAtNTQsNiArNTQsNyBAQAog I2luY2x1ZGUgPHN5cy9tb3VudC5oPgogI2luY2x1ZGUgPHN5cy9uYW1laS5oPgogI2luY2x1ZGUg PHN5cy92bm9kZS5oPgorI2luY2x1ZGUgPHN5cy9kaXJlbnQuaD4KIAogI2luY2x1ZGUgPGZzL21z ZG9zZnMvYnBiLmg+CiAjaW5jbHVkZSA8ZnMvbXNkb3Nmcy9kaXJlbnRyeS5oPgpAQCAtMTE1LDcg KzExNiwxMCBAQAogCWludCBvbGRkb3MgPSAxOwogCiAjaWZkZWYgTVNET1NGU19ERUJVRwotCXBy aW50ZigibXNkb3Nmc19sb29rdXAoKTogbG9va2luZyBmb3IgJXNcbiIsIGNucC0+Y25fbmFtZXB0 cik7CisJcHJpbnRmKCJtc2Rvc2ZzX2xvb2t1cCgpOiBsb29raW5nIGZvciAweCIpOworCWZvciAo Y2hhciAqYyA9IGNucC0+Y25fbmFtZXB0cjsgKmM7ICsrYykKKwkJcHJpbnRmKCIlMDJ4IiwgKHVu c2lnbmVkIGNoYXIpKmMpOworCXByaW50ZigiXG4iKTsKICNlbmRpZgogCWRwID0gVlRPREUodmRw KTsKIAlwbXAgPSBkcC0+ZGVfcG1wOwpAQCAtMTc3LDE1ICsxODEsMTggQEAKIAkJc2xvdGNvdW50 ID0gMDsKIAogI2lmZGVmIE1TRE9TRlNfREVCVUcKLQlwcmludGYoIm1zZG9zZnNfbG9va3VwKCk6 IGRvcyB2ZXJzaW9uIG9mIGZpbGVuYW1lICVzLCBsZW5ndGggJWxkXG4iLAotCSAgICBkb3NmaWxl bmFtZSwgY25wLT5jbl9uYW1lbGVuKTsKKwlwcmludGYoIm1zZG9zZnNfbG9va3VwKCk6IGRvcyB2 ZXJzaW9uIG9mIGZpbGVuYW1lIDB4Iik7CisJZm9yIChjaGFyICpjID0gZG9zZmlsZW5hbWU7ICpj OyArK2MpCisJCXByaW50ZigiJTAyeCIsICh1bnNpZ25lZCBjaGFyKSpjKTsKKwlwcmludGYoIiAs IGxlbmd0aCAlbGRcbiIsIGNucC0+Y25fbmFtZWxlbik7CiAjZW5kaWYKIAkvKgogCSAqIFNlYXJj aCB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgYXQgYnkgdmRwIGZvciB0aGUgbmFtZSBwb2ludGVkIGF0 CiAJICogYnkgY25wLT5jbl9uYW1lcHRyLgogCSAqLwogCXRkcCA9IE5VTEw7Ci0JbWJuYW1idWZf aW5pdCgpOworCXN0cnVjdCBkaXJlbnQgbmFtZWJ1ZjsKKwluYW1lYnVmLmRfbmFtbGVuID0gMDsK IAkvKgogCSAqIFRoZSBvdXRlciBsb29wIHJhbmdlcyBvdmVyIHRoZSBjbHVzdGVycyB0aGF0IG1h a2UgdXAgdGhlCiAJICogZGlyZWN0b3J5LiAgTm90ZSB0aGF0IHRoZSByb290IGRpcmVjdG9yeSBp cyBkaWZmZXJlbnQgZnJvbSBhbGwKQEAgLTIyNSw3ICsyMzIsNyBAQAogCQkJCSAqIERyb3AgbWVt b3J5IG9mIHByZXZpb3VzIGxvbmcgbWF0Y2hlcwogCQkJCSAqLwogCQkJCWNoa3N1bSA9IC0xOwot CQkJCW1ibmFtYnVmX2luaXQoKTsKKwkJCQluYW1lYnVmLmRfbmFtbGVuID0gMDsKIAogCQkJCWlm IChzbG90Y291bnQgPCB3aW5jbnQpIHsKIAkJCQkJc2xvdGNvdW50Kys7CkBAIC0yNTEsNiArMjU4 LDcgQEAKIAkJCQkJCWNvbnRpbnVlOwogCiAJCQkJCWNoa3N1bSA9IHdpbjJ1bml4Zm4oKHN0cnVj dCB3aW5lbnRyeSAqKWRlcCwKKwkJCQkJCQkJJm5hbWVidWYsCiAJCQkJCQkJICAgIGNoa3N1bSwK IAkJCQkJCQkgICAgcG1wKTsKIAkJCQkJY29udGludWU7CkBAIC0yNTgsOSArMjY2LDExIEBACiAK IAkJCQljaGtzdW0gPSB3aW5DaGtOYW1lKChjb25zdCB1X2NoYXIgKiljbnAtPmNuX25hbWVwdHIs CiAJCQkJCQkgICAgdW5sZW4sCisJCQkJCQkJJm5hbWVidWYsCiAJCQkJCQkgICAgY2hrc3VtLAog CQkJCQkJICAgIHBtcCk7CiAJCQkJaWYgKGNoa3N1bSA9PSAtMikgeworCQkJCQluYW1lYnVmLmRf bmFtbGVuID0gMDsKIAkJCQkJY2hrc3VtID0gLTE7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KZGlm ZiAtcnVOIG1zZG9zZnMub3JpZy9tc2Rvc2ZzX3Zub3BzLmMgbXNkb3Nmcy9tc2Rvc2ZzX3Zub3Bz LmMKLS0tIG1zZG9zZnMub3JpZy9tc2Rvc2ZzX3Zub3BzLmMJMjAwNy0wOC0wNyAxODozNToyNy4w MDAwMDAwMDAgKzA4MDAKKysrIG1zZG9zZnMvbXNkb3Nmc192bm9wcy5jCTIwMDctMDgtMzAgMTU6 MTU6NDUuMDAwMDAwMDAwICswODAwCkBAIC0xNjI5LDcgKzE2MjksOCBAQAogCQl9CiAJfQogCi0J bWJuYW1idWZfaW5pdCgpOworCWRpcmJ1Zi5kX25hbWxlbiA9IDA7CisKIAlvZmYgPSBvZmZzZXQ7 CiAJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCkgewogCQlsYm4gPSBkZV9jbHVzdGVyKHBtcCwg b2Zmc2V0IC0gYmlhcyk7CkBAIC0xNjc2LDcgKzE2NzcsNyBAQAogCQkJICovCiAJCQlpZiAoZGVu dHAtPmRlTmFtZVswXSA9PSBTTE9UX0RFTEVURUQpIHsKIAkJCQljaGtzdW0gPSAtMTsKLQkJCQlt Ym5hbWJ1Zl9pbml0KCk7CisJCQkJZGlyYnVmLmRfbmFtbGVuID0gMDsKIAkJCQljb250aW51ZTsK IAkJCX0KIApAQCAtMTY4Niw3ICsxNjg3LDcgQEAKIAkJCWlmIChkZW50cC0+ZGVBdHRyaWJ1dGVz ID09IEFUVFJfV0lOOTUpIHsKIAkJCQlpZiAocG1wLT5wbV9mbGFncyAmIE1TRE9TRlNNTlRfU0hP UlROQU1FKQogCQkJCQljb250aW51ZTsKLQkJCQljaGtzdW0gPSB3aW4ydW5peGZuKChzdHJ1Y3Qg d2luZW50cnkgKilkZW50cCwKKwkJCQljaGtzdW0gPSB3aW4ydW5peGZuKChzdHJ1Y3Qgd2luZW50 cnkgKilkZW50cCwgJmRpcmJ1ZiwKIAkJCQkJY2hrc3VtLCBwbXApOwogCQkJCWNvbnRpbnVlOwog CQkJfQpAQCAtMTY5Niw3ICsxNjk3LDcgQEAKIAkJCSAqLwogCQkJaWYgKGRlbnRwLT5kZUF0dHJp YnV0ZXMgJiBBVFRSX1ZPTFVNRSkgewogCQkJCWNoa3N1bSA9IC0xOwotCQkJCW1ibmFtYnVmX2lu aXQoKTsKKwkJCQlkaXJidWYuZF9uYW1sZW4gPSAwOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJ LyoKQEAgLTE3MzgsOSArMTczOSw4IEBACiAJCQkJCSgocG1wLT5wbV9mbGFncyAmIE1TRE9TRlNN TlRfU0hPUlROQU1FKSA/CiAJCQkJCShMQ0FTRV9CQVNFIHwgTENBU0VfRVhUKSA6IDApLAogCQkJ CSAgICBwbXApOwotCQkJCW1ibmFtYnVmX2luaXQoKTsKLQkJCX0gZWxzZQotCQkJCW1ibmFtYnVm X2ZsdXNoKCZkaXJidWYpOworCQkJfSAKKwogCQkJY2hrc3VtID0gLTE7CiAJCQlkaXJidWYuZF9y ZWNsZW4gPSBHRU5FUklDX0RJUlNJWigmZGlyYnVmKTsKIAkJCWlmICh1aW8tPnVpb19yZXNpZCA8 IGRpcmJ1Zi5kX3JlY2xlbikgewpAQCAtMTc2MCw2ICsxNzYwLDggQEAKIAkJCQl9CiAJCQl9CiAJ CQlvZmYgPSBvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGRpcmVudHJ5KTsKKworCQkJZGlyYnVmLmRf bmFtbGVuID0gMDsKIAkJfQogCQlicmVsc2UoYnApOwogCX0K ------=_Part_1837_22684143.1188488159514--