From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Tue, 8 Dec 2015 12:16:00 +0000 Message-ID: <5666CA00.9050508@linux.intel.com> References: <1449131792-10008-1-git-send-email-vinay.belgaumkar@intel.com> <1449575839-22824-1-git-send-email-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id C843F6E1F1 for ; Tue, 8 Dec 2015 04:16:19 -0800 (PST) In-Reply-To: <1449575839-22824-1-git-send-email-michel.thierry@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzEyLzE1IDExOjU3LCBNaWNoZWwgVGhpZXJyeSB3cm90ZToKPiBGcm9tOiBWaW5heSBC ZWxnYXVta2FyIDx2aW5heS5iZWxnYXVta2FyQGludGVsLmNvbT4KPgo+IFRoZXNlIHRlc3RzIGV4 ZXJjaXNlIHRoZSB1c2VycHRyIGlvY3RsIHRvIGNyZWF0ZSBzaGFyZWQgYnVmZmVycwo+IGJldHdl ZW4gQ1BVIGFuZCBHUFUuIFRoZXkgY29udGFpbiBlcnJvciBhbmQgbm9ybWFsIHVzYWdlIHNjZW5h cmlvcy4KPiBUaGV5IGFsc28gY29udGFpbiBhIGNvdXBsZSBvZiBzdHJlc3MgdGVzdHMgd2hpY2gg Y29weSBidWZmZXJzIGJldHdlZW4KPiBDUFUgYW5kIEdQVS4gVGhlc2UgdGVzdHMgcmVseSBvbiB0 aGUgc29mdHBpbiBwYXRjaCBpbiBvcmRlciB0byBwaW4gYnVmZmVycwo+IHRvIGEgY2VydGFpbiBW QS4KPgo+IENhdmVhdDogVGhlc2UgdGVzdHMgd2VyZSBkZXNpZ25lZCB0byBydW4gb24gNjQtYml0 IHN5c3RlbS4gRnV0dXJlIHdvcmsKPiBpbmNsdWRlcyBhZGRpbmcgbG9naWMgdG8gZW5zdXJlIHRo ZXNlIHRlc3RzIGNhbiBydW4gb24gMzItYml0IHN5c3RlbXMgd2l0aAo+IFBQR1RUIHN1cHBvcnQu IFNvbWUgdGVzdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZCBmb3IgMzItYml0IHN5c3RlbXMgZm9y IHRoYXQKPiByZWFzb24uCj4KPiB2MjogQWRkZWQgY2MgYW5kIHNpZ25lZC1vZmYtYnkgZmllbGRz Cj4KPiB2MzogRml4ZWQgcmV2aWV3IGNvbW1lbnRzLCBhZGRlZCBoZWxwZXIgZnVuY3Rpb25zLiBS ZW1vdmVkIHVzZXJwdHIgZXJyb3IKPiBzY2VuYXJpb3MgY292ZXJlZCBieSBleGlzdGluZyB1c2Vy cHRyIHRlc3RzLiBNb2RpZmllZCBzdHJlc3MgdGVzdCB0byBoYXZlCj4gMTAwSyBidWZmZXJzLCBp dCBub3cgcnVucyBmb3IgfjMwIG1pbnMsIGNoZWNrcyBldmVyeSBlbGVtZW50IGhhcyBiZWVuIHdy aXR0ZW4KPiB0byBjb3JyZWN0bHksIGFuZCBwaW5zIGJ1ZmZlcnMgYXQgZGlmZmVyZW50IFZNQXMu Cj4KPiB2NDogQ2hhbmdlZCBuYW1lIHRvIGdlbV9zb2Z0cGluCj4KPiB2NTogTW9yZSBmaXhlcy4g UmVtb3ZlZCB0aGUgZmlsZSBiYXNlZCB0ZXN0cywgd2lsbCBtb3ZlIHRoZW0gdG8gdXNlcnB0ciB0 ZXN0cy4KPiBBZGRlZCBhIGZ1bmN0aW9uIHRoYXQgdmFsaWRhdGVzIGFwcHJvcHJpYXRlIFBQR1RU IHN1cHBvcnQgYmVmb3JlIHJ1bm5pbmcgdGVzdHMuCj4gT3B0aW1pemVkIHN0YWNrIHNwYWNlIGFu ZCBtZW1vcnkgZm9vdHByaW50IGluIHN0cmVzcyB0ZXN0LiBSZW1vdmVkIHRoZSBldmljdGlvbgo+ IHRlc3QsIHdpbGwgYWRkIGl0IGJhY2sgYWZ0ZXIgdmVyaWZ5aW5nIHByb3BlciBmdW5jdGlvbmFs aXR5Lgo+Cj4gdjY6IFNwbGl0IGJhc2ljIHRlc3QgaW50byB1c2VycHRyIGFuZCBibwo+IEZpeGVk IHNvbWUgY29kaW5nIHN0eWxlIGlzc3Vlcy4KPgo+IHY3OiBFbmhhbmNlZCBpbnZhbGlkIHZtYSBw aW5uaW5nIHRlc3QgdG8gdmVyaWZ5IDMyLWJpdCBQUEdUVCBmdW5jdGlvbmFsaXR5Lgo+IEVuYWJs ZWQgdGhlIHRlc3QgZm9yIDMyLWJpdCBQUEdUVCBzeXN0ZW1zLCBhbmQgdmVyaWZ5IHBpbm5pbmcg ZmFpbHMgYWJvdmUKPiAzMi1iaXQgYWRkcmVzc2VzLiBFbmhhbmNlZCB0aGUgaGlnaCBhZHJlc3Mg cGlubmluZyB0ZXN0IHRvIGVuc3VyZSBwaW5uaW5nCj4gZmFpbHMgd2hlbiBFWEVDX09CSkVDVF9Q SU5ORUQgZmxhZyBpcyBub3QgdXNlZC4gU29tZSBtb3JlIGNvc21ldGljIGZpeGVzIHRvCj4gY2xv c2UgYnVmZmVyIGhhbmRsZXMuIENoYW5nZWQgdXNlcnB0ciBmdW5jdGlvbiB0byB1c2VkIHN5bmNo cm9uaXplZCBvcGVyYXRpb25zLgo+Cj4gdjg6IE1pbm9yIGNoYW5nZSB0byBoaWdoIGFkZHJlc3Mg cGlubmluZyB0ZXN0IGFzIHBlciBjb21tZW50Lgo+Cj4gdjk6IFNraXAgdGhlIHRlc3RzIGlmIHNv ZnRwaW4gc3VwcG9ydCBpcyBub3QgcHJlc2VudC4KPgo+IHYxMDogUmVtb3ZlZCB0cmFpbGluZyB3 aGl0ZSBzcGFjZXMuCj4KPiB2MTE6IEtlZXAgYWxwaGFiZXRpY2FsIG9yZGVyIGluIE1ha2VmaWxl IGFuZCBnaXRpZ25vcmU7IHVwZGF0ZSBlcnJvciBjb2RlCj4gcmV0dXJuZWQgd2hpbGUgdHJ5aW5n IHRvIHBpbiBhYm92ZSB0aGUgbWF4IHZtIHNpemUgKEVJTlZBTCk7IHRlc3QgYXR0ZW1wdAo+IHRv IHBpbiBhYm92ZSA0R0Igd2l0aG91dCB0aGUgc3VwcG9ydCA0OGIgZmxhZy4KPgo+IENjOiBNaWNo ZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFZpbmF5IEJlbGdh dW1rYXIgPHZpbmF5LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBUdnJ0a28g VXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPiAodjEwKQo+IFNpZ25lZC1vZmYtYnk6 IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+ICh2MTEpCj4gLS0tCj4g ICB0ZXN0cy8uZ2l0aWdub3JlICAgICAgIHwgICAgMSArCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzIHwgICAgMSArCj4gICB0ZXN0cy9nZW1fc29mdHBpbi5jICAgIHwgMTA4NCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdl ZCwgMTA4NiBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3Nv ZnRwaW4uYwoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRl bC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCgo+IGRpZmYgLS1naXQgYS90ZXN0cy8uZ2l0aWdub3Jl IGIvdGVzdHMvLmdpdGlnbm9yZQo+IGluZGV4IDYzNzcwMDcuLjdmMjBmMmIgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvLmdpdGlnbm9yZQo+ICsrKyBiL3Rlc3RzLy5naXRpZ25vcmUKPiBAQCAtMTAxLDYg KzEwMSw3IEBAIGdlbV9zZXFub193cmFwCj4gICBnZW1fc2V0X3RpbGluZ192c19ibHQKPiAgIGdl bV9zZXRfdGlsaW5nX3ZzX2d0dAo+ICAgZ2VtX3NldF90aWxpbmdfdnNfcHdyaXRlCj4gK2dlbV9z b2Z0cGluCj4gICBnZW1fc3RvcmVkd19iYXRjaGVzX2xvb3AKPiAgIGdlbV9zdHJlYW1pbmdfd3Jp dGVzCj4gICBnZW1fc3RyZXNzCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggZWY0MTU0Zi4uZDU5NDAzOCAxMDA2NDQK PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwo+IEBAIC01OCw2ICs1OCw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gICAJZ2VtX3Jlc2V0 X3N0YXRzIFwKPiAgIAlnZW1fcmluZ2ZpbGwgXAo+ICAgCWdlbV9zZXRfdGlsaW5nX3ZzX2JsdCBc Cj4gKwlnZW1fc29mdHBpbiBcCj4gICAJZ2VtX3N0b2xlbiBcCj4gICAJZ2VtX3N0b3JlZHdfYmF0 Y2hlc19sb29wIFwKPiAgIAlnZW1fc3RyZWFtaW5nX3dyaXRlcyBcCj4gZGlmZiAtLWdpdCBhL3Rl c3RzL2dlbV9zb2Z0cGluLmMgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi43YmVlMTZiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rl c3RzL2dlbV9zb2Z0cGluLmMKPiBAQCAtMCwwICsxLDEwODQgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICogQXV0aG9yczoKPiArICogICAgVmluYXkgQmVsZ2F1bWthciA8dmluYXkuYmVs Z2F1bWthckBpbnRlbC5jb20+Cj4gKyAqICAgIFRob21hcyBEYW5pZWwgPHRob21hcy5kYW5pZWxA aW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2lu Y2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDxzdGRp by5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5j bHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzeXMvdGltZS5o Pgo+ICsjaW5jbHVkZSA8bWFsbG9jLmg+Cj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2luY2x1ZGUg ImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNsdWRlICJp bnRlbF9jaGlwc2V0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9pby5oIgo+ICsjaW5jbHVkZSAiaTkx NV9kcm0uaCIKPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8c3lzL3dhaXQuaD4K PiArI2luY2x1ZGUgPHN5cy9pcGMuaD4KPiArI2luY2x1ZGUgPHN5cy9zaG0uaD4KPiArI2luY2x1 ZGUgImlndF9rbXMuaCIKPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKwo+ICsjZGVmaW5lIEJPX1NJWkUg NDA5Ngo+ICsjZGVmaW5lIE1VTFRJUEFHRV9CT19TSVpFIDIgKiBCT19TSVpFCj4gKyNkZWZpbmUg U1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUgNAo+ICsjZGVmaW5lIEVYRUNfT0JKRUNUX1BJTk5FRAko MTw8NCkKPiArI2RlZmluZSBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUyAoMTw8MykK PiArI2RlZmluZSBTSEFSRURfQlVGRkVSX1NJWkUgNDA5Ngo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3VzZXJwdHIgaTkxNV9nZW1fdXNlcnB0cjsKPiArCj4gK3N0YXRpYyB1aW50 MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICosIHZvaWQgKnB0ciwg dWludDY0X3Qgc2l6ZSk7Cj4gK3N0YXRpYyB2b2lkICpjcmVhdGVfbWVtX2J1ZmZlcih1aW50NjRf dCBzaXplKTsKPiArc3RhdGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkx NV9nZW1fdXNlcnB0ciAqdXNlcnB0cik7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fdXNlcnB0cl90 ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2JvX3Rlc3Qodm9pZCk7Cj4gK3N0YXRp YyB2b2lkIGdlbV9waW5faW52YWxpZF92bWFfdGVzdChib29sIHRlc3RfZGVjb3VwbGVfZmxhZ3Mp Owo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZv aWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKTsKPiArCj4gKyNkZWZpbmUgTk9fUFBH VFQgMAo+ICsjZGVmaW5lIEFMSUFTSU5HX1BQR1RUIDEKPiArI2RlZmluZSBGVUxMXzMyX0JJVF9Q UEdUVCAyCj4gKyNkZWZpbmUgRlVMTF80OF9CSVRfUFBHVFQgMwo+ICsvKiB1c2VzX2Z1bGxfcHBn dHQKPiArICogRmluZHMgc3VwcG9ydGVkIFBQR1RUIGRldGFpbHMuCj4gKyAqIEBmZCBEUk0gZmQK PiArICogQG1pbiBjYW4gYmUKPiArICogMCAtIE5vIFBQR1RUCj4gKyAqIDEgLSBBbGlhc2luZyBQ UEdUVAo+ICsgKiAyIC0gRnVsbCBQUEdUVCAoMzJiKQo+ICsgKiAzIC0gRnVsbCBQUEdUVCAoNDhi KQo+ICsgKiBSRVRVUk5TIHRydWUvZmFsc2UgaWYgbWluIHN1cHBvcnQgaXMgcHJlc2VudAo+ICsq Lwo+ICtzdGF0aWMgYm9vbCB1c2VzX2Z1bGxfcHBndHQoaW50IGZkLCBpbnQgbWluKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7Cj4gKwlpbnQgdmFsID0gMDsKPiArCj4gKwlt ZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiArCWdwLnBhcmFtID0gMTg7IC8qIEhBU19BTElB U0lOR19QUEdUVCAqLwo+ICsJZ3AudmFsdWUgPSAmdmFsOwo+ICsKPiArCWlmIChkcm1Jb2N0bChm ZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ ZXJybm8gPSAwOwo+ICsJcmV0dXJuIHZhbCA+PSBtaW47Cj4gK30KPiArCj4gKy8qIGhhc19zb2Z0 cGluX3N1cHBvcnQKPiArICogRmluZHMgaWYgc29mdHBpbiBmZWF0dXJlIGlzIHN1cHBvcnRlZAo+ ICsgKiBAZmQgRFJNIGZkCj4gKyovCj4gK3N0YXRpYyBib29sIGhhc19zb2Z0cGluX3N1cHBvcnQo aW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7Cj4gKwlpbnQgdmFs ID0gMDsKPiArCj4gKwltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiArCWdwLnBhcmFtID0g Mzc7IC8qIEk5MTVfUEFSQU1fSEFTX0VYRUNfU09GVFBJTiAqLwo+ICsJZ3AudmFsdWUgPSAmdmFs Owo+ICsKPiArCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZXJybm8gPSAwOwo+ICsJcmV0dXJuICh2YWwgPT0gMSk7 Cj4gK30KPiArCj4gKy8qIGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwKPiArICogSGVscGVyIHRvIGNh bGwgaW9jdGwgLSBUT0RPOiBtb3ZlIHRvIGxpYgo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQHVz ZXJwdHIgLSBwb2ludGVyIHRvIGluaXRpYWxpc2VkIHVzZXJwdHIKPiArICogUkVUVVJOUyBzdGF0 dXMgb2YgaW9jdGwgY2FsbAo+ICsqLwo+ICtzdGF0aWMgaW50IGdlbV9jYWxsX3VzZXJwdHJfaW9j dGwoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRyKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fVVNFUlBUUiwgdXNl cnB0cik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXQgPSBlcnJubzsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICsvKiBpbml0X3VzZXJwdHIKPiArICogSGVscGVyIHRoYXQgaW5pdHMg dXNlcnB0ciBhbiByZXR1cm5zIGhhbmRsZQo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQHVzZXJw dHIgLSBwb2ludGVyIHRvIGVtcHR5IHVzZXJwdHIKPiArICogQHB0ciAtIGJ1ZmZlciB0byBiZSBz aGFyZWQKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBAcm8gLSByZWFkIG9ubHkg ZmxhZwo+ICsgKiBSRVRVUk5TIGhhbmRsZSB0byBzaGFyZWQgYnVmZmVyCj4gKyovCj4gK3N0YXRp YyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRy LCB2b2lkICpwdHIsCj4gKwkJCSAgICAgdWludDY0X3Qgc2l6ZSkKPiArewo+ICsJaW50IHJldDsK PiArCj4gKwltZW1zZXQoKHZvaWQqKXVzZXJwdHIsIDAsIHNpemVvZihpOTE1X2dlbV91c2VycHRy KSk7Cj4gKwo+ICsJdXNlcnB0ci0+dXNlcl9wdHIgPSAodWludDY0X3QpcHRyOyAvKiBOZWVkIHRo ZSBjYXN0IHRvIG92ZXJjb21lIGNvbXBpbGVyIHdhcm5pbmcgKi8KPiArCXVzZXJwdHItPnVzZXJf c2l6ZSA9IHNpemU7Cj4gKwl1c2VycHRyLT5mbGFncyA9IDA7IC8qIHVzZSBzeW5jaHJvbml6ZWQg b3BlcmF0aW9uICovCj4gKwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgdXNl cnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJcmV0dXJuIHVzZXJwdHIt PmhhbmRsZTsKPiArfQo+ICsKPiArLyogY3JlYXRlX21lbV9idWZmZXIKPiArICogQ3JlYXRlcyBh IDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ICsgKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAq IFJFVFVSTlMgcG9pbnRlciB0byBidWZmZXIgb2YgQHNpemUKPiArKi8KPiArc3RhdGljIHZvaWQg KmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCXZvaWQgKmFkZHI7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXpl KTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4g Kwo+ICsvKiBzZXR1cF9leGVjX29iago+ICsgKiBwb3B1bGF0ZSBleGVjIG9iamVjdAo+ICsgKiBA ZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gKyAqIEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ ICsgKiBAZmxhZ3MgLSBhbnkgZmxhZ3MKPiArICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiAr Ki8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY19vYmooc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgKmV4ZWMsCj4gKwkJCSAgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3Ms Cj4gKwkJCSAgIHVpbnQ2NF90IG9mZnNldCkKPiArewo+ICsJbWVtc2V0KGV4ZWMsIDAsIHNpemVv ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MikpOwo+ICsJZXhlYy0+aGFuZGxlID0g aGFuZGxlOwo+ICsJZXhlYy0+ZmxhZ3MgPSBmbGFnczsKPiArCWV4ZWMtPm9mZnNldCA9IG9mZnNl dDsKPiArfQo+ICsKPiArLyogZ2VtX3N0b3JlX2RhdGFfc3ZtCj4gKyAqIHBvcHVsYXRlIGJhdGNo IGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RXT1JEX0lNTSBjb21tYW5kCj4gKyAqIEBmZDogZHJtIGZp bGUgZGVzY3JpcHRvcgo+ICsgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCj4gKyAqIEB2YWRkcjog ZGVzdGluYXRpb24gVmlydHVhbCBhZGRyZXNzCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3Jl IGF0IGRlc3RpbmF0aW9uCj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBv ciBub3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YV9zdm0oaW50IGZkLCB1aW50 MzJfdCAqY21kX2J1ZiwgdWludDY0X3QgdmFkZHIsCj4gKwkJCSAgICAgIHVpbnQzMl90IGRhdGEs IGJvb2wgZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1ZltpKytdID0gTUlf U1RPUkVfRFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0gdmFkZHIgJiAweEZGRkZGRkZDOwo+ ICsJY21kX2J1ZltpKytdID0gKHZhZGRyID4+IDMyKSAmIDB4RkZGRjsgLyogYml0cyAzMjo0NyAq Lwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKSB7Cj4gKwkJY21kX2J1 ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ICsJ fQo+ICsKPiArCXJldHVybihpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gK30KPiArCj4gKy8qIGdl bV9zdG9yZV9kYXRhCj4gKyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRoIE1JX1NUT1JFX0RX T1JEX0lNTSBjb21tYW5kCj4gKyAqIFRoaXMgb25lIGZpbGxzIHVwIHJlbG9jIGJ1ZmZlciBhcyB3 ZWxsCj4gKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAY21kX2J1ZjogYmF0Y2gg YnVmZmVyCj4gKyAqIEBkYXRhOiBkYXRhIHRvIGJlIHN0b3JlIGF0IGRlc3RpbmF0aW9uCj4gKyAq IEByZWxvYyAtIHJlbG9jYXRpb24gZW50cnkKPiArICogQGVuZDogd2hldGhlciB0byBlbmQgYmF0 Y2ggYnVmZmVyIG9yIG5vdAo+ICsqLwo+ICtzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhKGludCBm ZCwgdWludDMyX3QgKmNtZF9idWYsCj4gKwkJCSAgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBk YXRhLAo+ICsJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2Ms Cj4gKwkJCSAgYm9vbCBlbmQpCj4gK3sKPiArCWludCBpID0gMDsKPiArCj4gKwljbWRfYnVmW2kr K10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwljbWRfYnVmW2krK10gPSAwOyAvKiBsb3dlciAz MSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBuZWVkZWQgKi8KPiArCWNtZF9idWZb aSsrXSA9IDA7IC8qIHVwcGVyIDE1IGJpdHMgb2YgNDggYml0IGFkZHJlc3MgLSAwIHJlbG9jIG5l ZWRlZCAqLwo+ICsJcmVsb2MtPm9mZnNldCA9IDEgKiBzaXplb2YodWludDMyX3QpOwo+ICsJcmVs b2MtPmRlbHRhID0gMDsKPiArCXJlbG9jLT50YXJnZXRfaGFuZGxlID0gaGFuZGxlOwo+ICsJcmVs b2MtPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+d3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCXJlbG9jLT5wcmVzdW1lZF9v ZmZzZXQgPSAwOwo+ICsJY21kX2J1ZltpKytdID0gZGF0YTsKPiArCWlmIChlbmQpIHsKPiArCQlj bWRfYnVmW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJCWNtZF9idWZbaSsrXSA9IDA7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIChpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gK30KPiArCj4g Ky8qIHNldHVwX2V4ZWNidWZmZXIKPiArICogaGVscGVyIGZvciBidWZmZXIgZXhlY3V0aW9uCj4g KyAqIEBleGVjYnVmIC0gcG9pbnRlciB0byBleGVjYnVmZmVyCj4gKyAqIEBleGVjX29iamVjdCAt IHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAo+ICsgKiBAcmluZyAtIHJpbmcgdG8gYmUg dXNlZAo+ICsgKiBAYnVmZmVyX2NvdW50IC0gaG93IG1hbnUgYnVmZmVycyB0byBzdWJtaXQKPiAr ICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIKPiArKi8KPiArc3RhdGlj IHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpl eGVjYnVmLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVj X29iamVjdCwKPiArCQkJICAgICBpbnQgcmluZywgaW50IGJ1ZmZlcl9jb3VudCwgaW50IGJhdGNo X2xlbmd0aCkKPiArewo+ICsJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodWludDY0X3QpZXhlY19v YmplY3Q7Cj4gKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7Cj4gKwlleGVj YnVmLT5iYXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhlY2J1Zi0+YmF0Y2hfbGVuID0gYmF0 Y2hfbGVuZ3RoOwo+ICsJZXhlY2J1Zi0+Y2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwlleGVjYnVmLT5u dW1fY2xpcHJlY3RzID0gMDsKPiArCWV4ZWNidWYtPkRSMSA9IDA7Cj4gKwlleGVjYnVmLT5EUjQg PSAwOwo+ICsJZXhlY2J1Zi0+ZmxhZ3MgPSByaW5nOwo+ICsJaTkxNV9leGVjYnVmZmVyMl9zZXRf Y29udGV4dF9pZCgqZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVmLT5yc3ZkMiA9IDA7Cj4gK30KPiAr Cj4gKy8qIHN1Ym1pdF9hbmRfc3luYwo+ICsgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGV4ZWMgYW5k IHN5bmMgZnVuY3Rpb25zCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAZXhlY2J1ZiAtIHBvaW50 ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAYmF0Y2hfYnVmX2hhbmRsZSAtIGJhdGNoIGJ1ZmZlciBo YW5kbGUKPiArKi8KPiArc3RhdGljIHZvaWQgc3VibWl0X2FuZF9zeW5jKGludCBmZCwgc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJICAgIHVpbnQzMl90IGJh dGNoX2J1Zl9oYW5kbGUpCj4gK3sKPiArCWdlbV9leGVjYnVmKGZkLCBleGVjYnVmKTsKPiArCWdl bV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArfQo+ICsKPiArLyogZ2VtX3VzZXJwdHJf c3luYwo+ICsgKiBoZWxwZXIgZm9yIHN5bmNpbmcgdG8gQ1BVIGRvbWFpbiAtIGNvcHkvcGFzdGUg ZnJvbSB1c2VyYmxpdAo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQGhhbmRsZSAtIGJ1ZmZlciBo YW5kbGUgdG8gc3luYwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fdXNlcnB0cl9zeW5jKGludCBm ZCwgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxlLCBJ OTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiArfQo+ICsKPiArCj4g Ky8qIGdlbV9waW5fdXNlcnB0cl90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIHNo YXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqIGZvciBHUFUgdG8gd3JpdGUg ZGF0YSBpbiBpdAo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFs dWUgaXMgb2J0YWluZWQKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2Ug MHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiAr ICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAn b2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAKPiArICogU3VibWl0IGV4ZWNidWZmZXIK PiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hl cyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fdXNlcnB0cl90ZXN0KHZvaWQpCj4g K3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90 ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJd Owo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07 Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWlu dCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVp bnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFM SUFTSU5HX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7 Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJ LyogY3JlYXRlIGNwdSBidWZmZXIgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1 ZmZlcihCT19TSVpFKTsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1 Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJ CQkJCSBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0 ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZl ciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1h bmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRf YnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNl dCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxl LCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9l eGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJt aXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2Vy cHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkvKiBDaGVjayBpZiBkcml2 ZXIgcGlubmVkIHRoZSBidWZmZXIgYXMgcmVxdWVzdGVkICovCj4gKwlpZ3RfZmFpbF9vbl9mKGV4 ZWNfb2JqZWN0MlswXS5vZmZzZXQgIT0gcGlubmluZ19vZmZzZXQsCj4gKwkJCSJcbkZhaWxlZCB0 byBwaW4gYXQgcmVxdWVzdGVkIG9mZnNldCIpOwo+ICsJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBp ZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbMF0gIT0g ZGF0YSwKPiArCQkgICAgICAiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsXAo+ ICsJCQlleHBlY3RlZDogMHgleCwgZ290OiAweCV4XG4iLAo+ICsJCQlkYXRhLCBzaGFyZWRfYnVm ZmVyWzBdKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2Vt X2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNo YXJlZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fcGluX2JvCj4gKyAqIFRoaXMgdGVzdCB3 aWxsIHRlc3Qgc29mdHBpbm5pbmcgb2YgYSBnZW0gYnVmZmVyIG9iamVjdAo+ICsgKiBNYWxsb2Mg YSA0SyBidWZmZXIKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZp cnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRp b24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBm bGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAw eDEwMDAKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIHBpbm5lZCBv ZmZzZXQgbWF0Y2hlcyB0aGUgcmVxdWVzdAo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2Jv X3Rlc3Qodm9pZCkKPiArewo+ICsJaW50IGZkOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhl Y19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZF Ul9TSVpFICsgMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCB1bnNoYXJlZF9idWZf aGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jWzRd Owo+ICsJaW50IHJpbmcsIGxlbjsKPiArCXVpbnQzMl90IHZhbHVlOwo+ICsJY29uc3QgdWludDMy X3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAw MDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3Jl cXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJaWd0X3JlcXVp cmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBn ZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgZ2VtIGJ1ZmZlciAqLwo+ ICsJdW5zaGFyZWRfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiAr CS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9 IGdlbV9zdG9yZV9kYXRhKGZkLCBiYXRjaF9idWZmZXIsIHVuc2hhcmVkX2J1Zl9oYW5kbGUsIGRh dGEsCj4gKwkJCQlyZWxvYywgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5k bGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZm ZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHVuc2hhcmVkX2J1Zl9o YW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwg MCk7Cj4gKwlleGVjX29iamVjdDJbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gKwlleGVjX29i amVjdDJbMV0ucmVsb2NzX3B0ciA9ICh1aW50NjRfdClyZWxvYzsKPiArCj4gKwlyaW5nID0gSTkx NV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29i amVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBi YXRjaF9idWZfaGFuZGxlKTsKPiArCj4gKwkvKiBDaGVjayBpZiBkcml2ZXIgcGlubmVkIHRoZSBi dWZmZXIgYXMgcmVxdWVzdGVkICovCj4gKwlpZ3RfZmFpbF9vbl9mKGV4ZWNfb2JqZWN0MlswXS5v ZmZzZXQgIT0gcGlubmluZ19vZmZzZXQsCj4gKwkJCSJcbkZhaWxlZCB0byBwaW4gYXQgcmVxdWVz dGVkIG9mZnNldCIpOwo+ICsJZ2VtX3JlYWQoZmQsIHVuc2hhcmVkX2J1Zl9oYW5kbGUsIDAsICh2 b2lkKikmdmFsdWUsIDQpOwo+ICsJaWd0X2Fzc2VydCh2YWx1ZSA9PSBkYXRhKTsKPiArCj4gKwln ZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCB1bnNoYXJl ZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9tdWx0 aXBsZV9wcm9jZXNzX3Rlc3QKPiArICogUnVuIGJhc2ljIHRlc3Qgc2ltdWx0YW5lb3VzbHkgd2l0 aCBtdWx0aXBsZSBwcm9jZXNzZXMKPiArICogVGhpcyB3aWxsIHRlc3QgcGlubmluZyBzYW1lIFZB IHNlcGFyYXRlbHkgaW4gZWFjaCBwcm9jZXNzCj4gKwo+ICsgKiBmb3JrKCk7Cj4gKyAqIEV4ZWN1 dGUgYmFzaWMgdGVzdCBpbiBwYXJlbnQvY2hpbGQgcHJvY2Vzc2VzCj4gKyovCj4gKyNkZWZpbmUg TUFYX05VTV9QUk9DRVNTRVMgMTAKPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9tdWx0aXBsZV9wcm9j ZXNzX3Rlc3Qodm9pZCkKPiArewo+ICsJaW50IGZkOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJp dmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFM SUFTSU5HX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7 Cj4gKwo+ICsJaWd0X2ZvcmsoY2hpbGQsIE1BWF9OVU1fUFJPQ0VTU0VTKSB7Cj4gKwkJZ2VtX3Bp bl91c2VycHRyX3Rlc3QoKTsKPiArCX0KPiArCWlndF93YWl0Y2hpbGRyZW4oKTsKPiArCj4gKwlj bG9zZShmZCk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fcmVwaW5fdGVzdAo+ICsgKiBUaGlzIHRl c3QgdHJpZXMgdG8gcmVwaW4gYSBidWZmZXIgYXQgYSBwcmV2aW91c2x5IHBpbm5lZCB2bWEKPiAr ICogZnJvbSBhIGRpZmZlcmVudCBleGVjYnVmLgo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiAr ICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsg KiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVm ZmVyCj4gKyAqIFVzZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGJh dGNoIGJ1ZmZlcgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmpl Y3QKPiArICogU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMCBWTUEKPiArICog U3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNo YXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKwo+ICsgKiBDcmVhdGUgc2Vjb25kIHNoYXJlZCBi dWZmZXIKPiArICogRm9sbG93IGFsbCBzdGVwcyBhYm92ZQo+ICsgKiBFeGVjcHQsIGZvciBvZmZz ZXQsIHVzZSBWTUEgb2YgZmlyc3QgYnVmZmVyIGFib3ZlCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVy Cj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzZWNvbmQgc2hhcmVkIGJ1ZmZl ciBtYXRjaGVzIERBVEEKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3JlcGluX3Rlc3Qodm9pZCkK PiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1 c2VycHRyMTsKPiArCWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJdWlu dDMyX3QgKnNoYXJlZF9idWZmZXIxOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmpl Y3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpF ICsgMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZSwg c2hhcmVkX2J1Zl9oYW5kbGUxOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90 IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7 Cj4gKwo+ICsJLyogQ3JlYXRlIGdlbSBvYmplY3QgKi8KPiArCWZkID0gZHJtX29wZW5fZHJpdmVy KERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFT SU5HX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4g Kwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiAr CS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgZmlyc3QgZWxlbWVudHMgdG8gMHgwICovCj4gKwlz aGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVm ZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlclswXSA9 IDB4MDsKPiArCXNoYXJlZF9idWZmZXIxWzBdID0gMHgwOwo+ICsKPiArCS8qIHNoYXJlIHdpdGgg R1BVIGFuZCBnZXQgaGFuZGxlcyAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJw dHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiArCXNo YXJlZF9idWZfaGFuZGxlMSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIxLCBzaGFyZWRfYnVm ZmVyMSwKPiArCQkJCQkgIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZl ciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwg YmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUo ZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBz dWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJb MF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBp bm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsK PiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVu KTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9h c3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlpZ3Rf YXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IGRhdGEpOwo+ICsKPiArCS8qIFNlY29uZCBidWZmZXIg Ki8KPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiAr CXBpbm5pbmdfb2Zmc2V0ID0gZXhlY19vYmplY3QyWzBdLm9mZnNldDsKPiArCWxlbiA9IGdlbV9z dG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1 ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwg bGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCS8qIFBpbiBhdCBz aGFyZWRfYnVmZmVyLCBub3Qgc2hhcmVkX2J1ZmZlcjEgKi8KPiArCS8qIFdlIGFyZSByZXF1ZXN0 aW5nIGFkZHJlc3Mgd2hlcmUgYW5vdGhlciBidWZmZXIgd2FzIHBpbm5lZCBwcmV2aW91c2x5ICov Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZTEs Cj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4g Kwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigm ZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5j KGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZk LCBzaGFyZWRfYnVmX2hhbmRsZTEpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBd Lm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVy MSA9PSBkYXRhKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJ Z2VtX2Nsb3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwo+ICsJ ZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ICt9Cj4gKwo+ ICsKPiArLyogZ2VtX3JlcGluX292ZXJsYXBfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBhdHRl bXB0IHRvIHBpbiB0d28gYnVmZmVycyBhdCB0aGUgc2FtZSBWTUEgYXMgcGFydCBvZiB0aGUgc2Ft ZQo+ICsgICBleGVjYnVmZmVyIG9iamVjdAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4g KyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiAr ICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIg dG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBlYWNoIGJ1ZmZlcgo+ICsgKiBVc2Ugc2Ft ZSB2aXJ0dWFsIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIGJhdGNoIGJ1ZmZl cgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gYm90aCBleGVjIG9iamVjdHMK PiArICogU2V0ICdvZmZzZXQnIGluIGJvdGggZXhlYyBvYmplY3RzIHRvIHNhbWUgVk1BCj4gKyAq IFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIENvbW1hbmQgc2hvdWxkIHJldHVybiBFSU5WQUwsIHNp bmNlIHdlIGFyZSB0cnlpbmcgdG8gcGluIHRvIHNhbWUgVk1BCj4gKyovCj4gK3N0YXRpYyB2b2lk IGdlbV9waW5fb3ZlcmxhcF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNl cnB0cjsKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlpbnQgZmQsIHJldDsKPiAr CXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXIxOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzNdOwo+ICsJdWludDMyX3Qgc2hh cmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4g Kwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVu X2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZk LCBBTElBU0lOR19QUEdUVCkpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChm ZCkpOwo+ICsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsK PiArCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSAqIDIpOwo+ICsK PiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNl cnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsCj4gKwkJCQkJIEJPX1NJWkUpOwo+ICsJ c2hhcmVkX2J1Zl9oYW5kbGUxID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0cjEsIHNoYXJlZF9i dWZmZXIxLAo+ICsJCQkJCSAgQk9fU0laRSAqIDIpOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5k IGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1 Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQp Owo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgc2hhcmVkX2J1Zl9oYW5kbGUx LAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCj4g KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVj YnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwo+ICsJcmV0ID0gZHJtSW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwgJmV4ZWNidWYpOwo+ICsKPiArCS8q IGV4cGVjdCB0byBmYWlsICovCj4gKwlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwo+ICsJaWd0X2Fz c2VydChlcnJubyA9PSBFSU5WQUwpOwo+ICsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVk X2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIxKTsKPiArfQo+ICsKPiArLyogZ2VtX3Nv ZnRwaW5fc3RyZXNzX3Rlc3QKPiArICogU3RyZXNzIHRlc3Qgd2hpY2ggY3JlYXRlcyAxMEsgYnVm ZmVycyBhbmQgc2hhcmVzIHdpdGggR1BVCj4gKyAqIENyZWF0ZSAxMDBLIHVpbnQzMiBidWZmZXJz IG9mIHNpemUgNEsgZWFjaAo+ICsgKiBTaGFyZSB3aXRoIEdQVSB1c2luZyB1c2VycHRyIGlvY3Rs Cj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSBpbiBmaXJzdCBlbGVtZW50 IG9mIGVhY2ggYnVmZmVyCj4gKyAqIFBpbiBlYWNoIGJ1ZmZlciB0byB2YXJ5aW5nIGFkZHJlc3Nl cyBzdGFydGluZyBmcm9tIDB4ODAwMDAwMDAwMDAwIGdvaW5nIGJlbG93Cj4gKyAqIEV4ZWN1dGUg QmF0Y2ggQnVmZmVyIG9uIEJsaXQgcmluZyBTVFJFU1NfTlVNX0xPT1BTIHRpbWVzCj4gKyAqIFZh bGlkYXRlIGV2ZXJ5IGJ1ZmZlciBoYXMgREFUQSBpbiBmaXJzdCBlbGVtZW50Cj4gKyAqIFJpbnNl IGFuZCBSZXBlYXQgb24gUmVuZGVyIHJpbmcKPiArKi8KPiArI2RlZmluZSBTVFJFU1NfTlVNX0JV RkZFUlMgMTAwMDAwCj4gKyNkZWZpbmUgU1RSRVNTX05VTV9MT09QUyAxMDAKPiArI2RlZmluZSBT VFJFU1NfU1RPUkVfQ09NTUFORFMgNCAqIFNUUkVTU19OVU1fQlVGRkVSUwo+ICsKPiArc3RhdGlj IHZvaWQgZ2VtX3NvZnRwaW5fc3RyZXNzX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNl cnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMyX3QgKipzaGFyZWRfYnVmZmVyOwo+ ICsJdWludDMyX3QgKnNoYXJlZF9oYW5kbGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNi dWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhl Y19vYmplY3QyOwo+ICsJdWludDMyX3QgKmJhdGNoX2J1ZmZlcjsKPiArCXVpbnQzMl90IGJhdGNo X2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJaW50IGJ1ZiwgbG9vcDsKPiArCXVp bnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAwMDAwMDAwMDA7Cj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0 dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1 cHBvcnQoZmQpKTsKPiArCj4gKwo+ICsJLyogQWxsb2NhdGUgYmxvYnMgZm9yIGFsbCBkYXRhIHN0 cnVjdHVyZXMgKi8KPiArCXNoYXJlZF9oYW5kbGUgPSBjYWxsb2MoU1RSRVNTX05VTV9CVUZGRVJT LCBzaXplb2YodWludDMyX3QpKTsKPiArCXNoYXJlZF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX05V TV9CVUZGRVJTLCBzaXplb2YodWludDMyX3QgKikpOwo+ICsJZXhlY19vYmplY3QyID0gY2FsbG9j KFNUUkVTU19OVU1fQlVGRkVSUyArIDEsCj4gKwkJCQlzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIpKTsKPiArCS8qIDQgZHdvcmRzIHBlciBidWZmZXIgKyAyIGZvciB0aGUg ZW5kIG9mIGJhdGNoYnVmZmVyICovCj4gKwliYXRjaF9idWZmZXIgPSBjYWxsb2MoU1RSRVNTX1NU T1JFX0NPTU1BTkRTICsgMiwgc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKwliYXRjaF9idWZfaGFuZGxl ID0gZ2VtX2NyZWF0ZShmZCwgKFNUUkVTU19TVE9SRV9DT01NQU5EUyArIDIpKjQpOwo+ICsKPiAr CS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICovCj4gKwlsZW4g PSAwOwo+ICsJZm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsK PiArCQlzaGFyZWRfYnVmZmVyW2J1Zl0gPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiAr CQkqc2hhcmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiArCj4gKwkJLyogc2hhcmUgd2l0 aCBHUFUgKi8KPiArCQlzaGFyZWRfaGFuZGxlW2J1Zl0gPSBpbml0X3VzZXJwdHIoZmQsICZ1c2Vy cHRyLAo+ICsJCQkJCQkgIHNoYXJlZF9idWZmZXJbYnVmXSwKPiArCQkJCQkJICBCT19TSVpFKTsK PiArCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MltidWZdLCBzaGFyZWRfaGFuZGxl W2J1Zl0sCj4gKwkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfAo+ICsJCQkgICAgICAgRVhF Q19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gKwkJCSAgICAgICBwaW5uaW5nX29mZnNl dCk7Cj4gKwkJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxl bi80KSwKPiArCQkJCQkgIHBpbm5pbmdfb2Zmc2V0LCBidWYsCj4gKwkJCQkJICAoYnVmID09IFNU UkVTU19OVU1fQlVGRkVSUy0xKT8gXAo+ICsJCQkJCSAgdHJ1ZTpmYWxzZSk7Cj4gKwo+ICsJCS8q IGRlY3JlbWVudGFsIDRLIGFsaWduZWQgYWRkcmVzcyAqLwo+ICsJCXBpbm5pbmdfb2Zmc2V0IC09 IEFMSUdOKEJPX1NJWkUsIDQwOTYpOwo+ICsJfQo+ICsKPiArCS8qIHNldHVwIGNvbW1hbmQgYnVm ZmVyICovCj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZl ciwgbGVuKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZG RVJTXSwgYmF0Y2hfYnVmX2hhbmRsZSwKPiArCQkgICAgICAgMCwgMCk7Cj4gKwo+ICsJLyogV2Ug d2FudCB0byBydW4gdGhpcyBvbiBCTFQgcmluZyBpZiBwb3NzaWJsZSAqLwo+ICsJaWYgKEhBU19C TFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpIHsKPiArCQlyaW5nID0gSTkxNV9FWEVD X0JMVDsKPiArCj4gKwkJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCBy aW5nLAo+ICsJCQkJIFNUUkVTU19OVU1fQlVGRkVSUyArIDEsIGxlbik7Cj4gKwo+ICsJCWZvciAo bG9vcCA9IDA7IGxvb3AgPCBTVFJFU1NfTlVNX0xPT1BTOyBsb29wKyspIHsKPiArCQkJc3VibWl0 X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwkJCS8qIFNldCBw aW5uaW5nIG9mZnNldCBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCj4gKwkJCXBpbm5pbmdfb2Zm c2V0ID0gMHg4MDAwMDAwMDAwMDA7Cj4gKwkJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVN X0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfaGFu ZGxlW2J1Zl0pOwo+ICsJCQkJaWd0X2Fzc2VydChleGVjX29iamVjdDJbYnVmXS5vZmZzZXQgPT0g cGlubmluZ19vZmZzZXQpOwo+ICsJCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1ZmZlcltidWZd ICE9IGJ1ZiwgXAo+ICsJCQkJIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgaXRlcmF0aW9uICVkOiAw eCUwOFhcbiIsIFwKPiArCQkJCWJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gKwkJ CQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiArCQkJfQo+ICsJCQkv KiBSZXNldCB0aGUgYnVmZmVyIGVudHJpZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCj4gKwkJCWZv cihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCQkqc2hh cmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4g KwkvKiBOb3cgUmVuZGVyIFJpbmcgKi8KPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJ c2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ICsJCQkgU1RS RVNTX05VTV9CVUZGRVJTICsgMSwgbGVuKTsKPiArCWZvciAobG9vcCA9IDA7IGxvb3AgPCBTVFJF U1NfTlVNX0xPT1BTOyBsb29wKyspIHsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVm LCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlwaW5uaW5nX29mZnNldCA9IDB4ODAwMDAwMDAwMDAw Owo+ICsJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4g KwkJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gKwkJCWlndF9h c3NlcnQoZXhlY19vYmplY3QyW2J1Zl0ub2Zmc2V0ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiArCQkJ aWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1ZmZlcltidWZdICE9IGJ1ZiwgXAo+ICsJCQkiTWlzbWF0 Y2ggaW4gYnVmZmVyICVkLCBcCj4gKwkJCWl0ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBidWYsIGxv b3AsICpzaGFyZWRfYnVmZmVyW2J1Zl0pOwo+ICsJCQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihC T19TSVpFLCA0MDk2KTsKPiArCQl9Cj4gKwkJLyogUmVzZXQgdGhlIGJ1ZmZlciBlbnRyaWVzIGZv ciBuZXh0IGl0ZXJhdGlvbiAqLwo+ICsJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JV RkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJT OyBidWYrKykgewo+ICsJCWdlbV9jbG9zZShmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQlm cmVlKHNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gKwl9Cj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1 Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2hhbmRsZSk7Cj4g KwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJZnJlZShleGVjX29iamVjdDIpOwo+ICsJZnJlZShi YXRjaF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcgo+ ICsgKiBDcmVhdGUgYSBidWZmZXIgc3Bhbm5pbmcgbXVsdGlwbGUgcGFnZXMsIGFuZCBzaGFyZSB3 aXRoIEdQVS4KPiArICogV3JpdGUgdG8gZXZlcnkgZWxlbWVudCBvZiB0aGUgYnVmZmVyCj4gKyAq IGFuZCB2ZXJpZnkgY29ycmVjdCBjb250ZW50cy4KPiArCj4gKyAqIENyZWF0ZSA4SyBidWZmZXIK PiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gYWxsIGVsZW1lbnRzIG9mIGJ1ZmZlcgo+ICsgKiBF eGVjdXRlIEJhdGNoIEJ1ZmZlcgo+ICsgKiBWYWxpZGF0ZSBldmVyeSBlbGVtZW50IGhhcyBEQVRB Cj4gKyovCj4gKwo+ICsjZGVmaW5lIERXT1JEX1NJWkUgc2l6ZW9mKHVpbnQzMl90KQo+ICsjZGVm aW5lIEJCX1NJWkUgKChNVUxUSVBBR0VfQk9fU0laRSAvIERXT1JEX1NJWkUpICogU1RPUkVfQkFU Q0hfQlVGRkVSX1NJWkUpICsgMgo+ICsjZGVmaW5lIE5VTV9EV09SRFMgKE1VTFRJUEFHRV9CT19T SVpFL3NpemVvZih1aW50MzJfdCkpCj4gK3N0YXRpYyB2b2lkIGdlbV93cml0ZV9tdWx0aXBhZ2Vf YnVmZmVyX3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJ aW50IGZkOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwl1aW50MzJfdCBzaGFyZWRf aGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJ c3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWlu dDMyX3QgYmF0Y2hfYnVmZmVyW0JCX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRs ZTsKPiArCWludCByaW5nLCBsZW4sIGo7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldD0weDEw MDA7Cj4gKwl1aW50NjRfdCB2YWRkcjsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklW RVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19Q UEdUVCkpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiAr CWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBzaXplb2YoYmF0Y2hfYnVmZmVyKSk7 Cj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoTVVMVElQQUdFX0JPX1NJWkUp Owo+ICsKPiArCWxlbiA9IDA7Cj4gKwltZW1zZXQoYmF0Y2hfYnVmZmVyLCAwLCBzaXplb2YoYmF0 Y2hfYnVmZmVyKSk7Cj4gKwltZW1zZXQoc2hhcmVkX2J1ZmZlciwgMCwgTVVMVElQQUdFX0JPX1NJ WkUpOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfaGFuZGxlID0gaW5p dF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCSAgICAgTVVMVElQ QUdFX0JPX1NJWkUpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVk X2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7 Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZHMgKi8K PiArCXZhZGRyID0gcGlubmluZ19vZmZzZXQ7Cj4gKwlmb3Ioaj0wOyBqPCBOVU1fRFdPUkRTOyBq KyspIHsKPiArCQlsZW4gKz0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIgKyAo bGVuLzQpLCB2YWRkciwKPiArCQkJCQkgIGosCj4gKwkJCQkJICAoaiA9PSBOVU1fRFdPUkRTIC0g MSkgPyB0cnVlOmZhbHNlKTsKPiArCQl2YWRkciArPSBzaXplb2Yoc2hhcmVkX2J1ZmZlclswXSk7 ICAvKiA0IGJ5dGVzICovCj4gKwl9Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFu ZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVm ZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFu ZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCXNldHVwX2V4 ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1p dF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJw dHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChleGVjX29iamVj dDJbMF0ub2Zmc2V0ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiArCWZvcihqID0gMDsgaiA8IChNVUxU SVBBR0VfQk9fU0laRS9zaXplb2YodWludDMyX3QpKTsgaisrKSB7Cj4gKwkJaWd0X2ZhaWxfb25f ZihzaGFyZWRfYnVmZmVyW2pdICE9IGosCj4gKwkJIk1pc21hdGNoIGluIGluZGV4ICVkOiAweCUw OFhcbiIsIGosIHNoYXJlZF9idWZmZXJbal0pOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwg YmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJlZF9oYW5kbGUpOwo+ICsJ Y2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdl bV9waW5faW52YWxpZF92bWFfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCByZXF1ZXN0IHRvIHBp biBhIHNoYXJlZCBidWZmZXIgdG8gYW4gaW52YWxpZAo+ICsgKiBWTUEgID4gNDgtYml0IGFkZHJl c3MgaWYgc3lzdGVtIHN1cHBvcnRzIDQ4QiBQUEdUVDsgaXQgYWxzbwo+ICsgKiB3aWxsIHRlc3Qg dGhhdCBhbnkgYXR0ZW1wdCBvZiB1c2luZyBhIDQ4LWJpdCBhZGRyZXNzIHJlcXVpcmVzCj4gKyAq IHRoZSBTVVBQT1JUU180OEJfQUREUkVTUyBmbGFnLgo+ICsgKiBJZiBzeXN0ZW0gc3VwcG9ydHMg MzJCIFBQR1RULCBpdCB3aWxsIHRlc3QgdGhlIGVxdWl2YWxlbnQgaW52YWxpZCBWTUEKPiArICog Q3JlYXRlIHNoYXJlZCBidWZmZXIgb2Ygc2l6ZSA0Swo+ICsgKiBUcnkgYW5kIFBpbiBvYmplY3Qg dG8gaW52YWxpZCBhZGRyZXNzCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5faW52YWxpZF92 bWFfdGVzdChib29sIHRlc3RfZGVjb3VwbGVfZmxhZ3MpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJw dHIgdXNlcnB0cjsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gKwl1aW50MzJfdCBz aGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nOwo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRy ZXNzX2Zvcl80OGIgPSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gKwl1 aW50NjRfdCBpbnZhbGlkX2FkZHJlc3NfZm9yXzMyYiA9IDB4OTAwMDAwMDAwOyAvKiAzNiBiaXQg YWRkcmVzcyAqLwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4g KwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSB8fAo+ ICsJCSAgICB1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfMzJfQklUX1BQR1RUKSk7Cj4gKwlpZ3Rf cmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4gKwo+ICsJc2hhcmVkX2J1ZmZlciA9 IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZG RkZGOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9 IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUpOwo+ICsK PiArCWlmICh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSAmJiAhdGVzdF9k ZWNvdXBsZV9mbGFncykgewo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNo YXJlZF9idWZfaGFuZGxlLAo+ICsJCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhFQ19P QkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gKwkJCSAgICAgICBpbnZhbGlkX2FkZHJlc3Nf Zm9yXzQ4Yik7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFRoaXMgYWxzbyBmYWlscyBpbiA0OGIgd2l0 aG91dCA0OEJfQUREUkVTUyBzdXBwb3J0IGZsYWcgKi8KPiArCQlzZXR1cF9leGVjX29iaigmZXhl Y19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNU X1BJTk5FRCwgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIpOwo+ICsJfQo+ICsKPiArCXJpbmcgPSBJ OTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNf b2JqZWN0MiwgcmluZywgMSwgMCk7Cj4gKwo+ICsJLyogRXhwZWN0IGV4ZWNidWYgdG8gZmFpbCAq Lwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsCj4gKwkJICAgICAgIERSTV9JT0NUTF9JOTE1X0dFTV9F WEVDQlVGRkVSMiwKPiArCQkgICAgICAgJmV4ZWNidWYpOwo+ICsKPiArCWlndF9hc3NlcnQoZXJy bm8gPT0gRUlOVkFMKTsKPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwo+ICsJZ2VtX2Ns b3NlKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJl ZF9idWZmZXIpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdAo+ ICsgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBhbmQgY3JlYXRlIGEg Y29tbWFuZAo+ICsgKiBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1w dCB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gMzIgYml0cy4KPiArICogQ1BVIHdpbGwg cmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4gKwo+ICsgKiBN YWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNp bmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEg dG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVm ZmVyIGFzIDB4MTEwMDAwMDAwMCAoPiAzMiBiaXQpCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5O RUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3Qg dG8gc2hhcmVkIGJ1ZmZlciBWTUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5 IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyov Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KHZvaWQpCj4gK3sK PiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90ICpz aGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07Cj4g Kwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCBy aW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2 NF90IGhpZ2hfYWRkcmVzcyA9IDB4MTExMUZGRkYwMDA7IC8qIDQ0IGJpdCBhZGRyZXNzICovCj4g Kwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJl KHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJl KGhhc19zb2Z0cGluX3N1cHBvcnQoZmQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIsIHNldCB0 byBhbGwgMHhGJ3MgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19T SVpFKTsKPiArCSpzaGFyZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3 aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2Vy cHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBi dWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0o ZmQsIGJhdGNoX2J1ZmZlciwgaGlnaF9hZGRyZXNzLCBkYXRhLCB0cnVlKTsKPiArCWdlbV93cml0 ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8q IHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCB8 IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTLCBoaWdoX2FkZHJlc3MpOwo+ICsJc2V0 dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4g Kwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigm ZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5j KGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZk LCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChleGVjX29iamVjdDJbMF0u b2Zmc2V0ID09IGhpZ2hfYWRkcmVzcyk7Cj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlmIHZh bHVlIGNoYW5nZXMgKi8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRh LAo+ICsJCSJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgXAo+ICsJCWV4cGVj dGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0pOwo+ICsKPiAr CWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJl ZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4g K30KPiArCj4gKy8qIGdlbV9waW5fbmVhcl80OEJpdF90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxs IGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsCj4gKyAqIGFuZCBjcmVhdGUgYSBjb21tYW5kIGZvciBH UFUgdG8gd3JpdGUgZGF0YSBpbiBpdC4gSXQgd2lsbCBhdHRlbXB0Cj4gKyAqIHRvIHBpbiB0aGUg YnVmZmVyIGF0IGFkZHJlc3MgPiA0NyBiaXRzIDw9IDQ4LWJpdC4KPiArICogQ1BVIHdpbGwgcmVh ZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4gKwo+ICsgKiBNYWxs b2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcg dXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8g Zmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVy IGFzIHJhbmdlIGJldHdlZW4gNDctYml0IGFuZCA0OC1iaXQKPiArICogU2V0IEVYRUNfT0JKRUNU X1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9i amVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBW ZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEK PiArKi8KPiArI2RlZmluZSBCRUdJTl9ISUdIX0FERFJFU1MgMHg3RkZGRkZGRkYwMDAKPiArI2Rl ZmluZSBFTkRfSElHSF9BRERSRVNTIDB4RkZGRkZGRkZDMDAwCj4gKyNkZWZpbmUgQUREUkVTU19J TkNSRU1FTlQgMHgyMDAwMDAwMDAwCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fbmVhcl80OEJpdF90 ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsK PiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj YnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhl Y19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWlu dDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywg bGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBo aWdoX2FkZHJlc3M7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsK PiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsK PiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1cHBvcnQoZmQpKTsKPiArCj4gKwliYXRjaF9i dWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNw dSBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVf bWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFyZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiAr Cj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3Vz ZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBCT19TSVpFKTsKPiArCj4gKwlmb3Ig KGhpZ2hfYWRkcmVzcyA9IEJFR0lOX0hJR0hfQUREUkVTUzsgaGlnaF9hZGRyZXNzIDw9IEVORF9I SUdIX0FERFJFU1M7Cj4gKwkJCQkJCWhpZ2hfYWRkcmVzcys9QUREUkVTU19JTkNSRU1FTlQpIHsK PiArCQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwkJ bGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIGhpZ2hfYWRkcmVzcywK PiArCQkJCQlkYXRhLCB0cnVlKTsKPiArCQlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCQkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8K PiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwK PiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4 Ql9BRERSRVNTLAo+ICsJCQkgICAgICAgaGlnaF9hZGRyZXNzKTsKPiArCQlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwkJcmlu ZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwkJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhl Y19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNi dWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9i dWZfaGFuZGxlKTsKPiArCj4gKwkJaWd0X2Fzc2VydChleGVjX29iamVjdDJbMF0ub2Zmc2V0ID09 IGhpZ2hfYWRkcmVzcyk7Cj4gKwkJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFu Z2VzICovCj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJ IlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBleHBlY3RlZDogMHgleCwgXAo+ ICsJCWdvdDogMHgleFxuLCAweCUiUFJJeDY0IiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0sIGhp Z2hfYWRkcmVzcyk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxl KTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArCj4gK2ludCBtYWluKGludCBhcmdj LCBjaGFyKiBhcmd2W10pCj4gK3sKPiArCWlndF9zdWJ0ZXN0X2luaXQoYXJnYywgYXJndik7Cj4g KwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJLyogQWxsIHRlc3RzIG5lZWQgUFBH VFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fdXNlcnB0ciIpIHsKPiArCQln ZW1fcGluX3VzZXJwdHJfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fYm8i KSB7Cj4gKwkJZ2VtX3Bpbl9ib190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX211 bHRpcGxlX3Byb2Nlc3MiKSB7Cj4gKwkJZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdCgpOwo+ICsJ fQo+ICsJaWd0X3N1YnRlc3QoImdlbV9yZXBpbiIpIHsKPiArCQlnZW1fcmVwaW5fdGVzdCgpOwo+ ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fb3ZlcmxhcCIpIHsKPiArCQlnZW1fcGluX292 ZXJsYXBfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV93cml0ZV9tdWx0aXBhZ2Vf YnVmZmVyIikgewo+ICsJCWdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3QoKTsKPiArCX0K PiArCj4gKwkvKiBGb2xsb3dpbmcgdGVzdHMgbmVlZCAzMi80OCBCaXQgUFBHVFQgc3VwcG9ydCAq Lwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5faW52YWxpZF92bWEiKSB7Cj4gKwkJZ2VtX3Bpbl9p bnZhbGlkX3ZtYV90ZXN0KGZhbHNlKTsKPiArCX0KPiArCj4gKwkvKiBGb2xsb3dpbmcgdGVzdHMg bmVlZCA0OCBCaXQgUFBHVFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5faGln aF9hZGRyZXNzX3dpdGhvdXRfY29ycmVjdF9mbGFnIikgewo+ICsJCWdlbV9waW5faW52YWxpZF92 bWFfdGVzdCh0cnVlKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fc29mdHBpbl9zdHJlc3Mi KSB7Cj4gKwkJZ2VtX3NvZnRwaW5fc3RyZXNzX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0 KCJnZW1fcGluX2hpZ2hfYWRkcmVzcyIpIHsKPiArCQlnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0 KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9uZWFyXzQ4Qml0Iikgewo+ICsJCWdl bV9waW5fbmVhcl80OEJpdF90ZXN0KCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2V4aXQoKTsKPiArfQo+ Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==