From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by sourceware.org (Postfix) with ESMTPS id 72AE63857030 for ; Thu, 3 Sep 2020 17:42:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 72AE63857030 IronPort-SDR: KY/MFujmvVYTbDzCgyfXJzOE0g3CRVqbB84HxHcfFWwgvw4heBQ2W1QSmVXoOT6CRxjY3TVoPr ZKdCuvtT3Z4Q== X-IronPort-AV: E=McAfee;i="6000,8403,9733"; a="145327100" X-IronPort-AV: E=Sophos;i="5.76,387,1592895600"; d="scan'208";a="145327100" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Sep 2020 10:42:16 -0700 IronPort-SDR: l5kjLicKx1rG0Ds6Do/gb3fHx/D7GPMHcAXB7W/Ucl8uzLcPjm0k9zjLsTb2651XIzEmbxzL9I IZccTVB2wTqQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,387,1592895600"; d="scan'208";a="503148024" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga005.fm.intel.com with ESMTP; 03 Sep 2020 10:42:16 -0700 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 3 Sep 2020 10:42:14 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 3 Sep 2020 10:42:14 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.177) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Thu, 3 Sep 2020 10:42:13 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lSkX4hlLvRT1YlNvB95/vxanokdj379s9q32qWvFHWJNtU+nTtmZik4kVDzvk6uGqjyeVS3abUDO9mlb4lJGodFUbpk65ZSkn1H1K05uBxjQTwpkgRSX2rMBX5rsk2EgNchtJmwAr277c8goQ/cPRo7ProtSX6kxSA9oKQlfERBOG5KavtZ7Pxca/nEUFMrv+tLSVdFYREO9tcSMVuqkthha7lRPEoCSroTLCx3B1Wshl0Wb09iJ34m2ieRC+ZmPgXT4oyDNkc1T8DBkIygL38/4WaIk3VhGMl3UJ9WemCjAC/GZktTomqNmUn+95aEb1WtpaBv/ANLhGnCLKsxvow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zPR+LCaBORt2hBgcmP0wJE0NtmCMYYN3swAOoDUPt6Y=; b=Xpz3d8yEgj+3DvQYjDRdbhVxbVXpBfsVxCXOjEQRcKc9p10g5FXsyoItS2Y8b09nXQFzXWdqSTzTikBOQ/WTG8XJLvY7Vx+q1lnnQCkjMkA4i+uIFagxmMl+qj5RaG7fbBK5ZP8B1Ifs+Y4XTWHYNrUIxblLYakH4ZoCnTxgB5Lq5b69iiOZzMOZmCzDJSt6VMh/gGG8oWgwNALLLBVrthlLkN7qMQHPzuTKkJobcX5ZtrlmWSjF2xOgU2i/I94Yq5Tt4dTEaObQLsw4Iy64FyRwi6pgY6FzbKNIOhDqM9S/eELSdaT4NFSj+mrtdwGJZp03hSnxvWrBTpO6A0pnvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BL0PR11MB2882.namprd11.prod.outlook.com (2603:10b6:208:7f::23) by MN2PR11MB4351.namprd11.prod.outlook.com (2603:10b6:208:193::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3326.19; Thu, 3 Sep 2020 17:42:11 +0000 Received: from BL0PR11MB2882.namprd11.prod.outlook.com ([fe80::4c7a:72eb:b8b3:c5b2]) by BL0PR11MB2882.namprd11.prod.outlook.com ([fe80::4c7a:72eb:b8b3:c5b2%4]) with mapi id 15.20.3348.016; Thu, 3 Sep 2020 17:42:10 +0000 From: "Aktemur, Tankut Baris" To: Kamil Rytarowski , "gdb-patches@sourceware.org" Subject: RE: [PATCH 10/10] Add minimal and functional NetBSD/amd64 gdbserver Thread-Topic: [PATCH 10/10] Add minimal and functional NetBSD/amd64 gdbserver Thread-Index: AQHWgVMqMb+Ia04okUWUL75RvUVtLKlXGHcQ Date: Thu, 3 Sep 2020 17:42:10 +0000 Message-ID: References: <20200902175926.13182-1-n54@gmx.com> <20200902175926.13182-11-n54@gmx.com> In-Reply-To: <20200902175926.13182-11-n54@gmx.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action x-originating-ip: [90.186.34.242] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a76df6a4-59b4-4027-269e-08d85030afba x-ms-traffictypediagnostic: MN2PR11MB4351: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: lxi1s8HiUKtRhpQjt2KQlu8IerLXpDt+znQ9XBSPViIs3/1shtH3/or6hE6XeZWbT2y1Ue1B+2J2zZUk8SYhQUjAQDoUKQm61+wgVGDETBoPgw7+1Q8O5LwE+PZDgt8t+8dCmgk5Kxcd8hPWkzRMT6y1jAynoG51ai7X8V1favQ4an1k1ld8ewTlJNUhd6pYfYLllFSJ+Id3evWb/zfp/EnfoIJgMg31OZqkVbpoA/FrLFeEt8fitPnFma7bZi/m9eywHTuN4L9uYN8eVimxrSz9QU5V/ZzMTHjxHDeHBTx0HtUxAHnHNZu7Z0Uqz2QLjXNGAT6oyAzf/HRYcMTs0jHFvYFJAELaCRRooRK0C6JSkllCp1cmn6NfGmA1w+DJ7KIOdNjO2MOXjbpTLeh5dlb2nSoKMIGXDYN2ukdmd541yKkniNSvhtGY8rPawK7pp37A/Sd6rCGFFXY+7tKbfyFhEUBQ13ZqlTCFtRCVVlA= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR11MB2882.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(366004)(39860400002)(396003)(376002)(346002)(8936002)(478600001)(8676002)(186003)(6506007)(5660300002)(76116006)(26005)(66556008)(83380400001)(66946007)(7696005)(66446008)(55016002)(316002)(86362001)(66476007)(64756008)(30864003)(2906002)(33656002)(9686003)(110136005)(52536014)(71200400001)(21314003)(2004002)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: vx3zPVNfd/LSEEjDpdJe4cVi9oWPeYgs23VxH6TBKdacUjUEhuIWNYb5v5gASuI+1tcNQZuK2bMfncG0WU0Q/aWYCeQiXAX/ccBsQlaIIDOsKknGeNYAgykd/8LF0zjOomMaiz6HBKEx4N0F/qE5zBFRvQudQo7LL0SZPRMUjtBNaTeHyhAbY5CMAv51yJRJwtuIBZfBW7wSxB0qxWlfrJo3hQpxQ6j6ww5X0oXpOtfkkuf4QnJ/qy09JdIgAGxI9DUlfOFJJj2oQ01neMkhjLxxd8is0sN4AOLLvazz0alTCxIjTpZEp5HgIRhB+hyr+QdzpRIt5CSNjcvFWsh21LTfjgo+pcIslym/eTITA33WplKUr2A2hGn+qvbK6DZw14yiwKETKUsIXyFaV9sWt1SDjnIJzLot58X5UZ301eczrSLvcP09ZSqNibz2v3ifaVLpuBCQdvVxfsqMbzTaY2zxPtkxfIgxg5hqpkNboZBOg0xbGWNnwFl5auSL01g7yC3uIsc8gcqCAtHVRbY+fhzs5Fhj6lqPLxxqoKxn3IU5Obd8x9jgwVv5s5Brypx/LCf65HRI65ecVJPIlHj/BlFJehN0VDW7v0Cy+WRXmvXJb1unZsQweQTwKKBmglW20HTvHhTAl9wBezhe8d2Slw== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL0PR11MB2882.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a76df6a4-59b4-4027-269e-08d85030afba X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2020 17:42:10.8560 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PjN5R4WsXgV4/SJWgLajKEWyuIJhuCf5DJTDcGczXZKcPEJ3WZk7h3qwyktGPPD1rNDrvTsEPnA1wO1fAzoM5PrLdtuSzDiusR+r5DxeNWY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4351 X-OriginatorOrg: intel.com Content-Transfer-Encoding: base64 X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Sep 2020 17:42:26 -0000 T24gU2VwdGVtYmVyIDIsIDIwMjAgNzo1OSBQTSwgS2FtaWwgUnl0YXJvd3NraSB3cm90ZToNCj4g SW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eTogY3JlYXRlX2luZmVyaW9yLA0K PiBwb3N0X2NyZWF0ZV9pbmZlcmlvciwgYXR0YWNoLCBraWxsLCBkZXRhY2gsIG1vdXJuLCBqb2lu LCB0aHJlYWRfYWxpdmUsDQo+IHJlc3VtZSwgd2FpdCwgZmV0Y2hfcmVnaXN0ZXJzLCBzdG9yZV9y ZWdpc3RlcnMsIHJlYWRfbWVtb3J5LCB3cml0ZV9tZW1vcnksDQo+IHJlcXVlc3RfaW50ZXJydXB0 LCBzdXBwb3J0c19yZWFkX2F1eHYsIHJlYWRfYXV4diwNCj4gc3VwcG9ydHNfaGFyZHdhcmVfc2lu Z2xlX3N0ZXAsIHN3X2JyZWFrcG9pbnRfZnJvbV9raW5kLA0KPiBzdXBwb3J0c196X3BvaW50X3R5 cGUsIGluc2VydF9wb2ludCwgcmVtb3ZlX3BvaW50LA0KPiBzdG9wcGVkX2J5X3N3X2JyZWFrcG9p bnQsIHN1cHBvcnRzX3F4ZmVyX3NpZ2luZm8sIHF4ZmVyX3NpZ2luZm8sDQo+IHN1cHBvcnRzX3N0 b3BwZWRfYnlfc3dfYnJlYWtwb2ludCwgc3VwcG9ydHNfbm9uX3N0b3AsDQo+IHN1cHBvcnRzX211 bHRpX3Byb2Nlc3MsIHN1cHBvcnRzX2ZvcmtfZXZlbnRzLCBzdXBwb3J0c192Zm9ya19ldmVudHMs DQo+IHN1cHBvcnRzX2V4ZWNfZXZlbnRzLCBzdXBwb3J0c19kaXNhYmxlX3JhbmRvbWl6YXRpb24s DQo+IHN1cHBvcnRzX3F4ZmVyX2xpYnJhcmllc19zdnI0LCBxeGZlcl9saWJyYXJpZXNfc3ZyNCwN Cj4gc3VwcG9ydHNfcGlkX3RvX2V4ZWNfZmlsZSwgcGlkX3RvX2V4ZWNfZmlsZSwgdGhyZWFkX25h bWUsDQo+IHN1cHBvcnRzX2NhdGNoX3N5c2NhbGwuDQo+IA0KPiBUaGUgb25seSBDUFUgYXJjaGl0 ZWN0dXJlIHN1cHBvcnRlZDogeDg2XzY0Lg0KPiANCj4gSW1wbGVtZW50IG9ubHkgc3VwcG9ydCBm b3IgaGFyZHdhcmUgYXNzaXN0ZWQgc2luZ2xlIHN0ZXAgYW5kDQo+IHNvZnR3YXJlIGJyZWFrcG9p bnQuDQo+IA0KPiBJbXBsZW1lbnQgc3VwcG9ydCBvbmx5IGZvciByZWd1bGFyIFg4NiByZWdpc3Rl cnMsIHRodXMgbm8gRlBVLg0KPiANCj4gZ2RiL0NoYW5nZUxvZzoNCg0KVGhpcyBzaG91bGQgYmUg Z2Ric2VydmVyL0NoYW5nZUxvZy4NCg0KPiANCj4gICAgICAgICogbmV0YnNkLWxvdy5jYzogQWRk Lg0KPiAgICAgICAgKiBuZXRic2QtbG93Lmg6IExpa2V3aXNlLg0KPiAgICAgICAgKiBuZXRic2Qt eDg2XzY0LWxvdy5jYzogTGlrZXdpc2UuDQo+ICAgICAgICAqIE1ha2VmaWxlLmluIChTRklMRVMp OiBSZWdpc3RlciAibmV0YnNkLWxvdy5jYyIsICJuZXRic2QtbG93LmgiLA0KPiAgICAgICAgIm5l dGJzZC14ODZfNjQtbG93LmNjIi4NCj4gICAgICAgICogY29uZmlndXJlLnNydjogQWRkIHg4Nl82 NC0qLW5ldGJzZCouDQo+IC0tLQ0KPiAgZ2Ric2VydmVyL0NoYW5nZUxvZyAgICAgICAgICAgIHwg ICAgOSArDQo+ICBnZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gICAgICAgICAgfCAgICAzICsNCj4gIGdk YnNlcnZlci9jb25maWd1cmUuc3J2ICAgICAgICB8ICAgIDcgKw0KPiAgZ2Ric2VydmVyL25ldGJz ZC1sb3cuY2MgICAgICAgIHwgMTM1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiAgZ2Ric2VydmVyL25ldGJzZC1sb3cuaCAgICAgICAgIHwgIDE1NyArKysrDQo+ICBnZGJzZXJ2 ZXIvbmV0YnNkLXg4Nl82NC1sb3cuY2MgfCAgMjUwICsrKysrKw0KPiAgNiBmaWxlcyBjaGFuZ2Vk LCAxNzc4IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGJzZXJ2ZXIvbmV0 YnNkLWxvdy5jYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYnNlcnZlci9uZXRic2QtbG93LmgN Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGJzZXJ2ZXIvbmV0YnNkLXg4Nl82NC1sb3cuY2MNCj4g DQo+IGRpZmYgLS1naXQgYS9nZGJzZXJ2ZXIvQ2hhbmdlTG9nIGIvZ2Ric2VydmVyL0NoYW5nZUxv Zw0KPiBpbmRleCBlNDM3NDkzYjU2ZC4uYzA3MzJkMWEyOGEgMTAwNjQ0DQo+IC0tLSBhL2dkYnNl cnZlci9DaGFuZ2VMb2cNCj4gKysrIGIvZ2Ric2VydmVyL0NoYW5nZUxvZw0KPiBAQCAtMSwzICsx LDEyIEBADQo+ICsyMDIwLTA4LTEzICBLYW1pbCBSeXRhcm93c2tpICA8bjU0QGdteC5jb20+DQo+ ICsNCj4gKwkqIG5ldGJzZC1sb3cuY2M6IEFkZC4NCj4gKwkqIG5ldGJzZC1sb3cuaDogTGlrZXdp c2UuDQo+ICsJKiBuZXRic2QteDg2XzY0LWxvdy5jYzogTGlrZXdpc2UuDQo+ICsJKiBNYWtlZmls ZS5pbiAoU0ZJTEVTKTogUmVnaXN0ZXIgIm5ldGJzZC1sb3cuY2MiLCAibmV0YnNkLWxvdy5oIiwN Cj4gKwkibmV0YnNkLXg4Nl82NC1sb3cuY2MiLg0KPiArCSogY29uZmlndXJlLnNydjogQWRkIHg4 Nl82NC0qLW5ldGJzZCouDQo+ICsNCj4gIDIwMjAtMDgtMTMgIFNpbW9uIE1hcmNoaSAgPHNpbW9u Lm1hcmNoaUBwb2x5bXRsLmNhPg0KPiANCj4gIAkqIHNlcnZlci5jYyAoY2FwdHVyZWRfbWFpbik6 IEFjY2VwdCBtdWx0aXBsZSBgLS1zZWxmdGVzdD1gDQo+IGRpZmYgLS1naXQgYS9nZGJzZXJ2ZXIv TWFrZWZpbGUuaW4gYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4NCj4gaW5kZXggOWQ3Njg3YmU1MzQu LjFkNTk3YjE0NTIzIDEwMDY0NA0KPiAtLS0gYS9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4NCj4gKysr IGIvZ2Ric2VydmVyL01ha2VmaWxlLmluDQo+IEBAIC0xOTMsNiArMTkzLDkgQEAgU0ZJTEVTID0g XA0KPiAgCSQoc3JjZGlyKS9saW51eC14ODYtbG93LmNjIFwNCj4gIAkkKHNyY2RpcikvbGludXgt eHRlbnNhLWxvdy5jYyBcDQo+ICAJJChzcmNkaXIpL21lbS1icmVhay5jYyBcDQo+ICsJJChzcmNk aXIpL25ldGJzZC1sb3cuY2MgXA0KPiArCSQoc3JjZGlyKS9uZXRic2QtbG93LmggXA0KPiArCSQo c3JjZGlyKS9uZXRic2QteDg2XzY0LWxvdy5jYyBcDQo+ICAJJChzcmNkaXIpL3Byb2Mtc2Vydmlj ZS5jYyBcDQo+ICAJJChzcmNkaXIpL3Byb2Mtc2VydmljZS5saXN0IFwNCj4gIAkkKHNyY2Rpcikv cmVnY2FjaGUuY2MgXA0KPiBkaWZmIC0tZ2l0IGEvZ2Ric2VydmVyL2NvbmZpZ3VyZS5zcnYgYi9n ZGJzZXJ2ZXIvY29uZmlndXJlLnNydg0KPiBpbmRleCA1ZTMzYmQ5YzU0ZC4uMTJmOWQ0MTBiN2Mg MTAwNjQ0DQo+IC0tLSBhL2dkYnNlcnZlci9jb25maWd1cmUuc3J2DQo+ICsrKyBiL2dkYnNlcnZl ci9jb25maWd1cmUuc3J2DQo+IEBAIC0zNDksNiArMzQ5LDEzIEBAIGNhc2UgIiR7Z2Ric2VydmVy X2hvc3R9IiBpbg0KPiAgCQkJc3J2X3RndG9iaj0iJHtzcnZfdGd0b2JqfSBuYXQvd2luZG93cy1u YXQubyINCj4gIAkJCXNydl90Z3RvYmo9IiR7c3J2X3RndG9ian0gYXJjaC9hbWQ2NC5vIGFyY2gv aTM4Ni5vIg0KPiAgCQkJOzsNCj4gKyAgeDg2XzY0LSotbmV0YnNkKikJc3J2X3JlZ29iaj0iIg0K PiArCQkJc3J2X3RndG9iaj0ibmV0YnNkLWxvdy5vIG5ldGJzZC14ODZfNjQtbG93Lm8gZm9yay1j aGlsZC5vIg0KPiArCQkJc3J2X3RndG9iaj0iJHtzcnZfdGd0b2JqfSBuYXQvZm9yay1pbmZlcmlv ci5vIg0KPiArCQkJc3J2X3RndG9iaj0iJHtzcnZfdGd0b2JqfSBuYXQvbmV0YnNkLW5hdC5vIg0K PiArCQkJc3J2X3RndG9iaj0iJHtzcnZfdGd0b2JqfSBhcmNoL2FtZDY0Lm8iDQo+ICsJCQlzcnZf bmV0YnNkPXllcw0KDQpJcyBgc3J2X25ldGJzZGAgdXNlZCBhbnl3aGVyZT8NCg0KPiArCQkJOzsN Cj4gDQo+ICAgIHh0ZW5zYSotKi1saW51eCopCXNydl9yZWdvYmo9cmVnLXh0ZW5zYS5vDQo+ICAJ CQlzcnZfdGd0b2JqPSIkc3J2X2xpbnV4X29iaiBsaW51eC14dGVuc2EtbG93Lm8iDQo+IGRpZmYg LS1naXQgYS9nZGJzZXJ2ZXIvbmV0YnNkLWxvdy5jYyBiL2dkYnNlcnZlci9uZXRic2QtbG93LmNj DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwLi5kYjk1MzFjNjZk Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2dkYnNlcnZlci9uZXRic2QtbG93LmNjDQo+IEBA IC0wLDAgKzEsMTM1MiBAQA0KPiArLyogQ29weXJpZ2h0IChDKSAyMDIwIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLg0KPiArDQo+ICsgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQo+ ICsNCj4gKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+ICsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KPiArICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IN Cj4gKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ICsNCj4gKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLA0KPiArICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCj4gKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsNCj4gKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+ICsgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovDQo+ICsNCj4gKyNpbmNsdWRlICJzZXJ2ZXIuaCINCj4gKyNpbmNsdWRlICJ0 YXJnZXQuaCINCj4gKyNpbmNsdWRlICJuZXRic2QtbG93LmgiDQo+ICsjaW5jbHVkZSAibmF0L25l dGJzZC1uYXQuaCINCj4gKw0KPiArI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KPiArI2luY2x1ZGUg PHN5cy90eXBlcy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPg0KPiArI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGxpbWl0cy5oPg0KPiArI2luY2x1 ZGUgPHVuaXN0ZC5oPg0KPiArI2luY2x1ZGUgPHNpZ25hbC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8 ZWxmLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4NCj4gKw0KPiArI2luY2x1ZGUg ImdkYnN1cHBvcnQvZWludHIuaCINCj4gKyNpbmNsdWRlICJnZGJzdXBwb3J0L2dkYl93YWl0Lmgi DQo+ICsjaW5jbHVkZSAiZ2Ric3VwcG9ydC9maWxlc3R1ZmYuaCINCj4gKyNpbmNsdWRlICJnZGJz dXBwb3J0L2NvbW1vbi1pbmZlcmlvci5oIg0KPiArI2luY2x1ZGUgIm5hdC9mb3JrLWluZmVyaW9y LmgiDQo+ICsjaW5jbHVkZSAiaG9zdGlvLmgiDQo+ICsNCj4gK2ludCB1c2luZ190aHJlYWRzID0g MTsNCj4gKw0KPiArY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICpuZXRic2RfdGRlc2M7DQo+ICsN Cj4gKy8qIENhbGwgYWRkX3Byb2Nlc3Mgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycywgYW5kIGlu aXRpYWxpemVzDQoNClRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW1wZXJhdGl2ZSAiQ2FsbCIs ICJpbml0aWFsaXplcyIgY291bGQgcmVhZA0KImluaXRpYWxpemUiLg0KDQo+ICsgICB0aGUgcHJv Y2VzcycgcHJpdmF0ZSBkYXRhLiAgKi8NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBwcm9jZXNzX2lu Zm8gKg0KPiArbmV0YnNkX2FkZF9wcm9jZXNzIChpbnQgcGlkLCBpbnQgYXR0YWNoZWQpDQoNClRo ZXJlIGFyZSB0d28gdXNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBpbiBib3RoIHRoZSByZXR1cm4g dmFsdWUgaXMgaWdub3JlZC4NClRoZSBmdW5jdGlvbiBjb3VsZCBhcyB3ZWxsIGJlIHZvaWQuDQoN Cj4gK3sNCj4gKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGFkZF9wcm9jZXNzIChwaWQs IGF0dGFjaGVkKTsNCj4gKyAgcHJvYy0+dGRlc2MgPSBuZXRic2RfdGRlc2M7DQo+ICsgIHByb2Mt PnByaXYgPSBudWxscHRyOw0KPiArDQo+ICsgIHJldHVybiBwcm9jOw0KPiArfQ0KPiArDQo+ICsv KiBDYWxsYmFjayB1c2VkIGJ5IGZvcmtfaW5mZXJpb3IgdG8gc3RhcnQgdHJhY2luZyB0aGUgaW5m ZXJpb3IuICAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbmV0YnNkX3B0cmFjZV9mdW4gKCkN Cj4gK3sNCj4gKyAgLyogU3dpdGNoIGNoaWxkIHRvIGl0cyBvd24gcHJvY2VzcyBncm91cCBzbyB0 aGF0IHNpZ25hbHMgd29uJ3QNCj4gKyAgICAgZGlyZWN0bHkgYWZmZWN0IEdEQnNlcnZlci4gKi8N Cj4gKyAgaWYgKHNldHBnaWQgKDAsIDApIDwgMCkNCj4gKyAgICB0cmFjZV9zdGFydF9lcnJvcl93 aXRoX25hbWUgKCgic2V0cGdpZCIpKTsNCj4gKw0KPiArICBpZiAocHRyYWNlIChQVF9UUkFDRV9N RSwgMCwgbnVsbHB0ciwgMCkgPCAwKQ0KPiArICAgIHRyYWNlX3N0YXJ0X2Vycm9yX3dpdGhfbmFt ZSAoKCJwdHJhY2UiKSk7DQo+ICsNCj4gKyAgLyogSWYgR0RCc2VydmVyIGlzIGNvbm5lY3RlZCB0 byBnZGIgdmlhIHN0ZGlvLCByZWRpcmVjdCB0aGUgaW5mZXJpb3Incw0KPiArICAgICBzdGRvdXQg dG8gc3RkZXJyIHNvIHRoYXQgaW5mZXJpb3IgaS9vIGRvZXNuJ3QgY29ycnVwdCB0aGUgY29ubmVj dGlvbi4NCj4gKyAgICAgQWxzbywgcmVkaXJlY3Qgc3RkaW4gdG8gL2Rldi9udWxsLiAgKi8NCj4g KyAgaWYgKHJlbW90ZV9jb25uZWN0aW9uX2lzX3N0ZGlvICgpKQ0KPiArICAgIHsNCj4gKyAgICAg IGlmIChjbG9zZSAoMCkgPCAwKQ0KPiArCXRyYWNlX3N0YXJ0X2Vycm9yX3dpdGhfbmFtZSAoKCJj bG9zZSIpKTsNCj4gKyAgICAgIGlmIChvcGVuICgiL2Rldi9udWxsIiwgT19SRE9OTFkpIDwgMCkN Cj4gKwl0cmFjZV9zdGFydF9lcnJvcl93aXRoX25hbWUgKCgib3BlbiIpKTsNCj4gKyAgICAgIGlm IChkdXAyICgyLCAxKSA8IDApDQo+ICsJdHJhY2Vfc3RhcnRfZXJyb3Jfd2l0aF9uYW1lICgoImR1 cDIiKSk7DQo+ICsgICAgICBpZiAod3JpdGUgKDIsICJzdGRpbi9zdGRvdXQgcmVkaXJlY3RlZFxu IiwNCj4gKwkJIHNpemVvZiAoInN0ZGluL3N0ZG91dCByZWRpcmVjdGVkXG4iKSAtIDEpIDwgMCkN Cj4gKwl7DQo+ICsJICAvKiBFcnJvcnMgaWdub3JlZC4gICovOw0KDQpBbnkgcGFydGljdWxhciBy ZWFzb24gZm9yIHRoZSBleHBsaWNpdCAnOyc/DQoNCj4gKwl9DQo+ICsgICAgfQ0KPiArfQ0KPiAr DQo+ICsvKiBSZWdpc3RlciB0aHJlYWRzIGluIHRoZSBwcm9jZXNzIHNwZWNpZmllZCBieSBQSUQu ICAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbmV0YnNkX2FkZF90aHJlYWRzIChwaWRfdCBw aWQpDQo+ICt7DQo+ICsgIGF1dG8gZm4NCj4gKyAgICA9IFtdIChwdGlkX3QgcHRpZCkNCj4gKyAg ICAgIHsNCj4gKwlhZGRfdGhyZWFkIChwdGlkLCBudWxscHRyKTsNCj4gKyAgICAgIH07DQo+ICsN Cj4gKyAgbmV0YnNkX25hdDo6bGlzdF90aHJlYWRzIChwaWQsIGZuKTsNCg0KSU1ITywgdGhlIG5h bWUgImxpc3RfdGhyZWFkcyIgZ2l2ZXMgdGhlIGltcHJlc3Npb24gdGhhdCBpdCBvbmx5IGxpc3Rz IHRoZSB0aHJlYWRzDQphbmQgaXMgc2lkZS1lZmZlY3QgZnJlZS4gIE1heWJlIHVzZSBzb21ldGhp bmcgbGlrZSAiZm9yX2VhY2hfdGhyZWFkIiwgYXMgaW4gZ2RidGhyZWFkLmg/DQoNCj4gK30NCj4g Kw0KPiArLyogSW1wbGVtZW50IHRoZSBjcmVhdGVfaW5mZXJpb3IgbWV0aG9kIG9mIHRoZSB0YXJn ZXRfb3BzIHZlY3Rvci4gICovDQo+ICsNCj4gK2ludA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0 OjpjcmVhdGVfaW5mZXJpb3IgKGNvbnN0IGNoYXIgKnByb2dyYW0sDQo+ICsJCQkJCWNvbnN0IHN0 ZDo6dmVjdG9yPGNoYXIgKj4gJnByb2dyYW1fYXJncykNCj4gK3sNCj4gKyAgc3RkOjpzdHJpbmcg c3RyX3Byb2dyYW1fYXJncyA9IGNvbnN0cnVjdF9pbmZlcmlvcl9hcmd1bWVudHMgKHByb2dyYW1f YXJncyk7DQo+ICsNCj4gKyAgcGlkX3QgcGlkID0gZm9ya19pbmZlcmlvciAocHJvZ3JhbSwgc3Ry X3Byb2dyYW1fYXJncy5jX3N0ciAoKSwNCj4gKwkJCSAgICAgZ2V0X2Vudmlyb24gKCktPmVudnAg KCksIG5ldGJzZF9wdHJhY2VfZnVuLA0KPiArCQkJICAgICBudWxscHRyLCBudWxscHRyLCBudWxs cHRyLCBudWxscHRyKTsNCj4gKw0KPiArICBuZXRic2RfYWRkX3Byb2Nlc3MgKHBpZCwgMCk7DQo+ ICsNCj4gKyAgcG9zdF9mb3JrX2luZmVyaW9yIChwaWQsIHByb2dyYW0pOw0KPiArDQo+ICsgIHJl dHVybiBwaWQ7DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVudCB0aGUgcG9zdF9jcmVhdGVfaW5m ZXJpb3IgdGFyZ2V0X29wcyBtZXRob2QuICAqLw0KPiArDQo+ICt2b2lkDQo+ICtuZXRic2RfcHJv Y2Vzc190YXJnZXQ6OnBvc3RfY3JlYXRlX2luZmVyaW9yICgpDQo+ICt7DQo+ICsgIHBpZF90IHBp ZCA9IGN1cnJlbnRfcHJvY2VzcyAoKS0+cGlkOw0KPiArICBuZXRic2RfbmF0OjplbmFibGVfcHJv Y19ldmVudHMgKHBpZCk7DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVudCB0aGUgYXR0YWNoIHRh cmdldF9vcHMgbWV0aG9kLiAgKi8NCj4gKw0KPiAraW50DQo+ICtuZXRic2RfcHJvY2Vzc190YXJn ZXQ6OmF0dGFjaCAodW5zaWduZWQgbG9uZyBwaWQpDQo+ICt7DQo+ICsNCj4gKyAgaWYgKHB0cmFj ZSAoUFRfQVRUQUNILCBwaWQsIG51bGxwdHIsIDApICE9IDApDQo+ICsgICAgZXJyb3IgKCJDYW5u b3QgYXR0YWNoIHRvIHByb2Nlc3MgJWx1OiAlcyAoJWQpXG4iLCBwaWQsDQo+ICsJICAgIHNhZmVf c3RyZXJyb3IgKGVycm5vKSwgZXJybm8pOw0KPiArDQo+ICsgIG5ldGJzZF9hZGRfcHJvY2VzcyAo cGlkLCAxKTsNCj4gKyAgbmV0YnNkX25hdDo6ZW5hYmxlX3Byb2NfZXZlbnRzIChwaWQpOw0KPiAr ICBuZXRic2RfYWRkX3RocmVhZHMgKHBpZCk7DQo+ICsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gKy8qIFJldHVybnMgdHJ1ZSBpZiBHREIgaXMgaW50ZXJlc3RlZCBpbiBhbnkgY2hpbGQg c3lzY2FsbHMuICAqLw0KPiArDQo+ICtzdGF0aWMgYm9vbA0KPiArZ2RiX2NhdGNoaW5nX3N5c2Nh bGxzX3AgKHBpZF90IHBpZCkNCj4gK3sNCj4gKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9 IGZpbmRfcHJvY2Vzc19waWQgKHBpZCk7DQo+ICsgIHJldHVybiAhcHJvYy0+c3lzY2FsbHNfdG9f Y2F0Y2guZW1wdHkgKCk7DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVudCB0aGUgcmVzdW1lIHRh cmdldF9vcHMgbWV0aG9kLiAgKi8NCj4gKw0KPiArdm9pZA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFy Z2V0OjpyZXN1bWUgKHN0cnVjdCB0aHJlYWRfcmVzdW1lICpyZXN1bWVfaW5mbywgc2l6ZV90IG4p DQo+ICt7DQo+ICsgIHB0aWRfdCByZXN1bWVfcHRpZCA9IHJlc3VtZV9pbmZvWzBdLnRocmVhZDsN Cj4gKyAgY29uc3QgaW50IHNpZ25hbCA9IHJlc3VtZV9pbmZvWzBdLnNpZzsNCj4gKyAgY29uc3Qg Ym9vbCBzdGVwID0gcmVzdW1lX2luZm9bMF0ua2luZCA9PSByZXN1bWVfc3RlcDsNCj4gKw0KPiAr ICBpZiAocmVzdW1lX3B0aWQgPT0gbWludXNfb25lX3B0aWQpDQo+ICsgICAgcmVzdW1lX3B0aWQg PSBwdGlkX29mIChjdXJyZW50X3RocmVhZCk7DQo+ICsNCj4gKyAgY29uc3QgcGlkX3QgcGlkID0g cmVzdW1lX3B0aWQucGlkICgpOw0KPiArICBjb25zdCBsd3BpZF90IGx3cCA9IHJlc3VtZV9wdGlk Lmx3cCAoKTsNCj4gKyAgcmVnY2FjaGVfaW52YWxpZGF0ZV9waWQgKHBpZCk7DQo+ICsNCj4gKyAg YXV0byBmbg0KPiArICAgID0gWyZdIChwdGlkX3QgcHRpZCkNCj4gKyAgICAgIHsNCj4gKwlpZiAo c3RlcCkNCj4gKwkgIHsNCj4gKwkgICAgaWYgKHB0aWQubHdwICgpID09IGx3cCB8fCBuICE9IDEp DQo+ICsJICAgICAgew0KPiArCQlpZiAocHRyYWNlIChQVF9TRVRTVEVQLCBwaWQsIE5VTEwsIHB0 aWQubHdwICgpKSA9PSAtMSkNCj4gKwkJICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsN Cj4gKwkJaWYgKHB0cmFjZSAoUFRfUkVTVU1FLCBwaWQsIE5VTEwsIHB0aWQubHdwICgpKSA9PSAt MSkNCj4gKwkJICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsNCj4gKwkgICAgICB9DQo+ ICsJICAgIGVsc2UNCj4gKwkgICAgICB7DQo+ICsJCWlmIChwdHJhY2UgKFBUX0NMRUFSU1RFUCwg cGlkLCBOVUxMLCBwdGlkLmx3cCAoKSkgPT0gLTEpDQo+ICsJCSAgcGVycm9yX3dpdGhfbmFtZSAo KCJwdHJhY2UiKSk7DQo+ICsJCWlmIChwdHJhY2UgKFBUX1NVU1BFTkQsIHBpZCwgTlVMTCwgcHRp ZC5sd3AgKCkpID09IC0xKQ0KPiArCQkgIHBlcnJvcl93aXRoX25hbWUgKCgicHRyYWNlIikpOw0K PiArCSAgICAgIH0NCj4gKwkgIH0NCj4gKwllbHNlDQo+ICsJICB7DQo+ICsJICAgIGlmIChwdHJh Y2UgKFBUX0NMRUFSU1RFUCwgcGlkLCBOVUxMLCBwdGlkLmx3cCAoKSkgPT0gLTEpDQo+ICsJICAg ICAgcGVycm9yX3dpdGhfbmFtZSAoKCJwdHJhY2UiKSk7DQo+ICsJICAgIGlmIChwdHJhY2UgKFBU X1JFU1VNRSwgcGlkLCBOVUxMLCBwdGlkLmx3cCAoKSkgPT0gLTEpDQo+ICsJICAgICAgcGVycm9y X3dpdGhfbmFtZSAoKCJwdHJhY2UiKSk7DQo+ICsJICB9DQo+ICsgICAgICB9Ow0KPiArDQo+ICsg IG5ldGJzZF9uYXQ6Omxpc3RfdGhyZWFkcyAocGlkLCBmbik7DQo+ICsNCj4gKyAgaW50IHJlcXVl c3QgPSBnZGJfY2F0Y2hpbmdfc3lzY2FsbHNfcCAocGlkKSA/IFBUX0NPTlRJTlVFIDogUFRfU1lT Q0FMTDsNCj4gKw0KPiArICBlcnJubyA9IDA7DQo+ICsgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAo dm9pZCAqKTEsIHNpZ25hbCk7DQo+ICsgIGlmIChlcnJubykNCj4gKyAgICBwZXJyb3Jfd2l0aF9u YW1lICgoInB0cmFjZSIpKTsNCj4gK30NCj4gKw0KPiArLyogUmV0dXJucyB0cnVlIGlmIEdEQiBp cyBpbnRlcmVzdGVkIGluIHRoZSByZXBvcnRlZCBTWVNOTyBzeXNjYWxsLiAgKi8NCj4gKw0KPiAr c3RhdGljIGJvb2wNCj4gK25ldGJzZF9jYXRjaF90aGlzX3N5c2NhbGwgKGludCBzeXNubykNCj4g K3sNCj4gKyAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcyAoKTsN Cj4gKw0KPiArICBpZiAocHJvYy0+c3lzY2FsbHNfdG9fY2F0Y2guZW1wdHkgKCkpDQo+ICsgICAg cmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIGlmIChwcm9jLT5zeXNjYWxsc190b19jYXRjaFswXSA9 PSBBTllfU1lTQ0FMTCkNCj4gKyAgICByZXR1cm4gdHJ1ZTsNCj4gKw0KPiArICBmb3IgKGludCBp dGVyIDogcHJvYy0+c3lzY2FsbHNfdG9fY2F0Y2gpDQo+ICsgICAgaWYgKGl0ZXIgPT0gc3lzbm8p DQo+ICsgICAgICByZXR1cm4gdHJ1ZTsNCj4gKw0KPiArICByZXR1cm4gZmFsc2U7DQo+ICt9DQo+ ICsNCj4gKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hpbGRfd2FpdCBhbmQgdGhlIGRlcml2YXRp dmVzIG9mIGNoaWxkX3dhaXQuDQo+ICsgICBIT1NUU1RBVFVTIGlzIHRoZSB3YWl0c3RhdHVzIGZy b20gd2FpdCgpIG9yIHRoZSBlcXVpdmFsZW50OyBzdG9yZSBvdXINCj4gKyAgIHRyYW5zbGF0aW9u IG9mIHRoYXQgaW4gT1VSU1RBVFVTLiAgKi8NCg0KQSBibGFuayBsaW5lIGhlcmUgYmV0d2VlbiB0 aGUgY29tbWVudCBhbmQgdGhlIGZ1bmN0aW9uIGhlYWRlci4NCg0KPiArc3RhdGljIHZvaWQNCj4g K25ldGJzZF9zdG9yZV93YWl0c3RhdHVzIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0 YXR1cywgaW50IGhvc3RzdGF0dXMpDQo+ICt7DQo+ICsgIGlmIChXSUZFWElURUQgKGhvc3RzdGF0 dXMpKQ0KPiArICAgIHsNCj4gKyAgICAgIG91cnN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lO RF9FWElURUQ7DQo+ICsgICAgICBvdXJzdGF0dXMtPnZhbHVlLmludGVnZXIgPSBXRVhJVFNUQVRV UyAoaG9zdHN0YXR1cyk7DQo+ICsgICAgfQ0KPiArICBlbHNlIGlmICghV0lGU1RPUFBFRCAoaG9z dHN0YXR1cykpDQo+ICsgICAgew0KPiArICAgICAgb3Vyc3RhdHVzLT5raW5kID0gVEFSR0VUX1dB SVRLSU5EX1NJR05BTExFRDsNCj4gKyAgICAgIG91cnN0YXR1cy0+dmFsdWUuc2lnID0gZ2RiX3Np Z25hbF9mcm9tX2hvc3QgKFdURVJNU0lHIChob3N0c3RhdHVzKSk7DQo+ICsgICAgfQ0KPiArICBl bHNlDQo+ICsgICAgew0KPiArICAgICAgb3Vyc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5E X1NUT1BQRUQ7DQo+ICsgICAgICBvdXJzdGF0dXMtPnZhbHVlLnNpZyA9IGdkYl9zaWduYWxfZnJv bV9ob3N0IChXU1RPUFNJRyAoaG9zdHN0YXR1cykpOw0KPiArICAgIH0NCj4gK30NCj4gKw0KPiAr LyogSW1wbGVtZW50IGEgc2FmZSB3cmFwcGVyIGFyb3VuZCB3YWl0cGlkKCkuICAqLw0KPiArDQo+ ICtzdGF0aWMgcGlkX3QNCj4gK25ldGJzZF93YWl0cGlkIChwdGlkX3QgcHRpZCwgc3RydWN0IHRh cmdldF93YWl0c3RhdHVzICpvdXJzdGF0dXMsIGludCBvcHRpb25zKQ0KPiArew0KPiArICBpbnQg c3RhdHVzOw0KPiArDQo+ICsgIHBpZF90IHBpZCA9IGdkYjo6aGFuZGxlX2VpbnRyICg6OndhaXRw aWQsIHB0aWQucGlkICgpLCAmc3RhdHVzLCBvcHRpb25zKTsNCj4gKw0KPiArICBpZiAocGlkID09 IC0xKQ0KPiArICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNoaWxkIHByb2Nlc3MgdW5leHBlY3Rl ZGx5IG1pc3NpbmciKSk7DQo+ICsNCj4gKyAgbmV0YnNkX3N0b3JlX3dhaXRzdGF0dXMgKG91cnN0 YXR1cywgc3RhdHVzKTsNCj4gKyAgcmV0dXJuIHBpZDsNCj4gK30NCj4gKw0KPiArDQo+ICsvKiBJ bXBsZW1lbnQgdGhlIHdhaXQgdGFyZ2V0X29wcyBtZXRob2QuDQo+ICsNCj4gKyAgIFdhaXQgZm9y IHRoZSBjaGlsZCBzcGVjaWZpZWQgYnkgUFRJRCB0byBkbyBzb21ldGhpbmcuICBSZXR1cm4gdGhl DQo+ICsgICBwcm9jZXNzIElEIG9mIHRoZSBjaGlsZCwgb3IgTUlOVVNfT05FX1BUSUQgaW4gY2Fz ZSBvZiBlcnJvcjsgc3RvcmUNCj4gKyAgIHRoZSBzdGF0dXMgaW4gKk9VUlNUQVRVUy4gICovDQo+ ICsNCj4gK3N0YXRpYyBwdGlkX3QNCj4gK25ldGJzZF93YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0 IHRhcmdldF93YWl0c3RhdHVzICpvdXJzdGF0dXMsDQo+ICsJICAgICBpbnQgdGFyZ2V0X29wdGlv bnMpDQo+ICt7DQo+ICsgIHBpZF90IHBpZCA9IG5ldGJzZF93YWl0cGlkIChwdGlkLCBvdXJzdGF0 dXMsIHRhcmdldF9vcHRpb25zKTsNCj4gKyAgcHRpZF90IHdwdGlkID0gcHRpZF90IChwaWQpOw0K PiArDQo+ICsgIGlmIChwaWQgPT0gMCkNCj4gKyAgICB7DQo+ICsgICAgICBnZGJfYXNzZXJ0ICh0 YXJnZXRfb3B0aW9ucyAmIFRBUkdFVF9XTk9IQU5HKTsNCj4gKyAgICAgIG91cnN0YXR1cy0+a2lu ZCA9IFRBUkdFVF9XQUlUS0lORF9JR05PUkU7DQo+ICsgICAgICByZXR1cm4gbnVsbF9wdGlkOw0K PiArICAgIH0NCj4gKw0KPiArICBnZGJfYXNzZXJ0IChwaWQgIT0gLTEpOw0KPiArDQo+ICsgIC8q IElmIHRoZSBjaGlsZCBzdG9wcGVkLCBrZWVwIGludmVzdGlnYXRpbmcgaXRzIHN0YXR1cy4gICov DQo+ICsgIGlmIChvdXJzdGF0dXMtPmtpbmQgIT0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQpDQo+ ICsgICAgcmV0dXJuIHdwdGlkOw0KPiArDQo+ICsgIC8qIEV4dHJhY3QgdGhlIGV2ZW50IGFuZCB0 aHJlYWQgdGhhdCByZWNlaXZlZCBhIHNpZ25hbC4gICovDQo+ICsgIHB0cmFjZV9zaWdpbmZvX3Qg cHNpOw0KPiArICBpZiAocHRyYWNlIChQVF9HRVRfU0lHSU5GTywgcGlkLCAmcHNpLCBzaXplb2Yg KHBzaSkpID09IC0xKQ0KPiArICAgIHBlcnJvcl93aXRoX25hbWUgKCgicHRyYWNlIikpOw0KPiAr DQo+ICsgIC8qIFBpY2sgY2hpbGQncyBzaWdpbmZvX3QuICAqLw0KPiArICBzaWdpbmZvX3QgKnNp ID0gJnBzaS5wc2lfc2lnaW5mbzsNCj4gKw0KPiArICBsd3BpZF90IGx3cCA9IHBzaS5wc2lfbHdw aWQ7DQo+ICsNCj4gKyAgaW50IHNpZ25vID0gc2ktPnNpX3NpZ25vOw0KPiArICBjb25zdCBpbnQg Y29kZSA9IHNpLT5zaV9jb2RlOw0KPiArDQo+ICsgIC8qIENvbnN0cnVjdCBQVElEIHdpdGggYSBz cGVjaWZpZWQgdGhyZWFkIHRoYXQgcmVjZWl2ZWQgdGhlIGV2ZW50Lg0KPiArICAgICBJZiBhIHNp Z25hbCB3YXMgdGFyZ2V0ZWQgdG8gdGhlIHdob2xlIHByb2Nlc3MsIGx3cCBpcyAwLiAgKi8NCj4g KyAgd3B0aWQgPSBwdGlkX3QgKHBpZCwgbHdwLCAwKTsNCj4gKw0KPiArICAvKiBCYWlsIG91dCBv biBub24tZGVidWdnZXIgb3JpZW50ZWQgc2lnbmFscy4uICAqLw0KDQpEb3VibGUgcGVyaW9kcy4N Cg0KPiArICBpZiAoc2lnbm8gIT0gU0lHVFJBUCkNCj4gKyAgICByZXR1cm4gd3B0aWQ7DQo+ICsN Cj4gKyAgLyogU3RvcCBleGFtaW5pbmcgbm9uLWRlYnVnZ2VyIG9yaWVudGVkIFNJR1RSQVAgY29k ZXMuICAqLw0KPiArICBpZiAoY29kZSA8PSBTSV9VU0VSIHx8IGNvZGUgPT0gU0lfTk9JTkZPKQ0K PiArICAgIHJldHVybiB3cHRpZDsNCj4gKw0KPiArICAvKiBQcm9jZXNzIHN0YXRlIGZvciB0aHJl YWRpbmcgZXZlbnRzICovDQoNCkVuZCB3aXRoIGRvdC1zcGFjZS1zcGFjZT8NCg0KPiArICBwdHJh Y2Vfc3RhdGVfdCBwc3QgPSB7fTsNCj4gKyAgaWYgKGNvZGUgPT0gVFJBUF9MV1ApDQo+ICsgICAg ew0KPiArICAgICAgaWYgKHB0cmFjZSAoUFRfR0VUX1BST0NFU1NfU1RBVEUsIHBpZCwgJnBzdCwg c2l6ZW9mIChwc3QpKSA9PSAtMSkNCj4gKwlwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsN Cj4gKyAgICB9DQoNCkkgdGhpbmsgYnJhY2VzIGNhbiBiZSByZW1vdmVkLg0KDQo+ICsNCj4gKyAg aWYgKGNvZGUgPT0gVFJBUF9MV1AgJiYgcHN0LnBlX3JlcG9ydF9ldmVudCA9PSBQVFJBQ0VfTFdQ X0VYSVQpDQo+ICsgICAgew0KPiArICAgICAgLyogSWYgR0RCIGF0dGFjaGVzIHRvIGEgbXVsdGkt dGhyZWFkZWQgcHJvY2VzcywgZXhpdGluZw0KPiArCSB0aHJlYWRzIG1pZ2h0IGJlIHNraXBwZWQg ZHVyaW5nIHBvc3RfYXR0YWNoIHRoYXQNCj4gKwkgaGF2ZSBub3QgeWV0IHJlcG9ydGVkIHRoZWly IFBUUkFDRV9MV1BfRVhJVCBldmVudC4NCj4gKwkgSWdub3JlIGV4aXRlZCBldmVudHMgZm9yIGFu IHVua25vd24gTFdQLiAgKi8NCj4gKyAgICAgIHRocmVhZF9pbmZvICp0aHIgPSBmaW5kX3RocmVh ZF9wdGlkICh3cHRpZCk7DQo+ICsgICAgICBpZiAodGhyID09IG51bGxwdHIpDQo+ICsJICBvdXJz dGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfU1BVUklPVVM7DQo+ICsgICAgICBlbHNlDQo+ ICsJew0KPiArCSAgb3Vyc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1RIUkVBRF9FWElU RUQ7DQo+ICsJICAvKiBOZXRCU0QgZG9lcyBub3Qgc3RvcmUgYW4gTFdQIGV4aXQgc3RhdHVzLiAg Ki8NCj4gKwkgIG91cnN0YXR1cy0+dmFsdWUuaW50ZWdlciA9IDA7DQo+ICsNCj4gKwkgIHJlbW92 ZV90aHJlYWQgKHRocik7DQo+ICsJfQ0KPiArICAgICAgcmV0dXJuIHdwdGlkOw0KPiArICAgIH0N Cj4gKw0KPiArICBpZiAoZmluZF90aHJlYWRfcHRpZCAocHRpZF90IChwaWQpKSkNCj4gKyAgICBj dXJyZW50X3RocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQgKHdwdGlkKTsNCj4gKw0KPiArICBpZiAo Y29kZSA9PSBUUkFQX0xXUCAmJiBwc3QucGVfcmVwb3J0X2V2ZW50ID09IFBUUkFDRV9MV1BfQ1JF QVRFKQ0KPiArICAgIHsNCj4gKyAgICAgIC8qIElmIEdEQiBhdHRhY2hlcyB0byBhIG11bHRpLXRo cmVhZGVkIHByb2Nlc3MsIG5ld2Jvcm4NCj4gKwkgdGhyZWFkcyBtaWdodCBiZSBhZGRlZCBieSBu YnNkX2FkZF90aHJlYWRzIHRoYXQgaGF2ZQ0KPiArCSBub3QgeWV0IHJlcG9ydGVkIHRoZWlyIFBU UkFDRV9MV1BfQ1JFQVRFIGV2ZW50LiAgSWdub3JlDQo+ICsJIGJvcm4gZXZlbnRzIGZvciBhbiBh bHJlYWR5LWtub3duIExXUC4gICovDQo+ICsgICAgICBpZiAoZmluZF90aHJlYWRfcHRpZCAod3B0 aWQpKQ0KPiArCSAgb3Vyc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NQVVJJT1VTOw0K PiArICAgICAgZWxzZQ0KPiArCXsNCj4gKwkgIGFkZF90aHJlYWQgKHdwdGlkLCBOVUxMKTsNCj4g KwkgIG91cnN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9USFJFQURfQ1JFQVRFRDsNCj4g Kwl9DQo+ICsgICAgICByZXR1cm4gd3B0aWQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgIGlmIChjb2Rl ID09IFRSQVBfRVhFQykNCj4gKyAgICB7DQo+ICsgICAgICBvdXJzdGF0dXMtPmtpbmQgPSBUQVJH RVRfV0FJVEtJTkRfRVhFQ0Q7DQo+ICsgICAgICBvdXJzdGF0dXMtPnZhbHVlLmV4ZWNkX3BhdGhu YW1lDQo+ICsJPSB4c3RyZHVwIChuZXRic2RfbmF0OjpwaWRfdG9fZXhlY19maWxlIChwaWQpKTsN Cj4gKyAgICAgIHJldHVybiB3cHRpZDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgaWYgKGNvZGUgPT0g VFJBUF9UUkFDRSkNCj4gKyAgICB7DQo+ICsgICAgICByZXR1cm4gd3B0aWQ7DQo+ICsgICAgfQ0K DQpCcmFjZXMgY2FuIGJlIHJlbW92ZWQuDQoNCj4gKw0KPiArICBpZiAoY29kZSA9PSBUUkFQX1ND RSB8fCBjb2RlID09IFRSQVBfU0NYKQ0KPiArICAgIHsNCj4gKyAgICAgIGludCBzeXNudW0gPSBz aS0+c2lfc3lzbnVtOw0KPiArDQo+ICsgICAgICBpZiAoIW5ldGJzZF9jYXRjaF90aGlzX3N5c2Nh bGwoc3lzbnVtKSkNCj4gKwl7DQo+ICsJICAvKiBJZiB0aGUgY29yZSBpc24ndCBpbnRlcmVzdGVk IGluIHRoaXMgZXZlbnQsIGlnbm9yZSBpdC4gICovDQo+ICsJICBvdXJzdGF0dXMtPmtpbmQgPSBU QVJHRVRfV0FJVEtJTkRfU1BVUklPVVM7DQo+ICsJICByZXR1cm4gd3B0aWQ7DQo+ICsJfQ0KPiAr DQo+ICsgICAgICBvdXJzdGF0dXMtPmtpbmQgPQ0KDQpUaGUgYXNzaWdubWVudCBvcGVyYXRvciBz aG91bGQgYmUgb24gdGhlIG5leHQgbGluZS4NCg0KPiArCShjb2RlID09IFRSQVBfU0NFKSA/IFRB UkdFVF9XQUlUS0lORF9TWVNDQUxMX0VOVFJZIDoNCj4gKwlUQVJHRVRfV0FJVEtJTkRfU1lTQ0FM TF9SRVRVUk47DQo+ICsgICAgICBvdXJzdGF0dXMtPnZhbHVlLnN5c2NhbGxfbnVtYmVyID0gc3lz bnVtOw0KPiArICAgICAgcmV0dXJuIHdwdGlkOw0KPiArICAgIH0NCj4gKw0KPiArICBpZiAoY29k ZSA9PSBUUkFQX0JSS1BUKQ0KPiArICAgIHsNCj4gKyNpZmRlZiBQVFJBQ0VfQlJFQUtQT0lOVF9B REoNCj4gKyAgICAgIENPUkVfQUREUiBwYzsNCj4gKyAgICAgIHN0cnVjdCByZWcgcjsNCj4gKyAg ICAgIHB0cmFjZSAoUFRfR0VUUkVHUywgcGlkLCAmciwgcHNpLnBzaV9sd3BpZCk7DQo+ICsgICAg ICBwYyA9IFBUUkFDRV9SRUdfUEMgKCZyKTsNCj4gKyAgICAgIFBUUkFDRV9SRUdfU0VUX1BDICgm ciwgcGMgLSBQVFJBQ0VfQlJFQUtQT0lOVF9BREopOw0KPiArICAgICAgcHRyYWNlIChQVF9TRVRS RUdTLCBwaWQsICZyLCBwc2kucHNpX2x3cGlkKTsNCj4gKyNlbmRpZg0KPiArICAgICAgcmV0dXJu IHdwdGlkOw0KPiArICAgIH0NCj4gKw0KPiArICAvKiBVbmNsYXNzaWZpZWQgU0lHVFJBUCBldmVu dC4gICovDQo+ICsgIG91cnN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9TUFVSSU9VUzsN Cj4gKyAgcmV0dXJuIHdwdGlkOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHdhaXQg dGFyZ2V0X29wcyBtZXRob2QuICAqLw0KPiArDQo+ICtwdGlkX3QNCj4gK25ldGJzZF9wcm9jZXNz X3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqb3Vy c3RhdHVzLA0KPiArCQkJICAgICBpbnQgdGFyZ2V0X29wdGlvbnMpDQo+ICt7DQo+ICsgIHdoaWxl ICh0cnVlKQ0KPiArICAgIHsNCj4gKyAgICAgIHB0aWRfdCB3cHRpZCA9IG5ldGJzZF93YWl0IChw dGlkLCBvdXJzdGF0dXMsIHRhcmdldF9vcHRpb25zKTsNCj4gKw0KPiArICAgICAgLyogUmVnaXN0 ZXIgdGhyZWFkIGluIHRoZSBnZGJjb3JlIGlmIGEgdGhyZWFkIHdhcyBub3QgcmVwb3J0ZWQgZWFy bGllci4NCj4gKwkgVGhpcyBpcyByZXF1aXJlZCBhZnRlciA6OmNyZWF0ZV9pbmZlcmlvciwgd2hl biB0aGUgZ2RiY29yZSBkb2VzIG5vdA0KPiArCSBrbm93IGFib3V0IHRoZSBmaXJzdCBpbnRlcm5h bCB0aHJlYWQuDQo+ICsJIFRoaXMgbWF5IGFsc28gaGFwcGVuIG9uIGF0dGFjaCwgd2hlbiBhbiBl dmVudCBpcyByZWdpc3RlcmVkIG9uIGEgdGhyZWFkDQo+ICsJIHRoYXQgd2FzIG5vdCBmdWxseSBp bml0aWFsaXplZCBkdXJpbmcgdGhlIGF0dGFjaCBzdGFnZS4gKi8NCg0KRG90LXNwYWNlLXNwYWNl Lg0KDQo+ICsgICAgICBpZiAod3B0aWQubHdwICgpICE9IDAgJiYgIWZpbmRfdGhyZWFkX3B0aWQg KHdwdGlkKQ0KPiArCSAgJiYgb3Vyc3RhdHVzLT5raW5kICE9IFRBUkdFVF9XQUlUS0lORF9USFJF QURfRVhJVEVEKQ0KPiArCWFkZF90aHJlYWQgKHdwdGlkLCBudWxscHRyKTsNCj4gKw0KPiArICAg ICAgc3dpdGNoIChvdXJzdGF0dXMtPmtpbmQpDQo+ICsJew0KPiArCWNhc2UgVEFSR0VUX1dBSVRL SU5EX0VYSVRFRDoNCj4gKwljYXNlIFRBUkdFVF9XQUlUS0lORF9TVE9QUEVEOg0KPiArCWNhc2Ug VEFSR0VUX1dBSVRLSU5EX1NJR05BTExFRDoNCj4gKwljYXNlIFRBUkdFVF9XQUlUS0lORF9GT1JL RUQ6DQo+ICsJY2FzZSBUQVJHRVRfV0FJVEtJTkRfVkZPUktFRDoNCj4gKwljYXNlIFRBUkdFVF9X QUlUS0lORF9FWEVDRDoNCj4gKwljYXNlIFRBUkdFVF9XQUlUS0lORF9WRk9SS19ET05FOg0KPiAr CWNhc2UgVEFSR0VUX1dBSVRLSU5EX1NZU0NBTExfRU5UUlk6DQo+ICsJY2FzZSBUQVJHRVRfV0FJ VEtJTkRfU1lTQ0FMTF9SRVRVUk46DQo+ICsJICAvKiBQYXNzIHRoZSByZXN1bHQgdG8gdGhlIGdl bmVyaWMgY29kZS4gICovDQo+ICsJICByZXR1cm4gd3B0aWQ7DQo+ICsJY2FzZSBUQVJHRVRfV0FJ VEtJTkRfVEhSRUFEX0NSRUFURUQ6DQo+ICsJY2FzZSBUQVJHRVRfV0FJVEtJTkRfVEhSRUFEX0VY SVRFRDoNCj4gKwkgIC8qIFRoZSBjb3JlIG5lZWRsZXNzbHkgc3RvcHMgb24gdGhlc2UgZXZlbnRz LiAgKi8NCj4gKwkgIC8qIEZBTExUSFJPVUdIICovDQo+ICsJY2FzZSBUQVJHRVRfV0FJVEtJTkRf U1BVUklPVVM6DQo+ICsJICAvKiBTcHVyaW91cyBldmVudHMgYXJlIHVuaGFuZGxlZCBieSB0aGUg Z2Ric2VydmVyIGNvcmUuICAqLw0KPiArCSAgaWYgKHB0cmFjZSAoUFRfQ09OVElOVUUsIGN1cnJl bnRfcHJvY2VzcyAoKS0+cGlkLCAodm9pZCAqKSAxLCAwKQ0KPiArCSAgICAgID09IC0xKQ0KPiAr CSAgICBwZXJyb3Jfd2l0aF9uYW1lICgoInB0cmFjZSIpKTsNCj4gKwkgIGJyZWFrOw0KPiArCWRl ZmF1bHQ6DQo+ICsJICBlcnJvciAoKCJVbmtud29uIHN0b3BwZWQgc3RhdHVzIikpOw0KDQpUeXBv ICJVbmtud29uIi4NCg0KPiArCX0NCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVu dCB0aGUga2lsbCB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4gK2ludA0KPiArbmV0YnNk X3Byb2Nlc3NfdGFyZ2V0OjpraWxsIChwcm9jZXNzX2luZm8gKnByb2Nlc3MpDQo+ICt7DQo+ICsg IHBpZF90IHBpZCA9IHByb2Nlc3MtPnBpZDsNCj4gKyAgcHRyYWNlIChQVF9LSUxMLCBwaWQsIG51 bGxwdHIsIDApOw0KPiArDQo+ICsgIGludCBzdGF0dXM7DQo+ICsgIGdkYjo6aGFuZGxlX2VpbnRy ICg6OndhaXRwaWQsIHBpZCwgJnN0YXR1cywgMCk7DQoNClRoZSAia2lsbCIgdGFyZ2V0IG9wIGlz IHN1cHBvc2VkIHRvIHJldHVybiAtMSBvbiBmYWlsdXJlLg0KU28sIG1heWJlIG5vdCBpZ25vcmUg dGhlIHJldHVybiB2YWx1ZSBvZiBoYW5kbGVfZWludHIgaGVyZT8NCg0KPiArICBtb3VybiAocHJv Y2Vzcyk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIGRl dGFjaCB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4gK2ludA0KPiArbmV0YnNkX3Byb2Nl c3NfdGFyZ2V0OjpkZXRhY2ggKHByb2Nlc3NfaW5mbyAqcHJvY2VzcykNCj4gK3sNCj4gKyAgcGlk X3QgcGlkID0gcHJvY2Vzcy0+cGlkOw0KPiArDQo+ICsgIHB0cmFjZSAoUFRfREVUQUNILCBwaWQs ICh2b2lkICopIDEsIDApOw0KPiArICBtb3VybiAocHJvY2Vzcyk7DQo+ICsgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIG1vdXJuIHRhcmdldF9vcHMgbWV0aG9kLiAg Ki8NCj4gKw0KPiArdm9pZA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0Ojptb3VybiAoc3RydWN0 IHByb2Nlc3NfaW5mbyAqcHJvYykNCj4gK3sNCj4gKyAgZm9yX2VhY2hfdGhyZWFkIChwcm9jLT5w aWQsIHJlbW92ZV90aHJlYWQpOw0KPiArDQo+ICsgIHJlbW92ZV9wcm9jZXNzIChwcm9jKTsNCj4g K30NCj4gKw0KPiArLyogSW1wbGVtZW50IHRoZSBqb2luIHRhcmdldF9vcHMgbWV0aG9kLiAgKi8N Cj4gKw0KPiArdm9pZA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0Ojpqb2luIChpbnQgcGlkKQ0K PiArew0KPiArICAvKiBUaGUgUFRfREVUQUNIIGlzIHN1ZmZpY2llbnQgdG8gZGV0YWNoIGZyb20g dGhlIHByb2Nlc3MuDQo+ICsgICAgIFNvIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgZXh0cmEuICAq Lw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHRocmVhZF9hbGl2ZSB0YXJnZXRfb3Bz IG1ldGhvZC4gICovDQo+ICsNCj4gK2Jvb2wNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6dGhy ZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkNCj4gK3sNCj4gKyAgcmV0dXJuIG5ldGJzZF9uYXQ6OnRo cmVhZF9hbGl2ZSAocHRpZCk7DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVudCB0aGUgZmV0Y2hf cmVnaXN0ZXJzIHRhcmdldF9vcHMgbWV0aG9kLiAgKi8NCj4gKw0KPiArdm9pZA0KPiArbmV0YnNk X3Byb2Nlc3NfdGFyZ2V0OjpmZXRjaF9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsIGludCByZWdubykNCj4gK3sNCj4gKyAgc3RydWN0IG5ldGJzZF9yZWdzZXRfaW5mbyAqcmVn c2V0ID0gbmV0YnNkX3RhcmdldF9yZWdzZXRzOw0KPiArICBwdGlkX3QgaW5mZXJpb3JfcHRpZCA9 IHB0aWRfb2YgKGN1cnJlbnRfdGhyZWFkKTsNCj4gKw0KPiArICB3aGlsZSAocmVnc2V0LT5zaXpl ID49IDApDQo+ICsgICAgew0KPiArICAgICAgY2hhciAqYnVmID0gKGNoYXIgKikgeG1hbGxvYyAo cmVnc2V0LT5zaXplKTsNCj4gKyAgICAgIGludCByZXMgPSBwdHJhY2UgKHJlZ3NldC0+Z2V0X3Jl cXVlc3QsIGluZmVyaW9yX3B0aWQucGlkICgpLCBidWYsDQo+ICsJCQlpbmZlcmlvcl9wdGlkLmx3 cCAoKSk7DQo+ICsgICAgICBpZiAocmVzID09IC0xKQ0KPiArCXBlcnJvcl93aXRoX25hbWUgKCgi cHRyYWNlIikpOw0KPiArICAgICAgcmVnc2V0LT5zdG9yZV9mdW5jdGlvbiAocmVnY2FjaGUsIGJ1 Zik7DQo+ICsgICAgICBmcmVlIChidWYpOw0KPiArICAgICAgcmVnc2V0Kys7DQo+ICsgICAgfQ0K PiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHN0b3JlX3JlZ2lzdGVycyB0YXJnZXRfb3Bz IG1ldGhvZC4gICovDQo+ICsNCj4gK3ZvaWQNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3Rv cmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pDQo+ICt7 DQo+ICsgIHN0cnVjdCBuZXRic2RfcmVnc2V0X2luZm8gKnJlZ3NldCA9IG5ldGJzZF90YXJnZXRf cmVnc2V0czsNCj4gKyAgcHRpZF90IGluZmVyaW9yX3B0aWQgPSBwdGlkX29mIChjdXJyZW50X3Ro cmVhZCk7DQo+ICsNCj4gKyAgd2hpbGUgKHJlZ3NldC0+c2l6ZSA+PSAwKQ0KPiArICAgIHsNCj4g KyAgICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopeG1hbGxvYyAocmVnc2V0LT5zaXplKTsNCj4gKyAg ICAgIGludCByZXMgPSBwdHJhY2UgKHJlZ3NldC0+Z2V0X3JlcXVlc3QsIGluZmVyaW9yX3B0aWQu cGlkICgpLCBidWYsDQo+ICsJCQlpbmZlcmlvcl9wdGlkLmx3cCAoKSk7DQo+ICsgICAgICBpZiAo cmVzID09IC0xKQ0KPiArCXBlcnJvcl93aXRoX25hbWUgKCgicHRyYWNlIikpOw0KPiArICAgICAg aWYgKHJlcyA9PSAwKQ0KPiArCXsNCj4gKwkgIC8qIFRoZW4gb3ZlcmxheSBvdXIgY2FjaGVkIHJl Z2lzdGVycyBvbiB0aGF0LiAgKi8NCj4gKwkgIHJlZ3NldC0+ZmlsbF9mdW5jdGlvbiAocmVnY2Fj aGUsIGJ1Zik7DQo+ICsJICAvKiBPbmx5IG5vdyBkbyB3ZSB3cml0ZSB0aGUgcmVnaXN0ZXIgc2V0 LiAgKi8NCj4gKwkgIHJlcyA9IHB0cmFjZSAocmVnc2V0LT5zZXRfcmVxdWVzdCwgaW5mZXJpb3Jf cHRpZC5waWQgKCksIGJ1ZiwNCj4gKwkJCWluZmVyaW9yX3B0aWQubHdwICgpKTsNCj4gKwl9DQo+ ICsgICAgICBmcmVlIChidWYpOw0KPiArICAgICAgcmVnc2V0Kys7DQo+ICsgICAgfQ0KPiArfQ0K PiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHJlYWRfbWVtb3J5IHRhcmdldF9vcHMgbWV0aG9kLiAg Ki8NCj4gKw0KPiAraW50DQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnJlYWRfbWVtb3J5IChD T1JFX0FERFIgbWVtYWRkciwgdW5zaWduZWQgY2hhciAqbXlhZGRyLA0KPiArCQkJCSAgICBpbnQg c2l6ZSkNCj4gK3sNCj4gKyAgc3RydWN0IHB0cmFjZV9pb19kZXNjIGlvOw0KPiArICBpby5waW9k X29wID0gUElPRF9SRUFEX0Q7DQo+ICsgIGlvLnBpb2RfbGVuID0gc2l6ZTsNCj4gKw0KPiArICBw aWRfdCBwaWQgPSBjdXJyZW50X3Byb2Nlc3MgKCktPnBpZDsNCj4gKw0KPiArICBpbnQgYnl0ZXNf cmVhZCA9IDA7DQo+ICsNCj4gKyAgaWYgKHNpemUgPT0gMCkNCj4gKyAgICB7DQo+ICsgICAgICAv KiBaZXJvIGxlbmd0aCB3cml0ZSBhbHdheXMgc3VjY2VlZHMuICAqLw0KPiArICAgICAgcmV0dXJu IDA7DQo+ICsgICAgfQ0KPiArICBkbw0KPiArICAgIHsNCj4gKyAgICAgIGlvLnBpb2Rfb2ZmcyA9 ICh2b2lkICopKG1lbWFkZHIgKyBieXRlc19yZWFkKTsNCj4gKyAgICAgIGlvLnBpb2RfYWRkciA9 IG15YWRkciArIGJ5dGVzX3JlYWQ7DQo+ICsNCj4gKyAgICAgIGludCBydiA9IHB0cmFjZSAoUFRf SU8sIHBpZCwgJmlvLCAwKTsNCj4gKyAgICAgIGlmIChydiA9PSAtMSkNCj4gKwlyZXR1cm4gZXJy bm87DQo+ICsgICAgICBpZiAoaW8ucGlvZF9sZW4gPT0gMCkNCj4gKwlyZXR1cm4gMDsNCj4gKw0K PiArICAgICAgYnl0ZXNfcmVhZCArPSBpby5waW9kX2xlbjsNCj4gKyAgICAgIGlvLnBpb2RfbGVu ID0gc2l6ZSAtIGJ5dGVzX3JlYWQ7DQo+ICsgICAgfQ0KPiArICB3aGlsZSAoYnl0ZXNfcmVhZCA8 IHNpemUpOw0KPiArDQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQg dGhlIHdyaXRlX21lbW9yeSB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4gK2ludA0KPiAr bmV0YnNkX3Byb2Nlc3NfdGFyZ2V0Ojp3cml0ZV9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLA0K PiArCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXlhZGRyLCBpbnQgc2l6ZSkNCj4gK3sN Cj4gKyAgc3RydWN0IHB0cmFjZV9pb19kZXNjIGlvOw0KPiArICBpby5waW9kX29wID0gUElPRF9X UklURV9EOw0KPiArICBpby5waW9kX2xlbiA9IHNpemU7DQo+ICsNCj4gKyAgcGlkX3QgcGlkID0g Y3VycmVudF9wcm9jZXNzICgpLT5waWQ7DQo+ICsNCj4gKyAgaW50IGJ5dGVzX3dyaXR0ZW4gPSAw Ow0KPiArDQo+ICsgIGlmIChzaXplID09IDApDQo+ICsgICAgew0KPiArICAgICAgLyogWmVybyBs ZW5ndGggd3JpdGUgYWx3YXlzIHN1Y2NlZWRzLiAgKi8NCj4gKyAgICAgIHJldHVybiAwOw0KPiAr ICAgIH0NCj4gKw0KPiArICBkbw0KPiArICAgIHsNCj4gKyAgICAgIGlvLnBpb2RfYWRkciA9ICh2 b2lkICopKG15YWRkciArIGJ5dGVzX3dyaXR0ZW4pOw0KPiArICAgICAgaW8ucGlvZF9vZmZzID0g KHZvaWQgKikobWVtYWRkciArIGJ5dGVzX3dyaXR0ZW4pOw0KPiArDQo+ICsgICAgICBpbnQgcnYg PSBwdHJhY2UgKFBUX0lPLCBwaWQsICZpbywgMCk7DQo+ICsgICAgICBpZiAocnYgPT0gLTEpDQo+ ICsJcmV0dXJuIGVycm5vOw0KPiArICAgICAgaWYgKGlvLnBpb2RfbGVuID09IDApDQo+ICsJcmV0 dXJuIDA7DQo+ICsNCj4gKyAgICAgIGJ5dGVzX3dyaXR0ZW4gKz0gaW8ucGlvZF9sZW47DQo+ICsg ICAgICBpby5waW9kX2xlbiA9IHNpemUgLSBieXRlc193cml0dGVuOw0KPiArICAgIH0NCj4gKyAg d2hpbGUgKGJ5dGVzX3dyaXR0ZW4gPCBzaXplKTsNCj4gKw0KPiArICByZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArLyogSW1wbGVtZW50IHRoZSBraWxsX3JlcXVlc3QgdGFyZ2V0X29wcyBtZXRob2Qu ICAqLw0KDQoia2lsbF9yZXF1ZXN0IiAtPiAicmVxdWVzdF9pbnRlcnJ1cHQiLg0KDQo+ICsNCj4g K3ZvaWQNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6cmVxdWVzdF9pbnRlcnJ1cHQgKCkNCj4g K3sNCj4gKyAgcHRpZF90IGluZmVyaW9yX3B0aWQgPSBwdGlkX29mIChnZXRfZmlyc3RfdGhyZWFk ICgpKTsNCj4gKw0KPiArICA6OmtpbGwgKGluZmVyaW9yX3B0aWQucGlkKCksIFNJR0lOVCk7DQo+ ICt9DQo+ICsNCg0KSSB0aGluayBhIGZ1bmN0aW9uIGNvbW1lbnQgaXMgbmVlZGVkIGhlcmUuDQoN Cj4gK3N0YXRpYyBzaXplX3QNCj4gK25ldGJzZF9yZWFkX2F1eHYocGlkX3QgcGlkLCB2b2lkICpv ZmZzLCB2b2lkICphZGRyLCBzaXplX3QgbGVuKQ0KPiArew0KPiArICBzdHJ1Y3QgcHRyYWNlX2lv X2Rlc2MgcGlvOw0KPiArDQo+ICsgIHBpby5waW9kX29wID0gUElPRF9SRUFEX0FVWFY7DQo+ICsg IHBpby5waW9kX29mZnMgPSBvZmZzOw0KPiArICBwaW8ucGlvZF9hZGRyID0gYWRkcjsNCj4gKyAg cGlvLnBpb2RfbGVuID0gbGVuOw0KPiArDQo+ICsgIGlmIChwdHJhY2UgKFBUX0lPLCBwaWQsICZw aW8sIDApID09IC0xKQ0KPiArICAgIHBlcnJvcl93aXRoX25hbWUgKCgicHRyYWNlIikpOw0KPiAr DQo+ICsgIHJldHVybiBwaW8ucGlvZF9sZW47DQo+ICt9DQo+ICsNCj4gKy8qIENvcHkgTEVOIGJ5 dGVzIGZyb20gaW5mZXJpb3IncyBhdXhpbGlhcnkgdmVjdG9yIHN0YXJ0aW5nIGF0IE9GRlNFVA0K PiArICAgdG8gZGVidWdnZXIgbWVtb3J5IHN0YXJ0aW5nIGF0IE1ZQUREUi4gICovDQo+ICsNCj4g K2ludA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0OjpyZWFkX2F1eHYgKENPUkVfQUREUiBvZmZz ZXQsDQo+ICsJCQkJICB1bnNpZ25lZCBjaGFyICpteWFkZHIsIHVuc2lnbmVkIGludCBsZW4pDQo+ ICt7DQo+ICsgIHBpZF90IHBpZCA9IHBpZF9vZiAoY3VycmVudF90aHJlYWQpOw0KPiArDQo+ICsg IHJldHVybiBuZXRic2RfcmVhZF9hdXh2IChwaWQsICh2b2lkICopIChpbnRwdHJfdCkgb2Zmc2V0 LCBteWFkZHIsIGxlbik7DQo+ICt9DQo+ICsNCj4gK2Jvb2wNCj4gK25ldGJzZF9wcm9jZXNzX3Rh cmdldDo6c3VwcG9ydHNfel9wb2ludF90eXBlIChjaGFyIHpfdHlwZSkNCj4gK3sNCj4gKyAgc3dp dGNoICh6X3R5cGUpDQo+ICsgICAgew0KPiArICAgIGNhc2UgWl9QQUNLRVRfU1dfQlA6DQo+ICsg ICAgICByZXR1cm4gdHJ1ZTsNCj4gKyAgICBjYXNlIFpfUEFDS0VUX0hXX0JQOg0KPiArICAgIGNh c2UgWl9QQUNLRVRfV1JJVEVfV1A6DQo+ICsgICAgY2FzZSBaX1BBQ0tFVF9SRUFEX1dQOg0KPiAr ICAgIGNhc2UgWl9QQUNLRVRfQUNDRVNTX1dQOg0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICBy ZXR1cm4gZmFsc2U7IC8qIE5vdCBzdXBwb3J0ZWQuICAqLw0KPiArICAgIH0NCj4gK30NCj4gKw0K PiArLyogSW5zZXJ0IHticmVhay93YXRjaH1wb2ludCBhdCBhZGRyZXNzIEFERFIuICBTSVpFIGlz IG5vdCB1c2VkLiAgKi8NCj4gKw0KPiAraW50DQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6Omlu c2VydF9wb2ludCAoZW51bSByYXdfYmtwdF90eXBlIHR5cGUsIENPUkVfQUREUiBhZGRyLA0KPiAr CQkgICAgIGludCBzaXplLCBzdHJ1Y3QgcmF3X2JyZWFrcG9pbnQgKmJwKQ0KPiArew0KPiArICBz d2l0Y2ggKHR5cGUpDQo+ICsgICAgew0KPiArICAgIGNhc2UgcmF3X2JrcHRfdHlwZV9zdzoNCj4g KyAgICAgIHJldHVybiBpbnNlcnRfbWVtb3J5X2JyZWFrcG9pbnQgKGJwKTsNCj4gKyAgICBjYXNl IHJhd19ia3B0X3R5cGVfaHc6DQo+ICsgICAgY2FzZSByYXdfYmtwdF90eXBlX3dyaXRlX3dwOg0K PiArICAgIGNhc2UgcmF3X2JrcHRfdHlwZV9yZWFkX3dwOg0KPiArICAgIGNhc2UgcmF3X2JrcHRf dHlwZV9hY2Nlc3Nfd3A6DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgIHJldHVybiAxOyAvKiBO b3Qgc3VwcG9ydGVkLiAgKi8NCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8qIFJlbW92ZSB7YnJl YWsvd2F0Y2h9cG9pbnQgYXQgYWRkcmVzcyBBRERSLiAgU0laRSBpcyBub3QgdXNlZC4gICovDQo+ ICsNCj4gK2ludA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0OjpyZW1vdmVfcG9pbnQgKGVudW0g cmF3X2JrcHRfdHlwZSB0eXBlLCBDT1JFX0FERFIgYWRkciwNCj4gKwkJCQkgICAgIGludCBzaXpl LCBzdHJ1Y3QgcmF3X2JyZWFrcG9pbnQgKmJwKQ0KPiArew0KPiArICBzd2l0Y2ggKHR5cGUpDQo+ ICsgICAgew0KPiArICAgIGNhc2UgcmF3X2JrcHRfdHlwZV9zdzoNCj4gKyAgICAgIHJldHVybiBy ZW1vdmVfbWVtb3J5X2JyZWFrcG9pbnQgKGJwKTsNCj4gKyAgICBjYXNlIHJhd19ia3B0X3R5cGVf aHc6DQo+ICsgICAgY2FzZSByYXdfYmtwdF90eXBlX3dyaXRlX3dwOg0KPiArICAgIGNhc2UgcmF3 X2JrcHRfdHlwZV9yZWFkX3dwOg0KPiArICAgIGNhc2UgcmF3X2JrcHRfdHlwZV9hY2Nlc3Nfd3A6 DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAgICAgIHJldHVybiAxOyAvKiBOb3Qgc3VwcG9ydGVkLiAg Ki8NCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVudCB0aGUgdG9fc3RvcHBlZF9i eV9zd19icmVha3BvaW50IHRhcmdldF9vcHMNCj4gKyAgIG1ldGhvZC4gICovDQoNCiJ0b19zdG9w cGVkX2J5X3N3X2JyZWFrcG9pbnQiIC0+ICJzdG9wcGVkX2J5X3N3X2JyZWFrcG9pbnQiLg0KDQo+ ICsNCj4gK2Jvb2wNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3RvcHBlZF9ieV9zd19icmVh a3BvaW50ICgpDQo+ICt7DQo+ICsgIHB0cmFjZV9zaWdpbmZvX3QgcHNpOw0KPiArICBwaWRfdCBw aWQgPSBjdXJyZW50X3Byb2Nlc3MgKCktPnBpZDsNCj4gKw0KPiArICBpZiAocHRyYWNlIChQVF9H RVRfU0lHSU5GTywgcGlkLCAmcHNpLCBzaXplb2YgKHBzaSkpID09IC0xKQ0KPiArICAgIHBlcnJv cl93aXRoX25hbWUgKCgicHRyYWNlIikpOw0KPiArDQo+ICsgIHJldHVybiBwc2kucHNpX3NpZ2lu Zm8uc2lfc2lnbm8gPT0gU0lHVFJBUCAmJg0KPiArCSBwc2kucHNpX3NpZ2luZm8uc2lfY29kZSA9 PSBUUkFQX0JSS1BUOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHRvX3N1cHBvcnRz X3N0b3BwZWRfYnlfc3dfYnJlYWtwb2ludCB0YXJnZXRfb3BzDQo+ICsgICBtZXRob2QuICAqLw0K DQpUaGUgInRvXyIgcHJlZml4IHNoYWxsIGJlIHJlbW92ZWQgaGVyZSwgdG9vLg0KDQo+ICsNCj4g K2Jvb2wNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3VwcG9ydHNfc3RvcHBlZF9ieV9zd19i cmVha3BvaW50ICgpDQo+ICt7DQo+ICsgIHJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBJ bXBsZW1lbnQgdGhlIHN1cHBvcnRzX3F4ZmVyX3NpZ2luZm8gdGFyZ2V0X29wcyBtZXRob2QuICAq Lw0KPiArDQo+ICtib29sDQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBvcnRzX3F4ZmVy X3NpZ2luZm8gKCkNCj4gK3sNCj4gKyAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qIElt cGxlbWVudCB0aGUgcXhmZXJfc2lnaW5mbyB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4g K2ludA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0OjpxeGZlcl9zaWdpbmZvIChjb25zdCBjaGFy ICphbm5leCwgdW5zaWduZWQgY2hhciAqcmVhZGJ1ZiwNCj4gKwkJCQkgICAgICB1bnNpZ25lZCBj b25zdCBjaGFyICp3cml0ZWJ1ZiwNCj4gKwkJCQkgICAgICBDT1JFX0FERFIgb2Zmc2V0LCBpbnQg bGVuKQ0KPiArew0KPiArICBpZiAoY3VycmVudF90aHJlYWQgPT0gbnVsbHB0cikNCj4gKyAgICBy ZXR1cm4gLTE7DQo+ICsNCj4gKyAgcGlkX3QgcGlkID0gY3VycmVudF9wcm9jZXNzICgpLT5waWQ7 DQo+ICsNCj4gKyAgcmV0dXJuIG5ldGJzZF9uYXQ6OnF4ZmVyX3NpZ2luZm8ocGlkLCBhbm5leCwg cmVhZGJ1Ziwgd3JpdGVidWYsIG9mZnNldCwgbGVuKTsNCj4gK30NCj4gKw0KPiArLyogSW1wbGVt ZW50IHRoZSBzdXBwb3J0c19ub25fc3RvcCB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4g K2Jvb2wNCj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3VwcG9ydHNfbm9uX3N0b3AgKCkNCj4g K3sNCj4gKyAgcmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHN1 cHBvcnRzX211bHRpX3Byb2Nlc3MgdGFyZ2V0X29wcyBtZXRob2QuICAqLw0KPiArDQo+ICtib29s DQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBvcnRzX211bHRpX3Byb2Nlc3MgKCkNCj4g K3sNCj4gKyAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qIENoZWNrIGlmIGZvcmsgZXZl bnRzIGFyZSBzdXBwb3J0ZWQuICAqLw0KPiArDQo+ICtib29sDQo+ICtuZXRic2RfcHJvY2Vzc190 YXJnZXQ6OnN1cHBvcnRzX2ZvcmtfZXZlbnRzICgpDQo+ICt7DQo+ICsgIHJldHVybiBmYWxzZTsN Cj4gK30NCj4gKw0KPiArLyogQ2hlY2sgaWYgdmZvcmsgZXZlbnRzIGFyZSBzdXBwb3J0ZWQuICAq Lw0KPiArDQo+ICtib29sDQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBvcnRzX3Zmb3Jr X2V2ZW50cyAoKQ0KPiArew0KPiArICByZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gKy8qIENo ZWNrIGlmIGV4ZWMgZXZlbnRzIGFyZSBzdXBwb3J0ZWQuICAqLw0KPiArDQo+ICtib29sDQo+ICtu ZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBvcnRzX2V4ZWNfZXZlbnRzICgpDQo+ICt7DQo+ICsg IHJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHN1cHBvcnRzX2Rp c2FibGVfcmFuZG9taXphdGlvbiB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4gK2Jvb2wN Cj4gK25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3VwcG9ydHNfZGlzYWJsZV9yYW5kb21pemF0aW9u ICgpDQo+ICt7DQo+ICsgIHJldHVybiBmYWxzZTsNCj4gK30NCg0KU29tZSBvZiB0aGUgdGFyZ2V0 IG9wcyBhYm92ZSBkbyBub3QgY2hhbmdlIHRoZSBiYXNlIGNsYXNzIGJlaGF2aW9yLiAgVGhlIG92 ZXJyaWRlDQpjYW4gYmUgb21pdHRlZCBmb3IgY29kZSBzaW1wbGljaXR5LiAgSSB0aGluayBpdCdz IGFsc28gT0sgdG8gcmV0YWluIHRoZW0gaWYgeW91IHdhbnQNCnRvIG1ha2UgdGhlIGRlZmluaXRp b25zIGV4cGxpY2l0Lg0KDQo+ICsNCj4gKy8qIEV4dHJhY3QgJnBoZHIgYW5kIG51bV9waGRyIGlu IHRoZSBpbmZlcmlvci4gIFJldHVybiAwIG9uIHN1Y2Nlc3MuICAqLw0KPiArDQo+ICt0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4NCj4gK2ludCBnZXRfcGhkcl9waG51bV9mcm9tX3Byb2NfYXV4diAoY29u c3QgcGlkX3QgcGlkLA0KPiArCQkJCSAgIENPUkVfQUREUiAqcGhkcl9tZW1hZGRyLCBpbnQgKm51 bV9waGRyKQ0KPiArew0KPiArICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c2l6 ZW9mKFQpID09IHNpemVvZihpbnQ2NF90KSwNCj4gKwkJCQkgICAgQXV4NjRJbmZvLCBBdXgzMklu Zm8+Ojp0eXBlIGF1eHZfdHlwZTsNCj4gKyAgY29uc3Qgc2l6ZV90IGF1eHZfc2l6ZSA9IHNpemVv ZiAoYXV4dl90eXBlKTsNCj4gKyAgY29uc3Qgc2l6ZV90IGF1eHZfYnVmX3NpemUgPSAxMjggKiBz aXplb2YgKGF1eHZfdHlwZSk7DQo+ICsNCj4gKyAgY2hhciAqYXV4dl9idWYgPSAoY2hhciAqKSB4 bWFsbG9jIChhdXh2X2J1Zl9zaXplKTsNCj4gKw0KPiArICBuZXRic2RfcmVhZF9hdXh2IChwaWQs IG51bGxwdHIsIGF1eHZfYnVmLCBhdXh2X2J1Zl9zaXplKTsNCj4gKw0KPiArICAqcGhkcl9tZW1h ZGRyID0gMDsNCj4gKyAgKm51bV9waGRyID0gMDsNCj4gKw0KPiArICBmb3IgKGNoYXIgKmJ1ZiA9 IGF1eHZfYnVmOyBidWYgPCAoYXV4dl9idWYgKyBhdXh2X2J1Zl9zaXplKTsgYnVmICs9IGF1eHZf c2l6ZSkNCj4gKyAgICB7DQo+ICsgICAgICBhdXh2X3R5cGUgKmNvbnN0IGF1eCA9IChhdXh2X3R5 cGUgKikgYnVmOw0KPiArDQo+ICsgICAgICBzd2l0Y2ggKGF1eC0+YV90eXBlKQ0KPiArCXsNCj4g KwljYXNlIEFUX1BIRFI6DQo+ICsJICAqcGhkcl9tZW1hZGRyID0gYXV4LT5hX3Y7DQo+ICsJICBi cmVhazsNCj4gKwljYXNlIEFUX1BITlVNOg0KPiArCSAgKm51bV9waGRyID0gYXV4LT5hX3Y7DQo+ ICsJICBicmVhazsNCj4gKwl9DQo+ICsNCj4gKyAgICAgIGlmICgqcGhkcl9tZW1hZGRyICE9IDAg JiYgKm51bV9waGRyICE9IDApDQo+ICsJYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgIHhmcmVl IChhdXh2X2J1Zik7DQo+ICsNCj4gKyAgaWYgKCpwaGRyX21lbWFkZHIgPT0gMCB8fCAqbnVtX3Bo ZHIgPT0gMCkNCj4gKyAgICB7DQo+ICsgICAgICB3YXJuaW5nICgiVW5leHBlY3RlZCBtaXNzaW5n IEFUX1BIRFIgYW5kL29yIEFUX1BITlVNOiAiDQo+ICsJICAgICAgICJwaGRyX21lbWFkZHIgPSAl bGQsIHBoZHJfbnVtID0gJWQiLA0KPiArCSAgICAgICAobG9uZykgKnBoZHJfbWVtYWRkciwgKm51 bV9waGRyKTsNCg0KSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHVzZSBgY29yZV9hZGRyX3RvX3N0cmlu Z2Agb3IgYGNvcmVfYWRkcl90b19zdHJpbmdfbnpgDQp0byBwcmludCBwaGRyX21lbWFkZHIuDQoN Cj4gKyAgICAgIHJldHVybiAyOw0KPiArICAgIH0NCj4gKw0KPiArICByZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArLyogUmV0dXJuICZfRFlOQU1JQyAodmlhIFBUX0RZTkFNSUMpIGluIHRoZSBpbmZl cmlvciwgb3IgMCBpZiBub3QgcHJlc2VudC4gICovDQo+ICsNCj4gK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPg0KPiArc3RhdGljIENPUkVfQUREUg0KPiArZ2V0X2R5bmFtaWMgKG5ldGJzZF9wcm9jZXNz X3RhcmdldCAqdGFyZ2V0LCBjb25zdCBwaWRfdCBwaWQpDQo+ICt7DQo+ICsgIHR5cGVkZWYgdHlw ZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzaXplb2YoVCkgPT0gc2l6ZW9mKGludDY0X3QpLA0KPiAr CQkJCSAgICBFbGY2NF9QaGRyLCBFbGYzMl9QaGRyPjo6dHlwZSBwaGRyX3R5cGU7DQo+ICsgIGNv bnN0IGludCBwaGRyX3NpemUgPSBzaXplb2YgKHBoZHJfdHlwZSk7DQo+ICsNCj4gKyAgQ09SRV9B RERSIHBoZHJfbWVtYWRkcjsNCj4gKyAgaW50IG51bV9waGRyOw0KPiArICBpZiAoZ2V0X3BoZHJf cGhudW1fZnJvbV9wcm9jX2F1eHY8VD4gKHBpZCwgJnBoZHJfbWVtYWRkciwgJm51bV9waGRyKSkN Cj4gKyAgICByZXR1cm4gMDsNCj4gKw0KPiArICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBw aGRyX2J1ZjsNCj4gKyAgcGhkcl9idWYucmVzaXplIChudW1fcGhkciAqIHBoZHJfc2l6ZSk7DQo+ ICsNCj4gKyAgaWYgKCgqdGFyZ2V0KS5yZWFkX21lbW9yeSAocGhkcl9tZW1hZGRyLCBwaGRyX2J1 Zi5kYXRhICgpLCBwaGRyX2J1Zi5zaXplICgpKSkNCg0KV2h5IG5vdCBzaW1wbHkgYHRhcmdldC0+ cmVhZF9tZW1vcnlgPw0KQWxzbywgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGV4cGxpY2l0bHkgY2hl Y2sgIT0gMC4NCg0KPiArICAgIHJldHVybiAwOw0KPiArDQo+ICsgIC8qIENvbXB1dGUgcmVsb2Nh dGlvbjogaXQgaXMgZXhwZWN0ZWQgdG8gYmUgMCBmb3IgInJlZ3VsYXIiIGV4ZWN1dGFibGVzLA0K PiArICAgICBub24temVybyBmb3IgUElFIG9uZXMuICAqLw0KPiArICBDT1JFX0FERFIgcmVsb2Nh dGlvbiA9IC0xOw0KPiArICBmb3IgKGludCBpID0gMDsgcmVsb2NhdGlvbiA9PSAtMSAmJiBpIDwg bnVtX3BoZHI7IGkrKykNCj4gKyAgICB7DQo+ICsgICAgICBwaGRyX3R5cGUgKmNvbnN0IHAgPSAo cGhkcl90eXBlICopIChwaGRyX2J1Zi5kYXRhKCkgKyBpICogcGhkcl9zaXplKTsNCj4gKw0KPiAr ICAgICAgaWYgKHAtPnBfdHlwZSA9PSBQVF9QSERSKQ0KPiArCXJlbG9jYXRpb24gPSBwaGRyX21l bWFkZHIgLSBwLT5wX3ZhZGRyOw0KPiArICAgIH0NCj4gKw0KPiArICBpZiAocmVsb2NhdGlvbiA9 PSAtMSkNCj4gKyAgICB7DQo+ICsgICAgICAvKiBQVF9QSERSIGlzIG9wdGlvbmFsLCBidXQgbmVj ZXNzYXJ5IGZvciBQSUUgaW4gZ2VuZXJhbC4gIEZvcnR1bmF0ZWx5DQo+ICsJIGFueSByZWFsIHdv cmxkIGV4ZWN1dGFibGVzLCBpbmNsdWRpbmcgUElFIGV4ZWN1dGFibGVzLCBoYXZlIGFsd2F5cw0K PiArCSBQVF9QSERSIHByZXNlbnQuICBQVF9QSERSIGlzIG5vdCBwcmVzZW50IGluIHNvbWUgc2hh cmVkIGxpYnJhcmllcyBvcg0KPiArCSBpbiBmcGMgKEZyZWUgUGFzY2FsIDIuNCkgYmluYXJpZXMg YnV0IG5laXRoZXIgb2YgdGhvc2UgaGF2ZSBhIG5lZWQgZm9yDQo+ICsJIG9yIHByZXNlbnQgRFRf REVCVUcgYW55d2F5IChmcGMgYmluYXJpZXMgYXJlIHN0YXRpY2FsbHkgbGlua2VkKS4NCj4gKw0K PiArCSBUaGVyZWZvcmUgaWYgdGhlcmUgZXhpc3RzIERUX0RFQlVHIHRoZXJlIGlzIGFsd2F5cyBh bHNvIFBUX1BIRFIuDQo+ICsNCj4gKwkgR0RCIGNvdWxkIGZpbmQgUkVMT0NBVElPTiBhbHNvIGZy b20gQVRfRU5UUlkgLSBlX2VudHJ5LiAgKi8NCj4gKw0KPiArICAgICAgcmV0dXJuIDA7DQo+ICsg ICAgfQ0KPiArDQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3BoZHI7IGkrKykNCj4gKyAg ICB7DQo+ICsgICAgICBwaGRyX3R5cGUgKmNvbnN0IHAgPSAocGhkcl90eXBlICopIChwaGRyX2J1 Zi5kYXRhICgpICsgaSAqIHBoZHJfc2l6ZSk7DQo+ICsNCj4gKyAgICAgIGlmIChwLT5wX3R5cGUg PT0gUFRfRFlOQU1JQykNCj4gKwlyZXR1cm4gcC0+cF92YWRkciArIHJlbG9jYXRpb247DQo+ICsg ICAgfQ0KPiArDQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBSZXR1cm4gJl9yX2Rl YnVnIGluIHRoZSBpbmZlcmlvciwgb3IgLTEgaWYgbm90IHByZXNlbnQuICBSZXR1cm4gdmFsdWUN Cj4gKyAgIGNhbiBiZSAwIGlmIHRoZSBpbmZlcmlvciBkb2VzIG5vdCB5ZXQgaGF2ZSB0aGUgbGli cmFyeSBsaXN0IGluaXRpYWxpemVkLg0KPiArICAgV2UgbG9vayBmb3IgRFRfTUlQU19STERfTUFQ IGZpcnN0LiAgTUlQUyBleGVjdXRhYmxlcyB1c2UgdGhpcyBpbnN0ZWFkIG9mDQo+ICsgICBEVF9E RUJVRywgYWx0aG91Z2ggdGhleSBzb21ldGltZXMgY29udGFpbiBhbiB1bnVzZWQgRFRfREVCVUcg ZW50cnkgdG9vLiAgKi8NCj4gKw0KPiArdGVtcGxhdGUgPHR5cGVuYW1lIFQ+DQo+ICtzdGF0aWMg Q09SRV9BRERSDQo+ICtnZXRfcl9kZWJ1ZyAobmV0YnNkX3Byb2Nlc3NfdGFyZ2V0ICp0YXJnZXQs IGNvbnN0IGludCBwaWQpDQo+ICt7DQo+ICsgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpjb25kaXRp b25hbDxzaXplb2YoVCkgPT0gc2l6ZW9mKGludDY0X3QpLA0KPiArCQkJCSAgICBFbGY2NF9EeW4s IEVsZjMyX0R5bj46OnR5cGUgZHluX3R5cGU7DQo+ICsgIGNvbnN0IGludCBkeW5fc2l6ZSA9IHNp emVvZiAoZHluX3R5cGUpOw0KPiArICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2YgKGR5bl90eXBl KV07ICAvKiBUaGUgbGFyZ2VyIG9mIHRoZSB0d28uICAqLw0KPiArICBDT1JFX0FERFIgbWFwID0g LTE7DQo+ICsNCj4gKyAgQ09SRV9BRERSIGR5bmFtaWNfbWVtYWRkciA9IGdldF9keW5hbWljPFQ+ ICh0YXJnZXQsIHBpZCk7DQo+ICsgIGlmIChkeW5hbWljX21lbWFkZHIgPT0gMCkNCj4gKyAgICBy ZXR1cm4gbWFwOw0KPiArDQo+ICsgIHdoaWxlICgoKnRhcmdldCkucmVhZF9tZW1vcnkgKGR5bmFt aWNfbWVtYWRkciwgYnVmLCBkeW5fc2l6ZSkgPT0gMCkNCg0KVGhlIGB0YXJnZXQtPnJlYWRfbWVt b3J5YCBjb21tZW50IGhlcmUsIHRvby4NCg0KPiArICAgIHsNCj4gKyAgICAgIGR5bl90eXBlICpj b25zdCBkeW4gPSAoZHluX3R5cGUgKikgYnVmOw0KPiArI2lmIGRlZmluZWQgRFRfTUlQU19STERf TUFQDQo+ICsgICAgICB1bmlvbg0KPiArICAgICAgew0KPiArCVQgbWFwOw0KPiArCXVuc2lnbmVk IGNoYXIgYnVmW3NpemVvZiAoVCldOw0KPiArICAgICAgfQ0KPiArICAgICAgcmxkX21hcDsNCj4g Kw0KPiArICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfTUlQU19STERfTUFQKQ0KPiArCXsNCj4g KwkgIGlmIChyZWFkX21lbW9yeSAoZHluLT5kX3VuLmRfdmFsLA0KPiArCQkJICAgcmxkX21hcC5i dWYsIHNpemVvZiAocmxkX21hcC5idWYpKSA9PSAwKQ0KPiArCSAgICByZXR1cm4gcmxkX21hcC5t YXA7DQo+ICsJICBlbHNlDQo+ICsJICAgIGJyZWFrOw0KPiArCX0NCj4gKyNlbmRpZiAgLyogRFRf TUlQU19STERfTUFQICovDQo+ICsNCj4gKyAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX0RFQlVH ICYmIG1hcCA9PSAtMSkNCj4gKwltYXAgPSBkeW4tPmRfdW4uZF92YWw7DQo+ICsNCj4gKyAgICAg IGlmIChkeW4tPmRfdGFnID09IERUX05VTEwpDQo+ICsJYnJlYWs7DQo+ICsNCj4gKyAgICAgIGR5 bmFtaWNfbWVtYWRkciArPSBkeW5fc2l6ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgcmV0dXJuIG1h cDsNCj4gK30NCj4gKw0KPiArLyogUmVhZCBvbmUgcG9pbnRlciBmcm9tIE1FTUFERFIgaW4gdGhl IGluZmVyaW9yLiAgKi8NCj4gKw0KPiArc3RhdGljIGludA0KPiArcmVhZF9vbmVfcHRyIChuZXRi c2RfcHJvY2Vzc190YXJnZXQgKnRhcmdldCwgQ09SRV9BRERSIG1lbWFkZHIsIENPUkVfQUREUiAq cHRyLA0KPiArCSAgICAgIGludCBwdHJfc2l6ZSkNCj4gK3sNCj4gKyAgLyogR28gdGhyb3VnaCBh IHVuaW9uIHNvIHRoaXMgd29ya3Mgb24gZWl0aGVyIGJpZyBvciBsaXR0bGUgZW5kaWFuDQo+ICsg ICAgIGhvc3RzLCB3aGVuIHRoZSBpbmZlcmlvcidzIHBvaW50ZXIgc2l6ZSBpcyBzbWFsbGVyIHRo YW4gdGhlIHNpemUNCj4gKyAgICAgb2YgQ09SRV9BRERSLiAgSXQgaXMgYXNzdW1lZCB0aGUgaW5m ZXJpb3IncyBlbmRpYW5uZXNzIGlzIHRoZQ0KPiArICAgICBzYW1lIG9mIHRoZSBzdXBlcmlvcidz LiAgKi8NCj4gKw0KPiArICB1bmlvbg0KPiArICB7DQo+ICsgICAgQ09SRV9BRERSIGNvcmVfYWRk cjsNCj4gKyAgICB1bnNpZ25lZCBpbnQgdWk7DQo+ICsgICAgdW5zaWduZWQgY2hhciB1YzsNCj4g KyAgfSBhZGRyOw0KPiArDQo+ICsgIGludCByZXQgPSAoKnRhcmdldCkucmVhZF9tZW1vcnkgKG1l bWFkZHIsICZhZGRyLnVjLCBwdHJfc2l6ZSk7DQoNCkhlcmUsIHRvby4NCg0KPiArICBpZiAocmV0 ID09IDApDQo+ICsgICAgew0KPiArICAgICAgaWYgKHB0cl9zaXplID09IHNpemVvZiAoQ09SRV9B RERSKSkNCj4gKwkqcHRyID0gYWRkci5jb3JlX2FkZHI7DQo+ICsgICAgICBlbHNlIGlmIChwdHJf c2l6ZSA9PSBzaXplb2YgKHVuc2lnbmVkIGludCkpDQo+ICsJKnB0ciA9IGFkZHIudWk7DQo+ICsg ICAgICBlbHNlDQo+ICsJZ2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoInVuaGFuZGxlZCBwb2ludGVy IHNpemUiKTsNCj4gKyAgICB9DQo+ICsgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKy8qIENv bnN0cnVjdCBxWGZlcjpsaWJyYXJpZXMtc3ZyNDpyZWFkIHJlcGx5LiAgKi8NCj4gKw0KPiArdGVt cGxhdGUgPHR5cGVuYW1lIFQ+DQo+ICtpbnQNCj4gK25ldGJzZF9xeGZlcl9saWJyYXJpZXNfc3Zy NCAobmV0YnNkX3Byb2Nlc3NfdGFyZ2V0ICp0YXJnZXQsDQo+ICsJCQkgICAgIGNvbnN0IHBpZF90 IHBpZCwgY29uc3QgY2hhciAqYW5uZXgsDQo+ICsJCQkgICAgIHVuc2lnbmVkIGNoYXIgKnJlYWRi dWYsDQo+ICsJCQkgICAgIHVuc2lnbmVkIGNvbnN0IGNoYXIgKndyaXRlYnVmLA0KPiArCQkJICAg ICBDT1JFX0FERFIgb2Zmc2V0LCBpbnQgbGVuKQ0KPiArew0KPiArICBzdHJ1Y3QgbGlua19tYXBf b2Zmc2V0cw0KPiArICB7DQo+ICsgICAgLyogT2Zmc2V0IGFuZCBzaXplIG9mIHJfZGVidWcucl92 ZXJzaW9uLiAgKi8NCj4gKyAgICBpbnQgcl92ZXJzaW9uX29mZnNldDsNCj4gKw0KPiArICAgIC8q IE9mZnNldCBhbmQgc2l6ZSBvZiByX2RlYnVnLnJfbWFwLiAgKi8NCj4gKyAgICBpbnQgcl9tYXBf b2Zmc2V0Ow0KPiArDQo+ICsgICAgLyogT2Zmc2V0IHRvIGxfYWRkciBmaWVsZCBpbiBzdHJ1Y3Qg bGlua19tYXAuICAqLw0KPiArICAgIGludCBsX2FkZHJfb2Zmc2V0Ow0KPiArDQo+ICsgICAgLyog T2Zmc2V0IHRvIGxfbmFtZSBmaWVsZCBpbiBzdHJ1Y3QgbGlua19tYXAuICAqLw0KPiArICAgIGlu dCBsX25hbWVfb2Zmc2V0Ow0KPiArDQo+ICsgICAgLyogT2Zmc2V0IHRvIGxfbGQgZmllbGQgaW4g c3RydWN0IGxpbmtfbWFwLiAgKi8NCj4gKyAgICBpbnQgbF9sZF9vZmZzZXQ7DQo+ICsNCj4gKyAg ICAvKiBPZmZzZXQgdG8gbF9uZXh0IGZpZWxkIGluIHN0cnVjdCBsaW5rX21hcC4gICovDQo+ICsg ICAgaW50IGxfbmV4dF9vZmZzZXQ7DQo+ICsNCj4gKyAgICAvKiBPZmZzZXQgdG8gbF9wcmV2IGZp ZWxkIGluIHN0cnVjdCBsaW5rX21hcC4gICovDQo+ICsgICAgaW50IGxfcHJldl9vZmZzZXQ7DQo+ ICsgIH07DQo+ICsNCj4gKyAgc3RhdGljIGNvbnN0IHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzIGxt b18zMmJpdF9vZmZzZXRzID0NCj4gKyAgICB7DQo+ICsgICAgICAwLCAgICAgLyogcl92ZXJzaW9u IG9mZnNldC4gKi8NCj4gKyAgICAgIDQsICAgICAvKiByX2RlYnVnLnJfbWFwIG9mZnNldC4gICov DQo+ICsgICAgICAwLCAgICAgLyogbF9hZGRyIG9mZnNldCBpbiBsaW5rX21hcC4gICovDQo+ICsg ICAgICA0LCAgICAgLyogbF9uYW1lIG9mZnNldCBpbiBsaW5rX21hcC4gICovDQo+ICsgICAgICA4 LCAgICAgLyogbF9sZCBvZmZzZXQgaW4gbGlua19tYXAuICAqLw0KPiArICAgICAgMTIsICAgIC8q IGxfbmV4dCBvZmZzZXQgaW4gbGlua19tYXAuICAqLw0KPiArICAgICAgMTYgICAgIC8qIGxfcHJl diBvZmZzZXQgaW4gbGlua19tYXAuICAqLw0KPiArICAgIH07DQo+ICsNCj4gKyAgc3RhdGljIGNv bnN0IHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzIGxtb182NGJpdF9vZmZzZXRzID0NCj4gKyAgICB7 DQo+ICsgICAgICAwLCAgICAgLyogcl92ZXJzaW9uIG9mZnNldC4gKi8NCj4gKyAgICAgIDgsICAg ICAvKiByX2RlYnVnLnJfbWFwIG9mZnNldC4gICovDQo+ICsgICAgICAwLCAgICAgLyogbF9hZGRy IG9mZnNldCBpbiBsaW5rX21hcC4gICovDQo+ICsgICAgICA4LCAgICAgLyogbF9uYW1lIG9mZnNl dCBpbiBsaW5rX21hcC4gICovDQo+ICsgICAgICAxNiwgICAgLyogbF9sZCBvZmZzZXQgaW4gbGlu a19tYXAuICAqLw0KPiArICAgICAgMjQsICAgIC8qIGxfbmV4dCBvZmZzZXQgaW4gbGlua19tYXAu ICAqLw0KPiArICAgICAgMzIgICAgIC8qIGxfcHJldiBvZmZzZXQgaW4gbGlua19tYXAuICAqLw0K PiArICAgIH07DQo+ICsNCj4gKyAgQ09SRV9BRERSIGxtX2FkZHIgPSAwLCBsbV9wcmV2ID0gMDsN Cj4gKyAgQ09SRV9BRERSIGxfbmFtZSwgbF9hZGRyLCBsX2xkLCBsX25leHQsIGxfcHJldjsNCj4g KyAgaW50IGhlYWRlcl9kb25lID0gMDsNCj4gKw0KPiArICBjb25zdCBzdHJ1Y3QgbGlua19tYXBf b2Zmc2V0cyAqbG1vDQo+ICsgICAgPSAoc2l6ZW9mIChUKSA9PSBzaXplb2YgKGludDY0X3QpKQ0K PiArICAgID8gJmxtb182NGJpdF9vZmZzZXRzIDogJmxtb18zMmJpdF9vZmZzZXRzOw0KDQpBbiBl eHRyYSBwYWlyIG9mIHBhcmVucyBjYW4gYmUgdXNlZCB0byBiZXR0ZXIgYWxpZ24gJz8nLiAgTGlr ZSB0aGlzOg0KDQogIGNvbnN0IHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzICpsbW8NCiAgICA9ICgo c2l6ZW9mIChUKSA9PSBzaXplb2YgKGludDY0X3QpKQ0KICAgICAgID8gJmxtb182NGJpdF9vZmZz ZXRzIDogJmxtb18zMmJpdF9vZmZzZXRzKTsNCg0KPiArICBpbnQgcHRyX3NpemUgPSBzaXplb2Yg KFQpOw0KPiArDQo+ICsgIHdoaWxlIChhbm5leFswXSAhPSAnXDAnKQ0KPiArICAgIHsNCj4gKyAg ICAgIGNvbnN0IGNoYXIgKnNlcCA9IHN0cmNociAoYW5uZXgsICc9Jyk7DQo+ICsgICAgICBpZiAo c2VwID09IG51bGxwdHIpDQo+ICsJYnJlYWs7DQo+ICsNCj4gKyAgICAgIGludCBuYW1lX2xlbiA9 IHNlcCAtIGFubmV4Ow0KPiArICAgICAgQ09SRV9BRERSICphZGRycDsNCj4gKyAgICAgIGlmIChu YW1lX2xlbiA9PSA1ICYmIHN0YXJ0c3dpdGggKGFubmV4LCAic3RhcnQiKSkNCj4gKwlhZGRycCA9 ICZsbV9hZGRyOw0KPiArICAgICAgZWxzZSBpZiAobmFtZV9sZW4gPT0gNCAmJiBzdGFydHN3aXRo IChhbm5leCwgInByZXYiKSkNCj4gKwlhZGRycCA9ICZsbV9wcmV2Ow0KPiArICAgICAgZWxzZQ0K PiArCXsNCj4gKwkgIGFubmV4ID0gc3RyY2hyIChzZXAsICc7Jyk7DQo+ICsJICBpZiAoYW5uZXgg PT0gbnVsbHB0cikNCj4gKwkgICAgYnJlYWs7DQo+ICsJICBhbm5leCsrOw0KPiArCSAgY29udGlu dWU7DQo+ICsJfQ0KPiArDQo+ICsgICAgICBhbm5leCA9IGRlY29kZV9hZGRyZXNzX3RvX3NlbWlj b2xvbiAoYWRkcnAsIHNlcCArIDEpOw0KPiArICAgIH0NCj4gKw0KPiArICBpZiAobG1fYWRkciA9 PSAwKQ0KPiArICAgIHsNCj4gKyAgICAgIENPUkVfQUREUiByX2RlYnVnID0gZ2V0X3JfZGVidWc8 VD4gKHRhcmdldCwgcGlkKTsNCj4gKw0KPiArICAgICAgLyogV2UgZmFpbGVkIHRvIGZpbmQgRFRf REVCVUcuICBTdWNoIHNpdHVhdGlvbiB3aWxsIG5vdCBjaGFuZ2UNCj4gKwkgZm9yIHRoaXMgaW5m ZXJpb3IgLSBkbyBub3QgcmV0cnkgaXQuICBSZXBvcnQgaXQgdG8gR0RCIGFzDQo+ICsJIEUwMSwg c2VlIGZvciB0aGUgcmVhc29ucyBhdCB0aGUgR0RCIHNvbGliLXN2cjQuYyBzaWRlLiAgKi8NCj4g KyAgICAgIGlmIChyX2RlYnVnID09IChDT1JFX0FERFIpIC0xKQ0KPiArCXJldHVybiAtMTsNCj4g Kw0KPiArICAgICAgaWYgKHJfZGVidWcgIT0gMCkNCj4gKwl7DQo+ICsJICBpZiAocmVhZF9vbmVf cHRyICh0YXJnZXQsIHJfZGVidWcgKyBsbW8tPnJfbWFwX29mZnNldCwNCj4gKwkJCSAgICAmbG1f YWRkciwgcHRyX3NpemUpICE9IDApDQo+ICsJICAgIHsNCj4gKwkgICAgICB3YXJuaW5nICgidW5h YmxlIHRvIHJlYWQgcl9tYXAgZnJvbSAweCVseCIsDQo+ICsJCSAgICAgICAobG9uZykgcl9kZWJ1 ZyArIGxtby0+cl9tYXBfb2Zmc2V0KTsNCg0KQWdhaW4sIGBjb3JlX2FkZHJfdG9fc3RyaW5nYCBj b3VsZCBiZSB1c2VkLg0KDQo+ICsJICAgIH0NCj4gKwl9DQoNCkJyYWNlcyBjYW4gYmUgcmVtb3Zl ZCBpbiBib3RoIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYWJvdmUuICBBbmQsIGlmIHlvdSBwcmVm ZXIsDQp0aGUgY29uZGl0aW9ucyBjYW4gYmUgbWVyZ2VkIHZpYSAmJi4NCg0KPiArICAgIH0NCj4g Kw0KPiArICBzdGQ6OnN0cmluZyBkb2N1bWVudCA9ICI8bGlicmFyeS1saXN0LXN2cjQgdmVyc2lv bj1cIjEuMFwiIjsNCj4gKw0KPiArICB3aGlsZSAobG1fYWRkcg0KPiArCSAmJiByZWFkX29uZV9w dHIgKHRhcmdldCwgbG1fYWRkciArIGxtby0+bF9uYW1lX29mZnNldCwNCj4gKwkJCSAgJmxfbmFt ZSwgcHRyX3NpemUpID09IDANCj4gKwkgJiYgcmVhZF9vbmVfcHRyICh0YXJnZXQsIGxtX2FkZHIg KyBsbW8tPmxfYWRkcl9vZmZzZXQsDQo+ICsJCQkgICZsX2FkZHIsIHB0cl9zaXplKSA9PSAwDQo+ ICsJICYmIHJlYWRfb25lX3B0ciAodGFyZ2V0LCBsbV9hZGRyICsgbG1vLT5sX2xkX29mZnNldCwN Cj4gKwkJCSAgJmxfbGQsIHB0cl9zaXplKSA9PSAwDQo+ICsJICYmIHJlYWRfb25lX3B0ciAodGFy Z2V0LCBsbV9hZGRyICsgbG1vLT5sX3ByZXZfb2Zmc2V0LA0KPiArCQkJICAmbF9wcmV2LCBwdHJf c2l6ZSkgPT0gMA0KPiArCSAmJiByZWFkX29uZV9wdHIgKHRhcmdldCwgbG1fYWRkciArIGxtby0+ bF9uZXh0X29mZnNldCwNCj4gKwkJCSAgJmxfbmV4dCwgcHRyX3NpemUpID09IDApDQo+ICsgICAg ew0KPiArICAgICAgaWYgKGxtX3ByZXYgIT0gbF9wcmV2KQ0KPiArCXsNCj4gKwkgIHdhcm5pbmcg KCJDb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkgbGlzdDogMHglbHggIT0gMHglbHgiLA0KPiArCQkg ICAobG9uZykgbG1fcHJldiwgKGxvbmcpIGxfcHJldik7DQo+ICsJICBicmVhazsNCj4gKwl9DQo+ ICsNCj4gKyAgICAgIC8qIElnbm9yZSB0aGUgZmlyc3QgZW50cnkgZXZlbiBpZiBpdCBoYXMgdmFs aWQgbmFtZSBhcyB0aGUgZmlyc3QgZW50cnkNCj4gKwkgY29ycmVzcG9uZHMgdG8gdGhlIG1haW4g ZXhlY3V0YWJsZS4gIFRoZSBmaXJzdCBlbnRyeSBzaG91bGQgbm90IGJlDQo+ICsJIHNraXBwZWQg aWYgdGhlIGR5bmFtaWMgbG9hZGVyIHdhcyBsb2FkZWQgbGF0ZSBieSBhIHN0YXRpYyBleGVjdXRh YmxlDQo+ICsJIChzZWUgc29saWItc3ZyNC5jIHBhcmFtZXRlciBpZ25vcmVfZmlyc3QpLiAgQnV0 IGluIHN1Y2ggY2FzZSB0aGUgbWFpbg0KPiArCSBleGVjdXRhYmxlIGRvZXMgbm90IGhhdmUgUFRf RFlOQU1JQyBwcmVzZW50IGFuZCB0aGlzIGZ1bmN0aW9uIGFscmVhZHkNCj4gKwkgZXhpdGVkIGFi b3ZlIGR1ZSB0byBmYWlsZWQgZ2V0X3JfZGVidWcuICAqLw0KPiArICAgICAgaWYgKGxtX3ByZXYg PT0gMCkNCj4gKwlzdHJpbmdfYXBwZW5kZiAoZG9jdW1lbnQsICIgbWFpbi1sbT1cIjB4JWx4XCIi LA0KPiArCQkJKHVuc2lnbmVkIGxvbmcpIGxtX2FkZHIpOw0KPiArICAgICAgZWxzZQ0KPiArCXsN Cj4gKwkgIHVuc2lnbmVkIGNoYXIgbGlibmFtZVtQQVRIX01BWF07DQo+ICsNCj4gKwkgIC8qIE5v dCBjaGVja2luZyBmb3IgZXJyb3IgYmVjYXVzZSByZWFkaW5nIG1heSBzdG9wIGJlZm9yZQ0KPiAr CSAgICAgd2UndmUgZ290IFBBVEhfTUFYIHdvcnRoIG9mIGNoYXJhY3RlcnMuICAqLw0KPiArCSAg bGlibmFtZVswXSA9ICdcMCc7DQo+ICsJICAoKnRhcmdldCkucmVhZF9tZW1vcnkgKGxfbmFtZSwg bGlibmFtZSwgc2l6ZW9mIChsaWJuYW1lKSAtIDEpOw0KPiArCSAgbGlibmFtZVtzaXplb2YgKGxp Ym5hbWUpIC0gMV0gPSAnXDAnOw0KPiArCSAgaWYgKGxpYm5hbWVbMF0gIT0gJ1wwJykNCj4gKwkg ICAgew0KPiArCSAgICAgIGlmICghaGVhZGVyX2RvbmUpDQo+ICsJCXsNCj4gKwkJICAvKiBUZXJt aW5hdGUgYDxsaWJyYXJ5LWxpc3Qtc3ZyNCcuICAqLw0KPiArCQkgIGRvY3VtZW50ICs9ICc+JzsN Cj4gKwkJICBoZWFkZXJfZG9uZSA9IDE7DQo+ICsJCX0NCj4gKw0KPiArCSAgICAgIHN0cmluZ19h cHBlbmRmIChkb2N1bWVudCwgIjxsaWJyYXJ5IG5hbWU9XCIiKTsNCj4gKwkgICAgICB4bWxfZXNj YXBlX3RleHRfYXBwZW5kICgmZG9jdW1lbnQsIChjaGFyICopIGxpYm5hbWUpOw0KPiArCSAgICAg IHN0cmluZ19hcHBlbmRmIChkb2N1bWVudCwgIlwiIGxtPVwiMHglbHhcIiAiDQo+ICsJCQkgICAg ICAibF9hZGRyPVwiMHglbHhcIiBsX2xkPVwiMHglbHhcIi8+IiwNCj4gKwkJCSAgICAgICh1bnNp Z25lZCBsb25nKSBsbV9hZGRyLCAodW5zaWduZWQgbG9uZykgbF9hZGRyLA0KPiArCQkJICAgICAg KHVuc2lnbmVkIGxvbmcpIGxfbGQpOw0KPiArCSAgICB9DQo+ICsJfQ0KPiArDQo+ICsgICAgICBs bV9wcmV2ID0gbG1fYWRkcjsNCj4gKyAgICAgIGxtX2FkZHIgPSBsX25leHQ7DQo+ICsgICAgfQ0K PiArDQo+ICsgIGlmICghaGVhZGVyX2RvbmUpDQo+ICsgICAgew0KPiArICAgICAgLyogRW1wdHkg bGlzdDsgdGVybWluYXRlIGA8bGlicmFyeS1saXN0LXN2cjQnLiAgKi8NCj4gKyAgICAgIGRvY3Vt ZW50ICs9ICIvPiI7DQo+ICsgICAgfQ0KPiArICBlbHNlDQo+ICsgICAgZG9jdW1lbnQgKz0gIjwv bGlicmFyeS1saXN0LXN2cjQ+IjsNCj4gKw0KPiArICBpbnQgZG9jdW1lbnRfbGVuID0gZG9jdW1l bnQubGVuZ3RoICgpOw0KPiArICBpZiAob2Zmc2V0IDwgZG9jdW1lbnRfbGVuKQ0KPiArICAgIGRv Y3VtZW50X2xlbiAtPSBvZmZzZXQ7DQo+ICsgIGVsc2UNCj4gKyAgICBkb2N1bWVudF9sZW4gPSAw Ow0KPiArICBpZiAobGVuID4gZG9jdW1lbnRfbGVuKQ0KPiArICAgIGxlbiA9IGRvY3VtZW50X2xl bjsNCj4gKw0KPiArICBtZW1jcHkgKHJlYWRidWYsIGRvY3VtZW50LmRhdGEgKCkgKyBvZmZzZXQs IGxlbik7DQo+ICsNCj4gKyAgcmV0dXJuIGxlbjsNCj4gK30NCj4gKw0KPiArLyogUmV0dXJuIHRy dWUgaWYgRklMRSBpcyBhIDY0LWJpdCBFTEYgZmlsZSwNCj4gKyAgIGZhbHNlIGlmIHRoZSBmaWxl IGlzIG5vdCBhIDY0LWJpdCBFTEYgZmlsZSwNCj4gKyAgIGFuZCBlcnJvciBpZiB0aGUgZmlsZSBp cyBub3QgYWNjZXNzaWJsZSBvciBkb2Vzbid0IGV4aXN0LiAgKi8NCj4gKw0KPiArc3RhdGljIGJv b2wNCj4gK2VsZl82NF9maWxlX3AgKGNvbnN0IGNoYXIgKmZpbGUpDQo+ICt7DQo+ICsgIGludCBm ZCA9IGdkYjo6aGFuZGxlX2VpbnRyICg6Om9wZW4sIGZpbGUsIE9fUkRPTkxZKTsNCj4gKyAgaWYg KGZkIDwgMCkNCj4gKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgoIm9wZW4iKSk7DQo+ICsNCj4gKyAg RWxmNjRfRWhkciBoZWFkZXI7DQo+ICsgIHNzaXplX3QgcmV0ID0gZ2RiOjpoYW5kbGVfZWludHIg KDo6cmVhZCwgZmQsICZoZWFkZXIsIHNpemVvZiAoaGVhZGVyKSk7DQo+ICsgIGlmIChyZXQgPT0g LTEpDQo+ICsgICAgcGVycm9yX3dpdGhfbmFtZSAoKCJyZWFkIikpOw0KPiArICBnZGI6OmhhbmRs ZV9laW50ciAoOjpjbG9zZSwgZmQpOw0KPiArICBpZiAocmV0ICE9IHNpemVvZiAoaGVhZGVyKSkN Cj4gKyAgICBlcnJvciAoIkNhbm5vdCByZWFkIEVMRiBmaWxlIGhlYWRlcjogJXMiLCBmaWxlKTsN Cj4gKw0KPiArICBpZiAoaGVhZGVyLmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMA0KPiArICAg ICAgfHwgaGVhZGVyLmVfaWRlbnRbRUlfTUFHMV0gIT0gRUxGTUFHMQ0KPiArICAgICAgfHwgaGVh ZGVyLmVfaWRlbnRbRUlfTUFHMl0gIT0gRUxGTUFHMg0KPiArICAgICAgfHwgaGVhZGVyLmVfaWRl bnRbRUlfTUFHM10gIT0gRUxGTUFHMykNCj4gKyAgICBlcnJvciAoIlVucmVjb2duaXplZCBFTEYg ZmlsZSBoZWFkZXI6ICVzIiwgZmlsZSk7DQo+ICsNCj4gKyAgcmV0dXJuIGhlYWRlci5lX2lkZW50 W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzY0Ow0KPiArfQ0KPiArDQo+ICsvKiBDb25zdHJ1Y3QgcVhm ZXI6bGlicmFyaWVzLXN2cjQ6cmVhZCByZXBseS4gICovDQo+ICsNCj4gK2ludA0KPiArbmV0YnNk X3Byb2Nlc3NfdGFyZ2V0OjpxeGZlcl9saWJyYXJpZXNfc3ZyNCAoY29uc3QgY2hhciAqYW5uZXgs DQo+ICsJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqcmVhZGJ1ZiwNCj4gKwkJCQkJICAgICB1bnNp Z25lZCBjb25zdCBjaGFyICp3cml0ZWJ1ZiwNCj4gKwkJCQkJICAgICBDT1JFX0FERFIgb2Zmc2V0 LCBpbnQgbGVuKQ0KPiArew0KPiArICBpZiAod3JpdGVidWYgIT0gbnVsbHB0cikNCj4gKyAgICBy ZXR1cm4gLTI7DQo+ICsgIGlmIChyZWFkYnVmID09IG51bGxwdHIpDQo+ICsgICAgcmV0dXJuIC0x Ow0KPiArDQo+ICsgIHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBjdXJyZW50X3Byb2Nlc3Mg KCk7DQo+ICsgIHBpZF90IHBpZCA9IHByb2MtPnBpZDsNCj4gKyAgYm9vbCBpc19lbGY2NCA9IGVs Zl82NF9maWxlX3AgKG5ldGJzZF9uYXQ6OnBpZF90b19leGVjX2ZpbGUgKHBpZCkpOw0KPiArDQo+ ICsgIGlmIChpc19lbGY2NCkNCj4gKyAgICByZXR1cm4gbmV0YnNkX3F4ZmVyX2xpYnJhcmllc19z dnI0PGludDY0X3Q+ICh0aGlzLCBwaWQsIGFubmV4LCByZWFkYnVmLA0KPiArCQkJCQkJIHdyaXRl YnVmLCBvZmZzZXQsIGxlbik7DQo+ICsgIGVsc2UNCj4gKyAgICByZXR1cm4gbmV0YnNkX3F4ZmVy X2xpYnJhcmllc19zdnI0PGludDMyX3Q+ICh0aGlzLCBwaWQsIGFubmV4LCByZWFkYnVmLA0KPiAr CQkJCQkJIHdyaXRlYnVmLCBvZmZzZXQsIGxlbik7DQo+ICt9DQo+ICsNCj4gKy8qIEltcGxlbWVu dCB0aGUgc3VwcG9ydHNfcXhmZXJfbGlicmFyaWVzX3N2cjQgdGFyZ2V0X29wcyBtZXRob2QuICAq Lw0KPiArDQo+ICtib29sDQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBvcnRzX3F4ZmVy X2xpYnJhcmllc19zdnI0ICgpDQo+ICt7DQo+ICsgIHJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ ICsvKiBSZXR1cm4gdGhlIG5hbWUgb2YgYSBmaWxlIHRoYXQgY2FuIGJlIG9wZW5lZCB0byBnZXQg dGhlIHN5bWJvbHMgZm9yDQo+ICsgICB0aGUgY2hpbGQgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IFBJ RC4gICovDQo+ICsNCj4gK2NoYXIgKg0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0OjpwaWRfdG9f ZXhlY19maWxlIChwaWRfdCBwaWQpDQo+ICt7DQo+ICsgIHJldHVybiBuZXRic2RfbmF0OjpwaWRf dG9fZXhlY19maWxlIChwaWQpOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnRhdGlvbiBvZiB0 aGUgdGFyZ2V0X29wcyBtZXRob2QgInN1cHBvcnRzX3BpZF90b19leGVjX2ZpbGUiLiAgKi8NCj4g Kw0KPiArYm9vbA0KPiArbmV0YnNkX3Byb2Nlc3NfdGFyZ2V0OjpzdXBwb3J0c19waWRfdG9fZXhl Y19maWxlICgpDQo+ICt7DQo+ICsgIHJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBs ZW1lbnRhdGlvbiBvZiB0aGUgdGFyZ2V0X29wcyBtZXRob2QgInN1cHBvcnRzX2hhcmR3YXJlX3Np bmdsZV9zdGVwIi4gICovDQo+ICtib29sDQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnN1cHBv cnRzX2hhcmR3YXJlX3NpbmdsZV9zdGVwICgpDQo+ICt7DQo+ICsgIHJldHVybiB0cnVlOw0KPiAr fQ0KPiArDQo+ICsvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGFyZ2V0X29wcyBtZXRob2QgInN3 X2JyZWFrcG9pbnRfZnJvbV9raW5kIi4gICovDQo+ICsNCj4gK2NvbnN0IGdkYl9ieXRlICoNCj4g K25ldGJzZF9wcm9jZXNzX3RhcmdldDo6c3dfYnJlYWtwb2ludF9mcm9tX2tpbmQgKGludCBraW5k LCBpbnQgKnNpemUpDQo+ICt7DQo+ICsgIHN0YXRpYyBnZGJfYnl0ZSBicmtwdFtQVFJBQ0VfQlJF QUtQT0lOVF9TSVpFXTsNCj4gKw0KPiArICAqc2l6ZSA9IFBUUkFDRV9CUkVBS1BPSU5UX1NJWkU7 DQo+ICsNCj4gKyAgbWVtY3B5IChicmtwdCwgUFRSQUNFX0JSRUFLUE9JTlQsIFBUUkFDRV9CUkVB S1BPSU5UX1NJWkUpOw0KDQpJcyB0aGVyZSBhIG5lZWQgdG8gbWVtY3B5IGVhY2ggdGltZSB0aGUg ZnVuY3Rpb24gaXMgY2FsbGVkPw0KDQo+ICsNCj4gKyAgcmV0dXJuIGJya3B0Ow0KPiArfQ0KPiAr DQo+ICsvKiBJbXBsZW1lbnQgdGhlIHRocmVhZF9uYW1lIHRhcmdldF9vcHMgbWV0aG9kLiAgKi8N Cj4gKw0KPiArY29uc3QgY2hhciAqDQo+ICtuZXRic2RfcHJvY2Vzc190YXJnZXQ6OnRocmVhZF9u YW1lIChwdGlkX3QgcHRpZCkNCj4gK3sNCj4gKyAgcmV0dXJuIG5ldGJzZF9uYXQ6OnRocmVhZF9u YW1lIChwdGlkKTsNCj4gK30NCj4gKw0KPiArLyogSW1wbGVtZW50IHRoZSBzdXBwb3J0c19jYXRj aF9zeXNjYWxsIHRhcmdldF9vcHMgbWV0aG9kLiAgKi8NCj4gKw0KPiArYm9vbA0KPiArbmV0YnNk X3Byb2Nlc3NfdGFyZ2V0OjpzdXBwb3J0c19jYXRjaF9zeXNjYWxsICgpDQo+ICt7DQo+ICsgIHJl dHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBJbXBsZW1lbnQgdGhlIHN1cHBvcnRzX3JlYWRf YXV4diB0YXJnZXRfb3BzIG1ldGhvZC4gICovDQo+ICsNCj4gK2Jvb2wNCj4gK25ldGJzZF9wcm9j ZXNzX3RhcmdldDo6c3VwcG9ydHNfcmVhZF9hdXh2ICgpDQo+ICt7DQo+ICsgIHJldHVybiB0cnVl Ow0KPiArfQ0KPiArDQo+ICsvKiBUaGUgTmV0QlNEIHRhcmdldCBvcHMgb2JqZWN0LiAgKi8NCj4g Kw0KPiArc3RhdGljIG5ldGJzZF9wcm9jZXNzX3RhcmdldCB0aGVfbmV0YnNkX3RhcmdldDsNCj4g Kw0KPiArdm9pZA0KPiAraW5pdGlhbGl6ZV9sb3cgKCkNCj4gK3sNCj4gKyAgc2V0X3RhcmdldF9v cHMgKCZ0aGVfbmV0YnNkX3RhcmdldCk7DQo+ICsgIHRoZV9sb3dfdGFyZ2V0LmFyY2hfc2V0dXAg KCk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9nZGJzZXJ2ZXIvbmV0YnNkLWxvdy5oIGIvZ2Ric2Vy dmVyL25ldGJzZC1sb3cuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAw MDAwMC4uMmJkNTdjNTE3MjYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9nZGJzZXJ2ZXIvbmV0 YnNkLWxvdy5oDQo+IEBAIC0wLDAgKzEsMTU3IEBADQo+ICsvKiBDb3B5cmlnaHQgKEMpIDIwMjAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQo+ICsNCj4gKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4NCj4gKw0KPiArICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4gKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQo+ ICsgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcg0KPiArICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N Cj4gKw0KPiArICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiArICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiArICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gKw0KPiArICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UNCj4gKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8NCj4gKw0KPiArI2lmbmRlZiBHREJTRVJWRVJfTkVU QlNEX0xPV19IDQo+ICsjZGVmaW5lIEdEQlNFUlZFUl9ORVRCU0RfTE9XX0gNCj4gKw0KPiArc3Ry dWN0IHJlZ2NhY2hlOw0KPiArc3RydWN0IHRhcmdldF9kZXNjOw0KPiArDQo+ICsvKiAgU29tZSBp bmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGdpdmVuIHJlZ2lzdGVyIHNldC4gICAqLw0KPiArDQo+ ICtzdHJ1Y3QgbmV0YnNkX3JlZ3NldF9pbmZvDQo+ICt7DQo+ICsgIC8qIFRoZSBwdHJhY2UgcmVx dWVzdCBuZWVkZWQgdG8gZ2V0L3NldCByZWdpc3RlcnMgb2YgdGhpcyBzZXQuICAqLw0KPiArICBp bnQgZ2V0X3JlcXVlc3QsIHNldF9yZXF1ZXN0Ow0KPiArICAvKiBUaGUgc2l6ZSBvZiB0aGUgcmVn aXN0ZXIgc2V0LiAgKi8NCj4gKyAgaW50IHNpemU7DQo+ICsgIC8qIEZpbGwgdGhlIGJ1ZmZlciBC VUYgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIFJFR0NBQ0hFLiAgKi8NCj4gKyAgdm9p ZCAoKmZpbGxfZnVuY3Rpb24pIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpidWYp Ow0KPiArICAvKiBTdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWUgaW4gQlVGIGluIHRoZSBnaXZlbiBS RUdDQUNIRS4gICovDQo+ICsgIHZvaWQgKCpzdG9yZV9mdW5jdGlvbikgKHN0cnVjdCByZWdjYWNo ZSAqcmVnY2FjaGUsIGNvbnN0IGNoYXIgKmJ1Zik7DQoNCkxlYXZpbmcgb25lIGJsYW5rIGxpbmUg YmV0d2VlbiBlYWNoIGZpZWxkIG1heSBpbXByb3ZlIHJlYWRhYmlsaXR5Lg0KDQo+ICt9Ow0KPiAr DQo+ICsvKiBBIGxpc3Qgb2YgcmVnc2V0cyBmb3IgdGhlIHRhcmdldCBiZWluZyBkZWJ1Z2dlZCwg dGVybWluYXRlZCBieSBhbiBlbnRyeQ0KPiArICAgd2hlcmUgdGhlIHNpemUgaXMgbmVnYXRpdmUu DQo+ICsNCj4gKyAgIFRoaXMgbGlzdCBzaG91bGQgYmUgY3JlYXRlZCBieSB0aGUgdGFyZ2V0LXNw ZWNpZmljIGNvZGUuICAqLw0KPiArDQo+ICtleHRlcm4gc3RydWN0IG5ldGJzZF9yZWdzZXRfaW5m byBuZXRic2RfdGFyZ2V0X3JlZ3NldHNbXTsNCj4gKw0KPiArLyogVGhlIHRhcmdldC1zcGVjaWZp YyBvcGVyYXRpb25zIGZvciBOZXRCU0Qgc3VwcG9ydC4gICovDQo+ICsNCj4gK3N0cnVjdCBuZXRi c2RfdGFyZ2V0X29wcw0KPiArew0KPiArICAvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dXAu ICAqLw0KPiArICB2b2lkICgqYXJjaF9zZXR1cCkgKCk7DQo+ICsNCj4gKyAgLyogSG9vayB0byBz dXBwb3J0IHRhcmdldCBzcGVjaWZpYyBxU3VwcG9ydGVkLiAgKi8NCj4gKyAgdm9pZCAoKnByb2Nl c3NfcXN1cHBvcnRlZCkgKGNoYXIgKiosIGludCBjb3VudCk7DQoNCklzIHRoZSBgcHJvY2Vzc19x c3VwcG9ydGVkYCBmdW5jdGlvbiBjYWxsZWQgYW55d2hlcmU/DQoNCj4gK307DQoNCk5vIHN0cm9u ZyBvcGluaW9uLCBidXQgdGhlIGxvdyB0YXJnZXQgY291bGQgYmUgYSBkZXJpdmVkIGNsYXNzIG9m DQpuZXRic2RfcHJvY2Vzc190YXJnZXQsIGxpa2UgdGhlIGxpbnV4IGxvdyB0YXJnZXRzLg0KDQo+ ICsNCj4gKy8qIFRhcmdldCBvcHMgZGVmaW5pdGlvbnMgZm9yIGEgTmV0QlNEIHRhcmdldC4gICov DQo+ICsNCj4gK2NsYXNzIG5ldGJzZF9wcm9jZXNzX3RhcmdldCA6IHB1YmxpYyBwcm9jZXNzX3N0 cmF0dW1fdGFyZ2V0DQo+ICt7DQo+ICtwdWJsaWM6DQo+ICsNCj4gKyAgaW50IGNyZWF0ZV9pbmZl cmlvciAoY29uc3QgY2hhciAqcHJvZ3JhbSwNCj4gKwkJICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y PGNoYXIgKj4gJnByb2dyYW1fYXJncykgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgdm9pZCBwb3N0X2Ny ZWF0ZV9pbmZlcmlvciAoKSBvdmVycmlkZTsNCj4gKw0KPiArICBpbnQgYXR0YWNoICh1bnNpZ25l ZCBsb25nIHBpZCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgaW50IGtpbGwgKHByb2Nlc3NfaW5mbyAq cHJvYykgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgaW50IGRldGFjaCAocHJvY2Vzc19pbmZvICpwcm9j KSBvdmVycmlkZTsNCj4gKw0KPiArICB2b2lkIG1vdXJuIChwcm9jZXNzX2luZm8gKnByb2MpIG92 ZXJyaWRlOw0KPiArDQo+ICsgIHZvaWQgam9pbiAoaW50IHBpZCkgb3ZlcnJpZGU7DQo+ICsNCj4g KyAgYm9vbCB0aHJlYWRfYWxpdmUgKHB0aWRfdCBwaWQpIG92ZXJyaWRlOw0KPiArDQo+ICsgIHZv aWQgcmVzdW1lICh0aHJlYWRfcmVzdW1lICpyZXN1bWVfaW5mbywgc2l6ZV90IG4pIG92ZXJyaWRl Ow0KPiArDQo+ICsgIHB0aWRfdCB3YWl0IChwdGlkX3QgcHRpZCwgdGFyZ2V0X3dhaXRzdGF0dXMg KnN0YXR1cywNCj4gKwkgICAgICAgaW50IG9wdGlvbnMpIG92ZXJyaWRlOw0KPiArDQo+ICsgIHZv aWQgZmV0Y2hfcmVnaXN0ZXJzIChyZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdubykgb3ZlcnJp ZGU7DQo+ICsNCj4gKyAgdm9pZCBzdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hlICpyZWdjYWNoZSwg aW50IHJlZ25vKSBvdmVycmlkZTsNCj4gKw0KPiArICBpbnQgcmVhZF9tZW1vcnkgKENPUkVfQURE UiBtZW1hZGRyLCB1bnNpZ25lZCBjaGFyICpteWFkZHIsDQo+ICsJCSAgIGludCBsZW4pIG92ZXJy aWRlOw0KPiArDQo+ICsgIGludCB3cml0ZV9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBjb25z dCB1bnNpZ25lZCBjaGFyICpteWFkZHIsDQo+ICsJCSAgICBpbnQgbGVuKSBvdmVycmlkZTsNCj4g Kw0KPiArICB2b2lkIHJlcXVlc3RfaW50ZXJydXB0ICgpIG92ZXJyaWRlOw0KPiArDQo+ICsgIGJv b2wgc3VwcG9ydHNfcmVhZF9hdXh2ICgpIG92ZXJyaWRlOw0KPiArDQo+ICsgIGludCByZWFkX2F1 eHYgKENPUkVfQUREUiBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgKm15YWRkciwNCj4gKwkJIHVuc2ln bmVkIGludCBsZW4pIG92ZXJyaWRlOw0KPiArDQo+ICsgIGJvb2wgc3VwcG9ydHNfaGFyZHdhcmVf c2luZ2xlX3N0ZXAgKCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgY29uc3QgZ2RiX2J5dGUgKnN3X2Jy ZWFrcG9pbnRfZnJvbV9raW5kIChpbnQga2luZCwgaW50ICpzaXplKSBvdmVycmlkZTsNCj4gKw0K PiArICBib29sIHN1cHBvcnRzX3pfcG9pbnRfdHlwZSAoY2hhciB6X3R5cGUpIG92ZXJyaWRlOw0K PiArDQo+ICsgIGludCBpbnNlcnRfcG9pbnQgKGVudW0gcmF3X2JrcHRfdHlwZSB0eXBlLCBDT1JF X0FERFIgYWRkciwNCj4gKwkJICAgIGludCBzaXplLCBzdHJ1Y3QgcmF3X2JyZWFrcG9pbnQgKmJw KSBvdmVycmlkZTsNCj4gKw0KPiArICBpbnQgcmVtb3ZlX3BvaW50IChlbnVtIHJhd19ia3B0X3R5 cGUgdHlwZSwgQ09SRV9BRERSIGFkZHIsDQo+ICsJCSAgICBpbnQgc2l6ZSwgc3RydWN0IHJhd19i cmVha3BvaW50ICpicCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgYm9vbCBzdG9wcGVkX2J5X3N3X2Jy ZWFrcG9pbnQgKCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgYm9vbCBzdXBwb3J0c19xeGZlcl9zaWdp bmZvICgpIG92ZXJyaWRlOw0KPiArDQo+ICsgIGludCBxeGZlcl9zaWdpbmZvIChjb25zdCBjaGFy ICphbm5leCwgdW5zaWduZWQgY2hhciAqcmVhZGJ1ZiwNCj4gKwkJICAgICB1bnNpZ25lZCBjb25z dCBjaGFyICp3cml0ZWJ1ZiwgQ09SRV9BRERSIG9mZnNldCwNCj4gKwkJICAgICBpbnQgbGVuKSBv dmVycmlkZTsNCj4gKw0KPiArICBib29sIHN1cHBvcnRzX3N0b3BwZWRfYnlfc3dfYnJlYWtwb2lu dCAoKSBvdmVycmlkZTsNCj4gKw0KPiArICBib29sIHN1cHBvcnRzX25vbl9zdG9wICgpIG92ZXJy aWRlOw0KPiArDQo+ICsgIGJvb2wgc3VwcG9ydHNfbXVsdGlfcHJvY2VzcyAoKSBvdmVycmlkZTsN Cj4gKw0KPiArICBib29sIHN1cHBvcnRzX2ZvcmtfZXZlbnRzICgpIG92ZXJyaWRlOw0KPiArDQo+ ICsgIGJvb2wgc3VwcG9ydHNfdmZvcmtfZXZlbnRzICgpIG92ZXJyaWRlOw0KPiArDQo+ICsgIGJv b2wgc3VwcG9ydHNfZXhlY19ldmVudHMgKCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgYm9vbCBzdXBw b3J0c19kaXNhYmxlX3JhbmRvbWl6YXRpb24gKCkgb3ZlcnJpZGU7DQo+ICsNCj4gKyAgYm9vbCBz dXBwb3J0c19xeGZlcl9saWJyYXJpZXNfc3ZyNCAoKSBvdmVycmlkZTsNCj4gKw0KPiArICBpbnQg cXhmZXJfbGlicmFyaWVzX3N2cjQgKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBjaGFyKiwgY29uc3Qg dW5zaWduZWQgY2hhciosDQo+ICsJCQkgICAgQ09SRV9BRERSLCBpbnQpIG92ZXJyaWRlOw0KPiAr DQo+ICsgIGJvb2wgc3VwcG9ydHNfcGlkX3RvX2V4ZWNfZmlsZSAoKSBvdmVycmlkZTsNCj4gKw0K PiArICBjaGFyICpwaWRfdG9fZXhlY19maWxlIChpbnQgcGlkKSBvdmVycmlkZTsNCj4gKw0KPiAr ICBjb25zdCBjaGFyICp0aHJlYWRfbmFtZSAocHRpZF90IHRocmVhZCkgb3ZlcnJpZGU7DQo+ICsN Cj4gKyAgYm9vbCBzdXBwb3J0c19jYXRjaF9zeXNjYWxsICgpIG92ZXJyaWRlOw0KPiArfTsNCj4g Kw0KPiArLyogVGhlIGluZmVyaW9yJ3MgdGFyZ2V0IGRlc2NyaXB0aW9uLiAgVGhpcyBpcyBhIGds b2JhbCBiZWNhdXNlIHRoZQ0KPiArICAgTmV0QlNEIHBvcnRzIHN1cHBvcnQgbmVpdGhlciBiaS1h cmNoIG5vciBtdWx0aS1wcm9jZXNzLiAgKi8NCg0KVGhlICJub3IgbXVsdGktcHJvY2VzcyIgcGFy dCBvZiB0aGlzIGNvbW1lbnQgaXMgY29uZnVzaW5nLiAgV2hhdCBkb2VzIHRoZSBtdWx0aS1wcm9j ZXNzDQpmZWF0dXJlIGhhdmUgdG8gZG8gd2l0aCB0aGVfbG93X3RhcmdldD8gIEFuZCBuZXRic2Rf cHJvY2Vzc190YXJnZXQgd2FzIGRlZmluZWQgdG8NCnN1cHBvcnQgbXVsdGktcHJvY2VzcyBhYm92 ZSBpbiB0aGUgLmNjIGZpbGUuDQoNCj4gKw0KPiArZXh0ZXJuIHN0cnVjdCBuZXRic2RfdGFyZ2V0 X29wcyB0aGVfbG93X3RhcmdldDsNCj4gKw0KPiArLyogWFhYOiBtdWx0aWxpYiAqLw0KPiArZXh0 ZXJuIGNvbnN0IHN0cnVjdCB0YXJnZXRfZGVzYyAqbmV0YnNkX3RkZXNjOw0KPiArDQo+ICsjZW5k aWYgLyogR0RCU0VSVkVSX05FVEJTRF9MT1dfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2Ric2VydmVy L25ldGJzZC14ODZfNjQtbG93LmNjIGIvZ2Ric2VydmVyL25ldGJzZC14ODZfNjQtbG93LmNjDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwLi5jODY3OWQ5ZjE1Mw0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2dkYnNlcnZlci9uZXRic2QteDg2XzY0LWxvdy5jYw0K PiBAQCAtMCwwICsxLDI1MCBAQA0KPiArLyogQ29weXJpZ2h0IChDKSAyMDIwIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLg0KPiArDQo+ICsgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIu DQo+ICsNCj4gKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo+ICsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KPiArICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3INCj4gKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ICsNCj4gKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLA0KPiArICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsNCj4gKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+ICsgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCj4gKyNpbmNs dWRlIDxzeXMvcHRyYWNlLmg+DQo+ICsjaW5jbHVkZSA8bGltaXRzLmg+DQo+ICsNCj4gKyNpbmNs dWRlICJzZXJ2ZXIuaCINCj4gKyNpbmNsdWRlICJuZXRic2QtbG93LmgiDQo+ICsjaW5jbHVkZSAi Z2Ric3VwcG9ydC94ODYteHN0YXRlLmgiDQo+ICsjaW5jbHVkZSAiYXJjaC9hbWQ2NC5oIg0KPiAr I2luY2x1ZGUgIng4Ni10ZGVzYy5oIg0KPiArI2luY2x1ZGUgInRkZXNjLmgiDQo+ICsNCj4gK3N0 YXRpYyBpbnQgdXNlX3htbDsNCj4gKw0KPiArLyogVGhlIGluZGV4IG9mIHZhcmlvdXMgcmVnaXN0 ZXJzIGluc2lkZSB0aGUgcmVnY2FjaGUuICAqLw0KPiArDQo+ICtlbnVtIG5ldGJzZF94ODZfNjRf Z2RiX3JlZ251bQ0KPiArew0KPiArICBBTUQ2NF9SQVhfUkVHTlVNLAkgICAgIC8qICVyYXggKi8N Cj4gKyAgQU1ENjRfUkJYX1JFR05VTSwJICAgICAvKiAlcmJ4ICovDQo+ICsgIEFNRDY0X1JDWF9S RUdOVU0sCSAgICAgLyogJXJjeCAqLw0KPiArICBBTUQ2NF9SRFhfUkVHTlVNLAkgICAgIC8qICVy ZHggKi8NCj4gKyAgQU1ENjRfUlNJX1JFR05VTSwJICAgICAvKiAlcnNpICovDQo+ICsgIEFNRDY0 X1JESV9SRUdOVU0sCSAgICAgLyogJXJkaSAqLw0KPiArICBBTUQ2NF9SQlBfUkVHTlVNLAkgICAg IC8qICVyYnAgKi8NCj4gKyAgQU1ENjRfUlNQX1JFR05VTSwJICAgICAvKiAlcnNwICovDQo+ICsg IEFNRDY0X1I4X1JFR05VTSwJICAgICAgLyogJXI4ICovDQo+ICsgIEFNRDY0X1I5X1JFR05VTSwJ ICAgICAgLyogJXI5ICovDQo+ICsgIEFNRDY0X1IxMF9SRUdOVU0sCSAgICAgLyogJXIxMCAqLw0K PiArICBBTUQ2NF9SMTFfUkVHTlVNLAkgICAgIC8qICVyMTEgKi8NCj4gKyAgQU1ENjRfUjEyX1JF R05VTSwJICAgICAvKiAlcjEyICovDQo+ICsgIEFNRDY0X1IxM19SRUdOVU0sCSAgICAgLyogJXIx MyAqLw0KPiArICBBTUQ2NF9SMTRfUkVHTlVNLAkgICAgIC8qICVyMTQgKi8NCj4gKyAgQU1ENjRf UjE1X1JFR05VTSwJICAgICAvKiAlcjE1ICovDQo+ICsgIEFNRDY0X1JJUF9SRUdOVU0sCSAgICAg LyogJXJpcCAqLw0KPiArICBBTUQ2NF9FRkxBR1NfUkVHTlVNLAkgIC8qICVlZmxhZ3MgKi8NCj4g KyAgQU1ENjRfQ1NfUkVHTlVNLAkgICAgICAvKiAlY3MgKi8NCj4gKyAgQU1ENjRfU1NfUkVHTlVN LAkgICAgICAvKiAlc3MgKi8NCj4gKyAgQU1ENjRfRFNfUkVHTlVNLAkgICAgICAvKiAlZHMgKi8N Cj4gKyAgQU1ENjRfRVNfUkVHTlVNLAkgICAgICAvKiAlZXMgKi8NCj4gKyAgQU1ENjRfRlNfUkVH TlVNLAkgICAgICAvKiAlZnMgKi8NCj4gKyAgQU1ENjRfR1NfUkVHTlVNLAkgICAgICAvKiAlZ3Mg Ki8NCj4gKyAgQU1ENjRfU1QwX1JFR05VTSA9IDI0LCAgICAgLyogJXN0MCAqLw0KPiArICBBTUQ2 NF9TVDFfUkVHTlVNLAkgICAgIC8qICVzdDEgKi8NCj4gKyAgQU1ENjRfRkNUUkxfUkVHTlVNID0g QU1ENjRfU1QwX1JFR05VTSArIDgsDQo+ICsgIEFNRDY0X0ZTVEFUX1JFR05VTSA9IEFNRDY0X1NU MF9SRUdOVU0gKyA5LA0KPiArICBBTUQ2NF9GVEFHX1JFR05VTSA9IEFNRDY0X1NUMF9SRUdOVU0g KyAxMCwNCj4gKyAgQU1ENjRfWE1NMF9SRUdOVU0gPSA0MCwgICAvKiAleG1tMCAqLw0KPiArICBB TUQ2NF9YTU0xX1JFR05VTSwJICAgIC8qICV4bW0xICovDQo+ICsgIEFNRDY0X01YQ1NSX1JFR05V TSA9IEFNRDY0X1hNTTBfUkVHTlVNICsgMTYsDQo+ICsgIEFNRDY0X1lNTTBIX1JFR05VTSwJICAg LyogJXltbTBoICovDQo+ICsgIEFNRDY0X1lNTTE1SF9SRUdOVU0gPSBBTUQ2NF9ZTU0wSF9SRUdO VU0gKyAxNSwNCj4gKyAgQU1ENjRfQk5EMFJfUkVHTlVNID0gQU1ENjRfWU1NMTVIX1JFR05VTSAr IDEsDQo+ICsgIEFNRDY0X0JORDNSX1JFR05VTSA9IEFNRDY0X0JORDBSX1JFR05VTSArIDMsDQo+ ICsgIEFNRDY0X0JORENGR1VfUkVHTlVNLA0KPiArICBBTUQ2NF9CTkRTVEFUVVNfUkVHTlVNLA0K PiArICBBTUQ2NF9YTU0xNl9SRUdOVU0sDQo+ICsgIEFNRDY0X1hNTTMxX1JFR05VTSA9IEFNRDY0 X1hNTTE2X1JFR05VTSArIDE1LA0KPiArICBBTUQ2NF9ZTU0xNkhfUkVHTlVNLA0KPiArICBBTUQ2 NF9ZTU0zMUhfUkVHTlVNID0gQU1ENjRfWU1NMTZIX1JFR05VTSArIDE1LA0KPiArICBBTUQ2NF9L MF9SRUdOVU0sDQo+ICsgIEFNRDY0X0s3X1JFR05VTSA9IEFNRDY0X0swX1JFR05VTSArIDcsDQo+ ICsgIEFNRDY0X1pNTTBIX1JFR05VTSwNCj4gKyAgQU1ENjRfWk1NMzFIX1JFR05VTSA9IEFNRDY0 X1pNTTBIX1JFR05VTSArIDMxLA0KPiArICBBTUQ2NF9QS1JVX1JFR05VTSwNCj4gKyAgQU1ENjRf RlNCQVNFX1JFR05VTSwNCj4gKyAgQU1ENjRfR1NCQVNFX1JFR05VTQ0KPiArfTsNCj4gKw0KPiAr LyogVGhlIGZpbGxfZnVuY3Rpb24gZm9yIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0 LiAgKi8NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK25ldGJzZF94ODZfNjRfZmlsbF9ncmVnc2V0 IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpidWYpDQo+ICt7DQo+ICsgIHN0cnVj dCByZWcgKnIgPSAoc3RydWN0IHJlZyAqKWJ1ZjsNCg0KU3BhY2UgYWZ0ZXIgJyknLg0KDQo+ICsN Cj4gKyNkZWZpbmUgbmV0YnNkX3g4Nl82NF9jb2xsZWN0X2dwKHJlZ251bSwgZmxkKSBkbyB7CQlc DQo+ICsgICAgY29sbGVjdF9yZWdpc3RlciAocmVnY2FjaGUsIHJlZ251bSwgJnItPnJlZ3NbX1JF R18jI2ZsZF0pOwlcDQo+ICsgIH0gd2hpbGUgKDApDQo+ICsNCj4gKyAgbmV0YnNkX3g4Nl82NF9j b2xsZWN0X2dwIChBTUQ2NF9SQVhfUkVHTlVNLCBSQVgpOw0KPiArICBuZXRic2RfeDg2XzY0X2Nv bGxlY3RfZ3AgKEFNRDY0X1JCWF9SRUdOVU0sIFJCWCk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29s bGVjdF9ncCAoQU1ENjRfUkNYX1JFR05VTSwgUkNYKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9jb2xs ZWN0X2dwIChBTUQ2NF9SRFhfUkVHTlVNLCBSRFgpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxl Y3RfZ3AgKEFNRDY0X1JTSV9SRUdOVU0sIFJTSSk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVj dF9ncCAoQU1ENjRfUkRJX1JFR05VTSwgUkRJKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9jb2xsZWN0 X2dwIChBTUQ2NF9SQlBfUkVHTlVNLCBSQlApOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3Rf Z3AgKEFNRDY0X1JTUF9SRUdOVU0sIFJTUCk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVjdF9n cCAoQU1ENjRfUjhfUkVHTlVNLCBSOCk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVjdF9ncCAo QU1ENjRfUjlfUkVHTlVNLCBSOSk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVjdF9ncCAoQU1E NjRfUjEwX1JFR05VTSwgUjEwKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9jb2xsZWN0X2dwIChBTUQ2 NF9SMTFfUkVHTlVNLCBSMTEpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0 X1IxMl9SRUdOVU0sIFIxMik7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVjdF9ncCAoQU1ENjRf UjEzX1JFR05VTSwgUjEzKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9jb2xsZWN0X2dwIChBTUQ2NF9S MTRfUkVHTlVNLCBSMTQpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X1Ix NV9SRUdOVU0sIFIxNSk7DQo+ICsgIG5ldGJzZF94ODZfNjRfY29sbGVjdF9ncCAoQU1ENjRfUklQ X1JFR05VTSwgUklQKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9jb2xsZWN0X2dwIChBTUQ2NF9FRkxB R1NfUkVHTlVNLCBSRkxBR1MpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0 X0NTX1JFR05VTSwgQ1MpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X1NT X1JFR05VTSwgU1MpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X0RTX1JF R05VTSwgRFMpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X0VTX1JFR05V TSwgRVMpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X0ZTX1JFR05VTSwg RlMpOw0KPiArICBuZXRic2RfeDg2XzY0X2NvbGxlY3RfZ3AgKEFNRDY0X0dTX1JFR05VTSwgR1Mp Ow0KPiArfQ0KPiArDQo+ICsvKiBUaGUgc3RvcmVfZnVuY3Rpb24gZm9yIHRoZSBnZW5lcmFsLXB1 cnBvc2UgcmVnaXN0ZXIgc2V0LiAgKi8NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK25ldGJzZF94 ODZfNjRfc3RvcmVfZ3JlZ3NldCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY29uc3QgY2hh ciAqYnVmKQ0KPiArew0KPiArICBzdHJ1Y3QgcmVnICpyID0gKHN0cnVjdCByZWcgKilidWY7DQoN ClNwYWNlIGFmdGVyICcpJy4NCg0KPiArDQo+ICsjZGVmaW5lIG5ldGJzZF94ODZfNjRfc3VwcGx5 X2dwKHJlZ251bSwgZmxkKSBkbyB7CQlcDQo+ICsgICAgc3VwcGx5X3JlZ2lzdGVyIChyZWdjYWNo ZSwgcmVnbnVtLCAmci0+cmVnc1tfUkVHXyMjZmxkXSk7CVwNCj4gKyAgfSB3aGlsZSgwKQ0KPiAr DQo+ICsgIG5ldGJzZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2NF9SQVhfUkVHTlVNLCBSQVgpOw0K PiArICBuZXRic2RfeDg2XzY0X3N1cHBseV9ncCAoQU1ENjRfUkJYX1JFR05VTSwgUkJYKTsNCj4g KyAgbmV0YnNkX3g4Nl82NF9zdXBwbHlfZ3AgKEFNRDY0X1JDWF9SRUdOVU0sIFJDWCk7DQo+ICsg IG5ldGJzZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2NF9SRFhfUkVHTlVNLCBSRFgpOw0KPiArICBu ZXRic2RfeDg2XzY0X3N1cHBseV9ncCAoQU1ENjRfUlNJX1JFR05VTSwgUlNJKTsNCj4gKyAgbmV0 YnNkX3g4Nl82NF9zdXBwbHlfZ3AgKEFNRDY0X1JESV9SRUdOVU0sIFJESSk7DQo+ICsgIG5ldGJz ZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2NF9SQlBfUkVHTlVNLCBSQlApOw0KPiArICBuZXRic2Rf eDg2XzY0X3N1cHBseV9ncCAoQU1ENjRfUlNQX1JFR05VTSwgUlNQKTsNCj4gKyAgbmV0YnNkX3g4 Nl82NF9zdXBwbHlfZ3AgKEFNRDY0X1I4X1JFR05VTSwgUjgpOw0KPiArICBuZXRic2RfeDg2XzY0 X3N1cHBseV9ncCAoQU1ENjRfUjlfUkVHTlVNLCBSOSk7DQo+ICsgIG5ldGJzZF94ODZfNjRfc3Vw cGx5X2dwIChBTUQ2NF9SMTBfUkVHTlVNLCBSMTApOw0KPiArICBuZXRic2RfeDg2XzY0X3N1cHBs eV9ncCAoQU1ENjRfUjExX1JFR05VTSwgUjExKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9zdXBwbHlf Z3AgKEFNRDY0X1IxMl9SRUdOVU0sIFIxMik7DQo+ICsgIG5ldGJzZF94ODZfNjRfc3VwcGx5X2dw IChBTUQ2NF9SMTNfUkVHTlVNLCBSMTMpOw0KPiArICBuZXRic2RfeDg2XzY0X3N1cHBseV9ncCAo QU1ENjRfUjE0X1JFR05VTSwgUjE0KTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9zdXBwbHlfZ3AgKEFN RDY0X1IxNV9SRUdOVU0sIFIxNSk7DQo+ICsgIG5ldGJzZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2 NF9SSVBfUkVHTlVNLCBSSVApOw0KPiArICBuZXRic2RfeDg2XzY0X3N1cHBseV9ncCAoQU1ENjRf RUZMQUdTX1JFR05VTSwgUkZMQUdTKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9zdXBwbHlfZ3AgKEFN RDY0X0NTX1JFR05VTSwgQ1MpOw0KPiArICBuZXRic2RfeDg2XzY0X3N1cHBseV9ncCAoQU1ENjRf U1NfUkVHTlVNLCBTUyk7DQo+ICsgIG5ldGJzZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2NF9EU19S RUdOVU0sIERTKTsNCj4gKyAgbmV0YnNkX3g4Nl82NF9zdXBwbHlfZ3AgKEFNRDY0X0VTX1JFR05V TSwgRVMpOw0KPiArICBuZXRic2RfeDg2XzY0X3N1cHBseV9ncCAoQU1ENjRfRlNfUkVHTlVNLCBG Uyk7DQo+ICsgIG5ldGJzZF94ODZfNjRfc3VwcGx5X2dwIChBTUQ2NF9HU19SRUdOVU0sIEdTKTsN Cj4gK30NCj4gKw0KPiArLyogSW1wbGVtZW50cyB0aGUgbmV0YnNkX3RhcmdldF9vcHMuYXJjaF9z ZXR1cCByb3V0aW5lLiAgKi8NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK25ldGJzZF94ODZfNjRf YXJjaF9zZXR1cCAodm9pZCkNCj4gK3sNCj4gKyAgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzYw0K PiArICAgID0gYW1kNjRfY3JlYXRlX3RhcmdldF9kZXNjcmlwdGlvbiAoWDg2X1hTVEFURV9TU0Vf TUFTSywgZmFsc2UsIGZhbHNlLCBmYWxzZSk7DQo+ICsNCj4gKyAgaW5pdF90YXJnZXRfZGVzYyAo dGRlc2MsIGFtZDY0X2V4cGVkaXRlX3JlZ3MpOw0KPiArDQo+ICsgIG5ldGJzZF90ZGVzYyA9IHRk ZXNjOw0KPiArfQ0KPiArDQo+ICsvKiBVcGRhdGUgYWxsIHRoZSB0YXJnZXQgZGVzY3JpcHRpb24g b2YgYWxsIHByb2Nlc3NlczsgYSBuZXcgR0RCDQo+ICsgICBjb25uZWN0ZWQsIGFuZCBpdCBtYXkg b3Igbm90IHN1cHBvcnQgeG1sIHRhcmdldCBkZXNjcmlwdGlvbnMuICAqLw0KPiArDQo+ICtzdGF0 aWMgdm9pZA0KPiAreDg2XzY0X25ldGJzZF91cGRhdGVfeG1sdGFyZ2V0ICh2b2lkKQ0KPiArew0K PiArICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnNhdmVkX3RocmVhZCA9IGN1cnJlbnRfdGhyZWFkOw0K PiArDQo+ICsgIC8qIEJlZm9yZSBjaGFuZ2luZyB0aGUgcmVnaXN0ZXIgY2FjaGUncyBpbnRlcm5h bCBsYXlvdXQsIGZsdXNoIHRoZQ0KPiArICAgICBjb250ZW50cyBvZiB0aGUgY3VycmVudCB2YWxp ZCBjYWNoZXMgYmFjayB0byB0aGUgdGhyZWFkcywgYW5kDQo+ICsgICAgIHJlbGVhc2UgdGhlIGN1 cnJlbnQgcmVnY2FjaGUgb2JqZWN0cy4gICovDQo+ICsgIHJlZ2NhY2hlX3JlbGVhc2UgKCk7DQo+ ICsNCj4gKyAgZm9yX2VhY2hfcHJvY2VzcyAoW10gKHByb2Nlc3NfaW5mbyAqcHJvYykgew0KPiAr CQkgICAgICBpbnQgcGlkID0gcHJvYy0+cGlkOw0KPiArDQo+ICsJCSAgICAgIC8qIExvb2sgdXAg YW55IHRocmVhZCBvZiB0aGlzIHByb2Nlc3MuICAqLw0KPiArCQkgICAgICBjdXJyZW50X3RocmVh ZCA9IGZpbmRfYW55X3RocmVhZF9vZl9waWQgKHBpZCk7DQo+ICsNCj4gKwkJICAgICAgdGhlX2xv d190YXJnZXQuYXJjaF9zZXR1cCAoKTsNCg0KSSBmaW5kIHRoaXMgY29uZnVzaW5nIGJlY2F1c2Ug dGhlIHRhcmdldCBvYmplY3QgaXMgc3VwcG9zZWQgdG8gYmUgYSBzaW5nbGV0b24uDQpXaHkgaXMg aXRzIGFyY2hfc2V0dXAgY2FsbGVkIGZvciBlYWNoIHByb2Nlc3M/DQoNCj4gKwkJICAgIH0pOw0K PiArDQo+ICsgIGN1cnJlbnRfdGhyZWFkID0gc2F2ZWRfdGhyZWFkOw0KPiArfQ0KPiArDQo+ICsv KiBQcm9jZXNzIHFTdXBwb3J0ZWQgcXVlcnksICJ4bWxSZWdpc3RlcnM9Ii4gKi8NCj4gKw0KPiAr c3RhdGljIHZvaWQNCj4gK25ldGJzZF94ODZfNjRfcHJvY2Vzc19xc3VwcG9ydGVkIChjaGFyICoq ZmVhdHVyZXMsIGludCBjb3VudCkNCj4gK3sNCj4gKyAgLyogUmV0dXJuIGlmIGdkYiBkb2Vzbid0 IHN1cHBvcnQgWE1MLiAgSWYgZ2RiIHNlbmRzICJ4bWxSZWdpc3RlcnM9Ig0KPiArICAgICB3aXRo ICJpMzg2IiBpbiBxU3VwcG9ydGVkIHF1ZXJ5LCBpdCBzdXBwb3J0cyB4ODYgWE1MIHRhcmdldA0K PiArICAgICBkZXNjcmlwdGlvbnMuICAqLw0KPiArICB1c2VfeG1sID0gMDsNCj4gKyAgZm9yIChp bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KPiArICAgIHsNCj4gKyAgICAgIGNvbnN0IGNoYXIg KmZlYXR1cmUgPSBmZWF0dXJlc1tpXTsNCj4gKw0KPiArICAgICAgaWYgKHN0YXJ0c3dpdGggKGZl YXR1cmUsICJ4bWxSZWdpc3RlcnM9IikpDQo+ICsJew0KPiArCSAgY2hhciAqY29weSA9IHhzdHJk dXAgKGZlYXR1cmUgKyAxMyk7DQo+ICsJICBjaGFyICpsYXN0Ow0KPiArCSAgY2hhciAqcDsNCj4g Kw0KPiArCSAgZm9yIChwID0gc3RydG9rX3IgKGNvcHksICIsIiwgJmxhc3QpOyBwICE9IE5VTEw7 DQo+ICsJICAgICAgIHAgPSBzdHJ0b2tfciAoTlVMTCwgIiwiLCAmbGFzdCkpDQo+ICsJICAgIHsN Cj4gKwkgICAgICBpZiAoc3RyY21wIChwLCAiaTM4NiIpID09IDApDQo+ICsJCXsNCj4gKwkJICB1 c2VfeG1sID0gMTsNCj4gKwkJICBicmVhazsNCj4gKwkJfQ0KPiArCSAgICB9DQo+ICsNCj4gKwkg IGZyZWUgKGNvcHkpOw0KPiArCX0NCj4gKyAgICB9DQo+ICsgIHg4Nl82NF9uZXRic2RfdXBkYXRl X3htbHRhcmdldCAoKTsNCj4gK30NCj4gKw0KPiArLyogRGVzY3JpcHRpb24gb2YgYWxsIHRoZSB4 ODYtbmV0YnNkIHJlZ2lzdGVyIHNldHMuICAqLw0KPiArDQo+ICtzdHJ1Y3QgbmV0YnNkX3JlZ3Nl dF9pbmZvIG5ldGJzZF90YXJnZXRfcmVnc2V0c1tdID0NCj4gK3sNCj4gKyAvKiBHZW5lcmFsIFB1 cnBvc2UgUmVnaXN0ZXJzLiAgKi8NCj4gKyB7UFRfR0VUUkVHUywgUFRfU0VUUkVHUywgc2l6ZW9m IChzdHJ1Y3QgcmVnKSwNCj4gKyAgbmV0YnNkX3g4Nl82NF9maWxsX2dyZWdzZXQsIG5ldGJzZF94 ODZfNjRfc3RvcmVfZ3JlZ3NldH0sDQo+ICsgLyogRW5kIG9mIGxpc3QgbWFya2VyLiAgKi8NCj4g KyB7MCwgMCwgLTEsIE5VTEwsIE5VTEwgfQ0KPiArfTsNCj4gKw0KPiArLyogVGhlIG5ldGJzZF90 YXJnZXRfb3BzIHZlY3RvciBmb3IgeDg2LW5ldGJzZC4gICovDQo+ICsNCj4gK3N0cnVjdCBuZXRi c2RfdGFyZ2V0X29wcyB0aGVfbG93X3RhcmdldCA9DQo+ICt7DQo+ICsgbmV0YnNkX3g4Nl82NF9h cmNoX3NldHVwLA0KPiArIG5ldGJzZF94ODZfNjRfcHJvY2Vzc19xc3VwcG9ydGVkLA0KPiArfTsN Cj4gLS0NCj4gMi4yOC4wDQoNClJlZ2FyZHMNCi1CYXJpcw0KDQoNCkludGVsIERldXRzY2hsYW5k IEdtYkgKUmVnaXN0ZXJlZCBBZGRyZXNzOiBBbSBDYW1wZW9uIDEwLTEyLCA4NTU3OSBOZXViaWJl cmcsIEdlcm1hbnkKVGVsOiArNDkgODkgOTkgODg1My0wLCB3d3cuaW50ZWwuZGUKTWFuYWdpbmcg RGlyZWN0b3JzOiBDaHJpc3RpbiBFaXNlbnNjaG1pZCwgR2FyeSBLZXJzaGF3CkNoYWlycGVyc29u IG9mIHRoZSBTdXBlcnZpc29yeSBCb2FyZDogTmljb2xlIExhdQpSZWdpc3RlcmVkIE9mZmljZTog TXVuaWNoCkNvbW1lcmNpYWwgUmVnaXN0ZXI6IEFtdHNnZXJpY2h0IE11ZW5jaGVuIEhSQiAxODY5 MjgK