From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id E9969BBC1 for ; Sat, 3 May 2008 20:39:28 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmUCACJOHEjAXQIniGdsb2JhbACRbwEBAQ8gk0OFNg X-IronPort-AV: E=Sophos;i="4.27,431,1204498800"; d="diff'?scan'208";a="11794612" Received: from concorde.inria.fr ([192.93.2.39]) by mail1-smtp-roc.national.inria.fr with ESMTP; 03 May 2008 20:39:28 +0200 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id m43IdGR3022437 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Sat, 3 May 2008 20:39:28 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AmECAKpNHEjRVY69d2dsb2JhbACRbwEMAwQECREDkz2FNg X-IronPort-AV: E=Sophos;i="4.27,431,1204498800"; d="diff'?scan'208";a="25792765" Received: from ti-out-0910.google.com ([209.85.142.189]) by mail4-smtp-sop.national.inria.fr with ESMTP; 03 May 2008 20:39:26 +0200 Received: by ti-out-0910.google.com with SMTP id d27so374781tid.9 for ; Sat, 03 May 2008 11:39:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; bh=7FVrI2Rg1w+JLaSjzrCm2m6Wod/bKltGgdD8DK0lB2Q=; b=VRgSdLKuFaBovKl+5XNqgQF9WeI6bJheij8ghsfk47yPbmsvnynj9bCljNfoeuaP5JF1OuWRpBw7bRNm7izYVi/38CMbg/D5u7d1SJEjnJHEzTV+5KghJyt6B+Oe4R2NDM/gz+ocLh/SCRxL4HudHHbCnPIy+9MDIe80q7jJjok= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=aGkPqmnEWGdQQma83NncqzWFxrt9iizQg6vYtEwXXzgsB1WNGhK26P4Lsf4c7BEybleDcjyQyDwsRmbeilmev1xPfWsU4bNOEDA2XRQhlHt6j6uWBvoK3rKGkr4EAaGXg47Gkmk1WIb/6XO6y4tlaGbiSReyDIHIVXZB0C94XNc= Received: by 10.110.20.17 with SMTP id 17mr16410tit.12.1209839964354; Sat, 03 May 2008 11:39:24 -0700 (PDT) Received: by 10.110.26.14 with HTTP; Sat, 3 May 2008 11:39:24 -0700 (PDT) Message-ID: <90823c940805031139s30e395b4haceab4d974ded3a1@mail.gmail.com> Date: Sat, 3 May 2008 22:39:24 +0400 From: "Dmitry Bely" To: "Xavier Leroy" Subject: Re: [Caml-list] Ocaml debugger under Windows Cc: "Alain Frisch" , ocaml In-Reply-To: <47A9EA89.5050407@inria.fr> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_11369_21359667.1209839964341" References: <90823c940802050146u7cac0aape4e72b4fc6a3089@mail.gmail.com> <47A83251.7010306@frisch.fr> <90823c940802050923h77a95192gdabcd9c0807dccd6@mail.gmail.com> <47A9EA89.5050407@inria.fr> X-Miltered: at concorde with ID 481CB154.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; ocaml:01 debugger:01 sockets:01 descriptors:01 ocamldebug:01 sockets:01 cygwin:01 gdb:01 semantics:01 threads:01 wrote:01 unix:01 dmitry:01 dmitry:01 caml-list:01 X-Attachments: type="application/octet-stream" name="win32_select_debug.diff" name="win32_select_debug.diff" ------=_Part_11369_21359667.1209839964341 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Wed, Feb 6, 2008 at 9:12 PM, Xavier Leroy wrote: [...] > Actually, I would be happy with a Win32 implementation of Unix.select > that works over any combination of sockets and file descriptors. > Unfortunately, it looks like we'd need a gross hack involving threads, > WaitForMultipleObjects() and select(), but if someone comes up with an > implementation that isn't too gross, I'll be interested. OK, I have found some spare time and finally done that. Both select() and ocamldebug now work on Win32. Console, pipes, disk files, sockets can now be tested for reading; write and exceptional condition lists are not supported yet (write probably cannot be implemented, at least Cygwin and GDB don't care, but exceptional conditions probably can if someone explains me an expected semantics). The patch is attached. Please let me know what do you think of it. - Dmitry Bely ------=_Part_11369_21359667.1209839964341 Content-Type: application/octet-stream; name=win32_select_debug.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffsja4w70 Content-Disposition: attachment; filename=win32_select_debug.diff SW5kZXg6IGRlYnVnZ2VyL2V4ZWMubWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBkZWJ1Z2dlci9leGVjLm1s CShyZXZpc2lvbiAxNDMpDQorKysgZGVidWdnZXIvZXhlYy5tbAkocmV2aXNpb24gMTQ2KQ0KQEAg LTI1LDggKzI1LDExIEBADQogICBlbHNlIHJhaXNlIFN5cy5CcmVhawogCiBsZXQgXyA9Ci0gIFN5 cy5zZXRfc2lnbmFsIFN5cy5zaWdpbnQgKFN5cy5TaWduYWxfaGFuZGxlIGJyZWFrKTsKLSAgU3lz LnNldF9zaWduYWwgU3lzLnNpZ3BpcGUgKFN5cy5TaWduYWxfaGFuZGxlIChmdW4gXyAtPiByYWlz ZSBFbmRfb2ZfZmlsZSkpCisgIG1hdGNoIFN5cy5vc190eXBlIHdpdGgNCisgICAgIldpbjMyIiAt PiAoKQ0KKyAgfCBfIC0+DQorICAgICAgU3lzLnNldF9zaWduYWwgU3lzLnNpZ2ludCAoU3lzLlNp Z25hbF9oYW5kbGUgYnJlYWspOworICAgICAgU3lzLnNldF9zaWduYWwgU3lzLnNpZ3BpcGUgKFN5 cy5TaWduYWxfaGFuZGxlIChmdW4gXyAtPiByYWlzZSBFbmRfb2ZfZmlsZSkpCiAKIGxldCBwcm90 ZWN0IGYgPQogICBpZiAhaXNfcHJvdGVjdGVkIHRoZW4KSW5kZXg6IGRlYnVnZ2VyL3VuaXhfdG9v bHMubWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBkZWJ1Z2dlci91bml4X3Rvb2xzLm1sCShyZXZpc2lvbiAx NDMpDQorKysgZGVidWdnZXIvdW5peF90b29scy5tbAkocmV2aXNpb24gMTQ2KQ0KQEAgLTM2LDcg KzM2LDkgQEANCiAgICAgICAgICAgICAgICBwcmVycl9lbmRsaW5lICJUaGUgcG9ydCBudW1iZXIg c2hvdWxkIGJlIGFuIGludGVnZXIiOwogICAgICAgICAgICAgICAgZmFpbHdpdGggIkNhbid0IGNv bnZlcnQgYWRkcmVzcyIpKSkKICAgd2l0aCBOb3RfZm91bmQgLT4KLSAgICAgIChQRl9VTklYLCBB RERSX1VOSVggYWRkcmVzcykKKyAgICBtYXRjaCBTeXMub3NfdHlwZSB3aXRoCisgICAgICAiV2lu MzIiIC0+IGZhaWx3aXRoICJVbml4IHNvY2tldHMgbm90IHN1cHBvcnRlZCIKKyAgICB8IF8gLT4g KFBGX1VOSVgsIEFERFJfVU5JWCBhZGRyZXNzKQogCiAoKioqIFJlcG9ydCBhIHVuaXggZXJyb3Iu ICoqKikKIGxldCByZXBvcnRfZXJyb3IgPSBmdW5jdGlvbgpJbmRleDogZGVidWdnZXIvcHJvZ3Jh bV9sb2FkaW5nLm1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZGVidWdnZXIvcHJvZ3JhbV9sb2FkaW5nLm1s CShyZXZpc2lvbiAxNDMpDQorKysgZGVidWdnZXIvcHJvZ3JhbV9sb2FkaW5nLm1sCShyZXZpc2lv biAxNDYpDQpAQCAtMzcsNyArMzcsNyBAQA0KICgqKiogTGF1bmNoaW5nIGZ1bmN0aW9ucy4gKioq KQogCiAoKiBBIGdlbmVyaWMgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgcHJvZ3JhbSAqKQot bGV0IGdlbmVyaWNfZXhlYyBjbWRsaW5lID0gZnVuY3Rpb24gKCkgLT4KK2xldCBnZW5lcmljX2V4 ZWNfdW5peCBjbWRsaW5lID0gZnVuY3Rpb24gKCkgLT4KICAgaWYgIWRlYnVnX2xvYWRpbmcgdGhl bgogICAgIHByZXJyX2VuZGxpbmUgIkxhdW5jaGluZyBwcm9ncmFtLi4uIjsKICAgbGV0IGNoaWxk ID0KQEAgLTY0LDEyICs2NCwzNyBAQA0KICAgICAgICAoXywgV0VYSVRFRCAwKSAtPiAoKQogICAg ICB8IF8gLT4gcmFpc2UgVG9wbGV2ZWwKIAorbGV0IGdlbmVyaWNfZXhlY193aW4gY21kbGluZSA9 IGZ1bmN0aW9uICgpIC0+CisgIGlmICFkZWJ1Z19sb2FkaW5nIHRoZW4KKyAgICBwcmVycl9lbmRs aW5lICJMYXVuY2hpbmcgcHJvZ3JhbS4uLiI7CisgIHRyeSBpZ25vcmUoY3JlYXRlX3Byb2Nlc3Mg ImNtZC5leGUiIFt8ICIvQyI7IGNtZGxpbmUoKSB8XSBzdGRpbiBzdGRvdXQgc3RkZXJyKQorICB3 aXRoIHggLT4KKyAgICBVbml4X3Rvb2xzLnJlcG9ydF9lcnJvciB4OworICAgIHJhaXNlIFRvcGxl dmVsCisKK2xldCBnZW5lcmljX2V4ZWMgPQorICBtYXRjaCBTeXMub3NfdHlwZSB3aXRoCisgICAg IldpbjMyIiAtPiBnZW5lcmljX2V4ZWNfd2luCisgIHwgXyAtPiBnZW5lcmljX2V4ZWNfdW5peAor CiAoKiBFeGVjdXRlIHRoZSBwcm9ncmFtIGJ5IGNhbGxpbmcgdGhlIHJ1bnRpbWUgZXhwbGljaXRl bHkgKikKIGxldCBleGVjX3dpdGhfcnVudGltZSA9CiAgIGdlbmVyaWNfZXhlYwogICAgIChmdW5j dGlvbiAoKSAtPgotICAgICAgUHJpbnRmLnNwcmludGYgIkNBTUxfREVCVUdfU09DS0VUPSVzICVz ICVzICVzIgorICAgICAgbWF0Y2ggU3lzLm9zX3R5cGUgd2l0aAorICAgICAgICAiV2luMzIiIC0+ CisgICAgICAgICAgKCogVGhpcyBmb3VsZCBmYWlsIG9uIGEgZmlsZSBuYW1lIHdpdGggc3BhY2Vz CisgICAgICAgICAgICAgYnV0IHF1b3RpbmcgaXMgZXZlbiB3b3JzZSBiZWNhdXNlIFVuaXguY3Jl YXRlX3Byb2Nlc3MKKyAgICAgICAgICAgICB0aGlua3MgZWFjaCBjb21tYW5kIGxpbmUgcGFyYW1l dGVyIGlzIGEgZmlsZS4KKyAgICAgICAgICAgICBTbyBubyBnb29kIHNvbHV0aW9uIHNvIGZhciAq KQorICAgICAgICAgIFByaW50Zi5zcHJpbnRmICJzZXQgQ0FNTF9ERUJVR19TT0NLRVQ9JXMgJiYg JXMgJXMgJXMiCiAgICAgICAgICAgICAgICAgICAgICAhc29ja2V0X25hbWUKKyAgICAgICAgICAg ICAgICAgICAgIHJ1bnRpbWVfcHJvZ3JhbQorICAgICAgICAgICAgICAgICAgICAgIXByb2dyYW1f bmFtZQorICAgICAgICAgICAgICAgICAgICAgIWFyZ3VtZW50cworICAgICAgfCBfIC0+CisgICAg ICAgICAgUHJpbnRmLnNwcmludGYgIkNBTUxfREVCVUdfU09DS0VUPSVzICVzICVzICVzIgorICAg ICAgICAgICAgICAgICAgICAgIXNvY2tldF9uYW1lCiAgICAgICAgICAgICAgICAgICAgICAoRmls ZW5hbWUucXVvdGUgcnVudGltZV9wcm9ncmFtKQogICAgICAgICAgICAgICAgICAgICAgKEZpbGVu YW1lLnF1b3RlICFwcm9ncmFtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAhYXJndW1lbnRz KQpAQCAtNzgsOCArMTAzLDE2IEBADQogbGV0IGV4ZWNfZGlyZWN0ID0KICAgZ2VuZXJpY19leGVj CiAgICAgKGZ1bmN0aW9uICgpIC0+Ci0gICAgICBQcmludGYuc3ByaW50ZiAiQ0FNTF9ERUJVR19T T0NLRVQ9JXMgJXMgJXMiCisgICAgICBtYXRjaCBTeXMub3NfdHlwZSB3aXRoCisgICAgICAgICJX aW4zMiIgLT4KKyAgICAgICAgICAoKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgKikKKyAgICAgICAg ICBQcmludGYuc3ByaW50ZiAic2V0IENBTUxfREVCVUdfU09DS0VUPSVzICYmICVzICVzIgogICAg ICAgICAgICAgICAgICAgICAgIXNvY2tldF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAhcHJv Z3JhbV9uYW1lCisgICAgICAgICAgICAgICAgICAgICAhYXJndW1lbnRzCisgICAgICB8IF8gLT4K KyAgICAgICAgICBQcmludGYuc3ByaW50ZiAiQ0FNTF9ERUJVR19TT0NLRVQ9JXMgJXMgJXMiCisg ICAgICAgICAgICAgICAgICAgICAhc29ja2V0X25hbWUKICAgICAgICAgICAgICAgICAgICAgIChG aWxlbmFtZS5xdW90ZSAhcHJvZ3JhbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgIWFyZ3Vt ZW50cykKIApJbmRleDogZGVidWdnZXIvZGVidWdnZXJfY29uZmlnLm1sDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZGVidWdnZXIvZGVidWdnZXJfY29uZmlnLm1sCShyZXZpc2lvbiAxNDMpDQorKysgZGVidWdn ZXIvZGVidWdnZXJfY29uZmlnLm1sCShyZXZpc2lvbiAxNDYpDQpAQCAtNTEsNyArNTEsMTAgQEAN CiBsZXQgZXZlbnRfbWFya19hZnRlciAgPSAiPHxhfD4iCiAKICgqIE5hbWUgb2Ygc2hlbGwgdXNl ZCB0byBsYXVuY2ggdGhlIGRlYnVnZ2VlICopCi1sZXQgc2hlbGwgPSAiL2Jpbi9zaCIKK2xldCBz aGVsbCA9CisgIG1hdGNoIFN5cy5vc190eXBlIHdpdGgKKyAgICAiV2luMzIiIC0+ICJjbWQiCisg IHwgXyAtPiAiL2Jpbi9zaCIKIAogKCogTmFtZSBvZiB0aGUgT2JqZWN0aXZlIENhbWwgcnVudGlt ZS4gKikKIGxldCBydW50aW1lX3Byb2dyYW0gPSAib2NhbWxydW4iCkBAIC03MSw1ICs3NCw3IEBA DQogbGV0IGNoZWNrcG9pbnRfbWF4X2NvdW50ID0gcmVmIDE1CiAKICgqIFdoZXRoZXIgdG8ga2Vl cCBjaGVja3BvaW50cyBvciBub3QuICopCi1sZXQgbWFrZV9jaGVja3BvaW50cyA9IHJlZiB0cnVl Ci0KK2xldCBtYWtlX2NoZWNrcG9pbnRzID0gcmVmCisgIChtYXRjaCBTeXMub3NfdHlwZSB3aXRo CisgICAgIldpbjMyIiAtPiBmYWxzZQorICB8IF8gLT4gdHJ1ZSkKSW5kZXg6IGRlYnVnZ2VyL21h aW4ubWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBkZWJ1Z2dlci9tYWluLm1sCShyZXZpc2lvbiAxNDMpDQor KysgZGVidWdnZXIvbWFpbi5tbAkocmV2aXNpb24gMTQ2KQ0KQEAgLTE0OCw4ICsxNDgsMTIgQEAN CiAKIGxldCBtYWluICgpID0KICAgdHJ5Ci0gICAgc29ja2V0X25hbWUgOj0gRmlsZW5hbWUuY29u Y2F0IEZpbGVuYW1lLnRlbXBfZGlyX25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCJj YW1sZGVidWciIF4gKHN0cmluZ19vZl9pbnQgKFVuaXguZ2V0cGlkICgpKSkpOworICAgIHNvY2tl dF9uYW1lIDo9IAorICAgICAgKG1hdGNoIFN5cy5vc190eXBlIHdpdGgKKyAgICAgICAgIldpbjMy IiAtPiAiMTI3LjAuMC4xOjEwMDAwIgorICAgICAgfCBfIC0+IEZpbGVuYW1lLmNvbmNhdCBGaWxl bmFtZS50ZW1wX2Rpcl9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY2Ft bGRlYnVnIiBeIChzdHJpbmdfb2ZfaW50IChVbml4LmdldHBpZCAoKSkpKQorICAgICAgKTsKICAg ICBiZWdpbiB0cnkKICAgICAgIEFyZy5wYXJzZSBzcGVjbGlzdCBhbm9ueW1vdXMgIiI7CiAgICAg ICBBcmcudXNhZ2Ugc3BlY2xpc3QKSW5kZXg6IGRlYnVnZ2VyL2RlYnVnY29tLm1sDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gZGVidWdnZXIvZGVidWdjb20ubWwJKHJldmlzaW9uIDE0MykNCisrKyBkZWJ1Z2dl ci9kZWJ1Z2NvbS5tbAkocmV2aXNpb24gMTQ2KQ0KQEAgLTk5LDEwICs5OSwxMyBAQA0KICgqIFBl cmZvcm0gYSBjaGVja3BvaW50ICopCiAKIGxldCBkb19jaGVja3BvaW50ICgpID0KLSAgb3V0cHV0 X2NoYXIgIWNvbm4uaW9fb3V0ICdjJzsKLSAgZmx1c2ggIWNvbm4uaW9fb3V0OwotICBsZXQgcGlk ID0gaW5wdXRfYmluYXJ5X2ludCAhY29ubi5pb19pbiBpbgotICBpZiBwaWQgPSAtMSB0aGVuIENo ZWNrcG9pbnRfZmFpbGVkIGVsc2UgQ2hlY2twb2ludF9kb25lIHBpZAorICBtYXRjaCBTeXMub3Nf dHlwZSB3aXRoDQorICAgICJXaW4zMiIgLT4gZmFpbHdpdGggImRvX2NoZWNrcG9pbnQiDQorICB8 IF8gLT4NCisgICAgICBvdXRwdXRfY2hhciAhY29ubi5pb19vdXQgJ2MnOworICAgICAgZmx1c2gg IWNvbm4uaW9fb3V0OworICAgICAgbGV0IHBpZCA9IGlucHV0X2JpbmFyeV9pbnQgIWNvbm4uaW9f aW4gaW4KKyAgICAgIGlmIHBpZCA9IC0xIHRoZW4gQ2hlY2twb2ludF9mYWlsZWQgZWxzZSBDaGVj a3BvaW50X2RvbmUgcGlkCiAKICgqIEtpbGwgdGhlIGdpdmVuIHByb2Nlc3MuICopCiBsZXQgc3Rv cCBjaGFuID0KSW5kZXg6IGJ5dGVydW4vZGVidWdnZXIuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGJ5dGVy dW4vZGVidWdnZXIuYwkocmV2aXNpb24gMTQzKQ0KKysrIGJ5dGVydW4vZGVidWdnZXIuYwkocmV2 aXNpb24gMTQ2KQ0KQEAgLTMyLDcgKzMyLDcgQEANCiBpbnQgY2FtbF9kZWJ1Z2dlcl9pbl91c2Ug PSAwOwogdWludG5hdCBjYW1sX2V2ZW50X2NvdW50OwogCi0jaWYgIWRlZmluZWQoSEFTX1NPQ0tF VFMpIHx8IGRlZmluZWQoX1dJTjMyKQorI2lmICFkZWZpbmVkKEhBU19TT0NLRVRTKQogCiB2b2lk IGNhbWxfZGVidWdnZXJfaW5pdCh2b2lkKQogewpAQCAtNDgsMTcgKzQ4LDI1IEBADQogI2luY2x1 ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9X SU4zMgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2lu Y2x1ZGUgPHN5cy91bi5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxhcnBh L2luZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgorI2Vsc2UKKyNkZWZpbmUgQVRPTSBBVE9NX1dT CisjaW5jbHVkZSA8d2luc29jay5oPgorI3VuZGVmIEFUT00KKyNlbmRpZgogCiBzdGF0aWMgaW50 IHNvY2tfZG9tYWluOyAgICAgICAgIC8qIFNvY2tldCBkb21haW4gZm9yIHRoZSBkZWJ1Z2dlciAq Lwogc3RhdGljIHVuaW9uIHsgICAgICAgICAgICAgICAgICAvKiBTb2NrZXQgYWRkcmVzcyBmb3Ig dGhlIGRlYnVnZ2VyICovCiAgIHN0cnVjdCBzb2NrYWRkciBzX2dlbjsKKyNpZm5kZWYgX1dJTjMy CiAgIHN0cnVjdCBzb2NrYWRkcl91biBzX3VuaXg7CisjZW5kaWYgICAgCiAgIHN0cnVjdCBzb2Nr YWRkcl9pbiBzX2luZXQ7CiB9IHNvY2tfYWRkcjsKIHN0YXRpYyBpbnQgc29ja19hZGRyX2xlbjsg ICAgICAgLyogTGVuZ3RoIG9mIHNvY2tfYWRkciAqLwpAQCAtNjksMTAgKzc3LDM2IEBADQogCiBz dGF0aWMgdm9pZCBvcGVuX2Nvbm5lY3Rpb24odm9pZCkKIHsKKyNpZmRlZiBfV0lOMzIKKyAgLyog U2V0IHNvY2tldCB0byBzeW5jaHJvbm91cyBtb2RlIHNvIHRoYXQgZmlsZSBkZXNjcmlwdG9yLW9y aWVudGVkCisgICAgIGZ1bmN0aW9ucyAocmVhZCgpL3dyaXRlKCkgZXRjLikgY2FuIGJlIHVzZWQg Ki8KKworICBpbnQgb2xkdmFsdWUsIG9sZHZhbHVlbGVuLCBuZXd2YWx1ZSwgcmV0Y29kZTsKKyAg b2xkdmFsdWVsZW4gPSBzaXplb2Yob2xkdmFsdWUpOworICByZXRjb2RlID0gZ2V0c29ja29wdChJ TlZBTElEX1NPQ0tFVCwgU09MX1NPQ0tFVCwgU09fT1BFTlRZUEUsCisgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopICZvbGR2YWx1ZSwgJm9sZHZhbHVlbGVuKTsKKyAgaWYgKHJldGNvZGUg PT0gMCkgeworICAgICAgbmV3dmFsdWUgPSBTT19TWU5DSFJPTk9VU19OT05BTEVSVDsKKyAgICAg IHNldHNvY2tvcHQoSU5WQUxJRF9TT0NLRVQsIFNPTF9TT0NLRVQsIFNPX09QRU5UWVBFLAorICAg ICAgICAgICAgICAgICAoY2hhciAqKSAmbmV3dmFsdWUsIHNpemVvZihuZXd2YWx1ZSkpOworICB9 CisjZW5kaWYgICAgCiAgIGRiZ19zb2NrZXQgPSBzb2NrZXQoc29ja19kb21haW4sIFNPQ0tfU1RS RUFNLCAwKTsKKyNpZmRlZiBfV0lOMzIKKyAgaWYgKHJldGNvZGUgPT0gMCkgeworICAgIC8qIFJl c3RvcmUgaW5pdGlhbCBtb2RlICovCisgICAgc2V0c29ja29wdChJTlZBTElEX1NPQ0tFVCwgU09M X1NPQ0tFVCwgU09fT1BFTlRZUEUsCisgICAgICAgICAgICAgICAoY2hhciAqKSAmb2xkdmFsdWUs IG9sZHZhbHVlbGVuKTsKKyAgfQorI2VuZGlmICAgIAogICBpZiAoZGJnX3NvY2tldCA9PSAtMSB8 fAogICAgICAgY29ubmVjdChkYmdfc29ja2V0LCAmc29ja19hZGRyLnNfZ2VuLCBzb2NrX2FkZHJf bGVuKSA9PSAtMSkKICAgICBjYW1sX2ZhdGFsX2Vycm9yKCJjYW5ub3QgY29ubmVjdCB0byBkZWJ1 Z2dlciIpOworI2lmZGVmIF9XSU4zMgorICBkYmdfc29ja2V0ID0gX29wZW5fb3NmaGFuZGxlKGRi Z19zb2NrZXQpOworICBpZiAoZGJnX3NvY2tldCA9PSAtMSkKKyAgICBjYW1sX2ZhdGFsX2Vycm9y KCJfb3Blbl9vc2ZoYW5kbGUgZmFpbGVkIik7CisjZW5kaWYKICAgZGJnX2luID0gY2FtbF9vcGVu X2Rlc2NyaXB0b3JfaW4oZGJnX3NvY2tldCk7CiAgIGRiZ19vdXQgPSBjYW1sX29wZW5fZGVzY3Jp cHRvcl9vdXQoZGJnX3NvY2tldCk7CiAgIGlmICghY2FtbF9kZWJ1Z2dlcl9pbl91c2UpIGNhbWxf cHV0d29yZChkYmdfb3V0LCAtMSk7IC8qIGZpcnN0IGNvbm5lY3Rpb24gKi8KQEAgLTg3LDYgKzEy MSwyMCBAQA0KICAgZGJnX3NvY2tldCA9IC0xOyAgICAgICAgICAgICAgLyogd2FzIGNsb3NlZCBi eSBjYW1sX2Nsb3NlX2NoYW5uZWwgKi8KIH0KIAorI2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQg d2luc29ja19zdGFydHVwKHZvaWQpCit7CisgIFdTQURBVEEgd3NhRGF0YTsKKyAgaW50IGVyciA9 IFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwgMCksICZ3c2FEYXRhKTsKKyAgaWYgKGVycikgY2FtbF9m YXRhbF9lcnJvcigiV1NBU3RhcnR1cCBmYWlsZWQiKTsKK30KKworc3RhdGljIHZvaWQgd2luc29j a19jbGVhbnVwKHZvaWQpCit7CisgIFdTQUNsZWFudXAoKTsKK30KKyNlbmRpZgorCiB2b2lkIGNh bWxfZGVidWdnZXJfaW5pdCh2b2lkKQogewogICBjaGFyICogYWRkcmVzczsKQEAgLTk3LDEyICsx NDUsMTcgQEANCiAgIGFkZHJlc3MgPSBnZXRlbnYoIkNBTUxfREVCVUdfU09DS0VUIik7CiAgIGlm IChhZGRyZXNzID09IE5VTEwpIHJldHVybjsKIAorI2lmZGVmIF9XSU4zMgorICB3aW5zb2NrX3N0 YXJ0dXAoKTsKKyAgKHZvaWQpYXRleGl0KHdpbnNvY2tfY2xlYW51cCk7CisjZW5kaWYKICAgLyog UGFyc2UgdGhlIGFkZHJlc3MgKi8KICAgcG9ydCA9IE5VTEw7CiAgIGZvciAocCA9IGFkZHJlc3M7 ICpwICE9IDA7IHArKykgewogICAgIGlmICgqcCA9PSAnOicpIHsgKnAgPSAwOyBwb3J0ID0gcCsx OyBicmVhazsgfQogICB9CiAgIGlmIChwb3J0ID09IE5VTEwpIHsKKyNpZm5kZWYgX1dJTjMyCiAg ICAgLyogVW5peCBkb21haW4gKi8KICAgICBzb2NrX2RvbWFpbiA9IFBGX1VOSVg7CiAgICAgc29j a19hZGRyLnNfdW5peC5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTExMSw2ICsxNjQsOSBAQA0K ICAgICBzb2NrX2FkZHJfbGVuID0gCiAgICAgICAoKGNoYXIgKikmKHNvY2tfYWRkci5zX3VuaXgu c3VuX3BhdGgpIC0gKGNoYXIgKikmKHNvY2tfYWRkci5zX3VuaXgpKQogICAgICAgICArIHN0cmxl bihhZGRyZXNzKTsKKyNlbHNlCisgICAgY2FtbF9mYXRhbF9lcnJvcigiVW5peCBzb2NrZXRzIG5v dCBzdXBwb3J0ZWQiKTsKKyNlbmRpZiAgICAKICAgfSBlbHNlIHsKICAgICAvKiBJbnRlcm5ldCBk b21haW4gKi8KICAgICBzb2NrX2RvbWFpbiA9IFBGX0lORVQ7CkBAIC0yMzUsNiArMjkxLDcgQEAN CiAgICAgICBjYW1sX3NldF9pbnN0cnVjdGlvbihjYW1sX3N0YXJ0X2NvZGUgKyBwb3MsIGNhbWxf c2F2ZWRfY29kZVtwb3NdKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgUkVRX0NIRUNLUE9JTlQ6 CisjaWZuZGVmIF9XSU4zMgogICAgICAgaSA9IGZvcmsoKTsKICAgICAgIGlmIChpID09IDApIHsK ICAgICAgICAgY2xvc2VfY29ubmVjdGlvbigpOyAgICAgLyogQ2xvc2UgcGFyZW50IGNvbm5lY3Rp b24uICovCkBAIC0yNDMsNiArMzAwLDEwIEBADQogICAgICAgICBjYW1sX3B1dHdvcmQoZGJnX291 dCwgaSk7CiAgICAgICAgIGNhbWxfZmx1c2goZGJnX291dCk7CiAgICAgICB9CisjZWxzZQorICAg ICAgY2FtbF9mYXRhbF9lcnJvcigiZXJyb3I6IFJFUV9DSEVDS1BPSU5UIGNvbW1hbmQiKTsKKyAg ICAgIGV4aXQoLTEpOworI2VuZGlmICAgICAgCiAgICAgICBicmVhazsKICAgICBjYXNlIFJFUV9H TzoKICAgICAgIGNhbWxfZXZlbnRfY291bnQgPSBjYW1sX2dldHdvcmQoZGJnX2luKTsKQEAgLTI1 MSw3ICszMTIsMTIgQEANCiAgICAgICBleGl0KDApOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBS RVFfV0FJVDoKKyNpZm5kZWYgX1dJTjMyCiAgICAgICB3YWl0KE5VTEwpOworI2Vsc2UKKyAgICAg IGNhbWxfZmF0YWxfZXJyb3IoIkZhdGFsIGVycm9yOiBSRVFfV0FJVCBjb21tYW5kIik7CisgICAg ICBleGl0KC0xKTsKKyNlbmRpZiAgICAgIAogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSRVFfSU5J VElBTF9GUkFNRToKICAgICAgIGZyYW1lID0gY2FtbF9leHRlcm5fc3AgKyAxOwpJbmRleDogb3Ro ZXJsaWJzL3dpbjMydW5peC9zZWxlY3QuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIG90aGVybGlicy93aW4z MnVuaXgvc2VsZWN0LmMJKHJldmlzaW9uIDE0MykNCisrKyBvdGhlcmxpYnMvd2luMzJ1bml4L3Nl bGVjdC5jCShyZXZpc2lvbiAxNDYpDQpAQCAtMTcsNzkgKzE3LDMzNCBAQA0KICNpbmNsdWRlIDxh bGxvYy5oPgogI2luY2x1ZGUgPG1lbW9yeS5oPgogI2luY2x1ZGUgPHNpZ25hbHMuaD4KKyNpbmNs dWRlIDxXaW5Tb2NrMi5oPgorI2luY2x1ZGUgPE1zd3NvY2suaD4KICNpbmNsdWRlICJ1bml4c3Vw cG9ydC5oIgogCi1zdGF0aWMgdm9pZCBmZGxpc3RfdG9fZmRzZXQodmFsdWUgZmRsaXN0LCBmZF9z ZXQgKmZkc2V0KQorZW51bSBIYW5kbGVUeXBlIHsKKyAgVW5rbm93bkhhbmRsZSwKKyAgRGlza0hh bmRsZSwKKyAgQ29uc29sZUhhbmRsZSwKKyAgUGlwZUhhbmRsZSwKKyAgU29ja2V0SGFuZGxlLAor fTsKKworc3RhdGljIGVudW0gSGFuZGxlVHlwZSBnZXRfaGFuZGxlX3R5cGUoSEFORExFIGgpCiB7 Ci0gIHZhbHVlIGw7Ci0gIEZEX1pFUk8oZmRzZXQpOwotICBmb3IgKGwgPSBmZGxpc3Q7IGwgIT0g VmFsX2ludCgwKTsgbCA9IEZpZWxkKGwsIDEpKSB7Ci0gICAgRkRfU0VUKFNvY2tldF92YWwoRmll bGQobCwgMCkpLCBmZHNldCk7CisgIHN3aXRjaChHZXRGaWxlVHlwZShoKSl7CisgICAgY2FzZSBG SUxFX1RZUEVfRElTSzogcmV0dXJuIERpc2tIYW5kbGU7CisgICAgY2FzZSBGSUxFX1RZUEVfQ0hB UjogLyogY2hhcmFjdGVyIGZpbGUgb3IgYSBjb25zb2xlICovCisgICAgICB7CisgICAgICAgIERX T1JEIG1vZGU7CisgICAgICAgIGlmIChHZXRDb25zb2xlTW9kZShoLCAmbW9kZSkgIT0gMCl7Cisg ICAgICAgICAgcmV0dXJuIENvbnNvbGVIYW5kbGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7 CisgICAgICAgICAgcmV0dXJuIFVua25vd25IYW5kbGU7CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICBjYXNlIEZJTEVfVFlQRV9QSVBFOiAvKiBzb2NrZXQsIGEgbmFtZWQgcGlwZSwgb3IgYW4gYW5v bnltb3VzIHBpcGUgKi8KKyAgICAgIHsKKyAgICAgICAgaW50IG9wdHZhbCwgb3B0bGVuID0gc2l6 ZW9mKG9wdHZhbCk7CisgICAgICAgIGlmIChnZXRzb2Nrb3B0KChTT0NLRVQpaCwgU09MX1NPQ0tF VCwgU09fVFlQRSwgKGNoYXIgKikgJm9wdHZhbCwgJm9wdGxlbikgIT0gMAorICAgICAgICAgICYm IFdTQUdldExhc3RFcnJvcigpID09IFdTQUVOT1RTT0NLKXsKKyAgICAgICAgICByZXR1cm4gUGlw ZUhhbmRsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gU29j a2V0SGFuZGxlOworICAgICAgICB9CisgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy biBVbmtub3duSGFuZGxlOwogICB9CiB9CiAKLXN0YXRpYyB2YWx1ZSBmZHNldF90b19mZGxpc3Qo dmFsdWUgZmRsaXN0LCBmZF9zZXQgKmZkc2V0KQorZW51bSBTdGF0ZSB7CisgIE5vbmUsCisgIElu aXRGYWlsZWQsCisgIEVycm9yLAorICBSZWFkCit9OworCitzdHJ1Y3QgSGFuZGxlX3Byb2Mgewor ICBIQU5ETEUgaDsKKyAgSEFORExFIGRvbmVfZXZlbnQ7CisKKyAgLyogc3RhdGUgKi8KKyAgdm9s YXRpbGUgZW51bSBTdGF0ZSBzdGF0ZTsKKyAgdm9sYXRpbGUgRFdPUkQgZXJyb3I7CisKKyAgLyog dGhyZWFkIHN5bmNocm9uaXphdGlvbiAqLworICBIQU5ETEUgc3RvcF90aHJlYWRfZXZlbnQ7Cisg IEhBTkRMRSB0aHJlYWRfc3RhcnRlZF9ldmVudDsKKyAgSEFORExFIHRocmVhZF9oYW5kbGU7Cit9 OworCitzdGF0aWMgaW50IGNoZWNrX2Vycm9yKHN0cnVjdCBIYW5kbGVfcHJvYyAqIGhwLCBpbnQg ZmFpbGVkKQogewotICB2YWx1ZSByZXMgPSBWYWxfaW50KDApOwotICBCZWdpbl9yb290czIoZmRs aXN0LCByZXMpCi0gICAgZm9yICgvKm5vdGhpbmcqLzsgZmRsaXN0ICE9IFZhbF9pbnQoMCk7IGZk bGlzdCA9IEZpZWxkKGZkbGlzdCwgMSkpIHsKLSAgICAgIHZhbHVlIHMgPSBGaWVsZChmZGxpc3Qs IDApOwotICAgICAgaWYgKEZEX0lTU0VUKFNvY2tldF92YWwocyksIGZkc2V0KSkgewotICAgICAg ICB2YWx1ZSBuZXdyZXMgPSBhbGxvY19zbWFsbCgyLCAwKTsKLSAgICAgICAgRmllbGQobmV3cmVz LCAwKSA9IHM7Ci0gICAgICAgIEZpZWxkKG5ld3JlcywgMSkgPSByZXM7Ci0gICAgICAgIHJlcyA9 IG5ld3JlczsKKyAgaWYgKGZhaWxlZCAmJiBocC0+ZXJyb3IgPT0gMCl7CisgICAgaHAtPnN0YXRl ID0gRXJyb3I7CisgICAgaHAtPmVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgIH0KKyAgcmV0dXJu IGZhaWxlZDsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBIYW5kbGVfcHJv YyAqIGhwLCBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FIHRocmVhZF9wcm9jKQoreworICBjaGVja19l cnJvcihocCwgCisgICAgKGhwLT50aHJlYWRfaGFuZGxlID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAs IHRocmVhZF9wcm9jLCBocCwgMCwgTlVMTCkpID09IE5VTEwgfHwKKyAgICBXYWl0Rm9yU2luZ2xl T2JqZWN0KGhwLT50aHJlYWRfc3RhcnRlZF9ldmVudCwgSU5GSU5JVEUpID09IFdBSVRfRkFJTEVE KTsKK30KKworc3RhdGljIHZvaWQgc3RvcF90aHJlYWQoc3RydWN0IEhhbmRsZV9wcm9jICogaHAp Cit7CisgIGNoZWNrX2Vycm9yKGhwLAorICAgIFNldEV2ZW50KGhwLT5zdG9wX3RocmVhZF9ldmVu dCkgPT0gMCB8fAorICAgIFdhaXRGb3JTaW5nbGVPYmplY3QoaHAtPmRvbmVfZXZlbnQsIElORklO SVRFKSA9PSBXQUlUX0ZBSUxFRCk7Cit9CisKKy8qIGRpc2sgKi8KKworc3RhdGljIHZvaWQgaW5p dF9kaXNrKHN0cnVjdCBIYW5kbGVfcHJvYyAqIGhwKQoreworICAvKiBBc3N1bWUgdGhhdCBkaXNr IEkvTyBuZXZlciBibG9ja3MgKi8KKyAgaHAtPnN0YXRlID0gUmVhZDsKKyAgY2hlY2tfZXJyb3Io aHAsIFNldEV2ZW50KGhwLT5kb25lX2V2ZW50KSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgZG9u ZV9kaXNrKHN0cnVjdCBIYW5kbGVfcHJvYyAqIGhwKQoreworfQorCisvKiBjb25zb2xlICovCisK K3N0YXRpYyBEV09SRCBXSU5BUEkgY29uc29sZV90aHJlYWQoTFBWT0lEIHBhcmFtKQoreworICBz dHJ1Y3QgSGFuZGxlX3Byb2MgKiBocCA9IHBhcmFtOworCisgIGNoZWNrX2Vycm9yKGhwLCBTZXRF dmVudChocC0+dGhyZWFkX3N0YXJ0ZWRfZXZlbnQpID09IDApOworICB3aGlsZSAoaHAtPnN0YXRl ID09IE5vbmUpeworICAgIEhBTkRMRSBldmVudHNbMl07CisgICAgSU5QVVRfUkVDT1JEIHJlY29y ZDsKKyAgICBEV09SRCBldmVudCwgbjsKKworICAgIGV2ZW50c1swXSA9IGhwLT5zdG9wX3RocmVh ZF9ldmVudDsKKyAgICBldmVudHNbMV0gPSBocC0+aDsKKyAgICBldmVudCA9IFdhaXRGb3JNdWx0 aXBsZU9iamVjdHMoMiwgZXZlbnRzLCBGQUxTRSwgSU5GSU5JVEUpOworICAgIGlmIChldmVudCA9 PSBXQUlUX09CSkVDVF8wIHx8IGNoZWNrX2Vycm9yKGhwLCBldmVudCA9PSBXQUlUX0ZBSUxFRCkp eworICAgICAgLyogc3RvcF90aHJlYWRfZXZlbnQgb3IgZXJyb3IgKi8KKyAgICAgIGJyZWFrOwor ICAgIH0KKyAgICAvKiBjb25zb2xlIGV2ZW50ICovCisgICAgaWYgKGNoZWNrX2Vycm9yKGhwLCBQ ZWVrQ29uc29sZUlucHV0KGhwLT5oLCAmcmVjb3JkLCAxLCAmbikgPT0gMCkpeworICAgICAgYnJl YWs7CisgICAgfQorICAgIC8qIGNoZWNrIGZvciBBU0NJSSBrZXlwcmVzcyBvbmx5ICovCisgICAg aWYgKHJlY29yZC5FdmVudFR5cGUgPT0gS0VZX0VWRU5UICYmCisgICAgICAgIHJlY29yZC5FdmVu dC5LZXlFdmVudC5iS2V5RG93biAmJgorICAgICAgICByZWNvcmQuRXZlbnQuS2V5RXZlbnQudUNo YXIuQXNjaWlDaGFyICE9IDApeworICAgICAgICBocC0+c3RhdGUgPSBSZWFkOworICAgICAgICBi cmVhazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBkaXNjYXJkIGV2ZXJ5dGhpbmcgZWxz ZSBhbmQgdHJ5IGFnYWluICovIAorICAgICAgaWYgKGNoZWNrX2Vycm9yKGhwLCBSZWFkQ29uc29s ZUlucHV0KGhwLT5oLCAmcmVjb3JkLCAxLCAmbikgPT0gMCkpeworICAgICAgICBicmVhazsKICAg ICAgIH0KICAgICB9Ci0gIEVuZF9yb290cygpOwotICByZXR1cm4gcmVzOworICB9CisgIGNoZWNr X2Vycm9yKGhwLCBTZXRFdmVudChocC0+ZG9uZV9ldmVudCkgPT0gMCk7CisgIHJldHVybiAwOwog fQogCitzdGF0aWMgdm9pZCBpbml0X2NvbnNvbGUoc3RydWN0IEhhbmRsZV9wcm9jICogaHApCit7 CisgIHN0YXJ0X3RocmVhZChocCwgY29uc29sZV90aHJlYWQpOworfQorCitzdGF0aWMgdm9pZCBk b25lX2NvbnNvbGUoc3RydWN0IEhhbmRsZV9wcm9jICogaHApCit7CisgIHN0b3BfdGhyZWFkKGhw KTsKK30KKworLyogcGlwZSAqLworCitzdGF0aWMgRFdPUkQgV0lOQVBJIHBpcGVfdGhyZWFkKExQ Vk9JRCBwYXJhbSkKK3sKKyAgc3RydWN0IEhhbmRsZV9wcm9jICogaHAgPSBwYXJhbTsKKworICBj aGVja19lcnJvcihocCwgU2V0RXZlbnQoaHAtPnRocmVhZF9zdGFydGVkX2V2ZW50KSA9PSAwKTsK KyAgd2hpbGUgKGhwLT5zdGF0ZSA9PSBOb25lKXsKKyAgICBEV09SRCBldmVudCwgbjsKKyAgICBp ZiAoY2hlY2tfZXJyb3IoaHAsIFBlZWtOYW1lZFBpcGUoaHAtPmgsIE5VTEwsIDAsIE5VTEwsICZu LCBOVUxMKSA9PSAwKSl7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKG4gPiAwKXsKKyAg ICAgIGhwLT5zdGF0ZSA9IFJlYWQ7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBBbGFz LCBub3RoaW5nIGV4Y2VwdCBwb2xsaW5nIHNlZW1zIHRvIHdvcmsgZm9yIHBpcGVzLgorICAgICAg IENoZWNrIHRoZSBzdGF0ZSAmIHN0b3BfdGhyZWFkX2V2ZW50IGV2ZXJ5IDEwIG1zICovCisgICAg ZXZlbnQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhwLT5zdG9wX3RocmVhZF9ldmVudCwgMTApOwor ICAgIGlmIChldmVudCA9PSBXQUlUX09CSkVDVF8wIHx8IGNoZWNrX2Vycm9yKGhwLCBldmVudCA9 PSBXQUlUX0ZBSUxFRCkpeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGNoZWNrX2Vycm9y KGhwLCBTZXRFdmVudChocC0+ZG9uZV9ldmVudCkgPT0gMCk7CisgIHJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBpbml0X3BpcGUoc3RydWN0IEhhbmRsZV9wcm9jICogaHApCit7CisgIHN0YXJ0 X3RocmVhZChocCwgcGlwZV90aHJlYWQpOworfQorCitzdGF0aWMgdm9pZCBkb25lX3BpcGUoc3Ry dWN0IEhhbmRsZV9wcm9jICogaHApCit7CisgIHN0b3BfdGhyZWFkKGhwKTsKK30KKworLyogc29j a2V0ICovCisKK3N0YXRpYyB2b2lkIGluaXRfc29ja2V0KHN0cnVjdCBIYW5kbGVfcHJvYyAqIGhw KQoreworICBjaGVja19lcnJvcihocCwgV1NBRXZlbnRTZWxlY3QoKFNPQ0tFVClocC0+aCwgaHAt PmRvbmVfZXZlbnQsIEZEX0FDQ0VQVCB8IEZEX1JFQUQpICE9IDApOworfQorCitzdGF0aWMgdm9p ZCBkb25lX3NvY2tldChzdHJ1Y3QgSGFuZGxlX3Byb2MgKiBocCkKK3sKKyAgLyogY2hlY2sgaWYg ZG9uZV9ldmVudCBpcyBzaWduYWxsZWQgKi8KKyAgRFdPUkQgZXZlbnQgPSBXYWl0Rm9yU2luZ2xl T2JqZWN0KGhwLT5kb25lX2V2ZW50LDApOworICBpZiAoY2hlY2tfZXJyb3IoaHAsIGV2ZW50ID09 IFdBSVRfRkFJTEVEKSl7CisgICAgcmV0dXJuOworICB9CisgIGlmIChldmVudCA9PSBXQUlUX09C SkVDVF8wKXsKKyAgICBocC0+c3RhdGUgPSBSZWFkOworICB9CisgIC8qIFdTQUV2ZW50U2VsZWN0 KCkgYXV0b21hdGljYWxseSBzZXRzIHNvY2tldCB0byBub25ibG9ja2luZyBtb2RlLgorICAgICBS ZXN0b3JlIHRoZSBibG9ja2luZyBvbmUuICovCisgIHsKKyAgICB1X2xvbmcgaU1vZGUgPSAwOwor ICAgIGNoZWNrX2Vycm9yKGhwLAorICAgICAgV1NBRXZlbnRTZWxlY3QoKFNPQ0tFVClocC0+aCwg aHAtPmRvbmVfZXZlbnQsIDApICE9IDAgfHwKKyAgICAgIGlvY3Rsc29ja2V0KChTT0NLRVQpaHAt PmgsIEZJT05CSU8sICZpTW9kZSkgIT0gMCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdF9o YW5kbGVfcHJvYyhIQU5ETEUgaCwgc3RydWN0IEhhbmRsZV9wcm9jICogaHApCit7CisgIGhwLT5o ID0gaDsKKyAgaHAtPmRvbmVfZXZlbnQgPSBDcmVhdGVFdmVudCgwLCBUUlVFLCBGQUxTRSwgMCk7 CisgIGhwLT5zdGF0ZSA9IE5vbmU7CisgIGhwLT5lcnJvciA9IDA7CisgIGhwLT5zdG9wX3RocmVh ZF9ldmVudCA9IENyZWF0ZUV2ZW50KDAsIFRSVUUsIEZBTFNFLCAwKTsKKyAgaHAtPnRocmVhZF9z dGFydGVkX2V2ZW50ID0gQ3JlYXRlRXZlbnQoMCwgVFJVRSwgRkFMU0UsIDApOworICBocC0+dGhy ZWFkX2hhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICBpZiAoaHAtPmRvbmVfZXZlbnQg PT0gTlVMTAorICAgIHx8IGhwLT5zdG9wX3RocmVhZF9ldmVudCA9PSBOVUxMCisgICAgfHwgaHAt PnRocmVhZF9zdGFydGVkX2V2ZW50ID09IE5VTEwpeworICAgICAgaHAtPnN0YXRlID0gSW5pdEZh aWxlZDsKKyAgICAgIGhwLT5lcnJvciA9IEdldExhc3RFcnJvcigpOworICB9CisgIGVsc2Ugewor ICAgIHN3aXRjaChnZXRfaGFuZGxlX3R5cGUoaHAtPmgpKXsKKyAgICAgIGNhc2UgRGlza0hhbmRs ZTogaW5pdF9kaXNrKGhwKTsgYnJlYWs7CisgICAgICBjYXNlIENvbnNvbGVIYW5kbGU6IGluaXRf Y29uc29sZShocCk7IGJyZWFrOworICAgICAgY2FzZSBQaXBlSGFuZGxlOiBpbml0X3BpcGUoaHAp OyBicmVhazsKKyAgICAgIGNhc2UgU29ja2V0SGFuZGxlOiBpbml0X3NvY2tldChocCk7IGJyZWFr OworICAgICAgZGVmYXVsdDogVW5rbm93bkhhbmRsZToKKyAgICAgICAgaHAtPnN0YXRlID0gSW5p dEZhaWxlZDsKKyAgICAgICAgaHAtPmVycm9yID0gRVJST1JfSU5WQUxJRF9IQU5ETEU7CisgICAg fQorICB9Cit9CisKK3N0YXRpYyB2b2lkIGRvbmVfaGFuZGxlX3Byb2Moc3RydWN0IEhhbmRsZV9w cm9jICogaHApCit7CisgIGlmIChocC0+c3RhdGUgIT0gSW5pdEZhaWxlZCl7CisgICAgc3dpdGNo KGdldF9oYW5kbGVfdHlwZShocC0+aCkpeworICAgICAgY2FzZSBEaXNrSGFuZGxlOiBkb25lX2Rp c2soaHApOyBicmVhazsKKyAgICAgIGNhc2UgQ29uc29sZUhhbmRsZTogZG9uZV9jb25zb2xlKGhw KTsgYnJlYWs7CisgICAgICBjYXNlIFBpcGVIYW5kbGU6IGRvbmVfcGlwZShocCk7IGJyZWFrOwor ICAgICAgY2FzZSBTb2NrZXRIYW5kbGU6IGRvbmVfc29ja2V0KGhwKTsgYnJlYWs7CisgICAgfQor ICB9CisgIC8qIGlnbm9yZSBlcnJvcnMgKi8KKyAgQ2xvc2VIYW5kbGUoaHAtPmRvbmVfZXZlbnQp OworICBDbG9zZUhhbmRsZShocC0+c3RvcF90aHJlYWRfZXZlbnQpOworICBDbG9zZUhhbmRsZSho cC0+dGhyZWFkX3N0YXJ0ZWRfZXZlbnQpOworICBDbG9zZUhhbmRsZShocC0+dGhyZWFkX2hhbmRs ZSk7Cit9CisKKwogQ0FNTHByaW0gdmFsdWUgdW5peF9zZWxlY3QodmFsdWUgcmVhZGZkcywgdmFs dWUgd3JpdGVmZHMsIHZhbHVlIGV4Y2VwdGZkcywgdmFsdWUgdGltZW91dCkKIHsKLSAgZmRfc2V0 IHJlYWQsIHdyaXRlLCBleGNlcHQ7Ci0gIGRvdWJsZSB0bTsKLSAgc3RydWN0IHRpbWV2YWwgdHY7 Ci0gIHN0cnVjdCB0aW1ldmFsICogdHZwOwotICBpbnQgcmV0Y29kZTsKKyAgRFdPUkQgdG07CiAg IHZhbHVlIHJlczsKLSAgdmFsdWUgcmVhZF9saXN0ID0gVmFsX3VuaXQsIHdyaXRlX2xpc3QgPSBW YWxfdW5pdCwgZXhjZXB0X2xpc3QgPSBWYWxfdW5pdDsKKyAgdmFsdWUgcmVhZF9saXN0ID0gVmFs X2VtcHR5bGlzdCwgd3JpdGVfbGlzdCA9IFZhbF9lbXB0eWxpc3QsIGV4Y2VwdF9saXN0ID0gVmFs X2VtcHR5bGlzdDsKICAgRFdPUkQgZXJyID0gMDsKIAogICBCZWdpbl9yb290czMgKHJlYWRmZHMs IHdyaXRlZmRzLCBleGNlcHRmZHMpCiAgIEJlZ2luX3Jvb3RzMyAocmVhZF9saXN0LCB3cml0ZV9s aXN0LCBleGNlcHRfbGlzdCkKLSAgICB0bSA9IERvdWJsZV92YWwodGltZW91dCk7Ci0gICAgaWYg KHJlYWRmZHMgPT0gVmFsX2ludCgwKQotCSYmIHdyaXRlZmRzID09IFZhbF9pbnQoMCkKLQkmJiBl eGNlcHRmZHMgPT0gVmFsX2ludCgwKSkgeworICAgIHRtID0gRG91YmxlX3ZhbCh0aW1lb3V0KSA+ IDA/IERvdWJsZV92YWwodGltZW91dCkqMTAwMDogSU5GSU5JVEU7CisgICAgaWYgKHdyaXRlZmRz ICE9IFZhbF9lbXB0eWxpc3QKKyAgICAgICAgfHwgZXhjZXB0ZmRzICE9IFZhbF9lbXB0eWxpc3Qp IHsKKyAgICAgICAgaW52YWxpZF9hcmd1bWVudCgiVW5peC5zZWxlY3Q6IHdyaXRlL2V4Y2VwdCBj b25kaXRpb25zIG5vdCBpbXBsZW1lbnRlZCIpOworICAgIH0KKyAgICBpZiAocmVhZGZkcyA9PSBW YWxfZW1wdHlsaXN0KSB7CiAgICAgICBpZiAoIHRtID4gMC4wICkgewotCWVudGVyX2Jsb2NraW5n X3NlY3Rpb24oKTsKLQlTbGVlcCggKGludCkodG0gKiAxMDAwKSk7Ci0JbGVhdmVfYmxvY2tpbmdf c2VjdGlvbigpOworICAgICAgICBlbnRlcl9ibG9ja2luZ19zZWN0aW9uKCk7CisgICAgICAgIFNs ZWVwKCAoaW50KSh0bSAqIDEwMDApKTsKKyAgICAgICAgbGVhdmVfYmxvY2tpbmdfc2VjdGlvbigp OwogICAgICAgfQotICAgICAgcmVhZF9saXN0ID0gd3JpdGVfbGlzdCA9IGV4Y2VwdF9saXN0ID0g VmFsX2ludCgwKTsKICAgICB9IGVsc2UgeyAgICAgIAotICAgICAgZmRsaXN0X3RvX2Zkc2V0KHJl YWRmZHMsICZyZWFkKTsKLSAgICAgIGZkbGlzdF90b19mZHNldCh3cml0ZWZkcywgJndyaXRlKTsK LSAgICAgIGZkbGlzdF90b19mZHNldChleGNlcHRmZHMsICZleGNlcHQpOwotICAgICAgaWYgKHRt IDwgMC4wKQotCXR2cCA9IChzdHJ1Y3QgdGltZXZhbCAqKSBOVUxMOwotICAgICAgZWxzZSB7Ci0J dHYudHZfc2VjID0gKGludCkgdG07Ci0JdHYudHZfdXNlYyA9IChpbnQpICgxZTYgKiAodG0gLSAo aW50KSB0bSkpOwotCXR2cCA9ICZ0djsKKyAgICAgIEhBTkRMRSBldmVudHNbTUFYSU1VTV9XQUlU X09CSkVDVFNdOworICAgICAgc3RydWN0IEhhbmRsZV9wcm9jIGhwcm9jW01BWElNVU1fV0FJVF9P QkpFQ1RTXTsKKyAgICAgIGludCBpLCBuOworICAgICAgdmFsdWUgbDsKKyAgICAgIGZvciAobCA9 IHJlYWRmZHMsIGkgPSAwOyBsICE9IFZhbF9lbXB0eWxpc3QgJiYgZXJyID09IDA7IGwgPSBGaWVs ZChsLCAxKSwgKytpKSB7CisgICAgICAgIHZhbHVlIGZkID0gRmllbGQobCwgMCk7CisgICAgICAg IGluaXRfaGFuZGxlX3Byb2MoSGFuZGxlX3ZhbChmZCksICZocHJvY1tpXSk7CisgICAgICAgIHN3 aXRjaChocHJvY1tpXS5zdGF0ZSl7CisgICAgICAgICAgY2FzZSBJbml0RmFpbGVkOgorICAgICAg ICAgIGNhc2UgRXJyb3I6CisgICAgICAgICAgICAvKiBjYW5ub3QgZXhpdCBpbW1lZGlhdGVseSBh cyB0aGUgY2xlYW51cCBpcyByZXF1aXJlZCAqLworICAgICAgICAgICAgZXJyID0gaHByb2NbaV0u ZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnRzW2ldID0gaHByb2NbaV0uZG9uZV9ldmVu dDsKICAgICAgIH0KLSAgICAgIGVudGVyX2Jsb2NraW5nX3NlY3Rpb24oKTsKLSAgICAgIGlmIChz ZWxlY3QoRkRfU0VUU0laRSwgJnJlYWQsICZ3cml0ZSwgJmV4Y2VwdCwgdHZwKSA9PSAtMSkKLSAg ICAgICAgZXJyID0gV1NBR2V0TGFzdEVycm9yKCk7Ci0gICAgICBsZWF2ZV9ibG9ja2luZ19zZWN0 aW9uKCk7CisgICAgICBuID0gaTsKKyAgICAgIGlmIChlcnIgPT0gMCl7CisgICAgICAgIGVudGVy X2Jsb2NraW5nX3NlY3Rpb24oKTsKKyAgICAgICAgaWYgKFdhaXRGb3JNdWx0aXBsZU9iamVjdHMo biwgZXZlbnRzLCBGQUxTRSwgdG0pID09IFdBSVRfRkFJTEVEKQorICAgICAgICAgIGVyciA9IEdl dExhc3RFcnJvcigpOworICAgICAgICBsZWF2ZV9ibG9ja2luZ19zZWN0aW9uKCk7CisgICAgICB9 CisgICAgICAvKiBjbGVhbnVwL2NvbnZlcnQgcmVzdWx0cyAqLworICAgICAgbCA9IFZhbF91bml0 OworICAgICAgQmVnaW5fcm9vdHMxIChsKTsKKyAgICAgICAgZm9yIChsID0gcmVhZGZkcywgaSA9 IDA7IGkgPCBuOyBsID0gRmllbGQobCwgMSksICsraSkgeworICAgICAgICAgIGRvbmVfaGFuZGxl X3Byb2MoJmhwcm9jW2ldKTsKKyAgICAgICAgICBzd2l0Y2goaHByb2NbaV0uc3RhdGUpeworICAg ICAgICAgICAgY2FzZSBFcnJvcjoKKyAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBlcnIgPSBo cHJvY1tpXS5lcnJvcjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJl YWQ6CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSBybCA9IGFsbG9jX3Nt YWxsKDIsIDApOworICAgICAgICAgICAgICAgIEZpZWxkKHJsLCAwKSA9IEZpZWxkKGwsIDApOwor ICAgICAgICAgICAgICAgIEZpZWxkKHJsLCAxKSA9IHJlYWRfbGlzdDsKKyAgICAgICAgICAgICAg ICByZWFkX2xpc3QgPSBybDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgRW5kX3Jvb3RzKCk7CiAgICAgICBpZiAo ZXJyKSB7Ci0Jd2luMzJfbWFwZXJyKGVycik7Ci0JdWVycm9yKCJzZWxlY3QiLCBOb3RoaW5nKTsK KyAgICAgICAgd2luMzJfbWFwZXJyKGVycik7CisgICAgICAgIHVlcnJvcigic2VsZWN0IiwgTm90 aGluZyk7CiAgICAgICB9Ci0gICAgICByZWFkX2xpc3QgPSBmZHNldF90b19mZGxpc3QocmVhZGZk cywgJnJlYWQpOwotICAgICAgd3JpdGVfbGlzdCA9IGZkc2V0X3RvX2ZkbGlzdCh3cml0ZWZkcywg JndyaXRlKTsKLSAgICAgIGV4Y2VwdF9saXN0ID0gZmRzZXRfdG9fZmRsaXN0KGV4Y2VwdGZkcywg JmV4Y2VwdCk7CiAgICAgfQogICAgIHJlcyA9IGFsbG9jX3NtYWxsKDMsIDApOwogICAgIEZpZWxk KHJlcywgMCkgPSByZWFkX2xpc3Q7CkluZGV4OiBvdGhlcmxpYnMvd2luMzJ1bml4L01ha2VmaWxl Lm50DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gb3RoZXJsaWJzL3dpbjMydW5peC9NYWtlZmlsZS5udAkocmV2 aXNpb24gMTQzKQ0KKysrIG90aGVybGlicy93aW4zMnVuaXgvTWFrZWZpbGUubnQJKHJldmlzaW9u IDE0NikNCkBAIC00NCw3ICs0NCw3IEBADQogRE9CSlM9JChBTExfRklMRVM6LmM9LiQoRE8pKQog U09CSlM9JChBTExfRklMRVM6LmM9LiQoU08pKQogCi1MSUJTPSQoY2FsbCBTWVNMSUIsd3NvY2sz MikKK0xJQlM9JChjYWxsIFNZU0xJQix3czJfMzIpCiAKIENBTUxfT0JKUz11bml4LmNtbyB1bml4 TGFiZWxzLmNtbwogQ0FNTE9QVF9PQkpTPSQoQ0FNTF9PQkpTOi5jbW89LmNteCkKSW5kZXg6IE1h a2VmaWxlLm50DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gTWFrZWZpbGUubnQJKHJldmlzaW9uIDE0MykNCisr KyBNYWtlZmlsZS5udAkocmV2aXNpb24gMTQ2KQ0KQEAgLTExNCw3ICsxMTQsNyBAQA0KIAlAZWNo byAiUGxlYXNlIHJlZmVyIHRvIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGluIGZpbGUg UkVBRE1FLndpbjMyLiIKIAogIyBSZWNvbXBpbGUgdGhlIHN5c3RlbSB1c2luZyB0aGUgYm9vdHN0 cmFwIGNvbXBpbGVyCi1hbGw6IHJ1bnRpbWUgb2NhbWxjIG9jYW1sbGV4IG9jYW1seWFjYyBvY2Ft bHRvb2xzIGxpYnJhcnkgb2NhbWwgb3RoZXJsaWJyYXJpZXMgb2NhbWxkb2MuYnl0ZSBvY2FtbGJ1 aWxkLmJ5dGUgY2FtbHA0b3V0IHdpbjMyZ3VpCithbGw6IHJ1bnRpbWUgb2NhbWxjIG9jYW1sbGV4 IG9jYW1seWFjYyBvY2FtbHRvb2xzIGxpYnJhcnkgb2NhbWwgb3RoZXJsaWJyYXJpZXMgb2NhbWxk b2MuYnl0ZSBvY2FtbGJ1aWxkLmJ5dGUgY2FtbHA0b3V0ICQoREVCVUdHRVIpIHdpbjMyZ3VpCiAK ICMgVGhlIGNvbXBpbGF0aW9uIG9mIG9jYW1sIHdpbGwgZmFpbCBpZiB0aGUgcnVudGltZSBoYXMg Y2hhbmdlZC4KICMgTmV2ZXIgbWluZCwganVzdCBkbyBtYWtlIGJvb3RzdHJhcCB0byByZWFjaCBm aXhwb2ludCBhZ2Fpbi4KQEAgLTIyOSw2ICsyMjksOCBAQA0KIAljZCBvY2FtbGRvYyA7ICQoTUFL RVJFQykgaW5zdGFsbAogCW1rZGlyIC1wICQoU1RVQkxJQkRJUikKIAlmb3IgaSBpbiAkKE9USEVS TElCUkFSSUVTKTsgZG8gJChNQUtFUkVDKSAtQyBvdGhlcmxpYnMvJCRpIGluc3RhbGw7IGRvbmUK KwlpZiB0ZXN0IC1mIGRlYnVnZ2VyL29jYW1sZGVidWcuZXhlOyB0aGVuIChjZCBkZWJ1Z2dlcjsg JChNQUtFUkVDKSBpbnN0YWxsKTsgXAorCSAgIGVsc2UgOjsgZmkKIAljZCB3aW4zMmNhbWwgOyAk KE1BS0UpIGluc3RhbGwKIAkuL2J1aWxkL3BhcnRpYWwtaW5zdGFsbC5zaAogCWNwIGNvbmZpZy9N YWtlZmlsZSAkKExJQkRJUikvTWFrZWZpbGUuY29uZmlnCkBAIC01NjQsNiArNTY2LDE1IEBADQog YWxsZGVwZW5kOjoKIAlmb3IgaSBpbiAkKE9USEVSTElCUkFSSUVTKTsgZG8gJChNQUtFUkVDKSAt QyBvdGhlcmxpYnMvJCRpIGRlcGVuZDsgZG9uZQogCisjIFRoZSByZXBsYXkgZGVidWdnZXIKKwor b2NhbWxkZWJ1Z2dlcjogb2NhbWxjIG9jYW1seWFjYyBvY2FtbGxleAorCWNkIGRlYnVnZ2VyOyAk KE1BS0VSRUMpIGFsbAorcGFydGlhbGNsZWFuOjoKKwljZCBkZWJ1Z2dlcjsgJChNQUtFUkVDKSBj bGVhbgorYWxsZGVwZW5kOjoKKwljZCBkZWJ1Z2dlcjsgJChNQUtFUkVDKSBkZXBlbmQKKwogIyBD YW1scDQKIAogY2FtbHA0b3V0OiBvY2FtbGMgb3RoZXJsaWJyYXJpZXMgb2NhbWxidWlsZC1wYXJ0 aWFsLWJvb3Qgb2NhbWxidWlsZC5ieXRlCkluZGV4OiBjb25maWcvTWFrZWZpbGUubXN2Yw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGNvbmZpZy9NYWtlZmlsZS5tc3ZjCShyZXZpc2lvbiAxNDMpDQorKysgY29u ZmlnL01ha2VmaWxlLm1zdmMJKHJldmlzaW9uIDE0NikNCkBAIC02Niw3ICs2Niw3IEBADQogQVNQ UFBST0ZGTEFHUz0KIFBST0ZJTElORz1ub3Byb2YKIERZTkxJTktPUFRTPQotREVCVUdHRVI9CitE RUJVR0dFUj1vY2FtbGRlYnVnZ2VyCiBDQ19QUk9GSUxFPQogU1lTVEhSRUFEX1NVUFBPUlQ9dHJ1 ZQogRVhUUkFMSUJTPQo= ------=_Part_11369_21359667.1209839964341--