From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Fabrice Popineau Newsgroups: gmane.emacs.devel Subject: Re: Compiling (development) Emacs with MSVC Date: Mon, 13 Dec 2010 23:40:56 +0100 Message-ID: References: <83sjy5279e.fsf@gnu.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=00151748e728f7f1030497526677 X-Trace: dough.gmane.org 1292285660 28003 80.91.229.12 (14 Dec 2010 00:14:20 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 14 Dec 2010 00:14:20 +0000 (UTC) Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Dec 14 01:14:09 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PSIUQ-0008Ei-Nn for ged-emacs-devel@m.gmane.org; Tue, 14 Dec 2010 01:14:09 +0100 Original-Received: from localhost ([127.0.0.1]:48191 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PSIUO-0001fn-Pk for ged-emacs-devel@m.gmane.org; Mon, 13 Dec 2010 19:11:32 -0500 Original-Received: from [140.186.70.92] (port=40140 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PSH5a-0003Kw-I4 for emacs-devel@gnu.org; Mon, 13 Dec 2010 17:43:28 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PSH55-0001aF-Iu for emacs-devel@gnu.org; Mon, 13 Dec 2010 17:41:20 -0500 Original-Received: from mail-ew0-f43.google.com ([209.85.215.43]:46525) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PSH55-0001Zw-4m; Mon, 13 Dec 2010 17:41:19 -0500 Original-Received: by ewy22 with SMTP id 22so4166705ewy.30 for ; Mon, 13 Dec 2010 14:41:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:sender:received :in-reply-to:references:from:date:x-google-sender-auth:message-id :subject:to:cc:content-type; bh=M/keq6MGxH0y9xQrxytTgw4zE1UJTIYV0inTRkToaxk=; b=V1vN9M3V+b3q2UgZP8laOSO5MXPrpXoyTxA3yttFi7Yeo/NSgoBydCvFjMaRLYc015 O2TZyQ+zEApJACm0QlI4tmvLTvr8CtE0kANfI/Gu52qKvseyGWN5BaHWbbKu4uddHbxh r/7stDFaFpyDsMSqxlXNvSP1Rxdwdwd3UG2Ho= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; b=R6VUpJRKxdY2vm9e+HbUBEi80DwVPPQMewEHHYMWcg9Bfgb/YzfIFn+wJOHwlwryDE s9VONCuabjdr/t1110OjdcJ1tNw3qm4L8l2P7y+0i44m+HtmMpELV5F6ymEFMelAhlOI z3IU3lD91IGoa+GbjpsyD0u1nqu1RFZokzQXo= Original-Received: by 10.213.109.15 with SMTP id h15mr12411ebp.30.1292280077479; Mon, 13 Dec 2010 14:41:17 -0800 (PST) Original-Received: by 10.213.13.70 with HTTP; Mon, 13 Dec 2010 14:40:56 -0800 (PST) In-Reply-To: <83sjy5279e.fsf@gnu.org> X-Google-Sender-Auth: K1BMKWYGcbIcbaFVOG0Ws2jPvUU X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Mailman-Approved-At: Mon, 13 Dec 2010 19:11:26 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:133671 Archived-At: --00151748e728f7f1030497526677 Content-Type: multipart/alternative; boundary=00151748e728f7f0f90497526675 --00151748e728f7f0f90497526675 Content-Type: text/plain; charset=ISO-8859-1 Patch attached. I guess I can explain the reason for all of it, albeit the solution I have taken may not be the easiest to maintain in the source tree. Apparently the ANSI C spec says that bit fields are unsigned, and enum are signed, hence the patch in lisp.h for various bit fields. Anyway, the MS compiler did extend sign and that was the main failure. Almost everything else is about linking with the right functions in msvcrt. I have traced through the whole initialization process and I have not seen any interference between gmalloc.c and the msvcrt allocator. In fact I wonder if the gmalloc heap initialization has to occur that sooner. It seems to me that malloc()/gmalloc.c is called for the first time when sorting arguments from the command line, so quite late. The "-dynamicbase:no" linker option is mandatory, else emacs is relocated at some different address in memory, and that makes it crash, especially because of some function pointers dumped into the exe. Hard to trace exactly, because the crash is always with a corrupt stack, albeit always in gmalloc.c or alloc.c. But the flag fixed the problem. The portable dumper (once written for emacs 21 and avalaible in xemacs) would be a very good idea. Best regards, Fabrice --00151748e728f7f0f90497526675 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Patch attached.

I guess I can explain the reason for all= of it, albeit the solution I have taken may not be the easiest to maintain= in the source tree.
Apparently the ANSI C spec says that bit fie= lds are unsigned, and enum are signed, hence the patch in lisp.h for variou= s bit fields.
Anyway, the MS compiler did extend sign and that was the main failure.= Almost everything else is about linking with the right functions in msvcrt= .

I have traced through the whole initialization p= rocess and I have not seen any interference between gmalloc.c and the msvcr= t allocator. In fact I wonder if the gmalloc heap initialization has to occ= ur that sooner. It seems to me that malloc()/gmalloc.c is called for the fi= rst time when sorting arguments from the command line, so quite late.

The "-dynamicbase:no" linker option is mandat= ory, else emacs is relocated at some different address in memory, and that = makes it crash, especially because of some function pointers dumped into th= e exe. Hard to trace exactly, because the crash is always with a corrupt st= ack, albeit always in gmalloc.c or alloc.c. But the flag fixed the problem.=

The portable dumper (once written for emacs 21 and aval= aible in xemacs) would be a very good idea.

Best r= egards,

Fabrice

--00151748e728f7f0f90497526675-- --00151748e728f7f1030497526677 Content-Type: application/octet-stream; name="emacs-msvc.diff" Content-Disposition: attachment; filename="emacs-msvc.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ghny6du10 ZGlmZiAtcnVOIC4uXG1pcnJvclxlbWFjcy1ienJcdHJ1bmtcc3JjL2xpc3AuaCBlbWFjcy1nbnVc c3JjL2xpc3AuaA0KLS0tIC4uXG1pcnJvclxlbWFjcy1ienJcdHJ1bmtcc3JjL2xpc3AuaAkyMDEw LTExLTE4IDA4OjUzOjA0LjAwMDAwMDAwMCArMDEwMA0KKysrIGVtYWNzLWdudVxzcmMvbGlzcC5o CTIwMTAtMTItMTMgMjE6NTA6NTguMDAwMDAwMDAwICswMTAwDQpAQCAtMTI0LDggKzEyNCwxMSBA QA0KICMgaWZuZGVmIERFQ0xfQUxJR04NCiAvKiBXaGF0IGNvbXBpbGVyIGRpcmVjdGl2ZSBzaG91 bGQgd2UgdXNlIGZvciBub24tZ2NjIGNvbXBpbGVycz8gIC1zdGVmICAqLw0KICMgIGlmIGRlZmlu ZWQgKF9fR05VQ19fKQ0KLSMgICBkZWZpbmUgREVDTF9BTElHTih0eXBlLCB2YXIpIFwNCisjICAg ZGVmaW5lIERFQ0xfQUxJR04odHlwZSwgdmFyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KICAgICAgdHlwZSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18gKDEgPDwgR0NUWVBF QklUUykpKSB2YXINCisjICBlbHNlaWYgZGVmaW5lZChfTVNDX1ZFUikNCisjICAgZGVmaW5lIERF Q0xfQUxJR04odHlwZSwgdmFyKSBcDQorICAgICB0eXBlIF9fZGVjbHNwZWMoYWxpZ24oMSA8PCBH Q1RZUEVCSVRTKSkgdmFyDQogIyAgZW5kaWYNCiAjIGVuZGlmDQogI2VuZGlmDQpAQCAtMTAwNyw3 ICsxMDEwLDExIEBADQogICAgICAyIDogaXQncyBhIGxvY2FsaXplZCB2YXIsIHRoZSB2YWx1ZSBp cyBpbiB0aGUgYGJsdicgb2JqZWN0Lg0KICAgICAgMyA6IGl0J3MgYSBmb3J3YXJkaW5nIHZhcmlh YmxlLCB0aGUgdmFsdWUgaXMgaW4gYGZvcndhcmQnLg0KICAgICovDQorI2lmZGVmIF9NU0NfVkVS DQorICB1bnNpZ25lZCBzaG9ydCByZWRpcmVjdCA6IDM7DQorI2Vsc2UNCiAgIGVudW0gc3ltYm9s X3JlZGlyZWN0IHJlZGlyZWN0IDogMzsNCisjZW5kaWYNCg0KICAgLyogTm9uLXplcm8gbWVhbnMg c3ltYm9sIGlzIGNvbnN0YW50LCBpLmUuIGNoYW5naW5nIGl0cyB2YWx1ZQ0KICAgICAgc2hvdWxk IHNpZ25hbCBhbiBlcnJvci4gIElmIHRoZSB2YWx1ZSBpcyAzLCB0aGVuIHRoZSB2YXINCkBAIC0x MjE2LDcgKzEyMjMsMTEgQEANCg0KIHN0cnVjdCBMaXNwX01pc2NfQW55CQkvKiBTdXBlcnR5cGUg b2YgYWxsIE1pc2MgdHlwZXMuICAqLw0KIHsNCisjaWZkZWYgX01TQ19WRVINCisgIHVuc2lnbmVk IHNob3J0IHR5cGUgOiAxNjsNCisjZWxzZQ0KICAgZW51bSBMaXNwX01pc2NfVHlwZSB0eXBlIDog MTY7CQkvKiA9IExpc3BfTWlzY18/Pz8gKi8NCisjZW5kaWYNCiAgIHVuc2lnbmVkIGdjbWFya2Jp dCA6IDE7DQogICBpbnQgc3BhY2VyIDogMTU7DQogICAvKiBNYWtlIGl0IGFzIGxvbmcgYXMgIkxp c3BfRnJlZSB3aXRob3V0IHBhZGRpbmciLiAqLw0KQEAgLTEyMjUsNyArMTIzNiwxMSBAQA0KDQog c3RydWN0IExpc3BfTWFya2VyDQogew0KKyNpZmRlZiBfTVNDX1ZFUg0KKyAgdW5zaWduZWQgc2hv cnQgdHlwZSA6IDE2Ow0KKyNlbHNlDQogICBlbnVtIExpc3BfTWlzY19UeXBlIHR5cGUgOiAxNjsJ CS8qID0gTGlzcF9NaXNjX01hcmtlciAqLw0KKyNlbmRpZg0KICAgdW5zaWduZWQgZ2NtYXJrYml0 IDogMTsNCiAgIGludCBzcGFjZXIgOiAxMzsNCiAgIC8qIFRoaXMgZmxhZyBpcyB0ZW1wb3Jhcmls eSB1c2VkIGluIHRoZSBmdW5jdGlvbnMNCkBAIC0xMzc1LDcgKzEzOTAsMTEgQEANCiAgICBJLmUu IDl3b3JkcyBwbHVzIDIgYml0cywgM3dvcmRzIG9mIHdoaWNoIGFyZSBmb3IgZXh0ZXJuYWwgbGlu a2VkIGxpc3RzLg0KICovDQogICB7DQorI2lmZGVmIF9NU0NfVkVSDQorICAgIHVuc2lnbmVkIHNo b3J0IHR5cGUgOiAxNjsNCisjZWxzZQ0KICAgICBlbnVtIExpc3BfTWlzY19UeXBlIHR5cGUgOiAx NjsJLyogPSBMaXNwX01pc2NfT3ZlcmxheSAqLw0KKyNlbmRpZg0KICAgICB1bnNpZ25lZCBnY21h cmtiaXQgOiAxOw0KICAgICBpbnQgc3BhY2VyIDogMTU7DQogICAgIHN0cnVjdCBMaXNwX092ZXJs YXkgKm5leHQ7DQpAQCAtMTM5NCw3ICsxNDEzLDExIEBADQogICAgVGhpcyB0eXBlIG9mIG9iamVj dCBpcyB1c2VkIGluIHRoZSBhcmcgdG8gcmVjb3JkX3Vud2luZF9wcm90ZWN0LiAgKi8NCiBzdHJ1 Y3QgTGlzcF9TYXZlX1ZhbHVlDQogICB7DQorI2lmZGVmIF9NU0NfVkVSDQorICAgIHVuc2lnbmVk IHNob3J0IHR5cGUgOiAxNjsNCisjZWxzZQ0KICAgICBlbnVtIExpc3BfTWlzY19UeXBlIHR5cGUg OiAxNjsJLyogPSBMaXNwX01pc2NfU2F2ZV9WYWx1ZSAqLw0KKyNlbmRpZg0KICAgICB1bnNpZ25l ZCBnY21hcmtiaXQgOiAxOw0KICAgICBpbnQgc3BhY2VyIDogMTQ7DQogICAgIC8qIElmIERPR0Mg aXMgc2V0LCBQT0lOVEVSIGlzIHRoZSBhZGRyZXNzIG9mIGEgbWVtb3J5DQpAQCAtMTQwOCw3ICsx NDMxLDExIEBADQogLyogQSBtaXNjZWxsYW5lb3VzIG9iamVjdCwgd2hlbiBpdCdzIG9uIHRoZSBm cmVlIGxpc3QuICAqLw0KIHN0cnVjdCBMaXNwX0ZyZWUNCiAgIHsNCisjaWZkZWYgX01TQ19WRVIN CisgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA6IDE2Ow0KKyNlbHNlDQogICAgIGVudW0gTGlzcF9N aXNjX1R5cGUgdHlwZSA6IDE2OwkvKiA9IExpc3BfTWlzY19GcmVlICovDQorI2VuZGlmDQogICAg IHVuc2lnbmVkIGdjbWFya2JpdCA6IDE7DQogICAgIGludCBzcGFjZXIgOiAxNTsNCiAgICAgdW5p b24gTGlzcF9NaXNjICpjaGFpbjsNCkBAIC0xODAwLDEzICsxODI3LDIzIEBADQoNCiAvKiBUaGlz IHZlcnNpb24gb2YgREVGVU4gZGVjbGFyZXMgYSBmdW5jdGlvbiBwcm90b3R5cGUgd2l0aCB0aGUg cmlnaHQNCiAgICBhcmd1bWVudHMsIHNvIHdlIGNhbiBjYXRjaCBlcnJvcnMgd2l0aCBtYXhhcmdz IGF0IGNvbXBpbGUtdGltZS4gICovDQorI2lmZGVmIF9NU0NfVkVSDQogI2RlZmluZSBERUZVTihs bmFtZSwgZm5uYW1lLCBzbmFtZSwgbWluYXJncywgbWF4YXJncywgaW50c3BlYywgZG9jKQlcDQog ICBMaXNwX09iamVjdCBmbm5hbWUgREVGVU5fQVJHU18gIyMgbWF4YXJncyA7CQkJCVwNCiAgIERF Q0xfQUxJR04gKHN0cnVjdCBMaXNwX1N1YnIsIHNuYW1lKSA9CQkJCVwNCiAgICAgeyBQVkVDX1NV QlIgfCAoc2l6ZW9mIChzdHJ1Y3QgTGlzcF9TdWJyKSAvIHNpemVvZiAoRU1BQ1NfSU5UKSksCVwN Ci0gICAgICB7IC5hICMjIG1heGFyZ3MgPSBmbm5hbWUgfSwJCQkJXA0KKyAgICAgIHsgKExpc3Bf T2JqZWN0IChfX2NkZWNsICopKHZvaWQpKWZubmFtZSB9LCAgICAgICAgICAgICAgICAgICAgICAg IFwNCiAgICAgICBtaW5hcmdzLCBtYXhhcmdzLCBsbmFtZSwgaW50c3BlYywgMH07CQkJCVwNCiAg IExpc3BfT2JqZWN0IGZubmFtZQ0KKyNlbHNlDQorI2RlZmluZSBERUZVTihsbmFtZSwgZm5uYW1l LCBzbmFtZSwgbWluYXJncywgbWF4YXJncywgaW50c3BlYywgZG9jKQlcDQorICBMaXNwX09iamVj dCBmbm5hbWUgREVGVU5fQVJHU18gIyMgbWF4YXJncyA7CQkJCVwNCisgIERFQ0xfQUxJR04gKHN0 cnVjdCBMaXNwX1N1YnIsIHNuYW1lKSA9CQkJCVwNCisgICAgeyBQVkVDX1NVQlIgfCAoc2l6ZW9m IChzdHJ1Y3QgTGlzcF9TdWJyKSAvIHNpemVvZiAoRU1BQ1NfSU5UKSksCVwNCisgICAgICB7IC5h ICMjIG1heGFyZ3MgPSBmbm5hbWUgfSwJCQkJCVwNCisgICAgICBtaW5hcmdzLCBtYXhhcmdzLCBs bmFtZSwgaW50c3BlYywgMH07CQkJCVwNCisgIExpc3BfT2JqZWN0IGZubmFtZQ0KKyNlbmRpZg0K DQogLyogTm90ZSB0aGF0IHRoZSB3ZWlyZCB0b2tlbi1zdWJzdGl0dXRpb24gc2VtYW50aWNzIG9m IEFOU0kgQyBtYWtlcw0KICAgIHRoaXMgd29yayBmb3IgTUFOWSBhbmQgVU5FVkFMTEVELiAgKi8N CmRpZmYgLXJ1TiAuLlxtaXJyb3JcZW1hY3MtYnpyXHRydW5rXHNyYy9tYWtlZmlsZS53MzItaW4g ZW1hY3MtZ251XHNyYy9tYWtlZmlsZS53MzItaW4NCi0tLSAuLlxtaXJyb3JcZW1hY3MtYnpyXHRy dW5rXHNyYy9tYWtlZmlsZS53MzItaW4JMjAxMC0xMS0xOCAwODo1MzowNC4wMDAwMDAwMDAgKzAx MDANCisrKyBlbWFjcy1nbnVcc3JjL21ha2VmaWxlLnczMi1pbgkyMDEwLTEyLTEzIDIxOjQ4OjEw LjAwMDAwMDAwMCArMDEwMA0KQEAgLTMwMywxNCArMzAzLDE0IEBADQogCSQoTUFLRSkgJChNRkxB R1MpIFRBR1MtTElTUC0kKE1BS0VUWVBFKQ0KDQogVEFHUy1nbWFrZToNCi0JLi4vbGliLXNyYy8k KEJMRCkvZXRhZ3MuZXhlIC0taW5jbHVkZT1UQUdTLUxJU1AgLS1pbmNsdWRlPS4uL250L1RBR1Mg XA0KLQkgIC0tcmVnZXg9QC4uL250L2VtYWNzLXNyYy50YWdzIFwNCi0JICAkKHBhdHN1YnN0ICQo QkxEKSUuJChPKSwkKENVUkRJUiklLmMsJChPQkowKSkNCi0JLi4vbGliLXNyYy8kKEJMRCkvZXRh Z3MuZXhlIC1hIC0tcmVnZXg9QC4uL250L2VtYWNzLXNyYy50YWdzIFwNCi0JICAkKHBhdHN1YnN0 ICQoQkxEKSUuJChPKSwkKENVUkRJUiklLmMsJChPQkoxKSkNCi0JLi4vbGliLXNyYy8kKEJMRCkv ZXRhZ3MuZXhlIC1hIC0tcmVnZXg9QC4uL250L2VtYWNzLXNyYy50YWdzIFwNCi0JICAkKHBhdHN1 YnN0ICQoQkxEKSUuJChPKSwkKENVUkRJUiklLmMsJChPQkoyKSkgXA0KLQkgICQoQ1VSRElSKS8q LmgNCisjIC4uL2xpYi1zcmMvJChCTEQpL2V0YWdzLmV4ZSAtLWluY2x1ZGU9VEFHUy1MSVNQIC0t aW5jbHVkZT0uLi9udC9UQUdTIFwNCisjICAgLS1yZWdleD1ALi4vbnQvZW1hY3Mtc3JjLnRhZ3Mg XA0KKyMgICAkKHBhdHN1YnN0ICQoQkxEKSUuJChPKSwkKENVUkRJUiklLmMsJChPQkowKSkNCisj IC4uL2xpYi1zcmMvJChCTEQpL2V0YWdzLmV4ZSAtYSAtLXJlZ2V4PUAuLi9udC9lbWFjcy1zcmMu dGFncyBcDQorIyAgICQocGF0c3Vic3QgJChCTEQpJS4kKE8pLCQoQ1VSRElSKSUuYywkKE9CSjEp KQ0KKyMgLi4vbGliLXNyYy8kKEJMRCkvZXRhZ3MuZXhlIC1hIC0tcmVnZXg9QC4uL250L2VtYWNz LXNyYy50YWdzIFwNCisjICAgJChwYXRzdWJzdCAkKEJMRCklLiQoTyksJChDVVJESVIpJS5jLCQo T0JKMikpIFwNCisjICAgJChDVVJESVIpLyouaA0KDQogVEFHUy1ubWFrZToNCiAJZWNobyBUaGlz IHRhcmdldCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggTk1ha2UNCmRpZmYgLXJ1TiAuLlxtaXJyb3Jc ZW1hY3MtYnpyXHRydW5rXHNyYy9yYWxsb2MuYyBlbWFjcy1nbnVcc3JjL3JhbGxvYy5jDQotLS0g Li5cbWlycm9yXGVtYWNzLWJ6clx0cnVua1xzcmMvcmFsbG9jLmMJMjAxMC0xMS0xOCAwODo1Mzow NC4wMDAwMDAwMDAgKzAxMDANCisrKyBlbWFjcy1nbnVcc3JjL3JhbGxvYy5jCTIwMTAtMTItMTMg MjE6NTc6MjQuMDAwMDAwMDAwICswMTAwDQpAQCAtNjUxLDcgKzY1MSw3IEBADQogICAgICAgZWxz ZQ0KIAl7DQogCSAgbWVtbW92ZSAoYmxvYy0+bmV3X2RhdGEsIGJsb2MtPmRhdGEsIG9sZF9zaXpl KTsNCi0JICBtZW1zZXQgKGJsb2MtPm5ld19kYXRhICsgb2xkX3NpemUsIDAsIHNpemUgLSBvbGRf c2l6ZSk7DQorCSAgbWVtc2V0ICgoY2hhciAqKSBibG9jLT5uZXdfZGF0YSArIG9sZF9zaXplLCAw LCBzaXplIC0gb2xkX3NpemUpOw0KIAkgICpibG9jLT52YXJpYWJsZSA9IGJsb2MtPmRhdGEgPSBi bG9jLT5uZXdfZGF0YTsNCiAJfQ0KICAgICB9DQpkaWZmIC1ydU4gLi5cbWlycm9yXGVtYWNzLWJ6 clx0cnVua1xzcmMvcmVnZXguYyBlbWFjcy1nbnVcc3JjL3JlZ2V4LmMNCi0tLSAuLlxtaXJyb3Jc ZW1hY3MtYnpyXHRydW5rXHNyYy9yZWdleC5jCTIwMTAtMTEtMTggMDg6NTM6MDQuMDAwMDAwMDAw ICswMTAwDQorKysgZW1hY3MtZ251XHNyYy9yZWdleC5jCTIwMTAtMTItMTMgMTY6MDc6NDQuMDAw MDAwMDAwICswMTAwDQpAQCAtNTY5LDcgKzU2OSwxMiBAQA0KICNkZWZpbmUgTUlOKGEsIGIpICgo YSkgPCAoYikgPyAoYSkgOiAoYikpDQoNCiAvKiBUeXBlIG9mIHNvdXJjZS1wYXR0ZXJuIGFuZCBz dHJpbmcgY2hhcnMuICAqLw0KKyNpZmRlZiBfTVNDX1ZFUg0KKy8qIE1TVkMgYmFya3Mgd2l0aCBk b3VibGUgY29uc3QgKi8NCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgcmVfY2hhcjsNCisjZWxzZQ0K IHR5cGVkZWYgY29uc3QgdW5zaWduZWQgY2hhciByZV9jaGFyOw0KKyNlbmRpZg0KDQogdHlwZWRl ZiBjaGFyIGJvb2xlYW47DQogI2RlZmluZSBmYWxzZSAwDQpkaWZmIC1ydU4gLi5cbWlycm9yXGVt YWNzLWJ6clx0cnVua1xzcmMvcy9tcy13MzIuaCBlbWFjcy1nbnVcc3JjL3MvbXMtdzMyLmgNCi0t LSAuLlxtaXJyb3JcZW1hY3MtYnpyXHRydW5rXHNyYy9zL21zLXczMi5oCTIwMTAtMTEtMTggMDg6 NTM6MDQuMDAwMDAwMDAwICswMTAwDQorKysgZW1hY3MtZ251XHNyYy9zL21zLXczMi5oCTIwMTAt MTItMTMgMjM6MjA6MTguMDAwMDAwMDAwICswMTAwDQpAQCAtODcsNiArODcsMTAgQEANCiAjZGVm aW5lIElTX0FOWV9TRVAoX2NfKSAoSVNfRElSRUNUT1JZX1NFUCAoX2NfKSB8fCBJU19ERVZJQ0Vf U0VQIChfY18pKQ0KDQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyNpZmRlZiBfTVNDX1ZFUg0K K3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsNCisjZW5kaWYNCisNCiBzdHJ1Y3Qgc2ln YWN0aW9uIHsNCiAgIGludCBzYV9mbGFnczsNCiAgIHZvaWQgKCpzYV9oYW5kbGVyKShpbnQpOw0K QEAgLTE5MCw2ICsxOTQsMTIgQEANCg0KICNpZmRlZiBlbWFjcw0KDQorI2lmZGVmIF9NU0NfVkVS DQorI2luY2x1ZGUgPHN5cy90aW1lYi5oPg0KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKyNpbmNs dWRlIDxzaWduYWwuaD4NCisjZW5kaWYNCisNCiAvKiBDYWxscyB0aGF0IGFyZSBlbXVsYXRlZCBv ciBzaGFkb3dlZC4gICovDQogI3VuZGVmIGFjY2Vzcw0KICNkZWZpbmUgYWNjZXNzICBzeXNfYWNj ZXNzDQpAQCAtMjA4LDYgKzIxOCw5IEBADQogI3VuZGVmIGR1cDINCiAjZGVmaW5lIGR1cDIgICAg c3lzX2R1cDINCiAjZGVmaW5lIGZvcGVuICAgc3lzX2ZvcGVuDQorI2lmIDENCisjZGVmaW5lIGZz dGF0KGEsIGIpICAgc3lzX2ZzdGF0KGEsIGIpDQorI2VuZGlmDQogI2RlZmluZSBsaW5rICAgIHN5 c19saW5rDQogI2RlZmluZSBta2RpciAgIHN5c19ta2Rpcg0KICN1bmRlZiBta3RlbXANCkBAIC0y MjEsOSArMjM0LDEzIEBADQogI2RlZmluZSBybWRpciAgIHN5c19ybWRpcg0KICNkZWZpbmUgc2Vs ZWN0ICBzeXNfc2VsZWN0DQogI2RlZmluZSBzbGVlcCAgIHN5c19zbGVlcA0KKyNpZiAxDQorI2Rl ZmluZSBzdGF0KGEsIGIpICAgc3lzX3N0YXQoYSwgYikNCisjZW5kaWYNCiAjZGVmaW5lIHN0cmVy cm9yIHN5c19zdHJlcnJvcg0KICN1bmRlZiB1bmxpbmsNCiAjZGVmaW5lIHVubGluayAgc3lzX3Vu bGluaw0KKyNkZWZpbmUgdXRpbWUgICBzeXNfdXRpbWUNCiAjdW5kZWYgd3JpdGUNCiAjZGVmaW5l IHdyaXRlICAgc3lzX3dyaXRlDQoNCkBAIC0zMjUsMTMgKzM0MiwxNyBAQA0KICNkZWZpbmUgX1dJ TlNPQ0tfSA0KDQogLyogRGVmaW5lcyBzaXplX3QgYW5kIGFsbG9jYSAoKS4gICovDQotI2lmZGVm IFVTRV9DUlRfRExMDQorI2lmZGVmIGVtYWNzDQogI2RlZmluZSBtYWxsb2MgZV9tYWxsb2MNCiAj ZGVmaW5lIGZyZWUgICBlX2ZyZWUNCiAjZGVmaW5lIHJlYWxsb2MgZV9yZWFsbG9jDQogI2RlZmlu ZSBjYWxsb2MgZV9jYWxsb2MNCiAjZW5kaWYNCisjaWYgMA0KICNpbmNsdWRlIDxtYWxsb2MuaD4N CisjZWxzZQ0KKyNkZWZpbmUgYWxsb2NhIF9hbGxvY2ENCisjZW5kaWYNCg0KICNpbmNsdWRlIDxz eXMvc3RhdC5oPg0KDQpkaWZmIC1ydU4gLi5cbWlycm9yXGVtYWNzLWJ6clx0cnVua1xzcmMvdzMy LmMgZW1hY3MtZ251XHNyYy93MzIuYw0KLS0tIC4uXG1pcnJvclxlbWFjcy1ienJcdHJ1bmtcc3Jj L3czMi5jCTIwMTAtMTEtMTggMDg6NTM6MDQuMDAwMDAwMDAwICswMTAwDQorKysgZW1hY3MtZ251 XHNyYy93MzIuYwkyMDEwLTEyLTEzIDIxOjUyOjM3LjAwMDAwMDAwMCArMDEwMA0KQEAgLTkyLDcg KzkyLDEwIEBADQoNCiAjaW5jbHVkZSA8dGxoZWxwMzIuaD4NCiAjaW5jbHVkZSA8cHNhcGkuaD4N CisjaWZkZWYgX01TQ19WRVINCisjZWxzZQ0KICNpbmNsdWRlIDx3MzJhcGkuaD4NCisjZW5kaWYN CiAjaWYgIWRlZmluZWQoX19NSU5HVzMyX18pIHx8IF9fVzMyQVBJX01BSk9SX1ZFUlNJT04gPCAz IHx8IChfX1czMkFQSV9NQUpPUl9WRVJTSU9OID09IDMgJiYgX19XMzJBUElfTUlOT1JfVkVSU0lP TiA8IDE1KQ0KIC8qIFRoaXMgZWl0aGVyIGlzIG5vdCBpbiBwc2FwaS5oIG9yIGd1YXJkZWQgYnkg aGlnaGVyIHZhbHVlIG9mDQogICAgX1dJTjMyX1dJTk5UIHRoYW4gd2hhdCB3ZSB1c2UuICB3MzJh cGkgc3VwbGllZCB3aXRoIE1pbkdXIDMuMTUNCkBAIC0xNTQxLDcgKzE1NDQsNyBAQA0KIAkgcmVh ZC1vbmx5IGZpbGVzeXN0ZW0sIGxpa2UgQ0QtUk9NIG9yIGEgd3JpdGUtcHJvdGVjdGVkIGZsb3Bw eS4NCiAJIFRoZSBvbmx5IHdheSB0byBiZSByZWFsbHkgc3VyZSBpcyB0byBhY3R1YWxseSBjcmVh dGUgYSBmaWxlIGFuZA0KIAkgc2VlIGlmIGl0IHN1Y2NlZWRzLiAgQnV0IEkgdGhpbmsgdGhhdCdz IHRvbyBtdWNoIHRvIGFzay4gICovDQotICAgICAgaWYgKHRtcCAmJiBfYWNjZXNzICh0bXAsIERf T0spID09IDApDQorICAgICAgaWYgKHRtcCAmJiBzeXNfYWNjZXNzICh0bXAsIERfT0spID09IDAp DQogCXsNCiAJICBjaGFyICogdmFyID0gYWxsb2NhIChzdHJsZW4gKHRtcCkgKyA4KTsNCiAJICBz cHJpbnRmICh2YXIsICJUTVBESVI9JXMiLCB0bXApOw0KQEAgLTE4ODcsNiArMTg5MCw4IEBADQog ICByZXR1cm4gY29uZmlndXJhdGlvbl9idWZmZXI7DQogfQ0KDQorI2RlZmluZSBzdHJpbmdlcigg eCApICggI3ggKQ0KKw0KIGNoYXIgKg0KIGdldF9lbWFjc19jb25maWd1cmF0aW9uX29wdGlvbnMg KHZvaWQpDQogew0KQEAgLTE5MDAsMTAgKzE5MDUsMTAgQEANCiAgICAgLyogY29uZmlndXJlLmJh dCBhbHJlYWR5IHNldHMgVVNFUl9DRkxBR1MgYW5kIFVTRVJfTERGTEFHUw0KICAgICAgICB3aXRo IGEgc3RhcnRpbmcgc3BhY2UgdG8gc2F2ZSB3b3JrIGhlcmUuICAqLw0KICNpZmRlZiBVU0VSX0NG TEFHUw0KLSAgICAiIC0tY2ZsYWdzIiwgVVNFUl9DRkxBR1MsDQorICAgICIgLS1jZmxhZ3MiLCBz dHJpbmdlcihVU0VSX0NGTEFHUyksDQogI2VuZGlmDQogI2lmZGVmIFVTRVJfTERGTEFHUw0KLSAg ICAiIC0tbGRmbGFncyIsIFVTRVJfTERGTEFHUywNCisgICAgIiAtLWxkZmxhZ3MiLCBzdHJpbmdl cihVU0VSX0xERkxBR1MpLA0KICNlbmRpZg0KICAgICBOVUxMDQogICB9Ow0KZGlmZiAtcnVOIC4u XG1pcnJvclxlbWFjcy1ienJcdHJ1bmtcc3JjL3czMmZucy5jIGVtYWNzLWdudVxzcmMvdzMyZm5z LmMNCi0tLSAuLlxtaXJyb3JcZW1hY3MtYnpyXHRydW5rXHNyYy93MzJmbnMuYwkyMDEwLTExLTE4 IDA4OjUzOjA0LjAwMDAwMDAwMCArMDEwMA0KKysrIGVtYWNzLWdudVxzcmMvdzMyZm5zLmMJMjAx MC0xMi0xMyAyMTo1OToxNy4wMDAwMDAwMDAgKzAxMDANCkBAIC0yNDYsNyArMjQ2LDcgQEANCiB9 Ow0KDQogLyogUmVwb3J0ZWRseSwgVlMgNiBkb2VzIG5vdCBoYXZlIHRoaXMgaW4gaXRzIGhlYWRl cnMuICAqLw0KLSNpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxMzAwDQorI2lm IGRlZmluZWQoX01TQ19WRVIpIC8qICYmIF9NU0NfVkVSIDwgMTMwMCAqLw0KIERFQ0xBUkVfSEFO RExFKEhNT05JVE9SKTsNCiAjZW5kaWYNCg0KZGlmZiAtcnVOIC4uXG1pcnJvclxlbWFjcy1ienJc dHJ1bmtcbGliLXNyYy9tb3ZlbWFpbC5jIGVtYWNzLWdudVxsaWItc3JjL21vdmVtYWlsLmMNCi0t LSAuLlxtaXJyb3JcZW1hY3MtYnpyXHRydW5rXGxpYi1zcmMvbW92ZW1haWwuYwkyMDEwLTExLTE4 IDA4OjUzOjA0LjAwMDAwMDAwMCArMDEwMA0KKysrIGVtYWNzLWdudVxsaWItc3JjL21vdmVtYWls LmMJMjAxMC0xMi0xMyAyMzoyMToyNy4wMDAwMDAwMDAgKzAxMDANCkBAIC0xNjQsNiArMTY0LDEw IEBADQogLyogTm9uemVybyBtZWFucyB0aGlzIGlzIG5hbWUgb2YgYSBsb2NrIGZpbGUgdG8gZGVs ZXRlIG9uIGZhdGFsIGVycm9yLiAgKi8NCiBjaGFyICpkZWxldGVfbG9ja25hbWU7DQoNCisjaWZk ZWYgX01TQ19WRVINCit0eXBlZGVmIGludCBzc2l6ZV90Ow0KKyNlbmRpZg0KKw0KIGludA0KIG1h aW4gKGludCBhcmdjLCBjaGFyICoqYXJndikNCiB7DQpkaWZmIC1ydU4gLi5cbWlycm9yXGVtYWNz LWJ6clx0cnVua1xudC9jb25maWd1cmUuYmF0IGVtYWNzLWdudVxudC9jb25maWd1cmUuYmF0DQot LS0gLi5cbWlycm9yXGVtYWNzLWJ6clx0cnVua1xudC9jb25maWd1cmUuYmF0CTIwMTAtMTEtMTgg MDg6NTM6MDQuMDAwMDAwMDAwICswMTAwDQorKysgZW1hY3MtZ251XG50L2NvbmZpZ3VyZS5iYXQJ MjAxMC0xMi0xMyAxNjoxMDoyNC4wMDAwMDAwMDAgKzAxMDANCkBAIC0yOTQsNiArMjk0LDE4IEBA DQogcmVtICAgQXV0by1kZXRlY3QgY29tcGlsZXIgaWYgbm90IHNwZWNpZmllZCwgYW5kIHZhbGlk YXRlIEdDQyBpZiBjaG9zZW4uDQoNCiA6Y2hlY2tjb21waWxlcg0KKw0KK3JlbSBzZXQgU0RLIGVu dmlyb25tZW50DQoraWYgKCVub29wdCUpID09IChZKSAoDQorICAgY2FsbCAiYzpcUHJvZ3JhbSBG aWxlc1xNaWNyb3NvZnQgU0RLc1xXaW5kb3dzXHY3LjFcQmluXFNldEVudi5jbWQiIC94ODYgL3dp bjcgL0RlYnVnDQorICAgc2V0IG5vZGVidWc9Tg0KKykNCisNCitpZiAoJW5vZGVidWclKSA9PSAo WSkgKA0KKyAgIGNhbGwgImM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFNES3NcV2luZG93c1x2 Ny4xXEJpblxTZXRFbnYuY21kIiAveDg2IC93aW43IC9SZWxlYXNlDQorICAgc2V0IG5vb3B0PU4N CispDQorDQogaWYgKCVDT01QSUxFUiUpPT0oY2wpIGdvdG8gY29tcGlsZXJjaGVja2RvbmUNCiBp ZiAoJUNPTVBJTEVSJSk9PShnY2MpIGdvdG8gY2hlY2tnY2MNCg0KZGlmZiAtcnVOIC4uXG1pcnJv clxlbWFjcy1ienJcdHJ1bmtcbnQvbWFrZWZpbGUudzMyLWluIGVtYWNzLWdudVxudC9tYWtlZmls ZS53MzItaW4NCi0tLSAuLlxtaXJyb3JcZW1hY3MtYnpyXHRydW5rXG50L21ha2VmaWxlLnczMi1p bgkyMDEwLTExLTE4IDA4OjUzOjA0LjAwMDAwMDAwMCArMDEwMA0KKysrIGVtYWNzLWdudVxudC9t YWtlZmlsZS53MzItaW4JMjAxMC0xMi0xMyAyMTo0Mzo0NS4wMDAwMDAwMDAgKzAxMDANCkBAIC0z Niw2ICszNiw3IEBADQoNCiAuUEhPTlk6ICQoQUxMKQ0KDQorQVJDSF9DRkxBR1MJPSAkKEFSQ0hf Q0ZMQUdTKSAtSS4uL250L2luYyAtSS4uL3NyYw0KDQogYWRkcG06CQkgIHN0YW1wX0JMRCAkKEJM RCkvYWRkcG0uZXhlDQogJChCTEQpL2FkZHBtLmV4ZTogJChCTEQpL2FkZHBtLiQoTykNCkBAIC0z MDQsMTUgKzMwNSwxNSBAQA0KIAkkKE1BS0UpICQoTUZMQUdTKSBjbGVhbg0KIAljZCAuLlxkb2Nc bGlzcGludHJvDQogCSQoTUFLRSkgJChNRkxBR1MpIGNsZWFuDQotCWNkIC4uXGRvY1xsaXNwcmVm DQorCWNkIC4uXC4uXGRvY1xsaXNwcmVmDQogCSQoTUFLRSkgJChNRkxBR1MpIGNsZWFuDQotCWNk IC4uXGxlaW0NCisJY2QgLi5cLi5cbGVpbQ0KIAkkKE1BS0UpICQoTUZMQUdTKSBjbGVhbg0KIAlj ZCAuLlxkb2NcZW1hY3MNCiAJJChNQUtFKSAkKE1GTEFHUykgY2xlYW4NCi0JY2QgLi5cZG9jXG1p c2MNCisJY2QgLi5cLi5cZG9jXG1pc2MNCiAJJChNQUtFKSAkKE1GTEFHUykgY2xlYW4NCi0JY2Qg Li5cbnQNCisJY2QgLi5cLi5cbnQNCg0KIGNsZWFuLW90aGVyLWRpcnMtZ21ha2U6DQogCSQoTUFL RSkgJChNRkxBR1MpICQoWE1GTEFHUykgLUMgLi4vbGliLXNyYyBjbGVhbg0KQEAgLTM2NiwxMyAr MzY3LDEzIEBADQogCSQoTUFLRSkgJChNRkxBR1MpIGRpc3RjbGVhbg0KIAljZCAuLlxkb2NcZW1h Y3MNCiAJJChNQUtFKSAkKE1GTEFHUykgZGlzdGNsZWFuDQotCWNkIC4uXGRvY1xtaXNjDQorCWNk IC4uXC4uXGRvY1xtaXNjDQogCSQoTUFLRSkgJChNRkxBR1MpIGRpc3RjbGVhbg0KLQljZCAuLlxk b2NcbGlzcGludHJvDQorCWNkIC4uXC4uXGRvY1xsaXNwaW50cm8NCiAJJChNQUtFKSAkKE1GTEFH UykgZGlzdGNsZWFuDQotCWNkIC4uXGRvY1xsaXNwcmVmDQorCWNkIC4uXC4uXGRvY1xsaXNwcmVm DQogCSQoTUFLRSkgJChNRkxBR1MpIGRpc3RjbGVhbg0KLQljZCAuLlxudA0KKwljZCAuLlwuLlxu dA0KDQogZGlzdGNsZWFuLW90aGVyLWRpcnMtZ21ha2U6DQogCSQoTUFLRSkgJChNRkxBR1MpICQo WE1GTEFHUykgLUMgLi4vbGliLXNyYyBkaXN0Y2xlYW4NCkBAIC0zOTcsMTMgKzM5OCwxMyBAQA0K IAkkKE1BS0UpICQoTUZMQUdTKSBtYWludGFpbmVyLWNsZWFuDQogCWNkIC4uXGRvY1xlbWFjcw0K IAkkKE1BS0UpICQoTUZMQUdTKSBtYWludGFpbmVyLWNsZWFuDQotCWNkIC4uXGRvY1xtaXNjDQor CWNkIC4uXC4uXGRvY1xtaXNjDQogCSQoTUFLRSkgJChNRkxBR1MpIG1haW50YWluZXItY2xlYW4N Ci0JY2QgLi5cZG9jXGxpc3BpbnRybw0KKwljZCAuLlwuLlxkb2NcbGlzcGludHJvDQogCSQoTUFL RSkgJChNRkxBR1MpIG1haW50YWluZXItY2xlYW4NCi0JY2QgLi5cZG9jXGxpc3ByZWYNCisJY2Qg Li5cLi5cZG9jXGxpc3ByZWYNCiAJJChNQUtFKSAkKE1GTEFHUykgbWFpbnRhaW5lci1jbGVhbg0K LQljZCAuLlxudA0KKwljZCAuLlwuLlxudA0KDQogbWFpbnRhaW5lci1jbGVhbi1vdGhlci1kaXJz LWdtYWtlOg0KIAkkKE1BS0UpICQoTUZMQUdTKSAkKFhNRkxBR1MpIC1DIC4uL2xpYi1zcmMgbWFp bnRhaW5lci1jbGVhbg0KQEAgLTQyMiw5ICs0MjMsOSBAQA0KDQogZnJjOg0KIFRBR1MtZ21ha2U6 IGZyYw0KLQkuLi9saWItc3JjLyQoQkxEKS9ldGFncyAkKENVUkRJUikvKi5jDQotCSQoTUFLRSkg JChNRkxBR1MpIC1DIC4uL3NyYyBUQUdTIFRBR1MtTElTUA0KLQkkKE1BS0UpICQoTUZMQUdTKSAt QyAuLi9saWItc3JjIFRBR1MNCisjIC4uL2xpYi1zcmMvJChCTEQpL2V0YWdzICQoQ1VSRElSKS8q LmMNCisjICQoTUFLRSkgJChNRkxBR1MpIC1DIC4uL3NyYyBUQUdTIFRBR1MtTElTUA0KKyMgJChN QUtFKSAkKE1GTEFHUykgLUMgLi4vbGliLXNyYyBUQUdTDQoNCiBUQUdTLW5tYWtlOg0KIAllY2hv IFRoaXMgdGFyZ2V0IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBOTWFrZQ0KZGlmZiAtcnVOIC4uXG1p cnJvclxlbWFjcy1ienJcdHJ1bmtcbnQvbm1ha2UuZGVmcyBlbWFjcy1nbnVcbnQvbm1ha2UuZGVm cw0KLS0tIC4uXG1pcnJvclxlbWFjcy1ienJcdHJ1bmtcbnQvbm1ha2UuZGVmcwkyMDEwLTExLTE4 IDA4OjUzOjA0LjAwMDAwMDAwMCArMDEwMA0KKysrIGVtYWNzLWdudVxudC9ubWFrZS5kZWZzCTIw MTAtMTItMTMgMTY6MTM6MjIuMDAwMDAwMDAwICswMTAwDQpAQCAtMTEwLDcgKzExMCwxMyBAQA0K IFJDX09VVAkJPSAtRm8NCiBSQ19JTkNMVURFCT0gLWkNCg0KLWxpYmMJCT0gbGliYy5saWINCish aWZkZWYgVVNFX0NSVF9ETEwNCitsaWJjCQk9IG1zdmNydCQoRCkubGliDQorWENGTEFHUwkJPSAt SS4uL250L2luYyAtSS4uL3NyYyAtRF9ETEwgLURfTVQgLURVU0VfQ1JUX0RMTD0xDQorIWVsc2UN CitsaWJjCQk9IGxpYmNtdCQoRCkubGliDQorWENGTEFHUwkJPSAtSS4uL250L2luYyAtSS4uL3Ny YyAtRF9NVA0KKyFlbmRpZg0KIGJhc2VsaWJzCT0NCiBPCQk9IG9iag0KIEEJCT0gbGliDQpAQCAt MTQzLDExICsxNDksMTUgQEANCiBDSEVDS0lOR19DRkxBR1MJPQ0KICFlbmRpZg0KDQotQ0ZMQUdT ICAgICAgICAgID0gLUkuICQoQVJDSF9DRkxBR1MpIFwNCitDRkxBR1MgICAgICAgICAgPSAtSS4g JChYQ0ZMQUdTKSAkKEFSQ0hfQ0ZMQUdTKSBcDQogCQkgICQoREVCVUdfQ0ZMQUdTKSAkKENIRUNL SU5HX0NGTEFHUykgJChVU0VSX0NGTEFHUykgJChMT0NBTF9GTEFHUykNCiBFTUFDU19FWFRSQV9D X0ZMQUdTID0NCg0KLVNZU19MREZMQUdTCT0gLW5vbG9nbyAtcmVsZWFzZSAtaW5jcmVtZW50YWw6 bm8gLXZlcnNpb246My4xMCAtc3dhcHJ1bjpjZCAtc3dhcHJ1bjpuZXQgc2V0YXJndi5vYmoNCish aWZkZWYgTk9PUFQNCitTWVNfTERGTEFHUwk9IC1ub2xvZ28gLW1hbmlmZXN0IC1keW5hbWljYmFz ZTpubyAtZGVidWcgLWluY3JlbWVudGFsOm5vIC12ZXJzaW9uOjMuMTAgLXN3YXBydW46Y2QgLXN3 YXBydW46bmV0IHNldGFyZ3Yub2JqDQorIWVsc2UNCitTWVNfTERGTEFHUwk9IC1ub2xvZ28gLW1h bmlmZXN0IC1keW5hbWljYmFzZTpubyAtcmVsZWFzZSAtaW5jcmVtZW50YWw6bm8gLXZlcnNpb246 My4xMCAtc3dhcHJ1bjpjZCAtc3dhcHJ1bjpuZXQgc2V0YXJndi5vYmoNCishZW5kaWYNCg0KICMg c2VlIGNvbW1lbnRzIGluIGFsbG9jYXRlX2hlYXAgaW4gdzMyaGVhcC5jIGJlZm9yZSBjaGFuZ2lu ZyBhbnkgb2YgdGhlDQogIyAtc3RhY2ssIC1oZWFwLCBvciAtYmFzZSBzZXR0aW5ncy4NCkBAIC0x ODMsMTYgKzE5MywxOCBAQA0KICFpZmRlZiBOT0RFQlVHDQogREVCVUdfRkxBRyA9DQogREVCVUdf TElOSyA9DQorRCA9DQogIWVsc2UNCiBERUJVR19GTEFHID0gLVppDQotREVCVUdfTElOSyA9IC1k ZWJ1ZzpmdWxsDQorREVCVUdfTElOSyA9IC1kZWJ1Zw0KK0QgPSBkDQogIWVuZGlmDQoNCiAhaWYg IiQoQVJDSCkiID09ICJpMzg2Ig0KICFpZmRlZiBOT09QVA0KLUFSQ0hfQ0ZMQUdTICAgICA9IC1u b2xvZ28gLWMgLVplbCAtVzIgLUg2MyAtT2QgLUczZCAtWnA4ICQoREVCVUdfRkxBRykNCitBUkNI X0NGTEFHUyAgICAgPSAtbm9sb2dvIC1EX1g4Nl89MSAtYyAtWmwgLVpwOCAtVzIgLU9kIC1HZCAk KERFQlVHX0ZMQUcpDQogIWVsc2UNCi1BUkNIX0NGTEFHUyAgICAgPSAtbm9sb2dvIC1jIC1aZWwg LVcyIC1INjMgLU94c2IyIC1PeS0gLUc2ZEYgLVpwOCAkKERFQlVHX0ZMQUcpDQorQVJDSF9DRkxB R1MgICAgID0gLW5vbG9nbyAtRF9YODZfPTEgLWMgLVpsIC1acDggLVcyIC1PaSAtT3QgLU95LSAt T2IyIC1HRiAtR3kgLUdkICQoREVCVUdfRkxBRykNCiAhZW5kaWYNCiBBUkNIX0xERkxBR1MJPSAk KFNZU19MREZMQUdTKQ0KDQo= --00151748e728f7f1030497526677--