From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: outlook.de, ip: 40.92.64.97, mailfrom: mhaeuser@outlook.de) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (EUR01-DB5-obe.outbound.protection.outlook.com [40.92.64.97]) by groups.io with SMTP; Wed, 25 Sep 2019 01:13:12 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NLBNARSxyYCTBgUqOlLS484Law456p/1JX8+SWW+AZ5TKRGYxbpgGnOXZ6RjlrdWT1IbSsupSQousPJRFRQ6i5J5O54Y05BBl3u8ZPNDQNCykYml7P2v+kPiulwcXpFGHTxOt58F/lrQ4p9FzlLmYeqgXHRxjDKvOYhQHQpHhX+BtXVQxZ1M79U5fb7fiXJOoelMRC/1VLAszHjsY+S1Tm1HgaaihfeRUUaMqXpzCivqfXvoEEFGAzD+5WsCoU2YsrPxErHyNtp4JKPBo6l9x72kf+J6glqzfkkE93Ivw8gczMw7Nqc0hNgqjdA3gyRx/o0a3rlMHbZ3ta04fQeBLg== 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=/wkpHzNGIseB6mlM3KaSVaHbtfg/klihMgttslSKYcE=; b=dbM5Zr8dVlKplYH/MKPaneb76NK3lGISJEOMyzRwgVQlIkx/UPw1oY1y+6hmmP3K4cMZYDbuLvBIXT6YJcEU1EztOKCpGhsexDn76mWLHMk4A1i6+oyxB+dVWOEEtec98v+8hd8qU5C4ShlxmUVPMif8/nlim3GX7M25EeqoE4pl4NDCNDL4p4cLMtCqSWbK6Li8hwFGXND9cysXZwhGDSTdtfpVX//xI6eO92jifXupHs5dKEvYnqtgLBS6qUCmZtYwLA6FlF8wDgV8heiq0ebsn/nEymlmiq5EpHrTQ2CmoamPaPc1/vHqPQ8l7xHt0jzXBkIaEJqhnPUmyPv47Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from VE1EUR01FT029.eop-EUR01.prod.protection.outlook.com (10.152.2.54) by VE1EUR01HT074.eop-EUR01.prod.protection.outlook.com (10.152.2.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2284.25; Wed, 25 Sep 2019 08:13:07 +0000 Received: from HE1PR07MB4394.eurprd07.prod.outlook.com (10.152.2.59) by VE1EUR01FT029.mail.protection.outlook.com (10.152.2.224) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.20 via Frontend Transport; Wed, 25 Sep 2019 08:13:07 +0000 Received: from HE1PR07MB4394.eurprd07.prod.outlook.com ([fe80::e9f4:2c4c:cd3f:86d0]) by HE1PR07MB4394.eurprd07.prod.outlook.com ([fe80::e9f4:2c4c:cd3f:86d0%5]) with mapi id 15.20.2305.013; Wed, 25 Sep 2019 08:13:07 +0000 From: =?UTF-8?B?TWFydmluIEjDpHVzZXI=?= To: "devel@edk2.groups.io" , "lersek@redhat.com" Subject: Re: [edk2-devel] [PATCH 00/35] edk2: clean up the usage of standardized (VOID*) typedefs Thread-Topic: [edk2-devel] [PATCH 00/35] edk2: clean up the usage of standardized (VOID*) typedefs Thread-Index: AQHVbZEQu/NfyPaPW0mI4t538QbUVac5fGEAgAHVGoCAAMWKAA== Date: Wed, 25 Sep 2019 08:13:07 +0000 Message-ID: References: <20190917194935.24322-1-lersek@redhat.com> <06b8b728-e38e-cc64-4499-9733fc993e5d@redhat.com> In-Reply-To: <06b8b728-e38e-cc64-4499-9733fc993e5d@redhat.com> Accept-Language: de-DE, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: PR1PR01CA0032.eurprd01.prod.exchangelabs.com (2603:10a6:102::45) To HE1PR07MB4394.eurprd07.prod.outlook.com (2603:10a6:7:a0::31) x-incomingtopheadermarker: OriginalChecksum:7156B5F7BF6BC3998C09C9821851CED4A57FF1E03B7DBCA095FA78CB21652957;UpperCasedChecksum:04F7C80176B2B8E9BAC8E53A5F51CA015C9C9A55E44633182D7B4ECE190ECFC5;SizeAsReceived:7713;Count:49 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [jTtVeEYDsgpQ+zu9xXIEHvapijHg+G7J] x-microsoft-original-message-id: <7ea96b78-b262-c3bf-ac05-2f57ad51155e@outlook.de> x-ms-publictraffictype: Email x-incomingheadercount: 49 x-eopattributedmessage: 0 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(5050001)(7020095)(20181119205)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(2017031321001)(1601125500)(1603101475)(1701031045);SRVR:VE1EUR01HT074; x-ms-traffictypediagnostic: VE1EUR01HT074: x-ms-exchange-purlcount: 10 x-microsoft-antispam-message-info: Pm6JNklifgmfQSd8f4fkTonpuKkpoqmUJV0yexwBWNHGe+7qo3KoXhUxxivn3IF67jdjV681pjEvpDrQMIi+ipuEjBx+SQqAdJXcj8WSvvI5GVLxMh85eZiqddSn00a0CVi/S4HRphkHUDle2V2QCq4zQ/UVyo3SG2Dx0ZJDnp4SsNRIcMoeIo5oY8t406aKQPLYxOcGLqNyZ56NxO+Ry9BCVs72ua2EPXJI9TgP1PA= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 81f32849-d3a4-4ca5-bd38-08d741903224 X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Sep 2019 08:13:07.3866 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1EUR01HT074 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB5b3VyIGlucHV0Lg0KDQpEdWUgdG8gYSBtaXNjb25jZXB0aW9uIG9mIHVuaW9u IGNhc3RzIChvciBhY2Nlc3NlcywgcmVhbGx5KSwgbXVsdGlwbGUgDQpwb2ludHMgd2VyZSByZW5k ZXJlZCBpbmZlYXNpYmxlLiBJIHN1cHBvc2UgdGhlIG1haW4gcG9pbnQgbGVmdCBJJ2QgbGlrZSAN CnNvbWUgYXR0ZW50aW9uIHRvd2FyZHMgaXMgYWxpZ25tZW50LCBhbmQgb2YgY291cnNlIHRoZSBt aXNkZXNpZ25lZCANCnByb3RvdHlwZXMgKENPTlNUKS4NCg0KQ29tbWVudHMgaW5saW5lLg0KDQpU aGFua3MgYW5kIHJlZ2FyZHMsDQpNYXJ2aW4NCg0KQW0gMjQuMDkuMjAxOSB1bSAyMjoyNiBzY2hy aWViIExhc3psbyBFcnNlazoNCj4gT24gMDkvMjMvMTkgMTg6MjcsIE1hcnZpbiBIw6R1c2VyIHdy b3RlOg0KPj4gR29vZCBkYXksDQo+Pg0KPj4gVGhhbmsgeW91LCBMYXN6bG8sIGZvciB5b3VyIGFt Yml0aW9uIHRvIGludHJvZHVjZSBzdHJpY3RlciBjb2RlIHN0eWxlDQo+PiBlbmZvcmNlbWVudHMu IFNvcnJ5IHRvICJoaWphY2siIHRoZSBhY3R1YWwgdG9waWMgKEkgZGlkIG5vdCBDQyBhbnlvbmUg b24NCj4+IHB1cnBvc2UsIGFzIHRoaXMgaXMgbW9zdGx5IGEgc2VwYXJhdGUgdG9waWMgYW5kIEkn ZCBsaWtlIGEgcXVpY2sgY29tbWVudA0KPj4gZmlyc3QpLCBidXQgdGhpcyBzZWVtcyBsaWtlIGEg Z29vZCBvY2Nhc2lvbiB0byBtZW50aW9uIGFub3RoZXIgZmV3IGJhZA0KPj4gcHJhY3RpY2VzIGVk azIgaGFzIGJlZW4gZm9sbG93aW5nLiBNYWlubHksIEknZCBsaWtlIHRvIGNhbGwgKnNvbWUqDQo+ PiBhdHRlbnRpb24gdG8gcXVhbGl0eSBwcm9ibGVtcyBpbiB0aGUgY29kZSBiYXNlIHdoaWxlIHRo aXMgaGFzIHNvbWUNCj4+IHRyYWN0aW9uLCBhbmQgY2F1c2UgYSBkaXNjdXNzaW9uIG9uIHdoZXRo ZXIgYW5kIGhvdyB0aG9zZSBhcmUgdG8gYmUNCj4+IGFwcHJvYWNoZWQuDQo+Pg0KPj4gVGhhbmsg eW91IGZvciB5b3VyIHRpbWUuDQo+IA0KPiBTdXJlLCBJIGNhbiBvZmZlciBteSBwZXJzb25hbCBv cGluaW9uIG9uIHRoZXNlLg0KPiANCj4gDQo+PiAiaW5hZGVxdWF0ZSB0eXBlIHB1bm5pbmciOg0K Pj4gZS5nLg0KPj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvZmNkZWRh ZmQ5N2M4ZjE4YzMzYTYzZDI2Yjk1NGU1ZGJhZWU4MWEyYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9V c2JCdXNQZWkvSHViUGVpbS5jI0w0NDYNCj4+DQo+PiBUaGlzIGlzIG1vc3RseSBhYm91dCB0aGUg aW5mYW1vdXMgIlN0cmljdCBBbGlhc2luZyIgcnVsZSwgd2hpY2ggaXMNCj4+IGJhc2ljYWxseToN Cj4+ICJBbiBvYmplY3Qgc2hhbGwgaGF2ZSBpdHMgc3RvcmVkIHZhbHVlIGFjY2Vzc2VkIG9ubHkg YnkgYW4gbHZhbHVlDQo+PiBleHByZXNzaW9uIHRoYXQgaGFzIG9uZSBvZiB0aGUNCj4+IGZvbGxv d2luZyB0eXBlczoNCj4+IOKAlCBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBlZmZlY3RpdmUg dHlwZSBvZiB0aGUgb2JqZWN0LA0KPj4g4oCUIGEgcXVhbGlmZWQgdmVyc2lvbiBvZiBhIHR5cGUg Y29tcGF0aWJsZSB3aXRoIHRoZSBlZmZlY3RpdmUgdHlwZSBvZiB0aGUNCj4+IG9iamVjdCwNCj4+ IOKAlCBhIHR5cGUgdGhhdCBpcyB0aGUgc2lnbmVkIG9yIHVuc2lnbmVkIHR5cGUgY29ycmVzcG9u ZGluZyB0byB0aGUNCj4+IGVmZmVjdGl2ZSB0eXBlIG9mIHRoZSBvYmplY3QsDQo+PiDigJQgYSB0 eXBlIHRoYXQgaXMgdGhlIHNpZ25lZCBvciB1bnNpZ25lZCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8g YSBxdWFsaWZlZA0KPj4gdmVyc2lvbiBvZiB0aGUgZWZmZWN0aXZlDQo+PiB0eXBlIG9mIHRoZSBv YmplY3QsDQo+PiDigJQgYW4gYWdncmVnYXRlIG9yIHVuaW9uIHR5cGUgdGhhdCBpbmNsdWRlcyBv bmUgb2YgdGhlIGFmb3JlbWVudGlvbmVkDQo+PiB0eXBlcyBhbW9uZyBpdHMgbWVtYmVycw0KPj4g KGluY2x1ZGluZywgcmVjdXJzaXZlbHksIGEgbWVtYmVyIG9mIGEgc3ViYWdncmVnYXRlIG9yIGNv bnRhaW5lZCB1bmlvbiksIG9yDQo+PiDigJQgYSBjaGFyYWN0ZXIgdHlwZS4iDQo+PiBDMTggKElT Ty9JRUMgOTg5OToyMDE4KSwgNi41LjcgKGV4aXN0cywgdGhvdWdoIGhhcyBiZWVuIHVwZGF0ZWQs IHNpbmNlIEM5MCkNCj4+DQo+PiBDdXJyZW50bHkgb3B0aW1pc2F0aW9ucyBiYXNlZCBvbiB0aGlz IGFyZSBkaXNhYmxlZC4gVGhpcyBpcyBhIGJpdCBuYXN0eQ0KPj4gdG8gd29yayBhcm91bmQgaWYg KnNlcmlvdXNseSogbmVlZGVkIHdoZW4gc3RpY2tpbmcgdG8gQzkwLCBJIGNhbiBvbmx5DQo+PiB0 aGluayBvZiBtZW1jcHkgcmlnaHQgbm93LiBIb3dldmVyLCBldmVuIHRob3VnaCB0aGVyZSBhcmUg Y29tcGlsZXJzIHRoYXQNCj4+IGRvIG5vdCBmdWxseSBzdXBwb3J0IEM5OSAoYWhlbSwgTWljcm9z b2Z0IDopICksIHR5cGUtcHVubmluZyBieSB1bmlvbnMNCj4+IHNob3VsZCBiZSBzdXBwb3J0ZWQg YnkgdGhlbSBhbGwsIGFuZCBoYXMgYmVlbiBsZWdhbCBhcyBvZiBDOTksIHdoZXJlIHRoZQ0KPj4g Zm9sbG93aW5nIHBhcnQgaGFzIGJlZW4gZHJvcHBlZCBmcm9tIHRoZSBzdGFuZGFyZDoNCj4+ICJX aXRoIG9uZSBleGNlcHRpb24sIGlmIGEgbWVtYmVyIG9mIGEgdW5pb24gb2JqZWN0IGlzIGFjY2Vz c2VkIGFmdGVyIGENCj4+IHZhbHVlIGhhcyBiZWVuIHN0b3JlZCBpbiBhIGRpZmZlcmVudCBtZW1i ZXIgb2YgdGhlIG9iamVjdCwgdGhlIGJlaGF2aW9yDQo+PiBpcyBpbXBsZW1lbnRhdGlvbi1kZWZp bmVkLiINCj4+IEM5MCAoSVNPL0lFQyA5ODk5OjE5OTApLCA2LjMuMi4zDQo+IA0KPiBJJ20gb3Bw b3NlZCB0byBlbmZvcmNpbmcgdGhlIHN0cmljdCBhbGlhc2luZyBydWxlcywgZXZlbiB0aG91Z2gg aW4gYWxsDQo+IGNvZGUgdGhhdCBJIHdyaXRlLCBJIGVpdGhlciB0cnkgdG8gY29uZm9ybSB0byB0 aGVtLCBvciBhdCBsZWFzdCBJIHNlZWsNCj4gdG8gYmUgZnVsbHkgY29uc2Npb3VzIG9mIGJyZWFr aW5nIHRoZW0uDQoNCkkgYWdyZWUgd2l0aCB0aGF0LCBidXQgSSBvZnRlbiBzZWUgY29tcGxldGVs eSBuZWVkbGVzcyB2aW9sYXRpb25zIG9mIA0KdGhlbS4gSW4gbXkgb3BpbmlvbiwgYWxsIGludGVu dGlvbmFsIHZpb2xhdGlvbnMgc2hvdWxkIGJlIGRvY3VtZW50ZWQgdG8gDQpzaWduYWwgdGhlIGNv bnNjaW91cyBicmVha2FnZSBvZiB0aGUgc3RhbmRhcmQsIGFzIHNob3VsZCBiZSBhbnkgImFidXNl IiANCm9mIGtub3duIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3VyLiBJIHN1cHBvc2Ug Zm9yIHRoZSBhbW91bnQgb2YgDQppbi1wbGFjZSBwYXJzaW5nIGRvbmUsIHRoZSBTdHJpY3QgQWxp YXNpbmcgcnVsZSBzaG91bGQgYmUgYW4gZXhjZXB0aW9uIA0KZm9yIHRoZXNlIGNhc2VzLCBhcyBw ZXIgdGhlIGFzc3VtcHRpb25zIGJlbG93Lg0KDQo+IA0KPiBIZXJlJ3MgdGhlIHRoaW5nOiBJTU8s IHRoZSBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgc2FjcmlmaWNlIGZsZXhpYmlsaXR5DQo+IGZvciBw ZXJmb3JtYW5jZSAob3B0aW1pemF0aW9uIHBvc3NpYmlsaXRpZXMpLiBOb3QgdG8gbWVudGlvbiB0 aGUgYW1vdW50DQo+IG9mIGNvZGUgaW4gZWRrMiB0aGF0IHdvdWxkIGhhdmUgdG8gYmUgaWRlbnRp ZmllZCBhbmQgdXBkYXRlZC4NCj4gDQo+IEJhc2VUb29scyB1c2VzICItZm5vLXN0cmljdC1hbGlh c2luZyIgZXZlcnl3aGVyZSwgYW5kIEkgdGhpbmsgdGhhdCdzIGENCj4gZ29vZCBjaG9pY2UuDQo+ IA0KPiAgICBodHRwczovL2Jsb2cucmVnZWhyLm9yZy9hcmNoaXZlcy8xMTgwDQo+IA0KPiBUaGlz IHByb3Bvc2FsIGZvciBhICJmcmllbmRseSBkaWFsZWN0IG9mIEMiIGludGVuZGVkIHRvIGVsaW1p bmF0ZSB0aGUNCj4gc3RyaWN0IGFsaWFzaW5nIHJ1bGVzIGFsdG9nZXRoZXIuIChJdGVtIzEwOyBw b3NzaWJseSBhbHNvIGl0ZW0jMTMuKQ0KPiANCj4gQWxzbywgYXMgaXQgcG9pbnRzIG91dCwgdGhl IExpbnV4IGtlcm5lbCBpcyBidWlsdCB3aXRoDQo+ICItZm5vLXN0cmljdC1hbGlhc2luZyIuIEkn dmUgY2hlY2tlZCBub3csIHdpdGggYSAqbG9uZyogc2VyaWVzIG9mICJnaXQNCj4gYmxhbWUiIGNv bW1hbmRzLCBldmVuIGRpZ2dpbmcgaW50byB0aGUgImhpc3RvcnkiIHJlcG9zaXRvcnkgKHdoaWNo IGlzIGF0DQo+IDxnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQv dGdseC9oaXN0b3J5LmdpdD4pLiBJIGNhbg0KPiBzYXkgdGhhdCB0aGUgY3VycmVudCBmbGFnIGhh cyBiZWVuIGluIHBsYWNlIHNpbmNlICphdCBsZWFzdCogTGludXgNCj4gdjIuNS4wICgyMDAyLTAy LTA0KS4NCj4gDQo+IFFFTVUgaGFzIGJlZW4gYnVpbHQgd2l0aCAiLWZuby1zdHJpY3QtYWxpYXNp bmciIGV2ZXIgc2luY2UgY29tbWl0DQo+IGI5MzJjYWJhMzJjNiAoIm5ldyBkaXNrIGltYWdlIGxh eWVyIiwgMjAwNC0wOC0wMSksIGtub3duIG9yaWdpbmFsbHkgYXMNCj4gU1ZOIHJldiAxMDMwLg0K DQpNeSBwb2ludCBoZXJlIGlzIGludmFsaWRhdGVkIHR3byBjb21tZW50cyBiZWxvdy4NCg0KPiAN Cj4gDQo+IENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4gWW91IGhhdmUgYSBkeW5hbWlj YWxseSBhbGxvY2F0ZWQgYnVmZmVyLg0KPiBZb3UgcmVhZCBzb21lIGRhdGEgaW50byBpdCwgZnJv bSB0aGUgbmV0d29yayBvciB0aGUgZGlzaywgdXNpbmcgUENJIERNQS4NCj4gTGV0J3MgYXNzdW1l IHRoYXQsIGZyb20gdGhlIGJsb2NrIHJlYWQgdmlhIFBDSSBETUEsIHRoZSBsaWJyYXJ5DQo+IGZ1 bmN0aW9uKHMpIG9yIHByb3RvY29sIG1lbWJlcihzKSB0aGF0IHlvdSBjYWxsLCBkaXJlY3RseSBv ciBpbmRpcmVjdGx5LA0KPiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdGhhdDoNCj4gLSBjb3BpZXMg ZGF0YSBmcm9tIGEgc291cmNlIGJ1ZmZlciB0byBhIHRhcmdldCBidWZmZXIsIHVzaW5nIFVJTlQz MiBvcg0KPiBVSU5UNjQgYXNzaWdubWVudHMgKGZvciBzcGVlZCksDQoNCkhvbmVzdGx5LCBJIGRp ZCBub3QgY29uc2lkZXIgdGhpcyBhbmQgb25seSBoYWQgbWVtY3B5L21lbW1vdmUgaW4gbWluZC4g DQpIb3dldmVyLCBpZiB3ZSAidmlydHVhbGx5IiB0cmVhdCBDb3B5TWVtIGFzIG1lbW1vdmUsIHRo ZSBjb21waWxlciANCmNvbXBhdGliaWxpdHkgdmVyaWZpY2F0aW9uIHdvdWxkIGJlIHJlZHVjZWQg ZnJvbSBhbGwgY2FsbGVycyB0byBqdXN0IGl0LCANCmkuZS4gQ29weU1lbSBtdXN0IGJlIGltcGxl bWVudGVkIGluIGEgd2F5IHRoYXQsIGZvciBhbGwgc3VwcG9ydGVkIA0KY29tcGlsZXJzLCB3ZSBj YW4gYXNzdW1lIHRoZSBvcmlnaW5hbCBlZmZlY3RpdmUgdHlwZSBpcyAiY2FycmllZCBvdmVyIiwg DQpzdWNoIHdpdGggYXQgd29yc3QgKHdoaWNoIHNob3VsZCBub3QgYmUgcmVxdWlyZWQgd2l0aCBh bnkgc2FuZSBjb21waWxlcikgDQpjaGFyLWNvcHlpbmcuDQoNCkknbSBub3QgbG9va2luZyB0byBo YXZlIGFic29sdXRlIEMgY29tcGxpYW5jZSBlbmZvcmNlZCwgYnV0IHRvIHJlZHVjZSANCnBvaW50 bGVzcyB2aW9sYXRpb25zIGFuZCBwb3NzaWJseSAiY29uY2VudHJhdGUiIHZpb2xhdGlvbnMgZm9y IGVhc2llciANCmNvbXBhdGliaWxpdHkgdmVyaWZpY2F0aW9uLg0KDQo+IC0gYW5kIGlzIGltcGxl bWVudGVkIGluIEMuDQo+IA0KPiBOb3csIGFjY29yZGluZyB0byB0aGUgZWZmZWN0aXZlIHR5cGUg cnVsZXMsIHlvdXIgZHluYW1pYyBidWZmZXIncw0KPiBlZmZlY3RpdmUgdHlwZSBpcyAiYXJyYXkg b2YgVUlOVDMyIiBvciAiYXJyYXkgb2YgVUlOVDY0Ii4gVGhhdCdzIGJlY2F1c2UNCj4gb2YgQzk5 IDYuNSBFeHByZXNzaW9ucywgcDY6DQo+IA0KPiAiSWYgYSB2YWx1ZSBpcyBzdG9yZWQgaW50byBh biBvYmplY3QgaGF2aW5nIG5vIGRlY2xhcmVkIHR5cGUgdGhyb3VnaCBhbg0KPiBsdmFsdWUgaGF2 aW5nIGEgdHlwZSB0aGF0IGlzIG5vdCBhIGNoYXJhY3RlciB0eXBlLCB0aGVuIHRoZSB0eXBlIG9m IHRoZQ0KPiBsdmFsdWUgYmVjb21lcyB0aGUgZWZmZWN0aXZlIHR5cGUgb2YgdGhlIG9iamVjdCBm b3IgdGhhdCBhY2Nlc3MgYW5kIGZvcg0KPiBzdWJzZXF1ZW50IGFjY2Vzc2VzIHRoYXQgZG8gbm90 IG1vZGlmeSB0aGUgc3RvcmVkIHZhbHVlLiINCj4gDQo+IFRoZW4gaWYgeW91IHRyeSB0byBwYXJz ZSB0aGlzIGJ1ZmZlciBhcyBhIFVFRkkgZGV2aWNlIHBhdGggKD0gYSBwYWNrZWQNCj4gc2VxdWVu Y2Ugb2YgZGV2aWNlIHBhdGggbm9kZSBzdHJ1Y3R1cmVzKSwgKklOIFBMQUNFKiwgeW91IHdpbGwg YnJlYWsgdGhlDQo+IGVmZmVjdGl2ZSB0eXBlIHJ1bGVzIG5vIG1hdHRlciB3aGF0LiBCZWNhdXNl LCB5b3Ugd2lsbCBuZWNlc3NhcmlseSBsb29rDQo+IGF0IHRoZSBuZXh0IG5vZGUgaW4gdGhlIGJs b2IgYXMgYW4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIChiZWNhdXNlDQo+IHlvdSdsbCB3YW50 IHRvIGxlYXJuIHRoZSBUeXBlIGFuZCB0aGUgU3ViVHlwZSBmaWVsZHMsIGFuZCB0aGUgTGVuZ3Ro DQo+IGFycmF5IHRvbykuIE5vdGUgdGhhdCBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaXMgYSBz dHJ1Y3R1cmUgd2l0aCBubw0KPiBVSU5UMzIgb3IgVUlOVDY0IG1lbWJlcnMuIEJvb20uDQo+IA0K PiBTbyB5b3UgaGF2ZSB0byByZXNvcnQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhpbmdzOg0K PiANCj4gMS4gRGVmaW5lIGEgdW5pb24gdHlwZSwgYXNzaWduIHRoZSAqZnVsbCB1bmlvbiogZmly c3QNCj4gPGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTkwMTY3 I2MzPiwgYW5kIHRoZW4gY2hlY2sNCj4gdGhlIHVuaW9uIGhlbHBlciB2YXJpYWJsZS4gKEZpcnN0 IHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGVyZSB3YXMgZW5vdWdoDQo+IHJvb20gaW4gdGhlIGJ1ZmZl ciBiZWluZyBwYXJzZWQgZm9yIGEgZnVsbCB1bmlvbi4pDQoNCkkgd2FzIGdvaW5nIHRvIGFyZ3Vl IHRoZSBleGFjdCBzYW1lIHdheSB5b3UgZGlkIGluIHRoYXQgYnVnLCBJIHdhcyBub3QgDQphd2Fy ZSBvZiBHQ0MgdHJlYXRpbmcgdGhpcyBydWxlLCBpbiBteSBvcGluaW9uLCBpbmFwcHJvcHJpYXRl bHkgKHRoZSANCnJlYXNvbmluZyB0aGVyZSBtYWtlcyBzZW5zZSwgYnV0IEknZCBob3BlIHRoZSBj b21taXR0ZWUgd2FzIGFjdHVhbGx5IA0Kc2Vla2luZyB0byBhbGxvdyB0aGlzKS4gQXMgbG9uZyBh cyBubyB3cml0ZXMgYXJlIHBlcmZvcm1lZCB0aHJvdWdoIHRoZSANCnVuaW9uIChiZWNhdXNlIHRo YXQgeWllbGRzIHVuc3BlY2lmaWVkIHZhbHVlcyBmb3IgYWxsIGJ5dGVzIGJldHdlZW4gdGhlIA0K ZW5kIG9mIHRoZSB3cml0dGVuLXRvIG1lbWJlciBhbmQgdGhlIGVuZCBvZiB0aGUgZnVsbCB1bmlv biBzaXplKSwgSSANCndvdWxkIG5vdCBoYXZlIHRob3VnaHQgdGhlcmUnZCBiZSBwcm9ibGVtcyB3 aXRoIHN1Y2ggYSBjYXN0LCBmb3IgdGhlIA0KZXhhY3QgcGFydCB5b3UgcXVvdGVkLiBUaGlzIG1h a2VzIHRoZSBzaXR1YXRpb24gcmlkaWN1bG91cyB0byBoYW5kbGUsIEkgDQphZ3JlZS4NCg0KSSBo b3BlIHRoZXJlIHdpbGwgYmUgc29tZSBzb3J0IG9mIGFkYXB0aW9uIHRoYXQgd2lsbCBhbGxvdyBl eGFjdGx5IHRoaXMgDQppbiB0aGUgZnV0dXJlLCB0aGVuIHRoaXMgc2hvdWxkIGJlIGVuZm9yY2Vk IChpdCBjYW5ub3QgYnJlYWsgbW9yZSB0aGFuIA0KdGhlIGN1cnJlbnQgc29sdXRpb24sIGFuZCBm b3IgZnV0dXJlIHN0YW5kYXJkcyBhbmQgY29tcGx5aW5nIGNvbXBpbGVycywgDQp3b3VsZCBhdm9p ZCBVbmRlZmluZWQgQmVoYXZpb3VyKS4NCg0KPiANCj4gMi4gT3IsIHVzZSBtZW1jcHkoKSAtLSBv ciBzb21ldGhpbmcgdGhhdCB0aGUgY29tcGlsZXIgaXMgc2ltaWxhcmx5DQo+IGVubGlnaHRlbmVk IGFib3V0IC0tLCB0byB0aGUgc2FtZSBoZWxwZXIgdmFyaWFibGUuDQo+IA0KPiAzLiBPciwgd3Jp dGUgYSBtYW51YWwgY29weSBsb29wIHdpdGggY2hhcmFjdGVyIGFjY2VzcywgdG8gdGhlIGhlbHBl cg0KPiB2YXJpYWJsZS4NCj4gDQo+IDQuIE9yLCB1c2UgY2hhcmFjdGVyIGFjY2VzcyB0byByZWFk IHRoZSBmaWVsZHMuDQo+IA0KPiAjMSB0aHJvdWdoICMzIGFkZCBhIHNlcGFyYXRlIGNvcHlpbmcg c3RlcCwgd2hpbGUgIzQgaXMgZXh0cmVtZWx5DQo+IHVuY29tZm9ydGFibGUgdG8gcHJvZ3JhbS4N Cj4gDQo+IEluIGEgbnV0c2hlbGwsIHRoZSBlZmZlY3RpdmUgdHlwZSBydWxlcyByZXF1aXJlIHNl cGFyYXRlDQo+IGRlLXNlcmlhbGl6YXRpb24gcm91dGluZXMgZm9yIGFsbCBkYXRhLCBhbmQgdGhh dCdzIGluY3JlZGlibHkgYW5ub3lpbmcuDQo+IEl0IGtpbGxzIHRoZSB1dGlsaXR5IG9mIHBhY2tl ZCBDIHN0cnVjdHVyZXMuDQo+IA0KPiBJIHByZWZlciBwYWNrZWQgQyBzdHJ1Y3R1cmVzLCBzaXpl IGNoZWNrcyAoISEhKSBhZ2FpbnN0IHRoZSBidWZmZXJzIHRvDQo+IHBhcnNlLCBhbmQgdGhlbiB0 eXBlIHB1bm5pbmcgb2YgcG9pbnRlcnMuDQo+IA0KPiANCj4+ICJwb2ludGVyIHVuaW9ucyI6DQo+ PiBlLmcuDQo+PiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvYmxvYi9mY2RlZGFm ZDk3YzhmMThjMzNhNjNkMjZiOTU0ZTVkYmFlZTgxYTJiL01kZVBrZy9JbmNsdWRlL0luZHVzdHJ5 U3RhbmRhcmQvU21CaW9zLmgjTDI1OTINCj4+DQo+PiBXaGlsZSB0aGUgaWRlYSBiZWhpbmQgdGhl bSBpcyBjZXJ0YWlubHkgc3R5bGUgcHJlZmVyZW5jZSwgdXNpbmcgYSB1bmlvbg0KPj4gb2YgcG9p bnRlcnMgcHJldmVudHMgdHdvIGltcG9ydGFudCB0aGluZ3Mgb3ZlciBhIHVuaW9uIG9mIHN0cnVj dHMuDQo+Pg0KPj4gMSkgQ09OU1QgZGVjbGFyYXRpb246IFdoZW4gZGVmaW5pbmcgYSB2YXJpYWJs ZSBvZiBhIHVuaW9uIHR5cGUNCj4+IGNvbnRhaW5pbmcgcG9pbnRlcnMgYXMgQ09OU1QsIHNwZWFr aW5nIG9mIGl0cyBtZW1iZXJzLCB0aGV5IGFyZSBhbGwNCj4+IGdvaW5nIHRvIGJlIENPTlNUIHBv aW50ZXJzIHRvIGFyYml0cmFyeSBtZW1vcnkgYW5kIG5vdCBhcmJpdHJhcnkNCj4+IHBvaW50ZXJz IHRvIENPTlNUIG1lbW9yeS4gV2l0aCBhIHVuaW9uIG9mIHN0cnVjdHMsIHlvdSBjYW4gaGF2ZSBl aXRoZXINCj4+IGFzIHJlcXVpcmVkIChlLmcuIENPTlNUIFVOSU9OX1RZUEUgKnVuaW9uLCBvciBV TklPTl9UWVBFICpDT1NUIHVuaW9uKS4NCj4gDQo+IEZvcm1hbGx5LCB5b3UgYXJlIHJpZ2h0LCBi dXQgSSdtIGRvdWJ0ZnVsIG9mIHRoZSB1dGlsaXR5IG9mDQo+ICJwb2ludGVyLXRvLXVuaW9uLW9m LXN0cnVjdHMiLiBXZSBjYW5ub3QgZGUtcmVmZXJlbmNlIGEgcG9pbnRlciB0byB0aGUNCj4gdW5p b24gdW5sZXNzIHRoZSBidWZmZXIgaGFzIGVub3VnaCBkYXRhIGZvciB0aGUgY29tcGxldGUgdW5p b24uIFRoaXMNCj4gbGVhdmVzIHRoZSBwYXJzaW5nIG9mIHNtYWxsIHN0cnVjdHMgdW5zb2x2ZWQu DQo+IA0KPiBBIHVuaW9uIG9mIHBvaW50ZXJzIGlzIGp1c3Qgc3ludGFjdGljIHN1Z2FyLCBvZiBj b3Vyc2UsIGJ1dCBpdCdzDQo+IGNvbnZlbmllbnQuIFRoZSBtZW1iZXIgdGhhdCBpcyAicG9pbnRl ci10by1zbWFsbGVzdC1oZWFkZXItc3Vic3RydWN0dXJlIg0KPiBjYW4gYmUgdXNlZCBmb3IgZGV0 ZXJtaW5pbmcgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgdHlwZS4gVGhlbiB3ZSBjYW4NCj4gZGV0ZXJt aW5lIGlmIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoYXQgc3RydWN0dXJlIGluIHRoZSBidWZm ZXIuIFRoZW4NCj4gd2UgY2FuIHVzZSB0aGUgbWF0Y2hpbmcgcG9pbnRlciBtZW1iZXIsIGZvciBh Y2Nlc3NpbmcgdGhhdCBzdHJ1Y3R1cmUuDQo+IA0KPiBGdXJ0aGVybW9yZSwgQ09OU1QgZ2V0cyB0 b28gY29tcGxleCByZWFsbHkgc29vbiwgYW5kIHdlIGhhdmUgdG8gc3RhcnQNCj4gYWRkaW5nIGV4 cGxpY2l0IGNhc3RzLiBNeSBmYXZvcml0ZSBsaW5rIGlzOg0KPiANCj4gICAgaHR0cDovL2MtZmFx LmNvbS9hbnNpL2NvbnN0bWlzbWF0Y2guaHRtbA0KPiANCj4gSSBoYWQgbmV2ZXIgbWV0ICJwb2lu dGVyIHVuaW9ucyIgYmVmb3JlIGVkazIsIGJ1dCBJJ3ZlIGZvdW5kIHRoZW0gcXVpdGUNCj4gY29u dmVuaWVudC4NCj4gDQo+IA0KPj4gMikgV2VsbC1kZWZpbmVkIGhlYWRlciBpbnNwZWN0aW9uOg0K Pj4gImlmIGEgdW5pb24gY29udGFpbnMgc2V2ZXJhbCBzdHJ1Y3R1cmVzIHRoYXQgc2hhcmUgYSBj b21tb24gaW5pdGlhbA0KPj4gc2VxdWVuY2UgWy4uLl0sIGl0IGlzIHBlcm1pdHRlZCB0byBpbnNw ZWN0IHRoZSBjb21tb24gaW5pdGlhbCBwYXJ0IG9mDQo+PiBhbnkgb2YgdGhlbSBhbnl3aGVyZSB0 aGF0IGEgZGVjbGFyYXRpb24gb2YgdGhlIGNvbXBsZXRlZCB0eXBlIG9mIHRoZQ0KPj4gdW5pb24g aXMgdmlzaWJsZSINCj4+IEMxOCAoSVNPL0lFQyA5ODk5OjIwMTgpLCA2LjUuMi4zLjYgKGV4aXN0 cyBzaW5jZSBhdCBsZWFzdCBDOTApDQo+Pg0KPj4gVGhpcyBndWFyYW50ZWUgY2FuIGJlIHVzZWQg dG8gaW5zcGVjdCB0aGUgdHlwZSBkZWZpbmVkIGluIGEgY29tbW9uDQo+PiBoZWFkZXIgKGUuZy4g U01CSU9TX1NUUlVDVFVSRSkgYW5kIHRoZSBwcm9jZXNzIHRoZSB0eXBlLXNwZWNpZmljIGRhdGEg YnkNCj4+IGFjY2Vzc2luZyB0aGUgYXBwcm9waWF0ZSBtZW1iZXIgKGUuZy4gU01CSU9TX1RBQkxF X1RZUEUwKSBsZWdhbGx5Lg0KPiANCj4gVGhpcyBvbmx5IGFwcGxpZXMgKmFmdGVyKiB5b3UgaGF2 ZSBwb3B1bGF0ZWQgdGhlIHVuaW9uIGZvciBpbnNwZWN0aW9uLg0KPiAoT3IgYXQgbGVhc3QgZW5v dWdoIGJ5dGVzIGZvciB0aGUgY29tbW9uIGhlYWRlciB0aGF0IHlvdSdyZSBnb2luZyB0bw0KPiBp bnNwZWN0LikNCj4gDQo+IElmIHlvdSBoYXZlIGEgdW5pb24gY29sbGVjdGluZyB0aHJlZSBzdHJ1 Y3R1cmVzOiA1IGJ5dGVzLCAxOSBieXRlcywgYW5kDQo+IDMyIGJ5dGVzLCBhbmQgeW91IGhhdmUg YSBidWZmZXIgd2l0aCAyNCBieXRlcyBsZWZ0IChzdWdnZXN0aW5nIGEgNSBieXRlDQo+IHN0cnVj dHVyZSBhbmQgYSAxOSBieXRlIHN0cnVjdHVyZSBpbiBpdCwgb3IgdmljZSB2ZXJzYSksIHlvdSBj YW5ub3QNCj4gcG9wdWxhdGUgdGhlIGZ1bGwgdW5pb24gLS0geW91IGRvbid0IGhhdmUgMzIgYnl0 ZXMgbGVmdC4NCj4gDQo+IFNvIGxldCdzIHRoZW4gYXNzdW1lIHRoYXQgdGhlIGNvbW1vbiBoZWFk ZXIgaXMgMiBieXRlcyBsb25nICh3aXRoIDMgdnMuDQo+IDE3IHZzLiAzMCBhZGRpdGlvbmFsIGJ5 dGVzIHJlcXVpcmVkIGluIHRoZSBzcGVjaWZpYyBzdHJ1Y3R1cmVzKS4gRmluZSwNCj4gdGhlbiB5 b3UgcmVhZCAyIGJ5dGVzIGludG8gdGhlIHN0YW5kLWFsb25lIHVuaW9uIGhlbHBlciB2YXJpYWJs ZSwgZm9yDQo+IGluc3BlY3RpbmcgdGhlIGNvbW1vbiBoZWFkZXIuIEJhc2VkIG9uIHRoZSBoZWFk ZXIgaW5zcGVjdGlvbiwgeW91IHRoZW4NCj4gZGVjaWRlIHRvIChhdHRlbXB0IHRvKSByZWFkIDMg bW9yZSBieXRlcywgb3IgMTcgYnl0ZXMsIGNvbnRpbnVpbmcgaW50bw0KPiB0aGUgdW5pb24sIGFu ZCB0aGVuIHBhcnNlIHRoZSBzcGVjaWZpYyAobm93IGNvbXBsZXRlZCkgc3RydWN0dXJlIHRocm91 Z2gNCj4gdGhlIG1hdGNoaW5nIHVuaW9uIG1lbWJlci4gR3JlYXQ/DQo+IA0KPiBOb3QgcmVhbGx5 LiBOb3RpY2UgdGhhdCwgaW4gdGhpcyBwcm9jZXNzLCB5b3UgZGlkbid0IG5lZWQgdGhlIHVuaW9u ICphdA0KPiBhbGwqLiBZb3UgY2FuIHNpbXBseSB1c2Ugc3RhbmRhbG9uZSBzdHJ1Y3R1cmVzLCBh bmQgeW91IG1heSBub3QgZXZlbg0KPiBuZWVkIG1vcmUgc3RhY2sgc3BhY2UuDQo+IA0KPiBDb21w YXJlOg0KPiANCj4gKGkpIHdpdGggYSB1bmlvbjoNCj4gDQo+IGVudW0gVHlwZSB7DQo+ICAgIHR5 cGVfMSwNCj4gICAgdHlwZV8yDQo+IH0NCj4gDQo+IHN0cnVjdCBIIHsNCj4gICAgZW51bSBUeXBl IHQ7DQo+ICAgIC4uLg0KPiB9Ow0KPiANCj4gc3RydWN0IFMxIHsNCj4gICAgc3RydWN0IEggaDsN Cj4gICAgaW50IFMxX2kxOw0KPiB9Ow0KPiANCj4gc3RydWN0IFMyIHsNCj4gICAgc3RydWN0IEgg aDsNCj4gICAgY2hhciBTMl9jOw0KPiAgICBkb3VibGUgUzJfZDsNCj4gfTsNCj4gDQo+IHVuaW9u IFUgew0KPiAgICBTMSBzMTsNCj4gICAgUzIgczI7DQo+IH07DQo+IA0KPiBDb2RlOg0KPiANCj4g dW5pb24gVSB1Ow0KPiBjaGFyIHVuc2lnbmVkICpzcmMgPSBidWZmZXI7DQo+IGNoYXIgdW5zaWdu ZWQgKmRzdCA9ICh2b2lkKikmdTsNCj4gc2l6ZV90IHNwZWNpZmljOw0KPiANCj4gaWYgKHJvb21f bGVmdCA8IHNpemVvZihzdHJ1Y3QgSCkpIHsNCj4gICAgcmV0dXJuIEJBRDsNCj4gfQ0KPiANCj4g bWVtY3B5KGRzdCwgc3JjLCBzaXplb2Yoc3RydWN0IEgpKTsNCj4gZHN0ICs9IHNpemVvZihzdHJ1 Y3QgSCk7DQo+IHNyYyArPSBzaXplb2Yoc3RydWN0IEgpOw0KPiByb29tX2xlZnQgLT0gc2l6ZW9m KHN0cnVjdCBIKTsNCj4gDQo+IHN3aXRjaCAodS5zMS5oLnQpIHsNCj4gICAgY2FzZSB0eXBlXzE6 DQo+ICAgICAgc3BlY2lmaWMgPSBzaXplb2Yoc3RydWN0IFMxKSAtIHNpemVvZihzdHJ1Y3QgSCk7 DQo+ICAgICAgaWYgKHJvb21fbGVmdCA8IHNwZWNpZmljKSB7DQo+ICAgICAgICByZXR1cm4gQkFE Ow0KPiAgICAgIH0NCj4gICAgICBtZW1jcHkoZHN0LCBzcmMsIHNwZWNpZmljKTsNCj4gICAgICBk c3QgKz0gc3BlY2lmaWM7DQo+ICAgICAgc3JjICs9IHNwZWNpZmljOw0KPiAgICAgIHJvb21fbGVm dCAtPSBzcGVjaWZpYzsNCj4gICAgICAvKiBub3cgYWNjZXNzIHUuczEuUzFfaTEgKi8NCj4gICAg ICByZXR1cm4gR09PRDsNCj4gDQo+ICAgIGNhc2UgdHlwZV8yOg0KPiAgICAgIHNwZWNpZmljID0g c2l6ZW9mKHN0cnVjdCBTMikgLSBzaXplb2Yoc3RydWN0IEgpOw0KPiAgICAgIGlmIChyb29tX2xl ZnQgPCBzcGVjaWZpYykgew0KPiAgICAgICAgcmV0dXJuIEJBRDsNCj4gICAgICB9DQo+ICAgICAg bWVtY3B5KGRzdCwgc3JjLCBzcGVjaWZpYyk7DQo+ICAgICAgZHN0ICs9IHNwZWNpZmljOw0KPiAg ICAgIHNyYyArPSBzcGVjaWZpYzsNCj4gICAgICByb29tX2xlZnQgLT0gc3BlY2lmaWM7DQo+ICAg ICAgLyogbm93IGFjY2VzcyB1LnMyLntTMl9jLFMyX2R9ICovDQo+ICAgICAgcmV0dXJuIEdPT0Q7 DQo+IA0KPiAgICBkZWZhdWx0Og0KPiAgICAgIHJldHVybiBCQUQ7DQo+IH0NCj4gDQo+IA0KPiAo aWkpIHdpdGhvdXQgYSB1bmlvbjoNCj4gDQo+IGVudW0gVHlwZSB7DQo+ICAgIHR5cGVfMSwNCj4g ICAgdHlwZV8yDQo+IH0NCj4gDQo+IHN0cnVjdCBIIHsNCj4gICAgZW51bSBUeXBlIHQ7DQo+ICAg IC4uLg0KPiB9Ow0KPiANCj4gLyogbm90ZTogaGVhZGVyIG5vIGxvbmdlciBlbWJlZGRlZCAqLw0K PiBzdHJ1Y3QgUzEgew0KPiAgICBpbnQgUzFfaTE7DQo+IH07DQo+IA0KPiAvKiBub3RlOiBoZWFk ZXIgbm8gbG9uZ2VyIGVtYmVkZGVkICovDQo+IHN0cnVjdCBTMiB7DQo+ICAgIGNoYXIgUzJfYzsN Cj4gICAgZG91YmxlIFMyX2Q7DQo+IH07DQo+IA0KPiBDb2RlOg0KPiANCj4gc3RydWN0IEggaDsg Lyogbm90ZTogbm8gdW5pb24sIGp1c3QgdGhlIGNvbW1vbiBoZWFkZXIgKi8NCj4gY2hhciB1bnNp Z25lZCAqc3JjID0gYnVmZmVyOw0KPiAvKiBub3RlOiBubyBkc3QgcG9pbnRlciBpbnRvIHVuaW9u ICovDQo+IHNpemVfdCBzcGVjaWZpYzsNCj4gDQo+IGlmIChyb29tX2xlZnQgPCBzaXplb2YgaCkg ew0KPiAgICByZXR1cm4gQkFEOw0KPiB9DQo+IA0KPiBtZW1jcHkoJmgsIHNyYywgc2l6ZW9mIGgp Ow0KPiBzcmMgKz0gc2l6ZW9mIGg7DQo+IHJvb21fbGVmdCAtPSBzaXplb2YgaDsNCj4gDQo+IHN3 aXRjaCAoaC50KSB7IC8qIG5vdGU6IG5vIGF3a3dhcmQgcmVmZXJlbmNlIHRvICJ1LnMxIiAqLw0K PiAgICBjYXNlIHR5cGVfMToNCj4gICAgICB7DQo+ICAgICAgICBzdHJ1Y3QgUzEgczE7IC8qIG5v dGU6IG5ldmVyIGNvLWV4aXN0cyB3aXRoICJzMiIgb24gdGhlIHN0YWNrICovDQo+IA0KPiAgICAg ICAgc3BlY2lmaWMgPSBzaXplb2YgczE7IC8qIG5vdGU6IG5vIGF3a3dhcmQgc3VidHJhY3Rpb24g Ki8NCj4gICAgICAgIGlmIChyb29tX2xlZnQgPCBzcGVjaWZpYykgew0KPiAgICAgICAgICByZXR1 cm4gQkFEOw0KPiAgICAgICAgfQ0KPiAgICAgICAgbWVtY3B5KCZzMSwgc3JjLCBzcGVjaWZpYyk7 DQo+ICAgICAgICBzcmMgKz0gc3BlY2lmaWM7DQo+ICAgICAgICByb29tX2xlZnQgLT0gc3BlY2lm aWM7DQo+ICAgICAgICAvKiBub3cgYWNjZXNzIHMxLlMxX2kxICovDQo+ICAgICAgfQ0KPiAgICAg IHJldHVybiBHT09EOw0KPiANCj4gICAgY2FzZSB0eXBlXzI6DQo+ICAgICAgew0KPiAgICAgICAg c3RydWN0IFMyIHMyOyAvKiBub3RlOiBuZXZlciBjby1leGlzdHMgd2l0aCAiczEiIG9uIHRoZSBz dGFjayAqLw0KPiANCj4gICAgICAgIHNwZWNpZmljID0gc2l6ZW9mIHMyOyAvKiBub3RlOiBubyBh d2t3YXJkIHN1YnRyYWN0aW9uICovDQo+ICAgICAgICBpZiAocm9vbV9sZWZ0IDwgc3BlY2lmaWMp IHsNCj4gICAgICAgICAgcmV0dXJuIEJBRDsNCj4gICAgICAgIH0NCj4gICAgICAgIG1lbWNweSgm czIsIHNyYywgc3BlY2lmaWMpOw0KPiAgICAgICAgc3JjICs9IHNwZWNpZmljOw0KPiAgICAgICAg cm9vbV9sZWZ0IC09IHNwZWNpZmljOw0KPiAgICAgICAgLyogbm93IGFjY2VzcyBzMi5TMl9jLCBz Mi5TMl9kICovDQo+ICAgICAgfQ0KPiAgICAgIHJldHVybiBHT09EOw0KPiANCj4gICAgZGVmYXVs dDoNCj4gICAgICByZXR1cm4gQkFEOw0KPiB9DQo+IA0KPiANCj4gVG8gbWUsIChpaSkgaXMgbXVj aCBjbGVhbmVyIHRoYW4gKGkpOyB0aGUgdW5pb24gaXMgbm90IG5lZWRlZC4NCj4gDQo+IE9mIGNv dXJzZSwgSSBmaW5kIHRoZSB0eXBlIHB1bm5pbmcgYXBwcm9hY2ggZXZlbiBiZXR0ZXIgdGhhbiAo aWkpIDopIFNlZQ0KPiBiZWxvdzoNCj4gDQo+IChpaWkpIG5vIHVuaW9uLCB5ZXMgdHlwZSBwdW5u aW5nOg0KPiANCj4gc3RydWN0IEggKmg7DQo+IGNoYXIgdW5zaWduZWQgKnNyYyA9IGJ1ZmZlcjsN Cj4gDQo+IGlmIChyb29tX2xlZnQgPCBzaXplb2YgKmgpIHsNCj4gICAgcmV0dXJuIEJBRDsNCj4g fQ0KPiBoID0gKHN0cnVjdCBIICopc3JjOyAvKiBub3RlOiBubyBjb3B5aW5nICovDQo+IHNyYyAr PSBzaXplb2YgKmg7DQo+IHJvb21fbGVmdCAtPSBzaXplb2YgKmg7DQo+IA0KPiBzd2l0Y2ggKGgt PnQpIHsNCj4gICAgY2FzZSB0eXBlXzE6DQo+ICAgICAgew0KPiAgICAgICAgc3RydWN0IFMxICpz MTsNCj4gDQo+ICAgICAgICBzcGVjaWZpYyA9IHNpemVvZiAqczE7DQo+ICAgICAgICBpZiAocm9v bV9sZWZ0IDwgc3BlY2lmaWMpIHsNCj4gICAgICAgICAgcmV0dXJuIEJBRDsNCj4gICAgICAgIH0N Cj4gICAgICAgIHMxID0gKHN0cnVjdCBTMSAqKXNyYzsgLyogbm90ZTogbm8gY29weWluZyAqLw0K PiAgICAgICAgc3JjICs9IHNwZWNpZmljOw0KPiAgICAgICAgcm9vbV9sZWZ0IC09IHNwZWNpZmlj Ow0KPiAgICAgICAgLyogbm93IGFjY2VzcyBzMS0+UzFfaTEgKi8NCj4gICAgICB9DQo+ICAgICAg cmV0dXJuIEdPT0Q7DQo+IA0KPiBhbmQgc28gb24uDQo+IA0KDQpUaGFua3MgZm9yIHlvdXIgY29t cHJlaGVuc2l2ZSBleGFtcGxlcywgYnV0IHRoYXQgcGFydCB3YXMgd3JpdHRlbiB3aXRoIA0KdGhl IGlkZWEgb2YgY2FzdGluZyB0byBhIHVuaW9uIHBvaW50ZXIgYXMgeW91IG1lbnRpb25lZCBpbiB0 aGUgcHJldmlvdXMgDQpwb2ludCBpbiBtaW5kLiBXaXRob3V0IHN1Y2ggY2FzdHMgYW5kIHN1YnNl cXVlbnQgYWNjZXNzZXMgYmVpbmcgbGVnYWwsIA0KdGhpcyBpcyBub3Qgb2YgYSBsb3Qgb2YgdXNl IGZvciB1cywgSSBhZ3JlZS4NCg0KPiANCj4+IFBsYWluDQo+PiBjYXN0cyBhbmQgInBvaW50ZXIg dW5pb24iIGFjY2Vzc2VzIGFyZSBpbGxlZ2FsIGFzIHBlciB0aGUgImluYWRlcXVhdGUNCj4+IHR5 cGUgcHVubmluZyIgcG9pbnQgYWJvdmUuDQo+Pg0KPj4NCj4+DQo+PiAiY2FzdGluZyBhd2F5IENP TlNUIjoNCj4+IGUuZy4NCj4+IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9ibG9i L2ZjZGVkYWZkOTdjOGYxOGMzM2E2M2QyNmI5NTRlNWRiYWVlODFhMmIvTWRlUGtnL0xpYnJhcnkv QmFzZUlvTGliSW50cmluc2ljL0lvTGliTW1pb0J1ZmZlci5jI0wyMzYNCj4gDQo+IEluIHRoaXMg Y2FzZSwgdGhlIHJlYWwgcHJvYmxlbSBpcyB3aXRoIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUgLw0K PiBzcGVjaWZpY2F0aW9uLCBub3QgdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRp b24gZm9sbG93cyBmcm9tDQo+IHRoZSBwcm9ibGVtYXRpYyBmdW5jdGlvbiBzZW1hbnRpY3MgLS0g aWYgeW91IHRha2UgQnVmZmVyIGFzIChDT05TVCBVSU5UOA0KPiAqKSwgdGhlbiB3aHkgcmV0dXJu IHRoZSBleGFjdCBzYW1lIGJ1ZmZlciBhcyAoVUlOVDggKik/DQoNCkkgYWdyZWUsIHRoZSBwcm90 b3R5cGUgaGFzIGJlZW4gbWlzZGVzaWduZWQuIEkgd2FzIGp1c3QgcmVmZXJyaW5nIHRvIA0Kc3Vj aCAicGF0dGVybnMiIGJlaW5nIGEgcHJvYmxlbSwgbm90IGZyb20gd2hlcmUgdGhleSBhY3R1YWxs eSBvcmlnaW5hdGUuDQoNCj4gDQo+IA0KPj4gVGhpcyBzaG91bGQgYmUgb2J2aW91cyBhcyBVbmRl ZmluZWQgQmVoYXZpb3VyIGJlY2F1c2UgbWVtb3J5IHByZXZpb3VzbHkNCj4+IGd1YXJhbnRlZWQg dG8gYmUgcmVhZC1vbmx5IGlzIHJldHVybmVkIGFzIGEgcG9pbnRlciB0byBtZW1vcnkgdGhhdA0K Pj4gYWxsb3dzIHdyaXRpbmcsDQo+IA0KPiBOb3RlOiB0aGlzIGlzICpwZXIgc2UqIG5vdCB1bmRl ZmluZWQgYmVoYXZpb3IuIENhc3RpbmcgYXdheSBDT05TVA0KPiAoZXhwbGljaXRseSkgaW4gaXRz ZWxmIGlzIE9LLiBXcml0aW5nIHRocm91Z2ggdGhlIHBvaW50ZXIgaXMgYWxzbyBPSw0KPiAqaWYq IHRoZSBwb2ludGVkLXRvIG9iamVjdCB3YXMgbmV2ZXIgZGVmaW5lZCBhcyBDT05TVC4gT3RoZXJ3 aXNlLCB0aGUNCj4gYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBTZWUgQzk5IDYuNy4zIFR5cGUgcXVh bGlmaWVycywgcDU6DQo+IA0KPiAiSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vZGlmeSBhbiBv YmplY3QgZGVmaW5lZCB3aXRoIGENCj4gY29uc3QtcXVhbGlmaWVkIHR5cGUgdGhyb3VnaCB1c2Ug b2YgYW4gbHZhbHVlIHdpdGggbm9uLWNvbnN0LXF1YWxpZmllZA0KPiB0eXBlLCB0aGUgYmVoYXZp b3IgaXMgdW5kZWZpbmVkLiBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVmZXIgdG8gYW4NCj4g b2JqZWN0IGRlZmluZWQgd2l0aCBhIHZvbGF0aWxlLXF1YWxpZmllZCB0eXBlIHRocm91Z2ggdXNl IG9mIGFuIGx2YWx1ZQ0KPiB3aXRoIG5vbi12b2xhdGlsZS1xdWFsaWZpZWQgdHlwZSwgdGhlIGJl aGF2aW9yIGlzIHVuZGVmaW5lZC4iDQo+IA0KPiBJJ3ZlIGNpdGVkIHRoZSBwYXJ0IGFib3V0ICJ2 b2xhdGlsZSIgdG8gaGlnaGxpZ2h0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4NCj4gIm1vZGlmeSIg YW5kICJyZWZlciB0byIuIFdoZW4gY2FzdGluZyBhd2F5IGNvbnN0LCB0aGUgYmVoYXZpb3IgaXMg b25seQ0KPiB1bmRlZmluZWQgaWYgeW91IGFjdHVhbGx5IHRyeSB0byBtb2RpZnkgYW4gb2JqZWN0 IHRoYXQgaXMgYWN0dWFsbHkgY29uc3QuDQo+IA0KPiBpbnQgICAgICAgaSA9IDI7DQo+IGludCBj b25zdCBjaSA9IDM7DQo+IGludCAgICAgICAqcGk7DQo+IGludCBjb25zdCAqcGNpOw0KPiANCj4g cGNpID0gJmk7DQo+IHBpID0gKGludCAqKXBjaTsgLyogZmluZSBpbiBpdHNlbGYsIGJ1dCBub3cg eW91J3JlIG9uIHlvdXIgb3duICovDQo+ICpwaSA9IDM7ICAgICAgICAgLyogZmluZSwgYXMgImki IGlzIG5vdCBkZWZpbmVkIGNvbnN0ICovDQo+IA0KPiBwY2kgPSAmY2k7DQo+IHBpID0gKGludCAq KXBjaTsgLyogZmluZSBpbiBpdHNlbGYsIGJ1dCBub3cgeW91J3JlIG9uIHlvdXIgb3duICovDQo+ IGkgPSAqcGk7ICAgICAgICAgLyogZmluZSwgbm90IG1vZGlmeWluZyAiY2kiICovDQo+ICpwaSA9 IDM7ICAgICAgICAgLyogdW5kZWZpbmVkLCBhcyAiY2kiIGlzIGRlZmluZWQgY29uc3QgKi8NCj4g DQo+IA0KPiBCdXQsIHllcywgdGhlIHBhdHRlcm4gc2VlbiB1bmRlciB0aGUgbGluayBpcyByaXNr eSBwcmFjdGljZS4NCj4gDQo+IA0KPj4gYnV0IGZvciBlYXNpZXIgbG9va3VwLCBoZXJlJ3MgdGhl IHJlbGF0ZWQgcnVsZToNCj4+ICJ0aGUgbGVmdCBvcGVyYW5kIGhhcyBhdG9taWMsIHF1YWxpZmVk LCBvciB1bnF1YWxpZmVkIHBvaW50ZXIgdHlwZSwgYW5kDQo+PiBbLi4uXSB0aGUgdHlwZSBwb2lu dGVkIHRvIGJ5IHRoZSBsZWZ0IGhhcyBhbGwgdGhlIHF1YWxpZmVycyBvZiB0aGUgdHlwZQ0KPj4g cG9pbnRlZCB0byBieSB0aGUgcmlnaHQiDQo+PiBDMTggKElTTy9JRUMgOTg5OToyMDE4KSwgNi41 LjE2LjEgKGV4aXN0cyBzaW5jZSBhdCBsZWFzdCBDOTApDQo+IA0KPiBXaGF0IHlvdSBxdW90ZSBp cyBmcm9tIHRoZSBDb25zdHJhaW50cyBvZiAiU2ltcGxlIGFzc2lnbm1lbnQiLiBMb29rIGF0DQo+ ICI2LjUuNCBDYXN0IG9wZXJhdG9ycyIgYXMgd2VsbCwgcGFyYWdyYXBoIDM6DQo+IA0KPiAiQ29u dmVyc2lvbnMgdGhhdCBpbnZvbHZlIHBvaW50ZXJzLCBvdGhlciB0aGFuIHdoZXJlIHBlcm1pdHRl ZCBieSB0aGUNCj4gY29uc3RyYWludHMgb2YgNi41LjE2LjEsIHNoYWxsIGJlIHNwZWNpZmllZCBi eSBtZWFucyBvZiBhbiBleHBsaWNpdCBjYXN0LiINCj4gDQo+IEluIGJyaWVmLCBjYXN0aW5nIGF3 YXkgY29uc3QgaXMgbm90IGludmFsaWQgaW4gaXRzZWxmOyBpdCBqdXN0IHRocm93cw0KPiBhd2F5 IHByb3RlY3Rpb25zIChkaWFnbm9zdGljcykgdGhhdCB0aGUgY29tcGlsZXIgd291bGQgb3RoZXJ3 aXNlIGJlDQo+IHJlcXVpcmVkIHRvIGVtaXQuIFNvbWV0aW1lcyBpdCdzIHVuYXZvaWRhYmxlLiBJ biBtb3N0IGNhc2VzIHdlIHNob3VsZA0KPiBhdm9pZCBpdC4gVGhhdCBtaWdodCByZXF1aXJlIGZp eGluZyBhIGZldyBmdW5jdGlvbiBwcm90b3R5cGVzLg0KDQpTb3JyeSwgdGhhdCB3YXMgYSBiaXQg cnVzaGVkLCBidXQgdGhlIGFjdHVhbCBwcm9ibGVtIHBlcnNpc3RzLiBJZiANCm5vdGhpbmcgZWxz ZSwgY2FzdGluZyBhd2F5IENPTlNUIGRyYXN0aWNhbGx5IGluY3JlYXNlcyB0aGUgbGlrZWxpbmVz cyBvZiANCm1pc3VzZSBoYXBwZW5pbmcsIGFzIHRoZSBvbmx5IGluZGljYXRvciBmb3IgY29uc3Qt bmVzcyBoYXMgYmVlbiBkcm9wcGVkLg0KDQo+IA0KPiANCj4+ICJzdHJ1Y3RzIHdpdGggdHJhaWxp bmcgMS1sZW5ndGggYXJyYXkiDQo+PiBlLmcuDQo+PiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9j b3JlL2VkazIvYmxvYi9mY2RlZGFmZDk3YzhmMThjMzNhNjNkMjZiOTU0ZTVkYmFlZTgxYTJiL01k ZVBrZy9JbmNsdWRlL0d1aWQvRmlsZUluZm8uaCNMNTENCj4+DQo+PiBUaGlzIGlzIHVuZGVmaW5l ZCBhcyBwZXI6DQo+PiAiVGhlIGJlaGF2aW9yIGlzIHVuZGVmbmVkIGluIHRoZSBmb2xsb3dpbmcg Y2lyY3Vtc3RhbmNlczoNCj4+IFsuLi5dDQo+PiDigJQgQWRkaXRpb24gb3Igc3VidHJhY3Rpb24g b2YgYSBwb2ludGVyIGludG8sIG9yIGp1c3QgYmV5b25kLCBhbiBhcnJheQ0KPj4gb2JqZWN0IGFu ZCBhbiBpbnRlZ2VyIHR5cGUgcHJvZHVjZXMgYSByZXN1bHQgdGhhdCBkb2VzIG5vdCBwb2ludCBp bnRvLA0KPj4gb3IganVzdCBiZXlvbmQsIHRoZSBzYW1lIGFycmF5IG9iamVjdCAoNi41LjYpLg0K Pj4g4oCUIEFkZGl0aW9uIG9yIHN1YnRyYWN0aW9uIG9mIGEgcG9pbnRlciBpbnRvLCBvciBqdXN0 IGJleW9uZCwgYW4gYXJyYXkNCj4+IG9iamVjdCBhbmQgYW4gaW50ZWdlciB0eXBlIHByb2R1Y2Vz IGEgcmVzdWx0IHRoYXQgcG9pbnRzIGp1c3QgYmV5b25kIHRoZQ0KPj4gYXJyYXkgb2JqZWN0IGFu ZCBpcyB1c2VkIGFzIHRoZSBvcGVyYW5kIG9mIGEgdW5hcnkgKiBvcGVyYXRvciB0aGF0IGlzDQo+ PiBldmFsdWF0ZWQgKDYuNS42KS4NCj4+IOKAlCBQb2ludGVycyB0aGF0IGRvIG5vdCBwb2ludCBp bnRvLCBvciBqdXN0IGJleW9uZCwgdGhlIHNhbWUgYXJyYXkgb2JqZWN0DQo+PiBhcmUgc3VidHJh Y3RlZCAoNi41LjYpLiINCj4+IEMxOCAoSVNPL0lFQyA5ODk5OjIwMTgpLCBKLjIgKGV4aXN0cyBz aW5jZSBhdCBsZWFzdCBDOTApDQo+Pg0KPj4gU2FtZSBhcyBhYm92ZSwgd2hpbGUgbm90IGFsbCBj b21waWxlcnMgZnVsbHkgc3VwcG9ydCBDOTksIGZsZXhpYmxlDQo+PiBhcnJheXMgc2hvdWxkIGJl IHN1cHBvcnQgYnkgYWxsIHJlYXNvbmFibHkgbmV3IGNvbXBpbGVycyBhbmQgYWxsb3cgYQ0KPj4g bGVnYWwgZGVjbGFyYXRpb24gYW5kIHVzYWdlIHdoZXJlIHRoaXMgaGFjayBpcyBpbiBwbGFjZS4g QXQgd29yc3QsIGENCj4+IG1hY3JvIGNvdWxkIGJlIHByb3ZpZGVkIHRvIGRlY2xhcmUgYSBbMV0g dnMgYSBbXSBhcnJheSBvbiBkZW1hbmQgYW5kIGENCj4+IHJlcXVpcmVtZW50IGJlIGludHJvZHVj ZWQgdG8gaGF2ZSBhICJTSVpFX09GXyIgbWFjcm8gZm9yIGVhY2ggc3VjaA0KPj4gc3RydWN0LCBi dXQgbXkgcGVyc29uYWwgcHJlZmVyZW5jZSB3b3VsZCBiZSB0byBqdXN0IGVuZm9yY2UgZmxleGli bGUgYXJyYXlzLg0KPiANCj4gWWVzLCBpbiBDOTksIHRoZSBmbGV4aWJsZSBhcnJheSBtZW1iZXIg d2FzIGludHJvZHVjZWQgdG8gcmVwbGFjZSB0aGUNCj4gInN0cnVjdCBoYWNrIiwgd2hpY2ggaGFk IGFsd2F5cyBiZWVuIHVuZGVmaW5lZC4NCj4gDQo+IEl0IHdvdWxkIGJlIG5pY2UgdG8gcmVtb3Zl IGFsbCB0b29sY2hhaW5zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUNCj4gZmxleGlibGUgYXJyYXkg bWVtYmVyLCBhbmQgdGhlbiB0byByZXBsYWNlIGFsbCBzdHJ1Y3QgaGFja3Mgd2l0aCB0aGUNCj4g ZmxleGlibGUgYXJyYXkgbWVtYmVyLiBJIGFncmVlLg0KPiANCj4gVW5mb3J0dW5hdGVseSwgdGhl cmUncyBvbmUgZXh0cmEgZGlmZmljdWx0eSAoYmV5b25kIHRoZSAiZXhwZWN0ZWQiDQo+IHJlZ3Jl c3Npb25zIGluIGFkanVzdGluZyBjb2RlIGZvciB0aGUgZml4ZWQgZWxlbWVudCBhdCBvZmZzZXQg MCk6IHRoZQ0KPiBzdHJ1Y3QgaGFjayBpcyB1c2VkIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBV RUZJIDIuOCBzcGVjLiBTbyB0aGF0DQo+IHdvdWxkIGhhdmUgdG8gYmUgdXBkYXRlZCB0b28uDQoN CkFncmVlZC4gSG93ZXZlciwgSSBzZWUgdmFsdWUgaW4gdXBkYXRpbmcgdGhlIFVFRkkgc3BlY2lm aWNhdGlvbiwgYXMgaXQgDQpzaG91bGQgbWFuZGF0ZSB0aGUgYWJzdHJhY3QtaXNoIGNvbmNlcHQg KHRyYWlsaW5nIGFycmF5IG9mIGEgbGVuZ3RoIG5vdCANCmtub3duIGF0IGNvbXBpbGUgdGltZSks IG5vdCB0aGUgaW1wbGVtZW50YXRpb24gKHN0cnVjdCBoYWNrKSwgd2hpY2ggaW4gDQp0aGlzIGNh c2UgZXZlbiBpcyBhIGxhbmd1YWdlIHN0YW5kYXJkIHZpb2xhdGlvbi4NCg0KPiANCj4gDQo+PiAi TWlzc2luZyBzZWN1cml0eSBjaGVja3MgZm9yIGV4dGVybmFsIGRhdGEiOg0KPj4gZS5nLg0KPj4g aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvZmNkZWRhZmQ5N2M4ZjE4YzMz YTYzZDI2Yjk1NGU1ZGJhZWU4MWEyYi9NZGVQa2cvTGlicmFyeS9CYXNlUGVDb2ZmTGliL0Jhc2VQ ZUNvZmYuYyNMOTQzDQo+Pg0KPj4gVGhlIGdpdmVuIGV4YW1wbGUgbWlzc2VzIGFuIGFsaWdubWVu dCB2ZXJpZmljYXRpb24gb2YgdGhlIHJlc3VsdGluZw0KPj4gcG9pbnRlciAod2hpY2ggdGVjaG5p Y2FsbHkgaGFzIHRvIGJlIHZlcmlmaWVkICpiZWZvcmUqIGNhc3RpbmcpLCBhcw0KPj4gZG9jdW1l bnRlZCBoZXJlOg0KPj4gIlRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaW4gdGhlIGZvbGxvd2lu ZyBjaXJjdW1zdGFuY2VzOg0KPj4gWy4uLl0NCj4+IOKAlCBDb252ZXJzaW9uIGJldHdlZW4gdHdv IHBvaW50ZXIgdHlwZXMgcHJvZHVjZXMgYSByZXN1bHQgdGhhdCBpcw0KPj4gaW5jb3JyZWN0bHkg YWxpZ25lZCAoNi4zLjIuMykuIg0KPj4gQzE4IChJU08vSUVDIDk4OTk6MjAxOCksIEouMiAoZXhp c3RzIHNpbmNlIGF0IGxlYXN0IEM5MCkNCj4gDQo+IEluIEM5OSBhbnl3YXksICI2LjMuMi4zIFBv aW50ZXJzIiwgcGFyYWdyYXBoIDcgd3JpdGVzLA0KPiANCj4gIkEgcG9pbnRlciB0byBhbiBvYmpl Y3Qgb3IgaW5jb21wbGV0ZSB0eXBlIG1heSBiZSBjb252ZXJ0ZWQgdG8gYSBwb2ludGVyDQo+IHRv IGEgZGlmZmVyZW50IG9iamVjdCBvciBpbmNvbXBsZXRlIHR5cGUuIElmIHRoZSByZXN1bHRpbmcg cG9pbnRlciBpcw0KPiBub3QgY29ycmVjdGx5IGFsaWduZWQgWy4uLl0gZm9yIHRoZSBwb2ludGVk LXRvIHR5cGUsIHRoZSBiZWhhdmlvciBpcw0KPiB1bmRlZmluZWQuIFsuLi5dIg0KPiANCj4gSSBm aW5kIHRoaXMgdmVyeSBpbXByYWN0aWNhbCBhbmQgbGltaXRpbmcsIHdoZW4gYWNjZXNzaW5nIFJB TSAobm90DQo+IE1NSU8pLiBJIHByZWZlciBpZiB1bmFsaWduZWQgcG9pbnRlcnMgKGludG8gUkFN KSBqdXN0IHdvcmssIGFsYmVpdCBzbG93LA0KPiBwZXJoYXBzLiBJIGJlbGlldmUgQUFSQ0g2NCBj YW4gYmUgY29uZmlndXJlZCB0byB0cmlwIGEgZmF1bHQgdnMuIHdvcmsNCj4gKGJ1dCBtb3JlIHNs b3dseSkuIE9uIEludGVsLCBpdCBqdXN0IHdvcmtzLg0KDQpPbiBJbnRlbCBpdCBkZXBlbmRzIGFj dHVhbGx5LCBlLmcuIFNTRSBvZnRlbiAoYWx3YXlzPykgbWFuZGF0ZXMgYWxpZ25lZCANCnBvaW50 ZXJzLiBJZiwgaW4gQyBjb2RlLCB5b3UgaWdub3JlIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRz LCB0aGUgDQpjb21waWxlciBpcyB0ZWNobmljYWxseSBhbGxvd2VkIHRvIHBlcmZvcm0gb3B0aW1p emF0aW9ucyB3aXRoIA0KaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gcmVxdWlyZSBhbGlnbmVkIGFkZHJl c3Nlcy4gSSB0aGluayBmb3IgSW50ZWwsIA0KU1NFLWJhc2VkIG9wdGltaXphdGlvbnMgYXJlIGRp c2FibGVkIChmb3IgdGhpcyByZWFzb24/IEknbSBub3Qgc3VyZSksIA0KYnV0IHRoaXMgb25seSBt YWtlcyBsaWZlIHRvdWdoZXIgd2hlbiBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IGNvbXBpbGVycyAN CmFuZCBhcmNoaXRlY3R1cmVzIGhvbmVzdGx5Lg0KDQpBbHNvLCBpbiBjYXNlIG9mIGZpbGUgcGFy c2luZywgaWYgdGhlIGZpbGUgZm9ybWF0IG1hbmRhdGVzIGFsaWdubWVudCBmb3IgDQpjZXJ0YWlu IG9mZnNldHMgKHNlZ21lbnRzLCBzZWN0aW9ucywgc3ViLWhlYWRlcnMpIGFuZCB0aGUgb2Zmc2V0 IGlzIA0KdW5hbGdpbmVkLCBhbiBhbGlnbm1lbnQgdmVyaWZpY2F0aW9uIGFpZHMgYXMgYW4gYWRk aXRpb25hbCBsYXllciBvZiANCmlucHV0IHNhbml0eSB2ZXJpZmljYXRpb24uIEFzIEkgc2VlIGl0 LCB5b3UgZWl0aGVyIGhhdmUgYW4gYWxpZ25lZCANCnN0cnVjdCBhbmQgbWFrZSBzdXJlIHRoZSBw b2ludGVyIGlzIGFsaWduZWQsIG9yIHlvdSBoYXZlIGFuIHVuYWxpZ25lZCANCnN0cnVjdCBhbmQg dGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgb2YgYWNjZXNzaW5nIHRoZSBkYXRhIHVuYWxpZ25lZC4N Cg0KPiANCj4gSSB0aGluayB3ZSBzaG91bGQgYmUgZ2l2ZW4gdGhlIGZyZWVkb20gdG8gImRlZmlu ZSIgdGhlIGJlaGF2aW9yIHRoYXQncw0KPiBsZWZ0IHVuZGVmaW5lZCBpbiB0aGlzIGNhc2UgYnkg dGhlIHN0YW5kYXJkLg0KDQpXaGF0IHdoZW4gZGVhbGluZyB3aXRoIGFuIGFyY2hpdGVjdHVyZSB0 aGF0IGp1c3QgZG9lcyBub3Qgc3VwcG9ydCANCnVuYWxpZ25lZCBhY2Nlc3Nlcz8gSSBzdXBwb3Nl IHRoYXQncyBnb2luZyB0byBiZSB1bmxpa2VseS4NCg0KPiANCj4gDQo+PiBUaGVyZSBhcmUgbW9y ZSBzdWNoIGlzc3VlcyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSwgaW5jbHVkaW5nIG1pc3NpbmcN Cj4+IG92ZXJmbG93IGFuZCAob3IgZmxhd2VkLCBzZWUgYmVmb3JlKSBib3VuZHMgY2hlY2tzLCBo b3dldmVyIEkgY2Fubm90DQo+PiBmaW5kIHN1Y2ggcXVpY2tseS4NCj4+DQo+Pg0KPj4NCj4+ICJz aWduZWQgaW50IEJJVCBkZWZpbml0aW9ucyI6DQo+PiBlLmcuDQo+PiBodHRwczovL2dpdGh1Yi5j b20vdGlhbm9jb3JlL2VkazIvYmxvYi9mY2RlZGFmZDk3YzhmMThjMzNhNjNkMjZiOTU0ZTVkYmFl ZTgxYTJiL01kZVBrZy9JbmNsdWRlL0Jhc2UuaCNMMzQ4DQo+Pg0KPj4gRml4aW5nIHRoaXMgd291 bGQgYmUgcHJvbmUgdG8gcmVncmVzc2lvbnMsIGJ1dCBJJ2QgbGlrZSB0byBhZGQgaXQgZm9yDQo+ PiB0cmFja2luZyBwdXJwb3Nlcy4gUmVsYXRlZCBkaXNjdXNzaW9uIGNhbiBiZSBmb3VuZCBkb3du IHRoZSBjaGFpbiBoZXJlOg0KPj4gaHR0cHM6Ly9saXN0cy4wMS5vcmcvcGlwZXJtYWlsL2VkazIt ZGV2ZWwvMjAxOC1GZWJydWFyeS8wMjE5MTkuaHRtbA0KPiANCj4gSSBhZ3JlZSBhYm91dCB0aGlz LCBpbiB0aGVvcnkuIEknbSBhZnJhaWQgaXQncyBpbXBvc3NpYmxlIHRvIGZpeCBpbg0KPiBwcmFj dGljZSwgZ2l2ZW4gdGhlIGh1Z2UgYW1vdW50cyBvZiBkZXBlbmRlbnQgY29kZSAoZXNwLiBvdXQg b2YgdHJlZSBjb2RlKS4NCg0KRGVmaW5pdGVseS4NCg0KPiANCj4gDQo+IE1vcmUgb3IgbGVzcywg SSdkIHN1bW1hcml6ZSBteSBvcGluaW9uIGFzIGZvbGxvd3M6DQo+IA0KPiAtIHdlIHNob3VsZCB0 cnkgdG8gd3JpdGUgc3VjaCBuZXcgY29kZSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBzdGFuZGFyZCwN Cj4gDQo+IC0gKmV4Y2VwdCogd2hlbiB0aGUgc3RhbmRhcmQgZG9lc24ndCBnaXZlIHVzIGVub3Vn aCBndWFyYW50ZWVzIChpLmUuDQo+IGxlYXZlcyB0aGUgYmVoYXZpb3IgdW5kZWZpbmVkKSB0aGF0 IHdlIG5lZWQgZm9yIGNvbnZlbmllbnQgKmluLXBsYWNlKg0KPiBwYXJzaW5nIChmcm9tIFJBTSku IEludGVnZXIgcmFuZ2UgY2hlY2tzIGFuZCBidWZmZXIgYm91bmRhcnkgY2hlY2tzIGFyZQ0KPiBl eHRyZW1lbHkgaW1wb3J0YW50IGFuZCB3ZSBzaG91bGQgaW1wbGVtZW50IHRob3NlIG1ldGljdWxv dXNseSwgYnV0IG9uY2UNCj4gd2UndmUgbWFkZSBzdXJlIG91ciBhY2Nlc3NlcyBhcmUgaW4gcmFu Z2UsIHRoZSBjb21waWxlciBzaG91bGQganVzdA0KPiBmb2xsb3cgb3VyIHBvaW50ZXJzIHdoZXJl dmVyIHRoZXkgcG9pbnQuIFdlIHNob3VsZCBkcmFnIG91ciB0b29sY2hhaW5zDQo+IGtpY2tpbmcg YW5kIHNjcmVhbWluZyBpbnRvIGEgc3RhdGUgd2hlcmUgdGhleSBidWlsZCB0aGUgc291cmNlIHRo ZSB3YXkNCj4gd2UgbmVlZCwgZm9yICppbi1wbGFjZSogcGFyc2luZyBvZiBSQU0gYnVmZmVycywg dGhyb3VnaCBwYWNrZWQNCj4gc3RydWN0dXJlcy4gQXMgbG9uZyBhcyB0aGUgYXJjaGl0ZWN0dXJl cyB0aGF0IHdlIHRhcmdldCBkb24ndCBwcmV2ZW50IHVzDQo+IGZyb20gaW4tcGxhY2UgcGFyc2lu ZywgdGhlIHRvb2xjaGFpbnMgc2hvdWxkIG5laXRoZXIuDQoNCkFncmVlZC4NCg0KPiANCj4gVGhh bmtzDQo+IExhc3psbw0KPiANCg==