From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70042.outbound.protection.outlook.com [40.107.7.42]) by dpdk.org (Postfix) with ESMTP id B7B711B1A0 for ; Wed, 24 Oct 2018 14:13:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q+WQJ1T9MtIcUvlQDSORcGsVBxn+SsPOttBfKYgxVHA=; b=h9tdy5RoVpHXjSUDpwfHpOPMWN1jF/HPNHLBstZ55ntL+4u1KpbgKLmojENnYEE0YDe9MN03iu3BFjUozYODlb/7Qu74hCcDXr7tiIrfeOvl64p5n+0KQu9kySA4N63Tc0x2rUYziwVE8VkOnYqFXzo9IEWAYQesEGZu5Rcx3fg= Received: from VI1PR04MB4893.eurprd04.prod.outlook.com (20.177.49.154) by VI1PR04MB1181.eurprd04.prod.outlook.com (10.162.121.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.30; Wed, 24 Oct 2018 12:13:13 +0000 Received: from VI1PR04MB4893.eurprd04.prod.outlook.com ([fe80::70c8:7997:4cf:743f]) by VI1PR04MB4893.eurprd04.prod.outlook.com ([fe80::70c8:7997:4cf:743f%2]) with mapi id 15.20.1273.019; Wed, 24 Oct 2018 12:13:13 +0000 From: Akhil Goyal To: Marko Kovacevic , "dev@dpdk.org" CC: "roy.fan.zhang@intel.com" , "arkadiuszx.kusztal@intel.com" Thread-Topic: [dpdk-dev] [PATCH v5 1/8] examples/cryptodev_fips_validate: add fips validation into examples Thread-Index: AQHUZhfizaJKBNRpo02iZxBhYeKVQKUuWacA Date: Wed, 24 Oct 2018 12:13:13 +0000 Message-ID: <64103ec5-2f25-1648-4d47-27a0f13e30e0@nxp.com> References: <20181012144501.19562-1-marko.kovacevic@intel.com> <20181017124937.38052-1-marko.kovacevic@intel.com> <20181017124937.38052-2-marko.kovacevic@intel.com> In-Reply-To: <20181017124937.38052-2-marko.kovacevic@intel.com> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BM1PR01CA0106.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00::22) To VI1PR04MB4893.eurprd04.prod.outlook.com (2603:10a6:803:56::26) authentication-results: spf=none (sender IP is ) smtp.mailfrom=akhil.goyal@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [14.143.30.134] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR04MB1181; 6:Qk3jF/cH+2UmJTssusYOkzyqoqyFQfGBMuhDOEQ85di0XW+ah5SedEH0U2cVUQ8F3VK8vj1InKDU7p3Ilrad17+YaDkreSLTtjCGmXjhmNxjjwptij93DyGppPj58+HhLPZUiml1cpNIkWVFmRjWGm035nIW7MLM+Qq8wrlT9ImPadl3QDKETCiSz1KqtNLFuGb37YI8XbSH4Xax76KA9l56fEiV1lYykngw7eboMhfkGVovgjFZII12xcb+AJvk8Tv0Kv1b7sAEYGUs9w2JiZO2u9AhCPQM8yNFdc7Xh7l2t7OWwTTNjhL06JH+C7UH4L7ZtzS82KQjiD4EaqlrB3k7vmeC7DNdaAxjwwBi/LZ4jw4wtPzHKIPCMY8azPBjsSvraG3JRv0u713Dqndsys+bhAXk8hPaI4nXyzUl9E4w2QRJfWcPAbZkYNNZMB+M29vdWIGlRKMZE2ln9xHbjQ==; 5:/pfUjYt/NV6SOAFpfu1FxSzF/tWW8ZFXgKaf22lX8aOf/GWB5mvnvKM6csFxWr/QKIhCdLebw/wrbXqXADVu7FZNWDOpVMcwQKFMvLoRX7HHRTs0OXbSvU0rmSRUSeD5Yu4SIY9hKG/vFNrl9YvqiD/Z2vQXXu4kQ6ddgXnzgMQ=; 7:G73W7zo8G3Rpolb12B9tsL1NsSJtnwNsPT6XPmbZxODXq6PTkram30MO6OVlmVsQ8pPR24d43IRDZWgCRskrFyOfWxxW+aLdVlmScr+NrX9OXngjROzNIabVdM431QffgjeHAX3VfaSWwtKmAdFntAvgCOugGcFbCmpQNH8fGgsuTJ1QabJ9udTnQY5DQMIuULu4gvLDYoKfp8fY+EIYs/pi4ZTWkflnuiB1b+9y68Ei7HDar3MIMvL3J9bJLctJ x-ms-office365-filtering-correlation-id: b6362a33-afd2-4aff-0dc6-08d639aa1201 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB1181; x-ms-traffictypediagnostic: VI1PR04MB1181: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(183786458502308)(22074186197030)(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231355)(944501410)(4982022)(52105095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123562045)(20161123564045)(201708071742011)(7699051)(76991095); SRVR:VI1PR04MB1181; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB1181; x-forefront-prvs: 083526BF8A x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(136003)(39860400002)(346002)(396003)(366004)(189003)(199004)(68736007)(36756003)(31696002)(6512007)(106356001)(6306002)(316002)(575784001)(86362001)(6246003)(53946003)(53936002)(6116002)(105586002)(4744004)(3846002)(71190400001)(966005)(71200400001)(8936002)(2906002)(31686004)(478600001)(7736002)(8676002)(14454004)(81166006)(81156014)(305945005)(186003)(26005)(5250100002)(2501003)(76176011)(229853002)(14444005)(66066001)(102836004)(256004)(53546011)(44832011)(4326008)(386003)(6506007)(55236004)(25786009)(2616005)(476003)(97736004)(11346002)(486006)(446003)(54906003)(110136005)(6486002)(2900100001)(6436002)(99286004)(5660300001)(52116002)(579004)(559001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB1181; H:VI1PR04MB4893.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: p4WFFmxW8maIMLTBq3ru3WkzgTDw8YIK/8QTptKHNgFykadm6O4wYJ/eTmO4RYRZRMxZBIv+yhqzFQu54S2Gdz+rQAc1fb3rdNUcMX43BF/2EXqp+Ti0rEvUISn14Vfy7aiquC0Xb9bnq7CuRh/OgPqJByvpiZ7LHLSoIKAkVYOkm7YoRRIYc5wBdJwwAxADY2UccYfDhWY6YyQQXnvO7fggNgoI9SPLHJwpoSjUFhkpEhQoG+o2JNnObhtxRFzkf2YyX9esxkNEyYifBKOOqkAHvoqjIivDH7LANI0U9SnDRWmMi7AR3NNlCDVo7O7L8NkLldXfdpwa0sZrxlYxAS/rB/+Q3lMV0aqkUddQ3VM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6362a33-afd2-4aff-0dc6-08d639aa1201 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2018 12:13:13.4790 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB1181 Subject: Re: [dpdk-dev] [PATCH v5 1/8] examples/cryptodev_fips_validate: add fips validation into examples X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Oct 2018 12:13:17 -0000 DQoNCk9uIDEwLzE3LzIwMTggNjoxOSBQTSwgTWFya28gS292YWNldmljIHdyb3RlOg0KPiBBZGRl ZCBGSVBTIGFwcGxpY2F0aW9uIGludG8gdGhlIGV4YW1wbGVzIHRvIGFsbG93DQo+IHVzZXJzIHRv IHVzZSBhIHNpbXBsZSBzYW1wbGUgYXBwIHRvIHZhbGlkYXRlDQo+IHRoZWlyIHN5c3RlbXMgYW5k IGJlIGFibGUgdG8gZ2V0IEZJUFMgY2VydGlmaWNhdGlvbi4NCj4NCj4gU2lnbmVkLW9mZi1ieTog TWFya28gS292YWNldmljIDxtYXJrby5rb3ZhY2V2aWNAaW50ZWwuY29tPg0KPiBTaWduZWQtb2Zm LWJ5OiBGYW4gWmhhbmcgPHJveS5mYW4uemhhbmdAaW50ZWwuY29tPg0KPiBBY2tlZC1ieTogQXJl ayBLdXN6dGFsIDxhcmthZGl1c3p4Lmt1c3p0YWxAaW50ZWwuY29tPg0KPiAtLS0NCj4gICBleGFt cGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS9NYWtlZmlsZSAgICAgICAgICB8ICA2OSArKysN Cj4gICAuLi4vY3J5cHRvZGV2X2ZpcHNfcGFyc2VfdmFsaWRhdGUuYyAgICAgICAgICAgICAgICB8 IDU2MiArKysrKysrKysrKysrKysrKysrKysNCj4gICAuLi4vY3J5cHRvZGV2X2ZpcHNfdmFsaWRh dGUuaCAgICAgICAgICAgICAgICAgICAgICB8IDE1MCArKysrKysNCj4gICBleGFtcGxlcy9jcnlw dG9kZXZfZmlwc192YWxpZGF0ZS9tYWluLmMgICAgICAgICAgICB8IDM4OCArKysrKysrKysrKysr Kw0KPiAgIGV4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRlL21lc29uLmJ1aWxkICAgICAg IHwgIDE0ICsNCj4gICA1IGZpbGVzIGNoYW5nZWQsIDExODMgaW5zZXJ0aW9ucygrKQ0KPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS9NYWtlZmls ZQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0 ZS9jcnlwdG9kZXZfZmlwc19wYXJzZV92YWxpZGF0ZS5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGV4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRlL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRl LmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZXhhbXBsZXMvY3J5cHRvZGV2X2ZpcHNfdmFsaWRh dGUvbWFpbi5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4YW1wbGVzL2NyeXB0b2Rldl9maXBz X3ZhbGlkYXRlL21lc29uLmJ1aWxkDQo+DQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy9jcnlwdG9k ZXZfZmlwc192YWxpZGF0ZS9NYWtlZmlsZSBiL2V4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlk YXRlL01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjdm MGU2MDMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9leGFtcGxlcy9jcnlwdG9kZXZfZmlwc192 YWxpZGF0ZS9NYWtlZmlsZQ0KPiBAQCAtMCwwICsxLDY5IEBADQo+ICsjIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyMgQ29weXJpZ2h0KGMpIDIwMTAtMjAxNCBJbnRl bCBDb3Jwb3JhdGlvbg0KSSBiZWxpZXZlIHRoaXMgaXMgYSBjb3B5IHBhc3RlIGVycm9yLCBpdCBz aG91bGQgYmUgMjAxOA0KPiArDQo+ICsjIGJpbmFyeSBuYW1lDQo+ICtBUFAgPSBmaXBzX3ZhbGlk YXRpb24NCj4gKw0KPiArIyBhbGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+ICtTUkNT LXkgKz0gY3J5cHRvZGV2X2ZpcHNfcGFyc2VfdmFsaWRhdGUuYw0KPiArU1JDUy15ICs9IG1haW4u Yw0KPiArDQo+ICsjIEJ1aWxkIHVzaW5nIHBrZy1jb25maWcgdmFyaWFibGVzIGlmIHBvc3NpYmxl DQo+ICskKHNoZWxsIHBrZy1jb25maWcgLS1leGlzdHMgbGliZHBkaykNCj4gK2lmZXEgKCQoLlNI RUxMU1RBVFVTKSwwKQ0KPiArDQo+ICthbGw6IHNoYXJlZA0KPiArLlBIT05ZOiBzaGFyZWQgc3Rh dGljDQo+ICtzaGFyZWQ6IGJ1aWxkLyQoQVBQKS1zaGFyZWQNCj4gKwlsbiAtc2YgJChBUFApLXNo YXJlZCBidWlsZC8kKEFQUCkNCj4gK3N0YXRpYzogYnVpbGQvJChBUFApLXN0YXRpYw0KPiArCWxu IC1zZiAkKEFQUCktc3RhdGljIGJ1aWxkLyQoQVBQKQ0KPiArDQo+ICtQQ19GSUxFIDo9ICQoc2hl bGwgcGtnLWNvbmZpZyAtLXBhdGggbGliZHBkaykNCj4gK0NGTEFHUyArPSAtTzMgJChzaGVsbCBw a2ctY29uZmlnIC0tY2ZsYWdzIGxpYmRwZGspDQo+ICtMREZMQUdTX1NIQVJFRCA9ICQoc2hlbGwg cGtnLWNvbmZpZyAtLWxpYnMgbGliZHBkaykNCj4gK0xERkxBR1NfU1RBVElDID0gLVdsLC1Cc3Rh dGljICQoc2hlbGwgcGtnLWNvbmZpZyAtLXN0YXRpYyAtLWxpYnMgbGliZHBkaykNCj4gKw0KPiAr YnVpbGQvJChBUFApLXNoYXJlZDogJChTUkNTLXkpIE1ha2VmaWxlICQoUENfRklMRSkgfCBidWls ZA0KPiArCSQoQ0MpICQoQ0ZMQUdTKSAkKFNSQ1MteSkgLW8gJEAgJChMREZMQUdTKSAkKExERkxB R1NfU0hBUkVEKQ0KPiArDQo+ICtidWlsZC8kKEFQUCktc3RhdGljOiAkKFNSQ1MteSkgTWFrZWZp bGUgJChQQ19GSUxFKSB8IGJ1aWxkDQo+ICsJJChDQykgJChDRkxBR1MpICQoU1JDUy15KSAtbyAk QCAkKExERkxBR1MpICQoTERGTEFHU19TVEFUSUMpDQo+ICsNCj4gK2J1aWxkOg0KPiArCUBta2Rp ciAtcCAkQA0KPiArDQo+ICsuUEhPTlk6IGNsZWFuDQo+ICtjbGVhbjoNCj4gKwlybSAtZiBidWls ZC8kKEFQUCkgYnVpbGQvJChBUFApLXN0YXRpYyBidWlsZC8kKEFQUCktc2hhcmVkDQo+ICsJcm1k aXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgYnVpbGQNCj4gKw0KPiArZWxzZQ0KPiArDQo+ ICtpZmVxICgkKFJURV9TREspLCkNCj4gKyQoZXJyb3IgIlBsZWFzZSBkZWZpbmUgUlRFX1NESyBl bnZpcm9ubWVudCB2YXJpYWJsZSIpDQo+ICtlbmRpZg0KPiArDQo+ICsjIERlZmF1bHQgdGFyZ2V0 LCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBjb21tYW5kIGxpbmUgb3IgZW52aXJvbm1lbnQNCj4gK1JU RV9UQVJHRVQgPz0geDg2XzY0LW5hdGl2ZS1saW51eGFwcC1nY2MNCj4gKw0KPiArSU5DICs9ICQo c29ydCAkKHdpbGRjYXJkICouaCkpDQo+ICsNCj4gK2luY2x1ZGUgJChSVEVfU0RLKS9tay9ydGUu dmFycy5taw0KPiArDQo+ICtDRkxBR1MgKz0gJChXRVJST1JfRkxBR1MpDQo+ICsNCj4gKyMgd29y a2Fyb3VuZCBmb3IgYSBnY2MgYnVnIHdpdGggbm9yZXR1cm4gYXR0cmlidXRlDQo+ICsjIGh0dHA6 Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTI2MDMNCj4gK2lmZXEgKCQo Q09ORklHX1JURV9UT09MQ0hBSU5fR0NDKSx5KQ0KPiArQ0ZMQUdTX21haW4ubyArPSAtV25vLXJl dHVybi10eXBlDQo+ICtlbmRpZg0KPiArDQo+ICtDRkxBR1MgKz0gLURBTExPV19FWFBFUklNRU5U QUxfQVBJDQo+ICtDRkxBR1MgKz0gLUkkKFNSQ0RJUikNCj4gK0NGTEFHUyArPSAtTzMNCj4gK0NG TEFHUyArPSAkKFdFUlJPUl9GTEFHUykNCj4gKw0KPiAraW5jbHVkZSAkKFJURV9TREspL21rL3J0 ZS5leHRhcHAubWsNCj4gKw0KPiArZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NyeXB0 b2Rldl9maXBzX3ZhbGlkYXRlL2NyeXB0b2Rldl9maXBzX3BhcnNlX3ZhbGlkYXRlLmMgYi9leGFt cGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS9jcnlwdG9kZXZfZmlwc19wYXJzZV92YWxpZGF0 ZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmFlYzViYjkNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9leGFtcGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS9j cnlwdG9kZXZfZmlwc19wYXJzZV92YWxpZGF0ZS5jDQo+IEBAIC0wLDAgKzEsNTYyIEBADQo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQo YykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRp by5oPg0KPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX3N0cmlu Z19mbnMuaD4NCj4gKyNpbmNsdWRlIDxydGVfY3J5cHRvZGV2Lmg+DQo+ICsjaW5jbHVkZSA8cnRl X21hbGxvYy5oPg0KPiArDQo+ICsjaW5jbHVkZSAiY3J5cHRvZGV2X2ZpcHNfdmFsaWRhdGUuaCIN Cj4gKw0KPiArI2RlZmluZSBza2lwX3doaXRlX3NwYWNlcyhwb3MpCQkJXA0KPiArKHsJCQkJCQlc DQo+ICsJX190eXBlb2ZfXyhwb3MpIF9wID0gKHBvcyk7CQlcDQo+ICsJZm9yICggOyBpc3NwYWNl KCpfcCk7IF9wKyspCQlcDQo+ICsJCTsJCQkJXA0KPiArCV9wOwkJCQkJXA0KPiArfSkNCj4gKw0K PiArc3RhdGljIGludA0KPiArZ2V0X2ZpbGVfbGluZSh2b2lkKQ0KPiArew0KPiArCUZJTEUgKmZw ID0gaW5mby5mcF9yZDsNCj4gKwljaGFyICpsaW5lID0gaW5mby5vbmVfbGluZV90ZXh0Ow0KPiAr CWNoYXIgYzsNCj4gKwl1aW50MzJfdCBsb2MgPSAwOw0KPiArDQo+ICsJbWVtc2V0KGxpbmUsIDAs IE1BWF9MSU5FX0NIQVIpOw0KPiArCXdoaWxlICgoYyA9IGZnZXRjKGZwKSkgIT0gRU9GKSB7DQo+ ICsJCWlmIChsb2MgPj0gTUFYX0xJTkVfQ0hBUiAtIDEpDQo+ICsJCQlyZXR1cm4gLUVOT01FTTsN Cj4gKwkJaWYgKGMgPT0gJ1xuJykNCj4gKwkJCXJldHVybiAwOw0KPiArCQlsaW5lW2xvYysrXSA9 IGM7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGMgPT0gRU9GKQ0KPiArCQlyZXR1cm4gLUVPRjsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK2ZpcHNfdGVzdF9mZXRjaF9v bmVfYmxvY2sodm9pZCkNCj4gK3sNCj4gKwlzaXplX3Qgc2l6ZTsNCj4gKwlpbnQgcmV0ID0gMDsN Cj4gKwl1aW50MzJfdCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGluZm8ubmJfdmVjX2xp bmVzOyBpKyspIHsNCj4gKwkJZnJlZShpbmZvLnZlY1tpXSk7DQo+ICsJCWluZm8udmVjW2ldID0g TlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlpID0gMDsNCj4gKwlkbyB7DQo+ICsJCWlmIChpID49IE1B WF9MSU5FX1BFUl9WRUNUT1IpIHsNCj4gKwkJCXJldCA9IC1FTk9NRU07DQo+ICsJCQlnb3RvIGVy cm9yX2V4aXQ7DQo+ICsJCX0NCj4gKw0KPiArCQlyZXQgPSBnZXRfZmlsZV9saW5lKCk7DQo+ICsJ CXNpemUgPSBzdHJsZW4oaW5mby5vbmVfbGluZV90ZXh0KTsNCj4gKwkJaWYgKHNpemUgPT0gMCkN Cj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWluZm8udmVjW2ldID0gY2FsbG9jKDEsIHNpemUgKyA1 KTsNCj4gKwkJaWYgKGluZm8udmVjW2ldID09IE5VTEwpDQo+ICsJCQlnb3RvIGVycm9yX2V4aXQ7 DQo+ICsNCj4gKwkJc3RybGNweShpbmZvLnZlY1tpXSwgaW5mby5vbmVfbGluZV90ZXh0LCBzaXpl ICsgMSk7DQo+ICsJCWkrKzsNCj4gKwl9IHdoaWxlIChyZXQgPT0gMCk7DQo+ICsNCj4gKwlpbmZv Lm5iX3ZlY19saW5lcyA9IGk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArDQo+ICtlcnJvcl9l eGl0Og0KPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfTElORV9QRVJfVkVDVE9SOyBpKyspDQo+ICsJ CWlmIChpbmZvLnZlY1tpXSAhPSBOVUxMKSB7DQo+ICsJCQlmcmVlKGluZm8udmVjW2ldKTsNCj4g KwkJCWluZm8udmVjW2ldID0gTlVMTDsNCj4gKwkJfQ0KPiArDQo+ICsJaW5mby5uYl92ZWNfbGlu ZXMgPSAwOw0KPiArDQo+ICsJcmV0dXJuIC1FTk9NRU07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQNCj4gK2ZpcHNfdGVzdF9wYXJzZV9oZWFkZXIodm9pZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBp Ow0KPiArCWNoYXIgKnRtcDsNCj4gKwlpbnQgcmV0Ow0KPiArCXRpbWVfdCB0ID0gdGltZShOVUxM KTsNCj4gKwlzdHJ1Y3QgdG0gKnRtX25vdyA9IGxvY2FsdGltZSgmdCk7DQo+ICsNCj4gKwlyZXQg PSBmaXBzX3Rlc3RfZmV0Y2hfb25lX2Jsb2NrKCk7DQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJl dHVybiByZXQ7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5uYl92ZWNfbGluZXM7IGkr Kykgew0KPiArDQo+ICsJCXRtcCA9IHN0cnN0cihpbmZvLnZlY1tpXSwgIiMgQ29uZmlnIGluZm8g Zm9yICIpOw0KPiArCQlpZiAodG1wICE9IE5VTEwpIHsNCj4gKwkJCWZwcmludGYoaW5mby5mcF93 ciwgIiVzJXNcbiIsICIjIENvbmZpZyBpbmZvIGZvciBEUERLIENyeXB0b2RldiAiLA0KPiArCQkJ CQlpbmZvLmRldmljZV9uYW1lKTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJ dG1wID0gc3Ryc3RyKGluZm8udmVjW2ldLCAiIyAgSE1BQyBpbmZvcm1hdGlvbiBmb3IgIik7DQo+ ICsJCWlmICh0bXAgIT0gTlVMTCkgew0KPiArCQkJZnByaW50ZihpbmZvLmZwX3dyLCAiJXMlc1xu IiwgIiMgIEhNQUMgaW5mb3JtYXRpb24gZm9yICINCj4gKwkJCQkiRFBESyBDcnlwdG9kZXYgIiwN Cj4gKwkJCQlpbmZvLmRldmljZV9uYW1lKTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsN Cj4gKwkJdG1wID0gc3Ryc3RyKGluZm8udmVjW2ldLCAiIyBDb25maWcgSW5mbyBmb3IgOiAiKTsN Cj4gKwkJaWYgKHRtcCAhPSBOVUxMKSB7DQo+ICsNCj4gKwkJCWZwcmludGYoaW5mby5mcF93ciwg IiVzJXNcbiIsICIjIENvbmZpZyBJbmZvIGZvciBEUERLIENyeXB0b2RldiA6ICIsDQo+ICsJCQkJ CWluZm8uZGV2aWNlX25hbWUpOw0KPiArCQkJY29udGludWU7DQo+ICsJCX0NCj4gKw0KPiArCQl0 bXAgPSBzdHJzdHIoaW5mby52ZWNbaV0sICIjIGluZm9ybWF0aW9uIGZvciAiKTsNCj4gKwkJaWYg KHRtcCAhPSBOVUxMKSB7DQo+ICsNCj4gKwkJCWNoYXIgdG1wX291dHB1dFsxMjhdID0gezB9Ow0K PiArDQo+ICsJCQlzdHJsY3B5KHRtcF9vdXRwdXQsIGluZm8udmVjW2ldLCB0bXAgLSBpbmZvLnZl Y1tpXSArIDEpOw0KPiArDQo+ICsJCQlmcHJpbnRmKGluZm8uZnBfd3IsICIlcyVzJXNcbiIsIHRt cF9vdXRwdXQsDQo+ICsJCQkJCSJpbmZvcm1hdGlvbiBmb3IgRFBESyBDcnlwdG9kZXYgIiwNCj4g KwkJCQkJaW5mby5kZXZpY2VfbmFtZSk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ ICsJCXRtcCA9IHN0cnN0cihpbmZvLnZlY1tpXSwgIiB0ZXN0IGluZm9ybWF0aW9uIGZvciAiKTsN Cj4gKwkJaWYgKHRtcCAhPSBOVUxMKSB7DQo+ICsJCQljaGFyIHRtcF9vdXRwdXRbMTI4XSA9IHsw fTsNCj4gKw0KPiArCQkJc3RybGNweSh0bXBfb3V0cHV0LCBpbmZvLnZlY1tpXSwgdG1wIC0gaW5m by52ZWNbaV0gKyAxKTsNCj4gKw0KPiArCQkJZnByaW50ZihpbmZvLmZwX3dyLCAiJXMlcyVzXG4i LCB0bXBfb3V0cHV0LA0KPiArCQkJCQkidGVzdCBpbmZvcm1hdGlvbiBmb3IgRFBESyBDcnlwdG9k ZXYgIiwNCj4gKwkJCQkJaW5mby5kZXZpY2VfbmFtZSk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJ fQ0KPiArDQo+ICsJCWlmIChpID09IGluZm8ubmJfdmVjX2xpbmVzIC0gMSkgew0KPiArCQkJLyoq IHVwZGF0ZSB0aGUgdGltZSBhcyBjdXJyZW50IHRpbWUsIHdyaXRlIHRvIGZpbGUgKi8NCj4gKwkJ CWZwcmludGYoaW5mby5mcF93ciwgIiVzJXNcbiIsICIjIEdlbmVyYXRlZCBvbiAiLA0KPiArCQkJ CQlhc2N0aW1lKHRtX25vdykpOw0KPiArCQkJY29udGludWU7DQo+ICsJCX0NCj4gKw0KPiArCQkv KiB0byB0aGlzIHBvaW50LCBubyBmaWVsZCBuZWVkIHRvIHVwZGF0ZSwNCj4gKwkJICogIG9ubHkg Y29weSB0byByc3AgZmlsZQ0KPiArCQkgKi8NCj4gKwkJZnByaW50ZihpbmZvLmZwX3dyLCAiJXNc biIsIGluZm8udmVjW2ldKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludA0KPiArcGFyc2VfZmlsZV90eXBlKGNvbnN0IGNoYXIgKnBhdGgpDQo+ICt7 DQo+ICsJY29uc3QgY2hhciAqdG1wID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDM7DQo+ICsNCj4g KwlpZiAoc3Ryc3RyKHRtcCwgUkVRX0ZJTEVfUEVSRklYKSkNCj4gKwkJaW5mby5maWxlX3R5cGUg PSBGSVBTX1RZUEVfUkVROw0KPiArCWVsc2UgaWYgKHN0cnN0cih0bXAsIFJTUF9GSUxFX1BFUkZJ WCkpDQo+ICsJCWluZm8uZmlsZV90eXBlID0gRklQU19UWVBFX1JTUDsNCj4gKwllbHNlIGlmIChz dHJzdHIocGF0aCwgRkFYX0ZJTEVfUEVSRklYKSkNCj4gKwkJaW5mby5maWxlX3R5cGUgPSBGSVBT X1RZUEVfRkFYOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtmaXBzX3Rlc3RfaW5pdChjb25zdCBjaGFyICpy ZXFfZmlsZV9wYXRoLCBjb25zdCBjaGFyICpyc3BfZmlsZV9wYXRoLA0KPiArCQljb25zdCBjaGFy ICpkZXZpY2VfbmFtZSkNCj4gK3sNCj4gKwlpZiAoc3RyY21wKHJlcV9maWxlX3BhdGgsIHJzcF9m aWxlX3BhdGgpID09IDApIHsNCj4gKwkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRmlsZSBwYXRocyBj YW5ub3QgYmUgdGhlIHNhbWVcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsN Cj4gKwlmaXBzX3Rlc3RfY2xlYXIoKTsNCj4gKw0KPiArCWluZm8uYWxnbyA9IEZJUFNfVEVTVF9B TEdPX01BWDsNCj4gKwlpZiAocGFyc2VfZmlsZV90eXBlKHJlcV9maWxlX3BhdGgpIDwgMCkgew0K PiArCQlSVEVfTE9HKEVSUiwgVVNFUjEsICJGaWxlICVzIHR5cGUgbm90IHN1cHBvcnRlZFxuIiwN Cj4gKwkJCQlyZXFfZmlsZV9wYXRoKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiAr DQo+ICsJaW5mby5mcF9yZCA9IGZvcGVuKHJlcV9maWxlX3BhdGgsICJyIik7DQo+ICsJaWYgKCFp bmZvLmZwX3JkKSB7DQo+ICsJCVJURV9MT0coRVJSLCBVU0VSMSwgIkNhbm5vdCBvcGVuIGZpbGUg JXNcbiIsIHJlcV9maWxlX3BhdGgpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsN Cj4gKwlpbmZvLmZwX3dyID0gZm9wZW4ocnNwX2ZpbGVfcGF0aCwgInciKTsNCj4gKwlpZiAoIWlu Zm8uZnBfd3IpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiQ2Fubm90IG9wZW4gZmlsZSAl c1xuIiwgcnNwX2ZpbGVfcGF0aCk7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0K PiArCWluZm8ub25lX2xpbmVfdGV4dCA9IGNhbGxvYygxLCBNQVhfTElORV9DSEFSKTsNCj4gKwlp ZiAoIWluZm8ub25lX2xpbmVfdGV4dCkgew0KPiArCQlSVEVfTE9HKEVSUiwgVVNFUjEsICJJbnN1 ZmZpY2llbnQgbWVtb3J5XG4iKTsNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsJfQ0KPiArDQo+ ICsJc3RybGNweShpbmZvLmRldmljZV9uYW1lLCBkZXZpY2VfbmFtZSwgc2l6ZW9mKGluZm8uZGV2 aWNlX25hbWUpKTsNCj4gKw0KPiArCWlmIChmaXBzX3Rlc3RfcGFyc2VfaGVhZGVyKCkgPCAwKSB7 DQo+ICsJCVJURV9MT0coRVJSLCBVU0VSMSwgIkZhaWxlZCBwYXJzaW5nIGhlYWRlclxuIik7DQo+ ICsJCXJldHVybiAtMTsNCj4gKwl9DQptZW1vcnkgbGVhayBmb3IgY2FsbG9jIGRvbmUgYWJvdmUg aW4gY2FzZSBvZiBlcnJvci4NCkFsc28gdGhlcmUgaXMgbm8gZmNsb3NlIGluIGNhc2Ugb2YgZXJy b3JzLg0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK2ZpcHNfdGVz dF9jbGVhcih2b2lkKQ0KPiArew0KPiArCWlmIChpbmZvLmZwX3JkKQ0KPiArCQlmY2xvc2UoaW5m by5mcF9yZCk7DQo+ICsJaWYgKGluZm8uZnBfd3IpDQo+ICsJCWZjbG9zZShpbmZvLmZwX3dyKTsN Cj4gKwlpZiAoaW5mby5vbmVfbGluZV90ZXh0KQ0KPiArCQlmcmVlKGluZm8ub25lX2xpbmVfdGV4 dCk7DQo+ICsJaWYgKGluZm8ubmJfdmVjX2xpbmVzKSB7DQo+ICsJCXVpbnQzMl90IGk7DQo+ICsN Cj4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8ubmJfdmVjX2xpbmVzOyBpKyspDQo+ICsJCQlmcmVl KGluZm8udmVjW2ldKTsNCj4gKwl9DQo+ICsNCj4gKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihp bmZvKSk7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArZmlwc190ZXN0X3BhcnNlX29uZV9jYXNlKHZv aWQpDQo+ICt7DQo+ICsJdWludDMyX3QgaSwgaiA9IDA7DQo+ICsJdWludDMyX3QgaXNfaW50ZXJp bSA9IDA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChpbmZvLmludGVyaW1fY2FsbGJhY2tz KSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLm5iX3ZlY19saW5lczsgaSsrKSB7DQo+ICsJ CQlmb3IgKGogPSAwOyBpbmZvLmludGVyaW1fY2FsbGJhY2tzW2pdLmtleSAhPSBOVUxMOyBqKysp DQo+ICsJCQkJaWYgKHN0cnN0cihpbmZvLnZlY1tpXSwNCj4gKwkJCQkJaW5mby5pbnRlcmltX2Nh bGxiYWNrc1tqXS5rZXkpKSB7DQppdCBsb29rcyBpbnRlcmltX2NhbGxiYWNrIGlzIGEgc2luZ2xl IHN0cnVjdHVyZSBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgDQp0cmVhdGluZyBhcyBhbiBhcnJh eS4NCj4gKwkJCQkJaXNfaW50ZXJpbSA9IDE7DQo+ICsNCj4gKwkJCQkJcmV0ID0gaW5mby5pbnRl cmltX2NhbGxiYWNrc1tqXS5jYigNCj4gKwkJCQkJCWluZm8uaW50ZXJpbV9jYWxsYmFja3Nbal0u a2V5LA0KPiArCQkJCQkJaW5mby52ZWNbaV0sDQo+ICsJCQkJCQlpbmZvLmludGVyaW1fY2FsbGJh Y2tzW2pdLnZhbCk7DQo+ICsJCQkJCWlmIChyZXQgPCAwKQ0KPiArCQkJCQkJcmV0dXJuIHJldDsN Cj4gKwkJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAoaXNfaW50ZXJpbSkgew0KPiAr CQlmb3IgKGkgPSAwOyBpIDwgaW5mby5uYl92ZWNfbGluZXM7IGkrKykNCj4gKwkJCWZwcmludGYo aW5mby5mcF93ciwgIiVzXG4iLCBpbmZvLnZlY1tpXSk7DQo+ICsJCWZwcmludGYoaW5mby5mcF93 ciwgIlxuIik7DQo+ICsJCXJldHVybiAxOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkg PCBpbmZvLm5iX3ZlY19saW5lczsgaSsrKSB7DQo+ICsJCWZvciAoaiA9IDA7IGluZm8uY2FsbGJh Y2tzW2pdLmtleSAhPSBOVUxMOyBqKyspDQo+ICsJCQlpZiAoc3Ryc3RyKGluZm8udmVjW2ldLCBp bmZvLmNhbGxiYWNrc1tqXS5rZXkpKSB7DQo+ICsJCQkJcmV0ID0gaW5mby5jYWxsYmFja3Nbal0u Y2IoDQo+ICsJCQkJCWluZm8uY2FsbGJhY2tzW2pdLmtleSwNCj4gKwkJCQkJaW5mby52ZWNbaV0s IGluZm8uY2FsbGJhY2tzW2pdLnZhbCk7DQo+ICsJCQkJaWYgKHJldCA8IDApDQo+ICsJCQkJCXJl dHVybiByZXQ7DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK2ZpcHNfdGVzdF93cml0ZV9vbmVfY2FzZSh2b2lk KQ0KPiArew0KPiArCXVpbnQzMl90IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5u Yl92ZWNfbGluZXM7IGkrKykNCj4gKwkJZnByaW50ZihpbmZvLmZwX3dyLCAiJXNcbiIsIGluZm8u dmVjW2ldKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcGFyc2VyX3JlYWRfdWludDY0 X2hleCh1aW50NjRfdCAqdmFsdWUsIGNvbnN0IGNoYXIgKnApDQo+ICt7DQo+ICsJY2hhciAqbmV4 dDsNCj4gKwl1aW50NjRfdCB2YWw7DQo+ICsNCj4gKwlwID0gc2tpcF93aGl0ZV9zcGFjZXMocCk7 DQo+ICsNCj4gKwl2YWwgPSBzdHJ0b3VsKHAsICZuZXh0LCAxNik7DQo+ICsJaWYgKHAgPT0gbmV4 dCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlwID0gc2tpcF93aGl0ZV9zcGFjZXMo bmV4dCk7DQo+ICsJaWYgKCpwICE9ICdcMCcpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICsJKnZhbHVlID0gdmFsOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQNCj4gK3Bh cnNlcl9yZWFkX3VpbnQ4X2hleCh1aW50OF90ICp2YWx1ZSwgY29uc3QgY2hhciAqcCkNCj4gK3sN Cj4gKwl1aW50NjRfdCB2YWwgPSAwOw0KPiArCWludCByZXQgPSBwYXJzZXJfcmVhZF91aW50NjRf aGV4KCZ2YWwsIHApOw0KPiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJldHVybiByZXQ7DQo+ ICsNCj4gKwlpZiAodmFsID4gVUlOVDhfTUFYKQ0KPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gKw0K PiArCSp2YWx1ZSA9IHZhbDsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtw YXJzZV91aW50OF9rbm93bl9sZW5faGV4X3N0cihjb25zdCBjaGFyICprZXksIGNoYXIgKnNyYywg c3RydWN0IGZpcHNfdmFsICp2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGZpcHNfdmFsIHRtcF92YWwg PSB7MH07DQo+ICsJdWludDMyX3QgbGVuID0gdmFsLT5sZW47DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCWlmIChsZW4gPT0gMCkgew0KPiArCQlpZiAodmFsLT52YWwgIT0gTlVMTCkgew0KPiArCQkJ cnRlX2ZyZWUodmFsLT52YWwpOw0KPiArCQkJdmFsLT52YWwgPSBOVUxMOw0KPiArCQl9DQo+ICsN Cj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gcGFyc2VfdWludDhfaGV4X3N0 cihrZXksIHNyYywgJnRtcF92YWwpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArDQo+ICsJaWYgKHRtcF92YWwubGVuID09IHZhbC0+bGVuKSB7DQo+ICsJCXZhbC0+dmFs ID0gdG1wX3ZhbC52YWw7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCWlmICh0bXBf dmFsLmxlbiA8IHZhbC0+bGVuKSB7DQo+ICsJCXJ0ZV9mcmVlKHRtcF92YWwudmFsKTsNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJdmFsLT52YWwgPSBydGVfem1hbGxvYyhO VUxMLCB2YWwtPmxlbiwgMCk7DQo+ICsJaWYgKCF2YWwtPnZhbCkgew0KPiArCQlydGVfZnJlZSh0 bXBfdmFsLnZhbCk7DQo+ICsJCW1lbXNldCh2YWwsIDAsIHNpemVvZigqdmFsKSk7DQo+ICsJCXJl dHVybiAtRU5PTUVNOw0KPiArCX0NCj4gKw0KPiArCW1lbWNweSh2YWwtPnZhbCwgdG1wX3ZhbC52 YWwsIHZhbC0+bGVuKTsNCj4gKwlydGVfZnJlZSh0bXBfdmFsLnZhbCk7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtwYXJzZV91aW50OF9oZXhfc3RyKGNvbnN0IGNo YXIgKmtleSwgY2hhciAqc3JjLCBzdHJ1Y3QgZmlwc192YWwgKnZhbCkNCj4gK3sNCj4gKwl1aW50 MzJfdCBsZW4sIGo7DQo+ICsNCj4gKwlzcmMgKz0gc3RybGVuKGtleSk7DQo+ICsNCj4gKwlsZW4g PSBzdHJsZW4oc3JjKSAvIDI7DQo+ICsNCj4gKwlpZiAodmFsLT52YWwpIHsNCj4gKwkJcnRlX2Zy ZWUodmFsLT52YWwpOw0KPiArCQl2YWwtPnZhbCA9IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJdmFs LT52YWwgPSBydGVfem1hbGxvYyhOVUxMLCBsZW4sIDApOw0KPiArCWlmICghdmFsLT52YWwpDQo+ ICsJCXJldHVybiAtMTsNCnNob3VsZCBiZSAtRU5PTUVNDQo+ICsNCj4gKwlmb3IgKGogPSAwOyBq IDwgbGVuOyBqKyspIHsNCj4gKwkJY2hhciBieXRlWzNdID0ge3NyY1tqICogMl0sIHNyY1tqICog MiArIDFdLCAnXDAnfTsNCj4gKw0KPiArCQlpZiAocGFyc2VyX3JlYWRfdWludDhfaGV4KCZ2YWwt PnZhbFtqXSwgYnl0ZSkgPCAwKSB7DQo+ICsJCQlydGVfZnJlZSh2YWwtPnZhbCk7DQo+ICsJCQlt ZW1zZXQodmFsLCAwLCBzaXplb2YoKnZhbCkpOw0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ CX0NCj4gKwl9DQo+ICsNCj4gKwl2YWwtPmxlbiA9IGxlbjsNCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtpbnQNCj4gK3BhcnNlcl9yZWFkX3VpbnQzMl92YWwoY29uc3QgY2hhciAq a2V5LCBjaGFyICpzcmMsIHN0cnVjdCBmaXBzX3ZhbCAqdmFsKQ0KPiArew0KPiArCWNoYXIgKmRh dGEgPSBzcmMgKyBzdHJsZW4oa2V5KTsNCj4gKwlzaXplX3QgZGF0YV9sZW4gPSBzdHJsZW4oZGF0 YSk7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChkYXRhW2RhdGFfbGVuIC0gMV0gPT0gJ10n KSB7DQo+ICsJCWNoYXIgKnRtcF9kYXRhID0gY2FsbG9jKDEsIGRhdGFfbGVuICsgMSk7DQo+ICsN Cj4gKwkJaWYgKHRtcF9kYXRhID09IE5VTEwpDQo+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0K PiArCQlzdHJsY3B5KHRtcF9kYXRhLCBkYXRhLCBkYXRhX2xlbik7DQo+ICsNCj4gKwkJcmV0ID0g cGFyc2VyX3JlYWRfdWludDMyKCZ2YWwtPmxlbiwgdG1wX2RhdGEpOw0KPiArDQo+ICsJCWZyZWUo dG1wX2RhdGEpOw0KPiArCX0gZWxzZQ0KPiArCQlyZXQgPSBwYXJzZXJfcmVhZF91aW50MzIoJnZh bC0+bGVuLCBkYXRhKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK2ludA0K PiArcGFyc2VyX3JlYWRfdWludDMyX2JpdF92YWwoY29uc3QgY2hhciAqa2V5LCBjaGFyICpzcmMs IHN0cnVjdCBmaXBzX3ZhbCAqdmFsKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQg PSBwYXJzZXJfcmVhZF91aW50MzJfdmFsKGtleSwgc3JjLCB2YWwpOw0KPiArDQo+ICsJaWYgKHJl dCA8IDApDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwl2YWwtPmxlbiAvPSA4Ow0KPiArDQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArd3JpdGViYWNrX2hleF9zdHIoY29u c3QgY2hhciAqa2V5LCBjaGFyICpkc3QsIHN0cnVjdCBmaXBzX3ZhbCAqdmFsKQ0KPiArew0KPiAr CWNoYXIgKnN0ciA9IGRzdDsNCj4gKwl1aW50MzJfdCBsZW47DQo+ICsNCj4gKwlzdHIgKz0gc3Ry bGVuKGtleSk7DQo+ICsNCj4gKwlmb3IgKGxlbiA9IDA7IGxlbiA8IHZhbC0+bGVuOyBsZW4rKykN Cj4gKwkJc25wcmludGYoc3RyICsgbGVuICogMiwgMjU1LCAiJTAyeCIsIHZhbC0+dmFsW2xlbl0p Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3BhcnNl cl9yZWFkX3VpbnQ2NCh1aW50NjRfdCAqdmFsdWUsIGNvbnN0IGNoYXIgKnApDQo+ICt7DQo+ICsJ Y2hhciAqbmV4dDsNCj4gKwl1aW50NjRfdCB2YWw7DQo+ICsNCj4gKwlwID0gc2tpcF93aGl0ZV9z cGFjZXMocCk7DQo+ICsJaWYgKCFpc2RpZ2l0KCpwKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsNCj4gKwl2YWwgPSBzdHJ0b3VsKHAsICZuZXh0LCAxMCk7DQo+ICsJaWYgKHAgPT0gbmV4dCkN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlwID0gbmV4dDsNCj4gKwlzd2l0Y2ggKCpw KSB7DQo+ICsJY2FzZSAnVCc6DQo+ICsJCXZhbCAqPSAxMDI0VUxMOw0KPiArCQkvKiBmYWxsIHRo cm91Z2ggKi8NCj4gKwljYXNlICdHJzoNCj4gKwkJdmFsICo9IDEwMjRVTEw7DQo+ICsJCS8qIGZh bGwgdGhyb3VnaCAqLw0KPiArCWNhc2UgJ00nOg0KPiArCQl2YWwgKj0gMTAyNFVMTDsNCj4gKwkJ LyogZmFsbCB0aHJvdWdoICovDQo+ICsJY2FzZSAnayc6DQo+ICsJY2FzZSAnSyc6DQo+ICsJCXZh bCAqPSAxMDI0VUxMOw0KPiArCQlwKys7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCXAg PSBza2lwX3doaXRlX3NwYWNlcyhwKTsNCj4gKwlpZiAoKnAgIT0gJ1wwJykNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsNCj4gKwkqdmFsdWUgPSB2YWw7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gK2ludA0KPiArcGFyc2VyX3JlYWRfdWludDMyKHVpbnQzMl90ICp2YWx1ZSwgY2hhciAq cCkNCj4gK3sNCj4gKwl1aW50NjRfdCB2YWwgPSAwOw0KPiArCWludCByZXQgPSBwYXJzZXJfcmVh ZF91aW50NjQoJnZhbCwgcCk7DQo+ICsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJuIHJl dDsNCj4gKw0KPiArCWlmICh2YWwgPiBVSU5UMzJfTUFYKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gKw0KPiArCSp2YWx1ZSA9IHZhbDsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArdm9p ZA0KPiArcGFyc2Vfd3JpdGVfaGV4X3N0cihzdHJ1Y3QgZmlwc192YWwgKnNyYykNCj4gK3sNCj4g Kwl3cml0ZWJhY2tfaGV4X3N0cigiIiwgaW5mby5vbmVfbGluZV90ZXh0LCBzcmMpOw0KPiArDQo+ ICsJZnByaW50ZihpbmZvLmZwX3dyLCAiJXNcbiIsIGluZm8ub25lX2xpbmVfdGV4dCk7DQo+ICt9 DQo+ICsNCj4gK2ludA0KPiArdXBkYXRlX2luZm9fdmVjKHVpbnQzMl90IGNvdW50KQ0KPiArew0K PiArCWNvbnN0IHN0cnVjdCBmaXBzX3Rlc3RfY2FsbGJhY2sgKmNiOw0KPiArCXVpbnQzMl90IGks IGo7DQo+ICsNCj4gKwlpZiAoIWluZm8ud3JpdGViYWNrX2NhbGxiYWNrcykNCj4gKwkJcmV0dXJu IC0xOw0KPiArDQo+ICsJY2IgPSAmaW5mby53cml0ZWJhY2tfY2FsbGJhY2tzWzBdOw0KPiArDQo+ ICsJc25wcmludGYoaW5mby52ZWNbMF0sIHN0cmxlbihpbmZvLnZlY1swXSkgKyA0LCAiJXMldSIs IGNiLT5rZXksIGNvdW50KTsNCj4gKw0KPiArCWZvciAoaSA9IDE7IGkgPCBpbmZvLm5iX3ZlY19s aW5lczsgaSsrKSB7DQo+ICsJCWZvciAoaiA9IDE7IGluZm8ud3JpdGViYWNrX2NhbGxiYWNrc1tq XS5rZXkgIT0gTlVMTDsgaisrKSB7DQo+ICsJCQljYiA9ICZpbmZvLndyaXRlYmFja19jYWxsYmFj a3Nbal07DQo+ICsJCQlpZiAoc3Ryc3RyKGluZm8udmVjW2ldLCBjYi0+a2V5KSkgew0KPiArCQkJ CWNiLT5jYihjYi0+a2V5LCBpbmZvLnZlY1tpXSwgY2ItPnZhbCk7DQo+ICsJCQkJYnJlYWs7DQo+ ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gZGlmZiAt LWdpdCBhL2V4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRlL2NyeXB0b2Rldl9maXBzX3Zh bGlkYXRlLmggYi9leGFtcGxlcy9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS9jcnlwdG9kZXZfZmlw c192YWxpZGF0ZS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmJl YjZiZWQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9leGFtcGxlcy9jcnlwdG9kZXZfZmlwc192 YWxpZGF0ZS9jcnlwdG9kZXZfZmlwc192YWxpZGF0ZS5oDQo+IEBAIC0wLDAgKzEsMTUwIEBADQo+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmln aHQoYykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX0NS WVBUT0RFVl9OSVNUX0ZJUFNfUEFSU0VSX0hfDQo+ICsjZGVmaW5lIF9DUllQVE9ERVZfTklTVF9G SVBTX1BBUlNFUl9IXw0KPiArDQo+ICsjZGVmaW5lIEZJUFNfUEFSU0VfRVJSKGZtdCwgYXJncykJ CQkJCVwNCj4gKwlSVEVfTE9HKEVSUiwgVVNFUjEsICJGSVBTIHBhcnNlIGVycm9yIiAjIyBmbXQg IyMgIlxuIiwgIyMgYXJncykNCj4gKw0KPiArI2RlZmluZSBFUlJfTVNHX1NJWkUJCTEyOA0KPiAr I2RlZmluZSBNQVhfQ0FTRV9MSU5FCQkxNQ0KPiArI2RlZmluZSBNQVhfTElORV9DSEFSCQkyMDQ4 MDAgLyo8IG1heCBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSAqLw0KPiArI2RlZmluZSBN QVhfTkJfVEVTVFMJCTEwMjQwDQo+ICsjZGVmaW5lIE1BWF9CVUZfU0laRQkJMjA0OA0KPiArI2Rl ZmluZSBNQVhfU1RSSU5HX1NJWkUJCTY0DQo+ICsNCj4gKyNkZWZpbmUgUE9TSVRJVkVfVEVTVAkJ MA0KPiArI2RlZmluZSBORUdBVElWRV9URVNUCQktMQ0KPiArDQo+ICsjZGVmaW5lIFJFUV9GSUxF X1BFUkZJWAkJInJlcSINCj4gKyNkZWZpbmUgUlNQX0ZJTEVfUEVSRklYCQkicnNwIg0KPiArI2Rl ZmluZSBGQVhfRklMRV9QRVJGSVgJCSJmYXgiDQo+ICsNCj4gK2VudW0gZmlwc190ZXN0X2FsZ29y aXRobXMgew0KPiArCQlGSVBTX1RFU1RfQUxHT19NQVgNCj4gK307DQo+ICsNCj4gK2VudW0gZmls ZV90eXBlcyB7DQo+ICsJRklQU19UWVBFX1JFUSA9IDEsDQo+ICsJRklQU19UWVBFX0ZBWCwNCj4g KwlGSVBTX1RZUEVfUlNQDQo+ICt9Ow0KPiArDQo+ICtlbnVtIGZpcHNfdGVzdF9vcCB7DQo+ICsJ RklQU19URVNUX0VOQ19BVVRIX0dFTiA9IDEsDQo+ICsJRklQU19URVNUX0RFQ19BVVRIX1ZFUklG LA0KPiArfTsNCj4gKw0KPiArI2RlZmluZSBNQVhfTElORV9QRVJfVkVDVE9SICAgICAgICAgICAg MTYNCj4gKw0KPiArc3RydWN0IGZpcHNfdmFsIHsNCj4gKwl1aW50OF90ICp2YWw7DQo+ICsJdWlu dDMyX3QgbGVuOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGZpcHNfdGVzdF92ZWN0b3Igew0KPiAr CXVuaW9uIHsNCj4gKwkJc3RydWN0IHsNCj4gKwkJCXN0cnVjdCBmaXBzX3ZhbCBrZXk7DQo+ICsJ CQlzdHJ1Y3QgZmlwc192YWwgZGlnZXN0Ow0KPiArCQkJc3RydWN0IGZpcHNfdmFsIGF1dGhfYWFk Ow0KPiArCQkJc3RydWN0IGZpcHNfdmFsIGFhZDsNCj4gKwkJfSBjaXBoZXJfYXV0aDsNCj4gKwkJ c3RydWN0IHsNCj4gKwkJCXN0cnVjdCBmaXBzX3ZhbCBrZXk7DQo+ICsJCQlzdHJ1Y3QgZmlwc192 YWwgZGlnZXN0Ow0KPiArCQkJc3RydWN0IGZpcHNfdmFsIGFhZDsNCj4gKwkJfSBhZWFkOw0KPiAr CX07DQo+ICsNCj4gKwlzdHJ1Y3QgZmlwc192YWwgcHQ7DQo+ICsJc3RydWN0IGZpcHNfdmFsIGN0 Ow0KPiArCXN0cnVjdCBmaXBzX3ZhbCBpdjsNCj4gKw0KPiArCWVudW0gcnRlX2NyeXB0b19vcF9z dGF0dXMgc3RhdHVzOw0KPiArfTsNCj4gKw0KPiArdHlwZWRlZiBpbnQgKCpwb3N0X3ByY2Vzc190 KShzdHJ1Y3QgZmlwc192YWwgKnZhbCk7DQo+ICsNCj4gK3R5cGVkZWYgaW50ICgqcGFyc2VfY2Fs bGJhY2tfdCkoY29uc3QgY2hhciAqa2V5LCBjaGFyICp0ZXh0LA0KPiArCQlzdHJ1Y3QgZmlwc192 YWwgKnZhbCk7DQo+ICsNCj4gK3N0cnVjdCBmaXBzX3Rlc3RfY2FsbGJhY2sgew0KPiArCWNvbnN0 IGNoYXIgKmtleTsNCj4gKwlwYXJzZV9jYWxsYmFja190IGNiOw0KPiArCXN0cnVjdCBmaXBzX3Zh bCAqdmFsOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGZpcHNfdGVzdF9pbnRlcmltX2luZm8gew0K PiArCUZJTEUgKmZwX3JkOw0KPiArCUZJTEUgKmZwX3dyOw0KPiArCWVudW0gZmlsZV90eXBlcyBm aWxlX3R5cGU7DQo+ICsJZW51bSBmaXBzX3Rlc3RfYWxnb3JpdGhtcyBhbGdvOw0KPiArCWNoYXIg Km9uZV9saW5lX3RleHQ7DQo+ICsJY2hhciAqdmVjW01BWF9MSU5FX1BFUl9WRUNUT1JdOw0KPiAr CXVpbnQzMl90IG5iX3ZlY19saW5lczsNCj4gKwkvL3VpbnQ4X3QgY3J5cHRvZGV2X2lkOw0KcmVt b3ZlIGlmIG5vdCBuZWVkZWQNCj4gKwljaGFyIGRldmljZV9uYW1lW01BWF9TVFJJTkdfU0laRV07 DQo+ICsNCj4gKwllbnVtIGZpcHNfdGVzdF9vcCBvcDsNCj4gKw0KPiArCWNvbnN0IHN0cnVjdCBm aXBzX3Rlc3RfY2FsbGJhY2sgKmNhbGxiYWNrczsNCj4gKwljb25zdCBzdHJ1Y3QgZmlwc190ZXN0 X2NhbGxiYWNrICppbnRlcmltX2NhbGxiYWNrczsNCj4gKwljb25zdCBzdHJ1Y3QgZmlwc190ZXN0 X2NhbGxiYWNrICp3cml0ZWJhY2tfY2FsbGJhY2tzOw0KPiArDQo+ICsJcG9zdF9wcmNlc3NfdCBw YXJzZV93cml0ZWJhY2s7DQo+ICsJcG9zdF9wcmNlc3NfdCBrYXRfY2hlY2s7DQo+ICt9Ow0KPiAr DQo+ICtleHRlcm4gc3RydWN0IGZpcHNfdGVzdF92ZWN0b3IgdmVjOw0KPiArZXh0ZXJuIHN0cnVj dCBmaXBzX3Rlc3RfaW50ZXJpbV9pbmZvIGluZm87DQo+ICsNCj4gK2ludA0KPiArZmlwc190ZXN0 X2luaXQoY29uc3QgY2hhciAqcmVxX2ZpbGVfcGF0aCwgY29uc3QgY2hhciAqcnNwX2ZpbGVfcGF0 aCwNCj4gKwkJY29uc3QgY2hhciAqZGV2aWNlX25hbWUpOw0KPiArDQo+ICt2b2lkDQo+ICtmaXBz X3Rlc3RfY2xlYXIodm9pZCk7DQo+ICsNCj4gK2ludA0KPiArZmlwc190ZXN0X2ZldGNoX29uZV9i bG9jayh2b2lkKTsNCj4gKw0KPiAraW50DQo+ICtmaXBzX3Rlc3RfcGFyc2Vfb25lX2Nhc2Uodm9p ZCk7DQo+ICsNCj4gK3ZvaWQNCj4gK2ZpcHNfdGVzdF93cml0ZV9vbmVfY2FzZSh2b2lkKTsNCj4g Kw0KPiAraW50DQo+ICtwYXJzZXJfcmVhZF91aW50OF9oZXgodWludDhfdCAqdmFsdWUsIGNvbnN0 IGNoYXIgKnApOw0KPiArDQo+ICtpbnQNCj4gK3BhcnNlX3VpbnQ4X2hleF9zdHIoY29uc3QgY2hh ciAqa2V5LCBjaGFyICpzcmMsIHN0cnVjdCBmaXBzX3ZhbCAqdmFsKTsNCj4gKw0KPiAraW50DQo+ ICtwYXJzZV91aW50OF9rbm93bl9sZW5faGV4X3N0cihjb25zdCBjaGFyICprZXksIGNoYXIgKnNy Yywgc3RydWN0IGZpcHNfdmFsICp2YWwpOw0KPiArDQo+ICtpbnQNCj4gK3BhcnNlcl9yZWFkX3Vp bnQzMl92YWwoY29uc3QgY2hhciAqa2V5LCBjaGFyICpzcmMsIHN0cnVjdCBmaXBzX3ZhbCAqdmFs KTsNCj4gKw0KPiAraW50DQo+ICtwYXJzZXJfcmVhZF91aW50MzJfYml0X3ZhbChjb25zdCBjaGFy ICprZXksIGNoYXIgKnNyYywgc3RydWN0IGZpcHNfdmFsICp2YWwpOw0KPiArDQo+ICtpbnQNCj4g K3BhcnNlcl9yZWFkX3VpbnQzMih1aW50MzJfdCAqdmFsdWUsIGNoYXIgKnApOw0KPiArDQo+ICtp bnQNCj4gK3BhcnNlcl9yZWFkX3VpbnQzMl92YWwoY29uc3QgY2hhciAqa2V5LCBjaGFyICpzcmMs IHN0cnVjdCBmaXBzX3ZhbCAqdmFsKTsNCj4gKw0KPiAraW50DQo+ICt3cml0ZWJhY2tfaGV4X3N0 cihjb25zdCBjaGFyICprZXksIGNoYXIgKmRzdCwgc3RydWN0IGZpcHNfdmFsICp2YWwpOw0KPiAr DQo+ICt2b2lkDQo+ICtwYXJzZV93cml0ZV9oZXhfc3RyKHN0cnVjdCBmaXBzX3ZhbCAqc3JjKTsN Cj4gKw0KPiAraW50DQo+ICt1cGRhdGVfaW5mb192ZWModWludDMyX3QgY291bnQpOw0KPiArDQo+ ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRl L21haW4uYyBiL2V4YW1wbGVzL2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRlL21haW4uYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi40ZjE0YjA0DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZXhhbXBsZXMvY3J5cHRvZGV2X2ZpcHNfdmFsaWRhdGUvbWFpbi5jDQo+IEBA IC0wLDAgKzEsMzg4IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KPiArI2luY2x1ZGUgPGdldG9wdC5oPg0KPiAr I2luY2x1ZGUgPGRpcmVudC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2NyeXB0b2Rldi5oPg0K PiArI2luY2x1ZGUgPHJ0ZV9jcnlwdG9kZXZfcG1kLmg+DQo+ICsjaW5jbHVkZSA8cnRlX21lbXBv b2wuaD4NCj4gKyNpbmNsdWRlIDxydGVfbWJ1Zi5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9zdHJpbmdf Zm5zLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJjcnlwdG9kZXZfZmlwc192YWxpZGF0ZS5oIg0KPiAr DQo+ICsjZGVmaW5lIFJFUV9GSUxFX1BBVEhfS0VZV09SRAkicmVxLWZpbGUiDQo+ICsjZGVmaW5l IFJTUF9GSUxFX1BBVEhfS0VZV09SRAkicnNwLWZpbGUiDQo+ICsjZGVmaW5lIEZPTERFUl9LRVlX T1JECQkicGF0aC1pcy1mb2xkZXIiDQo+ICsjZGVmaW5lIENSWVBUT0RFVl9LRVlXT1JECSJjcnlw dG9kZXYiDQo+ICsjZGVmaW5lIENSWVBUT0RFVl9JRF9LRVlXT1JECSJjcnlwdG9kZXYtaWQiDQo+ ICsNCj4gK3N0cnVjdCBmaXBzX3Rlc3RfdmVjdG9yIHZlYzsNCj4gK3N0cnVjdCBmaXBzX3Rlc3Rf aW50ZXJpbV9pbmZvIGluZm87DQo+ICsNCj4gK3N0cnVjdCBjcnlwdG9kZXZfZmlwc192YWxpZGF0 ZV9lbnYgew0KPiArCWNvbnN0IGNoYXIgKnJlcV9wYXRoOw0KPiArCWNvbnN0IGNoYXIgKnJzcF9w YXRoOw0KPiArCXVpbnQzMl90IGlzX3BhdGhfZm9sZGVyOw0KPiArCXVpbnQzMl90IGRldl9pZDsN Cj4gKwlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wb29sOw0KPiArCXN0cnVjdCBydGVfbWVtcG9vbCAq b3BfcG9vbDsNCj4gKwlzdHJ1Y3QgcnRlX21idWYgKm1idWY7DQo+ICsJc3RydWN0IHJ0ZV9jcnlw dG9fb3AgKm9wOw0KPiArCXN0cnVjdCBydGVfY3J5cHRvZGV2X3N5bV9zZXNzaW9uICpzZXNzOw0K PiArfSBlbnY7DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRl X2FwcF9pbnQodm9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX2NyeXB0b2Rldl9jb25maWcgY29u ZiA9IHtydGVfc29ja2V0X2lkKCksIDF9Ow0KPiArCXN0cnVjdCBydGVfY3J5cHRvZGV2X3FwX2Nv bmYgcXBfY29uZiA9IHsxMjh9Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBydGVfY3J5 cHRvZGV2X2NvbmZpZ3VyZShlbnYuZGV2X2lkLCAmY29uZik7DQo+ICsJaWYgKHJldCA8IDApDQo+ ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwllbnYubXBvb2wgPSBydGVfcGt0bWJ1Zl9wb29sX2Ny ZWF0ZSgiRklQU19NRU1QT09MIiwgMTI4LCAwLCAwLA0KPiArCQkJVUlOVDE2X01BWCwgcnRlX3Nv Y2tldF9pZCgpKTsNCj4gKwlpZiAoIWVudi5tcG9vbCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0K PiArCXJldCA9IHJ0ZV9jcnlwdG9kZXZfcXVldWVfcGFpcl9zZXR1cChlbnYuZGV2X2lkLCAwLCAm cXBfY29uZiwNCj4gKwkJCXJ0ZV9zb2NrZXRfaWQoKSwgZW52Lm1wb29sKTsNCj4gKwlpZiAocmV0 IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IC1FTk9NRU07DQo+ICsNCj4g KwllbnYub3BfcG9vbCA9IHJ0ZV9jcnlwdG9fb3BfcG9vbF9jcmVhdGUoDQo+ICsJCQkiRklQU19P UF9QT09MIiwNCj4gKwkJCVJURV9DUllQVE9fT1BfVFlQRV9TWU1NRVRSSUMsDQo+ICsJCQkxLCAw LA0KPiArCQkJMTYsDQo+ICsJCQlydGVfc29ja2V0X2lkKCkpOw0KPiArCWlmICghZW52Lm9wX3Bv b2wpDQo+ICsJCWdvdG8gZXJyb3JfZXhpdDsNCj4gKw0KPiArCWVudi5tYnVmID0gcnRlX3BrdG1i dWZfYWxsb2MoZW52Lm1wb29sKTsNCj4gKwlpZiAoIWVudi5tYnVmKQ0KPiArCQlnb3RvIGVycm9y X2V4aXQ7DQo+ICsNCj4gKwllbnYub3AgPSBydGVfY3J5cHRvX29wX2FsbG9jKGVudi5vcF9wb29s LCBSVEVfQ1JZUFRPX09QX1RZUEVfU1lNTUVUUklDKTsNCj4gKwlpZiAoIWVudi5vcCkNCj4gKwkJ Z290byBlcnJvcl9leGl0Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK2Vycm9yX2V4aXQ6 DQo+ICsJcnRlX21lbXBvb2xfZnJlZShlbnYubXBvb2wpOw0KPiArCWlmIChlbnYub3BfcG9vbCkN Cj4gKwkJcnRlX21lbXBvb2xfZnJlZShlbnYub3BfcG9vbCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArY3J5cHRvZGV2X2ZpcHNfdmFsaWRhdGVf YXBwX3VuaW5pdCh2b2lkKQ0KPiArew0KPiArCXJ0ZV9wa3RtYnVmX2ZyZWUoZW52Lm1idWYpOw0K PiArCXJ0ZV9jcnlwdG9fb3BfZnJlZShlbnYub3ApOw0KPiArCXJ0ZV9jcnlwdG9kZXZfc3ltX3Nl c3Npb25fY2xlYXIoZW52LmRldl9pZCwgZW52LnNlc3MpOw0KPiArCXJ0ZV9jcnlwdG9kZXZfc3lt X3Nlc3Npb25fZnJlZShlbnYuc2Vzcyk7DQo+ICsJcnRlX21lbXBvb2xfZnJlZShlbnYubXBvb2wp Ow0KPiArCXJ0ZV9tZW1wb29sX2ZyZWUoZW52Lm9wX3Bvb2wpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtmaXBzX3Rlc3Rfb25lX2ZpbGUodm9pZCk7DQo+ICsNCj4gK3N0YXRpYyBpbnQN Cj4gK3BhcnNlX2NyeXB0b2Rldl9hcmcoY2hhciAqYXJnKQ0KPiArew0KPiArCWludCBpZCA9IHJ0 ZV9jcnlwdG9kZXZfZ2V0X2Rldl9pZChhcmcpOw0KPiArDQo+ICsJaWYgKGlkIDwgMCkgew0KPiAr CQlSVEVfTE9HKEVSUiwgVVNFUjEsICJFcnJvciAlaTogaW52YWxpZCBjcnlwdG9kZXYgbmFtZSAl c1xuIiwNCj4gKwkJCQlpZCwgYXJnKTsNCj4gKwkJcmV0dXJuIGlkOw0KPiArCX0NCj4gKw0KPiAr CWVudi5kZXZfaWQgPSAodWludDMyX3QpaWQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludA0KPiArcGFyc2VfY3J5cHRvZGV2X2lkX2FyZyhjaGFyICphcmcpDQo+ ICt7DQo+ICsJdWludDMyX3QgY3J5cHRvZGV2X2lkOw0KPiArDQo+ICsJaWYgKHBhcnNlcl9yZWFk X3VpbnQzMigmY3J5cHRvZGV2X2lkLCBhcmcpIDwgMCkgew0KPiArCQlSVEVfTE9HKEVSUiwgVVNF UjEsICJFcnJvciAlaTogaW52YWxpZCBjcnlwdG9kZXYgaWQgJXNcbiIsDQo+ICsJCQkJLUVJTlZB TCwgYXJnKTsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArDQo+ICsJaWYgKCFydGVf Y3J5cHRvZGV2X3BtZF9pc192YWxpZF9kZXYoY3J5cHRvZGV2X2lkKSkgew0KPiArCQlSVEVfTE9H KEVSUiwgVVNFUjEsICJFcnJvciAlaTogaW52YWxpZCBjcnlwdG9kZXYgaWQgJXNcbiIsDQo+ICsJ CQkJY3J5cHRvZGV2X2lkLCBhcmcpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArDQo+ICsJ ZW52LmRldl9pZCA9ICh1aW50MzJfdCljcnlwdG9kZXZfaWQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2NyeXB0b2Rldl9maXBzX3ZhbGlkYXRlX3Vz YWdlKGNvbnN0IGNoYXIgKnByZ25hbWUpDQo+ICt7DQo+ICsJcHJpbnRmKCIlcyBbRUFMIG9wdGlv bnNdIC0tXG4iDQo+ICsJCSIgIC0tJXM6IFJFUVVFU1QtRklMRS1QQVRIXG4iDQo+ICsJCSIgIC0t JXM6IFJFU1BPTlNFLUZJTEUtUEFUSFxuIg0KPiArCQkiICAtLSVzOiBpbmRpY2F0aW5nIGJvdGgg cGF0aHMgYXJlIGZvbGRlcnNcbiINCj4gKwkJIiAgLS0lczogQ1JZUFRPREVWLU5BTUVcbiINCj4g KwkJIiAgLS0lczogQ1JZUFRPREVWLUlELU5BTUVcbiIsDQo+ICsJCXByZ25hbWUsIFJFUV9GSUxF X1BBVEhfS0VZV09SRCwgUlNQX0ZJTEVfUEFUSF9LRVlXT1JELA0KPiArCQlGT0xERVJfS0VZV09S RCwgQ1JZUFRPREVWX0tFWVdPUkQsIENSWVBUT0RFVl9JRF9LRVlXT1JEKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludA0KPiArY3J5cHRvZGV2X2ZpcHNfdmFsaWRhdGVfcGFyc2VfYXJncyhpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQo+ICt7DQo+ICsJaW50IG9wdCwgcmV0Ow0KPiArCWNoYXIgKnBy Z25hbWUgPSBhcmd2WzBdOw0KPiArCWNoYXIgKiphcmd2b3B0Ow0KPiArCWludCBvcHRpb25faW5k ZXg7DQo+ICsJc3RydWN0IG9wdGlvbiBsZ29wdHNbXSA9IHsNCj4gKwkJCXtSRVFfRklMRV9QQVRI X0tFWVdPUkQsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAwfSwNCj4gKwkJCXtSU1BfRklMRV9QQVRI X0tFWVdPUkQsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAwfSwNCj4gKwkJCXtGT0xERVJfS0VZV09S RCwgbm9fYXJndW1lbnQsIDAsIDB9LA0KPiArCQkJe0NSWVBUT0RFVl9LRVlXT1JELCByZXF1aXJl ZF9hcmd1bWVudCwgMCwgMH0sDQo+ICsJCQl7Q1JZUFRPREVWX0lEX0tFWVdPUkQsIHJlcXVpcmVk X2FyZ3VtZW50LCAwLCAwfSwNCj4gKwkJCXtOVUxMLCAwLCAwLCAwfQ0KPiArCX07DQo+ICsNCj4g Kwlhcmd2b3B0ID0gYXJndjsNCj4gKw0KPiArCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndm9wdCwgInM6IiwNCj4gKwkJCQkgIGxnb3B0cywgJm9wdGlvbl9pbmRleCkpICE9IEVP Rikgew0KPiArDQo+ICsJCXN3aXRjaCAob3B0KSB7DQo+ICsJCWNhc2UgMDoNCj4gKwkJCWlmIChz dHJjbXAobGdvcHRzW29wdGlvbl9pbmRleF0ubmFtZSwNCj4gKwkJCQkJUkVRX0ZJTEVfUEFUSF9L RVlXT1JEKSA9PSAwKQ0KPiArCQkJCWVudi5yZXFfcGF0aCA9IG9wdGFyZzsNCj4gKwkJCWVsc2Ug aWYgKHN0cmNtcChsZ29wdHNbb3B0aW9uX2luZGV4XS5uYW1lLA0KPiArCQkJCQlSU1BfRklMRV9Q QVRIX0tFWVdPUkQpID09IDApDQo+ICsJCQkJZW52LnJzcF9wYXRoID0gb3B0YXJnOw0KPiArCQkJ ZWxzZSBpZiAoc3RyY21wKGxnb3B0c1tvcHRpb25faW5kZXhdLm5hbWUsDQo+ICsJCQkJCUZPTERF Ul9LRVlXT1JEKSA9PSAwKQ0KPiArCQkJCWVudi5pc19wYXRoX2ZvbGRlciA9IDE7DQo+ICsJCQll bHNlIGlmIChzdHJjbXAobGdvcHRzW29wdGlvbl9pbmRleF0ubmFtZSwNCj4gKwkJCQkJQ1JZUFRP REVWX0tFWVdPUkQpID09IDApIHsNCj4gKwkJCQlyZXQgPSBwYXJzZV9jcnlwdG9kZXZfYXJnKG9w dGFyZyk7DQo+ICsJCQkJaWYgKHJldCA8IDApIHsNCj4gKwkJCQkJY3J5cHRvZGV2X2ZpcHNfdmFs aWRhdGVfdXNhZ2UocHJnbmFtZSk7DQo+ICsJCQkJCXJldHVybiAtRUlOVkFMOw0KPiArCQkJCX0N Cj4gKwkJCX0gZWxzZSBpZiAoc3RyY21wKGxnb3B0c1tvcHRpb25faW5kZXhdLm5hbWUsDQo+ICsJ CQkJCUNSWVBUT0RFVl9JRF9LRVlXT1JEKSA9PSAwKSB7DQo+ICsJCQkJcmV0ID0gcGFyc2VfY3J5 cHRvZGV2X2lkX2FyZyhvcHRhcmcpOw0KPiArCQkJCWlmIChyZXQgPCAwKSB7DQo+ICsJCQkJCWNy eXB0b2Rldl9maXBzX3ZhbGlkYXRlX3VzYWdlKHByZ25hbWUpOw0KPiArCQkJCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKwkJCQl9DQo+ICsJCQl9IGVsc2Ugew0KPiArCQkJCWNyeXB0b2Rldl9maXBzX3Zh bGlkYXRlX3VzYWdlKHByZ25hbWUpOw0KPiArCQkJCXJldHVybiAtRUlOVkFMOw0KPiArCQkJfQ0K PiArCQkJYnJlYWs7DQo+ICsJCWRlZmF1bHQ6DQo+ICsJCQlyZXR1cm4gLTE7DQo+ICsJCX0NCj4g Kwl9DQo+ICsNCj4gKwlpZiAoZW52LnJlcV9wYXRoID09IE5VTEwgfHwgZW52LnJzcF9wYXRoID09 IE5VTEwgfHwNCj4gKwkJCWVudi5kZXZfaWQgPT0gVUlOVDMyX01BWCkgew0KPiArCQljcnlwdG9k ZXZfZmlwc192YWxpZGF0ZV91c2FnZShwcmduYW1lKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlyZXQgPSBy dGVfZWFsX2luaXQoYXJnYywgYXJndik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJUlRFX0xP RyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6IEZhaWxlZCBpbml0XG4iLCByZXQpOw0KPiArCQlyZXR1 cm4gLTE7DQo+ICsJfQ0KPiArDQo+ICsJYXJnYyAtPSByZXQ7DQo+ICsJYXJndiArPSByZXQ7DQo+ ICsNCj4gKwlyZXQgPSBjcnlwdG9kZXZfZmlwc192YWxpZGF0ZV9wYXJzZV9hcmdzKGFyZ2MsIGFy Z3YpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICJGYWls ZWQgdG8gcGFyc2UgYXJndW1lbnRzIVxuIik7DQo+ICsNCj4gKwlyZXQgPSBjcnlwdG9kZXZfZmlw c192YWxpZGF0ZV9hcHBfaW50KCk7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJUlRFX0xPRyhF UlIsIFVTRVIxLCAiRXJyb3IgJWk6IEZhaWxlZCBpbml0XG4iLCByZXQpOw0KPiArCQlyZXR1cm4g LTE7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFlbnYuaXNfcGF0aF9mb2xkZXIpIHsNCj4gKwkJcHJp bnRmKCJQcm9jZXNzaW5nIGZpbGUgJXMuLi4gIiwgZW52LnJlcV9wYXRoKTsNCj4gKw0KPiArCQly ZXQgPSBmaXBzX3Rlc3RfaW5pdChlbnYucmVxX3BhdGgsIGVudi5yc3BfcGF0aCwNCj4gKwkJCXJ0 ZV9jcnlwdG9kZXZfbmFtZV9nZXQoZW52LmRldl9pZCkpOw0KPiArCQlpZiAocmV0IDwgMCkgew0K PiArCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6IEZhaWxlZCB0ZXN0ICVzXG4iLA0K PiArCQkJCQlyZXQsIGVudi5yZXFfcGF0aCk7DQo+ICsJCQlnb3RvIGV4aXQ7DQo+ICsJCX0NCj4g Kw0KPiArDQo+ICsJCXJldCA9IGZpcHNfdGVzdF9vbmVfZmlsZSgpOw0KPiArCQlpZiAocmV0IDwg MCkgew0KPiArCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6IEZhaWxlZCB0ZXN0ICVz XG4iLA0KPiArCQkJCQlyZXQsIGVudi5yZXFfcGF0aCk7DQo+ICsJCQlnb3RvIGV4aXQ7DQo+ICsJ CX0NCj4gKw0KPiArCQlwcmludGYoIkRvbmVcbiIpOw0KPiArDQo+ICsJfSBlbHNlIHsNCj4gKwkJ c3RydWN0IGRpcmVudCAqZGlyOw0KPiArCQlESVIgKmRfcmVxLCAqZF9yc3A7DQo+ICsJCWNoYXIg cmVxX3BhdGhbMTAyNF07DQo+ICsJCWNoYXIgcnNwX3BhdGhbMTAyNF07DQo+ICsNCj4gKwkJZF9y ZXEgPSBvcGVuZGlyKGVudi5yZXFfcGF0aCk7DQo+ICsJCWlmICghZF9yZXEpIHsNCj4gKwkJCVJU RV9MT0coRVJSLCBVU0VSMSwgIkVycm9yICVpOiBQYXRoICVzIG5vdCBleGlzdFxuIiwNCj4gKwkJ CQkJLUVJTlZBTCwgZW52LnJlcV9wYXRoKTsNCj4gKwkJCWdvdG8gZXhpdDsNCj4gKwkJfQ0KPiAr DQo+ICsJCWRfcnNwID0gb3BlbmRpcihlbnYucnNwX3BhdGgpOw0KPiArCQlpZiAoIWRfcnNwKSB7 DQo+ICsJCQlyZXQgPSBta2RpcihlbnYucnNwX3BhdGgsIDA3MDApOw0KPiArCQkJaWYgKHJldCA9 PSAwKQ0KPiArCQkJCWRfcnNwID0gb3BlbmRpcihlbnYucnNwX3BhdGgpOw0KPiArCQkJZWxzZSB7 DQo+ICsJCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6IEludmFsaWQgJXNcbiIsDQo+ ICsJCQkJCQktRUlOVkFMLCBlbnYucnNwX3BhdGgpOw0KPiArCQkJCWdvdG8gZXhpdDsNCj4gKwkJ CX0NCj4gKwkJfQ0KPiArCQljbG9zZWRpcihkX3JzcCk7DQo+ICsNCj4gKwkJd2hpbGUgKChkaXIg PSByZWFkZGlyKGRfcmVxKSkgIT0gTlVMTCkgew0KPiArCQkJaWYgKHN0cnN0cihkaXItPmRfbmFt ZSwgInJlcSIpID09IE5VTEwpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCXNucHJpbnRm KHJlcV9wYXRoLCAxMDIzLCAiJXMvJXMiLCBlbnYucmVxX3BhdGgsDQo+ICsJCQkJCWRpci0+ZF9u YW1lKTsNCj4gKwkJCXNucHJpbnRmKHJzcF9wYXRoLCAxMDIzLCAiJXMvJXMiLCBlbnYucnNwX3Bh dGgsDQo+ICsJCQkJCWRpci0+ZF9uYW1lKTsNCj4gKwkJCXN0cmxjcHkoc3Ryc3RyKHJzcF9wYXRo LCAicmVxIiksICJyc3AiLCA0KTsNCj4gKw0KPiArCQkJcHJpbnRmKCJQcm9jZXNzaW5nIGZpbGUg JXMuLi4gIiwgcmVxX3BhdGgpOw0KPiArDQo+ICsJCQlyZXQgPSBmaXBzX3Rlc3RfaW5pdChyZXFf cGF0aCwgcnNwX3BhdGgsDQo+ICsJCQlydGVfY3J5cHRvZGV2X25hbWVfZ2V0KGVudi5kZXZfaWQp KTsNCj4gKwkJCWlmIChyZXQgPCAwKSB7DQo+ICsJCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJy b3IgJWk6IEZhaWxlZCB0ZXN0ICVzXG4iLA0KPiArCQkJCQkJcmV0LCByZXFfcGF0aCk7DQo+ICsJ CQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCXJldCA9IGZpcHNfdGVzdF9vbmVfZmlsZSgp Ow0KPiArCQkJaWYgKHJldCA8IDApIHsNCj4gKwkJCQlSVEVfTE9HKEVSUiwgVVNFUjEsICJFcnJv ciAlaTogRmFpbGVkIHRlc3QgJXNcbiIsDQo+ICsJCQkJCQlyZXQsIHJlcV9wYXRoKTsNCj4gKwkJ CQlicmVhazsNCj4gKwkJCX0NCj4gKw0KPiArCQkJcHJpbnRmKCJEb25lXG4iKTsNCj4gKwkJfQ0K PiArDQo+ICsJCWNsb3NlZGlyKGRfcmVxKTsNCj4gKwl9DQo+ICsNCj4gKw0KPiArZXhpdDoNCj4g KwlmaXBzX3Rlc3RfY2xlYXIoKTsNCj4gKwljcnlwdG9kZXZfZmlwc192YWxpZGF0ZV9hcHBfdW5p bml0KCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkDQo+ICtwcmludF90ZXN0X2Jsb2NrKHZvaWQpDQo+ICt7DQo+ICsJdWludDMyX3QgaTsNCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLm5iX3ZlY19saW5lczsgaSsrKQ0KPiArCQlwcmlu dGYoIiVzXG4iLCBpbmZvLnZlY1tpXSk7DQo+ICsNCj4gKwlwcmludGYoIlxuIik7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2ZpcHNfdGVzdF9vbmVfZmlsZSh2b2lkKQ0KPiArew0KPiAr CWludCBmZXRjaF9yZXQgPSAwLCByZXQ7DQo+ICsNCj4gKwl3aGlsZSAoZmV0Y2hfcmV0ID09IDAp IHsNCj4gKwkJZmV0Y2hfcmV0ID0gZmlwc190ZXN0X2ZldGNoX29uZV9ibG9jaygpOw0KPiArCQlp ZiAoZmV0Y2hfcmV0IDwgMCkgew0KPiArCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6 IEZldGNoIGJsb2NrXG4iLA0KPiArCQkJCQlmZXRjaF9yZXQpOw0KPiArCQkJcmV0ID0gZmV0Y2hf cmV0Ow0KPiArCQkJZ290byBlcnJvcl9vbmVfY2FzZTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChp bmZvLm5iX3ZlY19saW5lcyA9PSAwKSB7DQo+ICsJCQlpZiAoZmV0Y2hfcmV0ID09IC1FT0YpDQo+ ICsJCQkJYnJlYWs7DQo+ICsNCj4gKwkJCWZwcmludGYoaW5mby5mcF93ciwgIlxuIik7DQo+ICsJ CQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCXJldCA9IGZpcHNfdGVzdF9wYXJzZV9vbmVf Y2FzZSgpOw0KPiArCQlzd2l0Y2ggKHJldCkgew0KPiArCQljYXNlIDA6DQo+ICsJCQlpZiAocmV0 ID09IDApDQo+ICsJCQkJYnJlYWs7DQo+ICsJCQlSVEVfTE9HKEVSUiwgVVNFUjEsICJFcnJvciAl aTogdGVzdCBibG9ja1xuIiwNCj4gKwkJCQkJcmV0KTsNCnRoaXMgbG9nIGlzIHVucmVhY2hhYmxl IGNvZGUuDQo+ICsJCQlnb3RvIGVycm9yX29uZV9jYXNlOw0KPiArCQljYXNlIDE6DQo+ICsJCQli cmVhazsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCVJURV9MT0coRVJSLCBVU0VSMSwgIkVycm9yICVp OiBQYXJzZSBibG9ja1xuIiwNCj4gKwkJCQkJcmV0KTsNCj4gKwkJCWdvdG8gZXJyb3Jfb25lX2Nh c2U7DQo+ICsJCX0NCmRvIHlvdSByZWFsbHkgbmVlZCB0aGlzIHN3aXRjaCBjYXNlIGhlcmUuIElu IGJvdGggdGhlIGNhc2VzIHlvdSBhcmUgDQpicmVha2luZyB3aXRob3V0IGRvaW5nIGFueXRoaW5n Lg0KaXQgc2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlDQppZiAocmV0IDw9IDApIHsNCiDCoMKgwqAg UlRFX0xPRyhFUlIsIFVTRVIxLCAiRXJyb3IgJWk6IFBhcnNlIGJsb2NrXG4iLCByZXQpOw0KIMKg wqDCoCBnb3RvIGVycm9yX29uZV9jYXNlOw0KfQ0KPiArDQo+ICsJCWNvbnRpbnVlOw0KPiArZXJy b3Jfb25lX2Nhc2U6DQo+ICsJCXByaW50X3Rlc3RfYmxvY2soKTsNCj4gKwl9DQo+ICsNCj4gKwlm aXBzX3Rlc3RfY2xlYXIoKTsNCj4gKw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY3J5 cHRvZGV2X2ZpcHNfdmFsaWRhdGUvbWVzb24uYnVpbGQgYi9leGFtcGxlcy9jcnlwdG9kZXZfZmlw c192YWxpZGF0ZS9tZXNvbi5idWlsZA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwLi5mNDQwNDNjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZXhhbXBsZXMvY3J5cHRv ZGV2X2ZpcHNfdmFsaWRhdGUvbWVzb24uYnVpbGQNCj4gQEAgLTAsMCArMSwxNCBAQA0KPiArIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsjIENvcHlyaWdodChjKSAy MDE4IEludGVsIENvcnBvcmF0aW9uDQo+ICsNCj4gKyMgbWVzb24gZmlsZSwgZm9yIGJ1aWxkaW5n IHRoaXMgZXhhbXBsZSBhcyBwYXJ0IG9mIGEgbWFpbiBEUERLIGJ1aWxkLg0KPiArIw0KPiArIyBU byBidWlsZCB0aGlzIGV4YW1wbGUgYXMgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIHdpdGggYW4g YWxyZWFkeS1pbnN0YWxsZWQNCj4gKyMgRFBESyBpbnN0YW5jZSwgdXNlICdtYWtlJw0KPiArDQo+ ICtkZXBzICs9IFsnY3J5cHRvZGV2J10NCj4gK2FsbG93X2V4cGVyaW1lbnRhbF9hcGlzID0gdHJ1 ZQ0KPiArc291cmNlcyA9IGZpbGVzKA0KPiArCSdjcnlwdG9kZXZfZmlwc19wYXJzZV92YWxpZGF0 ZS5jJywNCj4gKwknbWFpbi5jJw0KPiArKQ0KDQo=