From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58298 invoked by alias); 28 Dec 2018 11:19:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 58288 invoked by uid 89); 28 Dec 2018 11:19:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.1 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,MIME_BASE64_BLANKS,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr10055.outbound.protection.outlook.com (HELO EUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.55) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Dec 2018 11:19:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OO2cYKWCil4ucs20HrJRgMniyiblJkenShASu6wiBV8=; b=oOFV1bX6JgiAbSdYnZTqgySQ4fBXTsP4CtHOsiXCIYYx4G09M3+hOmqzYpU86OykUzs58gDkCDGdystXHcHNniExQUlVodnf9aCLNeRkbft6PEuulWBMIB65P72Tj646Tn39qC26b9eWqEUnODYNsjji0V4NtCfIk3o9ibHmvls= Received: from HE1PR0801MB1722.eurprd08.prod.outlook.com (10.168.149.146) by HE1PR0801MB2715.eurprd08.prod.outlook.com (10.169.123.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1471.20; Fri, 28 Dec 2018 11:19:36 +0000 Received: from HE1PR0801MB1722.eurprd08.prod.outlook.com ([fe80::a405:8891:2433:3011]) by HE1PR0801MB1722.eurprd08.prod.outlook.com ([fe80::a405:8891:2433:3011%8]) with mapi id 15.20.1471.019; Fri, 28 Dec 2018 11:19:36 +0000 From: Sudakshina Das To: Jan Hubicka , "stransky@redhat.com" , "jakub@redhat.com" , "gcc-patches@gcc.gnu.org" CC: nd Subject: Re: Fix devirtualiation in expanded thunks Date: Fri, 28 Dec 2018 11:44:00 -0000 Message-ID: References: <20181221192053.ut4rfit4mxtktklo@kam.mff.cuni.cz> In-Reply-To: <20181221192053.ut4rfit4mxtktklo@kam.mff.cuni.cz> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Sudi.Das@arm.com; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) Content-Type: text/plain; charset="utf-8" Content-ID: <3DAA8D9824002E428513A935C8E995C7@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg01724.txt.bz2 SGkgSmFuDQoNCk9uIDIxLzEyLzE4IDc6MjAgUE0sIEphbiBIdWJpY2thIHdy b3RlOg0KPiBIaSwNCj4gdGhpcyBwYXRjaCBmaXhlcyBwb2x5bW9ycGhpYyBj YWxsIGFuYWx5c2lzIGluIHRodW5rcy4gIFVubGlrZSBub3JtYWwNCj4gbWV0 aG9kcywgdGh1bmtzIHRha2UgVEhJUyBwb2ludGVyIG9mZnNldHRlZCBieSBh IGtub3duIGNvbnN0YW50LiBUaGlzDQo+IG5lZWRzIHQgYmUgY29tcGVuc2F0 ZWQgZm9yIHdoZW4gY2FsY3VsYXRpbmcgYWRkcmVzcyBvZiBvdXRlciB0eXBl Lg0KPg0KPiBCb290c3RyYXBwZWQvcmVndGVzdGVkIHg4Nl82NC1saW51eCwg YWxzbyB0ZXN0ZWQgd2l0aCBGaXJlZm94IHdoZXJlIHRoaXMNCj4gYnVnIHRy aWdnZXIgbWlzb3B0aW1pemF0aW9uIGluIHNwZWxsY2hlY2tlci4gIEkgcGxh biB0byBiYWNrcG9ydCBpdCB0bw0KPiByZWxlYXNlIGJyYW5jaGVzIHNvb24u DQo+DQo+IEhvbnphDQo+DQo+IAlQUiBpcGEvODg1NjENCj4gCSogaXBhLXBv bHltb3JwaGljLWNhbGwuYw0KPiAJKGlwYV9wb2x5bW9ycGhpY19jYWxsX2Nv bnRleHQ6OmlwYV9wb2x5bW9ycGhpY19jYWxsX2NvbnRleHQpOiBIYW5kbGUN Cj4gCWFyZ3VtZW50cyBvZiB0aHVua3MgY29ycmVjdGx5Lg0KPiAJKGlwYV9w b2x5bW9ycGhpY19jYWxsX2NvbnRleHQ6OmdldF9keW5hbWljX2NvbnRleHQp OiBCZSByZWFkeSBmb3INCj4gCU5VTEwgaW5zdGFuY2UgcGludGVyLg0KPiAJ KiBsdG8tY2dyYXBoLmMgKGx0b19vdXRwdXRfbm9kZSk6IEFsd2F5cyBzdHJl YW0gdGh1bmsgaW5mby4NCj4gCSogZysrLmRnL3RyZWUtcHJvZi9kZXZpcnQu QzogTmV3IHRlc3RjYXNlLg0KPiBJbmRleDogaXBhLXBvbHltb3JwaGljLWNh bGwuYw0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0tLSBpcGEtcG9s eW1vcnBoaWMtY2FsbC5jCShyZXZpc2lvbiAyNjczMjUpDQo+ICsrKyBpcGEt cG9seW1vcnBoaWMtY2FsbC5jCSh3b3JraW5nIGNvcHkpDQo+IEBAIC05OTUs OSArOTk1LDIyIEBAIGlwYV9wb2x5bW9ycGhpY19jYWxsX2NvbnRleHQ6Omlw YV9wb2x5bW8NCj4gICAJew0KPiAgIAkgIG91dGVyX3R5cGUNCj4gICAJICAg ICA9IFRZUEVfTUFJTl9WQVJJQU5UIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAo YmFzZV9wb2ludGVyKSkpOw0KPiArCSAgY2dyYXBoX25vZGUgKm5vZGUgPSBj Z3JhcGhfbm9kZTo6Z2V0IChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOw0KPiAg IAkgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAob3V0ZXJfdHlwZSkgPT0gUkVD T1JEX1RZUEUNCj4gICAJCSAgICAgIHx8IFRSRUVfQ09ERSAob3V0ZXJfdHlw ZSkgPT0gVU5JT05fVFlQRSk7DQo+ICAgDQo+ICsJICAvKiBIYW5kbGUgdGhl IGNhc2Ugd2UgaW5saW5lZCBpbnRvIGEgdGh1bmsuICBJbiB0aGlzIGNhc2UN Cj4gKwkgICAgIHRodW5rIGhhcyBUSElTIHBvaW50ZXIgb2YgdHlwZSBiYXIs IGJ1dCBpdCByZWFsbHkgcmVjZWl2ZXMNCj4gKwkgICAgIGFkZHJlc3MgdG8g aXRzIGJhc2UgdHlwZSBmb28gd2hpY2ggc2l0cyBpbiBiYXIgYXQNCj4gKwkg ICAgIDAtdGh1bmsuZml4ZWRfb2Zmc2V0LiAgSXQgc3RhcnRzIHdpdGggY29k ZSB0aGF0IGFkZHMNCj4gKwkgICAgIHRoaW5rLmZpeGVkX29mZnNldCB0byB0 aGUgcG9pbnRlciB0byBjb21wZW5zYXRlIGZvciB0aGlzLg0KPiArDQo+ICsJ ICAgICBCZWNhdXNlIHdlIHdhbGtlZCBhbGwgdGhlIHdheSB0byB0aGUgYmVn aW5pbmcgb2YgdGh1bmssIHdlIG5vdw0KPiArCSAgICAgc2VlIHBvaW50ZXIg JmJhci10aHVuay5maXhlZF9vZmZzZXQgYW5kIG5lZWQgdG8gY29tcGVuc2F0 ZQ0KPiArCSAgICAgZm9yIGl0LiAgKi8NCj4gKwkgIGlmIChub2RlLT50aHVu ay5maXhlZF9vZmZzZXQpDQo+ICsJICAgIG9mZnNldCAtPSBub2RlLT50aHVu ay5maXhlZF9vZmZzZXQgKiBCSVRTX1BFUl9VTklUOw0KPiArDQo+ICAgCSAg LyogRHluYW1pYyBjYXN0aW5nIGhhcyBwb3NzaWJseSB1cGNhc3RlZCB0aGUg dHlwZQ0KPiAgIAkgICAgIGluIHRoZSBoaWVhcmNoeS4gIEluIHRoaXMgY2Fz ZSBvdXRlciB0eXBlIGlzIGxlc3MNCj4gICAJICAgICBpbmZvcm1hdGl2ZSB0 aGFuIGlubmVyIHR5cGUgYW5kIHdlIHNob3VsZCBmb3JnZXQNCj4gQEAgLTEw MDUsNyArMTAxOCwxMSBAQCBpcGFfcG9seW1vcnBoaWNfY2FsbF9jb250ZXh0 OjppcGFfcG9seW1vDQo+ICAgCSAgaWYgKChvdHJfdHlwZQ0KPiAgIAkgICAg ICAgJiYgIWNvbnRhaW5zX3R5cGVfcCAob3V0ZXJfdHlwZSwgb2Zmc2V0LA0K PiAgIAkJCQkgICAgb3RyX3R5cGUpKQ0KPiAtCSAgICAgIHx8ICFjb250YWlu c19wb2x5bW9ycGhpY190eXBlX3AgKG91dGVyX3R5cGUpKQ0KPiArCSAgICAg IHx8ICFjb250YWluc19wb2x5bW9ycGhpY190eXBlX3AgKG91dGVyX3R5cGUp DQo+ICsJICAgICAgLyogSWYgd2UgY29tcGlsZSB0aHVuayB3aXRoIHZpcnR1 YWwgb2Zmc2V0LCB0aGUgVEhJUyBwb2ludGVyDQo+ICsJCSBpcyBhZGp1c3Rl ZCBieSB1bmtub3duIHZhbHVlLiAgV2UgY2FuJ3QgdGh1cyB1c2Ugb3V0ZXIg aW5mbw0KPiArCQkgYXQgYWxsLiAgKi8NCj4gKwkgICAgICB8fCBub2RlLT50 aHVuay52aXJ0dWFsX29mZnNldF9wKQ0KPiAgIAkgICAgew0KPiAgIAkgICAg ICBvdXRlcl90eXBlID0gTlVMTDsNCj4gICAJICAgICAgaWYgKGluc3RhbmNl KQ0KPiBAQCAtMTAzMCw3ICsxMDQ3LDE1IEBAIGlwYV9wb2x5bW9ycGhpY19j YWxsX2NvbnRleHQ6OmlwYV9wb2x5bW8NCj4gICAJICAgICAgbWF5YmVfaW5f Y29uc3RydWN0aW9uID0gZmFsc2U7DQo+ICAgCSAgICB9DQo+ICAgCSAgaWYg KGluc3RhbmNlKQ0KPiAtCSAgICAqaW5zdGFuY2UgPSBiYXNlX3BvaW50ZXI7 DQo+ICsJICAgIHsNCj4gKwkgICAgICAvKiBJZiBtZXRob2QgaXMgZXhwYW5k ZWQgdGh1bmssIHdlIG5lZWQgdG8gYXBwbHkgdGh1bmsgb2Zmc2V0DQo+ICsJ CSB0byBpbnN0YW5jZSBwb2ludGVyLiAgKi8NCj4gKwkgICAgICBpZiAobm9k ZS0+dGh1bmsudmlydHVhbF9vZmZzZXRfcA0KPiArCQkgIHx8IG5vZGUtPnRo dW5rLmZpeGVkX29mZnNldCkNCj4gKwkJKmluc3RhbmNlID0gTlVMTDsNCj4g KwkgICAgICBlbHNlDQo+ICsJICAgICAgICAqaW5zdGFuY2UgPSBiYXNlX3Bv aW50ZXI7DQo+ICsJICAgIH0NCj4gICAJICByZXR1cm47DQo+ICAgCX0NCj4g ICAgICAgICAvKiBOb24tUE9EcyBwYXNzZWQgYnkgdmFsdWUgYXJlIHJlYWxs eSBwYXNzZWQgYnkgaW52aXNpYmxlDQo+IEBAIC0xNTQ3LDYgKzE1NzIsOSBA QCBpcGFfcG9seW1vcnBoaWNfY2FsbF9jb250ZXh0OjpnZXRfZHluYW1pDQo+ ICAgICBIT1NUX1dJREVfSU5UIGluc3RhbmNlX29mZnNldCA9IG9mZnNldDsN Cj4gICAgIHRyZWUgaW5zdGFuY2Vfb3V0ZXJfdHlwZSA9IG91dGVyX3R5cGU7 DQo+ICAgDQo+ICsgIGlmICghaW5zdGFuY2UpDQo+ICsgICAgcmV0dXJuIGZh bHNlOw0KPiArDQo+ICAgICBpZiAob3RyX3R5cGUpDQo+ICAgICAgIG90cl90 eXBlID0gVFlQRV9NQUlOX1ZBUklBTlQgKG90cl90eXBlKTsNCj4gICANCj4g SW5kZXg6IGx0by1jZ3JhcGguYw0KPiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQo+IC0tLSBsdG8tY2dyYXBoLmMJKHJldmlzaW9uIDI2NzMyNSkNCj4gKysr IGx0by1jZ3JhcGguYwkod29ya2luZyBjb3B5KQ0KPiBAQCAtNTQ3LDcgKzU0 NywxMSBAQCBsdG9fb3V0cHV0X25vZGUgKHN0cnVjdCBsdG9fc2ltcGxlX291 dHB1DQo+ICAgICBzdHJlYW1lcl93cml0ZV9iaXRwYWNrICgmYnApOw0KPiAg ICAgc3RyZWFtZXJfd3JpdGVfZGF0YV9zdHJlYW0gKG9iLT5tYWluX3N0cmVh bSwgc2VjdGlvbiwgc3RybGVuIChzZWN0aW9uKSArIDEpOw0KPiAgIA0KPiAt ICBpZiAobm9kZS0+dGh1bmsudGh1bmtfcCkNCj4gKyAgLyogU3RyZWFtIHRo dW5rIGluZm8gYWx3YXlzIGJlY2F1c2Ugd2UgdXNlIGl0IGluDQo+ICsgICAg IGlwYV9wb2x5bW9ycGhpY19jYWxsX2NvbnRleHQ6OmlwYV9wb2x5bW9ycGhp Y19jYWxsX2NvbnRleHQNCj4gKyAgICAgdG8gcHJvcGVybHkgaW50ZXJwcmV0 IFRISVMgcG9pbnRlcnMgZm9yIHRodW5rcyB0aGF0IGhhcyBiZWVuIGNvbnZl cnRlZA0KPiArICAgICB0byBHaW1wbGUuICAqLw0KPiArICBpZiAobm9kZS0+ ZGVmaW5pdGlvbikNCj4gICAgICAgew0KPiAgICAgICAgIHN0cmVhbWVyX3dy aXRlX3Vod2lfc3RyZWFtDQo+ICAgCSAob2ItPm1haW5fc3RyZWFtLA0KPiBA QCAtMTI5NSw3ICsxMjk5LDcgQEAgaW5wdXRfbm9kZSAoc3RydWN0IGx0b19m aWxlX2RlY2xfZGF0YSAqZg0KPiAgICAgaWYgKHNlY3Rpb24pDQo+ICAgICAg IG5vZGUtPnNldF9zZWN0aW9uX2Zvcl9ub2RlIChzZWN0aW9uKTsNCj4gICAN Cj4gLSAgaWYgKG5vZGUtPnRodW5rLnRodW5rX3ApDQo+ICsgIGlmIChub2Rl LT5kZWZpbml0aW9uKQ0KPiAgICAgICB7DQo+ICAgICAgICAgaW50IHR5cGUg PSBzdHJlYW1lcl9yZWFkX3Vod2kgKGliKTsNCj4gICAgICAgICBIT1NUX1dJ REVfSU5UIGZpeGVkX29mZnNldCA9IHN0cmVhbWVyX3JlYWRfdWh3aSAoaWIp Ow0KPiBJbmRleDogdGVzdHN1aXRlL2crKy5kZy90cmVlLXByb2YvZGV2aXJ0 LkMNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtLS0gdGVzdHN1aXRl L2crKy5kZy90cmVlLXByb2YvZGV2aXJ0LkMJKG5vbmV4aXN0ZW50KQ0KPiAr KysgdGVzdHN1aXRlL2crKy5kZy90cmVlLXByb2YvZGV2aXJ0LkMJKHdvcmtp bmcgY29weSkNCj4gQEAgLTAsMCArMSwxMjMgQEANCj4gKy8qIHsgZGctb3B0 aW9ucyAiLU8zIC1mZHVtcC10cmVlLWRvbTMiIH0gKi8NCj4gK3N0cnVjdCBu c0lTdXBwb3J0cw0KPiArew0KPiArICB2aXJ0dWFsIGludCBRdWVyeUludGVy ZmFjZSAoY29uc3QgaW50ICZhSUlELCB2b2lkICoqYUluc3RhbmNlUHRyKSA9 IDA7DQo+ICsgIHZpcnR1YWwgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5v Y2xvbmUpKSB1bnNpZ25lZCBBZGRSZWYgKHZvaWQpID0gMDsNCj4gKyAgdmly dHVhbCB1bnNpZ25lZCBSZWxlYXNlICh2b2lkKSA9IDA7DQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgbnNJT2JzZXJ2ZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMN Cj4gK3sNCj4gKyAgdmlydHVhbCBpbnQgT2JzZXJ2ZSAobnNJU3VwcG9ydHMg KiBhU3ViamVjdCwgY29uc3QgY2hhciAqYVRvcGljLCBjb25zdCB1bnNpZ25l ZCBzaG9ydCAqYURhdGEpID0gMDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBu c0lTdXBwb3J0c1dlYWtSZWZlcmVuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMN Cj4gK3sNCj4gKyAgdmlydHVhbCBpbnQgR2V0V2Vha1JlZmVyZW5jZSAodm9p ZCAqKl9yZXR2YWwpID0gMDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBuc1N1 cHBvcnRzV2Vha1JlZmVyZW5jZSA6IHB1YmxpYyBuc0lTdXBwb3J0c1dlYWtS ZWZlcmVuY2UNCj4gK3sNCj4gKyAgbnNTdXBwb3J0c1dlYWtSZWZlcmVuY2Ug KCkgOiBtUHJveHkgKDApIHt9DQo+ICsgIHZpcnR1YWwgaW50IEdldFdlYWtS ZWZlcmVuY2UgKHZvaWQgKipfcmV0dmFsKSBvdmVycmlkZSB7IHJldHVybiAw OyB9DQo+ICsgIH5uc1N1cHBvcnRzV2Vha1JlZmVyZW5jZSAoKSB7fQ0KPiAr ICB2b2lkIE5vdGljZVByb3h5RGVzdHJ1Y3Rpb24gKCkgeyBtUHJveHkgPSBu dWxscHRyOyB9DQo+ICsgIHZvaWQgKm1Qcm94eTsNCj4gKyAgdm9pZCBDbGVh cldlYWtSZWZlcmVuY2VzICgpOw0KPiArICBib29sIEhhc1dlYWtSZWZlcmVu Y2VzICgpIGNvbnN0IHsgcmV0dXJuICEhbVByb3h5OyB9DQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3QgbW96SVBlcnNvbmFsRGljdGlvbmFyeSA6IHB1YmxpYyBu c0lTdXBwb3J0cw0KPiArew0KPiArICB2aXJ0dWFsIGludCBMb2FkICh2b2lk KSA9IDA7DQo+ICsgIHZpcnR1YWwgaW50IFNhdmUgKHZvaWQpID0gMDsNCj4g KyAgdmlydHVhbCBpbnQgR2V0V29yZExpc3QgKHZvaWQgKiphV29yZExpc3Qp ID0gMDsNCj4gKyAgdmlydHVhbCBpbnQgQ2hlY2sgKGNvbnN0IGludCAmd29y ZCwgYm9vbCAqIF9yZXR2YWwpID0gMDsNCj4gKyAgdmlydHVhbCBpbnQgQWRk V29yZCAoY29uc3QgaW50ICZ3b3JkKSA9IDA7DQo+ICsgIHZpcnR1YWwgaW50 IFJlbW92ZVdvcmQgKGNvbnN0IGludCAmd29yZCkgPSAwOw0KPiArICB2aXJ0 dWFsIGludCBJZ25vcmVXb3JkIChjb25zdCBpbnQgJndvcmQpID0gMDsNCj4g KyAgdmlydHVhbCBpbnQgRW5kU2Vzc2lvbiAodm9pZCkgPSAwOw0KPiArfTsN Cj4gKw0KPiArc3RydWN0IG1velBlcnNvbmFsRGljdGlvbmFyeSBmaW5hbA0K PiArICA6IHB1YmxpYyBtb3pJUGVyc29uYWxEaWN0aW9uYXJ5LCBwdWJsaWMg bnNJT2JzZXJ2ZXIsIHB1YmxpYyBuc1N1cHBvcnRzV2Vha1JlZmVyZW5jZQ0K PiArew0KPiArICB2aXJ0dWFsIGludCBRdWVyeUludGVyZmFjZSAoY29uc3Qg aW50ICZhSUlELCB2b2lkICoqYUluc3RhbmNlUHRyKSBvdmVycmlkZTsNCj4g KyAgdmlydHVhbCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkp IHVuc2lnbmVkIEFkZFJlZiAodm9pZCkgb3ZlcnJpZGU7DQo+ICsgIHZpcnR1 YWwgdW5zaWduZWQgUmVsZWFzZSAodm9pZCkgb3ZlcnJpZGU7DQo+ICsgIHVu c2lnbmVkIGxvbmcgbVJlZkNudDsNCj4gKyAgdmlydHVhbCBpbnQgTG9hZCAo dm9pZCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQ0KPiArICB2aXJ0dWFsIGlu dCBTYXZlICh2b2lkKSBvdmVycmlkZSB7IHJldHVybiAwOyB9DQo+ICsgIHZp cnR1YWwgaW50IEdldFdvcmRMaXN0ICh2b2lkICoqYVdvcmRMaXN0KSBvdmVy cmlkZSB7IHJldHVybiAwOyB9DQo+ICsgIHZpcnR1YWwgaW50IENoZWNrIChj b25zdCBpbnQgJndvcmQsIGJvb2wgKiBfcmV0dmFsKSBvdmVycmlkZSB7IHJl dHVybiAwOyB9DQo+ICsgIHZpcnR1YWwgaW50IEFkZFdvcmQgKGNvbnN0IGlu dCAmd29yZCkgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQ0KPiArICB2aXJ0dWFs IGludCBSZW1vdmVXb3JkIChjb25zdCBpbnQgJndvcmQpIG92ZXJyaWRlIHsg cmV0dXJuIDA7IH0NCj4gKyAgdmlydHVhbCBpbnQgSWdub3JlV29yZCAoY29u c3QgaW50ICZ3b3JkKSBvdmVycmlkZSB7IHJldHVybiAwOyB9DQo+ICsgIHZp cnR1YWwgaW50IEVuZFNlc3Npb24gKHZvaWQpIG92ZXJyaWRlIHsgcmV0dXJu IDA7IH0NCj4gKyAgdmlydHVhbCBpbnQgT2JzZXJ2ZSAobnNJU3VwcG9ydHMg KiBhU3ViamVjdCwgY29uc3QgY2hhciAqYVRvcGljLCBjb25zdCB1bnNpZ25l ZCBzaG9ydCAqYURhdGEpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0NCj4gKyAg bW96UGVyc29uYWxEaWN0aW9uYXJ5ICgpIDogbVJlZkNudCgwKSB7fQ0KPiAr ICBpbnQgSW5pdCAoKSB7IHJldHVybiAwOyB9DQo+ICsgIHZpcnR1YWwgfm1v elBlcnNvbmFsRGljdGlvbmFyeSAoKSB7fQ0KPiArICBib29sIG1Jc0xvYWRl ZDsNCj4gKyAgYm9vbCBtU2F2ZVBlbmRpbmc7DQo+ICsgIHZvaWQgKm1GaWxl Ow0KPiArICBjaGFyIG1Nb25pdG9yWzk2XTsNCj4gKyAgY2hhciBtTW9uaXRv clNhdmVbOTZdOw0KPiArICBjaGFyIG1EaWN0aW9uYXJ5VGFibGVbMzJdOw0K PiArICBjaGFyIG1JZ25vcmVUYWJsZVszMl07DQo+ICt9Ow0KPiArDQo+ICt1 bnNpZ25lZA0KPiArbW96UGVyc29uYWxEaWN0aW9uYXJ5OjpBZGRSZWYgKHZv aWQpDQo+ICt7DQo+ICsgIHVuc2lnbmVkIGNvdW50ID0gKyttUmVmQ250Ow0K PiArICByZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3Vuc2lnbmVkDQo+ ICttb3pQZXJzb25hbERpY3Rpb25hcnk6OlJlbGVhc2UgKHZvaWQpDQo+ICt7 DQo+ICsgIHVuc2lnbmVkIGNvdW50ID0gLS1tUmVmQ250Ow0KPiArICBpZiAo Y291bnQgPT0gMCkNCj4gKyAgICB7DQo+ICsgICAgICBtUmVmQ250ID0gMTsN Cj4gKyAgICAgIGRlbGV0ZSAodGhpcyk7DQo+ICsgICAgICByZXR1cm4gMDsN Cj4gKyAgICB9DQo+ICsgIHJldHVybiBjb3VudDsNCj4gK30NCj4gKw0KPiAr aW50DQo+ICttb3pQZXJzb25hbERpY3Rpb25hcnk6OlF1ZXJ5SW50ZXJmYWNl IChjb25zdCBpbnQgJmFJSUQsIHZvaWQgKiphSW5zdGFuY2VQdHIpDQo+ICt7 DQo+ICsgIG5zSVN1cHBvcnRzICpmb3VuZEludGVyZmFjZTsNCj4gKyAgaWYg KGFJSUQgPT0gMTIyKQ0KPiArICAgIGZvdW5kSW50ZXJmYWNlID0gc3RhdGlj X2Nhc3QgPG1veklQZXJzb25hbERpY3Rpb25hcnkgKj4odGhpcyk7DQo+ICsg IGVsc2UNCj4gKyAgICBmb3VuZEludGVyZmFjZSA9IHN0YXRpY19jYXN0IDxu c0lTdXBwb3J0c1dlYWtSZWZlcmVuY2UgKj4odGhpcyk7DQo+ICsgIGludCBz dGF0dXM7DQo+ICsgIGZvdW5kSW50ZXJmYWNlLT5BZGRSZWYgKCk7DQo+ICsg ICphSW5zdGFuY2VQdHIgPSBmb3VuZEludGVyZmFjZTsNCj4gKyAgcmV0dXJu IHN0YXR1czsNCj4gK30NCj4gKw0KPiArX19hdHRyaWJ1dGVfXygobm9pcGEp KSBpbnQNCj4gK2ZvbyAobnNJU3VwcG9ydHMgKnAsIGNvbnN0IGludCAmaSkN Cj4gK3sNCj4gKyAgdm9pZCAqcTsNCj4gKyAgcmV0dXJuIHAtPlF1ZXJ5SW50 ZXJmYWNlIChpLCAmcSk7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArbWFpbiAo KQ0KPiArew0KPiArICBtb3pQZXJzb25hbERpY3Rpb25hcnkgbTsNCj4gKyAg aW50IGogPSAxMjM7DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAw OyBpKyspDQo+ICsgICAgZm9vIChzdGF0aWNfY2FzdCA8bnNJU3VwcG9ydHNX ZWFrUmVmZXJlbmNlICo+KCZtKSwgaik7DQo+ICsgIGlmIChtLm1SZWZDbnQg IT0gMTAwMDAwKQ0KPiArICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsNCj4gK30N Cj4gKw0KVGhpcyBwYXRjaCBjYXVzZXMgZmFpbHVyZXMgb24gYWFyY2g2NC1u b25lLWxpbnV4LWdudSBhbmQgDQphcm0tbm9uZS1saW51eC1nbnVlYWJpaGYN Cg0KVU5SRVNPTFZFRDogZysrLmRnL3RyZWUtcHJvZi9kZXZpcnQuQyBzY2Fu LWlwYS1kdW1wLXRpbWVzIGRvbTMgIjMiIA0KZm9sZGluZyB2aXJ0dWFsIGZ1 bmN0aW9uIGNhbGwgdG8gdmlydHVhbCB1bnNpZ25lZCBpbnQgDQptb3pQZXJz b25hbERpY3Rpb25hcnk6OkFkZFJlZg0KVU5SRVNPTFZFRDogZysrLmRnL3Ry ZWUtcHJvZi9kZXZpcnQuQyBzY2FuLWlwYS1kdW1wLXRpbWVzIGRvbTMgIjMi IA0KZm9sZGluZyB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwgdG8gdmlydHVhbCB1 bnNpZ25lZCBpbnQgDQptb3pQZXJzb25hbERpY3Rpb25hcnk6Ol9aVGhuMTYN Cg0KV2l0aA0KDQpnKysuZGcvdHJlZS1wcm9mL2RldmlydC5DOiBkdW1wIGZp bGUgZG9lcyBub3QgZXhpc3QNCg0KSSBoYWQgbWlzc2VkIHRoaXMgb25lIGVh cmxpZXIgdGhpbmtpbmcgaXRzIHRoZSBzYW1lIHdpdGggdGhlIExUTyB0ZXN0 IA0KZmFpbHVyZXMgYW5kIG9ubHkgcmVhbGl6ZWQgdGhpcyBhZnRlciB0aGUg YmFja3BvcnQgY29tbWl0IHllc3RlcmRheSBieSANCk1hcnRpbi4NCg0KVGhh bmtzDQoNClN1ZGkNCg0KPiArLyogeyBkZy1maW5hbC11c2Utbm90LWF1dG9m ZG8geyBzY2FuLWlwYS1kdW1wLXRpbWVzIDMgImZvbGRpbmcgdmlydHVhbCBm dW5jdGlvbiBjYWxsIHRvIHZpcnR1YWwgdW5zaWduZWQgaW50IG1velBlcnNv bmFsRGljdGlvbmFyeTo6X1pUaG4xNiIgImRvbTMiIH0gfSAqLw0KPiArLyog eyBkZy1maW5hbC11c2Utbm90LWF1dG9mZG8geyBzY2FuLWlwYS1kdW1wLXRp bWVzIDMgImZvbGRpbmcgdmlydHVhbCBmdW5jdGlvbiBjYWxsIHRvIHZpcnR1 YWwgdW5zaWduZWQgaW50IG1velBlcnNvbmFsRGljdGlvbmFyeTo6QWRkUmVm IiAiZG9tMyIgfSB9ICovDQo=