From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lennart Borgman Newsgroups: gmane.emacs.devel Subject: Re: Messages in non-console mode in emacsclient.c Date: Tue, 21 Nov 2006 18:20:36 +0100 Message-ID: <45633564.8010404@student.lu.se> References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080206020504060205030806" X-Trace: sea.gmane.org 1164129685 832 80.91.229.2 (21 Nov 2006 17:21:25 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 21 Nov 2006 17:21:25 +0000 (UTC) Cc: Emacs Devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Nov 21 18:21:23 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GmZIq-0001dF-Rj for ged-emacs-devel@m.gmane.org; Tue, 21 Nov 2006 18:21:13 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GmZIn-0002AK-C3 for ged-emacs-devel@m.gmane.org; Tue, 21 Nov 2006 12:20:57 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GmZIb-0002AF-Cl for emacs-devel@gnu.org; Tue, 21 Nov 2006 12:20:45 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GmZIa-0002A3-4l for emacs-devel@gnu.org; Tue, 21 Nov 2006 12:20:44 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GmZIZ-0002A0-Vv for emacs-devel@gnu.org; Tue, 21 Nov 2006 12:20:44 -0500 Original-Received: from [80.76.149.213] (helo=ch-smtp02.sth.basefarm.net) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1GmZIY-0006rG-2Q for emacs-devel@gnu.org; Tue, 21 Nov 2006 12:20:43 -0500 Original-Received: from c83-254-145-24.bredband.comhem.se ([83.254.145.24]:60659 helo=[192.168.123.121]) by ch-smtp02.sth.basefarm.net with esmtp (Exim 4.63) (envelope-from ) id 1GmZIU-0001tl-6h; Tue, 21 Nov 2006 18:20:40 +0100 User-Agent: Thunderbird 1.5.0.8 (Windows/20061025) Original-To: Juanma Barranquero In-Reply-To: X-Scan-Result: No virus found in message 1GmZIU-0001tl-6h. X-Scan-Signature: ch-smtp02.sth.basefarm.net 1GmZIU-0001tl-6h ac04a29a5d2629049110b3fe08147341 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:62597 Archived-At: This is a multi-part message in MIME format. --------------080206020504060205030806 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Juanma Barranquero wrote: Forgot to attach. --------------080206020504060205030806 Content-Type: text/plain; name="emacsclient.c" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="emacsclient.c" LyogQ2xpZW50IHByb2Nlc3MgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBHTlUgRW1hY3MgYWN0 aW5nIGFzIHNlcnZlci4NCiAgIENvcHlyaWdodCAoQykgMTk4NiwgMTk4NywgMTk5NCwgMTk5 OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwNCiAgIDIwMDUsIDIwMDYgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQoNCiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdO VSBFbWFjcy4NCg0KICAgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91 ciBvcHRpb24pDQogICBhbnkgbGF0ZXIgdmVyc2lvbi4NCg0KICAgR05VIEVtYWNzIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQ0KICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCg0KICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAgIGFsb25nIHdpdGggR05VIEVtYWNz OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8NCiAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsDQogICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovDQoNCg0KLyogRklY LU1FOiBUaGlzIGZpbGUgY3VycmVudGx5IGRvZXMgbm90IGhhbmRsZSBub24tYXNjaWkgZmls ZSBuYW1lcw0KICAgd2hlbiBzdGFydGluZyBlbWFjcy4gTWF5YmUgaXQgZG9lcyBub3QgZWl0 aGVyIGZvciBmaWxlcz8gKi8NCg0KDQojZGVmaW5lIE5PX1NIT1JUTkFNRVMNCg0KI2lmZGVm IEhBVkVfQ09ORklHX0gNCiNpbmNsdWRlIDxjb25maWcuaD4NCiNlbmRpZg0KDQojaWZkZWYg V0lORE9XU05UDQoNCi8qIGNvbmZpZy5oIGRlZmluZXMgdGhlc2UsIHdoaWNoIGRpc2FibGVz IHNvY2tldHMgYWx0b2dldGhlciEgKi8NCiMgdW5kZWYgX1dJTlNPQ0tBUElfDQojIHVuZGVm IF9XSU5TT0NLX0gNCg0KIyBpbmNsdWRlIDxtYWxsb2MuaD4NCiMgaW5jbHVkZSA8c3RkbGli Lmg+DQojIGluY2x1ZGUgPHdpbmRvd3MuaD4NCg0KIyBkZWZpbmUgTk9fU09DS0VUU19JTl9G SUxFX1NZU1RFTQ0KDQojIGRlZmluZSBIU09DS0VUIFNPQ0tFVA0KIyBkZWZpbmUgQ0xPU0Vf U09DS0VUIGNsb3Nlc29ja2V0DQojIGRlZmluZSBJTklUSUFMSVpFKCkgKGluaXRpYWxpemVf c29ja2V0cyAoKSkNCg0KI2Vsc2UgLyogIVdJTkRPV1NOVCAqLw0KDQojIGluY2x1ZGUgPHN5 cy90eXBlcy5oPg0KDQojIGlmZGVmIEhBVkVfSU5FVF9TT0NLRVRTDQojICBpbmNsdWRlIDxu ZXRpbmV0L2luLmg+DQojIGVuZGlmDQoNCiMgZGVmaW5lIElOVkFMSURfU09DS0VUIC0xDQoj IGRlZmluZSBIU09DS0VUIGludA0KIyBkZWZpbmUgQ0xPU0VfU09DS0VUIGNsb3NlDQojIGRl ZmluZSBJTklUSUFMSVpFKCkNCg0KI2VuZGlmIC8qICFXSU5ET1dTTlQgKi8NCg0KI3VuZGVm IHNpZ25hbA0KDQojaW5jbHVkZSA8c3RkYXJnLmg+DQojaW5jbHVkZSA8Y3R5cGUuaD4NCiNp bmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgImdldG9wdC5oIg0KI2lmZGVmIEhBVkVfVU5J U1REX0gNCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNlbmRpZg0KDQojaWZkZWYgVk1TDQojIGlu Y2x1ZGUgInZtcy1wd2QuaCINCiNlbHNlIC8qIG5vdCBWTVMgKi8NCiNpZmRlZiBXSU5ET1dT TlQNCiMgaW5jbHVkZSA8aW8uaD4NCiNlbHNlIC8qIG5vdCBXSU5ET1dTTlQgKi8NCiMgaW5j bHVkZSA8cHdkLmg+DQojZW5kaWYgLyogbm90IFdJTkRPV1NOVCAqLw0KI2VuZGlmIC8qIG5v dCBWTVMgKi8NCg0KY2hhciAqZ2V0ZW52ICgpLCAqZ2V0d2QgKCk7DQpjaGFyICooZ2V0Y3dk KSAoKTsNCg0KI2lmbmRlZiBWRVJTSU9ODQojZGVmaW5lIFZFUlNJT04gInVuc3BlY2lmaWVk Ig0KI2VuZGlmDQoMDQojZGVmaW5lIFNFTkRfU1RSSU5HKGRhdGEpIChzZW5kX3RvX2VtYWNz IChzLCAoZGF0YSkpKQ0KI2RlZmluZSBTRU5EX1FVT1RFRChkYXRhKSAocXVvdGVfZmlsZV9u YW1lIChzLCAoZGF0YSkpKQ0KDQojaWZuZGVmIEVYSVRfU1VDQ0VTUw0KI2RlZmluZSBFWElU X1NVQ0NFU1MgMA0KI2VuZGlmDQoNCiNpZm5kZWYgRVhJVF9GQUlMVVJFDQojZGVmaW5lIEVY SVRfRkFJTFVSRSAxDQojZW5kaWYNCg0KI2lmbmRlZiBGQUxTRQ0KI2RlZmluZSBGQUxTRSAw DQojZW5kaWYNCg0KI2lmbmRlZiBUUlVFDQojZGVmaW5lIFRSVUUgMQ0KI2VuZGlmDQoNCiNp Zm5kZWYgTk9fUkVUVVJODQojZGVmaW5lIE5PX1JFVFVSTg0KI2VuZGlmDQoMDQovKiBOYW1l IHVzZWQgdG8gaW52b2tlIHRoaXMgcHJvZ3JhbS4gICovDQpjaGFyICpwcm9nbmFtZTsNCg0K LyogTm9uemVybyBtZWFucyBkb24ndCB3YWl0IGZvciBhIHJlc3BvbnNlIGZyb20gRW1hY3Mu ICAtLW5vLXdhaXQuICAqLw0KaW50IG5vd2FpdCA9IDA7DQoNCi8qIE5vbnplcm8gbWVhbnMg YXJncyBhcmUgZXhwcmVzc2lvbnMgdG8gYmUgZXZhbHVhdGVkLiAgLS1ldmFsLiAgKi8NCmlu dCBldmFsID0gMDsNCg0KLyogVGhlIGRpc3BsYXkgb24gd2hpY2ggRW1hY3Mgc2hvdWxkIHdv cmsuICAtLWRpc3BsYXkuICAqLw0KY2hhciAqZGlzcGxheSA9IE5VTEw7DQoNCi8qIElmIG5v bi1OVUxMLCB0aGUgbmFtZSBvZiBhbiBlZGl0b3IgdG8gZmFsbGJhY2sgdG8gaWYgdGhlIHNl cnZlcg0KICAgaXMgbm90IHJ1bm5pbmcuICAtLWFsdGVybmF0ZS1lZGl0b3IuICAgKi8NCmNv bnN0IGNoYXIgKmFsdGVybmF0ZV9lZGl0b3IgPSBOVUxMOw0KY29uc3QgY2hhciAqc3RhcnRf dGltZW91dCA9IE5VTEw7DQppbnQgc3RhcnRfdGltZW91dF9pbnQgPSAtMTsNCg0KLyogSWYg bm9uLU5VTEwsIHRoZSBmaWxlbmFtZSBvZiB0aGUgVU5JWCBzb2NrZXQuICAqLw0KY2hhciAq c29ja2V0X25hbWUgPSBOVUxMOw0KDQovKiBJZiBub24tTlVMTCwgdGhlIGZpbGVuYW1lIG9m IHRoZSBhdXRoZW50aWNhdGlvbiBmaWxlLiAgKi8NCmNoYXIgKnNlcnZlcl9maWxlID0gTlVM TDsNCg0Kdm9pZCBwcmludF9oZWxwX2FuZF9leGl0ICgpIE5PX1JFVFVSTjsNCg0Kc3RydWN0 IG9wdGlvbiBsb25nb3B0c1tdID0NCiAgew0KICAgIHsgIm5vLXdhaXQiLAkgICAgICAgIG5v X2FyZ3VtZW50LAkgICBOVUxMLCAnbicgfSwNCiAgICB7ICJldmFsIiwJICAgICAgICBub19h cmd1bWVudCwJICAgTlVMTCwgJ2UnIH0sDQogICAgeyAiaGVscCIsCSAgICAgICAgbm9fYXJn dW1lbnQsCSAgIE5VTEwsICdIJyB9LA0KICAgIHsgInZlcnNpb24iLAkgICAgICAgIG5vX2Fy Z3VtZW50LAkgICBOVUxMLCAnVicgfSwNCiAgICB7ICJhbHRlcm5hdGUtZWRpdG9yIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsICdhJyB9LA0KICAgIHsgInN0YXJ0LXRpbWVvdXQiLCAg ICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3QnIH0sDQojaWZuZGVmIE5PX1NPQ0tFVFNf SU5fRklMRV9TWVNURU0NCiAgICB7ICJzb2NrZXQtbmFtZSIsICAgICAgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdzJyB9LA0KI2VuZGlmDQogICAgeyAic2VydmVyLWZpbGUiLCAgICAg IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZicgfSwNCiAgICB7ICJkaXNwbGF5IiwJICAg ICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnIH0sDQogICAgeyAwLCAwLCAwLCAw IH0NCiAgfTsNCg0KDQovKiBNZXNzYWdlIGZ1bmN0aW9ucy4gKi8NCg0KI2lmZGVmIFdJTkRP V1NOVA0KDQp2b2lkDQpzaG93X3czMnN5c19lcnJvcjIoRFdPUkQgZHdFcnJvciwgTFBUU1RS IGxwc3pGdW5jdGlvbikNCnsNCiAgTFBWT0lEIGxwTXNnQnVmOw0KICBMUFZPSUQgbHBEaXNw bGF5QnVmOw0KICBGb3JtYXRNZXNzYWdlKA0KICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNT QUdFX0FMTE9DQVRFX0JVRkZFUiB8DQogICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0Vf RlJPTV9TWVNURU0sDQogICAgICAgICAgICAgICAgTlVMTCwNCiAgICAgICAgICAgICAgICBk d0Vycm9yLA0KICAgICAgICAgICAgICAgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJM QU5HX0RFRkFVTFQpLA0KICAgICAgICAgICAgICAgIChMUFRTVFIpICZscE1zZ0J1ZiwNCiAg ICAgICAgICAgICAgICAwLCBOVUxMICk7DQoNCiAgbHBEaXNwbGF5QnVmID0gTG9jYWxBbGxv YyhMTUVNX1pFUk9JTklULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihs cE1zZ0J1Zikrc3RybGVuKGxwc3pGdW5jdGlvbikrNDApOw0KICB3c3ByaW50ZihscERpc3Bs YXlCdWYsDQogICAgICAgICAgICIlcyBmYWlsZWQgd2l0aCBlcnJvciAlZDogJXMiLA0KICAg ICAgICAgICBscHN6RnVuY3Rpb24sIGR3RXJyb3IsIGxwTXNnQnVmKTsNCiAgTWVzc2FnZUJv eChOVUxMLCBscERpc3BsYXlCdWYsICJFcnJvciIsIE1CX09LKTsNCg0KICBMb2NhbEZyZWUo bHBNc2dCdWYpOw0KICBMb2NhbEZyZWUobHBEaXNwbGF5QnVmKTsNCiAgRXhpdFByb2Nlc3Mo ZHdFcnJvcik7DQp9DQoNCnZvaWQNCnNob3dfdzMyc3lzX2Vycm9yMShMUFRTVFIgbHBzekZ1 bmN0aW9uKQ0Kew0KICBEV09SRCBkdyA9IEdldExhc3RFcnJvcigpOw0KDQogIHNob3dfdzMy c3lzX2Vycm9yMihkdywgbHBzekZ1bmN0aW9uKTsNCn0NCg0KDQovKiBJIGZpcnN0IHRyaWVk IHRvIGNoZWNrIGZvciBTVERPVVQuICBUaGUgY2hlY2sgZGlkIG5vdCB3b3JrLA0KICAgSSBn ZXQgYSB2YWxpZCBoYW5kbGUgYWxzbyBpbiBub25jb25zb2xlIGFwcHMuDQogICBJbnN0ZWFk IEkgdGVzdCBmb3IgY29uc29sZSB0aXRsZSwgd2hpY2ggc2VlbXMgdG8gd29yay4gICovDQpp bnQNCnczMl93aW5kb3dfYXBwKCkNCnsNCiAgc3RhdGljIGludCB3aW5kb3dfYXBwID0gLTE7 DQogIGNoYXIgc3pUaXRsZVtNQVhfUEFUSF07DQoNCiAgaWYgKHdpbmRvd19hcHAgPCAwKQ0K ICAgIHdpbmRvd19hcHAgPSAoR2V0Q29uc29sZVRpdGxlQSAoc3pUaXRsZSwgTUFYX1BBVEgp ID09IDApOw0KDQogIHJldHVybiB3aW5kb3dfYXBwOw0KfQ0KDQojZW5kaWYNCg0KDQp2b2lk DQptZXNzYWdlIChpbnQgaXNfZXJyb3IsIGNoYXIgKm1lc3NhZ2UsIC4uLikNCnsNCiAgY2hh ciBidWZbMjA0OF07DQogIGNoYXIgKm1zZyA9IGJ1ZjsNCiAgdmFfbGlzdCBhcmdzOw0KDQog IHZhX3N0YXJ0IChhcmdzLCBtZXNzYWdlKTsNCg0KICBpZiAoaXNfZXJyb3IpDQogICAgew0K ICAgICAgc3ByaW50ZiAoYnVmLCAiJXM6ICIsIHByb2duYW1lKTsNCiAgICAgIG1zZyA9IHN0 cmNociAoYnVmLCAnXDAnKTsNCiAgICB9DQoNCiAgdnNwcmludGYgKG1zZywgbWVzc2FnZSwg YXJncyk7DQogIHZhX2VuZCAoYXJncyk7DQoNCiNpZmRlZiBXSU5ET1dTTlQNCiBpZiAodzMy X3dpbmRvd19hcHAgKCkpDQogICB7DQogICAgIGlmIChpc19lcnJvcikNCiAgICAgICBNZXNz YWdlQm94IChOVUxMLCBtc2csICJFbWFjc2NsaWVudCBFUlJPUiIsIE1CX0lDT05FUlJPUik7 DQogICAgIGVsc2UNCiAgICAgICBNZXNzYWdlQm94IChOVUxMLCBtc2csICJFbWFjc2NsaWVu dCIsIE1CX0lDT05JTkZPUk1BVElPTik7DQogICB9DQogZWxzZQ0KI2VuZGlmDQogICBmcHJp bnRmIChpc19lcnJvciA/IHN0ZGVyciA6IHN0ZG91dCwgbXNnKTsNCn0NCg0KDQppbnQgZ2V0 X2VtYWNzX2RpciggY2hhciAqIHBCdWYsIGludCBsZW4pDQp7DQogIGludCByZXQgPSAwOw0K DQojaWZkZWYgV0lORE9XU05UDQojZGVmaW5lIFNFVF9FTlZfQlVGX1NJWkUgKDQgKiBNQVhf UEFUSCkgICAvKiB0byBjb3ZlciBFTUFDU0xPQURQQVRIICovDQoNCiAgSEtFWSBLZXlIYW5k bGU7DQogIEhLRVkgUmVnaXN0cnlIYW5kbGU7DQogIExPTkcgRXJyb3JDb2RlOw0KICBDSEFS IHRlbXBfc3RyaW5nWyAyMDQ4IF07DQogIERXT1JEIHNpemVfb2ZfYnVmZmVyID0gMjA0ODsN CiAgRFdPUkQgdGVtcF9kYXRhX3R5cGUgPSAoRFdPUkQpIFJFR19TWjsNCiAgQk9PTCBmb3Vu ZF9pdCA9IEZBTFNFOw0KDQogIC8qIFRyZWF0IGVtYWNzX2RpciBzcGVjaWFsbHk6IEp1c3Qg cmV0dXJuIGZhbHNlIGlmIGl0IGFwcGVhcnMgdGhhdA0KICAgICB3ZSBhcmUgcnVubmluZyBm cm9tIHRoZSBiaW4gc3ViZGlyIG9mIGEgc3RhbmRhcmQNCiAgICAgaW5zdGFsbGF0aW9uLiAg Ki8NCiAgew0KICAgIGNoYXIgKnA7DQogICAgY2hhciAqbW9kbmFtZTsNCiAgICBjaGFyICpl bWFjc0V4ZTsNCg0KICAgIG1vZG5hbWUgPSBhbGxvY2EoMipNQVhfUEFUSCk7DQogICAgZW1h Y3NFeGUgPSBhbGxvY2EoMipNQVhfUEFUSCk7DQoNCiAgICBpZiAoR2V0TW9kdWxlRmlsZU5h bWUgKE5VTEwsIG1vZG5hbWUsIE1BWF9QQVRIKSkNCiAgICAgIHsNCiAgICAgICAgaWYgKCEo KHAgPSBzdHJyY2hyIChtb2RuYW1lLCAnXFwnKSkgPT0gTlVMTCkpDQogICAgICAgICAgew0K ICAgICAgICAgICAgKnAgPSAwOw0KDQogICAgICAgICAgICBpZiAoKHAgPSBzdHJyY2hyICht b2RuYW1lLCAnXFwnKSkgJiYgc3RyaWNtcCAocCwgIlxcYmluIikgPT0gMCkNCiAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgIGNoYXIgYnVmW1NFVF9FTlZfQlVGX1NJWkVdOw0K DQogICAgICAgICAgICAgICAgKnAgPSAwOw0KICAgICAgICAgICAgICAgIGZvciAocCA9IG1v ZG5hbWU7ICpwOyBwKyspDQogICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykgKnAg PSAnLyc7DQoNCiAgICAgICAgICAgICAgICBzdHJjcHkoIGVtYWNzRXhlLCBtb2RuYW1lKTsN CiAgICAgICAgICAgICAgICBzdHJjYXQoIGVtYWNzRXhlLCAiL2VtYWNzLmV4ZSIgKTsNCiAg ICAgICAgICAgICAgICBpZiAoYWNjZXNzIChlbWFjc0V4ZSwgWF9PSykgPT0gMCkNCiAgICAg ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy9fc25wcmludGYgKGJ1Ziwg c2l6ZW9mKGJ1ZiktMSwgImVtYWNzX2Rpcj0lcyIsIG1vZG5hbWUpOw0KICAgICAgICAgICAg ICAgICAgICAvL21lbWNweSggcEJ1ZiwgbW9kbmFtZSwgc2l6ZW9mKG1vZG5hbWUpKTsNCiAg ICAgICAgICAgICAgICAgICAgLy9yZXQgPSBUUlVFOw0KICAgICAgICAgICAgICAgICAgICAv L3JldHVybiByZXQ7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAg IGVsc2UNCiAgICAgIHsNCiAgICAgICAgc2hvd193MzJzeXNfZXJyb3IxKCJHZXRNb2R1bGVG aWxlTmFtZSIpOw0KICAgICAgfQ0KICB9DQoNCiAgaWYgKCAoIEVycm9yQ29kZSA9IFJlZ0Nv bm5lY3RSZWdpc3RyeSggMCwgSEtFWV9DVVJSRU5UX1VTRVIsICZSZWdpc3RyeUhhbmRsZSAp ICkgIT0gRVJST1JfU1VDQ0VTUyApDQogICAgew0KICAgICAgc2hvd193MzJzeXNfZXJyb3Iy KEVycm9yQ29kZSwgIlJlZ0Nvbm5lY3RSZWdpc3RyeSBIS0VZX0NVUlJFTlRfVVNFUiIpOw0K ICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAgICAgIGlmICggKCBFcnJvckNvZGUgPSBSZWdPcGVu S2V5RXgoIFJlZ2lzdHJ5SGFuZGxlLCAiU09GVFdBUkVcXEdOVVxcRW1hY3MiLCAwLCBLRVlf UkVBRCwgJktleUhhbmRsZSApICkgPT0gRVJST1JfU1VDQ0VTUyApDQogICAgICAgIHsNCiAg ICAgICAgICBtZW1zZXQoIHRlbXBfc3RyaW5nLCAwLCBzaXplb2YoIHRlbXBfc3RyaW5nICkg KTsNCiAgICAgICAgICBpZiAoICggRXJyb3JDb2RlID0gUmVnUXVlcnlWYWx1ZUV4KCBLZXlI YW5kbGUsICJlbWFjc19kaXIiLCBOVUxMLCAmdGVtcF9kYXRhX3R5cGUsIHRlbXBfc3RyaW5n LCAmc2l6ZV9vZl9idWZmZXIgKSApID09IEVSUk9SX1NVQ0NFU1MgKQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICBmb3VuZF9pdCA9IFRSVUU7DQogICAgICAgICAgICB9DQogICAg ICAgICAgUmVnQ2xvc2VLZXkoIEtleUhhbmRsZSApOw0KICAgICAgICB9DQogICAgICBSZWdD bG9zZUtleSggUmVnaXN0cnlIYW5kbGUgKTsNCiAgICB9DQoNCiAgaWYgKCEgZm91bmRfaXQp DQogICAgew0KICAgICAgaWYgKCAoIEVycm9yQ29kZSA9IFJlZ0Nvbm5lY3RSZWdpc3RyeSgg MCwgSEtFWV9MT0NBTF9NQUNISU5FLCAmUmVnaXN0cnlIYW5kbGUgKSApICE9IEVSUk9SX1NV Q0NFU1MgKQ0KICAgICAgICB7DQogICAgICAgICAgc2hvd193MzJzeXNfZXJyb3IyKEVycm9y Q29kZSwgIlJlZ0Nvbm5lY3RSZWdpc3RyeSBIS0VZX0xPQ0FMX01BQ0hJTkUiKTsNCiAgICAg ICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKCAoIEVycm9yQ29k ZSA9IFJlZ09wZW5LZXlFeCggUmVnaXN0cnlIYW5kbGUsICJTT0ZUV0FSRVxcR05VXFxFbWFj cyIsIDAsIEtFWV9SRUFELCAmS2V5SGFuZGxlICkgKSA9PSBFUlJPUl9TVUNDRVNTICkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgbWVtc2V0KCB0ZW1wX3N0cmluZywgMCwgc2l6 ZW9mKCB0ZW1wX3N0cmluZyApICk7DQogICAgICAgICAgICAgIGlmICggKCBFcnJvckNvZGUg PSBSZWdRdWVyeVZhbHVlRXgoIEtleUhhbmRsZSwgImVtYWNzX2RpciIsIE5VTEwsICZ0ZW1w X2RhdGFfdHlwZSwgdGVtcF9zdHJpbmcsICZzaXplX29mX2J1ZmZlciApICkgPT0gRVJST1Jf U1VDQ0VTUyApDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgZm91bmRf aXQgPSBUUlVFOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgUmVnQ2xvc2VL ZXkoIEtleUhhbmRsZSApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIFJlZ0Nsb3NlS2V5 KCBSZWdpc3RyeUhhbmRsZSApOw0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgaWYgKCEgZm91 bmRfaXQpDQogICAgew0KICAgICAgbWVzc2FnZShUUlVFLCAiQ291bGQgbm90IGZpbmQgZW1h Y3NfZGlyIGluIFJlZ2lzdHJ5IChzZWFyY2hlZCBIS0NVIGFuZCBIS0xNKSIpOw0KICAgIH0N CiAgZWxzZQ0KICAgIHsNCiAgICAgIGlmICggc2l6ZV9vZl9idWZmZXIgPiBsZW4gKQ0KICAg ICAgICBwQnVmWzBdID0gMDsJCS8qIHN0cmluZyB0b28gbG9uZyBmb3IgYnVmZmVyICovDQog ICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBtZW1jcHkoIHBCdWYsIHRlbXBfc3Ry aW5nLCBzaXplX29mX2J1ZmZlciApOw0KICAgICAgICAgIHJldCA9IDE7DQogICAgICAgIH0N CiAgICB9DQojZW5kaWYNCg0KICByZXR1cm4gcmV0Ow0KfQ0KDQoNCi8qIERlY29kZSB0aGUg b3B0aW9ucyBmcm9tIGFyZ3YgYW5kIGFyZ2MuDQogICBUaGUgZ2xvYmFsIHZhcmlhYmxlIGBv cHRpbmQnIHdpbGwgc2F5IGhvdyBtYW55IGFyZ3VtZW50cyB3ZSB1c2VkIHVwLiAgKi8NCg0K dm9pZA0KZGVjb2RlX29wdGlvbnMgKGFyZ2MsIGFyZ3YpDQogICAgIGludCBhcmdjOw0KICAg ICBjaGFyICoqYXJndjsNCnsNCiAgY2hhciogZW52X3N0YXJ0X3RpbWVvdXQgPSBnZXRlbnYg KCJFTUFDU0NMSUVOVF9TVEFSVF9USU1FT1VUIik7DQoNCiAgYWx0ZXJuYXRlX2VkaXRvciA9 IGdldGVudiAoIkVNQUNTX0FMVEVSTkFURV9FRElUT1IiKTsNCiAgaWYgKCEgYWx0ZXJuYXRl X2VkaXRvcikNCiAgICBhbHRlcm5hdGVfZWRpdG9yID0gZ2V0ZW52ICgiQUxURVJOQVRFX0VE SVRPUiIpOw0KICBpZiAoZW52X3N0YXJ0X3RpbWVvdXQpDQogICAgew0KICAgICAgc3RhcnRf dGltZW91dCA9IGVudl9zdGFydF90aW1lb3V0Ow0KICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAg ICAgIHN0YXJ0X3RpbWVvdXQgPSAiNjAiOw0KICAgIH0NCg0KICB3aGlsZSAoMSkNCiAgICB7 DQogICAgICBpbnQgb3B0ID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsDQojaWZuZGVmIE5P X1NPQ0tFVFNfSU5fRklMRV9TWVNURU0NCgkJCSAgICAgIlZIbmVhOnM6ZjpkOiIsDQojZWxz ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkhuZWE6ZjpkOiIsDQojZW5kaWYN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ29wdHMsIDApOw0KDQogICAgICBp ZiAob3B0ID09IEVPRikNCglicmVhazsNCg0KICAgICAgc3dpdGNoIChvcHQpDQoJew0KCWNh c2UgMDoNCgkgIC8qIElmIGdldG9wdCByZXR1cm5zIDAsIHRoZW4gaXQgaGFzIGFscmVhZHkg cHJvY2Vzc2VkIGENCgkgICAgIGxvbmctbmFtZWQgb3B0aW9uLiAgV2Ugc2hvdWxkIGRvIG5v dGhpbmcuICAqLw0KCSAgYnJlYWs7DQoNCgljYXNlICdhJzoNCgkgIGFsdGVybmF0ZV9lZGl0 b3IgPSBvcHRhcmc7DQoJICBicmVhazsNCg0KCWNhc2UgJ3QnOg0KCSAgc3RhcnRfdGltZW91 dCA9IG9wdGFyZzsNCgkgIGJyZWFrOw0KDQojaWZuZGVmIE5PX1NPQ0tFVFNfSU5fRklMRV9T WVNURU0NCgljYXNlICdzJzoNCgkgIHNvY2tldF9uYW1lID0gb3B0YXJnOw0KCSAgYnJlYWs7 DQojZW5kaWYNCg0KCWNhc2UgJ2YnOg0KCSAgc2VydmVyX2ZpbGUgPSBvcHRhcmc7DQoJICBi cmVhazsNCg0KCWNhc2UgJ2QnOg0KCSAgZGlzcGxheSA9IG9wdGFyZzsNCgkgIGJyZWFrOw0K DQoJY2FzZSAnbic6DQoJICBub3dhaXQgPSAxOw0KCSAgYnJlYWs7DQoNCgljYXNlICdlJzoN CgkgIGV2YWwgPSAxOw0KCSAgYnJlYWs7DQoNCgljYXNlICdWJzoNCgkgIG1lc3NhZ2UgKEZB TFNFLCAiZW1hY3NjbGllbnQgJXNcbiIsIFZFUlNJT04pOw0KCSAgZXhpdCAoRVhJVF9TVUND RVNTKTsNCgkgIGJyZWFrOw0KDQoJY2FzZSAnSCc6DQoJICBwcmludF9oZWxwX2FuZF9leGl0 ICgpOw0KCSAgYnJlYWs7DQoNCglkZWZhdWx0Og0KCSAgbWVzc2FnZSAoVFJVRSwgIlRyeSBg JXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIiwgcHJvZ25hbWUpOw0KCSAgZXhp dCAoRVhJVF9GQUlMVVJFKTsNCgkgIGJyZWFrOw0KCX0NCiAgICB9DQogIGlmIChzdGFydF90 aW1lb3V0KQ0KICAgIHsNCiAgICAgIGlmICgxICE9IHNzY2FuZihzdGFydF90aW1lb3V0LCAi JWQiLCAmc3RhcnRfdGltZW91dF9pbnQpKQ0KICAgICAgICB7DQogICAgICAgICAgbWVzc2Fn ZSAoVFJVRSwgIkludmFsaWQgdmFsdWUgdG8gLS1zdGFydC10aW1lb3V0PSVzIiwgc3RhcnRf dGltZW91dCk7DQogICAgICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCiAgICAgICAgfQ0K ICAgIH0NCn0NCg0Kdm9pZA0KcHJpbnRfaGVscF9hbmRfZXhpdCAoKQ0Kew0KICBtZXNzYWdl IChGQUxTRSwNCiAgICAgICAgICAgIlVzYWdlOiAlcyBbT1BUSU9OU10gW0ZJTEUuLi5dXG5c DQpcblwNClRlbGwgdGhlIEVtYWNzIHNlcnZlciB0byB2aXNpdCB0aGUgc3BlY2lmaWVkIGZp bGVzLiBPciwgaWYgbm8gZmlsZXNcblwNCmFyZSBnaXZlbiB0aGVuIHNob3cgdGhlIGxhdGVz dCBFbWFjcyBmcmFtZSB1c2VkLlxuXA0KRXZlcnkgRklMRSBjYW4gYmUgZWl0aGVyIGp1c3Qg YSBGSUxFTkFNRSBvciBbK0xJTkVbOkNPTFVNTl1dIEZJTEVOQU1FLlxuXA0KXG5cDQpUaGUg Zm9sbG93aW5nIE9QVElPTlMgYXJlIGFjY2VwdGVkOlxuXA0KLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgSnVzdCBwcmludCBhIHZlcnNpb24gaW5mbyBhbmQgcmV0dXJuXG5cDQotSCwgLS1o ZWxwICAgICAgICAgICAgICBQcmludCB0aGlzIHVzYWdlIGluZm9ybWF0aW9uIG1lc3NhZ2Vc blwNCi1uLCAtLW5vLXdhaXQgICAgICAgICAgIERvbid0IHdhaXQgZm9yIHRoZSBzZXJ2ZXIg dG8gcmV0dXJuXG5cDQogICAgICAgICAgICAgICAgICAgICAgICBJZiBubyBhcmd1bWVudHMg YXJlIGdpdmVuIGVtYWNzY2xpZW50IG5ldmVyIHdhaXRzXG5cDQotZSwgLS1ldmFsICAgICAg ICAgICAgICBFdmFsdWF0ZSB0aGUgRklMRSBhcmd1bWVudHMgYXMgRUxpc3AgZXhwcmVzc2lv bnNcblwNCi1kLCAtLWRpc3BsYXk9RElTUExBWSAgIFZpc2l0IHRoZSBmaWxlIGluIHRoZSBn aXZlbiBkaXNwbGF5XG4iDQojaWZuZGVmIE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNURU0NCiAg ICAgICAgICAgIi1zLCAtLXNvY2tldC1uYW1lPUZJTEVOQU1FXG5cDQogICAgICAgICAgICAg ICAgICAgICAgICBTZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBVTklYIHNvY2tldCBmb3IgY29t bXVuaWNhdGlvblxuIg0KI2VuZGlmDQogICAgICAgICAgICItZiwgLS1zZXJ2ZXItZmlsZT1G SUxFTkFNRVxuXA0KCQkJU2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgVENQIGNvbmZpZ3VyYXRp b24gZmlsZVxuXA0KLWEsIC0tYWx0ZXJuYXRlLWVkaXRvcj1FRElUT1JcblwNCiAgICAgICAg ICAgICAgICAgICAgICAgIEVkaXRvciB0byBmYWxsYmFjayB0byBpZiB0aGUgc2VydmVyIGlz IG5vdCBydW5uaW5nXG5cDQotdCwgLS1zdGFydC10aW1lb3V0PVNFQ09ORFNcblwNCiAgICAg ICAgICAgICAgICAgICAgICAgIElmIGdpdmVuIHdhaXQgdGhhdCBtYW55IHNlY29uZHMgZm9y IGVtYWNzIHNlcnZlclxuXA0KICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgbGF1bmNo aW5nIGFsdGVybmF0ZSBlZGl0b3JcblwNClxuXA0KUmVwb3J0IGJ1Z3MgdG8gYnVnLWdudS1l bWFjc0BnbnUub3JnLlxuIiwgcHJvZ25hbWUpOw0KICBleGl0IChFWElUX1NVQ0NFU1MpOw0K fQ0KDQoMDQovKg0KICBUcnkgdG8gcnVuIGEgZGlmZmVyZW50IGNvbW1hbmQsIG9yIC0taWYg bm8gYWx0ZXJuYXRlIGVkaXRvciBpcw0KICBkZWZpbmVkLS0gZXhpdCB3aXRoIGFuIGVycm9y Y29kZS4NCiovDQp2b2lkDQpmYWlsIChhcmdjLCBhcmd2KQ0KICAgICBpbnQgYXJnYzsNCiAg ICAgY2hhciAqKmFyZ3Y7DQp7DQogIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQp9DQoNCgwNCiNp ZiAhZGVmaW5lZCAoSEFWRV9TT0NLRVRTKSB8fCAhZGVmaW5lZCAoSEFWRV9JTkVUX1NPQ0tF VFMpDQoNCmludA0KbWFpbiAoYXJnYywgYXJndikNCiAgICAgaW50IGFyZ2M7DQogICAgIGNo YXIgKiphcmd2Ow0Kew0KICBtZXNzYWdlIChUUlVFLCAiJXM6IFNvcnJ5LCB0aGUgRW1hY3Mg c2VydmVyIGlzIHN1cHBvcnRlZCBvbmx5XG5vbiBzeXN0ZW1zIHdpdGggQmVya2VseSBzb2Nr ZXRzLlxuIiwNCiAgICAgICAgICAgIGFyZ3ZbMF0pOw0KDQogIGZhaWwgKGFyZ2MsIGFyZ3Yp Ow0KfQ0KDQojZWxzZSAvKiBIQVZFX1NPQ0tFVFMgJiYgSEFWRV9JTkVUX1NPQ0tFVFMgKi8N Cg0KI2lmZGVmIFdJTkRPV1NOVA0KIyBpbmNsdWRlIDx3aW5zb2NrMi5oPg0KI2Vsc2UNCiMg aW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiMgaW5j bHVkZSA8c3lzL3VuLmg+DQojIGluY2x1ZGUgPHN5cy9zdGF0Lmg+DQojIGluY2x1ZGUgPGVy cm5vLmg+DQojZW5kaWYNCg0KI2RlZmluZSBBVVRIX0tFWV9MRU5HVEggICAgICA2NA0KI2Rl ZmluZSBTRU5EX0JVRkZFUl9TSVpFICAgNDA5Ng0KDQpleHRlcm4gY2hhciAqc3RyZXJyb3Ig KCk7DQpleHRlcm4gaW50IGVycm5vOw0KDQovKiBCdWZmZXIgdG8gYWNjdW11bGF0ZSBkYXRh IHRvIHNlbmQgaW4gVENQIGNvbm5lY3Rpb25zLiAgKi8NCmNoYXIgc2VuZF9idWZmZXJbU0VO RF9CVUZGRVJfU0laRSArIDFdOw0KaW50IHNibGVuID0gMDsJLyogRmlsbCBwb2ludGVyIGZv ciB0aGUgc2VuZCBidWZmZXIuICAqLw0KDQovKiBMZXQncyBzZW5kIHRoZSBkYXRhIHRvIEVt YWNzIHdoZW4gZWl0aGVyDQogICAtIHRoZSBkYXRhIGVuZHMgaW4gIlxuIiwgb3INCiAgIC0g dGhlIGJ1ZmZlciBpcyBmdWxsIChidXQgdGhpcyBzaG91bGRuJ3QgaGFwcGVuKQ0KICAgT3Ro ZXJ3aXNlLCB3ZSBqdXN0IGFjY3VtdWxhdGUgaXQuICAqLw0Kdm9pZA0Kc2VuZF90b19lbWFj cyAocywgZGF0YSkNCiAgICAgSFNPQ0tFVCBzOw0KICAgICBjaGFyICpkYXRhOw0Kew0KICB3 aGlsZSAoZGF0YSkNCiAgICB7DQogICAgICBpbnQgZGxlbiA9IHN0cmxlbiAoZGF0YSk7DQog ICAgICBpZiAoZGxlbiArIHNibGVuID49IFNFTkRfQlVGRkVSX1NJWkUpDQoJew0KCSAgaW50 IHBhcnQgPSBTRU5EX0JVRkZFUl9TSVpFIC0gc2JsZW47DQoJICBzdHJuY3B5ICgmc2VuZF9i dWZmZXJbc2JsZW5dLCBkYXRhLCBwYXJ0KTsNCgkgIGRhdGEgKz0gcGFydDsNCgkgIHNibGVu ID0gU0VORF9CVUZGRVJfU0laRTsNCgl9DQogICAgICBlbHNlIGlmIChkbGVuKQ0KCXsNCgkg IHN0cmNweSAoJnNlbmRfYnVmZmVyW3NibGVuXSwgZGF0YSk7DQoJICBkYXRhID0gTlVMTDsN CgkgIHNibGVuICs9IGRsZW47DQoJfQ0KICAgICAgZWxzZQ0KCWJyZWFrOw0KDQogICAgICBp ZiAoc2JsZW4gPT0gU0VORF9CVUZGRVJfU0laRQ0KCSAgfHwgKHNibGVuID4gMCAmJiBzZW5k X2J1ZmZlcltzYmxlbi0xXSA9PSAnXG4nKSkNCgl7DQoJICBpbnQgc2VudCA9IHNlbmQgKHMs IHNlbmRfYnVmZmVyLCBzYmxlbiwgMCk7DQoJICBpZiAoc2VudCAhPSBzYmxlbikNCgkgICAg c3RyY3B5IChzZW5kX2J1ZmZlciwgJnNlbmRfYnVmZmVyW3NlbnRdKTsNCgkgIHNibGVuIC09 IHNlbnQ7DQoJfQ0KICAgIH0NCn0NCg0KLyogSW4gTkFNRSwgaW5zZXJ0IGEgJiBiZWZvcmUg ZWFjaCAmLCBlYWNoIHNwYWNlLCBlYWNoIG5ld2xpbmUsIGFuZA0KICAgYW55IGluaXRpYWwg LS4gIENoYW5nZSBzcGFjZXMgdG8gdW5kZXJzY29yZXMsIHRvbywgc28gdGhhdCB0aGUNCiAg IHJldHVybiB2YWx1ZSBuZXZlciBjb250YWlucyBhIHNwYWNlLiAgKi8NCnZvaWQNCnF1b3Rl X2ZpbGVfbmFtZSAocywgbmFtZSkNCiAgICAgSFNPQ0tFVCBzOw0KICAgICBjaGFyICpuYW1l Ow0Kew0KICBjaGFyICpjb3B5ID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKG5hbWUpICog MiArIDEpOw0KICBjaGFyICpwLCAqcTsNCg0KICBwID0gbmFtZTsNCiAgcSA9IGNvcHk7DQog IHdoaWxlICgqcCkNCiAgICB7DQogICAgICBpZiAoKnAgPT0gJyAnKQ0KCXsNCgkgICpxKysg PSAnJic7DQoJICAqcSsrID0gJ18nOw0KCSAgcCsrOw0KCX0NCiAgICAgIGVsc2UgaWYgKCpw ID09ICdcbicpDQoJew0KCSAgKnErKyA9ICcmJzsNCgkgICpxKysgPSAnbic7DQoJICBwKys7 DQoJfQ0KICAgICAgZWxzZQ0KCXsNCgkgIGlmICgqcCA9PSAnJicgfHwgKCpwID09ICctJyAm JiBwID09IG5hbWUpKQ0KCSAgICAqcSsrID0gJyYnOw0KCSAgKnErKyA9ICpwKys7DQoJfQ0K ICAgIH0NCiAgKnErKyA9IDA7DQoNCiAgU0VORF9TVFJJTkcgKGNvcHkpOw0KDQogIGZyZWUg KGNvcHkpOw0KfQ0KDQppbnQNCmZpbGVfbmFtZV9hYnNvbHV0ZV9wIChmaWxlbmFtZSkNCiAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZW5hbWU7DQp7DQogIC8qIFNhbml0eSBjaGVj aywgaXQgc2hvdWxkbid0IGhhcHBlbi4gICovDQogIGlmICghIGZpbGVuYW1lKSByZXR1cm4g RkFMU0U7DQoNCiAgLyogL3h4eCBpcyBhbHdheXMgYW4gYWJzb2x1dGUgcGF0aC4gICovDQog IGlmIChmaWxlbmFtZVswXSA9PSAnLycpIHJldHVybiBUUlVFOw0KDQogIC8qIEVtcHR5IGZp bGVuYW1lcyAod2hpY2ggc2hvdWxkbid0IGhhcHBlbikgYXJlIHJlbGF0aXZlLiAgKi8NCiAg aWYgKGZpbGVuYW1lWzBdID09ICdcMCcpIHJldHVybiBGQUxTRTsNCg0KI2lmZGVmIFdJTkRP V1NOVA0KICAvKiBYOlx4eHggaXMgYWx3YXlzIGFic29sdXRlOyBYOnh4eCBpcyBhbiBlcnJv ciBhbmQgd2lsbCBmYWlsLiAgKi8NCiAgaWYgKGlzbG93ZXIgKHRvbG93ZXIgKGZpbGVuYW1l WzBdKSkNCiAgICAgICYmIGZpbGVuYW1lWzFdID09ICc6JyAmJiBmaWxlbmFtZVsyXSA9PSAn XFwnKQ0KICAgIHJldHVybiBUUlVFOw0KDQogIC8qIEJvdGggXHh4eCBhbmQgXFx4eHhceXl5 IGFyZSBhYnNvbHV0ZS4gICovDQogIGlmIChmaWxlbmFtZVswXSA9PSAnXFwnKSByZXR1cm4g VFJVRTsNCiNlbmRpZg0KDQogIHJldHVybiBGQUxTRTsNCn0NCg0KI2lmZGVmIFdJTkRPV1NO VA0KLyogV3JhcHBlciB0byBtYWtlIFdTQUNsZWFudXAgYSBjZGVjbCwgYXMgcmVxdWlyZWQg YnkgYXRleGl0KCkuCSAqLw0Kdm9pZA0KX19jZGVjbCBjbG9zZV93aW5zb2NrICgpDQp7DQog IFdTQUNsZWFudXAgKCk7DQp9DQoNCi8qIEluaXRpYWxpemUgdGhlIFdpblNvY2syIGxpYnJh cnkuICAqLw0Kdm9pZA0KaW5pdGlhbGl6ZV9zb2NrZXRzICgpDQp7DQogIFdTQURBVEEgd3Nh RGF0YTsNCg0KICBpZiAoV1NBU3RhcnR1cCAoTUFLRVdPUkQgKDIsIDApLCAmd3NhRGF0YSkp DQogICAgew0KICAgICAgbWVzc2FnZSAoVFJVRSwgIiVlcnJvciBpbml0aWFsaXppbmcgV2lu U29jazIiKTsNCiAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgfQ0KDQogIGF0ZXhp dCAoY2xvc2Vfd2luc29jayk7DQp9DQojZW5kaWYgLyogV0lORE9XU05UICovDQoMDQoNCi8q IEdldCBhYnNvbHV0ZSBwYXRoIHRvIHNlcnZlciBmaWxlICovDQp2b2lkDQpnZXRfZnVsbF9z ZXJ2ZXJfZmlsZShjaGFyKiBidWYpDQp7DQogIEZJTEUgKmNvbmZpZyA9IE5VTEw7DQogIGlu dCBmb3VuZCA9IDA7DQoNCiAgKmJ1ZiA9ICdcMCc7DQogIGlmIChmaWxlX25hbWVfYWJzb2x1 dGVfcCAoc2VydmVyX2ZpbGUpKQ0KICAgIHN0cmNweShidWYsIHNlcnZlcl9maWxlKTsNCiAg ZWxzZQ0KICAgIHsNCiAgICAgIGNoYXIgKmhvbWUgPSBnZXRlbnYgKCJIT01FIik7DQoNCiAg ICAgIGlmIChob21lKQ0KICAgICAgICB7DQogICAgICAgICAgc3ByaW50ZiAoYnVmLCAiJXMv LmVtYWNzLmQvc2VydmVyLyVzIiwgaG9tZSwgc2VydmVyX2ZpbGUpOw0KICAgICAgICAgIGZv dW5kID0gKGFjY2VzcyAoYnVmLCBSX09LKSA9PSAwKTsNCiAgICAgICAgfQ0KI2lmZGVmIFdJ TkRPV1NOVA0KICAgICAgaWYgKCFmb3VuZCAmJiAoaG9tZSA9IGdldGVudiAoIkFQUERBVEEi KSkpDQogICAgICAgIHsNCiAgICAgICAgICBzcHJpbnRmIChidWYsICIlcy8uZW1hY3MuZC9z ZXJ2ZXIvJXMiLCBob21lLCBzZXJ2ZXJfZmlsZSk7DQogICAgICAgIH0NCiNlbmRpZg0KICAg IH0NCn0NCg0KLyoNCiAqIFJlYWQgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBzZXQgdXAg YSBUQ1AgY29tbSBjaGFubmVsIHdpdGgNCiAqIHRoZSBFbWFjcyBzZXJ2ZXI6IGhvc3QsIHBv cnQsIHBpZCBhbmQgYXV0aGVudGljYXRpb24gc3RyaW5nLg0KICovDQppbnQNCmdldF9zZXJ2 ZXJfY29uZmlnIChzZXJ2ZXIsIGF1dGhlbnRpY2F0aW9uLCBpc2xvY2FsKQ0KICAgICBzdHJ1 Y3Qgc29ja2FkZHJfaW4gKnNlcnZlcjsNCiAgICAgY2hhciAqYXV0aGVudGljYXRpb247DQog ICAgIGludCAqaXNsb2NhbDsNCnsNCiAgY2hhciBkb3R0ZWRbMzJdOw0KICBjaGFyICpwb3J0 Ow0KICBjaGFyICpwaWQ7DQogIEZJTEUgKmNvbmZpZyA9IE5VTEw7DQogIGNoYXIgKmZ1bGxf c2VydmVyX2ZpbGU7DQogIGNoYXIgKm15aG9zdG5hbWUgPSBhbGxvY2EoMioyNTUpOw0KICBz dHJ1Y3QgaG9zdGVudCAqbXlob3N0ZW50Ow0KDQogIGZ1bGxfc2VydmVyX2ZpbGUgPSBhbGxv Y2EoMipNQVhfUEFUSCk7DQoNCiAgZ2V0X2Z1bGxfc2VydmVyX2ZpbGUoZnVsbF9zZXJ2ZXJf ZmlsZSk7DQogIGNvbmZpZyA9IGZvcGVuIChmdWxsX3NlcnZlcl9maWxlLCAicmIiKTsNCg0K ICBpZiAoISBjb25maWcpDQogICAgcmV0dXJuIEZBTFNFOw0KDQogIGlmIChmZ2V0cyAoZG90 dGVkLCBzaXplb2YgZG90dGVkLCBjb25maWcpDQogICAgICAmJiAocG9ydCA9IHN0cmNociAo ZG90dGVkLCAnOicpKQ0KICAgICAgJiYgKHBpZCA9IHN0cmNociAocG9ydCwgJyAnKSkpDQog ICAgew0KICAgICAgKnBvcnQrKyA9ICdcMCc7DQogICAgICAqcGlkKysgID0gJ1wwJzsNCiAg ICB9DQogIGVsc2UNCiAgICB7DQogICAgICBtZXNzYWdlIChUUlVFLCAiaW52YWxpZCBjb25m aWd1cmF0aW9uIGluZm8iKTsNCiAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgfQ0K DQogIGlmICgwID09IHN0cmNtcCgiMTI3LjAuMC4xIiwgZG90dGVkKSkNCiAgICB7DQogICAg ICAvL3ByaW50ZigiMTI3LjAuMC4xXG4iKTsNCiAgICAgICppc2xvY2FsID0gMTsNCiAgICB9 DQogIGVsc2UNCiAgICB7DQogICAgICAqaXNsb2NhbCA9IDA7DQogICAgICAvL3ByaW50ZiAo ImRvdHRlZD0oJXMpXG4iLCBkb3R0ZWQpOw0KICAgICAgZ2V0aG9zdG5hbWUobXlob3N0bmFt ZSwgMjU1KTsNCiAgICAgIC8vcHJpbnRmKCJteWhvc3RuYW1lPSVzXG4iLCBteWhvc3RuYW1l KTsNCiAgICAgIG15aG9zdGVudCA9IGdldGhvc3RieW5hbWUobXlob3N0bmFtZSk7DQogICAg ICBpZiAoTlVMTCA9PSBteWhvc3RlbnQpDQogICAgICAgIHsNCiAgICAgICAgICBtZXNzYWdl KFRSVUUsICJFcnJvciBjYWxsaW5nIGdldGhvc3RieW5hbWUoKTogJXNcbiIsIHN0cmVycm9y KGVycm5vKSk7DQogICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOw0KICAgICAgICB9DQoN CiAgICAgIC8vcHJpbnRmKCJIb3N0bmFtZSA6ICVzXG4iLG15aG9zdGVudC0+aF9uYW1lKTsg IC8qIHByaW50cyB0aGUgaG9zdG5hbWUgKi8NCiAgICAgIC8vcHJpbnRmKCJJUCBBZGRyZXNz OiAlc1xuIixpbmV0X250b2EoKigoc3RydWN0IGluX2FkZHIgKilteWhvc3RlbnQtPmhfYWRk cikpKTsgLyogcHJpbnRzIElQIGFkZHJlc3MgKi8NCiAgICAgIGlmICgwID09IHN0cmNtcChk b3R0ZWQsIGluZXRfbnRvYSgqKChzdHJ1Y3QgaW5fYWRkciAqKW15aG9zdGVudC0+aF9hZGRy KSkpKQ0KICAgICAgICB7DQogICAgICAgICAgKmlzbG9jYWwgPSAxOw0KICAgICAgICB9DQog ICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBpbnQgaSA9IDA7DQogICAgICAgICAg c3RydWN0IGluX2FkZHIgbXlhZGRyOw0KICAgICAgICAgIHdoaWxlICghICppc2xvY2FsKQ0K ICAgICAgICAgICAgew0KICAgICAgICAgICAgICB1X2xvbmcgKmFkZHJlc3MgPSAodV9sb25n ICopIG15aG9zdGVudC0+aF9hZGRyX2xpc3RbaSsrXTsNCg0KICAgICAgICAgICAgICBpZiAo YWRkcmVzcyA9PSAwKSBicmVhazsNCg0KICAgICAgICAgICAgICBteWFkZHIuU191bi5TX2Fk ZHIgPSAqYWRkcmVzczsNCiAgICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGRvdHRlZCwg aW5ldF9udG9hIChteWFkZHIpKSkNCiAgICAgICAgICAgICAgICAqaXNsb2NhbCA9IDE7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogIC8vcHJpbnRmKCJoZXJlIGFnYWlu IFxuIik7DQoNCg0KICBzZXJ2ZXItPnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KICBzZXJ2ZXIt PnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkciAoZG90dGVkKTsNCiAgc2VydmVyLT5zaW5f cG9ydCA9IGh0b25zIChhdG9pIChwb3J0KSk7DQoNCiAgaWYgKCEgZnJlYWQgKGF1dGhlbnRp Y2F0aW9uLCBBVVRIX0tFWV9MRU5HVEgsIDEsIGNvbmZpZykpDQogICAgew0KICAgICAgbWVz c2FnZSAoVFJVRSwgImNhbm5vdCByZWFkIGF1dGhlbnRpY2F0aW9uIGluZm8iKTsNCiAgICAg IGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgfQ0KDQogIGZjbG9zZSAoY29uZmlnKTsNCg0K I2lmZGVmIFdJTkRPV1NOVA0KICAvKg0KICAgIE1vZGVybiBXaW5kb3dzIHJlc3RyaWN0IHdo aWNoIHByb2Nlc3NlcyBjYW4gc2V0IHRoZSBmb3JlZ3JvdW5kIHdpbmRvdy4NCiAgICBTbywg Zm9yIGVtYWNzY2xpZW50IHRvIGJlIGFibGUgdG8gZm9yY2UgRW1hY3MgaW50byB0aGUgZm9y ZWdyb3VuZCwgd2UNCiAgICBoYXZlIHRvIGNhbGwgQWxsb3dTZXRGb3JlZ3JvdW5kV2luZG93 KCkuICBVbmZvcnR1bmF0ZWx5LCBvbGRlciBXaW5kb3dzDQogICAgKFc5NSwgVzk4IGFuZCBO VCkgZG9uJ3QgaGF2ZSB0aGlzIGZ1bmN0aW9uLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZpcnN0 Lg0KDQogICAgV2UncmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2UgaXQgaGFzIHRvIGJlIGRv bmUgYmVmb3JlIHNlbmRpbmcgaW5mbw0KICAgIHRvIEVtYWNzLCBhbmQgb3RoZXJ3aXNlIHdl J2xsIG5lZWQgYSBnbG9iYWwgdmFyaWFibGUganVzdCB0byBwYXNzIGFyb3VuZA0KICAgIHRo ZSBwaWQsIHdoaWNoIGlzIGFsc28gaW5lbGVnYW50Lg0KICAqLw0KICB7DQogICAgSE1PRFVM RSBoVXNlcjMyOw0KDQogICAgaWYgKGhVc2VyMzIgPSBMb2FkTGlicmFyeSAoInVzZXIzMi5k bGwiKSkNCiAgICAgIHsNCiAgICAgICAgRkFSUFJPQyBzZXRfZmc7DQogICAgICAgIGlmIChz ZXRfZmcgPSBHZXRQcm9jQWRkcmVzcyAoaFVzZXIzMiwgIkFsbG93U2V0Rm9yZWdyb3VuZFdp bmRvdyIpKQ0KICAgICAgICAgIHNldF9mZyAoYXRvaSAocGlkKSk7DQogICAgICAgIEZyZWVM aWJyYXJ5IChoVXNlcjMyKTsNCiAgICAgIH0NCiAgfQ0KI2VuZGlmDQoNCiAgcmV0dXJuIFRS VUU7DQp9DQoNCkhTT0NLRVQNCnNldF90Y3Bfc29ja2V0IChzaWxlbnQsIGlzbG9jYWwpDQog ICAgIGludCBzaWxlbnQ7DQogICAgIGludCAqaXNsb2NhbDsNCnsNCiAgSFNPQ0tFVCBzOw0K ICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsNCiAgc3RydWN0IGxpbmdlciBs X2FyZyA9IHsxLCAxfTsNCiAgc3RhdGljIGNoYXIgYXV0aF9zdHJpbmdbQVVUSF9LRVlfTEVO R1RIICsgMV07DQogIHN0YXRpYyBpbnQgaXNsb2NhbDIgPSAtMTsNCg0KICBpZiAoLTEgPT0g aXNsb2NhbDIpDQogICAgaWYgKCEgZ2V0X3NlcnZlcl9jb25maWcgKCZzZXJ2ZXIsIGF1dGhf c3RyaW5nLCAmaXNsb2NhbDIpKQ0KICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KICAq aXNsb2NhbCA9IGlzbG9jYWwyOw0KDQogIGlmIChzZXJ2ZXIuc2luX2FkZHIuc19hZGRyICE9 IGluZXRfYWRkciAoIjEyNy4wLjAuMSIpKQ0KICAgIG1lc3NhZ2UgKFRSVUUsICJjb25uZWN0 ZWQgdG8gcmVtb3RlIHNvY2tldCBhdCAlc1xuIiwNCiAgICAgICAgICAgICAgaW5ldF9udG9h IChzZXJ2ZXIuc2luX2FkZHIpKTsNCg0KICAvKg0KICAgKiBPcGVuIHVwIGFuIEFGX0lORVQg c29ja2V0DQogICAqLw0KICBpZiAoKHMgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfU1RSRUFN LCBJUFBST1RPX1RDUCkpIDwgMCkNCiAgICB7DQogICAgICBtZXNzYWdlIChUUlVFLCAic29j a2V0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCiAgICAgIHJldHVybiBJTlZBTElEX1NP Q0tFVDsNCiAgICB9DQoNCiAgLyoNCiAgICogU2V0IHVwIHRoZSBzb2NrZXQNCiAgICovDQog IGlmIChjb25uZWN0IChzLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXIsIHNpemVvZiBz ZXJ2ZXIpIDwgMCkNCiAgICB7DQogICAgICBpZiAoIXNpbGVudCkgbWVzc2FnZSAoVFJVRSwg ImNvbm5lY3Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KICAgICAgcmV0dXJuIElOVkFM SURfU09DS0VUOw0KICAgIH0NCg0KICBzZXRzb2Nrb3B0IChzLCBTT0xfU09DS0VULCBTT19M SU5HRVIsIChjaGFyICopICZsX2FyZywgc2l6ZW9mIGxfYXJnKTsNCg0KICAvKg0KICAgKiBT ZW5kIHRoZSBhdXRoZW50aWNhdGlvbg0KICAgKi8NCiAgYXV0aF9zdHJpbmdbQVVUSF9LRVlf TEVOR1RIXSA9ICdcMCc7DQoNCiAgU0VORF9TVFJJTkcgKCItYXV0aCAiKTsNCiAgU0VORF9T VFJJTkcgKGF1dGhfc3RyaW5nKTsNCiAgU0VORF9TVFJJTkcgKCJcbiIpOw0KDQogIHJldHVy biBzOw0KfQ0KDQojaWYgIWRlZmluZWQgKE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNURU0pDQoN Ci8qIFRocmVlIHBvc3NpYmlsaXRpZXM6DQogICAyIC0gY2FuJ3QgYmUgYHN0YXQnZWQJCShz ZXRzIGVycm5vKQ0KICAgMSAtIGlzbid0IG93bmVkIGJ5IHVzDQogICAwIC0gc3VjY2Vzczog bm9uZSBvZiB0aGUgYWJvdmUgKi8NCg0Kc3RhdGljIGludA0Kc29ja2V0X3N0YXR1cyAoc29j a2V0X25hbWUpDQogICAgIGNoYXIgKnNvY2tldF9uYW1lOw0Kew0KICBzdHJ1Y3Qgc3RhdCBz dGF0YmZyOw0KDQogIGlmIChzdGF0IChzb2NrZXRfbmFtZSwgJnN0YXRiZnIpID09IC0xKQ0K ICAgIHJldHVybiAyOw0KDQogIGlmIChzdGF0YmZyLnN0X3VpZCAhPSBnZXRldWlkICgpKQ0K ICAgIHJldHVybiAxOw0KDQogIHJldHVybiAwOw0KfQ0KDQpIU09DS0VUDQpzZXRfbG9jYWxf c29ja2V0IChzaWxlbnQpDQp7DQogIEhTT0NLRVQgczsNCiAgc3RydWN0IHNvY2thZGRyX3Vu IHNlcnZlcjsNCg0KICAvKg0KICAgKiBPcGVuIHVwIGFuIEFGX1VOSVggc29ja2V0IGluIHRo aXMgcGVyc29uJ3MgaG9tZSBkaXJlY3RvcnkNCiAgICovDQoNCiAgaWYgKChzID0gc29ja2V0 IChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkNCiAgICB7DQogICAgICBtZXNzYWdl IChUUlVFLCAic29ja2V0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsNCiAgICAgIHJldHVy biBJTlZBTElEX1NPQ0tFVDsNCiAgICB9DQoNCiAgc2VydmVyLnN1bl9mYW1pbHkgPSBBRl9V TklYOw0KDQogIHsNCiAgICBpbnQgc29ja19zdGF0dXMgPSAwOw0KICAgIGludCBkZWZhdWx0 X3NvY2sgPSAhc29ja2V0X25hbWU7DQogICAgaW50IHNhdmVkX2Vycm5vOw0KICAgIGNoYXIg KnNlcnZlcl9uYW1lID0gInNlcnZlciI7DQoNCiAgICBpZiAoc29ja2V0X25hbWUgJiYgIWlu ZGV4IChzb2NrZXRfbmFtZSwgJy8nKSAmJiAhaW5kZXggKHNvY2tldF9uYW1lLCAnXFwnKSkN CiAgICAgIHsgLyogc29ja2V0X25hbWUgaXMgYSBmaWxlIG5hbWUgY29tcG9uZW50LiAgKi8N CglzZXJ2ZXJfbmFtZSA9IHNvY2tldF9uYW1lOw0KCXNvY2tldF9uYW1lID0gTlVMTDsNCglk ZWZhdWx0X3NvY2sgPSAxOwkvKiBUcnkgYm90aCBVSURzLiAgKi8NCiAgICAgIH0NCg0KICAg IGlmIChkZWZhdWx0X3NvY2spDQogICAgICB7DQoJc29ja2V0X25hbWUgPSBhbGxvY2EgKDIq KDEwMCArIHN0cmxlbiAoc2VydmVyX25hbWUpKSk7DQoJc3ByaW50ZiAoc29ja2V0X25hbWUs ICIvdG1wL2VtYWNzJWQvJXMiLA0KCQkgKGludCkgZ2V0ZXVpZCAoKSwgc2VydmVyX25hbWUp Ow0KICAgICAgfQ0KDQogICAgaWYgKHN0cmxlbiAoc29ja2V0X25hbWUpIDwgc2l6ZW9mIChz ZXJ2ZXIuc3VuX3BhdGgpKQ0KICAgICAgc3RyY3B5IChzZXJ2ZXIuc3VuX3BhdGgsIHNvY2tl dF9uYW1lKTsNCiAgICBlbHNlDQogICAgICB7DQoJbWVzc2FnZSAoVFJVRSwgInNvY2tldC1u YW1lICVzIHRvbyBsb25nIiwNCiAgICAgICAgICAgICAgICAgIHNvY2tldF9uYW1lKTsNCgll eGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICAgfQ0KDQogICAgLyogU2VlIGlmIHRoZSBzb2Nr ZXQgZXhpc3RzLCBhbmQgaWYgaXQncyBvd25lZCBieSB1cy4gKi8NCiAgICBzb2NrX3N0YXR1 cyA9IHNvY2tldF9zdGF0dXMgKHNlcnZlci5zdW5fcGF0aCk7DQogICAgc2F2ZWRfZXJybm8g PSBlcnJubzsNCiAgICBpZiAoc29ja19zdGF0dXMgJiYgZGVmYXVsdF9zb2NrKQ0KICAgICAg ew0KCS8qIEZhaWxpbmcgdGhhdCwgc2VlIGlmIExPR05BTUUgb3IgVVNFUiBleGlzdCBhbmQg ZGlmZmVyIGZyb20NCgkgICBvdXIgZXVpZC4gIElmIHNvLCBsb29rIGZvciBhIHNvY2tldCBi YXNlZCBvbiB0aGUgVUlEDQoJICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lLiAgVGhpcyBp cyByZW1pbmlzY2VudCBvZiB0aGUgbG9naWMNCgkgICB0aGF0IGluaXRfZWRpdGZucyB1c2Vz IHRvIHNldCB0aGUgZ2xvYmFsIFZ1c2VyX2Z1bGxfbmFtZS4gICovDQoNCgljaGFyICp1c2Vy X25hbWUgPSAoY2hhciAqKSBnZXRlbnYgKCJMT0dOQU1FIik7DQoNCglpZiAoIXVzZXJfbmFt ZSkNCgkgIHVzZXJfbmFtZSA9IChjaGFyICopIGdldGVudiAoIlVTRVIiKTsNCg0KCWlmICh1 c2VyX25hbWUpDQoJICB7DQoJICAgIHN0cnVjdCBwYXNzd2QgKnB3ID0gZ2V0cHduYW0gKHVz ZXJfbmFtZSk7DQoNCgkgICAgaWYgKHB3ICYmIChwdy0+cHdfdWlkICE9IGdldGV1aWQgKCkp KQ0KCSAgICAgIHsNCgkJLyogV2UncmUgcnVubmluZyB1bmRlciBzdSwgYXBwYXJlbnRseS4g Ki8NCgkJc29ja2V0X25hbWUgPSBhbGxvY2EgKDIqKDEwMCArIHN0cmxlbiAoc2VydmVyX25h bWUpKSk7DQoJCXNwcmludGYgKHNvY2tldF9uYW1lLCAiL3RtcC9lbWFjcyVkLyVzIiwNCgkJ CSAoaW50KSBwdy0+cHdfdWlkLCBzZXJ2ZXJfbmFtZSk7DQoNCgkJaWYgKHN0cmxlbiAoc29j a2V0X25hbWUpIDwgc2l6ZW9mIChzZXJ2ZXIuc3VuX3BhdGgpKQ0KCQkgIHN0cmNweSAoc2Vy dmVyLnN1bl9wYXRoLCBzb2NrZXRfbmFtZSk7DQoJCWVsc2UNCgkJICB7DQoJCSAgICBtZXNz YWdlIChUUlVFLCAic29ja2V0LW5hbWUgJXMgdG9vIGxvbmciLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc29ja2V0X25hbWUpOw0KCQkgICAgZXhpdCAoRVhJVF9GQUlMVVJF KTsNCgkJICB9DQoNCgkJc29ja19zdGF0dXMgPSBzb2NrZXRfc3RhdHVzIChzZXJ2ZXIuc3Vu X3BhdGgpOw0KCQlzYXZlZF9lcnJubyA9IGVycm5vOw0KCSAgICAgIH0NCgkgICAgZWxzZQ0K CSAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87DQoJICB9DQogICAgICB9DQoNCiAgICBzd2l0 Y2ggKHNvY2tfc3RhdHVzKQ0KICAgICAgew0KICAgICAgY2FzZSAxOg0KICAgICAgICAvKiBU aGVyZSdzIGEgc29ja2V0LCBidXQgaXQgaXNuJ3Qgb3duZWQgYnkgdXMuICBUaGlzIGlzIE9L IGlmDQogICAgICAgICAgIHdlIGFyZSByb290LiAqLw0KICAgICAgICBpZiAoMCAhPSBnZXRl dWlkICgpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG1lc3NhZ2UgKFRSVUUsICJJbnZh bGlkIHNvY2tldCBvd25lclxuIik7DQoJICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsNCiAg ICAgICAgICB9DQogICAgICAgIGJyZWFrOw0KDQogICAgICBjYXNlIDI6DQogICAgICAgIC8q IGBzdGF0JyBmYWlsZWQgKi8NCiAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IEVOT0VOVCkN CiAgICAgICAgICBtZXNzYWdlIChUUlVFLA0KICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qg ZmluZCBzb2NrZXQ7IGhhdmUgeW91IHN0YXJ0ZWQgdGhlIHNlcnZlcj9cblwNClRvIHN0YXJ0 IHRoZSBzZXJ2ZXIgaW4gRW1hY3MsIHR5cGUgXCJNLXggc2VydmVyLXN0YXJ0XCIuXG4iKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgIG1lc3NhZ2UgKFRSVUUsICJjYW4ndCBzdGF0ICVz OiAlc1xuIiwNCiAgICAgICAgICAgICAgICAgICAgc2VydmVyLnN1bl9wYXRoLCBzdHJlcnJv ciAoc2F2ZWRfZXJybm8pKTsNCiAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KICAg ICAgfQ0KICB9DQoNCiAgaWYgKGNvbm5lY3QgKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNl cnZlciwgc3RybGVuIChzZXJ2ZXIuc3VuX3BhdGgpICsgMikNCiAgICAgIDwgMCkNCiAgICB7 DQogICAgICBpZiAoIXNpbGVudCkgbWVzc2FnZSAoVFJVRSwgImNvbm5lY3Q6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOw0KICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KICAgIH0N Cg0KICByZXR1cm4gczsNCn0NCiNlbmRpZiAvKiAhIE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNU RU0gKi8NCg0KSFNPQ0tFVA0Kc2V0X3NvY2tldCAoc2lsZW50LCBpc2xvY2FsKQ0KICAgICBp bnQgc2lsZW50Ow0KICAgICBpbnQgKmlzbG9jYWw7DQp7DQogIEhTT0NLRVQgczsNCiAgaW50 IGlzbG9jYWwyOw0KDQogIElOSVRJQUxJWkUgKCk7DQoNCiAgKmlzbG9jYWwgPSAxOw0KDQoj aWZuZGVmIE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNURU0NCiAgLyogRXhwbGljaXQgLS1zb2Nr ZXQtbmFtZSBhcmd1bWVudC4gICovDQogIGlmIChzb2NrZXRfbmFtZSkNCiAgICB7DQogICAg ICBzID0gc2V0X2xvY2FsX3NvY2tldCAoc2lsZW50KTsNCiAgICAgIC8vaWYgKChzICE9IElO VkFMSURfU09DS0VUKSB8fCBhbHRlcm5hdGVfZWRpdG9yKQ0KICAgICAgcmV0dXJuIHM7DQoN CiAgICAgIG1lc3NhZ2UgKFRSVUUsICJlcnJvciBhY2Nlc3Npbmcgc29ja2V0IFwiJXNcIiIs DQogICAgICAgICAgICAgICAgc29ja2V0X25hbWUpOw0KICAgICAgZXhpdCAoRVhJVF9GQUlM VVJFKTsNCiAgICB9DQojZW5kaWYNCg0KICAvKiBFeHBsaWNpdCAtLXNlcnZlci1maWxlIGFy ZyBvciBFTUFDU19TRVJWRVJfRklMRSB2YXJpYWJsZS4gICovDQogIGlmICghc2VydmVyX2Zp bGUpDQogICAgc2VydmVyX2ZpbGUgPSBnZXRlbnYgKCJFTUFDU19TRVJWRVJfRklMRSIpOw0K DQogIGlmIChzZXJ2ZXJfZmlsZSkNCiAgICB7DQogICAgICBzID0gc2V0X3RjcF9zb2NrZXQg KHNpbGVudCwgJmlzbG9jYWwyKTsNCiAgICAgICppc2xvY2FsID0gaXNsb2NhbDI7DQogICAg ICAvL2lmICgocyAhPSBJTlZBTElEX1NPQ0tFVCkgfHwgYWx0ZXJuYXRlX2VkaXRvcikNCiAg ICAgIHJldHVybiBzOw0KDQogICAgICBtZXNzYWdlIChUUlVFLCAiZXJyb3IgYWNjZXNzaW5n IHNlcnZlciBmaWxlIFwiJXNcIiIsDQogICAgICAgICAgICAgICAgc2VydmVyX2ZpbGUpOw0K ICAgICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCiAgICB9DQoNCiNpZm5kZWYgTk9fU09DS0VU U19JTl9GSUxFX1NZU1RFTQ0KICAvKiBJbXBsaWNpdCBsb2NhbCBzb2NrZXQuICAqLw0KICBz ID0gc2V0X2xvY2FsX3NvY2tldCAoc2lsZW50KTsNCiAgaWYgKHMgIT0gSU5WQUxJRF9TT0NL RVQpDQogICAgcmV0dXJuIHM7DQojZW5kaWYNCg0KICAvKiBJbXBsaWNpdCBzZXJ2ZXIgZmls ZS4gICovDQogIHNlcnZlcl9maWxlID0gInNlcnZlciI7DQogIHMgPSBzZXRfdGNwX3NvY2tl dCAoc2lsZW50LCAmaXNsb2NhbDIpOw0KICAqaXNsb2NhbCA9IGlzbG9jYWwyOw0KICAvL2lm ICgocyAhPSBJTlZBTElEX1NPQ0tFVCkgfHwgYWx0ZXJuYXRlX2VkaXRvcikNCiAgcmV0dXJu IHM7DQoNCiAgcmV0dXJuIElOVkFMSURfU09DS0VUOw0KDQogIC8qIE5vIGltcGxpY2l0IG9y IGV4cGxpY2l0IHNvY2tldCwgYW5kIG5vIGFsdGVybmF0ZSBlZGl0b3IuICAqLw0KICBtZXNz YWdlIChUUlVFLCAiTm8gc29ja2V0IG9yIGFsdGVybmF0ZSBlZGl0b3IuICBQbGVhc2UgdXNl OlxuXG4iDQojaWZuZGVmIE5PX1NPQ0tFVFNfSU5fRklMRV9TWVNURU0NCiAgICAgICAgICAg ICJcdC0tc29ja2V0LW5hbWVcbiINCiNlbmRpZg0KICAgICAgICAgICAgIlx0LS1zZXJ2ZXIt ZmlsZSAgICAgIChvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBFTUFDU19TRVJWRVJfRklMRSlc blwNClx0LS1hbHRlcm5hdGUtZWRpdG9yIChvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBBTFRF Uk5BVEVfRURJVE9SKVxuIik7DQogIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQp9DQoNCg0Kdm9p ZA0KbGF1bmNoX2VkaXRvciAoYXJnYywgYXJndikNCiAgICAgaW50IGFyZ2M7DQogICAgIGNo YXIgKiphcmd2Ow0Kew0KICBjaGFyICpjbWRfbGluZTsNCiAgY2hhciAqZnVsbF9zZXJ2ZXJf ZmlsZTsNCiAgY2hhciAqcDsNCiAgY2hhciAqbXlwYXRoOw0KICBjaGFyICplbWFjc2V4ZTsN CiAgY2hhciAqc3lzdGVtZXhlYzsNCg0KICBteXBhdGggPSBhbGxvY2EoMipNQVhfUEFUSCk7 DQogIHN0cmNweShteXBhdGgsICIiKTsNCg0KICBpZiAoc2VydmVyX2ZpbGUpDQogICAgew0K ICAgICAgY2hhciAqc2V0YnVmOw0KICAgICAgZnVsbF9zZXJ2ZXJfZmlsZSA9IGFsbG9jYSgy Kk1BWF9QQVRIKTsNCiAgICAgIGdldF9mdWxsX3NlcnZlcl9maWxlKGZ1bGxfc2VydmVyX2Zp bGUpOw0KICAgICAgc2V0YnVmID0gYWxsb2NhKDIqKHN0cmxlbihmdWxsX3NlcnZlcl9maWxl KSszMikpOw0KICAgICAgc3RyY3B5KHNldGJ1ZiwgIkVNQUNTX1NFUlZFUl9GSUxFPSIpOw0K ICAgICAgc3RyY2F0KHNldGJ1ZiwgZnVsbF9zZXJ2ZXJfZmlsZSk7DQogICAgICBwdXRlbnYo c2V0YnVmKTsNCiAgICAgIHN0cmNweShzZXRidWYsICJFTUFDU0NMSUVOVF9TVEFSVElOR19T RVJWRVI9eWVzIik7DQogICAgICBwdXRlbnYoc2V0YnVmKTsNCiAgICB9DQoNCiAgaWYgKGFs dGVybmF0ZV9lZGl0b3IpDQogICAgew0KICAgICAgY21kX2xpbmUgPSBhbHRlcm5hdGVfZWRp dG9yOw0KICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAgICAgIGNtZF9saW5lID0gYWxsb2NhKDIq KE1BWF9QQVRIICsgMTYpKTsNCiAgICAgIHN0cmNweShjbWRfbGluZSwgIiIpOw0KI2lmZGVm IFdJTkRPV1NOVA0KICAgICAgZW1hY3NleGUgPSAicnVuZW1hY3MuZXhlIjsNCiAgICAgIHN5 c3RlbWV4ZWMgPSAic3lzdGVtZXhlYy5leGUiOw0KI2Vsc2UNCiAgICAgIGVtYWNzZXhlID0g ImVtYWNzIjsNCiAgICAgIHN5c3RlbWV4ZWMgPSAic3lzdGVtZXhlYyI7DQojZW5kaWYNCiAg ICAgIGlmICggZ2V0X2VtYWNzX2RpciggbXlwYXRoLCBNQVhfUEFUSCApICkNCiAgICAgICAg ew0KICAgICAgICAgIHN0cmNhdChteXBhdGgsICIvYmluLyIpOw0KICAgICAgICB9DQogICAg ICBpZiAoc3RybGVuKG15cGF0aCkgPT0gMCkNCiAgICAgICAgLyogR2V0IGEgcG9zc2libHkg cmVsYXRpdmUgcGF0aCB0byBlbWFjcyBiaW4gZGlyZWN0b3J5LiAqLw0KICAgICAgICB7DQog ICAgICAgICAgaWYgKGFyZ3ZbMF0pDQogICAgICAgICAgICBzdHJjcHkobXlwYXRoLCBhcmd2 WzBdKTsNCiAgICAgICAgICBjaGFyKiBwID0gc3Ryc3RyKG15cGF0aCwgImVtYWNzY2xpZW50 Iik7DQogICAgICAgICAgaWYgKHApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICpw ID0gJ1wwJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIHN0cmNweShteXBhdGgsICIiKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgc3RyY3B5KGNtZF9saW5lLCBteXBhdGgpOw0KICAgICAgc3RyY2F0 KGNtZF9saW5lLCBlbWFjc2V4ZSk7DQogICAgICBpZiAoKHN0cmxlbihteXBhdGgpID4gMCkg JiYgKGFjY2VzcyAoY21kX2xpbmUsIFhfT0spICE9IDApKQ0KICAgICAgICB7DQogICAgICAg ICAgbWVzc2FnZShUUlVFLCAiQ2FuJ3QgZmluZCAlc1xuIiwgY21kX2xpbmUpOw0KICAgICAg ICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAgICAgIH0NCiAgICAgIHN0cmNhdChjbWRf bGluZSwgIiAtbCBhdXRvLXNlcnZlciIpOw0KICAgIH0NCiAgLy9tZXNzYWdlKEZBTFNFLCAi YmVmb3JlIHN0YXJ0aW5nICVzXG4iLCBjbWRfbGluZSk7DQojaWZkZWYgV0lORE9XU05UDQog IC8vbWVzc2FnZShGQUxTRSwgIldJTkRPU1dOVFxuIik7DQogIHsNCiAgICBTVEFSVFVQSU5G TyBzdGFydDsNCiAgICBQUk9DRVNTX0lORk9STUFUSU9OIGNoaWxkOw0KDQogICAgbWVtc2V0 ICgmc3RhcnQsIDAsIHNpemVvZiAoc3RhcnQpKTsNCiAgICBzdGFydC5jYiA9IHNpemVvZiAo c3RhcnQpOw0KICAgIHN0YXJ0LmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVyB8IFNU QVJURl9VU0VDT1VOVENIQVJTOw0KICAgIHN0YXJ0LndTaG93V2luZG93ID0gU1dfSElERTsN CiAgICAvKiBFbnN1cmUgdGhhdCB3ZSBkb24ndCB3YXN0ZSBtZW1vcnkgaWYgdGhlIHVzZXIg aGFzIHNwZWNpZmllZCBhIGh1Z2UNCiAgICAgICBkZWZhdWx0IHNjcmVlbiBidWZmZXIgZm9y IGNvbW1hbmQgd2luZG93cy4gICovDQogICAgc3RhcnQuZHdYQ291bnRDaGFycyA9IDgwOw0K ICAgIHN0YXJ0LmR3WUNvdW50Q2hhcnMgPSAyNTsNCg0KICAgIGlmICghQ3JlYXRlUHJvY2Vz cyAoTlVMTCwgY21kX2xpbmUsIE5VTEwsIE5VTEwsIFRSVUUsIE5PUk1BTF9QUklPUklUWV9D TEFTUywNCiAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZzdGFydCwgJmNo aWxkKSkNCiAgICAgIHsNCiAgICAgICAgbWVzc2FnZSAoVFJVRSwgIkNvdWxkIG5vdCBydW4g JXNcbiIsIGNtZF9saW5lKTsNCiAgICAgICAgc2hvd193MzJzeXNfZXJyb3IxKCJDcmVhdGVQ cm9jZXNzIGZhaWxlZCIpOw0KICAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICAg fQ0KICB9DQojZWxzZSAvKiBub3QgV0lORE9XU05UICovDQojaWZkZWYgSEFWRV9XT1JLSU5H X1ZGT1JLDQogIC8vbWVzc2FnZShGQUxTRSwgIkZPUktcbiIpOw0KICBzaWduYWwoU0lHQ0xE LCBTSUdfSUdOKTsgIC8qIFNvIHRoZSBmb3JrIGNoaWxkIGNhbiBmaW5pc2ggd2l0aG91dCB3 YWl0IGhlcmUgKi8NCiAgc3dpdGNoKHBpZD1mb3JrKCkpIHsNCiAgY2FzZSAtMToNCiAgICBt ZXNzYWdlIChUUlVFLCAiZm9yayBlcnJvciwgc3RpbGwgaW4gcGFyZW50IC0gJXNcbiIsIHN0 cmVycm9yKGVycm5vKSk7DQogICAgZXhpdCAoRVhJVF9GQUlMVVJFKTsNCiAgY2FzZSAwOg0K ICAgIC8vbWVzc2FnZShGQUxTRSwgImZvcmtlZCBvaywgaW4gQ0hJTEQhXG4iKTsNCiAgICB7 DQogICAgICBpbnQgaSA9IG9wdGluZCAtIDE7DQogICAgICBleGVjdnAgKGNtZF9saW5lLCBh cmd2ICsgaSk7DQogICAgfQ0KICAgIG1lc3NhZ2UgKFRSVUUsICJmb3JrLCBjaGlsZCAtIGVy cm9yIGV4ZWN1dGluZyBhbHRlcm5hdGUgZWRpdG9yIFwiJXNcIjogJXNcbiIsDQogICAgICAg ICAgICAgIGNtZF9saW5lLCBzdHJlcnJvcihlcnJubykpOw0KICAgIGV4aXQgKEVYSVRfRkFJ TFVSRSk7DQogIGRlZmF1bHQ6DQogICAgLy9tZXNzYWdlKEZBTFNFLCAiZm9ya2VkIG9rLCBp biBQQVJFTlQhXG4iKTsNCiAgfQ0KI2Vsc2UgLyogbm8gd29ya2luZyBmb3JrICovDQogIC8v bWVzc2FnZShGQUxTRSwgIk5PIEZPUktcbiIpOw0KICB7DQogICAgY2hhciBzeXN0ZW1fY21k X2xpbmVbTUFYX1BBVEgqMl07DQogICAgaWYgKHN0cmxlbihteXBhdGgpKQ0KICAgICAgew0K ICAgICAgICBzdHJjcHkoc3lzdGVtX2NtZF9saW5lLCBteXBhdGgpOw0KICAgICAgICBzdHJj YXQoc3lzdGVtX2NtZF9saW5lLCBzeXN0ZW1leGVjKTsNCiAgICAgICAgaWYgKGFjY2VzcyAo c3lzdGVtX2NtZF9saW5lLCBYX09LKSAhPSAwKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAg IG1lc3NhZ2UoVFJVRSwgIkNhbid0IGZpbmQgJXNcbiIsIHN5c3RlbV9jbWRfbGluZSk7DQog ICAgICAgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOw0KICAgICAgICAgIH0NCiAgICAgIH0N CiAgICBlbHNlDQogICAgICB7DQogICAgICAgIHN0cmNweShzeXN0ZW1fY21kX2xpbmUsIHN5 c3RlbWV4ZWMpOw0KICAgICAgfQ0KICAgIHN0cmNhdChzeXN0ZW1fY21kX2xpbmUsICIgIik7 DQogICAgc3RyY2F0KHN5c3RlbV9jbWRfbGluZSwgY21kX2xpbmUpOw0KICAgIC8vbWVzc2Fn ZShGQUxTRSwgInN5c3RlbV9jbWRfbGluZT0lc1xuIiwgc3lzdGVtX2NtZF9saW5lKTsNCiAg ICBpbnQgcmV0Ow0KICAgIHN3aXRjaCAocmV0ID0gc3lzdGVtKHN5c3RlbV9jbWRfbGluZSkp IHsNCiAgICBjYXNlIEVYSVRfU1VDQ0VTUzoNCiAgICAgIGJyZWFrOw0KICAgIGNhc2UgRVhJ VF9GQUlMVVJFOg0KICAgICAgbWVzc2FnZShUUlVFLCAiRXJyb3IsICAnc3lzdGVtKCVzKScg cmV0dXJuZWQgRVhJVF9GQUlMVVJFLCBzdHJlcnJvcihlcnJubyk9JXNcbiIsIHN5c3RlbV9j bWRfbGluZSwgc3RyZXJyb3IoZXJybm8pKTsNCiAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsN CiAgICBjYXNlIC0xOg0KICAgICAgbWVzc2FnZShUUlVFLCAiRXJyb3IsICdzeXN0ZW0oJXMp JyByZXR1cm5lZCAtMSwgc3RyZXJyb3IoZXJybm8pPSVzXG4iLCBzeXN0ZW1fY21kX2xpbmUs IHN0cmVycm9yKGVycm5vKSk7DQogICAgICBleGl0KEVYSVRfRkFJTFVSRSk7DQogICAgZGVm YXVsdDoNCiAgICAgIC8qIHczMiByZXQ9MjU6ICJzeXN0ZW1leGVjIGVtYWNzIC1sIGF1dG8t c2VydmVyIiwgd2hlcmUgZW1hY3MgaXMgbm90IGluIHRoZSBwYXRoDQogICAgICAgICB3MzIg cmV0PTM3OiAic3lzdGVtZXhlYy5leGUgb28tc3BkXGkzODZcZW1hY3MgLWwgYXV0by1zZXJ2 ZXIiLCB3aGVyZSBlbWFjcyBpcyBub3QgdGhlcmUNCiAgICAgICAgIHczMiByZXQ9NTk6ICJ4 YzpccGF0aFxzeXN0ZW1leGVjLmV4ZSBvby1zcGRcaTM4NlxlbWFjcyAtbCBhdXRvLXNlcnZl ciINCiAgICAgICovDQogICAgICBtZXNzYWdlKFRSVUUsICJFcnJvciwgJ3N5c3RlbSglcykn IHJldHVybmVkICVkLCBzdHJlcnJvcihlcnJubyk9JXNcbiIsIHN5c3RlbV9jbWRfbGluZSwg cmV0LCBzdHJlcnJvcihlcnJubykpOw0KICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOw0KICAg IH0NCiAgfQ0KI2VuZGlmDQojZW5kaWYNCiAgLy9tZXNzYWdlKEZBTFNFLCAiYWZ0ZXIgc3Rh cnRpbmcgJXNcbiIsIGNtZF9saW5lKTsNCn0NCg0KDQppbnQNCm1haW4gKGFyZ2MsIGFyZ3Yp DQogICAgIGludCBhcmdjOw0KICAgICBjaGFyICoqYXJndjsNCnsNCiAgSFNPQ0tFVCBzOw0K ICBpbnQgaSwgcmwsIG5lZWRsZiA9IDA7DQogIGNoYXIgKmN3ZDsNCiAgY2hhciBzdHJpbmdb QlVGU0laKzFdOw0KDQogIHByb2duYW1lID0gYXJndlswXTsNCg0KICAvKiBQcm9jZXNzIG9w dGlvbnMuICAqLw0KICBkZWNvZGVfb3B0aW9ucyAoYXJnYywgYXJndik7DQoNCiAgLy8gU2Vl bXMgbW9yZSBuYXR1cmFsIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgdGhhbiBmYWlsIGhlcmU6DQog IC8qICAgaWYgKChhcmdjIC0gb3B0aW5kIDwgMSkgJiYgIWV2YWwpICovDQogIC8qICAgICB7 ICovDQogIC8qICAgICAgIG1lc3NhZ2UgKFRSVUUsICJmaWxlIG5hbWUgb3IgYXJndW1lbnQg cmVxdWlyZWRcblRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvblxuIiwgKi8N CiAgLyogICAgICAgICAgICAgICBwcm9nbmFtZSk7ICovDQogIC8qICAgICAgIGV4aXQgKEVY SVRfRkFJTFVSRSk7ICovDQogIC8qICAgICB9ICovDQoNCiAgLyogTm8gbWVzc2FnZSBib3gg cG9wdXBzIHdoZW4gd2Ugd2FpdC4gKi8NCiAgaW50IGlzbG9jYWwgPSAxOw0KICBpZiAoKHMg PSBzZXRfc29ja2V0ICggYWx0ZXJuYXRlX2VkaXRvciB8fCAoc3RhcnRfdGltZW91dF9pbnQg PiAwKSAsICZpc2xvY2FsKSkgPT0gSU5WQUxJRF9TT0NLRVQpDQogICAgew0KICAgICAgaWYg KGFsdGVybmF0ZV9lZGl0b3IgfHwgKGlzbG9jYWwgJiYgKHN0YXJ0X3RpbWVvdXRfaW50ID4g MCkpKQ0KICAgICAgICB7DQogICAgICAgICAgbGF1bmNoX2VkaXRvcihhcmdjLCBhcmd2KTsN CiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKGlzbG9j YWwpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIG1lc3NhZ2UoVFJVRSwgIlRoZSBy ZXF1ZXN0ZWQgbG9jYWwgRW1hY3Mgc2VydmVyIGlzIG5vdCBydW5uaW5nXG4iKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg IG1lc3NhZ2UoVFJVRSwgIlRoZSByZXF1ZXN0ZWQgRW1hY3MgcmVtb3RlIHNlcnZlciBpcyBu b3QgcnVubmluZ1xuIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgZXhpdChFWElUX0ZB SUxVUkUpOw0KICAgICAgICB9DQogICAgICBwcmludGYoIldhaXRpbmcgZm9yIEVtYWNzIHNl cnZlciB0byBzdGFydCAuLiIpOw0KICAgICAgd2hpbGUgKCAoKHMgPSBzZXRfc29ja2V0ICgg MSAhPSBzdGFydF90aW1lb3V0X2ludCwgJmlzbG9jYWwgKSkgPT0gSU5WQUxJRF9TT0NLRVQp ICYmIChzdGFydF90aW1lb3V0X2ludC0tID4gMCkgKQ0KICAgICAgICB7DQogICAgICAgICAg aWYgKHN0YXJ0X3RpbWVvdXRfaW50ID09IDApIGV4aXQgKEVYSVRfRkFJTFVSRSk7DQogICAg ICAgICAgLy9pZiAoMCA9PSBzdGFydF90aW1lb3V0X2ludCAlIDIpDQogICAgICAgICAgcHJp bnRmKCIuIik7DQogICAgICAgICAgc2xlZXAoMSk7DQogICAgICAgIH0NCiAgICAgIHByaW50 ZigiIGNvbm5lY3RlZC5cbiIpOw0KICAgIH0NCg0KI2lmZGVmIEhBVkVfR0VUQ1dEDQogIGN3 ZCA9IGdldGN3ZCAoc3RyaW5nLCBzaXplb2Ygc3RyaW5nKTsNCiNlbHNlDQogIGN3ZCA9IGdl dHdkIChzdHJpbmcpOw0KI2VuZGlmDQogIGlmIChjd2QgPT0gMCkNCiAgICB7DQogICAgICAv KiBnZXR3ZCBwdXRzIG1lc3NhZ2UgaW4gU1RSSU5HIGlmIGl0IGZhaWxzLiAgKi8NCiNpZmRl ZiBIQVZFX0dFVENXRA0KICAgICAgbWVzc2FnZSAoVFJVRSwgIiVzICglcylcbiIsDQogICAg ICAgICAgICAgICAgIkNhbm5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIsIHN0 cmVycm9yIChlcnJubykpOw0KI2Vsc2UNCiAgICAgIG1lc3NhZ2UgKFRSVUUsICIlcyAoJXMp XG4iLCBzdHJpbmcsIHN0cmVycm9yIChlcnJubykpOw0KI2VuZGlmDQogICAgICBmYWlsIChh cmdjLCBhcmd2KTsNCiAgICB9DQoNCiAgaWYgKChhcmdjIC0gb3B0aW5kIDwgMSkgJiYgIWV2 YWwpDQogICAgew0KICAgICAgLyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbyBqdXN0IHJh aXNlIHRoZSBzZWxlY3RlZCBmcmFtZSAqLw0KICAgICAgU0VORF9TVFJJTkcgKCItZXZhbCAo cmFpc2UtZnJhbWUpICIpOw0KICAgIH0NCg0KICBpZiAobm93YWl0KQ0KICAgIFNFTkRfU1RS SU5HICgiLW5vd2FpdCAiKTsNCg0KICBpZiAoZXZhbCkNCiAgICBTRU5EX1NUUklORyAoIi1l dmFsICIpOw0KDQogIGlmIChkaXNwbGF5KQ0KICAgIHsNCiAgICAgIFNFTkRfU1RSSU5HICgi LWRpc3BsYXkgIik7DQogICAgICBTRU5EX1FVT1RFRCAoZGlzcGxheSk7DQogICAgICBTRU5E X1NUUklORyAoIiAiKTsNCiAgICB9DQoNCiAgaWYgKChhcmdjIC0gb3B0aW5kID4gMCkpDQog ICAgew0KICAgICAgZm9yIChpID0gb3B0aW5kOyBpIDwgYXJnYzsgaSsrKQ0KCXsNCgkgIGlm IChldmFsKQ0KCSAgICA7IC8qIERvbid0IHByZXBlbmQgYW55IGN3ZCBvciBhbnl0aGluZyBs aWtlIHRoYXQuICAqLw0KCSAgZWxzZSBpZiAoKmFyZ3ZbaV0gPT0gJysnKQ0KCSAgICB7DQoJ ICAgICAgY2hhciAqcCA9IGFyZ3ZbaV0gKyAxOw0KCSAgICAgIHdoaWxlIChpc2RpZ2l0ICgo dW5zaWduZWQgY2hhcikgKnApIHx8ICpwID09ICc6JykgcCsrOw0KCSAgICAgIGlmICgqcCAh PSAwKQ0KCQl7DQoJCSAgU0VORF9RVU9URUQgKGN3ZCk7DQoJCSAgU0VORF9TVFJJTkcgKCIv Iik7DQoJCX0NCgkgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKCEgZmlsZV9uYW1lX2Fic29s dXRlX3AgKGFyZ3ZbaV0pKQ0KCSAgICB7DQoJICAgICAgU0VORF9RVU9URUQgKGN3ZCk7DQoJ ICAgICAgU0VORF9TVFJJTkcgKCIvIik7DQoJICAgIH0NCg0KCSAgU0VORF9RVU9URUQgKGFy Z3ZbaV0pOw0KCSAgU0VORF9TVFJJTkcgKCIgIik7DQoJfQ0KICAgIH0NCiAgZWxzZQ0KICAg IHsNCiAgICAgIC8qIEZJWC1NRTogRm9yIHNvbWUgcmVhc29uIG11c3QgYXZvaWQgdGhlIGxv b3AgaGVyZSBpZiBubw0KICAgICAgICAgYXJncy4gTWF5YmUgbm90aGluZyB0byByZWFkIGZy b20gc3RkaW4/ICovDQogICAgICBpZiAoISgoYXJnYyAtIG9wdGluZCA8IDEpICYmICFldmFs KSApDQogICAgICAgIHsNCiAgICAgICAgICB3aGlsZSAoZmdldHMgKHN0cmluZywgQlVGU0la LCBzdGRpbikpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIFNFTkRfUVVPVEVEIChz dHJpbmcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAg IHsNCiAgICAgICAgICAvKiBEbyBub3Qgd2FpdCBpZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRz ICovDQogICAgICAgICAgbm93YWl0ID0gMTsNCiAgICAgICAgfQ0KICAgICAgU0VORF9TVFJJ TkcgKCIgIik7DQogICAgfQ0KDQogIFNFTkRfU1RSSU5HICgiXG4iKTsNCg0KICAvKiBNYXli ZSB3YWl0IGZvciBhbiBhbnN3ZXIuICAgKi8NCiAgaWYgKCFub3dhaXQpDQogICAgew0KICAg ICAgaWYgKCFldmFsKQ0KICAgICAgICB7DQogICAgICAgICAgcHJpbnRmICgiV2FpdGluZyBm b3IgRW1hY3MgZWRpdGluZyB0byBiZSByZWFkeSAuLi4iKTsNCiAgICAgICAgICBuZWVkbGYg PSAyOw0KICAgICAgICB9DQogICAgICBmZmx1c2ggKHN0ZG91dCk7DQoNCiAgICAgIC8qIE5v dywgd2FpdCBmb3IgYW4gYW5zd2VyIGFuZCBwcmludCBhbnkgbWVzc2FnZXMuICAqLw0KICAg ICAgd2hpbGUgKChybCA9IHJlY3YgKHMsIHN0cmluZywgQlVGU0laLCAwKSkgPiAwKQ0KICAg ICAgICB7DQoJICBzdHJpbmdbcmxdID0gJ1wwJzsNCiAgICAgICAgICBpZiAobmVlZGxmID09 IDIpDQogICAgICAgICAgICBwcmludGYgKCJcbiIpOw0KCSAgcHJpbnRmICgiJXMiLCBzdHJp bmcpOw0KCSAgbmVlZGxmID0gc3RyaW5nWzBdID09ICdcMCcgPyBuZWVkbGYgOiBzdHJpbmdb c3RybGVuIChzdHJpbmcpIC0gMV0gIT0gJ1xuJzsNCiAgICAgICAgfQ0KDQogICAgICBpZiAo bmVlZGxmKQ0KICAgICAgICBwcmludGYgKCJcbiIpOw0KICAgICAgZmZsdXNoIChzdGRvdXQp Ow0KICAgIH0NCg0KICBDTE9TRV9TT0NLRVQgKHMpOw0KICByZXR1cm4gRVhJVF9TVUNDRVNT Ow0KfQ0KDQojZW5kaWYgLyogSEFWRV9TT0NLRVRTICYmIEhBVkVfSU5FVF9TT0NLRVRTICov DQoNCiNpZm5kZWYgSEFWRV9TVFJFUlJPUg0KY2hhciAqDQpzdHJlcnJvciAoZXJybnVtKQ0K ICAgICBpbnQgZXJybnVtOw0Kew0KICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsNCiAg ZXh0ZXJuIGludCBzeXNfbmVycjsNCg0KICBpZiAoZXJybnVtID49IDAgJiYgZXJybnVtIDwg c3lzX25lcnIpDQogICAgcmV0dXJuIHN5c19lcnJsaXN0W2Vycm51bV07DQogIHJldHVybiAo Y2hhciAqKSAiVW5rbm93biBlcnJvciI7DQp9DQoNCiNlbmRpZiAvKiAhIEhBVkVfU1RSRVJS T1IgKi8NCg0KLyogYXJjaC10YWc6IGYzOWJiOWM0LTczZWItNDc3ZS04OTZkLTUwODMyZTJj YTlhNw0KICAgKGRvIG5vdCBjaGFuZ2UgdGhpcyBjb21tZW50KSAqLw0KDQovKiBlbWFjc2Ns aWVudC5jIGVuZHMgaGVyZSAqLw0K --------------080206020504060205030806 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --------------080206020504060205030806--